Ваши комментарии

мStorageConnector = мДрайверТСД.CreateStorageConnector(); - с помощью этой строки Вы создали новый объект StorageConnector, который не подключен ни к одной базе Mobile SMARTS, поэтому когда Вы вызываете мStorageConnector.GetTable, получаете ошибку, т.к. коннектор не знает, откуда ему загружать данные. мДрайверТСД - это объект TerminalConnector, который уже подключен к базе MS? Тогда получить подключенный к базе StorageConnector можно так: мStorageConnector = мДрайверТСД.ПолучитьОбъектСоединенияСБазой(). Подключить новый StorageConnector к базе можно так:  мStorageConnector.УстановитьПодключениеСБазойСМАРТС(<Ид базы или строка соединения с базой>)

Добрый день!

Это можно сделать двумя запросами, первый: СтрокиТоваров = 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:serverEvent_GetProduct (SqlServerConnector - ид. коннектора, serverEvent_ - указание на обработчик серверного события). Процедура должна возвращать через параметр @resultXml xml особого вида, который представляет собой сериализованные объекты Mobile SMARTS, в случае режима 1 (поиск по ШК или другим атрибутам товара) - это объекты Cleverence.Warehouse.PackedProduct (если найден один товара) или Cleverence.Warehouse.PackedProductCollection (несколько объектов). См. http://www.cleverence.ru/devlib/TerminalConnector_v3/index.html. В процедуре нужно создать соответствующие COM-объекты, получить xml с помощью вызова ToXml объекта StorageConnector, можно также самим сформировать нужный xml, пример:

IF @mode = 1
BEGIN
SET @resultXml = '<?xml version="1.0" encoding="windows-1251"?>
<PackedProduct expiredDate="0001-01-01T00:00:00" quantity="1" registrationDate="0001-01-01T00:00:00"><Fields />
<Product barcode="" basePackingId="шт" id="cbcf492a-55bc-11d9-848a-00112f43529a" marking="Х-1234" name="BOSCH">
<Packings><Packing barcode="888999" id="шт" marking="" Int32_qty="0" Int32_price="27960" currency="RUB"></Packing></Packings>
</Product>
<Packing barcode="888999" id="шт" marking="" Int32_qty="0" Int32_price="27960" currency="RUB"></Packing>
<Quantities />
</PackedProduct>'
END


При попадании завершенного документа с ТСД на сервер Mobile SMARTS вызывается событие ДокументЗавершен, с помощью обработчика этого события можно загрузить документ в базу SQL, есть два варианта обработчика для sql, первый (SqlServerConnector:serverEvent_DocumentCompleted):

CREATE PROCEDURE [dbo].[DocumentCompleted]
(
@documentId varchar(50),
@resultXml xml OUTPUT
)
AS
BEGIN
/*
Здесь нужно создать COM-объект Cleverence.Warehouse.StorageConnector, выполнить подключение к базе MS c помощью SelectCurrentApp(<строка подключения к базе Mobile SMARTS или ид базы>),
загрузить с сервера документ при помощи GetDocument(@documentId), обработать документ и, если загрузка выполнилась успешно, удалить с сервера документ
при помощи RemoveDocument(@documentId)
*/
SET @resultXml = '';
END

Второй (SqlServerConnector:serverEvent_DocumentCompletedXml):

CREATE PROCEDURE [dbo].[DocumentCompletedXml]
(
@documentXml xml,
@result int OUTPUT
)
AS
BEGIN
SET @result = 1;
END


documentXml содержит xml документа Mobile SMARTS, который можно разобрать внутри процедуры.

Если через result возвращается 1, коннектор удалит документ с сервера.

Для получения списка документов для работы на терминале и выгрузке из базы SQL используются события ПолучитьСписокДокументов и ПолучитьДокумент:

В Панеле управления укажите обработчики таким образом:
Встроенное изображение 1


Примеры процедур:

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.cleverence.ru/clr">
<DocumentDescription barcode="123" createDate="0001-01-01T00:00:00" distributeByBarcode="True" documentTypeName="Инвентаризация" id="123" name="Инвентаризация 123" warehouseId="1"><Fields />
</DocumentDescription>
</DocumentDescriptionCollection>';
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.cleverence.ru/clr" barcode="00003" createDate="2014-03-06T16:53:33" deviceId="" deviceIP="" deviceName="" documentTypeName="Инвентаризация" id="123" name="Инвентаризация товаров на складе РТЦУТД00003 от 26.06.2008 11:22:45" appointment="оператор" userId="оператор" userName="оператор" warehouseId="1">
<DeclaredItems>
<DocumentItem declaredQuantity="8" expiredDate="0001-01-01T00:00:00" packingId="пара" productId="dee6e1d0-55bc-11d9-848a-00112f43529a" registeredDate="0001-01-01T00:00:00"><Fields capacity="4"><FieldValue fieldName="price"><Value clr:Type="Int32">1424</Value></FieldValue></Fields></DocumentItem>
<DocumentItem declaredQuantity="20" expiredDate="0001-01-01T00:00:00" packingId="3" productId="dee6e1d0-55bc-11d9-848a-00112f43529a" registeredDate="0001-01-01T00:00:00"><Fields capacity="4"><FieldValue fieldName="descr"><Value clr:Type="String">6, 39, Зеленый</Value></FieldValue><FieldValue fieldName="price"><Value clr:Type="Int32">1424</Value></FieldValue></Fields></DocumentItem>
<DocumentItem declaredQuantity="9" expiredDate="0001-01-01T00:00:00" packingId="пара" productId="dee6e1d3-55bc-11d9-848a-00112f43529a" registeredDate="0001-01-01T00:00:00"><Fields capacity="4"><FieldValue fieldName="price"><Value clr:Type="Int32">1780</Value></FieldValue></Fields></DocumentItem>
<DocumentItem declaredQuantity="20" expiredDate="0001-01-01T00:00:00" packingId="3" productId="dee6e1d3-55bc-11d9-848a-00112f43529a" registeredDate="0001-01-01T00:00:00"><Fields capacity="4"><FieldValue fieldName="descr"><Value clr:Type="String">6, 39, Белый</Value></FieldValue><FieldValue fieldName="price"><Value clr:Type="Int32">1780</Value></FieldValue></Fields></DocumentItem>
</DeclaredItems><CurrentItems capacity="0" />
<ClassificatorIds capacity="0" />
<Classificators capacity="0" />
<ClassificatorUsings capacity="0" /><Errors capacity="0" />
<Fields capacity="4"><FieldValue fieldName="КонтрольКолва"><Value clr:Type="Int32">0</Value></FieldValue><FieldValue fieldName="ПоЯчейкам"><Value clr:Type="Int32">0</Value></FieldValue>
</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