xmlTSDGalery/CommonModules/ОборудованиеВесовоеОборудование/Ext/Module.bsl
kykaevv 88098aa86f Initial commit: конфигурация ТСД с обменом УНФ.
Включает перемещение по ячейкам, стикеровку МП, синхронизацию справочников и обработку кодов маркировки.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-01 12:50:57 +03:00

299 lines
18 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#Область СлужебныйПрограммныйИнтерфейс
// Добавляет в список поставляемые драйверы в составе конфигурации.
//
// Параметры:
// ДрайвераОборудования - см. МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования
//
Процедура ОбновитьПоставляемыеДрайвера(ДрайвераОборудования) Экспорт
Драйвер = ДрайвераОборудования.Добавить();
Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭлектронныеВесы;
Драйвер.ИмяДрайвера = "Драйвер1СЭлектронныеВесы";
Драйвер.Наименование = НСтр("ru = '1С:Электронные весы (Native Api)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка());
Драйвер.ИдентификаторОбъекта = "CheckoutScales";
Драйвер.РекомендуемоеИспользование = Истина;
КонецПроцедуры
// Подготовить данные операции перед выполнением команды.
//
// Параметры:
// ПараметрыПодключения - Структура - Параметры подключения.
// Команда - Строка - Выполняемая команда.
// ПараметрыОперации - Структура - Параметры операции.
//
// Возвращаемое значение:
// Структура.
Функция ПодготовитьДанныеОперации(ПараметрыПодключения, Команда, ПараметрыОперации) Экспорт
Если Команда = "UploadGoods" Тогда
Если ПараметрыОперации.ТаблицаТоваров.Количество() = 0 Тогда
ОписаниеОшибки = НСтр("ru='Нет данных для выгрузки.'");
ДанныеОперации = Новый Структура();
ДанныеОперации.Вставить("Результат" , Ложь);
ДанныеОперации.Вставить("ТекстОшибки", ОписаниеОшибки);
Возврат ДанныеОперации;
КонецЕсли;
ПолнаяВыгрузка = НЕ ПараметрыОперации.ЧастичнаяВыгрузка;
ПакетыДляВыгрузки = ПодготовитьПакетыДляЗагрузкиВВесыСПечатьюЭтикеток(ПараметрыОперации.ТаблицаТоваров, РазмерПакетаПоУмолчанию(), ПараметрыПодключения.РевизияИнтерфейса);
ДанныеОперации = ПараметрыОперацииВесы();
ДанныеОперации.ПакетыXML = ПакетыДляВыгрузки;
ДанныеОперации.ПолнаяВыгрузка = ПолнаяВыгрузка;
Возврат ДанныеОперации;
ИначеЕсли Команда = "UploadProductImages" Тогда
Если ПараметрыОперации.ТаблицаИзображений.Количество() = 0 Тогда
ОписаниеОшибки = НСтр("ru='Нет данных для выгрузки.'");
ДанныеОперации = Новый Структура();
ДанныеОперации.Вставить("Результат" , Ложь);
ДанныеОперации.Вставить("ТекстОшибки", ОписаниеОшибки);
Возврат ДанныеОперации;
КонецЕсли;
ПакетыДляВыгрузки = ПодготовитьПакетыДляЗагрузкиИзображенийВВесыСПечатьюЭтикеток(ПараметрыОперации.ТаблицаИзображений, РазмерПакетаПоУмолчанию(), ПараметрыПодключения.РевизияИнтерфейса);
ДанныеОперации = ПараметрыОперацииВесы();
ДанныеОперации.ПакетыXML = ПакетыДляВыгрузки;
Возврат ДанныеОперации;
КонецЕсли
КонецФункции
// Обработать данные операции после выполнения команды.
//
// Параметры:
// ПараметрыПодключения - Структура - Параметры подключения.
// Команда - Строка - Выполняемая команда.
// РезультатВыполнения - Структура - результат выполнения операции.
// ДанныеОперации - Структура - Параметры операции.
//
Процедура ОбработатьДанныеОперации(ПараметрыПодключения, Команда, РезультатВыполнения, ДанныеОперации) Экспорт
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Заполнить структуру операции
//
// Возвращаемое значение:
// Структура - Параметры операции весы:
// * Результат - Булево.
// * ПакетыXML - Массив из ЧтениеXML.
// * ПолнаяВыгрузка - Булево.
// * ТекстОшибки - Строка.
Функция ПараметрыОперацииВесы()
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("Результат", Истина);
ПараметрыОперации.Вставить("ПакетыXML");
ПараметрыОперации.Вставить("ПолнаяВыгрузка");
ПараметрыОперации.Вставить("ТекстОшибки");
Возврат ПараметрыОперации;
КонецФункции
// Размер пакета в элементах передаваемой информации в драйвер.
//
// Возвращаемое значение:
// Число
//
Функция РазмерПакетаПоУмолчанию()
РазмерПакета = 10;
Возврат РазмерПакета;
КонецФункции
// Сформировать таблицу товаров в XML структуре для весов с печатью этикеток.
//
// Параметры:
// ДанныеЗагрузки - Массив - Данные загрузки.
// РевизияИнтерфейса - Число - Ревизия интерфейса.
//
// Возвращаемое значение:
// ЗаписьXML - Сформировать таблицу товаров весы с печатью этикеток
Функция СформироватьТаблицуТоваровВесыСПечатьюЭтикеток(ДанныеЗагрузки, РевизияИнтерфейса = 0)
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Table");
Для Каждого Позиция Из ДанныеЗагрузки Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Record");
ВремНаименование = ?(Позиция.Свойство("Наименование"), Позиция.Наименование, "");
Если Позиция.Свойство("НаименованиеПолное") И Не ПустаяСтрока(Позиция.НаименованиеПолное) Тогда
ВремНаименование = Позиция.НаименованиеПолное;
КонецЕсли;
Цена = ?(Позиция.Свойство("Цена"), Позиция.Цена, 0);
ОписаниеТовара = ?(Позиция.Свойство("ОписаниеТовара"), Позиция.ОписаниеТовара, Неопределено);
СрокХранения = ?(Позиция.Свойство("СрокХранения") , Позиция.СрокХранения, Неопределено);
ВесовойТовар = ?(Позиция.Свойство("ВесовойТовар") , Позиция.ВесовойТовар, Ложь);
ЗаписьXML.ЗаписатьАтрибут("PLU" , XMLСтрока(Число(Позиция.PLU)));
ЗаписьXML.ЗаписатьАтрибут("Code" , XMLСтрока(Число(Позиция.Код)));
ЗаписьXML.ЗаписатьАтрибут("Name" , XMLСтрока(ВремНаименование));
ЗаписьXML.ЗаписатьАтрибут("Price", XMLСтрока(Цена));
Если Не ПустаяСтрока(ОписаниеТовара) Тогда
ЗаписьXML.ЗаписатьАтрибут("Description", XMLСтрока(ОписаниеТовара));
КонецЕсли;
Если Не ПустаяСтрока(СрокХранения) Тогда
ЗаписьXML.ЗаписатьАтрибут("ShelfLife", XMLСтрока(СрокХранения));
КонецЕсли;
ЗаписьXML.ЗаписатьАтрибут("IsWeightGoods", XMLСтрока(ВесовойТовар));
Если РевизияИнтерфейса > 3007 Тогда // Версия стандарта 3.8 и выше
ФорматЭтикетки = ?(Позиция.Свойство("ФорматЭтикетки"), Позиция.ФорматЭтикетки, Неопределено);
КнопкаТовара = ?(Позиция.Свойство("КнопкаТовара"), Позиция.КнопкаТовара, Неопределено);
Если Не ПустаяСтрока(ФорматЭтикетки) Тогда
ЗаписьXML.ЗаписатьАтрибут("LabelFormat", XMLСтрока(ФорматЭтикетки));
КонецЕсли;
Если Не ПустаяСтрока(КнопкаТовара) Тогда
ЗаписьXML.ЗаписатьАтрибут("ButtonNumber", XMLСтрока(КнопкаТовара));
КонецЕсли;
Если Позиция.Свойство("ДополнительныеЦены") Тогда
ДополнительныеЦены = Позиция.ДополнительныеЦены;
Цена1 = ?(ДополнительныеЦены.Свойство("Цена1"), ДополнительныеЦены.Цена1, 0);
Цена2 = ?(ДополнительныеЦены.Свойство("Цена2"), ДополнительныеЦены.Цена2, 0);
Цена3 = ?(ДополнительныеЦены.Свойство("Цена3"), ДополнительныеЦены.Цена3, 0);
Цена4 = ?(ДополнительныеЦены.Свойство("Цена4"), ДополнительныеЦены.Цена4, 0);
ЗаписьXML.ЗаписатьНачалоЭлемента("AdditionalPrices");
ЗаписьXML.ЗаписатьАтрибут("Price1", XMLСтрокаена1));
ЗаписьXML.ЗаписатьАтрибут("Price2", XMLСтрокаена2));
ЗаписьXML.ЗаписатьАтрибут("Price3", XMLСтрокаена3));
ЗаписьXML.ЗаписатьАтрибут("Price4", XMLСтрокаена4));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЕсли;
КонецЕсли;
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
Возврат ЗаписьXML.Закрыть();
КонецФункции
// Сформировать таблицу изображений в XML структуре для весов с печатью этикеток.
//
// Параметры:
// ДанныеЗагрузки - Массив - Данные загрузки.
// РевизияИнтерфейса - Число - Ревизия интерфейса.
//
// Возвращаемое значение:
// ЗаписьXML - Сформировать таблицу товаров весы с печатью этикеток
//
Функция СформироватьТаблицуИзображенийВесыСПечатьюЭтикеток(ДанныеЗагрузки, РевизияИнтерфейса = 0)
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Table");
Для Каждого Позиция Из ДанныеЗагрузки Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Record");
ЗаписьXML.ЗаписатьАтрибут("PLU" , XMLСтрока(Число(Позиция.PLU)));
ЗаписьXML.ЗаписатьАтрибут("Code" , XMLСтрока(Число(Позиция.Код)));
ЗаписьXML.ЗаписатьАтрибут("Picture" , XMLСтрока(Позиция.Изображение));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
Возврат ЗаписьXML.Закрыть();
КонецФункции
// Сформировать XML пакеты для загрузки в весы с печатью этикеток.
//
// Параметры:
// ТаблицаВыгрузки - Массив - Данные для выгрузки.
// РазмерПакета - Число - Размер пакета.
// РевизияИнтерфейса - Число - Ревизия интерфейса.
//
// Возвращаемое значение:
// Массив из см. ОборудованиеВесовоеОборудование.СформироватьТаблицуТоваровВесыСПечатьюЭтикеток
//
Функция ПодготовитьПакетыДляЗагрузкиВВесыСПечатьюЭтикеток(ТаблицаВыгрузки, РазмерПакета, РевизияИнтерфейса = 0)
ПакетыДляВыгрузки = Новый Массив();
МассивТоваров = Новый Массив;
ЗаписьВПакете = 0;
ЗаписейВыгружено = 0;
ЗаписейВсего = ТаблицаВыгрузки.Количество();
Для Каждого Позиция Из ТаблицаВыгрузки Цикл
Если ЗаписьВПакете = 0 Тогда
МассивТоваров.Очистить();
КонецЕсли;
МассивТоваров.Добавить(Позиция);
ЗаписейВыгружено = ЗаписейВыгружено + 1;
ЗаписьВПакете = ЗаписьВПакете + 1;
Если (ЗаписьВПакете = РазмерПакета) ИЛИ (ЗаписейВыгружено = ЗаписейВсего) Тогда
ДанныеДляВыгрузки = СформироватьТаблицуТоваровВесыСПечатьюЭтикеток(МассивТоваров, РевизияИнтерфейса);
ПакетыДляВыгрузки.Добавить(ДанныеДляВыгрузки);
ЗаписьВПакете = 0;
КонецЕсли;
КонецЦикла;
Возврат ПакетыДляВыгрузки;
КонецФункции
// Сформировать XML пакеты для загрузки изображений в весы с печатью этикеток.
//
// Параметры:
// ТаблицаИзображений - Массив из Структура - Данные для выгрузки.
// РазмерПакета - Число
// РевизияИнтерфейса - Число
//
// Возвращаемое значение:
// Массив из см. СформироватьТаблицуИзображенийВесыСПечатьюЭтикеток -
// пакеты для загрузки изображений в весы с печатью этикеток
//
Функция ПодготовитьПакетыДляЗагрузкиИзображенийВВесыСПечатьюЭтикеток(ТаблицаИзображений, РазмерПакета, РевизияИнтерфейса = 0)
ПакетыДляВыгрузки = Новый Массив();
МассивИзображений = Новый Массив;
ЗаписьВПакете = 0;
ЗаписейВыгружено = 0;
ЗаписейВсего = ТаблицаИзображений.Количество();
Для Каждого Позиция Из ТаблицаИзображений Цикл
Если ЗаписьВПакете = 0 Тогда
МассивИзображений.Очистить();
КонецЕсли;
МассивИзображений.Добавить(Позиция);
ЗаписейВыгружено = ЗаписейВыгружено + 1;
ЗаписьВПакете = ЗаписьВПакете + 1;
Если (ЗаписьВПакете = РазмерПакета) ИЛИ (ЗаписейВыгружено = ЗаписейВсего) Тогда
ДанныеДляВыгрузки = СформироватьТаблицуИзображенийВесыСПечатьюЭтикеток(МассивИзображений, РевизияИнтерфейса);
ПакетыДляВыгрузки.Добавить(ДанныеДляВыгрузки);
ЗаписьВПакете = 0;
КонецЕсли;
КонецЦикла;
Возврат ПакетыДляВыгрузки;
КонецФункции
#КонецОбласти