Компонента AddIn.Cl.TerminalConnector предназначена для использования в среде «1С:Предприятие» (версий 7.7, 8.x). Компонента реализует стандарт 1С на внешние компоненты, а также стандарты 1С на компоненты драйверов торгового оборудования (терминалов сбора данных). Компонента позволяет выполнять соединение с базой данных Mobile SMARTS, выгружать справочник номенклатуры и дополнительные таблицы, выгружать документы Mobile SMARTS для исполнения на терминале, загружать завершенные документы Mobile SMARTS в 1С. Отличие от Cleverence.Warehouse.StorageConnector заключается в том, что для обмена данными используются объекты 1С (массивы, списки значений, таблицы значений и др.), что существенно упрощает написание кода обмена в 1С. При этом возможно совместное использование Add.Cl.TerminalConnector и Cleverence.Warehouse.StorageConnector, а также всех других COM-объектов Mobile SMARTS (Document
[Документ], DocumentItem [СтрокаДокумента], Product [Товар] и др.).
Подключение компоненты и создание объекта
«1С:Предприятие 8»:
ПрогИД = "AddIn.Cl.TerminalConnector";
Если ПодключитьВнешнююКомпоненту(ПрогИД) Тогда КомДляMS = Новый (ПрогИД);
Иначе
//Ошибка подключения компоненты КонецЕсли;
«1С:Предприятие 7.7»:
ПрогИД = "AddIn.Cl.TerminalConnector";
Если ПодключитьВнешнююКомпоненту(ПрогИД) <> 0 Тогда ОбъектТСД = СоздатьОбъект(Компонента);
Иначе
//Ошибка подключения компоненты КонецЕсли;
Если по каким-то причинам использование ПодключитьВнешнююКомпоненту с передачей программного идентификатора невозможно (например, на сервере «1С:Предприятие»), компонента может быть создана как COM-объект:
«1С:Предприятие 8»:
ПрогИД = "AddIn.Cl.TerminalConnector";
КомДляMS = Новый COMОбъект(ПрогИД);
КомДляMS.УстановитьВерсию1С("v8"); //Необходимо сообщить компоненте версию платформы 1С (“v7” или “v8”)
«1С:Предприятие 7.7»:
ПрогИД = "AddIn.Cl.TerminalConnector";
КомДляMS = СоздатьОбъект(ПрогИД);
КомДляMS.УстановитьВерсию1С("v7"); //Необходимо сообщить компоненте версию платформы 1С (“v7” или “v8”)
Подключение к базе данных Mobile SMARTS
Перед выполнением обмена данными (выгрузка номенклатуры, документов и др.) необходимо установить подключение к базе данных Mobile SMARTS, для этого используется функция Open [Подключить].
Наименование |
Параметры и возвращаемое значение |
Описание |
Open [Подключить] |
Параметры: ValuesArray [МассивЗначений], DeviceID [ИДУстройства] ValuesArray [МассивЗначений] - Массив (для 1С 8.x) или Список значений (для 1С 7.7), содержащий один элемент, в котором должен находится идентификатор базы Mobile SMARTS (или строка подключения), к которой происходит подключение. DeviceID [ИДУстройства] - Возвращается идентификатор ТСД или пустая строка. Возвращаемое значение: Истина (1) — подключение успешно выполнено, Ложь (0) — возникла ошибка. Для получения описания ошибки используйте функцию GetLastError [ПолучитьОшибку]. |
Выполняет подключение к базе данных Mobile SMARTS и инициализацию компоненты драйвера для последующего обмена с терминалом, папкой обмена или сервером Mobile SMARTS.
Функция входит в один из стандартов 1С на Драйвер для ТСД (См. Описание стандарта). |
«1С:Предприятие 8»:
ПрогИД = "AddIn.Cl.TerminalConnector";
Если ПодключитьВнешнююКомпоненту(ПрогИД) Тогда КомДляMS = Новый (ПрогИД);
МассивЗначений = Новый Массив;
МассивЗначений.Добавить(“михаил-пк:10501/3cb8cb43-ca60-42c5-94d9-bb352dcba9e1”); //Строка
// подключения или ид. базы
ИДУстройства = “”;
Если КомДляMS.Подключить(МассивЗначений, ИДУстройства) Тогда
//Успешное подключение Иначе
//Ошибка при подключении к базе ОписаниеОшибки = “”; КомДляMS.ПолучитьОшибку(ОписаниеОшибки);
КонецЕсли;
Иначе
//Ошибка подключения компоненты КонецЕсли;
«1С:Предприятие 7.7»:
ПрогИД = "AddIn.Cl.TerminalConnector";
Если ПодключитьВнешнююКомпоненту(ПрогИД) <> 0 Тогда КомДляMS = СоздатьОбъект(ПрогИД);
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.ДобавитьЗначение(“михаил-пк:10501/3cb8cb43-ca60-42c5-94d9-bb352dcba9e1”); //Строка
// подключения или ид. базы
ИДУстройства = “”;
Если КомДляMS.Подключить(Параметры, ИДУстройства) <> 0 Тогда
//Успешное подключение Иначе
//Ошибка при подключении к базе ОписаниеОшибки = “”;
КомДляMS.ПолучитьОшибку(ОписаниеОшибки); КонецЕсли;
Иначе
//Ошибка подключения компоненты КонецЕсли;
Выгрузка номенклатуры
Для того, чтобы реализовать выгрузку справочника номенклатуры из 1С в Mobile SMARTS нужно определить, какие данные потребуются на терминале для работы и как отобразятся эти данные на объекты Mobile SMARTS Product [Товар] и Packing [Упаковка] при выгрузке. См. также Выгрузка
номенклатуры. Самое очевидное, что должны выгружаться штрихкоды товаров и наименования (для того, чтобы при сканировании на терминале происходила идентификация товара по штрихкоду). Штрихкод в базе 1С, как правило, привязан не только к позиции номенклатуры, но и к упаковке (единице измерения), а часто и к характеристике номенклатуры. Таким образом, позиции номенклатуры соответствует объект
Product [Товар], упаковкам и характеристикам — Packing [Упаковка]. Наименование характеристики записывается в дополнительное поле Характеристика (descr) упаковки Packing [Упаковка]. Для объектов
Product [Товар] требуются уникальные идентификаторы (поле Id), лучше всего использовать Guid-ы позиций справочника номенклатуры (для 1С 7.7 — коды). Кроме того, при выгрузке могут заполняться различные дополнительные поля номенклатуры, определенные в конфигурации Mobile SMARTS. Например, Колво (qty) — остаток товара на складе, Алко — признак, что товар является алкоголем и на терминале следует сканировать ШК акцизной марки. Когда определены все нужные для выгрузки данные, можно приступить к написанию запроса для их получения. Чаще всего запрос выполняется к справочнику номенклатуры и используются соединения для регистров штрихкодов, остатков, цен и др. Товары, не имеющие штрихкодов, тоже обычно выгружаются в Mobile SMARTS, т.к. могут выгружаться документы, содержащие такие товары и чтобы видеть на терминале наименование и другие данные по товару, нужно, чтобы он присутствовал в справочнике номенклатуры. Кроме того, штрихкод к товару можно присвоить на самом терминале.
Для выгрузки используются следующие функции объекта AddIn.Cl.TerminalConnector:
Наименование |
Параметры и возвращаемое значение |
Описание |
BeginUploadProducts [НачатьВыгрузкуТоваров] |
Параметры: schema [СхемаВыгрузки]
Массив (для 1С 8.x) или Список значений (для 1С 7.7), описывающий схему выгрузки. Содержит наименования полей объектов Product [Товар] и Packing [Упаковка] в виде «Product.ИмяПоля» или «Packing.ИмяПоля». Значения полей передаются с помощью функции AddProductToUpload
Возвращаемое значение: Истина (1) — выполнено успешно, Ложь (0) - возникла ошибка. Для получения описания ошибки используйте функцию |
Переводит коннектор в режим выгрузки товаров. Выгрузка выполняется с помощью функции AddProductToUpload |
AddProductToUpload [ДобавитьВВыгрузкуТоваров] |
Параметры: object row [Данные]
Массив (для 1С 8.x) или Список значений (для 1С 7.7), содержащий поля объектов [Упаковка], заданные при помощи функции BeginUploadProducts [НачатьВыгрузкуТоваров].
Возвращаемое значение: Истина (1) — выполнено успешно, Ложь (0) - возникла ошибка. Для получения описания ошибки используйте функцию |
Добавляет в выгрузку товаров товар с упаковкой. |
EndUploadProducts [ЗавершитьВыгрузкуТоваров] |
Параметры: нет
Возвращаемое значение: Истина (1) — выполнено успешно, Ложь (0) - возникла ошибка. Для получения описания ошибки используйте функцию |
Завершает выгрузку товаров. |
ResetUploadProducts [СброситьВыгрузкуТоваров] |
Параметры: нет
Возвращаемое значение: Истина (1) — выполнено успешно, Ложь (0) - возникла ошибка. Для получения описания ошибки используйте функцию |
Сбрасывает начатую выгрузку. Функция применяется в случае ошибки в процессе выгрузки номенклатуры. |
«1С:Предприятие 8»:
ПрогИД = "AddIn.Cl.TerminalConnector"; ПодключитьВнешнююКомпоненту(ПрогИД); Соединение = Новый (ПрогИД);
МассивЗначений = Новый Массив;
МассивЗначений.Добавить(“михаил-пк:10501/3cb8cb43-ca60-42c5-94d9-bb352dcba9e1”); //Строка
// подключения или ид. базы
ИДУстройства = “”;
Если КомДляMS.Подключить(МассивЗначений, ИДУстройства) Тогда Запрос = Новый Запрос(ТекстЗапроса);
ТаблицаТоваров = Запрос.Выполнить().Выгрузить(); //Выполняем запрос
//Описываем схему выгрузки мДанные = Новый Массив(26);
//Основные поля товара и упаковки
мДанные.Установить( 0, "Product.Id" );
мДанные.Установить( 1, "Product.Marking" );
мДанные.Установить( 2, "Product.Barcode" );
мДанные.Установить( 3, "Packing.Barcode" );
мДанные.Установить( 4, "Product.Name" );
мДанные.Установить( 5, "Product.BasePackingId" );
мДанные.Установить( 6, "Packing.Id" );
мДанные.Установить( 7, "Packing.Name" );
мДанные.Установить( 8, "Packing.UnitsQuantity" );
//Дополнительные поля
мДанные.Установить( 9, "Packing.descr" );
мДанные.Установить( 10, "Packing.serial" );
мДанные.Установить( 11, "Packing.price" );
мДанные.Установить( 12, "Packing.qty" );
мДанные.Установить( 13, "Product.withserial" );
мДанные.Установить( 14, "Product.withsn" );
мДанные.Установить( 15, "Product.КлючСерий" );
//Дополнительные поля для работы с алкоголем
мДанные.Установить( 16, "Product.Алко" );
мДанные.Установить( 17, "Packing.АлкоОбъем" );
мДанные.Установить( 18, "Packing.АлкоКодВ" );
мДанные.Установить( 19, "Packing.АлкоНаимВ" );
мДанные.Установить( 20, "Product.АлкоКрепость" );
мДанные.Установить( 21, "Product.Производитель" );
мДанные.Установить( 22, "Product.ПроизвИНН" );
мДанные.Установить( 23, "Product.ПроизвКПП" );
мДанные.Установить( 24, "Packing.АлкоКод" );
мДанные.Установить( 25, "Packing.АлкоМарк" );
Соединение.УстановитьПоискПоНаименованиюИАртикулу(Истина); //Устанавливаем признак, что будет //доступен поиск по наименованию товара на терминале
//Начинаем выгрузку
Если Не Соединение.НачатьВыгрузкуТоваров(мДанные) Тогда
//Ошибка при начале выгрузки ОписаниеОшибки = “”;
Соединение.ПолучитьОшибку(ОписаниеОшибки); Соединение.ОсвободитьРесурсы();
Сообщить(ОписаниеОшибки); Возврат;
КонецЕсли;
Для Каждого СтрокаТовара из ТаблицаТоваров Цикл
ИдТовара = XMLСтрока(СтрокаТовара[“НоменклатураСсылка”]); //В качестве идентификатора товара //будем выгружать Guid позиции номенклатуры
Наименование = Строка(СтрокаТовара["Номенклатура"]); Код = СокрЛП(СтрокаТовара["Код"]);
ШК = СокрЛП(СтрокаТовара["Штрихкод"]);
ЕдиницаИзмерения = Строка(СтрокаТовара["Упаковка"]); Характеристика = СокрЛП(СтрокаТовара["Характеристика"]); Серия = СокрЛП(СтрокаТовара["Серия"]);
Цена = СтрокаТовара["Цена"]; Количество = СтрокаТовара["Количество"]; Артикул = СокрЛП(СтрокаТовара["Артикул"]); Коэфф = СтрокаТовара["Коэффициент"];
БазоваяЕдиница = ?(СтрокаТовара["ФлагБазовойЕдиницы"], Строка(СтрокаТовара["Упаковка"]), ""); ЕстьСерии = СтрокаТовара["ЕстьСерии"];
СтатусУказанияСерий = СтрокаТовара["СтатусУказанияСерий"];
мДанные.Установить( 0, ИдТовара ); //Product.Id мДанные.Установить( 1, Артикул ); //Product.Marking
мДанные.Установить( 2, Код ); //Product.Barcode - выгружаем Код позиции номенклатуры, чтобы на
//терминале была возможность поиска по коду
мДанные.Установить( 3, ШК ); //Packing.Barcode - штрихкод упаковки мДанные.Установить( 4, Наименование ); //Product.Name
мДанные.Установить( 5, БазоваяЕдиница); //Product.BasePackingId - ид. базовой упаковки (единицы) //или
пустая строка, если данная единица не является базовой
мДанные.Установить( 6, ЕдиницаИзмерения ); //Packing.Id
мДанные.Установить( 7, ЕдиницаИзмерения ); //Packing.Name - в качестве имени и ид. упаковки
//используем сокращенное наименование (например, “шт”, “кг”) мДанные.Установить( 8, Коэфф ); //Packing.UnitsQuantity
мДанные.Установить( 9, Характеристика ); //Packing.descr - наименование характеристики или пустая
//строка, если нет характеристики
мДанные.Установить( 10, Серия ); //Packing.serial - наименование серии или пустая строка, если нет
//серии
мДанные.Установить( 11, Цена ); //Packing.price - цена мДанные.Установить( 12, Количество ); //Packing.qty - остаток на складе
мДанные.Установить( 13, ЕстьСерии ); //Product.withserial - ведется учет по сериям мДанные.Установить( 14, СтатусУказанияСерий ); //Product.withsn - есть серийные номера мДанные.Установить( 15, ИдТовара ); //Product.КлючСерий - поле для связи с таблицей Серии (если
//таковая выгружается), ид. позиции номенклатуруры или ид. вида номенклатуры
//Алко поля
мДанные.Установить( 16, СтрокаТовара[“Алко”]);
мДанные.Установить( 17, СтрокаТовара[“АлкоОбъем”]);
мДанные.Установить( 18, СтрокаТовара[“АлкоКодВ”]);
мДанные.Установить( 19, СтрокаТовара[“АлкоНаимВ”]);
мДанные.Установить( 20, СтрокаТовара[“АлкоКрепость”]);
мДанные.Установить( 21, СтрокаТовара[“Производитель”]);
мДанные.Установить( 22, СтрокаТовара[“ПроизвИНН”]);
мДанные.Установить( 23, СтрокаТовара[“ПроизвКПП”]);
мДанные.Установить( 24, СтрокаТовара[“АлкоКод”]);
мДанные.Установить( 25, СтрокаТовара["АлкоМарк"]);
//Добавляем массив данных в выгрузку
Если Не Соединение.ДобавитьВВыгрузкуТоваров(мДанные) Тогда
//Произошла ошибка ОписаниеОшибки = “”;
Соединение.ПолучитьОшибку(ОписаниеОшибки); Сообщить(ОписаниеОшибки);
Соединение.СброситьВыгрузкуТоваров(); //Прерываем выгрузку Соединение.ОсвободитьРесурсы();
Возврат; КонецЕсли;
КонецЦикла;
//Завершение выгрузки
Если Не Соединение.ЗавершитьВыгрузкуТоваров() Тогда ОписаниеОшибки = “”; Соединение.ПолучитьОшибку(ОписаниеОшибки); Сообщить(ОписаниеОшибки);
КонецЕсли;
Соединение.ОсвободитьРесурсы();
Иначе
//Ошибка при подключении к базе ОписаниеОшибки = “”; Соединение.ПолучитьОшибку(ОписаниеОшибки); Сообщить(ОписаниеОшибки);
КонецЕсли;
«1С:Предприятие 7.7»:
ПрогИД = "AddIn.Cl.TerminalConnector";
ПодключитьВнешнююКомпоненту(ПрогИД); Соединение = СоздатьОбъект(ПрогИД);
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.ДобавитьЗначение(“михаил-пк:10501/3cb8cb43-ca60-42c5-94d9-bb352dcba9e1”); //Строка
// подключения или ид. базы
ИДУстройства = “”;
Если Соединение.Подключить(Параметры, ИДУстройства) <> 0 Тогда
//Успешное подключение
ТаблицаНоменклатуры = ПолучитьТаблицуНоменклатурыДляВыгрузки();
//Описываем схему выгрузки
мДанные = СоздатьОбъект("СписокЗначений");
мДанные.ДобавитьЗначение("Product.Id" );
мДанные.ДобавитьЗначение("Product.Marking" );
мДанные.ДобавитьЗначение("Product.Barcode" );
мДанные.ДобавитьЗначение("Packing.Barcode" );
мДанные.ДобавитьЗначение("Product.Name" );
мДанные.ДобавитьЗначение("Product.BasePackingId" );
мДанные.ДобавитьЗначение("Packing.Id" );
мДанные.ДобавитьЗначение("Packing.Name" );
мДанные.ДобавитьЗначение("Packing.UnitsQuantity" );
//Дополнительные поля
мДанные.ДобавитьЗначение("Packing.descr" );
мДанные.ДобавитьЗначение("Packing.serial" );
мДанные.ДобавитьЗначение("Packing.price" );
мДанные.ДобавитьЗначение("Packing.qty" );
мДанные.ДобавитьЗначение("Product.withserial" );
мДанные.ДобавитьЗначение("Product.withsn" );
мДанные.ДобавитьЗначение("Product.КлючСерий" );
//Дополнительные поля для работы с алкоголем
мДанные.ДобавитьЗначение("Product.Алко" );
мДанные.ДобавитьЗначение("Packing.АлкоОбъем" );
мДанные.ДобавитьЗначение("Packing.АлкоКодВ" );
мДанные.ДобавитьЗначение("Packing.АлкоНаимВ" );
мДанные.ДобавитьЗначение("Product.АлкоКрепость" );
мДанные.ДобавитьЗначение("Product.Производитель" );
мДанные.ДобавитьЗначение("Product.ПроизвИНН" );
мДанные.ДобавитьЗначение("Product.ПроизвКПП" );
мДанные.ДобавитьЗначение("Packing.АлкоКод" );
мДанные.ДобавитьЗначение("Packing.АлкоМарк" );
Соединение.УстановитьПоискПоНаименованиюИАртикулу(1); //Устанавливаем признак, что будет
//доступен поиск по наименованию товара на терминале
//Начинаем выгрузку
Если Соединение.НачатьВыгрузкуТоваров(мДанные) = 0 Тогда
//Ошибка при начале выгрузки ОписаниеОшибки = “”;
Соединение.ПолучитьОшибку(ОписаниеОшибки); Соединение.ОсвободитьРесурсы();
Сообщить(ОписаниеОшибки); Возврат;
КонецЕсли;
Пока ТаблицаНоменклатуры.ПолучитьСтроку() = 1 Цикл
мДанные.УдалитьВсе();
Код = СокрЛП(ТаблицаНоменклатуры.Номенклатура.Код); //В качестве идентификатора товара будем выгружать код позиции номенклатуры
Наименование = СокрЛП(ТаблицаНоменклатуры.Номенклатура.Наименование); ШК = Запрос.Штрихкод;
ЕдиницаИзмерения = СокрЛП(ТаблицаНоменклатуры.ЕдиницаИзмерения); Характеристика = СокрЛП(ТаблицаНоменклатуры.Характеристика); Серия = СокрЛП(ТаблицаНоменклатуры.Серия);
Цена = ТаблицаНоменклатуры.Цена; Количество = ТаблицаНоменклатуры.Количество; Артикул = СокрЛП(ТаблицаНоменклатуры.Артикул);
….
мДанные.ДобавитьЗначение(Код); мДанные.ДобавитьЗначение(Артикул); мДанные.ДобавитьЗначение(Код); мДанные.ДобавитьЗначение(ШК); мДанные.ДобавитьЗначение(Наименование);
…. мДанные.ДобавитьЗначение(СокрЛП(ТаблицаНоменклатуры.АлкоМарк));
//Добавляем массив данных в выгрузку
Если Соединение.ДобавитьВВыгрузкуТоваров(мДанные) = 0 Тогда
//Произошла ошибка ОписаниеОшибки = “”;
Соединение.ПолучитьОшибку(ОписаниеОшибки); Сообщить(ОписаниеОшибки);
Соединение.СброситьВыгрузкуТоваров(); //Прерываем выгрузку Соединение.ОсвободитьРесурсы();
Возврат; КонецЕсли;
КонецЦикла;
//Завершение выгрузки
Если Соединение.ЗавершитьВыгрузкуТоваров() = 0 Тогда ОписаниеОшибки = “”; Соединение.ПолучитьОшибку(ОписаниеОшибки); Сообщить(ОписаниеОшибки);
КонецЕсли;
Соединение.ОсвободитьРесурсы();
Иначе
//Ошибка при подключении к базе ОписаниеОшибки = “”; Соединение.ПолучитьОшибку(ОписаниеОшибки);
КонецЕсли;