Ваши комментарии
Добрый день!
Это можно сделать двумя запросами, первый: СтрокиТоваров = select (Product, Packing, CurrentQuantity, DeclaredQuantity)
from Document.DeclaredItems
group by ProductId, PackingId
группировать лучше по полям ProductId, PackingId, а не Product и Packing, по вычислимому полю ОтображениеВСписке лучше не использовать группировку. Использовать выражение sum не нужно, количества и так будут суммироваться.
Дальше можно выбрать строки с отличающимися количествами действием присваивания: СтрокиДляПоказа = СтрокиТоваров.FindByUnderloadedOrOverloaded(true)
Попробуйте так: CellLines = Document.CurrentItems.FindByField("CellBarcode", CurrentCellBarcode), потом запрос: select (*) from CellLines group by ProductId. Группировка, вообще, не быстрая операция.
Если нужно хранить информацию об остатках номенклатуры в ячейках и отображать ее на ТСД, потребуется дополнительная таблица Остатки, добавьте таблицу в Панели управления, поля могут быть такими: ИдСклада, НаименованиеСклада, НаименованиеЯчейки, ИдНоменклатуры, ХарактеристикаНоменклатуры (если ведется учет по характеристикам), Остаток.
Данные в таблицу нужно выгружать из 1С, как это сделать см. http://www.cleverence.ru/files/14505/Mobile%20SMARTS%203.0.%20%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%20%D1%81%20%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B9.pdf
раздел Дополнительные таблицы.
См. также http://www.cleverence.ru/devlib/TerminalConnector_v3/index.html Для выгрузки можно использовать функции объекта AddIn.Cl.TerminalConnector: НачатьВыгрузкуТаблицы, ДобавитьВВыгрузкуТаблицы, ЗавершитьВыгрузкуТаблицы.
После сканирования на терминале ШК ячейки, получаем имя ячейки, по имени выбираем из таблицы остатков записи, показываем их с помощью действия "Просмотр записей".
Как именно некорректно генерируются ШК? Приведите, пожалуйста, скриншоты с настройками шаблонов ячеек и того, что получается при выгрузке в Mobile SMARTS.
У документов, создаваемых на терминале, нет ШК и вряд ли потребуется. Смысл ШК документа в том, что есть некий бумажный носитель с которого этот ШК сканируют и документ открывается. Если документ создают на терминале, откуда сканировать ШК?
У документа есть Идентификатор (Id), но это не ШК, Id для новых документов формируется так: "new_" + <новый Guid>. Т.е. этот Id никак не связан ни с какими объектами 1С, он просто обеспечивает уникальность. Если вдруг для чего-то все-таки нужен ШК для новых документов, то можно в конфигурации Mobile SMARTS сделать присваивание Document.Barcode = значение. Что присвоим, то и будет ШК. Например, может быть выполнен запрос в 1С и ШК возвращен оттуда.
- Документы могут по существу и 1 день разницы (разумный срок), как пример 31 декабря документ последний под номером 3 а 1 января мы создаем документ под номером 3
Т.е. за весь прошлый год создали 3 документа, и потом за первый день работы вдруг тоже 3 документа? Какая-то гипотетическая ситуация. Значит, нужно формировать ШК с учетом даты документа: SK000003_20161231, SK000003_20170101. Если получаем документ он-лайн из 1С по ШК, разбирать такое значение, получать номер и дату, а по ним документ.
Для работы с базой SQL Server в конфигурацию Mobile SMARTS нужно добавить коннектор к SQL Server и настроить подключение к базе:
Для получения данных из базы можно использовать действие Вызов внешней системы http://www.cleverence.ru/support/%D0%94%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5+%C2%AB%D0%92%D1%8B%D0%B7%D0%BE%D0%B2+%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0+%D0%B2%D0%BD%D0%B5%D1%88%D0%BD%D0%B5%D0%B9+%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B%C2%BB/
Пример обычного запроса:
Также есть возможность обрабатывать с помощью коннектора события сервера Mobile SMARTS (http://www.cleverence.ru/support/%D0%A1%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D0%B5+%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F/).
Для получения номенклатуры он-лайн по запросу с терминала используется событие ТоварНеНайден (http://www.cleverence.ru/support/%D0%A2%D0%BE%D0%B2%D0%B0%D1%80%D0%9D%D0%B5%D0%9D%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD/)
Создайте в базе SQL хранимую процедуру
CREATE PROCEDURE [dbo].[GetProduct]
(
@productId varchar(50),
@packingId varchar(50),
@userId varchar(50),
@mode int,
@resultXml xml OUTPUT
)
AS
BEGIN
...
END
В обработчике события ТоварНеНайден укажите SqlServerConnector:
IF @mode = 1
BEGIN
SET @resultXml = '<?xml version="1.0" encoding="windows-1251"?>
<PackedProduct expiredDate="0001-01-01T00:00:
<Product barcode="" basePackingId="шт" id="cbcf492a-55bc-11d9-848a-
<Packings><Packing barcode="888999" id="шт" marking="" Int32_qty="0" Int32_price="27960" currency="RUB"></Packing></
</Product>
<Packing barcode="888999" id="шт" marking="" Int32_qty="0" Int32_price="27960" currency="RUB"></Packing>
<Quantities />
</PackedProduct>'
END
При попадании завершенного документа с ТСД на сервер Mobile SMARTS вызывается событие ДокументЗавершен, с помощью обработчика этого события можно загрузить документ в базу SQL, есть два варианта обработчика для sql, первый (SqlServerConnector:
(
@documentId varchar(50),
@resultXml xml OUTPUT
)
AS
BEGIN
/*
SET @resultXml = '';
END
Второй (SqlServerConnector:
CREATE PROCEDURE [dbo].[DocumentCompletedXml]
(
@documentXml xml,
@result int OUTPUT
)
AS
BEGIN
SET @result = 1;
END
documentXml содержит xml документа Mobile SMARTS, который можно разобрать внутри процедуры.
Если через result возвращается 1, коннектор удалит документ с сервера.
Для получения списка документов для работы на терминале и выгрузке из базы SQL используются события ПолучитьСписокДокументов и ПолучитьДокумент:
В Панеле управления укажите обработчики таким образом:
Примеры процедур:
CREATE PROCEDURE [dbo].[GetDocumentsList]
(
@userId varchar(50),
@documentTypeName varchar(50),
@resultXml xml OUTPUT
)
AS
BEGIN
SET @resultXml = '<?xml version="1.0" encoding="windows-1251"?>
<DocumentDescriptionCollection xmlns:clr="http://schemas.
<DocumentDescription barcode="123" createDate="0001-01-01T00:00:
</DocumentDescription>
</
END
CREATE PROCEDURE [dbo].[GetDocument]
(
@userId varchar(50),
@documentTypeName varchar(50),
@documentId varchar(50),
@mode int,
@resultXml xml OUTPUT
)
AS
BEGIN
SET @resultXml = '<?xml version="1.0" encoding="windows-1251"?>
<Document xmlns:clr="http://schemas.
<DeclaredItems>
<DocumentItem declaredQuantity="8" expiredDate="0001-01-01T00:00:
<DocumentItem declaredQuantity="20" expiredDate="0001-01-01T00:00:
<DocumentItem declaredQuantity="9" expiredDate="0001-01-01T00:00:
<DocumentItem declaredQuantity="20" expiredDate="0001-01-01T00:00:
</DeclaredItems><CurrentItems capacity="0" />
<ClassificatorIds capacity="0" />
<Classificators capacity="0" />
<ClassificatorUsings capacity="0" /><Errors capacity="0" />
<Fields capacity="4"><FieldValue fieldName="КонтрольКолва"><
</Fields>
<Tables capacity="0" />
</Document>'
END
Также не обязательно формировать xml вручную, можно использовать COM-объекты Mobile SMARTS.
Серверная база tsd - это промежуточная база драйвера?
У Вас в настройках подключения не указана обработка драйвера. Коннектор вызывает функции из модуля указанной обработки.
Конфигурация состоит из отдельных действий (визуальные - Меню, просмотр списков, сканирование ШК и др. и невизуальные) см. http://www.cleverence.ru/support/category:%D0%94%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F/
Вам нужно будет перевести текст во всех визуальных действиях. Например, кнопка Просмотр План/Факт в меню документа:
В главном меню текст на кнопках соответствует Отображаемому имени документа.
Конфигурация хранится в файле Cleverence.Warehouse.Environment.xml папки Documents сервера Mobile SMARTS, можно попробовать выполнить замену текста прямо в этом файле (после изменения потребуется перезапуск сервера), но нет гарантий, что конфигурация так не сломается.
Конфигурация используется одна для всех терминалов, подключенных к базе. Вы можете создать несколько баз и в каждой использовать свою конфигурацию, на терминале пользователи могут переключаться между базами.
Добрый день!
В переменной, заданной в "Имя редактируемого поля" будет введенное в поле значение, выбранная строка сохраняется в переменной SelectedItem.
Сервис поддержки клиентов работает на платформе UserEcho
мStorageConnector = мДрайверТСД.CreateStorageConnector(); - с помощью этой строки Вы создали новый объект StorageConnector, который не подключен ни к одной базе Mobile SMARTS, поэтому когда Вы вызываете мStorageConnector.GetTable, получаете ошибку, т.к. коннектор не знает, откуда ему загружать данные. мДрайверТСД - это объект TerminalConnector, который уже подключен к базе MS? Тогда получить подключенный к базе StorageConnector можно так: мStorageConnector = мДрайверТСД.ПолучитьОбъектСоединенияСБазой(). Подключить новый StorageConnector к базе можно так: мStorageConnector.УстановитьПодключениеСБазойСМАРТС(<Ид базы или строка соединения с базой>)