commit 88098aa86ff9a81c6b5a8de0b2cadf6c067e4741 Author: kykaevv Date: Tue Sep 1 12:50:57 2026 +0300 Initial commit: конфигурация ТСД с обменом УНФ. Включает перемещение по ячейкам, стикеровку МП, синхронизацию справочников и обработку кодов маркировки. Co-authored-by: Cursor diff --git a/Catalogs/ДрайверыОборудования.xml b/Catalogs/ДрайверыОборудования.xml new file mode 100644 index 0000000..11a8bdb --- /dev/null +++ b/Catalogs/ДрайверыОборудования.xml @@ -0,0 +1,881 @@ + + + + + + ac16ac19-01c7-4d4f-9e91-25b196f88fd5 + 026e9869-311f-44ba-98bb-075ef3e90d03 + + + dd1135c6-5831-4a84-ad4f-3e115b419321 + fcf19d05-2f82-4cb6-bf42-c85b317531ad + + + 26dd1f20-f948-439a-b868-af93e0636552 + 01d398fe-52db-46f3-ab89-4e4873107e9d + + + c7ae806e-409a-44c3-996d-3da0406f7073 + 92322fe9-00aa-4760-8f5a-74b04f1753b8 + + + 5b34a4b9-e75a-4718-8511-64e53dedc37f + 6d46b6a0-67af-4dc0-b62d-74c83ef7de7b + + + + ДрайверыОборудования + + + ru + Драйверы оборудования + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 0 + 100 + Number + Variable + WholeCatalog + false + false + AsDescription + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + true + Auto + Deny + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + true + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + TransformValues + + + + ru + Наименование драйвера оборудования + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontAutoUpdate + InDialog + true + BothWays + + Catalog.ДрайверыОборудования.StandardAttribute.Description + + Begin + DontUse + Directly + Catalog.ДрайверыОборудования.Form.ФормаЭлемента + + Catalog.ДрайверыОборудования.Form.ФормаСписка + + + + + + + + true + + + Managed + Use + + + ru + Драйвер оборудования + + + + + + + DontUse + Auto + DontUse + false + false + + + + + ТипОборудования + + + ru + Тип оборудования + + + + + cfg:DefinedType.ТипыПодключаемогоОборудования + + false + + + + + ru + Тип оборудования подключаемого драйвера. + + + false + + false + false + + + true + Enum.ТипыПодключаемогоОборудования.EmptyRef + ShowError + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ИдентификаторОбъекта + + + ru + Идентификатор объекта + + + + + xs:string + + 0 + Variable + + + false + + + + + ru + Идентификатор объекта внешней компоненты "ProgID". Строка вида "Name". + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ВерсияДрайвера + + + ru + Версия драйвера + + + + + xs:string + + 16 + Variable + + + false + + + + + ru + Версия драйвера подключаемого оборудования в макете + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + СпособПодключения + + + ru + Способ подключения + + + + + cfg:EnumRef.СпособПодключенияДрайвера + + false + + + + false + + false + false + + + true + Enum.СпособПодключенияДрайвера.EnumValue.ИзМакета + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ИмяМакетаДрайвера + + + ru + Имя макета драйвера + + + + + xs:string + + 0 + Variable + + + false + + + + + ru + Имя макета содержащий драйвер, поставляемый в составе конфигурации. + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ЛокальныйРежим + + + ru + Локальный режим + + + Использование драйвера в локальном режиме + + xs:boolean + + false + + + + false + + false + false + + + true + true + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + СетевойРежим + + + ru + Сетевой режим + + + Использование драйвера в сетевом режиме + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + СерверныйРежим + + + ru + Серверный режим + + + Использование драйвера в серверном режиме + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + СнятСПоддержки + + + ru + Снят с поддержки + + + + + xs:boolean + + false + + + + + ru + Драйвер снят с поддержки, и не рекомендован к использованию + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + Index + Use + Use + + + + + БезопасноеПодключение + + + ru + Безопасное подключение + + + + + xs:boolean + + false + + + + + ru + Драйвер будет использоваться в отдельном процессе изолировано. +Для вступление в действие изменений необходимо перегрузить «1С:Предприятие». + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + РекомендуемоеИспользование + + + ru + Рекомендуемое использование + + + + + xs:boolean + + false + + + + + ru + Драйвер рекомендован к использованию как основной + + + false + + false + false + + + true + true + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + Index + Use + Use + + + + + СообщениеПриИспользовании + + + ru + Оповещать пользователя при работе с кассовой сменой, если драйвер снят с поддержки + + + + + xs:boolean + + false + + + + + ru + Оповещать пользователя при работе с кассовой сменой, если драйвер снят с поддержки + + + false + + false + false + + + true + true + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + +
ФормаСписка
+
ФормаЭлемента
+
+
+
\ No newline at end of file diff --git a/Catalogs/ДрайверыОборудования/Ext/Help.xml b/Catalogs/ДрайверыОборудования/Ext/Help.xml new file mode 100644 index 0000000..1d2b70b --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Ext/Help.xml @@ -0,0 +1,4 @@ + + + ru + \ No newline at end of file diff --git a/Catalogs/ДрайверыОборудования/Ext/Help/ru.html b/Catalogs/ДрайверыОборудования/Ext/Help/ru.html new file mode 100644 index 0000000..1360350 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Ext/Help/ru.html @@ -0,0 +1,3 @@ + +

Справочник "Драйверы оборудования".

+

Список драйверов оборудования поставляющихся в составе конфигурации и загружаемых пользователем в информационную базу данных.

\ No newline at end of file diff --git a/Catalogs/ДрайверыОборудования/Ext/ManagerModule.bsl b/Catalogs/ДрайверыОборудования/Ext/ManagerModule.bsl new file mode 100644 index 0000000..301da2e --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Ext/ManagerModule.bsl @@ -0,0 +1,422 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Определяет настройки начального заполнения элементов +// +// Параметры: +// ПолноеИмяОбъекта - Строка - имя объекта, для которого вызывается заполнение. +// Настройки - Структура: +// * ПриНачальномЗаполненииЭлемента - Булево - если Истина, то для каждого элемента будет +// вызвана процедура индивидуального заполнения ПриНачальномЗаполненииЭлемента. +// * ПредопределенныеДанные - ТаблицаЗначений - данные заполненные в процедуре ПриНачальномЗаполненииЭлементов. +// +Процедура ПриНастройкеНачальногоЗаполненияЭлементов(ПолноеИмяОбъекта, Настройки) Экспорт + + Настройки.ПриНачальномЗаполненииЭлемента = Ложь; + +КонецПроцедуры + +// Процедура заполняет предопределенные элементы в справочнике драйверов оборудования. +// +// Параметры: +// ДрайверыОборудования - ТаблицаЗначений +// +Процедура ПриНачальномЗаполненииЭлементов(ДрайверыОборудования) Экспорт + + ТекущийЯзык = ТекущийЯзык(); + КодЯзыка = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка); + + ТаблицаДрайверов = Новый ТаблицаЗначений(); + ТаблицаДрайверов.Колонки.Добавить("Ссылка"); + ТаблицаДрайверов.Колонки.Добавить("ИмяПредопределенныхДанных"); + ТаблицаДрайверов.Колонки.Добавить("ВРегИмяПредопределенныхДанных"); + ТаблицаДрайверов.Индексы.Добавить("ВРегИмяПредопределенныхДанных"); + ТаблицаДрайверов.Колонки.Добавить("СпособПодключения"); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ДрайверыОборудования.Ссылка КАК Ссылка, + | ДрайверыОборудования.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + | ДрайверыОборудования.СпособПодключения КАК СпособПодключения + |ИЗ + | Справочник.ДрайверыОборудования КАК ДрайверыОборудования + |ГДЕ + | ДрайверыОборудования.ИмяПредопределенныхДанных В(&СписокИмена)"; + + Запрос.УстановитьПараметр("СписокИмена", ДрайверыОборудования.ВыгрузитьКолонку("ИмяДрайвера")); + РезультатЗапроса = Запрос.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + НоваяСтрока = ТаблицаДрайверов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка); + НоваяСтрока.ВРегИмяПредопределенныхДанных = ВРег(НоваяСтрока.ИмяПредопределенныхДанных); + КонецЦикла; + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить("Справочник.ДрайверыОборудования"); + ЭлементБлокировки.ИсточникДанных = ТаблицаДрайверов; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Ссылка"); + Блокировка.Заблокировать(); + + Для Каждого ДрайверОборудования Из ДрайверыОборудования Цикл + + ПараметрыДрайвера = МенеджерОборудованияКлиентСервер.ПараметрыСозданияНовогоДрайвера(); + ЗаполнитьЗначенияСвойств(ПараметрыДрайвера, ДрайверОборудования); + + ПараметрыДрайвера.Предопределенный = Истина; + + Если ТипЗнч(ПараметрыДрайвера.ТипОборудования) = Тип("Строка") Тогда + ПараметрыДрайвера.ТипОборудования = МенеджерОборудования.ТипОборудованияПоСтроке(ПараметрыДрайвера.ТипОборудования); + КонецЕсли; + + СтрокаТаблицы = ТаблицаДрайверов.Найти(ВРег(ПараметрыДрайвера.ИмяДрайвера),"ВРегИмяПредопределенныхДанных"); + Если СтрокаТаблицы <> Неопределено Тогда + Драйвер = СтрокаТаблицы.Ссылка.ПолучитьОбъект(); + + ПараметрыДрайвера.СпособПодключения = СтрокаТаблицы.СпособПодключения; + МакетДоступен = Ложь; + ИмяМакетаДрайвера = ПараметрыДрайвера.ИмяМакетаДрайвера; + МенеджерОборудования.ЗаполнитьДанныеМакетов(ПараметрыДрайвера.ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, Неопределено, КодЯзыка); + Если Не МакетДоступен Тогда + ПараметрыДрайвера.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы; + КонецЕсли; + + Иначе + Драйвер = Справочники.ДрайверыОборудования.СоздатьЭлемент(); + Драйвер.ИмяПредопределенныхДанных = ПараметрыДрайвера.ИмяДрайвера; + + + МакетДоступен = Ложь; + ИмяМакетаДрайвера = ПараметрыДрайвера.ИмяМакетаДрайвера; + МенеджерОборудования.ЗаполнитьДанныеМакетов(ПараметрыДрайвера.ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, Неопределено, КодЯзыка); + Если НЕ ЗначениеЗаполнено(ПараметрыДрайвера.СпособПодключения) Тогда + Если МакетДоступен Тогда + ПараметрыДрайвера.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзМакета; + Иначе + ПараметрыДрайвера.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если (Драйвер.Наименование <> ПараметрыДрайвера.Наименование) + Или (Драйвер.ИдентификаторОбъекта <> Строка(ПараметрыДрайвера.ИдентификаторОбъекта)) + Или (Драйвер.ВерсияДрайвера <> Строка(ПараметрыДрайвера.ВерсияДрайвера)) + Или (Драйвер.ИмяМакетаДрайвера <> Строка(ПараметрыДрайвера.ИмяМакетаДрайвера)) + Или (Драйвер.ТипОборудования <> ПараметрыДрайвера.ТипОборудования) + Или (Драйвер.СпособПодключения <> ПараметрыДрайвера.СпособПодключения) + Или (Драйвер.СнятСПоддержки <> ПараметрыДрайвера.СнятСПоддержки) + Или (Драйвер.БезопасноеПодключение <> ПараметрыДрайвера.БезопасноеПодключение) + Или (Драйвер.РекомендуемоеИспользование <> ПараметрыДрайвера.РекомендуемоеИспользование) Тогда + Драйвер.Наименование = ПараметрыДрайвера.Наименование; + Драйвер.ИдентификаторОбъекта = ПараметрыДрайвера.ИдентификаторОбъекта; + Драйвер.ВерсияДрайвера = ПараметрыДрайвера.ВерсияДрайвера; + Драйвер.ИмяМакетаДрайвера = ПараметрыДрайвера.ИмяМакетаДрайвера; + Драйвер.ТипОборудования = ПараметрыДрайвера.ТипОборудования; + Драйвер.СпособПодключения = ПараметрыДрайвера.СпособПодключения; + Драйвер.СнятСПоддержки = ПараметрыДрайвера.СнятСПоддержки; + Драйвер.БезопасноеПодключение = ПараметрыДрайвера.БезопасноеПодключение; + Драйвер.РекомендуемоеИспользование = ПараметрыДрайвера.РекомендуемоеИспользование; + Если Драйвер.СнятСПоддержки Тогда + Драйвер.СообщениеПриИспользовании = Истина; + КонецЕсли; + Драйвер.Записать(); + КонецЕсли; + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Заполнение предопределенных элементов драйвера'", ОбщегоНазначенияБПО.КодОсновногоЯзыка())); + КонецПопытки; + +КонецПроцедуры + +// Процедура заполняет элемент в справочнике драйверов оборудования. +// +// Параметры: +// ПараметрыСоздания - Структура - параметры создания оборудования. +// +// Возвращаемое значение: +// СправочникСсылка.ДрайверыОборудования - +// +Функция СоздатьНовыйЭлемент(ПараметрыСоздания) Экспорт + + НовыйЭлемент = Справочники.ДрайверыОборудования.СоздатьЭлемент(); + + Если ТипЗнч(ПараметрыСоздания.ТипОборудования) = Тип("Строка") Тогда + ПараметрыСоздания.ТипОборудования = МенеджерОборудования.ТипОборудованияПоСтроке(ПараметрыСоздания.ТипОборудования); + КонецЕсли; + + НовыйЭлемент.ТипОборудования = ПараметрыСоздания.ТипОборудования; + НовыйЭлемент.ИдентификаторОбъекта = ПараметрыСоздания.ИдентификаторОбъекта; + НовыйЭлемент.Наименование = ПараметрыСоздания.Наименование; + НовыйЭлемент.ИмяМакетаДрайвера = ПараметрыСоздания.ИмяМакетаДрайвера; + НовыйЭлемент.ВерсияДрайвера = ПараметрыСоздания.ВерсияДрайвера; + НовыйЭлемент.СнятСПоддержки = ПараметрыСоздания.СнятСПоддержки; + НовыйЭлемент.СпособПодключения = ПараметрыСоздания.СпособПодключения; + НовыйЭлемент.БезопасноеПодключение = ПараметрыСоздания.БезопасноеПодключение; + Если ПараметрыСоздания.Предопределенный Тогда + НовыйЭлемент.ИмяПредопределенныхДанных = ПараметрыСоздания.ИмяДрайвера; + КонецЕсли; + + НовыйЭлемент.Записать(); + + Возврат НовыйЭлемент.Ссылка; + +КонецФункции + +// Получает ссылку предопределенного элемента по его полному имени. +// +// Параметры: +// ПолноеИмяПредопределенного - Строка - имя предопределенного элемента. +// +// Возвращаемое значение: +// СправочникСсылка.ПодключаемоеОборудование, +// Неопределено. +// +Функция ПредопределенныйЭлемент(Знач ПолноеИмяПредопределенного) Экспорт + + ИмяПредопределенного = ВРег(ПолноеИмяПредопределенного); + + Точка = Найти(ИмяПредопределенного, "."); + ИмяКоллекции = Лев(ИмяПредопределенного, Точка - 1); + ИмяПредопределенного = Сред(ИмяПредопределенного, Точка + 1); + + Точка = Найти(ИмяПредопределенного, "."); + ИмяТаблицы = Лев(ИмяПредопределенного, Точка - 1); + ИмяПредопределенного = Сред(ИмяПредопределенного, Точка + 1); + + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 Ссылка ИЗ &ПолноеИмяТаблицы ГДЕ ИмяПредопределенныхДанных = &ИмяПредопределенного"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяТаблицы", ИмяКоллекции + "." + ИмяТаблицы); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ИмяПредопределенного", ИмяПредопределенного); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат Неопределено; + Иначе + Возврат Результат.Выгрузить()[0].Ссылка; + КонецЕсли; + +КонецФункции + +// Функция возвращает структуру с данными драйвера оборудования +// (со значениями реквизитов элемента справочника). +// +// Параметры: +// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера. +// +// Возвращаемое значение: +// Структура. +// +Функция ДанныеДрайвераОборудования(ИдентификаторДрайвера) Экспорт + + ТекущийЯзык = ТекущийЯзык(); + КодЯзыка = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка); + + ДанныеДрайвера = Новый Структура(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДрайверыОборудованияПереопределяемый.Ссылка КАК Ссылка, + | ДрайверыОборудованияПереопределяемый.Наименование КАК Наименование, + | ДрайверыОборудованияПереопределяемый.ИдентификаторОбъекта КАК ИдентификаторОбъекта, + | ДрайверыОборудованияПереопределяемый.ВерсияДрайвера КАК ВерсияДрайвера, + | ДрайверыОборудованияПереопределяемый.ИмяМакетаДрайвера КАК ИмяМакетаДрайвера, + | ДрайверыОборудованияПереопределяемый.СнятСПоддержки КАК СнятСПоддержки, + | ДрайверыОборудованияПереопределяемый.СообщениеПриИспользовании КАК СообщениеПриИспользовании, + | ДрайверыОборудованияПереопределяемый.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + | ДрайверыОборудованияПереопределяемый.ТипОборудования КАК ТипОборудования, + | ДрайверыОборудованияПереопределяемый.Предопределенный КАК Предопределенный, + | ДрайверыОборудованияПереопределяемый.СпособПодключения КАК СпособПодключения, + | ДрайверыОборудованияПереопределяемый.БезопасноеПодключение КАК БезопасноеПодключение + |ИЗ + | Справочник.ДрайверыОборудования КАК ДрайверыОборудованияПереопределяемый + |ГДЕ + | ДрайверыОборудованияПереопределяемый.Ссылка = &Идентификатор"; + + Запрос.УстановитьПараметр("Идентификатор", ИдентификаторДрайвера); + РезультатЗапроса = Запрос.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + + // Заполним структуру данных устройства. + ДанныеДрайвера.Вставить("Ссылка" , Выборка.Ссылка); + ДанныеДрайвера.Вставить("Наименование" , Выборка.Наименование); + ДанныеДрайвера.Вставить("ИдентификаторОбъекта" , Выборка.ИдентификаторОбъекта); + ДанныеДрайвера.Вставить("ВерсияДрайвера" , Выборка.ВерсияДрайвера); + ДанныеДрайвера.Вставить("СнятСПоддержки" , Выборка.СнятСПоддержки); + ДанныеДрайвера.Вставить("СообщениеПриИспользовании", Выборка.СообщениеПриИспользовании); + ДанныеДрайвера.Вставить("ИмяПредопределенныхДанных", Выборка.ИмяПредопределенныхДанных); + ДанныеДрайвера.Вставить("ТипыОборудования" , МенеджерОборудования.ПараметрыТипыОборудования(Выборка.ТипОборудования)); + ДанныеДрайвера.Вставить("ТипОборудования" , Выборка.ТипОборудования); + ДанныеДрайвера.Вставить("ТипОборудованияИмя" , XMLСтрока(Выборка.ТипОборудования)); + ДанныеДрайвера.Вставить("БезопасноеПодключение" , Выборка.БезопасноеПодключение); + + СпособПодключения = Выборка.СпособПодключения; + ПодключениеИзМакета = СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзМакета; + ПодключениеЛокальноПоИдентификатору = СпособПодключения = Перечисления.СпособПодключенияДрайвера.ЛокальноПоИдентификатору; + + ШаблонЛокализации = Неопределено; + МакетДоступен = Ложь; + ИмяДрайвера = Выборка.ИмяПредопределенныхДанных; + ИмяМакетаДрайвера = Выборка.ИмяМакетаДрайвера; + Если Не ПустаяСтрока(ИмяДрайвера) Тогда + МенеджерОборудования.ЗаполнитьДанныеМакетов(ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, ШаблонЛокализации, КодЯзыка); + КонецЕсли; + + ДанныеДрайвера.Вставить("СпособПодключения" , СпособПодключения); + ДанныеДрайвера.Вставить("ПодключениеИзМакета" , ПодключениеИзМакета); + ДанныеДрайвера.Вставить("ПодключениеЛокальноПоИдентификатору", ПодключениеЛокальноПоИдентификатору); + ДанныеДрайвера.Вставить("ИмяМакетаДрайвера" , ИмяМакетаДрайвера); + ДанныеДрайвера.Вставить("МакетДоступен" , МакетДоступен); + ДанныеДрайвера.Вставить("ШаблонЛокализации" , ШаблонЛокализации); + ТипыОборудования = МенеджерОборудования.ДоступныеТипыНесертифицированногоОборудования(); + Если ТипыОборудования.Найти(Выборка.ТипОборудования) = Неопределено Тогда + Несертифицированное = Ложь; + Иначе + Несертифицированное = Истина; + КонецЕсли; + ДанныеДрайвера.Вставить("Несертифицированное" , Несертифицированное); + + КонецЦикла; + + Возврат ДанныеДрайвера; + +КонецФункции + +// Функция возвращает драйверы по типу оборудования +// +// Параметры: +// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - типы подключаемого оборудования. +// ТолькоДоступные - Булево - признак только доступных драйверов. +// СнятыеСПоддержкиДрайвера - Булево - признак отображения снятых с поддержки драйверов. +// ТолькоРекомендуемоеИспользование - Булево - признак отображения только рекомендуемых к использованию драйверов. +// +// Возвращаемое значение: +// Массив Из СправочникСсылка.ДрайверыОборудования +// +Функция ДрайверыПоТипуОборудования(ТипОборудования, ТолькоДоступные = Истина, СнятыеСПоддержкиДрайвера = Ложь, РекомендуемоеИспользование = Истина) Экспорт + + СписокДрайверов = Новый СписокЗначений(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДрайверыОборудованияПереопределяемый.Ссылка КАК Ссылка, + | ДрайверыОборудованияПереопределяемый.Наименование КАК Наименование, + | ДрайверыОборудованияПереопределяемый.ТипОборудования КАК ТипОборудования, + | ДрайверыОборудованияПереопределяемый.Предопределенный КАК Предопределенный + |ИЗ + | Справочник.ДрайверыОборудования КАК ДрайверыОборудованияПереопределяемый + |ГДЕ + | ДрайверыОборудованияПереопределяемый.ТипОборудования = &ТипОборудования + | И (НЕ &ТолькоДоступные + | ИЛИ НЕ ДрайверыОборудованияПереопределяемый.ПометкаУдаления) + | И (&СнятыеСПоддержки + | ИЛИ НЕ ДрайверыОборудованияПереопределяемый.СнятСПоддержки) + | И (НЕ &РекомендуемоеИспользование + | ИЛИ ДрайверыОборудованияПереопределяемый.РекомендуемоеИспользование) + | + |УПОРЯДОЧИТЬ ПО + | ДрайверыОборудованияПереопределяемый.Наименование"; + + Запрос.УстановитьПараметр("ТолькоДоступные" , ТолькоДоступные); + Запрос.УстановитьПараметр("СнятыеСПоддержки", СнятыеСПоддержкиДрайвера); + Запрос.УстановитьПараметр("РекомендуемоеИспользование", РекомендуемоеИспользование); + Запрос.УстановитьПараметр("ТипОборудования" , ТипОборудования); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + СписокДрайверов.Добавить(ВыборкаДетальныеЗаписи.Ссылка, ВыборкаДетальныеЗаписи.Наименование); + КонецЦикла; + + Возврат СписокДрайверов; + +КонецФункции + +// СтандартныеПодсистемы.УправлениеДоступом +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +// +// Параметры: +// Ограничение - Структура: +// * Текст - Строка - ограничение доступа для пользователей. +// Если пустая строка, значит, доступ разрешен. +// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей. +// Если пустая строка, значит, доступ запрещен. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически. +// - Булево - если Ложь, то всегда записывать ключи доступа, +// если Истина, тогда не записывать ключи доступа, +// а использовать ключи доступа владельца (требуется, +// чтобы ограничение было строго по объекту-владельцу). +// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также +// как у параметра ПоВладельцуБезЗаписиКлючейДоступа. +// +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Менеджер = "Справочник.ДрайверыОборудования"; + МенеджерОборудованияВызовСервераПереопределяемый.ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает массив идентификаторов всех драйверов Библиотеки +// +// Возвращаемое значение: +// Массив из Строка - массив содержащий идентификаторы драйверов +Функция ИдентификаторыДрайверов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Идентификаторы = Новый Массив(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДрайверыОборудования.ИдентификаторОбъекта КАК Идентификатор + |ИЗ + | Справочник.ДрайверыОборудования КАК ДрайверыОборудования + |ГДЕ + | ДрайверыОборудования.Предопределенный + | И НЕ ДрайверыОборудования.СнятСПоддержки"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Идентификаторы.Добавить(Выборка.Идентификатор); + КонецЦикла; + + МенеджерОборудованияВызовСервераПереопределяемый.ПриПолученииИдентификаторовДрайверов(Идентификаторы); + + Возврат Идентификаторы; + +КонецФункции + +Процедура ЗарегистрироватьНесертифицированныеДрайверы(ДрайверыОборудования) Экспорт + + +КонецПроцедуры + +#КонецОбласти + + +#КонецЕсли diff --git a/Catalogs/ДрайверыОборудования/Ext/ObjectModule.bsl b/Catalogs/ДрайверыОборудования/Ext/ObjectModule.bsl new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Ext/ObjectModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Catalogs/ДрайверыОборудования/Ext/Predefined.xml b/Catalogs/ДрайверыОборудования/Ext/Predefined.xml new file mode 100644 index 0000000..93d42f8 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Ext/Predefined.xml @@ -0,0 +1,981 @@ + + + + Драйвер1СРарусДисплеиПокупателя + 0 + 1С-Рарус:Дисплеи покупателя + false + + + Драйвер1СРарусФискальныеРегистраторыМебиус + 0 + 1С-Рарус:Фискальные регистраторы Мебиус + false + + + Драйвер1СРарусФискальныеРегистраторыФеликс + 0 + 1С-Рарус:Фискальные регистраторы Феликс + false + + + Драйвер1СWebСервисОборудование + 0 + 1С:Web-сервис оборудование + false + + + Драйвер1СДисплейПокупателя + 0 + 1С:Дисплей покупателя + false + + + Драйвер1СККМED + 0 + 1С:ККМ ED + false + + + Драйвер1СККМOffline + 0 + 1С:Офлайн-оборудование + false + + + Драйвер1СПринтерЧеков + 0 + 1С:Принтер чеков + false + + + Драйвер1ССканерыШтрихкода + 0 + 1С:Сканеры штрихкода (COM) + false + + + Драйвер1ССканерыШтрихкодаNative + 0 + 1С:Сканеры штрихкода (NativeApi) + false + + + Драйвер1ССчитывателиМагнитныхКарт + 0 + 1С:Считыватели магнитных карт + false + + + Драйвер1ССчитывателиМагнитныхКартNative + 0 + 1С:Считыватели магнитных карт (NativeApi) + false + + + Драйвер1СФискальныйРегистраторЭмулятор + 0 + 1С:Фискальный регистратор (эмулятор) + false + + + Драйвер1СЭвоторККМOffline + 0 + 1С:Эвотор + false + + + Драйвер1СЭквайринговыеТерминалыСбербанк + 0 + 1С:Эквайринговые терминалы Сбербанк + false + + + Драйвер1СЭквайринговыеТерминалыСбербанк2х + 0 + 1С:Эквайринговые терминалы Сбербанк 2.Х + false + + + Драйвер1СЭлектронныеВесы + 0 + 1С:Электронные весы (NativeApi) + false + + + ДрайверACOMВесыСПечатьюЭтикеток + 0 + ACOM:Весы с печатью этикеток + false + + + ДрайверARCUS2ЭквайринговыеТерминалыIngenico + 0 + ARCUS2:Эквайринговые терминалы Ingenico + false + + + ДрайверARSККТ54ФЗ + 0 + ars:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверBizerbaВесыСПечатьюЭтикеток + 0 + Bizerba:Весы с печатью этикеток + false + + + ДрайверCASВесыСПечатьюЭтикеток + 0 + CAS:Весы с печатью этикеток + false + + + ДрайверCASВесыСПечатьюЭтикеток2х + 0 + CAS:Весы с печатью этикеток 2.х + false + + + ДрайверCASЭлектронныеВесы + 0 + CAS:Электронные весы + false + + + ДрайверCASЭлектронныеВесы2х + 0 + CAS:Электронные весы 2.х + false + + + ДрайверКлеверенсСканерШтрихкода + 0 + CLEVERENCE:Драйвер ТСД для мобильной платформы 1С + false + + + ДрайверКлеверенсТерминалыСбораДанных + 0 + CLEVERENCE:Терминалы сбора данных + false + + + ДрайверERFIDСчитывательRFID + 0 + ERFID:Считыватель RFID + false + + + ДрайверFITККТ54ФЗ + 0 + FIT:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверIboxProПоддержкаMPosЭквайринга + 0 + iboxPro:Поддержка mPos эквайринга + false + + + ДрайверIngenicoЭквайринговыеТерминалыARCUS + 0 + Ingenico:Драйвер эквайринговой системы ARCUS 2.1 + false + + + ДрайверINVERSUMЭквайринговыеТерминалы + 0 + INVERSUM:Эквайринговые терминалы (ФЗ-491) + false + + + ДрайверIronLogicСчитывателиБесконтактныхКарт + 0 + IronLogic:Считыватели бесконтактных карт Z-2 + false + + + ДрайверISBCСчитывательRFID + 0 + ISBC:Считыватель RFID + false + + + ДрайверMERTECHСканерШтрихкода + 0 + MERTECH:Сканер штрихкода ТСД + false + + + ДрайверMitsu54ФЗ4ФФД12 + 0 + Mitsu:ККТ с передачей данных в ОФД (ФФД 1.2) УСН НДС + false + + + ДрайверMPos2canЭквайринг + 0 + mPos2can:Поддержка 2can эквайринга + false + + + ДрайверMSTARККТ54ФЗ + 0 + MSTAR:ККТ с передачей данных в ОФД (ФФД 1.2) + false + + + ДрайверNEWTONККТ54ФЗ + 0 + NEWTON:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверПОСЦентрЭлектронныеВесыNG + 0 + POScenter:Электронные весы SLIM NG + false + + + ДрайверPOSUAДисплеиПокупателя + 0 + POSUA: Дисплеи покупателя + false + + + ДрайверRightScanККТ54ФЗ + 0 + RightScan:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверRightScanТерминалыСбораДанных + 0 + RightScan:Терминалы сбора данных (ПО RS:Mobile ACS) + false + + + ДрайверRightScanУстройстваВвода + 0 + RightScan:Устройства ввода данных ТСД Urovo + false + + + ДрайверRightScanУстройствоПечати + 0 + RightScan:Устройство печати ТСД Urovo + false + + + ДрайверScanPortУстройстваВвода + 0 + ScanPort:Устройства ввода данных + false + + + ДрайверSKAM1CЭквайринговыеСистемы + 0 + SKAM-1C:Эквайринговые системы + false + + + ДрайверSKAMUNIPOSЭквайринговыеСистемы + 0 + SKAM-UNIPOS:Эквайринговое решение СофтКейс + false + + + ДрайверSkyPOSЭквайринговыеТерминалы + 0 + SkyPOS:Эквайринговые терминалы + false + + + ДрайверTACTILIONЭквайринговыеТерминалы + 0 + TACTILION:Эквайринговые терминалы + false + + + ДрайверTRPOSЭквайринговыеТерминалы + 0 + TRPOS:Эквайринговые терминалы + false + + + ДрайверUCSEFTPOSЭквайринговыеТерминалы + 0 + UCS-AT:Эквайринговые терминалы + false + + + ДрайверWNJIККТ54ФЗ + 0 + WNJI:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверАЗУРККТ54ФЗФФД12 + 0 + АЗУР:ККТ с передачей данных в ОФД (ФФД 1.2) + false + + + ДрайверАЗУРПлатежнаяСистема + 0 + АЗУР:Платежная система + false + + + ДрайверАТОЛВесыСПечатьюЭтикеток8X + 0 + АТОЛ:Весы c печатью этикеток 8.X + false + + + ДрайверАтолДисплеиПокупателя + 0 + АТОЛ:Дисплеи покупателя + false + + + ДрайверАтолДисплеиПокупателя8X + 0 + АТОЛ:Дисплеи покупателя 8.X + false + + + ДрайверАТОЛДрайверПлатежногоЯдраПэй + 0 + АТОЛ:Драйвер платежного ядра АТОЛ Пэй + false + + + ДрайверАтолККТ54ФЗ + 0 + АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверАтолККТ54ФЗ10X + 0 + АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) 10.x + false + + + ДрайверАтолККТ54ФЗ9X + 0 + АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) 9.x + false + + + ДрайверАТОЛККТ54ФЗ10XФФД12X + 0 + АТОЛ:ККТ с передачей данных в ОФД 10.x (ФФД 1.2) УСН НДС + false + + + ДрайверАТОЛККТ54ФЗ10XФФД12 + 0 + АТОЛ:ККТ с передачей данных в ОФД 10.Х (ФФД 1.2) + false + + + ДрайверАтолПринтераЭтикеток + 0 + АТОЛ:Принтера этикеток + false + + + ДрайверАтолККМOffline + 0 + АТОЛ:Рабочее место кассира + false + + + ДрайверАтолСканерыШтрихкода + 0 + АТОЛ:Сканеры штрихкода + false + + + ДрайверАтолСканерыШтрихкода8X + 0 + АТОЛ:Сканеры штрихкода 8.X + false + + + ДрайверАтолСчитывателиМагнитныхКарт + 0 + АТОЛ:Считыватели магнитных карт + false + + + ДрайверАтолСчитывателиМагнитныхКарт8X + 0 + АТОЛ:Считыватели магнитных карт 8.X + false + + + ДрайверАтолТерминалыСбораДанных + 0 + АТОЛ:Терминалы сбора данных + false + + + ДрайверАтолТерминалыСбораДанныхMobileLogistics + 0 + АТОЛ:Терминалы сбора данных MobileLogistics 8.Х + false + + + ДрайверАТОЛСканерШтрихкода + 0 + АТОЛ:Устройства ввода данных ТСД + false + + + ДрайверАтолФискальныеРегистраторыУниверсальный + 0 + АТОЛ:Фискальные регистраторы (Универсальный) + false + + + ДрайверАтолФискальныеРегистраторы + 0 + АТОЛ:Фискальные регистраторы 6.Х + false + + + ДрайверАтолФискальныеРегистраторы8X + 0 + АТОЛ:Фискальные регистраторы 8.Х + false + + + ДрайверАтолЭлектронныеВесы + 0 + АТОЛ:Электронные весы + false + + + ДрайверАтолЭлектронныеВесы8X + 0 + АТОЛ:Электронные весы 8.Х + false + + + ДрайверВерсияТK1Ф54ФЗ + 0 + Версия-Т:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверВерсияТККТ54ФЗ + 0 + Версия-Т:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверВерсияТФискальныеРегистраторы + 0 + Версия-Т:Фискальные регистратоы КАСБИ + false + + + ДрайверГАЗПРОМБАНКЭквайринговыеТерминалы + 0 + ГАЗПРОМБАНК:Эквайринговые терминалы + false + + + ДрайверГексагонПринтераЭтикеток + 0 + Гексагон:Принтера этикеток Zebra,Proton,Toshiba-TEC,Datamax-O neil + false + + + ДрайверГексагонСканерыШтрихкода + 0 + Гексагон:Сканеры штрихкода Proton + false + + + ДрайверГексагонТерминалыСбораДанных + 0 + Гексагон:Терминалы сбора данных Goods + false + + + ДрайверДримкасККТ54ФЗ44 + 0 + Дримкас:ККТ с передачей данных в ОФД (ФФД 1.2) УСН НДС + false + + + ДрайверДримкасККТ54ФЗ + 0 + Дримкас:ККТ с передачей данных в ОФД Вики Принт (ФФД 1.2) + false + + + ДрайверДримкасФискальныеРегистраторыVikiPrint + 0 + Дримкас:Фискальные регистраторы VikiPrint + false + + + ДрайверИнитпроККТ54ФЗ + 0 + Инитпро:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверИнитпроККТ54ФЗФФД12 + 0 + Инитпро:ККТ с передачей данных в ОФД (ФФД 1.2) + false + + + ДрайверИнкотексККТ54ФЗ + 0 + Инкотекс:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверИнкотексККТ54ФЗФФ12 + 0 + Инкотекс:ККТ с передачей данных в ОФД (ФФД 1.2) УСН НДС + false + + + ДрайверИНПАСЭквайринговыеТерминалыSmart + 0 + ИНПАС:Эквайринговые терминалы Smart + false + + + ДрайверИНПАСЭквайринговыеТерминалыUNIPOS + 0 + ИНПАС:Эквайринговые терминалы UNIPOS + false + + + ДрайверИНПАСЭквайринговыеТерминалыНСПК + 0 + ИНПАС:Эквайринговые терминалы UNIPOS (ФЗ-491) + false + + + ДрайверИскраККТ54ФЗ + 0 + ИСКРА:ККТ с передачей данных в ОФД (ФФД 1.2) + false + + + ДрайверИскраФискальныеРегистраторыПрим + 0 + ИСКРА:Фискальные регистраторы Прим + false + + + ДрайверКАСТОМФ54ФЗ + 0 + КАСТОМ:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверККСДисплеиПокупателя + 0 + ККС:Дисплеи покупателя + false + + + ДрайверККСККТ54ФЗ + 0 + ККС:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверККСККТ54ФЗ2Х + 0 + ККС:ККТ с передачей данных в ОФД (ФФД 1.2) УСН НДС + false + + + ДрайверККСФискальныеРегистраторы + 0 + ККС:Фискальные регистраторы Спарк + false + + + ДрайверКлеверенсСчитывателиRFID + 0 + Клеверенс:Считыватели RFID + false + + + ДрайверКристаллСервисДисплеиПокупателяVikiVision + 0 + Кристалл Сервис:Дисплей покупателя VikiVision + false + + + ДрайверКристаллСервисФискальныеРегистраторыPirit + 0 + Кристалл Сервис:Фискальные регистраторы Pirit + false + + + ДрайверМАСЭлектронныеВесы + 0 + МАС:Электронные весы + false + + + ДрайверМассаКВесыСПечатьюЭтикеток + 0 + Масса-К:Весы с печатью этикеток + false + + + ДрайверМассаКЭлектронныеВесы + 0 + Масса-К:Электронные весы + false + + + ДрайверМЕБИУСККТ54ФЗ + 0 + МЕБИУС:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверМертехВесыСПечатьюЭтикеток + 0 + Мертех:Весы с печатью этикеток + false + + + ДрайверМертехВесыСПечатьюЭтикетокРаспознаватель + 0 + Мертех:Весы с печатью этикеток и устройством распознавания + false + + + ДрайверМертехРаспознаватель + 0 + Мертех:Устройство распознавания + false + + + ДрайверМертехЭлектронныеВесы + 0 + Мертех:Электронные весы + false + + + ДрайверМертехЭлектронныеВесыУстройствоРаспознавания + 0 + Мертех:Электронные весы с устройством распознавания + false + + + ДрайверНАИСЭлектронныеВесы + 0 + НАИС:Весовые терминалы ВТ + false + + + ДрайверНЕВА54ФЗ4ФФД12 + 0 + НЕВА:ККТ с передачей данных в ОФД (ФФД 1.2) УСН НДС + false + + + ОбработчикОблачныхККТ + 0 + Обработчик облачных ККТ + false + + + ДрайверОРИОНФискальныеРегистраторы + 0 + ОРИОН:Фискальный регистратор ФР01К + false + + + ДрайверПБФЭквайринговыеТерминалы + 0 + ПБФ:Эквайринговые терминалы + false + + + ДрайверПОСЦентрККТ54ФЗ4ФФД12NG + 0 + ПОСЦентр:ККТ с передачей данных в ОФД (ФФД 1.2) NG УСН НДС + false + + + ДрайверПОСЦентрККТ54ФЗ4ФФД12 + 0 + ПОСЦентр:ККТ с передачей данных в ОФД (ФФД 1.2) УСН НДС + false + + + ДрайверРБСВесыCПечатьюЭтикеток + 0 + РБС:Весы c печатью этикеток KS + false + + + ДрайверРБСВесыCПечатьюЭтикетокVenus + 0 + РБС:Весы c печатью этикеток Venus + false + + + ДрайверРРЭлектроККТ54ФЗ4ФФД12 + 0 + РР-Электро:ККТ с передачей данных в ОФД (ФФД 1.2) УСН НДС + false + + + ДрайверРусГардСчитывательМагнитныхКарт + 0 + РусГард:Считыватель магнитных карт + false + + + ДрайверСБРФЭквайринговыеТерминалы + 0 + СБРФ:Эквайринговые терминалы + false + + + ДрайверСервисПлюсВесыСПечатьюЭтикеток + 0 + СервисПлюс:Весы с печатью этикеток + false + + + ДрайверСервисПлюсЭлектронныеВесы + 0 + СервисПлюс:Электронные весы + false + + + ДрайверСканкодСканерШтрихкода + 0 + Сканкод:Cканер штрихкода Chipherlab ТСД + false + + + ДрайверСканкодДисплеиПокупателя + 0 + Сканкод:Дисплеи покупателя + false + + + ДрайверСканкодДисплеиПокупателяNative + 0 + Сканкод:Дисплеи покупателя (NativeAPI) + false + + + ДрайверСканкодПринтераЭтикетокGodexEZPL8Native + 0 + Сканкод:Принтера этикетокGodexEZPL8 (NativeAPI) + false + + + ДрайверСканкодСканерыШтрихкода + 0 + Сканкод:Сканеры штрихкода + false + + + ДрайверСканкодСчитывательRFIDCipherLab + 0 + Сканкод:Считыватели RFID CipherLab + false + + + ДрайверСканкодТерминалыСбораДанных + 0 + Сканкод:Терминалы сбора данных + false + + + ДрайверСканкодТерминалыСбораДанныхNative + 0 + Сканкод:Терминалы сбора данных CipherLAB 8x00 (NativeApi) + false + + + ДрайверСканкодТерминалыСбораДанныхCipherLab8G2 + 0 + Сканкод:Терминалы сбора данных CipherLab8 G2 + false + + + ДрайверСканпортТерминалСбораДанных + 0 + Сканпорт:Терминал сбора данных + false + + + ДрайверСканситиПринтераЭтикеток + 0 + Скансити:Принтер печати этикеток TSC + false + + + ДрайверСканситиТерминалСбораДанныхCitySoftBusiness + 0 + Скансити:Терминал сбора данных CitySoft Business + false + + + ДрайверСканситиТерминалСбораДанныхCitySoftLite + 0 + Скансити:Терминал сбора данных CitySoft Lite + false + + + ДрайверСканситиТерминалСбораДанныхCitySoftStandart + 0 + Скансити:Терминал сбора данных CitySoft Standart + false + + + ДрайверСканситиТерминалыСбораДанных + 0 + Скансити:Терминалы сбора данных + false + + + ДрайверСканситиУстройстваВвода + 0 + Скансити:Устройства ввода данных ТСД + false + + + ДрайверСчетмашККТ54ФЗ + 0 + Счетмаш:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверХарвестрТерминалыСбораДанных + 0 + Харвестр:Приложение сбора данных + false + + + ДрайверШтрихМВесыСПечатьюЭтикеток + 0 + ШТРИХ-М:Весы с печатью этикеток + false + + + ДрайверШтрихМВесыСПечатьюЭтикетокШтрихПринт + 0 + ШТРИХ-М:Весы с печатью этикеток ШТРИХ-ПРИНТ + false + + + ДрайверШтрихМВесыСПечатьюЭтикетокШтрихПринтNG + 0 + ШТРИХ-М:Весы с печатью этикеток ШТРИХ-ПРИНТ NG + false + + + ДрайверШтрихМДисплеиПокупателя + 0 + ШТРИХ-М:Дисплеи покупателя + false + + + ДрайверШтрихМККМOffline + 0 + ШТРИХ-М:Кассир + false + + + ДрайверШтрихМККТ54ФЗ + 0 + ШТРИХ-М:ККТ с передачей данных в ОФД (54-ФЗ) 4.14 + false + + + ДрайверШтрихМККТ54ФЗ415 + 0 + ШТРИХ-М:ККТ с передачей данных в ОФД (54-ФЗ) 4.15 + false + + + ДрайверШтрихМККТ54ФЗ4ФФД12 + 0 + ШТРИХ-М:ККТ с передачей данных в ОФД (ФФД 1.2) + false + + + ДрайверШтрихМККТ54ФЗ4ФФД12_517 + 0 + ШТРИХ-М:ККТ с передачей данных в ОФД (ФФД 1.2) 5.17 + false + + + ДрайверШтрихМПлатежныйТерминалYarus + 0 + ШТРИХ-М:Платежный терминал Yarus + false + + + ДрайверШтрихМТерминалыСбораДанных + 0 + ШТРИХ-М:Терминалы сбора данных + false + + + ДрайверШтрихМФискальныеРегистраторы + 0 + ШТРИХ-М:Фискальные регистраторы + false + + + ДрайверШтрихМФискальныеРегистраторыУниверсальный + 0 + ШТРИХ-М:Фискальные регистраторы (Универсальный) + false + + + ДрайверШтрихМЭлектронныеВесы + 0 + ШТРИХ-М:Электронные весы + false + + + ДрайверШтрихМЭлектронныеВесыPOS2 + 0 + ШТРИХ-М:Электронные весы POS2 + false + + + ДрайверЭвоторДисплейПокупателя + 0 + Эвотор:Дисплей покупателя + false + + + ДрайверЭвоторККТ54ФЗ + 0 + Эвотор:ККТ с передачей данных в ОФД (54-ФЗ) + false + + \ No newline at end of file diff --git a/Catalogs/ДрайверыОборудования/Forms/ФормаСписка.xml b/Catalogs/ДрайверыОборудования/Forms/ФормаСписка.xml new file mode 100644 index 0000000..81ec2a3 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ДрайверыОборудования/Forms/ФормаСписка/Ext/Form.xml b/Catalogs/ДрайверыОборудования/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..89dcac9 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,322 @@ + +
+ DontBlock + Vertical + + Abort + Cancel + CancelSearch + ChangeHistory + Close + Copy + Delete + DynamicListStandardSettings + Find + FindByCurrentValue + Help + Ignore + ListSettings + LoadDynamicListSettings + No + OK + OpenFromMainServer + OpenFromStandaloneServer + RestoreValues + Retry + SaveDynamicListSettings + SaveValues + Yes + + + false + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Подключить новый</v8:content> + </v8:item> + + + + + + + + + + + ПриСозданииНаСервере + + + + List + true + SingleRow + Cell + ExpandTopLevel + true + AsFile + Список + Список.DefaultPicture + + CancelSearch + Copy + CopyToClipboard + Delete + DynamicListStandardSettings + Find + FindByCurrentValue + ListSettings + LoadDynamicListSettings + OutputList + SaveDynamicListSettings + SearchHistory + + None + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + false + + + + false + + ДрайверыОборудования + SearchStringRepresentation + + + + + + false + + ДрайверыОборудования + ViewStatusRepresentation + + Left + + + + + false + + ДрайверыОборудования + SearchControl + + + + + + + Список.Ссылка + + false + + + + + + Список.Наименование + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Наименование</v8:content> + </v8:item> + + + + + + Список.СпособПодключения + + + + +
+
+ + + + cfg:DynamicList + + true + + true + true + ВЫБРАТЬ + СправочникДрайверыОборудованияПереопределяемый.Ссылка, + СправочникДрайверыОборудованияПереопределяемый.ПометкаУдаления, + СправочникДрайверыОборудованияПереопределяемый.Наименование, + СправочникДрайверыОборудованияПереопределяемый.ИдентификаторОбъекта, + СправочникДрайверыОборудованияПереопределяемый.ВерсияДрайвера, + СправочникДрайверыОборудованияПереопределяемый.ТипОборудования, + СправочникДрайверыОборудованияПереопределяемый.СпособПодключения, + СправочникДрайверыОборудованияПереопределяемый.Предопределенный, + СправочникДрайверыОборудованияПереопределяемый.ИмяПредопределенныхДанных, + ВЫБОР КОГДА СправочникДрайверыОборудованияПереопределяемый.Предопределенный + ТОГДА "%1" + ИНАЧЕ "%2" КОНЕЦ КАК ВариантПоставки +ИЗ + Справочник.ДрайверыОборудования КАК СправочникДрайверыОборудованияПереопределяемый + + СпособПодключения + СпособПодключения + + + Наименование + Наименование + + + ИмяМакетаДрайвера + ИмяМакетаДрайвера + + + СнятСПоддержки + СнятСПоддержки + + + ЛокальныйРежим + ЛокальныйРежим + + + Ссылка + Ссылка + + + СетевойРежим + СетевойРежим + + + СерверныйРежим + СерверныйРежим + + + ПометкаУдаления + ПометкаУдаления + + + ИдентификаторОбъекта + ИдентификаторОбъекта + + + ВерсияДрайвера + ВерсияДрайвера + + + ТипОборудования + ТипОборудования + + + Предопределенный + Предопределенный + + + ИмяПредопределенныхДанных + ИмяПредопределенныхДанных + + + ВариантПоставки + ВариантПоставки + + + ru + Вариант поставки + + + + Catalog.ДрайверыОборудования + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отображать дополнительные элементы</v8:content> + </v8:item> + + + xs:boolean + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузить в информационную базу...</v8:content> + </v8:item> + + + + ru + Загрузить новый драйвер из файла + + + ЗагрузитьНовыйДрайверИзФайла + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установленный на локальном компьютере</v8:content> + </v8:item> + + + + ru + Установленный на локальном компьютере + + + УстановленныйНаЛокальномКомпьютере + + +
\ No newline at end of file diff --git a/Catalogs/ДрайверыОборудования/Forms/ФормаСписка/Ext/Form/Module.bsl b/Catalogs/ДрайверыОборудования/Forms/ФормаСписка/Ext/Form/Module.bsl new file mode 100644 index 0000000..e3eae19 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,148 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ОтображатьДопЭлементы = НЕ ОбщегоНазначенияБПО.ЭтоМобильнаяПлатформа(); + + // АПК: 484-выкл не используется БСП + Список.ТекстЗапроса = СтрШаблон(Список.ТекстЗапроса, + НСтр("ru = 'Поставляемый в составе конфигурации'"), + НСтр("ru = 'Подключаемый по стандарту """"1С:Совместимо""""'")); + // АПК: 484-вкл + + ДобавлениеНовыхДрайверов = МенеджерОборудования.ДоступноДобавлениеНовыхДрайверов(); + + ПравоДоступаДобавление = ПравоДоступа("Добавление", Метаданные.Справочники.ДрайверыОборудования); + + Элементы.ДрайверыОборудования.КоманднаяПанель.Видимость = ПравоДоступаДобавление; + + Элементы.ДрайверыОборудования.ИзменятьСоставСтрок = ДобавлениеНовыхДрайверов; + ЭлементГруппировки = Список.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ЭлементГруппировки.Поле = Новый ПолеКомпоновкиДанных("ВариантПоставки"); + ЭлементГруппировки.Использование = Истина; + + Элементы.ДрайверыОборудования.ИзменятьСоставСтрок = ДобавлениеНовыхДрайверов; + ЭлементГруппировки = Список.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ЭлементГруппировки.Поле = Новый ПолеКомпоновкиДанных("ТипОборудования"); + ЭлементГруппировки.Использование = Истина; + + Элементы.ДрайверыОборудования.Шапка = ОтображатьДопЭлементы; + Элементы.ПодключитьНовый.Видимость = ОтображатьДопЭлементы; + Элементы.СпособПодключения.Видимость = ОтображатьДопЭлементы; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура УстановленныйНаЛокальномКомпьютере(Команда) + + Элементы.ДрайверыОборудования.ДобавитьСтроку(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьНовыйДрайверИзФайла(Команда) + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Ключ", "Значение"); + + ПараметрыПоискаТипаКомпонентыПодключения = ВнешниеКомпонентыБПОКлиент.ПараметрыПоискаДополнительнойИнформации(); + ПараметрыПоискаТипаКомпонентыПодключения.ИмяФайлаXML = "INFO.XML"; + ПараметрыПоискаТипаКомпонентыПодключения.ВыражениеXPath = "//drivers/component/@type"; + + ПараметрыЗагрузки = ВнешниеКомпонентыБПОКлиент.ПараметрыЗагрузки(); + ПараметрыЗагрузки.ПараметрыПоискаДополнительнойИнформации.Вставить("ТипКомпонентыПодключения", ПараметрыПоискаТипаКомпонентыПодключения); + + Оповещение = Новый ОписаниеОповещения("ЗагрузитьНовыйДрайверИзФайла_Завершение", ЭтотОбъект, ДополнительныеПараметры); + + ВнешниеКомпонентыБПОКлиент.ЗагрузитьКомпонентуИзФайла(Оповещение, ПараметрыЗагрузки); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура УстановитьДрайверОборудования(Команда) + + ОчиститьСообщения(); + + ТекущиеДанные = Элементы.ДрайверыОборудования.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТекущиеДанные.Свойство("Ссылка") Тогда + МенеджерОборудованияКлиент.УстановитьДрайверОборудования(Неопределено, ТекущиеДанные.Ссылка); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +// Выполняет создание драйверов оборудования +// +// Параметры: +// РезультатЗагрузки - Структура: +// * Идентификатор - Строка +// * Наименование - Строка +// * Версия - Строка +// МассивТиповОборудования - Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования +// +// Возвращаемое значение: +// Массив из Структура +Функция СоздатьДрайверыОборудованияНаСервере(РезультатЗагрузки, МассивТиповОборудования) + + МассивДрайверов = Новый Массив(); + Для Каждого ТипОборудования Из МассивТиповОборудования Цикл + ПараметрыСоздания = МенеджерОборудованияКлиентСервер.ПараметрыСозданияНовогоДрайвера(); + ПараметрыСоздания.Вставить("Загружена", Истина); + ПараметрыСоздания.ТипОборудования = ТипОборудования; + Результат = РезультатЗагрузки; // Структура + ПараметрыСоздания.ИдентификаторОбъекта = Результат.Идентификатор; + ПараметрыСоздания.Наименование = Результат.Наименование; + ПараметрыСоздания.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы; + НовыйЭлемент = МенеджерОборудования.СоздатьДрайверОборудования(ПараметрыСоздания); + МассивДрайверов.Добавить(НовыйЭлемент); + КонецЦикла; + Возврат МассивДрайверов; + +КонецФункции + +&НаКлиенте +Процедура ЗагрузитьНовыйДрайверИзФайла_Завершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат.Загружена Тогда + + ТипОборудования = Результат.ДополнительнаяИнформация.Получить("ТипКомпонентыПодключения"); + Если ПустаяСтрока(ТипОборудования) Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Не указан тип оборудования загружаемого драйвера.'") ); + Возврат; + КонецЕсли; + + МассивТиповОборудования = СтрРазделить(СтрЗаменить(ТипОборудования, ";", ","), ","); + МассивДрайверов = СоздатьДрайверыОборудованияНаСервере(Результат, МассивТиповОборудования); + Если МассивДрайверов.Количество()>0 Тогда + Элементы.ДрайверыОборудования.Обновить(); + Элементы.ДрайверыОборудования.ТекущаяСтрока = МассивДрайверов[МассивДрайверов.ВГраница()]; + КонецЕсли; + + УстановитьДрайверОборудования(Неопределено); + Иначе + ПоказатьПредупреждение(, НСтр("ru = 'Ошибка загрузки нового драйвера.'") ); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Catalogs/ДрайверыОборудования/Forms/ФормаЭлемента.xml b/Catalogs/ДрайверыОборудования/Forms/ФормаЭлемента.xml new file mode 100644 index 0000000..986f74b --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Forms/ФормаЭлемента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ДрайверыОборудования/Forms/ФормаЭлемента/Ext/Form.xml b/Catalogs/ДрайверыОборудования/Forms/ФормаЭлемента/Ext/Form.xml new file mode 100644 index 0000000..a1c91d9 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Forms/ФормаЭлемента/Ext/Form.xml @@ -0,0 +1,606 @@ + +
+ LockOwner + Vertical + Items + + false + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительно</v8:content> + </v8:item> + + + + + + + + + + ПриОткрытии + ПриСозданииНаСервере + ПередЗаписьюНаСервере + + + + false + + + ru + Снят с поддержки + + + Vertical + WeakSeparation + false + style:ReportHeaderBackColor + + + + false + true + style:NegativeTextColor + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Внимание! Данный драйвер устарел и снят с поддержки. +Использование данного драйвера не рекомендуется и может приводить к некорректной работе.</v8:content> + </v8:item> + + + + + + Объект.СообщениеПриИспользовании + Right + + + + + + + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Не сертифицирован</v8:content> + </v8:item> + + + + ru + Снят с поддержки + + + Vertical + WeakSeparation + false + style:ReportHeaderBackColor + + + + false + true + style:NegativeTextColor + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Драйвер не сертифицирован фирмой 1С.</v8:content> + </v8:item> + + + + + + + + false + false + true + style:NegativeTextColor + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Макет для данного драйвера не найден.</v8:content> + </v8:item> + + style:ReportGroup1BackColor + + + + + false + false + true + style:NegativeTextColor + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Внимание! Данный драйвер является эмулятором, и предназначен только для +целей тестирования разрабатываемых программных продуктов и обучения.</v8:content> + </v8:item> + + style:ReportGroup1BackColor + + + + + Объект.ТипОборудования + false + true + false + false + true + + + + ТипОборудованияНачалоВыбора + + + + Объект.Description + Left + EnterOnInput + true + false + + + + + РежимРаботы + false + true + false + + + + + Объект.ИдентификаторОбъекта + Left + ShowBottom + EnterOnInput + true + false + + + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Подключение</v8:content> + </v8:item> + + HorizontalIfPossible + None + false + + + + Объект.СпособПодключения + true + false + + + + + Объект.БезопасноеПодключение + Right + + + + + + + false + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа</v8:content> + </v8:item> + + true + HorizontalIfPossible + Usual + WeakSeparation + false + + + + Объект.ЛокальныйРежим + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Локальный</v8:content> + </v8:item> + + Right + Right + + + + + Объект.СетевойРежим + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сетевой</v8:content> + </v8:item> + + Right + Right + + + + + Объект.СерверныйРежим + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Серверный</v8:content> + </v8:item> + + Right + Left + + + + + + + Объект.ВерсияДрайвера + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Версия драйвера</v8:content> + </v8:item> + + Left + false + + + + + ТекущийСтатус + true + Left + false + false + false + + + + + УстановленнаяВерсия + true + Left + false + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа лог</v8:content> + </v8:item> + + AlwaysHorizontal + Usual + None + false + + + + ЛогДрайвераПутьКФайлу + ShowBottom + false + false + + + + + + + + + + + + cfg:CatalogObject.ДрайверыОборудования + + true + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текущий статус</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установленная версия</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Данные драйвера</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поставляемый в составе конфигурации</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Режим работы</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Подключение локально по идентификатору</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Подключение из информационной базы</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Подключение из макета</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Лог драйвера</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Лог драйвера включен</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Шаблон локализации</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип оборудования</v8:content> + </v8:item> + + + cfg:DefinedType.ТипыПодключаемогоОборудования + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установить драйвер</v8:content> + </v8:item> + + + + ru + Установить драйвер + + + УстановитьДрайвер + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обновить...</v8:content> + </v8:item> + + + + ru + Обновить драйвер + + + ОбновитьДрайвер + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сохранить в файл</v8:content> + </v8:item> + + + + ru + Сохранить в файл + + + + StdPicture.SaveFile + true + + СохранитьЛогДрайвера + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перейти к файлу лога драйвера</v8:content> + </v8:item> + + + + ru + Перейти к файлу лога драйвера + + + + StdPicture.ShowData + true + + ПерейтиКФайлуЛогаДрайвера + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Получить шаблон локализации</v8:content> + </v8:item> + + + + ru + Получить шаблон локализации + + + ПолучитьШаблонЛокализации + + +
\ No newline at end of file diff --git a/Catalogs/ДрайверыОборудования/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/Catalogs/ДрайверыОборудования/Forms/ФормаЭлемента/Ext/Form/Module.bsl new file mode 100644 index 0000000..465e4a4 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -0,0 +1,367 @@ +#Область ОбработчикиСобытийФорм + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + СозданиеНового = НЕ ЗначениеЗаполнено(Объект.Ссылка); + + Если СозданиеНового Тогда + Объект.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ЛокальноПоИдентификатору; + Элементы.ИдентификаторОбъекта.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; + Элементы.БезопасноеПодключение.Видимость = Ложь; + Иначе + + ДанныеДрайвера = МенеджерОборудования.ДанныеДрайвераОборудования(Объект.Ссылка); + + ПоставляемыйВСоставеКонфигурации = Объект.Предопределенный; + ПодключениеЛокальноПоИдентификатору = Объект.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ЛокальноПоИдентификатору; + ПодключениеИзИнформационнойБазы = Объект.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы; + ПодключениеИзМакета = Объект.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзМакета; + + Элементы.ФормаОбновитьДрайверИзФайла.Видимость = ПодключениеИзИнформационнойБазы; + Элементы.СнятСПоддержки.Видимость = Объект.СнятСПоддержки; + Элементы.НеСертифицирован.Видимость = ДанныеДрайвера.Несертифицированное; + Элементы.СообщениеПриИспользовании.Видимость = Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Элементы.МакетНеДоступен.Видимость = ПодключениеИзМакета И НЕ ДанныеДрайвера.МакетДоступен И НЕ ПустаяСтрока(Объект.ИдентификаторОбъекта); + + Если ПоставляемыйВСоставеКонфигурации Тогда + РежимРаботы = РежимРаботы + НСтр("ru = 'Локальный'"); + КонецЕсли; + Элементы.ИдентификаторОбъекта.ОтображениеПодсказки = ОтображениеПодсказки.Всплывающая; + + СвойстваТолькоПросмотр = ПоставляемыйВСоставеКонфигурации И Не ПодключениеЛокальноПоИдентификатору; + Элементы.ТипОборудования.ТолькоПросмотр = СвойстваТолькоПросмотр; + Элементы.Наименование.ТолькоПросмотр = СвойстваТолькоПросмотр; + Элементы.ИдентификаторОбъекта.ТолькоПросмотр = СвойстваТолькоПросмотр; + Элементы.ФормаЗаписатьИЗакрыть.Видимость = Не СвойстваТолькоПросмотр; + Элементы.БезопасноеПодключение.Видимость = Не (Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода + Или Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СчитывательМагнитныхКарт) + КонецЕсли; + + Если Элементы.МакетНеДоступен.Видимость Тогда + Элементы.МакетНеДоступен.Заголовок = Элементы.МакетНеДоступен.Заголовок + Символы.НПП + ДанныеДрайвера.ИмяМакетаДрайвера; + КонецЕсли; + + Элементы.ВерсияДрайвера.Видимость = ПодключениеИзМакета И Не ПустаяСтрока(Объект.ВерсияДрайвера); + Элементы.УстановленнаяВерсия.Видимость = Ложь; + Элементы.ГруппаЛог.Видимость = Ложь; + + Элементы.ФормаЗакрыть.КнопкаПоУмолчанию = Не Элементы.ФормаЗаписатьИЗакрыть.Видимость; + + Если ОбщегоНазначенияБПО.ЭтоМобильнаяПлатформа() Тогда + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.Наименование); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ТипОборудования); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.СпособПодключения); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.РежимРаботы); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ИдентификаторОбъекта); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ВерсияДрайвера); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ТекущийСтатус); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.УстановленнаяВерсия); + Элементы.БезопасноеПодключение.Видимость = Ложь; + КонецЕсли; + + ОбновитьИнформациюДрайвера(); + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Если Лев(ТекущийОбъект.ИдентификаторОбъекта, 6) = "AddIn." Тогда + ТекущийОбъект.ИдентификаторОбъекта = Прав(ТекущийОбъект.ИдентификаторОбъекта, СтрДлина(ТекущийОбъект.ИдентификаторОбъекта) - 6); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + +#Если ВебКлиент Тогда + Элементы.БезопасноеПодключение.Доступность = Ложь; +#КонецЕсли + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + ОбновитьИнформациюДрайвераОборудования() + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДрайвер_Завершение(РезультатВыполнения, Параметры) Экспорт + + Если РезультатВыполнения.Результат Тогда + ТекстСообщения = НСтр("ru = 'Установка драйвера оборудования завершена.'"); + ОбновитьИнформациюДрайвераОборудования(); +#Если МобильноеПриложениеКлиент Или МобильныйКлиент Тогда + Сообщить(ТекстСообщения); +#Иначе + ПоказатьОповещениеПользователя(НСтр("ru = 'Установка драйвера'"), , ТекстСообщения, БиблиотекаКартинок.ОформлениеЗнакФлажок, + СтатусОповещенияПользователя.Важное, ЭтаФорма.УникальныйИдентификатор); +#КонецЕсли + Иначе + ТекстСообщения = РезультатВыполнения.ОписаниеОшибки; +#Если МобильноеПриложениеКлиент Или МобильныйКлиент Тогда + Сообщить(ТекстСообщения); +#Иначе + ПоказатьОповещениеПользователя(НСтр("ru = 'Установка драйвера'"), , ТекстСообщения, БиблиотекаКартинок.ОформлениеЗнакКрест, + СтатусОповещенияПользователя.Важное, ЭтаФорма.УникальныйИдентификатор); +#КонецЕсли + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДрайвер(Команда) + + Оповещение = Новый ОписаниеОповещения("УстановитьДрайвер_Завершение", ЭтотОбъект); + МенеджерОборудованияКлиент.УстановитьДрайверОборудования(Оповещение, Объект.Ссылка); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДрайвер_Завершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат.Загружена Тогда + + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru = 'Драйвер оборудования обновлен.'")); + Записать(); + + ОбновитьИнформациюДрайвера(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДрайвер(Команда) + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Ключ", "Значение"); + + ПараметрыПоискаТипаКомпонентыПодключения = ВнешниеКомпонентыБПОКлиент.ПараметрыПоискаДополнительнойИнформации(); + ПараметрыПоискаТипаКомпонентыПодключения.ИмяФайлаXML = "INFO.XML"; + ПараметрыПоискаТипаКомпонентыПодключения.ВыражениеXPath = "//drivers/component/@type"; + + ПараметрыЗагрузки = ВнешниеКомпонентыБПОКлиент.ПараметрыЗагрузки(); + ПараметрыЗагрузки.Идентификатор = Объект.ИдентификаторОбъекта; + + ПараметрыЗагрузки.ПараметрыПоискаДополнительнойИнформации.Вставить("ТипКомпонентыПодключения", ПараметрыПоискаТипаКомпонентыПодключения); + + Оповещение = Новый ОписаниеОповещения("ОбновитьДрайвер_Завершение", ЭтотОбъект, ДополнительныеПараметры); + + ВнешниеКомпонентыБПОКлиент.ЗагрузитьКомпонентуИзФайла(Оповещение, ПараметрыЗагрузки); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиКФайлуЛогаДрайвера(Команда) + + Оповещение = Новый ОписаниеОповещения("ЗапускПриложенияЗавершение", ЭтотОбъект); + Если МенеджерОборудованияКлиентСервер.СтрокаЗапускаБезопасная(ЛогДрайвераПутьКФайлу) Тогда + НачатьЗапускПриложения(Оповещение, ЛогДрайвераПутьКФайлу); // АПК:534 произведена проверка запуска + Иначе + ОбщегоНазначенияБПОКлиент.СообщитьПользователю( + НСтр("ru = 'Не допускается в пути к файлу использование символов $ ` | || ; & &&'")); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗапускПриложенияЗавершение(КодВозврата, ДополнительныйПараметр) Экспорт + + СообщениеОбОшибке = НСтр("ru='Переход к файлу лога драйвера.'"); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(СообщениеОбОшибке); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранениеЛогаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + +#Если Сервер ИЛИ ТонкийКлиент ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение ИЛИ ВнешнееСоединение Тогда + Если ВыбранныеФайлы = Неопределено Тогда + Возврат; + КонецЕсли; + + Попытка + ЗаписьZIP = Новый ЗаписьZipФайла(ВыбранныеФайлы[0]); + ЗаписьZIP.Добавить(ЛогДрайвераПутьКФайлу + "*", РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); + ЗаписьZIP.Записать(); + Исключение + ВызватьИсключение; + КонецПопытки; +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьЛогДрайвера(Команда) + +#Если ТонкийКлиент ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + // АПК: 1348-выкл не используется модуль ФайловаяСистемаКлиент из БСП + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + Диалог.МножественныйВыбор = Ложь; + Диалог.Каталог = ЛогДрайвераПутьКФайлу; + Диалог.Расширение = "zip"; + Диалог.Фильтр = НСтр("ru = 'Файл архива'") + " (*.zip)|*.zip"; + ОповещениеВыбораФайла = Новый ОписаниеОповещения("СохранениеЛогаЗавершение", ЭтотОбъект); + Диалог.Показать(ОповещениеВыбораФайла); + // АПК: 1348-вкл +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура СохранениеШаблонЛокализации(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + +#Если Сервер ИЛИ ТонкийКлиент ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение ИЛИ ВнешнееСоединение Тогда + Если ВыбранныеФайлы = Неопределено Тогда + Возврат; + КонецЕсли; + + Попытка + Текст = Новый ЗаписьТекста; + Текст.Открыть(ВыбранныеФайлы[0],КодировкаТекста.UTF8); + Текст.ЗаписатьСтроку(ШаблонЛокализации); + Текст.Закрыть(); + Исключение + ВызватьИсключение; + КонецПопытки; +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьШаблонЛокализации(Команда) + +#Если ТонкийКлиент ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + // АПК: 1348-выкл не используется модуль ФайловаяСистемаКлиент из БСП + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + Диалог.МножественныйВыбор = Ложь; + Диалог.Каталог = ЛогДрайвераПутьКФайлу; + Диалог.Расширение = "xml"; + Диалог.Фильтр = НСтр("ru = 'Файл локализации драйвера'") + " (*.xml)|*.xml"; + ОповещениеВыбораФайла = Новый ОписаниеОповещения("СохранениеШаблонЛокализации", ЭтотОбъект); + Диалог.Показать(ОповещениеВыбораФайла); + // АПК: 1348-вкл +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ТипОборудованияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ДанныеВыбора = Новый СписокЗначений(); + ЗаполнитьДоступныеТипыОборудования(ДанныеВыбора); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ОбновитьИнформациюДрайвераОборудования_Завершение(РезультатВыполнения, Параметры) Экспорт + + Если РезультатВыполнения.Результат Тогда + + ОписаниеДрайвера = РезультатВыполнения.ОписаниеДрайвера; + ТекущийСтатус = НСтр("ru='Установлен на текущем устройстве'"); + + Если Не ПустаяСтрока(ОписаниеДрайвера.ВерсияДрайвера) Тогда + РевизииНаЭкране = СтрШаблон(НСтр("ru='(Версия требований %1)'"), ОписаниеДрайвера.РевизияИнтерфейсаПредставление); + Если ОписаниеДрайвера.ИнтеграционныйКомпонент Тогда + УстановленнаяВерсия = СтрШаблон(НСтр("ru='Интеграционный компонент %1'"), ОписаниеДрайвера.ВерсияИнтеграционногоКомпонента) + Символы.ПС + + СтрШаблон(НСтр("ru='Основная поставка %1'"), ОписаниеДрайвера.ВерсияДрайвера) + Символы.ПС + + РевизииНаЭкране; + Элементы.ТекущийСтатус.МногострочныйРежим = Ложь; + Элементы.УстановленнаяВерсия.МногострочныйРежим = Истина; + Иначе + УстановленнаяВерсия = ОписаниеДрайвера.ВерсияДрайвера; + УстановленнаяВерсия = УстановленнаяВерсия + Символы.НПП + РевизииНаЭкране; + Элементы.ТекущийСтатус.МногострочныйРежим = Истина; + КонецЕсли; + + Элементы.УстановленнаяВерсия.Видимость = Истина; + Иначе + Элементы.УстановленнаяВерсия.Видимость = Ложь; + КонецЕсли; + + Если ОписаниеДрайвера.ЭтоЭмулятор Тогда + Элементы.ЭтоЭмулятор.Видимость = Истина; + КонецЕсли; + + Если Не ПустаяСтрока(ОписаниеДрайвера.ЛогДрайвераПутьКФайлу) Тогда + ЛогДрайвераПутьКФайлу = ОписаниеДрайвера.ЛогДрайвераПутьКФайлу; + Элементы.ГруппаЛог.Видимость = Истина; + Элементы.ЛогДрайвераПутьКФайлу.Подсказка = ?(ОписаниеДрайвера.ЛогДрайвераВключен, + НСтр("ru='Логирование операций драйвера включено'"), + НСтр("ru='Логирование операций драйвера отключено'")); + #Если ТонкийКлиент ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + Элементы.СохранитьЛогДрайвера.Видимость = ОписаниеДрайвера.ЛогДрайвераВключен; + Элементы.ПерейтиКФайлуЛогаДрайвера.Видимость = ОписаниеДрайвера.ЛогДрайвераВключен; + #Иначе + Элементы.СохранитьЛогДрайвера.Видимость = Ложь; + Элементы.ПерейтиКФайлуЛогаДрайвера.Видимость = Ложь; + #КонецЕсли + Иначе + Элементы.ГруппаЛог.Видимость = Ложь; + КонецЕсли; + + ШаблонЛокализации = ОписаниеДрайвера.ШаблонЛокализации; + #Если ТонкийКлиент ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + Элементы.ФормаПолучитьШаблонЛокализации.Видимость = Не ПустаяСтрока(ШаблонЛокализации); + #Иначе + Элементы.ФормаПолучитьШаблонЛокализации.Видимость = Ложь; + #КонецЕсли + + Элементы.ФормаУстановитьДрайвер.Видимость = Ложь; + + Иначе + ТекущийСтатус = СтрШаблон(НСтр("ru='Драйвер не установлен. %1'"), РезультатВыполнения.ОписаниеОшибки); + Элементы.ТекущийСтатус.Подсказка = РезультатВыполнения.ОписаниеОшибки; + Элементы.ФормаУстановитьДрайвер.Видимость = Не ПодключениеЛокальноПоИдентификатору; + Элементы.ТекущийСтатус.МногострочныйРежим = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИнформациюДрайвераОборудования() + + Оповещение = Новый ОписаниеОповещения("ОбновитьИнформациюДрайвераОборудования_Завершение", ЭтотОбъект); + МенеджерОборудованияКлиент.НачатьПолучениеОписанияДрайвера(Оповещение, Неопределено, ДанныеДрайвера); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьИнформациюДрайвера() + + Если ПодключениеИзИнформационнойБазы Тогда + РезультатИнформация = ВнешниеКомпонентыБПО.ИнформацияОКомпоненте(Объект.ИдентификаторОбъекта); + Если Не ПустаяСтрока(РезультатИнформация.ОписаниеОшибки) Тогда + Элементы.ИдентификаторОбъекта.Подсказка = РезультатИнформация.ОписаниеОшибки; + Элементы.ИдентификаторОбъекта.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; + Иначе + Элементы.ИдентификаторОбъекта.ОтображениеПодсказки = ОтображениеПодсказки.Всплывающая; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗаполнитьДоступныеТипыОборудования(ДанныеВыбора) + + ДоступныеТипыОборудования = МенеджерОборудования.ДоступныеТипыОборудования(); + Для Каждого Тип Из ДоступныеТипыОборудования Цикл + ДанныеВыбора.Добавить(Тип); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Catalogs/ЕдиницыИзмерения.xml b/Catalogs/ЕдиницыИзмерения.xml new file mode 100644 index 0000000..86be294 --- /dev/null +++ b/Catalogs/ЕдиницыИзмерения.xml @@ -0,0 +1,91 @@ + + + + + + 39dc4fa1-8c89-454a-b539-a965e8844036 + 528ac709-18d9-4d9d-98f6-8f608f70f0e2 + + + bf561525-dada-497e-8091-887c9d3591e1 + cc482921-8c83-40e0-8739-186070da2814 + + + 7430c7f8-37eb-4c28-a5cf-29431c3baf56 + f11c0e32-b5f3-4180-99f1-4d91c5e9b200 + + + ecad218f-a9c8-4bb1-b02e-54293201e6e0 + a277854e-e2e8-46d4-be37-e85f284e6c68 + + + 1999f262-0a8f-4898-bdc3-8a8fd5cd12ce + 751b98ac-478a-4ca3-afd8-173af7781135 + + + + ЕдиницыИзмерения + + + ru + Единицы измерения + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.ЕдиницыИзмерения.StandardAttribute.Description + Catalog.ЕдиницыИзмерения.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/Catalogs/КарточкиМП.xml b/Catalogs/КарточкиМП.xml new file mode 100644 index 0000000..8374fc2 --- /dev/null +++ b/Catalogs/КарточкиМП.xml @@ -0,0 +1,257 @@ + + + + + + ac21d82c-4dfc-420e-85c3-75e98120eee0 + 66aa5aaf-4dbc-4fea-b702-86481e72013c + + + 9f756708-4229-4e8b-846e-74ff29daf80a + 496fcc0f-dc30-4c01-96ac-b1bef3d1d60e + + + c4fb357f-2818-4dea-bcbe-c1f80b51a786 + 787aea69-67e9-4434-85da-9f3f9c7441ae + + + 8f647f00-768e-4e6b-b56c-acaeb892fab9 + c8abf74b-e5bb-4950-b783-c0f170c1d21e + + + 0bc5094c-8949-4f99-a139-64bd65bf825f + fd322be1-11e9-452e-a677-7127f784a6c0 + + + + КарточкиМП + + + ru + Карточки МП + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 11 + 100 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.КарточкиМП.StandardAttribute.Description + Catalog.КарточкиМП.StandardAttribute.Code + + Begin + DontUse + Directly + Catalog.КарточкиМП.Form.ФормаЭлемента + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + + ОсобенностьУчета + + + ru + Особенность учета + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ЕдиницаИзмерения + + + ru + Единица измерения + + + + + cfg:CatalogRef.ЕдиницыИзмерения + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + Номенклатура + + + ru + Номенклатура + + + + + cfg:CatalogRef.Номенклатура + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + МаркировкаМП + + + ru + Маркировка МП + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + +
ФормаЭлемента
+
+
+
\ No newline at end of file diff --git a/Catalogs/КарточкиМП/Forms/ФормаЭлемента.xml b/Catalogs/КарточкиМП/Forms/ФормаЭлемента.xml new file mode 100644 index 0000000..d1e3522 --- /dev/null +++ b/Catalogs/КарточкиМП/Forms/ФормаЭлемента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/КарточкиМП/Forms/ФормаЭлемента/Ext/Form.xml b/Catalogs/КарточкиМП/Forms/ФормаЭлемента/Ext/Form.xml new file mode 100644 index 0000000..99eb7a5 --- /dev/null +++ b/Catalogs/КарточкиМП/Forms/ФормаЭлемента/Ext/Form.xml @@ -0,0 +1,51 @@ + +
+ LockOwner + Vertical + Items + + + + Объект.Code + EnterOnInput + true + true + + + + + Объект.Description + EnterOnInput + true + true + + + + + Объект.Номенклатура + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номенклатура</v8:content> + </v8:item> + + + + + + Объект.МаркировкаМП + true + + + + + + + + cfg:CatalogObject.КарточкиМП + + true + true + + + \ No newline at end of file diff --git a/Catalogs/КлассификаторЕдиницИзмерения.xml b/Catalogs/КлассификаторЕдиницИзмерения.xml new file mode 100644 index 0000000..54242e9 --- /dev/null +++ b/Catalogs/КлассификаторЕдиницИзмерения.xml @@ -0,0 +1,180 @@ + + + + + + 7ed54734-15f2-4f55-9934-6906c7e1304d + 9a46ec75-62c5-459e-9614-84dc5c0a3173 + + + e2083f68-3bbc-4d64-9ad1-eb6d4bb58505 + db01f0ef-2817-4b4f-a420-db3bc20bcf59 + + + f8432f0b-e10c-4832-9fd6-3e4c89542942 + 11efdb21-7082-45c5-9205-a7eb3f585bb0 + + + 5f471eb6-dbd0-489f-b231-f40259b1d485 + e03957da-15f9-4cb2-8c0f-963a4d8b3d4a + + + 735dd0b5-9ea9-440e-b722-445f41eecf4e + 711f7ceb-3f86-40bb-a592-e246c7c25fad + + + + КлассификаторЕдиницИзмерения + + + ru + Классификатор единиц измерения + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.КлассификаторЕдиницИзмерения.StandardAttribute.Description + Catalog.КлассификаторЕдиницИзмерения.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + + НаименованиеПолное + + + ru + Наименование полное + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ТипИзмеряемойВеличины + + + ru + Тип измеряемой величины + + + + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + \ No newline at end of file diff --git a/Catalogs/КомплектацииНоменклатуры.xml b/Catalogs/КомплектацииНоменклатуры.xml new file mode 100644 index 0000000..3342c62 --- /dev/null +++ b/Catalogs/КомплектацииНоменклатуры.xml @@ -0,0 +1,243 @@ + + + + + + dc939d6e-ea41-4452-b073-009fad65d080 + b83f1a9b-90bf-4101-99d2-bb8480e0740b + + + a2bf5154-ddb9-44c4-bbad-8cd7a1dbabe1 + dc28db3f-ad34-4137-9660-cd4b44213c96 + + + 9f911fa1-fec9-4283-8f25-88224fbfa64c + dae5da74-2bfa-4e64-afa6-7c19b5947305 + + + ec59e863-f9a9-4d50-88a6-95dc798b8876 + 59003708-f5ef-4877-a041-d38a05362032 + + + 74198972-1b86-44cf-9df6-06e72093ee22 + 00e14f9d-2a43-4fd5-96f8-181cae048b2f + + + + КомплектацииНоменклатуры + + + ru + Комплектации номенклатуры + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + Catalog.Номенклатура + + ToItems + 9 + 25 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.КомплектацииНоменклатуры.StandardAttribute.Code + Catalog.КомплектацииНоменклатуры.StandardAttribute.Description + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + + + 53720ed8-d45d-432b-89ef-338ff94420c5 + 20797c93-8b06-46fb-91b0-ff71121d2e1a + + + bb93545a-0b1a-4190-93d4-113702aa3779 + bce657aa-1557-4b2b-9731-3bd42d32999b + + + + Состав + + + ru + Состав + + + + + DontCheck + ForItem + 5 + + + + + Номенклатура + + + ru + Номенклатура + + + + + cfg:CatalogRef.Номенклатура + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Количество + + + ru + Количество + + + + + xs:decimal + + 10 + 0 + Any + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + КоличествоКомплектов + + + ru + Количество комплектов + + + + + xs:decimal + + 10 + 0 + Any + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + + + \ No newline at end of file diff --git a/Catalogs/Номенклатура.xml b/Catalogs/Номенклатура.xml new file mode 100644 index 0000000..e777824 --- /dev/null +++ b/Catalogs/Номенклатура.xml @@ -0,0 +1,301 @@ + + + + + + 14f7c9ac-c420-4730-b288-c94d97c6f0bd + 713fb3b7-e987-4f0e-a4e2-40a31f5062a8 + + + 79f2b5f3-f6bb-446f-88b9-5cd4a5083c69 + 6993d698-c0c7-469a-881f-c75e4b94bc9e + + + 3109ccb8-d88d-4faf-88f8-d18ed41cde7c + 0ce482c0-0880-4b3f-b6dc-f644135e3668 + + + 49c854d8-c2e9-4aad-b96b-619d5044da91 + 209b5e51-40b4-4d92-abdc-18fd8f134197 + + + 8d81a8be-cbbb-44a8-b481-a562a6b9fe43 + 0f66e51a-b360-4157-b3ab-8ec87a34db0f + + + + Номенклатура + + + ru + Номенклатура + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 11 + 100 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.Номенклатура.StandardAttribute.Description + Catalog.Номенклатура.StandardAttribute.Code + + Begin + DontUse + Directly + Catalog.Номенклатура.Form.ФормаЭлемента + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + + ОсобенностьУчета + + + ru + Особенность учета + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ЕдиницаИзмерения + + + ru + Единица измерения + + + + + cfg:CatalogRef.ЕдиницыИзмерения + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + Комплект + + + ru + Комплект + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + АртикулПродавца + + + ru + Артикул продавца + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + МаркировкаМП + + + ru + Маркировка МП + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + +
ФормаЭлемента
+
+
+
\ No newline at end of file diff --git a/Catalogs/Номенклатура/Forms/ФормаЭлемента.xml b/Catalogs/Номенклатура/Forms/ФормаЭлемента.xml new file mode 100644 index 0000000..cb6ff0f --- /dev/null +++ b/Catalogs/Номенклатура/Forms/ФормаЭлемента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/Номенклатура/Forms/ФормаЭлемента/Ext/Form.xml b/Catalogs/Номенклатура/Forms/ФормаЭлемента/Ext/Form.xml new file mode 100644 index 0000000..809cc3a --- /dev/null +++ b/Catalogs/Номенклатура/Forms/ФормаЭлемента/Ext/Form.xml @@ -0,0 +1,89 @@ + +
+ LockOwner + Vertical + Items + + + + Объект.Комплект + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Комплект</v8:content> + </v8:item> + + + + + + Объект.Code + EnterOnInput + true + true + + + + + Объект.Description + EnterOnInput + true + true + + + + + Объект.ОсобенностьУчета + false + EnterOnInput + true + true + + + + + false + EnterOnInput + true + + + + + false + EnterOnInput + true + + + + + Объект.ЕдиницаИзмерения + false + EnterOnInput + true + true + + + + + Объект.АртикулПродавца + true + + + + + Объект.МаркировкаМП + true + + + + + + + + cfg:CatalogObject.Номенклатура + + true + true + + + \ No newline at end of file diff --git a/Catalogs/Организации.xml b/Catalogs/Организации.xml new file mode 100644 index 0000000..5a180ed --- /dev/null +++ b/Catalogs/Организации.xml @@ -0,0 +1,91 @@ + + + + + + c9b387c3-5b52-4f89-9b8d-75c6db4ebed0 + 29366013-34ea-4a01-a405-d97721c7df78 + + + 98123034-8f98-424a-9009-953aab620a41 + a7fad369-963a-485a-b0c5-5e9c7bb1d45a + + + aff4dfe2-739c-4e2b-90fc-323f5684fbd7 + 98a32005-93d8-46d7-95b4-7723054175c3 + + + 634d4c5b-0376-43c0-b098-aeb8c424b1c0 + 3ae25105-2c1d-4dbc-8701-1224462214c4 + + + c1ec4b04-b096-41d4-b1cc-c31c8430da0e + 9d61217f-0ae4-47a4-923b-cedd738bd6c6 + + + + Организации + + + ru + Организации + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 100 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.Организации.StandardAttribute.Description + Catalog.Организации.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/Catalogs/ПартииНоменклатуры.xml b/Catalogs/ПартииНоменклатуры.xml new file mode 100644 index 0000000..70e3de7 --- /dev/null +++ b/Catalogs/ПартииНоменклатуры.xml @@ -0,0 +1,97 @@ + + + + + + d3f1d81e-5eb1-4474-9f25-2ab74df32a14 + 1efc915c-0089-44fd-b29a-954ac0b8fd37 + + + cad8c73b-9644-4ae2-a31c-3858ea97781d + a40ad9b3-4bb7-4976-9369-b505c8cd4103 + + + ee66d248-8fb4-4575-9920-77232cad61a6 + 2f2aa342-8d0b-4e40-80f1-e3cd4aa8bf81 + + + db404ec0-39d3-422c-abc0-955bdc6a6206 + 81d5c7d0-6695-418c-9f13-76f5afade79b + + + d7a60ca2-21e7-4e82-9a79-a86d48f42227 + 6a9020cd-2ca8-421d-9aa6-feed09f9160e + + + + ПартииНоменклатуры + + + ru + Партии номенклатуры + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + Catalog.Номенклатура + + ToItems + 11 + 100 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.ПартииНоменклатуры.StandardAttribute.Description + Catalog.ПартииНоменклатуры.StandardAttribute.Code + + Begin + DontUse + Directly + Catalog.ПартииНоменклатуры.Form.ФормаЭлемента + + Catalog.ПартииНоменклатуры.Form.ФормаСписка + Catalog.ПартииНоменклатуры.Form.ФормаВыбора + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + +
ФормаСписка
+
ФормаВыбора
+
ФормаЭлемента
+
+
+
\ No newline at end of file diff --git a/Catalogs/ПартииНоменклатуры/Forms/ФормаВыбора.xml b/Catalogs/ПартииНоменклатуры/Forms/ФормаВыбора.xml new file mode 100644 index 0000000..304131c --- /dev/null +++ b/Catalogs/ПартииНоменклатуры/Forms/ФормаВыбора.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаВыбора + + + ru + Форма выбора + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ПартииНоменклатуры/Forms/ФормаВыбора/Ext/Form.xml b/Catalogs/ПартииНоменклатуры/Forms/ФормаВыбора/Ext/Form.xml new file mode 100644 index 0000000..8ef1e11 --- /dev/null +++ b/Catalogs/ПартииНоменклатуры/Forms/ФормаВыбора/Ext/Form.xml @@ -0,0 +1,105 @@ + +
+ LockOwner + Vertical + + + + List + true + true + true + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Code + + + + + Список.Description + true + + + + + Список.Owner + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Catalog.ПартииНоменклатуры + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git a/Catalogs/ПартииНоменклатуры/Forms/ФормаСписка.xml b/Catalogs/ПартииНоменклатуры/Forms/ФормаСписка.xml new file mode 100644 index 0000000..f405c75 --- /dev/null +++ b/Catalogs/ПартииНоменклатуры/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ПартииНоменклатуры/Forms/ФормаСписка/Ext/Form.xml b/Catalogs/ПартииНоменклатуры/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..b7df91f --- /dev/null +++ b/Catalogs/ПартииНоменклатуры/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,104 @@ + +
+ DontBlock + Vertical + + + + List + true + true + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Code + + + + + Список.Description + true + + + + + Список.Owner + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Catalog.ПартииНоменклатуры + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git a/Catalogs/ПартииНоменклатуры/Forms/ФормаЭлемента.xml b/Catalogs/ПартииНоменклатуры/Forms/ФормаЭлемента.xml new file mode 100644 index 0000000..4d4148c --- /dev/null +++ b/Catalogs/ПартииНоменклатуры/Forms/ФормаЭлемента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ПартииНоменклатуры/Forms/ФормаЭлемента/Ext/Form.xml b/Catalogs/ПартииНоменклатуры/Forms/ФормаЭлемента/Ext/Form.xml new file mode 100644 index 0000000..acd715f --- /dev/null +++ b/Catalogs/ПартииНоменклатуры/Forms/ФормаЭлемента/Ext/Form.xml @@ -0,0 +1,42 @@ + +
+ LockOwner + Vertical + Items + + + + Объект.Code + EnterOnInput + + + + + Объект.Description + EnterOnInput + + + + + Объект.Owner + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номенклатура</v8:content> + </v8:item> + + EnterOnInput + + + + + + + + cfg:CatalogObject.ПартииНоменклатуры + + true + true + + + \ No newline at end of file diff --git a/Catalogs/Партнеры.xml b/Catalogs/Партнеры.xml new file mode 100644 index 0000000..014504b --- /dev/null +++ b/Catalogs/Партнеры.xml @@ -0,0 +1,90 @@ + + + + + + 1e302234-04c1-4523-aa49-acfe2996aab4 + d54e0eae-5acb-4082-8d7b-a6c5a51bea88 + + + ec3fd8b7-da87-4f9e-a3e7-60a6e2084662 + 17e9abdc-1da9-4e1d-9f5e-7f1da8ebb140 + + + 28f37e09-9800-453d-802b-305d915fa911 + f3de507f-c846-45c8-8354-3568c84ac213 + + + 784749f2-6292-4916-a83a-2f053f921092 + 850729c2-e95c-4807-9710-b5d646061756 + + + 827a004d-8df1-4e67-8556-6177ad68c4ea + c2e2eaba-88dc-43ba-b154-85d5d0f8edc5 + + + + Партнеры + + + ru + Партнеры + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 0 + 100 + String + Variable + WholeCatalog + false + false + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.Партнеры.StandardAttribute.Description + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование.xml b/Catalogs/ПодключаемоеОборудование.xml new file mode 100644 index 0000000..0b724de --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование.xml @@ -0,0 +1,1288 @@ + + + + + + 36976b6d-0f88-45c2-ad87-3ab8b6347ac5 + 872be199-13ae-4b42-92eb-d8099b43f9a4 + + + cdc02669-133d-4b5c-92f3-4740f19682e7 + d24f65de-4c85-47e8-9eb9-3283d6ddf3cf + + + c467e63f-002a-4e99-9beb-03bdacd7741a + 016760b7-416f-49f0-a859-139d9049ad0d + + + 1c9a296f-d6ca-4862-8e62-a989b6f2f30c + 6021ab78-3fe5-4dcd-92d1-58ac14e9d7f3 + + + 2b0b1076-61f8-498b-b3d2-b087f881ddaa + 3ff332cf-fcc9-47d1-b686-768848b4e6a2 + + + + ПодключаемоеОборудование + + + ru + Подключаемое оборудование + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 0 + 100 + Number + Variable + WholeCatalog + false + false + AsDescription + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + true + Auto + Deny + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + true + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + TransformValues + + + + ru + Наименование подключаемого оборудования + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + + ru + Код подключаемого оборудования + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + Auto + InList + true + QuickChoice + + Begin + DontUse + Directly + Catalog.ПодключаемоеОборудование.Form.ФормаЭлемента + + Catalog.ПодключаемоеОборудование.Form.ФормаСписка + + + + + + + + true + + + Managed + Use + + + ru + Экземпляр подключаемого оборудования + + + + + + + DontUse + DontUse + DontUse + false + false + + + + + УстройствоИспользуется + + + ru + Устройство используется + + + + + xs:boolean + + false + + + + + ru + Устройство с установленным признаком участвует в работе механизма (подключение, отключение, выполнение команд). + + + false + + false + false + + + false + true + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + DontUse + Use + + + + + ТипПодключения + + + ru + Тип подключения + + + + + cfg:EnumRef.ТипыПодключенияОборудования + + false + + + + + ru + Вариант подключения оборудования + + + false + + false + false + + + true + Enum.ТипыПодключенияОборудования.EnumValue.ЛокальноеПодключение + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ТипОборудования + + + ru + Тип оборудования + + + + + cfg:DefinedType.ТипыПодключаемогоОборудования + + false + + + + + ru + Тип оборудования подключаемого экземпляра устройства. + + + false + + false + false + + + true + Enum.ТипыПодключаемогоОборудования.EmptyRef + ShowError + Items + + + ТипПодключения + Catalog.ПодключаемоеОборудование.Attribute.ТипПодключения + Clear + + + + + Enum.ТипыПодключенияОборудования.EnumValue.ОбщийДоступ + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ДрайверОборудования + + + ru + Драйвер оборудования + + + + + cfg:CatalogRef.ДрайверыОборудования + + false + + + + + ru + Драйвер подключаемого оборудования. + + + false + + false + false + + + false + + ShowError + Items + + + Auto + DontUse + + + Auto + ForItem + DontIndex + Use + Use + + + + + Организация + + + ru + Организация + + + + + cfg:DefinedType.ОрганизацияБПО + + false + + + + false + + false + false + + + false + + ShowError + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + Параметры + + + ru + Параметры + + + + + v8:ValueStorage + + false + + + + + ru + Параметры подключения экземпляра устройства. + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + РабочееМесто + + + ru + Рабочее место + + + + + cfg:CatalogRef.РабочиеМеста + + false + + + + + ru + Рабочее место, на котором был создан экземпляр устройства. + + + false + + false + false + + + true + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + Index + Use + Use + + + + + СерийныйНомер + + + ru + Серийный номер + + + + + xs:string + + 128 + Variable + + + false + + + + + ru + Серийный номер устройства + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + Index + DontUse + Use + + + + + СпособФорматноЛогическогоКонтроля + + + ru + Способ форматно-логического контроля + + + + + cfg:EnumRef.СпособыФорматноЛогическогоКонтроля + + false + + + + false + + false + false + + + false + Enum.СпособыФорматноЛогическогоКонтроля.EmptyRef + ShowError + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ДопустимоеРасхождениеФорматноЛогическогоКонтроля + + + ru + Допустимое расхождение форматно-логического контроля + + + + + xs:decimal + + 10 + 2 + Nonnegative + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ТребуетсяПереустановка + + + ru + Требуется переустановка + + + + + xs:boolean + + false + + + + + ru + Требуется переустановка компоненты + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ТребуетсяУстановка + + + ru + Требуется установка + + + + + xs:boolean + + false + + + + + ru + Требуется установка компоненты + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + АвтоматическаяФискализация + + + ru + Автоматическая фискализация + + + Автоматическая фискализация чеков из очереди чеков + + xs:boolean + + false + + + + + ru + Автоматическая фискализация чеков из очереди чеков + + + false + + false + false + + + true + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ИспользуетсяФН36 + + + ru + Используется ФН 36 мес.(ЕНВД) + + + + + xs:boolean + + false + + + + + ru + Плательщики ЕНВД, которые с 01.01.2021 года переходят на ОСН и используют кассовый аппарат с фискальным накопителем, имеющим срок действия не менее 36 мес., до конца срока действия ФН могут не менять систему налогообложения в настройках кассы. + + + false + + false + false + + + true + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + УдалитьВыводитьОтраслевыеРеквизиты + + + ru + (Удалить) Выводить отраслевые реквизиты + + + + + xs:boolean + + false + + + + + ru + Выводить отраслевые реквизиты (теги 1260) в составе фискального чека + + + false + + false + false + + + true + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + + 016423c9-d1f2-46d8-8599-4825a5a585f7 + 700070df-ae6a-46c4-a935-be0acc5b6f00 + + + 18faed27-18d5-417c-a038-70bee23237d7 + e2480d98-3aa8-4d3a-ad46-a94ee5fd1b9b + + + + ОграничениеДоступа + + + ru + Ограничение доступа + + + + + DontCheck + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + ForItem + 5 + + + + + Пользователь + + + ru + Пользователь + + + + + cfg:DefinedType.ПользовательБПО + + false + + + + false + + false + false + + + ShowError + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + + + + + 77c1d1ed-9f34-4ef1-8feb-2d5118fd50e8 + b9525472-cbd6-4cd4-abf9-eccecb9c2d80 + + + 995bacc3-7607-4901-8ad7-a0e470a19ed7 + eb3cc3bc-6b3e-4814-8ebf-98cc96ec5241 + + + + ПараметрыРегистрации + + + ru + Параметры регистрации + + + + + DontCheck + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + ForItem + 5 + + + + + НаименованиеПараметра + + + ru + Наименование параметра + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + + ЗначениеПараметра + + + ru + Значение параметра + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + +
ФормаАвторизацииЭТ
+
ФормаВыбораРабочегоМеста
+
ФормаНастройки
+
ФормаСписка
+
ФормаЭлемента
+ + + + ОткрытьПодключаемоеОборудование + + + ru + Подключаемое оборудование + + + + NavigationPanelImportant + + Single + false + Auto + + + + Auto + + +
+
+
\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Commands/ОткрытьПодключаемоеОборудование/Ext/CommandModule.bsl b/Catalogs/ПодключаемоеОборудование/Commands/ОткрытьПодключаемоеОборудование/Ext/CommandModule.bsl new file mode 100644 index 0000000..f4d9f8d --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Commands/ОткрытьПодключаемоеОборудование/Ext/CommandModule.bsl @@ -0,0 +1,10 @@ +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + МенеджерОборудованияКлиент.ОткрытьПодключаемоеОборудование(ПараметрКоманды, ПараметрыВыполненияКоманды); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Ext/Help.xml b/Catalogs/ПодключаемоеОборудование/Ext/Help.xml new file mode 100644 index 0000000..1d2b70b --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Ext/Help.xml @@ -0,0 +1,4 @@ + + + ru + \ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Ext/Help/ru.html b/Catalogs/ПодключаемоеОборудование/Ext/Help/ru.html new file mode 100644 index 0000000..6f5c892 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Ext/Help/ru.html @@ -0,0 +1,3 @@ + +

Справочник "Подключаемое оборудование".

+

Список подключенного и настроенного оборудования. Оборудование подключается к выбранному рабочему месту.

\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Ext/ManagerModule.bsl b/Catalogs/ПодключаемоеОборудование/Ext/ManagerModule.bsl new file mode 100644 index 0000000..02c4943 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Ext/ManagerModule.bsl @@ -0,0 +1,528 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Возвращает список подключенного в справочнике ПО по установленному отбору +// +// Параметры: +// Отбор - см. МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор. +// +// Возвращаемое значение: +// Массив из Структура. +// +Функция СписокОборудования(Отбор) Экспорт + + Идентификатор = Отбор.Идентификатор; + ТипыПО = Отбор.ТипыПО; + РабочееМесто = Отбор.РабочееМесто; + Организация = Отбор.Организация; + + МассивТиповПО = МенеджерОборудования.МассивТиповОборудования(ТипыПО); + + СетевоеОборудование = Отбор.СетевоеОборудование; + ТекущийПользовательИБ = Строка(ПользователиИнформационнойБазы.ТекущийПользователь()); + КодЯзыка = Отбор.КодЯзыка; + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ЗначениеЗаполнено(РабочееМесто) Тогда + // Если РМ не задано в параметрах, то всегда текущее из параметров сеанса. + РабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + КонецЕсли; + + Запрос = Новый Запрос(); + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ПодключаемоеОборудование.Ссылка КАК Ссылка, + | ПодключаемоеОборудование.Наименование КАК Наименование, + | ПодключаемоеОборудование.ТипОборудования КАК ТипОборудования, + | ПодключаемоеОборудование.ДрайверОборудования КАК ДрайверОборудования, + | ПодключаемоеОборудование.ДрайверОборудования.ИмяПредопределенныхДанных КАК ДрайверОборудованияИмя, + | ПодключаемоеОборудование.ДрайверОборудования.Предопределенный КАК ВСоставеКонфигурации, + | ПодключаемоеОборудование.ДрайверОборудования.ИдентификаторОбъекта КАК ИдентификаторОбъекта, + | ПодключаемоеОборудование.ДрайверОборудования.СнятСПоддержки КАК СнятСПоддержки, + | ПодключаемоеОборудование.ДрайверОборудования.СообщениеПриИспользовании КАК СообщениеПриИспользовании, + | ПодключаемоеОборудование.ДрайверОборудования.ВерсияДрайвера КАК ВерсияДрайвера, + | ПодключаемоеОборудование.ДрайверОборудования.ИмяМакетаДрайвера КАК ИмяМакетаДрайвера, + | ПодключаемоеОборудование.ДрайверОборудования.СпособПодключения КАК СпособПодключения, + | ПодключаемоеОборудование.ДрайверОборудования.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + | ПодключаемоеОборудование.ДрайверОборудования.БезопасноеПодключение КАК БезопасноеПодключение, + | ПодключаемоеОборудование.ТипПодключения КАК ТипПодключения, + | ПодключаемоеОборудование.РабочееМесто КАК РабочееМесто, + | ПодключаемоеОборудование.АвтоматическаяФискализация КАК АвтоматическаяФискализация, + | ПодключаемоеОборудование.ТребуетсяПереустановка КАК ТребуетсяПереустановка, + | ПодключаемоеОборудование.ТребуетсяУстановка КАК ТребуетсяУстановка, + | ПодключаемоеОборудование.ИспользуетсяФН36 КАК ИспользуетсяФН36, + | ПодключаемоеОборудование.Организация КАК Организация, + | ПодключаемоеОборудование.ОграничениеДоступа.( + | Пользователь КАК Пользователь, + | Ссылка КАК Ссылка + | ) КАК ОграничениеДоступа, + | ПодключаемоеОборудование.Параметры КАК Параметры + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | &Условие + | И НЕ ПодключаемоеОборудование.ТипОборудования В (&ИсключаемыеТипыОборудования) + | И (ПодключаемоеОборудование.Наименование <> """") + | + |УПОРЯДОЧИТЬ ПО + | Наименование"; + + ТекстУсловия = "(НЕ ПодключаемоеОборудование.ПометкаУдаления И ПодключаемоеОборудование.УстройствоИспользуется)"; + Если Идентификатор <> Неопределено Тогда + Если ТипЗнч(Идентификатор) = Тип("Массив") Тогда + ТекстУсловия = ТекстУсловия + " И (ПодключаемоеОборудование.Ссылка В (&Идентификаторы))"; + Запрос.УстановитьПараметр("Идентификаторы", Идентификатор); + Иначе + ТекстУсловия = ТекстУсловия + " И (ПодключаемоеОборудование.Ссылка = &Идентификатор)"; + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + КонецЕсли; + Иначе + ТекстУсловия = ТекстУсловия + " И (ПодключаемоеОборудование.РабочееМесто = &РабочееМесто"; + Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто); + Если СетевоеОборудование Тогда + // Оборудование, подключенное к конкретному рабочему месту и сетевое оборудование. + ТекстУсловия = ТекстУсловия + + " ИЛИ ПодключаемоеОборудование.ТипПодключения = ЗНАЧЕНИЕ(Перечисление.ТипыПодключенияОборудования.ОбщийДоступ))"; + Иначе + ТекстУсловия = ТекстУсловия + ")"; + КонецЕсли; + Если МассивТиповПО.Количество()>0 Тогда + ТекстУсловия = ТекстУсловия + " И (ПодключаемоеОборудование.ТипОборудования В (&ТипОборудования))"; + Запрос.УстановитьПараметр("ТипОборудования", МассивТиповПО); + КонецЕсли; + Если Организация <> Неопределено Тогда + ТекстУсловия = ТекстУсловия + " И (ПодключаемоеОборудование.Организация = &Организация)"; + Запрос.УстановитьПараметр("Организация", Организация); + КонецЕсли; + КонецЕсли; + ИсключаемыеТипыОборудования = Новый Массив(); + ИсключаемыеТипыОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.УдалитьККМОфлайн); + Запрос.УстановитьПараметр("ИсключаемыеТипыОборудования", ИсключаемыеТипыОборудования); + + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&Условие", ТекстУсловия); + Выборка = Запрос.Выполнить().Выбрать(); + + // Перебирая выборку составляем список устройств + СписокОборудования = Новый Массив(); + Пока Выборка.Следующий() Цикл + ДанныеУстройства = ЗаполнитьДанныеУстройства(Выборка, ТекущийПользовательИБ, КодЯзыка); + СписокОборудования.Добавить(ДанныеУстройства); + КонецЦикла; + + // Возвращаем полученный список с данными всех найденных устройств + Возврат СписокОборудования; + +КонецФункции + +// Функция возвращает по идентификатору устройства его параметры +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// +// Возвращаемое значение: +// - Произвольный +// - Структура +// +Функция ПараметрыУстройства(Идентификатор) Экспорт + + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | ПодключаемоеОборудование.Параметры + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.Ссылка = &Идентификатор"); + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + ПараметрыОборудования = Выборка.Параметры; // ХранилищеЗначения + Результат = ПараметрыОборудования.Получить(); + Возврат Результат; + +КонецФункции + +// Процедура предназначена для сохранения параметров устройства +// в реквизит Параметры типа хранилище значения в элементе справочника. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// Параметры - Структура - параметры устройства. +// +// Возвращаемое значение: +// Булево. +// +Функция СохранитьПараметрыУстройства(Идентификатор, Параметры) Экспорт + + Запрос = Новый Запрос(); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ПодключаемоеОборудование.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.Ссылка = &Идентификатор"; + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат Ложь; + КонецЕсли; + + Попытка + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + ОбъектСправочника = Выборка.Ссылка.ПолучитьОбъект(); // СправочникОбъект.ПодключаемоеОборудование + ОбъектСправочника.Заблокировать(); + ОбъектСправочника.Параметры = Новый ХранилищеЗначения(Параметры); + ОбъектСправочника.Записать(); + Результат = Истина; + Исключение + Результат = Ложь; + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// Функция возвращает структуру с данными устройства +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// КодЯзыка - Строка +// +// Возвращаемое значение: +// - Произвольный +// - Неопределено +// - Структура: +// * Ссылка - СправочникСсылка.ПодключаемоеОборудование +// * ТипОборудования - Структура +// * Наименование - Строка +// * Параметры - Структура +// * ДрайверОборудования - СправочникСсылка.ДрайверыОборудования +// * ВСоставеКонфигурации - Булево +// * ИдентификаторОбъекта - Строка +// * СнятСПоддержки - Булево +// * ВерсияДрайвера - Строка +// * СетевоеОборудование - Булево +// * СпособПодключения - ПеречислениеСсылка.СпособПодключенияДрайвера +// * ПодключениеИзМакета - Булево +// * ПодключениеЛокальноПоИдентификатору - Булево +// * ИмяМакетаДрайвера - Строка +// * МакетДоступен - Булево +// * АвтоматическаяФискализация - Булево +// * ИспользуетсяФН36 - Булево +// * ТребуетсяПереустановка - Булево +// * ТребуетсяУстановка - Булево +// * ОграничениеДоступа - Массив из Строка +// * ДоступноТекущемуПользователю - Булево +// * ПараметрыРегистрации - Структура +// +Функция ДанныеУстройства(Идентификатор, КодЯзыка = Неопределено) Экспорт + + СписокОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + СписокОтбор.Идентификатор = Идентификатор; + СписокОтбор.КодЯзыка = КодЯзыка; + + СписокОборудования = СписокОборудования(СписокОтбор); + Если СписокОборудования.Количество() > 0 Тогда + Результат = СписокОборудования[0] + Иначе + Результат = Неопределено; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// СтандартныеПодсистемы.УправлениеДоступом +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +// +// Параметры: +// Ограничение - Структура: +// * Текст - Строка - ограничение доступа для пользователей. +// Если пустая строка, значит, доступ разрешен. +// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей. +// Если пустая строка, значит, доступ запрещен. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически. +// - Булево - если Ложь, то всегда записывать ключи доступа, +// если Истина, тогда не записывать ключи доступа, +// а использовать ключи доступа владельца (требуется, +// чтобы ограничение было строго по объекту-владельцу). +// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также +// как у параметра ПоВладельцуБезЗаписиКлючейДоступа. +// +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Менеджер = "Справочник.ПодключаемоеОборудование"; + МенеджерОборудованияВызовСервераПереопределяемый.ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.УправлениеДоступом + +// Процедура заполняет элемент в справочнике подключаемое оборудование. +// +// Параметры: +// ПараметрыСоздания - Структура - параметры создания подключаемог оборудования. +// +// Возвращаемое значение: +// СправочникСсылка.ПодключаемоеОборудование - +// +Функция СоздатьНовыйЭлемент(ПараметрыСоздания) Экспорт + + НовыйЭлемент = Справочники.ПодключаемоеОборудование.СоздатьЭлемент(); + + Если ТипЗнч(ПараметрыСоздания.ТипОборудования) = Тип("Строка") Тогда + ПараметрыСоздания.ТипОборудования = МенеджерОборудования.ТипОборудованияПоСтроке(ПараметрыСоздания.ТипОборудования); + КонецЕсли; + Наименование = ПараметрыСоздания.Наименование; + Если ПустаяСтрока(Наименование) Тогда + Наименование = "'" + Строка(ПараметрыСоздания.ДрайверОборудования) + "'" + + ?(ПустаяСтрока(Строка(ПараметрыСоздания.РабочееМесто)), "", " " + НСтр("ru='на'") + " " + Строка(ПараметрыСоздания.РабочееМесто)); + КонецЕсли; + НовыйЭлемент.Наименование = Наименование; + НовыйЭлемент.ТипОборудования = ПараметрыСоздания.ТипОборудования; + НовыйЭлемент.ТипПодключения = ПараметрыСоздания.ТипПодключения; + НовыйЭлемент.УстройствоИспользуется = ПараметрыСоздания.УстройствоИспользуется; + НовыйЭлемент.ДрайверОборудования = ПараметрыСоздания.ДрайверОборудования; + НовыйЭлемент.Организация = ПараметрыСоздания.Организация; + НовыйЭлемент.РабочееМесто = ПараметрыСоздания.РабочееМесто; + НовыйЭлемент.СерийныйНомер = ПараметрыСоздания.СерийныйНомер; + НовыйЭлемент.СпособФорматноЛогическогоКонтроля = ПараметрыСоздания.СпособФорматноЛогическогоКонтроля; + НовыйЭлемент.ДопустимоеРасхождениеФорматноЛогическогоКонтроля = ПараметрыСоздания.ДопустимоеРасхождениеФорматноЛогическогоКонтроля; + НовыйЭлемент.ИспользуетсяФН36 = ПараметрыСоздания.ИспользуетсяФН36; + + НовыйЭлемент.Записать(); + + Возврат НовыйЭлемент.Ссылка; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает таблицу драйверов по всему оборудованию которое добавлено в справочник +// подключаемого оборудования +// +// Параметры: +// СпособПодключения - ПеречислениеСсылка.СпособПодключенияДрайвера - если значение не передано, +// тогда будет отобрано независимо от способа подключения +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ДрайверыОборудования +// * Наименование - Строка +// * Идентификатор - Строка +// * Версия - Строка +// * СпособПодключения - ПеречислениеСсылка.СпособПодключенияДрайвера +// * ИмяМакета - Строка - имя макета в котором находится драйвер +// * МакетДоступен - Булево - если Ложь, тогда в библиотеке отсутствует макет драйвера +// * ВходитВБПО - Булево - флаг того что драйвер включен в библиотеку БПО +Функция ИспользуемыеДрайверы(СпособПодключения = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПодключаемоеОборудование.ДрайверОборудования.Ссылка КАК ДрайверОборудованияСсылка + |ПОМЕСТИТЬ ИспользуемыеДрайвера + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.УстройствоИспользуется + | И НЕ ПодключаемоеОборудование.ПометкаУдаления + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДрайверыОборудования.Ссылка КАК Ссылка, + | ДрайверыОборудования.ИдентификаторОбъекта КАК Идентификатор, + | ДрайверыОборудования.Наименование КАК Наименование, + | ДрайверыОборудования.ВерсияДрайвера КАК Версия, + | ДрайверыОборудования.СпособПодключения КАК СпособПодключения, + | ВЫРАЗИТЬ("""" КАК СТРОКА(100)) КАК ИмяМакета, + | ЛОЖЬ КАК МакетДоступен, + | ДрайверыОборудования.ИмяМакетаДрайвера КАК ИмяМакетаДрайвера, + | ДрайверыОборудования.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + | ДрайверыОборудования.Предопределенный КАК ВходитВБПО + |ИЗ + | Справочник.ДрайверыОборудования КАК ДрайверыОборудования + |ГДЕ + | ДрайверыОборудования.Ссылка В + | (ВЫБРАТЬ + | ИспользуемыеДрайвера.ДрайверОборудованияСсылка КАК ДрайверОборудованияСсылка + | ИЗ + | ИспользуемыеДрайвера КАК ИспользуемыеДрайвера)"; + + Если СпособПодключения <> Неопределено Тогда + Запрос.Текст = Запрос.Текст + " + | И ДрайверыОборудования.СпособПодключения = &СпособПодключения"; + Запрос.УстановитьПараметр("СпособПодключения", СпособПодключения); + КонецЕСли; + + РезультатЗапроса = Запрос.Выполнить(); + РезультатТаблица = РезультатЗапроса.Выгрузить(); + + Для Каждого Строка Из РезультатТаблица Цикл + + МакетДоступен = Ложь; + ИмяДрайвера = Строка.ИмяПредопределенныхДанных; + ИмяМакетаДрайвера = Строка.ИмяМакетаДрайвера; + Если Не ПустаяСтрока(ИмяДрайвера) Тогда + МенеджерОборудования.ЗаполнитьДанныеМакетов(ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, Неопределено); + КонецЕсли; + Строка.ИмяМакета = ?(МакетДоступен, СтрЗаменить(ИмяМакетаДрайвера, "ОбщийМакет.", ""), ""); + Строка.МакетДоступен = МакетДоступен; + + КонецЦикла; + + ИндексКолонки = РезультатТаблица.Колонки.Найти("ИмяПредопределенныхДанных"); + РезультатТаблица.Колонки.Удалить(ИндексКолонки); + ИндексКолонки = РезультатТаблица.Колонки.Найти("ИмяМакетаДрайвера"); + РезультатТаблица.Колонки.Удалить(ИндексКолонки); + + Возврат РезультатТаблица; + +КонецФункции + +// Возвращает массив драйверов по всему оборудованию которое добавлено в справочник +// подключаемого оборудования +// +// Возвращаемое значение: +// Массив из Строка - массив содержащий идентификаторы драйверов +Функция ИдентификаторыИспользуемыхДрайверов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Результат = Новый Массив(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПодключаемоеОборудование.ДрайверОборудования.Ссылка КАК ДрайверОборудованияСсылка + |ПОМЕСТИТЬ ИспользуемыеДрайвера + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.УстройствоИспользуется + | И НЕ ПодключаемоеОборудование.ПометкаУдаления + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДрайверыОборудования.ИдентификаторОбъекта КАК Идентификатор + |ИЗ + | Справочник.ДрайверыОборудования КАК ДрайверыОборудования + |ГДЕ + | ДрайверыОборудования.Ссылка В + | (ВЫБРАТЬ + | ИспользуемыеДрайвера.ДрайверОборудованияСсылка КАК ДрайверОборудованияСсылка + | ИЗ + | ИспользуемыеДрайвера КАК ИспользуемыеДрайвера) + | И ДрайверыОборудования.Предопределенный"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Результат.Добавить(Выборка.Идентификатор); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Заполнить структуру данных устройства +// +Функция ЗаполнитьДанныеУстройства(Выборка, ТекущийПользовательИБ, КодЯзыка) + + ДанныеУстройства = Новый Структура(); + ПараметрыОборудования = Выборка.Параметры; // ХранилищеЗначения + + ДанныеУстройства.Вставить("Ссылка" , Выборка.Ссылка); + ДанныеУстройства.Вставить("ТипыОборудования" , МенеджерОборудования.ПараметрыТипыОборудования(Выборка.ТипОборудования)); + ДанныеУстройства.Вставить("ТипОборудования" , Выборка.ТипОборудования); + ДанныеУстройства.Вставить("ТипОборудованияИмя" , XMLСтрока(Выборка.ТипОборудования)); + ДанныеУстройства.Вставить("Наименование" , Выборка.Наименование); + ДанныеУстройства.Вставить("Параметры" , ПараметрыОборудования.Получить()); + ДанныеУстройства.Вставить("ДрайверОборудования" , Выборка.ДрайверОборудования); + ДанныеУстройства.Вставить("ВСоставеКонфигурации" , Выборка.ВСоставеКонфигурации); + ДанныеУстройства.Вставить("ИдентификаторОбъекта" , Выборка.ИдентификаторОбъекта); + ДанныеУстройства.Вставить("СнятСПоддержки" , Выборка.СнятСПоддержки); + ДанныеУстройства.Вставить("СообщениеПриИспользовании" , Выборка.СообщениеПриИспользовании); + ДанныеУстройства.Вставить("ВерсияДрайвера" , Выборка.ВерсияДрайвера); + ДанныеУстройства.Вставить("СетевоеОборудование" , Выборка.ТипПодключения = Перечисления.ТипыПодключенияОборудования.ОбщийДоступ); + ДанныеУстройства.Вставить("БезопасноеПодключение" , Выборка.БезопасноеПодключение); + ДанныеУстройства.Вставить("ПараметрыXML" , МенеджерОборудования.ПолучитьПараметрыXML(ДанныеУстройства.Параметры, ДанныеУстройства.ТипОборудованияИмя)); + ДанныеУстройства.Вставить("ПараметрыПриложенияXML" , МенеджерОборудования.ПараметрыПриложенияДляДрайвера()); + + СпособПодключения = Выборка.СпособПодключения; + ПодключениеИзМакета = СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзМакета; + ПодключениеЛокальноПоИдентификатору = СпособПодключения = Перечисления.СпособПодключенияДрайвера.ЛокальноПоИдентификатору; + + ШаблонЛокализации = Неопределено; + МакетДоступен = Ложь; + ИмяДрайвера = Выборка.ИмяПредопределенныхДанных; + ИмяМакетаДрайвера = Выборка.ИмяМакетаДрайвера; + Если Не ПустаяСтрока(ИмяДрайвера) Тогда + МенеджерОборудования.ЗаполнитьДанныеМакетов(ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, ШаблонЛокализации, КодЯзыка); + КонецЕсли; + + ДанныеУстройства.Вставить("СпособПодключения" , СпособПодключения); + ДанныеУстройства.Вставить("ПодключениеИзМакета" , ПодключениеИзМакета); + ДанныеУстройства.Вставить("ПодключениеЛокальноПоИдентификатору", ПодключениеЛокальноПоИдентификатору); + ДанныеУстройства.Вставить("ИмяМакетаДрайвера" , ИмяМакетаДрайвера); + ДанныеУстройства.Вставить("МакетДоступен" , МакетДоступен); + ДанныеУстройства.Вставить("ШаблонЛокализации" , ШаблонЛокализации); + ДанныеУстройства.Вставить("АвтоматическаяФискализация" , Выборка.АвтоматическаяФискализация); + ДанныеУстройства.Вставить("ИспользуетсяФН36" , Выборка.ИспользуетсяФН36); + ДанныеУстройства.Вставить("ТребуетсяПереустановка" , Выборка.ТребуетсяПереустановка); + ДанныеУстройства.Вставить("ТребуетсяУстановка" , Выборка.ТребуетсяУстановка); + ДанныеУстройства.Вставить("Организация" , Выборка.Организация); + + ТипыОборудования = МенеджерОборудования.ДоступныеТипыНесертифицированногоОборудования(); + Если ТипыОборудования.Найти(Выборка.ТипОборудования) = Неопределено Тогда + Несертифицированное = Ложь; + Иначе + Несертифицированное = Истина; + КонецЕсли; + ДанныеУстройства.Вставить("Несертифицированное" , Несертифицированное); + + // Ограничение доступа + ОграничениеДоступа = Новый Массив(); + РезультатЗапросаОграничениеДоступа = Выборка.ОграничениеДоступа; // РезультатЗапроса + ВыборкаОграничениеДоступа = РезультатЗапросаОграничениеДоступа.Выбрать(); + Пока ВыборкаОграничениеДоступа.Следующий() Цикл + ОграничениеДоступа.Добавить(Строка(ВыборкаОграничениеДоступа.Пользователь)); + КонецЦикла; + ДанныеУстройства.Вставить("ОграничениеДоступа", ОграничениеДоступа); + Если ОграничениеДоступа.Количество() > 0 Тогда + ДоступноТекущемуПользователю = ОграничениеДоступа.Найти(ТекущийПользовательИБ) <> Неопределено; + Иначе + ДоступноТекущемуПользователю = Истина; + КонецЕсли; + ДанныеУстройства.Вставить("ДоступноТекущемуПользователю", ДоступноТекущемуПользователю); + + Если Выборка.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ + И ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройства = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройства"); + ПараметрыРегистрации = МодульОборудованиеЧекопечатающиеУстройства.ПараметрыРегистрацииУстройства(Выборка.Ссылка); + Иначе + ПараметрыРегистрации = Новый Структура(); + КонецЕсли; + + ДанныеУстройства.Вставить("ПараметрыРегистрации", ПараметрыРегистрации); + + Возврат ДанныеУстройства; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Ext/ObjectModule.bsl b/Catalogs/ПодключаемоеОборудование/Ext/ObjectModule.bsl new file mode 100644 index 0000000..87ebf93 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Ext/ObjectModule.bsl @@ -0,0 +1,99 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +// Процедура производит инициализацию параметров устройства. +// +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если ЭтоНовый() Тогда + Параметры = Новый ХранилищеЗначения(Новый Структура()); + КонецЕсли; + +КонецПроцедуры // ПередЗаписью() + +// При записи +// +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + +// Процедура производит очистку реквизитов, которые не должны копироваться. +// Следующие реквизиты очищаются при копировании: +// "Параметры" - параметры устройства сбрасываются в Неопределено; +// "Наименование" - устанавливается отличное от исходного наименования. +Процедура ПриКопировании(ОбъектКопирования) + + УстройствоИспользуется = Истина; + Параметры = Неопределено; + + Наименование = НСтр("ru='%Наименование% (копия)'"); + Наименование = СтрЗаменить(Наименование, "%Наименование%", ОбъектКопирования.Наименование); + +КонецПроцедуры + +// Процедура проверяет уникальность наименования элемента справочника +// для данного компьютера. +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + Если Не ПустаяСтрока(Наименование) Тогда + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | 1 + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.Наименование = &Наименование + | И ПодключаемоеОборудование.РабочееМесто = &РабочееМесто + | И ПодключаемоеОборудование.Ссылка <> &Ссылка + |"); + + Запрос.УстановитьПараметр("Наименование", Наименование); + Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто); + Запрос.УстановитьПараметр("Ссылка" , Ссылка); + + Если Не Запрос.Выполнить().Пустой() Тогда + ОбщегоНазначенияБПО.СообщитьПользователю(НСтр("ru='Укажите уникальное наименование.'"), ЭтотОбъект, , , Отказ); + КонецЕсли; + КонецЕсли; + + Если ТипОборудования <> Перечисления.ТипыПодключаемогоОборудования.ККТ + И ТипОборудования <> Перечисления.ТипыПодключаемогоОборудования.ФискальныйРегистратор + И ТипОборудования <> Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков Тогда + ИндексЭлемента = ПроверяемыеРеквизиты.Найти("Организация"); + Если ИндексЭлемента <> Неопределено Тогда + ПроверяемыеРеквизиты.Удалить(ИндексЭлемента); + КонецЕсли; + КонецЕсли; + + Если ТипОборудования <> Перечисления.ТипыПодключаемогоОборудования.ККТ Тогда + ИндексЭлемента = ПроверяемыеРеквизиты.Найти("СпособФорматноЛогическогоКонтроля"); + Если ИндексЭлемента <> Неопределено Тогда + ПроверяемыеРеквизиты.Удалить(ИндексЭлемента); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры // ОбработкаПроверкиЗаполнения() + +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) + + Если ОбщегоНазначенияБПО.ИспользуетсяФорматноЛогическийКонтроль() Тогда + Если НЕ ЗначениеЗаполнено(СпособФорматноЛогическогоКонтроля) Тогда + СпособФорматноЛогическогоКонтроля = Перечисления.СпособыФорматноЛогическогоКонтроля.РазделятьСтроки; + ДопустимоеРасхождениеФорматноЛогическогоКонтроля = 0.01; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаАвторизацииЭТ.xml b/Catalogs/ПодключаемоеОборудование/Forms/ФормаАвторизацииЭТ.xml new file mode 100644 index 0000000..a619385 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаАвторизацииЭТ.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаАвторизацииЭТ + + + ru + Форма авторизации ЭТ + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаАвторизацииЭТ/Ext/Form.xml b/Catalogs/ПодключаемоеОборудование/Forms/ФормаАвторизацииЭТ/Ext/Form.xml new file mode 100644 index 0000000..a86d083 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаАвторизацииЭТ/Ext/Form.xml @@ -0,0 +1,244 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Авторизация операции</v8:content> + </v8:item> + + DontBlock + false + Vertical + useIfNecessary + + false + + + + + + + ПриСозданииНаСервере + + + + Сумма + true + true + false + false + true + true + + + + СуммаОкончаниеВводаТекста + + + + ТипКарты + Left + Auto + 1 + + + + + НомерКарты + true + true + true + false + 9999 9999 9999 9999 9999 + true + false + + + + + УказатьДополнительныеДанные + true + Right + + + + УказатьДополнительныеДанныеПриИзменении + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительные данные операции</v8:content> + </v8:item> + + Vertical + Usual + None + false + + + + СсылочныйНомер + false + + + + + НомерЧека + false + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сумма</v8:content> + </v8:item> + + + cfg:DefinedType.ДенежнаяСуммаНеотрицательная + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ссылочный номер</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер чека</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Указать дополнительные данные</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер карты</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип карты</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Показывать номер карты</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер чека ЭТ</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выполнить операцию</v8:content> + </v8:item> + + + + ru + Выполнить операцию + + + ВыполнитьОперацию + DontUse + + + + + + v8:ValueListType + + true + + +
\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаАвторизацииЭТ/Ext/Form/Module.bsl b/Catalogs/ПодключаемоеОборудование/Forms/ФормаАвторизацииЭТ/Ext/Form/Module.bsl new file mode 100644 index 0000000..ebe3784 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаАвторизацииЭТ/Ext/Form/Module.bsl @@ -0,0 +1,156 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + СписокТиповКарт = Неопределено; + + СуммаВременная = 0; + Если Параметры.Свойство("Сумма", СуммаВременная) + И СуммаВременная > 0 Тогда + Сумма = СуммаВременная; + Иначе + Сумма = 0; + КонецЕсли; + + времПределСуммы = 0; + Если Параметры.Свойство("ПределСуммы", времПределСуммы) + И времПределСуммы > 0 Тогда + Элементы.Сумма.МаксимальноеЗначение = времПределСуммы; + Иначе + Элементы.Сумма.МаксимальноеЗначение = Неопределено; + КонецЕсли; + + Если Параметры.Свойство("ЗапретРедактированияСуммы") Тогда + Элементы.Сумма.ТолькоПросмотр = Параметры.ЗапретРедактированияСуммы; + КонецЕсли; + + Если Параметры.Свойство("СписокТиповКарт", СписокТиповКарт) + И ТипЗнч(СписокТиповКарт) = Тип("СписокЗначений") + И СписокТиповКарт. Количество() > 0 Тогда + Для Каждого СтрокаСписка Из СписокТиповКарт Цикл + Элементы.ТипКарты.СписокВыбора.Добавить(СтрокаСписка.Значение, СтрокаСписка.Представление); + КонецЦикла; + Элементы.ТипКарты.Видимость = Истина; + КонецЕсли; + + Элементы.НомерКарты.Видимость = Ложь; + Элементы.НомерКарты.ТолькоПросмотр = Истина; + Элементы.НомерКарты.РедактированиеТекста = Ложь; + + Если Параметры.Свойство("ПоказыватьНомерКарты", ПоказыватьНомерКарты) Тогда + Если ПоказыватьНомерКарты Тогда + Элементы.НомерКарты.Видимость = Истина; + Элементы.НомерКарты.ТолькоПросмотр = Ложь; + Элементы.НомерКарты.РедактированиеТекста = Истина; + КонецЕсли; + КонецЕсли; + + Если Элементы.Сумма.ТолькоПросмотр Тогда + Элементы.Сумма.АктивизироватьПоУмолчанию = Ложь; + Если Элементы.ТипКарты.Видимость И Элементы.ТипКарты.СписокВыбора.Количество() > 1 Тогда + Элементы.ТипКарты.АктивизироватьПоУмолчанию = Истина; + ИначеЕсли Элементы.НомерКарты.Видимость Тогда + Элементы.НомерКарты.АктивизироватьПоУмолчанию = Истина; + Иначе + Элементы.ВыполнитьОперацию.АктивизироватьПоУмолчанию = Истина; + КонецЕсли; + КонецЕсли; + + Если Параметры.Свойство("УказатьДополнительныеДанные") Тогда + УказатьДополнительныеДанные = Истина; + КонецЕсли; + + Если Параметры.Свойство("СсылочныйНомер") Тогда + СсылочныйНомер = Параметры.СсылочныйНомер; + КонецЕсли; + + Если Параметры.Свойство("НомерЧека") Тогда + НомерЧека = Параметры.НомерЧека; + КонецЕсли; + + Элементы.ГруппаРучнойВводДанных.Видимость = УказатьДополнительныеДанные; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура УказатьДополнительныеДанныеПриИзменении(Элемент) + + Элементы.ГруппаРучнойВводДанных.Видимость = УказатьДополнительныеДанные; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОперацию(Команда) + + Ошибки = ""; + + ОчиститьСообщения(); + + Если Сумма = 0 Тогда + Ошибки = НСтр("ru='Платеж не может быть осуществлен на нулевую сумму.'"); + КонецЕсли; + + Если ПоказыватьНомерКарты И Не ЗначениеЗаполнено(НомерКарты) Тогда + Ошибки = Ошибки + ?(ПустаяСтрока(Ошибки),"",Символы.ПС) + НСтр("ru='Платеж не может быть осуществлен без номера карты.'"); + КонецЕсли; + + Если ПустаяСтрока(Ошибки) Тогда + Если Не УказатьДополнительныеДанные Тогда + СсылочныйНомер = ""; + НомерЧека = ""; + НомерЧекаЭТ = ""; + КонецЕсли; + + СтруктураВозврата = Новый Структура(); + СтруктураВозврата.Вставить("Сумма" , Сумма); + СтруктураВозврата.Вставить("ДанныеКарты" , ""); + СтруктураВозврата.Вставить("СсылочныйНомер", СсылочныйНомер); + СтруктураВозврата.Вставить("ТипКарты" , ТипКарты); + СтруктураВозврата.Вставить("НомерКарты" , НомерКарты); + СтруктураВозврата.Вставить("НомерЧека" , НомерЧека); + СтруктураВозврата.Вставить("НомерЧекаЭТ" , НомерЧекаЭТ); + + Закрыть(СтруктураВозврата); + + Иначе + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(Ошибки,,"НомерКарты"); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура СуммаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) + + Если Элементы.Сумма.МаксимальноеЗначение <> Неопределено + И Элементы.Сумма.МаксимальноеЗначение < Число(Текст) Тогда + + СтандартнаяОбработка = Ложь; + СтруктураЗначения = Новый Структура; + СтруктураЗначения.Вставить("Предупреждение", НСтр("ru = 'Сумма оплаты по карте превышает необходимую безналичную оплату. + |Значение будет изменено на максимально возможное.'")); + СтруктураЗначения.Вставить("Значение", Формат(Элементы.Сумма.МаксимальноеЗначение, "ЧДЦ=2; ЧН=0; ЧГ=0; ЧО=1")); + + СписокЗначений = Новый СписокЗначений; + СписокЗначений.Добавить(СтруктураЗначения); + ДанныеВыбора = СписокЗначений; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста.xml b/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста.xml new file mode 100644 index 0000000..3489cff --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаВыбораРабочегоМеста + + + ru + Форма выбора рабочего места + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Form.xml b/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Form.xml new file mode 100644 index 0000000..929c715 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Form.xml @@ -0,0 +1,130 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рабочее место подключаемого оборудования текущего сеанса</v8:content> + </v8:item> + + DontBlock + Use + false + Vertical + false + useIfNecessary + + + + + + + ОбработкаОповещения + ПриСозданииНаСервере + + + + false + 2 + false + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выберите рабочее место из списка, если подключение и настройка оборудования производилась ранее</v8:content> + </v8:item> + + + + + + РабочееМесто + false + + + + + false + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рабочее место</v8:content> + </v8:item> + + + cfg:CatalogRef.РабочиеМеста + + ShowError + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор клиента</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выбрать и закрыть</v8:content> + </v8:item> + + + + ru + Выбрать и закрыть + + + ВыбратьИЗакрыть + DontUse + + + + + + cfg:CatalogRef.РабочиеМеста + + true + + + + xs:boolean + + + + + xs:string + + 0 + Variable + + + + + \ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Form/Module.bsl b/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Form/Module.bsl new file mode 100644 index 0000000..f23ed38 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Form/Module.bsl @@ -0,0 +1,57 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + РабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + + ИдентификаторКлиента = Параметры.ИдентификаторКлиента; + + Если Не ПустаяСтрока(ИдентификаторКлиента) Тогда + НовыйМассив = Новый Массив(); + НовыйМассив.Добавить(Новый ПараметрВыбора("Отбор.ПометкаУдаления", Ложь)); + НовыйМассив.Добавить(Новый ПараметрВыбора("Отбор.Код", ИдентификаторКлиента)); + НовыйФиксированныйМассив = Новый ФиксированныйМассив(НовыйМассив); + Элементы.РабочееМесто.ПараметрыВыбора = НовыйФиксированныйМассив; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "ИзмененоРабочееМестоТекущегоСеанса" Тогда + РабочееМесто = МенеджерОборудованияКлиент.РабочееМестоКлиента(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыбратьИЗакрыть(Команда) + + ОчиститьСообщения(); + + Если ЗначениеЗаполнено(РабочееМесто) Тогда + Параметры.РабочееМесто = РабочееМесто; + ОчиститьСообщения(); + СтруктураВозврата = Новый Структура("РабочееМесто", РабочееМесто); + Закрыть(СтруктураВозврата); + Иначе + + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Выберите рабочее место'"), РабочееМесто, "РабочееМесто"); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Help.xml b/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Help.xml new file mode 100644 index 0000000..1d2b70b --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Help.xml @@ -0,0 +1,4 @@ + + + ru + \ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Help/ru.html b/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Help/ru.html new file mode 100644 index 0000000..d44e4b3 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Help/ru.html @@ -0,0 +1,3 @@ + +

Форма Рабочее место подключаемого оборудования текущего сеанса

+

Форма предназначена для выбора рабочего места подключаемого оборудования для текущего сеанса.

\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки.xml b/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки.xml new file mode 100644 index 0000000..7a59cce --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаНастройки + + + ru + Форма настройки компоненты подключения оборудования по стандарту "1С: Совместимо" + + + + Managed + true + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Form.xml b/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Form.xml new file mode 100644 index 0000000..91e33ac --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Form.xml @@ -0,0 +1,979 @@ + +
+ DontBlock + false + Vertical + false + useIfNecessary + + false + + + + + + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Функции</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительные действия</v8:content> + </v8:item> + + + + + + + + + + + ПриОткрытии + ПриСозданииНаСервере + + + + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Демонстрационный режим</v8:content> + </v8:item> + + 3 + Vertical + Usual + WeakSeparation + false + + + + ДемонстрационныйРежим + true + None + false + false + true + true + style:SpecialTextColor + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Статус компоненты</v8:content> + </v8:item> + + true + None + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Компонента получение информации</v8:content> + </v8:item> + + Vertical + false + + + + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Получение информации о компоненте подключения оборудования…</v8:content> + </v8:item> + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Компонента не установлена</v8:content> + </v8:item> + + false + Vertical + false + + + + 60 + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Для использования подключаемого оборудования необходимо установить драйвер на текущем рабочем месте.</v8:content> + </v8:item> + + + + + + + + + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Драйвер</v8:content> + </v8:item> + + Vertical + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Информация</v8:content> + </v8:item> + + Vertical + Usual + None + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа версия</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + ДрайверУстановлен + true + false + false + + + + + ВерсияДрайвера + true + false + false + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Описание</v8:content> + </v8:item> + + Vertical + Usual + None + false + + + + НаименованиеДрайвера + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Наименование</v8:content> + </v8:item> + + false + true + + + + + ОписаниеДрайвера + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Описание</v8:content> + </v8:item> + + Left + false + true + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Информация об окружении</v8:content> + </v8:item> + + Right + true + + + + ДекорацияИнформацияОбОкруженииНажатие + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основная поставка</v8:content> + </v8:item> + + HorizontalIfPossible + Usual + Button + None + + + + false + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установлен интеграционный компонент</v8:content> + </v8:item> + + Vertical + false + + + + false + style:SpecialTextColor + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установка драйвера "%1" не завершена. +</v8:content> + </v8:item> + + + + + + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>На текущем рабочем месте установлен интеграционный компонент к основной поставке драйвера. +Основная поставка драйвера устанавливается с помощью дистрибутива, полученного из внешнего источника.</v8:content> + </v8:item> + + + + + + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перейти на сайт поставщика</v8:content> + </v8:item> + + true + + + + УстановитьДрайвер + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Устройство подключено</v8:content> + </v8:item> + + Vertical + false + + + + false + 2 + style:SpecialTextColor + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Устройство подключено, настройки не могут быть изменены. +Для отключения устройства требуется закрыть все формы приложения для текущей информационной базы.</v8:content> + </v8:item> + + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Страницы</v8:content> + </v8:item> + + None + + + + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Префиксы и суффиксы дорожек</v8:content> + </v8:item> + + Vertical + Usual + None + + + + List + Auto + None + false + false + false + 3 + SingleRow + Cell + true + true + true + AsFile + ПараметрыДорожек + None + None + None + + + + + + + ПараметрыДорожек + SearchStringRepresentation + + + + + + + ПараметрыДорожек + ViewStatusRepresentation + + Left + + + + + + ПараметрыДорожек + SearchControl + + + + + + + ПараметрыДорожек.НомерДорожки + true + EnterOnInput + true + + + + + ПараметрыДорожек.Префикс + EnterOnInput + true + true + true + true + false + + + + + ПараметрыДорожек.Суффикс + EnterOnInput + true + true + true + true + false + + + + + ПараметрыДорожек.Использовать + None + EnterOnInput + true + + + + +
+
+
+
+ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Драйвер</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Версия</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор</v8:content> + </v8:item> + + + cfg:CatalogRef.ПодключаемоеОборудование + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Наименование драйвера</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Описание драйвера</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Адрес для загрузки драйвера</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Значение параметров</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Демонстрационный режим</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Интеграционный компонент</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основной драйвер установлен</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ревизия интерфейса</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Any + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Настройка параметров</v8:content> + </v8:item> + + + v8:ValueListType + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Драйвер оборудования</v8:content> + </v8:item> + + + cfg:CatalogRef.ДрайверыОборудования + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поставляется дистрибутивом</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Требуется переустановка</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Версия драйвера в макете</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Параметры дорожек</v8:content> + </v8:item> + + + v8:ValueTable + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>№ дорожки</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Префикс</v8:content> + </v8:item> + + + xs:decimal + + 5 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Суффикс</v8:content> + </v8:item> + + + xs:decimal + + 5 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Использовать</v8:content> + </v8:item> + + + xs:boolean + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Считыватель магнитных карт</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установлен</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Параметры драйвера</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительные действия</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Данные устройства</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Количество подключенных</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Any + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Информация об окружении</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Авто настройка оборудования</v8:content> + </v8:item> + + + xs:boolean + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Записать и закрыть</v8:content> + </v8:item> + + + + ru + Записать и закрыть + + + ЗаписатьИЗакрыть + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тест подключения</v8:content> + </v8:item> + + + + ru + Тест подключения + + + ТестПодключения + true + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установить драйвер</v8:content> + </v8:item> + + + + ru + Установить драйвер + + + УстановитьДрайвер + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Автонастройка устройства</v8:content> + </v8:item> + + + + ru + Автонастройка устройства + + + АвтонастройкаУстройства + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Очистить параметры</v8:content> + </v8:item> + + + + ru + Очистить параметры + + + ОчиститьПараметры + + +
\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Form/Module.bsl b/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Form/Module.bsl new file mode 100644 index 0000000..5157548 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Form/Module.bsl @@ -0,0 +1,672 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Параметры.Свойство("Идентификатор", Идентификатор); + КодЯзыка = ?(Параметры.Свойство("КодЯзыка"), Параметры.КодЯзыка, ""); + ДанныеУстройстваСтруктура = МенеджерОборудования.ДанныеУстройства(Идентификатор, КодЯзыка); // Структура + Если ДанныеУстройстваСтруктура = Неопределено Тогда + Отказ = Истина; + ОбщегоНазначенияБПО.СообщитьПользователю(НСтр("ru = 'Не удалось получить данные устройства.'")); + Возврат; + КонецЕсли; + ДрайверОборудования = ДанныеУстройстваСтруктура.ДрайверОборудования; + ЗначениеПараметров = ДанныеУстройстваСтруктура.Параметры; + ДанныеУстройства = ДанныеУстройстваСтруктура; + Если Не ЗначениеЗаполнено(ЗначениеПараметров) Тогда + ЗначениеПараметров = Новый Структура(); + КонецЕсли; + + Заголовок = НСтр("ru='Оборудование:'") + Символы.НПП + Строка(Идентификатор); + + ДрайверОборудованияТипОборудования = ОбщегоНазначенияБПО.ЗначениеРеквизитаОбъекта(ДрайверОборудования, "ТипОборудования"); + + СчитывательМагнитныхКарт = ДрайверОборудованияТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СчитывательМагнитныхКарт; + Если СчитывательМагнитныхКарт Тогда + времПараметрыДорожек = Неопределено; + Если НЕ ЗначениеПараметров.Свойство("ПараметрыДорожек", времПараметрыДорожек) Тогда + времПараметрыДорожек = Новый Массив(); + Для Индекс = 1 По 3 Цикл + НоваяСтрока = Новый Структура(); + НоваяСтрока.Вставить("НомерДорожки", Индекс); + НоваяСтрока.Вставить("Префикс" , 0); + НоваяСтрока.Вставить("Суффикс" , ?(Индекс = 2, 13, 0)); + НоваяСтрока.Вставить("Использовать", ?(Индекс = 2, Истина, Ложь)); + времПараметрыДорожек.Добавить(НоваяСтрока); + КонецЦикла; + КонецЕсли; + Для Каждого СтрокаДорожки Из времПараметрыДорожек Цикл + НоваяСтрока = ПараметрыДорожек.Добавить(); + НоваяСтрока.НомерДорожки = СтрокаДорожки.НомерДорожки; + НоваяСтрока.Префикс = СтрокаДорожки.Префикс; + НоваяСтрока.Суффикс = СтрокаДорожки.Суффикс; + НоваяСтрока.Использовать = СтрокаДорожки.Использовать; + КонецЦикла; + КонецЕсли; + + ИдентификаторРабочееМесто = ОбщегоНазначенияБПО.ЗначениеРеквизитаОбъекта(Идентификатор, "РабочееМесто"); + РабочееМестоКлиента = МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + ТекущееРабочееМесто = (РабочееМестоКлиента = ИдентификаторРабочееМесто); + + Элементы.ТестУстройства.Видимость = ТекущееРабочееМесто; + Элементы.СтатусКомпоненты.Видимость = ТекущееРабочееМесто; + Элементы.ДополнительныеДействия.Видимость = ТекущееРабочееМесто Или ПустаяСтрока(ИдентификаторРабочееМесто); + + Если ОбщегоНазначенияБПО.ЭтоМобильнаяПлатформа() Тогда + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.Версия); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.Статус); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.НаименованиеДрайвера); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ОписаниеДрайвера); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ОбновитьИнформациюДрайверОборудования(Истина); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + ВремНастройки = ПолучитьНастройки(); + + Если СчитывательМагнитныхКарт Тогда + + НастроеноДорожек = 0; + ДорожкаСПустымСуффиксом = Ложь; + времПараметрыДорожек = Новый Массив(); + ПрефиксДрайвера = -1; + СуффиксДрайвера = -1; + + Для Индекс = 1 По 3 Цикл + Если ПараметрыДорожек[3 - Индекс].Использовать Тогда + ДорожкаСПустымСуффиксом = + ДорожкаСПустымСуффиксом ИЛИ (ПараметрыДорожек[3 - Индекс].Суффикс = 0); + НастроеноДорожек = НастроеноДорожек + 1; + КонецЕсли; + КонецЦикла; + + Если Не ДорожкаСПустымСуффиксом Тогда + + Для Индекс = 1 По 3 Цикл + НоваяСтрока = Новый Структура(); + НоваяСтрока.Вставить("НомерДорожки", ПараметрыДорожек[Индекс - 1].НомерДорожки); + НоваяСтрока.Вставить("Использовать", ПараметрыДорожек[Индекс - 1].Использовать); + НоваяСтрока.Вставить("Префикс" , ПараметрыДорожек[Индекс - 1].Префикс); + НоваяСтрока.Вставить("Суффикс" , ПараметрыДорожек[Индекс - 1].Суффикс); + времПараметрыДорожек.Добавить(НоваяСтрока); + КонецЦикла; + + Для Индекс = 1 По 3 Цикл + Если времПараметрыДорожек[Индекс - 1].Использовать Тогда + ПрефиксДрайвера = времПараметрыДорожек[Индекс - 1].Префикс; + ПрефиксДрайвера = ?(ПрефиксДрайвера = 0, -1, ПрефиксДрайвера); + ВремНастройки.ПараметрыОборудования.Вставить("P_Prefix", ПрефиксДрайвера); + Прервать; + КонецЕсли; + КонецЦикла; + + Для Индекс = 1 По 3 Цикл + Если времПараметрыДорожек[3 - Индекс].Использовать Тогда + СуффиксДрайвера = времПараметрыДорожек[3 - Индекс].Суффикс; + СуффиксДрайвера = ?(СуффиксДрайвера = 0, -1, СуффиксДрайвера); + ВремНастройки.ПараметрыОборудования.Вставить("P_Suffix", СуффиксДрайвера); + Прервать; + КонецЕсли; + КонецЦикла; + + ВремНастройки.ПараметрыОборудования.Вставить("ПараметрыДорожек", времПараметрыДорожек); + + КонецЕсли; + + Если ПрефиксДрайвера > 0 И СуффиксДрайвера > 0 И ПрефиксДрайвера = СуффиксДрайвера Тогда + ТекстСообщения = НСтр("ru = 'Префикс первой используемой дорожки совпадает с суффикс последней используемой дорожки'"); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + ИначеЕсли НастроеноДорожек > 0 И Не ДорожкаСПустымСуффиксом Тогда + Закрыть(ВремНастройки); + ИначеЕсли НастроеноДорожек = 0 Тогда + ТекстСообщения = НСтр("ru = 'Необходимо указать использование хотя бы одной дорожки для считывателя'"); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + ИначеЕсли ДорожкаСПустымСуффиксом Тогда + ТекстСообщения = НСтр("ru = 'Для каждой используемой дорожки должен быть указан суффикс'"); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + + Иначе + Закрыть(ВремНастройки); + КонецЕсли; + + +КонецПроцедуры + +&НаКлиенте +Процедура НачатьЗапускПриложенияЗавершение(Результат, Параметры) Экспорт + + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Начата установка основной поставки драйвера.'")); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановкаДрайвераОсновнаяПоставкаЗавершение(Результат, Параметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + Оповещения = Новый ОписаниеОповещения("НачатьЗапускПриложенияЗавершение", ЭтотОбъект); + // АПК:534-выкл URLЗагрузкиДрайвера предоставляется производителем драйвера + НачатьЗапускПриложения(Оповещения, URLЗагрузкиДрайвера, , Ложь); + // АПК:534-вкл + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДрайверЗавершение(РезультатОперации, Параметры) Экспорт + + Если РезультатОперации.Результат Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Установка драйвера завершена.'")); + ОбновитьИнформациюДрайверОборудования(Истина); + Иначе + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(РезультатОперации.ОписаниеОшибки); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДрайвер(Команда) + + Если ИнтеграционныйКомпонент Тогда + Текст = НСтр("ru = 'Для перехода на сайт производителя необходимо подключение к Интернету. + |Продолжить выполнение операции?'"); + Оповещение = Новый ОписаниеОповещения("УстановкаДрайвераОсновнаяПоставкаЗавершение", ЭтотОбъект); + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет); + Иначе + ОповещенияУстановитьДрайверЗавершение = Новый ОписаниеОповещения("УстановитьДрайверЗавершение", ЭтотОбъект); + МенеджерОборудованияКлиент.УстановитьДрайверОборудования(ОповещенияУстановитьДрайверЗавершение, ДрайверОборудования); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ТестУстройстваЗавершение(РезультатВыполнения, Параметры) Экспорт + + ТолькоПросмотр = Ложь; + КоманднаяПанель.Доступность = Истина; + + Если РезультатВыполнения.Результат Тогда + ДополнительноеОписание = РезультатВыполнения.РезультатВыполнения; + ДемонстрационныйРежим = РезультатВыполнения.АктивированДемоРежим; + Элементы.ГруппаДемонстрационныйРежим.Видимость = НЕ ПустаяСтрока(ДемонстрационныйРежим); + ТекстСообщения = НСтр("ru = 'Тест успешно выполнен.'"); + Если Не ПустаяСтрока(ДополнительноеОписание) Тогда + ТекстСообщения = ТекстСообщения + Символы.НПП + ДополнительноеОписание; + КонецЕсли + Иначе + ТекстСообщения = СтрШаблон(НСтр("ru = 'Тест не пройден. %1'"), РезультатВыполнения.ОписаниеОшибки); + КонецЕсли; + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура ТестПодключения(Команда) + + ОчиститьСообщения(); + ТолькоПросмотр = Истина; + КоманднаяПанель.Доступность = Ложь; + + ДемонстрационныйРежим = ""; + + ПараметрыУстройства = ПолучитьНастройки().ПараметрыОборудования; + Оповещение = Новый ОписаниеОповещения("ТестУстройстваЗавершение", ЭтотОбъект); + МенеджерОборудованияКлиент.НачатьТестУстройства(Оповещение, Идентификатор, ПараметрыУстройства); + +КонецПроцедуры + +&НаСервере +Процедура ОчиститьПараметрыНаСервере() + + ПараметрыДрайвераРеквизиты = ПолучитьРеквизиты(); + Для Каждого Параметр Из ПараметрыДрайвераРеквизиты Цикл + Если Лев(Параметр.Имя, 2) = "P_" Тогда + ЭтотОбъект[Параметр.Имя] = Неопределено; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура АвтонастройкаУстановитьПараметры(ПараметрыПодключения) + + ОчиститьПараметрыНаСервере(); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ПараметрыПодключения); + +КонецПроцедуры + +&НаКлиенте +Процедура АвтонастройкаУстройстваЗавершение(РезультатВыполнения, Параметры) Экспорт + + ТолькоПросмотр = Ложь; + КоманднаяПанель.Доступность = Истина; + ТекстСообщения = ?(РезультатВыполнения.Результат, НСтр("ru = 'Операция выполнена успешно.'"), НСтр("ru = 'Операция не выполнена.'")); + + Если РезультатВыполнения.Результат Тогда + Если РезультатВыполнения.ПараметрыПодключения.Количество() > 0 Тогда + АвтонастройкаУстановитьПараметры(РезультатВыполнения.ПараметрыПодключения); + Иначе + ТекстСообщения = НСтр("ru = 'Параметры настройки драйвера не определены.'"); + КонецЕсли; + КонецЕсли; + + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура АвтонастройкаУстройства(Команда) + + ОчиститьСообщения(); + ТолькоПросмотр = Истина; + КоманднаяПанель.Доступность = Ложь; + + ДемонстрационныйРежим = ""; + + ПараметрыУстройства = ПолучитьНастройки().ПараметрыОборудования; + Оповещение = Новый ОписаниеОповещения("АвтонастройкаУстройстваЗавершение", ЭтотОбъект); + МенеджерОборудованияКлиент.НачатьАвтонастройкуУстройства(Оповещение, Идентификатор, ПараметрыУстройства); + +КонецПроцедуры + +&НаКлиенте +Процедура ДополнительноеДействиеЗавершение(РезультатВыполнения, Параметры) Экспорт + + ТекстСообщения = ?(РезультатВыполнения.Результат, + НСтр("ru = 'Операция выполнена успешно.'"), + НСтр("ru = 'Ошибка выполнения операции:'") + РезультатВыполнения.ОписаниеОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + + ОчиститьНастраиваемыйИнтерфейс(); + + ОбновитьИнформациюДрайверОборудования(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ДополнительноеДействие(Команда) + + ИмяДействия = Сред(Команда.Имя, 3); + ПараметрыВыполнения = Новый Структура("ИмяДействия", ИмяДействия); + + ПараметрыУстройства = ПолучитьНастройки().ПараметрыОборудования; + Оповещение = Новый ОписаниеОповещения("ДополнительноеДействиеЗавершение", ЭтотОбъект); + МенеджерОборудованияКлиент.НачатьВыполнениеДополнительнойКоманды(Оповещение, Идентификатор, ПараметрыУстройства, ПараметрыВыполнения); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция ПолучитьНастройки() + + ПараметрыДрайвераРеквизиты = ПолучитьРеквизиты(); + + НовыеЗначениеПараметров = Новый Структура; + Для Каждого Параметр Из ПараметрыДрайвераРеквизиты Цикл + Если Лев(Параметр.Имя, 2) = "P_" Тогда + НовыеЗначениеПараметров.Вставить(Параметр.Имя, ЭтотОбъект[Параметр.Имя]); + КонецЕсли; + КонецЦикла; + + Результат = Новый Структура; + Результат.Вставить("Идентификатор", Идентификатор); + Результат.Вставить("ПараметрыОборудования", НовыеЗначениеПараметров); + + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура ОчиститьНастраиваемыйИнтерфейс() + + Пока Элементы.Страницы.ПодчиненныеЭлементы.Количество() > 0 Цикл + Элементы.Удалить(Элементы.Страницы.ПодчиненныеЭлементы.Получить(0)); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьНастраиваемыйИнтерфейс(ОписаниеИнтерфейса, ДополнительныеДействия, ПервыйЗапуск) + + Суффикс = Ложь; + Префикс = Ложь; + БазоваяГруппа = Неопределено; + Элемент = Неопределено; + ИндексГруппы = 0; + КоличествоСтраниц = 0; + ТекущаяСтраница = Элементы.Добавить("ОсновнаяСтраница", Тип("ГруппаФормы"), Элементы.Страницы); + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ОписаниеИнтерфейса); + ЧтениеXML.ПерейтиКСодержимому(); + + Если ЧтениеXML.Имя = "Settings" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Пока ЧтениеXML.Прочитать() Цикл + + Если ЧтениеXML.Имя = "Parameter" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + ТолькоЧтение = ?(ВРег(ЧтениеXML.ЗначениеАтрибута("ReadOnly")) = "TRUE", Истина, Ложь) + Или ?(ВРег(ЧтениеXML.ЗначениеАтрибута("ReadOnly")) = "ИСТИНА", Истина, Ложь); + ОригинальноеИмя = ЧтениеXML.ЗначениеАтрибута("Name"); + ПараметрИмя = ?(ТолькоЧтение, "R_", "P_") + ОригинальноеИмя; + ПараметрЗаголовок = ЧтениеXML.ЗначениеАтрибута("Caption"); + ПараметрТип = ВРег(ЧтениеXML.ЗначениеАтрибута("TypeValue")); + ПараметрТип = ?(НЕ ПустаяСтрока(ПараметрТип), ПараметрТип, "STRING"); + ПараметрЗначение = ЧтениеXML.ЗначениеАтрибута("DefaultValue"); + ПараметрОписание = ЧтениеXML.ЗначениеАтрибута("Description"); + СтрокаФорматирования = ЧтениеXML.ЗначениеАтрибута("FieldFormat"); + + Если СчитывательМагнитныхКарт Тогда + Суффикс = ВРег(ОригинальноеИмя) = "SUFFIX" Или ?(ВРег(ЧтениеXML.ЗначениеАтрибута("Suffix")) = "TRUE", Истина, Ложь); + Префикс = ВРег(ОригинальноеИмя) = "PREFIX" Или ?(ВРег(ЧтениеXML.ЗначениеАтрибута("Prefix")) = "TRUE", Истина, Ложь); + КонецЕсли; + + ПараметрСуществует = Ложь; + ПараметрыДрайвераРеквизиты = ПолучитьРеквизиты(); + Для Каждого ПараметрДрайвераРеквизит Из ПараметрыДрайвераРеквизиты Цикл + Если ПараметрДрайвераРеквизит.Имя = ПараметрИмя Тогда + ПараметрСуществует = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ПараметрСуществует Тогда + + Если ПараметрТип = "NUMBER" Тогда + Реквизит = Новый РеквизитФормы(ПараметрИмя, Новый ОписаниеТипов("Число"), , ПараметрЗаголовок, Истина); + ИначеЕсли ПараметрТип = "BOOLEAN" Тогда + Реквизит = Новый РеквизитФормы(ПараметрИмя, Новый ОписаниеТипов("Булево"), , ПараметрЗаголовок, Истина); + Иначе + Реквизит = Новый РеквизитФормы(ПараметрИмя, Новый ОписаниеТипов("Строка"), , ПараметрЗаголовок, Истина); + КонецЕсли; + + // Добавляем новый реквизит в форму. + ДобавляемыеРеквизиты = Новый Массив; + ДобавляемыеРеквизиты.Добавить(Реквизит); + ИзменитьРеквизиты(ДобавляемыеРеквизиты); + + КонецЕсли; + + Если Суффикс Тогда + Элемент = Элементы.ПараметрыДорожекСуффикс + ИначеЕсли Префикс Тогда + Элемент = Элементы.ПараметрыДорожекПрефикс; + ИначеЕсли Элементы.Найти(ПараметрИмя) = Неопределено Тогда + // Если не было создано не одной группы. + Если БазоваяГруппа = Неопределено Тогда + БазоваяГруппа = Элементы.Добавить("БазоваяГруппа" + КоличествоСтраниц, Тип("ГруппаФормы"), ТекущаяСтраница); + БазоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа; + БазоваяГруппа.Отображение = Элементы.ДрайверОборудования.Отображение; + БазоваяГруппа.РастягиватьПоГоризонтали = Истина; + БазоваяГруппа.Заголовок = НСтр("ru = 'Параметры'"); + БазоваяГруппа.Группировка = Элементы.ДрайверОборудования.Группировка; + КонецЕсли; + // Добавляем новое поле ввода на форму. + Элемент = Элементы.Добавить(ПараметрИмя, Тип("ПолеФормы"), БазоваяГруппа); + Если ПараметрТип = "BOOLEAN" Тогда + Элемент.Вид = ВидПоляФормы.ПолеФлажка + Иначе + Элемент.Вид = ВидПоляФормы.ПолеВвода; + Элемент.АвтоМаксимальнаяШирина = Ложь; + Элемент.РастягиватьПоГоризонтали = Истина; + Элемент.Формат = СтрокаФорматирования; + Элемент.ФорматРедактирования = СтрокаФорматирования; + Если ОбщегоНазначенияБПО.ЭтоМобильнаяПлатформа() Тогда + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элемент); + КонецЕсли; + КонецЕсли; + Элемент.ПутьКДанным = ПараметрИмя; + Элемент.Подсказка = ПараметрОписание; + Элемент.ТолькоПросмотр = ТолькоЧтение; + КонецЕсли; + + ХранимоеЗначение = Неопределено; + Если ЗначениеПараметров.Свойство(ПараметрИмя, ХранимоеЗначение) Тогда + ПараметрЗначение = ХранимоеЗначение + Иначе + Если НЕ ПустаяСтрока(ПараметрЗначение) Тогда + Если ПараметрТип = "BOOLEAN" Тогда + ПараметрЗначение = ?(ВРег(ПараметрЗначение) = "TRUE", Истина, Ложь) Или ?(ВРег(ПараметрЗначение) = "ИСТИНА", Истина, Ложь); + ИначеЕсли ПараметрТип = "STRING" Тогда + ПараметрЗначение = Строка(ПараметрЗначение); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ЭтотОбъект[ПараметрИмя] = ПараметрЗначение; + + КонецЕсли; + + Если ЧтениеXML.Имя = "ChoiceList" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + Если НЕ (Элемент = Неопределено) И НЕ (Элемент.Вид = ВидПоляФормы.ПолеФлажка) Тогда + Элемент.РежимВыбораИзСписка = Истина; + Элемент.ВысотаСпискаВыбора = 10; + Элемент.РедактированиеТекста = Ложь; + Если Суффикс Или Префикс Тогда + Элемент.СписокВыбора.Добавить(0, ""); + КонецЕсли; + КонецЕсли; + + Пока ЧтениеXML.Прочитать() И НЕ (ЧтениеXML.Имя = "ChoiceList") Цикл + + Если ЧтениеXML.Имя = "Item" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ЗначениеАтрибута = ЧтениеXML.ЗначениеАтрибута("Value"); + Если ЧтениеXML.Прочитать() Тогда + ПредставлениеАтрибута = ЧтениеXML.Значение; + КонецЕсли; + Если ПустаяСтрока(ЗначениеАтрибута) Тогда + ЗначениеАтрибута = ПредставлениеАтрибута; + КонецЕсли; + + Если Суффикс Или Префикс Тогда + Если Число(ЗначениеАтрибута) > 0 Тогда + Элемент.СписокВыбора.Добавить(Число(ЗначениеАтрибута), ПредставлениеАтрибута); + КонецЕсли; + ИначеЕсли ПараметрТип = "NUMBER" Тогда + Элемент.СписокВыбора.Добавить(Число(ЗначениеАтрибута), ПредставлениеАтрибута); + Иначе + Элемент.СписокВыбора.Добавить(ЗначениеАтрибута, ПредставлениеАтрибута) + КонецЕсли; + Если ОбщегоНазначенияБПО.ЭтоМобильнаяПлатформа() Тогда + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элемент); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Если ЧтениеXML.Имя = "Page" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + ЗаголовокСтраницы = ЧтениеXML.ЗначениеАтрибута("Caption"); + ЗаголовокСтраницы = ?(ПустаяСтрока(ЗаголовокСтраницы), НСтр("ru = 'Параметры'"), ЗаголовокСтраницы); + + КоличествоСтраниц = КоличествоСтраниц + 1; + Если КоличествоСтраниц > 1 Тогда + Элементы.Страницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + ТекущаяСтраница = Элементы.Добавить("Страница" + КоличествоСтраниц, Тип("ГруппаФормы"), Элементы.Страницы); + БазоваяГруппа = Неопределено; + КонецЕсли; + ТекущаяСтраница.Заголовок = ЗаголовокСтраницы; + + КонецЕсли; + + Если ЧтениеXML.Имя = "Group" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + ЗаголовокГруппы = ЧтениеXML.ЗначениеАтрибута("Caption"); + ЗаголовокГруппы = ?(ПустаяСтрока(ЗаголовокГруппы), НСтр("ru = 'Параметры'"), ЗаголовокГруппы); + + БазоваяГруппа = Элементы.Добавить("Группа" + ИндексГруппы, Тип("ГруппаФормы"), ТекущаяСтраница); + БазоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа; + БазоваяГруппа.Отображение = Элементы.ДрайверОборудования.Отображение; + БазоваяГруппа.РастягиватьПоГоризонтали = Истина; + БазоваяГруппа.Группировка = Элементы.ДрайверОборудования.Группировка; + БазоваяГруппа.Заголовок = ЗаголовокГруппы; + ИндексГруппы = ИндексГруппы + 1; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + ЧтениеXML.Закрыть(); + + Если ПервыйЗапуск И НЕ ПустаяСтрока(ДополнительныеДействия) Тогда + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ДополнительныеДействия); + ЧтениеXML.ПерейтиКСодержимому(); + + Если ЧтениеXML.Имя = "Actions" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя = "Action" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + ДействиеИмя = "M_" + ЧтениеXML.ЗначениеАтрибута("Name"); + ДействиеЗаголовок = ЧтениеXML.ЗначениеАтрибута("Caption"); + + Команда = Команды.Добавить("A_" + ЧтениеXML.ЗначениеАтрибута("Name")); + Команда.Заголовок = ДействиеЗаголовок; + Команда.Действие = "ДополнительноеДействие"; + + ПунктМеню = Элементы.Добавить(ДействиеИмя, Тип("КнопкаФормы"), Элементы.ДополнительныеДействия); + ПунктМеню.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; + ПунктМеню.Заголовок = ДействиеЗаголовок; + ПунктМеню.ИмяКоманды = "A_" + ЧтениеXML.ЗначениеАтрибута("Name"); + + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + ЧтениеXML.Закрыть(); + + КонецЕсли; + + Элементы.ПрефиксыИСуффиксыДорожек.Видимость = СчитывательМагнитныхКарт; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИнтерфейсФормы(ПервыйЗапуск, ПараметрыОперации) + + Если ПараметрыОперации.Результат Тогда + + Элементы.СтатусКомпоненты.ТекущаяСтраница = Элементы.КомпонентаУстановлена; + ДрайверГотовКРаботе = Ложь; + Элементы.ДрайверОсновнаяПоставка.Видимость = Ложь; + + ЗаполнитьЗначенияСвойств(ЭтаФорма, ПараметрыОперации.ОписаниеДрайвера); + + Элементы.ДекорацияИнформацияОбОкружении.Видимость = Не ПустаяСтрока(ИнформацияОбОкружении); + + Если КоличествоПодключенных > 0 Тогда + + Элементы.СтатусКомпоненты.ТекущаяСтраница = Элементы.УстройствоПодключено; + + ИначеЕсли ИнтеграционныйКомпонент Тогда + + Если НЕ ОсновнойДрайверУстановлен Тогда + Элементы.СтатусКомпоненты.ТекущаяСтраница = Элементы.ДрайверИнтеграционныйКомпонент; + ДрайверУстановлен = НСтр("ru='Установлен интеграционный компонент'"); + ВерсияДрайвера = НСтр("ru='Не определена'"); + Элементы.ДрайверПредупреждение.Видимость = НЕ ПустаяСтрока(НаименованиеДрайвера); + Элементы.ДрайверПредупреждение.Заголовок = СтрШаблон(Элементы.ДрайверПредупреждение.Заголовок, НаименованиеДрайвера); + Элементы.ПерейтиНаСайтПроизводителя.Видимость = НЕ ПустаяСтрока(URLЗагрузкиДрайвера); + Иначе + ДрайверГотовКРаботе = Истина; + ДрайверУстановлен = НСтр("ru='Установлен'"); + Элементы.ДрайверОсновнаяПоставка.Видимость = Истина; + Элементы.ОсновнаяПоставкаУстановлена.Заголовок = СтрШаблон( + НСтр("ru = 'Установлена основная поставка драйвера. Версия %1.'"), + ПараметрыОперации.ОписаниеДрайвера.ВерсияДрайвера); + ВерсияДрайвера = ПараметрыОперации.ОписаниеДрайвера.ВерсияИнтеграционногоКомпонента; + КонецЕсли + Иначе + ДрайверУстановлен = НСтр("ru='Установлен'"); + ДрайверГотовКРаботе = Истина; + КонецЕсли; + + Если ДрайверГотовКРаботе И НЕ ПустаяСтрока(ПараметрыДрайвера) Тогда + ОбновитьНастраиваемыйИнтерфейс(ПараметрыДрайвера, ДополнительныеДействия, ПервыйЗапуск); + КонецЕсли; + + Иначе + Элементы.СтатусКомпоненты.ТекущаяСтраница = Элементы.КомпонентаНеУстановлена; + ДрайверГотовКРаботе = Ложь; + ДрайверУстановлен = НСтр("ru='Не установлен'"); + ВерсияДрайвера = НСтр("ru='Не определена'"); + Если Не ПустаяСтрока(ПараметрыОперации.ОписаниеОшибки) Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ПараметрыОперации.ОписаниеОшибки); + КонецЕсли; + КонецЕсли; + + Элементы.ТестУстройства.Видимость = ДрайверГотовКРаботе; + Элементы.АвтонастройкаУстройства.Видимость = ДрайверГотовКРаботе И АвтоНастройкаОборудования; + Элементы.ЗаписатьИЗакрыть.Видимость = ДрайверГотовКРаботе; + Элементы.ДрайверОборудования.Видимость = ДрайверГотовКРаботе; + Элементы.Функции.Видимость = ДрайверГотовКРаботе; + Элементы.ОписаниеДрайвера.Видимость = ДрайверГотовКРаботе И НЕ ПустаяСтрока(ОписаниеДрайвера); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИнформациюДрайверОборудования_Завершение(РезультатВыполнения, Параметры) Экспорт + + Если Не ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда + Возврат; + КонецЕсли; + + ПервыйЗапуск = ?(Параметры.Свойство("ПервыйЗапуск"), Параметры.ПервыйЗапуск, Истина); + ОбновитьИнтерфейсФормы(ПервыйЗапуск, РезультатВыполнения); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИнформациюДрайверОборудования(ПервыйЗапуск) + + ПараметрыКоманды = Новый Структура("ПервыйЗапуск", ПервыйЗапуск); + Оповещение = Новый ОписаниеОповещения("ОбновитьИнформациюДрайверОборудования_Завершение", ЭтотОбъект, ПараметрыКоманды); + МенеджерОборудованияКлиент.НачатьПолучениеОписанияОборудования(Оповещение, , ДанныеУстройства); + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияИнформацияОбОкруженииНажатие(Элемент) + + ПредупреждениеАсинх(ИнформацияОбОкружении, , НСтр("ru = 'Информация об окружении'")); + +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьПараметры(Команда) + + ОчиститьПараметрыНаСервере(); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Help.xml b/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Help.xml new file mode 100644 index 0000000..1d2b70b --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Help.xml @@ -0,0 +1,4 @@ + + + ru + \ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Help/ru.html b/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Help/ru.html new file mode 100644 index 0000000..6ea703d --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Help/ru.html @@ -0,0 +1,3 @@ + +

Форма настройки драйвера

+

Форма предназначена для настройки параметров работы оборудования, подключаемых при помощи драйвера разработанного по технологии "1C:Совместимо! Система программ 1С:Предприятие". Форма позволяет настраивать необходимые параметры устройства.

После изменения значений параметров следует нажать кнопку "Записать и закрыть" для того, чтобы сохранить внесённые изменения, или кнопку "Отмена" для того, чтобы отказаться от их сохранения.

\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаСписка.xml b/Catalogs/ПодключаемоеОборудование/Forms/ФормаСписка.xml new file mode 100644 index 0000000..2961039 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаСписка/Ext/Form.xml b/Catalogs/ПодключаемоеОборудование/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..6ae4c76 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,535 @@ + +
+ DontBlock + Vertical + + Abort + Cancel + CancelSearch + Close + Copy + Delete + DynamicListStandardSettings + Find + FindByCurrentValue + Help + Ignore + ListSettings + LoadDynamicListSettings + No + OK + Refresh + RestoreValues + Retry + SaveDynamicListSettings + SaveValues + Yes + + + false + + + ОбработкаОповещения + ПриОткрытии + ПриСозданииНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Управление</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + ТипПодключенияОборудования + None + Tumbler + + + + 0 + + + + ru + Локальное подключение + + + Enum.ТипыПодключенияОборудования.EnumValue.ЛокальноеПодключение + + + + + 0 + + + + ru + В общем доступе + + + Enum.ТипыПодключенияОборудования.EnumValue.ОбщийДоступ + + + + + + + ТипПодключенияОборудованияПриИзменении + + + + ТипОборудования + 18 + false + 18 + false + true + + + + 0 + + + + ru + <ВСЕ> + + + Enum.ТипыПодключаемогоОборудования.EmptyRef + + + + + + + ТипОборудованияПриИзменении + + + + РабочееМесто + 18 + 18 + true + true + + + + РабочееМестоПриИзменении + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Управление рабочими местами</v8:content> + </v8:item> + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Драйвера оборудования</v8:content> + </v8:item> + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Подключаемые команды</v8:content> + </v8:item> + + + + ru + Подключаемые команды + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Команды формы</v8:content> + </v8:item> + + + + + + + + + + + + + List + true + false + SingleRow + Cell + ExpandTopLevel + true + AsFile + СписокУстройств + СписокУстройств.DefaultPicture + + CancelSearch + Copy + CopyToClipboard + Delete + DynamicListStandardSettings + Find + FindByCurrentValue + ListSettings + LoadDynamicListSettings + OutputList + Refresh + SaveDynamicListSettings + SearchHistory + + None + true + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + FoldersAndItems + false + + true + false + Auto + true + + + false + + + + + + + + + false + + СписокУстройств + SearchStringRepresentation + + + + + + false + + СписокУстройств + ViewStatusRepresentation + + Left + + + + + false + + СписокУстройств + SearchControl + + + + + + СписокУстройствПриАктивизацииСтроки + СписокУстройствПриИзменении + + + + СписокУстройств.Ref + + false + + + + + + СписокУстройств.Description + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Наименование</v8:content> + </v8:item> + + true + + + + + СписокУстройств.ДрайверОборудования + + + + + СписокУстройств.РабочееМесто + false + + + + +
+
+ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Список устройств</v8:content> + </v8:item> + + + cfg:DynamicList + + true + + ~СписокУстройств.КомпонентаПодключенияОборудования + СписокУстройств.Ref + + + true + true + ВЫБРАТЬ + СправочникПодключаемоеОборудование.Ссылка, + СправочникПодключаемоеОборудование.ПометкаУдаления, + СправочникПодключаемоеОборудование.Наименование, + СправочникПодключаемоеОборудование.УстройствоИспользуется, + СправочникПодключаемоеОборудование.ТипПодключения, + СправочникПодключаемоеОборудование.ТипОборудования, + СправочникПодключаемоеОборудование.ДрайверОборудования, + СправочникПодключаемоеОборудование.Параметры, + СправочникПодключаемоеОборудование.РабочееМесто, + СправочникПодключаемоеОборудование.РабочееМесто.Код КАК РабочееМестоКод, + СправочникПодключаемоеОборудование.РабочееМесто.ИмяКомпьютера КАК ИмяКомпьютера, + СправочникПодключаемоеОборудование.ТребуетсяПереустановка, + СправочникПодключаемоеОборудование.ОграничениеДоступа, + СправочникПодключаемоеОборудование.Предопределенный, + СправочникПодключаемоеОборудование.ИмяПредопределенныхДанных +ИЗ + Справочник.ПодключаемоеОборудование КАК СправочникПодключаемоеОборудование + Catalog.ПодключаемоеОборудование + + + Normal + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текущее рабочее место</v8:content> + </v8:item> + + + cfg:CatalogRef.РабочиеМеста + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип подключения оборудования</v8:content> + </v8:item> + + + cfg:EnumRef.ТипыПодключенияОборудования + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип оборудования</v8:content> + </v8:item> + + + cfg:DefinedType.ТипыПодключаемогоОборудования + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рабочее место</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отображать дополнительные элементы</v8:content> + </v8:item> + + + xs:boolean + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Драйверы оборудования...</v8:content> + </v8:item> + + + + ru + Драйверы оборудования + + + ДрайверыОборудования + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Параметры подключения</v8:content> + </v8:item> + + + + ru + Настроить оборудование + + + НастроитьОборудование + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выбор рабочего места...</v8:content> + </v8:item> + + + + ru + Выбор рабочего места + + + ВыборРабочегоМеста + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Список рабочих мест...</v8:content> + </v8:item> + + + + ru + Список рабочих мест + + + СписокРабочихМест + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сообщение в техническую поддержку</v8:content> + </v8:item> + + + + ru + Сообщение в техническую поддержку + + + СообщениеВТехническуюПоддержку + + +
\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаСписка/Ext/Form/Module.bsl b/Catalogs/ПодключаемоеОборудование/Forms/ФормаСписка/Ext/Form/Module.bsl new file mode 100644 index 0000000..a706211 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,461 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ОтображатьДопЭлементы = НЕ ОбщегоНазначенияБПО.ЭтоМобильнаяПлатформа(); + + ТипПодключенияОборудования = Перечисления.ТипыПодключенияОборудования.ЛокальноеПодключение; + + ОбновитьСписокТиповОборудования(); + УстановитьУсловноеОформление(); + + Элементы.СписокУстройствСообщениеВТехническуюПоддержку.Видимость = ОбщегоНазначенияБПО.ИспользуетсяСообщенияВСлужбуТехническойПоддержки() + И ОбщегоНазначенияБПОСлужебныйВызовСервера.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); + + // Вызов БСП + // СтандартныеПодсистемы.ПодключаемыеКоманды + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКоманды = ОбщегоНазначенияБПО.ОбщийМодуль("ПодключаемыеКоманды"); + МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + // Конец Вызов БСП + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяСообщенияВСлужбуТехническойПоддержки() Тогда + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиБПОКлиент"); + Элементы.СписокУстройствСообщениеВТехническуюПоддержку.Видимость + = МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ОтправлятьСообщенияВТехПоддержку(); + КонецЕсли; + + МенеджерОборудованияКлиент.УстановитьРежимПодключенияРасширенияИнформацииОКомпьютере(Истина); + МенеджерОборудованияКлиент.ОбновитьРабочееМестоКлиента(); + Если Не ЗначениеЗаполнено(ТекущееРабочееМесто) Тогда + ТекущееРабочееМесто = МенеджерОборудованияКлиент.РабочееМестоКлиента(); + ОбновитьПользовательскийИнтерфейс(); + КонецЕсли; + ОбновитьОтображение(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокУстройств + +&НаКлиенте +Асинх Процедура СписокУстройствПриИзменении(Элемент) + + ВыбранноеОборудование = Элементы.СписокУстройств.ТекущаяСтрока; + Если ВыбранноеОборудование = Неопределено ИЛИ НЕ ТипЗнч(ВыбранноеОборудование) = Тип("СправочникСсылка.ПодключаемоеОборудование") Тогда + Возврат; + КонецЕсли; + + ВыдаватьПредупреждение = Истина; + ТекстПредупреждения = НСтр("ru = 'Оборудование %1 используется в приложении. + |Пометка на удаление может привести к некорректной работе с этим оборудованием. + |Продолжить выполнение операции?'"); + ТекстПредупреждения = СтрШаблон(ТекстПредупреждения, ВыбранноеОборудование); + + ОпределитьВозможностьПометкиНаУдалениеОборудования(ВыбранноеОборудование, ВыдаватьПредупреждение, ТекстПредупреждения); + Если ВыдаватьПредупреждение Тогда + Если Ждать ВопросАсинх(ТекстПредупреждения, РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда + СнятьПометкуУдаленияУОбъекта(ВыбранноеОборудование); + ОповеститьОбИзменении(ВыбранноеОборудование); + ОбновитьОтображениеДанных(Элементы.СписокУстройств); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокУстройствПриАктивизацииСтроки(Элемент) + + Элементы.СписокУстройствСообщениеВТехническуюПоддержку.Доступность = + ТипЗнч(Элементы.СписокУстройств.ТекущаяСтрока) = Тип("СправочникСсылка.ПодключаемоеОборудование"); + + // Вызов БСП + // СтандартныеПодсистемы.ПодключаемыеКоманды + Если ОбщегоНазначенияБПОКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + // Конец Вызов БСП + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ТипПодключенияОборудованияПриИзменении(Элемент) + + ОбновитьОтображение(); + +КонецПроцедуры + +&НаКлиенте +Процедура РабочееМестоПриИзменении(Элемент) + + ОбновитьОтображение(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТипОборудованияПриИзменении(Элемент) + + ОбновитьОтображение(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыборРабочегоМестаЗавершение(Результат, ПараметрыВыбора) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("РабочееМесто") Тогда + МенеджерОборудованияКлиент.УстановитьРабочееМесто(Результат.РабочееМесто); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыборРабочегоМеста(Команда) + + Оповещение = Новый ОписаниеОповещения("ВыборРабочегоМестаЗавершение", ЭтотОбъект); + МенеджерОборудованияКлиент.ПредложитьВыборРабочегоМеста(Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокРабочихМест(Команда) + + Режим = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс; + ОткрытьФорму("Справочник.РабочиеМеста.ФормаСписка",,,,,,, Режим); + +КонецПроцедуры + +&НаКлиенте +Процедура ДрайверыОборудования(Команда) + + ОткрытьФорму("Справочник.ДрайверыОборудования.ФормаСписка"); + +КонецПроцедуры + +&НаКлиенте +Процедура СообщениеВТехническуюПоддержку(Команда) + + Если ТипЗнч(Элементы.СписокУстройств.ТекущаяСтрока) = Тип("СправочникСсылка.ПодключаемоеОборудование") Тогда + + ИдентификаторОборудования = Элементы.СписокУстройств.ТекущаяСтрока; + Если МенеджерОборудованияВызовСервера.ДрайверПоставляетсяВКонфигурации(ИдентификаторОборудования) Тогда + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиБПОКлиент"); + ПараметрыДляСообщения = МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ПараметрыОтправкиСообщенияОбОшибке(); + ПараметрыДляСообщения.ИдентификаторОборудования = ИдентификаторОборудования; + ПараметрыДляСообщения.ТекстОшибки = НСтр("ru = 'Информация для тех.поддержки'"); + ОписаниеОповещения = Новый ОписаниеОповещения("СообщениеВТехническуюПоддержкуЗавершение", ЭтотОбъект); + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.НачатьОтправкуСообщенияОбОшибке(ОписаниеОповещения, ПараметрыДляСообщения); + Иначе + ТекстСообщения = НСтр("ru = 'Обратитесь, пожалуйста, за помощью к поставщику драйвера.'"); + ПоказатьПредупреждение(, ТекстСообщения); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СообщениеВТехническуюПоддержкуЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Не ПустаяСтрока(Результат.КодОшибки) Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(Результат.СообщениеОбОшибке); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + СписокУстройств.УсловноеОформление.Элементы.Очистить(); + + ЭлементУсловногоОформления = СписокУстройств.УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("УстройствоИспользуется"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("TextColor", ЦветаСтиля.ЦветРамки); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьПользовательскийИнтерфейс() + + ОбновитьСписокРабочихМест(); + + РабочееМестоКлиента = МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + Если ТекущееРабочееМесто = Справочники.РабочиеМеста.ПустаяСсылка() + Или ТекущееРабочееМесто <> РабочееМестоКлиента Тогда + ТекущееРабочееМесто = РабочееМестоКлиента; + КонецЕсли; + КодТекущегоРабочегоМеста = ОбщегоНазначенияБПО.ЗначениеРеквизитаОбъекта(ТекущееРабочееМесто, "Код"); + РабочееМесто = КодТекущегоРабочегоМеста; + + СписокУстройств.Отбор.Элементы.Очистить(); + + // ЭлементОтбора - 0 - РабочееМесто + ЭлементОтбора = СписокУстройств.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РабочееМестоКод"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Строка(РабочееМесто); + ЭлементОтбора.Использование = Ложь; + + Если ОтображатьДопЭлементы Тогда + // ЭлементОтбора - 1 - ТипПодключения + ЭлементОтбора = СписокУстройств.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипПодключения"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Перечисления.ТипыПодключенияОборудования.ЛокальноеПодключение; + ЭлементОтбора.Использование = Истина; + // ЭлементОтбора - 2 - ТипОборудования + ЭлементОтбора = СписокУстройств.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипОборудования"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Неопределено; + ЭлементОтбора.Использование = Ложь; + КонецЕсли; + + // Группировка - 0 - ТипОборудования + СписокУстройств.Группировка.Элементы.Очистить(); + ЭлементГруппировки = СписокУстройств.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ЭлементГруппировки.Поле = Новый ПолеКомпоновкиДанных("ТипОборудования"); + ЭлементГруппировки.Использование = Истина; + + Элементы.СписокУстройств.Шапка = ОтображатьДопЭлементы; + Элементы.Управление.Видимость = ОтображатьДопЭлементы; + Элементы.СписокУстройствДрайверОборудования.Видимость = ОтображатьДопЭлементы; + + СетевоеОборудование = МенеджерОборудования.ДоступноСетевоеОборудование(); + Элементы.ТипПодключенияОборудования.Видимость = СетевоеОборудование; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьПараметрыРабочегоМеста() + + Если ТекущееРабочееМесто = Справочники.РабочиеМеста.ПустаяСсылка() + Или ТекущееРабочееМесто <> МенеджерОборудованияВызовСервера.РабочееМестоКлиента() Тогда + ТекущееРабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + РабочееМесто = ОбщегоНазначенияБПО.ЗначениеРеквизитаОбъекта(ТекущееРабочееМесто, "Код"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьОтображение() + + ЛокальноеПодключение = ТипПодключенияОборудования = ПредопределенноеЗначение("Перечисление.ТипыПодключенияОборудования.ЛокальноеПодключение"); + Элементы.СписокУстройствРабочееМесто.Видимость = Ложь; + +#Если МобильноеПриложениеКлиент Тогда + СписокУстройств.Отбор.Элементы[0].Использование = Ложь; +#Иначе + Если ЛокальноеПодключение Тогда + // ЭлементОтбора - 0 - РабочееМесто + Если РабочееМесто = "0" Тогда // ВСЕ + СписокУстройств.Отбор.Элементы[0].Использование = Ложь; + Элементы.СписокУстройствРабочееМесто.Видимость = ОтображатьДопЭлементы; + Иначе + СписокУстройств.Отбор.Элементы[0].ПравоеЗначение = Строка(РабочееМесто); + СписокУстройств.Отбор.Элементы[0].Использование = Истина; + КонецЕсли; + Иначе + СписокУстройств.Отбор.Элементы[0].Использование = Ложь; + КонецЕсли; +#КонецЕсли + + Если ОтображатьДопЭлементы Тогда + // ЭлементОтбора - 1 - ТипПодключения + СписокУстройств.Отбор.Элементы[1].ПравоеЗначение = ТипПодключенияОборудования; + Элементы.РабочееМесто.Видимость = ЛокальноеПодключение; + Элементы.ТипОборудования.Видимость = ЛокальноеПодключение; + // ЭлементОтбора - 2 - ТипОборудования + Если ПустаяСтрока(ТипОборудования) Или Не ЛокальноеПодключение Тогда + СписокУстройств.Отбор.Элементы[2].Использование = Ложь; // ТипОборудования + Иначе + СписокУстройств.Отбор.Элементы[2].ПравоеЗначение = ТипОборудования; + СписокУстройств.Отбор.Элементы[2].Использование = Истина; // ТипОборудования + КонецЕсли; + // Группировка - 0 - ТипОборудования + СписокУстройств.Группировка.Элементы[0].Использование = Не СписокУстройств.Отбор.Элементы[2].Использование; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСписокТиповОборудования(); + + СписокОборудования = МенеджерОборудования.ДоступныеТипыОборудования(); + + Для Каждого ТипПО Из СписокОборудования Цикл + Элементы.ТипОборудования.СписокВыбора.Добавить(ТипПО); + КонецЦикла; + ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПустаяСсылка(); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСписокРабочихМест(); + + Элементы.РабочееМесто.СписокВыбора.Очистить(); + Элементы.РабочееМесто.СписокВыбора.Добавить("0", НСтр("ru = '<ВСЕ>'")); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | РабочиеМеста.Ссылка КАК Ссылка, + | РабочиеМеста.Код КАК Код, + | РабочиеМеста.Наименование КАК Наименование + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + | + |УПОРЯДОЧИТЬ ПО + | Наименование УБЫВ"; + + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Элементы.РабочееМесто.СписокВыбора.Добавить(ВыборкаДетальныеЗаписи.Код, ВыборкаДетальныеЗаписи.Наименование); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьОборудование(Команда) + + ОчиститьСообщения(); + + Если Элементы.СписокУстройств.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Элементы.СписокУстройств.ТекущиеДанные.Свойство("Ссылка") Тогда + + ТипКассы = ТипОборудования(Элементы.СписокУстройств.ТекущиеДанные.Ссылка); + Если ТипКассы = ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.ОблачнаяККТ") Тогда + МодульОблачныеКассы = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОблачныеКассыКлиент"); + МодульОблачныеКассы.НастройкаПодключения(Элементы.СписокУстройств.ТекущиеДанные.Ссылка); + Иначе + МенеджерОборудованияКлиент.ВыполнитьНастройкуОборудования(Элементы.СписокУстройств.ТекущиеДанные.Ссылка); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "ИзмененоРабочееМестоТекущегоСеанса" Тогда + ОбновитьПараметрыРабочегоМеста(); + ОбновитьОтображение(); + ИначеЕсли ИмяСобытия = "ИзмененыДоступныеТипыПодключаемогоОборудования" Тогда + ОбновитьПользовательскийИнтерфейс(); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОпределитьВозможностьПометкиНаУдалениеОборудования(ПодключаемоеОборудование, ВыдаватьПредупреждение, ТекстПредупреждения) + + ПометкаУдаленияОбъекта = ОбщегоНазначенияБПО.ЗначениеРеквизитаОбъекта(ПодключаемоеОборудование, "ПометкаУдаления"); + ПометкаУдаленияОбъекта = (ПометкаУдаленияОбъекта = Истина); // Может быть Неопределено + Если ПометкаУдаленияОбъекта Тогда + СтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.ОпределитьВозможностьОтключенияОборудования( + ПодключаемоеОборудование, ВыдаватьПредупреждение, ТекстПредупреждения, СтандартнаяОбработка); + Если СтандартнаяОбработка Тогда + ВыдаватьПредупреждение = Истина; + КонецЕсли; + Иначе + ВыдаватьПредупреждение = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура СнятьПометкуУдаленияУОбъекта(ВыбранноеОборудование); + + ВыбранноеОборудованиеОбъект = ВыбранноеОборудование.ПолучитьОбъект(); + ВыбранноеОборудованиеОбъект.ПометкаУдаления = Ложь; + ВыбранноеОборудованиеОбъект.Записать(); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ТипОборудования(СсылкаОборудования) + + Возврат ОбщегоНазначенияБПО.ЗначениеРеквизитаОбъекта(СсылкаОборудования, "ТипОборудования"); + +КонецФункции + +// СтандартныеПодсистемы.ПодключаемыеКоманды +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + + // Вызов БСП + Если ОбщегоНазначенияБПОКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.СписокУстройств); + КонецЕсли; + // Конец Вызов БСП + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + + // Вызов БСП + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКоманды = ОбщегоНазначенияБПО.ОбщийМодуль("ПодключаемыеКоманды"); + МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.СписокУстройств); + КонецЕсли; + // Конец Вызов БСП + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ОбновитьКоманды() + + // Вызов БСП + Если ОбщегоНазначенияБПОКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер"); + МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.СписокУстройств); + КонецЕсли; + // Конец Вызов БСП + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +#КонецОбласти diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаЭлемента.xml b/Catalogs/ПодключаемоеОборудование/Forms/ФормаЭлемента.xml new file mode 100644 index 0000000..15eb742 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаЭлемента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаЭлемента/Ext/Form.xml b/Catalogs/ПодключаемоеОборудование/Forms/ФормаЭлемента/Ext/Form.xml new file mode 100644 index 0000000..cde7775 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаЭлемента/Ext/Form.xml @@ -0,0 +1,717 @@ + +
+ LockOwner + Vertical + + Abort + Cancel + Copy + CustomizeForm + Delete + Help + Ignore + No + OK + Reread + RestoreValues + Retry + SaveValues + SetDeletionMark + ShowInList + Yes + + Items + + + + + + + + + + + ПослеЗаписи + ПослеЗаписиНаСервере + ПриЧтенииНаСервере + ПриОткрытии + ПередЗакрытием + ПередЗаписью + ПриСозданииНаСервере + ПередЗаписьюНаСервере + ПриЗаписиНаСервере + ОбработкаНавигационнойСсылки + ОбработкаПроверкиЗаполненияНаСервере + + + + false + true + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перейти к инструкциям по работе с торговым оборудованием</v8:content> + </v8:item> + + true + + + + ПерейтиНаСайтИнструкцииНажатие + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Закладки</v8:content> + </v8:item> + + TabsOnTop + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основное</v8:content> + </v8:item> + + Vertical + false + + + + HorizontalIfPossible + Usual + None + false + + + + Объект.УстройствоИспользуется + Right + + + + УстройствоИспользуетсяПриИзменении + + + + + + Объект.ТипПодключения + true + false + + + + + Объект.ТипОборудования + false + true + false + style:NavigationColor + + + + ТипОборудованияНачалоВыбора + ТипОборудованияОбработкаВыбора + + + + Объект.ДрайверОборудования + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Драйвер оборудования</v8:content> + </v8:item> + + EnterOnInput + true + false + false + false + + + + ДрайверОборудованияОбработкаВыбора + + + + Объект.Организация + false + + + + + Объект.Description + EnterOnInput + true + false + + + + + Объект.РабочееМесто + false + false + + + + + Объект.СерийныйНомер + false + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Фискальные данные</v8:content> + </v8:item> + + Vertical + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сервис фискального накопителя</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Операция с фискальным накопителем</v8:content> + </v8:item> + + + + + + + + + + + + List + None + true + false + false + SingleRow + Row + false + true + true + true + AsFile + ПараметрыРегистрацииККТ + + Add + CancelSearch + Change + Copy + Delete + EndEdit + ShowRowRearrangement + + + + + false + + + + + ПараметрыРегистрацииККТ + SearchStringRepresentation + + + + + + + ПараметрыРегистрацииККТ + ViewStatusRepresentation + + Left + + + + + + ПараметрыРегистрацииККТ + SearchControl + + + + + + + ПараметрыРегистрацииККТ.НаименованиеПараметра + EnterOnInput + true + 20 + false + + + + + ПараметрыРегистрацииККТ.ЗначениеПараметра + EnterOnInput + true + + + + +
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа ККТ</v8:content> + </v8:item> + + Vertical + Usual + WeakSeparation + false + + + + Объект.АвтоматическаяФискализация + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Автоматическая фискализация чеков из очереди чеков</v8:content> + </v8:item> + + Right + Left + + + + + Объект.ИспользуетсяФН36 + Right + + + + + false + false + false + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content><fontsize 10><color #000000>Пользователи, переходящие с 01.01.2021 с ЕНВД на ОСН, могут не менять систему налогообложения </></> +<fontsize 10><color #000000>в настройках кассы, если используют фискальный накопитель со сроком действия 36 мес. </></> +<link https://its.1c.ru/bmk/envd_kkt><u><font Arial><fontsize 10><color #3541EB><bgcolor #FFFFFF>Подробнее см.</></></></></></><fontsize 10><color #000000> Письмо ФНС России от 03.12.2020 № АБ-4-20/19907@.</></></v8:content> + </v8:item> + + + + + СообщениеИнфоПисьмоОбработкаНавигационнойСсылки + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Форматно-логический контроль</v8:content> + </v8:item> + + Vertical + Usual + WeakSeparation + + + + Объект.СпособФорматноЛогическогоКонтроля + + + + + Объект.ДопустимоеРасхождениеФорматноЛогическогоКонтроля + + + + + +
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ограничение доступа</v8:content> + </v8:item> + + Vertical + false + + + + Cell +
false
+ false + true + true + true + Объект.ОграничениеДоступа + + + + false + + + + + + + + ОграничениеДоступа + SearchStringRepresentation + + + + + + + ОграничениеДоступа + ViewStatusRepresentation + + Left + + + + + + ОграничениеДоступа + SearchControl + + + + + + + Объект.ОграничениеДоступа.Пользователь + EnterOnInput + true + false + false + + + + +
+
+
+
+
+
+ + + + cfg:CatalogObject.ПодключаемоеОборудование + + true + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Создание нового элемента</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Параметры устройства</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проверка параметров</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Параметры регистрации ККТ</v8:content> + </v8:item> + + + v8:ValueTable + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Наименование параметра</v8:content> + </v8:item> + + + xs:string + + 50 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Значение параметра</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип оборудования ККТ</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Право доступа сохранение данных пользователя</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Организация видимость</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отображать дополнительные элементы</v8:content> + </v8:item> + + + xs:boolean + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Параметры подключения</v8:content> + </v8:item> + + + + ru + Параметры подключения + + + ПараметрыПодключения + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Закрытие</v8:content> + </v8:item> + + + + ru + Закрытие фискального накопителя + + + ЗакрытиеФискальногоНакопителя + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменение параметров регистрации</v8:content> + </v8:item> + + + + ru + Изменение параметров регистрации фискального накопителя + + + ИзменениеПараметровРегистрацииФискальногоНакопителя + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Регистрация</v8:content> + </v8:item> + + + + ru + Регистрация фискального накопителя + + + РегистрацияФискальногоНакопителя + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузить с сайта ИТС</v8:content> + </v8:item> + + + + ru + Загрузить с сайта ИТС + + + ЗагрузитьССайтаИТС + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сообщение в техническую поддержку</v8:content> + </v8:item> + + + + ru + Сообщение в техническую поддержку + + + СообщениеВТехническуюПоддержку + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Операции с оборудованием</v8:content> + </v8:item> + + + + ru + Операции с оборудованием + + + ОперацииСОборудованием + + + + + + 0 + Auto + false + + false + + + + + \ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/Catalogs/ПодключаемоеОборудование/Forms/ФормаЭлемента/Ext/Form/Module.bsl new file mode 100644 index 0000000..64e4ca5 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -0,0 +1,712 @@ +#Область ОбработчикиСобытийФорм + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ОтображатьДопЭлементы = НЕ ОбщегоНазначенияБПО.ЭтоМобильнаяПлатформа(); + + ПравоДоступаСохранениеДанныхПользователя = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); + СозданиеНовогоЭлемента = Объект.Ссылка = Справочники.ПодключаемоеОборудование.ПустаяСсылка(); + + // Защита от изменения уже созданного экземпляра устройства. + Элементы.ДрайверОборудования.ТолькоПросмотр = НЕ СозданиеНовогоЭлемента; + Элементы.ДрайверОборудования.КнопкаОткрытия = Не СозданиеНовогоЭлемента; + Элементы.ТипОборудования.ТолькоПросмотр = НЕ СозданиеНовогоЭлемента; + + ПроверкаПараметров = СозданиеНовогоЭлемента; + + Если ОтображатьДопЭлементы Тогда + Элементы.РабочееМесто.Видимость = Объект.ТипПодключения = Перечисления.ТипыПодключенияОборудования.ЛокальноеПодключение; + Элементы.ОграничениеДоступа.Видимость = Объект.ТипПодключения = Перечисления.ТипыПодключенияОборудования.ОбщийДоступ; + Иначе + Элементы.РабочееМесто.Видимость = Ложь; + Элементы.ТипПодключения.Видимость = Ложь; + Элементы.ОграничениеДоступа.Видимость = Ложь; + Элементы.ПерейтиНаСайтИнструкции.Видимость = Ложь; + КонецЕсли; + + Если СозданиеНовогоЭлемента Тогда + Если ПустаяСтрока(Объект.РабочееМесто) + И Объект.ТипПодключения = Перечисления.ТипыПодключенияОборудования.ЛокальноеПодключение Тогда + Объект.РабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + КонецЕсли; + Объект.УстройствоИспользуется = Истина; + Иначе + Если Объект.ПометкаУдаления Или Не Объект.УстройствоИспользуется Тогда + Элементы.ПараметрыПодключения.Доступность = Ложь; + КонецЕсли; + КонецЕсли; + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Элементы.АвтоматическаяФискализация.Видимость = МодульРаспределеннаяФискализация.ДоступноРаспределеннаяФискализация(); + Иначе + Элементы.АвтоматическаяФискализация.Видимость = Ложь; + КонецЕсли; + + Если ОбщегоНазначенияБПО.ЭтоМобильнаяПлатформа() Тогда + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ТипПодключения); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ТипОборудования); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ДрайверОборудования); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.Организация); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.Наименование); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.РабочееМесто); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.СерийныйНомер); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.СпособФорматноЛогическогоКонтроля); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ДопустимоеРасхождениеФорматноЛогическогоКонтроля); + КонецЕсли; + + Если СозданиеНовогоЭлемента Тогда + Элементы.ДрайверОборудования.РежимВыбораИзСписка = Истина; + ЗаполнитьСписокДрайверов(); + КонецЕсли; + + ОбновитьИнтерфейсФормы(); + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярОборудованияПриСозданииНаСервере(Объект, ЭтотОбъект, Отказ, Параметры, СтандартнаяОбработка); + УстановитьВидимостьОрганизацииНаСервере(); + + Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройства = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройства"); + МодульОборудованиеЧекопечатающиеУстройства.ОбновитьПараметрыРегистрацииККТ(ПараметрыРегистрацииККТ, Объект.ПараметрыРегистрации); + КонецЕсли; + + Если СозданиеНовогоЭлемента Тогда + Элементы.ФормаЗагрузитьССайтаИТС.Видимость = Ложь; + Иначе + ДрайверОборудованияСсылка = Объект.ДрайверОборудования; + ДрайверОборудованияРеквизиты = ОбщегоНазначенияБПО.ЗначенияРеквизитовОбъекта(ДрайверОборудованияСсылка, "СпособПодключения, СнятСПоддержки"); + ДоступнаЗагрузкаССайтаИТС = ДрайверОборудованияРеквизиты.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы + И НЕ ДрайверОборудованияРеквизиты.СнятСПоддержки; + Элементы.ФормаЗагрузитьССайтаИТС.Видимость = ДоступнаЗагрузкаССайтаИТС + И ОбщегоНазначенияБПО.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент"); + КонецЕсли; + + Элементы.ФормаСообщениеВТехническуюПоддержку.Видимость = ОбщегоНазначенияБПО.ИспользуетсяСообщенияВСлужбуТехническойПоддержки() + И ОбщегоНазначенияБПОСлужебныйВызовСервера.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); + + Элементы.ФормаОперацииСОборудованием.Видимость = + ОбщегоНазначенияБПО.ИспользуетсяПодсистемаЛогирования() + И Не ОбщегоНазначенияБПО.ЭтоМобильнаяПлатформа(); + + // СтандартныеПодсистемы.ПодключаемыеКоманды + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКоманды = ОбщегоНазначенияБПО.ОбщийМодуль("ПодключаемыеКоманды"); + МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярОборудованияПриЧтенииНаСервере(ТекущийОбъект, ЭтотОбъект); + + // Вызов БСП + // СтандартныеПодсистемы.ПодключаемыеКоманды + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияБПО.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер"); + МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + // Конец Вызов БСП + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяСообщенияВСлужбуТехническойПоддержки() Тогда + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиБПОКлиент"); + Элементы.ФормаСообщениеВТехническуюПоддержку.Видимость + = МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ОтправлятьСообщенияВТехПоддержку(); + КонецЕсли; + + Элементы.ФормаЗагрузитьССайтаИТС.Доступность = + ЗначениеЗаполнено(Объект.ТипОборудования) И ЗначениеЗаполнено(Объект.ДрайверОборудования); + + МенеджерОборудованияКлиентПереопределяемый.ЭкземплярОборудованияПриОткрытии(Объект, ЭтаФорма, Отказ); + + // Вызов БСП + // СтандартныеПодсистемы.ПодключаемыеКоманды + Если ОбщегоНазначенияБПОКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + // Конец Вызов БСП + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + + Если Не Отказ И Модифицированность Тогда + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; + + МенеджерОборудованияКлиентПереопределяемый.ЭкземплярОборудованияПередЗаписью(Объект, ЭтотОбъект, Отказ, ПараметрыЗаписи); + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярОборудованияПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи); + ПараметрыЗаписи.Вставить("НовыйЭлементБПО", ТекущийОбъект.ЭтоНовый()); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярОборудованияПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи); + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + Если ПараметрыЗаписи.НовыйЭлементБПО И ЗначениеЗаполнено(ТекущийОбъект.ДрайверОборудования) Тогда + Если Не ОбщегоНазначенияБПО.РазделениеВключено() Тогда + ДобавитьДрайверВСправочникВнешнихКомпонентИзМакета(ТекущийОбъект.ДрайверОборудования); + КонецЕсли; + КонецЕсли; + ПараметрыЗаписи.Удалить("НовыйЭлементБПО"); + + ПараметрыУстройства = МенеджерОборудования.ПараметрыУстройства(Объект.Ссылка); + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярОборудованияПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи); + + ДрайверОборудованияСсылка = Объект.ДрайверОборудования; + ДрайверОборудованияРеквизиты = + ОбщегоНазначенияБПО.ЗначенияРеквизитовОбъекта(ДрайверОборудованияСсылка, "СпособПодключения, СнятСПоддержки"); + ДоступнаЗагрузкаССайтаИТС = + ДрайверОборудованияРеквизиты.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы + И НЕ ДрайверОборудованияРеквизиты.СнятСПоддержки; + Элементы.ФормаЗагрузитьССайтаИТС.Видимость = + ДоступнаЗагрузкаССайтаИТС + И ОбщегоНазначенияБПО.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + + СозданиеНовогоЭлемента = Ложь; + + Элементы.ПараметрыПодключения.Видимость = НЕ СозданиеНовогоЭлемента; + + ОбновитьИнтерфейсФормы(); + + МенеджерОборудованияКлиентПереопределяемый.ЭкземплярОборудованияПослеЗаписи(Объект, ЭтотОбъект, ПараметрыЗаписи); + + // Вызов БСП + // СтандартныеПодсистемы.ПодключаемыеКоманды + Если ОбщегоНазначенияБПОКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + // Конец Вызов БСП + +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярОборудованияОбработкаПроверкиЗаполненияНаСервере(Объект, ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытиемЗавершение(Результат, Параметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + Если Модифицированность Или СозданиеНовогоЭлемента Тогда + Если Записать() Тогда + ПроверкаПараметров = Ложь; + Закрыть(); + Иначе + Возврат; + КонецЕсли; + Иначе + ПроверкаПараметров = Ложь; + Закрыть(); + КонецЕсли; + МенеджерОборудованияКлиент.ВыполнитьНастройкуОборудования(Объект.Ссылка); + Иначе + ПроверкаПараметров = Ложь; + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если Не Объект.Ссылка.Пустая() Тогда + Если ПроверкаПараметров И Не ЗавершениеРаботы Тогда + Отказ = Истина; + Текст = НСтр("ru = 'Для использования устройства необходимо настроить параметры подключения. + |Перейти к настройке параметров подключения?'"); + Оповещение = Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект); + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет); + КонецЕсли; + + МенеджерОборудованияКлиентПереопределяемый.ЭкземплярОборудованияПередЗакрытием(Объект, ЭтотОбъект, Отказ, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаНавигационнойСсылки(НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + МенеджерОборудованияКлиентПереопределяемый.ЭкземплярОборудованияОбработкаНавигационнойСсылки(Объект, ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементов + +&НаКлиенте +Процедура ТипОборудованияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Если Объект.ТипОборудования <> ВыбранноеЗначение Тогда + Объект.ТипОборудования = ВыбранноеЗначение; + Модифицированность = Истина; + ЗаполнитьСписокДрайверов(); + Элементы.ФормаЗагрузитьССайтаИТС.Доступность = Ложь; + Иначе + Элементы.ФормаЗагрузитьССайтаИТС.Доступность = ЗначениеЗаполнено(Объект.ДрайверОборудования); + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + ОбновитьИнтерфейсФормы(); + + МенеджерОборудованияКлиентПереопределяемый.ЭкземплярОборудованияТипОборудованияВыбор(Объект, ЭтотОбъект, ЭтотОбъект, Элемент, ВыбранноеЗначение); + + Если Элементы.Организация.Видимость <> ОрганизацияВидимость Тогда + УстановитьВидимостьОрганизацииНаСервере(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДрайверОборудованияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Если ВыбранноеЗначение <> Объект.ДрайверОборудования Тогда + Объект.Наименование = "'" + Строка(ВыбранноеЗначение) + "'" + + ?(ПустаяСтрока(Строка(Объект.РабочееМесто)), + "", + " " + НСтр("ru='на'") + " " + Строка(Объект.РабочееМесто)); + КонецЕсли; + Элементы.ФормаЗагрузитьССайтаИТС.Доступность = ЗначениеЗаполнено(ВыбранноеЗначение); + +КонецПроцедуры + +#КонецОбласти + + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Асинх Процедура УстройствоИспользуетсяПриИзменении(Элемент) + + ВыбранноеОборудование = Объект.Ссылка; + Если ВыбранноеОборудование.Пустая() Тогда + Возврат; + КонецЕсли; + + Если Объект.УстройствоИспользуется Тогда + Возврат; + КонецЕсли; + + ВыдаватьПредупреждение = Истина; + ТекстПредупреждения = НСтр("ru = 'Оборудование %1 используется в приложении. + |Отключение может привести к некорректной работе с этим оборудованием. + |Продолжить выполнение операции?'"); + ТекстПредупреждения = СтрШаблон(ТекстПредупреждения, ВыбранноеОборудование); + + ОпределитьВозможностьОтключенияОборудования(ВыбранноеОборудование, ВыдаватьПредупреждение, ТекстПредупреждения); + + Если ВыдаватьПредупреждение Тогда + Если Ждать ВопросАсинх(ТекстПредупреждения, РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда + Объект.УстройствоИспользуется = Истина; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПараметрыПодключения(Команда) + + Если СозданиеНовогоЭлемента Или Модифицированность Тогда + Если Записать() Тогда + ПроверкаПараметров = Ложь; + Закрыть(); + Иначе + Возврат; + КонецЕсли; + Иначе + ПроверкаПараметров = Ложь; + Закрыть(); + КонецЕсли; + + Если Объект.ТипОборудования = ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.ОблачнаяККТ") Тогда + МодульОблачныеКассы = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОблачныеКассыКлиент"); + МодульОблачныеКассы.НастройкаПодключения(Объект.Ссылка); + Иначе + МенеджерОборудованияКлиент.ВыполнитьНастройкуОборудования(Объект.Ссылка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РегистрацияФискальногоНакопителя(Команда) + + ОперацияФискальногоНакопителя(1); + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменениеПараметровРегистрацииФискальногоНакопителя(Команда) + + ОперацияФискальногоНакопителя(2); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытиеФискальногоНакопителя(Команда) + + ОперацияФискальногоНакопителя(3); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиНаСайтИнструкцииНажатие(Элемент) + + АдресЗагрузки = "https://its.1c.ru/db/metod81#browse:13:-1:2115:2511"; + ОткрытьНавигационнуюСсылку(АдресЗагрузки); + +КонецПроцедуры + +&НаКлиенте +Процедура СообщениеИнфоПисьмоОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + АдресЗагрузки = "https://its.1c.ru/bmk/envd_kkt"; + ОткрытьНавигационнуюСсылку(АдресЗагрузки); + +КонецПроцедуры + +&НаКлиенте +Процедура СообщениеВТехническуюПоддержку(Команда) + + Если СозданиеНовогоЭлемента Или Модифицированность Тогда + Записать(); + КонецЕсли; + + ИдентификаторОборудования = Объект.Ссылка; + Если МенеджерОборудованияВызовСервера.ДрайверПоставляетсяВКонфигурации(ИдентификаторОборудования) Тогда + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиБПОКлиент"); + ПараметрыДляСообщения = МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ПараметрыОтправкиСообщенияОбОшибке(); + ПараметрыДляСообщения.ИдентификаторОборудования = ИдентификаторОборудования; + ПараметрыДляСообщения.ТекстОшибки = НСтр("ru = 'Информация для тех.поддержки'"); + ОписаниеОповещения = Новый ОписаниеОповещения("СообщениеВТехническуюПоддержкуЗавершение", ЭтотОбъект); + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.НачатьОтправкуСообщенияОбОшибке(ОписаниеОповещения, ПараметрыДляСообщения); + Иначе + ТекстСообщения = НСтр("ru = 'Обратитесь, пожалуйста, за помощью к поставщику драйвера.'"); + ПоказатьПредупреждение(, ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СообщениеВТехническуюПоддержкуЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Не ПустаяСтрока(Результат.КодОшибки) Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(Результат.СообщениеОбОшибке); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОперацииСОборудованием(Команда) + + МенеджерОборудованияКлиент.ОткрытьОперацииСОборудованием(Объект.Ссылка); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОбновитьИнтерфейсФормы(); + + ТипОборудованияККТ = Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + ТипОборудованияФР = Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ФискальныйРегистратор; + ТипОборудованияПЧ = Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков; + ТипОборудованияОблачнаяККТ = Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ОблачнаяККТ; + + ОрганизацияВидимость = ТипОборудованияККТ Или ТипОборудованияФР Или ТипОборудованияПЧ Или ТипОборудованияОблачнаяККТ; + + Элементы.ФискальныеДанные.Видимость = ТипОборудованияККТ И НЕ СозданиеНовогоЭлемента; + + Если Элементы.ФискальныеДанные.Видимость Или Элементы.ОграничениеДоступа.Видимость Тогда + Элементы.Закладки.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху + Иначе + Элементы.Закладки.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + КонецЕсли; + + Элементы.Организация.Видимость = ОрганизацияВидимость; + + Если Объект.ПометкаУдаления Или Не Объект.УстройствоИспользуется Тогда + Элементы.ПараметрыПодключения.Доступность = Ложь; + Иначе + Элементы.ПараметрыПодключения.Доступность = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОперацияФискальногоНакопителя_Завершение(РезультатВыполнения, Параметры) Экспорт + + ОчиститьСообщения(); + + Если РезультатВыполнения.Результат Тогда + ТекстСообщения = НСтр("ru='Операция завершена.'"); + Иначе + ТекстСообщения = РезультатВыполнения.ОписаниеОшибки; + КонецЕсли; + + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура ОперацияФискальногоНакопителя_Продолжить(РезультатВыполнения, Параметры) Экспорт + + Если РезультатВыполнения <> Неопределено + И ТипЗнч(РезультатВыполнения) = Тип("Структура") + И ОбщегоНазначенияБПОКлиент.ИспользуетсяЧекопечатающиеУстройства() Тогда + + ФискальноеУстройство = Объект.Ссылка; + ОповещениеПриЗавершении = Новый ОписаниеОповещения("ОперацияФискальногоНакопителя_Завершение", ЭтотОбъект); + МодульОборудованиеЧекопечатающиеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеУстройстваКлиент.НачатьОперациюФНДляФискальногоУстройства(ОповещениеПриЗавершении, + УникальныйИдентификатор, ФискальноеУстройство, РезультатВыполнения); + + КонецЕсли; + + ЭтотОбъект.Прочитать(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОперацияФискальногоНакопителя(ТипОперации) + +#Если ВебКлиент Тогда + ПоказатьПредупреждение(, НСтр("ru='Данный функционал доступен только в режиме тонкого и толстого клиента.'")); + Возврат; +#КонецЕсли + + ФискальноеУстройство = Объект.Ссылка; + Если Не ЗначениеЗаполнено(ФискальноеУстройство) Тогда + Возврат; + КонецЕсли; + + МодульОборудованиеЧекопечатающиеУстройстваКлиент = + ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиент"); + ПараметрыОткрытия = + МодульОборудованиеЧекопечатающиеУстройстваКлиент.ПараметрыФормаНастройкиРегистрацииККТ(); + ПараметрыОткрытия.ФискальноеУстройство = ФискальноеУстройство; + ПараметрыОткрытия.Организация = Объект.Организация; + ПараметрыОткрытия.ТипОперации = ТипОперации; + + ОповещениеПриЗавершении = Новый ОписаниеОповещения("ОперацияФискальногоНакопителя_Продолжить", ЭтотОбъект); + МодульОборудованиеЧекопечатающиеУстройстваКлиент + .ОткрытьФормуНастройкиРегистрацииККТ(ОповещениеПриЗавершении, ПараметрыОткрытия); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокДрайверов() + + Если ОбщегоНазначенияБПО.ИспользуютсяОблачныеККТ() Тогда + ТипОборудованияОблачнаяККТ = Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ОблачнаяККТ; + + Элементы.ДрайверОборудования.СписокВыбора.Очистить(); + Элементы.ДрайверОборудования.Видимость = НЕ ТипОборудованияОблачнаяККТ; + + // ++ Локализация + Если ТипОборудованияОблачнаяККТ Тогда + Если ЗначениеЗаполнено(Справочники.ДрайверыОборудования.ПредопределенныйЭлемент("Справочник.ДрайверыОборудования.ОбработчикОблачныхККТ")) Тогда + Объект.ДрайверОборудования = ПредопределенноеЗначение("Справочник.ДрайверыОборудования.ОбработчикОблачныхККТ"); + Возврат; + КонецЕсли; + КонецЕсли; + // -- Локализация + КонецЕсли; + + ДрайвераОборудования = МенеджерОборудования.ДрайверыПоТипуОборудования(Объект.ТипОборудования); + Для Каждого ДрайверОборудования Из ДрайвераОборудования Цикл + Элементы.ДрайверОборудования.СписокВыбора.Добавить(ДрайверОборудования.Значение, ДрайверОборудования.Представление); + КонецЦикла; + + Объект.ДрайверОборудования = ПредопределенноеЗначение("Справочник.ДрайверыОборудования.ПустаяСсылка"); + Объект.Наименование = ""; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьНавигационнуюСсылку(НавигационнаяСсылка, Знач Оповещение = Неопределено) + + #Если ТолстыйКлиентОбычноеПриложение Тогда + // Особенность платформы: ПерейтиПоНавигационнойСсылке не доступен в толстом клиенте обычного приложения. + ОповещениеПриЗавершении = Новый ОписаниеОповещения(); + НачатьЗапускПриложения(ОповещениеПриЗавершении, НавигационнаяСсылка); // АПК:534 передаются фиксированные строки + #Иначе + ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка); // АПК:534 передаются фиксированные строки + #КонецЕсли + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьОрганизацииНаСервере() + + Элементы.Организация.Видимость = ОрганизацияВидимость; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьССайтаИТС(Команда) + + // Вставить содержимое обработчика. + Если СозданиеНовогоЭлемента Или Модифицированность Тогда + Записать(); + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ЗагрузитьССайтаИТСЗавершение", ЭтотОбъект); + МенеджерОборудованияКлиент.УстановитьДрайверОборудования(Оповещение, Объект.ДрайверОборудования); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьССайтаИТСЗавершение(РезультатВыполнения, ДополнительныеПараметры) Экспорт + + Если РезультатВыполнения.Результат Тогда + Заголовок = НСтр("ru = 'Компонента загружена.'"); + Текст = СтрШаблон(НСтр("ru = 'Компонента %1 успешно загружена и установлена.'"), + РезультатВыполнения.ИдентификаторУстройства); + Иначе + Заголовок = НСтр("ru = 'Ошибка загрузки компоненты.'"); + Текст = СтрШаблон(НСтр("ru = 'Компонента %1 не загружена, по причине: + |%2.'"), + РезультатВыполнения.ИдентификаторУстройства, + РезультатВыполнения.ОписаниеОшибки); + КонецЕсли; + ПоказатьПредупреждение(,Текст,,Заголовок); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОпределитьВозможностьОтключенияОборудования(ПодключаемоеОборудование, ВыдаватьПредупреждение, ТекстПредупреждения) + + СтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.ОпределитьВозможностьОтключенияОборудования( + ПодключаемоеОборудование, ВыдаватьПредупреждение, ТекстПредупреждения, СтандартнаяОбработка); + Если СтандартнаяОбработка Тогда + ВыдаватьПредупреждение = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ДобавитьДрайверВСправочникВнешнихКомпонентИзМакета(СсылкаНаДрайвер) + + Если Не ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеКомпоненты") Тогда + Возврат + КонецЕсли; + + +КонецПроцедуры + +&НаКлиенте +Процедура ТипОборудованияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ДанныеВыбора = Новый СписокЗначений(); + ЗаполнитьДоступныеТипыОборудования(ДанныеВыбора, Объект.ТипПодключения); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗаполнитьДоступныеТипыОборудования(ДанныеВыбора, ТипПодключения) + + Если ТипПодключения = Перечисления.ТипыПодключенияОборудования.ОбщийДоступ Тогда + ДоступныеТипыОборудования = МенеджерОборудования.ДоступныеТипыОбщедоступногоОборудования(); + Иначе + ДоступныеТипыОборудования = МенеджерОборудования.ДоступныеТипыОборудования(); + КонецЕсли; + Для Каждого Тип Из ДоступныеТипыОборудования Цикл + ДанныеВыбора.Добавить(Тип); + КонецЦикла; + +КонецПроцедуры + +// СтандартныеПодсистемы.ПодключаемыеКоманды +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + + // Вызов БСП + Если ОбщегоНазначенияБПОКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект); + КонецЕсли; + // Конец Вызов БСП + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + + // Вызов БСП + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКоманды = ОбщегоНазначенияБПО.ОбщийМодуль("ПодключаемыеКоманды"); + МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект); + КонецЕсли; + // Конец Вызов БСП + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ОбновитьКоманды() + + // Вызов БСП + Если ОбщегоНазначенияБПОКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер"); + МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); + КонецЕсли; + // Конец Вызов БСП + +КонецПроцедуры +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +#КонецОбласти diff --git a/Catalogs/ПодключаемоеОборудование/Templates/МакетДляОпределенияКоэффициентовЕдиницИзмерения.xml b/Catalogs/ПодключаемоеОборудование/Templates/МакетДляОпределенияКоэффициентовЕдиницИзмерения.xml new file mode 100644 index 0000000..c84eb99 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Templates/МакетДляОпределенияКоэффициентовЕдиницИзмерения.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование/Templates/МакетДляОпределенияКоэффициентовЕдиницИзмерения/Ext/Template.xml b/Catalogs/ПодключаемоеОборудование/Templates/МакетДляОпределенияКоэффициентовЕдиницИзмерения/Ext/Template.xml new file mode 100644 index 0000000..b3e6202 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Templates/МакетДляОпределенияКоэффициентовЕдиницИзмерения/Ext/Template.xml @@ -0,0 +1,68 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 6 + + 0 + + 1 + + + + + 0 + + 2 + true + + + + Picture + 2 + 0 + 1 + 2 + 7 + 29 + 1 + 2 + 2 + 113 + false + Stretch + 1 + 1 + + true + 1 + 10 + 10 + + Квадрат100Пикселей + 2 + + + 72 + + + 44 + + + 0 + iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAAXNSR0IArs4c6QAA +AARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACbSURBVHhe7dAB +DQAAAMKg909tDjeIQGHAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY +MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA +gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgIGf +gQF1lAABwOm9ewAAAABJRU5ErkJggg== + + \ No newline at end of file diff --git a/Catalogs/Пользователи.xml b/Catalogs/Пользователи.xml new file mode 100644 index 0000000..30f8590 --- /dev/null +++ b/Catalogs/Пользователи.xml @@ -0,0 +1,182 @@ + + + + + + c2e1a601-4fde-496c-9067-90798ec8f219 + c358bf83-a54c-45bb-858b-27ed93ba2940 + + + 87329ae8-1482-4dcc-b681-5cbedf417067 + e41ed24d-375f-4267-8032-7ffeda660491 + + + b550d11e-b385-4128-9174-74e59781fc27 + c3aee9e5-c64d-4d76-8d3b-fac6fe464ea8 + + + 238041e5-289f-4e1a-a952-bc3cc0adaeeb + 2ecca89b-afa5-4aee-80c8-34b2d53fce3c + + + 0d380581-cabf-4fa9-8fd0-5976cd97b371 + dae99169-84c4-447d-a321-9679fc007217 + + + + Пользователи + + + ru + Пользователи + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 50 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.Пользователи.StandardAttribute.Description + Catalog.Пользователи.StandardAttribute.Code + + Begin + DontUse + Directly + + + Catalog.Пользователи.Form.ФормаСписка + Catalog.Пользователи.Form.ФормаВыбора + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + + ИдентификаторПользователяИБ + + + ru + Идентификатор пользователя ИБ + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + Пароль + + + ru + Пароль + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + +
ФормаСписка
+
ФормаВыбора
+
+
+
\ No newline at end of file diff --git a/Catalogs/Пользователи/Forms/ФормаВыбора.xml b/Catalogs/Пользователи/Forms/ФормаВыбора.xml new file mode 100644 index 0000000..314b534 --- /dev/null +++ b/Catalogs/Пользователи/Forms/ФормаВыбора.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаВыбора + + + ru + Форма выбора + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/Пользователи/Forms/ФормаВыбора/Ext/Form.xml b/Catalogs/Пользователи/Forms/ФормаВыбора/Ext/Form.xml new file mode 100644 index 0000000..555ebbd --- /dev/null +++ b/Catalogs/Пользователи/Forms/ФормаВыбора/Ext/Form.xml @@ -0,0 +1,128 @@ + +
+ LockOwner + Vertical + + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + WeakSeparation + false + + + + List + None + true + true + Cell + ExpandTopLevel + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + false + + + + false + + Список + SearchStringRepresentation + + + + + + false + + Список + ViewStatusRepresentation + + + + + + false + + Список + SearchControl + + + + + + + Список.Description + true + None + + + + НаименованиеОбработкаНавигационнойСсылки + + + + Список.Code + false + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Catalog.Пользователи + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + +
\ No newline at end of file diff --git a/Catalogs/Пользователи/Forms/ФормаВыбора/Ext/Form/Module.bsl b/Catalogs/Пользователи/Forms/ФормаВыбора/Ext/Form/Module.bsl new file mode 100644 index 0000000..eefa1ba --- /dev/null +++ b/Catalogs/Пользователи/Forms/ФормаВыбора/Ext/Form/Module.bsl @@ -0,0 +1,5 @@ + +&НаКлиенте +Процедура НаименованиеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + // Вставить содержимое обработчика. +КонецПроцедуры diff --git a/Catalogs/Пользователи/Forms/ФормаСписка.xml b/Catalogs/Пользователи/Forms/ФормаСписка.xml new file mode 100644 index 0000000..976b68f --- /dev/null +++ b/Catalogs/Пользователи/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/Пользователи/Forms/ФормаСписка/Ext/Form.xml b/Catalogs/Пользователи/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..1a48e0e --- /dev/null +++ b/Catalogs/Пользователи/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,123 @@ + +
+ DontBlock + Vertical + + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + WeakSeparation + false + + + + List + None + true + Cell + ExpandTopLevel + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + false + + + + false + + Список + SearchStringRepresentation + + + + + + false + + Список + ViewStatusRepresentation + + + + + + false + + Список + SearchControl + + + + + + + Список.Code + false + + + + + Список.Description + true + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Catalog.Пользователи + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + +
\ No newline at end of file diff --git a/Catalogs/ПринтерыДляПечати.xml b/Catalogs/ПринтерыДляПечати.xml new file mode 100644 index 0000000..19787c9 --- /dev/null +++ b/Catalogs/ПринтерыДляПечати.xml @@ -0,0 +1,271 @@ + + + + + + cefbd54c-70b7-4b04-8079-3781d9324c2d + b77a03df-74f7-4509-9c3e-88f3a2742df1 + + + a1f36354-b59e-4cff-a5ae-00ae763ca026 + afffef60-25ef-46b5-9587-8ad031a86948 + + + 61f13626-d7ec-4b49-9bde-a3c59852cd05 + d93cd0d3-0f7d-43c5-abe1-6fe4de1fe541 + + + 972f7822-7d31-425a-8652-a4ff78501d02 + d84586fa-681b-4815-a977-0bc47baed81a + + + 4e69ab68-08b5-49fe-9161-d25ad06b7636 + 29a00477-14db-49f7-836b-d5b42dcb645b + + + + ПринтерыДляПечати + + + ru + Принтеры для печати + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.ПринтерыДляПечати.StandardAttribute.Description + Catalog.ПринтерыДляПечати.StandardAttribute.Code + + Begin + DontUse + Directly + Catalog.ПринтерыДляПечати.Form.ФормаЭлемента + + Catalog.ПринтерыДляПечати.Form.ФормаСписка + Catalog.ПринтерыДляПечати.Form.ФормаВыбора + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + + ИмяПринтера + + + ru + Имя принтера + + + + + xs:string + + 230 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ПортПринтера + + + ru + Порт принтера + + + + + xs:string + + 230 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + ИдентификаторРабМеста + + + ru + Идентификатор раб места + + + + + xs:string + + 200 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + НаименованиеМеста + + + ru + Наименование места + + + + + xs:string + + 200 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + +
ФормаЭлемента
+
ФормаСписка
+
ФормаВыбора
+
+
+
\ No newline at end of file diff --git a/Catalogs/ПринтерыДляПечати/Forms/ФормаВыбора.xml b/Catalogs/ПринтерыДляПечати/Forms/ФормаВыбора.xml new file mode 100644 index 0000000..b095058 --- /dev/null +++ b/Catalogs/ПринтерыДляПечати/Forms/ФормаВыбора.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаВыбора + + + ru + Форма выбора + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ПринтерыДляПечати/Forms/ФормаВыбора/Ext/Form.xml b/Catalogs/ПринтерыДляПечати/Forms/ФормаВыбора/Ext/Form.xml new file mode 100644 index 0000000..58cf129 --- /dev/null +++ b/Catalogs/ПринтерыДляПечати/Forms/ФормаВыбора/Ext/Form.xml @@ -0,0 +1,135 @@ + +
+ LockOwner + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + WeakSeparation + false + + + + List + None + true + true + ExpandTopLevel + true + Список + Список.DefaultPicture + false + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + + + + Список.ИдентификаторРабМеста + true + + + + + Список.Description + true + + + + + + + Список.ИмяПринтера + true + + + + + Список.Code + false + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Catalog.ПринтерыДляПечати + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git a/Catalogs/ПринтерыДляПечати/Forms/ФормаСписка.xml b/Catalogs/ПринтерыДляПечати/Forms/ФормаСписка.xml new file mode 100644 index 0000000..61b7bce --- /dev/null +++ b/Catalogs/ПринтерыДляПечати/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ПринтерыДляПечати/Forms/ФормаСписка/Ext/Form.xml b/Catalogs/ПринтерыДляПечати/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..1bc17e8 --- /dev/null +++ b/Catalogs/ПринтерыДляПечати/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,151 @@ + +
+ + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + WeakSeparation + false + + + + + List + None + true + ExpandTopLevel + true + Список + Список.DefaultPicture + false + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + + + + Список.ИдентификаторРабМеста + true + + + + + Список.Description + true + + + + + + + Список.ИмяПринтера + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Catalog.ПринтерыДляПечати + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Удалить все принтеры</v8:content> + </v8:item> + + + + ru + Удалить все принтеры + + + УдалитьВсеПринтеры + + +
\ No newline at end of file diff --git a/Catalogs/ПринтерыДляПечати/Forms/ФормаСписка/Ext/Form/Module.bsl b/Catalogs/ПринтерыДляПечати/Forms/ФормаСписка/Ext/Form/Module.bsl new file mode 100644 index 0000000..9678c2c --- /dev/null +++ b/Catalogs/ПринтерыДляПечати/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,24 @@ + +&НаСервере +Процедура УдалитьВсеПринтерыНаСервере() + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПринтерыДляПечати.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПринтерыДляПечати КАК ПринтерыДляПечати"; + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Спр = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); + Спр.Удалить(); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьВсеПринтеры(Команда) + УдалитьВсеПринтерыНаСервере(); +КонецПроцедуры diff --git a/Catalogs/ПринтерыДляПечати/Forms/ФормаЭлемента.xml b/Catalogs/ПринтерыДляПечати/Forms/ФормаЭлемента.xml new file mode 100644 index 0000000..d64b1d2 --- /dev/null +++ b/Catalogs/ПринтерыДляПечати/Forms/ФормаЭлемента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/ПринтерыДляПечати/Forms/ФормаЭлемента/Ext/Form.xml b/Catalogs/ПринтерыДляПечати/Forms/ФормаЭлемента/Ext/Form.xml new file mode 100644 index 0000000..f7c5277 --- /dev/null +++ b/Catalogs/ПринтерыДляПечати/Forms/ФормаЭлемента/Ext/Form.xml @@ -0,0 +1,50 @@ + +
+ LockOwner + Items + + + + Объект.Code + EnterOnInput + true + + + + + Объект.НаименованиеМеста + true + + + + + Объект.ИдентификаторРабМеста + true + + + + + Объект.ИмяПринтера + EnterOnInput + true + + + + + Объект.ПортПринтера + EnterOnInput + true + + + + + + + + cfg:CatalogObject.ПринтерыДляПечати + + true + true + + + \ No newline at end of file diff --git a/Catalogs/РабочиеМеста.xml b/Catalogs/РабочиеМеста.xml new file mode 100644 index 0000000..94d6e14 --- /dev/null +++ b/Catalogs/РабочиеМеста.xml @@ -0,0 +1,689 @@ + + + + + + 6a449d7a-258e-4deb-898c-1e55c6a0364c + 43851c6b-8fe1-4c67-9339-d832772aaf05 + + + d43e4db6-9f89-42c1-bbe0-f19de058d831 + dc705d3d-df87-45c9-8668-472b23adb48b + + + 5441e50c-6bdc-4e46-93d6-7dae8f0dda76 + d61f49d3-286c-40b0-89d6-ac524f0c340e + + + 16d8ec28-1057-4d84-9764-b36ceab1e112 + 99c06ebf-7644-4a79-8f7f-a01c5ff58ac4 + + + d5ccad38-4e3f-49bb-9be4-9cef0418ab13 + 3eaf7fb2-8756-4219-a623-0a95938a3cae + + + + РабочиеМеста + + + ru + Рабочие места + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 50 + 100 + String + Variable + WholeCatalog + false + false + AsDescription + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + true + Auto + Deny + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + true + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + TransformValues + + + + ru + Наименование рабочего места. + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + TransformValues + + + + ru + Имя компьютера (рабочего места). + + + false + + + Auto + Auto + + false + Use + false + + + + ru + Имя компьютера + + + + Use + + + + + + + + Auto + InDialog + false + FromForm + + Catalog.РабочиеМеста.StandardAttribute.Description + Catalog.РабочиеМеста.StandardAttribute.Code + + Begin + DontUse + Directly + Catalog.РабочиеМеста.Form.ФормаЭлемента + + Catalog.РабочиеМеста.Form.ФормаСписка + Catalog.РабочиеМеста.Form.ФормаВыбора + + + + + + + true + + + Managed + Use + + + ru + Рабочее место + + + + + + + DontUse + Auto + DontUse + false + false + + + + + ИмяКомпьютера + + + ru + Имя компьютера + + + + + xs:string + + 50 + Variable + + + false + + + + + ru + Имя компьютера, для которого настраивается рабочее место. + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + Index + Use + Use + + + + + ЛокальноеУстройство + + + ru + Локальное устройство + + + + + xs:boolean + + false + + + + false + + false + false + + + true + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + MACАдрес + + + ru + MACАдрес + + + + + xs:string + + 30 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + Index + Use + Use + + + + + + ccd94c73-5dab-4e7e-ad69-c17c37a505f1 + e5ea7083-26fd-4150-935b-96e31e77fc61 + + + d4ec7f72-acb2-44cf-a196-1700ac31db54 + e623e17d-4f24-411e-8ae9-00b78f45f5a9 + + + + ИдентификаторыКлиентов + + + ru + Идентификаторы клиентов + + + + + DontCheck + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + ForItem + 5 + + + + + ИдентификаторКлиента + + + ru + Идентификатор клиента + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + + + + + 501ee1d0-af50-4cb4-9d79-e23e1e628d1f + 46228ce5-9a1b-42b2-b3b7-2e992fd9e62e + + + 7782c1b9-892d-4347-87a4-7b041de43c30 + 1649937f-b66a-49e3-9f2b-37c819880f43 + + + + MACАдреса + + + ru + MACАдреса + + + + + DontCheck + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + ForItem + 5 + + + + + Адрес + + + ru + Адрес + + + + + xs:string + + 30 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + +
ФормаЭлемента
+
ФормаСписка
+
ФормаВыбора
+
+
+
\ No newline at end of file diff --git a/Catalogs/РабочиеМеста/Ext/Help.xml b/Catalogs/РабочиеМеста/Ext/Help.xml new file mode 100644 index 0000000..1d2b70b --- /dev/null +++ b/Catalogs/РабочиеМеста/Ext/Help.xml @@ -0,0 +1,4 @@ + + + ru + \ No newline at end of file diff --git a/Catalogs/РабочиеМеста/Ext/Help/ru.html b/Catalogs/РабочиеМеста/Ext/Help/ru.html new file mode 100644 index 0000000..907f0ab --- /dev/null +++ b/Catalogs/РабочиеМеста/Ext/Help/ru.html @@ -0,0 +1,3 @@ + +

Рабочие места

+

Список существующих рабочих мест. Рабочее место создается для данного компьютера и данного пользователя операционной системы. К рабочему месту осуществляется привязка подключаемого оборудования.

\ No newline at end of file diff --git a/Catalogs/РабочиеМеста/Ext/ManagerModule.bsl b/Catalogs/РабочиеМеста/Ext/ManagerModule.bsl new file mode 100644 index 0000000..dd4b112 --- /dev/null +++ b/Catalogs/РабочиеМеста/Ext/ManagerModule.bsl @@ -0,0 +1,129 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// СтандартныеПодсистемы.УправлениеДоступом +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +// +// Параметры: +// Ограничение - Структура: +// * Текст - Строка - ограничение доступа для пользователей. +// Если пустая строка, значит, доступ разрешен. +// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей. +// Если пустая строка, значит, доступ запрещен. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически. +// - Булево - если Ложь, то всегда записывать ключи доступа, +// если Истина, тогда не записывать ключи доступа, +// а использовать ключи доступа владельца (требуется, +// чтобы ограничение было строго по объекту-владельцу). +// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также +// как у параметра ПоВладельцуБезЗаписиКлючейДоступа. +// +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Менеджер = "Справочник.РабочиеМеста"; + МенеджерОборудованияВызовСервераПереопределяемый.ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ИнтерфейсРабочегоПроцесса + +// Возвращает массив реквизитов недоступных для источника рабочего процесса. +// +// Параметры: +// * ТипДействия - Строка, ПеречислениеСсылка, Неопределено- Тип действия для вычисления недоступных реквизитов. +// +// Возвращаемое значение: +// Массив из Строка - +// +Функция РеквизитыНедоступныеДляИсточникаРабочегоПроцесса(ТипДействия = Неопределено) Экспорт + + НедоступныеРеквизиты = Новый Массив; + + Возврат НедоступныеРеквизиты; + +КонецФункции + +#КонецОбласти + +#Область ШаблоныСообщений + +// Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений. +// +// Параметры: +// Реквизиты - ДеревоЗначений - список реквизитов шаблона: +// * Имя - Строка - Уникальное имя общего реквизита. +// * Представление - Строка - Представление общего реквизита. +// * Тип - Тип - Тип реквизита. По умолчанию строка. +// * Формат - Строка - Формат вывода значения для чисел, дат, строк и булевых значений. +// Вложения - ТаблицаЗначений - печатные формы и вложения: +// * Имя - Строка - Уникальное имя вложения. +// * Представление - Строка - Представление варианта. +// * ТипФайла - Строка - Тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl" +// и др. +// ДополнительныеПараметры - Структура - дополнительные сведения о шаблоне сообщений. +// +Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт + +КонецПроцедуры + +// Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений. +// +// Параметры: +// Сообщение - Структура - структура с ключами: +// * ЗначенияРеквизитов - Соответствие из КлючИЗначение - список используемых в шаблоне реквизитов. +// Ключ - Строка - имя реквизита в шаблоне; +// Значение - Строка - значение заполнения в шаблоне. +// * ЗначенияОбщихРеквизитов - Соответствие из КлючИЗначение - список используемых в шаблоне общих реквизитов. +// Ключ - Строка - имя реквизита в шаблоне; +// Значение - Строка - значение заполнения в шаблоне. +// * Вложения - Соответствие из КлючИЗначение - значения реквизитов +// Ключ - Строка - имя вложения в шаблоне; +// Значение - ДвоичныеДанные, Строка - двоичные данные или адрес во временном хранилище вложения. +// ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных. +// ДополнительныеПараметры - Структура - Дополнительная информация о шаблоне сообщения. +// +Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт + +КонецПроцедуры + +// Заполняет список получателей SMS при отправке сообщения сформированного по шаблону. +// +// Параметры: +// ПолучателиSMS - ТаблицаЗначений - список получается SMS: +// * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS. +// * Представление - Строка - представление получателя сообщения SMS. +// * Контакт - Произвольный - контакт, которому принадлежит номер телефона. +// ПредметСообщения - ЛюбаяСсылка, Структура - ссылка на объект являющийся источником данных, либо структура: +// * Предмет - ЛюбаяСсылка - ссылка на объект являющийся источником данных +// * ПроизвольныеПараметры - Соответствие из КлючИЗначение - заполненный список произвольных параметров. +// +Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт + +КонецПроцедуры + +// Заполняет список получателей письма при отправки сообщения сформированного по шаблону. +// +// Параметры: +// ПолучателиПисьма - ТаблицаЗначений - список получается письма: +// * Адрес - Строка - адрес электронной почты получателя. +// * Представление - Строка - представление получается письма. +// * Контакт - Произвольный - контакт, которому принадлежит адрес электронной почты. +// ПредметСообщения - ЛюбаяСсылка, Структура - ссылка на объект являющийся источником данных, либо структура: +// * Предмет - ЛюбаяСсылка - ссылка на объект являющийся источником данных +// * ПроизвольныеПараметры - Соответствие из КлючИЗначение - заполненный список произвольных параметров. +// +Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли diff --git a/Catalogs/РабочиеМеста/Ext/ObjectModule.bsl b/Catalogs/РабочиеМеста/Ext/ObjectModule.bsl new file mode 100644 index 0000000..8a5dd7e --- /dev/null +++ b/Catalogs/РабочиеМеста/Ext/ObjectModule.bsl @@ -0,0 +1,23 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/Catalogs/РабочиеМеста/Forms/ФормаВыбора.xml b/Catalogs/РабочиеМеста/Forms/ФормаВыбора.xml new file mode 100644 index 0000000..2731377 --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаВыбора.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаВыбора + + + ru + Форма выбора + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/РабочиеМеста/Forms/ФормаВыбора/Ext/Form.xml b/Catalogs/РабочиеМеста/Forms/ФормаВыбора/Ext/Form.xml new file mode 100644 index 0000000..79273bb --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаВыбора/Ext/Form.xml @@ -0,0 +1,185 @@ + +
+ LockOwner + Vertical + + Abort + Cancel + Close + Copy + CustomizeForm + Delete + DynamicListStandardSettings + Help + Ignore + ListSettings + LoadDynamicListSettings + No + OK + OutputList + RestoreValues + Retry + SaveDynamicListSettings + SaveValues + Yes + + + false + + + ПриОткрытии + + + + List + None + true + true + Row + ExpandTopLevel + true + AsFile + Список + Список.DefaultPicture + + Copy + CopyToClipboard + + None + None + None + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + СписокПередНачаломДобавления + + + + Список.Description + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Наименование</v8:content> + </v8:item> + + + + + + Список.Текущее + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текущее</v8:content> + </v8:item> + + + + + +
+
+ + + + cfg:DynamicList + + true + + true + true + ВЫБРАТЬ + СправочникРабочиеМеста.Ссылка, + СправочникРабочиеМеста.ВерсияДанных, + СправочникРабочиеМеста.ПометкаУдаления, + СправочникРабочиеМеста.Предопределенный, + СправочникРабочиеМеста.Код, + СправочникРабочиеМеста.Наименование, + СправочникРабочиеМеста.ИмяКомпьютера, + ВЫБОР + КОГДА СправочникРабочиеМеста.Ссылка = &ТекущееРабочееМесто ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ + КОНЕЦ КАК Текущее +ИЗ + Справочник.РабочиеМеста КАК СправочникРабочиеМеста + Catalog.РабочиеМеста + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + + Текущее + Desc + + + Наименование + Asc + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текущее рабочее место</v8:content> + </v8:item> + + + cfg:CatalogRef.РабочиеМеста + + + +
\ No newline at end of file diff --git a/Catalogs/РабочиеМеста/Forms/ФормаВыбора/Ext/Form/Module.bsl b/Catalogs/РабочиеМеста/Forms/ФормаВыбора/Ext/Form/Module.bsl new file mode 100644 index 0000000..903aad9 --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаВыбора/Ext/Form/Module.bsl @@ -0,0 +1,72 @@ + +#Область ОбработчикиСобытийФормы + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + МенеджерОборудованияКлиент.ОбновитьРабочееМестоКлиента(); + + ТекущееРабочееМесто = МенеджерОборудованияКлиент.РабочееМестоКлиента(); + Список.Параметры.УстановитьЗначениеПараметра("ТекущееРабочееМесто", ТекущееРабочееМесто); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + ИдентификаторКлиента = МенеджерОборудованияКлиент.ИдентификаторКлиентаДляРабочегоМеста(); + РабочееМесто = ПолучитьРабочееМестоПоИдентификаторуКлиента(ИдентификаторКлиента); + + Если НЕ РабочееМесто = Неопределено Тогда + + Отказ = Истина; + + Текст = НСтр("ru='Создание нового рабочего места не требуется. + |Для данного идентификатора клиента оно уже создано. + |Открыть существующее рабочее место?'"); + Оповещение = Новый ОписаниеОповещения("СписокПередНачаломДобавленияЗавершение", ЭтотОбъект, РабочееМесто); + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура СписокПередНачаломДобавленияЗавершение(Результат, Параметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да И Не ПустаяСтрока(Параметры) Тогда + ПоказатьЗначение(, Параметры); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПолучитьРабочееМестоПоИдентификаторуКлиента(Идентификатор) + + Результат = Неопределено; + + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | РабочиеМеста.Ссылка + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.Код = &Идентификатор"); + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Результат = ВыборкаДетальныеЗаписи.Ссылка; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/Catalogs/РабочиеМеста/Forms/ФормаСписка.xml b/Catalogs/РабочиеМеста/Forms/ФормаСписка.xml new file mode 100644 index 0000000..c2ecabe --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/РабочиеМеста/Forms/ФормаСписка/Ext/Form.xml b/Catalogs/РабочиеМеста/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..fa97b92 --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,257 @@ + +
+ DontBlock + Vertical + useIfNecessary + + Abort + Cancel + Close + Copy + CustomizeForm + Delete + DynamicListStandardSettings + Help + Ignore + ListSettings + LoadDynamicListSettings + No + OK + OutputList + RestoreValues + Retry + SaveDynamicListSettings + SaveValues + Yes + + + false + + + ОбработкаОповещения + ПриОткрытии + + + + List + None + false + true + Cell + ExpandTopLevel + true + AsFile + Список + Список.DefaultPicture + + Copy + CopyToClipboard + + None + None + None + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + СписокПередНачаломДобавления + + + + Список.Наименование + true + + + + + Список.ИмяКомпьютера + + + + +
+
+ + + + cfg:DynamicList + + true + + true + true + ВЫБРАТЬ + СправочникРабочиеМеста.Ссылка, + СправочникРабочиеМеста.ВерсияДанных, + СправочникРабочиеМеста.ПометкаУдаления, + СправочникРабочиеМеста.Предопределенный, + СправочникРабочиеМеста.Код, + СправочникРабочиеМеста.Наименование, + СправочникРабочиеМеста.ИмяКомпьютера, + СправочникРабочиеМеста.ЛокальноеУстройство, + ВЫБОР + КОГДА СправочникРабочиеМеста.Ссылка = &ТекущееРабочееМесто ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ + КОНЕЦ КАК Текущее +ИЗ + Справочник.РабочиеМеста КАК СправочникРабочиеМеста + + + ИмяПредопределенныхДанных + ИмяПредопределенныхДанных + + + ЛокальноеУстройство + ЛокальноеУстройство + + + Ссылка + Ссылка + + + Наименование + Наименование + + + ВерсияДанных + ВерсияДанных + + + ИмяКомпьютера + ИмяКомпьютера + + + ПометкаУдаления + ПометкаУдаления + + + Код + Код + + + Предопределенный + Предопределенный + + + Текущее + Текущее + + + ru + Текущее + + + + + ТекущееРабочееМесто + + + ru + Текущее рабочее место + + + + cfg:CatalogRef.РабочиеМеста + + + true + + Catalog.РабочиеМеста + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + + Текущее + Desc + + + Наименование + Asc + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + + + + Наименование + + + + + Текущее + Equal + true + + + + + Шрифт + + + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текущее рабочее место</v8:content> + </v8:item> + + + cfg:CatalogRef.РабочиеМеста + + + +
\ No newline at end of file diff --git a/Catalogs/РабочиеМеста/Forms/ФормаСписка/Ext/Form/Module.bsl b/Catalogs/РабочиеМеста/Forms/ФормаСписка/Ext/Form/Module.bsl new file mode 100644 index 0000000..bd72b3a --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,82 @@ + +#Область ОбработчикиСобытийФормы + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + МенеджерОборудованияКлиент.УстановитьРежимПодключенияРасширенияИнформацииОКомпьютере(Истина); + МенеджерОборудованияКлиент.ОбновитьРабочееМестоКлиента(); + + ТекущееРабочееМесто = МенеджерОборудованияКлиент.РабочееМестоКлиента(); + Список.Параметры.УстановитьЗначениеПараметра("ТекущееРабочееМесто", ТекущееРабочееМесто); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + ИдентификаторКлиента = МенеджерОборудованияКлиент.ИдентификаторКлиентаДляРабочегоМеста(); + РабочееМесто = ПолучитьРабочееМестоПоИдентификаторуКлиента(ИдентификаторКлиента); + + Если НЕ РабочееМесто = Неопределено Тогда + + Отказ = Истина; + + Текст = НСтр("ru='Создание нового рабочего места не требуется. + |Для данного идентификатора клиента оно уже создано. + |Открыть существующее рабочее место?'"); + Оповещение = Новый ОписаниеОповещения("СписокПередНачаломДобавленияЗавершение", ЭтотОбъект, РабочееМесто); + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "ИзмененоРабочееМестоТекущегоСеанса" Тогда + ТекущееРабочееМесто = МенеджерОборудованияКлиент.РабочееМестоКлиента(); + Список.Параметры.УстановитьЗначениеПараметра("ТекущееРабочееМесто", ТекущееРабочееМесто); + Элементы.Список.Обновить(); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура СписокПередНачаломДобавленияЗавершение(Результат, Параметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да И Не ПустаяСтрока(Параметры) Тогда + ПоказатьЗначение(, Параметры); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПолучитьРабочееМестоПоИдентификаторуКлиента(Идентификатор) + + Результат = Неопределено; + + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | РабочиеМеста.Ссылка + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.Код = &Идентификатор"); + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Результат = ВыборкаДетальныеЗаписи.Ссылка; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/Catalogs/РабочиеМеста/Forms/ФормаЭлемента.xml b/Catalogs/РабочиеМеста/Forms/ФормаЭлемента.xml new file mode 100644 index 0000000..b6f0cee --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаЭлемента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/РабочиеМеста/Forms/ФормаЭлемента/Ext/Form.xml b/Catalogs/РабочиеМеста/Forms/ФормаЭлемента/Ext/Form.xml new file mode 100644 index 0000000..74a7fcf --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаЭлемента/Ext/Form.xml @@ -0,0 +1,182 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рабочее место</v8:content> + </v8:item> + + LockOwner + Vertical + useIfNecessary + Items + + false + + + + + + ПослеЗаписи + ПриОткрытии + ПередЗаписью + ПриСозданииНаСервере + + + + Объект.Description + EnterOnInput + true + false + false + + + + НаименованиеПриИзменении + + + + Объект.Code + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор клиента</v8:content> + </v8:item> + + false + false + false + + + + + Объект.ИмяКомпьютера + true + false + true + + + + + true + false + false + Cell + false + true + true + true + Объект.MACАдреса + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительные MAC-адреса</v8:content> + </v8:item> + + + + + false + + + + + MACАдреса + SearchStringRepresentation + + + + + + + MACАдреса + ViewStatusRepresentation + + + + + + + MACАдреса + SearchControl + + + + + + + Объект.MACАдреса.LineNumber + EnterOnInput + true + + + + + Объект.MACАдреса.Адрес + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>MAC-адрес</v8:content> + </v8:item> + + EnterOnInput + true + true + + + + +
+
+ + + + cfg:CatalogObject.РабочиеМеста + + true + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текущий пользователь</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + + + 0 + Auto + false + + false + + + + 0 + Auto + false + + false + + + + +
\ No newline at end of file diff --git a/Catalogs/РабочиеМеста/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/Catalogs/РабочиеМеста/Forms/ФормаЭлемента/Ext/Form/Module.bsl new file mode 100644 index 0000000..8da1651 --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -0,0 +1,146 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем ОтветПередЗаписью; + +#КонецОбласти + +#Область ОбработчикиСобытийФорм + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + + Если ОбщегоНазначенияБПО.ЭтоМобильнаяПлатформа() Тогда + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.Наименование); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.Код); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ИмяКомпьютера); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ПустаяСтрока(Объект.Код) Тогда + Объект.Код = МенеджерОборудованияКлиент.ИдентификаторКлиентаДляРабочегоМеста(); + КонецЕсли; + + МенеджерОборудованияКлиентСервер.ЗаполнитьНаименованиеРабочегоМеста(Объект, ТекущийПользователь); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + + Если Не ПроверкаУникальностиПоИдентификаторуКлиента(Объект.Ссылка, Объект.Код) Тогда + Отказ = Истина; + Текст = НСтр("ru='Ошибка сохранение рабочего места. + |Рабочее место с таким идентификатором клиента уже существует.'"); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(Текст); + Возврат; + КонецЕсли; + + Если Не ПроверкаУникальностиПоНаименованию(Объект.Ссылка, Объект.Наименование)Тогда + Если ОтветПередЗаписью <> Истина Тогда + Отказ = Истина; + Текст = НСтр("ru='Указано неуникальное наименование рабочего места. + |Возможно в дальнейшем это затруднит идентификацию и выбор рабочего места. + |Рекомендуется указывать уникальное наименование рабочих мест. + |Продолжить сохранение с указанным наименованием?'"); + Оповещение = Новый ОписаниеОповещения("ПередЗаписьюЗавершение", ЭтотОбъект); + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписьюЗавершение(Результат, Параметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + ОтветПередЗаписью = Истина; + Записать(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + + Если Объект.Код = МенеджерОборудованияКлиент.ИдентификаторКлиентаДляРабочегоМеста() Тогда + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура НаименованиеПриИзменении(Элемент) + + МенеджерОборудованияКлиентСервер.ЗаполнитьНаименованиеРабочегоМеста(Объект, ТекущийПользователь); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервереБезКонтекста +Функция ПроверкаУникальностиПоНаименованию(Ссылка, Наименование) + + Результат = Истина; + + Если Не ПустаяСтрока(Наименование) Тогда + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | 1 + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.Наименование = &Наименование + | И РабочиеМеста.Ссылка <> &Ссылка + |"); + Запрос.УстановитьПараметр("Наименование", Наименование); + Запрос.УстановитьПараметр("Ссылка" , Ссылка); + Результат = Запрос.Выполнить().Пустой(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Функция ПроверкаУникальностиПоИдентификаторуКлиента(Ссылка, ИдентификаторКлиента) + + Результат = Истина; + + Если Не ПустаяСтрока(ИдентификаторКлиента) Тогда + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | 1 + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.Код = &Код + | И РабочиеМеста.Ссылка <> &Ссылка + |"); + Запрос.УстановитьПараметр("Код" , ИдентификаторКлиента); + Запрос.УстановитьПараметр("Ссылка" , Ссылка); + Результат = Запрос.Выполнить().Пустой(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/Catalogs/СтруктурныеЕдиницы.xml b/Catalogs/СтруктурныеЕдиницы.xml new file mode 100644 index 0000000..c71f56e --- /dev/null +++ b/Catalogs/СтруктурныеЕдиницы.xml @@ -0,0 +1,91 @@ + + + + + + 0728ea87-8894-4960-b89c-87f690ff7a1c + 3f4a6606-28d6-4a37-a8dd-158bbfeba911 + + + 42b7c064-d0a1-40d8-beb9-b99c2d6ad55a + a9c05368-4d0e-4331-8422-7bee45b2dda2 + + + 5cb87f27-383d-41a3-a7d4-83e1fc235348 + 2d309153-4d52-4165-8ec2-e9b08c46a6f2 + + + d1d9ef41-b8d5-4969-bdcb-abc74251e413 + 49418381-cee2-4c70-9f20-2c430e031600 + + + fec7627f-39dc-4ce3-8898-3dc6ef955c2f + 04869ea7-4527-4de8-ae5b-64ab15ea794f + + + + СтруктурныеЕдиницы + + + ru + Структурные единицы + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 100 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.СтруктурныеЕдиницы.StandardAttribute.Description + Catalog.СтруктурныеЕдиницы.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/Catalogs/Ячейки.xml b/Catalogs/Ячейки.xml new file mode 100644 index 0000000..c3ca79a --- /dev/null +++ b/Catalogs/Ячейки.xml @@ -0,0 +1,142 @@ + + + + + + 13edfa79-2938-4803-aeea-18524bd3210f + 6a16ac98-9cf9-410c-8d81-bb56abdf0b61 + + + f49ef68e-7030-4f54-957f-58bc3a23bb6e + ff8d124a-e259-4988-b819-daf6317a3cd7 + + + 5207d29c-fc67-434a-a0f9-f3e7fd157eb4 + 2e36384d-d704-4298-8975-17607e46334a + + + bcfeb49e-5773-40c9-9186-0ea7a92f4539 + d4ff8f08-e455-4d92-8fbc-4b2f8f53ee19 + + + c28d413e-761b-41eb-a9cd-8d0d933714bd + d1def08f-e32a-4693-92a5-93ce1351535f + + + + Ячейки + + + ru + Ячейки + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + Catalog.СтруктурныеЕдиницы + + ToItems + 11 + 100 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.Ячейки.StandardAttribute.Description + Catalog.Ячейки.StandardAttribute.Code + Catalog.Ячейки.Attribute.Штрихкод + + Begin + DontUse + Directly + Catalog.Ячейки.Form.ФормаЭлемента + + Catalog.Ячейки.Form.ФормаСписка + Catalog.Ячейки.Form.ФормаВыбора + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + + Штрихкод + + + ru + Штрихкод + + + + + xs:string + + 200 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + Index + Use + Use + + +
ФормаСписка
+
ФормаВыбора
+
ФормаЭлемента
+
+
+
\ No newline at end of file diff --git a/Catalogs/Ячейки/Forms/ФормаВыбора.xml b/Catalogs/Ячейки/Forms/ФормаВыбора.xml new file mode 100644 index 0000000..f61386f --- /dev/null +++ b/Catalogs/Ячейки/Forms/ФормаВыбора.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаВыбора + + + ru + Форма выбора + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/Ячейки/Forms/ФормаВыбора/Ext/Form.xml b/Catalogs/Ячейки/Forms/ФормаВыбора/Ext/Form.xml new file mode 100644 index 0000000..d1529c5 --- /dev/null +++ b/Catalogs/Ячейки/Forms/ФормаВыбора/Ext/Form.xml @@ -0,0 +1,110 @@ + +
+ LockOwner + Vertical + + + + List + true + true + true + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Code + + + + + Список.Description + true + + + + + Список.Owner + + + + + Список.Штрихкод + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Catalog.Ячейки + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git a/Catalogs/Ячейки/Forms/ФормаСписка.xml b/Catalogs/Ячейки/Forms/ФормаСписка.xml new file mode 100644 index 0000000..d108e28 --- /dev/null +++ b/Catalogs/Ячейки/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/Ячейки/Forms/ФормаСписка/Ext/Form.xml b/Catalogs/Ячейки/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..9463495 --- /dev/null +++ b/Catalogs/Ячейки/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,109 @@ + +
+ DontBlock + Vertical + + + + List + true + true + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Code + + + + + Список.Description + true + + + + + Список.Owner + + + + + Список.Штрихкод + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Catalog.Ячейки + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git a/Catalogs/Ячейки/Forms/ФормаЭлемента.xml b/Catalogs/Ячейки/Forms/ФормаЭлемента.xml new file mode 100644 index 0000000..b87da19 --- /dev/null +++ b/Catalogs/Ячейки/Forms/ФормаЭлемента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Catalogs/Ячейки/Forms/ФормаЭлемента/Ext/Form.xml b/Catalogs/Ячейки/Forms/ФормаЭлемента/Ext/Form.xml new file mode 100644 index 0000000..b634e88 --- /dev/null +++ b/Catalogs/Ячейки/Forms/ФормаЭлемента/Ext/Form.xml @@ -0,0 +1,48 @@ + +
+ LockOwner + Vertical + Items + + + + Объект.Code + EnterOnInput + + + + + Объект.Description + EnterOnInput + + + + + Объект.Owner + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Склад</v8:content> + </v8:item> + + EnterOnInput + + + + + Объект.Штрихкод + EnterOnInput + + + + + + + + cfg:CatalogObject.Ячейки + + true + true + + + \ No newline at end of file diff --git a/CommonCommands/ВыбратьРМТекущегоСеанса.xml b/CommonCommands/ВыбратьРМТекущегоСеанса.xml new file mode 100644 index 0000000..0543337 --- /dev/null +++ b/CommonCommands/ВыбратьРМТекущегоСеанса.xml @@ -0,0 +1,25 @@ + + + + + ВыбратьРМТекущегоСеанса + + + ru + Выбрать рабочее место текущего сеанса + + + + ActionsPanelTools + Auto + + + + false + + Single + false + Auto + + + \ No newline at end of file diff --git a/CommonCommands/ВыбратьРМТекущегоСеанса/Ext/CommandModule.bsl b/CommonCommands/ВыбратьРМТекущегоСеанса/Ext/CommandModule.bsl new file mode 100644 index 0000000..d3736fb --- /dev/null +++ b/CommonCommands/ВыбратьРМТекущегоСеанса/Ext/CommandModule.bsl @@ -0,0 +1,10 @@ +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + МенеджерОборудованияКлиент.ВыбратьРМТекущегоСеанса(ПараметрКоманды, ПараметрыВыполненияКоманды); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/CommonCommands/ОбновитьДрайвераОборудования.xml b/CommonCommands/ОбновитьДрайвераОборудования.xml new file mode 100644 index 0000000..84d1635 --- /dev/null +++ b/CommonCommands/ОбновитьДрайвераОборудования.xml @@ -0,0 +1,25 @@ + + + + + ОбновитьДрайвераОборудования + + + ru + Обновить драйвера оборудования + + + + ActionsPanelTools + Auto + + + + false + + Single + false + Auto + + + \ No newline at end of file diff --git a/CommonCommands/ОбновитьДрайвераОборудования/Ext/CommandModule.bsl b/CommonCommands/ОбновитьДрайвераОборудования/Ext/CommandModule.bsl new file mode 100644 index 0000000..2c533a1 --- /dev/null +++ b/CommonCommands/ОбновитьДрайвераОборудования/Ext/CommandModule.bsl @@ -0,0 +1,10 @@ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ОбновлениеДрБПО(); +КонецПроцедуры + + +Процедура ОбновлениеДрБПО() + ИнтеграцияПодсистемБПО.ОбновлениеИнформационнойБазыБПО(); +КонецПроцедуры diff --git a/CommonCommands/ОбновлениеИнформационнойБазыБПО.xml b/CommonCommands/ОбновлениеИнформационнойБазыБПО.xml new file mode 100644 index 0000000..fc6e15e --- /dev/null +++ b/CommonCommands/ОбновлениеИнформационнойБазыБПО.xml @@ -0,0 +1,25 @@ + + + + + ОбновлениеИнформационнойБазыБПО + + + ru + Обновление информационной базы БПО + + + + NavigationPanelImportant + Auto + + + + false + + Single + false + Auto + + + \ No newline at end of file diff --git a/CommonCommands/ОбновлениеИнформационнойБазыБПО/Ext/CommandModule.bsl b/CommonCommands/ОбновлениеИнформационнойБазыБПО/Ext/CommandModule.bsl new file mode 100644 index 0000000..263a577 --- /dev/null +++ b/CommonCommands/ОбновлениеИнформационнойБазыБПО/Ext/CommandModule.bsl @@ -0,0 +1,18 @@ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ОбновлениеИнформационнойБазыБПО(); + //ПараметрыФормы = Новый Структура("", ); + //ОткрытьФорму("ОбщаяФорма.", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); +КонецПроцедуры + + +&НаСервере +Процедура ОбновлениеИнформационнойБазыБПО() + +#Если НЕ МобильноеПриложениеКлиент Тогда +ИнтеграцияПодсистемБПО.ОбновлениеИнформационнойБазыБПО(); +#КонецЕсли + + +КонецПроцедуры diff --git a/CommonCommands/РегистрФискальныхОпераций.xml b/CommonCommands/РегистрФискальныхОпераций.xml new file mode 100644 index 0000000..40dd58a --- /dev/null +++ b/CommonCommands/РегистрФискальныхОпераций.xml @@ -0,0 +1,25 @@ + + + + + РегистрФискальныхОпераций + + + ru + Фискальные операции + + + + ActionsPanelTools + PictureAndText + + + + false + + Single + false + Auto + + + \ No newline at end of file diff --git a/CommonCommands/РегистрФискальныхОпераций/Ext/CommandModule.bsl b/CommonCommands/РегистрФискальныхОпераций/Ext/CommandModule.bsl new file mode 100644 index 0000000..363e77a --- /dev/null +++ b/CommonCommands/РегистрФискальныхОпераций/Ext/CommandModule.bsl @@ -0,0 +1,10 @@ +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму("РегистрСведений.ФискальныеОперации.Форма.ФормаСписка"); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/CommonCommands/СверкаИтоговПоКартам.xml b/CommonCommands/СверкаИтоговПоКартам.xml new file mode 100644 index 0000000..289b0c0 --- /dev/null +++ b/CommonCommands/СверкаИтоговПоКартам.xml @@ -0,0 +1,25 @@ + + + + + СверкаИтоговПоКартам + + + ru + Сверка итогов по картам + + + + ActionsPanelTools + Auto + + + + false + + Single + false + Auto + + + \ No newline at end of file diff --git a/CommonCommands/СверкаИтоговПоКартам/Ext/CommandModule.bsl b/CommonCommands/СверкаИтоговПоКартам/Ext/CommandModule.bsl new file mode 100644 index 0000000..a4b0f35 --- /dev/null +++ b/CommonCommands/СверкаИтоговПоКартам/Ext/CommandModule.bsl @@ -0,0 +1,25 @@ +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + УникальныйИдентификатор = Новый УникальныйИдентификатор(); + ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьОперациюЗавершение", ЭтотОбъект); + ОборудованиеПлатежныеСистемыКлиент.НачатьВыполнениеСверкиИтоговНаЭквайринговомТерминале(ОписаниеОповещения, УникальныйИдентификатор) + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОперациюЗавершение(РезультатВыполнения, Параметры) Экспорт + + Если РезультатВыполнения.Результат Тогда + ТекстСообщения = НСтр("ru = 'Операция выполнена успешно.'"); + Иначе + ТекстСообщения = РезультатВыполнения.ОписаниеОшибки; + КонецЕсли; + + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/CommonCommands/УправлениеФискальнымУстройством.xml b/CommonCommands/УправлениеФискальнымУстройством.xml new file mode 100644 index 0000000..54339a7 --- /dev/null +++ b/CommonCommands/УправлениеФискальнымУстройством.xml @@ -0,0 +1,25 @@ + + + + + УправлениеФискальнымУстройством + + + ru + Управление фискальным устройством + + + + ActionsPanelTools + PictureAndText + + + + false + + Single + false + Auto + + + \ No newline at end of file diff --git a/CommonCommands/УправлениеФискальнымУстройством/Ext/CommandModule.bsl b/CommonCommands/УправлениеФискальнымУстройством/Ext/CommandModule.bsl new file mode 100644 index 0000000..7907d09 --- /dev/null +++ b/CommonCommands/УправлениеФискальнымУстройством/Ext/CommandModule.bsl @@ -0,0 +1,11 @@ +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму("ОбщаяФорма.УправлениеФискальнымУстройством", , ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/CommonCommands/УправлениеЭквайринговымТерминалом.xml b/CommonCommands/УправлениеЭквайринговымТерминалом.xml new file mode 100644 index 0000000..74893c6 --- /dev/null +++ b/CommonCommands/УправлениеЭквайринговымТерминалом.xml @@ -0,0 +1,25 @@ + + + + + УправлениеЭквайринговымТерминалом + + + ru + Управление эквайринговым терминалом + + + + ActionsPanelTools + PictureAndText + + + + false + + Single + false + Auto + + + \ No newline at end of file diff --git a/CommonCommands/УправлениеЭквайринговымТерминалом/Ext/CommandModule.bsl b/CommonCommands/УправлениеЭквайринговымТерминалом/Ext/CommandModule.bsl new file mode 100644 index 0000000..8e468b1 --- /dev/null +++ b/CommonCommands/УправлениеЭквайринговымТерминалом/Ext/CommandModule.bsl @@ -0,0 +1,10 @@ +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму("ОбщаяФорма.УправлениеЭквайринговымТерминалом", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/CommonForms/ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО.xml b/CommonForms/ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО.xml new file mode 100644 index 0000000..7ea48fa --- /dev/null +++ b/CommonForms/ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО.xml @@ -0,0 +1,25 @@ + + + + + ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО + + + ru + Вопрос об установке расширения для работы с 1С:Предприятием + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + true + + + + + \ No newline at end of file diff --git a/CommonForms/ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО/Ext/Form.xml b/CommonForms/ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО/Ext/Form.xml new file mode 100644 index 0000000..6ed504c --- /dev/null +++ b/CommonForms/ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО/Ext/Form.xml @@ -0,0 +1,136 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установка расширения для работы с 1С:Предприятием</v8:content> + </v8:item> + + LockOwner + false + Vertical + false + Bottom + + Abort + Cancel + Close + Help + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + + true + + Right + + + + + + + ПриСозданииНаСервере + + + + false + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Для точного определения рабочего места и работы с подключаемым оборудованием в web-клиенте, +рекомендуется установить расширение для работы с 1С:Предприятием. +Установить?</v8:content> + </v8:item> + + Top + + + + + + + + xs:string + + 0 + Variable + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установить и продолжить</v8:content> + </v8:item> + + + + ru + Установить расширение для работы с 1С:Предприятием и продолжить + + + УстановитьИПродолжить + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Продолжить без установки</v8:content> + </v8:item> + + + + ru + Продолжить без установки расширения для веб-клиента 1С:Предприятие + + + ПродолжитьБезУстановки + DontUse + + + + + + xs:string + + 0 + Variable + + + true + + +
\ No newline at end of file diff --git a/CommonForms/ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО/Ext/Form/Module.bsl b/CommonForms/ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО/Ext/Form/Module.bsl new file mode 100644 index 0000000..0a0361c --- /dev/null +++ b/CommonForms/ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО/Ext/Form/Module.bsl @@ -0,0 +1,47 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не ПустаяСтрока(Параметры.ТекстПредложения) Тогда + Элементы.ДекорацияПояснение.Заголовок = Параметры.ТекстПредложения + + Символы.ПС + + НСтр("ru = 'Установить?'"); + + КонецЕсли; + + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура УстановитьИПродолжить(Команда) + + Закрыть(КодВозвратаДиалога.Да); + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьБезУстановки(Команда) + + Закрыть(КодВозвратаДиалога.Отмена); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + + +#КонецОбласти diff --git a/CommonForms/КодВидаНоменклатурнойКлассификации.xml b/CommonForms/КодВидаНоменклатурнойКлассификации.xml new file mode 100644 index 0000000..2e02123 --- /dev/null +++ b/CommonForms/КодВидаНоменклатурнойКлассификации.xml @@ -0,0 +1,25 @@ + + + + + КодВидаНоменклатурнойКлассификации + + + ru + Код вида номенклатурной классификации + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + false + + + + + \ No newline at end of file diff --git a/CommonForms/КодВидаНоменклатурнойКлассификации/Ext/Form.xml b/CommonForms/КодВидаНоменклатурнойКлассификации/Ext/Form.xml new file mode 100644 index 0000000..6b98aaf --- /dev/null +++ b/CommonForms/КодВидаНоменклатурнойКлассификации/Ext/Form.xml @@ -0,0 +1,154 @@ + +
+ DontBlock + Vertical + + false + + + + + + + ПриСозданииНаСервере + + + + true + false + false + true + SingleRow + Cell + false + true + true + true + Дерево + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + СписокВыбор + + + + Дерево.НаименованиеВидаНоменклатурнойКлассификации + EnterOnInput + true + 60 + false + + + + + Дерево.КодВидаНоменклатурнойКлассификации + EnterOnInput + true + 35 + false + + + + +
+
+ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дерево</v8:content> + </v8:item> + + + v8:ValueTree + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Наименование вида номенклатурной классификации</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код вида номенклатурной классификации</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выбрать</v8:content> + </v8:item> + + + + ru + Выбрать + + + Выбрать + + +
\ No newline at end of file diff --git a/CommonForms/КодВидаНоменклатурнойКлассификации/Ext/Form/Module.bsl b/CommonForms/КодВидаНоменклатурнойКлассификации/Ext/Form/Module.bsl new file mode 100644 index 0000000..5b55f5b --- /dev/null +++ b/CommonForms/КодВидаНоменклатурнойКлассификации/Ext/Form/Module.bsl @@ -0,0 +1,83 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ЗаполнитьДанные(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ВыбратьДанные(); + +КонецПроцедуры + +&НаКлиенте +Процедура Выбрать(Команда) + + ВыбратьДанные(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ВыбратьДанные() + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено И НЕ ПустаяСтрока(ТекущиеДанные.КодВидаНоменклатурнойКлассификации) Тогда + СтруктураВозврата = Новый Структура(); + СтруктураВозврата.Вставить("КодВидаНоменклатурнойКлассификации", ТекущиеДанные.КодВидаНоменклатурнойКлассификации); + СтруктураВозврата.Вставить("НаименованиеВидаНоменклатурнойКлассификации", ТекущиеДанные.НаименованиеВидаНоменклатурнойКлассификации); + Закрыть(СтруктураВозврата); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьДанные() + + УстановитьПривилегированныйРежим(Истина); + Данные = ПолучитьОбщийМакет("КодВидаНоменклатурнойКлассификации").ПолучитьТекст() ; + + НоменклатурнаяКлассификация = Неопределено; + + Если Не ПустаяСтрока(Данные) Тогда + + ДеревоРек = РеквизитФормыВЗначение("Дерево"); + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(Данные); + ЧтениеXML.ПерейтиКСодержимому(); + + Если ЧтениеXML.Имя = "КодВидаНоменклатурнойКлассификации" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя = "НоменклатурнаяКлассификация" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + НоменклатурнаяКлассификация = ДеревоРек.Строки.Добавить(); + НоменклатурнаяКлассификация.НаименованиеВидаНоменклатурнойКлассификации = ЧтениеXML.ЗначениеАтрибута("Имя"); + НоменклатурнаяКлассификация.КодВидаНоменклатурнойКлассификации = ""; + ИначеЕсли ЧтениеXML.Имя = "ВидНоменклатурнойКлассификации" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если НоменклатурнаяКлассификация <> Неопределено Тогда + ВидНоменклатурнойКлассификации = НоменклатурнаяКлассификация.Строки.Добавить(); + ВидНоменклатурнойКлассификации.НаименованиеВидаНоменклатурнойКлассификации = ЧтениеXML.ЗначениеАтрибута("Имя"); + ВидНоменклатурнойКлассификации.КодВидаНоменклатурнойКлассификации = ЧтениеXML.ЗначениеАтрибута("КодВида"); + КонецЕсли + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ЗначениеВРеквизитФормы(ДеревоРек, "Дерево"); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/CommonForms/НастройкаРегистрацииККТ.xml b/CommonForms/НастройкаРегистрацииККТ.xml new file mode 100644 index 0000000..3b3328d --- /dev/null +++ b/CommonForms/НастройкаРегистрацииККТ.xml @@ -0,0 +1,25 @@ + + + + + НастройкаРегистрацииККТ + + + ru + Настройка регистрации ККТ + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + true + + + + + \ No newline at end of file diff --git a/CommonForms/НастройкаРегистрацииККТ/Ext/Form.xml b/CommonForms/НастройкаРегистрацииККТ/Ext/Form.xml new file mode 100644 index 0000000..d3f1479 --- /dev/null +++ b/CommonForms/НастройкаРегистрацииККТ/Ext/Form.xml @@ -0,0 +1,1374 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Операция с фискальным накопителем</v8:content> + </v8:item> + + DontBlock + false + Vertical + + false + + + ПриОткрытии + ПриСозданииНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа организация</v8:content> + </v8:item> + + HorizontalIfPossible + Usual + WeakSeparation + + + + ФискальноеУстройство + true + false + false + false + false + false + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа операция</v8:content> + </v8:item> + + true + Vertical + Usual + WeakSeparation + false + + + + ТипОперации + false + true + true + + + + 0 + + + + ru + Регистрация фискального накопителя + + + 1 + + + + + 0 + + + + ru + Изменение параметров регистрации фискального накопителя + + + 2 + + + + + 0 + + + + ru + Закрытие фискального накопителя + + + 3 + + + + + + + ТипОперацииПриИзменении + + + + РегистрационныйНомерККТ + true + false + true + true + + + + + КодПричиныПеререгистрации + false + true + true + false + + + + 0 + + + + ru + Замена ФН + + + 1 + + + + + 0 + + + + ru + Смена реквизитов пользователя + + + 3 + + + + + 0 + + + + ru + Смена настроек ККТ + + + 4 + + + + + 0 + + + + ru + Смена ОФД + + + 2 + + + + + + + КодПричиныПеререгистрацииПриИзменении + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реквизиты организации</v8:content> + </v8:item> + + Vertical + Usual + WeakSeparation + + + + ОрганизацияНазвание + true + 40 + false + true + true + + + + + ОрганизацияИНН + true + false + true + true + + + + + АдресПроведенияРасчетов + true + false + 2 + false + true + false + true + + + + + МестоПроведенияРасчетов + false + 2 + true + false + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Системы налогообложения</v8:content> + </v8:item> + + Horizontal + Usual + None + + + + true + Vertical + Usual + WeakSeparation + false + + + + КодыСистемыНалогообложения0 + Right + + + + + КодыСистемыНалогообложения1 + Right + + + + + + + true + Vertical + Usual + WeakSeparation + false + + + + КодыСистемыНалогообложения2 + Right + + + + + КодыСистемыНалогообложения3 + Right + + + + + + + true + Vertical + Usual + WeakSeparation + false + + + + КодыСистемыНалогообложения4 + Right + + + + + КодыСистемыНалогообложения5 + Right + + + + + + + + + + + Vertical + Usual + WeakSeparation + false + + + + Horizontal + Usual + WeakSeparation + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Настройки ККТ</v8:content> + </v8:item> + + Vertical + Usual + WeakSeparation + + + + ПризнакАвтономногоРежима + Right + + + + + ПризнакРасчетовЗаУслуги + Right + + + + + ПризнакФормированияБСО + Right + + + + + ПризнакРасчетовТолькоВИнтернет + Right + + + + + ПризнакШифрованиеДанных + Right + + + + + ПризнакАвтоматическогоРежима + Right + + + + ПризнакАвтоматическогоРежимаПриИзменении + + + + НомерАвтоматаДляАвтоматическогоРежима + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер автомата</v8:content> + </v8:item> + + 13 + false + 20 + true + + + + + + + Vertical + Usual + None + + + + ПродажаПодакцизногоТовара + Right + + + + + ПродажаМаркированныхТоваров + Right + + + + + ПроведенияАзартныхИгр + Right + + + + + ПризнакПримененияЛомбардами + Right + + + + + ПризнакДеятельностиПоСтрахованию + Right + + + + + ПроведенияЛотерей + Right + + + + + УстановкаПринтераВАвтомате + Right + + + + + ПризнакАвтоматическогоТорговогоАвтомата + Right + + + + + ПризнакОказанииУслугОбщественногоПитания + Right + + + + + ПризнакОптовойТорговлиСОрганизациями + Right + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Признаки агента</v8:content> + </v8:item> + + Vertical + Usual + WeakSeparation + + + + ПА_БанковскийПлатежныйАгент + Right + + + ru + Оказание услуг покупателю (клиенту) пользователем, являющимся банковским платежным агентом + + + + + + + ПА_БанковскийПлатежныйСубагент + Right + + + ru + Оказание услуг покупателю (клиенту) пользователем, являющимся банковским платежным субагентом + + + + + + + ПА_ПлатежныйАгент + Right + + + ru + Оказание услуг покупателю (клиенту) пользователем, являющимся платежным агентом + + + + + + + ПА_ПлатежныйСубагент + Right + + + ru + Оказание услуг покупателю (клиенту) пользователем, являющимся платежным субагентом + + + + + + + ПА_Поверенный + Right + + + ru + Осуществление расчета с покупателем (клиентом) пользователем, являющимся поверенным + + + + + + + ПА_Комиссионер + Right + + + ru + Осуществление расчета с покупателем (клиентом) пользователем, являющимся комиссионером + + + + + + + ПА_Агент + Right + + + ru + Осуществление расчета с покупателем (клиентом) пользователем, являющимся агентом и не являющимся банковским платежным агентом (субагентом), платежным агентом (субагентом), поверенным, комиссионером + + + + + + + + + + + Horizontal + Usual + WeakSeparation + false + + + + АдресСайтаФНС + + + + + ОтправительEmail + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Причины изменения сведений о ККТ</v8:content> + </v8:item> + + HorizontalIfPossible + Usual + WeakSeparation + + + + List + 4 + false + Row +
false
+ false + false + true + true + AsFile + ПричиныИзмененияСведенийОККТ + + CancelSearch + Change + Copy + CopyToClipboard + Delete + EndEdit + Find + MoveDown + MoveUp + OutputList + SelectAll + ShowMultipleSelection + ShowRowRearrangement + SortListAsc + SortListDesc + + + + + false + + + + + + + + ПричиныИзмененияСведенийОККТ + SearchStringRepresentation + + + + + + + ПричиныИзмененияСведенийОККТ + ViewStatusRepresentation + + Left + + + + + + ПричиныИзмененияСведенийОККТ + SearchControl + + + + + + + ПричиныИзмененияСведенийОККТ.ПричинаИзмененияСведений + EnterOnInput + true + + + + +
+
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оператор фискальных данных</v8:content> + </v8:item> + + HorizontalIfPossible + Usual + WeakSeparation + + + + ОрганизацияОФДИНН + true + false + true + true + + + + + ОрганизацияОФДНазвание + false + true + + + + + + + true + Bottom + Horizontal + Right + Usual + None + + + + style:SpecialTextColor + Left + + + + + + + +
+ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сокращенное наименование</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ИНН организации</v8:content> + </v8:item> + + + xs:string + + 12 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Адрес проведения расчетов</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коды системы налогообложения</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Признак автономного режима</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Признак автоматического режима</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер автомата для автоматического режима</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код причины перерегистрации</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ИНН ОФД</v8:content> + </v8:item> + + + xs:string + + 12 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип операции</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Any + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Регистрационный номер ККТ</v8:content> + </v8:item> + + + xs:string + + 16 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Наименование ОФД</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Фискальное устройство</v8:content> + </v8:item> + + + cfg:CatalogRef.ПодключаемоеОборудование + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Признак расчетов за услуги</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Признак формирования БСО</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Признак расчетов только в интернете</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Общая</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Упрощенная Доход</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Упрощенная Доход минус Расход</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Единый налог на вмененный доход</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Единый сельскохозяйственный налог</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Патентная система налогообложения</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Признак шифрования данных</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Организация</v8:content> + </v8:item> + + + cfg:DefinedType.ОрганизацияБПО + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Место проведения расчетов</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Продажа подакцизного товара</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проведение азартных игр</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проведение лотерей</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установка принтера в автомате</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Банковский платежный агент</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Банковский платежный субагент</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Платежный агент</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Платежный субагент</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поверенный</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Комиссионер</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Агент</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Причины изменения сведений о ККТ</v8:content> + </v8:item> + + + v8:ValueTable + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Причина изменения сведений</v8:content> + </v8:item> + + + cfg:EnumRef.ПричиныИзмененияСведенийККТ + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Версия ФФДККТ</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отправитель email</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Адрес сайта ФНС</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оказании услуг общественного питания</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Автоматический торговый автомат</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оптовая торговля с организациями</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Продажа маркированных товаров</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Признак применения ломбардами</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Признак деятельности по страхованию</v8:content> + </v8:item> + + + xs:boolean + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Продолжить операцию</v8:content> + </v8:item> + + + + ru + Продолжить операцию + + + ПродолжитьОперацию + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отмена</v8:content> + </v8:item> + + + + ru + Операция отмена + + + ОперацияОтмена + DontUse + + + + + + cfg:CatalogRef.ПодключаемоеОборудование + + true + + + + xs:decimal + + 10 + 0 + Any + + + + +
\ No newline at end of file diff --git a/CommonForms/НастройкаРегистрацииККТ/Ext/Form/Module.bsl b/CommonForms/НастройкаРегистрацииККТ/Ext/Form/Module.bsl new file mode 100644 index 0000000..6e4e6df --- /dev/null +++ b/CommonForms/НастройкаРегистрацииККТ/Ext/Form/Module.bsl @@ -0,0 +1,287 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем ВыполняетсяОперация; + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ФискальноеУстройство = Параметры.ФискальноеУстройство; + + Если Параметры.Свойство("Организация") Тогда + Организация = Параметры.Организация; + КонецЕсли; + + Если Параметры.ТипОперации <> 0 Тогда + ТипОперации = Параметры.ТипОперации; + Если ТипОперации = 1 Тогда + Заголовок = НСтр("ru='Регистрация фискального накопителя'") + ИначеЕсли ТипОперации = 3 Тогда + Заголовок = НСтр("ru='Закрытие фискального накопителя'"); + Иначе + Заголовок = НСтр("ru='Изменение параметров регистрации фискального накопителя'"); + КонецЕсли; + Элементы.ТипОперации.Видимость = Ложь; + Иначе + ТипОперации = 2; + Элементы.ТипОперации.Видимость = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ВыполняетсяОперация = Ложь; + КодПричиныПеререгистрации = 3; + + Доступность = Ложь; + + ОповещениеПриЗавершении = Новый ОписаниеОповещения("ПолучениеПараметровФискальногоУстройства_Завершение", ЭтотОбъект); + ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьПолучениеПараметровФискальногоУстройства(ОповещениеПриЗавершении, УникальныйИдентификатор, ФискальноеУстройство); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучениеПараметровФискальногоУстройства_Завершение(РезультатВыполнения, Параметры) Экспорт + + ОчиститьСообщения(); + + Если РезультатВыполнения.Результат Тогда + ПараметрыККТ = РезультатВыполнения.ПараметрыККТ; + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ПараметрыККТ); + СистемыНалогообложения = СтрРазделить(ПараметрыККТ.КодыСистемыНалогообложения, ",", Ложь); + КодыСистемыНалогообложения0 = СистемыНалогообложения.Найти("0") <> Неопределено; + КодыСистемыНалогообложения1 = СистемыНалогообложения.Найти("1") <> Неопределено; + КодыСистемыНалогообложения2 = СистемыНалогообложения.Найти("2") <> Неопределено; + КодыСистемыНалогообложения3 = СистемыНалогообложения.Найти("3") <> Неопределено; + КодыСистемыНалогообложения4 = СистемыНалогообложения.Найти("4") <> Неопределено; + КодыСистемыНалогообложения5 = СистемыНалогообложения.Найти("5") <> Неопределено; + + ПризнакиАгента = СтрРазделить(ПараметрыККТ.ПризнакиАгента, ",", Ложь); + ПА_БанковскийПлатежныйАгент = ПризнакиАгента.Найти("0") <> Неопределено; + ПА_БанковскийПлатежныйСубагент = ПризнакиАгента.Найти("1") <> Неопределено; + ПА_ПлатежныйАгент = ПризнакиАгента.Найти("2") <> Неопределено; + ПА_ПлатежныйСубагент = ПризнакиАгента.Найти("3") <> Неопределено; + ПА_Поверенный = ПризнакиАгента.Найти("4") <> Неопределено; + ПА_Комиссионер = ПризнакиАгента.Найти("5") <> Неопределено; + ПА_Агент = ПризнакиАгента.Найти("6") <> Неопределено; + + ВерсияФФДККТ = ПараметрыККТ.ВерсияФФДККТ; + Элементы.ВерсияФФД.Заголовок = НСтр("ru = 'ФФД'") + Символы.НПП + ПараметрыККТ.ВерсияФФДККТ; + Иначе + ТекстСообщения = РезультатВыполнения.ОписаниеОшибки; + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + + ОбновитьСостояниеФормы(); + + Если ТипОперации = 1 Тогда // Регистрация ФН + + Если РезультатВыполнения.Результат И ПараметрыККТ.ПризнакФискализации Тогда + Элементы.ОперацияПродолжить.Видимость = Ложь; + ТекстСообщения = НСтр("ru='Фискальный накопитель уже зарегистрирован. Воспользуйтесь функцией изменение параметров регистрации фискального накопителя.'"); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + Возврат; + КонецЕсли; + + ПараметрыРегистрации = Новый Структура("ОрганизацияНазвание, ОрганизацияИНН, АдресПроведенияРасчетов"); + МенеджерОборудованияВызовСервераПереопределяемый.ЗаполнитьРеквизитыОрганизацииДляРегистрацииФН(Организация, ПараметрыРегистрации); + + Если Не ПустаяСтрока(ПараметрыРегистрации.ОрганизацияНазвание) Тогда + ОрганизацияНазвание = ПараметрыРегистрации.ОрганизацияНазвание; + КонецЕсли; + Если Не ПустаяСтрока(ПараметрыРегистрации.ОрганизацияИНН) Тогда + ОрганизацияИНН = ПараметрыРегистрации.ОрганизацияИНН; + КонецЕсли; + Если Не ПустаяСтрока(ПараметрыРегистрации.АдресПроведенияРасчетов) Тогда + АдресПроведенияРасчетов = ПараметрыРегистрации.АдресПроведенияРасчетов; + КонецЕсли; + + КонецЕсли; + + ОповещениеПриЗавершении = Новый ОписаниеОповещения("ПолучениеТекущегоСостоянияФискальногоУстройства_Завершение", ЭтотОбъект); + ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьПолучениеТекущегоСостоянияФискальногоУстройства(ОповещениеПриЗавершении, УникальныйИдентификатор, ФискальноеУстройство); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучениеТекущегоСостоянияФискальногоУстройства_Завершение(РезультатВыполнения, Параметры) Экспорт + + Доступность = Истина; + + Если РезультатВыполнения.Результат И РезультатВыполнения.СтатусСмены <> 1 Тогда + Элементы.ОперацияПродолжить.Видимость = Ложь; + ТекстСообщения = НСтр("ru='Операция доступна только при закрытой смене на фискальном устройстве. Закройте смену и повторите операцию.'"); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПродолжитьОперациюПередПродолжением(РезультатВопроса, ПараметрыЗаписи) Экспорт + + Если РезультатВопроса = КодВозвратаДиалога.Да Тогда + ВыполняетсяОперация = Истина; + ВыполнитьОперацию(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьОперацию(Команда) + + Если ТипОперации = 3 И Не ВыполняетсяОперация Тогда + Оповещение = Новый ОписаниеОповещения("ПродолжитьОперациюПередПродолжением", ЭтотОбъект); + Сообщение = НСтр("ru='Закрытие фискального накопителя - необратимая операция. + |В дальнейшем фискальный накопитель нельзя будет использовать. + |Вы уверенны что хотите продолжить операцию?'"); + ПоказатьВопрос(Оповещение, Сообщение, РежимДиалогаВопрос.ДаНет); + Возврат; + КонецЕсли; + + ВыполнитьОперацию(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОперацию() + + Если Элементы.ГруппаРеквизитыОрганизации.Видимость Тогда + КодыСистемыУстановлен = КодыСистемыНалогообложения0 Или КодыСистемыНалогообложения1 Или КодыСистемыНалогообложения2 + Или КодыСистемыНалогообложения3 Или КодыСистемыНалогообложения4 Или КодыСистемыНалогообложения5; + Если Не КодыСистемыУстановлен Тогда + ПоказатьПредупреждение(, НСтр("ru='Не указан не один код налогообложения.'")); + Возврат; + КонецЕсли; + КонецЕсли; + + ПараметрыНастройки = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииНакопителя(); + ЗаполнитьЗначенияСвойств(ПараметрыНастройки, ЭтотОбъект); + + СистемыНалогообложения = Новый Массив(); + Если КодыСистемыНалогообложения0 Тогда + СистемыНалогообложения.Добавить("0"); + КонецЕсли; + Если КодыСистемыНалогообложения1 Тогда + СистемыНалогообложения.Добавить("1"); + КонецЕсли; + Если КодыСистемыНалогообложения2 Тогда + СистемыНалогообложения.Добавить("2"); + КонецЕсли; + Если КодыСистемыНалогообложения3 Тогда + СистемыНалогообложения.Добавить("3"); + КонецЕсли; + Если КодыСистемыНалогообложения4 Тогда + СистемыНалогообложения.Добавить("4"); + КонецЕсли; + Если КодыСистемыНалогообложения5 Тогда + СистемыНалогообложения.Добавить("5"); + КонецЕсли; + ПараметрыНастройки.КодыСистемыНалогообложения = СтрСоединить(СистемыНалогообложения,","); + + ПризнакиАгента = Новый Массив(); + Если ПА_БанковскийПлатежныйАгент Тогда + ПризнакиАгента.Добавить("0"); + КонецЕсли; + Если ПА_БанковскийПлатежныйСубагент Тогда + ПризнакиАгента.Добавить("1"); + КонецЕсли; + Если ПА_ПлатежныйАгент Тогда + ПризнакиАгента.Добавить("2"); + КонецЕсли; + Если ПА_ПлатежныйСубагент Тогда + ПризнакиАгента.Добавить("3"); + КонецЕсли; + Если ПА_Поверенный Тогда + ПризнакиАгента.Добавить("4"); + КонецЕсли; + Если ПА_Комиссионер Тогда + ПризнакиАгента.Добавить("5"); + КонецЕсли; + Если ПА_Агент Тогда + ПризнакиАгента.Добавить("6"); + КонецЕсли; + ПараметрыНастройки.ПризнакиАгента = СтрСоединить(ПризнакиАгента,","); + + Если Элементы.ГруппаПричиныИзмененияСведенийОККТ.Видимость И ПричиныИзмененияСведенийОККТ.Количество() > 0 Тогда + ПричиныИзмененияСведений = Новый Массив(); + Для Каждого ЭлементПричинаИзмененияСведений Из ПричиныИзмененияСведенийОККТ Цикл + КодПричиныИзмененияСведений = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПричиныИзмененияСведенийККТ(ЭлементПричинаИзмененияСведений.ПричинаИзмененияСведений); + ПричиныИзмененияСведений.Добавить(КодПричиныИзмененияСведений); + КонецЦикла; + ПараметрыНастройки.КодыПричинИзмененияСведений = СтрСоединить(ПричиныИзмененияСведений,","); + КонецЕсли; + + ТекущийКассир = МенеджерОборудованияКлиентСервер.ТекущийКассирДляФискальныхОпераций(); + ПараметрыНастройки.Кассир = ТекущийКассир.Кассир; + ПараметрыНастройки.КассирИНН = ТекущийКассир.КассирИНН; + + Закрыть(ПараметрыНастройки); + +КонецПроцедуры + +&НаКлиенте +Процедура ОперацияОтмена(Команда) + + Закрыть(Неопределено); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСостояниеФормы() + + Элементы.КодПричиныПеререгистрации.Видимость = ТипОперации = 2; + Элементы.НомерАвтоматаДляАвтоматическогоРежима.Доступность = ПризнакАвтоматическогоРежима; + + Элементы.ГруппаОператорФискальныхДанных.Видимость = ТипОперации <> 2 Или КодПричиныПеререгистрации = 2 Или КодПричиныПеререгистрации = 1; + Элементы.ГруппаРеквизитыОрганизации.Видимость = ТипОперации <> 2 Или КодПричиныПеререгистрации = 3 Или КодПричиныПеререгистрации = 1; + Элементы.ГруппаНастройкиККТ.Видимость = ТипОперации <> 2 Или КодПричиныПеререгистрации = 4 Или КодПричиныПеререгистрации = 1; + + Элементы.ГруппаПричиныИзмененияСведенийОККТ.Видимость = ТипОперации = 2; + + Элементы.ОрганизацияИНН.ТолькоПросмотр = НЕ (ТипОперации = 1); + Элементы.РегистрационныйНомерККТ.ТолькоПросмотр = НЕ (ТипОперации = 1); + + Если ТипОперации = 1 Тогда + Элементы.ПризнакиАгента.Доступность = Ложь; + Элементы.КодыСистемыНалогообложения3.Доступность = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПризнакАвтоматическогоРежимаПриИзменении(Элемент) + + ОбновитьСостояниеФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура КодПричиныПеререгистрацииПриИзменении(Элемент) + + ОбновитьСостояниеФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТипОперацииПриИзменении(Элемент) + + ОбновитьСостояниеФормы(); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/CommonForms/ПодборПоставкиТовара.xml b/CommonForms/ПодборПоставкиТовара.xml new file mode 100644 index 0000000..0719084 --- /dev/null +++ b/CommonForms/ПодборПоставкиТовара.xml @@ -0,0 +1,25 @@ + + + + + ПодборПоставкиТовара + + + ru + Подбор поставки товара + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + false + + + + + \ No newline at end of file diff --git a/CommonForms/ПодборПоставкиТовара/Ext/Form.xml b/CommonForms/ПодборПоставкиТовара/Ext/Form.xml new file mode 100644 index 0000000..0bcc51c --- /dev/null +++ b/CommonForms/ПодборПоставкиТовара/Ext/Form.xml @@ -0,0 +1,121 @@ + +
+ LockWholeInterface + Vertical + None + Compact + false + false + false + + + ВнешнееСобытие + ПриСозданииНаСервере + + + + style:AccentColor + + + + + + КодМП + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код МП</v8:content> + </v8:item> + + Left + true + true + + + + + + style:ActivityColor + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код поставки МП</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Документ основание</v8:content> + </v8:item> + + + cfg:DocumentRef.ПоставкаМП + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ном</v8:content> + </v8:item> + + + cfg:CatalogRef.КарточкиМП + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Есть поставка</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Есть товар</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Маркет</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + \ No newline at end of file diff --git a/CommonForms/ПодборПоставкиТовара/Ext/Form/Module.bsl b/CommonForms/ПодборПоставкиТовара/Ext/Form/Module.bsl new file mode 100644 index 0000000..38d0e76 --- /dev/null +++ b/CommonForms/ПодборПоставкиТовара/Ext/Form/Module.bsl @@ -0,0 +1,101 @@ +Перем НомерДок; +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + элементы.СтатусКодаВПоставке.Заголовок=Параметры.СтатусКодаВПоставке; + элементы.Подсказка1.Заголовок=Параметры.Подсказка1; + КодМП=Параметры.КодМП; + ДокументОснование=Параметры.ДокументОснование; + ном=Параметры.ном; + ЕстьПоставка=параметры.ЕстьПоставка; + ЕстьТовар=параметры.ЕстьТовар; + Маркет=параметры.Маркет; +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) + если ЭтаФорма.вводдоступен() тогда + если Маркет="YA" Тогда + // Обрежем штрихкод поставки яндекса + Данные=ПривестиСтрокуВПорядок(Данные, "-"); + postingNumber=Данные; + конецесли; + + Если Событие="Штрихкод" И СтрДлина(Данные)=13 И ЕстьПоставка Тогда + номПоиск=НайтиНомВБазе(Данные);// находим товар в базе + если значениезаполнено(номПоиск) тогда + структураПоиска=Новый структура(); + структураПоиска.Вставить("КодМП", КодМП); + структураПоиска.Вставить("Номенклатура", номПоиск); + Рез=НайтиТоварВДокеПоШК(структураПоиска); + если рез=истина тогда + ПараметрыТов = Новый Структура(); + ПараметрыТов.Вставить("КодМП", КодМП); + ПараметрыТов.Вставить("Номенклатура", номПоиск); + Оповестить("НашлиТоварВПоставке", ПараметрыТов, ЭтаФорма); + ЭтаФорма.Закрыть(); + иначе + Оповестить("НЕнашлиТоварВПоставке", , ЭтаФорма); + ЭтаФорма.Закрыть(); + Конецесли; + иначе + Сообщить("Не нашли товар в базе"); + конецесли; + Конецесли; + Если Событие="Штрихкод" И НЕ СтрДлина(Данные)=13 И ЕстьТовар Тогда + если Маркет="OZ" Тогда + ДанныеОтвета=СинхронизацияУТ.ЗапросДанныеДляМаркетов(ДокументОснование, Данные); + postingNumber=ДанныеОтвета.result.posting_number; + конецесли; + структураПоиска=Новый структура(); + структураПоиска.Вставить("КодМП", postingNumber); + структураПоиска.Вставить("Номенклатура", ном); + Рез=НайтиТоварВДокеПоШК(структураПоиска); + если рез=истина тогда + ПараметрыТов = Новый Структура(); + ПараметрыТов.Вставить("КодМП", postingNumber); + ПараметрыТов.Вставить("Номенклатура", ном); + Оповестить("НашлиТоварВПоставке", ПараметрыТов, ЭтаФорма); + ЭтаФорма.Закрыть(); + иначе + Оповестить("НЕнашлиТоварВПоставке", , ЭтаФорма); + ЭтаФорма.Закрыть(); + конецесли; + + + +конецесли; +конецесли; +КонецПроцедуры + +Функция НайтиТоварВДокеПоШК(стрПоиска) + тов=ДокументОснование.Товары.НайтиСтроки(стрПоиска); + если тов <> неопределено И тов.Количество() > 0 Тогда + возврат истина; + иначе + возврат ложь; + конецесли; +КонецФункции + +Функция ПривестиСтрокуВПорядок(Строка, СтрокаПоиска) + ДлинаСтрокиПоиска = СтрДлина(СтрокаПоиска)-1; + ПозицияСтрокиПоиска = СтрНайти(Строка, СтрокаПоиска); + ДлинаСтроки = ПозицияСтрокиПоиска + ДлинаСтрокиПоиска - 1; + НоваяСтрока = Лев(Строка, ДлинаСтроки); + возврат НоваяСтрока; +КонецФункции +Функция НайтиНомВБазе(штрих) + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШтрихкодыУпаковок.Номенклатура.Ссылка КАК НоменклатураСсылка + |ИЗ + | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок + |ГДЕ + | ШтрихкодыУпаковок.Штрихкод = &Штрихкод"; + + Запрос.УстановитьПараметр("Штрихкод", штрих); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Если РезультатЗапроса.Количество()>0 Тогда + возврат РезультатЗапроса[0].НоменклатураСсылка; + КонецЕсли; +КонецФункции \ No newline at end of file diff --git a/CommonForms/ПроверкаКонтрольнойМаркиБПО.xml b/CommonForms/ПроверкаКонтрольнойМаркиБПО.xml new file mode 100644 index 0000000..c333fee --- /dev/null +++ b/CommonForms/ПроверкаКонтрольнойМаркиБПО.xml @@ -0,0 +1,25 @@ + + + + + ПроверкаКонтрольнойМаркиБПО + + + ru + Проверка контрольной марки БПО + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + false + + + + + \ No newline at end of file diff --git a/CommonForms/ПроверкаКонтрольнойМаркиБПО/Ext/Form.xml b/CommonForms/ПроверкаКонтрольнойМаркиБПО/Ext/Form.xml new file mode 100644 index 0000000..159e152 --- /dev/null +++ b/CommonForms/ПроверкаКонтрольнойМаркиБПО/Ext/Form.xml @@ -0,0 +1,90 @@ + +
+ LockOwner + false + false + HorizontalIfPossible + false + false + None + false + false + + Right + + + ПриОткрытии + ПередЗакрытием + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа текст</v8:content> + </v8:item> + + HorizontalIfPossible + Center + None + false + + + + + + + + + + Center + Vertical + None + false + + + + 20 + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проверка кодов маркировки...</v8:content> + </v8:item> + + Center + + + + + Состояние + None + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Состояние</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Any + + + + + + + + + +
\ No newline at end of file diff --git a/CommonForms/ПроверкаКонтрольнойМаркиБПО/Ext/Form/Module.bsl b/CommonForms/ПроверкаКонтрольнойМаркиБПО/Ext/Form/Module.bsl new file mode 100644 index 0000000..501231b --- /dev/null +++ b/CommonForms/ПроверкаКонтрольнойМаркиБПО/Ext/Form/Module.bsl @@ -0,0 +1,68 @@ +#Область ОбработчикиСобытийФормы + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ПараметрыПроверки = ОбщегоНазначенияБПОКлиент.ПараметрПриложения("БПО.ПроверкаКМ"); + ОбщегоНазначенияБПОКлиент.УдалитьПараметрПриложения("БПО.ПроверкаКМ"); + ПараметрыПодключения = ПараметрыПроверки.ПараметрыПодключения; + ДанныеОперации = ПараметрыПроверки.ДанныеОперации; + + Если ТипЗнч(ДанныеОперации.ЗапросыКМ) = Тип("Массив") Тогда + МассивОпераций = ДанныеОперации.ЗапросыКМ; + Иначе + МассивОпераций = Новый Массив(); + МассивОпераций.Добавить(ДанныеОперации.ЗапросыКМ); + КонецЕсли; + + Если МассивОпераций.Количество()=1 Тогда + Отказ = Истина; + Оповещение = ПараметрыПроверки.ОповещениеПриЗавершении; + Иначе + Оповещение = Новый ОписаниеОповещения("НачатьПроверкуКМЗавершение", ЭтотОбъект); + ПодключитьОбработчикОжидания("Подключаемый_СтатусПроверкаКМ", 0.2, Истина); + КонецЕсли; + Элементы.ГруппаТекст.Видимость = Ложь; + Элементы.ГруппаСостояние.Видимость = Истина; + Состояние = 0; + МенеджерОборудованияМаркировкаКлиент.НачатьПроверкуКМ(Оповещение, ПараметрыПодключения, ДанныеОперации); + +КонецПроцедуры + +&НаКлиенте +Процедура НачатьПроверкуКМЗавершение(Результат, Контекст) Экспорт + Закрыть(Результат); +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Результат = МенеджерОборудованияМаркировкаКлиент.СостояниеПроверкиКМ(); + Если Результат.ОбработкаЗавершена Тогда + Возврат; + КонецЕсли; + + Отказ = Истина; + +КонецПроцедуры + +#КонецОбласти + + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура Подключаемый_СтатусПроверкаКМ() + + Результат = МенеджерОборудованияМаркировкаКлиент.СостояниеПроверкиКМ(); + Если Результат.ОбработкаЗавершена Тогда + Состояние = 100; + Возврат; + КонецЕсли; + + Состояние = (Результат.ВыполненоОпераций+1) / Результат.ВсегоОпераций * 100; + ПодключитьОбработчикОжидания("Подключаемый_СтатусПроверкаКМ", 0.2, Истина); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/CommonForms/УправлениеФискальнымУстройством.xml b/CommonForms/УправлениеФискальнымУстройством.xml new file mode 100644 index 0000000..288e50b --- /dev/null +++ b/CommonForms/УправлениеФискальнымУстройством.xml @@ -0,0 +1,25 @@ + + + + + УправлениеФискальнымУстройством + + + ru + Управление фискальным устройством + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + true + + + + + \ No newline at end of file diff --git a/CommonForms/УправлениеФискальнымУстройством/Ext/Form.xml b/CommonForms/УправлениеФискальнымУстройством/Ext/Form.xml new file mode 100644 index 0000000..928f6bb --- /dev/null +++ b/CommonForms/УправлениеФискальнымУстройством/Ext/Form.xml @@ -0,0 +1,191 @@ + +
+ DontBlock + Vertical + useIfNecessary + + Right + false + + + ПриСозданииНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основные операции</v8:content> + </v8:item> + + Vertical + Usual + None + false + + + + + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кассир</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кассир ИНН</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отчет о текущем состоянии расчетов</v8:content> + </v8:item> + + + + ru + Отчет о текущем состоянии расчетов + + + ОтчетОТекущемСостоянииРасчетов + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Закрыть смену</v8:content> + </v8:item> + + + + ru + Закрыть смену + + + ЗакрытьСмену + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Открыть смену</v8:content> + </v8:item> + + + + ru + Открыть смену + + + ОткрытьСмену + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отчет без гашения</v8:content> + </v8:item> + + + + ru + Отчет без гашения + + + ОтчетБезГашения + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выемка денег</v8:content> + </v8:item> + + + + ru + Выемка денег + + + ВыемкаДенег + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Внесение денег</v8:content> + </v8:item> + + + + ru + Внесение денег + + + ВнесениеДенег + + +
\ No newline at end of file diff --git a/CommonForms/УправлениеФискальнымУстройством/Ext/Form/Module.bsl b/CommonForms/УправлениеФискальнымУстройством/Ext/Form/Module.bsl new file mode 100644 index 0000000..e2be345 --- /dev/null +++ b/CommonForms/УправлениеФискальнымУстройством/Ext/Form/Module.bsl @@ -0,0 +1,192 @@ + +#Область ОбработчикиСобытий + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ТекущийКассир = МенеджерОборудованияКлиентСервер.ТекущийКассирДляФискальныхОпераций(); + Кассир = ТекущийКассир.Кассир; + КассирИНН = ТекущийКассир.КассирИНН; + + ИнкассацияДоступна = МенеджерОборудования.ДоступноИнкассацияВУправлениеФискальнымУстройством(); + Элементы.ВнесениеДенег.Видимость = ИнкассацияДоступна; + Элементы.ВыемкаДенег.Видимость = ИнкассацияДоступна; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОперацияЗавершение(РезультатВыполнения, Параметры) Экспорт + + Доступность = Истина; + + ТекстСообщения = ?(РезультатВыполнения.Результат, НСтр("ru='Операция успешно завершена.'"), РезультатВыполнения.ОписаниеОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьСмену(Команда) + + ВыполнитьОперацию("ОткрытьСмену"); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьСмену(Команда) + + ВыполнитьОперацию("ЗакрытьСмену"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВнесениеДенег(Команда) + + ВыполнитьОперацию("Внесение"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыемкаДенег(Команда) + + ВыполнитьОперацию("Выемка"); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтчетОТекущемСостоянииРасчетов(Команда) + + ВыполнитьОперацию("ОтчетОТекущемСостоянииРасчетов"); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтчетБезГашения(Команда) + + ВыполнитьОперацию("ОтчетБезГашения"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОперацию(Команда) + + ОчиститьСообщения(); + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ПринтерЧеков = Истина; + ПоддерживаемыеТипы.ККТ = Истина; + + ДополнительныеПараметры = Новый Структура("Команда", Команда); + + Если Команда = "Внесение" Или Команда = "Выемка" Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьОперациюВыбораУстройстваИнкассация", ЭтотОбъект, ДополнительныеПараметры); + Иначе + ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьОперациюВыбораУстройства", ЭтотОбъект, ДополнительныеПараметры); + КонецЕсли; + МенеджерОборудованияКлиент.ВыбратьУстройство(ОписаниеОповещения, ПоддерживаемыеТипы, + НСтр("ru='Выберите фискальное устройство'"), + НСтр("ru='Фискальное устройство не подключено.'"), + НСтр("ru='Фискальное устройство не выбрано.'")); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОперациюВыбораУстройстваИнкассация(РезультатВыбора, ДополнительныеПараметры) Экспорт + + Если НЕ РезультатВыбора.Результат Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(РезультатВыбора.ОписаниеОшибки); + Возврат; + КонецЕсли; + + СуммаОперации = 0; + + Если ДополнительныеПараметры.Команда = "Внесение" Тогда + ЗаголовокОкна = НСтр("ru='Сумма внесения'"); + Иначе + ЗаголовокОкна = НСтр("ru='Сумма выемки'"); + КонецЕсли; + + ПараметрыПослеВводаЧисла = Новый Структура; + ПараметрыПослеВводаЧисла.Вставить("СуммаОперации", СуммаОперации); + ПараметрыПослеВводаЧисла.Вставить("ИдентификаторУстройства", РезультатВыбора.ИдентификаторУстройства); + ПараметрыПослеВводаЧисла.Вставить("Команда", ДополнительныеПараметры.Команда); + + ОповещениеПослеВводеЧисла = Новый ОписаниеОповещения("ИнкассацияЗавершение", ЭтотОбъект, ПараметрыПослеВводаЧисла); + + ПоказатьВводЧисла(ОповещениеПослеВводеЧисла, СуммаОперации, ЗаголовокОкна, 15, 2); + +КонецПроцедуры + +&НаКлиенте +Процедура ИнкассацияЗавершение(Результат, ДополнительныеПараметры) Экспорт + + СуммаОперации = ?(Результат = Неопределено, ДополнительныеПараметры.СуммаОперации, Результат); + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Доступность = Ложь; + + ПараметрыОперации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыИнкассации(); + ПараметрыОперации.ТипИнкассации = ?(ДополнительныеПараметры.Команда = "Внесение" , 1, 0); + ПараметрыОперации.Сумма = СуммаОперации; + ПараметрыОперации.Кассир = Кассир; + ПараметрыОперации.КассирИНН = КассирИНН; + + ОповещениеПриЗавершении = Новый ОписаниеОповещения("ОперацияЗавершение", ЭтотОбъект); + ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьИнкассациюНаФискальномУстройстве(ОповещениеПриЗавершении, УникальныйИдентификатор, + ДополнительныеПараметры.ИдентификаторУстройства, ПараметрыОперации); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОперациюВыбораУстройства(РезультатВыбора, ДополнительныеПараметры) Экспорт + + Если НЕ РезультатВыбора.Результат Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(РезультатВыбора.ОписаниеОшибки); + Возврат; + КонецЕсли; + + ОчиститьСообщения(); + Доступность = Ложь; + + ПараметрыОперации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены(); + ПараметрыОперации.Кассир = Кассир; + ПараметрыОперации.КассирИНН = КассирИНН; + + ОповещениеПриЗавершении = Новый ОписаниеОповещения("ОперацияЗавершение", ЭтотОбъект); + + Если ДополнительныеПараметры.Команда = "ОткрытьСмену" Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяКассоваяСмена() Тогда + ДополнительныеПараметры = Новый Структура(); + МодульКассовыеСменыКлиентПереопределяемый = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("КассовыеСменыКлиентПереопределяемый"); + МодульКассовыеСменыКлиентПереопределяемый.УправлениеФУЗаполнитьДополнительныеПараметрыПередОткрытиемСмены(РезультатВыбора.ИдентификаторУстройства, ДополнительныеПараметры); + Иначе + ДополнительныеПараметры = Неопределено; + КонецЕсли; + ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьОткрытиеСменыНаФискальномУстройстве(ОповещениеПриЗавершении, + УникальныйИдентификатор, РезультатВыбора.ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры); + ИначеЕсли ДополнительныеПараметры.Команда = "ЗакрытьСмену" Тогда + ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьЗакрытиеСменыНаФискальномУстройстве(ОповещениеПриЗавершении, + УникальныйИдентификатор, РезультатВыбора.ИдентификаторУстройства, ПараметрыОперации); + ИначеЕсли ДополнительныеПараметры.Команда = "ОтчетОТекущемСостоянииРасчетов" Тогда + ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФормированиеОтчетаОТекущемСостоянииРасчетов(ОповещениеПриЗавершении, + УникальныйИдентификатор, РезультатВыбора.ИдентификаторУстройства, ПараметрыОперации); + ИначеЕсли ДополнительныеПараметры.Команда = "ОтчетБезГашения" Тогда + ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФормированиеОтчетаБезГашения(ОповещениеПриЗавершении, + УникальныйИдентификатор, РезультатВыбора.ИдентификаторУстройства, ПараметрыОперации); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + diff --git a/CommonForms/УправлениеФискальнымУстройством/Ext/Help.xml b/CommonForms/УправлениеФискальнымУстройством/Ext/Help.xml new file mode 100644 index 0000000..1d2b70b --- /dev/null +++ b/CommonForms/УправлениеФискальнымУстройством/Ext/Help.xml @@ -0,0 +1,4 @@ + + + ru + \ No newline at end of file diff --git a/CommonForms/УправлениеФискальнымУстройством/Ext/Help/ru.html b/CommonForms/УправлениеФискальнымУстройством/Ext/Help/ru.html new file mode 100644 index 0000000..e644b00 --- /dev/null +++ b/CommonForms/УправлениеФискальнымУстройством/Ext/Help/ru.html @@ -0,0 +1,3 @@ + +

Форма "Управление фискальным регистратором".

+

Форма предназначена для работы c фискальным регистратором.

\ No newline at end of file diff --git a/CommonForms/УправлениеЭквайринговымТерминалом.xml b/CommonForms/УправлениеЭквайринговымТерминалом.xml new file mode 100644 index 0000000..b72bbff --- /dev/null +++ b/CommonForms/УправлениеЭквайринговымТерминалом.xml @@ -0,0 +1,25 @@ + + + + + УправлениеЭквайринговымТерминалом + + + ru + Управление эквайринговым терминалом + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + true + + + + + \ No newline at end of file diff --git a/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Form.xml b/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Form.xml new file mode 100644 index 0000000..dd893ba --- /dev/null +++ b/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Form.xml @@ -0,0 +1,238 @@ + +
+ DontBlock + Horizontal + false + useIfNecessary + + false + + + ПриСозданииНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основные операции</v8:content> + </v8:item> + + Vertical + Usual + None + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительные операции</v8:content> + </v8:item> + + Vertical + Usual + None + + + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер ссылки операции</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оплатить картой</v8:content> + </v8:item> + + + + ru + Оплатить картой + + + ОплатитьПлатежнойКартой + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вернуть платеж по карте</v8:content> + </v8:item> + + + + ru + Вернуть платеж по карте + + + ВернутьПлатежПоКарте + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отменить платеж по карте</v8:content> + </v8:item> + + + + ru + Отменить платеж по карте + + + ОтменитьПлатежПоКарте + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выполнить сверку итогов</v8:content> + </v8:item> + + + + ru + Выполнить сверку итогов + + + ВыполнитьСверкуИтогов + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выполнить преавторизацию</v8:content> + </v8:item> + + + + ru + Выполнить преавторизацию + + + ВыполнитьПреавторизацию + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Завершить преавторизацию</v8:content> + </v8:item> + + + + ru + Завершить преавторизацию + + + ЗавершитьПреавторизацию + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отменить преавторизацию</v8:content> + </v8:item> + + + + ru + Отменить преавторизацию + + + ОтменитьПреавторизацию + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Напечатать последний слип чек</v8:content> + </v8:item> + + + + ru + Напечатать последний слип чек + + + НапечататьПоследнийСлипЧек + DontUse + + +
\ No newline at end of file diff --git a/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Form/Module.bsl b/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Form/Module.bsl new file mode 100644 index 0000000..30e2d46 --- /dev/null +++ b/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Form/Module.bsl @@ -0,0 +1,143 @@ +#Область ОбработчикиСобытий + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыполнитьОперациюЗавершение(РезультатВыполнения, Параметры) Экспорт + + Доступность = Истина; + + Если РезультатВыполнения.Результат Тогда + ТекстСообщения = НСтр("ru = 'Операция выполнена успешно.'"); + Иначе + ТекстСообщения = РезультатВыполнения.ОписаниеОшибки; + КонецЕсли; + + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОперациюПоПлатежнойКарте(ТипТранзакции) + + ОчиститьСообщения(); + ПараметрыОперации = Новый Структура(); + ПараметрыОперации.Вставить("ТипТранзакции" , ТипТранзакции); + ПараметрыОперации.Вставить("УказатьДополнительныеДанные" , Истина); + ПараметрыОперации.Вставить("ЗапретРедактированияСуммы" , Ложь); + + ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьОперациюПоПлатежнойКартеЗавершение", ЭтотОбъект, ПараметрыОперации); + ОткрытьФорму("Справочник.ПодключаемоеОборудование.Форма.ФормаАвторизацииЭТ", ПараметрыОперации,,, ,, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОперациюПоПлатежнойКартеЗавершение(Результат, Параметры) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + + Если НЕ Параметры.Свойство("ТипТранзакции") Тогда + ТекстСообщения = НСтр("ru = 'Не указан тип транзакции.'"); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + Возврат; + КонецЕсли; + + Доступность = Ложь; + ПараметрыОперации = ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации(); + ПараметрыОперации.ТипТранзакции = Параметры.ТипТранзакции; + ПараметрыОперации.СуммаОперации = Результат.Сумма; + ПараметрыОперации.НомерЧека = ?(Результат.Свойство("НомерЧека") , Результат.НомерЧека, ""); + ПараметрыОперации.НомерЧекаЭТ = ?(Результат.Свойство("НомерЧекаЭТ"), Результат.НомерЧекаЭТ, ""); + + ПараметрыОперации.СсылочныйНомер = Результат.СсылочныйНомер; + + Оповещение = Новый ОписаниеОповещения("ВыполнитьОперациюЗавершение", ЭтотОбъект); + ОборудованиеПлатежныеСистемыКлиент.НачатьВыполнениеОперацииНаЭквайринговомТерминале(Оповещение, УникальныйИдентификатор, Неопределено, ПараметрыОперации); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОплатитьПлатежнойКартой(Команда) + + ВыполнитьОперациюПоПлатежнойКарте("AuthorizeSales"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВернутьПлатежПоКарте(Команда) + + ВыполнитьОперациюПоПлатежнойКарте("AuthorizeRefund"); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьПлатежПоКарте(Команда) + + ВыполнитьОперациюПоПлатежнойКарте("AuthorizeVoid"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьПреавторизацию(Команда) + + ВыполнитьОперациюПоПлатежнойКарте("AuthorizePreSales"); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьПреавторизацию(Команда) + + ВыполнитьОперациюПоПлатежнойКарте("AuthorizeCompletion"); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьПреавторизацию(Команда) + + ВыполнитьОперациюПоПлатежнойКарте("AuthorizeVoidPreSales"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьСверкуИтогов(Команда) + + ОчиститьСообщения(); + Доступность = Ложь; + + ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьОперациюЗавершение", ЭтотОбъект); + ОборудованиеПлатежныеСистемыКлиент.НачатьВыполнениеСверкиИтоговНаЭквайринговомТерминале(ОписаниеОповещения, УникальныйИдентификатор) + +КонецПроцедуры + +&НаКлиенте +Процедура НапечататьПоследнийСлипЧек(Команда) + + ОчиститьСообщения(); + ПоследнийСлипЧек = ОборудованиеПлатежныеСистемыКлиент.ПоследнийСлипЧек(); + Если Не ПустаяСтрока(ПоследнийСлипЧек) Тогда + Доступность = Ложь; + ПараметрыОперации = Новый Структура("СтрокиТекста", ПоследнийСлипЧек); + Оповещение = Новый ОписаниеОповещения("ВыполнитьОперациюЗавершение", ЭтотОбъект); + ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьПечатьТекста(Оповещение, УникальныйИдентификатор, Неопределено, ПараметрыОперации); + Иначе + ТекстСообщения = НСтр("ru = 'Отсутствует последний слип чек.'"); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Help.xml b/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Help.xml new file mode 100644 index 0000000..1d2b70b --- /dev/null +++ b/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Help.xml @@ -0,0 +1,4 @@ + + + ru + \ No newline at end of file diff --git a/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Help/ru.html b/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Help/ru.html new file mode 100644 index 0000000..4754959 --- /dev/null +++ b/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Help/ru.html @@ -0,0 +1,3 @@ + +

Форма "Управление эквайринговым терминалом".

+

Форма предназначена для работы c эквайринговым терминалом.

\ No newline at end of file diff --git a/CommonForms/ФормаАвторизации.xml b/CommonForms/ФормаАвторизации.xml new file mode 100644 index 0000000..04308cc --- /dev/null +++ b/CommonForms/ФормаАвторизации.xml @@ -0,0 +1,25 @@ + + + + + ФормаАвторизации + + + ru + Форма авторизации + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + false + + + + + \ No newline at end of file diff --git a/CommonForms/ФормаАвторизации/Ext/Form.xml b/CommonForms/ФормаАвторизации/Ext/Form.xml new file mode 100644 index 0000000..bb6884e --- /dev/null +++ b/CommonForms/ФормаАвторизации/Ext/Form.xml @@ -0,0 +1,224 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Авторизация</v8:content> + </v8:item> + + LockWholeInterface + false + Vertical + Top + + + + 0 + ЗакрытьПриложение + + + + Abort + Cancel + CustomizeForm + Help + Ignore + No + OK + OpenFromMainServer + OpenFromStandaloneServer + RestoreValues + Retry + SaveValues + Yes + + false + true + + false + + + + + + ПриОткрытии + ПередЗакрытием + ВнешнееСобытие + ПриСозданииНаСервере + + + + 13 + 8 + Center + Proportionally + + Picture.png + false + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа авторизации</v8:content> + </v8:item> + + + + ru + Группа авторизации + + + Center + Vertical + WeakSeparation + false + + + + style:AccentColor + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Введите пароль либо отсканируйте QR-код доступа</v8:content> + </v8:item> + + + + + + Логин + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Логин</v8:content> + </v8:item> + + style:ButtonTextColor + + 5 + true + + + + + Пароль + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пароль</v8:content> + </v8:item> + + style:ButtonTextColor + + 5 + true + true + + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Логин</v8:content> + </v8:item> + + + cfg:CatalogRef.Пользователи + + ShowError + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пароль</v8:content> + </v8:item> + + + xs:string + + 150 + Variable + + + ShowError + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Авторизоваться</v8:content> + </v8:item> + + + + ru + Авторизоваться + + + Авторизоваться + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Закрыть приложение</v8:content> + </v8:item> + + + + ru + Закрыть приложение + + + ЗакрытьПриложение + + + + + + xs:boolean + + + + \ No newline at end of file diff --git a/CommonForms/ФормаАвторизации/Ext/Form/Items/ФотоЗаставки/Picture.png b/CommonForms/ФормаАвторизации/Ext/Form/Items/ФотоЗаставки/Picture.png new file mode 100644 index 0000000..e9948d4 Binary files /dev/null and b/CommonForms/ФормаАвторизации/Ext/Form/Items/ФотоЗаставки/Picture.png differ diff --git a/CommonForms/ФормаАвторизации/Ext/Form/Module.bsl b/CommonForms/ФормаАвторизации/Ext/Form/Module.bsl new file mode 100644 index 0000000..95be842 --- /dev/null +++ b/CommonForms/ФормаАвторизации/Ext/Form/Module.bsl @@ -0,0 +1,276 @@ +&НаКлиенте +Перем УспешноВошли; +&НаСервере +Процедура АвторизоватьсяНаСервере() + Константы.АвторизированныйПользователь.Установить(Логин); +КонецПроцедуры + +&НаКлиенте +Процедура Авторизоваться(Команда) + Если ПроверитьЗаполнение() Тогда + Если ПолучитьХешПароля() Тогда + УспешноВошли=Истина; + ЭтаФорма.Закрыть(); + АвторизоватьсяНаСервере(); + Иначе + Пароль=""; + Сообщить("Введен неправильный пароль"); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + если НЕ УспешноВошли Тогда + Отказ=Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьПриложение(Команда) +ЗавершитьРаботуСистемы(); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + УспешноВошли=Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) + + Если Событие <> "Штрихкод" Тогда + Возврат; + КонецЕсли; + + Если Не СтрНачинаетсяС(Данные, "TSD1") Тогда + Возврат; + КонецЕсли; + + Если АвторизоватьсяПоQRНаСервере(Данные) Тогда + УспешноВошли = Истина; + Закрыть(); + Иначе + Сообщить("QR-код доступа недействителен"); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция АвторизоватьсяПоQRНаСервере(ДанныеQR) + + Данные = РасшифроватьQRАвторизацииТСД(ДанныеQR); + Если Данные = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Пользователь = Справочники.Пользователи.НайтиПоНаименованию(Данные.Логин); + Если Не ЗначениеЗаполнено(Пользователь) Тогда + Возврат Ложь; + КонецЕсли; + + Логин = Пользователь; + Пароль = Данные.Пароль; + + Если Не ПолучитьХешПароля() Тогда + Возврат Ложь; + КонецЕсли; + + Константы.АвторизированныйПользователь.Установить(Логин); + Возврат Истина; + +КонецФункции + +Функция КлючQRАвторизацииТСД() + Возврат СокрЛП(Константы.КлючQRАвторизацииТСД.Получить()); +КонецФункции + +Функция РасшифроватьQRАвторизацииТСД(ДанныеQR) + + Если Не СтрНачинаетсяС(ДанныеQR, "TSD1") Тогда + Возврат Неопределено; + КонецЕсли; + + Попытка + ОткрытыйТекст = РасшифроватьXOR(Сред(ДанныеQR, 5), КлючQRАвторизацииТСД()); + Исключение + Возврат Неопределено; + КонецПопытки; + + Части = СтрРазделить(ОткрытыйТекст, Символ(31), Ложь); + Если Части.Количество() <> 3 Тогда + Возврат Неопределено; + КонецЕсли; + + ЛогинQR = Части[0]; + ПарольQR = Части[1]; + Подпись = ВРег(Части[2]); + + Если Подпись <> ПодписьДанныхQR(ЛогинQR, ПарольQR) Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат Новый Структура("Логин, Пароль", ЛогинQR, ПарольQR); + +КонецФункции + +Функция ПодписьДанныхQR(ЛогинQR, ПарольQR) + + Хеш = Новый ХешированиеДанных(ХешФункция.SHA1); + Хеш.Добавить(КлючQRАвторизацииТСД() + ЛогинQR + Символ(31) + ПарольQR); + Хекс = СтрЗаменить(ВРег(Строка(Хеш.ХешСумма)), " ", ""); + Возврат Лев(Хекс, 8); + +КонецФункции + +Функция РасшифроватьXOR(СтрокаBase64, Ключ) + + Двоичные = Base64Значение(СтрокаBase64); + Буфер = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Двоичные); + Поток = КлючевойПотокQR(Ключ, Буфер.Размер); + + Для Индекс = 0 По Буфер.Размер - 1 Цикл + Буфер[Индекс] = ПобитовыйXORБайт(Буфер[Индекс], Поток[Индекс]); + КонецЦикла; + + Возврат ПолучитьСтрокуИзДвоичныхДанных( + ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Буфер), + КодировкаТекста.UTF8); + +КонецФункции + +Функция КлючевойПотокQR(Ключ, Размер) + + Поток = Новый БуферДвоичныхДанных(Размер); + Смещение = 0; + Счетчик = 0; + + Пока Смещение < Размер Цикл + Хеш = Новый ХешированиеДанных(ХешФункция.SHA1); + Хеш.Добавить(Ключ + "#" + Формат(Счетчик, "ЧН=0; ЧГ=0")); + Блок = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Хеш.ХешСумма); + + Для Индекс = 0 По Блок.Размер - 1 Цикл + Если Смещение >= Размер Тогда + Прервать; + КонецЕсли; + Поток[Смещение] = Блок[Индекс]; + Смещение = Смещение + 1; + КонецЦикла; + + Счетчик = Счетчик + 1; + КонецЦикла; + + Возврат Поток; + +КонецФункции + +Функция ПобитовыйXORБайт(А, Б) + + Результат = 0; + Бит = 1; + Пока Бит <= 128 Цикл + Если (Цел(А / Бит) % 2) <> (Цел(Б / Бит) % 2) Тогда + Результат = Результат + Бит; + КонецЕсли; + Бит = Бит * 2; + КонецЦикла; + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Загрузка новых пользователей + Xmlответ=СинхронизацияУТ.GetUsers(); + Чтение=Новый ЧтениеXML; + Чтение.УстановитьСтроку(Xmlответ); + Фабрика=Новый ФабрикаXDTO; + Попытка + ОбXDTO = Фабрика.ПрочитатьXML(Чтение).Body.GetUsersResponse.return; + Если Не ОбXDTO.Value.Количество() = 0 Тогда + Для НомераМассива = 0 По ОбXDTO.Value.Количество() - 1 Цикл + ЭлементМассива = ОбXDTO.Value.Получить(НомераМассива); // элемент массива. На выходе ОбъектXDTO + ЗаписатьПользователяВБазу(ЭлементМассива); + КонецЦикла; + КонецЕсли; + Исключение + Сообщить(xmlответ + Символы.ПС + + "------------------------------" + + Символы.ПС + + ОписаниеОшибки()); + КонецПопытки; + // Получаем список подключенных принтеров к ПК + ЗаписатьПринтерыВТСД(СинхронизацияУТ.GetPrints()); +КонецПроцедуры + +Процедура ЗаписатьПользователяВБазу(ЭлементМассива) + СпрСсылка=справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор(ЭлементМассива.Property.Получить( + 0).Value)); + СпрСсылка=СпрСсылка.ПолучитьОбъект(); + Если СпрСсылка = Неопределено Тогда + СпрСсылка=справочники.Пользователи.СоздатьЭлемент(); + спрСсылка.Наименование=ЭлементМассива.Property.Получить(1).Value; + спрСсылка.Пароль = ЭлементМассива.Property.Получить(2).Value; + СпрСсылка.УстановитьСсылкуНового(справочники.Пользователи.ПолучитьСсылку( + Новый УникальныйИдентификатор(Новый УникальныйИдентификатор(ЭлементМассива.Property.Получить( + 0).Value)))); + спрСсылка.Записать(); + Иначе + спрСсылка.Наименование=ЭлементМассива.Property.Получить(1).Value; + спрСсылка.Пароль = ЭлементМассива.Property.Получить(2).Value; + спрСсылка.Записать(); + КонецЕсли; +КонецПроцедуры + +Процедура ЗаписатьПринтерыВТСД(МассивОтвета) + Для Каждого Элемент из МассивОтвета Цикл + Если ЗначениеЗаполнено(НайтиПринтерВБазе(Элемент.ИдентификаторРабМеста, Элемент.ИмяПринтера + , Элемент.НаименованиеМеста, Элемент.ПортПринтера)) Тогда Продолжить; КонецЕсли; + Спр = Справочники.ПринтерыДляПечати.СоздатьЭлемент(); + Спр.ИмяПринтера = Элемент.ИмяПринтера; + Спр.ПортПринтера = Элемент.ПортПринтера; + Спр.ИдентификаторРабМеста = Элемент.ИдентификаторРабМеста; + Спр.Наименование = Элемент.НаименованиеМеста; + Спр.НаименованиеМеста = Элемент.НаименованиеМеста; + Спр.Записать(); + КонецЦикла; +КонецПроцедуры + +Функция НайтиПринтерВБазе(ИдентификаторРабМеста, ИмяПринтера, НаименованиеМеста, ПортПринтера) + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПринтерыДляПечати.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПринтерыДляПечати КАК ПринтерыДляПечати + |ГДЕ + | ПринтерыДляПечати.ИмяПринтера = &ИмяПринтера + | И ПринтерыДляПечати.ПортПринтера = &ПортПринтера + | И ПринтерыДляПечати.ИдентификаторРабМеста = &ИдентификаторРабМеста + | И ПринтерыДляПечати.НаименованиеМеста = &НаименованиеМеста"; + + Запрос.УстановитьПараметр("ИдентификаторРабМеста", ИдентификаторРабМеста); + Запрос.УстановитьПараметр("ИмяПринтера", ИмяПринтера); + Запрос.УстановитьПараметр("НаименованиеМеста", НаименованиеМеста); + Запрос.УстановитьПараметр("ПортПринтера", ПортПринтера); + + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Если РезультатЗапроса.Количество() > 0 Тогда + Возврат РезультатЗапроса[0].Ссылка; + КонецЕсли; + возврат неопределено; +КонецФункции + +Функция ПолучитьХешПароля() + СтарыйПароль = СтрЗаменить(Base64Значение(Лев(Справочники.Пользователи.НайтиПоНаименованию(Логин).Пароль, Найти( + Справочники.Пользователи.НайтиПоНаименованию(Логин).Пароль, ",") - 1)), " ", ""); + ХешSHA1 = Новый ХешированиеДанных(ХешФункция.SHA1); + ХешSHA1.Добавить(Пароль); + Результат=СтрЗаменить(Строка(ХешSHA1.ХешСумма), " ", ""); + Если СтарыйПароль = Результат Тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; +КонецФункции \ No newline at end of file diff --git a/CommonModules/ВнешниеКомпонентыБПО.xml b/CommonModules/ВнешниеКомпонентыБПО.xml new file mode 100644 index 0000000..9d037a6 --- /dev/null +++ b/CommonModules/ВнешниеКомпонентыБПО.xml @@ -0,0 +1,23 @@ + + + + + ВнешниеКомпонентыБПО + + + ru + Внешние компоненты БПОСервер + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ВнешниеКомпонентыБПО/Ext/Module.bsl b/CommonModules/ВнешниеКомпонентыБПО/Ext/Module.bsl new file mode 100644 index 0000000..1ba6560 --- /dev/null +++ b/CommonModules/ВнешниеКомпонентыБПО/Ext/Module.bsl @@ -0,0 +1,313 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Подключает на сервере 1С:Предприятия внешнюю компоненту из хранилища внешних компонент, +// выполненную по технологии Native API или COM. +// В модели сервиса разрешено только подключение общих внешних компонент, одобренных администратором сервиса. +// +// Параметры: +// ИмяОбъекта - Строка - идентификатор объекта внешней компоненты. +// ПолноеИмяМакета - Строка - имя макет где содержится компонента. +// +// Возвращаемое значение: +// ОбъектВнешнейКомпоненты - экземпляр объекта внешней компоненты; +// +Функция ПодключитьКомпоненту(Знач ИмяОбъекта, Знач ПолноеИмяМакета) Экспорт + + ВнешняяКомпонента = Неопределено; + + Изолированно = ИзолированноеПодключенияВнешнихКомпонентНаСервере(); + +#Если НЕ МобильноеПриложениеСервер Тогда + УстановитьОтключениеБезопасногоРежима(Истина); + + // Вызов БСП + Если ОбщегоНазначенияБПО.ДоступноИспользованиеРазделенныхДанных() + И ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеКомпоненты") Тогда + + МодульВнешниеКомпонентыСервер = ОбщегоНазначенияБПО.ОбщийМодуль("ВнешниеКомпонентыСервер"); + ПараметрыПодключения = МодульВнешниеКомпонентыСервер.ПараметрыПодключения(); + ПараметрыПодключения.Изолированно = Изолированно; + + РезультатПодключения = МодульВнешниеКомпонентыСервер.ПодключитьКомпоненту(ИмяОбъекта, , ПараметрыПодключения); + Если РезультатПодключения.Подключено Тогда + ВнешняяКомпонента = РезультатПодключения.ПодключаемыйМодуль; + КонецЕсли; + + КонецЕсли; + // Конец Вызов БСП +#КонецЕсли + + Если ВнешняяКомпонента = Неопределено Тогда + ВнешняяКомпонента = ПодключитьКомпонентуИзМакета(ИмяОбъекта, ПолноеИмяМакета, Изолированно); + КонецЕсли; + + Возврат ВнешняяКомпонента; + +КонецФункции + +// Информация о внешней компоненте по идентификатору и версии. +// +// Параметры: +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка - версия компоненты. +// +// Возвращаемое значение: +// Структура: +// * Существует - Булево - признак отсутствия компоненты. +// * ДоступноРедактирование - Булево - признак того, что компоненту может изменить администратор области. +// * ОписаниеОшибки - Строка - краткое описание ошибки. +// * Идентификатор - Строка - идентификатор объекта внешней компоненты. +// * Версия - Строка - версия компоненты. +// * Наименование - Строка - наименование и краткая информация о компоненте. +// +Функция ИнформацияОКомпоненте(Идентификатор, Версия = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульВнешниеКомпонентыВызовСервера = ОбщегоНазначенияБПО.ОбщийМодуль("ВнешниеКомпонентыВызовСервера"); + Результат = МодульВнешниеКомпонентыВызовСервера.ИнформацияОКомпоненте(Идентификатор, Версия); + // Конец Вызов БСП + + Иначе + Результат = РезультатИнформацияОКомпоненте(); + Результат.Идентификатор = Идентификатор; + Результат.Существует = Ложь; + Результат.ОписаниеОшибки = НСтр("ru = 'Внешняя компонента не найдена'"); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает информацию о компоненте из файла внешней компоненты. +// +// Параметры: +// ДвоичныеДанные - ДвоичныеДанные - двоичные данные файла компоненты. +// ВыполнятьРазборИнфоФайла - Булево - требуется ли дополнительно анализировать +// данные файла INFO.XML, если он есть. +// ПараметрыПоискаДополнительнойИнформации - см. ВнешниеКомпонентыБПОКлиент.ПараметрыЗагрузки. +// +// Возвращаемое значение: +// Структура: +// * Разобрано - Булево - Истина, если информация о компоненте успешно извлечена. +// * Реквизиты - см. РеквизитыКомпоненты +// * ДвоичныеДанные - Неопределено, ДвоичныеДанные - выгрузка файла компоненты. +// * ДополнительнаяИнформация - Соответствие из КлючИЗначение - информация, полученная по переданным параметрам поиска. +// * ОписаниеОшибки - Строка - текст ошибки в случае, если Разобрано = Ложь. +// +Функция ИнформацияОКомпонентеИзФайла(ДвоичныеДанные, ВыполнятьРазборИнфоФайла = Истина, + Знач ПараметрыПоискаДополнительнойИнформации = Неопределено) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Разобрано", Ложь); + Результат.Вставить("Реквизиты", Новый Структура); + Результат.Вставить("ДвоичныеДанные", Неопределено); + Результат.Вставить("ДополнительнаяИнформация", Новый Соответствие); + Результат.Вставить("ОписаниеОшибки", ""); + + Если ОбщегоНазначенияБПО.ИспользуетсяБСП() Тогда + // Вызов БСП + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеКомпоненты") Тогда + МодульВнешниеКомпонентыСлужебный = ОбщегоНазначенияБПО.ОбщийМодуль("ВнешниеКомпонентыСлужебный"); + Результат = МодульВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла( + ДвоичныеДанные, ВыполнятьРазборИнфоФайла, ПараметрыПоискаДополнительнойИнформации); + КонецЕсли; + // Конец Вызов БСП + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Подключает компоненту, выполненную по технологии Native API и COM. +// Компонента должна храниться в макете конфигурации в виде ZIP-архива. +// +// Параметры: +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// ПолноеИмяМакета - Строка - полное имя макета конфигурации, хранящего ZIP-архив. +// Изолированно - ТипПодключенияВнешнейКомпоненты +// +// Возвращаемое значение: +// Неопределено, ОбъектВнешнейКомпоненты - экземпляр объекта внешней компоненты; +// +Функция ПодключитьКомпонентуИзМакета(Знач Идентификатор, Знач ПолноеИмяМакета, Знач Изолированно = Ложь) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщегоНазначенияБПО.ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.ПодключитьКомпонентуИзМакета(Идентификатор, ПолноеИмяМакета, Изолированно); + // Конец Вызов БСП + + Иначе + ПодключаемыйМодуль = Неопределено; + + Если Не МакетСуществует(ПолноеИмяМакета) Тогда + ВызватьИсключение СтрШаблон( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на сервере + |из %2 + |по причине: + |Подключение на сервере не из макета запрещено'"), + Идентификатор, + ПолноеИмяМакета); + КонецЕсли; + + Местоположение = ПолноеИмяМакета; + СимволическоеИмя = Идентификатор + "SymbolicName"; + + #Если Не МобильноеПриложениеСервер Тогда + Результат = ПодключитьВнешнююКомпоненту(Местоположение, СимволическоеИмя, , ТипПодключенияКомпоненты(Изолированно)); + #Иначе + Результат = ПодключитьВнешнююКомпоненту(Местоположение, СимволическоеИмя); + #КонецЕсли + + Если Результат Тогда + + Попытка + ПодключаемыйМодуль = Новый("AddIn." + СимволическоеИмя + "." + Идентификатор); + Если ПодключаемыйМодуль = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Оператор Новый вернул Неопределено'"); + КонецЕсли; + Исключение + ПодключаемыйМодуль = Неопределено; + ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если ПодключаемыйМодуль = Неопределено Тогда + + ТекстОшибки = СтрШаблон( + НСтр("ru = 'Не удалось создать объект внешней компоненты ""%1"", подключенной на сервере + |из макета ""%2"", + |по причине: + |%3'"), + Идентификатор, + Местоположение, + ТекстОшибки); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Подключение внешней компоненты на сервере'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()), + ТекстОшибки); + КонецЕсли; + + Иначе + + ТекстОшибки = СтрШаблон( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на сервере + |из макета ""%2"" + |по причине: + |Платформа вернула Ложь при подключении внешней компоненты.'"), + Идентификатор, + Местоположение); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Подключение внешней компоненты на сервере'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()), + ТекстОшибки); + КонецЕсли; + + Возврат ПодключаемыйМодуль; + КонецЕсли; + +КонецФункции + +// Изолированное подключения внешних компонент на сервере +// Возвращаемое значение: +// Булево - Изолированно +// +Функция ИзолированноеПодключенияВнешнихКомпонентНаСервере() Экспорт + + Изолированно = Ложь; + СтандартнаяОбработка = Истина; + ВнешниеКомпонентыБПОПереопределяемый.ИзолированноеПодключенияВнешнихКомпонентНаСервере(Изолированно, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Ложь, Изолированно); + Возврат Результат; + +КонецФункции + +// Изолированное подключения внешних компонент на сервере +// Возвращаемое значение: +// Булево - Изолированно +// +Функция ИзолированноеПодключенияВнешнихКомпонентНаКлиенте() Экспорт + + Изолированно = Неопределено; + СтандартнаяОбработка = Истина; + ВнешниеКомпонентыБПОПереопределяемый.ИзолированноеПодключенияВнешнихКомпонентНаКлиенте(Изолированно, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Неопределено, Изолированно); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция РезультатИнформацияОКомпоненте() + + Результат = Новый Структура; + Результат.Вставить("Существует", Ложь); + Результат.Вставить("ДоступноРедактирование", Ложь); + Результат.Вставить("Идентификатор", ""); + Результат.Вставить("Версия", ""); + Результат.Вставить("Наименование", ""); + Результат.Вставить("ОписаниеОшибки", ""); + + Возврат Результат; + +КонецФункции + +// Проверка существования макета по метаданным конфигурации и расширений. +// +// Параметры: +// ПолноеИмяМакета - Строка - полное имя макета. +// +// Возвращаемое значение: +// Булево - признак существования макета. +// +Функция МакетСуществует(ПолноеИмяМакета) + + Макет = Метаданные.НайтиПоПолномуИмени(ПолноеИмяМакета); + Если ТипЗнч(Макет) = Тип("ОбъектМетаданных") Тогда + + Шаблон = Новый Структура("ТипМакета"); + ЗаполнитьЗначенияСвойств(Шаблон, Макет); + ТипМакета = Неопределено; + Если Шаблон.Свойство("ТипМакета", ТипМакета) Тогда + Возврат ТипМакета <> Неопределено; + КонецЕсли; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ТипПодключенияКомпоненты(Изолированно) Экспорт + + Если Изолированно = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + #Если Не МобильноеПриложениеСервер И Не МобильныйАвтономныйСервер Тогда + + Если Изолированно Тогда + Возврат ТипПодключенияВнешнейКомпоненты.Изолированно; + КонецЕсли; + + Возврат ТипПодключенияВнешнейКомпоненты.НеИзолированно; + + #Иначе + + Возврат Неопределено; + + #КонецЕсли + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ВнешниеКомпонентыБПОКлиент.xml b/CommonModules/ВнешниеКомпонентыБПОКлиент.xml new file mode 100644 index 0000000..27ab373 --- /dev/null +++ b/CommonModules/ВнешниеКомпонентыБПОКлиент.xml @@ -0,0 +1,23 @@ + + + + + ВнешниеКомпонентыБПОКлиент + + + ru + Внешние компоненты БПО клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ВнешниеКомпонентыБПОКлиент/Ext/Module.bsl b/CommonModules/ВнешниеКомпонентыБПОКлиент/Ext/Module.bsl new file mode 100644 index 0000000..e1e44d3 --- /dev/null +++ b/CommonModules/ВнешниеКомпонентыБПОКлиент/Ext/Module.bsl @@ -0,0 +1,894 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +#Область ПодключениеВнешнихКомпонент + +// Параметры для вызова процедуры ВнешниеКомпонентыКлиент.ПодключитьКомпоненту. +// +// Возвращаемое значение: +// Структура: +// * Кэшировать - Булево - (по умолчанию Истина) использовать механизм кэширования компонент на клиенте. +// * ПредложитьУстановить - Булево - (по умолчанию Истина) предлагать устанавливать компоненту. +// * ПредложитьЗагрузить - Булево - (по умолчанию Истина) предлагать загрузить компоненту с сайта ИТС. +// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. +// * ИдентификаторыСозданияОбъектов - Массив из Строка - массив строк идентификаторов создания экземпляров модуля объекта, +// используется только для компонент, у которых есть несколько идентификаторов создания объектов, +// при задании параметр Идентификатор будет использоваться только для определения компоненты. +// * Изолированно - Булево, Неопределено - (по умолчанию Неопределено) если Истина, компонента будет подключена +// изолированно, в этом случае внешняя компонента загружается в отдельный процесс операционной системы; +// Ложь - в этом случае внешняя компонента будет выполняться в том же процессе операционной системы, +// который выполняет код встроенного языка; Неопределено - поддерживается поведение платформы по умолчанию: +// изолированно - если компонентой поддерживается только этот режим, не изолированно - в остальных случаях. +// См. https://its.1c.ru/db/v83doc#bookmark:dev:TI000001866 +// +// Пример: +// +// ПараметрыПодключения = ВнешниеКомпонентыКлиент.ПараметрыПодключения(); +// ПараметрыПодключения.ТекстПояснения = +// НСтр("ru = 'Для использования сканера штрихкодов требуется +// |внешняя компонента ""1С:Сканеры штрихкода (NativeApi)"".'"); +// +Функция ПараметрыПодключения() Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент"); + Параметры = МодульВнешниеКомпонентыКлиент.ПараметрыПодключения(); + // Конец Вызов БСП + + Иначе + Параметры = ПараметрыПодключенияБПО(); + КонецЕсли; + Возврат Параметры; + +КонецФункции + +// Подключает компоненту, выполненную по технологии Native API или COM на клиентском компьютере. +// Для веб-клиента предлагается диалог, подсказывающий пользователю действия по установке. +// Выполняет проверку возможности исполнения компоненты на текущем клиенте пользователя. +// +// Параметры: +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка - версия компоненты. +// ПараметрыПодключения - см. ПараметрыПодключения. +// +// Возвращаемое значение: +// Структура - см. РезультатПодключения. +// +Асинх Функция ПодключитьКомпонентуАсинх(Идентификатор, Версия = Неопределено, ПараметрыПодключения = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент"); + Возврат Ждать МодульВнешниеКомпонентыКлиент.ПодключитьКомпонентуАсинх(Идентификатор, Версия, ПараметрыПодключения); + // Конец Вызов БСП + + Иначе + РезультатВыполнения = Новый Структура(); + РезультатВыполнения.Вставить("Подключено", Ложь); + РезультатВыполнения.Вставить("ОписаниеОшибки", НСтр("ru='Функциональность доступна только при использовании подсистемы БСП.'")); + Возврат РезультатВыполнения; + КонецЕсли; + +КонецФункции + +// Подключает компоненту, выполненную по технологии Native API или COM на клиентском компьютере. +// Для веб-клиента предлагается диалог, подсказывающий пользователю действия по установке. +// Выполняет проверку возможности исполнения компоненты на текущем клиенте пользователя. +// +// Параметры: +// Оповещение - ОписаниеОповещения - описание оповещения о подключении со следующими параметрами: +// * Результат - см. РезультатПодключения. +// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка - версия компоненты. +// ПараметрыПодключения - см. ВнешниеКомпонентыБПОКлиент.ПараметрыПодключения. +// +Процедура ПодключитьКомпоненту(Оповещение, Идентификатор, Версия = Неопределено, ПараметрыПодключения = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент"); + МодульВнешниеКомпонентыКлиент.ПодключитьКомпоненту(Оповещение, Идентификатор, Версия, ПараметрыПодключения); + // Конец Вызов БСП + + Иначе + РезультатВыполнения = Новый Структура(); + РезультатВыполнения.Вставить("Подключено", Ложь); + РезультатВыполнения.Вставить("ОписаниеОшибки", НСтр("ru='Функциональность доступна только при использовании подсистемы БСП.'")); + Если Оповещение<>Неопределено Тогда + ВыполнитьОбработкуОповещения(Оповещение, РезультатВыполнения) + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Подключает компоненту, выполненную по технологии COM, из реестра Windows в асинхронном режиме. +// (не рекомендуется, для обратной совместимости с компонентами 1С 7.7). +// +// Параметры: +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// ИдентификаторСозданияОбъекта - Строка - идентификатор создания экземпляра модуля объекта +// (только для компонент, у которых идентификатор создания объекта отличается от ProgID). +// +// Возвращаемое значение: +// см. РезультатПодключения. +// +Асинх Функция ПодключитьКомпонентуИзРеестраWindowsАсинх(Идентификатор, ИдентификаторСозданияОбъекта = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент"); + Возврат МодульВнешниеКомпонентыКлиент.ПодключитьКомпонентуИзРеестраWindowsАсинх(Идентификатор, ИдентификаторСозданияОбъекта); + // Конец Вызов БСП + + Иначе + РезультатПодключения = РезультатПодключения(); + Попытка + РезультатПодключения.Подключено = Ждать ПодключитьВнешнююКомпонентуАсинх("AddIn." + Идентификатор); + Исключение + РезультатПодключения.Подключено = Ложь; + КонецПопытки; + + Если РезультатПодключения.Подключено Тогда + + Если ИдентификаторСозданияОбъекта = Неопределено Тогда + ИдентификаторСозданияОбъекта = Идентификатор; + КонецЕсли; + + Попытка + ПодключаемыйМодуль = Новый("AddIn." + ИдентификаторСозданияОбъекта); + Если ПодключаемыйМодуль = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Оператор Новый вернул Неопределено'"); + КонецЕсли; + РезультатПодключения.ПодключаемыйМодуль = ПодключаемыйМодуль; + Исключение + РезультатПодключения.Подключено = Ложь; + КонецПопытки; + КонецЕсли; + + Если Не РезультатПодключения.Подключено Тогда + РезультатПодключения.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте + |по причине: + |%2'"), + Идентификатор, + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецЕсли; + + Возврат РезультатПодключения; + + КонецЕсли; + +КонецФункции + +// Подключает компоненту, выполненную по технологии COM, из реестра Windows в асинхронном режиме. +// (не рекомендуется, для обратной совместимости с компонентами 1С 7.7). +// +// Параметры: +// Оповещение - ОписаниеОповещения - описание оповещения о подключении со следующими параметрами: +// * Результат - см. РезультатПодключения +// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// ИдентификаторСозданияОбъекта - Строка - идентификатор создания экземпляра модуля объекта +// (только для компонент, у которых идентификатор создания объекта отличается от ProgID). +// +Процедура ПодключитьКомпонентуИзРеестраWindows(Оповещение, Идентификатор, ИдентификаторСозданияОбъекта = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент"); + МодульВнешниеКомпонентыКлиент.ПодключитьКомпонентуИзРеестраWindows(Оповещение, Идентификатор, ИдентификаторСозданияОбъекта); + // Конец Вызов БСП + + Иначе + + Контекст = Новый Структура; + Контекст.Вставить("Оповещение" , Оповещение); + Контекст.Вставить("Идентификатор" , Идентификатор); + Контекст.Вставить("ИдентификаторСозданияОбъекта", ИдентификаторСозданияОбъекта); + + Оповещение = Новый ОписаниеОповещения("ПодключитьКомпонентуИзРеестраWindowsЗавершение", ЭтотОбъект, Контекст); + НачатьПодключениеВнешнейКомпоненты(Оповещение, "AddIn." + Идентификатор); + + КонецЕсли; + +КонецПроцедуры + +// Подключает компоненту, выполненную по технологии Native API и COM, в асинхронном режиме, через механизм ожидания. +// Компонента должна храниться в макете конфигурации в виде ZIP-архива. +// +// Параметры: +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// ПолноеИмяМакета - Строка - полное имя макета, используемое как местоположение компоненты. +// ПараметрыПодключения - Структура +// - Неопределено - см. функцию ПараметрыПодключения. +// +// Возвращаемое значение: +// см. РезультатПодключения. +// +Асинх Функция ПодключитьКомпонентуИзМакетаАсинх(Идентификатор, ПолноеИмяМакета, ПараметрыПодключения = Неопределено) Экспорт + + Если Не ОбщегоНазначенияБПОКлиентСервер.ЭтоМобильныйКлиент() И ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульОбщегоНазначенияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОбщегоНазначенияКлиент"); + Возврат Ждать МодульОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакетаАсинх(Идентификатор, ПолноеИмяМакета, ПараметрыПодключения); + // Конец Вызов БСП + + Иначе + Если ПараметрыПодключения = Неопределено Тогда + ПараметрыПодключения = ПараметрыПодключенияБПО(); + КонецЕсли; + РезультатПодключения = РезультатПодключения(); + + Если ПустаяСтрока(Идентификатор) Тогда + РезультатПодключения.ОписаниеОшибки = НСтр("ru = 'Идентификатор компоненты не указан.'"); + Иначе + СимволическоеИмя = СтрЗаменить(Идентификатор, ".", "_"); + + Попытка + #Если МобильноеПриложениеКлиент ИЛИ МобильныйКлиент Тогда + РезультатПодключения.Подключено = Ждать ПодключитьВнешнююКомпонентуАсинх(ПолноеИмяМакета, СимволическоеИмя); + #Иначе + РезультатПодключения.Подключено = Ждать ПодключитьВнешнююКомпонентуАсинх(ПолноеИмяМакета, СимволическоеИмя,, + ТипПодключенияКомпоненты(ПараметрыПодключения.Изолированно)); + #КонецЕсли + Исключение + РезультатПодключения.Подключено = Ложь; + КонецПопытки; + + Если РезультатПодключения.Подключено Тогда + Попытка + ProgID = "AddIn." + СимволическоеИмя + "." + Идентификатор; + #Если МобильноеПриложениеКлиент ИЛИ МобильныйКлиент Тогда + РезультатПодключения.ПодключаемыйМодуль = Новый (ProgID); + #Иначе + РезультатПодключения.ПодключаемыйМодуль = Ждать СоздатьОбъектВнешнейКомпонентыАсинх(ProgID); + #КонецЕсли + Исключение + РезультатПодключения.Подключено = Ложь; + КонецПопытки; + КонецЕсли; + + Если Не РезультатПодключения.Подключено Тогда + РезультатПодключения.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте + |%2 + |по причине: + |%3'"), + Идентификатор, + ПолноеИмяМакета, + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецЕсли; + + Возврат РезультатПодключения; + + КонецЕсли; + КонецЕсли; + +КонецФункции + +// Подключает компоненту, выполненную по технологии Native API и COM, в асинхронном режиме. +// Компонента должна храниться в макете конфигурации в виде ZIP-архива. +// +// Параметры: +// ОповещениеПриПодключении - ОписаниеОповещения - описание оповещения о подключении со следующими параметрами: +// * Результат - см. РезультатПодключения. +// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// ПолноеИмяМакета - Строка - полное имя макета, используемое как местоположение компоненты. +// ПараметрыПодключения - Структура +// - Неопределено - см. функцию ПараметрыПодключения. +Процедура ПодключитьКомпонентуИзМакета(ОповещениеПриПодключении, Идентификатор, ПолноеИмяМакета, ПараметрыПодключения = Неопределено) Экспорт + + Если Не ОбщегоНазначенияБПОКлиентСервер.ЭтоМобильныйКлиент() И ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульОбщегоНазначенияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОбщегоНазначенияКлиент"); + МодульОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакета(ОповещениеПриПодключении, Идентификатор, ПолноеИмяМакета, ПараметрыПодключения); + // Конец Вызов БСП + + Иначе + Результат = РезультатПодключения(); + + Если ПустаяСтрока(Идентификатор) Тогда + Результат.ОписаниеОшибки = НСтр("ru = 'Идентификатор компоненты не указан.'"); + ВыполнитьОбработкуОповещения(ОповещениеПриПодключении, Результат); + Иначе + Контекст = Новый Структура(); + Контекст.Вставить("Идентификатор", Идентификатор); + Контекст.Вставить("Оповещение", ОповещениеПриПодключении); + Оповещение = Новый ОписаниеОповещения("ПодключитьКомпонентуИзМакетаЗавершение", ЭтотОбъект, Контекст); + НачатьПодключениеВнешнейКомпоненты(Оповещение, ПолноеИмяМакета, СтрЗаменить(Идентификатор, ".", "_")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область УстановкаВнешнихКомпонент + +// Структура параметров для процедуры ВнешниеКомпонентыКлиент.УстановитьКомпоненту. +// +// Возвращаемое значение: +// Структура: +// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. +// * ПредложитьЗагрузить - Булево - предложить загрузить компоненту с сайта ИТС +// * ПредложитьУстановить - Булево - (по умолчанию Ложь) предлагать устанавливать компоненту. +// +// Пример: +// +// ПараметрыУстановки = ВнешниеКомпонентыКлиент.ПараметрыУстановки(); +// ПараметрыУстановки.ТекстПояснения = +// НСтр("ru = 'Для использования сканера штрихкодов требуется +// |внешняя компонента ""1С:Сканеры штрихкода (NativeApi)"".'"); +// +Функция ПараметрыУстановки() Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент"); + Параметры = МодульВнешниеКомпонентыКлиент.ПараметрыУстановки(); + // Конец Вызов БСП + + Иначе + Параметры = ПараметрыУстановкиБПО(); + КонецЕсли; + + Возврат Параметры; + +КонецФункции + +// Устанавливает компоненту, выполненную по технологии Native API и COM асинхронном режиме. +// Выполняет проверку возможности исполнения компоненты на текущем клиенте пользователя. +// +// Параметры: +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка - версия компоненты. +// ПараметрыУстановки - см. ПараметрыУстановки. +// +// Возвращаемое значение: +// см. РезультатУстановки. +// +Асинх Функция УстановитьКомпонентуАсинх(Идентификатор, Версия = Неопределено, ПараметрыУстановки = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент"); + РезультатУстановки = Ждать МодульВнешниеКомпонентыКлиент.УстановитьКомпонентуАсинх(Идентификатор, Версия, + ПараметрыУстановки); + // Конец Вызов БСП + + Иначе + РезультатУстановки = РезультатУстановки(); + РезультатУстановки.Установлено = Ложь; + РезультатУстановки.ОписаниеОшибки = НСтр("ru='Функциональность доступна только при использовании подсистемы БСП.'"); + КонецЕсли; + Возврат РезультатУстановки; + +КонецФункции + +// Устанавливает компоненту, выполненную по технологии Native API и COM асинхронном режиме. +// Выполняет проверку возможности исполнения компоненты на текущем клиенте пользователя. +// +// Параметры: +// Оповещение - ОписаниеОповещения - описание оповещения об установке внешней компоненты: +// * Результат - см. РезультатУстановки. +// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка - версия компоненты. +// ПараметрыУстановки - см. ПараметрыУстановки. +// +Процедура УстановитьКомпоненту(Оповещение, Идентификатор, Версия = Неопределено, ПараметрыУстановки = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент"); + МодульВнешниеКомпонентыКлиент.УстановитьКомпоненту(Оповещение, Идентификатор, Версия, ПараметрыУстановки); + // Конец Вызов БСП + + Иначе + РезультатУстановки = РезультатУстановки(); + РезультатУстановки.Установлено = Ложь; + РезультатУстановки.ОписаниеОшибки = НСтр("ru='Функциональность доступна только при использовании подсистемы БСП.'"); + Если Оповещение <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Оповещение, РезультатУстановки); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Устанавливает компоненту, выполненную по технологии Native API и COM асинхронном режиме. +// Компонента должна храниться в макете конфигурации в виде ZIP-архива. +// +// Параметры: +// ПолноеИмяМакета - Строка - полное имя макета, используемое как местоположение компоненты. +// ПараметрыУстановки - Структура +// - Неопределено - см. функцию ПараметрыУстановки. +// +// Возвращаемое значение: +// см. РезультатУстановки. +// +Асинх Функция УстановитьКомпонентуИзМакетаАсинх(ПолноеИмяМакета, ПараметрыУстановки = Неопределено) Экспорт + + Если Не ОбщегоНазначенияБПОКлиентСервер.ЭтоМобильныйКлиент() И ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульОбщегоНазначенияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОбщегоНазначенияКлиент"); + РезультатУстановки = Ждать МодульОбщегоНазначенияКлиент.УстановитьКомпонентуИзМакетаАсинх(ПолноеИмяМакета, ПараметрыУстановки); + // Конец Вызов БСП + + Иначе + Если ПараметрыУстановки <> Неопределено Тогда + ПоказатьПредупреждение(Неопределено, ПараметрыУстановки.ТекстПояснения); + КонецЕсли; + + РезультатУстановки = РезультатУстановки(); + Попытка + Ждать УстановитьВнешнююКомпонентуАсинх(ПолноеИмяМакета); + РезультатУстановки.Установлено = Истина; + Исключение + РезультатУстановки.Установлено = Ложь; + РезультатУстановки.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Не удалось установить внешнюю компоненту ""%1"" на клиенте + |по причине: + |%2'"), + ПолноеИмяМакета, + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; + Возврат РезультатУстановки; + +КонецФункции + +// Устанавливает компоненту, выполненную по технологии Native API и COM асинхронном режиме. +// Компонента должна храниться в макете конфигурации в виде ZIP-архива. +// +// Параметры: +// ОповещениеЗавершения - ОписаниеОповещения - описание оповещения об установке внешней компоненты: +// * Результат - см. РезультатУстановки. +// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// ПолноеИмяМакета - Строка - полное имя макета, используемое как местоположение компоненты. +// ПараметрыУстановки - Структура +// - Неопределено - см. функцию ПараметрыУстановки. +// +Процедура УстановитьКомпонентуИзМакета(ОповещениеЗавершения, ПолноеИмяМакета, ПараметрыУстановки = Неопределено) Экспорт + + Если Не ОбщегоНазначенияБПОКлиентСервер.ЭтоМобильныйКлиент() И ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульОбщегоНазначенияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОбщегоНазначенияКлиент"); + МодульОбщегоНазначенияКлиент.УстановитьКомпонентуИзМакета(ОповещениеЗавершения, ПолноеИмяМакета, ПараметрыУстановки); + // Конец Вызов БСП + + Иначе + + Контекст = Новый Структура(); + Контекст.Вставить("ПолноеИмяМакета", ПолноеИмяМакета); + Контекст.Вставить("Оповещение", ОповещениеЗавершения); + Контекст.Вставить("ПараметрыУстановки", ПараметрыУстановки); + + Оповещение = Новый ОписаниеОповещения("УстановитьКомпонентуИзМакетаЗавершение", ЭтотОбъект, Контекст); + НачатьУстановкуВнешнейКомпоненты(Оповещение, ПолноеИмяМакета); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ЗагрузкаВнешнихКомпонент + +// Возвращает структуру параметров для описания правил поиска дополнительной информации в составе внешней компоненты, +// см. процедуру ЗагрузитьКомпонентуИзФайла. +// +// Возвращаемое значение: +// Структура: +// * ИмяФайлаXML - Строка - (необязательный) имя файла в составе компоненты, из которого будет извлечена информация. +// * ВыражениеXPath - Строка - (необязательный) XPath путь до информации в файле. +// +// Пример: +// +// ПараметрыЗагрузки = ВнешниеКомпонентыКлиент.ПараметрыПоискаДополнительнойИнформации(); +// ПараметрыЗагрузки.ИмяФайлаXML = "INFO.XML"; +// ПараметрыЗагрузки.ВыражениеXPath = "//drivers/component/@type"; +// +Функция ПараметрыПоискаДополнительнойИнформации() Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент"); + Параметры = МодульВнешниеКомпонентыКлиент.ПараметрыПоискаДополнительнойИнформации(); + // Конец Вызов БСП + + Иначе + Параметры = Новый Структура; + Параметры.Вставить("ИмяФайлаXML", ""); + Параметры.Вставить("ВыражениеXPath", ""); + КонецЕсли; + + Возврат Параметры; + +КонецФункции + +// Структура параметров для процедуру ВнешниеКомпонентыКлиент.ЗагрузитьКомпонентуИзФайла. +// +// Возвращаемое значение: +// Структура: +// * Идентификатор - Строка -(необязательный) идентификатор объекта внешней компоненты. +// * Версия - Строка - (необязательный) версия компоненты. +// * ПараметрыПоискаДополнительнойИнформации - Соответствие из КлючИЗначение - (необязательный) параметры: +// ** Ключ - Строка - идентификатор дополнительной запрошенной информации. +// ** Значение - см. ПараметрыПоискаДополнительнойИнформации. +// Пример: +// +// ПараметрыЗагрузки = ВнешниеКомпонентыКлиент.ПараметрыЗагрузки(); +// ПараметрыЗагрузки.Идентификатор = "InputDevice"; +// ПараметрыЗагрузки.Версия = "8.1.7.10"; +// +Функция ПараметрыЗагрузки() Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент"); + Параметры = МодульВнешниеКомпонентыКлиент.ПараметрыЗагрузки(); + // Конец Вызов БСП + + Иначе + Параметры = Новый Структура; + Параметры.Вставить("Идентификатор", ""); + Параметры.Вставить("Версия", ""); + Параметры.Вставить("ПараметрыПоискаДополнительнойИнформации", Новый Соответствие); + КонецЕсли; + + Возврат Параметры; + +КонецФункции + +// Загружает файл компоненты в справочник внешних компонент в асинхронном режиме. +// +// Параметры: +// Оповещение - ОписаниеОповещения - описание оповещения об установке внешней компоненты: +// * Результат - Структура - результат загрузки компоненты: +// ** Загружена - Булево - признак загрузки. +// ** Идентификатор - Строка - идентификатор объекта внешней компоненты. +// ** Версия - Строка - версия загруженной компоненты. +// ** Наименование - Строка - наименование загруженной компоненты. +// ** ДополнительнаяИнформация - Соответствие из КлючИЗначение - дополнительная информация о компоненте, +// если не запрашивалась - пустое соответствие: +// *** Ключ - см. ПараметрыПоискаДополнительнойИнформации. +// *** Значение - см. ПараметрыПоискаДополнительнойИнформации. +// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// ПараметрыЗагрузки - см. ПараметрыЗагрузки. +// +// Пример: +// +// ПараметрыЗагрузки = ВнешниеКомпонентыКлиент.ПараметрыЗагрузки(); +// ПараметрыЗагрузки.Идентификатор = "InputDevice"; +// ПараметрыЗагрузки.Версия = "8.1.7.10"; +// +// Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуИзФайлаПослеЗагрузкиКомпоненты", ЭтотОбъект); +// +// ВнешниеКомпонентыКлиент.ЗагрузитьКомпонентуИзФайла(Оповещение, ПараметрыЗагрузки); +// +// &НаКлиенте +// Процедура ЗагрузитьКомпонентуИзФайлаПослеЗагрузкиКомпоненты(Результат, ДополнительныеПараметры) Экспорт +// +// Если Результат.Загружено Тогда +// Идентификатор = Результат.Идентификатор; +// Версия = Результат.Версия; +// КонецЕсли; +// +// КонецПроцедуры +// +Процедура ЗагрузитьКомпонентуИзФайла(Оповещение, ПараметрыЗагрузки = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент"); + МодульВнешниеКомпонентыКлиент.ЗагрузитьКомпонентуИзФайла(Оповещение, ПараметрыЗагрузки); + // Конец Вызов БСП + + Иначе + РезультатВыполнения = Новый Структура(); + РезультатВыполнения.Вставить("Загружена", Ложь); + РезультатВыполнения.Вставить("ОписаниеОшибки", НСтр("ru='Функциональность доступна только при использовании подсистемы БСП.'")); + ВыполнитьОбработкуОповещения(Оповещение, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Продолжение процедуры ПодключитьКомпонентуИзРеестраWindows. +// +// Параметры: +// Подключено - Булево +// Контекст - Структура: +// * Оповещение - ОписаниеОповещения +// * Идентификатор - Строка +// * ИдентификаторСозданияОбъектов - Строка +Процедура ПодключитьКомпонентуИзРеестраWindowsЗавершение(Подключено, Контекст) Экспорт + + Результат = РезультатПодключения(); + + ИдентификаторСозданияОбъекта = ?( + Контекст.ИдентификаторСозданияОбъекта = Неопределено, + Контекст.Идентификатор, + Контекст.ИдентификаторСозданияОбъекта); + + Если Подключено Тогда + Попытка + ПодключаемыйМодуль = Новый("AddIn." + ИдентификаторСозданияОбъекта); + Если ПодключаемыйМодуль = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Оператор Новый вернул Неопределено'"); + КонецЕсли; + Результат.Подключено = Истина; + Результат.ПодключаемыйМодуль = ПодключаемыйМодуль; + Исключение + Результат.ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + Иначе + Результат.ОписаниеОшибки = СтрШаблон( + НСтр("ru='Не удалось подключить внешнюю компоненту %1 на клиенте'"), + ИдентификаторСозданияОбъекта); + КонецЕсли; + + Если Контекст.Оповещение<>Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ПодключитьКомпонентуИзМакета. +// +// Параметры: +// Подключено - Булево +// Контекст - Структура: +// * Оповещение - ОписаниеОповещения +// * Идентификатор - Строка +// * ИдентификаторСозданияОбъектов - Строка +Процедура ПодключитьКомпонентуИзМакетаЗавершение(Подключено, Контекст) Экспорт + + Результат = РезультатПодключения(); + Если Подключено Тогда + Попытка + ProgID = "AddIn." + СтрЗаменить(Контекст.Идентификатор, ".", "_") + "." + Контекст.Идентификатор; + Результат.ПодключаемыйМодуль = Новый (ProgID); + Результат.Подключено = Истина; + Исключение + Результат.ОписаниеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + КонецЕсли; + + Если Контекст.Оповещение<>Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьКомпонентуИзМакетаЗавершение(Контекст) Экспорт + + Результат = РезультатУстановки(); + Результат.Установлено = Истина; + + ПараметрыУстановки = Контекст.ПараметрыУстановки; + Если ПараметрыУстановки <> Неопределено Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ПараметрыУстановки.ТекстПояснения); + КонецЕсли; + + Если Контекст.Оповещение <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + КонецЕсли; + +КонецПроцедуры + +#Если Не ВебКлиент Тогда + +// Выполняет переустановку компонент из переданного массива макетов рекурсивно +// +// Параметры: +// ОборудованиеДляПереустановки - Массив из Структура +// +Процедура ПереустановитьКомпоненты(ОборудованиеДляПереустановки) Экспорт + + Контекст = Новый Структура(); + Контекст.Вставить("ОборудованиеДляПереустановки", Новый Массив); + Для Каждого ОписаниеОборудованияДляПереустановки Из ОборудованиеДляПереустановки Цикл + Контекст.ОборудованиеДляПереустановки.Добавить(ОписаниеОборудованияДляПереустановки); + КонецЦикла; + + // Начать рекурсивную установку компонентов из макетов + Результат = РезультатУстановки(); + Результат.Установлено = Истина; + ОповещениеУстановки = Новый ОписаниеОповещения("УстановитьКомпонентуИзМакетаРекурсивно", ЭтотОбъект, Контекст); + ВыполнитьОбработкуОповещения(ОповещениеУстановки, Результат) + +КонецПроцедуры + +// Выполняет рекурсивно установку компоненты +// +// Параметры: +// Результат - Структура - результат установки компоненты: +// * Установлено - Булево - признак установки. +// * ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. +// Контекст - Структура: +// * ОборудованиеДляПереустановки - Массив из Структура +// +Процедура УстановитьКомпонентуИзМакетаРекурсивно(Результат, Контекст) Экспорт + + Если Не Результат.Установлено Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(СтрШаблон(НСтр("ru = 'Ошибка установки компоненты: %1'"), Результат.ОписаниеОшибки)); + КонецЕсли; + + ОборудованиеДляПереустановки = Контекст.ОборудованиеДляПереустановки; + Если ОборудованиеДляПереустановки.Количество()=0 Тогда + Возврат; + КонецЕсли; + ПоследнийИндекс = ОборудованиеДляПереустановки.ВГраница(); + ОписаниеОборудованияДляПереустановки = ОборудованиеДляПереустановки[ПоследнийИндекс]; + ОборудованиеДляПереустановки.Удалить(ПоследнийИндекс); + + ПараметрыУстановки = ПараметрыУстановки(); + ПараметрыУстановки.ТекстПояснения = СтрШаблон(НСтр("ru = 'Новая версия компоненты: + |%1. + |Версия: %2' + |"), + ОписаниеОборудованияДляПереустановки.Наименование, + ОписаниеОборудованияДляПереустановки.Версия); + + ОповещениеУстановки = Новый ОписаниеОповещения("УстановитьКомпонентуИзМакетаРекурсивно", ЭтотОбъект, Контекст); + УстановитьКомпонентуИзМакета(ОповещениеУстановки, ОписаниеОборудованияДляПереустановки.ИмяМакетаДрайвера, ПараметрыУстановки); + +КонецПроцедуры + +#КонецЕсли + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Параметры для вызова процедуры ВнешниеКомпонентыКлиент.ПодключитьКомпоненту. +// +// Возвращаемое значение: +// Структура: +// * Кэшировать - Булево - (по умолчанию Истина) использовать механизм кэширования компонент на клиенте. +// * ПредложитьУстановить - Булево - (по умолчанию Истина) предлагать устанавливать компоненту. +// * ПредложитьЗагрузить - Булево - (по умолчанию Истина) предлагать загрузить компоненту с сайта ИТС. +// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. +// * ИдентификаторыСозданияОбъектов - Массив из Строка - массив строк идентификаторов создания экземпляров модуля объекта, +// используется только для компонент, у которых есть несколько идентификаторов создания объектов, +// при задании параметр Идентификатор будет использоваться только для определения компоненты. +// * Изолированно - Булево, Неопределено - (по умолчанию Неопределено) если Истина, компонента будет подключена +// изолированно, в этом случае внешняя компонента загружается в отдельный процесс операционной системы; +// Ложь - в этом случае внешняя компонента будет выполняться в том же процессе операционной системы, +// который выполняет код встроенного языка; Неопределено - поддерживается поведение платформы по умолчанию: +// изолированно - если компонентой поддерживается только этот режим, не изолированно - в остальных случаях. +// См. https://its.1c.ru/db/v83doc#bookmark:dev:TI000001866 +// +// Пример: +// +// ПараметрыПодключения = ВнешниеКомпонентыКлиент.ПараметрыПодключения(); +// ПараметрыПодключения.ТекстПояснения = +// НСтр("ru = 'Для использования сканера штрихкодов требуется +// |внешняя компонента ""1С:Сканеры штрихкода (NativeApi)"".'"); +// +Функция ПараметрыПодключенияБПО() + + Параметры = Новый Структура; + Параметры.Вставить("Кэшировать", Истина); + Параметры.Вставить("ПредложитьУстановить", Истина); + Параметры.Вставить("ПредложитьЗагрузить", Истина); + Параметры.Вставить("ТекстПояснения", ""); + Параметры.Вставить("ИдентификаторыСозданияОбъектов", Новый Массив); + Параметры.Вставить("Изолированно", Неопределено); + Параметры.Вставить("ОбновлятьАвтоматически", Истина); + + Возврат Параметры; + +КонецФункции + +// Структура параметров для процедуры ВнешниеКомпонентыКлиент.УстановитьКомпоненту. +// +// Возвращаемое значение: +// Структура: +// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. +// * ПредложитьЗагрузить - Булево - предложить загрузить компоненту с сайта ИТС +// * ПредложитьУстановить - Булево - (по умолчанию Ложь) предлагать устанавливать компоненту. +// +Функция ПараметрыУстановкиБПО() + + Параметры = Новый Структура; + Параметры.Вставить("ТекстПояснения", ""); + Параметры.Вставить("ПредложитьЗагрузить", Истина); + Параметры.Вставить("ПредложитьУстановить", Ложь); + + Возврат Параметры; + +КонецФункции + +// Результат подключения компоненты. +// +// Возвращаемое значение: +// Структура: +// * Подключено - Булево - признак подключения. +// * ПодключаемыйМодуль - Неопределено, ОбъектВнешнейКомпоненты - экземпляр объекта внешней компоненты; +// - ФиксированноеСоответствие из КлючИЗначение - экземпляры объектов внешней компоненты, +// указанные в ПараметрыПодключения.ИдентификаторыСозданияОбъектов: +// ** Ключ - Строка - идентификатор внешней компоненты; +// ** Значение - ОбъектВнешнейКомпоненты - экземпляр объекта. +// * ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. +// +Функция РезультатПодключения() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Подключено", Ложь); + Результат.Вставить("ОписаниеОшибки", ""); + Результат.Вставить("ПодключаемыйМодуль", Неопределено); + Возврат Результат; + +КонецФункции + +// Результат установки компоненты. +// +// Возвращаемое значение: +// Структура: +// * Установлено - Булево +// * ОписаниеОшибки - Строка +// +Функция РезультатУстановки() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Установлено", Ложь); + Результат.Вставить("ОписаниеОшибки", ""); + + Возврат Результат; + +КонецФункции + +Функция ТипПодключенияКомпоненты(Изолированно) Экспорт + + Если Изолированно = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + #Если Не ВебКлиент И Не МобильныйКлиент И Не МобильноеПриложениеКлиент Тогда + + Если Изолированно Тогда + Возврат ТипПодключенияВнешнейКомпоненты.Изолированно; + КонецЕсли; + + Возврат ТипПодключенияВнешнейКомпоненты.НеИзолированно; + + #Иначе + + Возврат Неопределено; + + #КонецЕсли + +КонецФункции + +#КонецОбласти diff --git a/CommonModules/ВнешниеКомпонентыБПОПереопределяемый.xml b/CommonModules/ВнешниеКомпонентыБПОПереопределяемый.xml new file mode 100644 index 0000000..71ed6e0 --- /dev/null +++ b/CommonModules/ВнешниеКомпонентыБПОПереопределяемый.xml @@ -0,0 +1,23 @@ + + + + + ВнешниеКомпонентыБПОПереопределяемый + + + ru + Внешние компоненты БПОСервер переопределение + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ВнешниеКомпонентыБПОПереопределяемый/Ext/Module.bsl b/CommonModules/ВнешниеКомпонентыБПОПереопределяемый/Ext/Module.bsl new file mode 100644 index 0000000..28ff1aa --- /dev/null +++ b/CommonModules/ВнешниеКомпонентыБПОПереопределяемый/Ext/Module.bsl @@ -0,0 +1,35 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Переопределяемая процедура для определения режима вызова подключения внешних компонент +// +// Параметры: +// Изолированно - Булево - Изолированно +// СтандартнаяОбработка - Булево - признак стандартной обработки. +// +Процедура ИзолированноеПодключенияВнешнихКомпонентНаСервере(Изолированно, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +// Переопределяемая процедура для определения режима вызова подключения внешних компонент +// +// Параметры: +// Изолированно - Булево - Изолированно +// СтандартнаяОбработка - Булево - признак стандартной обработки. +// +Процедура ИзолированноеПодключенияВнешнихКомпонентНаКлиенте(Изолированно, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +#КонецОбласти diff --git a/CommonModules/ГенерацияШтрихкода.xml b/CommonModules/ГенерацияШтрихкода.xml new file mode 100644 index 0000000..e2d185c --- /dev/null +++ b/CommonModules/ГенерацияШтрихкода.xml @@ -0,0 +1,23 @@ + + + + + ГенерацияШтрихкода + + + ru + Генерация штрихкода + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ГенерацияШтрихкода/Ext/Module.bsl b/CommonModules/ГенерацияШтрихкода/Ext/Module.bsl new file mode 100644 index 0000000..7f63b21 --- /dev/null +++ b/CommonModules/ГенерацияШтрихкода/Ext/Module.bsl @@ -0,0 +1,590 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Пустая структура для заполнения параметра "ПараметрыШтрихкода" используемого для получения изображения штрих кода. +// +// Возвращаемое значение: +// Структура: +// * Ширина - Число - ширина изображения штрих кода. +// * Высота - Число - высота изображения штрих кода. +// * ТипКода - Число - штрихкода. +// Возможные значение: +// 99 - Авто выбор +// 0 - EAN8 +// 1 - EAN13 +// 2 - EAN128 +// 3 - Code39 +// 4 - Code128 +// 5 - Code16k +// 6 - PDF417 +// 7 - Standart (Industrial) 2 of 5 +// 8 - Interleaved 2 of 5 +// 9 - Code39 Расширение +// 10 - Code93 +// 11 - ITF14 +// 12 - RSS14 +// 14 - EAN13AddOn2 +// 15 - EAN13AddOn5 +// 16 - QR +// 17 - GS1DataBarExpandedStacked +// 18 - Datamatrix ASCII +// 19 - Datamatrix BASE256 +// 20 - Datamatrix TEXT +// 21 - Datamatrix C40 +// 22 - Datamatrix X12 +// 23 - Datamatrix EDIFACT +// 24 - Datamatrix GS1ASCII +// 25 - Aztec +// * ОтображатьТекст - Булево - отображать HRI теста для штрихкода. +// * РазмерШрифта - Число - размер шрифта HRI теста для штрихкода. +// * УголПоворота - Число - угол поворота. +// Возможные значения: 0, 90, 180, 270. +// * Штрихкод - Строка - значение штрихкод в виде строки или Base64. +// * ТипВходныхДанных - Число - тип входных данных +// Возможные значения: 0 - Строка, 1 - Base64 +// * ПрозрачныйФон - Булево - прозрачный фон изображения штрихкода. +// * Инвертирован - Булево - цвета пикселей ШК будут изменены на обратные. +// * УровеньКоррекцииQR - Число - уровень коррекции штрихкода QR. +// Возможные значения: 0 - L, 1 - M, 2 - Q, 3 - H. +// * Масштабировать - Булево - масштабировать изображение штрихкода. +// * СохранятьПропорции - Булево - сохранять пропорции изображения штрихкода. +// * ВертикальноеВыравнивание - Число - вертикальное выравнивание штрихкода. +// Возможные значения: 1 - По верхнему краю, 2 - По центру, 3 - По нижнему краю +// * GS1DatabarКоличествоСтрок - Число - количество строк в штрихкоде GS1Databar. +// * УбратьЛишнийФон - Булево +// * ЛоготипКартинка - Строка - строка с base64 представлением png картинки логотипа. +// * ЛоготипРазмерПроцентОтШК - Число - процент от генерированного QR для вписывания логотипа. +// +Функция ПараметрыГенерацииШтрихкода() Экспорт + + ПараметрыШтрихкода = Новый Структура; + ПараметрыШтрихкода.Вставить("Ширина" , 100); + ПараметрыШтрихкода.Вставить("Высота" , 100); + ПараметрыШтрихкода.Вставить("ТипКода" , 99); + ПараметрыШтрихкода.Вставить("ОтображатьТекст" , Истина); + ПараметрыШтрихкода.Вставить("РазмерШрифта" , 12); + ПараметрыШтрихкода.Вставить("УголПоворота" , 0); + ПараметрыШтрихкода.Вставить("Штрихкод" , ""); + ПараметрыШтрихкода.Вставить("ПрозрачныйФон" , Истина); + ПараметрыШтрихкода.Вставить("Инвертирован" , Ложь); + ПараметрыШтрихкода.Вставить("УровеньКоррекцииQR", 1); + ПараметрыШтрихкода.Вставить("Масштабировать" , Ложь); + ПараметрыШтрихкода.Вставить("СохранятьПропорции" , Ложь); + ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание" , 1); + ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", 2); + ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); + ПараметрыШтрихкода.Вставить("УбратьЛишнийФон" , Ложь); + ПараметрыШтрихкода.Вставить("ЛоготипКартинка"); + ПараметрыШтрихкода.Вставить("ЛоготипРазмерПроцентОтШК"); + ПараметрыШтрихкода.Вставить("НовыйВызовКомпоненты", Ложь); + + Возврат ПараметрыШтрихкода; + +КонецФункции + +// Формирование изображения штрихкода. +// +// Параметры: +// ПараметрыШтрихкода - см. ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода. +// +// Возвращаемое значение: +// Структура: +// Результат - Булево - результат генерации штрихкода. +// ДвоичныеДанные - ДвоичныеДанные - двоичные данные изображения штрихкода. +// Картинка - Картинка - картинка с сформированным штрихкодом или НЕОПРЕДЕЛЕНО. +// +Функция ИзображениеШтрихкода(ПараметрыШтрихкода) Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + ТипПлатформыКомпоненты = Строка(СистемнаяИнформация.ТипПлатформы); + + ВнешняяКомпонента = ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ТипПлатформыКомпоненты); + + Если ВнешняяКомпонента = Неопределено Тогда + МодульОбщегоНазначения = МодульОбщегоНазначения(); + ТекстСообщения = НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода.'", МодульОбщегоНазначения.КодОсновногоЯзыка()); + #Если НЕ МобильноеПриложениеСервер Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка генерации штрихкода'", + МодульОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстСообщения); + #КонецЕсли + ВызватьИсключение ТекстСообщения; + КонецЕсли; + + Если ПараметрыШтрихкода.Свойство("НовыйВызовКомпоненты") И ПараметрыШтрихкода.НовыйВызовКомпоненты Тогда + Возврат ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода); + Иначе + Возврат ПодготовитьИзображениеШтрихкодаСвойства(ВнешняяКомпонента, ПараметрыШтрихкода); + КонецЕсли; + +КонецФункции + +// Возвращает двоичные данные для формирования QR-кода. +// +// Параметры: +// QRСтрока - Строка - данные, которые необходимо разместить в QR-коде. +// +// УровеньКоррекции - Число - уровень погрешности изображения, при котором данный QR-код все еще возможно 100% +// распознать. +// Параметр должен иметь тип целого и принимать одно из 4 допустимых значений: +// 0 (7 % погрешности), 1 (15 % погрешности), 2 (25 % погрешности), 3 (35 % погрешности). +// +// Размер - Число - определяет длину стороны выходного изображения в пикселях. +// Если минимально возможный размер изображения больше этого параметра - код сформирован не будет. +// +// Возвращаемое значение: +// ДвоичныеДанные - буфер, содержащий байты PNG-изображения QR-кода. +// +// Пример: +// +// // Выводим на печать QR-код, содержащий в себе информацию зашифрованную по УФЭБС. +// +// QRСтрока = УправлениеПечатью.ФорматнаяСтрокаУФЭБС(РеквизитыПлатежа); +// ТекстОшибки = ""; +// ДанныеQRКода = УправлениеПечатью.ДанныеQRКода(QRСтрока, 0, 190, ТекстОшибки); +// Если Не ПустаяСтрока(ТекстОшибки) +// ОбщегоНазначения.СообщитьПользователю(ТекстОшибки); +// КонецЕсли; +// +// КартинкаQRКода = Новый Картинка(ДанныеQRКода); +// ОбластьМакета.Рисунки.QRКод.Картинка = КартинкаQRКода; +// +Функция ДанныеQRКода(QRСтрока, УровеньКоррекции, Размер) Экспорт + + ПараметрыШтрихкода = ПараметрыГенерацииШтрихкода(); + ПараметрыШтрихкода.Ширина = Размер; + ПараметрыШтрихкода.Высота = Размер; + ПараметрыШтрихкода.Штрихкод = QRСтрока; + ПараметрыШтрихкода.УровеньКоррекцииQR = УровеньКоррекции; + ПараметрыШтрихкода.ТипКода = 16; // QR + ПараметрыШтрихкода.УбратьЛишнийФон = Истина; + + Попытка + РезультатФормированияШтрихкода = ИзображениеШтрихкода(ПараметрыШтрихкода); + ДвоичныеДанныеКартинки = РезультатФормированияШтрихкода.ДвоичныеДанные; + Исключение + #Если НЕ МобильноеПриложениеСервер Тогда + МодульОбщегоНазначения = МодульОбщегоНазначения(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка генерации штрихкода'", + МодульОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + #КонецЕсли + КонецПопытки; + + Возврат ДвоичныеДанныеКартинки; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Выполняет подключение внешней компоненты. +// +// Возвращаемое значение: +// ОбъектВнешнейКомпоненты +// Неопределено - если компоненту не удалось загрузить. +// +Функция ПодключитьКомпонентуГенерацииИзображенияШтрихкода() Экспорт + + ВнешняяКомпонента = Неопределено; + ИмяОбъекта = ОписаниеКомпоненты().ИмяОбъекта; + ПолноеИмяМакета = ОписаниеКомпоненты().ПолноеИмяМакета; + + МодульОбщегоНазначения = МодульОбщегоНазначения(); + Если МодульОбщегоНазначения.ПодсистемаСуществует("ПоддержкаОборудования") Тогда + // подключение компоненты через БПО + МодульВнешниеКомпонентыБПО = МодульОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыБПО"); + ВнешняяКомпонента = МодульВнешниеКомпонентыБПО.ПодключитьКомпоненту(ИмяОбъекта, ПолноеИмяМакета); + Иначе + // Подключение компоненты через БСП + // Вызов БСП +#Если НЕ МобильноеПриложениеСервер Тогда + УстановитьОтключениеБезопасногоРежима(Истина); + Если МодульОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Если МодульОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеКомпоненты") Тогда + МодульВнешниеКомпонентыСервер = МодульОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыСервер"); + ПараметрыПодключения = МодульВнешниеКомпонентыСервер.ПараметрыПодключения(); + РезультатПодключения = МодульВнешниеКомпонентыСервер.ПодключитьКомпоненту(ИмяОбъекта); + Если РезультатПодключения.Подключено Тогда + ВнешняяКомпонента = РезультатПодключения.ПодключаемыйМодуль; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ВнешняяКомпонента = Неопределено Тогда + ВнешняяКомпонента = МодульОбщегоНазначения.ПодключитьКомпонентуИзМакета(ИмяОбъекта, ПолноеИмяМакета); + КонецЕсли; +#КонецЕсли + // Конец Вызов БСП + КонецЕсли; + + Если ВнешняяКомпонента = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + // Установим основные параметры компоненты. + // Если в системе установлен шрифт Tahoma. + Если ВнешняяКомпонента.НайтиШрифт("Tahoma") Тогда + // Выбираем его как шрифт для формирования картинки. + ВнешняяКомпонента.Шрифт = "Tahoma"; + Иначе + // Шрифт Tahoma в системе отсутствует. + // Обойдем все доступные компоненте шрифты. + Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл + // Получим очередной шрифт, доступный компоненте. + ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч); + // Если шрифт доступен + Если ТекущийШрифт <> Неопределено Тогда + // Они и будет шрифтом для формирования штрихкода. + ВнешняяКомпонента.Шрифт = ТекущийШрифт; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + // Установим размер шрифта + ВнешняяКомпонента.РазмерШрифта = 12; + + Возврат ВнешняяКомпонента; + +КонецФункции + +// Описание подключения внешней компоненты печати штрихкодов. +// +// Возвращаемое значение: +// Структура: +// * ПолноеИмяМакета - Строка +// * ИмяОбъекта - Строка +// +Функция ОписаниеКомпоненты() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("ИмяОбъекта", "Barcode"); + Параметры.Вставить("ПолноеИмяМакета", "ОбщийМакет.КомпонентаПечатиШтрихкодов"); + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +// Подготовить изображения штрихкода. +// +// Параметры: +// ВнешняяКомпонента - см. ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода +// ПараметрыШтрихкода - см. ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода +// +// Возвращаемое значение: +// Структура: +// Результат - Булево - результат генерации штрихкода. +// ДвоичныеДанные - ДвоичныеДанные - двоичные данные изображения штрихкода. +// Картинка - Картинка - картинка с сформированным штрихкодом или НЕОПРЕДЕЛЕНО. +// +Функция ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода) + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("MakeBarcode"); + ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters"); + + // Шрифт установленный по умолчанию. + ЗаписьXML.ЗаписатьНачалоЭлемента("Font"); + ЗаписьXML.ЗаписатьТекст(ВнешняяКомпонента.Шрифт); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Ширина генерируемого изображения в пикселах + ШиринаШтрихкода = ?(ПараметрыШтрихкода.Ширина <= 0, 1, Окр(ПараметрыШтрихкода.Ширина)); + ЗаписьXML.ЗаписатьНачалоЭлемента("Width"); + ЗаписьXML.ЗаписатьТекст(Строка(ШиринаШтрихкода)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Высота генерируемого изображения в пикселах. + ВысотаШтрихкода = ?(ПараметрыШтрихкода.Высота <= 0, 1, Окр(ПараметрыШтрихкода.Высота)); + ЗаписьXML.ЗаписатьНачалоЭлемента("Height"); + ЗаписьXML.ЗаписатьТекст(Строка(ВысотаШтрихкода)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Признак использования прозрачного фона. + ЗаписьXML.ЗаписатьНачалоЭлемента("BgTransparent"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(ПараметрыШтрихкода.ПрозрачныйФон)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Указывает генератору, что требуется убрать лишний фон по краям ШК. + ЗаписьXML.ЗаписатьНачалоЭлемента("RemoveExeedBackgroud"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(ПараметрыШтрихкода.УбратьЛишнийФон)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Угол поворота (в градусах) штрихкода на сгенерированном изображении. + УголПоворота = Число(?(ПараметрыШтрихкода.Свойство("УголПоворота"), ПараметрыШтрихкода.УголПоворота, 0)); + ЗаписьXML.ЗаписатьНачалоЭлемента("CanvasRotation"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(УголПоворота)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Значение уровня коррекции QR-кода: 0 - L, 1 - M, 2 - Q, 3 - H + УровеньКоррекцииQR = Число(?(ПараметрыШтрихкода.Свойство("УровеньКоррекцииQR"), ПараметрыШтрихкода.УровеньКоррекцииQR, 1)); + ЗаписьXML.ЗаписатьНачалоЭлемента("QRErrorCorrectionLevel"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(УровеньКоррекцииQR)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Необходимость отображать подпись штрихкода на сгенерированном изображении. + ЗаписьXML.ЗаписатьНачалоЭлемента("TextVisible"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(ПараметрыШтрихкода.ОтображатьТекст)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Размер шрифта в пикселах + ЗаписьXML.ЗаписатьНачалоЭлемента("FontSize"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(Число(ПараметрыШтрихкода.РазмерШрифта))); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Вертикального выравнивания штрихкода на сгенерированном изображении: 1 - по верхнему краю, 2 - по центру, 3 - по нижнему краю. + ЗаписьXML.ЗаписатьНачалоЭлемента("CodeVerticalAlign"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(Число(ПараметрыШтрихкода.ВертикальноеВыравнивание))); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Количество строк штрихкода GS1 Databar extended stacked + ЗаписьXML.ЗаписатьНачалоЭлемента("GS1DatabarRowCount"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(Число(ПараметрыШтрихкода.GS1DatabarКоличествоСтрок))); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Цвета пикселей ШК будут изменены на обратные. + Если ПараметрыШтрихкода.Свойство("Инвертирован") Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("Inverted"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(ПараметрыШтрихкода.Инвертирован)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + // Тип штрихкода - QR + Если ПараметрыШтрихкода.ТипКода = 16 Тогда + Если ЗначениеЗаполнено(ПараметрыШтрихкода.ЛоготипКартинка) Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("LogoImageBase64"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(ПараметрыШтрихкода.ЛоготипКартинка)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + Если Не ПустаяСтрока(ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК) Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("LogoSizePercentFromBarcode"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(Число(ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК))); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + КонецЕсли; + // Определение типа штрихкода. + ШтрихкодАвтоТип = (ПараметрыШтрихкода.ТипКода = 99); + ЗаписьXML.ЗаписатьНачалоЭлемента("CodeAuto"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(ШтрихкодАвтоТип)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + Если НЕ ШтрихкодАвтоТип Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("CodeType"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(Число(ПараметрыШтрихкода.ТипКода))); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + // ECL + ЗаписьXML.ЗаписатьНачалоЭлемента("ECL"); + ЗаписьXML.ЗаписатьТекст("1"); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Тип данных штрихкода + ЗаписьXML.ЗаписатьНачалоЭлемента("InputDataType"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(Число(ПараметрыШтрихкода.ТипВходныхДанных))); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // Значение штрихкода + ЗаписьXML.ЗаписатьНачалоЭлемента("CodeValue"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(Строка(ПараметрыШтрихкода.Штрихкод))); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьКонецЭлемента(); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ПараметрыГенерацииXML = ЗаписьXML.Закрыть(); + + РезультатXML = ""; + ВнешняяКомпонента.СгенерироватьШтрихкод(ПараметрыГенерацииXML, РезультатXML); + + // Результат + РезультатОперации = Новый Структура(); + РезультатОперации.Вставить("Результат", Ложь); + РезультатОперации.Вставить("ДвоичныеДанные"); + РезультатОперации.Вставить("Картинка"); + + Если Не ПустаяСтрока(РезультатXML) Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(РезультатXML); + ЧтениеXML.ПерейтиКСодержимому(); + АтрибутыПараметра = Неопределено; + Если ЧтениеXML.Имя = "MakeBarcodeResult" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя = "Result" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Прочитать() Тогда + РезультатОперации.Результат = Число(ЧтениеXML.Значение) = 0; + ИначеЕсли ЧтениеXML.Имя = "ImageBase64" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Прочитать() Тогда + КартинкаBase64 = ЧтениеXML.Значение; + ДвоичныеДанныеКартинки = Base64Значение(КартинкаBase64); + // Если картинка сформировалась. + Если ДвоичныеДанныеКартинки <> Неопределено Тогда + РезультатОперации.ДвоичныеДанные = ДвоичныеДанныеКартинки; + РезультатОперации.Картинка = Новый Картинка(ДвоичныеДанныеКартинки); // Формируем из двоичных данных. + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Возврат РезультатОперации; + +КонецФункции + +// Подготовить изображения штрихкода. +// +// Параметры: +// ВнешняяКомпонента - см. ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода +// ПараметрыШтрихкода - см. ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода +// +// Возвращаемое значение: +// Структура: +// Результат - Булево - результат генерации штрихкода. +// ДвоичныеДанные - ДвоичныеДанные - двоичные данные изображения штрихкода. +// Картинка - Картинка - картинка с сформированным штрихкодом или НЕОПРЕДЕЛЕНО. +// +Функция ПодготовитьИзображениеШтрихкодаСвойства(ВнешняяКомпонента, ПараметрыШтрихкода) + + // Результат + РезультатОперации = Новый Структура(); + РезультатОперации.Вставить("Результат", Ложь); + РезультатОперации.Вставить("ДвоичныеДанные"); + РезультатОперации.Вставить("Картинка"); + + // Зададим размер формируемой картинки. + ШиринаШтрихкода = Окр(ПараметрыШтрихкода.Ширина); + ВысотаШтрихкода = Окр(ПараметрыШтрихкода.Высота); + Если ШиринаШтрихкода <= 0 Тогда + ШиринаШтрихкода = 1 + КонецЕсли; + Если ВысотаШтрихкода <= 0 Тогда + ВысотаШтрихкода = 1 + КонецЕсли; + ВнешняяКомпонента.Ширина = ШиринаШтрихкода; + ВнешняяКомпонента.Высота = ВысотаШтрихкода; + ВнешняяКомпонента.АвтоТип = Ложь; + + ШтрихкодВрем = Строка(ПараметрыШтрихкода.Штрихкод); // Преобразуем явно в строку. + + Если ПараметрыШтрихкода.ТипКода = 99 Тогда + ВнешняяКомпонента.АвтоТип = Истина; + Иначе + ВнешняяКомпонента.АвтоТип = Ложь; + ВнешняяКомпонента.ТипКода = ПараметрыШтрихкода.ТипКода; + КонецЕсли; + + Если ПараметрыШтрихкода.Свойство("ПрозрачныйФон") Тогда + ВнешняяКомпонента.ПрозрачныйФон = ПараметрыШтрихкода.ПрозрачныйФон; + КонецЕсли; + + Если ПараметрыШтрихкода.Свойство("ТипВходныхДанных") Тогда + ВнешняяКомпонента.ТипВходныхДанных = ПараметрыШтрихкода.ТипВходныхДанных; + КонецЕсли; + + Если ПараметрыШтрихкода.Свойство("GS1DatabarКоличествоСтрок") Тогда + ВнешняяКомпонента.GS1DatabarКоличествоСтрок = ПараметрыШтрихкода.GS1DatabarКоличествоСтрок; + КонецЕсли; + + Если ПараметрыШтрихкода.Свойство("УбратьЛишнийФон") Тогда + ВнешняяКомпонента.УбратьЛишнийФон = ПараметрыШтрихкода.УбратьЛишнийФон; + КонецЕсли; + + Если ПараметрыШтрихкода.Свойство("Инвертирован") Тогда + Попытка + ВнешняяКомпонента.Инвертирован = ПараметрыШтрихкода.Инвертирован; + Исключение + #Если НЕ МобильноеПриложениеСервер Тогда + МодульОбщегоНазначения = МодульОбщегоНазначения(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Используется старая версия компоненты генерации штрихкода'", + МодульОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + #КонецЕсли + КонецПопытки + КонецЕсли; + + ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст; + // Формируем картинку штрихкода. + ВнешняяКомпонента.ЗначениеКода = ШтрихкодВрем; + // Угол поворота штрихкода. + ВнешняяКомпонента.УголПоворота = ?(ПараметрыШтрихкода.Свойство("УголПоворота"), ПараметрыШтрихкода.УголПоворота, 0); + // Уровень коррекции QR кода (L=0, M=1, Q=2, H=3). + ВнешняяКомпонента.УровеньКоррекцииQR = ?(ПараметрыШтрихкода.Свойство("УровеньКоррекцииQR"), ПараметрыШтрихкода.УровеньКоррекцииQR, 1); + + // Для обеспечения совместимости с предыдущими версиями БПО. + Если Не ПараметрыШтрихкода.Свойство("Масштабировать") + Или (ПараметрыШтрихкода.Свойство("Масштабировать") И ПараметрыШтрихкода.Масштабировать) Тогда + + Если Не ПараметрыШтрихкода.Свойство("СохранятьПропорции") + Или (ПараметрыШтрихкода.Свойство("СохранятьПропорции") И Не ПараметрыШтрихкода.СохранятьПропорции) Тогда + // Если установленная нами ширина меньше минимально допустимой для этого штрихкода. + Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда + ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода; + КонецЕсли; + // Если установленная нами высота меньше минимально допустимой для этого штрихкода. + Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда + ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода; + КонецЕсли; + ИначеЕсли ПараметрыШтрихкода.Свойство("СохранятьПропорции") И ПараметрыШтрихкода.СохранятьПропорции Тогда + Пока ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода + Или ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Цикл + // Если установленная нами ширина меньше минимально допустимой для этого штрихкода. + Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда + ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода; + ВнешняяКомпонента.Высота = Окр(ВнешняяКомпонента.МинимальнаяШиринаКода / ШиринаШтрихкода) * ВысотаШтрихкода; + КонецЕсли; + // Если установленная нами высота меньше минимально допустимой для этого штрихкода. + Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда + ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода; + ВнешняяКомпонента.Ширина = Окр(ВнешняяКомпонента.МинимальнаяВысотаКода / ВысотаШтрихкода) * ШиринаШтрихкода; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + // ВертикальноеВыравниваниеКода: 1 - по верхнему краю, 2 - по центру, 3 - по нижнему краю. + Если ПараметрыШтрихкода.Свойство("ВертикальноеВыравнивание") И (ПараметрыШтрихкода.ВертикальноеВыравнивание > 0) Тогда + ВнешняяКомпонента.ВертикальноеВыравниваниеКода = ПараметрыШтрихкода.ВертикальноеВыравнивание; + КонецЕсли; + + Если ПараметрыШтрихкода.Свойство("РазмерШрифта") И (ПараметрыШтрихкода.РазмерШрифта > 0) + И (ПараметрыШтрихкода.ОтображатьТекст) И (ВнешняяКомпонента.РазмерШрифта <> ПараметрыШтрихкода.РазмерШрифта) Тогда + ВнешняяКомпонента.РазмерШрифта = ПараметрыШтрихкода.РазмерШрифта; + КонецЕсли; + + Если ПараметрыШтрихкода.ТипКода = 16 Тогда // QR + Если ПараметрыШтрихкода.Свойство("ЛоготипКартинка") И ЗначениеЗаполнено(ПараметрыШтрихкода.ЛоготипКартинка) Тогда + ВнешняяКомпонента.ЛоготипКартинка = ПараметрыШтрихкода.ЛоготипКартинка; + Иначе + ВнешняяКомпонента.ЛоготипКартинка = ""; + КонецЕсли; + Если ПараметрыШтрихкода.Свойство("ЛоготипРазмерПроцентОтШК") И Не ПустаяСтрока(ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК) Тогда + ВнешняяКомпонента.ЛоготипРазмерПроцентОтШК = ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК; + КонецЕсли; + КонецЕсли; + + // Сформируем картинку + ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод(); + РезультатОперации.Результат = ВнешняяКомпонента.Результат = 0; + // Если картинка сформировалась. + Если ДвоичныеДанныеКартинки <> Неопределено Тогда + РезультатОперации.ДвоичныеДанные = ДвоичныеДанныеКартинки; + РезультатОперации.Картинка = Новый Картинка(ДвоичныеДанныеКартинки); // Формируем из двоичных данных. + КонецЕсли; + + Возврат РезультатОперации; + +КонецФункции + +Функция МодульОбщегоНазначения() + +#Если Не МобильноеПриложениеСервер Тогда + УстановитьБезопасныйРежим(Истина); +#КонецЕсли + Если Метаданные.Подсистемы.Найти("ПоддержкаОборудования") = Неопределено Тогда + // Вызов БСП + Возврат Вычислить("ОбщегоНазначения"); + // Конец Вызов БСП + Иначе + Возврат Вычислить("ОбщегоНазначенияБПО"); + КонецЕсли; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ГенерацияШтрихкодаСерверПовтИсп.xml b/CommonModules/ГенерацияШтрихкодаСерверПовтИсп.xml new file mode 100644 index 0000000..3f9e2b8 --- /dev/null +++ b/CommonModules/ГенерацияШтрихкодаСерверПовтИсп.xml @@ -0,0 +1,23 @@ + + + + + ГенерацияШтрихкодаСерверПовтИсп + + + ru + Генерация штрихкода сервер повт исп + + + + false + false + true + true + true + false + false + DuringSession + + + \ No newline at end of file diff --git a/CommonModules/ГенерацияШтрихкодаСерверПовтИсп/Ext/Module.bsl b/CommonModules/ГенерацияШтрихкодаСерверПовтИсп/Ext/Module.bsl new file mode 100644 index 0000000..eb5a8c9 --- /dev/null +++ b/CommonModules/ГенерацияШтрихкодаСерверПовтИсп/Ext/Module.bsl @@ -0,0 +1,68 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Функция выполняет подключение внешней компоненты и ее первоначальную настройку. +// Выполняет подключение внешней компоненты. +// Функция возвращает Неопределено, если компоненту не удалось загрузить. +// +// Параметры: +// ТипПлатформыКомпоненты - Строка - тип платформы +// +// Возвращаемое значение: +// ОбъектВнешнейКомпоненты: +// * ECL - Число +// * GS1DatabarКоличествоСтрок - Число +// * АвтоТип - Булево +// * Версия - Строка +// * ВертикальноеВыравниваниеКода - Число +// * ВертСмещение - Число +// * ВидимостьКС - Булево +// * ВыравниваниеКода - Число +// * Высота - Число +// * ГорСмещение - Число +// * ГрафикаУстановлена - Булево +// * ЗначениеКода - Строка +// * ИмяФайла - Строка +// * КоличествоСтолбцов - Число +// * КоличествоСтрок - Число +// * КоличествоШрифтов - Число +// * КонтрольныйСимвол - Строка +// * ЛоготипКартинка - Картинка +// * ЛоготипРазмерПроцентОтШК - Число +// * МаксимальныйРазмерШрифтаДляПринтеровНизкогоРазрешения - Число +// * МинимальнаяВысотаКода - Число +// * МинимальнаяШиринаКода - Число +// * ОтображатьТекст - Булево +// * ПрозрачныйФон - Булево +// * Пропорции - Строка +// * РазделителиКода - Число +// * РазмерКрая - Число +// * РазмерШрифта - Число +// * Результат - Число +// * ТекстКода - Строка +// * ТипВходныхДанных - Число +// * ТипКода - Число +// * УбратьЛишнийФон - Булево +// * УголПоворота - Число +// * УровеньКоррекцииQR - Число +// * ЦветПолос - Число +// * ЦветТекста - Число +// * ЦветФона - Число +// * Ширина - Число +// * Шрифт - Строка +// Неопределено +// +Функция ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ТипПлатформыКомпоненты) Экспорт + + Возврат ГенерацияШтрихкода.ПодключитьКомпонентуГенерацииИзображенияШтрихкода(); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ИнтеграцияПодсистемБПО.xml b/CommonModules/ИнтеграцияПодсистемБПО.xml new file mode 100644 index 0000000..55668fe --- /dev/null +++ b/CommonModules/ИнтеграцияПодсистемБПО.xml @@ -0,0 +1,23 @@ + + + + + ИнтеграцияПодсистемБПО + + + ru + Интеграция подсистем БПО + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ИнтеграцияПодсистемБПО/Ext/Module.bsl b/CommonModules/ИнтеграцияПодсистемБПО/Ext/Module.bsl new file mode 100644 index 0000000..50f0725 --- /dev/null +++ b/CommonModules/ИнтеграцияПодсистемБПО/Ext/Module.bsl @@ -0,0 +1,205 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Библиотека подключаемого оборудования". +// ОбщийМодуль.ИнтеграцияПодсистемБПО. +// +// Серверные процедуры и функции интеграции с БСП: +// - Подписка на события БСП; +// - Обработка событий БСП; +// - Определение списка возможных подписок в БСП; +// - Вызов методов БСП, на которые выполнена подписка. +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// Определяет события, на которые подписана эта библиотека. +// +// Параметры: +// Подписки - Структура +// +Процедура ПриОпределенииПодписокНаСобытияБСП(Подписки) Экспорт + + // БазоваяФункциональность + Подписки.ПриДобавленииПодсистем = Истина; + Подписки.ПриДобавленииПараметровРаботыКлиентаПриЗапуске = Истина; + Подписки.ПриДобавленииОбработчиковУстановкиПараметровСеанса = Истина; + + // ВнешниеКомпоненты + Подписки.ПриОпределенииИспользуемыхВнешнихКомпонент = Истина; + + // РегламентныеЗадания + Подписки.ПриОпределенииНастроекРегламентныхЗаданий = Истина; + + +КонецПроцедуры + +// См. ИнтеграцияПодсистемБСП.ПриОпределенииИспользуемыхВнешнихКомпонент. +// +Процедура ПриОпределенииИспользуемыхВнешнихКомпонент(Компоненты) Экспорт + + МенеджерОборудования.ЗаполнитьИспользуемыеВнешниеКомпоненты(Компоненты); + +КонецПроцедуры + +#Область БазоваяФункциональность + +// См. ПодсистемыКонфигурацииПереопределяемый.ПриДобавленииПодсистем. +// +Процедура ПриДобавленииПодсистем(МодулиПодсистем) Экспорт + + МодулиПодсистем.Добавить("ОбновлениеИнформационнойБазыБПО"); + +КонецПроцедуры + +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. +// +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт + + Если ОбщегоНазначенияБПО.РазделениеВключено() + И Не ОбщегоНазначенияБПО.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначенияБПО.ИспользуетсяБСП() Тогда + Параметры.Вставить("ИменаПодсистем", ОбщегоНазначенияБПОПовтИсп.ИменаПодсистем()); + Если Параметры.Свойство("ТекущаяДатаНаКлиенте") Тогда + ДатаСеанса = ТекущаяДатаСеанса(); + Параметры.Вставить("ПоправкаКВремениСеанса", ДатаСеанса - Параметры.ТекущаяДатаНаКлиенте); + Иначе + Параметры.Вставить("ПоправкаКВремениСеанса", 0); + КонецЕсли; + КонецЕсли; + + ИдентификаторОбсужденияРаспределеннойФискализации = Неопределено; + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + ИдентификаторОбсужденияРаспределеннойФискализации = МодульРаспределеннаяФискализация.ПодключениеСистемыВзаимодействия(); + КонецЕсли; + + ВерсияБСП = ОбщегоНазначенияБПО.ВерсияБСП(); + Параметры.Вставить("ВерсияБСП", ВерсияБСП); + Параметры.Вставить("ВерсияБиблиотеки", МенеджерОборудования.ВерсияБиблиотеки()); + Параметры.Вставить("ИдентификаторОбсужденияРаспределеннойФискализации", ИдентификаторОбсужденияРаспределеннойФискализации); + Параметры.Вставить("СоответствиеТиповОборудования", МенеджерОборудования.СоответствиеТиповОборудования()); + Параметры.Вставить("ДоступныеТипыОборудования", МенеджерОборудования.ДоступныеТипыОборудования(Истина)); + + УстановитьПривилегированныйРежим(Истина); + РабочееМесто = ПараметрыСеанса.РабочееМестоКлиента; // требуется прямое обращение к параметру сеанса + ПараметрыРабочегоМеста = МенеджерОборудования.ПараметрыРабочегоМестаПриЗапуске(РабочееМесто); + Параметры.Вставить("ПараметрыРабочегоМеста", ПараметрыРабочегоМеста); + + + ОборудованиеДляПереустановки = МенеджерОборудования.МакетыДляПереустановкиДрайверов(РабочееМесто); + Параметры.Вставить("ОборудованиеДляПереустановки", ОборудованиеДляПереустановки); + + Параметры.Вставить("ПараметрыЛогированияОперацийСОборудованием", Неопределено); + Если ОбщегоНазначенияБПО.ИспользуетсяПодсистемаЛогирования() Тогда + МодульЛогированиеОперацийБПО = ОбщегоНазначенияБПО.ОбщийМодуль("ЛогированиеОперацийБПО"); + ПараметрыЛогирования = МодульЛогированиеОперацийБПО.ПараметрыЛогированияОперацийСОборудованием(); + Параметры.ПараметрыЛогированияОперацийСОборудованием = ПараметрыЛогирования; + КонецЕсли; + +КонецПроцедуры + +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. +// +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт + +КонецПроцедуры + +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. +// +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт + +КонецПроцедуры + +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. +// +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + + Обработчики.Вставить("РабочееМестоКлиента", + "МенеджерОборудованияВызовСервера.УстановитьПараметрыСеансаПодключаемогоОборудования"); + +КонецПроцедуры + +// Вызов этой процедуры необходимо разместить в модуле сеанса в процедуре УстановкаПараметровСеанса +// согласно документации. +// +// Параметры: +// ИменаПараметровСеанса - Массив - устанавливаемые идентификаторы параметров сеанса +// +Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) Экспорт + + Если ИменаПараметровСеанса <> Неопределено Тогда + + Для Каждого ИмяПараметра Из ИменаПараметровСеанса Цикл + Если ИмяПараметра = "РабочееМестоКлиента" Тогда + МенеджерОборудованияВызовСервера.УстановитьПараметрыСеансаПодключаемогоОборудования(ИмяПараметра, Неопределено); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +// Вызов этой процедуры необходимо выполнить после обновления БПО, если не используется БСП +Процедура ОбновлениеИнформационнойБазыБПО() Экспорт + + РегистрыСведений.ЗначенияЕМРЦ.ЗаполнитьЗначенияРегистраЕМРЦ(); + + МенеджерОборудования.ОбновитьПоставляемыеДрайвера(); + МенеджерОборудования.ОбновитьУстановленныеДрайвера(); + + ОбновлениеИнформационнойБазыБПО.ОбновитьШаблоныЭтикетокИЦенников(); + ОбновлениеИнформационнойБазыБПО.ОбновитьПараметрыРегистрацииОборудования(); + ОбновлениеИнформационнойБазыБПО.УстановитьСрокХраненияОпераций() + +КонецПроцедуры + +#КонецОбласти + +#Область РегламентныеЗадания + +// Вызывается из процедуры РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий +// для установки доступности регламентного задания, определяет зависимость от функциональных опций. +// +// Параметры: +// Настройки - ТаблицаЗначений +// ФункциональнаяОпция - ОбъектМетаданныхФункциональнаяОпция +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки, ФункциональнаяОпция = Неопределено) Экспорт + + +КонецПроцедуры + +#КонецОбласти + +#Область РегламентныеЗаданияТехнологияСервиса + +// См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов +Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт + + +КонецПроцедуры + +// См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков +Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт + + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецОбласти diff --git a/CommonModules/ИнтеграцияПодсистемБПОКлиент.xml b/CommonModules/ИнтеграцияПодсистемБПОКлиент.xml new file mode 100644 index 0000000..f8ebdf7 --- /dev/null +++ b/CommonModules/ИнтеграцияПодсистемБПОКлиент.xml @@ -0,0 +1,23 @@ + + + + + ИнтеграцияПодсистемБПОКлиент + + + ru + Интеграция подсистем БПО клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ИнтеграцияПодсистемБПОКлиент/Ext/Module.bsl b/CommonModules/ИнтеграцияПодсистемБПОКлиент/Ext/Module.bsl new file mode 100644 index 0000000..384e014 --- /dev/null +++ b/CommonModules/ИнтеграцияПодсистемБПОКлиент/Ext/Module.bsl @@ -0,0 +1,197 @@ +#Область ПрограммныйИнтерфейс + +#Область ОбработчикиСобытийБСП +// Обработка программных событий, возникающих в подсистемах БСП. + +// Определяет события, на которые подписана эта библиотека. +// +// Параметры: +// Подписки - Структура - Ключами свойств структуры являются имена событий, на которые +// подписана эта библиотека. +// +Процедура ПриОпределенииПодписокНаСобытияБСП(Подписки) Экспорт + + // БазоваяФункциональность + Подписки.ПередНачаломРаботыСистемы = Истина; + Подписки.ПриНачалеРаботыСистемы = Истина; + Подписки.ПередЗавершениемРаботыСистемы = Истина; + +КонецПроцедуры + +// Функция, вызываемая перед началом работы системы. +// +Процедура ПередНачаломРаботыСистемы() Экспорт + + Если ОбщегоНазначенияБПОКлиент.РазделениеВключено() + И Не ОбщегоНазначенияБПОКлиент.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + ПараметрыРаботыКлиента = ПараметрыРаботыКлиентаПриЗапуске(); + ПодготовитьПараметрыПриложения(ПараметрыРаботыКлиента); + +КонецПроцедуры + +// Функция, вызываемая при начале работы системы. +// +Процедура ПриНачалеРаботыСистемы() Экспорт + + Если ОбщегоНазначенияБПОКлиент.РазделениеВключено() + И Не ОбщегоНазначенияБПОКлиент.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + ПараметрыРаботыКлиента = ПараметрыРаботыКлиентаПриЗапуске(); + ПодготовитьПараметрыПриложения(ПараметрыРаботыКлиента); + +#Если МобильноеПриложениеКлиент Или МобильныйКлиент Тогда + СоздаватьРабочееМесто = Истина; + МенеджерОборудованияКлиент.ОпределитьРабочееМесто(СоздаватьРабочееМесто); +#Иначе +#КонецЕсли + + + +КонецПроцедуры + +// Процедура, вызываемая при начале работы системы, выполняет подготовку данных механизма. +// +// Параметры: +// Отказ - Булево +// Предупреждения - Строка +// - Массив Из Структура +// +Процедура ПередЗавершениемРаботыСистемы(Отказ = Ложь, Предупреждения = "") Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПодсистемаЛогирования() + И ОбщегоНазначенияБПОКлиент.ДоступноИспользованиеРазделенныхДанных() Тогда + + ТекстПредупреждения = ""; + МодульЛогированиеОперацийБПОКлиент = + ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ЛогированиеОперацийБПОКлиент"); + МодульЛогированиеОперацийБПОКлиент.ЗаписатьЛогНаСервереПриЗавершении( + Отказ, ТекстПредупреждения); + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() + И ТипЗнч(Предупреждения) = Тип("Массив") Тогда + Если ЗначениеЗаполнено(ТекстПредупреждения) Тогда + МодульСтандартныеПодсистемыКлиент = + ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СтандартныеПодсистемыКлиент"); + Предупреждение = + МодульСтандартныеПодсистемыКлиент.ПредупреждениеПриЗавершенииРаботы(); + Предупреждение.ТекстПредупреждения = ТекстПредупреждения; + Предупреждения.Добавить(Предупреждение); + КонецЕсли; + Иначе + Предупреждения = ТекстПредупреждения; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +// Выполняет обработку внешнего события, вызывается из глобального модуля +// +// Параметры: +// Источник - Строка. +// Событие - Строка. +// Данные - Строка. +Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) Экспорт + + ОписаниеОшибки = ""; + // Подготовить данные + ОписаниеСобытия = Новый Структура(); + ОписаниеСобытия.Вставить("Источник", Источник); + ОписаниеСобытия.Вставить("Событие", Событие); + ОписаниеСобытия.Вставить("Данные", Данные); + // Передать на обработку данные. + Результат = МенеджерОборудованияКлиент.ОбработатьСобытиеОтУстройства(ОписаниеСобытия, ОписаниеОшибки); + Если Не Результат Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='При обработке внешнего события от устройства произошла ошибка.'") + Символы.ПС + ОписаниеОшибки); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает значения параметров, необходимых для работы клиентского кода конфигурации +// без дополнительных серверных вызовов. +// +// Возвращаемое значение: +// Структура: +// * ТекущаяДатаНаКлиенте - Дата +Функция ПараметрыРаботыКлиентаПриЗапуске() Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + ПараметрыРаботыКлиента = ОбщегоНазначенияБПОКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыРаботыКлиента.Свойство("ОборудованиеДляПереустановки") Тогда + Возврат ПараметрыРаботыКлиента; + КонецЕсли; + КонецЕсли; + + Возврат ИнтеграцияПодсистемБПОКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + +КонецФункции + +Процедура ПолученMACАдресПриЗапуске(MACАдрес, Параметры) Экспорт + + СоздаватьРабочееМесто = Истина; + МенеджерОборудованияКлиент.ОпределитьРабочееМесто(СоздаватьРабочееМесто); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПодготовитьПараметрыПриложения(ПараметрыРаботыКлиента) + + Если ПараметрыПриложения = Неопределено Тогда + ПараметрыПриложения = Новый Соответствие(); + КонецЕсли; + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + + Если Не ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + ИмяПараметра = "БПО.ПодсистемыКонфигурации"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, ПараметрыРаботыКлиента.ИменаПодсистем); + КонецЕсли; + + ПодключаемоеОборудование.ПоправкаКВремениСеанса = ПараметрыРаботыКлиента.ПоправкаКВремениСеанса; + + КонецЕсли; + + ИмяПараметра = "БПО.ВерсияБСП"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, ПараметрыРаботыКлиента.ВерсияБСП); + КонецЕсли; + + ИмяПараметра = "БПО.СоответствиеТиповОборудования"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, ПараметрыРаботыКлиента.СоответствиеТиповОборудования); + КонецЕсли; + + ИмяПараметра = "БПО.ДоступныеТипыОборудования"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, ПараметрыРаботыКлиента.ДоступныеТипыОборудования); + КонецЕсли; + + ПодключаемоеОборудование.ПараметрыРабочегоМеста = + ОбщегоНазначенияБПОКлиент.СкопироватьРекурсивно(ПараметрыРаботыКлиента.ПараметрыРабочегоМеста, Ложь); + + ПодключаемоеОборудование.ВерсияБиблиотеки = ПараметрыРаботыКлиента.ВерсияБиблиотеки; + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПодсистемаЛогирования() Тогда + Если ПодключаемоеОборудование.СистемаЛогирования = Неопределено Тогда + МодульЛогированиеОперацийБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ЛогированиеОперацийБПОКлиент"); + ПодключаемоеОборудование.СистемаЛогирования = МодульЛогированиеОперацийБПОКлиент.НоваяСистемаЛогирования(ПараметрыРаботыКлиента.ПараметрыЛогированияОперацийСОборудованием); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + diff --git a/CommonModules/ИнтеграцияПодсистемБПОКлиентПовтИсп.xml b/CommonModules/ИнтеграцияПодсистемБПОКлиентПовтИсп.xml new file mode 100644 index 0000000..f223440 --- /dev/null +++ b/CommonModules/ИнтеграцияПодсистемБПОКлиентПовтИсп.xml @@ -0,0 +1,23 @@ + + + + + ИнтеграцияПодсистемБПОКлиентПовтИсп + + + ru + Интеграция подсистем БПО клиент + + + + false + true + false + false + true + false + false + DuringSession + + + \ No newline at end of file diff --git a/CommonModules/ИнтеграцияПодсистемБПОКлиентПовтИсп/Ext/Module.bsl b/CommonModules/ИнтеграцияПодсистемБПОКлиентПовтИсп/Ext/Module.bsl new file mode 100644 index 0000000..7da8c6a --- /dev/null +++ b/CommonModules/ИнтеграцияПодсистемБПОКлиентПовтИсп/Ext/Module.bsl @@ -0,0 +1,19 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Создает структуру и заполняет параметры работы клиента на сервере +// Стандарт Минимизация количества серверных вызовов и трафика. +// +// Возвращаемое значение: +// Структура: +// * ТекущаяДатаНаКлиенте - Дата +Функция ПараметрыРаботыКлиентаПриЗапуске() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ТекущаяДатаНаКлиенте", ТекущаяДата()); // АПК:143 Требуется ТекущаяДата() для расчета ПоправкаКВремениСеанса + ИнтеграцияПодсистемБПОСлужебныйВызовСервера.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); + Возврат Параметры; + +КонецФункции + +#КонецОбласти + diff --git a/CommonModules/ИнтеграцияПодсистемБПОСлужебныйВызовСервера.xml b/CommonModules/ИнтеграцияПодсистемБПОСлужебныйВызовСервера.xml new file mode 100644 index 0000000..0db6ddf --- /dev/null +++ b/CommonModules/ИнтеграцияПодсистемБПОСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ИнтеграцияПодсистемБПОСлужебныйВызовСервера + + + ru + Интеграция подсистем БПОСлужебный вызов сервера + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ИнтеграцияПодсистемБПОСлужебныйВызовСервера/Ext/Module.bsl b/CommonModules/ИнтеграцияПодсистемБПОСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..37bb746 --- /dev/null +++ b/CommonModules/ИнтеграцияПодсистемБПОСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,18 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Заполняет параметры работы клиента на сервере +// При использовании БСП процедуру требуется вызвать из процедуры +// ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента() +// +// Параметры: +// Параметры - Структура: +// * ИдентификаторКлиента - Строка - (входящий) идентификатор рабочего места клиента +// * ОборудованиеДляПереустановки - Массив из Структура - имена макетов для переустановки внешних компонент +// * ИдентификаторОбсужденияРаспределеннойФискализации - ИдентификаторОбсужденияСистемыВзаимодействия - +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт + + ИнтеграцияПодсистемБПО.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); + +КонецПроцедуры + +#КонецОбласти diff --git a/CommonModules/ЛогированиеОперацийБПО.xml b/CommonModules/ЛогированиеОперацийБПО.xml new file mode 100644 index 0000000..e00b82d --- /dev/null +++ b/CommonModules/ЛогированиеОперацийБПО.xml @@ -0,0 +1,23 @@ + + + + + ЛогированиеОперацийБПО + + + ru + Логирование операций БПОСервер + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ЛогированиеОперацийБПО/Ext/Module.bsl b/CommonModules/ЛогированиеОперацийБПО/Ext/Module.bsl new file mode 100644 index 0000000..d7db433 --- /dev/null +++ b/CommonModules/ЛогированиеОперацийБПО/Ext/Module.bsl @@ -0,0 +1,47 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + + +Функция ОпределитьДатуОчисткиОпераций(ПериодХранения) Экспорт + + ТекущаяДата = ОбщегоНазначенияБПО.ДатаСеанса(); + Если ПериодХранения = Перечисления.ПериодХраненияИсторииОпераций.День Тогда + ОдинДеньСекунды = 60*60*24*1; + ДатаОчистки = ТекущаяДата - ОдинДеньСекунды; + ИначеЕсли ПериодХранения = Перечисления.ПериодХраненияИсторииОпераций.Неделя Тогда + НеделяСекунды = 60*60*24*7; + ДатаОчистки = ТекущаяДата - НеделяСекунды; + ИначеЕсли ПериодХранения = Перечисления.ПериодХраненияИсторииОпераций.Декада Тогда + ДекадаСекунды = 60*60*24*10; + ДатаОчистки = ТекущаяДата - ДекадаСекунды; + ИначеЕсли ПериодХранения = Перечисления.ПериодХраненияИсторииОпераций.Месяц Тогда + ДатаОчистки = ДобавитьМесяц(ТекущаяДата, -1); + ИначеЕсли ПериодХранения = Перечисления.ПериодХраненияИсторииОпераций.Квартал Тогда + ДатаОчистки = ДобавитьМесяц(ТекущаяДата, -3); + ИначеЕсли ПериодХранения = Перечисления.ПериодХраненияИсторииОпераций.Полугодие Тогда + ДатаОчистки = ДобавитьМесяц(ТекущаяДата, -6); + ИначеЕсли ПериодХранения = Перечисления.ПериодХраненияИсторииОпераций.Год Тогда + ДатаОчистки = ДобавитьМесяц(ТекущаяДата, -12); + Иначе + Возврат Неопределено; + КонецЕсли; + + Возврат ДатаОчистки; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + + +#КонецОбласти + + diff --git a/CommonModules/ЛогированиеОперацийБПОПереопределяемый.xml b/CommonModules/ЛогированиеОперацийБПОПереопределяемый.xml new file mode 100644 index 0000000..619a32f --- /dev/null +++ b/CommonModules/ЛогированиеОперацийБПОПереопределяемый.xml @@ -0,0 +1,23 @@ + + + + + ЛогированиеОперацийБПОПереопределяемый + + + ru + Логирование операций БПОСервер переопределяемый + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ЛогированиеОперацийБПОПереопределяемый/Ext/Module.bsl b/CommonModules/ЛогированиеОперацийБПОПереопределяемый/Ext/Module.bsl new file mode 100644 index 0000000..5be3f3a --- /dev/null +++ b/CommonModules/ЛогированиеОперацийБПОПереопределяемый/Ext/Module.bsl @@ -0,0 +1,12 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + + +#КонецОбласти diff --git a/CommonModules/ЛогированиеОперацийБПОСлужебныйВызовСервера.xml b/CommonModules/ЛогированиеОперацийБПОСлужебныйВызовСервера.xml new file mode 100644 index 0000000..0b26830 --- /dev/null +++ b/CommonModules/ЛогированиеОперацийБПОСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЛогированиеОперацийБПОСлужебныйВызовСервера + + + ru + Логирование операций БПОСлужебный вызов сервера + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ЛогированиеОперацийБПОСлужебныйВызовСервера/Ext/Module.bsl b/CommonModules/ЛогированиеОперацийБПОСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..870869b --- /dev/null +++ b/CommonModules/ЛогированиеОперацийБПОСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,34 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ЗаписатьПлатежнуюОперацию(ТипОперации, ДанныеОперации, РезультатВыполнения) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемы = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеПлатежныеСистемы"); + МодульОборудованиеПлатежныеСистемы.ЗаписатьПлатежнуюОперацию(ТипОперации, ДанныеОперации, РезультатВыполнения); + КонецЕсли + +КонецПроцедуры + +// Устанавливает идентификатор фискальной операции в журнале логирования платежных операций по идентификатору запроса +// +// Параметры: +// ИдентификаторЗапроса - Строка - Уникальный идентификатор запроса +// ИдентификаторФискальнойОперации - Строка - Идентификатор фискальной операции +Процедура УстановитьИдентификаторФискальнойЗаписи(ИдентификаторЗапроса, ИдентификаторФискальнойОперации) Экспорт + + РегистрыСведений.ПлатежныеОперации.УстановитьРеквизитПлатежнойОперации(ИдентификаторЗапроса, + "ИдентификаторФискальнойОперации", ИдентификаторФискальнойОперации); + +КонецПроцедуры + + +#КонецОбласти + diff --git a/CommonModules/МенеджерОборудования.xml b/CommonModules/МенеджерОборудования.xml new file mode 100644 index 0000000..19170d5 --- /dev/null +++ b/CommonModules/МенеджерОборудования.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудования + + + ru + Менеджер оборудования + + + Серверные процедуры и функции общего назначения + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудования/Ext/Module.bsl b/CommonModules/МенеджерОборудования/Ext/Module.bsl new file mode 100644 index 0000000..b89aea2 --- /dev/null +++ b/CommonModules/МенеджерОборудования/Ext/Module.bsl @@ -0,0 +1,1159 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область Системные + +// Возвращает номер версии библиотеки подключаемого оборудования. +// +// Возвращаемое значение: +// Строка. +// +Функция ВерсияБиблиотеки() Экспорт + + ВерсияБиблиотекиБПО = "3.2.620"; + Возврат ВерсияБиблиотекиБПО; + +КонецФункции + +// Возвращает список доступных типов оборудования. +// +// Параметры: +// ВключаяНеиспользуемые - Булево - по умолчанию Ложь, неиспользуемые не должны выводиться для выбора пользователем +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования - Массив доступных типов подключаемого оборудования в конфигурации. +// +Функция ДоступныеТипыОборудования(ВключаяНеиспользуемые = Ложь) Экспорт + + Возврат МенеджерОборудованияПовтИсп.ДоступныеТипыОборудования(ВключаяНеиспользуемые); + +КонецФункции + +// Возвращает доступность добавление новых драйверов. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноДобавлениеНовыхДрайверов() Экспорт + +#Если МобильноеПриложениеСервер Тогда + Результат = Ложь; +#Иначе + Результат = Истина; + ДобавлениеНовыхДрайверовДоступно = Результат; + СтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.ДоступноДобавлениеНовыхДрайверов(ДобавлениеНовыхДрайверовДоступно, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Результат, ДобавлениеНовыхДрайверовДоступно); +#КонецЕсли + Возврат Результат; + +КонецФункции + +// Возвращает доступность сетевого оборудования. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноСетевоеОборудование() Экспорт + +#Если МобильноеПриложениеСервер Тогда + Результат = Ложь; +#Иначе + Результат = Истина; + СетевоеОборудованиеДоступно = Результат; + СтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.ДоступноСетевоеОборудование(СетевоеОборудованиеДоступно, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Результат, СетевоеОборудованиеДоступно); +#КонецЕсли + Возврат Результат; + +КонецФункции + +// Возвращает доступность инкассации в форме управление фискальным устройством. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноИнкассацияВУправлениеФискальнымУстройством() Экспорт + + Результат = Ложь; + ИнкассацияДоступна = Результат; + СтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.ДоступноИнкассацияВУправлениеФискальнымУстройством(ИнкассацияДоступна, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Результат, ИнкассацияДоступна); + Возврат Результат; + +КонецФункции + +// Ведется учет ИСМП в конфигурации +// +// Возвращаемое значение: +// Булево - Ведется учет ИСМП в конфигурации +// +Функция ВедетсяУчетПродукцииИСМП() Экспорт + + СтандартнаяОбработка = Истина; + УчетПродукцииИСМП = Ложь; + МенеджерОборудованияВызовСервераПереопределяемый.ВедетсяУчетПродукцииИСМП(УчетПродукцииИСМП, СтандартнаяОбработка); + Результат = ?(Не СтандартнаяОбработка, УчетПродукцииИСМП, Ложь); + Возврат Результат; + +КонецФункции + +// Возвращает список доступных типов общедоступного оборудования. +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования - Массив доступных типов подключаемого оборудования в конфигурации. +// +Функция ДоступныеТипыОбщедоступногоОборудования() Экспорт + + СписокТиповОборудования = Новый Массив; + СтандартнаяОбработка = Истина; + + МенеджерОборудованияВызовСервераПереопределяемый.ДоступныеТипыСетевогоОборудования(СписокТиповОборудования, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + СписокТиповОборудования.Очистить(); + Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ККТ); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуютсяОблачныеККТ() Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ОблачнаяККТ); + КонецЕсли; + КонецЕсли; + + Возврат СписокТиповОборудования; + +КонецФункции + +Функция ДрайверПоставляетсяВКонфигурации(ИдентификаторУстройства) Экспорт + + Результат = ИдентификаторУстройства.ДрайверОборудования.Предопределенный + И Не ИдентификаторУстройства.ДрайверОборудования.СнятСПоддержки; + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ОбновлениеДрайверов + +// Обновить поставляемые драйвера БПО. +// +Процедура ОбновитьПоставляемыеДрайвера() Экспорт + + МодулиОбновления = Новый Массив(); + Если ОбщегоНазначенияБПО.ИспользуетсяУстройстваВвода() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеУстройстваВвода")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройства")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеПлатежныеСистемы")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяДисплеиПокупателя() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеДисплеиПокупателя")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяВесовоеОборудование() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеВесовоеОборудование")); + КонецЕсли; + ДрайвераОборудования = НоваяТаблицаПоставляемыхДрайверовОборудования(); + Для Каждого МодульОбновления Из МодулиОбновления Цикл + МодульОбновления.ОбновитьПоставляемыеДрайвера(ДрайвераОборудования); + КонецЦикла; + + Справочники.ДрайверыОборудования.ПриНачальномЗаполненииЭлементов(ДрайвераОборудования); + + УдалитьУстаревшиеДрайвера(); + +КонецПроцедуры + +// Обновить установленные драйвера. +// +Процедура ОбновитьУстановленныеДрайвера() Экспорт + + ТипыДрайверов = ТипыДрайверовОбязательныхКОбновлению(); + УстановитьФлагОбновленияПоТипам(ТипыДрайверов); + +КонецПроцедуры + +// Записывает изменения в переданном объекте. +// Для использования в обработчиках обновления. +// +// Параметры: +// Данные - Произвольный - объект, набор записей или менеджер константы, который +// необходимо записать. +// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. +// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. +// +Процедура ЗаписатьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, Знач ВключитьБизнесЛогику = Ложь) Экспорт + + Данные.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; + Если Не РегистрироватьНаУзлахПлановОбмена Тогда + Данные.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + Данные.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + КонецЕсли; + + Данные.Записать(); + +КонецПроцедуры + +// Устанавливает признак необходимости переустановки оборудования для подключаемого оборудования на рабочем месте. +// +// Параметры: +// РабочееМесто - СправочникСсылка.РабочиеМеста. +// ДрайверОборудования - СправочникСсылка.ДрайверыОборудования. +// Признак - Булево - требуется переустановить драйвер +// +Процедура УстановитьПризнакПереустановкиДрайвера(РабочееМесто, ДрайверОборудования, Признак) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПодключаемоеОборудование.Ссылка + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.РабочееМесто = &РабочееМесто + | И ПодключаемоеОборудование.ДрайверОборудования = &ДрайверОборудования + | И НЕ ПодключаемоеОборудование.ТребуетсяПереустановка = &ТребуетсяПереустановка"); + + Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто); + Запрос.УстановитьПараметр("ДрайверОборудования", ДрайверОборудования); + Запрос.УстановитьПараметр("ТребуетсяПереустановка", Признак); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); + СправочникОбъект.ТребуетсяПереустановка = Признак; + ЗаписатьДанные(СправочникОбъект) + КонецЦикла; + +КонецПроцедуры + +// Обновить установленные драйвера по справочнику подключаемого оборудования. +// +// Параметры: +// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования +Процедура ОбновитьУстановленныеДрайвераПоТипу(ТипОборудования) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос("ВЫБРАТЬ + | ПодключаемоеОборудование.Ссылка + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | (ПодключаемоеОборудование.ТипОборудования = &ТипОборудования)"); + + Запрос.УстановитьПараметр("ТипОборудования", ТипОборудования); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); + СправочникОбъект.ТребуетсяПереустановка = Истина; + ЗаписатьДанные(СправочникОбъект) + КонецЦикла; + +КонецПроцедуры + +// Возвращает таблицу поставляемых в библиотеке драйверов +// +// Возвращаемое значение: +// см. НоваяТаблицаПоставляемыхДрайверовОборудования +Функция ПоставляемыеДрайверы() Экспорт + + Возврат МенеджерОборудованияПовтИсп.ПоставляемыеДрайверы(); + +КонецФункции + +#КонецОбласти + + +#Область РаботаСОборудованием + +// Возвращает список подключенного в справочнике ПО по установленному отбору +// +// Параметры: +// Отбор - см. МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор. +// +// Возвращаемое значение: +// Массив из Структура. +// +Функция СписокОборудования(Отбор) Экспорт + + Возврат Справочники.ПодключаемоеОборудование.СписокОборудования(Отбор); + +КонецФункции + +// Функция возвращает структуру с данными устройства. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// КодЯзыка - Неопределено, Строка - +// +// Возвращаемое значение: +// см. Справочники.ПодключаемоеОборудование.ДанныеУстройства +// +Функция ДанныеУстройства(Идентификатор, КодЯзыка = Неопределено) Экспорт + + Возврат Справочники.ПодключаемоеОборудование.ДанныеУстройства(Идентификатор, КодЯзыка); + +КонецФункции + +// Функция возвращает по идентификатору устройства его параметры +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// +// Возвращаемое значение: +// - Произвольный +// - Структура +// +Функция ПараметрыУстройства(Идентификатор) Экспорт + + Возврат Справочники.ПодключаемоеОборудование.ПараметрыУстройства(Идентификатор); + +КонецФункции + +// Процедура предназначена для сохранения параметров устройства +// в реквизит Параметры типа хранилище значения в элементе справочника. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// Параметры - Структура - параметры устройства. +// +// Возвращаемое значение: +// Булево. +// +Функция СохранитьПараметрыУстройства(Идентификатор, Параметры) Экспорт + + Возврат Справочники.ПодключаемоеОборудование.СохранитьПараметрыУстройства(Идентификатор, Параметры); + +КонецФункции + +// Функция возвращает структуру с данными драйвера. +// +// Параметры: +// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера. +// +// Возвращаемое значение: +// Структура. +// +Функция ДанныеДрайвераОборудования(ИдентификаторДрайвера) Экспорт + + Возврат Справочники.ДрайверыОборудования.ДанныеДрайвераОборудования(ИдентификаторДрайвера); + +КонецФункции + +// Функция возвращает драйвера по типу оборудования +// +// Параметры: +// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - типы подключаемого оборудования. +// ТолькоДоступные - Булево - признак только доступных драйверов. +// СнятыеСПоддержкиДрайвера - Булево - признак отображения снятых с поддержки драйверов. +// РекомендуемоеИспользование - Булево - признак отображения рекомендуемых к использованию драйверов. +// +// Возвращаемое значение: +// СписокЗначений. +// +Функция ДрайверыПоТипуОборудования(ТипОборудования, ТолькоДоступные = Истина, СнятыеСПоддержкиДрайвера = Ложь, РекомендуемоеИспользование = Ложь) Экспорт + + Возврат Справочники.ДрайверыОборудования.ДрайверыПоТипуОборудования(ТипОборудования, ТолькоДоступные, СнятыеСПоддержкиДрайвера, РекомендуемоеИспользование); + +КонецФункции + +// Функция создает запись в справочнике о новом драйвере. +// +// Параметры: +// ПараметрыСоздания - см. МенеджерОборудованияКлиентСервер.ПараметрыСозданияНовогоДрайвера +// +// Возвращаемое значение: +// СправочникСсылка.ДрайверыОборудования. +// +Функция СоздатьДрайверОборудования(ПараметрыСоздания) Экспорт + + Возврат Справочники.ДрайверыОборудования.СоздатьНовыйЭлемент(ПараметрыСоздания); + +КонецФункции + +// Функция создает запись в справочнике о новом драйвере. +// +// Параметры: +// ПараметрыСоздания - см. МенеджерОборудованияКлиентСервер.ПараметрыСозданияНовогоПодключаемогоОборудования +// +// Возвращаемое значение: +// СправочникСсылка.ПодключаемоеОборудование. +// +Функция СоздатьПодключаемоеОборудование(ПараметрыСоздания) Экспорт + + Возврат Справочники.ПодключаемоеОборудование.СоздатьНовыйЭлемент(ПараметрыСоздания); + +КонецФункции + +// Получить параметры подключения в XML +// +// Параметры: +// Параметры - Структура - Параметры подключения. +// ТипОборудования - Строка - Тип оборудования +// Возвращаемое значение: +// Строка - +// +Функция ПолучитьПараметрыXML(Параметры, ТипОборудования = Неопределено) Экспорт + + Результат = ""; + + Если Параметры <> Неопределено Тогда + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters"); + + Если Не ПустаяСтрока(ТипОборудования) Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("Parameter"); + ЗаписьXML.ЗаписатьАтрибут("Name", "EquipmentType"); + ЗаписьXML.ЗаписатьАтрибут("Value", XMLСтрока(ТипОборудования)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + + Для Каждого Параметр ИЗ Параметры Цикл + Если Лев(Параметр.Ключ, 2) = "P_" Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("Parameter"); + ЗаписьXML.ЗаписатьАтрибут("Name", Сред(Параметр.Ключ, 3)); + ЗаписьXML.ЗаписатьАтрибут("Value", XMLСтрока(Параметр.Значение)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + КонецЦикла; + ЗаписьXML.ЗаписатьКонецЭлемента(); + Результат = ЗаписьXML.Закрыть(); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Получить параметры подключения из XML +// +// Параметры: +// ПараметрыXML - Строка - Параметры подключения в XML. +// Возвращаемое значение: +// Структура - +// +Функция ЗагрузитьПараметрыXML(ПараметрыXML) Экспорт + + Параметры = Новый Структура(); + + Если НЕ ПустаяСтрока(ПараметрыXML) Тогда + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ПараметрыXML); + ЧтениеXML.ПерейтиКСодержимому(); + + Если ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя = "Parameter" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ПараметрИмя = ЧтениеXML.ЗначениеАтрибута("Name"); + ПараметрЗначение = ЧтениеXML.ЗначениеАтрибута("Value"); + Если ПараметрИмя <> "EquipmentType" Тогда + ПараметрИмя = "P_" + ПараметрИмя; + Параметры.Вставить(ПараметрИмя, ПараметрЗначение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Возврат Параметры; + +КонецФункции + +// Параметры приложения для драйвера. +// +// Возвращаемое значение: +// Строка +// +Функция ПараметрыПриложенияДляДрайвера() Экспорт + + ПриложениеНазвание = "1C:Connected Equipment Library, ver 3.2"; + ПриложениеВерсия = ВерсияБиблиотеки(); + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("ApplicationSettings"); + ЗаписьXML.ЗаписатьАтрибут("ApplicationName", XMLСтрока(ПриложениеНазвание)); + ЗаписьXML.ЗаписатьАтрибут("ApplicationVersion", XMLСтрока(ПриложениеВерсия)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + Результат = ЗаписьXML.Закрыть(); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ЕМРЦ + +// Получает цену ЕМРЦ из данных информационной базы на дату. +// +// Параметры: +// ОсобенностьУчета - ПеречислениеСсылка.ВидыМаркированнойПродукцииБПО - тип маркированной продукции для проверки цены. +// Период - Дата - дата проверки цены. +// ЕМРЦ - Число - значение ЕМРЦ. +// +Процедура ПолучитьЦенуЕМРЦ(ОсобенностьУчета, Период = Неопределено, ЕМРЦ = 0) Экспорт + // ++ Локализация + РегистрыСведений.ЗначенияЕМРЦ.ПолучитьЦенуЕМРЦ(Перечисления.ВидыМаркированнойПродукцииБПО.Табак, Период, ЕМРЦ); + // -- Локализация +КонецПроцедуры + +#КонецОбласти + +#Область ПлатежныеОперации + +// Проверяет были ли совершены сторнирования по документу основания. +// +// Параметры: +// ДокументОснования - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО - документ основание. +// +// Возвращаемое значение: +// Булево +// +Функция ВозможнаОтменаОплатыПоЧеку(ДокументОснования) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемы = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеПлатежныеСистемы"); + Возврат МодульОборудованиеПлатежныеСистемы.ВозможнаОтменаОплатыПоЧеку(ДокументОснования); + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область ПодключениеОборудования + +// Добавить на форму список подключаемого оборудования +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// ТипыОборудования - см. МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования +Процедура ПриСозданииНаСервере(Форма, ТипыОборудования) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудованиеНаФорме(Форма); + Если ЕстьПодключаемоеОборудование() Тогда + ПодключаемоеОборудование.ТипыПО = ТипыОборудования; + Отбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + Отбор.ТипыПО = ТипыОборудования; + РабочееМестоКлиентаНаСервере = МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + Если ЗначениеЗаполнено(РабочееМестоКлиентаНаСервере) Тогда + ПодключаемоеОборудование.СписокОборудования = СписокОборудования(Отбор); + Иначе + ПодключаемоеОборудование.ТребуетсяЗапросСпискаОборудованияНаКлиенте = Истина; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Проверяет существует ли в базе подключаемое оборудование, и возвращает +// Истина если в справочнике Подключаемое оборудование отсутствует хотя бы один элемент. +// +// Возвращаемое значение: +// Булево +Функция ЕстьПодключаемоеОборудование() Экспорт + + Если ОбщегоНазначенияБПО.РазделениеВключено() + И Не ОбщегоНазначенияБПО.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Ложь; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | ПодключаемоеОборудование.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование"; + + Результат = Запрос.Выполнить(); + Возврат Не Результат.Пустой(); + +КонецФункции + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +#Область Интеграция + +// Устарела: следует использовать ИнтеграцияПодсистемБПО.ПриОпределенииНастроекРегламентныхЗаданий. +// Вызывается из процедуры РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий +// для установки доступности регламентного задания, определяет зависимость от функциональных опций. +// +// Параметры: +// Настройки - ТаблицаЗначений +// ФункциональнаяОпция - ОбъектМетаданныхФункциональнаяОпция +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки, ФункциональнаяОпция) Экспорт + + ИнтеграцияПодсистемБПО.ПриОпределенииНастроекРегламентныхЗаданий(Настройки, ФункциональнаяОпция); + +КонецПроцедуры + +// Устарела: следует использовать ИнтеграцияПодсистемБПО.ПриПолученииСпискаШаблонов. +// См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов +Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт + + ИнтеграцияПодсистемБПО.ПриПолученииСпискаШаблонов(ШаблоныЗаданий); + +КонецПроцедуры + +// Устарела: следует использовать ИнтеграцияПодсистемБПО.ПриОпределенииПсевдонимовОбработчиков. +// См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков +Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт + + ИнтеграцияПодсистемБПО.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); + +КонецПроцедуры + +#КонецОбласти + +// Функция возвращает драйвера по типу оборудования +// +// Параметры: +// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - типы подключаемого оборудования. +// ТолькоДоступные - Булево - признак только доступных драйверов. +// СнятыеСПоддержкиДрайвера - Булево - признак отображения снятых с поддержки драйверов. +// РекомендуемоеИспользование - Булево - признак отображения рекомендуемых к использованию драйверов. +// +// Возвращаемое значение: +// СписокЗначений. +// +Функция ДрайвераПоТипуОборудования(ТипОборудования, ТолькоДоступные = Истина, СнятыеСПоддержкиДрайвера = Ложь, РекомендуемоеИспользование = Ложь) Экспорт + + Возврат ДрайверыПоТипуОборудования(ТипОборудования, ТолькоДоступные, СнятыеСПоддержкиДрайвера, РекомендуемоеИспользование); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ТипыОборудования + +// Структура типа оборудования +// +// Параметры: +// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - +// Возвращаемое значение: +// Структура +// +Функция ПараметрыТипыОборудования(ТипОборудования = Неопределено) Экспорт + + ТипыОборудования = МенеджерОборудованияПовтИсп.ПараметрыТипыОборудования(); + ТипыОборудования = ОбщегоНазначенияБПО.СкопироватьРекурсивно(ТипыОборудования); // Структура + + Если ЗначениеЗаполнено(ТипОборудования) Тогда + ИмяЗначенияПеречисления = ОбщегоНазначенияБПО.ИмяЗначенияПеречисления(ТипОборудования); + Если ТипыОборудования.Свойство(ИмяЗначенияПеречисления) Тогда + ТипыОборудования[ИмяЗначенияПеречисления] = Истина; + КонецЕсли; + КонецЕсли; + + Возврат ТипыОборудования; + +КонецФункции + +// Формирования массива типов оборудования +// +// Параметры: +// ТипыОборудования - Структура, Массив, Строка - тип оборудования. +// Возвращаемое значение: +// Массив из ОпределяемыйТип.ТипыПодключаемогоОборудования +// +Функция МассивТиповОборудования(ТипыОборудования) Экспорт + + МассивТипов = Новый Массив(); + Если ТипЗнч(ТипыОборудования) = Тип("Строка") Тогда + + ТипыВМассиве = СтрРазделить(ТипыОборудования, ",", Ложь); + Для Каждого ТипОборудования Из ТипыВМассиве Цикл + МассивТипов.Добавить(ТипОборудованияПоСтроке(ТипОборудования)); + КонецЦикла; + + ИначеЕсли ТипЗнч(ТипыОборудования) = Тип("Массив") Тогда + + ДоступныеТипыОборудования = ДоступныеТипыОборудования(Истина); + Для Каждого ТипОборудования Из ТипыОборудования Цикл + + Если ТипЗнч(ТипОборудования) = Тип("Строка") Тогда + МассивТипов.Добавить(ТипОборудованияПоСтроке(ТипОборудования)); + ИначеЕсли ДоступныеТипыОборудования.Найти(ТипОборудования) <> Неопределено Тогда + МассивТипов.Добавить(ТипОборудования); + КонецЕсли; + + КонецЦикла; + + ИначеЕсли ТипЗнч(ТипыОборудования) = Тип("Структура") Тогда + + СоответствиеТипов = СоответствиеТиповОборудования(); + Для каждого Тип Из ТипыОборудования Цикл + + Если Тип.Значение Тогда + МассивТипов.Добавить(СоответствиеТипов[Тип.Ключ]); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Возврат МассивТипов; + +КонецФункции + +// Получить соответствие типов оборудования +// +// Возвращаемое значение: +// Соответствие - +// +Функция СоответствиеТиповОборудования() Экспорт + + Возврат МенеджерОборудованияПовтИсп.СоответствиеТиповОборудования(); + +КонецФункции + +// Получить тип оборудования по строке +// +// Параметры: +// ТипОборудования - Строка - тип оборудования. +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыПодключаемогоОборудования - +// +Функция ТипОборудованияПоСтроке(ТипОборудования) Экспорт + + Соответствие = СоответствиеТиповОборудования(); + Возврат Соответствие.Получить(ТипОборудования); + +КонецФункции + +// Возвращает массив прочих типов оборудования, не входящих в БПО +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования +// +Функция ДоступныеТипыНесертифицированногоОборудования() Экспорт + + ТипыОборудования = Новый Массив(); + ТипыОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.Несертифицируемое); + + + Возврат ТипыОборудования; + +КонецФункции + +#КонецОбласти + +// Заполняет данные о макетах +// +// Параметры: +// ИмяДрайвера - Строка- +// ИмяМакетаДрайвера - Строка- +// МакетДоступен - Булево- +// ШаблонЛокализации - Строка- +// КодЯзыка - Строка- +// +Процедура ЗаполнитьДанныеМакетов(ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, ШаблонЛокализации, КодЯзыка = "") Экспорт + + ИмяМакетаДрайвера = ?(ПустаяСтрока(ИмяМакетаДрайвера), ИмяДрайвера, ИмяМакетаДрайвера); + ИмяМакетаДрайвераПатч = ИмяМакетаДрайвера + "_fix"; + МакетДрайвера = Метаданные.ОбщиеМакеты.Найти(ИмяМакетаДрайвера); + МакетДрайвераПатч = Метаданные.ОбщиеМакеты.Найти(ИмяМакетаДрайвераПатч); + + Если МакетДрайвераПатч <> Неопределено И МакетДрайвераПатч.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ВнешняяКомпонента Тогда + МакетДоступен = Истина; + Если Не ПустаяСтрока(КодЯзыка) Тогда // Проверяем файл с наличием локализации + МакетШаблонЛокализации = ИмяМакетаДрайвераПатч + "_" + КодЯзыка; + МакетШаблон = Метаданные.ОбщиеМакеты.Найти(МакетШаблонЛокализации); + Если МакетШаблон <> Неопределено И МакетШаблон.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ТекстовыйДокумент Тогда + ШаблонЛокализации = ПолучитьОбщийМакет(МакетШаблонЛокализации).ПолучитьТекст(); + КонецЕсли; + КонецЕсли; + ИмяМакетаДрайвера = ИмяМакетаДрайвераПатч; + ИначеЕсли МакетДрайвера <> Неопределено И МакетДрайвера.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ВнешняяКомпонента Тогда + МакетДоступен = Истина; + Если Не ПустаяСтрока(КодЯзыка) Тогда // Проверяем файл с наличием локализации + МакетШаблонЛокализации = ИмяМакетаДрайвера + "_" + КодЯзыка; + МакетШаблон = Метаданные.ОбщиеМакеты.Найти(МакетШаблонЛокализации); + Если МакетШаблон <> Неопределено И МакетШаблон.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ТекстовыйДокумент Тогда + ШаблонЛокализации = ПолучитьОбщийМакет(МакетШаблонЛокализации).ПолучитьТекст(); + КонецЕсли; + КонецЕсли; + Иначе // Проверяем наличие драйвера по маске типа "*_ru" + Если ПустаяСтрока(КодЯзыка) Тогда + КодЯзыка = ТекущийЯзык().КодЯзыка; + КонецЕсли; + ИмяМакетаДрайвера = ИмяМакетаДрайвера + "_" + КодЯзыка; + МакетШаблон = Метаданные.ОбщиеМакеты.Найти(ИмяМакетаДрайвера); + МакетДоступен = МакетШаблон <> Неопределено И МакетШаблон.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ВнешняяКомпонента; + КонецЕсли; + + ИмяМакетаДрайвера = "ОбщийМакет." + ИмяМакетаДрайвера; + +КонецПроцедуры + +// Заполняет данные об используемых внешних компонентах +// +// Параметры: +// Компоненты - ТаблицаЗначений +Процедура ЗаполнитьИспользуемыеВнешниеКомпоненты(Компоненты) Экспорт + + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ГенерацияШтрихкода") Тогда + НоваяСтрока = Компоненты.Добавить(); + НоваяСтрока.Идентификатор = "Barcode"; + НоваяСтрока.ОбновлятьАвтоматически = Истина; + КонецЕсли; + + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("ПоддержкаОборудования.ЭлектронныеСертификаты") Тогда + МодульЭлектронныеСертификатыНСПККлиентСервер = ОбщегоНазначенияБПО.ОбщийМодуль("ЭлектронныеСертификатыНСПККлиентСервер"); + ОписаниеКомпоненты = МодульЭлектронныеСертификатыНСПККлиентСервер.ОписаниеКомпоненты(); + НоваяСтрока = Компоненты.Добавить(); + НоваяСтрока.Идентификатор = ОписаниеКомпоненты.ИмяОбъекта; + НоваяСтрока.ОбновлятьАвтоматически = Истина; + КонецЕсли; + + // добавить драйверы оборудования которое присутсвует в справочнике подключаемое оборудование + ИдентификаторыДрайверов = МенеджерОборудованияПовтИсп.ИдентификаторыДрайверов(); + Для Каждого Идентификатор Из ИдентификаторыДрайверов Цикл + НоваяСтрока = Компоненты.Добавить(); + НоваяСтрока.Идентификатор = Идентификатор; + НоваяСтрока.ОбновлятьАвтоматически = Истина; + КонецЦикла + +КонецПроцедуры + +// Возвращает пустую таблицу поставляемых драйверов оборудования. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - тип оборудования +// * Наименование - Строка - наименование оборудования +// * ИдентификаторОбъекта - Строка - уникальный идентификатор объекта +// * ИмяДрайвера - Строка - внутреннее имя драйвера +// * ИмяМакетаДрайвера - Строка - имя макета драйвера, если оно отличается от имени драйвера +// * ВерсияДрайвера - Строка +// * СнятСПоддержки - Булево - признак того, что драйвер снят с поддержки +// * СпособПодключения - ПеречислениеСсылка.СпособПодключенияДрайвера +// * ЛокальныйРежим - Булево - признак локальности драйвера +// * СетевойРежим - Булево - признак работы в сетевом режиме +// * СерверныйРежим - Булево +// * БезопасноеПодключение - Булево - Подключение драйвера в отдельном потоке +// * РекомендуемоеИспользование - Булево - Драйвер рекомендован к использованию +// +Функция НоваяТаблицаПоставляемыхДрайверовОборудования() Экспорт + + ДрайвераОборудования = Новый ТаблицаЗначений; + // Общие свойства. + ДрайвераОборудования.Колонки.Добавить("ТипОборудования" , Новый ОписаниеТипов("ПеречислениеСсылка.ТипыПодключаемогоОборудования")); + ДрайвераОборудования.Колонки.Добавить("Наименование" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0))); + ДрайвераОборудования.Колонки.Добавить("ИдентификаторОбъекта", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0))); + ДрайвераОборудования.Колонки.Добавить("ИмяДрайвера" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0))); + ДрайвераОборудования.Колонки.Добавить("ИмяМакетаДрайвера" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0))); + ДрайвераОборудования.Колонки.Добавить("ВерсияДрайвера" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0))); + ДрайвераОборудования.Колонки.Добавить("СнятСПоддержки" , Новый ОписаниеТипов("Булево")); + ДрайвераОборудования.Колонки.Добавить("СпособПодключения" , Новый ОписаниеТипов("ПеречислениеСсылка.СпособПодключенияДрайвера")); + ДрайвераОборудования.Колонки.Добавить("БезопасноеПодключение" , Новый ОписаниеТипов("Булево")); + ДрайвераОборудования.Колонки.Добавить("РекомендуемоеИспользование" , Новый ОписаниеТипов("Булево")); + // Параметры работы + ДрайвераОборудования.Колонки.Добавить("ЛокальныйРежим", Новый ОписаниеТипов("Булево")); + ДрайвераОборудования.Колонки.Добавить("СетевойРежим" , Новый ОписаниеТипов("Булево")); + ДрайвераОборудования.Колонки.Добавить("СерверныйРежим", Новый ОписаниеТипов("Булево")); + Возврат ДрайвераОборудования; + +КонецФункции + +// Возвращает массив содержащий имена макетов для переустановки драйверов, для которых требуется переустановка, +// а так же снимает флаг признака переустановки у найденных элементов. +// +// Параметры: +// РабочееМесто - СправочникСсылка.РабочиеМеста - Текущее рабочее место +// +// Возвращаемое значение: +// Массив из Структура - имена макетов внешних компонент, которые требуется переустановить +Функция МакетыДляПереустановкиДрайверов(РабочееМесто) Экспорт + + ОборудованиеДляПереустановки = Новый Массив(); + + // Переустановить драйверы помеченные флагом для переустановки. + Если ЗначениеЗаполнено(РабочееМесто) Тогда + СписокОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + СписокОтбор.РабочееМесто = РабочееМесто; + СписокОборудования = СписокОборудования(СписокОтбор); + ДрайверыОборудования = Новый Массив(); + Для Каждого Оборудование Из СписокОборудования Цикл + Если Оборудование.ПодключениеИзМакета И Оборудование.МакетДоступен И Оборудование.ТребуетсяПереустановка Тогда + ОписаниеОборудованияДляПереустановки = Новый Структура(); + ОписаниеОборудованияДляПереустановки.Вставить("ИмяМакетаДрайвера", Оборудование.ИмяМакетаДрайвера); + ОписаниеОборудованияДляПереустановки.Вставить("Наименование", Оборудование.Наименование); + ОписаниеОборудованияДляПереустановки.Вставить("Версия", Оборудование.ВерсияДрайвера); + ОписаниеОборудованияДляПереустановки.Вставить("МакетДоступен", Оборудование.МакетДоступен); + ОписаниеОборудованияДляПереустановки.Вставить("ПодключениеИзМакета", Оборудование.ПодключениеИзМакета); + ОборудованиеДляПереустановки.Добавить(ОписаниеОборудованияДляПереустановки); + ДрайверыОборудования.Добавить(Оборудование.ДрайверОборудования); + КонецЕсли; + КонецЦикла; + УстановитьПризнакПереустановкиДрайверовПоРабочемуМесту( + РабочееМесто, + ДрайверыОборудования, + Ложь); + КонецЕсли; + + Возврат ОборудованиеДляПереустановки; + +КонецФункции + + +// Установить флаг обновления по переданным типам подключаемого оборудования +// +// Параметры: +// ТипыОборудования - Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования +// +Процедура УстановитьФлагОбновленияПоТипам(ТипыОборудования) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос("ВЫБРАТЬ + | ПодключаемоеОборудование.Ссылка + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | (ПодключаемоеОборудование.ТипОборудования В (&ТипыОборудования))"); + + Запрос.УстановитьПараметр("ТипыОборудования", ТипыОборудования); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); + СправочникОбъект.ТребуетсяПереустановка = Истина; + ЗаписатьДанные(СправочникОбъект); + КонецЦикла; + +КонецПроцедуры + + +#Область РабочиеМеста + +Функция ПараметрыРабочегоМестаПриЗапуске(РабочееМесто) Экспорт + + ПараметрыРабочегоМеста = МенеджерОборудованияКлиентСервер.НовыеПараметрыРабочегоМеста(); + ПараметрыРабочегоМеста.Рабочееместо = РабочееМесто; + Если ЗначениеЗаполнено(РабочееМесто) Тогда + ЗаполнитьЗаписанныеРеквизитыРабочегоМеста(РабочееМесто, ПараметрыРабочегоМеста.ЗаписанныеРеквизитыПоиска); + КонецЕсли; + ЗаполнитьАктуальныеРеквизитыРабочегоМеста(ПараметрыРабочегоМеста.АктуальныеРеквизитыПоиска); + Возврат ПараметрыРабочегоМеста; + +КонецФункции + +Процедура ЗаполнитьЗаписанныеРеквизитыРабочегоМеста(РабочееМесто, РеквизитыРабочегоМеста) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Если ЗначениеЗаполнено(РабочееМесто) Тогда + Реквизиты = ОбщегоНазначенияБПО.ЗначенияРеквизитовОбъекта(РабочееМесто, "Код, ИмяКомпьютера, MACАдрес, MACАдреса"); + РеквизитыРабочегоМеста.MACАдреса = Реквизиты.MACАдреса.Выгрузить().ВыгрузитьКолонку("Адрес"); + РеквизитыРабочегоМеста.ИмяКомпьютера = Реквизиты.ИмяКомпьютера; + РеквизитыРабочегоМеста.ИдентификаторКлиента = Реквизиты.Код; + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьАктуальныеРеквизитыРабочегоМеста(РеквизитыРабочегоМеста) Экспорт + + Если РеквизитыРабочегоМеста = Неопределено Тогда + РеквизитыРабочегоМеста = МенеджерОборудованияКлиентСервер.НовыеРеквизитыПоискаРабочегоМеста(); + КонецЕсли; + + Если Не ЗначениеЗаполнено(РеквизитыРабочегоМеста.ИмяКомпьютера) Тогда + ИмяКомпьютера = ОбщегоНазначенияБПО.ИмяКомпьютераКлиента(); + РеквизитыРабочегоМеста.ИмяКомпьютера = ИмяКомпьютера; + КонецЕсли; + + Если Не ЗначениеЗаполнено(РеквизитыРабочегоМеста.ИдентификаторКлиента) Тогда + ИдентификаторКлиента = МенеджерОборудованияКлиентСервер.ИдентификаторКлиентаДляРабочегоМеста(); + РеквизитыРабочегоМеста.ИдентификаторКлиента = ИдентификаторКлиента; + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьРеквизитыРабочегоМеста(РабочееМесто, АктуальныеРеквизитыРабочегоМеста) Экспорт + + Если Не ЗначениеЗаполнено(РабочееМесто) Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + РеквизитыРабочегоМеста = МенеджерОборудованияКлиентСервер.НовыеРеквизитыПоискаРабочегоМеста(); + ЗаполнитьЗаписанныеРеквизитыРабочегоМеста(РабочееМесто, РеквизитыРабочегоМеста); + РеквизитыДляЗаписи = Новый Структура; + + Если ЗначениеЗаполнено(АктуальныеРеквизитыРабочегоМеста.ИмяКомпьютера) + И АктуальныеРеквизитыРабочегоМеста.ИмяКомпьютера <> РеквизитыРабочегоМеста.ИмяКомпьютера Тогда + РеквизитыДляЗаписи.Вставить("ИмяКомпьютера", АктуальныеРеквизитыРабочегоМеста.ИмяКомпьютера); + КонецЕсли; + + Если АктуальныеРеквизитыРабочегоМеста.MACАдреса.Количество() > 0 + И Не ОбщегоНазначенияБПОКлиентСервер.МассивыСовпадают( + АктуальныеРеквизитыРабочегоМеста.MACАдреса, РеквизитыРабочегоМеста.MACАдреса) Тогда + РеквизитыДляЗаписи.Вставить("MACАдреса", АктуальныеРеквизитыРабочегоМеста.MACАдреса); + КонецЕсли; + + Если РеквизитыДляЗаписи.Количество() > 0 Тогда + ОбъектРабочееМесто = РабочееМесто.ПолучитьОбъект(); + Если РеквизитыДляЗаписи.Свойство("Код") Тогда + ОбъектРабочееМесто.Код = РеквизитыДляЗаписи.Код; + КонецЕсли; + Если РеквизитыДляЗаписи.Свойство("ИмяКомпьютера") Тогда + ОбъектРабочееМесто.ИмяКомпьютера = РеквизитыДляЗаписи.ИмяКомпьютера; + КонецЕсли; + Если РеквизитыДляЗаписи.Свойство("MACАдреса") Тогда + ОбъектРабочееМесто.MACАдреса.Очистить(); + Для Каждого MACАдрес Из РеквизитыДляЗаписи.MACАдреса Цикл + НовыйАдрес = ОбъектРабочееМесто.MACАдреса.Добавить(); + НовыйАдрес.Адрес = MACАдрес; + КонецЦикла; + КонецЕсли; + Если ОбъектРабочееМесто.ПроверитьЗаполнение() Тогда + ОбъектРабочееМесто.Записать(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура УдалитьУстаревшиеДрайвера() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДрайверыОборудования.Ссылка КАК Ссылка, + | ДрайверыОборудования.Представление КАК Представление + |ИЗ + | Справочник.ДрайверыОборудования КАК ДрайверыОборудования + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + | ПО ДрайверыОборудования.Ссылка = ПодключаемоеОборудование.ДрайверОборудования + |ГДЕ + | ДрайверыОборудования.ТипОборудования = ЗНАЧЕНИЕ(Перечисление.ТипыПодключаемогоОборудования.ПустаяСсылка) + | И ПодключаемоеОборудование.Ссылка ЕСТЬ NULL"; + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат; + КонецЕсли; + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + УстаревшийДрайверОбъект = Выборка.Ссылка.ПолучитьОбъект(); + Попытка + УстаревшийДрайверОбъект.Заблокировать(); + УстаревшийДрайверОбъект.ОбменДанными.Загрузка = Истина; + УстаревшийДрайверОбъект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + УстаревшийДрайверОбъект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + УстаревшийДрайверОбъект.Удалить(); + Исключение + ТекстОшибки = СтрШаблон(НСтр("ru = 'Не удается заблокировать удаляемый драйвер %1.'", + ОбщегоНазначенияБПО.КодОсновногоЯзыка()), Выборка.Представление); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации(ТекстОшибки); + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +Функция ПодключаемоеОборудованиеНаФорме(Форма) + + ЗначенияСвойств = Новый Структура("ПодключаемоеОборудованиеБПО", Null); + ЗаполнитьЗначенияСвойств(ЗначенияСвойств, Форма); + + Результат = ЗначенияСвойств.ПодключаемоеОборудованиеБПО; + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Если Результат = Null Тогда + ДобавляемыеРеквизиты = Новый Массив; + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПодключаемоеОборудованиеБПО", Новый ОписаниеТипов)); + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("СписокОборудования", Новый Массив()); + Результат.Вставить("ТребуетсяЗапросСпискаОборудованияНаКлиенте", Ложь); + Результат.Вставить("ТипыПО", ПараметрыТипыОборудования()); + + Форма.ПодключаемоеОборудованиеБПО = Результат; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Устанавливает признак необходимости переустановки оборудования для подключаемого оборудования на рабочем месте. +// +// Параметры: +// РабочееМесто - СправочникСсылка.РабочиеМеста. +// ДрайверыОборудования - Массив из СправочникСсылка.ДрайверыОборудования. +// Признак - Булево - требуется переустановить драйвер +// +Процедура УстановитьПризнакПереустановкиДрайверовПоРабочемуМесту(РабочееМесто, ДрайверыОборудования, Признак) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПодключаемоеОборудование.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | (ПодключаемоеОборудование.РабочееМесто = &РабочееМесто ИЛИ ПодключаемоеОборудование.ТипПодключения = ЗНАЧЕНИЕ(Перечисление.ТипыПодключенияОборудования.ОбщийДоступ)) + | И ПодключаемоеОборудование.ДрайверОборудования В(&ДрайверыОборудования) + | И ПодключаемоеОборудование.ТребуетсяПереустановка <> &ТребуетсяПереустановка"); + + Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто); + Запрос.УстановитьПараметр("ДрайверыОборудования", ДрайверыОборудования); + Запрос.УстановитьПараметр("ТребуетсяПереустановка", Признак); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); + СправочникОбъект.ТребуетсяПереустановка = Признак; + ЗаписатьДанные(СправочникОбъект) + КонецЦикла; + +КонецПроцедуры + +// Возвращает массив типов оборудования которые необходимо переустановить при обновлении +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования +// +Функция ТипыДрайверовОбязательныхКОбновлению() + + Результат = Новый Массив(); + Результат.Добавить(Перечисления.ТипыПодключаемогоОборудования.ККТ); + Результат.Добавить(Перечисления.ТипыПодключаемогоОборудования.ПринтерЭтикеток); + Результат.Добавить(Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/CommonModules/МенеджерОборудованияВызовСервера.xml b/CommonModules/МенеджерОборудованияВызовСервера.xml new file mode 100644 index 0000000..c4871b4 --- /dev/null +++ b/CommonModules/МенеджерОборудованияВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияВызовСервера + + + ru + Менеджер оборудования вызов сервера + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияВызовСервера/Ext/Module.bsl b/CommonModules/МенеджерОборудованияВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..61a1a84 --- /dev/null +++ b/CommonModules/МенеджерОборудованияВызовСервера/Ext/Module.bsl @@ -0,0 +1,1216 @@ + +#Область ПрограммныйИнтерфейс + +#Область Системные + +// Доступны возвраты без карты. +// +// Возвращаемое значение: +// Структура - Доступны возвраты без карты: +// * ВозвратПоПлатежнойКарте - Булево +// * ВозвратЭлектроннымСертификатом - Булево +// +Функция ДоступноВозвратыБезКарты() Экспорт + + ВозвратыБезКарты = Новый Структура(); + ВозвратыБезКарты.Вставить("ВозвратПоПлатежнойКарте" , Истина); + ВозвратыБезКарты.Вставить("ВозвратЭлектроннымСертификатом", Истина); + МенеджерОборудованияВызовСервераПереопределяемый.ДоступноВозвратыБезКарты(ВозвратыБезКарты); + Возврат ВозвратыБезКарты; + +КонецФункции + +// Изолированное подключения внешних компонент на клиенте +// Возвращаемое значение: +// Булево - Изолированно +// +Функция ИзолированноеПодключенияВнешнихКомпонентНаКлиенте() Экспорт + + Возврат ВнешниеКомпонентыБПО.ИзолированноеПодключенияВнешнихКомпонентНаКлиенте(); + +КонецФункции + +// Получить соответствие типов оборудования +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение - +// +Функция СоответствиеТиповОборудования() Экспорт + + Возврат МенеджерОборудования.СоответствиеТиповОборудования(); + +КонецФункции + +#КонецОбласти + +#Область РабочееМесто + +// Функция возвращает из переменной сеанса имя компьютера клиента. +// +// Параметры: +// ЕстьПодключаемоеОборудование - Булево - возвращается Истина если в базе есть подключаемое оборудование. +// +// Возвращаемое значение: +// СправочникСсылка.РабочиеМеста. +// +Функция РабочееМестоКлиента(ЕстьПодключаемоеОборудование = Истина, ПараметрыПоискаРабочегоМеста = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + РабочееМесто = ПараметрыСеанса.РабочееМестоКлиента; + Если Не ЗначениеЗаполнено(РабочееМесто) Тогда + ОбновитьРабочееМестоКлиента(ПараметрыПоискаРабочегоМеста); + РабочееМесто = ПараметрыСеанса.РабочееМестоКлиента; + КонецЕсли; + // проверить что есть подключаемое оборудование в справочнике и передать эту информацию на клиент + ЕстьПодключаемоеОборудование = МенеджерОборудования.ЕстьПодключаемоеОборудование(); + + Возврат РабочееМесто; + +КонецФункции + +// Функция возвращает список рабочих мест, соответствующих указанному имени компьютера. +// +// Параметры: +// ИдентификаторКлиента - Строка - идентификатор клиента для рабочего места +// ИмяКомпьютера - Строка - Имя компьютера +// MACАдрес - Строка, Массив Из Строка - MAC адрес или массив MAC адресов +// +// Возвращаемое значение: +// Массив из СправочникСсылка.РабочиеМеста. +// +Функция НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, MACАдрес = "") Экспорт + + Результат = Новый Массив(); + + Если Не ОбщегоНазначенияБПО.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Результат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(MACАдрес) = Тип("Строка") Тогда + MACАдреса = Новый Массив(); + Если ЗначениеЗаполнено(MACАдрес) Тогда + MACАдреса.Добавить(MACАдрес); + КонецЕсли; + Иначе + MACАдреса = MACАдрес; + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | 0 КАК Приоритет, + | РабочиеМеста.Ссылка КАК Ссылка, + | РабочиеМеста.ИмяКомпьютера КАК ИмяКомпьютера + |ПОМЕСТИТЬ РабочиеМестаПоПриоритетам + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.Код = &ИдентификаторКлиента + | И НЕ РабочиеМеста.ПометкаУдаления + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | 1, + | РабочиеМестаИдентификаторыКлиентов.Ссылка, + | РабочиеМестаИдентификаторыКлиентов.Ссылка.ИмяКомпьютера + |ИЗ + | Справочник.РабочиеМеста.ИдентификаторыКлиентов КАК РабочиеМестаИдентификаторыКлиентов + |ГДЕ + | РабочиеМестаИдентификаторыКлиентов.ИдентификаторКлиента = &ИдентификаторКлиента + | И НЕ РабочиеМестаИдентификаторыКлиентов.Ссылка.ПометкаУдаления + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | 2, + | РабочиеМеста.Ссылка, + | РабочиеМеста.ИмяКомпьютера + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.MACАдрес В(&MACАдреса) + | И РабочиеМеста.ИмяКомпьютера = &ИмяКомпьютера + | И &ИмяКомпьютера <> """" + | И НЕ РабочиеМеста.ПометкаУдаления + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | 2, + | РабочиеМеста.Ссылка, + | РабочиеМеста.ИмяКомпьютера + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.ИмяКомпьютера = &ИмяКомпьютера + | И &ИмяКомпьютера <> """" + | И НЕ РабочиеМеста.ПометкаУдаления + | И РабочиеМеста.MACАдреса.Адрес В(&MACАдреса) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | 3, + | РабочиеМестаИдентификаторыКлиентов.Ссылка, + | РабочиеМестаИдентификаторыКлиентов.Ссылка.ИмяКомпьютера + |ИЗ + | Справочник.РабочиеМеста.ИдентификаторыКлиентов КАК РабочиеМестаИдентификаторыКлиентов + |ГДЕ + | РабочиеМестаИдентификаторыКлиентов.ИдентификаторКлиента = &ИдентификаторКлиента + | И РабочиеМестаИдентификаторыКлиентов.Ссылка.MACАдрес В(&MACАдреса) + | И НЕ РабочиеМестаИдентификаторыКлиентов.Ссылка.ПометкаУдаления + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | 4, + | РабочиеМеста.Ссылка, + | РабочиеМеста.ИмяКомпьютера + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.ИмяКомпьютера = &ИмяКомпьютера + | И &ИмяКомпьютера <> """" + | И НЕ РабочиеМеста.ПометкаУдаления + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | 5, + | РабочиеМеста.Ссылка, + | РабочиеМеста.ИмяКомпьютера + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.MACАдрес В(&MACАдреса) + | И НЕ РабочиеМеста.ПометкаУдаления + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | 5, + | РабочиеМеста.Ссылка, + | РабочиеМеста.ИмяКомпьютера + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.MACАдреса.Адрес В(&MACАдреса) + | И НЕ РабочиеМеста.ПометкаУдаления + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | РабочиеМестаПоПриоритетам.Ссылка КАК Ссылка, + | РабочиеМестаПоПриоритетам.ИмяКомпьютера КАК ИмяКомпьютера + |ИЗ + | РабочиеМестаПоПриоритетам КАК РабочиеМестаПоПриоритетам + | + |УПОРЯДОЧИТЬ ПО + | РабочиеМестаПоПриоритетам.Приоритет"); + + + Запрос.УстановитьПараметр("ИдентификаторКлиента", ИдентификаторКлиента); + Запрос.УстановитьПараметр("ИмяКомпьютера", ИмяКомпьютера); + Запрос.УстановитьПараметр("MACАдреса", MACАдреса); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат Результат; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + РабочееМестоСсылка = Выборка.Ссылка; + Результат.Добавить(РабочееМестоСсылка); + + Если ПустаяСтрока(Выборка.ИмяКомпьютера) И Не ПустаяСтрока(ИмяКомпьютера) Тогда + РабочееМестоОбъект = РабочееМестоСсылка.ПолучитьОбъект(); + РабочееМестоОбъект.ИмяКомпьютера = ИмяКомпьютера; + РабочееМестоОбъект.Записать(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Функция устанавливает в переменную сеанса имя компьютера клиента. +// +// Параметры: +// РабочееМестоКлиента - СправочникСсылка.РабочиеМеста +// +Процедура УстановитьРабочееМестоКлиента(РабочееМестоКлиента) Экспорт + + УстановитьПривилегированныйРежим(Истина); + ПараметрыСеанса.РабочееМестоКлиента = РабочееМестоКлиента; + +КонецПроцедуры + +// Функция возвращает созданное рабочее место клиента. +// +// Параметры: +// Параметры - Структура: +// * ИдентификаторКлиента - Строка - Уникальный идентификатор. +// * ИмяКомпьютера - Строка - Имя компьютера +// * MACАдрес - Строка - MAC Адрес +// +// Возвращаемое значение: +// СправочникСсылка.РабочиеМеста. +// +Функция СоздатьРабочееМестоКлиента(Параметры) Экспорт + + Если Не ОбщегоНазначенияБПО.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Справочники.РабочиеМеста.ПустаяСсылка(); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + РабочееМесто = Справочники.РабочиеМеста.СоздатьЭлемент(); + РабочееМесто.Код = Параметры.ИдентификаторКлиента; + РабочееМесто.ИмяКомпьютера = Параметры.ИмяКомпьютера; + Если Параметры.Свойство("MACАдреса") И Параметры.MACАдреса.Количество() > 0 Тогда + Для Каждого MACАдрес Из Параметры.MACАдреса Цикл + Строка = РабочееМесто.MACАдреса.Добавить(); + Строка.Адрес = MACАдрес; + КонецЦикла; + КонецЕсли; + + МенеджерОборудованияКлиентСервер.ЗаполнитьНаименованиеРабочегоМеста(РабочееМесто, ПользователиИнформационнойБазы.ТекущийПользователь()); + РабочееМесто.Записать(); + + УстановитьРабочееМестоКлиента(РабочееМесто.Ссылка); + + Возврат РабочееМесто.Ссылка; + +КонецФункции + +// Процедура устанавливает значения параметров сеанса, относящихся к подключаемому оборудованию. +// +// Параметры: +// ИмяПараметра - Строка - имя параметра сеанса. +// УстановленныеПараметры - Массив из Строка +// +Процедура УстановитьПараметрыСеансаПодключаемогоОборудования(ИмяПараметра, УстановленныеПараметры) Экспорт + + Если ИмяПараметра = "РабочееМестоКлиента" Тогда + + ОбновитьРабочееМестоКлиента(); + + КонецЕсли; + +КонецПроцедуры + +// Функция возвращает типы используемого оборудования для текущего рабочего места. +// +// Возвращаемое значение: +// Массив. +// +Функция ТипыИспользуемогоОборудованияТекущегоРабочегоМеста() Экспорт + + УстановитьПривилегированныйРежим(Истина); + РабочееМесто = РабочееМестоКлиента(); + + Если ЗначениеЗаполнено(РабочееМесто) Тогда + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПодключаемоеОборудование.ТипОборудования КАК ТипОборудования + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.УстройствоИспользуется + | И ПодключаемоеОборудование.РабочееМесто = &РабочееМесто"); + + Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто); + + Результат = Запрос.Выполнить(); + Возврат Результат.Выгрузить().ВыгрузитьКолонку("ТипОборудования"); + + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область РаботаСОборудованием + +// Возвращает список подключенного в справочнике ПО по установленному отбору +// +// Параметры: +// Отбор - см. МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор. +// +// Возвращаемое значение: +// Массив из Структура: +// * Наименование - Строка +Функция СписокОборудования(Отбор) Экспорт + + Возврат МенеджерОборудования.СписокОборудования(Отбор); + +КонецФункции + +// Функция возвращает структуру с данными устройства. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// КодЯзыка - Строка +// ПараметрыУстройства - Структура - параметры устройства. +// +// Возвращаемое значение: +// см. Справочники.ПодключаемоеОборудование.ДанныеУстройства +// +Функция ДанныеУстройства(Идентификатор, КодЯзыка = Неопределено, ПараметрыУстройства = Неопределено) Экспорт + + Результат = МенеджерОборудования.ДанныеУстройства(Идентификатор, КодЯзыка); + + Если Не ПараметрыУстройства = Неопределено Тогда + Результат.Параметры = ПараметрыУстройства; + Результат.ПараметрыXML = МенеджерОборудования.ПолучитьПараметрыXML(ПараметрыУстройства, Результат.ТипОборудованияИмя); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Функция возвращает по идентификатору устройства его параметры +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// +// Возвращаемое значение: +// - Произвольный +// - Структура. +// +Функция ПараметрыУстройства(Идентификатор) Экспорт + + Возврат МенеджерОборудования.ПараметрыУстройства(Идентификатор); + +КонецФункции + +// Процедура предназначена для сохранения параметров устройства +// в реквизит Параметры типа хранилище значения в элементе справочника. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// Параметры - Структура - параметры устройства. +// +// Возвращаемое значение: +// Булево. +// +Функция СохранитьПараметрыУстройства(Идентификатор, Параметры) Экспорт + + Возврат МенеджерОборудования.СохранитьПараметрыУстройства(Идентификатор, Параметры); + +КонецФункции + +// Функция возвращает структуру с данными драйвера. +// +// Параметры: +// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера. +// +// Возвращаемое значение: +// Структура. +// +Функция ДанныеДрайвераОборудования(ИдентификаторДрайвера) Экспорт + + Возврат МенеджерОборудования.ДанныеДрайвераОборудования(ИдентификаторДрайвера); + +КонецФункции + +// Получить параметры подключения из XML +// +// Параметры: +// ПараметрыXML - Строка - Параметры подключения в XML. +// Возвращаемое значение: +// Структура - +// +Функция ЗагрузитьПараметрыXML(ПараметрыXML) Экспорт + + Возврат МенеджерОборудования.ЗагрузитьПараметрыXML(ПараметрыXML); + +КонецФункции + +Функция ДрайверПоставляетсяВКонфигурации(ИдентификаторУстройства) Экспорт + + Возврат МенеджерОборудования.ДрайверПоставляетсяВКонфигурации(ИдентификаторУстройства); + +КонецФункции + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: следует использовать СписокОборудования. +// Функция возвращает список подключенного в справочнике ПО +// +// Параметры: +// ТипыПО - Структура, Массив из Строка, Строка - тип оборудования для выбора устройства. +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// РабочееМесто - СправочникСсылка.РабочиеМеста. +// СетевоеОборудование - Булево - использовать сетевое оборудование при подключении. +// СерверноеОборудование - Булево. +// ТолькоАвтоматическаяФискализация - Булево. +// +// Возвращаемое значение: +// Массив из Структура. +// +Функция ОборудованиеПоПараметрам(ТипыПО = Неопределено, Идентификатор = Неопределено, РабочееМесто = Неопределено, + СетевоеОборудование = Истина, СерверноеОборудование = Ложь, ТолькоАвтоматическаяФискализация = Ложь) Экспорт + + СписокОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + СписокОтбор.ТипыПО = ТипыПО; + СписокОтбор.Идентификатор = Идентификатор; + СписокОтбор.РабочееМесто = РабочееМесто; + СписокОтбор.СетевоеОборудование = СетевоеОборудование; + СписокОтбор.СерверноеОборудование = СерверноеОборудование; + СписокОтбор.РазрешенаАвтоматическаяФискализация = ТолькоАвтоматическаяФискализация; + + Возврат МенеджерОборудования.СписокОборудования(СписокОтбор); + +КонецФункции + +#Область Системные + +// Устарела: следует использовать МенеджерОборудования.ВерсияБиблиотеки. +// Возвращает номер версии библиотеки подключаемого оборудования. +// +// Возвращаемое значение: +// Строка. +// +Функция ВерсияБиблиотеки() Экспорт + + Возврат МенеджерОборудования.ВерсияБиблиотеки(); + +КонецФункции + +// Устарела: следует использовать ОбщегоНазначенияБПО.ДатаСеанса. +// Получает текущую дату сервера, приведенную к часовому поясу сеанса. +// Предназначена для использования вместо функции ТекущаяДатаСеанса. +// +// Возвращаемое значение: +// Дата - текущая дата сеанса. +// +Функция ДатаСеанса() Экспорт + + Возврат ОбщегоНазначенияБПО.ДатаСеанса(); + +КонецФункции + +// Устарела: следует использовать МенеджерОборудования.ДоступныеТипыОборудования. +// Возвращает список доступных типов оборудования. +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования - Массив доступных типов подключаемого оборудования в конфигурации. +// +Функция ДоступныеТипыОборудования() Экспорт + + Возврат МенеджерОборудования.ДоступныеТипыОборудования(); + +КонецФункции + +// Устарела: следует использовать СоответствиеТиповОборудования. +// Получить соответствие типов оборудования +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение - +// +Функция ПолучитьСоответствиеТиповОборудования() Экспорт + + Возврат МенеджерОборудования.СоответствиеТиповОборудования(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если функциональная подсистема существует в конфигурации. +// +// Параметры: +// ПолноеИмяПодсистемы - Строка - полное имя объекта метаданных подсистема +// без слов "Подсистема." и с учетом регистра символов. +// Например: "СтандартныеПодсистемы.ВариантыОтчетов". +// Возвращаемое значение: +// Булево - Истина, если существует. +// +Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт + + Возврат ОбщегоНазначенияБПО.ПодсистемаСуществует(ПолноеИмяПодсистемы); + +КонецФункции + +// Устарела: следует использовать ИнтеграцияПодсистемБПО.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. +// Заполняет параметры работы клиента на сервере +// При использовании БСП процедуру требуется вызвать из процедуры +// ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске() +// +// Параметры: +// Параметры - Структура: +// * ИдентификаторКлиента - Строка - (входящий) идентификатор рабочего места клиента +// * ОборудованиеДляПереустановки - Массив из Структура - имена макетов для переустановки внешних компонент +// * ИдентификаторОбсужденияРаспределеннойФискализации - ИдентификаторОбсужденияСистемыВзаимодействия - +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт + + ИнтеграцияПодсистемБПО.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); + +КонецПроцедуры + +// Устарела: следует использовать ИнтеграцияПодсистемБПО.УстановкаПараметровСеанса. +// Процедура устанавливает значения параметров сеанса, относящихся к подключаемому оборудованию. +// +// Параметры: +// ИменаПараметровСеанса - Массив из Строка - устанавливаемые идентификаторы параметров сеанса +// +Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) Экспорт + + ИнтеграцияПодсистемБПО.УстановкаПараметровСеанса(ИменаПараметровСеанса); + +КонецПроцедуры + +// Устарела: следует использовать МенеджерОборудования.ДоступноДобавлениеНовыхДрайверов. +// Возвращает доступность добавление новых драйверов. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноДобавлениеНовыхДрайверов() Экспорт + + Возврат МенеджерОборудования.ДоступноДобавлениеНовыхДрайверов(); + +КонецФункции + +// Устарела: следует использовать МенеджерОборудования.ДоступноСетевоеОборудование. +// Возвращает доступность сетевого оборудования. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноСетевоеОборудование() Экспорт + + Возврат МенеджерОборудования.ДоступноСетевоеОборудование(); + +КонецФункции + +// Устарела: следует использовать РаспределеннаяФискализация.ДоступноРаспределеннаяФискализация. +// Возвращает признак доступности распределенной фискализации. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноРаспределеннаяФискализация() Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ДоступноРаспределеннаяФискализация(); + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудования.ДоступноСетевоеОборудование. +// Возвращает доступность инкассации в форме управление фискальным устройством. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноИнкассацияВУправлениеФискальнымУстройством() Экспорт + + Возврат МенеджерОборудования.ДоступноИнкассацияВУправлениеФискальнымУстройством(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется устройства ввода и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяУстройстваВвода() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяУстройстваВвода(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется устройства "Шаблоны магнитных карт" и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяШаблоныМагнитныхКарт() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяШаблоныМагнитныхКарт(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистемы фискальных устройств и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяЧекопечатающиеУстройства() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется "Кассовая смена" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяКассоваяСмена() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяКассоваяСмена(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется "ФорматноЛогическийКонтроль" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяФорматноЛогическийКонтроль() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяФорматноЛогическийКонтроль(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Платежные системы" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПлатежныеСистемы() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Дисплеи покупателя" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяДисплеиПокупателя() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяДисплеиПокупателя(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Весовое оборудование" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяВесовоеОборудование() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяВесовоеОборудование(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Терминалы сбора данных" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяТерминалыСбораДанных() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяТерминалыСбораДанных(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Принтеры этикеток" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПринтерыЭтикеток() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяПринтерыЭтикеток(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Считыватель RFID" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяСчитывательRFID() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяСчитывательRFID(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Офлайн-оборудование" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяОфлайнОборудование() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяОфлайнОборудование(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Печать этикеток и ценников" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПечатьЭтикетокИЦенников() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяПечатьЭтикетокИЦенников(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Электронные сертификаты НСПК" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяЭлектронныеСертификатыНСПК() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяЭлектронныеСертификатыНСПК(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Сертификаты НУЦ Минцифры" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяСертификатыНУЦМинцифры() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяСертификатыНУЦМинцифры(); + +КонецФункции + +#КонецОбласти + +#Область СовместимостьГОСИС + +// Устарела: следует использовать РабочееМестоКлиента. +// Функция возвращает из переменной сеанса имя компьютера клиента. +// +// Возвращаемое значение: +// СправочникСсылка.РабочиеМеста - рабочее место клиента. +// +Функция ПолучитьРабочееМестоКлиента() Экспорт + + Возврат РабочееМестоКлиента(); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки. +// Возвращает поддерживает ли фискальное устройство. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства. +// +// Возвращаемое значение: +// Булево - Фискальное устройство поддерживает проверку кодов маркировки +Функция ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ИдентификаторУстройства) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройства = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройства"); + Возврат МодульОборудованиеЧекопечатающиеУстройства.ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ИдентификаторУстройства); + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваВызовСервера.ФискальноеУстройствоПоддерживаетВерсиюФФД. +// Функция возвращает для фискального устройства версию ФФД. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства. +// +// Возвращаемое значение: +// Неопределено - Фискальное устройство поддерживает версию ФФД +Функция ФискальноеУстройствоПоддерживаетВерсиюФФД(ИдентификаторУстройства) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройстваВызовСервера = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваВызовСервера"); + Возврат МодульОборудованиеЧекопечатающиеУстройстваВызовСервера.ФискальноеУстройствоПоддерживаетВерсиюФФД(ИдентификаторУстройства); + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область КодаВидаНоменклатурнойКлассификации + +// Устарела: больше не используется. +// Возвращает классификатор кода вида номенклатурной классификации +// +// Возвращаемое значение: +// ТаблицаЗначений. +// +Функция КодыВидаНоменклатурнойКлассификации() Экспорт + + ТаблицаЗначений = Новый ТаблицаЗначений; + ТаблицаЗначений.Колонки.Добавить("НаименованиеВидаНоменклатурнойКлассификации",,"НаименованиеВидаНоменклатурнойКлассификации"); + ТаблицаЗначений.Колонки.Добавить("КодВидаНоменклатурнойКлассификации",,"КодВидаНоменклатурнойКлассификации"); + + // ++ Локализация + УстановитьПривилегированныйРежим(Истина); + + Данные = ПолучитьОбщийМакет("КодВидаНоменклатурнойКлассификации").ПолучитьТекст() ; + Если Не ПустаяСтрока(Данные) Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(Данные); + ЧтениеXML.ПерейтиКСодержимому(); + Если ЧтениеXML.Имя = "КодВидаНоменклатурнойКлассификации" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя = "ВидНоменклатурнойКлассификации" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ВидНоменклатурнойКлассификации = ТаблицаЗначений.Добавить(); + ВидНоменклатурнойКлассификации.НаименованиеВидаНоменклатурнойКлассификации = ЧтениеXML.ЗначениеАтрибута("Имя"); + ВидНоменклатурнойКлассификации.КодВидаНоменклатурнойКлассификации = ЧтениеXML.ЗначениеАтрибута("КодВида"); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + // -- Локализация + + Возврат ТаблицаЗначений; + +КонецФункции + +#КонецОбласти + +#Область РаспределеннаяФискализации + +#Если Не МобильноеПриложениеСервер Тогда + +// Устарела: следует использовать РаспределеннаяФискализация.ОбсуждениеФискализации. +// Создает обсуждение фискализации. +// +// Возвращаемое значение: +// Неопределено, ИдентификаторОбсужденияСистемыВзаимодействия - Обсуждение фискализации +// +Функция ОбсуждениеФискализации() Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ОбсуждениеФискализации(); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать РаспределеннаяФискализация.СоздатьСообщениеФискализации. +// Создает сообщение для фискализации чека +// +// Параметры: +// ИдентификаторЧека - УникальныйИдентификатор +// ОрганизацияИИН - Строка +// +Процедура СоздатьСообщениеФискализации(ИдентификаторЧека, ОрганизацияИИН = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + МодульРаспределеннаяФискализация.СоздатьСообщениеФискализации(ИдентификаторЧека, ОрганизацияИИН); + КонецЕсли; + +КонецПроцедуры + +#КонецЕсли + +#КонецОбласти + +#Область ЕМРЦ + +// Устарела: следует использовать МенеджерОборудования.ПолучитьЦенуЕМРЦ. +// Получает цену ЕМРЦ из данных информационной базы на дату. +// +// Параметры: +// ОсобенностьУчета - ПеречислениеСсылка.ВидыМаркированнойПродукцииБПО - тип маркированной продукции для проверки цены. +// Период - Дата - дата проверки цены. +// ЕМРЦ - Число - значение ЕМРЦ. +// +Процедура ПолучитьЦенуЕМРЦ(ОсобенностьУчета, Период = Неопределено, ЕМРЦ = 0) Экспорт + + // ++ Локализация + МенеджерОборудования.ПолучитьЦенуЕМРЦ(ОсобенностьУчета, Период, ЕМРЦ); + // -- Локализация + +КонецПроцедуры + +#КонецОбласти + +// Устарела: следует использовать процедуру МенеджерОборудованияКлиентСервер.Base64ВШтрихкод. +// Base64 в штрихкод. +// +// Параметры: +// ШтрихкодВBase64 - Строка - Штрихкод в base64 +// +// Возвращаемое значение: +// Строка - Base64 в штрихкод +// +Функция Base64ВШтрихкод(ШтрихкодВBase64) Экспорт + + ДвоичныеДанные = Base64Значение(ШтрихкодВBase64); + Если ДвоичныеДанные = Неопределено Тогда + Штрихкод = ШтрихкодВBase64; + Иначе + Штрихкод = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные); + КонецЕсли; + + Возврат Штрихкод; + +КонецФункции + +// Устарела: следует использовать процедуру МенеджерОборудованияКлиентСервер.ШтрихкодВBase64. +// Штрихкод в base64. +// +// Параметры: +// Штрихкод - Строка - Штрихкод +// +// Возвращаемое значение: +// Строка - Штрихкод в base64 +// +Функция ШтрихкодВBase64(Штрихкод) Экспорт + + Если Штрихкод = Неопределено Тогда + ДвоичныеДанныеСтроки = Неопределено; + Иначе + ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(Штрихкод); + ШтрихкодBase64 = Base64Строка(ДвоичныеДанныеСтроки); + ШтрихкодBase64 = СтрЗаменить(ШтрихкодBase64, Символы.ПС, ""); + ШтрихкодBase64 = СтрЗаменить(ШтрихкодBase64, Символы.ВК, ""); + КонецЕсли; + + Возврат ШтрихкодBase64; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПараметрыТипыОборудования() Экспорт + + Возврат МенеджерОборудованияПовтИсп.ПараметрыТипыОборудования(); + +КонецФункции + +// Функция вызывает процедуру подготовки данных операции на сервере. +// +// Параметры: +// ПараметрыПодключения - Структура - параметры подключения оборудования. +// ПроцессорДанных - Строка - Модуль обработки данных. +// Команда - Строка - Имя выполняемой команды. +// ПараметрыОперации - Структура - Параметры выполняемой операции. +// +// Возвращаемое значение: +// Структура +// +Функция ПодготовитьДанныеОперации(ПараметрыПодключения, ПроцессорДанных, Команда, ПараметрыОперации) Экспорт + + МодульПроцессорДанных = ОбщегоНазначенияБПО.ОбщийМодуль(ПроцессорДанных); + Возврат МодульПроцессорДанных.ПодготовитьДанныеОперации(ПараметрыПодключения, Команда, ПараметрыОперации); + +КонецФункции + +// Процедура обработки данных операции на сервере. +// +// Параметры: +// ПараметрыПодключения - Структура - параметры подключения оборудования. +// ПроцессорДанных - Строка - Модуль обработки данных. +// Команда - Строка - Имя выполняемой команды. +// РезультатВыполнения - Структура - Результат выполнения. +// ДанныеОперации - Структура - Данные выполненной операции. +// +Процедура ОбработатьДанныеОперации(ПараметрыПодключения, ПроцессорДанных, Команда, РезультатВыполнения, ДанныеОперации) Экспорт + + МодульПроцессорДанных = ОбщегоНазначенияБПО.ОбщийМодуль(ПроцессорДанных); + МодульПроцессорДанных.ОбработатьДанныеОперации(ПараметрыПодключения, Команда, РезультатВыполнения, ДанныеОперации); + +КонецПроцедуры + +Функция СовместимостьВнешнейКомпонентыИзФайла(Знач ИмяМакета) Экспорт + + Возврат МенеджерОборудованияПовтИсп.СовместимостьВнешнейКомпонентыИзФайла(ИмяМакета); + +КонецФункции + +#Область RFID + +// Получить таблицу меток RFID. Используется для обращения в веб клиенте. +// +// Параметры: +// ДанныеМеток - Строка +// +// Возвращаемое значение: +// Массив из Структура +// +Функция МеткиRFID(ДанныеМеток) Экспорт + + Возврат МенеджерОборудованияКлиентСервер.МеткиRFID(ДанныеМеток); + +КонецФункции + +#КонецОбласти + +#Область РабочиеМеста + +Функция ОбновитьРабочееМестоКлиента(ПараметрыПоискаРабочегоМеста = Неопределено, СоздатьРабочееМесто = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + МенеджерОборудования.ЗаполнитьАктуальныеРеквизитыРабочегоМеста(ПараметрыПоискаРабочегоМеста); + + ИдентификаторКлиента = ПараметрыПоискаРабочегоМеста.ИдентификаторКлиента; + ИмяКомпьютера = ПараметрыПоискаРабочегоМеста.ИмяКомпьютера; + MACАдреса = ПараметрыПоискаРабочегоМеста.MACАдреса; + + ТекущееРМ = Справочники.РабочиеМеста.ПустаяСсылка(); + СписокРМ = НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, MACАдреса); + Если СписокРМ.Количество() > 0 Тогда + ТекущееРМ = СписокРМ[0]; + МенеджерОборудования.ОбновитьРеквизитыРабочегоМеста(ТекущееРМ, ПараметрыПоискаРабочегоМеста); + Иначе + Если СоздатьРабочееМесто Тогда + ТекущееРМ = СоздатьРабочееМестоКлиента(ПараметрыПоискаРабочегоМеста); + КонецЕсли; + КонецЕсли; + + УстановитьРабочееМестоКлиента(ТекущееРМ); + Возврат ТекущееРМ; + +КонецФункции + +Процедура ОбновитьРеквизитыРабочегоМеста(РабочееМесто, АктуальныеРеквизитыРабочегоМеста) Экспорт + + МенеджерОборудования.ОбновитьРеквизитыРабочегоМеста(РабочееМесто, АктуальныеРеквизитыРабочегоМеста); + +КонецПроцедуры + + +Процедура ОбновитьИдентификаторРабочегоМеста(РабочееМесто, НовыйИдентификатор) Экспорт + + Если ЗначениеЗаполнено(РабочееМесто) Тогда + + РабочееМестоОбъект = РабочееМесто.ПолучитьОбъект(); + РабочееМестоОбъект.Код = НовыйИдентификатор; + РабочееМестоОбъект.Записать(); + + КонецЕсли; + +КонецПроцедуры + +// Выполняет привязку идентификатора клиента к элементу справочника рабочего места +// +// Параметры: +// ИдентификаторКлиента - Строка +// MACАдрес - Строка +// +// Возвращаемое значение: +// Массив из СправочникСсылка.РабочиеМеста. +// +Функция ПривязатьРабочееМестоПоMACАдресу(ИдентификаторКлиента, MACАдрес) Экспорт + + Если Не ОбщегоНазначенияБПО.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Новый Массив(); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + СписокРабочиеМеста = НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, "", MACАдрес); + + Если СписокРабочиеМеста.Количество() > 0 Тогда + ТекущееРабочееМесто = СписокРабочиеМеста[0].ПолучитьОбъект(); + Если ТекущееРабочееМесто.ИдентификаторыКлиентов.Найти(ИдентификаторКлиента, "ИдентификаторКлиента") = Неопределено Тогда + ИдентификаторыКлиентов = ТекущееРабочееМесто.ИдентификаторыКлиентов.Добавить(); + ИдентификаторыКлиентов.ИдентификаторКлиента = ИдентификаторКлиента; + ТекущееРабочееМесто.ЛокальноеУстройство = Истина; + ТекущееРабочееМесто.Записать(); + КонецЕсли; + Иначе + Параметры = Новый Структура; + Параметры.Вставить("ИдентификаторКлиента", ИдентификаторКлиента); + Параметры.Вставить("MACАдрес" , MACАдрес); + Параметры.Вставить("ИмяКомпьютера"); + РабочееМесто = СоздатьРабочееМестоКлиента(Параметры); + ТекущееРабочееМесто = РабочееМесто.ПолучитьОбъект(); + Если ТекущееРабочееМесто.ИдентификаторыКлиентов.Найти(ИдентификаторКлиента, "ИдентификаторКлиента") = Неопределено Тогда + ИдентификаторыКлиентов = ТекущееРабочееМесто.ИдентификаторыКлиентов.Добавить(); + ИдентификаторыКлиентов.ИдентификаторКлиента = ИдентификаторКлиента; + ТекущееРабочееМесто.ЛокальноеУстройство = Истина; + ТекущееРабочееМесто.Записать(); + КонецЕсли; + СписокРабочиеМеста.Добавить(РабочееМесто); + КонецЕсли; + УстановитьРабочееМестоКлиента(СписокРабочиеМеста[0]); + + Возврат СписокРабочиеМеста; + +КонецФункции + +Процедура СохранитьMACАдресДляРабочееМеста(MACАдрес) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + РабочееМестоКлиента = РабочееМестоКлиента(); + Если ЗначениеЗаполнено(РабочееМестоКлиента) Тогда + РабочееМестоКлиентаMACАдрес = ОбщегоНазначенияБПО.ЗначениеРеквизитаОбъекта(РабочееМестоКлиента, "MACАдрес"); + Если РабочееМестоКлиентаMACАдрес <> MACАдрес Тогда + РабочееМестоОбъект = РабочееМестоКлиента.ПолучитьОбъект(); + РабочееМестоОбъект.MACАдрес = MACАдрес; + РабочееМестоОбъект.Записать(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Функция информацию о текущем рабочем месте. +// +// Возвращаемое значение: +// Структура: +// * РабочееМесто - СправочникСсылка.РабочиеМеста +// * ЕстьПодключаемоеОборудование - Булево +// +Функция ИнформацияОРабочемМестеКлиента() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("РабочееМесто", РабочееМестоКлиента()); + Результат.Вставить("ЕстьПодключаемоеОборудование", МенеджерОборудования.ЕстьПодключаемоеОборудование()); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + diff --git a/CommonModules/МенеджерОборудованияВызовСервераПереопределяемый.xml b/CommonModules/МенеджерОборудованияВызовСервераПереопределяемый.xml new file mode 100644 index 0000000..08cefbc --- /dev/null +++ b/CommonModules/МенеджерОборудованияВызовСервераПереопределяемый.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияВызовСервераПереопределяемый + + + ru + Менеджер оборудования вызов сервера переопределяемый + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияВызовСервераПереопределяемый/Ext/Module.bsl b/CommonModules/МенеджерОборудованияВызовСервераПереопределяемый/Ext/Module.bsl new file mode 100644 index 0000000..bd2c442 --- /dev/null +++ b/CommonModules/МенеджерОборудованияВызовСервераПереопределяемый/Ext/Module.bsl @@ -0,0 +1,511 @@ +#Область ПрограммныйИнтерфейс + +// Возвращает список доступных типов оборудования. +// +// Параметры: +// СписокТиповОборудования - Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования - +// доступные типы подключаемого оборудования в конфигурации. +// СтандартнаяОбработка - Булево - признак выполнения стандартной обработки. +// Пример: +// СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ККТ). +// +Процедура ДоступныеТипыОборудования(СписокТиповОборудования, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Возвращает список доступных типов сетевого оборудования. +// +// Параметры: +// СписокТиповОборудования - Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования - +// доступные типы подключаемого оборудования в конфигурации. +// СтандартнаяОбработка - Булево - признак выполнения стандартной обработки. +// Пример: +// СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ККТ). +// +Процедура ДоступныеТипыСетевогоОборудования(СписокТиповОборудования, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Возвращает флаг возможности добавления новых драйверов оборудования в справочник. +// Параметры: +// ДобавлениеНовыхДрайверовДоступно - Булево - Флаг возможности добавления новых компонент подключения оборудования. +// СтандартнаяОбработка - Булево - Признак выполнения стандартной обработки. +// Пример: +// ДобавлениеНовыхДрайверовДоступно = Ложь; +// СтандартнаяОбработка = Ложь. +// +Процедура ДоступноДобавлениеНовыхДрайверов(ДобавлениеНовыхДрайверовДоступно, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Возвращает доступность сетевого оборудования. +// +// Параметры: +// СетевоеОборудованиеДоступно - Булево - Сетевое оборудование доступно. +// СтандартнаяОбработка - Булево - Стандартная обработка. +// +Процедура ДоступноСетевоеОборудование(СетевоеОборудованиеДоступно, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Возвращает доступность инкассации в форме управление фискальным устройством. +// +// Параметры: +// ИнкассацияДоступна - Булево - Доступность инкассации. +// СтандартнаяОбработка - Булево - Стандартная обработка. +// +Процедура ДоступноИнкассацияВУправлениеФискальнымУстройством(ИнкассацияДоступна, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Доступны возвраты без карты. +// +// Параметры: +// ВозвратыБезКарты - Структура - Доступны возвраты без карты: +// * ВозвратПоПлатежнойКарте - Булево +// * ВозвратЭлектроннымСертификатом - Булево +// +Процедура ДоступноВозвратыБезКарты(ВозвратыБезКарты) Экспорт + +КонецПроцедуры + +// Переопределяемая процедура для подсистемы управление доступом СтандартныеПодсистемы +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +// +// Параметры: +// Менеджер - Строка +// Ограничение - Структура: +// * Текст - Строка - ограничение доступа для пользователей. +// Если пустая строка, значит, доступ разрешен. +// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей. +// Если пустая строка, значит, доступ запрещен. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически. +// - Булево - если Ложь, то всегда записывать ключи доступа, +// если Истина, тогда не записывать ключи доступа, +// а использовать ключи доступа владельца (требуется, +// чтобы ограничение было строго по объекту-владельцу). +// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также +// как у параметра ПоВладельцуБезЗаписиКлючейДоступа. +// +Процедура ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение) Экспорт + +КонецПроцедуры + +#Область Обновление + +// Переопределяемая часть процедуры обновления с БПО 3 +// +// Параметры: +// СсылкаПодключаемоеОборудование - СправочникСсылка.ПодключаемоеОборудование - оборудование для обновления перехода с БПО 3 +// +Процедура ОбновитьСправочникПодключаемогоОборудования(СсылкаПодключаемоеОборудование) Экспорт + +КонецПроцедуры + +// Вызывается при получении индентификаторов драверов для определения используемых драйверов хранящихся в +// справочнике ВнешниеКомпоненты и справочнике ОбщиеВнешниеКопоненты. Позволяет изменить список поставляемых драйверов и +// список драйверов находящихся в неразделенном справочнике ОбщиеВнешниеКопоненты. +// Параметры: +// Идентификаторы - Массив из Строка - идентификаторы драйверов +Процедура ПриПолученииИдентификаторовДрайверов(Идентификаторы) Экспорт + +КонецПроцедуры + +// Вызывается при обновлении ИБ в момент записи макетов драйверов в справочник внешние компоненты +// Параметры: +// ИспользуемыеДрайверы - см. МенеджерОборудования.ИспользуемыеДрайверыПодключаемогоОборудования +// Стандартнаяобработка - Булево +Процедура ПриЗагрузкеДрайверовВСправочникВнешниеКомпонентыПриОбновленииИБ(ИспользуемыеДрайверы, Стандартнаяобработка) Экспорт + +КонецПроцедуры + +// Вызывается при добавлении подключаемого оборудования в момент записи макета драйвера в справочник Внешние компоненты +// +// Параметры: +// ДанныеДляДобавления - см. МенеджерОборудования.ИспользуемыеДрайверыПодключаемогоОборудования +// Стандартнаяобработка - Булево +Процедура ПриЗагрузкеДрайвераВСправочникВнешниеКомпонентыПриДобавленииОборудования(ДанныеДляДобавления, Стандартнаяобработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область ОборудованиеККТ + +// Процедура заполняет реквизиты организации для регистрации ФН. +// +// Параметры: +// Организация - ОпределяемыйТип.ОрганизацияБПО - организация для заполнения реквизитов. +// ПараметрыРегистрации - Структура - параметры регистрации ФН. +// +Процедура ЗаполнитьРеквизитыОрганизацииДляРегистрацииФН(Организация, ПараметрыРегистрации) Экспорт + +КонецПроцедуры + +// Переопределяет формируемый шаблон чека. +// +// Параметры: +// ШаблонЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ОбщиеПараметры - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ДополнительныйТекст - Строка - Дополнительный текст шаблона чека. +// СтандартнаяОбработка - Булево - Признак стандартной обработки. +// ТипОборудования - Строка - Типы оборудования строкой. +// +Процедура СформироватьШаблонЧека(ШаблонЧека, ОбщиеПараметры, ДополнительныйТекст, СтандартнаяОбработка, ТипОборудования = "") Экспорт + +КонецПроцедуры + +// Возвращает для каких типов идентификаторов будет заполняться тег 1162 (код товара). +// +// Параметры: +// ТипыИдентификаторов - Массив из ПеречислениеСсылка.ТипыИдентификаторовТовараККТ +// СтандартнаяОбработка - Булево - Стандартная обработка +// +Процедура КодТовараЗаполняетсяДляТиповИдентификаторов(ТипыИдентификаторов, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Возвращает, для каких типов товаров будет заполняться отраслевой реквизит. +// +// Параметры: +// ТипыТоваров - Структура: +// * ИзделияИзНатуральногоМеха - Булево - Заполнения для изделия из натурального меха. +// * ОбъемноСортовойУчет - Булево - Заполнения для товаров объемно сортового учета. +// +Процедура ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(ТипыТоваров) Экспорт + + + +КонецПроцедуры + + // Ведется учет ИСМП в конфигурации +// Параметры: +// УчетПродукцииИСМП - Булево - Ведется учет ИСМП в конфигурации +// СтандартнаяОбработка - Булево - Выполнение стандартной обработки +// +Процедура ВедетсяУчетПродукцииИСМП(УчетПродукцииИСМП, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Ведется объемно сортовой учет в конфигурации +// Параметры: +// ОбъемноСортовойУчет - Булево - Ведется объемно сортовой учет в конфигурации +// СтандартнаяОбработка - Булево - Выполнение стандартной обработки +// +Процедура ВедетсяОбъемноСортовойУчет(ОбъемноСортовойУчет, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +// Возвращает оказываются услуги общественного питания +// Параметры: +// ОбщественноеПитание - Булево - Оказываются услуги общественного питания +// СтандартнаяОбработка - Булево - Выполнение стандартной обработки +// +Процедура ОказываютсяУслугиОбщественноеПитания(ОбщественноеПитание, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +// Контроль фискализации безналичных платежей +// Параметры: +// ФискализацииБезналичныхПлатежей - Булево - Информация о безналичных платежах в Фискальных документах +// СтандартнаяОбработка - Булево - Выполнение стандартной обработки +// +Процедура КонтрольФискализацииБезналичныхПлатежей(ФискализацииБезналичныхПлатежей, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Процедура где можно добавить любой текст при формировании чека в формате PDF. +// +// Параметры: +// ТекстЗаголовка - Строка - Текст который будет выведен при формировании кассового чека в формате PDF +// ТекстПодвала - Строка - Текст который будет выведен при формировании кассового чека в формате PDF +Процедура ДополнительныйТекстПриФормированииЧекаPDF(ТекстЗаголовка, ТекстПодвала) Экспорт + +КонецПроцедуры + +// Вызывается после открытия кассовой смены +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - ссылка на оборудование, +// на котором выполняется открытие смены +// Результат - Структура - результат открытия кассовой смены: +// * Результат - Булево - результат закрытия смены +// * ОписаниеОшибки - Строка - описание ошибки +// * НомерСменыККТ - Строка +// * НомерЧекаККТ - Строка +// * ПараметрыККТ - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальногоНакопителяОбщие. +Процедура ПослеОткрытияКассовойСмены(ИдентификаторУстройства, Результат) Экспорт + +КонецПроцедуры + +// Вызывается после закрытия кассовой смены +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - ссылка на оборудование, +// на котором выполняется закрытие смены +// Результат - Структура - результат закрытия кассовой смены: +// * Результат - Булево - результат закрытия смены +// * ОписаниеОшибки - Строка - описание ошибки +// * КассоваяСмена - ДокументСсылка.КассоваяСмена +// * НомерСменыККТ - Строка +// * НомерЧекаККТ - Строка +Процедура ПослеЗакрытияКассовойСмены(ИдентификаторУстройства, Результат) Экспорт + +КонецПроцедуры + +// Переопределяет доступное ККТ для фискализации чека. +// +// Параметры: +// РеквизитыЧека - Структура - реквизиты фискального чека +// СписокУстройств - Массив Из Произвольный - Список доступных ККТ для фискализации +// ИдентификаторУстройстваККТ - СправочникСсылка.ПодключаемоеОборудование - выбранное ККТ для фискализации +// СтандартнаяОбработка - Булево +// +Процедура ДоступноеККТДляФискализации(РеквизитыЧека, СписокУстройств, ИдентификаторУстройстваККТ, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + +// ++ Локализация + +#Область Маркировка + +// Вызывается после проверки кодов маркировки на ККТ +// +// Параметры: +// ДанныеОбмена - Массив из Структура : +// * ЗапросКМ - Строка - текст запроса к ККТ в виде XML +// * ЛокальныйОтветКМ - Строка, Неопределено - текст ответа от ККТ в виде XML, если содержит Неопределено, тогда результат не получен +// * УдаленныйОтветКМ - Массив из Строка, Неопределено - текст ответа от удаленного сервера проверки кода маркировки в виде XML, +// если содержит Неопределено, тогда результат не получен +// +Процедура ПослеПроверкиКодовМаркировки(ДанныеОбмена) Экспорт + +КонецПроцедуры + +#КонецОбласти + +// -- Локализация + +// Заполняет сведения об организации по ссылке типа ОпределяемыеТипы.Организация, для отображения +// на форме просмотра фискализированного чека, если установлен флаг СтандартнаяОбработка, +// тогда в качестве наименования будет использовано представление значения Организация. +// +// Параметры: +// Организация - ОпределяемыйТип.ОрганизацияБПО +// СведенияОбОрганизации - Структура: +// * Наименование - Строка +// СтандартнаяОбработка - Булево +// +Процедура СведенияОбОрганизации(Организация, СведенияОбОрганизации, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#Область РаботаСФормойЭкземпляра + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПриСозданииНаСервере". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - Объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// Отказ - Булево - Отказ создания +// Параметры - Структура - Параметры операции +// СтандартнаяОбработка - Булево - Стандартная обработка +// +Процедура ЭкземплярОборудованияПриСозданииНаСервере(Объект, ЭтаФорма, Отказ, Параметры, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПриЧтенииНаСервере". +// +// Параметры: +// ТекущийОбъект - СправочникОбъект.ПодключаемоеОборудование - Объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// +Процедура ЭкземплярОборудованияПриЧтенииНаСервере(ТекущийОбъект, ЭтаФорма) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПередЗаписьюНаСервере". +// +// Параметры: +// Отказ - Булево - Отказ операции +// ТекущийОбъект - СправочникОбъект.ПодключаемоеОборудование - Объект подключаемого оборудования. +// ПараметрыЗаписи - Структура - Параметры операции +// +Процедура ЭкземплярОборудованияПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПриЗаписиНаСервере". +// +// Параметры: +// Отказ - Булево - Отказ операции +// ТекущийОбъект - СправочникОбъект.ПодключаемоеОборудование - Объект подключаемого оборудования. +// ПараметрыЗаписи - Структура - Параметры операции +// +Процедура ЭкземплярОборудованияПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПослеЗаписиНаСервере". +// +// Параметры: +// ТекущийОбъект - СправочникОбъект.ПодключаемоеОборудование - Объект подключаемого оборудования. +// ПараметрыЗаписи - Структура - Параметры операции +// +Процедура ЭкземплярОборудованияПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ОбработкаПроверкиЗаполненияНаСервере". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - Объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// Отказ - Булево - Отказ создания +// ПроверяемыеРеквизиты - Структура - Проверяемые реквизиты +// +Процедура ЭкземплярОборудованияОбработкаПроверкиЗаполненияНаСервере(Объект, ЭтаФорма, Отказ, ПроверяемыеРеквизиты) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре Фискальные операции +// при событии "ПриСозданииНаСервере". +// +// Параметры: +// Запись - РегистрСведенийЗапись.ФискальныеОперации - Запись фискальные операции. +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// Отказ - Булево - Отказ создания +// Параметры - Структура - Параметры операции +// СтандартнаяОбработка - Булево - Стандартная обработка +// +Процедура ЭкземплярФискальныеОперацииПриСозданииНаСервере(Запись, ЭтаФорма, Отказ, Параметры, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре Фискальные операции +// при событии "ПриСозданииНаСервере". +// +// Параметры: +// Запись - РегистрСведенийЗапись.ФискальныеОперации - Запись фискальные операции. +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// Отказ - Булево - Отказ создания +// СтандартнаяОбработка - Булево - Стандартная обработка +// +Процедура ЭкземплярПлатежныеОперацииПриСозданииНаСервере(Запись, ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСФормойСписка + +// Дополнительные переопределяемые действия с управляемой формой в Список Фискальные операции +// при событии "ПриСозданииНаСервере". +// +// Параметры: +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// Отказ - Булево - Отказ создания +// Параметры - Структура - Параметры операции +// СтандартнаяОбработка - Булево - Стандартная обработка +// +Процедура СписокФискальныеОперацииПриСозданииНаСервере(ЭтаФорма, Отказ, Параметры, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Список платежные операции +// при событии "ПриСозданииНаСервере". +// +// Параметры: +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования. +// Отказ - Булево - Отказ создания. +// Параметры - Структура - Параметры операции. +// СтандартнаяОбработка - Булево - Стандартная обработка. +// +Процедура СписокПлатежныеОперацииПриСозданииНаСервере(ЭтаФорма, Отказ, Параметры, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Требуется определить в каких местах конфигурации, может быть использовано подключаемое оборудование +// +// Параметры: +// ПодключаемоеОборудование - СправочникСсылка.ПодключаемоеОборудование +// ВыдаватьПредупреждение - Булево - выдавать предупредение при отключении или пометке на удаление элемента оборудования. +// ТекстПредупреждения - Строка - текст предупреждения. +// СтандартнаяОбработка - Булево - выполнить стандартную обработку, выдать предупреждение. +Процедура ОпределитьВозможностьОтключенияОборудования(ПодключаемоеОборудование, ВыдаватьПредупреждение, ТекстПредупреждения, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + +// Обработчик события заполнения персональных данных. +// +// Параметры: +// ПерсональныеДанные - Структура - Возвращаемый параметр, персональные данные. +// СубъектПерсональныхДанных - ОпределяемыйТип.СубъектПерсональныхДанныхБПО - субъект персональных данных. +// ТипПерсональныхДанных - ПеречислениеСсылка.ТипыПерсональныхДанныхККТ - Тип персональных данных +// НаДату - Дата - Дата, на которую необходимо получать персональные данные +// +Процедура ОбработкаЗаполненияПерсональныхДанных(ПерсональныеДанные, СубъектПерсональныхДанных, ТипПерсональныхДанных, НаДату) Экспорт + +КонецПроцедуры + +#Область ПродажаСВыдачейНаличных + +// Процедура где требуется проверить достаточность наличных денежных средств в кассовом аппарате +// +// Параметры: +// ИдентификаторККТ - СправочникСсылка.ПодключаемоеОборудование - ссылка на элемент КТТ +// Сумма - Число - требуемая сумма для выдачи наличных +// Отказ - Булево - если установить в Истина, тогда выдача наличных осуществляться не будет +Процедура ПроверитьДостаточностьНаличныхСредств(ИдентификаторККТ, Сумма, Отказ) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСФормойТоваровНСПК + +// Процедура, где требуется заполнить дерево товаров по кодам ТРУ. +// +// Параметры: +// ДеревоСертификатовЗначение - ДеревоЗначений - дерево значений для заполнения +// КодыТоваровТРУ - ТаблицаЗначений - таблица значений с товарами и кодами ТРУ для поиска сопоставлений +Процедура ЗаполнитьДеревоТоваровПоКодамТРУ(ДеревоСертификатовЗначение, КодыТоваровТРУ) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +#Область РаботаСЭлементомФормы + +// Устарела: больше не используется. +// Дополнительные переопределяемые действия с элементом формы +// служит для учета специфики визуального отображения в зависимости от типа клиента. +// +// Параметры: +// ЭлементУправления - ЭлементУправленияИнтерфейсом - элемент управления. +// СтандартнаяОбработка - Булево - Стандартная обработка. +// +Процедура ПодготовитьЭлементУправления(ЭлементУправления, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияГлобальный.xml b/CommonModules/МенеджерОборудованияГлобальный.xml new file mode 100644 index 0000000..01224f6 --- /dev/null +++ b/CommonModules/МенеджерОборудованияГлобальный.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияГлобальный + + + ru + Менеджер оборудования глобальный + + + + true + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияГлобальный/Ext/Module.bsl b/CommonModules/МенеджерОборудованияГлобальный/Ext/Module.bsl new file mode 100644 index 0000000..65862c1 --- /dev/null +++ b/CommonModules/МенеджерОборудованияГлобальный/Ext/Module.bsl @@ -0,0 +1,42 @@ +#Область СлужебныйПрограммныйИнтерфейс + +#Область Системные + +// ++ Локализация +Асинх Процедура ПодключаемоеОборудование_ПроверкаКМ() Экспорт + + КонтекстОперации = Неопределено; + МодульМенеджерОборудованияМаркировкаКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("МенеджерОборудованияМаркировкаКлиент"); + МодульМенеджерОборудованияМаркировкаКлиент.ВосстановитьКонтекстОперации(КонтекстОперации); + + Операция = КонтекстОперации.Операции[0]; + СписокОпераций = КонтекстОперации.СписокОпераций; + + Если Операция = СписокОпераций.ЗапросОИСМ Тогда + МодульМенеджерОборудованияМаркировкаКлиент.ПроверкаКМ(КонтекстОперации); + КонецЕсли; + +КонецПроцедуры +// -- Локализация + +Процедура ПодключаемоеОборудование_ЗаписатьЛогНаСервере() Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПодсистемаЛогирования() Тогда + МодульЛогированиеОперацийБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ЛогированиеОперацийБПОКлиент"); + МодульЛогированиеОперацийБПОКлиент.ЗаписатьЛогНаСервере(); + КонецЕсли; + +КонецПроцедуры + +Процедура ПодключаемоеОборудование_ЗаписатьЛогНаСервереПриЗавершении() Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПодсистемаЛогирования() Тогда + МодульЛогированиеОперацийБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ЛогированиеОперацийБПОКлиент"); + МодульЛогированиеОперацийБПОКлиент.ЗаписатьЛогНаСервере(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияКлиент.xml b/CommonModules/МенеджерОборудованияКлиент.xml new file mode 100644 index 0000000..560f0d7 --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиент.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияКлиент + + + ru + Менеджер оборудования клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияКлиент/Ext/Module.bsl b/CommonModules/МенеджерОборудованияКлиент/Ext/Module.bsl new file mode 100644 index 0000000..c4a2990 --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиент/Ext/Module.bsl @@ -0,0 +1,4905 @@ +#Область ПрограммныйИнтерфейс + +#Область Системные + +// Возвращает номер версии библиотеки подключаемого оборудования. +// +// Возвращаемое значение: +// Строка. +// +Функция ВерсияБиблиотеки() Экспорт + + Возврат ПодключаемоеОборудование().ВерсияБиблиотеки; + +КонецФункции + +// Производит получение события от устройства. +// +// Параметры: +// ОписаниеСобытия - Структура: +// * Источник - Строка - Источник внешнего события. +// * Событие - Строка - Наименование события. +// * Данные - Строка - Данные для события. +// ОписаниеОшибки - Строка - описание ошибки +// +// Возвращаемое значение: +// Структура. +// Неопределено. +// +Функция ПолучитьСобытиеОтУстройства(ОписаниеСобытия, ОписаниеОшибки = "") Экспорт + + Результат = Неопределено; + + // Поиск обработчика события + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Для Каждого Подключение Из ПодключаемоеОборудование.ПараметрыПодключенияПО Цикл + Если Подключение.ИДУстройства = ОписаниеСобытия.Источник + Или (ПустаяСтрока(Подключение.ИДУстройства) И Подключение.ИменаСобытий.Количество() > 0) Тогда + // Ищем среди подключенного оборудования устройство с полученным событием. + Событие = Подключение.ИменаСобытий.Найти(ОписаниеСобытия.Событие); + Если Событие <> Неопределено Тогда + ОбъектДрайвера = Подключение.ОбъектДрайвера; + // Обрабатываем сообщение + РезультатОбработки = Подключение.ОбработчикДрайвера.ОбработатьСобытие(ОбъектДрайвера, Подключение, ОписаниеСобытия.Событие, ОписаниеСобытия.Данные); + // Оповещаем + Если РезультатОбработки.Результат Тогда + Результат = Новый Структура(); + Результат.Вставить("ИмяСобытия", РезультатОбработки.Событие); + Результат.Вставить("Параметр", РезультатОбработки.Данные); + Результат.Вставить("Источник", "ПодключаемоеОборудование"); + Возврат Результат; + Иначе + ОписаниеОшибки = ОписаниеСобытия.Событие; + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Производит обработку данных события, полученных от клиента. +// +// Параметры: +// ОписаниеСобытия - Структура: +// * Источник - Строка - Источник внешнего события. +// * Событие - Строка - Наименование события. +// * Данные - Строка - Данные для события. +// ОписаниеОшибки - Строка - описание ошибки +// +// Возвращаемое значение: +// Булево. +// +Функция ОбработатьСобытиеОтУстройства(ОписаниеСобытия, ОписаниеОшибки = "") Экспорт + + Результат = Истина; + // Поиск обработчика события + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Для Каждого Подключение Из ПодключаемоеОборудование.ПараметрыПодключенияПО Цикл + Если Подключение.ИДУстройства = ОписаниеСобытия.Источник + Или (ПустаяСтрока(Подключение.ИДУстройства) И Подключение.ИменаСобытий.Количество() > 0) Тогда + Если Не Подключение.Несертифицированное Тогда + // Ищем среди подключенного оборудования устройство с полученным событием. + Событие = Подключение.ИменаСобытий.Найти(ОписаниеСобытия.Событие); + Если Событие <> Неопределено Тогда + ОбъектДрайвера = Подключение.ОбъектДрайвера; + // Обрабатываем сообщение + РезультатОбработки = Подключение.ОбработчикДрайвера.ОбработатьСобытие(ОбъектДрайвера, Подключение, ОписаниеСобытия.Событие, ОписаниеСобытия.Данные); + // Оповещаем + Если РезультатОбработки.Результат Тогда + Оповестить(РезультатОбработки.Событие, РезультатОбработки.Данные, "ПодключаемоеОборудование"); + Иначе + Результат = Ложь; + ОписаниеОшибки = ОписаниеСобытия.Событие; + КонецЕсли; + КонецЕсли; + Иначе + ОбработатьСобытиеОтНесертифицираванногоДрайвера(Подключение, ОписаниеСобытия, ОписаниеОшибки); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Параметры подключения драйвера. +// +// Параметры: +// ДанныеДрайвера - Структура - Данные драйвера. +// +// Возвращаемое значение: +// Структура - Параметры подключения: +// *Наименование - Строка. +// *ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования. +// *ПодключениеИзМакета - Булево. +// *ПодключениеЛокальноПоИдентификатору - Булево. +// *ИдентификаторОбъекта - СправочникСсылка.ПодключаемоеОборудование. +// *ВерсияДрайвера - Строка. +// *ИмяМакетаДрайвера - Строка. +// *РевизияИнтерфейса - Строка. +// *ШиринаСтроки - Строка. +// *ПечатьКвитанцийНаТерминале - Булево. +// *КороткиеСлипЧеки - Булево. +// *ВыдачиНаличныхДенежныхСредств - Булево. +// *ОплатаЭлектроннымиСертификатами - Булево. +// *СтолбцовНаДисплее - Число. +// *СтрокНаДисплее - Число. +// *ДисплейОтображаетТекст - Булево. +// *ДисплейОтображаетГрафику - Булево. +// *ДисплейОтображаетQRКод - Булево. +// *ДисплейОтображаетHTML - Булево. +// *ДисплейОтображаетСтатус - Булево. +// *ИдентификаторУстройства - УникальныйИдентификатор. +// *ОбъектДрайвера - Неопределено - +// *Параметры - Неопределено - +// *ОбработчикДрайвера - Неопределено - +// +Функция ПараметрыПодключенияДрайвера(ДанныеДрайвера) Экспорт + + Подключение = МенеджерОборудованияКлиентСервер.ПараметрыПодключения(ДанныеДрайвера); + Подключение.Вставить("ОбъектДрайвера" , Неопределено); + Подключение.Вставить("Параметры" , Неопределено); + Подключение.Вставить("ОбработчикДрайвера", ПодключаемоеОборудованиеДрайверКлиент); + Возврат Подключение; + +КонецФункции + +// Параметры подключения устройства. +// +// Параметры: +// ДанныеУстройства - Неопределено, Произвольный, Структура - Данные устройства +// +// Возвращаемое значение: +// Структура - Параметры подключения: +// * Наименование - Строка. +// * ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования. +// * ПодключениеИзМакета - Булево. +// * ПодключениеЛокальноПоИдентификатору - Булево. +// * ИдентификаторОбъекта - СправочникСсылка.ПодключаемоеОборудование. +// * ВерсияДрайвера - Строка. +// * ИмяМакетаДрайвера - Строка. +// * РевизияИнтерфейса - Строка. +// * ШиринаСтроки - Строка. +// * ПечатьКвитанцийНаТерминале - Булево. +// * КороткиеСлипЧеки - Булево. +// * ВыдачиНаличныхДенежныхСредств - Булево. +// * ОплатаЭлектроннымиСертификатами - Булево. +// * ЧастичнаяОтмена - Булево. +// * СписокОперацийПоКартам - Булево. +// * ConsumerPresentedQR - Булево. +// * ПокупкаСЗачислениемНаКарту - Булево. +// * СтолбцовНаДисплее - Число. +// * СтрокНаДисплее - Число. +// * ДисплейОтображаетТекст - Булево. +// * ДисплейОтображаетГрафику - Булево. +// * ДисплейОтображаетQRКод - Булево. +// * ИдентификаторУстройства - УникальныйИдентификатор. +// * ОбъектДрайвера - Неопределено - +// * Параметры - Неопределено - +// * ОбработчикДрайвера - Неопределено - +// * Клиенты - Массив из СправочникСсылка.РабочиеМеста - +// * Ссылка - СправочникСсылка.ПодключаемоеОборудование. +// * СетевоеОборудование - Булево. +// * КоличествоПодключенных - Число - +// * ИменаСобытий - Массив Из Строка - +// * ИДУстройства - Строка. +// +Функция ПараметрыПодключенияУстройства(ДанныеУстройства) Экспорт + + Подключение = ПараметрыПодключенияДрайвера(ДанныеУстройства); + Подключение.Вставить("Клиенты", Новый Массив()); + Подключение.Вставить("Ссылка" , ДанныеУстройства.Ссылка); + Подключение.Вставить("Параметры" , ДанныеУстройства.Параметры); + Подключение.Вставить("ПараметрыXML" , ДанныеУстройства.ПараметрыXML); + Подключение.Вставить("ПараметрыПриложенияXML" , ДанныеУстройства.ПараметрыПриложенияXML); + Подключение.Вставить("СетевоеОборудование" , ДанныеУстройства.СетевоеОборудование); + Подключение.Вставить("КоличествоПодключенных" , 0); + Подключение.Вставить("ИменаСобытий" , Новый Массив()); + Подключение.Вставить("ИДУстройства" , ""); + Возврат Подключение; + +КонецФункции + +// Событие устройств ввода новый формат. +// +// Возвращаемое значение: +// Булево - Событие устройств ввода новый формат +// +Функция СобытиеУстройствВводаНовыйФормат() Экспорт + + СтандартнаяОбработка = Истина; + НовыйФормат = Ложь; + МенеджерОборудованияКлиентПереопределяемый.СобытиеУстройствВводаНовыйФормат(НовыйФормат, СтандартнаяОбработка); + Результат = ?(Не СтандартнаяОбработка, НовыйФормат, Ложь); + + Возврат Результат; + +КонецФункции + +// Возвращает необходимость печати слип чека эквайринговой операции. +// +// Возвращаемое значение: +// Булево. +// +Функция ПечатьСлипЧекаЭквайринговойОперации() Экспорт + + ПечатьСлипЧека = Истина; + ПолныйСлипЧек = Истина; + СтандартнаяОбработка = Истина; + МенеджерОборудованияКлиентПереопределяемый.ПечатьСлипЧекаЭквайринговойОперации(ПечатьСлипЧека, ПолныйСлипЧек, СтандартнаяОбработка); + + Результат = Новый Структура(); + Результат.Вставить("ПечатьСлипЧека", ?(СтандартнаяОбработка, Истина, ПечатьСлипЧека)); + Результат.Вставить("ПолныйСлипЧек" , ?(СтандартнаяОбработка, Истина, ПолныйСлипЧек)); + + Возврат Результат; + +КонецФункции + +// Возвращает необходимость вывода QR-кода чека на дисплей покупателя после фискализации. +// +// Возвращаемое значение: +// Булево. +// +Функция ВыводQRКодаЧекаНаДисплейПокупателяПослеФискализации() Экспорт + + Результат = Истина; + ВыводQRКодаЧека = Результат; + СтандартнаяОбработка = Истина; + МенеджерОборудованияКлиентПереопределяемый.ВыводQRКодаЧекаНаДисплейПокупателяПослеФискализации(ВыводQRКодаЧека, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Результат, ВыводQRКодаЧека); + Возврат Результат; + +КонецФункции + +// Возвращает глобальные переменные подключаемого оборудования +// +// Возвращаемое значение: +// Структура: +// * ПараметрыПодключенияПО - Массив из Структура +// * ДрайверыОборудования - Соответствие из КлючИЗначение +// * ПоследнийСлипЧек - Строка +// * ЗавершениеРаботыСистемы - Булево +// * ДанныеОчереди - Неопределено +// * ФискальныеУстройства - Массив из Структура +// * ПроверкиКодаМаркировки - Массив из Структура +// * РабочееМесто - СправочникСсылка.РабочиеМеста +// * ЕстьПодключаемоеОборудование - Булево +// * MACАдрес - Строка +// * ДлительныеОперации - Соответствие из КлючИЗначение +// * ПромежуточныйРезультат - Соответствие из КлючИЗначение +// * СистемаЛогирования - Структура +// * ПоправкаКВремениСеанса - Число +// +Функция ПодключаемоеОборудование() Экспорт + + Если ПараметрыПриложения = Неопределено Тогда + ПараметрыПриложения = Новый Соответствие(); + КонецЕсли; + + ПодключаемоеОборудование = ПараметрыПриложения.Получить("БПО.ПодключаемоеОборудование"); + + Если ПодключаемоеОборудование = Неопределено Тогда + ПодключаемоеОборудование = Новый Структура(); + ПодключаемоеОборудование.Вставить("ВерсияБиблиотеки", ""); + ПодключаемоеОборудование.Вставить("ПараметрыПодключенияПО", Новый Массив()); + ПодключаемоеОборудование.Вставить("ДрайверыОборудования", Новый Соответствие()); + ПодключаемоеОборудование.Вставить("ПоследнийСлипЧек", ""); + ПодключаемоеОборудование.Вставить("ЗавершениеРаботыСистемы", Ложь); + ПодключаемоеОборудование.Вставить("ДанныеОчереди", Неопределено); + ПодключаемоеОборудование.Вставить("ФискальныеУстройства", Новый Массив()); + ПодключаемоеОборудование.Вставить("ПроверкиКодаМаркировки", Новый Массив()); + ПодключаемоеОборудование.Вставить("ПараметрыРабочегоМеста", МенеджерОборудованияКлиентСервер.НовыеПараметрыРабочегоМеста()); + ПодключаемоеОборудование.Вставить("ЕстьПодключаемоеОборудование", Ложь); + ПодключаемоеОборудование.Вставить("MACАдреса", Новый Массив); + ПодключаемоеОборудование.Вставить("ДлительныеОперации", Новый Соответствие()); + ПодключаемоеОборудование.Вставить("ПромежуточныйРезультат", Новый Соответствие()); + ПодключаемоеОборудование.Вставить("СистемаЛогирования", Неопределено); + ПодключаемоеОборудование.Вставить("ПоправкаКВремениСеанса" , 0); + ПодключаемоеОборудование.Вставить("ПодключенныеКомпоненты", Новый Соответствие()); + ПодключаемоеОборудование.Вставить("ЛокальнаяОбработкаОшибок", Новый Массив()); + ЗаполнитьЛокальнуОбработкуОшибок(ПодключаемоеОборудование.ЛокальнаяОбработкаОшибок); + ПараметрыПриложения.Вставить("БПО.ПодключаемоеОборудование", ПодключаемоеОборудование); + КонецЕсли; + + Возврат ПодключаемоеОборудование; + +КонецФункции + +// Получить описание драйвера. +// +// Параметры: +// СтрокаXML - Строка. +// +// Возвращаемое значение: +// см. МенеджерОборудованияКлиентСервер.ПараметрыОписанияДрайвера +// +Функция ПолучитьОписаниеДрайвера(СтрокаXML) Экспорт + + ПараметрыXML = ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML(СтрокаXML); + + Параметры = МенеджерОборудованияКлиентСервер.ПараметрыОписанияДрайвера(); + Параметры.НаименованиеДрайвера = ?(ПараметрыXML.Свойство("Name"), ПараметрыXML.Name, ""); + Параметры.ОписаниеДрайвера = ?(ПараметрыXML.Свойство("Description"), ПараметрыXML.Description, ""); + Параметры.ТипОборудования = ?(ПараметрыXML.Свойство("EquipmentType"), ПараметрыXML.EquipmentType, ""); + Параметры.ВерсияДрайвера = ?(ПараметрыXML.Свойство("DriverVersion"), ПараметрыXML.DriverVersion, ""); + Параметры.ВерсияИнтеграционногоКомпонента = ?(ПараметрыXML.Свойство("IntegrationComponentVersion"), ПараметрыXML.IntegrationComponentVersion, ""); + Параметры.URLЗагрузкиДрайвера = ?(ПараметрыXML.Свойство("DownloadURL"), ПараметрыXML.DownloadURL, ""); + Параметры.ЛогДрайвераПутьКФайлу = ?(ПараметрыXML.Свойство("LogPath"), ПараметрыXML.LogPath, ""); + Параметры.ИнтеграционныйКомпонент = ПараметрыXML.Свойство("IntegrationComponent") И ВРег(ПараметрыXML.IntegrationComponent) = "TRUE"; + Параметры.ОсновнойДрайверУстановлен = ПараметрыXML.Свойство("MainDriverInstalled") И ВРег(ПараметрыXML.MainDriverInstalled) = "TRUE"; + Параметры.ЛогДрайвераВключен = ПараметрыXML.Свойство("LogIsEnabled") И ВРег(ПараметрыXML.LogIsEnabled) = "TRUE"; + Параметры.ПоддерживаетсяЛокализация = ПараметрыXML.Свойство("LocalizationSupported") И ВРег(ПараметрыXML.LocalizationSupported) = "TRUE"; + Параметры.ЭтоЭмулятор = ПараметрыXML.Свойство("IsEmulator") И ВРег(ПараметрыXML.IsEmulator) = "TRUE"; + Параметры.ИнформацияОбОкружении = ?(ПараметрыXML.Свойство("EnvironmentInformation"), ПараметрыXML.EnvironmentInformation, ""); + Параметры.АвтоНастройкаОборудования = ПараметрыXML.Свойство("AutoSetup") И ВРег(ПараметрыXML.AutoSetup) = "TRUE"; + + Возврат Параметры; + +КонецФункции + +// Формирует массив локальных обраток ошибок. +// +// Параметры: +// ЛокальнаяОбработкаОшибок - Массив из Структура +// +Процедура ЗаполнитьЛокальнуОбработкуОшибок(ЛокальнаяОбработкаОшибок) Экспорт + + ТекстСообщения = НСтр("ru = 'Пожалуйста, проверьте наличие бумаги в печатающем устройстве и повторно выполните операцию.'"); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Нет бумаги'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Открыта крышка'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Ошибка отрезчика'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Механическая ошибка печатающего устройства'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ТекстСообщения = НСтр("ru = 'Ресурс хранения ФД исчерпан. Данные не передавались в ОФД последние 30 дней.'"); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Ресурс хранения фд исчерпан'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ТекстСообщения = НСтр("ru = 'Необходимо закрыть смену на ККТ для дальнейшей работы.'"); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Смена превысила 24 часа'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ТекстСообщения = НСтр("ru = 'Необходимо открыть смену на ККТ для дальнейшей работы.'"); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Кассовая смена не открыта или истекла'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ТекстСообщения = НСтр("ru = 'Контрольная марка не была проверена ранее.'"); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Контрольная марка не проверена'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ТекстСообщения = НСтр("ru = 'Кассовая смена на ККТ была открыта ранее.'"); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Смена открыта'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Кассовая смена уже открыта'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ТекстСообщения = НСтр("ru = 'Кассовая смена на ККТ была закрыта ранее.'"); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Смена закрыта'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Кассовая смена уже закрыта'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ТекстСообщения = НСтр("ru = 'Пожалуйста, проверьте подключение оборудования и повторно выполните операцию.'"); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Нет связи'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'FFFFFFFFh, Нет связи'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Порт недоступен'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'FFFFFFF8h, Connect timed out'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'FFFFFFFEh, СOM порт недоступен'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + + ЛокальнаяОшибка = Новый Структура(); + ЛокальнаяОшибка.Вставить("ТекстОшибки", НСтр("ru = 'Нет связи с устройством'")); + ЛокальнаяОшибка.Вставить("ТекстСообщения", ТекстСообщения); + ЛокальнаяОбработкаОшибок.Добавить(ЛокальнаяОшибка); + +КонецПроцедуры + +#КонецОбласти + +#Область РабочееМесто + +// Выполняет обновление имени компьютера в параметре сеанса "РабочееМестоКлиента". +// +// Возвращаемое значение: +// Булево. +// +Функция ОбновитьРабочееМестоКлиента() Экспорт + + Результат = Истина; + + РабочееМесто = РабочееМестоКлиента(); + Если Не ЗначениеЗаполнено(РабочееМесто) Тогда + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + MACАдреса = ПодключаемоеОборудование.MACАдреса; + ЕстьПодключаемоеОборудование = ПодключаемоеОборудование.ЕстьПодключаемоеОборудование; + Если ОбщегоНазначенияБПОКлиент.ЭтоВебКлиент() И ЕстьПодключаемоеОборудование Тогда + Если MACАдреса.Количество() = 0 Тогда + Оповещение = Новый ОписаниеОповещения("НачатьПолучениеMACАдресаЗавершение", ЭтотОбъект); + УстанавливатьРасширениеБраузера = Истина; + НачатьПолучениеMACАдреса(Оповещение, УстанавливатьРасширениеБраузера); + Иначе + НачатьПолучениеMACАдресаЗавершение(MACАдреса, Неопределено); + КонецЕсли; + Иначе + РеквизитыРабочегоМеста = АктуальныеРеквизитыРабочегоМеста(); + РабочееМесто = МенеджерОборудованияВызовСервера.СоздатьРабочееМестоКлиента(РеквизитыРабочегоМеста); + УстановитьРабочееМесто(РабочееМесто); + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Процедура для выбора рабочего места текущего сеанса. +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ВыбратьРМТекущегоСеанса(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + + Оповещение = Новый ОписаниеОповещения("ПредложитьВыборРабочегоМестаЗавершение", ЭтотОбъект); + ПредложитьВыборРабочегоМеста(Оповещение); + +КонецПроцедуры + +// Функция предоставляет диалог выбора рабочего места. +// +// Параметры: +// ОбработкаОповещения - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - Строка - идентификатор клиента +// +Процедура ПредложитьВыборРабочегоМеста(ОбработкаОповещения, ИдентификаторКлиента = "") Экспорт + + УстановитьРежимПодключенияРасширенияИнформацииОКомпьютере(Истина); + ОбновитьРабочееМестоКлиента(); + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("ИдентификаторКлиента", ИдентификаторКлиента); + + ОткрытьФорму("Справочник.ПодключаемоеОборудование.Форма.ФормаВыбораРабочегоМеста", ПараметрыФормы,,, ,, ОбработкаОповещения, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + +КонецПроцедуры + +// Завершение выбора рабочего места. +// +// Параметры: +// Результат - Структура - результат выполнения операции. +// Параметры - Структура - параметры операции. +// +Процедура ПредложитьВыборРабочегоМестаЗавершение(Результат, Параметры) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("РабочееМесто") Тогда + УстановитьРабочееМесто(Результат.РабочееМесто); + КонецЕсли; + +КонецПроцедуры + +// Функция устанавливает рабочее место. +// +// Параметры: +// РабочееМесто - СправочникСсылка.РабочиеМеста - рабочее место клиента. +// +Процедура УстановитьРабочееМесто(РабочееМесто) Экспорт + + МенеджерОборудованияВызовСервера.УстановитьРабочееМестоКлиента(РабочееМесто); + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ПодключаемоеОборудование.ПараметрыРабочегоМеста.РабочееМесто = РабочееМесто; + Оповестить("ИзмененоРабочееМестоТекущегоСеанса", РабочееМесто); + +КонецПроцедуры + +// Возвращает текущее рабочее место на клиенте. +// +// Параметры: +// ЗапрашиватьНаСервере - Булево - если Истина, то в случае когда рабочее место отсутствует на клиенте, +// будет выполнен запрос на сервер. +// +// Возвращаемое значение: +// СправочникСсылка.РабочиеМеста +// +Функция РабочееМестоКлиента(ЗапрашиватьНаСервере = Истина) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + РабочееМесто = ПодключаемоеОборудование.ПараметрыРабочегоМеста.РабочееМесто; + Если ЗапрашиватьНаСервере И Не ЗначениеЗаполнено(РабочееМесто) Тогда + ИнформацияОРабочемМесте = МенеджерОборудованияВызовСервера.ИнформацияОРабочемМестеКлиента(); + РабочееМесто = ИнформацияОРабочемМесте.РабочееМесто; + ПодключаемоеОборудование.ПараметрыРабочегоМеста.РабочееМесто = РабочееМесто; + ПодключаемоеОборудование.ЕстьПодключаемоеОборудование = ИнформацияОРабочемМесте.ЕстьПодключаемоеОборудование; + КонецЕсли; + + Возврат РабочееМесто; + +КонецФункции + +// Возвращает массив содержащий рабочие места по найденным параметрам. +// +// Параметры: +// ИдентификаторКлиента - Строка - идентификатор клиента для рабочего места +// ИмяКомпьютера - Строка - Имя компьютера +// MACАдрес - Строка - +// +// Возвращаемое значение: +// Массив. +Функция НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, MACАдрес = "") Экспорт + + Возврат МенеджерОборудованияКлиентПовтИсп.НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, MACАдрес); + +КонецФункции + +// Открытие формы списка рабочих мест. +// +// Параметры: +// ПараметрКоманды - Структура - параметры команды. +// ПараметрыВыполненияКоманды - Структура: +// *Источник - ФормаКлиентскогоПриложения - форма родитель. +// *Уникальность - УникальныйИдентификатор - уникальный идентификатор формы. +// *Окно - ОкноКлиентскогоПриложения - окно приложения. +// +Процедура ОткрытьРабочиеМеста(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + + ПараметрыФормы = Новый Структура(); + ОткрытьФорму("Справочник.РабочиеМеста.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры + +// Идентификатор клиента для рабочего места. +// +// Возвращаемое значение: +// Строка - Идентификатор клиента для рабочего места +Функция ИдентификаторКлиентаДляРабочегоМеста() Экспорт + + Возврат МенеджерОборудованияКлиентСервер.ИдентификаторКлиентаДляРабочегоМеста(); + +КонецФункции + +#КонецОбласти + +#Область ОбщиеМетодыДрайвера + +#Область ТипыОборудования + +// Возвращает структру возможных типов оборудования +// +// Возвращаемое значение: +// Структура +Функция ПараметрыТипыОборудования() Экспорт + + ТипыОборудования = МенеджерОборудованияКлиентПовтИсп.ПараметрыТипыОборудования(); + Возврат ОбщегоНазначенияБПОКлиент.СкопироватьРекурсивно(ТипыОборудования); + +КонецФункции + +// Возвращает типы оборудования в виде массива перечислений +// +// Параметры: +// ТипыПО - Массив, Строка, см. ПараметрыТипыОборудования - тип оборудования. +// +// Возвращаемое значение: +// Массив из ОпределяемыйТип.ТипыПодключаемогоОборудования +// +Функция МассивТиповОборудования(ТипыПО) Экспорт + + МассивТипов = Новый Массив(); + Соответствие = СоответствиеТиповОборудования(); + Если ТипЗнч(ТипыПО) = Тип("Строка") Тогда + + ТипыВМассиве = СтрРазделить(ТипыПО, ",", Ложь); + Для Каждого ТипОборудования Из ТипыВМассиве Цикл + МассивТипов.Добавить(Соответствие.Получить(СокрЛП(ТипОборудования))); + КонецЦикла; + + ИначеЕсли ТипЗнч(ТипыПО) = Тип("Массив") Тогда + + ДоступныеТипыОборудования = ДоступныеТипыОборудования(); + Для Каждого ТипОборудования Из ТипыПО Цикл + + Если ТипЗнч(ТипОборудования) = Тип("Строка") Тогда + МассивТипов.Добавить(Соответствие.Получить(СокрЛП(ТипОборудования))); + ИначеЕсли ДоступныеТипыОборудования.Найти(ТипОборудования) <> Неопределено Тогда + МассивТипов.Добавить(ТипОборудования); + КонецЕсли; + + КонецЦикла; + + ИначеЕсли ТипЗнч(ТипыПО) = Тип("Структура") Тогда + + Для Каждого КлючИЗначение Из ТипыПО Цикл + + Если КлючИЗначение.Значение Тогда + МассивТипов.Добавить(Соответствие.Получить(КлючИЗначение.Ключ)); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Возврат МассивТипов; + +КонецФункции + +// Функция возвращает структуру с данными драйвера. +// +// Параметры: +// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера. +// +// Возвращаемое значение: +// Структура: +// * Наименование - Строка +Функция ДанныеДрайвераОборудования(ИдентификаторДрайвера) Экспорт + + Возврат МенеджерОборудованияКлиентПовтИсп.ДанныеДрайвераОборудования(ИдентификаторДрайвера); + +КонецФункции + +// Поиск по идентификатору подключенного ранее устройства. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - экземпляр подключаемого оборудования. +// +// Возвращаемое значение: +// СправочникСсылка.ПодключаемоеОборудование +// +Функция ПолучитьПодключенноеУстройство(ИдентификаторУстройства) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + СписокПодключений = ПодключаемоеОборудование.ПараметрыПодключенияПО; + + ПодключенноеУстройство = Неопределено; + + Если СписокПодключений <> Неопределено Тогда + Для Каждого Подключение Из СписокПодключений Цикл + Если Подключение.Ссылка = ИдентификаторУстройства Тогда + ПодключенноеУстройство = Подключение; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат ПодключенноеУстройство; + +КонецФункции + +// Возвращает соответствие содержащее типы оборудования, +// ключем является строка на русском и английском языках, а значением ссылка на перечисление +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение +Функция СоответствиеТиповОборудования() Экспорт + + ИмяПараметра = "БПО.СоответствиеТиповОборудования"; + Возврат ОбщегоНазначенияБПОКлиент.ПараметрПриложения(ИмяПараметра); + +КонецФункции + +// Возвращает соответствие содержащее типы оборудования, +// ключем является строка на русском и английском языках, а значением ссылка на перечисление +// +// Возвращаемое значение: +// Соответствие +Функция ДоступныеТипыОборудования() Экспорт + + ИмяПараметра = "БПО.ДоступныеТипыОборудования"; + Возврат ОбщегоНазначенияБПОКлиент.ПараметрПриложения(ИмяПараметра); + +КонецФункции + +#КонецОбласти + +// Поиск по типу подключенные ранее устройства. +// +// Параметры: +// ТипыПодключаемогоОборудования - Структура, Массив из Строка, Строка - тип оборудования. +// +// Возвращаемое значение: +// Массив из СправочникСсылка.ПодключаемоеОборудование +// +Функция ПолучитьПодключенныеУстройства(ТипыПодключаемогоОборудования) Экспорт + + ПодключенныеУстройства = Новый Массив(); + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + СписокПодключений = ПодключаемоеОборудование.ПараметрыПодключенияПО; + + Если СписокПодключений = Неопределено Тогда + Возврат ПодключенныеУстройства; + КонецЕсли; + + Если ТипЗнч(ТипыПодключаемогоОборудования) = Тип("Структура") Тогда + Для Каждого Подключение Из СписокПодключений Цикл + Для Каждого КлючИЗначение Из ТипыПодключаемогоОборудования Цикл + // Находим устройство по одному подходящему типу. + Если КлючИЗначение.Значение Тогда + ЗначениеКлюча = Ложь; + Если Подключение.ТипыОборудования.Свойство(КлючИЗначение.Ключ, ЗначениеКлюча) И ЗначениеКлюча Тогда + ПодключенныеУстройства.Добавить(Подключение); + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + Иначе + ТипыОборудования = МассивТиповОборудования(ТипыПодключаемогоОборудования); + Для Каждого Подключение Из СписокПодключений Цикл + Если ТипыОборудования.Найти(Подключение.ТипОборудования) <> Неопределено Тогда + ПодключенныеУстройства.Добавить(Подключение); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат ПодключенныеУстройства; + +КонецФункции + +// Поиск по типу подключенные ранее устройства. +// +// Параметры: +// ИдентификаторОбъекта - СправочникСсылка.ПодключаемоеОборудование - экземпляр подключаемого оборудования. +// +// Возвращаемое значение: +// Массив. +// +Функция ПодключенныеУстройстваПоИдентификаторуОбъекта(ИдентификаторОбъекта) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + СписокПодключений = ПодключаемоеОборудование.ПараметрыПодключенияПО; + + ПодключенныеУстройства = Новый Массив(); + Для Каждого Подключение Из СписокПодключений Цикл + Если Подключение.ИдентификаторОбъекта = ИдентификаторОбъекта Тогда + ПодключенныеУстройства.Добавить(Подключение); + КонецЕсли; + КонецЦикла; + + Возврат ПодключенныеУстройства; + +КонецФункции + +// Получает описание драйвера. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера. +// ДанныеДрайвера - см. МенеджерОборудованияВызовСервера.ДанныеДрайвераОборудования +// +Процедура НачатьПолучениеОписанияДрайвера(ОповещениеПриЗавершении, ИдентификаторДрайвера = Неопределено, ДанныеДрайвера = Неопределено) Экспорт + + Если ИдентификаторДрайвера <> Неопределено Тогда + ДанныеДрайвера = МенеджерОборудованияВызовСервера.ДанныеДрайвераОборудования(ИдентификаторДрайвера); + КонецЕсли; + + НовоеПодключение = ПараметрыПодключенияДрайвера(ДанныеДрайвера); + + ОбработчикДрайвера = НовоеПодключение.ОбработчикДрайвера; + ОбработчикДрайвера.НачатьПолучениеОписанияДрайвера(ОповещениеПриЗавершении, НовоеПодключение); + +КонецПроцедуры + +// Получает описание оборудования. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторОборудования - СправочникСсылка.ПодключаемоеОборудование - идентификатор драйвера. +// ДанныеОборудования - см. МенеджерОборудованияВызовСервера.ДанныеУстройства +// +Процедура НачатьПолучениеОписанияОборудования(ОповещениеПриЗавершении, ИдентификаторОборудования = Неопределено, ДанныеОборудования = Неопределено) Экспорт + + Если ИдентификаторОборудования <> Неопределено Тогда + ДанныеОборудования = МенеджерОборудованияВызовСервера.ДанныеУстройства(ИдентификаторОборудования); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДанныеОборудования) Тогда + ОписаниеОшибки = НСтр("ru = 'Не удалось получить описание оборудования, возможно устройство отмечено не используемым.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки, ИдентификаторОборудования); + Если ОповещениеПриЗавершении <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + Возврат; + КонецЕсли; + + НовоеПодключение = ПараметрыПодключенияУстройства(ДанныеОборудования); + Если Не ПустаяСтрока(ДанныеОборудования.ИдентификаторОбъекта) Тогда + СписокПодключений = ПодключенныеУстройстваПоИдентификаторуОбъекта(ДанныеОборудования.ИдентификаторОбъекта); + НовоеПодключение.КоличествоПодключенных = СписокПодключений.Количество(); + КонецЕсли; + + ОбработчикДрайвера = НовоеПодключение.ОбработчикДрайвера; + ОбработчикДрайвера.НачатьПолучениеОписанияДрайвера(ОповещениеПриЗавершении, НовоеПодключение); + +КонецПроцедуры + +// Начать выполнение дополнительной команды к драйверу, не требующую предварительного подключения устройства в системе. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор драйвера. +// ПараметрыУстройства - Структура - параметры устройства. +// +Процедура НачатьТестУстройства(ОповещениеПриЗавершении, ИдентификаторУстройства, ПараметрыУстройства = Неопределено) Экспорт + + // Поиск подключенного устройства. + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(ИдентификаторУстройства); + Если ПодключенноеУстройство = Неопределено Тогда + ДанныеОборудования = МенеджерОборудованияВызовСервера.ДанныеУстройства(ИдентификаторУстройства, Неопределено, ПараметрыУстройства); + + НовоеПодключение = ПараметрыПодключенияУстройства(ДанныеОборудования); + ОбработчикДрайвера = НовоеПодключение.ОбработчикДрайвера; + ОбработчикДрайвера.НачатьТестУстройства(ОповещениеПриЗавершении, НовоеПодключение, Неопределено); + Иначе + // Сообщить об ошибке, что устройство подключено. + ОписаниеОшибки = НСтр("ru='Устройство подключено, операция не может быть выполнена. Для отключения устройства требуется закрыть все формы приложения для текущей информационной базы.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +// Начать выполнение дополнительной команды к драйверу, не требующую предварительного подключения устройства в системе. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор драйвера. +// ПараметрыУстройства - Структура - параметры устройства. +// +Процедура НачатьАвтонастройкуУстройства(ОповещениеПриЗавершении, ИдентификаторУстройства, ПараметрыУстройства = Неопределено) Экспорт + + // Поиск подключенного устройства. + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(ИдентификаторУстройства); + Если ПодключенноеУстройство = Неопределено Тогда + ДанныеОборудования = МенеджерОборудованияВызовСервера.ДанныеУстройства(ИдентификаторУстройства, Неопределено, ПараметрыУстройства); + + НовоеПодключение = МенеджерОборудованияКлиент.ПараметрыПодключенияУстройства(ДанныеОборудования); + ОбработчикДрайвера = НовоеПодключение.ОбработчикДрайвера; + ОбработчикДрайвера.НачатьАвтонастройкуУстройства(ОповещениеПриЗавершении, НовоеПодключение, Неопределено); + Иначе + // Сообщить об ошибке, что устройство подключено. + ОписаниеОшибки = НСтр("ru='Устройство подключено, операция не может быть выполнена. Для отключения устройства требуется закрыть все формы приложения для текущей информационной базы.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +// Начать выполнение дополнительной команды к драйверу, не требующую предварительного подключения устройства в системе. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор драйвера. +// ПараметрыУстройства - Структура - параметры устройства. +// ПараметрыВыполнения - Структура - параметры выполнения команды. +// +Процедура НачатьВыполнениеДополнительнойКоманды(ОповещениеПриЗавершении, ИдентификаторУстройства, ПараметрыУстройства = Неопределено, ПараметрыВыполнения = Неопределено) Экспорт + + // Поиск подключенного устройства. + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(ИдентификаторУстройства); + Если ПодключенноеУстройство = Неопределено Тогда + ДанныеОборудования = МенеджерОборудованияВызовСервера.ДанныеУстройства(ИдентификаторУстройства); + НовоеПодключение = ПараметрыПодключенияУстройства(ДанныеОборудования); + НовоеПодключение.Параметры = ?(ПараметрыУстройства = Неопределено, ДанныеОборудования.Параметры, ПараметрыУстройства); + + ОбработчикДрайвера = НовоеПодключение.ОбработчикДрайвера; + ОбработчикДрайвера.НачатьВыполнитьДополнительноеДействие(ОповещениеПриЗавершении, НовоеПодключение, ПараметрыВыполнения) + Иначе + // Сообщить об ошибке, что устройство подключено. + ОписаниеОшибки = НСтр("ru='Устройство подключено, операция не может быть выполнена. Для отключения устройства требуется закрыть все формы приложения для текущей информационной базы.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +// Установить компоненту подключения оборудования. +// +// Параметры: +// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера. +// +// Возвращаемое значение: +// см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании. +// +Асинх Функция УстановитьДрайверОборудованияАсинх(ИдентификаторДрайвера) Экспорт + + ДанныеДрайвера = ДанныеДрайвераОборудования(ИдентификаторДрайвера); + Если НЕ ЗначениеЗаполнено(ДанныеДрайвера) Тогда + ОписаниеОшибки = НСтр("ru = 'Драйвер не найден.'"); + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + + ТекстСообщения = СтрШаблон(НСтр("ru = 'Для продолжения работы требуется установка внешней компоненты ""%1""'"), ДанныеДрайвера.Наименование); + Если ДанныеДрайвера.ПодключениеИзМакета Тогда + Если Не ДанныеДрайвера.МакетДоступен Тогда + ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Макет драйвера ""%1"" не найден.'"), ДанныеДрайвера.ИмяМакетаДрайвера); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + РезультатВыполнения.ИдентификаторОбъекта = ДанныеДрайвера.ИдентификаторОбъекта; + РезультатВыполнения.ИдентификаторУстройства = ДанныеДрайвера.Ссылка; + Возврат РезультатВыполнения; + Иначе + ПараметрыУстановки = ВнешниеКомпонентыБПОКлиент.ПараметрыУстановки(); + ПараметрыУстановки.ТекстПояснения = ТекстСообщения; + Результат = Ждать ВнешниеКомпонентыБПОКлиент.УстановитьКомпонентуИзМакетаАсинх(ДанныеДрайвера.ИмяМакетаДрайвера, ПараметрыУстановки); // Структура + КонецЕсли; + Иначе + ПараметрыУстановки = ВнешниеКомпонентыБПОКлиент.ПараметрыУстановки(); + ПараметрыУстановки.ПредложитьЗагрузить = НЕ ДанныеДрайвера.СнятСПоддержки; + ПараметрыУстановки.ПредложитьУстановить = Истина; + ПараметрыУстановки.ТекстПояснения = ТекстСообщения; + Результат = Ждать ВнешниеКомпонентыБПОКлиент.УстановитьКомпонентуАсинх(ДанныеДрайвера.ИдентификаторОбъекта, Неопределено, ПараметрыУстановки); // Структура + КонецЕсли; + + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Результат.Установлено, Результат.ОписаниеОшибки); + РезультатВыполнения.ИдентификаторОбъекта = ДанныеДрайвера.ИдентификаторОбъекта; + РезультатВыполнения.ИдентификаторУстройства = ДанныеДрайвера.Ссылка; + Возврат РезультатВыполнения; + +КонецФункции + +// Установить компоненту подключения оборудования. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера. +// +Процедура УстановитьДрайверОборудования(ОповещениеПриЗавершении, ИдентификаторДрайвера) Экспорт + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.УстановитьДрайверОборудования"; + ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, ОповещениеПриЗавершении); + + + ДанныеДрайвера = ДанныеДрайвераОборудования(ИдентификаторДрайвера); + Если НЕ ЗначениеЗаполнено(ДанныеДрайвера) Тогда + ОписаниеОшибки = НСтр("ru = 'Драйвер не найден.'"); + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + + Контекст = Новый Структура(); + Контекст.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + Контекст.Вставить("ДанныеДрайвера", ДанныеДрайвера); + Оповещение = Новый ОписаниеОповещения("УстановитьДрайверОборудованияЗавершение", ЭтотОбъект, Контекст); + + ТекстСообщения = СтрШаблон( + НСтр("ru = 'Для продолжения работы требуется установка внешней компоненты ""%1"".'"), + ДанныеДрайвера.Наименование); + + Если ДанныеДрайвера.ПодключениеИзМакета Или ОбщегоНазначенияБПОКлиентСервер.ЭтоМобильныйКлиент() Тогда + Если Не ДанныеДрайвера.МакетДоступен Тогда + ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Макет драйвера ""%1"" не найден.'"), ДанныеДрайвера.ИмяМакетаДрайвера); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + Иначе + Если ДопустимаУстановкаКомпоненты(ДанныеДрайвера.ИмяМакетаДрайвера) Тогда + ПараметрыУстановки = ВнешниеКомпонентыБПОКлиент.ПараметрыУстановки(); + ПараметрыУстановки.ТекстПояснения = ТекстСообщения; + ВнешниеКомпонентыБПОКлиент.УстановитьКомпонентуИзМакета(Оповещение, ДанныеДрайвера.ИмяМакетаДрайвера, ПараметрыУстановки); + Иначе + ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Для компоненты %1 не предусмотрена работа в web-клиенте.'"), ДанныеДрайвера.Наименование); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + КонецЕсли; + Иначе + ПараметрыУстановки = ВнешниеКомпонентыБПОКлиент.ПараметрыУстановки(); + ПараметрыУстановки.ТекстПояснения = ТекстСообщения; + ПараметрыУстановки.ПредложитьЗагрузить = НЕ ДанныеДрайвера.СнятСПоддержки;; + ПараметрыУстановки.ПредложитьУстановить = Истина; + ВнешниеКомпонентыБПОКлиент.УстановитьКомпоненту(Оповещение, ДанныеДрайвера.ИдентификаторОбъекта, Неопределено, ПараметрыУстановки); + КонецЕсли; + +КонецПроцедуры + +// Завершение установки драйвера оборудования +// +// Параметры: +// Результат - Структура +// Контекст - Структура +// +Процедура УстановитьДрайверОборудованияЗавершение(Результат, Контекст) Экспорт + + Если Контекст.ОповещениеПриЗавершении <> Неопределено Тогда + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Результат.Установлено, Результат.ОписаниеОшибки); + РезультатВыполнения.ИдентификаторОбъекта = Контекст.ДанныеДрайвера.ИдентификаторОбъекта; + РезультатВыполнения.ИдентификаторУстройства = Контекст.ДанныеДрайвера.Ссылка; + ВыполнитьОбработкуОповещения(Контекст.ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + + +КонецПроцедуры + +#КонецОбласти + +#Область ВыбратьУстройство + +// Процедура выбора устройства из доступных, привязанных к текущему рабочему месту. +// +// Параметры: +// Отбор - Структура, Массив из Строка, Строка - тип оборудования для выбора устройства. +// см. МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор +// ТекстЗаголовкаВыбора - Строка - Заголовок окна выбора. +// СообщениеНеПодключено - Строка - Текст сообщения о не подключенных устройствах +// СообщениеНеВыбрано - Строка - Текст сообщения о не выбранных устройствах +// +// Возвращаемое значение: +// см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// +Асинх Функция ВыбратьУстройствоАсинх(Отбор, ТекстЗаголовкаВыбора, СообщениеНеПодключено = "", СообщениеНеВыбрано = "") Экспорт + + Если Не ОбновитьРабочееМестоКлиента() Тогда + ТекстСообщения = НСтр("ru='Предварительно необходимо выбрать рабочее место подключаемого оборудования текущего сеанса.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстСообщения); + Возврат РезультатВыполнения; + КонецЕсли; + + Если ПустаяСтрока(СообщениеНеПодключено) Тогда + СообщениеНеПодключено = НСтр("ru='Необходимые устройства не подключены к текущему рабочему месту.'"); + КонецЕсли; + + Если ПустаяСтрока(СообщениеНеВыбрано) Тогда + СообщениеНеВыбрано = НСтр("ru='Устройство не выбрано.'"); + КонецЕсли; + + Если ТипЗнч(Отбор) = Тип("Структура") Тогда + Если Отбор.Свойство("ТипыПО") Тогда + СписокОборудованияОтбор = Отбор; + Иначе + СписокОборудованияОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + СписокОборудованияОтбор.ТипыПО = Отбор; + КонецЕсли; + Иначе + СписокОборудованияОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + СписокОборудованияОтбор.ТипыПО = Отбор; + КонецЕсли; + + СписокДоступныхУстройств = МенеджерОборудованияВызовСервера.СписокОборудования(СписокОборудованияОтбор); + СписокУстройств = Новый СписокЗначений(); + Для Каждого Устройства Из СписокДоступныхУстройств Цикл + СписокУстройств.Добавить(Устройства.Ссылка, Устройства.Наименование); + КонецЦикла; + + Если СписокУстройств.Количество() = 0 Тогда + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, СообщениеНеПодключено); + ИначеЕсли СписокУстройств.Количество() = 1 Тогда + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина); + РезультатВыполнения.ИдентификаторУстройства = СписокУстройств[0].Значение; + Иначе + Результат = Ждать СписокУстройств.ВыбратьЭлементАсинх(ТекстЗаголовкаВыбора); + Если Результат = Неопределено Тогда + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, СообщениеНеВыбрано); + Иначе + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина); + РезультатВыполнения.ИдентификаторУстройства = Результат.Значение; + КонецЕсли; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Процедура выбора устройства из доступных, привязанных к текущему рабочему месту. +// +// Параметры: +// ОповещениеВыбора - ОписаниеОповещения - событие описания оповещения. +// Отбор - Строка - тип оборудования для выбора устройства. +// - Массив из Строка +// - см. МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор +// ТекстЗаголовкаВыбора - Строка - Заголовок окна выбора. +// СообщениеНеПодключено - Строка - Текст сообщения о не подключенных устройствах +// СообщениеНеВыбрано - Строка - Текст сообщения о не выбранных устройствах +// +Процедура ВыбратьУстройство(ОповещениеВыбора, Отбор, ТекстЗаголовкаВыбора, СообщениеНеПодключено = "", СообщениеНеВыбрано = "") Экспорт + + Если Не ОбновитьРабочееМестоКлиента() Тогда + ТекстСообщения = НСтр("ru='Предварительно необходимо выбрать рабочее место подключаемого оборудования текущего сеанса.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстСообщения); + ВыполнитьОбработкуОповещения(ОповещениеВыбора, РезультатВыполнения); + Возврат; + КонецЕсли; + + Если ПустаяСтрока(СообщениеНеПодключено) Тогда + СообщениеНеПодключено = НСтр("ru='Необходимые устройства не подключены к текущему рабочему месту.'"); + КонецЕсли; + + Если ПустаяСтрока(СообщениеНеВыбрано) Тогда + СообщениеНеВыбрано = НСтр("ru='Устройство не выбрано.'"); + КонецЕсли; + + Если ТипЗнч(Отбор) <> Тип("Структура") Тогда + СписокОборудованияОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + СписокОборудованияОтбор.ТипыПО = Отбор; + ИначеЕсли Не Отбор.Свойство("ТипыПО") Тогда + СписокОборудованияОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + СписокОборудованияОтбор.ТипыПО = Отбор; + Иначе + СписокОборудованияОтбор = Отбор; + КонецЕсли; + + СписокДоступныхУстройств = МенеджерОборудованияВызовСервера.СписокОборудования(СписокОборудованияОтбор); + СписокУстройств = Новый СписокЗначений(); + Для Каждого Устройства Из СписокДоступныхУстройств Цикл + СписокУстройств.Добавить(Устройства.Ссылка, Устройства.Наименование); + КонецЦикла; + + Если СписокУстройств.Количество() = 0 Тогда + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, СообщениеНеПодключено); + ВыполнитьОбработкуОповещения(ОповещениеВыбора, РезультатВыполнения); + ИначеЕсли СписокУстройств.Количество() = 1 Тогда + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина); + РезультатВыполнения.ИдентификаторУстройства = СписокУстройств[0].Значение; + ВыполнитьОбработкуОповещения(ОповещениеВыбора, РезультатВыполнения); + Иначе + Контекст = Новый Структура; + Контекст.Вставить("ОповещениеВыбора" , ОповещениеВыбора); + Контекст.Вставить("СообщениеНеВыбрано", СообщениеНеВыбрано); + ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьУстройствоЗавершение", ЭтотОбъект, Контекст); + СписокУстройств.ПоказатьВыборЭлемента(ОписаниеОповещения, ТекстЗаголовкаВыбора); + КонецЕсли; + +КонецПроцедуры + +// Завершение выбора устройства. +// +// Параметры: +// Результат - Структура +// Контекст - Структура +// +Процедура ВыбратьУстройствоЗавершение(Результат, Контекст) Экспорт + + Если Результат = Неопределено Тогда + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, Контекст.СообщениеНеВыбрано); + ВыполнитьОбработкуОповещения(Контекст.ОповещениеВыбора, РезультатВыполнения); + Иначе + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина); + РезультатВыполнения.ИдентификаторУстройства = Результат.Значение; + ВыполнитьОбработкуОповещения(Контекст.ОповещениеВыбора, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПодключениеОтключенияОборудования + +// Начать подключения устройств. +// +// Параметры: +// ИдентификаторКлиента - УникальныйИдентификатор - уникальный идентификатор клиента. +// ТипыПО - Структура, Массив из Строка, Строка - тип оборудования для выбора устройства. +// ИдентификаторУстройства - Массив из Строка, СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// СетевоеОборудование - Булево - использовать сетевое оборудование при подключении. +// +// Возвращаемое значение: +// Массив из см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании - Результаты подключения устройств. +// +Асинх Функция ПодключениеОборудованияАсинх(ИдентификаторКлиента, ТипыПО = Неопределено, ИдентификаторУстройства = Неопределено, СетевоеОборудование = Истина) Экспорт + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ПодключениеОборудованияАсинх"; + УИДЗамера = ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация); + + ПодключенноеОборудование = Новый Массив(); // Результаты подключения устройств + + Если Не ОбновитьРабочееМестоКлиента() Тогда + ОписаниеОшибки = НСтр("ru='Предварительно необходимо выбрать рабочее место подключаемого оборудования текущего сеанса.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ПодключенноеОборудование.Добавить(РезультатВыполнения); + // Замер производительности + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(УИДЗамера, Истина); + Возврат ПодключенноеОборудование; + КонецЕсли; + + УстройстваДляПодключения = УстройстваДляПодключения(ИдентификаторКлиента, ТипыПО, ИдентификаторУстройства, СетевоеОборудование); + ПодключенноеОборудование = УстройстваДляПодключения.ПодключенноеОборудование; + ОборудованиеДляПодключения = УстройстваДляПодключения.ОборудованиеДляПодключения; + + Для Каждого Устройство Из ОборудованиеДляПодключения Цикл + + НовоеПодключение = ПараметрыПодключенияУстройства(Устройство); + РезультатПодключения = Ждать НовоеПодключение.ОбработчикДрайвера.ПодключитьУстройствоАсинх(НовоеПодключение); + Если РезультатПодключения.Результат Тогда + НовоеПодключение.Клиенты.Добавить(ИдентификаторКлиента); + НовоеПодключение.КоличествоПодключенных = 1; + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ПодключаемоеОборудование.ПараметрыПодключенияПО.Добавить(НовоеПодключение); + Результат = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, Неопределено, Устройство.Ссылка); + Результат.ПодключенноеУстройство = НовоеПодключение; + ПодключенноеОборудование.Добавить(Результат); + Иначе + ОписаниеОшибки = СтрШаблон(НСтр("ru='Не удалось подключить устройство (%1): %2'"), ИдентификаторУстройства, РезультатПодключения.ОписаниеОшибки); + Результат = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки, Устройство.Ссылка); + Результат.ОшибкаЗагрузки = РезультатПодключения.ОшибкаЗагрузки; + ПодключенноеОборудование.Добавить(Результат); + КонецЕсли; + + КонецЦикла; + + // Замер производительности + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(УИДЗамера, Истина); + + Возврат ПодключенноеОборудование; + +КонецФункции + +// Начать подключения устройства. +// +// Параметры: +// ОповещениеПриПодключении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор - уникальный идентификатор клиента. +// ТипыПО - Структура, Массив из Строка, Строка - тип оборудования для выбора устройства. +// ИдентификаторУстройства - Массив из Строка, СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// СетевоеОборудование - Булево - использовать сетевое оборудование при подключении. +// +Процедура НачатьПодключениеОборудования(ОповещениеПриПодключении, ИдентификаторКлиента, ТипыПО = Неопределено, ИдентификаторУстройства = Неопределено, СетевоеОборудование = Ложь) Экспорт + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.НачатьПодключениеОборудования"; + УИДЗамера = ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация); + + Если Не ОбновитьРабочееМестоКлиента() Тогда + ОписаниеОшибки = НСтр("ru='Предварительно необходимо выбрать рабочее место подключаемого оборудования текущего сеанса.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + // Замер производительности + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(УИДЗамера, Истина); + ВыполнитьОбработкуОповещения(ОповещениеПриПодключении, РезультатВыполнения); + Возврат; + КонецЕсли; + + УстройстваДляПодключения = УстройстваДляПодключения(ИдентификаторКлиента, ТипыПО, ИдентификаторУстройства, СетевоеОборудование); + ПодключенноеОборудование = УстройстваДляПодключения.ПодключенноеОборудование; + Для Каждого РезультатПодключения Из ПодключенноеОборудование Цикл + ВыполнитьОбработкуОповещения(ОповещениеПриПодключении, РезультатПодключения); + КонецЦикла; + + ОборудованиеДляПодключения = УстройстваДляПодключения.ОборудованиеДляПодключения; + Если ОборудованиеДляПодключения.Количество() > 0 Тогда + Контекст = Новый Структура(); + Контекст.Вставить("ПараметрыПодключения"); + Контекст.Вставить("ИдентификаторКлиента", ИдентификаторКлиента); + Контекст.Вставить("ОповещениеПриПодключении", ОповещениеПриПодключении); + Контекст.Вставить("ОборудованиеДляПодключения", ОборудованиеДляПодключения); + НачатьПодключениеОборудованияРекурсивно(Неопределено, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Производит подключение доступного оборудования по списку типов ПО +// +// Параметры: +// ОповещениеПриПодключении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор +// ТипыПО - Структура, Массив из Строка, Строка - тип оборудования для подключения устройств. +// +Процедура НачатьПодключениеОборудованиеПоТипу(ОповещениеПриПодключении, ИдентификаторКлиента, ТипыПО) Экспорт + + НачатьПодключениеОборудования(ОповещениеПриПодключении, ИдентификаторКлиента, ТипыПО); + + КонецПроцедуры + +// Начать подключать одиночный экземпляр устройства определяемый идентификатором. +// +// Параметры: +// ОповещениеПриПодключении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор - уникальный идентификатор клиента. +// ИдентификаторУстройства - Массив из Строка, СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// +Процедура НачатьПодключениеОборудованиеПоИдентификатору(ОповещениеПриПодключении, ИдентификаторКлиента, ИдентификаторУстройства) Экспорт + + НачатьПодключениеОборудования(ОповещениеПриПодключении, ИдентификаторКлиента, , ИдентификаторУстройства); + +КонецПроцедуры + +// Начать отключение устройств по типу оборудования. +// +// Параметры: +// ОповещениеПриОтключении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор +// ТипыПО - Структура, Массив из Строка, Строка - тип оборудования для отключения устройств. +// +Процедура НачатьОтключениеОборудованияПоТипу(ОповещениеПриОтключении, ИдентификаторКлиента, ТипыПО) Экспорт + + НачатьОтключениеОборудования(ОповещениеПриОтключении, ИдентификаторКлиента, ТипыПО); + +КонецПроцедуры + +// Начать отключение устройств по типу оборудования. +// +// Параметры: +// ОповещениеПриОтключении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор +// ТипыПО - Структура, Массив из Строка, Строка - тип оборудования для отключения устройств. +// +Процедура НачатьОтключениеОборудованиеПоТипу(ОповещениеПриОтключении, ИдентификаторКлиента, ТипыПО) Экспорт + + НачатьОтключениеОборудования(ОповещениеПриОтключении, ИдентификаторКлиента, ТипыПО); + +КонецПроцедуры + +// Начать отключать устройства определенное идентификатором. +// +// Параметры: +// ОповещениеПриОтключении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор +// ИдентификаторУстройства - Массив из Строка, СправочникСсылка.ПодключаемоеОборудование - отключаемое устройство. +// +Процедура НачатьОтключениеОборудованиеПоИдентификатору(ОповещениеПриОтключении, ИдентификаторКлиента, ИдентификаторУстройства) Экспорт + + НачатьОтключениеОборудования(ОповещениеПриОтключении, ИдентификаторКлиента, Неопределено, ИдентификаторУстройства); + +КонецПроцедуры + +// Функция подключает устройства по типу оборудования. +// +// Параметры: +// ИдентификаторКлиента - УникальныйИдентификатор +// ТипыПО - Структура, Массив из Строка, Строка - тип оборудования для отключения устройств. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - отключаемое устройство. +// +// Возвращаемое значение: +// Массив из см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании - Результаты отключения устройств. +// +Асинх Функция ОтключениеОборудованияАсинх(ИдентификаторКлиента, ТипыПО = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт + + ОтключенноеОборудование = Новый Массив(); // Результаты отключения устройств + ПодключаемоеОборудование = ПодключаемоеОборудование(); + + ПодключенныеУстройства = УстройстваДляОтключения(ТипыПО, ИдентификаторУстройства); + Для Каждого ОтключаемоеУстройство Из ПодключенныеУстройства Цикл // Структура + КлиентПодключения = ОтключаемоеУстройство.Клиенты.Найти(ИдентификаторКлиента); + Если КлиентПодключения <> Неопределено Тогда + // Необходимое устройство + Если ОтключаемоеУстройство.КоличествоПодключенных = 1 Тогда + РезультатОперации = Ждать ОтключаемоеУстройство.ОбработчикДрайвера.ОтключитьУстройствоАсинх(ОтключаемоеУстройство); + Если РезультатОперации.Результат Тогда + // Отключить устройство. + ОтключаемоеУстройство .КоличествоПодключенных = 0; + НомерСтрокиМассива = ПодключаемоеОборудование.ПараметрыПодключенияПО.Найти(ОтключаемоеУстройство); + Если НомерСтрокиМассива <> Неопределено Тогда + ПодключаемоеОборудование.ПараметрыПодключенияПО.Удалить(НомерСтрокиМассива); + КонецЕсли; + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина); + РезультатВыполнения.ИдентификаторУстройства = ОтключаемоеУстройство.Ссылка; + Иначе + ОписаниеОшибки = СтрШаблон( + НСтр("ru='При отключении устройства ""%1"" произошла ошибка.'"), + ОтключаемоеУстройство.Наименование); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + РезультатВыполнения.ИдентификаторУстройства = ОтключаемоеУстройство.Ссылка; + КонецЕсли; + ОтключенноеОборудование.Добавить(РезультатВыполнения); + Иначе + ОтключаемоеУстройство.КоличествоПодключенных = ОтключаемоеУстройство.КоличествоПодключенных - 1; + ОтключаемоеУстройство.Клиенты.Удалить(КлиентПодключения); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, ОтключаемоеУстройство.Ссылка); + ОтключенноеОборудование.Добавить(РезультатВыполнения); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат ОтключенноеОборудование; + +КонецФункции + +// Функция подключает устройства по типу оборудования. +// +// Параметры: +// ОповещениеПриОтключении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор +// ТипыПО - Структура, Массив из Строка, Строка - тип оборудования для отключения устройств. +// ИдентификаторУстройства - Массив из Строка, СправочникСсылка.ПодключаемоеОборудование - отключаемое устройство. +// +Процедура НачатьОтключениеОборудования(ОповещениеПриОтключении, ИдентификаторКлиента, ТипыПО = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт + + ПодключенныеУстройства = УстройстваДляОтключения(ТипыПО, ИдентификаторУстройства); + + Для Каждого ОтключаемоеУстройство Из ПодключенныеУстройства Цикл + КлиентПодключения = ОтключаемоеУстройство.Клиенты.Найти(ИдентификаторКлиента); + Если КлиентПодключения <> Неопределено Тогда + Если ОтключаемоеУстройство.КоличествоПодключенных = 1 Тогда + Контекст = Новый Структура(); + Контекст.Вставить("ОтключаемоеУстройство", ОтключаемоеУстройство); + Контекст.Вставить("ОповещениеПриОтключении", ОповещениеПриОтключении); + Оповещение = Новый ОписаниеОповещения("НачатьОтключениеОборудованияЗавершение", ЭтотОбъект, Контекст); + ОтключаемоеУстройство.ОбработчикДрайвера.НачатьОтключениеУстройства(Оповещение, ОтключаемоеУстройство); + Иначе + ОтключаемоеУстройство.КоличествоПодключенных = ОтключаемоеУстройство.КоличествоПодключенных - 1; + ОтключаемоеУстройство.Клиенты.Удалить(КлиентПодключения); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Завершение отключения оборудования. +// +// Параметры: +// РезультатВыполнения - Структура +// Контекст - Структура: +// * ПодключенноеУстройство - Структура: +// * Наименование - Строка - наименование устройства +// * ОповещениеПриОтключении - ОписаниеОповещения +// +Процедура НачатьОтключениеОборудованияЗавершение(РезультатВыполнения, Контекст) Экспорт + + ОтключаемоеУстройство = Контекст.ОтключаемоеУстройство; // Структура + Если РезультатВыполнения.Результат Тогда + // Отключить устройство. + ОтключаемоеУстройство.КоличествоПодключенных = 0; + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Индекс = ПодключаемоеОборудование.ПараметрыПодключенияПО.Найти(ОтключаемоеУстройство); + Если Индекс <> Неопределено Тогда + ПодключаемоеОборудование.ПараметрыПодключенияПО.Удалить(Индекс); + КонецЕсли; + Результат = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина); + Результат.ИдентификаторУстройства = ОтключаемоеУстройство.Ссылка; + Иначе + ОписаниеОшибки = СтрШаблон( + НСтр("ru='При отключении устройства ""%1"" произошла ошибка.'"), + ОтключаемоеУстройство.Наименование); + Результат = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Результат.ИдентификаторУстройства = ОтключаемоеУстройство.Ссылка; + КонецЕсли; + Если Контекст.ОповещениеПриОтключении <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.ОповещениеПриОтключении, Результат); + КонецЕсли; + +КонецПроцедуры + +// Производит принудительное отключение всего подключенного оборудования, независимо от числа ссылок на подключение. +// +// Возвращаемое значение: +// Булево. +// +Асинх Функция ОтключениеВсегоОборудованияАсинх() Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Для Каждого ПодключенноеУстройство Из ПодключаемоеОборудование.ПараметрыПодключенияПО Цикл + РезультатОперации = Ждать ПодключаемоеОборудованиеДрайверКлиент.ОтключитьУстройствоАсинх(ПодключенноеУстройство); + Если НЕ РезультатОперации.Результат Тогда + ТекстСообщения = СтрШаблон(НСтр("ru='При отключении оборудования произошла ошибка: %1'"), РезультатОперации.ОписаниеОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + ПодключенноеУстройство.КоличествоПодключенных = 0; + КонецЦикла; + + КоличествоПодключенныхКлиентов = 0; + Для Каждого ПодключенноеУстройство Из ПодключаемоеОборудование.ПараметрыПодключенияПО Цикл + КоличествоПодключенныхКлиентов = КоличествоПодключенныхКлиентов + ПодключенноеУстройство.КоличествоПодключенных; + КонецЦикла; + + ПодключаемоеОборудование.ПараметрыПодключенияПО.Очистить(); + + Возврат Истина; + +КонецФункции + +// Производит принудительное отключение всего подключенного оборудования, независимо от числа ссылок на подключение. +// +// Параметры: +// ОповещениеПриОтключении - ОписаниеОповещения - событие описания оповещения. +// +Процедура НачатьОтключениеВсегоОборудования(ОповещениеПриОтключении = Неопределено) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ПараметрыПодключенияПО = ПодключаемоеОборудование.ПараметрыПодключенияПО; + + Для Каждого ПодключенноеУстройство Из ПараметрыПодключенияПО Цикл + Оповещение = Новый ОписаниеОповещения("НачатьОтключениеВсегоОборудованияЗавершение", ЭтотОбъект); + ПодключенноеУстройство.ОбработчикДрайвера.НачатьОтключениеУстройства(Оповещение, ПодключенноеУстройство); + ПодключенноеУстройство.КоличествоПодключенных = 0; + КонецЦикла; + ПараметрыПодключенияПО.Очистить(); + +КонецПроцедуры + +// Завершение отключения всего оборудования. +// +// Параметры: +// РезультатВыполнения - Структура +// Параметры - Структура +// +Процедура НачатьОтключениеВсегоОборудованияЗавершение(РезультатВыполнения, Параметры) Экспорт + + Если НЕ РезультатВыполнения.Результат Тогда + ТекстСообщения = СтрШаблон(НСтр("ru='При отключении оборудования произошла ошибка: %1'"), РезультатВыполнения.ОписаниеОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +// Функция возвращает подключено ли оборудование. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - ИдентификаторУстройства. +// +// Возвращаемое значение: +// Булево - Устройство подключено +// +Функция УстройствоПодключено(ИдентификаторУстройства) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Для Каждого Подключение Из ПодключаемоеОборудование.ПараметрыПодключенияПО Цикл + Если Подключение.Ссылка = ИдентификаторУстройства Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +#КонецОбласти + +#Область ПроцедурыИФункцииПодключенияОтключенияОборудованияВФорме + +// Начать подключение необходимых типов оборудования при открытии формы. +// +// Параметры: +// ОповещениеПриПодключении - ОписаниеОповещения - оповещение при подключении. +// Форма - ФормаКлиентскогоПриложения - открываемая форма. +// ПоддерживаемыеТипыПодключаемогоОборудования - Строка - содержит перечень типов подключаемого оборудования, разделенных запятыми. +// +Процедура НачатьПодключениеОборудованиеПриОткрытииФормы(ОповещениеПриПодключении, Форма, ПоддерживаемыеТипыПодключаемогоОборудования = Неопределено) Экспорт + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ПодключениеОборудованиеПриОткрытииФормы"; + УИДЗамера = ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, ОповещениеПриПодключении); + + Если ОповещениеПриПодключении = Неопределено Тогда + ОповещениеПриПодключении = Новый ОписаниеОповещения("ПодключитьОборудованиеЗавершениеПоУмолчанию", МенеджерОборудованияКлиент); + КонецЕсли; + + ПодключаемоеОборудование = ПодключаемоеОборудованиеНаФорме(Форма); + Если ПодключаемоеОборудование <> Неопределено Тогда + + Если ПодключаемоеОборудование.ТребуетсяЗапросСпискаОборудованияНаКлиенте Тогда + Отбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + Отбор.ТипыПО = ПодключаемоеОборудование.ТипыПО; + ОбновитьРабочееМестоКлиента(); + ПодключаемоеОборудование.СписокОборудования = МенеджерОборудованияВызовСервера.СписокОборудования(Отбор); + КонецЕсли; + + СписокНаФорме = Форма.ПодключаемоеОборудованиеБПО.СписокОборудования; + Если СписокНаФорме.Количество() = 0 Тогда + Возврат; + КонецЕсли; + Контекст = Новый Структура(); + Контекст.Вставить("Форма", Форма); + Контекст.Вставить("ОповещениеПриПодключении", ОповещениеПриПодключении); + Оповещение = Новый ОписаниеОповещения("НачатьПодключениеОборудованиеПриОткрытииФормыЗавершение", ЭтотОбъект, Контекст); + СписокОборудования = Новый Массив(); + Для Каждого Элемент Из СписокНаФорме Цикл + СписокОборудования.Добавить(Элемент); + КонецЦикла; + СписокНаФорме.Очистить(); + + Если СуществуютРеквизитыНаФорме(Форма, "ПоддерживаемыеТипыПодключаемогоОборудования") Тогда + ЗаполнитьПоддерживаемыеТипыПодключаемогоОборудованияНаФорме(Форма, ПодключаемоеОборудование.ТипыПО); + КонецЕсли; + Если СуществуютРеквизитыНаФорме(Форма, "ИспользоватьПодключаемоеОборудование") Тогда + Форма.ИспользоватьПодключаемоеОборудование = Истина; + КонецЕсли; + + НачатьПодключениеОборудования( + Оповещение, Форма.УникальныйИдентификатор, СписокОборудования); + + Иначе + Если СуществуютРеквизитыНаФорме(Форма, "ИспользоватьПодключаемоеОборудование, ПоддерживаемыеТипыПодключаемогоОборудования") Тогда + + ЗаполнитьПоддерживаемыеТипыПодключаемогоОборудованияНаФорме(Форма, ПоддерживаемыеТипыПодключаемогоОборудования); + + Если Форма.ИспользоватьПодключаемоеОборудование Тогда + НачатьПодключениеОборудованиеПоТипу( + ОповещениеПриПодключении, + Форма.УникальныйИдентификатор, + ПолучитьТипыОборудования(Форма.ПоддерживаемыеТипыПодключаемогоОборудования)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Начать подключение необходимых типов оборудования при открытии формы. +// +// Параметры: +// Результат - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании. +// Контекст - Структура. +// +Процедура НачатьПодключениеОборудованиеПриОткрытииФормыЗавершение(Результат, Контекст) Экспорт + + Если Результат.Результат Тогда + ПодключенноеУстройство = Новый Структура(); + ПодключенноеУстройство.Вставить("ИдентификаторУстройства", Результат.ПодключенноеУстройство.ИдентификаторУстройства); + ПодключенноеУстройство.Вставить("ТипОборудованияИмя", Результат.ПодключенноеУстройство.ТипОборудованияИмя); + Контекст.Форма.ПодключаемоеОборудованиеБПО.СписокОборудования.Добавить(ПодключенноеУстройство); + КонецЕсли; + + Если Контекст.ОповещениеПриПодключении <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.ОповещениеПриПодключении, Результат); + КонецЕсли; + +КонецПроцедуры + +// Обработчик оповещения по умолчанию +// +// Параметры: +// РезультатВыполнения - Структура - результат выполнения операции. +// Параметры - Произвольный - дополнительный параметр переданный в оповещение. +// +Процедура ПодключитьОборудованиеЗавершениеПоУмолчанию(РезультатВыполнения, Параметры) Экспорт + + Если НЕ РезультатВыполнения.Результат Тогда + ТекстСообщения = СтрШаблон(НСтр("ru='При подключении оборудования произошла ошибка:""%1"".'"), РезультатВыполнения.ОписаниеОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +// Начать отключать оборудование по типу при закрытии формы. +// +// Параметры: +// ОповещениеПриОтключении - ОписаниеОповещения - оповещение при отключении. +// Форма - ФормаКлиентскогоПриложения - закрываемая форма. +// +Процедура НачатьОтключениеОборудованиеПриЗакрытииФормы(ОповещениеПриОтключении, Форма) Экспорт + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ОтключениеОборудованиеПриЗакрытииФормы"; + УИДЗамера = ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, ОповещениеПриОтключении); + + Если ОповещениеПриОтключении = Неопределено Тогда + ОповещениеПриОтключении = Новый ОписаниеОповещения("ОтключитьОборудованиеЗавершениеПоУмолчанию", МенеджерОборудованияКлиент); + КонецЕсли; + + ПодключаемоеОборудование = ПодключаемоеОборудованиеНаФорме(Форма); + Если ПодключаемоеОборудование <> Неопределено Тогда + ТипыПО = Новый Массив(); + Для Каждого Элемент Из ПодключаемоеОборудование.СписокОборудования Цикл + ТипыПО.Добавить(Элемент.ТипОборудованияИмя); + КонецЦикла; + НачатьОтключениеОборудования(ОповещениеПриОтключении, Форма.УникальныйИдентификатор, ТипыПО); + Иначе + Если СуществуютРеквизитыНаФорме(Форма, "ПоддерживаемыеТипыПодключаемогоОборудования") Тогда + НачатьОтключениеОборудованияПоТипу( + ОповещениеПриОтключении, + Форма.УникальныйИдентификатор, + МассивТиповОборудования(Форма.ПоддерживаемыеТипыПодключаемогоОборудования)); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Обработчик оповещения отключения оборудования при закрытии формы по умолчанию +// +// Параметры: +// РезультатВыполнения - Структура +// Параметры - Структура +// +Процедура ОтключитьОборудованиеЗавершениеПоУмолчанию(РезультатВыполнения, Параметры) Экспорт + + Если НЕ РезультатВыполнения.Результат Тогда + ТекстСообщения = СтрШаблон(НСтр("ru='При отключении оборудования произошла ошибка: %1'"), РезультатВыполнения.ОписаниеОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +// Подключение необходимых типов оборудования при открытии формы. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - открываемая форма. +// +// Возвращаемое значение: +// Массив из см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании. +// +Асинх Функция ПодключитьОборудованиеПриОткрытииФормыАсинх(Форма) Экспорт + + РезультатыПодключения = Новый Массив(); + + ПодключаемоеОборудование = ПодключаемоеОборудованиеНаФорме(Форма); + Если ПодключаемоеОборудование <> Неопределено Тогда + + РезультатыПодключения = Ждать ПодключениеОборудованияАсинх( + Форма.УникальныйИдентификатор, + ПодключаемоеОборудование.СписокОборудования); + + Форма.ПодключаемоеОборудованиеБПО.СписокОборудования = Неопределено; + СписокОборудования = Новый Массив(); + Для Каждого Результат Из РезультатыПодключения Цикл + Если Результат.Результат Тогда + ПараметрыПодключения = МенеджерОборудованияКлиентСервер.ПараметрыПодключения(Результат.ПодключенноеУстройство); + ПараметрыПодключения.Удалить("ШаблонЛокализации"); + СписокОборудования.Добавить(Новый ФиксированнаяСтруктура(ПараметрыПодключения)); + КонецЕсли; + КонецЦикла; + Форма.ПодключаемоеОборудованиеБПО.СписокОборудования = Новый ФиксированныйМассив(СписокОборудования); + + Если СуществуютРеквизитыНаФорме(Форма, "ПоддерживаемыеТипыПодключаемогоОборудования") Тогда + ЗаполнитьПоддерживаемыеТипыПодключаемогоОборудованияНаФорме(Форма, ПодключаемоеОборудование.ТипыПО); + КонецЕсли; + Если СуществуютРеквизитыНаФорме(Форма, "ИспользоватьПодключаемоеОборудование") Тогда + Форма.ИспользоватьПодключаемоеОборудование = Истина; + КонецЕсли; + + КонецЕсли; + + Возврат РезультатыПодключения; + + +КонецФункции + +// Отключение оборудования при закрытии формы. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - закрываемая форма. +// +// Возвращаемое значение: +// Массив из см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании. +// +Асинх Функция ОтключитьОборудованиеПриЗакрытииФормыАсинх(Форма) Экспорт + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ОтключениеОборудованиеПриЗакрытииФормы"; + УИДЗамера = ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация); + + Результат = Новый Массив(); + ПодключаемоеОборудование = ПодключаемоеОборудованиеНаФорме(Форма); + Если ПодключаемоеОборудование <> Неопределено Тогда + Результат = Ждать ОтключениеОборудованияАсинх(Форма.УникальныйИдентификатор, ПодключаемоеОборудование.ТипыПО); + КонецЕсли; + + #Если Не МобильноеПриложениеКлиент Тогда + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(УИДЗамера); + #КонецЕсли + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ПечатающееУстройство + +// Начать подключение печатающего устройства +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор - уникальный идентификатор клиента. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// +Процедура НачатьПодключениеПечатающегоУстройства(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено) Экспорт + + ПараметрыВыполнение = Новый Структура(); + ПараметрыВыполнение.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + ПараметрыВыполнение.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + ПараметрыВыполнение.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ПринтерЧеков = Истина; + ПоддерживаемыеТипы.ККТ = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьПодключениеПечатающегоУстройства_ВыборЗавершение", ЭтотОбъект, ПараметрыВыполнение); + ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите устройство для печати'"), + НСтр("ru='Для данного рабочего места нет доступных устройств для печати.'"), + НСтр("ru='Устройство для печати не выбрано.'")); + Иначе + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, Неопределено, ИдентификаторУстройства); + НачатьПодключениеПечатающегоУстройства_ВыборЗавершение(РезультатВыполнения, ПараметрыВыполнение); + КонецЕсли; + +КонецПроцедуры + +// Завершение подключения печатающего устройства. +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнение - Структура +// +Процедура НачатьПодключениеПечатающегоУстройства_ВыборЗавершение(РезультатВыполнения, ПараметрыВыполнение) Экспорт + + Если РезультатВыполнения.Результат Тогда + ПараметрыВыполнение.ИдентификаторУстройства = РезультатВыполнения.ИдентификаторУстройства; + // Поиск подключенного устройства. + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(ПараметрыВыполнение.ИдентификаторУстройства); + Если ПодключенноеУстройство = Неопределено Тогда + НачатьПодключениеОборудованиеПоИдентификатору(ПараметрыВыполнение.ОповещениеПриЗавершении, ПараметрыВыполнение.ИдентификаторКлиента, ПараметрыВыполнение.ИдентификаторУстройства); + Иначе + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, Неопределено, ПараметрыВыполнение.ИдентификаторУстройства); + РезультатВыполнения.Вставить("ПечатающееУстройствоБылоПодключенное", Истина); + ВыполнитьОбработкуОповещения(ПараметрыВыполнение.ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + Иначе + ВыполнитьОбработкуОповещения(ПараметрыВыполнение.ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ВыполнениеКоманды + +// Выполнение команды обработчика для подключенного устройства. +// +// Параметры: +// ПодключенноеУстройство - СправочникСсылка.ПодключаемоеОборудование +// ПараметрыВыполнениеКоманды - Структура +// +Процедура ВыполнениеКомандыОбработчика(ПодключенноеУстройство, ПараметрыВыполнениеКоманды) Экспорт + + Команда = ПараметрыВыполнениеКоманды.Команда; + + // Вызываем модуль "Процессор данных" отвечающий за подготовку данных для выполнение команды на оборудовании. + Если ПараметрыВыполнениеКоманды.ПодготовитьДанные Тогда + + ПараметрыПодключенияСервер = МенеджерОборудованияКлиентСервер.ПараметрыПодключения(ПодключенноеУстройство); + ПроцессорДанных = ПараметрыВыполнениеКоманды.ПроцессорДанных; + // Подготовка данных для проведения операции на сервере. + ДанныеОперации = МенеджерОборудованияВызовСервера.ПодготовитьДанныеОперации(ПараметрыПодключенияСервер, ПроцессорДанных, Команда, ПараметрыВыполнениеКоманды.ПараметрыОперации); + + Если ДанныеОперации = Неопределено Тогда + ТекстОшибки = НСтр("ru='Ошибка подготовки данных для операции.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстОшибки, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды, РезультатВыполнения); + Возврат; + ИначеЕсли НЕ ДанныеОперации.Результат Тогда + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ДанныеОперации.ТекстОшибки, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды, РезультатВыполнения); + Возврат; + КонецЕсли; + Иначе + ДанныеОперации = ПараметрыВыполнениеКоманды.ПараметрыОперации; + Если ДанныеОперации = Неопределено Тогда + ДанныеОперации = Новый Структура(); + КонецЕсли; + КонецЕсли; + + ОбработчикДрайвера = ПодключенноеУстройство.ОбработчикДрайвера; + Если ОбработчикДрайвера = Неопределено Тогда + // Сообщить об ошибке, что не удалось загрузить драйвер. + ТекстОшибки = НСтр("ru='Не удалось подключить обработчик драйвера.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстОшибки, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатВыполнения); + Иначе + ПараметрыВыполнениеКоманды.Вставить("ДанныеОперации", ДанныеОперации); + ПараметрыВыполнениеКоманды.Вставить("ПодключенноеУстройство", ПодключенноеУстройство); + + Если Команда = "CheckFiscalization" + И ПараметрыВыполнениеКоманды.Свойство("ОповещениеПослеОткрытииЧека") + И ПараметрыВыполнениеКоманды.ОповещениеПослеОткрытииЧека <> Неопределено Тогда + + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПослеОткрытииЧека", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, ПодключенноеУстройство, "GetCurrentStatus", ДанныеОперации.ТекущееСостояние); + Иначе + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_Завершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, ПодключенноеУстройство, Команда, ДанныеОперации); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Обработчик оповещения "После открытия чека", вызывается во время команды "CheckFiscalization". +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьВыполнениеКоманды_ПослеОткрытииЧека(РезультатВыполнения, ПараметрыВыполнениеКоманды) Экспорт + + ДанныеОперации = ПараметрыВыполнениеКоманды.ДанныеОперации; + ПодключенноеУстройство = ПараметрыВыполнениеКоманды.ПодключенноеУстройство; + + ПараметрыВыполнения = Новый Структура(); + ПараметрыВыполнения.Вставить("ВходныеПараметры", ПараметрыВыполнениеКоманды.ДанныеОперации); + ПараметрыВыполнения.Вставить("ОписаниеОшибки" , Неопределено); + ПараметрыВыполнения.Вставить("ПродолжитьПечать", Истина); + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройстваВызовСервера = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваВызовСервера"); + ТекущееСостояние = ДанныеОперации.ТекущееСостояние; + ФискальныеДанныеСтруктура = МодульОборудованиеЧекопечатающиеУстройстваВызовСервера.ПолучитьПараметрыСменыИзXMLПакета( + ТекущееСостояние.РезультатXML, ПодключенноеУстройство.РевизияИнтерфейса, ТекущееСостояние.НомерСменыККТ, ТекущееСостояние.НомерЧекаККТ); + ЗаполнитьПараметрыОперацииПодписиЧека(ПараметрыВыполнения, ФискальныеДанныеСтруктура.НомерСменыККТ, Число(ФискальныеДанныеСтруктура.НомерЧекаККТ) + 1, ДанныеОперации.ЗаводскойНомерФН); + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ЗавершениеПечати", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ПараметрыВыполнения.Вставить("ОповещениеПродолжения", Оповещение); + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПослеОткрытииЧека, ПараметрыВыполнения); + +КонецПроцедуры + +// Обработчик оповещения "Завершение печати", вызывается после открытия чека. +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьВыполнениеКоманды_ЗавершениеПечати(РезультатВыполнения, ПараметрыВыполнениеКоманды) Экспорт + + ДанныеЕГАИС = Новый Структура; + ДанныеЕГАИС.Вставить("Выполнено", РезультатВыполнения.ПродолжитьПечать); + ДанныеЕГАИС.Вставить("ОписаниеОшибки", ""); + ДанныеЕГАИС.Вставить("АдресЧека", ""); + ДанныеЕГАИС.Вставить("ПодписьЧека", ""); + ДанныеЕГАИС.Вставить("ВходящееСообщение"); + ДанныеЕГАИС.Вставить("ИсходящееСообщение"); + ДанныеЕГАИС.Вставить("СообщениеПередано", Ложь); + ЗаполнитьЗначенияСвойств(ДанныеЕГАИС, РезультатВыполнения); + ДанныеОперации = ПараметрыВыполнениеКоманды.ДанныеОперации; + ДанныеОперации.Вставить("ЗаписьОперацииЕГАИС", ДанныеЕГАИС); + + Если РезультатВыполнения.ПродолжитьПечать Тогда + + ПараметрыОперации = ПараметрыВыполнениеКоманды.ПараметрыОперации; + ПодключенноеУстройство = ПараметрыВыполнениеКоманды.ПодключенноеУстройство; + + ДополнительныеПараметры = Новый Структура(); + ЗаполнитьПараметрыОперацииПодписиЧека(ДополнительныеПараметры); + ЗаполнитьЗначенияСвойств(ДополнительныеПараметры, РезультатВыполнения); + ДополнительныеПараметры.Вставить("АдресЧека" , ?(РезультатВыполнения.Свойство("АдресЧека"), РезультатВыполнения.АдресЧека, Неопределено)); + ДополнительныеПараметры.Вставить("ПодписьЧека", ?(РезультатВыполнения.Свойство("ПодписьЧека"), РезультатВыполнения.ПодписьЧека, Неопределено)); + ДанныеОперации.Вставить("ПодписьЧека", ДополнительныеПараметры); + ПараметрыОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + + ОбработчикДрайвера = ПараметрыВыполнениеКоманды.ПодключенноеУстройство.ОбработчикДрайвера; + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_Завершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, ПодключенноеУстройство, ПараметрыВыполнениеКоманды.Команда, ПараметрыВыполнениеКоманды.ДанныеОперации); + + Иначе + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, РезультатВыполнения.ОписаниеОшибки, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +// Заполнить параметры операции подписи чека. +// +// Параметры: +// ПараметрыОперации - Структура +// НомерСмены - Число - номер открытой/закрытой смены. +// НомерЧека - Число - номер фискального чека. +// ЗаводскойНомерФН - Число - заводской номер фискального накопителя +// +Процедура ЗаполнитьПараметрыОперацииПодписиЧека(ПараметрыОперации, НомерСмены = Неопределено, + НомерЧека = Неопределено, ЗаводскойНомерФН = Неопределено) Экспорт; + + ПараметрыОперации.Вставить("ИНН" , Неопределено); + ПараметрыОперации.Вставить("КПП" , Неопределено); + + ПараметрыОперации.Вставить("НомерСмены", НомерСмены); + ПараметрыОперации.Вставить("НомерЧека" , НомерЧека); + ПараметрыОперации.Вставить("НомерКассы" , Неопределено); + ПараметрыОперации.Вставить("ЗаводскойНомерФН", ЗаводскойНомерФН); + ПараметрыОперации.Вставить("НаименованиеОрганизации", Неопределено); + +КонецПроцедуры + +// Начать выполнение команды ответственному обработчику драйвера +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор - уникальный идентификатор клиента. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// ПараметрыОперации - Структура +// ПараметрыВыполнениеКоманды - Структура +// ПечатающееУстройство - СправочникСсылка.ПодключаемоеОборудование - идентификатор печатающего устройства. +// +Процедура НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ПараметрыВыполнениеКоманды, ПечатающееУстройство = Неопределено) Экспорт + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + Если ОповещениеПриЗавершении <> Неопределено Тогда + ОписаниеОшибки = НСтр("ru='Устройство не выбрано или не подключено.'"); + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + Возврат; + КонецЕсли; + +#Если Не МобильноеПриложениеКлиент Тогда + // Замер производительности. + КлючеваяОперация = СтрШаблон("ОбщийМодуль.МенеджерОборудованияКлиент.НачатьВыполнениеКоманды.%1", ПараметрыВыполнениеКоманды.Команда); + ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, ОповещениеПриЗавершении); +#КонецЕсли + + ПараметрыВыполнениеКоманды.Вставить("ОповещениеПриЗавершении" , ОповещениеПриЗавершении); + ПараметрыВыполнениеКоманды.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + ПараметрыВыполнениеКоманды.Вставить("ИдентификаторУстройства" , ИдентификаторУстройства); + ПараметрыВыполнениеКоманды.Вставить("ПараметрыОперации" , ПараметрыОперации); + ПараметрыВыполнениеКоманды.Вставить("Подключено" , Ложь); + ПараметрыВыполнениеКоманды.Вставить("ПодключенноеУстройство" , Неопределено); + ПараметрыВыполнениеКоманды.Вставить("ПечатающееУстройство" , ПечатающееУстройство); + ПараметрыВыполнениеКоманды.Вставить("ПечатающееУстройствоПодключено" , Ложь); + ПараметрыВыполнениеКоманды.Вставить("ПечатающееУстройствоБылоПодключенное", Ложь); + ПараметрыВыполнениеКоманды.Вставить("СетевоеОборудование"); + ПараметрыВыполнениеКоманды.Вставить("ПечатающееУстройствоДополнительныхДокументов"); + ПараметрыВыполнениеКоманды.Вставить("ПодключенноеПечатающееУстройствоДополнительныхДокументов"); + + // Поиск подключенного устройства. + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(ИдентификаторУстройства); + Если ПодключенноеУстройство = Неопределено Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПодключениеЗавершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + НачатьПодключениеОборудованиеПоИдентификатору(ОписаниеОповещения, ИдентификаторКлиента, ИдентификаторУстройства); + Иначе + ПараметрыВыполнениеКоманды.ПодключенноеУстройство = ПодключенноеУстройство; + // Нужно ли использовать печатающее устройство. + Если ПараметрыВыполнениеКоманды.ИспользоватьПечатающееУстройство И ПараметрыВыполнениеКоманды.ПечатьСлипЧека + И НЕ ПодключенноеУстройство.ПечатьКвитанцийНаТерминале Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПечатающегоУстройстваЗавершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + НачатьПодключениеПечатающегоУстройства(ОписаниеОповещения, ПараметрыВыполнениеКоманды.ИдентификаторКлиента, ПечатающееУстройство); + Иначе + ВыполнениеКомандыОбработчика(ПодключенноеУстройство, ПараметрыВыполнениеКоманды); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Завершение подключения оборудования +// +// Параметры: +// РезультатПодключения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьВыполнениеКоманды_ПодключениеЗавершение(РезультатПодключения, ПараметрыВыполнениеКоманды) Экспорт + + Если РезультатПодключения.Результат Тогда + + ПодключенноеУстройство = РезультатПодключения.ПодключенноеУстройство; + ПараметрыВыполнениеКоманды.ПодключенноеУстройство = ПодключенноеУстройство; + ПараметрыВыполнениеКоманды.Подключено = Истина; + + // Нужно ли использовать печатающее устройство. + Если ПараметрыВыполнениеКоманды.ИспользоватьПечатающееУстройство И ПараметрыВыполнениеКоманды.ПечатьСлипЧека + И НЕ ПодключенноеУстройство.ПечатьКвитанцийНаТерминале Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПечатающегоУстройстваЗавершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + НачатьПодключениеПечатающегоУстройства(ОписаниеОповещения, ПараметрыВыполнениеКоманды.ИдентификаторКлиента, ПараметрыВыполнениеКоманды.ПечатающееУстройство); + Иначе + ВыполнениеКомандыОбработчика(ПодключенноеУстройство, ПараметрыВыполнениеКоманды); + КонецЕсли; + + Иначе + ТекстСообщения = СтрШаблон(НСтр("ru='При подключении оборудования произошла ошибка: %1'"), РезультатПодключения.ОписаниеОшибки); + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстСообщения); + РезультатОперации.ИдентификаторУстройства = ПараметрыВыполнениеКоманды.ИдентификаторУстройства; + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +// Завершение подключения печатающего устройства +// +// Параметры: +// РезультатПодключения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьВыполнениеКоманды_ПечатающегоУстройстваЗавершение(РезультатПодключения, ПараметрыВыполнениеКоманды) Экспорт + + Если РезультатПодключения.Результат Тогда + ПараметрыВыполнениеКоманды.ПечатающееУстройство = РезультатПодключения.ИдентификаторУстройства; + ПараметрыВыполнениеКоманды.ПечатающееУстройствоПодключено = Истина; + + Если РезультатПодключения.Свойство("ПечатающееУстройствоБылоПодключенное") И РезультатПодключения.ПечатающееУстройствоБылоПодключенное Тогда + ПараметрыВыполнениеКоманды.ПечатающееУстройствоБылоПодключенное = Истина; + КонецЕсли; + ВыполнениеКомандыОбработчика(ПараметрыВыполнениеКоманды.ПодключенноеУстройство, ПараметрыВыполнениеКоманды); + Иначе + ТекстСообщения = СтрШаблон(НСтр("ru='При подключении печатающего устройства произошла ошибка: %1'"), РезультатПодключения.ОписаниеОшибки); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстСообщения); + РезультатВыполнения.ИдентификаторУстройства = РезультатПодключения.ИдентификаторУстройства; + // Отключение оборудования при завершение + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +// Завершение выполнения команды +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнениеКоманды - Структура: +// * ПараметрыОперации - Структура: +// ** ОбработатьДанные - Булево +// ** ОбработатьДанныеПриОшибке - Булево +// ** ИспользоватьПечатающееУстройство - Булево +// ** ДополнительныеПараметры - Структура +// +Процедура НачатьВыполнениеКоманды_Завершение(РезультатВыполнения, ПараметрыВыполнениеКоманды) Экспорт + + // Обработка данный на сервере после выполнение команды + Если (РезультатВыполнения.Результат И ПараметрыВыполнениеКоманды.ОбработатьДанные) + Или (ПараметрыВыполнениеКоманды.Свойство("ОбработатьДанныеПриОшибке") И ПараметрыВыполнениеКоманды.ОбработатьДанныеПриОшибке) Тогда + + ПараметрыПодключенияСервер = МенеджерОборудованияКлиентСервер.ПараметрыПодключения(ПараметрыВыполнениеКоманды.ПодключенноеУстройство); + ПараметрыПодключенияСервер.Вставить("ИдентификаторУстройства", ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + ПроцессорДанных = ПараметрыВыполнениеКоманды.ПроцессорДанных; + Команда = ПараметрыВыполнениеКоманды.Команда; + // Вызываем модуль отвечающий за обработку данных после выполнение команды на оборудовании. + МенеджерОборудованияВызовСервера.ОбработатьДанныеОперации(ПараметрыПодключенияСервер, ПроцессорДанных, Команда, РезультатВыполнения, ПараметрыВыполнениеКоманды.ДанныеОперации); + КонецЕсли; + + Если РезультатВыполнения.Свойство("ИдентификаторУстройства") И НЕ ЗначениеЗаполнено(РезультатВыполнения.ИдентификаторУстройства) Тогда + РезультатВыполнения.ИдентификаторУстройства = ПараметрыВыполнениеКоманды.ИдентификаторУстройства; + КонецЕсли; + + Если РезультатВыполнения.Результат Тогда + Если ПараметрыВыполнениеКоманды.Свойство("ПараметрыОперации") + И ПараметрыВыполнениеКоманды.ПараметрыОперации <> Неопределено + И ПараметрыВыполнениеКоманды.ПараметрыОперации.Свойство("ДополнительныеПараметры") Тогда + РезультатВыполнения.Вставить("ДополнительныеПараметры", ПараметрыВыполнениеКоманды.ПараметрыОперации.ДополнительныеПараметры); + КонецЕсли; + Если ПараметрыВыполнениеКоманды.Команда = "CheckFiscalization" + И ОбщегоНазначенияБПОКлиент.ИспользуетсяДисплеиПокупателя() + И ВыводQRКодаЧекаНаДисплейПокупателяПослеФискализации() Тогда + СообщениеНаДисплее = СтрШаблон(НСтр("ru = 'Электронный чек%1Проверьте чек в ФНС'"), Символы.ПС); + МодульОборудованиеДисплеиПокупателяКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеДисплеиПокупателяКлиент"); + ПараметрыОперацииQR = МодульОборудованиеДисплеиПокупателяКлиент.ПараметрыОперацииДисплейПокупателя(СообщениеНаДисплее, РезультатВыполнения.QRКодЧекаККТ); + ПараметрыОперацииQR.ВнутренняяОперация = Истина; + МодульОборудованиеДисплеиПокупателяКлиент.НачатьВыводQRКодаНаДисплейПокупателя(Неопределено, Неопределено, Неопределено, ПараметрыОперацииQR); + КонецЕсли; + Иначе + ДополнительнаяОбработкаОшибки(РезультатВыполнения); + Если ПараметрыВыполнениеКоманды.Команда = "CheckFiscalization" + И ПараметрыВыполнениеКоманды.Свойство("ОповещениеПриОшибкеПечатиЧека") + И ПараметрыВыполнениеКоманды.ОповещениеПриОшибкеПечатиЧека <> Неопределено Тогда + ДанныеОперации = ПараметрыВыполнениеКоманды.ДанныеОперации; + ПараметрыВыполнения = Новый Структура(); + ПараметрыВыполнения.Вставить("ВходныеПараметры", ПараметрыВыполнениеКоманды.ДанныеОперации); + ПараметрыВыполнения.Вставить("ОписаниеОшибки" , Неопределено); + ПараметрыВыполнения.Вставить("ПродолжитьПечать", Истина); + ПараметрыВыполнения.Вставить("ОповещениеПродолжения", Неопределено); + ЗаполнитьПараметрыОперацииПодписиЧека(ПараметрыВыполнения, ДанныеОперации.НомерСменыККТ, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.ЗаводскойНомерФН); + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриОшибкеПечатиЧека, ПараметрыВыполнения); + КонецЕсли; + КонецЕсли; + + Если ПараметрыВыполнениеКоманды.ИспользоватьПечатающееУстройство + И ПараметрыВыполнениеКоманды.ПечатающееУстройствоПодключено И РезультатВыполнения.Свойство("ТестовыеЧеки") Тогда + // Поиск подключенного устройства. + ПечатающееУстройство = ПолучитьПодключенноеУстройство(ПараметрыВыполнениеКоманды.ПечатающееУстройство); + Если ПечатающееУстройство = Неопределено Тогда + ТекстОшибки = НСтр("ru='Ошибка печати слип чека. Операция отменена.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстОшибки, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды, РезультатВыполнения); + Иначе + Если РезультатВыполнения.Свойство("ТекстСлипЧека") И Не ПустаяСтрока(РезультатВыполнения.ТекстСлипЧека) Тогда + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ПодключаемоеОборудование.Вставить("ПоследнийСлипЧек", РезультатВыполнения.ТекстСлипЧека); + КонецЕсли; + // Результат выполнения исходной операции + ПараметрыВыполнениеКоманды.Вставить("РезультатВыполнения", РезультатВыполнения); + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПечатьЗавершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ПечатающееУстройство.ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, ПечатающееУстройство, "PrintText", РезультатВыполнения); + КонецЕсли; + ИначеЕсли ПараметрыВыполнениеКоманды.Свойство("ПараметрыОперации") + И ПараметрыВыполнениеКоманды.ПараметрыОперации <> Неопределено + И ПараметрыВыполнениеКоманды.ПараметрыОперации.Свойство("УстройствоПечати") + И ПараметрыВыполнениеКоманды.ПараметрыОперации.Свойство("ПакетДокументов") + И (ЗначениеЗаполнено(ПараметрыВыполнениеКоманды.ПараметрыОперации.УстройствоПечати) + ИЛИ ЗначениеЗаполнено(ПараметрыВыполнениеКоманды.ПараметрыОперации.ПакетДокументов)) Тогда + НачатьПодключениеУстройстваПечатиДополнительныхДокументов(РезультатВыполнения, ПараметрыВыполнениеКоманды); + Иначе + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +// Подключение оборудования печати. +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьПодключениеУстройстваПечатиДополнительныхДокументов(РезультатВыполнения, ПараметрыВыполнениеКоманды) Экспорт + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("РезультатВыполнения", РезультатВыполнения); + ДополнительныеПараметры.Вставить("ПараметрыВыполнениеКоманды", ПараметрыВыполнениеКоманды); + ДополнительныеПараметры.Вставить("УстройствКПодключению", 0); + ДополнительныеПараметры.Вставить("ПодключеноУстройств", 0); + ДополнительныеПараметры.Вставить("МассивУстройствДляПодключения", Новый Массив); + ДополнительныеПараметры.Вставить("НеобходимаПечатьКопииЧека", Истина); + + ПечатающееУстройство = ПолучитьПодключенноеУстройство(ПараметрыВыполнениеКоманды.ПараметрыОперации.УстройствоПечати); + Если ПечатающееУстройство = Неопределено И ЗначениеЗаполнено(ПараметрыВыполнениеКоманды.ПараметрыОперации.УстройствоПечати) Тогда + ДополнительныеПараметры.МассивУстройствДляПодключения.Добавить(ПараметрыВыполнениеКоманды.ПараметрыОперации.УстройствоПечати); + ДополнительныеПараметры.УстройствКПодключению = 1; + ИначеЕсли ПечатающееУстройство <> Неопределено Тогда + ДополнительныеПараметры.ПараметрыВыполнениеКоманды.ПодключенноеПечатающееУстройствоДополнительныхДокументов = ПечатающееУстройство; + ДополнительныеПараметры.ПараметрыВыполнениеКоманды.ПечатающееУстройствоДополнительныхДокументов = ПечатающееУстройство.ИдентификаторУстройства; + Иначе + ДополнительныеПараметры.НеобходимаПечатьКопииЧека = Ложь; + КонецЕсли; + + Для Каждого СоответствиеУстройства Из ПараметрыВыполнениеКоманды.ПараметрыОперации.ПакетДокументов Цикл + Если ДополнительныеПараметры.МассивУстройствДляПодключения.Найти(СоответствиеУстройства.Значение) = Неопределено + И ПолучитьПодключенноеУстройство(СоответствиеУстройства.Значение) = Неопределено Тогда + ДополнительныеПараметры.МассивУстройствДляПодключения.Добавить(СоответствиеУстройства.Значение); + ДополнительныеПараметры.УстройствКПодключению = ДополнительныеПараметры.УстройствКПодключению + 1; + КонецЕсли; + КонецЦикла; + + Если ДополнительныеПараметры.УстройствКПодключению > 0 Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПечатьДополнительныхДокументов", ЭтотОбъект, ДополнительныеПараметры); + НачатьПодключениеОборудованиеПоИдентификатору(ОписаниеОповещения, ПараметрыВыполнениеКоманды.ИдентификаторКлиента, ДополнительныеПараметры.МассивУстройствДляПодключения); + Иначе + НачатьВыполнениеКоманды_ПечатьДополнительныхДокументов(РезультатВыполнения, ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + +// Печать дополнительных документов. +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнение - Структура +// +Процедура НачатьВыполнениеКоманды_ПечатьДополнительныхДокументов(РезультатВыполнения, ПараметрыВыполнение) Экспорт + + Если РезультатВыполнения.Результат Тогда + + ПараметрыВыполнение.ПодключеноУстройств = ПараметрыВыполнение.ПодключеноУстройств + 1; + Если ПараметрыВыполнение.ПодключеноУстройств < ПараметрыВыполнение.УстройствКПодключению Тогда + Возврат; + КонецЕсли; + + Если ПараметрыВыполнение.ПараметрыВыполнениеКоманды.Свойство("КопияРаспечатана") И ПараметрыВыполнение.ПараметрыВыполнениеКоманды.КопияРаспечатана + ИЛИ НЕ ПараметрыВыполнение.НеобходимаПечатьКопииЧека Тогда + + Команда = "PrintText"; + СоответствиеПечати = ПараметрыВыполнение.ПараметрыВыполнениеКоманды.ДанныеОперации.ДополнительныеДокументы; + ДокументПечати = СоответствиеПечати.Получить(0); + + УстройствоПечати = ПолучитьПодключенноеУстройство(ДокументПечати.УстройствоПечати); + ДанныеОперации = Новый Структура; + ДанныеОперации.Вставить("ТестовыеЧеки", Новый Массив); + ДанныеОперации.ТестовыеЧеки = ДокументПечати.ТекстПечати; + + ПараметрыВыполнение.Вставить("РезультатВыполнения", РезультатВыполнения); + ПараметрыВыполнение.ПараметрыВыполнениеКоманды.ДанныеОперации.ДополнительныеДокументы.Удалить(0); + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПечатьДополнительныхДокументовЗавершение", ЭтотОбъект, ПараметрыВыполнение); + УстройствоПечати.ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, УстройствоПечати, Команда, ДанныеОперации); + + Иначе + + ПараметрыВыполнениеКоманды = ПараметрыВыполнение.ПараметрыВыполнениеКоманды; + Команда = "PrintText"; + ДанныеОперации = ПараметрыВыполнениеКоманды.ДанныеОперации; + Если Не ЗначениеЗаполнено(ПараметрыВыполнениеКоманды.ПечатающееУстройствоДополнительныхДокументов) Тогда + ПараметрыВыполнениеКоманды.ПечатающееУстройствоДополнительныхДокументов = РезультатВыполнения.ИдентификаторУстройства; + ПараметрыВыполнениеКоманды.ПодключенноеПечатающееУстройствоДополнительныхДокументов = РезультатВыполнения.ПодключенноеУстройство; + КонецЕсли; + ПараметрыПодключения = ПараметрыВыполнениеКоманды.ПодключенноеПечатающееУстройствоДополнительныхДокументов; + ОбработчикДрайвера = ПараметрыВыполнениеКоманды.ПодключенноеПечатающееУстройствоДополнительныхДокументов.ОбработчикДрайвера; + + ПараметрыВыполнение.Вставить("РезультатВыполнения", РезультатВыполнения); + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПечатьДополнительныхДокументовЗавершение", ЭтотОбъект, ПараметрыВыполнение); + ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, ПараметрыПодключения, Команда, ДанныеОперации); + + КонецЕсли; + + Иначе + НачатьВыполнениеКоманды_ПечатьДополнительныхДокументовЗавершение(РезультатВыполнения, ПараметрыВыполнение); + КонецЕсли; + +КонецПроцедуры + +// Завершение печати дополнительных документов. +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнение - Структура +// +Процедура НачатьВыполнениеКоманды_ПечатьДополнительныхДокументовЗавершение(РезультатВыполнения, ПараметрыВыполнение) Экспорт + + Если РезультатВыполнения.Результат Тогда + ДополнительныеДокументы = ПараметрыВыполнение.ПараметрыВыполнениеКоманды.ДанныеОперации.ДополнительныеДокументы; + Если ПараметрыВыполнение.ПараметрыВыполнениеКоманды.Свойство("КопияРаспечатана") И ПараметрыВыполнение.ПараметрыВыполнениеКоманды.КопияРаспечатана И ДополнительныеДокументы.Количество() > 0 Тогда + НачатьВыполнениеКоманды_ПечатьДополнительныхДокументов(РезультатВыполнения, ПараметрыВыполнение); + ИначеЕсли НЕ ПараметрыВыполнение.ПараметрыВыполнениеКоманды.Свойство("КопияРаспечатана") И ДополнительныеДокументы.Количество() > 0 Тогда + ПараметрыВыполнение.ПараметрыВыполнениеКоманды.Вставить("КопияРаспечатана", Истина); + НачатьВыполнениеКоманды_ПечатьДополнительныхДокументов(РезультатВыполнения, ПараметрыВыполнение); + Иначе + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнение.ПараметрыВыполнениеКоманды, ПараметрыВыполнение.РезультатВыполнения); + КонецЕсли; + Иначе + + ТекстСообщения = СтрШаблон( + НСтр("ru='При печати дополнительных документов произошла ошибка: %1'"), + РезультатВыполнения.ОписаниеОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБазоваяФункциональность() Тогда + + Если РезультатВыполнения.Свойство("ОписаниеОшибки") Тогда + ТекстСообщения = ТекстСообщения + Символы.ПС + РезультатВыполнения.ОписаниеОшибки; + КонецЕсли; + + Попытка + МодульЖурналРегистрацииКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ЖурналРегистрацииКлиент"); + МодульЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( + НСтр("ru = 'Подключаемое оборудование.'"), + "Ошибка", + ТекстСообщения); + Исключение + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(РезультатВыполнения.ОписаниеОшибки); + КонецПопытки; + КонецЕсли; + + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнение.ПараметрыВыполнениеКоманды, ПараметрыВыполнение.РезультатВыполнения); + + КонецЕсли; + +КонецПроцедуры + +// Завершение печати +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьВыполнениеКоманды_ПечатьЗавершение(РезультатВыполнения, ПараметрыВыполнениеКоманды) Экспорт + + Если РезультатВыполнения.Результат Тогда + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды, ПараметрыВыполнениеКоманды.РезультатВыполнения); + Иначе + // При команде "AuthorizeVoid" нельзя выполнить аварийную отмену последней операции отмены + Если ПараметрыВыполнениеКоманды.Команда = "AuthorizeVoid" Тогда + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды, ПараметрыВыполнениеКоманды.РезультатВыполнения); + // При команде "Settlement" нельзя выполнить аварийную отмену последней операции + ИначеЕсли ПараметрыВыполнениеКоманды.Команда = "Settlement" Тогда + + ТекстСообщения = СтрШаблон( + НСтр("ru='При получении итогов дня по картам, произошла ошибка печати слип чека. + |На печатающем устройстве не поддерживается печать текстовых документов. + |Терминал: %1 + |Печатающее устройство: %2'"), + ПараметрыВыполнениеКоманды.ИдентификаторУстройства, + ПараметрыВыполнениеКоманды.ПечатающееУстройство); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБазоваяФункциональность() Тогда + + Если РезультатВыполнения.Свойство("ОписаниеОшибки") Тогда + ТекстСообщения = ТекстСообщения + Символы.ПС + РезультатВыполнения.ОписаниеОшибки; + КонецЕсли; + + Попытка + ОбщегоНазначенияБПОКлиент.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Подключаемое оборудование.'"), + ТекстСообщения); + Исключение + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(РезультатВыполнения.ОписаниеОшибки); + КонецПопытки; + КонецЕсли; + + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, ТекстСообщения, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды, РезультатВыполнения); + Иначе + + ПараметрыВыполнениеКоманды.Вставить("ОписаниеОшибки", РезультатВыполнения.ОписаниеОшибки); + ТекстСообщения = РезультатВыполнения.ОписаниеОшибки + Символы.ПС + + НСтр("ru = 'Продолжить без печати слип-чека?'") + Символы.ПС + + НСтр("ru = 'ВНИМАНИЕ:'") + Символы.ПС + + НСтр("ru = 'При отмене выполнится отмена операции на эквайринговом терминале.'") + Символы.ПС + + НСтр("ru = 'Подготовьте банковскую карту покупателя.'"); + Оповещение = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПослеЗакрытияВопроса", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ПоказатьВопрос(Оповещение, ТекстСообщения, РежимДиалогаВопрос.ОКОтмена, ,, НСтр("ru = 'При печати слип-чека произошла ошибка'")); + + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Завершение отмены операции +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьВыполнениеКоманды_ОтменаОперацииИЗавершение(РезультатВыполнения, ПараметрыВыполнениеКоманды) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + ПараметрыОперации = МодульОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации(); + ЗаполнитьЗначенияСвойств(ПараметрыОперации, ПараметрыВыполнениеКоманды.ДанныеОперации, , "ИдентификаторЗапроса"); + ЛогированиеОперацийБПОСлужебныйВызовСервера.ЗаписатьПлатежнуюОперацию(ПредопределенноеЗначение("Перечисление.ТипыПлатежныхОпераций.АварийнаяОтмена"), ПараметрыОперации, РезультатВыполнения); + КонецЕсли; + + Если РезультатВыполнения.Результат Тогда + ТекстСообщения = НСтр("ru='Эквайринговая операция отменена - ошибка печати слип чека возникла ошибка.'"); + Иначе + ТекстСообщения = НСтр("ru='Ошибка отмены операции транзакции. Обратитесь в банк.'"); + КонецЕсли; + + Если ПараметрыВыполнениеКоманды.Свойство("ОписаниеОшибки") Тогда + ТекстСообщения = ТекстСообщения + Символы.ПС + ПараметрыВыполнениеКоманды.ОписаниеОшибки; + КонецЕсли; + + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстСообщения, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды, РезультатВыполнения); + +КонецПроцедуры + +// Отключение оборудования +// +// Параметры: +// ПараметрыВыполнениеКоманды - Структура +// РезультатОперации - Структура +// +Процедура ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды, РезультатОперации = Неопределено) Экспорт + + Если ПараметрыВыполнениеКоманды.Свойство("ПечатающееУстройствоДополнительныхДокументов") И ЗначениеЗаполнено(ПараметрыВыполнениеКоманды.ПечатающееУстройствоДополнительныхДокументов) Тогда + НачатьОтключениеОборудованиеПоИдентификатору(Неопределено, ПараметрыВыполнениеКоманды.ИдентификаторКлиента, ПараметрыВыполнениеКоманды.ПечатающееУстройствоДополнительныхДокументов); + КонецЕсли; + + КонтекстВыполнения = Новый Структура(); + КонтекстВыполнения.Вставить("РезультатОперации", РезультатОперации); + КонтекстВыполнения.Вставить("ПараметрыВыполнениеКоманды", ПараметрыВыполнениеКоманды); + + Если ПараметрыВыполнениеКоманды.ПечатающееУстройствоПодключено И НЕ ПараметрыВыполнениеКоманды.ПечатающееУстройствоБылоПодключенное Тогда + ОповещениеПриОтключении = Новый ОписаниеОповещения("ОтключитьОборудованиеПослеВыполнениеКоманды_ОтключитьПечатающееУстройствоЗавершение", ЭтотОбъект, КонтекстВыполнения); + НачатьОтключениеОборудованиеПоИдентификатору(ОповещениеПриОтключении, ПараметрыВыполнениеКоманды.ИдентификаторКлиента, ПараметрыВыполнениеКоманды.ПечатающееУстройство); + Иначе + ОтключитьОборудованиеПослеВыполнениеКоманды_ОтключитьПечатающееУстройствоЗавершение(Неопределено, КонтекстВыполнения); + КонецЕсли; + +КонецПроцедуры + +// Завершение отключения оборудования +// +Процедура ОтключитьОборудованиеПослеВыполнениеКоманды_ОтключитьПечатающееУстройствоЗавершение(РезультатОтключения, КонтекстВыполнения) Экспорт + + ПараметрыВыполнениеКоманды = КонтекстВыполнения.ПараметрыВыполнениеКоманды; + РезультатОперации = КонтекстВыполнения.РезультатОперации; + + СетевоеОборудование = ПараметрыВыполнениеКоманды.ПодключенноеУстройство.СетевоеОборудование; + ОтключениеОборудования = ПараметрыВыполнениеКоманды.Подключено; + + Если ПараметрыВыполнениеКоманды.Свойство("ОставитьПодключенным") И ПараметрыВыполнениеКоманды.ОставитьПодключенным Тогда + ОтключениеОборудования = Ложь; + КонецЕсли; + + Если ОтключениеОборудования Или СетевоеОборудование Тогда + + Если РезультатОперации <> Неопределено Тогда + КонтекстВыполнения = Новый Структура(); + КонтекстВыполнения.Вставить("РезультатОперации", РезультатОперации); + КонтекстВыполнения.Вставить("ПараметрыВыполнениеКоманды", ПараметрыВыполнениеКоманды); + ОповещениеПриОтключении = Новый ОписаниеОповещения("ОтключитьОборудованиеПослеВыполнениеКоманды_ОтключитьЗавершение", ЭтотОбъект, КонтекстВыполнения); + Иначе + ОповещениеПриОтключении = Неопределено; + КонецЕсли; + + НачатьОтключениеОборудованиеПоИдентификатору(ОповещениеПриОтключении, ПараметрыВыполнениеКоманды.ИдентификаторКлиента, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + + Иначе + Если РезультатОперации <> Неопределено Тогда + ЗавершениеВыполнениеКоманды(РезультатОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Завершение отключения оборудования +// +Процедура ОтключитьОборудованиеПослеВыполнениеКоманды_ОтключитьЗавершение(РезультатОтключения, КонтекстВыполнения) Экспорт + + ПараметрыВыполнениеКоманды = КонтекстВыполнения.ПараметрыВыполнениеКоманды; + РезультатОперации = КонтекстВыполнения.РезультатОперации; + + ЗавершениеВыполнениеКоманды(РезультатОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Начать получение параметров устройства +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор - уникальный идентификатор клиента. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// +Процедура НачатьПолучениеПараметровУстройства(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства) Экспорт + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + Если ОповещениеПриЗавершении <> Неопределено Тогда + ОписаниеОшибки = НСтр("ru='Устройство не выбрано или не подключено.'"); + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + Возврат; + КонецЕсли; + + // Поиск подключенного устройства. + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(ИдентификаторУстройства); + Если ПодключенноеУстройство = Неопределено Тогда + ПараметрыВыполнениеКоманды = Новый Структура(); + ПараметрыВыполнениеКоманды.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + ПараметрыВыполнениеКоманды.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + ПараметрыВыполнениеКоманды.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьПолучениеПараметровУстройства_ПодключениеЗавершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + НачатьПодключениеОборудованиеПоИдентификатору(ОписаниеОповещения, ИдентификаторКлиента, ИдентификаторУстройства); + Иначе + ПараметровУстройства = МенеджерОборудованияКлиентСервер.ПараметрыПодключения(ПодключенноеУстройство); + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, Неопределено, ИдентификаторУстройства); + РезультатОперации.ПодключенноеУстройство = ПодключенноеУстройство; + РезультатОперации.Вставить("ПараметровУстройства", ПараметровУстройства); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +// Завершение подключения оборудования +// +// Параметры: +// РезультатПодключения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьПолучениеПараметровУстройства_ПодключениеЗавершение(РезультатПодключения, ПараметрыВыполнениеКоманды) Экспорт + + Если РезультатПодключения.Результат Тогда + ПодключенноеУстройство = РезультатПодключения.ПодключенноеУстройство; + ПараметровУстройства = МенеджерОборудованияКлиентСервер.ПараметрыПодключения(ПодключенноеУстройство); + РезультатПодключения.Вставить("ПараметровУстройства", ПараметровУстройства); + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатПодключения); + НачатьОтключениеОборудованиеПоИдентификатору(Неопределено, ПараметрыВыполнениеКоманды.ИдентификаторКлиента, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + Иначе + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатПодключения); + КонецЕсли; + +КонецПроцедуры + +// Начинает выполнение операции на эквайринговом терминале. +// +Процедура НачатьВыполнениеКоманды_ПослеЗакрытияВопроса(Результат, ПараметрыВыполнениеКоманды) Экспорт + + Если Результат = КодВозвратаДиалога.Отмена Тогда + ПодключенноеУстройство = ПараметрыВыполнениеКоманды.ПодключенноеУстройство; + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ОтменаОперацииИЗавершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ПодключенноеУстройство.ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, ПодключенноеУстройство, "EmergencyVoid", ПараметрыВыполнениеКоманды.ДанныеОперации); + Иначе + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды, ПараметрыВыполнениеКоманды.РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область Интерфейсные + +// Выполнить настройку оборудования. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// +Процедура ВыполнитьНастройкуОборудования(Идентификатор, ОповещениеПриЗавершении = Неопределено) Экспорт + +#Если Не МобильноеПриложениеКлиент Тогда + // Замер производительности. + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ВыполнитьНастройкуОборудования"; + ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, Неопределено, Ложь, Истина); +#КонецЕсли + + ФормаНастройки = "Справочник.ПодключаемоеОборудование.Форма.ФормаНастройки"; + ТекущийЯзык = ТекущийЯзык(); + Если ТипЗнч(ТекущийЯзык) = Тип("Строка") Тогда + КодЯзыка = ТекущийЯзык; + Иначе + КодЯзыка = ТекущийЯзык.КодЯзыка; + КонецЕсли; + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("Идентификатор", Идентификатор); + ПараметрыФормы.Вставить("КодЯзыка", КодЯзыка); + + ПараметрыКоманды = Новый Структура("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + Обработчик = Новый ОписаниеОповещения("ВыполнитьНастройкуОборудования_Завершение", ЭтотОбъект, ПараметрыКоманды); + + ОткрытьФорму(ФормаНастройки, ПараметрыФормы,,, ,, Обработчик, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + +КонецПроцедуры + +// Завершение настройки оборудования. +// +// Параметры: +// Результат - Структура - результат возвращаемый формой при закрытии. +// Параметры - Структура - параметры команды. +// +Процедура ВыполнитьНастройкуОборудования_Завершение(Результат, Параметры) Экспорт + + РезультатЗавершения = Ложь; + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + + Если Результат.Свойство("Идентификатор") И Результат.Свойство("ПараметрыОборудования") Тогда + РезультатЗавершения = МенеджерОборудованияВызовСервера.СохранитьПараметрыУстройства(Результат.Идентификатор, Результат.ПараметрыОборудования); + КонецЕсли; + + Если РезультатЗавершения Тогда + ОбновитьПовторноИспользуемыеЗначения(); + Иначе + СообщениеОбОшибке = НСтр("ru='Не удалось сохранить параметры устройства.'"); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(СообщениеОбОшибке); + КонецЕсли; + + КонецЕсли; + + Если Параметры.ОповещениеПриЗавершении <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Параметры.ОповещениеПриЗавершении, РезультатЗавершения); + КонецЕсли; + +КонецПроцедуры + +// Открытие формы подключаемого Оборудования. +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ОткрытьПодключаемоеОборудование(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + +#Если Не МобильноеПриложениеКлиент Тогда + // Замер производительности. + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ОткрытьПодключаемоеОборудование"; + ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, Неопределено, Ложь, Истина); +#КонецЕсли + + ПараметрыФормы = Новый Структура(); + ОткрытьФорму("Справочник.ПодключаемоеОборудование.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры + +// Открытие формы драйверов оборудования. +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ОткрытьДрайверыОборудования(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + +#Если Не МобильноеПриложениеКлиент Тогда + // Замер производительности. + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ОткрытьДрайверыОборудования"; + ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, Неопределено, Ложь, Истина); +#КонецЕсли + + ПараметрыФормы = Новый Структура(); + ОткрытьФорму("Справочник.ДрайверыОборудования.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры + +// Открытие формы списка платежных операций +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ОткрытьПлатежныеОперации(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + + +КонецПроцедуры + +// Открытие формы списка фискальных операций +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ОткрытьФискальныеОперации(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + +#Если Не МобильноеПриложениеКлиент Тогда + // Замер производительности. + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ОткрытьФискальныеОперации"; + ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, Неопределено, Ложь, Истина); +#КонецЕсли + + ПараметрыФормы = Новый Структура(); + ОткрытьФорму("РегистрСведений.ФискальныеОперации.ФормаСписка", + ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры + +// Открытие формы списка операций очереди чеков +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ОткрытьОчередьЧеков(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализацияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("РаспределеннаяФискализацияКлиент"); + МодульРаспределеннаяФискализацияКлиент.ОткрытьОчередьЧеков(ПараметрКоманды, ПараметрыВыполненияКоманды); + КонецЕсли; + +КонецПроцедуры + +// Открытие формы списка операция с подключаемым оборудованием +// +// Параметры: +// ПодключаемоеОборудование - СправочникСсылка.ПодключаемоеОборудование +// +Процедура ОткрытьОперацииСОборудованием(ПодключаемоеОборудование) Экспорт + + +КонецПроцедуры + + +#КонецОбласти + +#Область Прочее + +// Преобразовать данные со сканера в массив. +// +// Параметры: +// Параметр - Структура: +// * Штрихкод - Строка - штрихкод. +// * Количество - Число - количество. +// +// Возвращаемое значение: +// Массив из Структура. +// +Функция ПреобразоватьДанныеСоСканераВМассив(Параметр) Экспорт + + МенеджерОборудованияКлиентПереопределяемый.ОбработатьСобытие(); // АПК:222 - Для обратной совместимости + + Данные = Новый Массив; + Данные.Добавить(ПреобразоватьДанныеСоСканераВСтруктуру(Параметр)); + + Возврат Данные; + +КонецФункции + +// Преобразовать данные со сканера в структуру. +// +// Параметры: +// Параметр - Структура - Параметр: +// * Штрихкод - Строка - штрихкод. +// * Количество - Число - количество. +// +// Возвращаемое значение: +// Структура - Преобразовать данные со сканера в структуру: +// * Штрихкод - Строка - штрихкод со сканера. +// * Количество - Число - количество товаров. +// +Функция ПреобразоватьДанныеСоСканераВСтруктуру(Параметр) Экспорт + + МенеджерОборудованияКлиентПереопределяемый.ОбработатьСобытие(); // АПК:222 - Для обратной совместимости + + Если Параметр[1] = Неопределено Тогда + Данные = Новый Структура("Штрихкод, Количество", Параметр[0], 1); // Достаем штрихкод из основных данных + Иначе + Данные = Новый Структура("Штрихкод, Количество", Параметр[1][1], 1); // Достаем штрихкод из дополнительных данных + КонецЕсли; + + Возврат Данные; + +КонецФункции + +#КонецОбласти + +#Область УпрощениеНастройкиПараметров + +// Начинает асинхронное заполнение ключевых параметров оборудования по идентификатору +// +// Параметры: +// ОповещениеЗавершения - ОписаниеОповещения - оповещение которое будет вызвано по результатам заполнения параметров +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - идентификатор оборудования +Процедура НачатьПолучениеКлючевыхПараметров(ОповещениеЗавершения, Идентификатор) Экспорт + + Контекст = Новый Структура(); + Контекст.Вставить("КлючевыеПараметры", Новый Структура()); + Контекст.Вставить("ОповещениеЗавершения", ОповещениеЗавершения); + Контекст.Вставить("Идентификатор", Идентификатор); + + Оповещение = Новый ОписаниеОповещения("НачатьПолучениеКлючевыхПараметровЗавершение", ЭтотОбъект, Контекст); + МенеджерОборудованияКлиент.НачатьПолучениеОписанияОборудования(Оповещение, Идентификатор); + +КонецПроцедуры + +// Завершает асинхронное заполнение ключевых параметров оборудования по идентификатору +// +// Параметры: +// Результат - Структура +// Контекст - Структура +Процедура НачатьПолучениеКлючевыхПараметровЗавершение(Результат, Контекст) Экспорт + + ОповещениеЗавершения = Контекст.ОповещениеЗавершения; + + Если Результат.Результат Тогда + + Идентификатор = Контекст.Идентификатор; + КлючевыеПараметры = Контекст.КлючевыеПараметры; + ОписаниеИнтерфейса = Результат.ОписаниеДрайвера.ПараметрыДрайвера; + + ПрочитатьАтрибутыКлючевыхПараметров(ОписаниеИнтерфейса, КлючевыеПараметры); + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Если Не ПодключаемоеОборудование.Свойство("СобственныеПараметрыОборудования") Тогда + ПодключаемоеОборудование.Вставить("СобственныеПараметрыОборудования", Новый Соответствие()); + КонецЕсли; + ПодключаемоеОборудование.СобственныеПараметрыОборудования.Вставить(Идентификатор, КлючевыеПараметры); + + // добавить общие параметры + Если Не КлючевыеПараметры.Свойство("LogEnabled") Тогда + ДобавитьПараметрЛогДрайвераВключен(КлючевыеПараметры, Результат.ОписаниеДрайвера.ЛогДрайвераВключен); + КонецЕсли; + Если Не КлючевыеПараметры.Свойство("LogPath") Тогда + ДобавитьПараметрЛогДрайвераПутьКФайлу(КлючевыеПараметры, Результат.ОписаниеДрайвера.ЛогДрайвераПутьКФайлу); + КонецЕсли; + + + ВыполнитьОбработкуОповещения(ОповещениеЗавершения, Истина); + Иначе + ВыполнитьОбработкуОповещения(ОповещениеЗавершения, Ложь); + КонецЕсли; + +КонецПроцедуры + +// Возвращает атрибуты параметра оборудования по стандартному имени параметра, имя проверяется по словарю возможных вариантов +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - идентификатор оборудования +// ИмяПараметра - Строка - стандартное имя параметра оборудования +// +// Возвращаемое значение: +// - Неопределено +// - Структура - см. НовыйАтрибутыПараметра +// +Функция АтрибутыПараметра(Идентификатор, ИмяПараметра) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Если Не ПодключаемоеОборудование.Свойство("СобственныеПараметрыОборудования") Тогда + Возврат Неопределено; + КонецЕсли; + + КлючевыеПараметры = ПодключаемоеОборудование.СобственныеПараметрыОборудования.Получить(Идентификатор); + Если КлючевыеПараметры = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + АтрибутыПараметра = Неопределено; + Если Не КлючевыеПараметры.Свойство(ИмяПараметра, АтрибутыПараметра) Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат АтрибутыПараметра; + +КонецФункции + +// Возвращает Истина если параметр с именем ИмяПараметра существует, имя проверяется по словарю возможных вариантов +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - идентификатор оборудования +// ИмяПараметра - Строка - стандартное имя параметра оборудования +// +// Возвращаемое значение: +// Булево - +Функция ПараметрСуществует(Идентификатор, ИмяПараметра) Экспорт + + АтрибутыПараметра = АтрибутыПараметра(Идентификатор, ИмяПараметра); + Возврат АтрибутыПараметра <> Неопределено; + +КонецФункции + +// Возвращает тип параметра оборудования по стандартному имени параметра, имя проверяется по словарю возможных вариантов +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - идентификатор оборудования +// ИмяПараметра - Строка - стандартное имя параметра оборудования +// +// Возвращаемое значение: +// Тип - Тип - Тип значения параметра (Число, Строка, Булево) +Функция ТипПараметра(Идентификатор, ИмяПараметра) Экспорт + + АтрибутыПараметра = АтрибутыПараметра(Идентификатор, ИмяПараметра); + Если АтрибутыПараметра = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат АтрибутыПараметра.Тип; + +КонецФункции + +// Возвращает значение параметра оборудования по стандартному имени параметра, имя проверяется по словарю возможных вариантов +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - идентификатор оборудования +// ИмяПараметра - Строка - стандартное имя параметра оборудования +// +// Возвращаемое значение: +// Число, Строка, Булево, Неопределено - установленное значение параметра +Функция ЗначениеПараметра(Идентификатор, ИмяПараметра) Экспорт + + АтрибутыПараметра = АтрибутыПараметра(Идентификатор, ИмяПараметра); + Если АтрибутыПараметра = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если АтрибутыПараметра.Стандартный Тогда + Возврат АтрибутыПараметра.ЗначениеСтандартного; + КонецЕсли; + + ПараметрыУстройства = МенеджерОборудованияВызовСервера.ПараметрыУстройства(Идентификатор); + ИмяРеквизита = АтрибутыПараметра.ИмяРеквизита; + ЗначениеПараметра = Неопределено; + Если Не ПараметрыУстройства.Свойство(ИмяРеквизита, ЗначениеПараметра) Тогда + Возврат Неопределено; + КонецЕсли; + + Если АтрибутыПараметра.Преобразование = "Инвертировать" И АтрибутыПараметра.Тип = Тип("Булево") Тогда + ЗначениеПараметра = Не ЗначениеПараметра; + КонецЕсли; + + Возврат ЗначениеПараметра; + +КонецФункции + +// Устанавливает значение параметра оборудования по стандартному имени параметра, имя проверяется по словарю возможных вариантов +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - идентификатор оборудования +// ИмяПараметра - Строка - стандартное имя параметра оборудования +// НовоеЗначение - Число, Строка, Булево, Неопределено - новое значение параметра которое требуется установить +// +// Возвращаемое значение: +// Булево - результат выполнения +Функция УстановитьЗначениеПараметра(Идентификатор, ИмяПараметра, НовоеЗначение) Экспорт + + АтрибутыПараметра = АтрибутыПараметра(Идентификатор, ИмяПараметра); + Если АтрибутыПараметра = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Если АтрибутыПараметра.ТолькоЧтение Тогда + Возврат Ложь; + КонецЕсли; + + ПараметрыУстройства = МенеджерОборудованияВызовСервера.ПараметрыУстройства(Идентификатор); + ИмяРеквизита = АтрибутыПараметра.ИмяРеквизита; + Если АтрибутыПараметра.Преобразование = "Инвертировать" И АтрибутыПараметра.Тип = Тип("Булево") Тогда + НовоеЗначение = Не НовоеЗначение; + КонецЕсли; + ПараметрыУстройства.Вставить(ИмяРеквизита, НовоеЗначение); + + + Возврат МенеджерОборудованияВызовСервера.СохранитьПараметрыУстройства(Идентификатор, ПараметрыУстройства); + +КонецФункции + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +#Область Системные + +// Устарела: следует использовать ИнтеграцияПодсистемБПОКлиент.ПередНачаломРаботыСистемы. +// Вызываемая перед началом работы системы. +// +Процедура ПередНачаломРаботыСистемы() Экспорт + + ИнтеграцияПодсистемБПОКлиент.ПередНачаломРаботыСистемы(); + +КонецПроцедуры + +// Устарела: следует использовать ИнтеграцияПодсистемБПОКлиент.ПриНачалеРаботыСистемы. +// Функция, вызываемая при начале работы системы. +// +Процедура ПриНачалеРаботыСистемы() Экспорт + + ИнтеграцияПодсистемБПОКлиент.ПриНачалеРаботыСистемы(); + +КонецПроцедуры + +// Устарела: следует использовать ИнтеграцияПодсистемБПОКлиент.ПередЗавершениемРаботыСистемы. +// +Процедура ПередЗавершениемРаботыСистемы() Экспорт + + ИнтеграцияПодсистемБПОКлиент.ПередЗавершениемРаботыСистемы(); + +КонецПроцедуры + +// Устарела: следует использовать ОбщегоНазначенияБПОКлиент.ДатаСеанса. +// Возвращает текущую дату, приведенную к часовому поясу сеанса. +// Предназначена для использования вместо функции ТекущаяДата(). +// +// Возвращаемое значение: +// Дата. +// +Функция ДатаСеанса() Экспорт + + Возврат ОбщегоНазначенияБПОКлиент.ДатаСеанса(); + +КонецФункции + +#Если Не ВебКлиент Тогда + +// Устарела: больше не используется. +// Установить или переустановить драйверы помеченные флагами. +// +Процедура ПереустановитьПомеченныеПоставляемыеДрайверы() Экспорт + + ПараметрыРаботыКлиента = ИнтеграцияПодсистемБПОКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + + ОборудованиеДляПереустановки = Новый Массив; + Для Каждого ИмяМакетаДрайвера Из ПараметрыРаботыКлиента.ОборудованиеДляПереустановки Цикл + ОборудованиеДляПереустановки.Добавить(ИмяМакетаДрайвера); + КонецЦикла; + + ВнешниеКомпонентыБПОКлиент.ПереустановитьКомпоненты(ОборудованиеДляПереустановки); + +КонецПроцедуры + +// Устарела: следует использовать ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML. +// Читает корневой элемент XML. +// +// Параметры: +// СтрокаXML - Строка - XML строка. +// +// Возвращаемое значение: +// Структура. +// +Функция ПрочитатьКорневойЭлементXML(СтрокаXML) Экспорт + + Возврат ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML(СтрокаXML); + +КонецФункции + +#КонецЕсли + +// Устарела: больше не используется. +// Возвращает значения параметров, необходимых для работы клиентского кода конфигурации +// без дополнительных серверных вызовов. +// +// Возвращаемое значение: +// см. ИнтеграцияПодсистемБПОКлиент.ПараметрыРаботыКлиентаПриЗапуске +// +Функция ПараметрыРаботыКлиентаПриЗапуске() Экспорт + + Возврат ИнтеграцияПодсистемБПОКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + +КонецФункции + +// Устарела: следует использовать ИнтеграцияПодсистемБПОКлиент.ОбработкаВнешнегоСобытия. +// Выполняет обработку внешнего события, вызывается из глобального модуля +// +// Параметры: +// Источник - Строка. +// Событие - Строка. +// Данные - Строка. +Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) Экспорт + + ИнтеграцияПодсистемБПОКлиент.ОбработкаВнешнегоСобытия(Источник, Событие, Данные); + +КонецПроцедуры + +// Устарела: следует использовать МассивТиповОборудования. +// Формирования массива типов оборудования +// +// Параметры: +// Типы - Массив из Строка, Строка - тип оборудования. +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования - +// +Функция ПолучитьТипыОборудования(Типы) Экспорт + + Возврат МассивТиповОборудования(Типы); + +КонецФункции + +#КонецОбласти + +#Область РаспределеннаяФискализации + +// Устарела: следует использовать РаспределеннаяФискализацияКлиент.ПодключениеСистемыВзаимодействия. +// Подключает обработчики системы оповещения, для использования в распределенной фискализации +// +Процедура ПодключениеСистемыВзаимодействия() Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализацияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("РаспределеннаяФискализацияКлиент"); + МодульРаспределеннаяФискализацияКлиент.ПодключениеСистемыВзаимодействия(Неопределено); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализацияКлиент.ОбработкаОповещенияПодключенияСообщенийФискализации. +// Завершение подключения обработчика системы оповещения +// +// Параметры: +// ДополнительныеПараметры - Произвольный +// +Процедура ОбработкаОповещенияПодключенияСообщенийФискализации(ДополнительныеПараметры) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализацияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("РаспределеннаяФискализацияКлиент"); + МодульРаспределеннаяФискализацияКлиент.ОбработкаОповещенияПодключенияСообщенийФискализации(ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализацияКлиент.ОбработкаОповещенияСообщенийФискализации. +// Обработчик появлении новых сообщений в обсуждении +// +// Параметры: +// Сообщение - СообщениеСистемыВзаимодействия +// ДополнительныеПараметры - Произвольный +// +Процедура ОбработкаОповещенияСообщенийФискализации(Сообщение, ДополнительныеПараметры) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализацияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("РаспределеннаяФискализацияКлиент"); + МодульРаспределеннаяФискализацияКлиент.ОбработкаОповещенияСообщенийФискализации(Сообщение, ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализацияКлиент.ФискализацияЧековВОчереди_ПослеОткрытияЧека. +// Обработчик после открытия чека. +// +// Параметры: +// ПараметрыВыполнения - Структура - Параметры выполнения команды +// ДополнительныеПараметры - Произвольный +// +Процедура ФискализацияЧековВОчереди_ПослеОткрытияЧека(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализацияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("РаспределеннаяФискализацияКлиент"); + МодульРаспределеннаяФискализацияКлиент.ФискализацияЧековВОчереди_ПослеОткрытияЧека(ПараметрыВыполнения, ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализацияКлиент.ФискализацияЧековВОчереди_ПослеОшибкиПечатиЧека. +// Обработчик после ошибки печати чека. +// +// Параметры: +// ПараметрыВыполнения - Структура - Параметры выполнения команды +// ДополнительныеПараметры - Произвольный +// +Процедура ФискализацияЧековВОчереди_ПослеОшибкиПечатиЧека(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализацияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("РаспределеннаяФискализацияКлиент"); + МодульРаспределеннаяФискализацияКлиент.ФискализацияЧековВОчереди_ПослеОшибкиПечатиЧека(ПараметрыВыполнения, ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализацияКлиент.ФискализацияЧековВОчереди_Завершение. +// Завершение фискализации чеков в очереди +// +// Параметры: +// РезультатВыполнения - Структура +// ОбщиеПараметры - Структура +// +Процедура ФискализацияЧековВОчереди_Завершение(РезультатВыполнения, ОбщиеПараметры) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализацияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("РаспределеннаяФискализацияКлиент"); + МодульРаспределеннаяФискализацияКлиент.ФискализацияЧековВОчереди_Завершение(РезультатВыполнения, ОбщиеПараметры); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализацияКлиент.ФискализацияЧековВОчереди_ЗавершениеПакетнойОперации. +// Завершение фискализации пакетной операции в очереди +// +// Параметры: +// РезультатВыполнения - см. ОборудованиеЧекопечатающиеУстройстваКлиент.РезультатПродажаСВыдачейНаличных +// ОбщиеПараметры - Структура +// +Процедура ФискализацияЧековВОчереди_ЗавершениеПакетнойОперации(РезультатВыполнения, ОбщиеПараметры) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализацияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("РаспределеннаяФискализацияКлиент"); + МодульРаспределеннаяФискализацияКлиент.ФискализацияЧековВОчереди_ЗавершениеПакетнойОперации(РезультатВыполнения, ОбщиеПараметры); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализацияКлиент.ФискализацияЧековВОчереди_Начало. +// Начать фискализацию чеков в очереди +// +// Параметры: +// Параметры - см. ПараметрыФискализацииОчередиЧеков +Процедура ФискализацияЧековВОчереди_Начало(Параметры = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализацияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("РаспределеннаяФискализацияКлиент"); + МодульРаспределеннаяФискализацияКлиент.ФискализацияЧековВОчереди_Начало(Параметры); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализацияКлиент.ПараметрыФискализацииОчередиЧеков. +// Возвращает структуру параметров для выполнения фискализации очереди чеков +// +// Возвращаемое значение: +// Структура: +// * Форма - ФормаКлиентскогоПриложения +// * КассаККМ - ОпределяемыйТип.КассаБПО +Функция ПараметрыФискализацииОчередиЧеков() Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализацияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("РаспределеннаяФискализацияКлиент"); + Возврат МодульРаспределеннаяФискализацияКлиент.ПараметрыФискализацииОчередиЧеков(); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать РаспределеннаяФискализацияКлиент.ФискализацияЧековВОчереди. +// Выполнить фискализацию чеков в очереди +// +// Параметры: +// РазрешенаАвтоматическаяФискализация - Булево +// Параметры - см. ПараметрыФискализацииОчередиЧеков. +Процедура ФискализацияЧековВОчереди(РазрешенаАвтоматическаяФискализация = Истина, Параметры = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализацияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("РаспределеннаяФискализацияКлиент"); + МодульРаспределеннаяФискализацияКлиент.ФискализацияЧековВОчереди(РазрешенаАвтоматическаяФискализация, Параметры); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +// Устарела: больше не используется +// Выводит текст в панель состояния. +// +// Параметры: +// ТекстСообщения - Строка +// Прогресс - Число - индикатор прогресса +// Пояснение - Строка +// +Процедура СостояниеПроцесса(ТекстСообщения, Прогресс = Неопределено, Пояснение = Неопределено) Экспорт + +#Если НЕ МобильныйКлиент Тогда + Состояние(ТекстСообщения, Прогресс); +#КонецЕсли + +КонецПроцедуры + +// Устарела: следует использовать ВыбратьУстройство. +// Процедура выбора устройства из доступных, привязанных к текущему рабочему месту. +// +// Параметры: +// ОповещениеВыбора - ОписаниеОповещения - событие описания оповещения. +// ТипОборудования - Структура, Массив, Строка - тип оборудования для выбора устройства. +// ТекстЗаголовкаВыбора - Строка - Заголовок окна выбора. +// СообщениеНеПодключено - Строка - Текст сообщения о не подключенных устройствах +// СообщениеНеВыбрано - Строка - Текст сообщения о не выбранных устройствах +// +Процедура ПредложитьВыбратьУстройство(ОповещениеВыбора, ТипОборудования, ТекстЗаголовкаВыбора, СообщениеНеПодключено = "", СообщениеНеВыбрано = "") Экспорт + + Если Не ОбновитьРабочееМестоКлиента() Тогда + ТекстСообщения = НСтр("ru='Предварительно необходимо выбрать рабочее место подключаемого оборудования текущего сеанса.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстСообщения); + ВыполнитьОбработкуОповещения(ОповещениеВыбора, РезультатВыполнения); + Возврат; + КонецЕсли; + + Если ПустаяСтрока(СообщениеНеПодключено) Тогда + СообщениеНеПодключено = НСтр("ru='Необходимые устройства не подключены к текущему рабочему месту.'"); + КонецЕсли; + + Если ПустаяСтрока(СообщениеНеВыбрано) Тогда + СообщениеНеВыбрано = НСтр("ru='Устройство не выбрано.'"); + КонецЕсли; + + СписокОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + СписокОтбор.ТипыПО = ТипОборудования; + СписокДоступныхУстройств = МенеджерОборудованияВызовСервера.СписокОборудования(СписокОтбор); + + Если СписокДоступныхУстройств.Количество() = 0 Тогда + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, СообщениеНеПодключено); + ВыполнитьОбработкуОповещения(ОповещениеВыбора, РезультатВыполнения); + Иначе + СписокУстройств = Новый СписокЗначений(); + Для Каждого Устройства Из СписокДоступныхУстройств Цикл + СписокУстройств.Добавить(Устройства.Ссылка, Устройства.Наименование); + КонецЦикла; + Если СписокУстройств.Количество() = 1 Тогда + Идентификатор = СписокУстройств[0].Значение; + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, Неопределено, Идентификатор); + ВыполнитьОбработкуОповещения(ОповещениеВыбора, РезультатВыполнения); + Иначе + Контекст = Новый Структура; + Контекст.Вставить("ОповещениеВыбора" , ОповещениеВыбора); + Контекст.Вставить("СообщениеНеВыбрано" , СообщениеНеВыбрано); + ОписаниеОповещения = Новый ОписаниеОповещения("ПредложитьВыбратьУстройствоЗавершение", ЭтотОбъект, Контекст); + СписокУстройств.ПоказатьВыборЭлемента(ОписаниеОповещения, ТекстЗаголовкаВыбора); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Устарела: больше не используется +// Завершение выбора устройства +// +// Параметры: +// Результат - Структура +// Параметры - Структура +// +Процедура ПредложитьВыбратьУстройствоЗавершение(Результат, Параметры) Экспорт + + Если Результат = Неопределено Тогда + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, Параметры.СообщениеНеВыбрано); + ВыполнитьОбработкуОповещения(Параметры.ОповещениеВыбора, РезультатВыполнения); + Иначе + Идентификатор = ?(Результат = Неопределено, Неопределено, Результат.Значение); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, Неопределено, Идентификатор); + ВыполнитьОбработкуОповещения(Параметры.ОповещениеВыбора, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +#Область ВыборКодаВидаНоменклатурнойКлассификации + +// Устарела: больше не используется +// Процедура открывает форму выбора кода вида номенклатурной классификации +// +// Параметры: +// ОповещениеПриВыборе - ОписаниеОповещения - событие описания оповещения. +// +Процедура НачатьВыборКодаВидаНоменклатурнойКлассификации(ОповещениеПриВыборе) Экспорт + + // ++ Локализация + ПараметрыКоманды = Новый Структура("ОповещениеПриВыборе", ОповещениеПриВыборе); + Обработчик = Новый ОписаниеОповещения("НачатьВыборКодаВидаНоменклатурнойКлассификации_Завершение", ЭтотОбъект, ПараметрыКоманды); + ОткрытьФорму("ОбщаяФорма.КодВидаНоменклатурнойКлассификации", ,,, ,, Обработчик, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + // -- Локализация + +КонецПроцедуры + +// Устарела: больше не используется +// Завершение выбора +// +// Параметры: +// Результат - Структура +// Параметры - Структура +// +Процедура НачатьВыборКодаВидаНоменклатурнойКлассификации_Завершение(Результат, Параметры) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + Если Параметры.ОповещениеПриВыборе <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Параметры.ОповещениеПриВыборе, Результат); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ККТ + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьОткрытиеСессииРегистрацииКМ. +// Осуществляет открытие сессии регистрации КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - обработчик результата. +// УникальныйИдентификатор - УникальныйИдентификатор - Идентификатор формы. +// Параметры - Структура - Содержит параметры выполнения операции. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Устройство. +// +Процедура НачатьОткрытиеСессииРегистрацииКМ(ОповещениеПриЗавершении, УникальныйИдентификатор, Параметры = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеУстройстваКлиент.НачатьОткрытиеСессииРегистрацииКМ(ОповещениеПриЗавершении, УникальныйИдентификатор, ИдентификаторУстройства, Параметры); + Иначе + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатОперации.Результат = Ложь; + РезультатОперации.ОписаниеОшибки = НСтр("ru = 'Подсистема Чекопечатающие устройства не используется'"); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьЗакрытииСессииРегистрацииКМ. +// Осуществляет закрытии сессии регистрации КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - обработчик результата. +// УникальныйИдентификатор - УникальныйИдентификатор - Идентификатор формы. +// Параметры - Структура - Содержит параметры выполнения операции. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Устройство. +// +Процедура НачатьЗакрытииСессииРегистрацииКМ(ОповещениеПриЗавершении, УникальныйИдентификатор, Параметры = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеУстройстваКлиент.НачатьЗакрытииСессииРегистрацииКМ(ОповещениеПриЗавершении, УникальныйИдентификатор, ИдентификаторУстройства, Параметры); + Иначе + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатОперации.Результат = Ложь; + РезультатОперации.ОписаниеОшибки = НСтр("ru = 'Подсистема Чекопечатающие устройства не используется'"); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьЗапросКМ. +// Осуществляет запрос КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - обработчик результата. +// УникальныйИдентификатор - УникальныйИдентификатор - Идентификатор формы. +// Параметры - Структура - Содержит параметры выполнения операции. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Устройство. +// +Процедура НачатьЗапросКМ(ОповещениеПриЗавершении, УникальныйИдентификатор, Параметры, ИдентификаторУстройства = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяЧекопечатающиеУстройства() Тогда + ДополнительныеПараметры = МенеджерОборудованияКлиентСервер.ДополнительныеПараметрыОперации(Истина); + МодульОборудованиеЧекопечатающиеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеУстройстваКлиент.НачатьЗапросКМ(ОповещениеПриЗавершении, УникальныйИдентификатор, ИдентификаторУстройства, Параметры, ДополнительныеПараметры); + Иначе + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатОперации.Результат = Ложь; + РезультатОперации.ОписаниеОшибки = НСтр("ru = 'Подсистема Чекопечатающие устройства не используется'"); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьПолученияРезультатовЗапросаКМ. +// Начать получения результатов запроса КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - обработчик результата. +// УникальныйИдентификатор - УникальныйИдентификатор - Идентификатор формы. +// Параметры - Структура - Содержит параметры выполнения операции. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Устройство. +// +Процедура НачатьПолученияРезультатовЗапросаКМ(ОповещениеПриЗавершении, УникальныйИдентификатор, Параметры, ИдентификаторУстройства = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеУстройстваКлиент.НачатьПолученияРезультатовЗапросаКМ(ОповещениеПриЗавершении, УникальныйИдентификатор, ИдентификаторУстройства, Параметры); + Иначе + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатОперации.Результат = Ложь; + РезультатОперации.ОписаниеОшибки = НСтр("ru = 'Подсистема Чекопечатающие устройства не используется'"); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьПодтверждениеКМ. +// Начать подтверждение КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - обработчик результата. +// УникальныйИдентификатор - УникальныйИдентификатор - Идентификатор формы. +// Параметры - Структура - Содержит параметры выполнения операции. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Устройство. +// +Процедура НачатьПодтверждениеКМ(ОповещениеПриЗавершении, УникальныйИдентификатор, Параметры, ИдентификаторУстройства = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеУстройстваКлиент.НачатьПодтверждениеКМ(ОповещениеПриЗавершении, УникальныйИдентификатор, ИдентификаторУстройства, Параметры); + Иначе + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатОперации.Результат = Ложь; + РезультатОперации.ОписаниеОшибки = НСтр("ru = 'Подсистема Чекопечатающие устройства не используется'"); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ТСД + +// Устарела: следует использовать ОборудованиеТерминалыСбораДанныхКлиент.НачатьЗагрузкуДанныеИзТСД. +// Начать загрузку данных из терминала сбора данных. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// УникальныйИдентификатор - ФормаКлиентскогоПриложения -идентификатор формы. +// СворачиватьДанные - Булево +// +Процедура НачатьЗагрузкуДанныеИзТСД(ОповещениеПриЗавершении, УникальныйИдентификатор, СворачиватьДанные = Ложь) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяТерминалыСбораДанных() Тогда + МодульОборудованиеТерминалыСбораДанныхКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеТерминалыСбораДанныхКлиент"); + МодульОборудованиеТерминалыСбораДанныхКлиент.НачатьЗагрузкуДанныеИзТСД(ОповещениеПриЗавершении, УникальныйИдентификатор); + Иначе + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатОперации.Результат = Ложь; + РезультатОперации.ОписаниеОшибки = НСтр("ru = 'Подсистема Терминалы сбора данных не используется'"); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать ОборудованиеТерминалыСбораДанныхКлиент.НачатьВыгрузкуДанныеВТСД. +// Начать выгрузку данных в терминал сбора данных. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// УникальныйИдентификатор - ФормаКлиентскогоПриложения -идентификатор формы. +// ТаблицаВыгрузкиТоваров - ТаблицаЗначений - +// ПолнаяВыгрузка - Булево - +// +Процедура НачатьВыгрузкуДанныеВТСД(ОповещениеПриЗавершении, УникальныйИдентификатор, ТаблицаВыгрузкиТоваров, ПолнаяВыгрузка = Истина) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяТерминалыСбораДанных() Тогда + МодульОборудованиеТерминалыСбораДанныхКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеТерминалыСбораДанныхКлиентСервер"); + ПараметрыОперации = МодульОборудованиеТерминалыСбораДанныхКлиентСервер.ПараметрыВыгрузкиВТСД(); + ПараметрыОперации.ТаблицаТоваров = ТаблицаВыгрузкиТоваров; + ПараметрыОперации.ЧастичнаяВыгрузка = Не ПолнаяВыгрузка; + + МодульОборудованиеТерминалыСбораДанныхКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеТерминалыСбораДанныхКлиент"); + МодульОборудованиеТерминалыСбораДанныхКлиент.НачатьВыгрузкуДанныеВТСД(ОповещениеПриЗавершении, УникальныйИдентификатор, Неопределено, ПараметрыОперации); + Иначе + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатОперации.Результат = Ложь; + РезультатОперации.ОписаниеОшибки = НСтр("ru = 'Подсистема Терминалы сбора данных не используется'"); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать ОборудованиеТерминалыСбораДанныхКлиент.НачатьОчисткуДанныеВТСД. +// Начать очистку данных в терминале сбора данных. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// УникальныйИдентификатор - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// +Процедура НачатьОчисткуДанныеВТСД(ОповещениеПриЗавершении, УникальныйИдентификатор, ИдентификаторУстройства = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяТерминалыСбораДанных() Тогда + МодульОборудованиеТерминалыСбораДанныхКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеТерминалыСбораДанныхКлиент"); + МодульОборудованиеТерминалыСбораДанныхКлиент.НачатьОчисткуДанныеВТСД(ОповещениеПриЗавершении, УникальныйИдентификатор, ИдентификаторУстройства); + Иначе + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатОперации.Результат = Ложь; + РезультатОперации.ОписаниеОшибки = НСтр("ru = 'Подсистема Терминалы сбора данных не используется'"); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ЭлектронныеВесы + +// Устарела: следует использовать ОборудованиеВесовоеОборудованиеКлиент.НачатьПолученияВесаСЭлектронныхВесов +// Получает вес с электронных весов. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// УникальныйИдентификатор - ФормаКлиентскогоПриложения - идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ОтображатьСообщения - Булево. +// +Процедура НачатьПолученияВесаСЭлектронныхВесов(ОповещениеПриЗавершении, УникальныйИдентификатор, ИдентификаторУстройства = Неопределено, ОтображатьСообщения = Ложь) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяВесовоеОборудование() Тогда + МодульОборудованиеВесовоеОборудованиеКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеВесовоеОборудованиеКлиент"); + МодульОборудованиеВесовоеОборудованиеКлиент.НачатьПолученияВесаСЭлектронныхВесов(ОповещениеПриЗавершении, УникальныйИдентификатор, ИдентификаторУстройства, Неопределено); + Иначе + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатОперации.Результат = Ложь; + РезультатОперации.ОписаниеОшибки = НСтр("ru = 'Подсистема Весовое оборудование не используется'"); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать ОборудованиеВесовоеОборудованиеКлиент.НачатьУстановкуВесаТарыЭлектронныхВесов +// Начать установку веса тары на электронных весах. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// УникальныйИдентификатор - ФормаКлиентскогоПриложения - идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// Вес - Число - вес тары. +// +Процедура НачатьУстановкуВесаТары(ОповещениеПриЗавершении, УникальныйИдентификатор, ИдентификаторУстройства = Неопределено, Вес = Неопределено) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяВесовоеОборудование() Тогда + + МодульОборудованиеВесовоеОборудованиеКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеВесовоеОборудованиеКлиентСервер"); + МодульОборудованиеВесовоеОборудованиеКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеВесовоеОборудованиеКлиент"); + + ПараметрыОперации = МодульОборудованиеВесовоеОборудованиеКлиентСервер.ПараметрыОперацииЭлектронныеВесы(Вес); + МодульОборудованиеВесовоеОборудованиеКлиент.НачатьУстановкуВесаТарыЭлектронныхВесов(ОповещениеПриЗавершении, УникальныйИдентификатор, ИдентификаторУстройства, ПараметрыОперации); + + Иначе + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатОперации.Результат = Ложь; + РезультатОперации.ОписаниеОшибки = НСтр("ru = 'Подсистема Весовое оборудование не используется'"); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Подключение оборудования рекурсивно +// +// Параметры: +// РезультатПодключения - Структура +// Контекст - Структура +// * ПараметрыПодключения - Структура +// * ОповещениеПриПодключении - ОписаниеОповещения +Процедура НачатьПодключениеОборудованияРекурсивно(РезультатПодключения, Контекст) Экспорт + + ОборудованиеДляПодключения = Контекст.ОборудованиеДляПодключения; + Если РезультатПодключения <> Неопределено Тогда + ОборудованиеДляПодключения.Удалить(ОборудованиеДляПодключения.ВГраница()); + Если РезультатПодключения.Результат Тогда + ПараметрыПодключения = Контекст.ПараметрыПодключения; // Структура + ПараметрыПодключения.Клиенты.Добавить(Контекст.ИдентификаторКлиента); + ПараметрыПодключения.КоличествоПодключенных = 1; + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ПодключаемоеОборудование.ПараметрыПодключенияПО.Добавить(ПараметрыПодключения); + + Если Контекст.ОповещениеПриПодключении <> Неопределено Тогда + Результат = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина); + Результат.ПодключенноеУстройство = ПараметрыПодключения; + Результат.ИдентификаторУстройства = ПараметрыПодключения.ИдентификаторУстройства; + ВыполнитьОбработкуОповещения(Контекст.ОповещениеПриПодключении, Результат); + КонецЕсли; + Иначе + Если Контекст.ОповещениеПриПодключении <> Неопределено Тогда + ПараметрыПодключения = Контекст.ПараметрыПодключения; // Структура + ОписаниеОшибки = СтрШаблон( + НСтр("ru='Не удалось подключить устройство (%1): %2'"), + ПараметрыПодключения.Наименование, + РезультатПодключения.ОписаниеОшибки); + Результат = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Результат.ИдентификаторУстройства = ПараметрыПодключения.ИдентификаторУстройства; + Результат.ОшибкаЗагрузки = РезультатПодключения.ОшибкаЗагрузки; + ВыполнитьОбработкуОповещения(Контекст.ОповещениеПриПодключении, Результат); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ОборудованиеДляПодключения.Количество()>0 Тогда + Оповещение = Новый ОписаниеОповещения("НачатьПодключениеОборудованияРекурсивно", ЭтотОбъект, Контекст); + Устройство = ОборудованиеДляПодключения[ОборудованиеДляПодключения.ВГраница()]; + НовоеПодключение = ПараметрыПодключенияУстройства(Устройство); + Контекст.ПараметрыПодключения = НовоеПодключение; + НовоеПодключение.ОбработчикДрайвера.НачатьПодключениеУстройства(Оповещение, НовоеПодключение); + КонецЕсли; + +КонецПроцедуры + +// Возвращает объект драйвера из локального кеша клиентского приложения +// +// Параметры: +// ИдентификаторОбъекта - Строка - +// +// Возвращаемое значение: +// ОбъектВнешнейКомпоненты +// +Функция ОбъектДрайвераИзКэша(ИдентификаторОбъекта) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Результат = ПодключаемоеОборудование.ДрайверыОборудования.Получить(ИдентификаторОбъекта); + + Возврат Результат; + +КонецФункции + +// Добавляет объект драйвера в локальный кеша клиентского приложения +// +// Параметры: +// ИдентификаторОбъекта - Строка - +// ОбъектВнешнейКомпоненты - +// +Процедура ДобавитьДрайверВКэш(ИдентификаторОбъекта, ОбъектВнешнейКомпоненты) Экспорт + + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + ПодключаемоеОборудование.ДрайверыОборудования.Вставить(ИдентификаторОбъекта, ОбъектВнешнейКомпоненты); + +КонецПроцедуры + + +Функция ДопустимаУстановкаКомпоненты(ИмяМакета) Экспорт + +#Если ВебКлиент Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + Реквизиты = МенеджерОборудованияВызовСервера.СовместимостьВнешнейКомпонентыИзФайла(ИмяМакета); + Если ЗначениеЗаполнено(Реквизиты) Тогда + Результат = ТекущийКлиентПоддерживаетсяКомпонентой(Реквизиты); + Возврат Результат = Истина; // Результат может содержать Неопределено + Иначе + Возврат Ложь; + КонецЕсли; + Иначе + Возврат Истина; + КонецЕсли; +#Иначе + Возврат Истина; +#КонецЕсли + +КонецФункции + +Процедура УстановитьРежимПодключенияРасширенияИнформацииОКомпьютере(Режим) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ЭтоВебКлиент() Тогда + ИмяПараметра = "БПО.ВыполнятьУстановкуРасширенияИнформацииОКомпьютере"; + ОбщегоНазначенияБПОКлиент.УстановитьПараметрПриложения(ИмяПараметра, Режим); + МенеджерОборудованияКлиентПереопределяемый.УстановитьРежимПодключенияРасширенияИнформацииОКомпьютере(Режим); + КонецЕсли; + +КонецПроцедуры + +#Область РабочиеМеста + +Процедура НачатьПолучениеMACАдреса(ОбработкаОповещения, УстанавливатьРасширение = Истина, ЗапускПриложения = Ложь) Экспорт + +#Если ВебКлиент Тогда + Контекст = Новый Структура(); + Контекст.Вставить("ОбработкаОповещения", ОбработкаОповещения); + Контекст.Вставить("УстанавливатьРасширение", УстанавливатьРасширение); + Контекст.Вставить("ЗапускПриложения", ЗапускПриложения); + + Оповещение = Новый ОписаниеОповещения("НачатьПодключениеРасширенияПолученияИнформацииОКомпьютере_Завершение", ЭтотОбъект, Контекст); + НачатьПодключениеРасширенияПолученияИнформацииОКомпьютере(Оповещение); +#Иначе + ВыполнитьПолучениеИнформацииОСетевыхАдаптерах(ОбработкаОповещения); +#КонецЕсли + +КонецПроцедуры + +Процедура НачатьПолучениеMACАдресаЗавершение(MACАдреса, Контекст) Экспорт + + ПараметрыРабочегоМеста = ПодключаемоеОборудование().ПараметрыРабочегоМеста; + СтароеРабочееМесто = ПараметрыРабочегоМеста.РабочееМесто; + + СоздаватьРабочееМесто = Истина; + ОпределитьРабочееМесто(СоздаватьРабочееМесто); + + НовоеРабочееместо = ПараметрыРабочегоМеста.РабочееМесто; + Если СтароеРабочееМесто <> НовоеРабочееместо Тогда + Оповестить("ИзмененоРабочееМестоТекущегоСеанса", НовоеРабочееместо); + КонецЕсли; + +КонецПроцедуры + +// Выполняет отображение списка рабочих мест для выбора рабочего места к текущему идентификатору веб-клиента +// +// Параметры: +// ИдентификаторКлиента - Строка +// MACАдрес - Строка +// +Процедура ПривязатьРабочееМестоПоMACАдресу(ИдентификаторКлиента, MACАдрес) Экспорт + + СписокРабочихМест = МенеджерОборудованияВызовСервера.ПривязатьРабочееМестоПоMACАдресу(ИдентификаторКлиента, MACАдрес); + Если СписокРабочихМест.Количество()=0 Тогда + Возврат; + КонецЕсли; + РабочееМесто = СписокРабочихМест[0]; + ПодключаемоеОборудование().РабочееМесто = РабочееМесто; + Оповестить("ИзмененоРабочееМестоТекущегоСеанса", РабочееМесто); + +КонецПроцедуры + +Процедура ОпределитьРабочееМесто(СоздаватьРабочееМесто = Ложь) Экспорт + + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + ПараметрыРабочегоМеста = ПодключаемоеОборудование.ПараметрыРабочегоМеста; + ЗаписанныеРеквизиты = ПараметрыРабочегоМеста.ЗаписанныеРеквизитыПоиска; + АктуальныеРеквизиты = ПараметрыРабочегоМеста.АктуальныеРеквизитыПоиска; + ИзменилисьЗаписанныеРеквизитыРабочегоМеста = Ложь; + ИзменилисьАктуальныеРеквизитыРабочегоМеста = Ложь; + + + РабочееМесто = ПараметрыРабочегоМеста.РабочееМесто; + Если ЗначениеЗаполнено(РабочееМесто) Тогда + Если ИзменилисьЗаписанныеРеквизитыРабочегоМеста Тогда + МенеджерОборудованияВызовСервера.ОбновитьРеквизитыРабочегоМеста(РабочееМесто, АктуальныеРеквизиты); + ПараметрыРабочегоМеста.ЗаписанныеРеквизитыПоиска = АктуальныеРеквизиты; + КонецЕсли; + Иначе + Если ИзменилисьАктуальныеРеквизитыРабочегоМеста Или СоздаватьРабочееМесто Тогда + РабочееМесто = МенеджерОборудованияВызовСервера.ОбновитьРабочееМестоКлиента(АктуальныеРеквизиты, СоздаватьРабочееМесто); + ПараметрыРабочегоМеста.РабочееМесто = РабочееМесто; + ПараметрыРабочегоМеста.ЗаписанныеРеквизитыПоиска = АктуальныеРеквизиты; + КонецЕсли; + КонецЕсли; + + // вызывается при начале работы системы + // исходные данные: + // ИД, Имя компьютера, МАС-адрес пока не известен + // попытаться найти рабочее место по ИД, имени компьютера + // в веб клиенте не нужно искать по имени компьютера т.к. имя компьютера не получить + + + // вызывается после получения МАС адресов + // ИД, Имя компьютера, МАС-адреса + // если заполнены рквизиты тогда найти рабочее место по ИД, имени компьютера, МАС адресам + // если отличаются актуальные реквизиты и реквизиты из БД + // перезаписать рабочее место + + // вызывается после получения МАС адресов и установке компоненты расширения + + +КонецПроцедуры + + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Производит обработку данных события, полученных от клиента. +// +// Параметры: +// Подключение - Структура +// ОписаниеСобытия - Структура: +// * Источник - Строка - Источник внешнего события. +// * Событие - Строка - Наименование события. +// * Данные - Строка - Данные для события. +// ОписаниеОшибки - Строка - описание ошибки +// +// Возвращаемое значение: +// Булево. +// +Функция ОбработатьСобытиеОтНесертифицираванногоДрайвера(Подключение, ОписаниеСобытия, ОписаниеОшибки = "") Экспорт + + Данные = ОписаниеСобытия.Данные; + Событие = ОписаниеСобытия.Событие; + Результат = Истина; + СтандартнаяОбработка = Истина; + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяНесертифицированноеОборудование() Тогда + МодульОборудованиеНесертифицированноеКлиентПереопределяемый = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеНесертифицированноеКлиентПереопределяемый"); + МодульОборудованиеНесертифицированноеКлиентПереопределяемый.ОбработатьСобытие(Подключение, Событие, Данные, СтандартнаяОбработка); + Если СтандартнаяОбработка Тогда + Событие = Подключение.ИменаСобытий.Найти(ОписаниеСобытия.Событие); + Если Событие <> Неопределено Тогда + Если Результат Тогда + Оповестить(Событие, Данные, "ПодключаемоеОборудование"); + Иначе + Результат = Ложь; + ОписаниеОшибки = ОписаниеСобытия.Событие; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#Область ПолучениеMACАдреса + +Процедура НачатьПодключениеРасширенияПолученияИнформацииОКомпьютере_Завершение(Результат, Контекст) Экспорт + + ОбработкаОповещения = Контекст.ОбработкаОповещения; + УстанавливатьРасширение = Контекст.УстанавливатьРасширение; + ЗапускПриложения = Контекст.ЗапускПриложения; + + Если Результат Тогда + ВыполнитьПолучениеИнформацииОСетевыхАдаптерах(ОбработкаОповещения); + Иначе + Если ЗапускПриложения Тогда + // при запуске приложения не нужно создавать рабочее место, + // т.к. еще не устанавливалось расширение работы с браузером, + // расширение будет установлено позднее при обращении к оборудованию. + Возврат; + КонецЕсли; + Если УстанавливатьРасширение Тогда + ВыполнитьУстановкуРасширенияСПомощьюБПО(ОбработкаОповещения); + Иначе + Если ОбработкаОповещения <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ОбработкаОповещения, Неопределено); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьУстановкуРасширенияСПомощьюБПО(ОбработкаОповещения) + + ИмяПараметра = "БПО.ВыполнятьУстановкуРасширенияИнформацииОКомпьютере"; + ВыполнятьУстановку = ОбщегоНазначенияБПОКлиент.ПараметрПриложения(ИмяПараметра); + Если ВыполнятьУстановку = Неопределено Тогда + ВыполнятьУстановку = Истина; + КонецЕсли; + Если ВыполнятьУстановку Тогда + Оповещение = Новый ОписаниеОповещения("ПоказатьВопросНачатьПодключениеРасширения_Завершение", ЭтотОбъект, ОбработкаОповещения); + ОткрытьФорму("ОбщаяФорма.ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО",,,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Иначе + Если ОбработкаОповещения <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ОбработкаОповещения, Неопределено); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПоказатьВопросНачатьПодключениеРасширения_Завершение(Результат, ОбработкаОповещения) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда +#Если ВебКлиент Тогда + Оповещение = Новый ОписаниеОповещения("НачатьУстановкуРасширенияПолученияИнформацииОКомпьютере_Завершение", ЭтотОбъект, ОбработкаОповещения); + НачатьУстановкуРасширенияПолученияИнформацииОКомпьютере(Оповещение); +#КонецЕсли + Иначе + + УстановитьРежимПодключенияРасширенияИнформацииОКомпьютере(Ложь); + + Если ОбработкаОповещения <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ОбработкаОповещения, Неопределено); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура НачатьУстановкуРасширенияПолученияИнформацииОКомпьютере_Завершение(ОбработкаОповещения) Экспорт + + Контекст = Новый Структура(); + Контекст.Вставить("ОбработкаОповещения", ОбработкаОповещения); + Контекст.Вставить("УстанавливатьРасширение", Ложь); // если расширение не установилось, повторно не устанавливать + Контекст.Вставить("ЗапускПриложения", Ложь); + +#Если ВебКлиент Тогда + Оповещение = Новый ОписаниеОповещения("НачатьПодключениеРасширенияПолученияИнформацииОКомпьютере_Завершение", ЭтотОбъект, Контекст); + НачатьПодключениеРасширенияПолученияИнформацииОКомпьютере(Оповещение); +#КонецЕсли + +КонецПроцедуры + +Процедура ВыполнитьПолучениеИнформацииОСетевыхАдаптерах(ОбработкаОповещения) Экспорт + +#Если МобильныйКлиент Или МобильноеПриложениеКлиент Тогда + + НачатьПолучениеИнформацииОСетевыхАдаптерахЗавершение(Новый Массив(), ОбработкаОповещения); + +#Иначе + Оповещение = Новый ОписаниеОповещения("НачатьПолучениеИнформацииОСетевыхАдаптерахЗавершение", ЭтотОбъект, ОбработкаОповещения); + НачатьПолучениеИнформацииОСетевыхАдаптерах(Оповещение); + +#КонецЕсли + +КонецПроцедуры + +Процедура НачатьПолучениеИнформацииОСетевыхАдаптерахЗавершение(Результат, ОбработкаОповещения) Экспорт + + MACАдреса = Новый Массив; + Для Каждого ИнформацияОбАдаптере Из Результат Цикл + MACАдреса.Добавить(ИнформацияОбАдаптере.MACАдрес); + КонецЦикла; + ПодключаемоеОборудование().MACАдреса = MACАдреса; + + Если ОбработкаОповещения <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ОбработкаОповещения, MACАдреса); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПодключениеОборудования + +// Начать подключения устройств. +// +// Параметры: +// ИдентификаторКлиента - УникальныйИдентификатор - уникальный идентификатор клиента. +// ТипыПО - Структура, Массив из Строка, Строка - тип оборудования для выбора устройства. +// ИдентификаторУстройства - Массив из Строка, СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// СетевоеОборудование - Булево - использовать сетевое оборудование при подключении. +// +// Возвращаемое значение: +// Структура - Результаты подключения устройств. +// +Функция УстройстваДляПодключения(ИдентификаторКлиента, ТипыПО = Неопределено, ИдентификаторУстройства = Неопределено, СетевоеОборудование = Ложь) + + ПодключенноеОборудование = Новый Массив(); // Результаты подключения устройств + ОборудованиеДляПодключения = Новый Массив(); + + ТекущийЯзык = ТекущийЯзык(); + КодЯзыкаПользователя = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка); + + Если ЭтоСписокОборудования(ТипыПО) Тогда + СписокОборудования = ТипыПО; + Иначе + ОборудованияОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + ОборудованияОтбор.ТипыПО = ТипыПО; + ОборудованияОтбор.Идентификатор = ИдентификаторУстройства; + ОборудованияОтбор.СетевоеОборудование = СетевоеОборудование; + ОборудованияОтбор.КодЯзыка = КодЯзыкаПользователя; + СписокОборудования = МенеджерОборудованияВызовСервера.СписокОборудования(ОборудованияОтбор); + КонецЕсли; + + Если СписокОборудования.Количество() > 0 Тогда + Для Каждого Устройство Из СписокОборудования Цикл + // Проверим, не подключено ли устройство ранее. + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(Устройство.Ссылка); + Если ПодключенноеУстройство = Неопределено Тогда // Если устройство не было подключено ранее. + + Если Устройство.СетевоеОборудование И НЕ Устройство.ДоступноТекущемуПользователю Тогда + ОписаниеОшибки = НСтр("ru='Нет прав на использование для текущего пользователя.'"); + Результат = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Результат.ИдентификаторОбъекта = Устройство.ИдентификаторОбъекта; + ПодключенноеОборудование.Добавить(Результат); + Продолжить; + КонецЕсли; + + ОборудованиеДляПодключения.Добавить(Устройство); + + Иначе // Устройство было подключено ранее. + // Увеличим количество пользователей данного соединения. + ПодключенноеУстройство.Клиенты.Добавить(ИдентификаторКлиента); + ПодключенноеУстройство.КоличествоПодключенных = ПодключенноеУстройство.КоличествоПодключенных + 1; + Результат = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, Неопределено, Устройство.Ссылка); + Результат.ПодключенноеУстройство = ПодключенноеУстройство; + Результат.ИдентификаторОбъекта = Устройство.ИдентификаторОбъекта; + ПодключенноеОборудование.Добавить(Результат); + КонецЕсли; + КонецЦикла; + + ИначеЕсли ИдентификаторУстройства <> Неопределено Тогда + ОписаниеОшибки = + НСтр("ru='Устройство отсутствует на текущем рабочем месте и не может использоваться для подключения. Укажите другое устройство.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ПодключенноеОборудование.Добавить(РезультатВыполнения); + ИначеЕсли ТипыПО = Неопределено И ИдентификаторУстройства = Неопределено Тогда + ОписаниеОшибки = НСтр("ru='Нет доступного оборудования для подключения.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ПодключенноеОборудование.Добавить(РезультатВыполнения); + КонецЕсли; + + Результат = Новый Структура(); + Результат.Вставить("ПодключенноеОборудование", ПодключенноеОборудование); + Результат.Вставить("ОборудованиеДляПодключения", ОборудованиеДляПодключения); + Возврат Результат; + +КонецФункции + +Процедура ЗаполнитьПоддерживаемыеТипыПодключаемогоОборудованияНаФорме(Форма, ПоддерживаемыеТипыПодключаемогоОборудования) + + Если ПоддерживаемыеТипыПодключаемогоОборудования = Неопределено Тогда + ПоддерживаемыеТипыПодключаемогоОборудования = ""; + КонецЕсли; + + Если ТипЗнч(Форма.ПоддерживаемыеТипыПодключаемогоОборудования) = Тип("Строка") Тогда + + Если ТипЗнч(ПоддерживаемыеТипыПодключаемогоОборудования) = Тип("Структура") Тогда + Форма.ПоддерживаемыеТипыПодключаемогоОборудования = СтруктураТипОборудованияВСтроку(ПоддерживаемыеТипыПодключаемогоОборудования); + Иначе + Форма.ПоддерживаемыеТипыПодключаемогоОборудования = ПоддерживаемыеТипыПодключаемогоОборудования; + КонецЕсли; + + ИначеЕсли ТипЗнч(Форма.ПоддерживаемыеТипыПодключаемогоОборудования) = Тип("Структура") Тогда + + Форма.ПоддерживаемыеТипыПодключаемогоОборудования = ПоддерживаемыеТипыПодключаемогоОборудования; + + ИначеЕсли ТипЗнч(Форма.ПоддерживаемыеТипыПодключаемогоОборудования) = Тип("Массив") Тогда + + ТипыОборудования = МассивТиповОборудования(ПоддерживаемыеТипыПодключаемогоОборудования); + Форма.ПоддерживаемыеТипыПодключаемогоОборудования = ТипыОборудования; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОтключениеОборудования + +// Функция отключает устройства +// +// Параметры: +// ИдентификаторКлиента - УникальныйИдентификатор +// ТипыПО - Структура, Массив из Строка, Строка - тип оборудования для отключения устройств. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - отключаемое устройство. +// +// Возвращаемое значение: +// Массив из СправочникСсылка.ПодключаемоеОборудование - Результаты отключения устройств. +// +Функция УстройстваДляОтключения(ТипыПО = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт + + ОтключенноеОборудование = Новый Массив(); // Результаты отключения устройств + ПодключаемоеОборудование = ПодключаемоеОборудование(); + + Если ТипыПО <> Неопределено Тогда + ПодключенныеУстройства = ПолучитьПодключенныеУстройства(ТипыПО); + ИначеЕсли ИдентификаторУстройства <> Неопределено Тогда + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(ИдентификаторУстройства); + Если ПодключенноеУстройство <> Неопределено Тогда + ПодключенныеУстройства = Новый Массив(); + ПодключенныеУстройства.Добавить(ПодключенноеУстройство); + Иначе + Возврат ОтключенноеОборудование; + КонецЕсли; + Иначе + Возврат ОтключенноеОборудование; + КонецЕсли; + + Возврат ПодключенныеУстройства; + +КонецФункции + +#КонецОбласти + +#Область ККТ + +// Процедура дополнительной обработки ошибки. +// +// Параметры: +// РезультатВыполнения - Структура +// +Процедура ДополнительнаяОбработкаОшибки(РезультатВыполнения) + + ОписаниеОшибки = РезультатВыполнения.ОписаниеОшибки; + + Если СтрНайти(ВРег(ОписаниеОшибки), ВРег(НСтр("ru='Не поддерживается в данной версии'"))) > 0 Тогда + ОписаниеОшибки = НСтр("ru='Не поддерживается в данной версии.'") + + Символы.НПП + НСтр("ru='Обновите прошивку ККТ до актуальной версии.'"); + КонецЕсли; + + РезультатВыполнения.ОписаниеОшибки = ОписаниеОшибки; + +КонецПроцедуры + +// Функция возвращает идентификатор открытой сессии для фискального устройства. +// +// Параметры: +// ИдентификаторУстройства - УникальныйИдентификатор - Идентификатор устройства +// +// Возвращаемое значение: +// Неопределено - Сессия проверки кодов маркировки +Функция СессияПроверкиКодовМаркировки(ИдентификаторУстройства) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ФискальныеУстройства = ПодключаемоеОборудование.ФискальныеУстройства; + + ИдентификаторСессии = Неопределено; + Для Каждого ФискальноеУстройство Из ФискальныеУстройства Цикл + Если ФискальноеУстройство.ИдентификаторУстройства = ИдентификаторУстройства Тогда + ИдентификаторСессии = ФискальноеУстройство.ИдентификаторСессии; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ИдентификаторСессии; + +КонецФункции + +// Процедура сохраняет идентификатор открытой сессии для фискального устройства. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Устройство. +// ИдентификаторСессии - Строка +// ИдентификаторЗапроса - Строка +// +Процедура УстановитьСессиюПроверкиКодовМаркировки(ИдентификаторУстройства, ИдентификаторСессии = Неопределено, ИдентификаторЗапроса = Неопределено) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ФискальныеУстройства = ПодключаемоеОборудование.ФискальныеУстройства; + + Для Каждого ФискальноеУстройство Из ФискальныеУстройства Цикл + Если ФискальноеУстройство.ИдентификаторУстройства = ИдентификаторУстройства Тогда + ФискальноеУстройство.ИдентификаторСессии = ИдентификаторСессии; + Возврат; + КонецЕсли; + КонецЦикла; + + ФискальноеУстройство = Новый Структура(); + ФискальноеУстройство.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + ФискальноеУстройство.Вставить("ИдентификаторСессии" , ИдентификаторСессии); + ФискальноеУстройство.Вставить("ИдентификаторЗапроса", ИдентификаторЗапроса); + ФискальныеУстройства.Добавить(ФискальноеУстройство); + +КонецПроцедуры + +// Функция возвращает проверяет ли устройство код маркировки. +// +// Параметры: +// ИдентификаторУстройства - УникальныйИдентификатор -Идентификатор устройства +// +// Возвращаемое значение: +// Структура - Проверка кода маркировки: +// * ИдентификаторСессии - УникальныйИдентификатор. +// * ИдентификаторЗапроса - УникальныйИдентификатор. +// +Функция ПроверкаКодаМаркировки(ИдентификаторУстройства) Экспорт + + Результат = Новый Структура(); + Результат.Вставить("ИдентификаторСессии"); + Результат.Вставить("ИдентификаторЗапроса"); + Результат.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ФискальныеУстройства = ПодключаемоеОборудование.ФискальныеУстройства; + + Для Каждого ФискальноеУстройство Из ФискальныеУстройства Цикл + Если ФискальноеУстройство.ИдентификаторУстройства = ИдентификаторУстройства Тогда + Результат.ИдентификаторСессии = ФискальноеУстройство.ИдентификаторСессии; + Результат.ИдентификаторЗапроса = ФискальноеУстройство.ИдентификаторЗапроса; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Процедура сохраняет статус проверки кода маркировки. +// +// Параметры: +// ИдентификаторУстройства - УникальныйИдентификатор - Идентификатор устройства. +// ИдентификаторЗапроса - Неопределено - Идентификатор запроса +// +Процедура УстановитьПроверкуКодаМаркировки(ИдентификаторУстройства, ИдентификаторЗапроса = Неопределено) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ФискальныеУстройства = ПодключаемоеОборудование.ФискальныеУстройства; + + Для Каждого ФискальноеУстройство Из ФискальныеУстройства Цикл + Если ФискальноеУстройство.ИдентификаторУстройства = ИдентификаторУстройства Тогда + ФискальноеУстройство.ИдентификаторЗапроса = ИдентификаторЗапроса; + Возврат; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Результат проверки кода маркировки. +// +// Параметры: +// ИдентификаторУстройства - УникальныйИдентификатор - Идентификатор устройства +// ИдентификаторСессии - УникальныйИдентификатор - Идентификатор сессии +// ПараметрыЗапросаКМ -Структура - Параметры запроса КМ. +// +// Возвращаемое значение: +// Неопределено - Результат проверки кода маркировки +Функция РезультатПроверкиКодаМаркировки(ИдентификаторУстройства, ИдентификаторСессии, ПараметрыЗапросаКМ) Экспорт + + РезультатПроверки = Неопределено; + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ПроверкиКодаМаркировки = ПодключаемоеОборудование.ПроверкиКодаМаркировки; + + Для Каждого ПроверкаКодаМаркировки Из ПроверкиКодаМаркировки Цикл + Если ПроверкаКодаМаркировки.ИдентификаторУстройства = ИдентификаторУстройства + И ПроверкаКодаМаркировки.ИдентификаторСессии = ИдентификаторСессии + И ПроверкаКодаМаркировки.ПараметрыЗапросаКМ.КонтрольнаяМарка = ПараметрыЗапросаКМ.КонтрольнаяМарка + И ПроверкаКодаМаркировки.ПараметрыЗапросаКМ.Количество = ПараметрыЗапросаКМ.Количество + И ПроверкаКодаМаркировки.ПараметрыЗапросаКМ.ПланируемыйСтатусТовара = ПараметрыЗапросаКМ.ПланируемыйСтатусТовара Тогда + РезультатПроверки = ПроверкаКодаМаркировки.РезультатПроверки; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат РезультатПроверки; + +КонецФункции + +// Процедура устанавливает результат проверки кода маркировки. +// +// Параметры: +// ИдентификаторУстройства - УникальныйИдентификатор - Идентификатор устройства. +// ИдентификаторСессии - УникальныйИдентификатор +// ПараметрыЗапросаКМ - Структура +// РезультатПроверки - Структура +// ИдентификаторЗапроса - УникальныйИдентификатор +// +Процедура УстановитьРезультатПроверкиКодаМаркировки(ИдентификаторУстройства, ИдентификаторСессии, ПараметрыЗапросаКМ, РезультатПроверки, ИдентификаторЗапроса = Неопределено) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ФискальныеУстройства = ПодключаемоеОборудование.ФискальныеУстройства; + Для Каждого ФискальноеУстройство Из ФискальныеУстройства Цикл + Если ФискальноеУстройство.ИдентификаторУстройства = ИдентификаторУстройства Тогда + ФискальноеУстройство.ИдентификаторЗапроса = ИдентификаторЗапроса; + Прервать; + КонецЕсли; + КонецЦикла; + + ПроверкиКодаМаркировки = ПодключаемоеОборудование.ПроверкиКодаМаркировки; + Для Каждого ПроверкаКодаМаркировки Из ПроверкиКодаМаркировки Цикл + Если ПроверкаКодаМаркировки.ИдентификаторУстройства = ИдентификаторУстройства + И ПроверкаКодаМаркировки.ИдентификаторСессии = ИдентификаторСессии + И ПроверкаКодаМаркировки.ПараметрыЗапросаКМ.КонтрольнаяМарка = ПараметрыЗапросаКМ.КонтрольнаяМарка + И ПроверкаКодаМаркировки.ПараметрыЗапросаКМ.Количество = ПараметрыЗапросаКМ.Количество + И ПроверкаКодаМаркировки.ПараметрыЗапросаКМ.ПланируемыйСтатусТовара = ПараметрыЗапросаКМ.ПланируемыйСтатусТовара Тогда + ПроверкаКодаМаркировки.РезультатПроверки = РезультатПроверки; + Возврат; + КонецЕсли; + КонецЦикла; + + ПроверкаКодаМаркировки = Новый Структура(); + ПроверкаКодаМаркировки.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + ПроверкаКодаМаркировки.Вставить("ИдентификаторСессии", ИдентификаторСессии); + ПроверкаКодаМаркировки.Вставить("ПараметрыЗапросаКМ" , ПараметрыЗапросаКМ); + ПроверкаКодаМаркировки.Вставить("РезультатПроверки" , РезультатПроверки); + + ПроверкиКодаМаркировки.Добавить(ПроверкаКодаМаркировки); + +КонецПроцедуры + +#КонецОбласти + +#Область ВыполнениеКоманды + +// Завершение выполнение команды +// +// Параметры: +// РезультатОперации - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура ЗавершениеВыполнениеКоманды(РезультатОперации, ПараметрыВыполнениеКоманды) Экспорт + + Если ПараметрыВыполнениеКоманды.Свойство("СообщенияВСлужбуТехническойПоддержки") + И ПараметрыВыполнениеКоманды.СообщенияВСлужбуТехническойПоддержки + И ОбщегоНазначенияБПОКлиент.ИспользуетсяСообщенияВСлужбуТехническойПоддержки() Тогда + + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиБПОКлиент"); + + Если Не РезультатОперации.Результат Тогда + + Если НЕ ЛокальнаяОбработкаОшибкиПроизведена(ПараметрыВыполнениеКоманды.ИдентификаторУстройства, РезультатОперации.ОписаниеОшибки) Тогда + ПараметрыВыполнениеКоманды.Вставить("РезультатВыполненияОперации", РезультатОперации); + ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершениеВыполнениеКоманды_ПроверкаРезультата", ЭтотОбъект, ПараметрыВыполнениеКоманды); + + ДополнительныеДанные = Новый Структура(); + ДополнительныеДанные.Вставить("Операция", ПараметрыВыполнениеКоманды.Команда); + ДополнительныеДанные.Вставить("ОписаниеОшибки", РезультатОперации.ОписаниеОшибки); + ДополнительныеДанные.Вставить("ПараметрыОперации", ПараметрыВыполнениеКоманды.ПараметрыОперации); + + ТекстВопроса = СтрШаблон(НСтр("ru = '%1 + | + |Создать сообщение об ошибке в службу поддержки?'"), РезультатОперации.ОписаниеОшибки); + + Параметры = МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ПараметрыОтправкиСообщенияОбОшибке(); + Параметры.Вставить("ИдентификаторОборудования", ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + Параметры.Вставить("ТекстОшибки", РезультатОперации.ОписаниеОшибки); + Параметры.Вставить("ДополнительныеДанные", ДополнительныеДанные); + Параметры.Вставить("ТекстВопроса", ТекстВопроса); + + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ПоказатьВопросОправкиСообщенияОбОшибке(ОписаниеОповещения, Параметры); + + Возврат; // Вызов оповещения будет выполнен в процедуре ЗавершениеВыполнениеКоманды_ПроверкаРезультата + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатОперации); + +КонецПроцедуры + +// Завершает проверку результата операции +// +// Параметры: +// Результат - Структура +// ПараметрыВыполнениеКоманды - см. ПараметрыПроверкиРезультатаОперации +// +Процедура ЗавершениеВыполнениеКоманды_ПроверкаРезультата(Результат, ПараметрыВыполнениеКоманды) Экспорт + + Если ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, ПараметрыВыполнениеКоманды.РезультатВыполненияОперации); + КонецЕсли; + +КонецПроцедуры + +Функция ЛокальнаяОбработкаОшибкиПроизведена(ИдентификаторУстройства, ОписаниеОшибки) + + Результат = Ложь; + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Если ПодключаемоеОборудование.Свойство("ЛокальнаяОбработкаОшибок") Тогда + ЛокальнаяОбработкаОшибок = ПодключаемоеОборудование.ЛокальнаяОбработкаОшибок; + Иначе + ЛокальнаяОбработкаОшибок = Неопределено; + КонецЕсли; + + Если ЛокальнаяОбработкаОшибок = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Для Каждого ЛокальнаяОшибка Из ЛокальнаяОбработкаОшибок Цикл + Если СтрНачинаетсяС(ОписаниеОшибки, ЛокальнаяОшибка.ТекстОшибки) Тогда + ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + ЛокальнаяОшибка.ТекстСообщения; + Результат = Истина; + Возврат Результат; + КонецЕсли; + КонецЦикла; + + Если Не МенеджерОборудованияВызовСервера.ДрайверПоставляетсяВКонфигурации(ИдентификаторУстройства) Тогда + ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + НСтр("ru = 'Обратитесь, пожалуйста, за помощью к поставщику драйвера.'"); + Результат = Истина; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область РабочиеМеста + +Функция АктуальныеРеквизитыРабочегоМеста() + + РеквизитыРабочегоМеста = МенеджерОборудованияКлиентСервер.НовыеРеквизитыПоискаРабочегоМеста(); + + РеквизитыРабочегоМеста.ИдентификаторКлиента = МенеджерОборудованияКлиентСервер.ИдентификаторКлиентаДляРабочегоМеста(); + РеквизитыРабочегоМеста.ИмяКомпьютера = ОбщегоНазначенияБПОКлиент.ИмяКомпьютераКлиента(); + РеквизитыРабочегоМеста.MACАдреса = ПодключаемоеОборудование().MACАдреса; + + Возврат РеквизитыРабочегоМеста; + +КонецФункции + + +#КонецОбласти + +#Область УпрощениеНастройкиПараметров + +// Возвращает словарь реквизитов и возможных вариантов имен параметров производителя драйверов +// +// Возвращаемое значение: +// см. МенеджерОборудованияКлиентПовтИсп.СловарьКлючевыхСвойств +Функция СловарьКлючевыхСвойств() + + Возврат МенеджерОборудованияКлиентПовтИсп.СловарьКлючевыхСвойств(); + +КонецФункции + +// Возвращает имя параметра по имени параметра указанного в файле XML +// +// Параметры: +// ИмяПараметраXML - Строка - имя параметра оборудования заданное в файле XML +// Преобразование - Булево +// +// Возвращаемое значение: +// Строка, Неопределено - если имя параметра найдено в словаре, возвращает имя стандартного параметра +Функция ИмяКлючевогоПараметра(ИмяПараметраXML, Преобразование = Неопределено) + + Словарь = СловарьКлючевыхСвойств(); + + Для Каждого КлючЗначение Из Словарь Цикл + Если КлючЗначение.Значение.Свойство(ИмяПараметраXML, Преобразование) Тогда + Возврат КлючЗначение.Ключ; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +// Возвращает структуру атрибуты параметра +// +// Возвращаемое значение: +// Структура: +// * Стандартный - Булево - реквизит предусмотрен стандартами БПО +// * ИмяПараметраXML - Строка - имя параметра как оно задано у производителя оборудования +// * ИмяПараметра - Строка - имя стандартного параметра +// * ИмяРеквизита - Строка - имя реквизита, под которым хранится значение данного параметра в справочнике +// * ТолькоЧтение - Булево - параметр только для чтения +// * Тип - Тип - Тип значения параметра (Число, Строка, Булево) +// * Заголовок - Строка - заголовок параметра +// * ЗначениеПоУмолчанию - Число, Строка, Булево - значение параметра по умолчанию +// * Описание - Строка - описание параметра +// * СтрокаФорматирования - Строка - строка форматирования параметра +// * СписокВыбора - СписокЗначений из Строка - возможные варианты значения параметра +// +Функция НовыйАтрибутыПараметра() + + Результат = Новый Структура(); + Результат.Вставить("Стандартный", Ложь); + Результат.Вставить("ЗначениеСтандартного", ""); + Результат.Вставить("ИмяПараметраXML", ""); + Результат.Вставить("ИмяПараметра", ""); + Результат.Вставить("ИмяРеквизита", ""); + Результат.Вставить("ТолькоЧтение", Ложь); + Результат.Вставить("Тип", Тип("Число")); + Результат.Вставить("Заголовок", ""); + Результат.Вставить("ЗначениеПоУмолчанию", ""); + Результат.Вставить("Описание", ""); + Результат.Вставить("СтрокаФорматирования", ""); + Результат.Вставить("СписокВыбора", Новый СписокЗначений()); + Результат.Вставить("Преобразование", ""); + + Возврат Результат; +КонецФункции + +// Возвращает структуру атрибуты параметра +// +// Параметры: +// ЧтениеXML - ЧтениеXML - открытый для чтения объект XML +// +// Возвращаемое значение: +// Структура - см. НовыйАтрибутыПараметра +Функция ПрочитатьАтрибутыПараметра(ЧтениеXML) + + ИмяПараметраXML = ЧтениеXML.ЗначениеАтрибута("Name"); + Преобразование = Неопределено; + ИмяПараметра = ИмяКлючевогоПараметра(ИмяПараметраXML, Преобразование); + Если ИмяПараметра = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ЗначениеАтрибута = ВРег(ЧтениеXML.ЗначениеАтрибута("ReadOnly")); + ТолькоЧтение = (ЗначениеАтрибута = "TRUE" Или ЗначениеАтрибута = "ИСТИНА"); + + ЗначениеАтрибута = ВРег(ЧтениеXML.ЗначениеАтрибута("TypeValue")); + ПараметрТип = ?(НЕ ПустаяСтрока(ЗначениеАтрибута), ЗначениеАтрибута, "STRING"); + + Результат = НовыйАтрибутыПараметра(); + Результат.ИмяПараметраXML = ИмяПараметраXML; + Результат.ИмяПараметра = ИмяПараметра; + Результат.Тип = Тип(ПараметрТип); + Результат.ТолькоЧтение = ТолькоЧтение; + Результат.ИмяРеквизита = ?(ТолькоЧтение, "R_", "P_") + ИмяПараметраXML; + Результат.Заголовок = ЧтениеXML.ЗначениеАтрибута("Caption"); + Результат.Описание = ЧтениеXML.ЗначениеАтрибута("Description"); + Результат.Преобразование = Преобразование; + Результат.ЗначениеПоУмолчанию = ЧтениеXML.ЗначениеАтрибута("DefaultValue"); + Результат.СтрокаФорматирования = ЧтениеXML.ЗначениеАтрибута("FieldFormat"); + + Возврат Результат; +КонецФункции + +// Заполняет список выбора в атрибутах параметра из XML +// +// Параметры: +// АтрибутыПараметра - Структура - в которую нужно занести список выбора +// ЧтениеXML - ЧтениеXML - открытый для чтения объект XML +Процедура ПрочитатьСписокВыбора(АтрибутыПараметра, ЧтениеXML) + + #Если Не ВебКлиент Тогда + СписокВыбора = Новый СписокЗначений(); + АтрибутыПараметра.Вставить("СписокВыбора", СписокВыбора); + + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя = "ChoiceList" И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда + Прервать; + ИначеЕсли ЧтениеXML.Имя = "Item" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Значение = ЧтениеXML.ЗначениеАтрибута("Value"); + ИначеЕсли ЧтениеXML.Имя = "#text" И ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда + Представление = ЧтениеXML.Значение; + ИначеЕсли ЧтениеXML.Имя = "Item" И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда + СписокВыбора.Добавить(Значение, Представление); + КонецЕсли; + КонецЦикла; + #КонецЕсли + +КонецПроцедуры + +// Заполнить структуру стандартных параметров по описанию интерфейса +// +// Параметры: +// ОписаниеИнтерфейса - Строка - строка XML в которой находится описание интерфейса +// КлючевыеПараметры - Структура - структура содержащая найденные ключевые параметры и их атрибуты +Процедура ПрочитатьАтрибутыКлючевыхПараметров(ОписаниеИнтерфейса, КлючевыеПараметры) + + #Если Не ВебКлиент Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ОписаниеИнтерфейса); + ЧтениеXML.ПерейтиКСодержимому(); + + АтрибутыПараметра = Неопределено; + Если ЧтениеXML.Имя = "Settings" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя = "ChoiceList" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если АтрибутыПараметра <> Неопределено Тогда + ПрочитатьСписокВыбора(АтрибутыПараметра, ЧтениеXML); + КонецЕсли; + ИначеЕсли ЧтениеXML.Имя = "Parameter" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + АтрибутыПараметра = ПрочитатьАтрибутыПараметра(ЧтениеXML); + Если АтрибутыПараметра <> Неопределено Тогда + КлючевыеПараметры.Вставить(АтрибутыПараметра.ИмяПараметра, АтрибутыПараметра); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + +Процедура ДобавитьПараметрЛогДрайвераВключен(КлючевыеПараметры, Значение) + + АтрибутыПараметра = НовыйАтрибутыПараметра(); + АтрибутыПараметра.Стандартный = Истина; + АтрибутыПараметра.ИмяПараметраXML = ""; + АтрибутыПараметра.ИмяПараметра = "LogEnabled"; + АтрибутыПараметра.Тип = Тип("Булево"); + АтрибутыПараметра.ТолькоЧтение = Истина; + АтрибутыПараметра.ИмяРеквизита = ""; + АтрибутыПараметра.Заголовок = НСтр("ru = 'Включен лог'"); + АтрибутыПараметра.Описание = ""; + АтрибутыПараметра.Преобразование = ""; + АтрибутыПараметра.ЗначениеСтандартного = Значение; + АтрибутыПараметра.ЗначениеПоУмолчанию = Ложь; + АтрибутыПараметра.СтрокаФорматирования = ""; + + КлючевыеПараметры.Вставить(АтрибутыПараметра.ИмяПараметра, АтрибутыПараметра); + +КонецПроцедуры + +Процедура ДобавитьПараметрЛогДрайвераПутьКФайлу(КлючевыеПараметры, Значение) + + АтрибутыПараметра = НовыйАтрибутыПараметра(); + АтрибутыПараметра.Стандартный = Истина; + АтрибутыПараметра.ИмяПараметраXML = ""; + АтрибутыПараметра.ИмяПараметра = "LogPath"; + АтрибутыПараметра.Тип = Тип("Строка"); + АтрибутыПараметра.ТолькоЧтение = Истина; + АтрибутыПараметра.ИмяРеквизита = ""; + АтрибутыПараметра.Заголовок = НСтр("ru = 'Путь к log-файлу'"); + АтрибутыПараметра.Описание = ""; + АтрибутыПараметра.Преобразование = ""; + АтрибутыПараметра.ЗначениеСтандартного = Значение; + АтрибутыПараметра.ЗначениеПоУмолчанию = ""; + АтрибутыПараметра.СтрокаФорматирования = ""; + + КлючевыеПараметры.Вставить(АтрибутыПараметра.ИмяПараметра, АтрибутыПараметра); + +КонецПроцедуры + +#КонецОбласти + +Функция ПодключаемоеОборудованиеНаФорме(Форма) + + ЗначенияСвойств = Новый Структура("ПодключаемоеОборудованиеБПО", Null); + ЗаполнитьЗначенияСвойств(ЗначенияСвойств, Форма); + + Результат = ЗначенияСвойств.ПодключаемоеОборудованиеБПО; + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ЭтоСписокОборудования(Список) + Возврат ТипЗнч(Список) = Тип("Массив") И Список.Количество() > 0 И ТипЗнч(Список[0]) = Тип("Структура"); +КонецФункции + +// Проверка существуют ли реквизиты на форме +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// ИменаРеквизитов - Строка - Имена реквизитов формы через запятую +// +Функция СуществуютРеквизитыНаФорме(Форма, ИменаРеквизитов) + + МассивРеквизитов = СтрРазделить(ИменаРеквизитов,",", Ложь); + + ЗначенияСвойств = Новый Структура(ИменаРеквизитов); + Для Каждого ИмяРеквизита Из МассивРеквизитов Цикл + ЗначенияСвойств.Вставить(ИмяРеквизита, Null); + КонецЦикла; + + ЗаполнитьЗначенияСвойств(ЗначенияСвойств, Форма); + + Для Каждого КлючЗначение Из ЗначенияСвойств Цикл + Если КлючЗначение.Значение = Null Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция ТекущийКлиентПоддерживаетсяКомпонентой(Реквизиты) + + СистемнаяИнформация = Новый СистемнаяИнформация; + + Браузер = Неопределено; +#Если ВебКлиент Тогда + Строка = СистемнаяИнформация.ИнформацияПрограммыПросмотра; + + Если СтрНайти(Строка, "Chrome/") > 0 Тогда + Браузер = "Chrome"; + ИначеЕсли СтрНайти(Строка, "MSIE") > 0 Тогда + Браузер = "MSIE"; + ИначеЕсли СтрНайти(Строка, "Safari/") > 0 Тогда + Браузер = "Safari"; + ИначеЕсли СтрНайти(Строка, "Firefox/") > 0 Тогда + Браузер = "Firefox"; + КонецЕсли; +#КонецЕсли + + Если Реквизиты.Свойство("ЦелевыеПлатформы") Тогда + ЦелевыеПлатформы = Реквизиты.ЦелевыеПлатформы; + Иначе + ЦелевыеПлатформы = Реквизиты; + КонецЕсли; + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда + + Если Браузер = Неопределено Тогда + Возврат ЦелевыеПлатформы.Linux_x86; + КонецЕсли; + + Если Браузер = "Firefox" Тогда + Возврат ЦелевыеПлатформы.Linux_x86_Firefox; + КонецЕсли; + + Если Браузер = "Chrome" Тогда + Возврат ЦелевыеПлатформы.Linux_x86_Chrome; + КонецЕсли; + + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда + + Если Браузер = Неопределено Тогда + Возврат ЦелевыеПлатформы.Linux_x86_64; + КонецЕсли; + + Если Браузер = "Firefox" Тогда + Возврат ЦелевыеПлатформы.Linux_x86_64_Firefox; + КонецЕсли; + + Если Браузер = "Chrome" Тогда + Возврат ЦелевыеПлатформы.Linux_x86_64_Chrome; + КонецЕсли; + + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86_64 Тогда + + Если Браузер = Неопределено Тогда + Возврат ЦелевыеПлатформы.MacOS_x86_64; + КонецЕсли; + + Если Браузер = "Safari" Тогда + Возврат ЦелевыеПлатформы.MacOS_x86_64_Safari; + КонецЕсли; + + Если Браузер = "Firefox" Тогда + Возврат ЦелевыеПлатформы.MacOS_x86_64_Firefox; + КонецЕсли; + + Если Браузер = "Chrome" Тогда + Возврат ЦелевыеПлатформы.MacOS_x86_64_Chrome; + КонецЕсли; + + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда + + Если Браузер = Неопределено Тогда + Возврат ЦелевыеПлатформы.Windows_x86; + КонецЕсли; + + Если Браузер = "Firefox" Тогда + Возврат ЦелевыеПлатформы.Windows_x86_Firefox; + КонецЕсли; + + Если Браузер = "Chrome" Тогда + Возврат ЦелевыеПлатформы.Windows_x86_Chrome; + КонецЕсли; + + Если Браузер = "MSIE" Тогда + Возврат ЦелевыеПлатформы.Windows_x86_MSIE; + КонецЕсли; + + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + + Если Браузер = Неопределено Тогда + Возврат ЦелевыеПлатформы.Windows_x86_64; + КонецЕсли; + + Если Браузер = "Firefox" Тогда + Возврат ЦелевыеПлатформы.Windows_x86_Firefox; + КонецЕсли; + + Если Браузер = "Chrome" Тогда + Возврат ЦелевыеПлатформы.Windows_x86_Chrome; + КонецЕсли; + + Если Браузер = "MSIE" Тогда + Возврат ЦелевыеПлатформы.Windows_x86_64_MSIE; + КонецЕсли; + + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86 Тогда + // В браузере может быть неправильно определен тип платформы. + + Если Браузер = "Firefox" Тогда + Возврат ЦелевыеПлатформы.MacOS_x86_64_Firefox; + КонецЕсли; + + Если Браузер = "Chrome" Тогда + Возврат ЦелевыеПлатформы.MacOS_x86_64_Chrome; + КонецЕсли; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция СтруктураТипОборудованияВСтроку(ТипыПО) + + МассивТипов = Новый Массив(); + Для Каждого КлючИЗначение Из ТипыПО Цикл + Если КлючИЗначение.Значение Тогда + МассивТипов.Добавить(КлючИЗначение.Ключ); + КонецЕсли; + КонецЦикла; + Возврат СтрСоединить(МассивТипов, ","); + +КонецФункции + +#КонецОбласти diff --git a/CommonModules/МенеджерОборудованияКлиентПереопределяемый.xml b/CommonModules/МенеджерОборудованияКлиентПереопределяемый.xml new file mode 100644 index 0000000..4720d5a --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиентПереопределяемый.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияКлиентПереопределяемый + + + ru + Менеджер оборудования клиент переопределяемый + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияКлиентПереопределяемый/Ext/Module.bsl b/CommonModules/МенеджерОборудованияКлиентПереопределяемый/Ext/Module.bsl new file mode 100644 index 0000000..424f21b --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиентПереопределяемый/Ext/Module.bsl @@ -0,0 +1,280 @@ + +#Область ПрограммныйИнтерфейс + +// Возвращает текущую дату, приведенную к часовому поясу сеанса. +// Предназначена для использования вместо функции ТекущаяДата(). +// +// Возвращаемое значение: +// Дата. +// +Функция ДатаСеанса() Экспорт + +КонецФункции + +#Область ОборудованиеККТ + +// Переопределяет доступное ККТ для фискализации чека +// Параметры: +// РеквизитыЧека - Структура - реквизиты фискального чека +// СписокУстройств - Массив - список доступных ККТ для фискализации +// ИдентификаторУстройстваККТ - СправочникСсылка.ПодключаемоеОборудование - выбранное ККТ для фискализации +// СтандартнаяОбработка - Булево - выполнение стандартной обработки +// +Процедура ДоступноеККТДляФискализации(РеквизитыЧека, СписокУстройств, ИдентификаторУстройстваККТ, СтандартнаяОбработка = Истина) Экспорт + +КонецПроцедуры + +// Переопределяет печать слип чека эквайринговой операции. +// Параметры: +// ПечатьСлипЧека - Булево - Определяет будет ли распечатан слип-чек, по умолчанию Истина. +// ПолныйСлипЧек - Булево - Определяет какой слип-чек будет распечатан полный или короткий, по умолчанию Истина. +// СтандартнаяОбработка - Булево - выполнение стандартной обработки. +// +Процедура ПечатьСлипЧекаЭквайринговойОперации(ПечатьСлипЧека, ПолныйСлипЧек, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Событие при открытии смены на ККТ +// Параметры: +// ИдентификаторУстройстваККТ - СправочникСсылка.ПодключаемоеОборудование - выбранное ККТ +// ПараметрыРегистрации - Структура - Параметры регистрации ФН +// +Процедура ПриОткрытииСменыНаККТ(ИдентификаторУстройстваККТ, ПараметрыРегистрации) Экспорт + +КонецПроцедуры + +#КонецОбласти + +// Переопределяет вывод QR-кода чека на дисплей покупателя после фискализации. +// Параметры: +// ВыводQRКодаЧека - Булево - Вывод QR-кода чека на дисплей покупателя +// СтандартнаяОбработка - Булево - выполнение стандартной обработки +// +Процедура ВыводQRКодаЧекаНаДисплейПокупателяПослеФискализации(ВыводQRКодаЧека, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Переопределяет формат события от устройств ввода. +// Параметры: +// НовыйФормат - Булево - Событие от устройств ввода работают в новом формате +// СтандартнаяОбработка - Булево - выполнение стандартной обработки +// +Процедура СобытиеУстройствВводаНовыйФормат(НовыйФормат, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Устанавливает режим требуется ли установка расширения 1С для работы в браузере +// +// Параметры: +// Режим - Булево - если Истина, тогда будет требуется установка расширения +// +Процедура УстановитьРежимПодключенияРасширенияИнформацииОКомпьютере(Режим) Экспорт + +КонецПроцедуры + +// Выполнить установку расширения 1С для работы в веб-клиенте. +// +// Параметры: +// Оповещение - Описание оповещения которое требуется вызвать после установки расширения +// Текст - Рекомендуемый текст для отображения при запросе установки расширения +// СтандартнаяОбработка - Булево - если Истина, тогда библиотека сама задаст вопрос +// пользователю и выполнить установку расширения +// +Процедура ВыполнитьУстановкуРасширения(Оповещение, Текст, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#Область РаботаСФормойЭкземпляраОборудования + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПриОткрытии". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - форма владелец. +// Отказ - Булево - признак отказа. +// +Процедура ЭкземплярОборудованияПриОткрытии(Объект, ЭтаФорма, Отказ) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПередЗакрытием". +// +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - форма владелец. +// Отказ - Булево - признак отказа. +// СтандартнаяОбработка - Булево - признак стандартной обработки. +// +Процедура ЭкземплярОборудованияПередЗакрытием(Объект, ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПередЗаписью". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - форма владелец. +// Отказ - Булево - признак отказа. +// ПараметрыЗаписи - Структура - параметры записи оборудования. +// +Процедура ЭкземплярОборудованияПередЗаписью(Объект, ЭтаФорма, Отказ, ПараметрыЗаписи) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПослеЗаписи". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - форма владелец. +// ПараметрыЗаписи - Структура - параметры записи оборудования. +// +Процедура ЭкземплярОборудованияПослеЗаписи(Объект, ЭтаФорма, ПараметрыЗаписи) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ОбработкаНавигационнойСсылки". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - форма владелец. +// НавигационнаяСсылкаФорматированнойСтроки - Строка - навигационная ссылка. +// СтандартнаяОбработка - Булево - признак стандартной обработки. +// +Процедура ЭкземплярОборудованияОбработкаНавигационнойСсылки(Объект, ЭтаФорма, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ТипОборудованияОбработкаВыбора". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - форма владелец. +// ЭтотОбъект - СправочникОбъект.ПодключаемоеОборудование - текущий объект подключаемого оборудования. +// Элемент - ПолеФормы - изменяемый элемент. +// ВыбранноеЗначение - ПеречислениеСсылка.ТипыПодключаемогоОборудования - выбранное значение. +// +Процедура ЭкземплярОборудованияТипОборудованияВыбор(Объект, ЭтаФорма, ЭтотОбъект, Элемент, ВыбранноеЗначение) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСФормойЭкземпляраФискальныеОперации + +// Дополнительные переопределяемые действия с управляемой формой в Фискальные операции +// при событии "ОбработкаНавигационнойСсылки". +// +// Параметры: +// Запись - РегистрСведенийМенеджерЗаписи.ФискальныеОперации +// ЭтаФорма - ФормаКлиентскогоПриложения +// НавигационнаяСсылкаФорматированнойСтроки - Строка +// СтандартнаяОбработка - Булево - признак стандартной обработки. +// +Процедура ФормаЗаписиФискальныеОперацииОбработкаНавигационнойСсылки(Запись, ЭтаФорма, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + + +#Область РаспределеннаяФискализации + +// Переопределяемые действия после открытия чека в очереди чеков. +// +// Параметры: +// ПараметрыВыполнения - Структура - Параметры выполнения команды +// ДополнительныеПараметры - Произвольный +// +Процедура ФискализацияЧековВОчередиПослеОткрытияЧека(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + +КонецПроцедуры + +// Переопределяемые действия после ошибки печати чека в очереди чеков. +// +// Параметры: +// ПараметрыВыполнения - Структура - Параметры выполнения команды +// ДополнительныеПараметры - Произвольный +// +Процедура ФискализацияЧековВОчередиПослеОшибкиПечатиЧека(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СообщениеВТехническуюПоддержку + +// В процедуре можно разрешить, либо запретить отправку сообщений БПО в тех. поддержку +// +// Параметры: +// Отправлять - Булево - при стандартной обработке Истина +// СтандартнаяОбработка - Булево - признак стандартной обработки. +// +Процедура ОтправлятьСообщенияВТехПоддержку(Отправлять, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Подготовка текста сообщения в службу технической поддержки +// +// Параметры: +// ТекстСообщения - Строка - текст сообщения который будет вставлен в поле "Шаблон сообщения" на сайте. +// ТекстОшибки - Строка - текст ошибки, переданный в процедуру отправки сообщения. +// +Процедура ПодготовитьТекстСообщенияВТехПоддержку(ТекстСообщения, ТекстОшибки) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область ПакетнаяОбработка + +// Процедура в которой можно сформировать текстовое содержание слип-чека +// +// Параметры: +// Тип - Строка - Тип слип-чека: +// "Обычный" - обычный слип-чек, печатаемый в теле фискального чека; +// "Электронный" - слип-чек, печатаемый в случае электронного фискального чека; +// "Отказ" - слип-чек, печатаемый в случае отказа выполнения эквайринговой операции, +// или же выполнения аварийной отмены эквайринговой операции. +// ДанныеДляШаблона - Структура - данные для формирования слип-чека: +// * ПараметрыФискализацииЧека - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - См. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * РезультатВыполненияЭквайринговойОперации - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * ДополнительныеПараметры - Структура - Дополнительные параметры переданные ранее в процедуру +// "НачатьФискализациюЧекаСОплатойКартой". +// Текст - Строка - Текст слип чека который будет выведен в теле фискального чека, может быть переопределен +// СтандартнаяОбработка - Булево - Если передано Ложь, тогда слип-чек нужно сформировать самостоятельно +// заполнив массив "ПараметрыФискализацииЧека.ПозицииЧека". +Процедура СформироватьШаблонСлипЧека(Тип, ДанныеДляШаблона, Текст, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: больше не используется +// Обработчик события получения идентификатора клиента для рабочегоМеста. +// +// Параметры: +// ИдентификаторКлиента - Строка, Неопределено - Идентификатор клиента +// СтандартнаяОбработка - Булево +// +Процедура ИдентификаторКлиентаДляРабочегоМеста(ИдентификаторКлиента, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Устарела: для обратной совместимости. +Процедура ОбработатьСобытие() Экспорт + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияКлиентПовтИсп.xml b/CommonModules/МенеджерОборудованияКлиентПовтИсп.xml new file mode 100644 index 0000000..b660c40 --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиентПовтИсп.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияКлиентПовтИсп + + + ru + Менеджер оборудования клиент повт исп + + + + false + true + false + false + true + false + false + DuringSession + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияКлиентПовтИсп/Ext/Module.bsl b/CommonModules/МенеджерОборудованияКлиентПовтИсп/Ext/Module.bsl new file mode 100644 index 0000000..484787c --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиентПовтИсп/Ext/Module.bsl @@ -0,0 +1,148 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает имя компьютера клиента. +// При первом обращении получает имя компьютера из переменной сеанса. +// +// Возвращаемое значение: +// СправочникСсылка.РабочиеМеста +// +Функция РабочееМестоКлиента() Экспорт + + Возврат МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + +КонецФункции + +// Возвращает имя компьютера клиента. +// При первом обращении получает имя компьютера из переменной сеанса. +// +// Параметры: +// ИдентификаторКлиента - Строка - идентификатор клиента для рабочего места +// ИмяКомпьютера - Строка - Имя компьютера +// WEBКлиент - Булево - Признак WEB клиента +// +// Возвращаемое значение: +// Массив. +Функция НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, MACАдрес) Экспорт + + Возврат МенеджерОборудованияВызовСервера.НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, MACАдрес); + +КонецФункции + +// Функция возвращает структуру с данными драйвера. +// +// Параметры: +// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера. +// +// Возвращаемое значение: +// Структура. +Функция ДанныеДрайвераОборудования(ИдентификаторДрайвера) Экспорт + + Возврат МенеджерОборудованияВызовСервера.ДанныеДрайвераОборудования(ИдентификаторДрайвера); + +КонецФункции + +// Изолированное подключения внешних компонент на клиенте +// Возвращаемое значение: +// Булево - Изолированно +// +Функция ИзолированноеПодключенияВнешнихКомпонентНаКлиенте() Экспорт + + Возврат МенеджерОборудованияВызовСервера.ИзолированноеПодключенияВнешнихКомпонентНаКлиенте(); + +КонецФункции + +// Получить соответствие типов оборудования +// +// Возвращаемое значение: +// Соответствие - +// +Функция СоответствиеТиповОборудования() Экспорт + + Возврат МенеджерОборудованияВызовСервера.СоответствиеТиповОборудования(); + +КонецФункции + +// Возвращает словарь реквизитов и возможных вариантов имен параметров производителя драйверов +// +// Возвращаемое значение: +// Структура - возможные варианты определенных значений параметров оборудования: +// * LogEnabled - Структура - флаг включен ли лог файл +// * LogPath - Структура - путь к лог файлу +// * PrintDoc - Структура - Печатать документы на кассовой ленте +// * PrintSlip - Структура - печатать слип чек на эквайринговом терминале +// * OfdServer - Структура - адрес сервера оператора фискальных данных +// * OfdPort - Структура - порт сервера оператора фискальных данных +Функция СловарьКлючевыхСвойств() Экспорт + + СловарьКлючевыхСвойств = Новый Структура(); + + Словарь = Новый Структура(); + СловарьКлючевыхСвойств.Вставить("LogEnabled", Словарь); + Словарь.Вставить("DebugLog"); + Словарь.Вставить("LogEnabled"); + Словарь.Вставить("DebugLogEnabled"); + Словарь.Вставить("SaveLog"); + Словарь.Вставить("Debug"); + Словарь.Вставить("DebugLogEnabled"); + Словарь.Вставить("EnableLog"); + Словарь.Вставить("log_use"); + Словарь.Вставить("EventLogging"); + Словарь.Вставить("EnableDebugLog"); + + Словарь = Новый Структура(); + СловарьКлючевыхСвойств.Вставить("LogPath", Словарь); + Словарь.Вставить("LogFilePath"); + Словарь.Вставить("LogErrorPath"); + Словарь.Вставить("LogPath"); + Словарь.Вставить("LogFilePath"); + Словарь.Вставить("LogFileName"); + + Словарь = Новый Структура(); + СловарьКлючевыхСвойств.Вставить("PrintDoc", Словарь); + Словарь.Вставить("PrintDoc"); + Словарь.Вставить("PrintDocOnReceiptPaper"); + Словарь.Вставить("NoRecPrint", "Инвертировать"); + + Словарь = Новый Структура(); + СловарьКлючевыхСвойств.Вставить("PrintSlip", Словарь); + Словарь.Вставить("PrintSlip"); + Словарь.Вставить("PrintSlipOnTerminal"); + Словарь.Вставить("pos_slip"); + Словарь.Вставить("TerminalPrintSlip"); + + Словарь = Новый Структура(); + СловарьКлючевыхСвойств.Вставить("OfdServer", Словарь); + Словарь.Вставить("OfdHostPort"); + Словарь.Вставить("OfdServer"); + Словарь.Вставить("DeviceOfdHost"); + Словарь.Вставить("OFDURL"); + Словарь.Вставить("ofdAddress"); + Словарь.Вставить("OFDAddr"); + + Словарь = Новый Структура(); + СловарьКлючевыхСвойств.Вставить("OfdPort", Словарь); + Словарь.Вставить("OfdServerPort"); + Словарь.Вставить("DeviceOfdPort"); + Словарь.Вставить("OFDPort"); + Словарь.Вставить("PortFDO"); + + Возврат СловарьКлючевыхСвойств; + +КонецФункции + +// Доступны возвраты без карты. +// +Функция ДоступноВозвратыБезКарты() Экспорт + + Возврат МенеджерОборудованияВызовСервера.ДоступноВозвратыБезКарты(); + +КонецФункции + +Функция ПараметрыТипыОборудования() Экспорт + + Возврат МенеджерОборудованияВызовСервера.ПараметрыТипыОборудования(); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияКлиентСервер.xml b/CommonModules/МенеджерОборудованияКлиентСервер.xml new file mode 100644 index 0000000..6149d00 --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияКлиентСервер + + + ru + Менеджер оборудования клиент сервер + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияКлиентСервер/Ext/Module.bsl b/CommonModules/МенеджерОборудованияКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..03cda9d --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиентСервер/Ext/Module.bsl @@ -0,0 +1,1549 @@ + +#Область ПрограммныйИнтерфейс + +#Область Системные + +// Получает ревизию требований для драйверов подключаемого оборудования. +// +// Возвращаемое значение: +// Число - +// +Функция РевизияИнтерфейсаДрайверов() Экспорт + + РевизияИнтерфейса = 4005; + Возврат РевизияИнтерфейса; + +КонецФункции + +// Функция заполняет наименование рабочего места клиента по имени пользователя. +// +// Параметры: +// Объект - СправочникОбъект.РабочиеМеста - рабочее место текущего сеанса. +// ИмяПользователя - Строка - ИмяПользователя +// +Процедура ЗаполнитьНаименованиеРабочегоМеста(Объект, ИмяПользователя) Экспорт + + ИмяПустойПользователь = НСтр("ru='<Пользователь>'"); + + Если ПустаяСтрока(Объект.Наименование) Тогда + + ИмяПользователя = ?(ПустаяСтрока(ИмяПользователя), ИмяПустойПользователь, Строка(ИмяПользователя)); + РабочееМестоИмя = ?(ПустаяСтрока(Объект.ИмяКомпьютера), Объект.Код, Объект.ИмяКомпьютера); + Наименование = СтрШаблон(НСтр("ru = '%1 (%2)'"), ИмяПользователя, РабочееМестоИмя); + НаименованиеНовое = Наименование; + ВыполненаСтандартнаяОбработка = Истина; + МенеджерОборудованияКлиентСерверПереопределяемый.ОбработкаЗаполненияНаименованияРабочегоМеста(НаименованиеНовое, ИмяПользователя, ВыполненаСтандартнаяОбработка); + Объект.Наименование = ?(Не ВыполненаСтандартнаяОбработка, НаименованиеНовое, Наименование); + + ИначеЕсли Не ПустаяСтрока(Строка(ИмяПользователя)) И Найти(Объект.Наименование, ИмяПустойПользователь) > 0 Тогда + Объект.Наименование = СтрЗаменить(Объект.Наименование, ИмяПустойПользователь, Строка(ИмяПользователя)); + КонецЕсли; + +КонецПроцедуры + +// Вызывается при получении имени кассира и его ИНН. +// +// Возвращаемое значение: +// Структура. +// *ИмяКассира - Строка, Неопределено - Текст, используемый для заполнения документа +// *ИННКассира - Строка, Неопределено - Текст, используемый для заполнения документа +// +Функция ТекущийКассирДляФискальныхОпераций() Экспорт + + Кассир = ""; + ВыполненаСтандартнаяОбработка = Истина; + МенеджерОборудованияКлиентСерверПереопределяемый.ОбработкаЗаполненияИмяКассира(Кассир, ВыполненаСтандартнаяОбработка); + Кассир = ?(Не ВыполненаСтандартнаяОбработка, Кассир, НСтр("ru='Администратор'")); + + КассирИНН = ""; + ВыполненаСтандартнаяОбработка = Истина; + МенеджерОборудованияКлиентСерверПереопределяемый.ОбработкаЗаполненияИННКассира(КассирИНН, ВыполненаСтандартнаяОбработка); + КассирИНН = ?(Не ВыполненаСтандартнаяОбработка, КассирИНН, ""); + + РезультатОперации = Новый Структура(); + РезультатОперации.Вставить("Кассир" , Кассир); + РезультатОперации.Вставить("КассирИНН", КассирИНН); + Возврат РезультатОперации; + +КонецФункции + +// Возвращает структуру отбора для получения списка оборудования +// +// Возвращаемое значение: +// Структура: +// * Идентификатор - Массив, СправочникСсылка.ПодключаемоеОборудование +// * ТипыПО - Строка, Структура, Массив +// * РабочееМесто - СправочникСсылка.РабочиеМеста +// * Организация - ОпределяемыйТип.Организация +// * СетевоеОборудование - Булево - отобрать только сетевое оборудование, по умолчанию Ложь +// * КодЯзыка - Строка - Код языка драйвера +// +Функция СписокОборудованияОтбор() Экспорт + + Отбор = Новый Структура(); + Отбор.Вставить("Идентификатор" , Неопределено); + Отбор.Вставить("ТипыПО", ПараметрыТипыОборудования()); + Отбор.Вставить("РабочееМесто", Неопределено); + Отбор.Вставить("Организация", Неопределено); + Отбор.Вставить("СетевоеОборудование" , Истина); + Отбор.Вставить("СерверноеОборудование", Ложь); + Отбор.Вставить("КодЯзыка", Неопределено); + Отбор.Вставить("РазрешенаАвтоматическаяФискализация", Ложь); + Возврат Отбор; + +КонецФункции + +#КонецОбласти + +#Область ТипыОборудования + +// Структура типы оборудования +// +// Возвращаемое значение: +// Структура +// +Функция ПараметрыТипыОборудования() Экспорт + + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Возврат МенеджерОборудования.ПараметрыТипыОборудования(); + #Иначе + Возврат МенеджерОборудованияКлиент.ПараметрыТипыОборудования(); + #КонецЕсли + +КонецФункции + +#КонецОбласти + +#Область Конструкторы + +// Заполняет структуру выполнения операции на Оборудовании. +// +// Параметры: +// Результат - Булево - результат операции. +// ОписаниеОшибки - ИнформацияОбОшибке - информация об ошибке. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - подключаемое оборудование. +// +// Возвращаемое значение: +// Структура: +// * Результат - Булево +// * ОписаниеОшибки - Строка +// * ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование +// * ПодключенноеУстройство - Неопределено, см. МенеджерОборудованияКлиент.ПараметрыПодключенияУстройства. +// * ОшибкаЗагрузки - Булево +// * ИдентификаторОбъекта - Строка +// +Функция ПараметрыВыполненияОперацииНаОборудовании(Результат = Ложь, ОписаниеОшибки = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт; + + РезультатВыполнения = Новый Структура(); + РезультатВыполнения.Вставить("Результат" , Результат); + РезультатВыполнения.Вставить("ОписаниеОшибки" , ОписаниеОшибки); + РезультатВыполнения.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + РезультатВыполнения.Вставить("ПодключенноеУстройство" , Неопределено); + РезультатВыполнения.Вставить("ОшибкаЗагрузки" , Ложь); + РезультатВыполнения.Вставить("ИдентификаторОбъекта" , ""); + РезультатВыполнения.Вставить("СтатусВОблачнойКассе" , ""); + Возврат РезультатВыполнения; + +КонецФункции + +// Параметры создания нового драйвера. +// +// Возвращаемое значение: +// Структура - Параметры создания нового драйвера: +// *ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - . +// *ИдентификаторОбъекта - УникальныйИдентификатор. +// *ИмяДрайвера - Строка - . +// *Наименование - Строка - . +// *ВерсияДрайвера - Строка - . +// *СпособПодключения - ПеречислениеСсылка.СпособПодключенияДрайвера - . +// *ИмяМакетаДрайвера - Строка - +// *СнятСПоддержки - Булево - +// *СообщениеПриИспользовании - Булево - +// *Предопределенный - Булево - +// *ЛокальныйРежим - Булево - +// *СетевойРежим - Булево - +// *СерверныйРежим - Булево - +// *БезопасноеПодключение - Булево - +// *РекомендуемоеИспользование - Булево - +// +Функция ПараметрыСозданияНовогоДрайвера() Экспорт + + ПараметрыСоздания = Новый Структура(); + ПараметрыСоздания.Вставить("ТипОборудования"); + ПараметрыСоздания.Вставить("ИдентификаторОбъекта"); + ПараметрыСоздания.Вставить("ИмяДрайвера"); + ПараметрыСоздания.Вставить("Наименование"); + ПараметрыСоздания.Вставить("ВерсияДрайвера"); + ПараметрыСоздания.Вставить("СпособПодключения"); + ПараметрыСоздания.Вставить("БезопасноеПодключение", Ложь); + ПараметрыСоздания.Вставить("РекомендуемоеИспользование", Ложь); + ПараметрыСоздания.Вставить("ИмяМакетаДрайвера"); + ПараметрыСоздания.Вставить("СнятСПоддержки" , Ложь); + ПараметрыСоздания.Вставить("СообщениеПриИспользовании" , Истина); + ПараметрыСоздания.Вставить("Предопределенный", Ложь); + ПараметрыСоздания.Вставить("ЛокальныйРежим" , Истина); + ПараметрыСоздания.Вставить("СетевойРежим" , Ложь); + ПараметрыСоздания.Вставить("СерверныйРежим" , Ложь); + Возврат ПараметрыСоздания; + +КонецФункции + +// Параметры создания нового подключаемого оборудования. +// +// Возвращаемое значение: +// Структура - Параметры создания нового подключаемого оборудования: +// *Наименование - Строка - +// *ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - +// *ТипПодключения - ПеречислениеСсылка.ТипыПодключенияОборудования - +// *ДрайверОборудования - СправочникСсылка.ДрайверыОборудования - +// *Организация - ОпределяемыйТип.ОрганизацияБПО - +// *РабочееМесто - СправочникСсылка.РабочиеМеста - +// *СерийныйНомер - Строка - +// *СпособФорматноЛогическогоКонтроля - ПеречислениеСсылка.СпособыФорматноЛогическогоКонтроля - +// *ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число - +// *ИспользуетсяФН36 - Булево - +// +Функция ПараметрыСозданияНовогоПодключаемогоОборудования() Экспорт + + ПараметрыСоздания = Новый Структура(); + ПараметрыСоздания.Вставить("Наименование"); + ПараметрыСоздания.Вставить("УстройствоИспользуется", Истина); + ПараметрыСоздания.Вставить("ТипОборудования" , Неопределено); + ПараметрыСоздания.Вставить("ТипПодключения" , ПредопределенноеЗначение("Перечисление.ТипыПодключенияОборудования.ЛокальноеПодключение")); + ПараметрыСоздания.Вставить("ДрайверОборудования" , Неопределено); + ПараметрыСоздания.Вставить("Организация"); + ПараметрыСоздания.Вставить("РабочееМесто", МенеджерОборудованияВызовСервера.РабочееМестоКлиента()); + ПараметрыСоздания.Вставить("СерийныйНомер"); + ПараметрыСоздания.Вставить("СпособФорматноЛогическогоКонтроля", ПредопределенноеЗначение("Перечисление.СпособыФорматноЛогическогоКонтроля.РазделятьСтроки"));; + ПараметрыСоздания.Вставить("ДопустимоеРасхождениеФорматноЛогическогоКонтроля", 0.01); + ПараметрыСоздания.Вставить("ИспользуетсяФН36", Ложь); + Возврат ПараметрыСоздания; + +КонецФункции + +// Параметры описания драйвера. +// +// Возвращаемое значение: +// Структура - Параметры описания драйвера: +// *Установлен - Булево - +// *ВерсияДрайвера - Строка - +// *ВерсияИнтеграционногоКомпонента - Строка - +// *НаименованиеДрайвера - Строка - +// *ОписаниеДрайвера - Строка - +// *ТипОборудования - Строка - +// *ИнтеграционныйКомпонент - Булево - +// *ОсновнойДрайверУстановлен - Булево - +// *РевизияИнтерфейса - Число - +// *URLЗагрузкиДрайвера - Строка - +// *ПараметрыДрайвера - Строка - +// *ДополнительныеДействия - Строка - +// *ВерсияДрайвераВМакете - Строка - +// *ОписаниеДрайвераXML - Строка - +// *ЛогДрайвераВключен - Булево - +// *ЛогДрайвераПутьКФайлу - Строка - +// *ЭтоЭмулятор - Булево - +// *ИнформацияОбОкружении - Строка - +// +Функция ПараметрыОписанияДрайвера() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("Установлен", Ложь); + Результат.Вставить("ВерсияДрайвера"); + Результат.Вставить("ВерсияИнтеграционногоКомпонента"); + Результат.Вставить("НаименованиеДрайвера", ""); + Результат.Вставить("ОписаниеДрайвера" , ""); + Результат.Вставить("ТипОборудования" , "" ); + Результат.Вставить("ИнтеграционныйКомпонент" , Ложь); + Результат.Вставить("ОсновнойДрайверУстановлен", Ложь); + Результат.Вставить("РевизияИнтерфейса" , РевизияИнтерфейсаДрайверов()); + Результат.Вставить("РевизияИнтерфейсаПредставление"); + Результат.Вставить("URLЗагрузкиДрайвера" , ""); + Результат.Вставить("ПараметрыДрайвера" , ""); + Результат.Вставить("ДополнительныеДействия" , ""); + Результат.Вставить("ПоддерживаетсяЛокализация", Ложь); + Результат.Вставить("ШаблонЛокализации" , ""); + Результат.Вставить("ВерсияДрайвераВМакете" , ""); + Результат.Вставить("ОписаниеДрайвераXML" , ""); + Результат.Вставить("ЛогДрайвераВключен" , Ложь); + Результат.Вставить("ЛогДрайвераПутьКФайлу" , ""); + Результат.Вставить("ЭтоЭмулятор" , Ложь); + Результат.Вставить("ИнформацияОбОкружении" , ""); + Результат.Вставить("АвтоНастройкаОборудования", Ложь); + + Возврат Результат; + +КонецФункции + +// Параметры подключения. +// +// Параметры: +// ДанныеДрайвера - Структура - Данные драйвера +// +// Возвращаемое значение: +// Структура - Параметры подключения: +// *Наименование - Строка. +// *ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования. +// *ПодключениеИзМакета - Булево. +// *ПодключениеЛокальноПоИдентификатору - Булево. +// *ИдентификаторОбъекта - СправочникСсылка.ПодключаемоеОборудование. +// *ВерсияДрайвера - Строка. +// *ИмяМакетаДрайвера - Строка. +// *МакетДоступен - Булево. +// *РевизияИнтерфейса - Строка. +// *ШиринаСтроки - Строка. +// *ИдентификаторТерминала - Строка. +// *ПечатьКвитанцийНаТерминале - Булево. +// *КороткиеСлипЧеки - Булево. +// *ВыдачиНаличныхДенежныхСредств - Булево. +// *ОплатаЭлектроннымиСертификатами - Булево. +// *ЧастичнаяОтмена - Булево. +// *СписокОперацийПоКартам - Булево. +// *ConsumerPresentedQR - Булево. +// *ПокупкаСЗачислениемНаКарту - Булево. +// *СтолбцовНаДисплее - Число. +// *СтрокНаДисплее - Число. +// *ДисплейОтображаетТекст - Булево. +// *ДисплейОтображаетГрафику - Булево. +// *ДисплейОтображаетQRКод - Булево. +// *ИдентификаторУстройства - УникальныйИдентификатор. +// +Функция ПараметрыПодключения(ДанныеДрайвера) Экспорт + + Подключение = Новый Структура(); + + Подключение.Вставить("Наименование" , ДанныеДрайвера.Наименование); + Подключение.Вставить("ТипыОборудования" , ДанныеДрайвера.ТипыОборудования); + Подключение.Вставить("ТипОборудования" , ДанныеДрайвера.ТипОборудования); + Подключение.Вставить("ТипОборудованияИмя" , ДанныеДрайвера.ТипОборудованияИмя); + Подключение.Вставить("ПодключениеИзМакета" , ДанныеДрайвера.ПодключениеИзМакета); + + Подключение.Вставить("ПодключениеЛокальноПоИдентификатору", ДанныеДрайвера.ПодключениеЛокальноПоИдентификатору); + Подключение.Вставить("ИдентификаторОбъекта" , ДанныеДрайвера.ИдентификаторОбъекта); + Подключение.Вставить("ВерсияДрайвера" , ДанныеДрайвера.ВерсияДрайвера); + Подключение.Вставить("ИмяМакетаДрайвера" , ДанныеДрайвера.ИмяМакетаДрайвера); + Подключение.Вставить("МакетДоступен" , ДанныеДрайвера.МакетДоступен); + Подключение.Вставить("СнятСПоддержки" , ДанныеДрайвера.СнятСПоддержки); + Подключение.Вставить("СообщениеПриИспользовании", ДанныеДрайвера.СообщениеПриИспользовании); + Подключение.Вставить("БезопасноеПодключение" , ДанныеДрайвера.БезопасноеПодключение); + + Подключение.Вставить("ШаблонЛокализации", ?(ДанныеДрайвера.Свойство("ШаблонЛокализации"), ДанныеДрайвера.ШаблонЛокализации, Неопределено)); + Подключение.Вставить("ПоддерживаетсяЛокализация", ?(ДанныеДрайвера.Свойство("ПоддерживаетсяЛокализация"), ДанныеДрайвера.ПоддерживаетсяЛокализация, Ложь)); + + Подключение.Вставить("Несертифицированное" , ДанныеДрайвера.Несертифицированное); + + Подключение.Вставить("РевизияИнтерфейса", ?(ДанныеДрайвера.Свойство("РевизияИнтерфейса"), ДанныеДрайвера.РевизияИнтерфейса, 0)); + Подключение.Вставить("РевизияИнтерфейсаПредставление", ?(ДанныеДрайвера.Свойство("РевизияИнтерфейсаПредставление"), ДанныеДрайвера.РевизияИнтерфейсаПредставление, "")); + + Подключение.Вставить("ШиринаСтроки" , ?(ДанныеДрайвера.Свойство("ШиринаСтроки"), ДанныеДрайвера.ШиринаСтроки, 0)); + Подключение.Вставить("ЭтоЭмулятор" , ?(ДанныеДрайвера.Свойство("ЭтоЭмулятор"), ДанныеДрайвера.ЭтоЭмулятор, Ложь)); + + Подключение.Вставить("ИдентификаторТерминала" , ?(ДанныеДрайвера.Свойство("ИдентификаторТерминала"), ДанныеДрайвера.ИдентификаторТерминала, "")); + Подключение.Вставить("ИдентификаторБанкаЭквайера" , ?(ДанныеДрайвера.Свойство("ИдентификаторБанкаЭквайера"), ДанныеДрайвера.ИдентификаторБанкаЭквайера, "")); + Подключение.Вставить("ПечатьКвитанцийНаТерминале" , ?(ДанныеДрайвера.Свойство("ПечатьКвитанцийНаТерминале"), ДанныеДрайвера.ПечатьКвитанцийНаТерминале, Ложь)); + Подключение.Вставить("КороткиеСлипЧеки" , ?(ДанныеДрайвера.Свойство("КороткиеСлипЧеки"), ДанныеДрайвера.КороткиеСлипЧеки, Ложь)); + Подключение.Вставить("ВыдачиНаличныхДенежныхСредств" , ?(ДанныеДрайвера.Свойство("ВыдачиНаличныхДенежныхСредств"), ДанныеДрайвера.ВыдачиНаличныхДенежныхСредств, Ложь)); + Подключение.Вставить("ОплатаЭлектроннымиСертификатами", ?(ДанныеДрайвера.Свойство("ОплатаЭлектроннымиСертификатами"), ДанныеДрайвера.ОплатаЭлектроннымиСертификатами, Ложь)); + Подключение.Вставить("ЧастичнаяОтмена" , ?(ДанныеДрайвера.Свойство("ЧастичнаяОтмена"), ДанныеДрайвера.ЧастичнаяОтмена, Ложь)); + Подключение.Вставить("СписокОперацийПоКартам" , ?(ДанныеДрайвера.Свойство("СписокОперацийПоКартам"), ДанныеДрайвера.СписокОперацийПоКартам, Ложь)); + Подключение.Вставить("ВозвратЭСБезКартыПоBasketID" , ?(ДанныеДрайвера.Свойство("ReturnElectronicCertificateByBasketID"), ДанныеДрайвера.ReturnElectronicCertificateByBasketID, Ложь)); + Подключение.Вставить("ConsumerPresentedQR" , ?(ДанныеДрайвера.Свойство("ConsumerPresentedQR"), ДанныеДрайвера.ConsumerPresentedQR, Ложь)); + Подключение.Вставить("ПокупкаСЗачислениемНаКарту" , ?(ДанныеДрайвера.Свойство("ПокупкаСЗачислениемНаКарту"), ДанныеДрайвера.ПокупкаСЗачислениемНаКарту, Ложь)); + + Подключение.Вставить("СтолбцовНаДисплее" , ?(ДанныеДрайвера.Свойство("СтолбцовНаДисплее"), ДанныеДрайвера.СтолбцовНаДисплее, 20)); + Подключение.Вставить("СтрокНаДисплее" , ?(ДанныеДрайвера.Свойство("СтрокНаДисплее"), ДанныеДрайвера.СтрокНаДисплее, 2)); + Подключение.Вставить("ДисплейОтображаетТекст" , ?(ДанныеДрайвера.Свойство("ДисплейОтображаетТекст"), ДанныеДрайвера.ДисплейОтображаетТекст, Истина)); + Подключение.Вставить("ДисплейОтображаетГрафику", ?(ДанныеДрайвера.Свойство("ДисплейОтображаетГрафику"), ДанныеДрайвера.ДисплейОтображаетГрафику, Ложь)); + Подключение.Вставить("ДисплейОтображаетQRКод" , ?(ДанныеДрайвера.Свойство("ДисплейОтображаетQRКод"), ДанныеДрайвера.ДисплейОтображаетQRКод, Ложь)); + Подключение.Вставить("ДисплейОтображаетHTML" , ?(ДанныеДрайвера.Свойство("ДисплейОтображаетHTML"), ДанныеДрайвера.ДисплейОтображаетHTML, Ложь)); + Подключение.Вставить("ДисплейОтображаетСтатус" , ?(ДанныеДрайвера.Свойство("ДисплейОтображаетСтатус"), ДанныеДрайвера.ДисплейОтображаетСтатус, Ложь)); + Подключение.Вставить("ДисплейОтображаетСостоянияРМ", ?(ДанныеДрайвера.Свойство("ДисплейОтображаетСостоянияРМ"), ДанныеДрайвера.ДисплейОтображаетСостоянияРМ, Ложь)); + Подключение.Вставить("ДисплейОтрабатываетНажатия" , ?(ДанныеДрайвера.Свойство("ДисплейОтрабатываетНажатия"), ДанныеДрайвера.ДисплейОтрабатываетНажатия, Ложь)); + + Подключение.Вставить("ВесыПоддерживаютТарирование", ?(ДанныеДрайвера.Свойство("ВесыПоддерживаютТарирование"), ДанныеДрайвера.ВесыПоддерживаютТарирование, Ложь)); + Подключение.Вставить("СобытиеПолученииВеса" , ?(ДанныеДрайвера.Свойство("СобытиеПолученииВеса"), ДанныеДрайвера.СобытиеПолученииВеса, Ложь)); + + Подключение.Вставить("ИдентификаторУстройства" , ?(ДанныеДрайвера.Свойство("Ссылка"), ДанныеДрайвера.Ссылка, Неопределено)); + + Возврат Подключение; + +КонецФункции + +// АПК: 142-выкл обратная совместимость + +// Параметры выполнение команды. +// +// Параметры: +// Команда - КомандаФормы - . +// ПроцессорДанных - ПроцессорКомпоновкиДанных - Процессор данных +// ДополнительныеПараметры - Неопределено - Дополнительные параметры +// ПодготовитьДанные - Булево - Подготовить данные +// ОбработатьДанные - Булево - Обработать данные +// ИспользоватьПечатающееУстройство - Булево - Использовать печатающее устройство +// ОбработатьДанныеПриОшибке - Булево +// +// Возвращаемое значение: +// Структура - Параметры выполнение команды: +// *Команда - КомандаФормы - . +// *ПроцессорДанных - ПроцессорКомпоновкиДанных - Процессор данных +// *ПодготовитьДанные - Булево -. +// *ОбработатьДанные - Булево -. +// *ИспользоватьПечатающееУстройство - Булево -. +// *СообщенияВСлужбуТехническойПоддержки - Булево - Будет сформировано сообщения в службу технической поддержки при ошибке. +// +Функция ПараметрыВыполнениеКоманды(Команда, ПроцессорДанных, ДополнительныеПараметры = Неопределено, ПодготовитьДанные = Истина, + ОбработатьДанные = Истина, ИспользоватьПечатающееУстройство = Ложь, ОбработатьДанныеПриОшибке = Ложь) Экспорт + + ПараметрыВыполнение = Новый Структура(); + ПараметрыВыполнение.Вставить("Команда" , Команда); + ПараметрыВыполнение.Вставить("ПроцессорДанных" , ПроцессорДанных); + ПараметрыВыполнение.Вставить("ПодготовитьДанные", ПодготовитьДанные); + ПараметрыВыполнение.Вставить("ОбработатьДанные" , ОбработатьДанные); + ПараметрыВыполнение.Вставить("ОбработатьДанныеПриОшибке", ОбработатьДанныеПриОшибке); + ПараметрыВыполнение.Вставить("ИспользоватьПечатающееУстройство", ИспользоватьПечатающееУстройство); + ПараметрыВыполнение.Вставить("ПечатьСлипЧека", Истина); + ПараметрыВыполнение.Вставить("ПолныйСлипЧек" , Истина); + ПараметрыВыполнение.Вставить("СообщенияВСлужбуТехническойПоддержки" , Ложь); + + Если ДополнительныеПараметры <> Неопределено Тогда + Для Каждого ДополнительныйПараметр Из ДополнительныеПараметры Цикл + ПараметрыВыполнение.Вставить(ДополнительныйПараметр.Ключ, ДополнительныйПараметр.Значение); + КонецЦикла; + КонецЕсли; + Возврат ПараметрыВыполнение; + +КонецФункции + +// АПК: 142-вкл + +// Дополнительные параметры операции. +// +// Параметры: +// ОставитьПодключенным - Булево - Оставить подключенным +// +// Возвращаемое значение: +// Структура - Дополнительные параметры операции: +// *ОставитьПодключенным - Булево - +// *ОповещениеПослеОткрытииЧека - Неопределено - +// *ОповещениеПриОшибкеПечатиЧека - Неопределено - +// +Функция ДополнительныеПараметрыОперации(ОставитьПодключенным = Ложь) Экспорт + + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("ОставитьПодключенным", ОставитьПодключенным); + ДополнительныеПараметры.Вставить("ОповещениеПослеОткрытииЧека"); + ДополнительныеПараметры.Вставить("ОповещениеПриОшибкеПечатиЧека"); + Возврат ДополнительныеПараметры; + +КонецФункции + #КонецОбласти + +#Область ПрограммныйИнтерфейсМаркировка + +// Функция определяет тип штрихкода по значение кода. +// +// Параметры: +// Штрихкод - Строка - значение штрихкода. +// +// Возвращаемое значение: +// Строка. +// +Функция ОпределитьТипШтрихкода(Знач Штрихкод) Экспорт + + ТипШтрихкодаЗнач = ""; + ДлинаШтрихкода = СтрДлина(Штрихкод); + + Если ДлинаШтрихкода = 0 Тогда + Возврат ТипШтрихкодаЗнач; + КонецЕсли; + + Если ДлинаШтрихкода = 14 Тогда // ITF14 + + Если РассчитатьКонтрольныйСимволGTIN14(Штрихкод) = Прав(Штрихкод, 1) Тогда + ТипШтрихкодаЗнач = "ITF14"; + КонецЕсли; + + ИначеЕсли ДлинаШтрихкода = 13 Тогда // EAN13 + + Если РассчитатьКонтрольныйСимволGTIN13(Штрихкод) = Прав(Штрихкод, 1) Тогда + ТипШтрихкодаЗнач = "EAN13"; + КонецЕсли; + + ИначеЕсли ДлинаШтрихкода = 8 Тогда // EAN8 + + Если РассчитатьКонтрольныйСимволGTIN8(Штрихкод) = Прав(Штрихкод, 1) Тогда + ТипШтрихкодаЗнач = "EAN8"; + КонецЕсли; + + КонецЕсли; + + Если ТипШтрихкодаЗнач= "" Тогда // CODE39 + + CODE39 = Истина; + Для Сч = 1 По ДлинаШтрихкода Цикл + ВремКодСимвола = КодСимвола(Штрихкод, Сч); + Если (ВремКодСимвола <> 32) + И (ВремКодСимвола < 36 Или ВремКодСимвола > 37) + И (ВремКодСимвола <> 43) + И (ВремКодСимвола < 45 Или ВремКодСимвола > 57) + И (ВремКодСимвола < 65 Или ВремКодСимвола > 90) Тогда + CODE39 = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + Если CODE39 Тогда + ТипШтрихкодаЗнач = "CODE39"; + КонецЕсли + + КонецЕсли; + + Если ТипШтрихкодаЗнач= "" Тогда // CODE128 + // CODE128 символы ASCII от 0 до 127 (цифры от «0» до «9», буквы от «A» до «Z» и от «a» до «z») и специальные символы; + CODE128 = Истина; + Для Сч = 1 По ДлинаШтрихкода Цикл + ВремКодСимвола = КодСимвола(Штрихкод, Сч); + Если (ВремКодСимвола > 127) Тогда + CODE128 = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + Если CODE128 Тогда + ТипШтрихкодаЗнач = "CODE128"; + КонецЕсли + + КонецЕсли; + + Если ТипШтрихкодаЗнач = "CODE128" Тогда // EAN128 + // В коде EAN128 регламентирован словарь CODE128 но регламентированы группы кодов, и возможны разделители GS. + Если КодСимвола(Штрихкод, 1) = 40 Или СтрНайти(Штрихкод, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1()) > 0 Тогда + ТипШтрихкодаЗнач = "EAN128"; + КонецЕсли; + КонецЕсли; + + Возврат ТипШтрихкодаЗнач; + +КонецФункции + +// Функция возвращает пустую структуру записи EPC. +// +// Возвращаемое значение: +// Структура: +// *Результат - Булево - Результат декодирования (успешно или нет) +// *EPC - Строка - Значение EPC в виде HEX строки +// *EPC_BIN - Строка - Значение EPC в виде бинарной строки +// *Формат - Строка - Распознанный формат данных SGTIN-96 или SGTIN-198 +// *GTIN - Строка - GTIN +// *СерийныйНомер - Строка - Серийный номер SGTIN +// *ПрефиксКомпании - Строка - Префикс компании +// *URI - Строка - EPC Tag URI. +// +Функция ПолучитьСтруктуруЗаписиEPC() Экспорт + + СтруктураЗаписиEPC = Новый Структура; + + СтруктураЗаписиEPC.Вставить("Результат", Ложь); // Результат декодирования (успешно или нет) + СтруктураЗаписиEPC.Вставить("EPC"); // Значение EPC в виде HEX строки + СтруктураЗаписиEPC.Вставить("EPC_BIN"); // Значение EPC в виде бинарной строки + СтруктураЗаписиEPC.Вставить("Формат"); // Распознанный формат данных SGTIN-96 или SGTIN-198 + СтруктураЗаписиEPC.Вставить("GTIN"); // GTIN + СтруктураЗаписиEPC.Вставить("СерийныйНомер"); // Серийный номер SGTIN + СтруктураЗаписиEPC.Вставить("ПрефиксКомпании"); // Префикс компании + СтруктураЗаписиEPC.Вставить("URI"); // EPC Tag URI + + Возврат СтруктураЗаписиEPC; + +КонецФункции + +// Расчет контрольной цифры для GTIN-8. +// +// Параметры: +// GTIN - Строка - Текстовая строка с GTIN-8. Может содержать числа от 0 до 9. +// +// Возвращаемое значение: +// Число - Контрольный символ (число) рассчитанный по алгоритму для GTIN. +// +Функция РассчитатьКонтрольныйСимволGTIN8(Знач GTIN) Экспорт + + Сумма = 0; + Коэффициент = 3; + + Для Сч = 1 По 7 Цикл + ВремКодСимвола = КодСимвола(GTIN, Сч); + Сумма = Сумма + Коэффициент * (ВремКодСимвола - 48); + Коэффициент = 4 - Коэффициент; + КонецЦикла; + Сумма = (10 - Сумма % 10) % 10; + КонтрольныйСимвол = Символ(Сумма + 48); + + Возврат КонтрольныйСимвол; + +КонецФункции + +// Расчет контрольной цифры для GTIN-12. +// +// Параметры: +// GTIN - Строка - Текстовая строка с GTIN-12. Может содержать числа от 0 до 9. +// +// Возвращаемое значение: +// Число - Контрольный символ (число) рассчитанный по алгоритму для GTIN. +// +Функция РассчитатьКонтрольныйСимволGTIN12(Знач GTIN) Экспорт + + Сумма = 0; + Коэффициент = 3; + + Для Сч = 1 По 11 Цикл + ВремКодСимвола = КодСимвола(GTIN, Сч); + Сумма = Сумма + Коэффициент * (ВремКодСимвола - 48); + Коэффициент = 4 - Коэффициент; + КонецЦикла; + Сумма = (10 - Сумма % 10) % 10; + КонтрольныйСимвол = Символ(Сумма + 48); + + Возврат КонтрольныйСимвол; + +КонецФункции + +// Расчет контрольной цифры для GTIN-13. +// +// Параметры: +// GTIN - Строка -Текстовая строка с GTIN-13. Может содержать числа от 0 до 9. +// +// Возвращаемое значение: +// Число - Контрольный символ (число) рассчитанный по алгоритму для GTIN. +// +Функция РассчитатьКонтрольныйСимволGTIN13(Знач GTIN) Экспорт + + Сумма = 0; + Коэффициент = 1; + + Для Сч = 1 По 12 Цикл + ВремКодСимвола = КодСимвола(GTIN, Сч); + Сумма = Сумма + Коэффициент * (ВремКодСимвола - 48); + Коэффициент = 4 - Коэффициент; + КонецЦикла; + Сумма = (10 - Сумма % 10) % 10; + КонтрольныйСимвол = Символ(Сумма + 48); + + Возврат КонтрольныйСимвол; + +КонецФункции + +// Расчет контрольной цифры для GTIN-14. +// +// Параметры: +// GTIN - Строка - Текстовая строка с GTIN-14. Может содержать числа от 0 до 9. +// +// Возвращаемое значение: +// Число - Контрольный символ (число) рассчитанный по алгоритму для GTIN. +// +Функция РассчитатьКонтрольныйСимволGTIN14(Знач GTIN) Экспорт + + Сумма = 0; + Коэффициент = 3; + + Для Сч = 1 По 13 Цикл + ВремКодСимвола = КодСимвола(GTIN, Сч); + Сумма = Сумма + Коэффициент * (ВремКодСимвола - 48); + Коэффициент = 4 - Коэффициент; + КонецЦикла; + Сумма = (10 - Сумма % 10) % 10; + КонтрольныйСимвол = Символ(Сумма + 48); + + Возврат КонтрольныйСимвол; + +КонецФункции + +// Универсальная функция расчета контрольной цифры GTIN. +// GTIN допускает в формате GTIN-8, GTIN-12, GTIN-13, GTIN-14 c контрольным символом. +// +// Параметры: +// GTIN - Строка - Текстовая строка с GTIN(c контрольным символом). Может содержать числа от 0 до 9. +// +// Возвращаемое значение: +// Число - Контрольный символ (число) рассчитанный по алгоритму для GTIN. +// +Функция РассчитатьКонтрольныйСимволGTIN(Знач GTIN) Экспорт + + Сумма = 0; + ДлиннаGTIN = СтрДлина(GTIN); + Коэффициент = ?(ДлиннаGTIN % 2 = 0, 3, 1); + + Для Сч = 1 По ДлиннаGTIN - 1 Цикл + ВремКодСимвола = КодСимвола(GTIN, Сч); + Сумма = Сумма + Коэффициент * (ВремКодСимвола - 48); + Коэффициент = 4 - Коэффициент; + КонецЦикла; + Сумма = (10 - Сумма % 10) % 10; + КонтрольныйСимвол = Символ(Сумма + 48); + + Возврат КонтрольныйСимвол; + +КонецФункции + +// Функция проверяет корректность GTIN. +// GTIN допускает в формате GTIN-8, GTIN-12, GTIN-13, GTIN-14 c контрольным символом. +// +// Параметры: +// GTIN - Строка - Текстовая строка с GTIN(c контрольным символом). Может содержать числа от 0 до 9. +// +// Возвращаемое значение: +// Булево +// +Функция ПроверитьКорректностьGTIN(Знач GTIN) Экспорт + + Результат = (СтрДлина(GTIN) = 8) Или (СтрДлина(GTIN) = 12) Или (СтрДлина(GTIN) = 13) Или (СтрДлина(GTIN) = 14); + Возврат Результат И РассчитатьКонтрольныйСимволGTIN(GTIN) = Прав(GTIN, 1); + +КонецФункции + +// Декодирование данных по значение EPC(HEX строка). Поддерживается формат SGTIN-96 и SGTIN-198. +// +// Параметры: +// EPC - Строка - Строка содержащая значение банка EPC в HEX виде. +// +// Возвращаемое значение: +// Структура: +// *Результат - Булево - Результат декодирования (успешно или нет) +// *EPC - Строка - Значение EPC в виде HEX строки +// *EPC_BIN - Строка - Значение EPC в виде бинарной строки +// *Формат - Строка - Распознанный формат данных SGTIN-96 или SGTIN-198 +// *GTIN - Строка - GTIN +// *СерийныйНомер - Строка - Серийный номер SGTIN +// *ПрефиксКомпании - Строка - Префикс компании +// *URI - Строка - EPC Tag URI. +// +Функция ДекодированиеДанныхSGTIN(EPC) Экспорт + + // Преобразовываем HEX строку значение банка EPC в бинарную строку. + БитовыйМассив = ПреобразоватьHEXВБинарнуюСтроку(EPC); + + // Подготавливаем структура результата. + СтруктураРезультата = ПолучитьСтруктуруЗаписиEPC(); + СтруктураРезультата.EPC = EPC; + СтруктураРезультата.EPC_BIN = БитовыйМассив; + + // Получаем заголовок метки. + Заголовок = Сред(БитовыйМассив, 1, 8); + + Если Заголовок = "00110000" Тогда // Распознан заголовок SGTIN-96. + + Формат = "sgtin-96"; + // Для SGTIN-96 длинная серийного номера 38 bit. + СерийныйНомер = Сред(БитовыйМассив, 59); + // Серийный номер состоит из десятичных цифр. Максимальное значение 274,877,906,943 + СерийныйНомер = ДобавитьЛидирующиеНули(Формат(ПреобразоватьБинарнуюСтрокуВЧисло(СерийныйНомер), "ЧГ=0"), 12); + + ИначеЕсли Заголовок = "00110110" Тогда // Распознан заголовок SGTIN-198. + + Формат = "sgtin-198"; + // Для SGTIN-198 длинная серийного номера 140 bit. + СерийныйНомерВрем = Сред(БитовыйМассив, 59); + // Серийный номер состоит из 7 битных символов. Максимально 20 символов. + СерийныйНомер = ""; + Пока СтрДлина(СерийныйНомерВрем) > 0 Цикл + ТекСимвол = Лев(СерийныйНомерВрем, 7); + КодСимвола = ПреобразоватьБинарнуюСтрокуВЧисло(ТекСимвол); + Если КодСимвола > 31 Тогда + СерийныйНомер = СерийныйНомер + Символ(КодСимвола); + КонецЕсли; + СерийныйНомерВрем = Сред(СерийныйНомерВрем, 8); + КонецЦикла; + + Иначе + Возврат СтруктураРезультата; // Не распознан формат данных EPC. + КонецЕсли; + + СтруктураРезультата.СерийныйНомер = СерийныйНомер; + СтруктураРезультата.Формат = Формат; + + Фильтр = ПреобразоватьБинарнуюСтрокуВЧисло(Сред(БитовыйМассив, 9, 3)); + Разделитель = ПреобразоватьБинарнуюСтрокуВЧисло(Сред(БитовыйМассив, 12, 3)); + + // Определяем разделить префикса компании. + Если Разделитель = 1 Тогда + РазрядовКомпании = 37; + РазрядовЗнаков = 11; + ИначеЕсли Разделитель = 2 Тогда + РазрядовКомпании = 34; + РазрядовЗнаков = 10; + ИначеЕсли Разделитель = 3 Тогда + РазрядовКомпании = 30; + РазрядовЗнаков = 9; + ИначеЕсли Разделитель = 4 Тогда + РазрядовКомпании = 27; + РазрядовЗнаков = 8; + ИначеЕсли Разделитель = 5 Тогда + РазрядовКомпании = 24; + РазрядовЗнаков = 7; + ИначеЕсли Разделитель = 6 Тогда + РазрядовКомпании = 20; + РазрядовЗнаков = 6; + Иначе + РазрядовКомпании = 40; + РазрядовЗнаков = 12; + КонецЕсли; + + ПрефиксКомпании = Сред(БитовыйМассив, 15, РазрядовКомпании); + ГруппаТовара = Сред(БитовыйМассив, 15 + РазрядовКомпании, 44 - РазрядовКомпании); + + ПрефиксКомпании = ДобавитьЛидирующиеНули(Формат(ПреобразоватьБинарнуюСтрокуВЧисло(ПрефиксКомпании), "ЧГ=0"), РазрядовЗнаков); + ГруппаТовара = ДобавитьЛидирующиеНули(Формат(ПреобразоватьБинарнуюСтрокуВЧисло(ГруппаТовара), "ЧГ=0"), 13 - РазрядовЗнаков); + + URI = "urn:epc:tag:" + Формат + ":" + Фильтр + "." + ПрефиксКомпании + "." + ГруппаТовара + "." + СерийныйНомер; + + GTIN = Лев(ГруппаТовара, 1) + ПрефиксКомпании + Прав(ГруппаТовара, СтрДлина(ГруппаТовара) - 1); + + Если СтрДлина(GTIN) = 13 Тогда + GTIN = GTIN + РассчитатьКонтрольныйСимволGTIN14(GTIN) + КонецЕсли; + + СтруктураРезультата.ПрефиксКомпании = ПрефиксКомпании; + СтруктураРезультата.GTIN = GTIN; + СтруктураРезультата.URI = URI; + СтруктураРезультата.Результат = Истина; + + Возврат СтруктураРезультата; + +КонецФункции + +// Функция определяет, содержит ли EPC значащую информацию (GTIN или СерийныйНомер) по формату SGTIN. +// +// Параметры: +// EPC - Строка - Строка содержащая значение банка EPC в HEX виде. +// +// Возвращаемое значение: +// Булево +// +Функция ПустойEPC(EPC) Экспорт + + БитовыйМассив = ПреобразоватьHEXВБинарнуюСтроку(EPC); + СерийныйНомер = Прав(БитовыйМассив, 38); + GTIN = Сред(БитовыйМассив, 15, 44); + + СерийныйНомер = ПреобразоватьБинарнуюСтрокуВЧисло(СерийныйНомер); + GTIN = ПреобразоватьБинарнуюСтрокуВЧисло(GTIN); + + Заполнен = (СерийныйНомер > 0) Или (GTIN > 0); + Возврат Не Заполнен; + +КонецФункции + +// Сформировать значение EPC в формате SGTIN-96 для GTIN и серийного номера. +// GTIN допускает в формате GTIN-8, GTIN-12, GTIN-13, GTIN-14. +// +// Параметры: +// GTIN - Строка - GTIN товарной номенклатуры. Текстовая строка с GTIN(c контрольным символом). +// СерийныйНомер - Строка - Серийный номер номенклатуры. +// Фильтр - Строка - Фильтр +// +// Возвращаемое значение: +// Строка - HEX с сформированным EPC для записи на метку RFID. +// +Функция СформироватьДанныеSGTIN96(Знач GTIN, Знач СерийныйНомер, Знач Фильтр = 3) Экспорт + + ВремGTIN = ДобавитьЛидирующиеНули(GTIN, 14); + ВремGTIN = Лев(ВремGTIN, 13); // Отбрасываем контрольный символ. + + Если СтрДлина(GTIN) > 13 И Лев(GTIN, 1) <> "0" Тогда + ЗнаковКомпании = 9; + Индикатор = Лев(ВремGTIN, 1); + Компания = Сред(ВремGTIN, 2, ЗнаковКомпании); + ГруппаТоваров = Индикатор + Прав(ВремGTIN, 3); + Иначе + ЗнаковКомпании = 7; + Компания = Лев(ВремGTIN, ЗнаковКомпании + 1); + ГруппаТоваров = Сред(ВремGTIN, ЗнаковКомпании + 2); + КонецЕсли; + + Если ЗнаковКомпании = 7 Тогда + РазрядовКомпании = 24; + Разделитель = 5; + ИначеЕсли ЗнаковКомпании = 9 Тогда + РазрядовКомпании = 30; + Разделитель = 3; + Иначе + Разделитель = 3; + РазрядовКомпании = 30; + КонецЕсли; + + // АПК: 1353-выкл EPC - технический термин + СерийныйНомер = ?(ПустаяСтрока(СерийныйНомер), "0", СерийныйНомер); + EPC = "00110000"; // - Определяем заголовок SGTIN-96. + EPC = EPC + ДобавитьЛидирующиеНули(ПреобразоватьЧислоВБинарнуюСтроку(Фильтр), 3); // Фильтр. + EPC = EPC + ДобавитьЛидирующиеНули(ПреобразоватьЧислоВБинарнуюСтроку(Разделитель), 3); // Разделитель + EPC = EPC + ДобавитьЛидирующиеНули(ПреобразоватьЧислоВБинарнуюСтроку(Число(Компания)), РазрядовКомпании); + EPC = EPC + ДобавитьЛидирующиеНули(ПреобразоватьЧислоВБинарнуюСтроку(Число(ГруппаТоваров)), 44 - РазрядовКомпании); + EPC = EPC + ДобавитьЛидирующиеНули(ПреобразоватьЧислоВБинарнуюСтроку(Число(СерийныйНомер)), 38); + + Результат = ПреобразоватьБинарнуюСтрокуВHEX(EPC); + Возврат Результат; + // АПК: 1353-вкл + +КонецФункции + +// Сформировать серийный номер по правилам производителей чипов. +// +// Параметры: +// TID - Строка - GTIN товарной номенклатуры. Текстовая строка с GTIN(c контрольным символом). +// EPC - Строка - Серийный номер номенклатуры. +// +// Возвращаемое значение: +// Структура. +// +Функция СерийныйНомерПоTID(Знач TID, Знач EPC = Неопределено) Экспорт + + ОписаниеОшибки = НСтр("ru='Ошибка генерации серийного номера по TID.'"); + РезультатВыполнения = Новый Структура("Результат, ОписаниеОшибки, СерийныйНомер", Ложь, ОписаниеОшибки); + + ПризнакG2 = Лев(TID, 2); + Если ПризнакG2 <> "E2" Тогда // Фиксированное значение "E2" признак того что тип соответствует EPC Class1Gen2. + РезультатВыполнения.ОписаниеОшибки = НСтр("ru='Указанный TID не соответствует типу EPC Class1 Gen2.'"); + Возврат РезультатВыполнения; + КонецЕсли; + + // Преобразовываем HEX строку значение банка TID в бинарную строку. + БитовыйМассив = ПреобразоватьHEXВБинарнуюСтроку(TID); + // Получаем префикс производителя. + Производитель = Сред(TID, 3, 3); + + Если Производитель = "001" Или Производитель = "801" Тогда // Чипы Impinj + + СерияЧипа = Сред(БитовыйМассив, 84, 2); // Серия чипа 00 + Если СерияЧипа = "00" Тогда + СерийныйНомер = "000" + + Сред(БитовыйМассив, 86, 8) + + Сред(БитовыйМассив, 66, 15) + + Сред(БитовыйМассив, 94, 3) + + Сред(БитовыйМассив, 65, 1) + + Сред(БитовыйМассив, 55, 4) + + Сред(БитовыйМассив, 61, 4); + Иначе // Серия чипа 01,10,11 + СерийныйНомер = Сред(БитовыйМассив, 86, 11) + + Сред(БитовыйМассив, 65, 16) + + Сред(БитовыйМассив, 52, 2) + + Сред(БитовыйМассив, 57, 1) + + Сред(БитовыйМассив, 55, 4) + + Сред(БитовыйМассив, 61, 4); + КонецЕсли; + + ИначеЕсли Производитель = "006" Или Производитель = "806" Тогда // Чипы NXP Semiconductors + + СерияЧипа = Сред(БитовыйМассив, 21, 11); // Серия чипа + СерияЧипа = ПреобразоватьБинарнуюСтрокуВHEX(СерияЧипа); + Если СерияЧипа = "806" Или СерияЧипа = "807" Тогда // G2iL или G2iL+ + СерийныйНомер = "111" + + Сред(БитовыйМассив, 24, 3) + + Сред(БитовыйМассив, 33, 32); + Иначе + СерийныйНомер = Сред(БитовыйМассив, 59, 38); + КонецЕсли; + + ИначеЕсли Производитель = "003" Или Производитель = "803" Тогда // Чипы Alien Technology + + // Words 2, 3, 4 and 5 + СерийныйНомер = Сред(БитовыйМассив, 59, 38); + + Иначе + + РезультатВыполнения.ОписаниеОшибки = НСтр("ru='Генерация серийного номера для чипа производителя указанного в TID не поддерживается.'"); + Возврат РезультатВыполнения; + + КонецЕсли; + + РезультатВыполнения.Результат = Истина; + РезультатВыполнения.СерийныйНомер = ПреобразоватьБинарнуюСтрокуВЧисло(СерийныйНомер); + + Возврат РезультатВыполнения; + +КонецФункции + +// Преобразовывает HEX строку в строку символов. +// +// Параметры: +// СтрокаHEX - Строка - Строка HEX содержащая символы. +// +// Возвращаемое значение: +// Строка - Строка символов +// +Функция ПреобразоватьHEXВСтроку(Знач СтрокаHEX) Экспорт + + Результат = ""; + ВремСтрока = СтрокаHEX; + КодСимвола = 0; + + Пока СтрДлина(ВремСтрока) > 0 Цикл + ТекСимвол = Лев(ВремСтрока, 2); + ТекСимвол = ПреобразоватьHEXВБинарнуюСтроку(ТекСимвол); + КодСимвола = ПреобразоватьБинарнуюСтрокуВЧисло(ТекСимвол); + Если КодСимвола > 31 Тогда + Результат = Результат + Символ(КодСимвола); + КонецЕсли; + ВремСтрока = Сред(ВремСтрока, 3); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Преобразовывает строку символов в HEX строку. +// +// Параметры: +// Строка - Строка - Тестовая строка +// +// Возвращаемое значение: +// - Строка - Строка HEX содержащая символы. +// +Функция ПреобразоватьСтрокуВHEX(Знач Строка) Экспорт + + Результат = ""; + ИндексСимвола = 1; + + Пока ИндексСимвола <= СтрДлина(Строка) Цикл + ТекКод = КодСимвола(Строка, ИндексСимвола); + ТекСимвол = ДобавитьЛидирующиеНули(ПреобразоватьЧислоВБинарнуюСтроку(ТекКод), 8); + Результат = Результат + ПреобразоватьБинарнуюСтрокуВHEX(ТекСимвол); + ИндексСимвола = ИндексСимвола + 1; + КонецЦикла; + + Результат = ДобавитьЛидирующиеНули(Результат, 8); + Возврат Результат; + +КонецФункции + +// Функция - Преобразовать HEX в бинарную строку +// +// Параметры: +// СтрокаHEX - Строка - Строка HEX содержащая символы. +// +// Возвращаемое значение: +// Строка - Текстовая строка в бинарном представлении (Пример "000010101"). +// +Функция ПреобразоватьHEXВБинарнуюСтроку(Знач СтрокаHEX) Экспорт + + Результат = ""; + + Для ИндексСимвола = 1 По СтрДлина(СтрокаHEX) Цикл + ТекСимвол = Сред(СтрокаHEX, ИндексСимвола, 1); + Если ТекСимвол = "0" Тогда + Результат = Результат + "0000" + ИначеЕсли ТекСимвол = "1" Тогда + Результат = Результат + "0001" + ИначеЕсли ТекСимвол = "2" Тогда + Результат = Результат + "0010" + ИначеЕсли ТекСимвол = "3" Тогда + Результат = Результат + "0011" + ИначеЕсли ТекСимвол = "4" Тогда + Результат = Результат + "0100" + ИначеЕсли ТекСимвол = "5" Тогда + Результат = Результат + "0101" + ИначеЕсли ТекСимвол = "6" Тогда + Результат = Результат + "0110" + ИначеЕсли ТекСимвол = "7" Тогда + Результат = Результат + "0111" + ИначеЕсли ТекСимвол = "8" Тогда + Результат = Результат + "1000" + ИначеЕсли ТекСимвол = "9" Тогда + Результат = Результат + "1001" + ИначеЕсли ТекСимвол = "A" Тогда + Результат = Результат + "1010" + ИначеЕсли ТекСимвол = "B" Тогда + Результат = Результат + "1011" + ИначеЕсли ТекСимвол = "C" Тогда + Результат = Результат + "1100" + ИначеЕсли ТекСимвол = "D" Тогда + Результат = Результат + "1101" + ИначеЕсли ТекСимвол = "E" Тогда + Результат = Результат + "1110" + ИначеЕсли ТекСимвол = "F" Тогда + Результат = Результат + "1111" + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Функция - Преобразовать бинарную строку ВHEX +// +// Параметры: +// БинарнаяСтрока- Строка - Текстовая строка в бинарном представлении (Пример "000010101"). +// +// Возвращаемое значение: +// Строка - Строка HEX содержащая символы. +// +Функция ПреобразоватьБинарнуюСтрокуВHEX(Знач БинарнаяСтрока) Экспорт + + Результат = ""; + ВремСтрока = БинарнаяСтрока; + + Пока СтрДлина(ВремСтрока) > 0 Цикл + ТекСимвол = Лев(ВремСтрока, 4); + Если ТекСимвол = "0000" Тогда + Результат = Результат + "0"; + ИначеЕсли ТекСимвол = "0001" Тогда + Результат = Результат + "1"; + ИначеЕсли ТекСимвол = "0010" Тогда + Результат = Результат + "2"; + ИначеЕсли ТекСимвол = "0011" Тогда + Результат = Результат + "3"; + ИначеЕсли ТекСимвол = "0100" Тогда + Результат = Результат + "4"; + ИначеЕсли ТекСимвол = "0101" Тогда + Результат = Результат + "5"; + ИначеЕсли ТекСимвол = "0110" Тогда + Результат = Результат + "6"; + ИначеЕсли ТекСимвол = "0111" Тогда + Результат = Результат + "7"; + ИначеЕсли ТекСимвол = "1000" Тогда + Результат = Результат + "8"; + ИначеЕсли ТекСимвол = "1001" Тогда + Результат = Результат + "9"; + ИначеЕсли ТекСимвол = "1010" Тогда + Результат = Результат + "A"; + ИначеЕсли ТекСимвол = "1011" Тогда + Результат = Результат + "B"; + ИначеЕсли ТекСимвол = "1100" Тогда + Результат = Результат + "C"; + ИначеЕсли ТекСимвол = "1101" Тогда + Результат = Результат + "D"; + ИначеЕсли ТекСимвол = "1110" Тогда + Результат = Результат + "E"; + ИначеЕсли ТекСимвол = "1111" Тогда + Результат = Результат + "F"; + КонецЕсли; + ВремСтрока = Сред(ВремСтрока, 5); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Функция - Преобразовать бинарную строку в десятичное число +// +// Параметры: +// БинарнаяСтрока - Строка - Текстовая строка в бинарном представлении (Пример "000010101"). +// +// Возвращаемое значение: +// Число - Десятичное число. +// +Функция ПреобразоватьБинарнуюСтрокуВЧисло(Знач БинарнаяСтрока) Экспорт + + Результат = 0; + ТекущийИндекс = СтрДлина(БинарнаяСтрока) - 1; + + Для ИндексСимвол = 1 По СтрДлина(БинарнаяСтрока) Цикл + ТекСимвол = Сред(БинарнаяСтрока, ИндексСимвол, 1); + Если ТекСимвол = "1" Тогда + Результат = Результат + Pow(2, ТекущийИндекс); + КонецЕсли; + ТекущийИндекс = ТекущийИндекс - 1; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Функция - Преобразовать десятичное число в бинарную строку +// +// Параметры: +// Число - Число - Десятичное число которое будет преобразовано в бинарный вид. +// КоличествоСимволов - Число - количество символов. +// +// Возвращаемое значение: +// Строка - Текстовая строка в бинарном представлении (Пример "000010101"). +// +Функция ПреобразоватьЧислоВБинарнуюСтроку(Знач Число, Знач КоличествоСимволов = 0) Экспорт + + Результат = ""; + + Пока Число > 0 Цикл + Остаток = Число % 2; + Число = Цел(Число / 2); + Результат = Строка(Остаток) + Результат; + КонецЦикла; + + Результат =?(ПустаяСтрока(Результат), "0", Результат); + + Если КоличествоСимволов > 0 Тогда + Пока СтрДлина(Результат) < КоличествоСимволов Цикл + Результат = "0" + Результат; + КонецЦикла; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Сформировать серийный номер по правилам производителей чипов. +// +// Параметры: +// TID - Строка - TID +// EPC - Неопределено - EPC +// +// Возвращаемое значение: +// Структура - Получить серийный номер по TID: +// *Результат - Булево - +// *ОписаниеОшибки - Строка - +// *СерийныйНомер - Строка - +// +Функция ПолучитьСерийныйНомерПоTID(Знач TID, Знач EPC = Неопределено) Экспорт + + ОписаниеОшибки = НСтр("ru='Ошибка генерации серийного номера по TID.'"); + РезультатВыполнения = Новый Структура("Результат, ОписаниеОшибки, СерийныйНомер", Ложь, ОписаниеОшибки); + + ПризнакG2 = Лев(TID, 2); + Если ПризнакG2 <> "E2" Тогда // Фиксированное значение "E2" признак того что тип соответствует EPC Class1Gen2. + РезультатВыполнения.ОписаниеОшибки = НСтр("ru='Указанный TID не соответствует типу EPC Class1 Gen2.'"); + Возврат РезультатВыполнения; + КонецЕсли; + + // Преобразовываем HEX строку значение банка TID в бинарную строку. + БитовыйМассив = ПреобразоватьHEXВБинарнуюСтроку(TID); + // Получаем префикс производителя. + Производитель = Сред(TID, 3, 3); + + Если Производитель = "001" Или Производитель = "801" Тогда // Чипы Impinj + + СерияЧипа = Сред(БитовыйМассив, 84, 2); // Серия чипа 00 + Если СерияЧипа = "00" Тогда + СерийныйНомер = "000" + + Сред(БитовыйМассив, 86, 8) + + Сред(БитовыйМассив, 66, 15) + + Сред(БитовыйМассив, 94, 3) + + Сред(БитовыйМассив, 65, 1) + + Сред(БитовыйМассив, 55, 4) + + Сред(БитовыйМассив, 61, 4); + Иначе // Серия чипа 01,10,11 + СерийныйНомер = Сред(БитовыйМассив, 86, 11) + + Сред(БитовыйМассив, 65, 16) + + Сред(БитовыйМассив, 52, 2) + + Сред(БитовыйМассив, 57, 1) + + Сред(БитовыйМассив, 55, 4) + + Сред(БитовыйМассив, 61, 4); + КонецЕсли; + + ИначеЕсли Производитель = "006" Или Производитель = "806" Тогда // Чипы NXP Semiconductors + + СерияЧипа = Сред(БитовыйМассив, 21, 11); // Серия чипа + СерияЧипа = ПреобразоватьБинарнуюСтрокуВHEX(СерияЧипа); + Если СерияЧипа = "806" Или СерияЧипа = "807" Тогда // G2iL или G2iL+ + СерийныйНомер = "111" + + Сред(БитовыйМассив, 24, 3) + + Сред(БитовыйМассив, 33, 32); + Иначе + СерийныйНомер = Сред(БитовыйМассив, 59, 38); + КонецЕсли; + + ИначеЕсли Производитель = "003" Или Производитель = "803" Тогда // Чипы Alien Technology + + // Words 2, 3, 4 and 5 + СерийныйНомер = Сред(БитовыйМассив, 59, 38); + + Иначе + + РезультатВыполнения.ОписаниеОшибки = НСтр("ru='Генерация серийного номера для чипа производителя указанного в TID не поддерживается.'"); + Возврат РезультатВыполнения; + + КонецЕсли; + + РезультатВыполнения.Результат = Истина; + РезультатВыполнения.СерийныйНомер = ПреобразоватьБинарнуюСтрокуВЧисло(СерийныйНомер); + + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область RFID + +// Получить таблицу меток RFID. +// +// Параметры: +// ДанныеМеток - Строка +// +// Возвращаемое значение: +// Массив +// +Функция МеткиRFID(ДанныеМеток) Экспорт + + #Если ВебКлиент Тогда + Возврат МенеджерОборудованияВызовСервера.МеткиRFID(ДанныеМеток); + #Иначе + + Результат = Новый Массив(); + Если Не ПустаяСтрока(ДанныеМеток) Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ДанныеМеток); + ЧтениеXML.ПерейтиКСодержимому(); + + Если ЧтениеXML.Имя = "Table" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя = "Tag" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + // АПК: 1353-выкл TID, EPC, USER - аббревиатура + // Получение банков памяти считанной метки. + TID = ЧтениеXML.ЗначениеАтрибута("TID"); + EPC = ЧтениеXML.ЗначениеАтрибута("EPC"); + USER = ЧтениеXML.ЗначениеАтрибута("USER"); + // Декодирование банка EPC по формату SGTIN. + ПозицияДанных = МенеджерОборудованияКлиентСервер.ДекодированиеДанныхSGTIN(EPC); + ПозицияДанных.Вставить("TID" , TID); // Добавляем в структура значения TID чипа метки. + ПозицияДанных.Вставить("USER", USER); // Добавляем в структура значения банка USER. + ПозицияДанных.Вставить("UserMemory", МенеджерОборудованияКлиентСервер.ПреобразоватьHEXВСтроку(USER)); + // АПК: 1353-вкл + Результат.Добавить(ПозицияДанных); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + #КонецЕсли + +КонецФункции + +#КонецОбласти + +// Base64 в штрихкод. +// +// Параметры: +// ШтрихкодВBase64 - Строка - Штрихкод в base64 +// +// Возвращаемое значение: +// Строка - Base64 в штрихкод +Функция Base64ВШтрихкод(ШтрихкодВBase64) Экспорт + + ДвоичныеДанные = Base64Значение(ШтрихкодВBase64); + Если ДвоичныеДанные = Неопределено Тогда + Штрихкод = ШтрихкодВBase64; + Иначе + Штрихкод = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные); + КонецЕсли; + + Возврат Штрихкод; + +КонецФункции + +// Штрихкод в base64. +// +// Параметры: +// Штрихкод - Строка - Штрихкод +// +// Возвращаемое значение: +// Строка - Штрихкод в base64 +Функция ШтрихкодВBase64(Штрихкод) Экспорт + + Если Штрихкод = Неопределено Тогда + ДвоичныеДанныеСтроки = Неопределено; + Иначе + ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(Штрихкод); + ШтрихкодBase64 = Base64Строка(ДвоичныеДанныеСтроки); + ШтрихкодBase64 = СтрЗаменить(ШтрихкодBase64, Символы.ПС, ""); + ШтрихкодBase64 = СтрЗаменить(ШтрихкодBase64, Символы.ВК, ""); + КонецЕсли; + + Возврат ШтрихкодBase64; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Проверяет и преобразовывает абонентский номер (телефон) в формат ФФД +{Ц} +// +// Параметры: +// АбонентскийНомер - Строка - Телефон +// +// Возвращаемое значение: +// Строка - Абонентский номер в формат ФФД +{Ц} +// +Функция АбонентскийНомерФорматФФД(Знач АбонентскийНомер) Экспорт + + НомерФорматФФД = ""; + + Если ПустаяСтрока(АбонентскийНомер) Тогда + Возврат НомерФорматФФД; + КонецЕсли; + + Для Индекс = 1 По СтрДлина(АбонентскийНомер) Цикл + КодСимвола = Сред(АбонентскийНомер, Индекс, 1); + Если СтрНайти("0123456789", КодСимвола) > 0 Тогда + НомерФорматФФД = НомерФорматФФД + КодСимвола; + КонецЕсли; + КонецЦикла; + + ДлинаНомераТелефона = СтрДлина(НомерФорматФФД); + Если ДлинаНомераТелефона = 10 Тогда + НомерФорматФФД = "+7" + НомерФорматФФД; + ИначеЕсли ДлинаНомераТелефона = 11 И Лев(НомерФорматФФД, 1) = "8" Тогда + НомерФорматФФД = "+7" + Сред(НомерФорматФФД, 2); + Иначе + НомерФорматФФД = "+" + НомерФорматФФД; + КонецЕсли; + + Возврат НомерФорматФФД; + +КонецФункции + +// Идентификатор клиента для рабочего места. +// +// Возвращаемое значение: +// Строка - Идентификатор клиента для рабочего места +Функция ИдентификаторКлиентаДляРабочегоМеста() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация(); + Возврат ВРег(СистемнаяИнформация.ИдентификаторКлиента); + +КонецФункции + +Функция НовыеРеквизитыПоискаРабочегоМеста() Экспорт + + Реквизиты = Новый Структура; + Реквизиты.Вставить("ИдентификаторКлиента", ""); + Реквизиты.Вставить("ИмяКомпьютера", ""); + Реквизиты.Вставить("MACАдреса", Новый Массив); + Возврат Реквизиты; + +КонецФункции + +Функция НовыеПараметрыРабочегоМеста() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("РабочееМесто"); + Параметры.Вставить("ИспользуетсяRDP", Ложь); + Параметры.Вставить("ЕстьПодключаемоеОборудование", Истина); + + Параметры.Вставить("АктуальныеРеквизитыПоиска", НовыеРеквизитыПоискаРабочегоМеста()); + Параметры.Вставить("ЗаписанныеРеквизитыПоиска", НовыеРеквизитыПоискаРабочегоМеста()); + + Возврат Параметры; + +КонецФункции + + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ДобавитьЛидирующиеНули(Знач Строка, Знач ДлиннаСтроки) + + ТекстПолный = Строка; + Пока СтрДлина(ТекстПолный) < ДлиннаСтроки Цикл + ТекстПолный = "0" + ТекстПолный; + КонецЦикла; + + Возврат ТекстПолный; + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: больше не используется +// Заполняет структуру параметров запрос КМ. +// +// Возвращаемое значение: +// Структура: +// *ИдентификаторЗапроса - Строка - Уникальный идентификатор запроса +// *Количество - Число - Количество +// *ДробноеКоличество - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДробноеКоличество +// *КонтрольнаяМарка - Строка - Код контрольной марки. Кодируется текстом в кодировке Base64. +// *КодЕдиницыИзмерения - Строка - Код единицы измерения в соответствии с общероссийским классификатором единиц измерения. +// *ПланируемыйСтатусТовара - ПеречислениеСсылка +// +Функция ПараметрыЗапросКМ() Экспорт; + + Если МенеджерОборудованияВызовСервера.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройстваКлиентСервер = ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиентСервер"); + КонецЕсли; + + Возврат МодульОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыЗапросКМ(); + +КонецФункции + +// Устарела: больше не используется +// Заполняет структуру параметров запрос КМ. +// +// Возвращаемое значение: +// Структура: +// * ИдентификаторЗапроса - Строка - Уникальный идентификатор запроса +// +Функция ПараметрыПодтверждениеКМ() Экспорт; + + Если МенеджерОборудованияВызовСервера.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройстваКлиентСервер = ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиентСервер"); + КонецЕсли; + + Возврат МодульОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПодтверждениеКМ(); + +КонецФункции + +// Устарела: больше не используется +// Возвращает ссылку на общий модуль или модуль менеджера по имени. +// +// См. ОбщегоНазначенияБПО.ОбщийМодуль +// +// Параметры: +// Имя - Строка - имя общего модуля. +// +// Возвращаемое значение: +// ОбщийМодуль - общий модуль. +// +// Пример: +// Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда +// МодульОбновлениеКонфигурации = ОбщегоНазначенияБПО.ОбщийМодуль("ОбновлениеКонфигурации"); +// МодульОбновлениеКонфигурации.<Имя метода>(); +// КонецЕсли; +// +// Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда +// МодульПолнотекстовыйПоискСервер = ОбщегоНазначенияБПО.ОбщийМодуль("ПолнотекстовыйПоискСервер"); +// МодульПолнотекстовыйПоискСервер.<Имя метода>(); +// КонецЕсли. +Функция ОбщийМодуль(Имя) + + Модуль = Вычислить(Имя); // АПК: 486 ВычислитьВБезопасномРежиме не требуется, т.к. проверка надежная. + +#Если Не ВебКлиент Тогда + + // В веб-клиенте не проверяется + // т.к. при обращении к модулям с вызовом сервера типа такого модуля в веб-клиенте не существует. + + Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда + ВызватьИсключение СтрШаблон( + НСтр("ru = 'Общий модуль ""%1"" не существует.'"), + Имя); + КонецЕсли; + +#КонецЕсли + + Возврат Модуль; + +КонецФункции + +#КонецОбласти + +Функция СтрокаЗапускаБезопасная(СтрокаЗапуска) Экспорт + + // Безопасными считаются такие строковые данные, которые не содержат в себе следующие символы: "$", "`", "|", "||" ";", "&", "&&". + ОпасныйВызов = СтрНайти(СтрокаЗапуска, "$")>0 + Или СтрНайти(СтрокаЗапуска, "`")>0 + Или СтрНайти(СтрокаЗапуска, "|")>0 + Или СтрНайти(СтрокаЗапуска, "||")>0 + Или СтрНайти(СтрокаЗапуска, ";")>0 + Или СтрНайти(СтрокаЗапуска, "&")>0 + Или СтрНайти(СтрокаЗапуска, "&&")>0; + Возврат Не ОпасныйВызов; + +КонецФункции + +// Устарела: следует использовать ОбщегоНазначенияБПОКлиент.ДатаСеанса. +Функция ДатаСеанса() Экспорт + + Возврат ОбщегоНазначенияБПОКлиентСервер.ДатаСеанса(); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияКлиентСерверПереопределяемый.xml b/CommonModules/МенеджерОборудованияКлиентСерверПереопределяемый.xml new file mode 100644 index 0000000..12b7e2a --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиентСерверПереопределяемый.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияКлиентСерверПереопределяемый + + + ru + Менеджер оборудования клиент сервер переопределяемый + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияКлиентСерверПереопределяемый/Ext/Module.bsl b/CommonModules/МенеджерОборудованияКлиентСерверПереопределяемый/Ext/Module.bsl new file mode 100644 index 0000000..a56196f --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиентСерверПереопределяемый/Ext/Module.bsl @@ -0,0 +1,35 @@ + +#Область ПрограммныйИнтерфейс + +// Обработчик события вызывается при получении имени кассира. +// +// Параметры: +// ИмяКассира - Строка, Неопределено - Текст, используемый для заполнения документа +// СтандартнаяОбработка - Булево +// +Процедура ОбработкаЗаполненияИмяКассира(ИмяКассира, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Обработчик события вызывается при получении ИНН кассира. +// +// Параметры: +// ИННКассира - Строка, Неопределено - Текст, используемый для заполнения документа +// СтандартнаяОбработка - Булево +// +Процедура ОбработкаЗаполненияИННКассира(ИННКассира, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Обработчик события вызывается при заполнения наименования рабочего места. +// +// Параметры: +// Наименование - Строка - Наименование рабочего места. +// ИмяПользователя - Строка - Имя пользователя информационной базы. +// СтандартнаяОбработка - Булево +// +Процедура ОбработкаЗаполненияНаименованияРабочегоМеста(Наименование, ИмяПользователя, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти diff --git a/CommonModules/МенеджерОборудованияМаркировка.xml b/CommonModules/МенеджерОборудованияМаркировка.xml new file mode 100644 index 0000000..dbb89b7 --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировка.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияМаркировка + + + ru + Менеджер оборудования маркировка + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияМаркировка/Ext/Module.bsl b/CommonModules/МенеджерОборудованияМаркировка/Ext/Module.bsl new file mode 100644 index 0000000..f00f2aa --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировка/Ext/Module.bsl @@ -0,0 +1,1106 @@ +#Область ПрограммныйИнтерфейс + +// Возвращает код планируемого статус маркируемого товара +// +// Параметры: +// ПланируемыйСтатусМаркируемогоТовара - ПеречислениеСсылка.ПланируемыйСтатусМаркируемогоТовара - Планируемый статус маркируемого товара. +// +// Возвращаемое значение: +// Число - Код планируемого статус маркируемого товара по ОФД +// +Функция КодПланируемыйСтатусМаркируемогоТовара(ПланируемыйСтатусМаркируемогоТовара) Экспорт + + Соответствие = Новый Соответствие(); + + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ШтучныйТоварРеализован") , 1); + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.МерныйТоварВСтадииРеализации"), 2); + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ШтучныйТоварВозвращен") , 3); + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ЧастьТовараВозвращена") , 4); + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.СтатусТовараНеИзменился") , 255); + + Возврат Соответствие.Получить(ПланируемыйСтатусМаркируемогоТовара); + +КонецФункции + +// Возвращает код ответа ОИСМ о статусе товара +// +// Параметры: +// ОтветОИСМОСтатусеТовара - ПеречислениеСсылка.ОтветОИСМОСтатусеТовара - Ответ от ИСМО. +// +// Возвращаемое значение: +// Число - Ответ ОИСМ о статусе товара по ОФД +// +Функция КодОтветаОИСМОСтатусеТовара(ОтветОИСМОСтатусеТовара) Экспорт + + Соответствие = Новый Соответствие(); + + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПланируемыйСтатусТовараКорректен") , 1); + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПланируемыйСтатусТовараНекорректен"), 2); + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ОборотТовараПриостановлен") , 3); + + Возврат Соответствие.Получить(ОтветОИСМОСтатусеТовара); + +КонецФункции + +// Возвращает ответ ОИСМ о статусе товара по коду. +// +// Параметры: +// ОтветОИСМОСтатусеТовара - Число - Ответ от ИСМО. +// +// Возвращаемое значение: +// ПеречислениеСсылка.ОтветОИСМОСтатусеТовара - Ответ ОИСМ. +// +Функция ОтветОИСМОСтатусеТовараПоКоду(ОтветОИСМОСтатусеТовара) Экспорт + + Соответствие = Новый Соответствие(); + + Соответствие.Вставить(1, ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПланируемыйСтатусТовараКорректен")); + Соответствие.Вставить(2, ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПланируемыйСтатусТовараНекорректен")); + Соответствие.Вставить(3, ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ОборотТовараПриостановлен")); + + Возврат Соответствие.Получить(ОтветОИСМОСтатусеТовара); + +КонецФункции + +// Возвращает код типа маркировки ККТ по коду. +// +// Параметры: +// ТипМаркировкиККТ - ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТ. +// +// Возвращаемое значение: +// Строка, Произвольный - Код типа маркировки ККТ +Функция КодТипаМаркировкиККТ(ТипМаркировкиККТ) Экспорт + + ТипыМаркировкиККТ = Новый Соответствие(); + + ТипыМаркировкиККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ИзделияИзМеха") , "02"); + ТипыМаркировкиККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ЛекарственныеПрепараты"), "03"); + ТипыМаркировкиККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ТабачнаяПродукция") , "05"); + ТипыМаркировкиККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ОбувныеТовары") , "1520"); + + Возврат ТипыМаркировкиККТ.Получить(ТипМаркировкиККТ); + +КонецФункции + +// Возвращает код типа маркировки ККТ. +// +// Параметры: +// КодТипМаркировкиККТ - Число - Код тип маркировки ККТ +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТПо коду +Функция ТипМаркировкиККТПоКоду(КодТипМаркировкиККТ) Экспорт + + ТипыМаркировкиККТ = Новый Соответствие(); + + ТипыМаркировкиККТ.Вставить("02" , ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ИзделияИзМеха")); + ТипыМаркировкиККТ.Вставить("03" , ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ЛекарственныеПрепараты")); + ТипыМаркировкиККТ.Вставить("05" , ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ТабачнаяПродукция")); + ТипыМаркировкиККТ.Вставить("1520", ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ОбувныеТовары")); + + Возврат ТипыМаркировкиККТ.Получить(КодТипМаркировкиККТ); + +КонецФункции + +// Возвращает статус результата запроса КМ по коду. +// +// Параметры: +// КодСтатуса - Число - Код статуса. +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.СтатусРезультатаЗапросаКМ - Статус результата запроса КМПо коду +Функция СтатусРезультатаЗапросаКМПоКоду(КодСтатуса) Экспорт + + РезультатЗапроса = Новый Соответствие(); + + РезультатЗапроса.Вставить(0, ПредопределенноеЗначение("Перечисление.СтатусРезультатаЗапросаКМ.Получен")); + РезультатЗапроса.Вставить(1, ПредопределенноеЗначение("Перечисление.СтатусРезультатаЗапросаКМ.Ожидается")); + РезультатЗапроса.Вставить(2, ПредопределенноеЗначение("Перечисление.СтатусРезультатаЗапросаКМ.НеМожетБытьПолучен")); + + Возврат РезультатЗапроса.Получить(Число(КодСтатуса)); + +КонецФункции + +// Возвращает, для каких типов идентификаторов будет заполняться код товара. +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыИдентификаторовТовараККТ +// +Функция КодТовараЗаполняетсяДляТиповИдентификаторов() Экспорт; + + ТипыИдентификаторов = Новый Массив(); + ТипыИдентификаторов.Добавить(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС2); + ТипыИдентификаторов.Добавить(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС3); + ТипыИдентификаторов.Добавить(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1); + ТипыИдентификаторов.Добавить(Перечисления.ТипыИдентификаторовТовараККТ.ИзделияИзНатуральногоМеха); + ТипыИдентификаторовОбработка = ТипыИдентификаторов; + ВыполненаСтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.КодТовараЗаполняетсяДляТиповИдентификаторов(ТипыИдентификаторовОбработка, ВыполненаСтандартнаяОбработка); + Если ВыполненаСтандартнаяОбработка Тогда + Результат = ТипыИдентификаторов + Иначе + Результат = ТипыИдентификаторовОбработка + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Идентифицирует ли код товара (значение тега 1162) экземпляр товара. +// +// Параметры: +// РеквизитКодаТовара - Строка - Значение реквизита кода товара в BASE64. +// ШтриховойКодТовара - Строка - Штриховой код товара. +// +// Возвращаемое значение: +// Булево - Истина - Если код товара идентифицирует экземпляр товара. +// +Функция КодТовараИдентифицируетЭкземпляр(Знач РеквизитКодаТовара = Неопределено, Знач ШтриховойКодТовара = Неопределено) Экспорт + + Результат = Ложь; + // Если реквизит кода товара (1162) не передается в готовом виде + Если ПустаяСтрока(РеквизитКодаТовара) Тогда + МодульМенеджерОборудованияМаркировкаКлиентСервер = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировкаКлиентСервер"); + ДанныеКодаТовара = МодульМенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(ШтриховойКодТовара); + РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара; + КонецЕсли; + + Если НЕ ПустаяСтрока(РеквизитКодаТовара) Тогда + ТипыИдентификаторов = КодТовараЗаполняетсяДляТиповИдентификаторов(); + НачалоРеквизитКодаТовара = Лев(РеквизитКодаТовара, 3); + Если НачалоРеквизитКодаТовара = "RE0" Тогда // GS1 Data Matrix или Data Matrix - Если первые 2 байта значения кода товара имеют значения "44h4Dh". + Результат = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1) <> Неопределено; + ИначеЕсли НачалоРеквизитКодаТовара = "UkZ" Тогда // Меховые изделия - Если первые 2 байта значения кода товара имеют значения "52h46h". + Результат = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.ИзделияИзНатуральногоМеха) <> Неопределено; + ИначеЕсли НачалоРеквизитКодаТовара = "xRR" Тогда // ЕГАИС 2.0 - Если первые 2 байта значения кода товара имеют значения "C5h14h". + Результат = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС2) <> Неопределено; + ИначеЕсли НачалоРеквизитКодаТовара = "xR4" Тогда // ЕГАИС 3.0 - Если первые 2 байта значения кода товара имеют значения "C5h1Eh". + Результат = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС3) <> Неопределено; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#Область ФормированиеДанныхККТ + +// Сформировать XML для запроса КМ. +// +// Параметры: +// ПараметрыОперации - Структура - Параметры операции. +// +// Возвращаемое значение: +// Строка +// +Функция СформироватьXMLДляЗапросаКМ(ПараметрыОперации, РевизияИнтерфейса = 0) Экспорт + + ЗаписьXML = Новый ЗаписьXML(); + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("RequestKM"); + + ИдентификаторЗапроса = ПараметрыОперации.ИдентификаторЗапроса; + Если ПустаяСтрока(ИдентификаторЗапроса) Тогда + ИдентификаторЗапроса = Новый УникальныйИдентификатор; + КонецЕсли; + + ЗаписьXML.ЗаписатьАтрибут("GUID", XMLСтрока(ИдентификаторЗапроса)); + ЗаписьXML.ЗаписатьАтрибут("WaitForResult", ?(ПараметрыОперации.ОжидатьПолучениеОтветаОИСМ, "True", "False")); + ЗаписьXML.ЗаписатьАтрибут("NotSendToServer", ?(НЕ ПараметрыОперации.ОтправлятьНаСерверОИСМ, "True", "False")); + + ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ПараметрыОперации.КонтрольнаяМарка)); + ПланируемыйСтатусТовара = КодПланируемыйСтатусМаркируемогоТовара(ПараметрыОперации.ПланируемыйСтатусТовара); + ЗаписьXML.ЗаписатьАтрибут("PlannedStatus", XMLСтрока(ПланируемыйСтатусТовара)); + + ДробноеКоличествоУказано = Ложь; + ДробноеКоличество = ПараметрыОперации.ДробноеКоличество; + Если Не ПустаяСтрока(ДробноеКоличество.Числитель) И Не ПустаяСтрока(ДробноеКоличество.Знаменатель) Тогда + Если Число(ДробноеКоличество.Числитель) > 0 И Число(ДробноеКоличество.Знаменатель) > 0 Тогда + ДробноеКоличествоУказано = Истина; + КонецЕсли; + КонецЕсли; + + Если РевизияИнтерфейса >= 4001 Тогда + // Приказ ФНС России от 12.04.2023 N ЕД-7-20/239@ + Если ПараметрыОперации.Количество <> 1 Тогда + ЗаписьXML.ЗаписатьАтрибут("Quantity", XMLСтрока(ПараметрыОперации.Количество)); // тег 1023 + КонецЕсли; + Если ПланируемыйСтатусТовара = 2 Или ПланируемыйСтатусТовара = 4 Тогда + Если ДробноеКоличествоУказано Тогда + МераКоличестваПредметаРасчета = 0 ; + ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета)); + ЗаписьXML.ЗаписатьНачалоЭлемента("FractionalQuantity"); + ЗаписьXML.ЗаписатьАтрибут("Numerator", XMLСтрока(ДробноеКоличество.Числитель)); + ЗаписьXML.ЗаписатьАтрибут("Denominator", XMLСтрока(ДробноеКоличество.Знаменатель)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли + КонецЕсли; + Если Не ПустаяСтрока(ПараметрыОперации.КодЕдиницыИзмерения) Тогда + МераКоличестваПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(ПараметрыОперации.КодЕдиницыИзмерения) + Иначе + МераКоличестваПредметаРасчета = ПараметрыОперации.МераКоличестваПредметаРасчета; + КонецЕсли; + Если Не ПустаяСтрока(МераКоличестваПредметаРасчета) И НЕ (МераКоличестваПредметаРасчета = 0) Тогда // тег 2108 + МераКоличестваПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчета); + ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета)); + КонецЕсли; + Иначе + // Реквизиты "количество предмета расчета" (тег 1023) и "мера количества предмета расчета" (тег 2108) включаются в состав запроса о коде маркировки + // в случае, если реквизит "планируемый статус товара" (тег 2003) принимает значения "2" или "4". + Если ПланируемыйСтатусТовара = 2 Или ПланируемыйСтатусТовара = 4 Тогда + ЗаписьXML.ЗаписатьАтрибут("Quantity", XMLСтрока(ПараметрыОперации.Количество)); // тег 1023 + Если ДробноеКоличествоУказано Тогда + МераКоличестваПредметаРасчета = 0 ; + ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета)); + ЗаписьXML.ЗаписатьНачалоЭлемента("FractionalQuantity"); + ЗаписьXML.ЗаписатьАтрибут("Numerator", XMLСтрока(ДробноеКоличество.Числитель)); + ЗаписьXML.ЗаписатьАтрибут("Denominator", XMLСтрока(ДробноеКоличество.Знаменатель)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + Иначе + Если Не ПустаяСтрока(ПараметрыОперации.КодЕдиницыИзмерения) Тогда + МераКоличестваПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(ПараметрыОперации.КодЕдиницыИзмерения) + Иначе + МераКоличестваПредметаРасчета = ПараметрыОперации.МераКоличестваПредметаРасчета; + КонецЕсли; + Если Не ПустаяСтрока(МераКоличестваПредметаРасчета) Тогда // тег 2108 + МераКоличестваПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчета); + ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета)); + КонецЕсли; + КонецЕсли + КонецЕсли; + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + Возврат ЗаписьXML.Закрыть(); + +КонецФункции + +// Получить результаты запроса КМ из XML пакета. +// +// Параметры: +// ДанныеXML - Строка - XML. +// +// Возвращаемое значение: +// Структура - Получить результаты запроса КМИз XMLПакета: +// * КодМаркировкиПроверен - Булево - +// * РезультатПроверки - Булево - +Функция ПолучитьРезультатыЗапросаКМИзXMLПакета(ДанныеXML) Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("КодМаркировкиПроверен", Ложь); + Параметры.Вставить("РезультатПроверки", Ложь); + + Если Не ПустаяСтрока(ДанныеXML) Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ДанныеXML); + ЧтениеXML.ПерейтиКСодержимому(); + Если ЧтениеXML.Имя = "RequestKMResult" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Параметры.КодМаркировкиПроверен = ВРег(ЧтениеXML.ЗначениеАтрибута("Checking")) = "TRUE"; + Параметры.РезультатПроверки = ВРег(ЧтениеXML.ЗначениеАтрибута("CheckingResult")) = "TRUE"; + КонецЕсли; + КонецЕсли; + + Возврат Параметры; + +КонецФункции + +// Получить результаты запроса ОИСМ КМ из XML пакета. +// +// Параметры: +// ДанныеXML - Строка - XML. +// Параметры - Неопределено - Параметры +// +// Возвращаемое значение: +// Неопределено, Структура - Получить результаты ОИСМКМИз XMLПакета: +// * ИдентификаторЗапроса - УникальныйИдентификатор. +// * СтатусРезультата - ПеречислениеСсылка.СтатусРезультатаЗапросаКМ. +// * РезультатПроверкиОИСМ - Булево - +// * КодРезультатаПроверкиОИСМ - Число - +// * РезультатПроверкиОИСМПредставление - Строка - +// * РезультатПроверкиСведенийОТоваре - Булево +// * РезультатПроверкиСведенийОТовареПФ - Булево +// * КодОбработкиЗапроса - Число +// * СтатусОбработкиЗапроса - ПеречислениеСсылка.СтатусОбработкиЗапросаКМ. +// * СтатусТовара - Неопределено - +Функция ПолучитьРезультатыОИСМКМИзXMLПакета(ДанныеXML, Параметры = Неопределено) Экспорт + + Если Параметры = Неопределено Тогда + Параметры = Новый Структура(); + КонецЕсли; + Параметры.Вставить("ИдентификаторЗапроса"); + Параметры.Вставить("СтатусРезультата"); + Параметры.Вставить("РезультатПроверкиОИСМ", Ложь); + Параметры.Вставить("КодРезультатаПроверкиОИСМ", 0); + Параметры.Вставить("РезультатПроверкиОИСМПредставление", "00000000"); + + Параметры.Вставить("РезультатПроверкиСведенийОТоваре"); + Параметры.Вставить("РезультатПроверкиСведенийОТовареПФ"); + Параметры.Вставить("КодОбработкиЗапроса"); + Параметры.Вставить("СтатусОбработкиЗапроса"); + + Параметры.Вставить("СтатусТовара", Неопределено); + + Если Не ПустаяСтрока(ДанныеXML) Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ДанныеXML); + ЧтениеXML.ПерейтиКСодержимому(); + Если ЧтениеXML.Имя = "ProcessingKMResult" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Параметры.РезультатПроверкиОИСМ = ВРег(ЧтениеXML.ЗначениеАтрибута("Result")) = "TRUE"; + Параметры.КодРезультатаПроверкиОИСМ = ЧтениеXML.ЗначениеАтрибута("ResultCode"); + Если ЧтениеXML.ЗначениеАтрибута("ResultCode") <> Неопределено Тогда + Параметры.КодРезультатаПроверкиОИСМ = Число(ЧтениеXML.ЗначениеАтрибута("ResultCode")); + Параметры.РезультатПроверкиОИСМПредставление = МенеджерОборудованияКлиентСервер.ПреобразоватьЧислоВБинарнуюСтроку(Параметры.КодРезультатаПроверкиОИСМ, 8); + КонецЕсли; + Если ЧтениеXML.ЗначениеАтрибута("StatusInfo") <> Неопределено Тогда + СтатусТовара = Число(ЧтениеXML.ЗначениеАтрибута("StatusInfo")); + Параметры.СтатусТовара = ОтветОИСМОСтатусеТовараПоКоду(СтатусТовара); + КонецЕсли; + Параметры.ИдентификаторЗапроса = ЧтениеXML.ЗначениеАтрибута("GUID"); + КодОбработкиЗапроса = ЧтениеXML.ЗначениеАтрибута("HandleCode"); + Если Не ПустаяСтрока(КодОбработкиЗапроса) Тогда + Параметры.КодОбработкиЗапроса = Число(КодОбработкиЗапроса); + Параметры.СтатусОбработкиЗапроса = СтатусОбработкиЗапросаКМПоКоду(Параметры.КодОбработкиЗапроса); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Параметры.РезультатПроверкиСведенийОТоваре = РезультатПроверкиСведенийОТоваре(Параметры.РезультатПроверкиОИСМПредставление); + Параметры.РезультатПроверкиСведенийОТовареПФ = РезультатПроверкиСведенийОТовареПФ(Параметры.РезультатПроверкиОИСМПредставление); + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область ЛогированиеОперацийПроверкиКМ + +// Возвращает структуру для формирования записи в журнале логирования операций проверки кода маркировки +// +// Возвращаемое значение: +// Структура: +// * Наименование - Строка - наименование товара +// * КонтрольнаяМарка - Строка - контрольная марка в виде Base64 +// * ЗапросРазрешенияПродажиКМ - Булево - выполнялся запрос разрешения продажи +// * АдресСервераЗапросаРазрешения - Строка - адрес сервера где выполняется запрос разрешения +// * ТекстЗапросаРазрешения - Строка - текст запроса для получения разрешения +// * КодОтветаРазрешения - Строка - код ответа который получен от удаленного сервера, если код не задан, а значение флага +// ЗапросРазрешенияПродажиКМ установлено в Истина, тогда код будет содержать текст Таймаут +// * РезультатЗапросаРазрешения - Строка - JSON - строка, ответ от удаленного сервера ГИС МТ +// * ИдентификаторЗапросаРазрешения - Строка - идентификатор запроса полученного разрешения +// * ВремяЗапросаРазрешения - Строка, Дата, Неопределено - таймштамп полученный с удаленного сервера +// * ПродажаРазрешена - Булево - флаг указывающий, что продажа разрешена, на форме записи будет отображение, что продажа разрешена. +// * ПричинаЗапрета - Строка - Причина запрета продажи, для отображения на форме записи +// * ДополнительныеСведения - Массив из см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ДополнительноеСведениеЗапросаКМ +// +Функция ПараметрыЗаписиОперацииПроверкиКМ() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("Наименование", ""); + Результат.Вставить("КонтрольнаяМарка", ""); + Результат.Вставить("ЗапросРазрешенияПродажиКМ", Истина); + Результат.Вставить("АдресСервераЗапросаРазрешения", ""); + Результат.Вставить("ТекстЗапросаРазрешения", ""); + Результат.Вставить("КодОтветаРазрешения", ""); + Результат.Вставить("РезультатЗапросаРазрешения", ""); + Результат.Вставить("ИдентификаторЗапросаРазрешения", ""); + Результат.Вставить("ВремяЗапросаРазрешения", Неопределено); + Результат.Вставить("ПродажаРазрешена", Ложь); + Результат.Вставить("ПричинаЗапрета", ""); + Результат.Вставить("ДополнительныеСведения", Новый Массив); + Возврат Результат; + +КонецФункции + +// Процедура добавляет в журнал операций проверки контрольной марки, операцию по проверке КМ на сервере ГИС МТ +// +// Параметры: +// ПараметрыЗаписиОперации - см. ПараметрыЗаписиОперацииПроверкиКМ +// +Процедура ДобавитьЗаписьВЖурналОперацийПроверкиКМ(ПараметрыЗаписиОперации) Экспорт + + МассивЗаписей = Новый Массив(); + ПараметрыЗаписи = РегистрыСведений.ОперацииПроверкиКМ.ПараметрыЗаписиРезультатаПроверкиКМ(); + + ПараметрыЗаписи.Ключ.ИдентификаторСессии = Новый УникальныйИдентификатор(); + ПараметрыЗаписи.Ключ.ИдентификаторЗапроса = Новый УникальныйИдентификатор(); + ЗапросКМ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыЗапросКМ(); + ЗаполнитьЗначенияСвойств(ЗапросКМ, ПараметрыЗаписиОперации); + + ПараметрыЗаписи.ЗапросКМ = ЗапросКМ; + ПараметрыЗаписи.ФлагиПроверкиОИСМ = ""; + ПараметрыЗаписи.ЛокальныйОтветXML = ""; + ПараметрыЗаписи.УдаленныйОтветXML = ""; + ПараметрыЗаписи.ПокупкаПодтверждена = Истина; + МассивЗаписей.Добавить(ПараметрыЗаписи); + + РегистрыСведений.ОперацииПроверкиКМ.ДобавитьРезультатыПроверкиКодаМаркировкиВРегистр(МассивЗаписей); + +КонецПроцедуры + +// Возвращает параметры записи результата проверки ЕГАИС в журнал проверки кода маркировки +// +// Возвращаемое значение: +// Структура: +// * ИдентификаторФискальнойОперации - Строка - guid идентификатор фискальной операции +// * Выполнено - Булево - результат операции выполнен +// * ШтрихкодыПродукции - Соответствие из КлючИЗначение: +// ** Ключ - Строка - марка в base64 +// ** Значение - Структура : +// *** Наименование - Строка - наименование продукции +// * ИдентификаторЗапроса - Строка - Идентификатор запроса ЕГАИС +// * ВходящееСообщение - ОпределяемыйТип.СообщениеЕГАИСвБПО - тип сообщения ЕГАИС +// * ИсходящееСообщение - ОпределяемыйТип.СообщениеЕГАИСвБПО - тип сообщения ЕГАИС +// * СообщениеПередано - Булево - флаг того что сообщение передано успешно +// * ТекстОшибки - Строка +// * ПодписьЧека - Строка +// +Функция ПараметрыЗаписиРезультатаПроверкиЕГАИС() Экспорт + + Возврат РегистрыСведений.ОперацииПроверкиКМ.ПараметрыЗаписиРезультатаПроверкиЕГАИС(); + +КонецФункции + +// Выполняет запись в журнал операций проверки КМ +// +// Параметры: +// ПараметрыЗаписи - см. ПараметрыЗаписиРезультатаПроверкиЕГАИС +// +Процедура ДобавитьРезультатыОтправкиЕГАИС(ПараметрыЗаписи) Экспорт + + РегистрыСведений.ОперацииПроверкиКМ.ДобавитьРезультатыОтправкиЕГАИС(ПараметрыЗаписи); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ФормированиеДанныхККТ + +// Выполняет запись о маркировке в XML для отправки на фискальный регистратор +Процедура ЗаписатьДанныеКодаТоварнойНоменклатуры(ЗаписьXML, Позиция, ПараметрыФискализации) Экспорт + + ДанныеКодаТоварнойНоменклатуры = Позиция.ДанныеКодаТоварнойНоменклатуры; + ДанныеКодаТовара = Неопределено; + + // Код товара заполняемся для "товара" для ФФД 1.1 + Если ПараметрыФискализации.РевизияИнтерфейса < 3004 + И Позиция.ПризнакПредметаРасчета <> Перечисления.ПризнакиПредметаРасчета.Товар + И Позиция.ПризнакПредметаРасчета <> Перечисления.ПризнакиПредметаРасчета.ПодакцизныйТовар Тогда + Возврат; + КонецЕсли; + + // Требования к разработке драйверов подключаемого оборудования, версия 3.2 и выше. + Если ПараметрыФискализации.РевизияИнтерфейса > 3001 Тогда + + МодульМенеджерОборудованияМаркировкаКлиентСервер = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировкаКлиентСервер"); + Если НЕ ПустаяСтрока(Позиция.КодВидаНоменклатурнойКлассификации) Тогда + ДанныеКодаТовара = МодульМенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Позиция.КодВидаНоменклатурнойКлассификации); + РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара; + ИначеЕсли НЕ ПустаяСтрока(Позиция.ШтрихкодBase64) Тогда + ДанныеКодаТовара = МодульМенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Позиция.ШтрихкодBase64, Истина); + РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара; + Иначе + ДанныеКодаТовара = МодульМенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Позиция.Штрихкод); + РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара; + КонецЕсли; + + ТипыИдентификаторов = КодТовараЗаполняетсяДляТиповИдентификаторов(); + + Если ПараметрыФискализации.РевизияИнтерфейса > 3003 Тогда // 3.4 и выше + // ФФД 1.2 + Если (НЕ ПустаяСтрока(РеквизитКодаТовара) И НЕ ПустаяСтрока(ДанныеКодаТовара.ШтрихкодBase64)) Тогда // Запись тега 1163 + Если ПустаяСтрока(Позиция.КонтрольнаяМарка) И ТипыИдентификаторов.Найти(ДанныеКодаТовара.ТипИдентификатораТовара)<> Неопределено Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("GoodCodeData"); + Если ДанныеКодаТовара.ТипИдентификатораТовара = Перечисления.ТипыИдентификаторовТовараККТ.ИзделияИзНатуральногоМеха Тогда + ЗаписьXML.ЗаписатьАтрибут(ДанныеКодаТовара.НаименованиеРеквизита, XMLСтрока(МенеджерОборудованияКлиентСервер.Base64ВШтрихкод(ДанныеКодаТовара.ШтрихкодBase64))); + // Заполнение отраслевых реквизитов в соответствии с требованиями ЦРПТ по ТипИдентификатораТовара + ЗаполнитьОтраслевойРеквизитИзделияИзНатуральногоМеха(Позиция); + ИначеЕсли ДанныеКодаТовара.ТипИдентификатораТовара = Перечисления.ТипыИдентификаторовТовараККТ.КодТовараНеРаспознан Тогда + ЗаписьXML.ЗаписатьАтрибут(ДанныеКодаТовара.НаименованиеРеквизита, XMLСтрока(ДанныеКодаТовара.ШтрихкодBase64)); + Иначе + ШтрихкодBase64 = ШтрихкодДляТега1163Base64(ДанныеКодаТовара); + ЗаписьXML.ЗаписатьАтрибут(ДанныеКодаТовара.НаименованиеРеквизита, XMLСтрока(ШтрихкодBase64)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + КонецЕсли; + Если ДанныеКодаТовара.ТипИдентификатораТовара = Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1 И ДанныеКодаТовара.ТехническийКод Тогда + ЗаполнитьОтраслевойРеквизитМолочнаяПродукцияСНечитаемымиКМ(Позиция); + КонецЕсли; + Иначе + // ФФД 1.1 + ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(); + ФормироватьРеквизитКодаТовара = Ложь; + НачалоРеквизитКодаТовара = Лев(РеквизитКодаТовара, 3); + Если НЕ ПустаяСтрока(Позиция.КодВидаНоменклатурнойКлассификации) Тогда // СИЗ + ФормироватьРеквизитКодаТовара = Истина + ИначеЕсли НачалоРеквизитКодаТовара = "RQg" Тогда // EAN8 - Если первые 2 байта значения кода товара имеют значения "45h08h". + ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеEAN8) <> Неопределено; + ФормироватьРеквизитКодаТовара = ФормироватьРеквизитКодаТовара И Позиция.ОбъемноСортовойУчет И ТипыТоваров.ОбъемноСортовойУчет; + ИначеЕсли НачалоРеквизитКодаТовара = "RQ0" Тогда // EAN13 - Если первые 2 байта значения кода товара имеют значения "45h0Dh". + ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеEAN8) <> Неопределено; + // Формируем 1162 только товаров объемно-сортовой учета, если заполняем отраслевой реквизит. + ФормироватьРеквизитКодаТовара = ФормироватьРеквизитКодаТовара И Позиция.ОбъемноСортовойУчет И ТипыТоваров.ОбъемноСортовойУчет; + ИначеЕсли НачалоРеквизитКодаТовара = "SQ4" Тогда // ITF-14 - Если первые 2 байта значения кода товара имеют значения "49h0Eh". + ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеITF14) <> Неопределено; + ИначеЕсли НачалоРеквизитКодаТовара = "RE0" Тогда // GS1 Data Matrix или Data Matrix - Если первые 2 байта значения кода товара имеют значения "44h4Dh". + ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1) <> Неопределено; + ИначеЕсли НачалоРеквизитКодаТовара = "UkZ" Тогда // Меховые изделия - Если первые 2 байта значения кода товара имеют значения "52h46h". + ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.ИзделияИзНатуральногоМеха) <> Неопределено; + // Формируем 1162 для изделия из натурального меха, если заполняем отраслевой реквизит. + ФормироватьРеквизитКодаТовара = ФормироватьРеквизитКодаТовара И ТипыТоваров.ИзделияИзНатуральногоМеха; + ИначеЕсли НачалоРеквизитКодаТовара = "xRR" Тогда // ЕГАИС 2.0 - Если первые 2 байта значения кода товара имеют значения "C5h14h". + ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС2) <> Неопределено; + ИначеЕсли НачалоРеквизитКодаТовара = "xR4" Тогда // ЕГАИС 3.0 - Если первые 2 байта значения кода товара имеют значения "C5h1Eh". + ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС3) <> Неопределено; + КонецЕсли; + + Если Не ФормироватьРеквизитКодаТовара Тогда + Возврат; + КонецЕсли; + + // Если первые 2 байта значения кода товара имеют значения "00h00h" в автономном режиме реквизит не включается. + Если ПараметрыФискализации.АвтономныйРежим И Лев(РеквизитКодаТовара, 2) = "AA" Тогда + Возврат; + КонецЕсли; + + // Реквизит кода товара (1162) для стандарта 3.2 и выше в ККТ передается в готовом виде. + Если НЕ ПустаяСтрока(РеквизитКодаТовара) Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("GoodCodeData"); + ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(РеквизитКодаТовара)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + КонецЕсли + Иначе + // Требования к разработке драйверов подключаемого оборудования, версия 3.1 и ниже. + Если ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.ТипМаркировки) Тогда // Необходимо всегда указывать тип маркировки. + Возврат; + КонецЕсли; + Если ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.КонтрольныйИдентификационныйЗнак) + И ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.ГлобальныйИдентификаторТорговойЕдиницы) + И ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.СерийныйНомер)Тогда + Возврат; + КонецЕсли; + + ЗаписьXML.ЗаписатьНачалоЭлемента("GoodCodeData"); + Если Не ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.ТипМаркировки) Тогда // Тип маркировки. + ТипМаркировки = КодТипаМаркировкиККТ(ДанныеКодаТоварнойНоменклатуры.ТипМаркировки); + ЗаписьXML.ЗаписатьАтрибут("StampType", XMLСтрока(ТипМаркировки)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.КонтрольныйИдентификационныйЗнак) Тогда // Контрольный идентификационный знак (КиЗ). + ЗаписьXML.ЗаписатьАтрибут("Stamp" , XMLСтрока(ДанныеКодаТоварнойНоменклатуры.КонтрольныйИдентификационныйЗнак)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.ГлобальныйИдентификаторТорговойЕдиницы) Тогда // Глобальный идентификатор торговой единицы (GTIN). + ЗаписьXML.ЗаписатьАтрибут("GTIN" , XMLСтрока(ДанныеКодаТоварнойНоменклатуры.ГлобальныйИдентификаторТорговойЕдиницы)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.СерийныйНомер) Тогда // Серийный номер. + ЗаписьXML.ЗаписатьАтрибут("SerialNumber" , XMLСтрока(ДанныеКодаТоварнойНоменклатуры.СерийныйНомер)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.РеквизитКодаТовара) Тогда // Реквизит кода товара. + ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ДанныеКодаТоварнойНоменклатуры.РеквизитКодаТовара)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ЛогированиеПроверкиКМ + +// Подготавливает отображение информации в форме списка операций проверки КМ +Процедура ПриПолученииДанныхСпискаОперацийПроверкиКМ(ИмяЭлемента, Настройки, Строки) Экспорт + + ТаблицаПроверкиСведенийОТовареПФ = МенеджерОборудованияМаркировка.ТаблицаПроверкиСведенийОТовареПФ(); + ТаблицаКодовОтветаГИСМТ = ТаблицаКодовОтветаГИСМТ(); + МассивШтрихкодов = Новый Массив(); + Для Каждого Строка Из Строки Цикл + + Данные = Строка.Значение.Данные; + Если Не ПустаяСтрока(Данные.ФлагиПроверкиОИСМ) Тогда + Данные.РезультатПроверкиОИСМ = ТаблицаПроверкиСведенийОТовареПФ[Данные.ФлагиПроверкиОИСМ]; + КонецЕсли; + Результат = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Данные.КодМаркировки, Истина); + Если Результат.Разобран Тогда + Данные.ТипКода = Результат.ТипИдентификатораТовара; + Иначе + Данные.ТипКода = Результат.ТипИдентификатораТовара; + КонецЕсли; + Если МассивШтрихкодов.Найти(Данные.Штрихкод) = Неопределено Тогда + МассивШтрихкодов.Добавить(Данные.Штрихкод); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Возвращает таблицу кодов ответа ГИСМТ +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - Число +// * Значение - Строка +// +Функция ТаблицаКодовОтветаГИСМТ() Экспорт + + ТаблицаРезультатов = Новый Соответствие(); + ТаблицаРезультатов.Вставить(Неопределено, ""); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить(0, НСтр("ru = 'Таймаут'")); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить(401, НСтр("ru = 'Ошибка авторизации'")); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить(203, НСтр("ru = 'Аварийная ситуация'")); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить(429, НСтр("ru = 'Не доступна'")); //@NON-NLS-1 @NON-NLS-2 + Возврат ТаблицаРезультатов; + +КонецФункции + +// Возвращает таблицу проверки сведений о товарах +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - Строка +// * Значение - Строка +// +Функция ТаблицаПроверкиСведенийОТоваре() Экспорт + + ТаблицаРезультатов = Новый Соответствие(); + + ТаблицаРезультатов.Вставить("00000000", НСтр("ru='Проверка КП КМ не выполнена, статус товара не проверен'")); + ТаблицаРезультатов.Вставить("00000001", НСтр("ru='Проверка КП КМ выполнена в ФН с отрицательным результатом, статус товара не проверен'")); + ТаблицаРезультатов.Вставить("00000011", НСтр("ru='Проверка КП КМ выполнена с положительным результатом, статус товара не проверен'")); + ТаблицаРезультатов.Вставить("00010000", НСтр("ru='Проверка КП КМ не выполнена, статус товара не проверен (ККТ функционирует в автономном режиме)'")); + ТаблицаРезультатов.Вставить("00010001", НСтр("ru='Проверка КП КМ выполнена в ФН с отрицательным результатом, статус товара не проверен (ККТ функционирует в автономном режиме)'")); + ТаблицаРезультатов.Вставить("00010011", НСтр("ru='Проверка КП КМ выполнена в ФН с положительным результатом, статус товара не проверен (ККТ функционирует в автономном режиме)'")); + ТаблицаРезультатов.Вставить("00000101", НСтр("ru='Проверка КП КМ выполнена с отрицательным результатом, статус товара некорректен'")); + ТаблицаРезультатов.Вставить("00000111", НСтр("ru='Проверка КП КМ выполнена с положительным результатом, статус товара некорректен'")); + ТаблицаРезультатов.Вставить("00001111", НСтр("ru='Проверка КП КМ выполнена с положительным результатом, статус товара корректен'")); + + Возврат ТаблицаРезультатов; + +КонецФункции + +// Возвращает период хранения операций проверки КМ в регистре сведений +// +// Возвращаемое значение: +// ПеречислениеСсылка.ПериодХраненияИсторииОпераций +Функция ПериодХраненияИсторииОперацийПроверкиКМ() Экспорт + + УстановитьПривилегированныйРежим(Истина); + ПериодХранения = Константы.СрокХраненияОперацийПроверкиКМ.Получить(); + Возврат ПериодХранения; + +КонецФункции + +// Установить значение констант сроков хранения операций в регистрах сведений +// +Процедура УстановитьСрокХраненияОперацийПроверкиКМ() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Если НЕ ЗначениеЗаполнено(Константы.СрокХраненияОперацийПроверкиКМ.Получить()) Тогда + Константы.СрокХраненияОперацийПроверкиКМ.Установить(Перечисления.ПериодХраненияИсторииОпераций.ВсеВремя); + КонецЕсли; + +КонецПроцедуры + +Функция ХранитьУспешныеОперацииРазрешения() Экспорт + УстановитьПривилегированныйРежим(Истина); + Возврат Константы.ХранитьУспешныеОперацииРазрешения.Получить(); +КонецФункции + +// Регламентное задание, выполнят очистку истории операций проверки КМ +// +// Параметры: +// ДатаОчистки - Дата +Процедура ОчисткаИсторииОперацийПроверкиКМ(ДатаОчистки) Экспорт + + РегистрыСведений.ОперацииПроверкиКМ.ОчиститьРегистрЗаПрошлыеМесяцы(ДатаОчистки); + РегистрыСведений.ОперацииПроверкиКМ.ОчиститьРегистрЗаТекущийМесяц(ДатаОчистки); + +КонецПроцедуры + +// Добавляет в регистр записи по переданным параметрам +// +// Параметры: +// РезультатыПроверки - Массив из см. РегистрыСведений.ОперацииПроверкиКМ.ПараметрыЗаписиРезультатаПроверкиКМ +// +Процедура ДобавитьРезультатыПроверкиКодаМаркировкиВРегистр(РезультатыПроверки) Экспорт + + РегистрыСведений.ОперацииПроверкиКМ.ДобавитьРезультатыПроверкиКодаМаркировкиВРегистр(РезультатыПроверки); + +КонецПроцедуры + +// Возвращает структуру для обновления записи по идентификаторам сессии и запроса +// +// Возвращаемое значение: +// Структура: +// * Ключ - Структура -содержит ключ записи, идентификаторы сессии и запроса: +// ** ИдентификаторСессии - Строка +// ** ИдентификаторЗапроса - Строка +// * Результат - Булево, Неопределено - общий результат операции +// * ЗапросКМ - Структура, Неопределено - структура запроса КМ +// * ФлагиПроверкиОИСМ - Строка, Неопределено - флаги ответа от сервера ОИСМ +// * ЛокальныйОтветXML - Строка - Строка XML ответ от драйвера +// * УдаленныйОтветXML - Строка - Строка XML ответ от драйвера с сервера ОИСМ +// * ПокупкаПодтверждена - Булево, Неопределено - флаг подтверждения покупки +// +Функция ПараметрыЗаписиРезультатаПроверкиКМ() Экспорт + + Возврат РегистрыСведений.ОперацииПроверкиКМ.ПараметрыЗаписиРезультатаПроверкиКМ(); + +КонецФункции + + +// Выполняет обновление записи по переданным параметрам +// +// Параметры: +// ПараметрыЗаписи - см. ПараметрыЗаписиРезультатаПроверкиКМ +// +Процедура ОбновитьРезультатыПроверкиКодаМаркировкиВРегистре(ПараметрыЗаписи) Экспорт + + РегистрыСведений.ОперацииПроверкиКМ.ОбновитьРезультатыПроверкиКодаМаркировкиВРегистре(ПараметрыЗаписи); + +КонецПроцедуры + +// Привязывает идентификатор фискальной операции к указанной сессии проверки кода маркировки +// +// Параметры: +// ИдентификаторСессии - Строка - идентификатор сессии проверки кода маркировки +// ИдентификаторФискальнойОперации - Строка - идентификатор фискальной записи +Процедура ОбновитьИдентификаторФискальнойОперацииРезультатаПроверкиКодаМаркировки(ИдентификаторСессии, ИдентификаторФискальнойОперации) Экспорт + + РегистрыСведений.ОперацииПроверкиКМ.ОбновитьИдентификаторФискальнойОперацииРезультатаПроверкиКодаМаркировки(ИдентификаторСессии, ИдентификаторФискальнойОперации); + +КонецПроцедуры + +#КонецОбласти + +#Область РегламентныеЗадания + +// Вызывается из процедуры РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий +// для установки доступности регламентного задания, определяет зависимость от функциональных опций. +// +// Параметры: +// Настройки - ТаблицаЗначений +// ФункциональнаяОпция - ОбъектМетаданныхФункциональнаяОпция +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки, ФункциональнаяОпция = Неопределено) Экспорт + + +КонецПроцедуры + +#КонецОбласти + +#Область РегламентныеЗаданияТехнологияСервиса + +// См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов +Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт + + +КонецПроцедуры + +// См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков +Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт + + +КонецПроцедуры + +#КонецОбласти + +// Данные запроса проверки кода для разрешительной системы +// +Процедура ЗаполнитьДанныеЗапросПроверкиКода(Позиция) Экспорт + + ЗапросПроверкиКода = Позиция.ЗапросПроверкиКода; + ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит; + + Если Не ПустаяСтрока(ЗапросПроверкиКода.ИдентификаторЗапроса) И Не ПустаяСтрока(ЗапросПроверкиКода.ВременнаяМетка) Тогда + ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262 - "030" + ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20231121"); // 1263 - "21.11.2023" + ОтраслевойРеквизит.НомерДокументаОснования = "1944"; // 1264 - "1944" + ЗначениеРеквизита = "UUID=%1&Time=%2"; + ЗначениеРеквизита = СтрШаблон(ЗначениеРеквизита, ЗапросПроверкиКода.ИдентификаторЗапроса, ЗапросПроверкиКода.ВременнаяМетка); + Если Не ПустаяСтрока(ЗапросПроверкиКода.ИдентификаторЭкземпляра) Тогда + ЗначениеРеквизита = ЗначениеРеквизита + "&Inst=" + ЗапросПроверкиКода.ИдентификаторЭкземпляра; + КонецЕсли; + Если Не ПустаяСтрока(ЗапросПроверкиКода.ВерсияБазы) Тогда + ЗначениеРеквизита = ЗначениеРеквизита + "&Ver=" + ЗапросПроверкиКода.ВерсияБазы; + КонецЕсли; + Если ПустаяСтрока(ОтраслевойРеквизит.ЗначениеРеквизита) Тогда // 1265 + ОтраслевойРеквизит.ЗначениеРеквизита = ЗначениеРеквизита; + Иначе + ОтраслевойРеквизит.ЗначениеРеквизита = ОтраслевойРеквизит.ЗначениеРеквизита + "&" + ЗначениеРеквизита; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьОтраслевойРеквизитОбъемноСортовойУчет(Позиция) Экспорт + + ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(); + ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит; + // Передача сведений об объемно сортовой товара при оптовой продаже через ККТ. + Если Позиция.ОбъемноСортовойУчет И ТипыТоваров.ОбъемноСортовойУчет Тогда + ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262 + ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20220326"); // 1263 - 26.03.2022 + ОтраслевойРеквизит.НомерДокументаОснования = "477"; // 1264 + ЗначениеРеквизита = "crpt=mrk"; + Если Не ПустаяСтрока(Позиция.КоличествоВесовогоТовара) Тогда + ЗначениеРеквизита = ЗначениеРеквизита + "&q=" + Позиция.КоличествоВесовогоТовара; + КонецЕсли; + ОтраслевойРеквизит.ЗначениеРеквизита = ЗначениеРеквизита; // 1265 + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьОтраслевойРеквизитОбщественноеПитание(Позиция) Экспорт + + ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(); + ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит; + Если ТипыТоваров.ОбщественноеПитание Тогда + // Передача сведений при указании услуг в общественном питание. + ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262 + ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20220326"); // 1263 - 26.03.2022 + ОтраслевойРеквизит.НомерДокументаОснования = "477"; // 1264 + ОтраслевойРеквизит.ЗначениеРеквизита = "mode=horeca"; // 1265 + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьОтраслевойРеквизитИзделияИзНатуральногоМеха(Позиция) Экспорт + + ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(); + ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит; + Если ТипыТоваров.ИзделияИзНатуральногоМеха Тогда + // Передача сведений о выбытии меховых изделий через ККТ. + ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262 + ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20160811"); // 1263 + ОтраслевойРеквизит.НомерДокументаОснования = "787"; // 1264 + ОтраслевойРеквизит.ЗначениеРеквизита = "crpt=mrk"; // 1265 + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьОтраслевойРеквизитМолочнаяПродукцияСНечитаемымиКМ(Позиция) Экспорт + + ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(); + ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит; + Если ТипыТоваров.МолочнаяПродукцияСНечитаемымиКМ Тогда + ДатаПроизводства = ?(Позиция.ДатаПроизводства <> Неопределено, Формат(Позиция.ДатаПроизводства, "ДФ=""ггММдд"""), ""); + ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262 + ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20201215"); // 1263 + ОтраслевойРеквизит.НомерДокументаОснования = "2099"; // 1264 + ОтраслевойРеквизит.ЗначениеРеквизита = "pd=" + ДатаПроизводства + "&km=tech"; // 1265 - ГГММДД – дата производства товара + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьОтраслевойРеквизитВетеринарныеПрепараты(Позиция) Экспорт + + ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(); + ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит; + Если ТипыТоваров.ВетеринарныеПрепараты Тогда + // Заполнение отраслевого реквизита для ветеринарныых препаратов при передаче рецепта. + ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262 + ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20240527"); // 1263 - 27.05.2024 + ОтраслевойРеквизит.НомерДокументаОснования = "675"; // 1264 + ЗначениеРеквизита = ?(Позиция.ВетеринарноеТребование, "tm=VPT", "tm=VPR"); + Если Не ПустаяСтрока(Позиция.РецептНомер) Тогда + ЗначениеРеквизита = ЗначениеРеквизита + "&dn=" + Позиция.РецептНомер; + КонецЕсли; + РецептДата = ?(Позиция.РецептДата <> Неопределено, Формат(Позиция.РецептДата, "ДФ=""ггММдд"""), ""); + Если Не ПустаяСтрока(РецептДата) Тогда + ЗначениеРеквизита = ЗначениеРеквизита + "&dd=" + РецептДата; + КонецЕсли; + ОтраслевойРеквизит.ЗначениеРеквизита = ЗначениеРеквизита // 1265 + КонецЕсли; + +КонецПроцедуры + +Функция ШтрихкодДляТега1163Base64(ДанныеКодаТовара) Экспорт + + Если ДанныеКодаТовара.НаименованиеРеквизита = "GS1.0" + Или ДанныеКодаТовара.НаименованиеРеквизита = "GS1.M" Тогда + + Штрихкод = ""; + ДанныеШтрихкода = ДанныеКодаТовара.ДанныеШтрихкода; + + ЗначениеПоля = ДанныеШтрихкода.Получить("01"); + Если ЗначениеПоля<>Неопределено Тогда + Штрихкод = Штрихкод + "01" + ЗначениеПоля.Значение; + КонецЕсли; + ЗначениеПоля = ДанныеШтрихкода.Получить("21"); + Если ЗначениеПоля<>Неопределено Тогда + Штрихкод = Штрихкод + "21" + ЗначениеПоля.Значение; + КонецЕсли; + Результат = МенеджерОборудованияКлиентСервер.ШтрихкодВBase64(Штрихкод); + + Иначе + Результат = ДанныеКодаТовара.ШтрихкодBase64; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Получить обработки запроса КМ по коду. +// +Функция СтатусОбработкиЗапросаКМПоКоду(КодОбработкиЗапроса) + + СтатусОбработки = Новый Соответствие(); + + СтатусОбработки.Вставить(0, ПредопределенноеЗначение("Перечисление.СтатусОбработкиЗапросаКМ.КорректныйФормат")); + СтатусОбработки.Вставить(1, ПредопределенноеЗначение("Перечисление.СтатусОбработкиЗапросаКМ.НекорректныйФормат")); + СтатусОбработки.Вставить(2, ПредопределенноеЗначение("Перечисление.СтатусОбработкиЗапросаКМ.НекорректныйФорматКМ")); + + Возврат СтатусОбработки.Получить(Число(КодОбработкиЗапроса)); + +КонецФункции + +// Получить результат проверки сведений о товаре. +// +// Параметры: +// РезультатПроверки - Строка +// +// Возвращаемое значение: +// Строка +// +Функция РезультатПроверкиСведенийОТоваре(РезультатПроверки) Экспорт + + РезультатыПроверки = ТаблицаПроверкиСведенийОТоваре(); + + Возврат РезультатыПроверки.Получить(РезультатПроверки); + +КонецФункции + +// Получить результат проверки сведений о товаре. +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - Строка +// * Значение - Строка +// +Функция ТаблицаПроверкиСведенийОТовареПФ() Экспорт + + ТаблицаРезультатов = Новый Соответствие(); + + ТаблицаРезультатов.Вставить("00000000", "[М]"); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("00000001", "[М-]"); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("00000011", "[М]"); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("00010000", "[М]"); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("00010001", "[М-]"); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("00010011", "[М]"); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("00000101", "[М-]"); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("00000111", "[М-]"); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("00001111", "[М+]"); //@NON-NLS-1 @NON-NLS-2 + + Возврат ТаблицаРезультатов; + +КонецФункции + +// Получить результат проверки сведений о товаре. +// +// Параметры: +// РезультатПроверки - Число +// +// Возвращаемое значение: +// Строка +// +Функция РезультатПроверкиСведенийОТовареПФ(РезультатПроверки) Экспорт + + РезультатыПроверки = ТаблицаПроверкиСведенийОТовареПФ(); + + Возврат РезультатыПроверки.Получить(РезультатПроверки); + +КонецФункции + +Функция ЗаписатьРезультатыПроверкиКодаМаркировкиВРегистр_ПреобразованиеВJSON(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт + + Возврат Строка(Значение); + +КонецФункции + +#КонецОбласти + +#Область ФункцииРаботыGS1 + +// Разобрать строку штрихкода в соответствии со стандартом GS1. +// +// Параметры: +// Штрихкод - Строка - значение штрихкода. +// +// Возвращаемое значение: +// Структура - см. МенеджерОборудованияМаркировкаКлиентСервер.НовыйРезультатРазбораСтрокиШтрихкодаGS1. +Функция РазобратьСтрокуШтрихкодаGS1(Знач Штрихкод) Экспорт; + + РезультатРазбора = МенеджерОборудованияМаркировкаКлиентСервер.НовыйРезультатРазбораСтрокиШтрихкодаGS1(); + + КодыGS1 = КодыGS1(); + + Если СтрНачинаетсяС(Штрихкод, "(") Тогда + МенеджерОборудованияМаркировкаКлиентСервер.РазобратьСтрокуШтрихкодаGS1СоСкобками(Штрихкод, РезультатРазбора, КодыGS1); + Иначе + Разделитель = ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(); + ЧастиШтрихкода = СтрРазделить(Штрихкод, Разделитель, Ложь); + Для Каждого ЧастьБезРазделителей Из ЧастиШтрихкода Цикл + МенеджерОборудованияМаркировкаКлиентСервер.РазобратьСтрокуШтрихкодаGS1Служебный(ЧастьБезРазделителей, РезультатРазбора, КодыGS1); + КонецЦикла; + КонецЕсли; + + Возврат РезультатРазбора; + +КонецФункции + +#КонецОбласти + +#Область ФункцииМаркировкиПродукции + +// Разобрать штриховой код товара. +// +// Параметры: +// Штрихкод - Строка - Штрихкод +// ШтрихкодВBase64 - Булево - Штрихкод в base64 +// +// Возвращаемое значение: +// Структура - Разобрать штриховой код товара: +// * Разобран - Булево - +// * ОписаниеОшибки - СТрока +// * ПредставлениеШтрихкода - Строка - +// * ДанныеШтрихкода - Строка - +// * ТипИдентификатораТовара - ПеречислениеСсылка.ТипыИдентификаторовТовараККТ - +// * GTIN - Строка - +// * СерийныйНомер - Строка - +// * EAN - Строка - +// * РеквизитКодаТовараHEX - Строка - +// * РеквизитКодаТовара - Строка - +// * ИдентифицируетЭкземпляр - Булево - +// * ПотребительскаяУпаковкаТабачнойПродукции - Булево - +// * ШтрихкодBase64 - Булево - +// * НаименованиеРеквизита - Строка - +// +Функция РазобратьШтриховойКодТовара(Знач Штрихкод, Знач ШтрихкодВBase64 = Ложь) Экспорт; + + КодыGS1 = КодыGS1(); + Возврат МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовараСлужебная(Штрихкод, ШтрихкодВBase64, КодыGS1); + +КонецФункции + +// Коды GS1. +// +// Возвращаемое значение: +// Соответствие из Строка - Коды GS1 +Функция КодыGS1() Экспорт + + Возврат МенеджерОборудованияМаркировкаПовтИсп.КодыGS1Служебный(); + +КонецФункции + +#КонецОбласти diff --git a/CommonModules/МенеджерОборудованияМаркировкаВызовСервера.xml b/CommonModules/МенеджерОборудованияМаркировкаВызовСервера.xml new file mode 100644 index 0000000..aae4a71 --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировкаВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияМаркировкаВызовСервера + + + ru + Менеджер оборудования маркировка вызов сервера + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияМаркировкаВызовСервера/Ext/Module.bsl b/CommonModules/МенеджерОборудованияМаркировкаВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..7f8a2cd --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировкаВызовСервера/Ext/Module.bsl @@ -0,0 +1,37 @@ +#Область ПрограммныйИнтерфейс + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовараСлужебная. +// Разобрать штриховой код товара. +// +// Параметры: +// ШтриховойКодТовара - Строка - Штриховой код товара +// ШтрихкодВBase64 - Булево - Штрихкод в base64 +// +// Возвращаемое значение: +// Структура - Разобрать штриховой код товара: +// * Разобран - Булево - +// * ОписаниеОшибки - СТрока +// * ПредставлениеШтрихкода - Строка - +// * ДанныеШтрихкода - Строка - +// * ТипИдентификатораТовара - ПеречислениеСсылка.ТипыИдентификаторовТовараККТ - +// * GTIN - Строка - +// * СерийныйНомер - Строка - +// * EAN - Строка - +// * РеквизитКодаТовараHEX - Строка - +// * РеквизитКодаТовара - Строка - +// * ИдентифицируетЭкземпляр - Булево - +// * ПотребительскаяУпаковкаТабачнойПродукции - Булево - +// * ШтрихкодBase64 - Булево - +// * НаименованиеРеквизита - Строка - +// +Функция РазобратьШтриховойКодТовара(Знач ШтриховойКодТовара, Знач ШтрихкодВBase64 = Ложь) Экспорт; + + Возврат МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовараСлужебная(ШтриховойКодТовара, ШтрихкодВBase64); + +КонецФункции + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияМаркировкаКлиент.xml b/CommonModules/МенеджерОборудованияМаркировкаКлиент.xml new file mode 100644 index 0000000..5060563 --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировкаКлиент.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияМаркировкаКлиент + + + ru + Менеджер оборудования маркировка клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияМаркировкаКлиент/Ext/Module.bsl b/CommonModules/МенеджерОборудованияМаркировкаКлиент/Ext/Module.bsl new file mode 100644 index 0000000..06c895b --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировкаКлиент/Ext/Module.bsl @@ -0,0 +1,656 @@ +#Область ПрограммныйИнтерфейс + +#Область ФункцииРаботыGS1 + +// Разобрать строку штрихкода в соответствии со стандартом GS1. +// +// Параметры: +// Штрихкод - Строка - значение штрихкода. +// +// Возвращаемое значение: +// Структура. +Функция РазобратьСтрокуШтрихкодаGS1(Знач Штрихкод) Экспорт; + + РезультатРазбора = МенеджерОборудованияМаркировкаКлиентСервер.НовыйРезультатРазбораСтрокиШтрихкодаGS1(); + + КодыGS1 = КодыGS1(); + + Если СтрНачинаетсяС(Штрихкод, "(") Тогда + МенеджерОборудованияМаркировкаКлиентСервер.РазобратьСтрокуШтрихкодаGS1СоСкобками(Штрихкод, РезультатРазбора, КодыGS1); + Иначе + Разделитель = ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(); + ЧастиШтрихкода = СтрРазделить(Штрихкод, Разделитель, Ложь); + Для Каждого ЧастьБезРазделителей Из ЧастиШтрихкода Цикл + МенеджерОборудованияМаркировкаКлиентСервер.РазобратьСтрокуШтрихкодаGS1Служебный(ЧастьБезРазделителей, РезультатРазбора, КодыGS1); + КонецЦикла; + КонецЕсли; + + Возврат РезультатРазбора; + +КонецФункции + +#КонецОбласти + +#Область ФункцииМаркировкиПродукции + +// Разобрать штриховой код товара. +// +// Параметры: +// Штрихкод - Строка - Штрихкод +// ШтрихкодВBase64 - Булево - Штрихкод в base64 +// +// Возвращаемое значение: +// Структура - Разобрать штриховой код товара: +// * Разобран - Булево - +// * ОписаниеОшибки - СТрока +// * ПредставлениеШтрихкода - Строка - +// * ДанныеШтрихкода - Строка - +// * ТипИдентификатораТовара - ПеречислениеСсылка.ТипыИдентификаторовТовараККТ - +// * GTIN - Строка - +// * СерийныйНомер - Строка - +// * EAN - Строка - +// * РеквизитКодаТовараHEX - Строка - +// * РеквизитКодаТовара - Строка - +// * ИдентифицируетЭкземпляр - Булево - +// * ПотребительскаяУпаковкаТабачнойПродукции - Булево - +// * ШтрихкодBase64 - Булево - +// * НаименованиеРеквизита - Строка - +// +Функция РазобратьШтриховойКодТовара(Знач Штрихкод, Знач ШтрихкодВBase64 = Ложь) Экспорт; + + КодыGS1 = КодыGS1(); + Возврат МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовараСлужебная(Штрихкод, ШтрихкодВBase64, КодыGS1); + +КонецФункции + +// Коды g s1. +// +// Возвращаемое значение: +// Соответствие из Строка - Коды gs1 +Функция КодыGS1() Экспорт + + Возврат МенеджерОборудованияМаркировкаКлиентПовтИсп.КодыGS1Служебный(); + +КонецФункции + +#КонецОбласти + + +// Открытие форму списка операций проверки КМ +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ОткрытьОперацииПроверкиКМ(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + + + +КонецПроцедуры + +// Возвращает идентификатор события проверки кода маркировки, используется в процедуре обработка оповещения формы +// +// Возвращаемое значение: +// Строка - идентификатор события проверки кода маркировки +// +Функция СобытиеПроверкаКМ() Экспорт + + Возврат "ПодключаемоеОборудование.ПроверкаКодаМаркировки"; + +КонецФункции + +// Возвращает типы операций проверки кода маркировки, используется в процедуре обработка оповещения формы +// +// Возвращаемое значение: +// Структура - типы операций проверки кода маркировки: +// * ЗапросККТ - Строка - выполняется запрос к локальной ККТ +// * ЗапросККТЗавершено - Строка - завершен запрос к локальной ККТ +// * ЗапросОИСМ - Строка - выполняется запрос к удаленному серверу ОИСМ +// * ЗапросОИСМЗавершено - Строка - завершен запрос к удаленному серверу ОИСМ +// * ПодтверждениеККТ - Строка - выполняется подтверждение продажи на локальной ККТ +// * ПодтверждениеККТЗавершено - Строка - завершен подтверждение продажи на локальной ККТ +// +Функция СписокОперацийПроверкиКМ() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("ЗапросККТ", "ЗапросККТ"); + Результат.Вставить("ЗапросККТЗавершено", "ЗапросККТЗавершено"); + Результат.Вставить("ЗапросОИСМ", "ЗапросОИСМ"); + Результат.Вставить("ЗапросОИСМЗавершено", "ЗапросОИСМЗавершено"); + Результат.Вставить("ПодтверждениеККТ", "ПодтверждениеККТ"); + Результат.Вставить("ПодтверждениеККТЗавершено", "ПодтверждениеККТЗавершено"); + Возврат Результат; + +КонецФункции + +// Возвращает типы операций проверки кода маркировки, используется в процедуре обработка оповещения формы +// +// Возвращаемое значение: +// Структура - типы операций проверки кода маркировки: +// * КодМаркировки - Строка - код маркировки в виде base64 +// * Операция - Строка - одно из значений структуры СписокОперацийПроверкиКМ(); +// * ДополнительныеПараметры - Неопределено, Структура - структура дополнительных параметров переданная при подготовке параметров запроса проверки КМ +// +Функция НовыйПараметрыОповещенияОбОперации() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("КодМаркировки", ""); + Результат.Вставить("Операция", "ЗапросОИСМ"); + Результат.Вставить("ДополнительныеПараметры", Неопределено); + Возврат Результат; + +КонецФункции + +// Возвращает текущее состояние проверки кода маркировки +// +// Возвращаемое значение: +// Структура +Функция СостояниеПроверкиКМ() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("ОбработкаЗавершена", Истина); + Результат.Вставить("ВсегоОпераций", 0); + Результат.Вставить("ВыполненоОпераций", 0); + Результат.Вставить("Состояние", ""); + КонтекстОперации = Неопределено; + ВосстановитьКонтекстОперации(КонтекстОперации); + Если КонтекстОперации <> Неопределено Тогда + ВыполненоОпераций = КонтекстОперации.РезультатПакета.РезультатыОпераций.Количество(); + ОсталосьОпераций = КонтекстОперации.МассивОпераций.Количество(); + Если КонтекстОперации.Операции.Количество()>0 Тогда + Состояние = КонтекстОперации.Операции[0]; + Иначе + Состояние = ""; + КонецЕсли; + Результат.ОбработкаЗавершена = КонтекстОперации.ОбработкаЗавершена; + Результат.ВсегоОпераций = ВыполненоОпераций + ОсталосьОпераций; + Результат.ВыполненоОпераций = ВыполненоОпераций; + Результат.Состояние = Состояние; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура НачатьПроверкуКМ(Оповещение, ПараметрыПодключения, ДанныеОперации) Экспорт + + КонтекстОперации = НовыйКонтекстОперации(); + ПодготовитьКонтекстОперации(КонтекстОперации, Оповещение, ДанныеОперации, ПараметрыПодключения); + + СписокДлительныхОпераций = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ДлительныеОперации; + СписокДлительныхОпераций.Вставить("ПроверкаКМ", КонтекстОперации); + + СледующийЭлементВПакете(КонтекстОперации); + +КонецПроцедуры + +Процедура ВалидацияКМ(КонтекстОперации) Экспорт + + ПараметрыОперации = КонтекстОперации.ПараметрыОперации; + ТекущийРезультат = КонтекстОперации.ТекущийРезультат; + Операции = КонтекстОперации.Операции; + + Если ПустаяСтрока(ПараметрыОперации.КонтрольнаяМарка) Тогда + ТекстОшибки = НСтр("ru = 'Контрольная марка не может быть пустой.'"); + ТекущийРезультат.Результат = Ложь; + ТекущийРезультат.Валидация = Ложь; + ТекущийРезультат.ОписаниеОшибки = ТекстОшибки; + Операции.Очистить(); + СледующаяОперация(КонтекстОперации); + Возврат; + КонецЕсли; + + РазобранныйКодМаркировки = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(ПараметрыОперации.КонтрольнаяМарка, Истина); + Если РазобранныйКодМаркировки.Разобран Тогда + ТекущийРезультат.Валидация = Истина; + Операции.Удалить(0); + Иначе + ТекущийРезультат.Валидация = Ложь; + ТекущийРезультат.ОписаниеОшибки = РазобранныйКодМаркировки.ОписаниеОшибки; + Операции.Очистить(); + КонецЕсли; + СледующаяОперация(КонтекстОперации); + +КонецПроцедуры + +Процедура ЗапросРазрешения(КонтекстОперации) Экспорт + + ПараметрыОперации = КонтекстОперации.ПараметрыОперации; + ТекущийРезультат = КонтекстОперации.ТекущийРезультат; + Операции = КонтекстОперации.Операции; + + Если ПараметрыОперации.ЗапросРазрешенияПродажиКМ Тогда + // Запрос разрешения продажи + РезультатРазрешения = ПродажаРазрешена(ПараметрыОперации.КонтрольнаяМарка); + ТекущийРезультат.ПродажаРазрешена = РезультатРазрешения.ПродажаРазрешена; + ТекущийРезультат.ДанныеРазрешенияПродажи = РезультатРазрешения.ДанныеРазрешенияПродажи; + Если РезультатРазрешения.ПродажаРазрешена Тогда + Операции.Удалить(0); + Иначе + ТекущийРезультат.Результат = Ложь; + ТекущийРезультат.ОписаниеОшибки = НСтр("ru = 'Запрещена продажа'"); + Операции.Очистить(); + КонецЕсли; + Иначе + ТекущийРезультат.ПродажаРазрешена = Истина; + Операции.Удалить(0); + КонецЕсли; + СледующаяОперация(КонтекстОперации); + +КонецПроцедуры + +Асинх Процедура ЗапросКМ(КонтекстОперации) Экспорт + + ПараметрыПодключения = КонтекстОперации.ПараметрыПодключения; + ПараметрыОперации = КонтекстОперации.ПараметрыОперации; + ТекущийРезультат = КонтекстОперации.ТекущийРезультат; + Операции = КонтекстОперации.Операции; + + ПараметрыОповещения = НовыйПараметрыОповещенияОбОперации(); + ПараметрыОповещения.КодМаркировки = ПараметрыОперации.КонтрольнаяМарка; + ПараметрыОповещения.Операция = СписокОперацийПроверкиКМ().ЗапросККТ; + ПараметрыОповещения.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры; + Оповестить(СобытиеПроверкаКМ(), ПараметрыОповещения, КонтекстОперации.ПараметрыПакета.ИдентификаторКлиента); + + Команда = "RequestKM"; + Ответ = Ждать ПараметрыПодключения.ОбработчикДрайвера.ВыполнениеКоманды(ПараметрыПодключения, Команда, ПараметрыОперации); + ЗаполнитьЗначенияСвойств(ТекущийРезультат, Ответ); + Если Ответ.Свойство("ИдентификаторСессии") Тогда + КонтекстОперации.РезультатПакета.ИдентификаторСессии = Ответ.ИдентификаторСессии; + КонецЕсли; + + ИнтервалДоСледующейОперации = 0.1; + Если Ответ.Результат Тогда + ТекущийРезультат.Служебная.ЛокальныйОтветXML = Ответ.РезультатXML; + ЛокальныйОтвет = ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML(ТекущийРезультат.Служебная.ЛокальныйОтветXML); + Если ЛокальныйОтвет.Свойство("Checking") И ВРег(ЛокальныйОтвет.Checking) = "TRUE" + И ЛокальныйОтвет.Свойство("CheckingResult") И ВРег(ЛокальныйОтвет.CheckingResult) = "TRUE" Тогда + КонтекстОперации.ЛокальнаяПроверкаУспешна = Истина; + КонецЕсли; + Операции.Удалить(0); + Иначе + ТекущийРезультат.Результат = Ложь; + ИнтервалДоСледующейОперации = 0.1; + Операции.Очистить(); + КонецЕсли; + + ПараметрыОповещения = НовыйПараметрыОповещенияОбОперации(); + ПараметрыОповещения.КодМаркировки = ПараметрыОперации.КонтрольнаяМарка; + ПараметрыОповещения.Операция = СписокОперацийПроверкиКМ().ЗапросККТЗавершено; + ПараметрыОповещения.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры; + Оповестить(СобытиеПроверкаКМ(), ПараметрыОповещения, КонтекстОперации.ПараметрыПакета.ИдентификаторКлиента); + + СледующаяОперация(КонтекстОперации, ИнтервалДоСледующейОперации); + +КонецПроцедуры + +Асинх Процедура ПроверкаКМ(КонтекстОперации) Экспорт + + ПараметрыПодключения = КонтекстОперации.ПараметрыПодключения; + ПараметрыОперации = КонтекстОперации.ПараметрыОперации; + ТекущийРезультат = КонтекстОперации.ТекущийРезультат; + Операции = КонтекстОперации.Операции; + СтатусРезультата = КонтекстОперации.СтатусРезультата; + + Если Не ПараметрыОперации.ОтправлятьНаСерверОИСМ Тогда + // Нет необходимости выполнять запрос статуса, т.к. запрос на удаленный сервере не выполнялся. + Операции.Удалить(0); + КонтекстОперации.ВыполняетсяУдаленнаяПроверкаКМ = Ложь; + СледующаяОперация(КонтекстОперации); + Возврат; + КонецЕсли; + + Если Не КонтекстОперации.ВыполняетсяУдаленнаяПроверкаКМ Тогда + + ПараметрыОповещения = НовыйПараметрыОповещенияОбОперации(); + ПараметрыОповещения.КодМаркировки = ПараметрыОперации.КонтрольнаяМарка; + ПараметрыОповещения.Операция = СписокОперацийПроверкиКМ().ЗапросОИСМ; + ПараметрыОповещения.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры; + Оповестить(СобытиеПроверкаКМ(), ПараметрыОповещения, КонтекстОперации.ПараметрыПакета.ИдентификаторКлиента); + + КонтекстОперации.ВыполняетсяУдаленнаяПроверкаКМ = Истина; + КонецЕсли; + + ДанныеОперацииПолученияРезультата = Новый Структура(); + Команда = "GetProcessingKMResult"; + Ответ = Ждать ПараметрыПодключения.ОбработчикДрайвера.ВыполнениеКоманды(ПараметрыПодключения, Команда, ДанныеОперацииПолученияРезультата); + Если Не Ответ.Результат Тогда + // ошибка выполнения операции + Операции.Очистить(); + КонтекстОперации.ВыполняетсяУдаленнаяПроверкаКМ = Ложь; + + ЗаполнитьЗначенияСвойств(ТекущийРезультат, Ответ); + ТекущийРезультат.Служебная.УдаленныйОтветXML = ДанныеОперацииПолученияРезультата.РезультатXML; + + ПараметрыОповещения = НовыйПараметрыОповещенияОбОперации(); + ПараметрыОповещения.КодМаркировки = ПараметрыОперации.КонтрольнаяМарка; + ПараметрыОповещения.Операция = СписокОперацийПроверкиКМ().ЗапросОИСМЗавершено; + ПараметрыОповещения.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры; + Оповестить(СобытиеПроверкаКМ(), ПараметрыОповещения, КонтекстОперации.ПараметрыПакета.ИдентификаторКлиента); + + СледующаяОперация(КонтекстОперации); + Возврат; + КонецЕсли; + + Если ДанныеОперацииПолученияРезультата.СтатусРезультатаКод = СтатусРезультата.РезультатЕщеНеПолучен Тогда + // результат не получен, ждем небольшое время и пробуем снова + СледующаяОперация(КонтекстОперации, 1); + Возврат; + КонецЕсли; + + ТекущийРезультат.Служебная.УдаленныйОтветXML = ДанныеОперацииПолученияРезультата.РезультатXML; + + Если ДанныеОперацииПолученияРезультата.СтатусРезультатаКод = СтатусРезультата.РезультатПолучен Тогда + + ПараметрыОповещения = НовыйПараметрыОповещенияОбОперации(); + ПараметрыОповещения.КодМаркировки = ПараметрыОперации.КонтрольнаяМарка; + ПараметрыОповещения.Операция = СписокОперацийПроверкиКМ().ЗапросОИСМЗавершено; + ПараметрыОповещения.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры; + Оповестить(СобытиеПроверкаКМ(), ПараметрыОповещения, КонтекстОперации.ПараметрыПакета.ИдентификаторКлиента); + + УдаленныйОтвет = ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML(ТекущийРезультат.Служебная.УдаленныйОтветXML); + КонтекстОперации.УдаленнаяПроверкаУспешна = УдаленныйОтвет.Свойство("Result") И ВРег(УдаленныйОтвет.Result)="TRUE"; + КонецЕсли; + + Операции.Удалить(0); + КонтекстОперации.ВыполняетсяУдаленнаяПроверкаКМ = Ложь; + СледующаяОперация(КонтекстОперации); + +КонецПроцедуры + +Асинх Процедура ПодтверждениеКМ(КонтекстОперации) Экспорт + + ПараметрыПодключения = КонтекстОперации.ПараметрыПодключения; + ПараметрыПакета = КонтекстОперации.ПараметрыПакета; + ПараметрыОперации = КонтекстОперации.ПараметрыОперации; + ТекущийРезультат = КонтекстОперации.ТекущийРезультат; + Операции = КонтекстОперации.Операции; + + ОжидатьПолучениеОтветаОИСМ = ПараметрыОперации.ОжидатьПолучениеОтветаОИСМ; + + ВыполнятьПодтверждение = Ложь; + Если КонтекстОперации.ЛокальнаяПроверкаУспешна Тогда + Если Не ОжидатьПолучениеОтветаОИСМ Тогда + ВыполнятьПодтверждение = Истина; + Иначе + Если КонтекстОперации.УдаленнаяПроверкаУспешна Тогда + ВыполнятьПодтверждение = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ПараметрыОперации.ИгнорироватьРезультатПроверкиКМ Тогда + ВыполнятьПодтверждение = Истина; + КонецЕсли; + + Если ВыполнятьПодтверждение Тогда + + ПараметрыОповещения = НовыйПараметрыОповещенияОбОперации(); + ПараметрыОповещения.КодМаркировки = ПараметрыОперации.КонтрольнаяМарка; + ПараметрыОповещения.Операция = СписокОперацийПроверкиКМ().ПодтверждениеККТ; + ПараметрыОповещения.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры; + Оповестить(СобытиеПроверкаКМ(), ПараметрыОповещения, КонтекстОперации.ПараметрыПакета.ИдентификаторКлиента); + + Команда = "ConfirmKM"; + ПараметрыОперации.Выбытие = Истина; + Ответ = Ждать ПараметрыПодключения.ОбработчикДрайвера.ВыполнениеКоманды(ПараметрыПодключения, Команда, ПараметрыОперации); + ЗаполнитьЗначенияСвойств(ТекущийРезультат, Ответ); + ТекущийРезультат.ПодтверждениеВыполнено = Истина; + ТекущийРезультат.Служебная.ПокупкаПодтверждена = ПараметрыОперации.Выбытие; + + ПараметрыОповещения = НовыйПараметрыОповещенияОбОперации(); + ПараметрыОповещения.КодМаркировки = ПараметрыОперации.КонтрольнаяМарка; + ПараметрыОповещения.Операция = СписокОперацийПроверкиКМ().ПодтверждениеККТЗавершено; + ПараметрыОповещения.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры; + Оповестить(СобытиеПроверкаКМ(), ПараметрыОповещения, КонтекстОперации.ПараметрыПакета.ИдентификаторКлиента); + + КонецЕсли; + + Операции.Удалить(0); + СледующаяОперация(КонтекстОперации); + +КонецПроцедуры + +Процедура ВосстановитьКонтекстОперации(КонтекстОперации) Экспорт + + СписокДлительныхОпераций = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ДлительныеОперации; + КонтекстОперации = СписокДлительныхОпераций.Получить("ПроверкаКМ"); + +КонецПроцедуры + +Процедура ДлительнаяОперацияПроверкаКМ(ОповещениеПриЗавершении, Команда, ПараметрыПодключения, ДанныеОперации) Экспорт + + Если ДанныеОперации.ОтображатьФорму Тогда + Параметры = Новый Структура(); + Параметры.Вставить("ПараметрыПодключения", ПараметрыПодключения); + Параметры.Вставить("ДанныеОперации", ДанныеОперации); + Параметры.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + ОбщегоНазначенияБПОКлиент.УстановитьПараметрПриложения("БПО.ПроверкаКМ", Параметры); + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("Команда", Команда); + ПараметрыФормы.Вставить("ДанныеОперации", ДанныеОперации); + ОткрытьФорму("ОбщаяФорма.ПроверкаКонтрольнойМаркиБПО",ПараметрыФормы,,,,, ОповещениеПриЗавершении); + Иначе + НачатьПроверкуКМ(ОповещениеПриЗавершении, ПараметрыПодключения, ДанныеОперации); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НовыйКонтекстОперации() + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("Операции", Новый Массив()); + КонтекстОперации.Вставить("ОбработкаЗавершена", Ложь); + КонтекстОперации.Вставить("МассивОпераций", Неопределено); + КонтекстОперации.Вставить("ПараметрыОперации", Неопределено); + КонтекстОперации.Вставить("ТекущийРезультат", Неопределено); + КонтекстОперации.Вставить("ПараметрыПакета", Неопределено); + КонтекстОперации.Вставить("ПараметрыПодключения", Неопределено); + КонтекстОперации.Вставить("ОповещениеЗавершения", Неопределено); + + КонтекстОперации.Вставить("ВыполняетсяУдаленнаяПроверкаКМ", Ложь); + КонтекстОперации.Вставить("ВалидацияУспешна", Истина); + КонтекстОперации.Вставить("ПродажаРазрешена", Истина); + КонтекстОперации.Вставить("ЛокальнаяПроверкаУспешна", Ложь); + КонтекстОперации.Вставить("УдаленнаяПроверкаУспешна", Ложь); + + КонтекстОперации.Вставить("ИдентификаторКлиента", Истина); + + РезультатПакета = ПодключаемоеОборудованиеДрайверКлиент.РезультатОперацииНаОборудовании(Истина, ""); + РезультатПакета.Вставить("ИдентификаторСессии", Неопределено); + РезультатПакета.Вставить("РезультатыОпераций", Новый Массив()); + КонтекстОперации.Вставить("РезультатПакета", РезультатПакета); + + СтатусРезультата = Новый Структура(); + СтатусРезультата.Вставить("РезультатПолучен", 0); + СтатусРезультата.Вставить("РезультатЕщеНеПолучен", 1); + СтатусРезультата.Вставить("РезультатНеМожетБытьПолучен", 2); + КонтекстОперации.Вставить("СтатусРезультата", СтатусРезультата); + + СписокОпераций = СписокОперацийПроверкиКМ(); + СписокОпераций.Вставить("Валидация", "Валидация"); + СписокОпераций.Вставить("ЗапросРазрешения", "ЗапросРазрешения"); + КонтекстОперации.Вставить("СписокОпераций", СписокОпераций); + + Возврат КонтекстОперации; + +КонецФункции + +Функция НовыйРезультатОперации() + + РезультатОперации = ПодключаемоеОборудованиеДрайверКлиент.РезультатОперацииНаОборудовании(Истина, ""); + Служебная = Новый Структура(); + Служебная.Вставить("ЛокальныйОтветXML", Неопределено); + Служебная.Вставить("УдаленныйОтветXML", Неопределено); + Служебная.Вставить("ЗапросКМ", Неопределено); + Служебная.Вставить("ПокупкаПодтверждена", Неопределено); + РезультатОперации.Вставить("Служебная", Служебная); + РезультатОперации.Вставить("КодМаркировки", ""); + РезультатОперации.Вставить("Валидация", Истина); + РезультатОперации.Вставить("ПродажаРазрешена", Истина); + РезультатОперации.Вставить("ИдентификаторЗапроса", Неопределено); + РезультатОперации.Вставить("ДанныеРазрешенияПродажи", Неопределено); + РезультатОперации.Вставить("ПроверкаКМ", Ложь); + РезультатОперации.Вставить("ПодтверждениеВыполнено", Ложь); + РезультатОперации.Вставить("ДополнительныеПараметры", Неопределено); + // для обратной совместимости + РезультатОперации.Вставить("КодМаркировкиПроверен", Ложь); + РезультатОперации.Вставить("РезультатПроверки", Ложь); + РезультатОперации.Вставить("РезультатПроверкиОИСМ", Ложь); + РезультатОперации.Вставить("КодРезультатаПроверкиОИСМ", 0); + РезультатОперации.Вставить("РезультатПроверкиОИСМПредставление", "00000000"); + РезультатОперации.Вставить("КодОбработкиЗапроса", Неопределено); + + Возврат РезультатОперации; + +КонецФункции + +Процедура ПодготовитьКонтекстОперации(КонтекстОперации, ОповещениеЗавершения, ПараметрыПакета, ПараметрыПодключения) + + Если ТипЗнч(ПараметрыПакета.ЗапросыКМ) = Тип("Массив") Тогда + МассивОпераций = ПараметрыПакета.ЗапросыКМ; + Иначе + МассивОпераций = Новый Массив(); + МассивОпераций.Добавить(ПараметрыПакета.ЗапросыКМ); + КонецЕсли; + + КонтекстОперации.ОповещениеЗавершения = ОповещениеЗавершения; + КонтекстОперации.МассивОпераций = МассивОпераций; + КонтекстОперации.ПараметрыПакета = ПараметрыПакета; + КонтекстОперации.ПараметрыПодключения = ПараметрыПодключения; + КонтекстОперации.ИдентификаторКлиента = ПараметрыПакета.ИдентификаторКлиента; + +КонецПроцедуры + +Процедура СледующийЭлементВПакете(КонтекстОперации) + + МассивОпераций = КонтекстОперации.МассивОпераций; + Если МассивОпераций.Количество() = 0 Тогда + // Завершить пакет операций + Возврат; + КонецЕсли; + + ПараметрыПакета = КонтекстОперации.ПараметрыПакета; + ПараметрыОперации = ОбщегоНазначенияБПОКлиент.СкопироватьРекурсивно(МассивОпераций[0]); + ПараметрыОперации.Вставить("Выбытие", Истина); + + ТекущийРезультат = НовыйРезультатОперации();; + КонтекстОперации.ПараметрыОперации = ПараметрыОперации; + КонтекстОперации.ТекущийРезультат = ТекущийРезультат; + КонтекстОперации.Операции = ВыполняемыеОперации(КонтекстОперации); + ТекущийРезультат.Служебная.ЗапросКМ = ПараметрыОперации; + ТекущийРезультат.КодМаркировки = ПараметрыОперации.КонтрольнаяМарка; + ТекущийРезультат.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры; + + СледующаяОперация(КонтекстОперации); + +КонецПроцедуры + +Функция ВыполняемыеОперации(КонтекстОперации) + + ПараметрыПодключения = КонтекстОперации.ПараметрыПодключения; + ПараметрыПакета = КонтекстОперации.ПараметрыПакета; + ПараметрыОперации = КонтекстОперации.ПараметрыОперации; + РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + СписокОпераций = КонтекстОперации.СписокОпераций; + + Операции = Новый Массив(); + Если ПараметрыОперации.ВыполнятьВалидацию Тогда + Операции.Добавить(СписокОпераций.Валидация); + КонецЕсли; + Если ПараметрыОперации.ЗапросРазрешенияПродажиКМ Тогда + Операции.Добавить(СписокОпераций.ЗапросРазрешения); + КонецЕсли; + Операции.Добавить(СписокОпераций.ЗапросККТ); + Если РевизияИнтерфейса >= 4000 Тогда + Если ПараметрыОперации.ЗапросПроверкиКМСредствамиККТ Тогда + Операции.Добавить(СписокОпераций.ЗапросОИСМ); + Операции.Добавить(СписокОпераций.ПодтверждениеККТ); + КонецЕсли; + Иначе + Операции.Добавить(СписокОпераций.ЗапросОИСМ); + Операции.Добавить(СписокОпераций.ПодтверждениеККТ); + КонецЕсли; + + Возврат Операции; + +КонецФункции + +Функция ПродажаРазрешена(КодМаркировки) + + Результат = Новый Структура(); + Результат.Вставить("ПродажаРазрешена", Истина); + Результат.Вставить("ДанныеРазрешенияПродажи", Неопределено); + + Возврат Результат; + +КонецФункции + +Процедура СледующаяОперация(КонтекстОперации, Интервал = 0.1) + + Операции = КонтекстОперации.Операции; + СписокОпераций = КонтекстОперации.СписокОпераций; + Если Операции.Количество()=0 Тогда + // завершить операцию + ЗавершитьВыполнениеОперации(КонтекстОперации); + Возврат; + КонецЕсли; + Операция = КонтекстОперации.Операции[0]; + Если Операция = СписокОпераций.Валидация Тогда + ВалидацияКМ(КонтекстОперации); + ИначеЕсли Операция = СписокОпераций.ЗапросРазрешения Тогда + ЗапросРазрешения(КонтекстОперации); + ИначеЕсли Операция = СписокОпераций.ЗапросККТ Тогда + ЗапросКМ(КонтекстОперации); + ИначеЕсли Операция = СписокОпераций.ПодтверждениеККТ Тогда + ПодтверждениеКМ(КонтекстОперации); + Иначе + ПодключитьОбработчикОжидания("ПодключаемоеОборудование_ПроверкаКМ", Интервал, Истина); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗавершитьВыполнениеОперации(КонтекстОперации) + + ПараметрыОперации = КонтекстОперации.ПараметрыОперации; + ТекущийРезультат = КонтекстОперации.ТекущийРезультат; + РезультатПакета = КонтекстОперации.РезультатПакета; + МассивОпераций = КонтекстОперации.МассивОпераций; + РезультатПакета.РезультатыОпераций.Добавить(ТекущийРезультат); + РезультатПакета.Результат = РезультатПакета.Результат И ТекущийРезультат.Результат; + РезультатПакета.ОписаниеОшибки = СокрЛП(РезультатПакета.ОписаниеОшибки + Символы.ПС + ТекущийРезультат.ОписаниеОшибки); + + ТекущийРезультат.ПроверкаКМ = КонтекстОперации.ЛокальнаяПроверкаУспешна И КонтекстОперации.УдаленнаяПроверкаУспешна; + + МассивОпераций.Удалить(0); + Если МассивОпераций.Количество()=0 Тогда + ЗавершитьВыполнениеВсехОпераций(КонтекстОперации); + Возврат; + КонецЕсли; + СледующийЭлементВПакете(КонтекстОперации); + +КонецПроцедуры + +Процедура ЗавершитьВыполнениеВсехОпераций(КонтекстОперации) + + КонтекстОперации.ОбработкаЗавершена = Истина; + РезультатПакета = КонтекстОперации.РезультатПакета; + + СписокДлительныхОпераций = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ДлительныеОперации; + СписокДлительныхОпераций.Удалить("ПроверкаКМ"); + + Оповещение = КонтекстОперации.ОповещениеЗавершения; + Если Оповещение <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Оповещение, РезультатПакета); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/CommonModules/МенеджерОборудованияМаркировкаКлиентПовтИсп.xml b/CommonModules/МенеджерОборудованияМаркировкаКлиентПовтИсп.xml new file mode 100644 index 0000000..4d2f41f --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировкаКлиентПовтИсп.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияМаркировкаКлиентПовтИсп + + + ru + Менеджер оборудования маркировка клиент повт исп + + + + false + true + false + false + true + false + false + DuringSession + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияМаркировкаКлиентПовтИсп/Ext/Module.bsl b/CommonModules/МенеджерОборудованияМаркировкаКлиентПовтИсп/Ext/Module.bsl new file mode 100644 index 0000000..a90fb46 --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировкаКлиентПовтИсп/Ext/Module.bsl @@ -0,0 +1,14 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Коды GS1. +// +// Возвращаемое значение: +// Соответствие из Строка - Коды GS1 +Функция КодыGS1Служебный() Экспорт + + Возврат МенеджерОборудованияМаркировкаКлиентСервер.КодыGS1Служебный(); + +КонецФункции + +#КонецОбласти + diff --git a/CommonModules/МенеджерОборудованияМаркировкаКлиентСервер.xml b/CommonModules/МенеджерОборудованияМаркировкаКлиентСервер.xml new file mode 100644 index 0000000..00629f5 --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировкаКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияМаркировкаКлиентСервер + + + ru + Менеджер оборудования маркировка клиент сервер + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияМаркировкаКлиентСервер/Ext/Module.bsl b/CommonModules/МенеджерОборудованияМаркировкаКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..6b75dfa --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировкаКлиентСервер/Ext/Module.bsl @@ -0,0 +1,1466 @@ +#Область ПрограммныйИнтерфейс + +#Область ФункцииМаркировкиПродукции + +// Сформировать реквизита кода товар для DataMatrixGS1 на основе GTIN & SerialNumber. +// +// Параметры: +// GTIN - Строка - Глобальный идентификатор торговой единицы. +// СерийныйНомер - Строка - Серийный номер. +// +// Возвращаемое значение: +// Строка - Значение реквизита кода товара в BASE64 +// +Функция СформироватьКодТовараДляDataMatrixGS1(Знач GTIN, Знач СерийныйНомер) Экспорт + + // Определяем структуру результата. + ДанныеКодаТовара = ЗаполнитьИменаРеквизитовКодаТовара(Истина); + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1"); + ДанныеКодаТовара.СерийныйНомер = СерийныйНомер; + СформироватьEAN(ДанныеКодаТовара, GTIN); + // Последующие 11 символов считанной последовательности формируются по правилам интерпретации ASCII в hex + ЗначениеСтроки = СерийныйНомер; + Пока СтрДлина(ЗначениеСтроки) < 13 Цикл + ЗначениеСтроки = ЗначениеСтроки + Символ(32); // Дополняем знаками «20h» в конце (пробелами справа) до 13 байт + КонецЦикла; + СформироватьДвоичныеДанныеДляЧисла(ДанныеКодаТовара, GTIN, ЗначениеСтроки); + Возврат ДанныеКодаТовара; + +КонецФункции + +// Сформировать технический код для нечитаемого DataMatrix на основе GTIN & SerialNumber. +// +// Параметры: +// GTIN - Строка - Глобальный идентификатор торговой единицы. +// СерийныйНомер - Строка - Серийный номер. +// КриптоЧасть - Строка - Крипто часть КМ. +// +// Возвращаемое значение: +// Строка - Технический код в Base64. +// +Функция СформироватьТехническийКодДляНечитаемогоDataMatrixВBase64(GTIN, СерийныйНомер, КриптоЧасть = "0000") Экспорт + + ТехническийКод = "01 %1 21 %2 93 %3 98crpt"; + ТехническийКод = СтрШаблон(ТехническийКод, GTIN, СерийныйНомер, КриптоЧасть); + ТехническийКод = СтрЗаменить(ТехническийКод, "", ОбщегоНазначенияБПОКлиентСервер.РазделительGS1()); + ТехническийКод = СтрЗаменить(ТехническийКод, " ", ""); + + ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(ТехническийКод); + ШтрихкодBase64 = Base64Строка(ДвоичныеДанныеСтроки); + + Возврат ШтрихкодBase64; + +КонецФункции + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.РазобратьСтрокуШтрихкодаGS1 или +// МенеджерОборудованияМаркировкаКлиент.РазобратьСтрокуШтрихкодаGS1. +// Разобрать строку штрихкода в соответствии со стандартом GS1. +// +// Параметры: +// Штрихкод - Строка - значение штрихкода. +// +// Возвращаемое значение: +// Структура. +Функция РазобратьСтрокуШтрихкодаGS1(Знач Штрихкод) Экспорт + + РезультатРазбора = Новый Структура; + РезультатРазбора.Вставить("Разобран" , Ложь); + РезультатРазбора.Вставить("ОписаниеОшибки"); + РезультатРазбора.Вставить("ПредставлениеШтрихкода", ""); + РезультатРазбора.Вставить("ДанныеШтрихкода", Новый Соответствие); + + РезультатРазбора.Вставить("ПредставлениеШтрихкодаБезКриптоХвоста" , ""); + РезультатРазбора.Вставить("ЕстьКриптоХвост", Ложь); + + КодыGS1 = КодыGS1Служебный(); + + Если СтрНачинаетсяС(Штрихкод, "(") Тогда + РазобратьСтрокуШтрихкодаGS1СоСкобками(Штрихкод, РезультатРазбора, КодыGS1); + Иначе + Разделитель = ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(); + ЧастиШтрихкода = СтрРазделить(Штрихкод, Разделитель, Ложь); + Для Каждого ЧастьБезРазделителей Из ЧастиШтрихкода Цикл + РазобратьСтрокуШтрихкодаGS1Служебный(ЧастьБезРазделителей, РезультатРазбора, КодыGS1); + КонецЦикла; + КонецЕсли; + + Возврат РезультатРазбора; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодыGS1 или +// МенеджерОборудованияМаркировкаКлиент.КодыGS1. +// Коды GS1. +// +// Возвращаемое значение: +// Соответствие из Строка - Коды gs1 +Функция КодыGS1() Экспорт + + Возврат КодыGS1Служебный(); + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.РазобратьШтриховойКодТовара или +// МенеджерОборудованияМаркировкаКлиент.РазобратьШтриховойКодТовара. +// Разобрать штриховой код товара. +// +// Параметры: +// Штрихкод - Строка - Штрихкод +// ШтрихкодВBase64 - Булево - Штрихкод в base64 +// +// Возвращаемое значение: +// Структура - Разобрать штриховой код товара: +// * Разобран - Булево - +// * ОписаниеОшибки - СТрока +// * ПредставлениеШтрихкода - Строка - +// * ДанныеШтрихкода - Строка - +// * ТипИдентификатораТовара - ПеречислениеСсылка.ТипыИдентификаторовТовараККТ - +// * GTIN - Строка - +// * СерийныйНомер - Строка - +// * EAN - Строка - +// * РеквизитКодаТовараHEX - Строка - +// * РеквизитКодаТовара - Строка - +// * ИдентифицируетЭкземпляр - Булево - +// * ПотребительскаяУпаковкаТабачнойПродукции - Булево - +// * ШтрихкодBase64 - Булево - +// * НаименованиеРеквизита - Строка - +// +Функция РазобратьШтриховойКодТовара(Знач Штрихкод, Знач ШтрихкодВBase64 = Ложь) Экспорт; + + Возврат РазобратьШтриховойКодТовараСлужебная(Штрихкод, ШтрихкодВBase64); + +КонецФункции + +// Устарела: следует использовать ОбщегоНазначенияБПОКлиентСервер.РазделительGS1. +// Функция возвращает разделитель GS1. +// +// Возвращаемое значение: +// Строка. +// +Функция РазделительGS1() Экспорт + + Возврат ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(); + +КонецФункции + +// Устарела: следует использовать ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1. +// Функция возвращает экранированный символ GS1. +// +// Возвращаемое значение: +// Строка. +// +Функция ЭкранированныйСимволGS1() Экспорт + + Возврат ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1(); + +КонецФункции + +// Устарела: следует использовать РазобратьШтриховойКодТовара. +// Функция расшифровывает код маркировки продукции. +// +// Параметры: +// КодМаркировки - Строка - код маркировки. +// +// Возвращаемое значение: +// Структура. +// +Функция РазобратьКодМаркировки(Знач КодМаркировки) Экспорт + + Идентификаторы = ИдентификаторыGS1(); + + // Определяем структуру результата. + ДанныеМаркировки = Новый Структура(); + ДанныеМаркировки.Вставить("Разобран", Ложь); + ДанныеМаркировки.Вставить("ОписаниеОшибки"); + ДанныеМаркировки.Вставить("ПредставлениеШтрихкода" , ""); + ДанныеМаркировки.Вставить("ПотребительскаяУпаковка", Ложь); + ДанныеМаркировки.Вставить("ДанныеШтрихкода", Новый Соответствие); + + ДанныеМаркировки.Вставить("ГлобальныйИдентификаторТорговойЕдиницы"); // GTIN + ДанныеМаркировки.Вставить("СерийныйНомер"); // Серийный номер с потребительской или групповой обработки. + ДанныеМаркировки.Вставить("ИдентификаторКлючаПроверки"); + ДанныеМаркировки.Вставить("КодПроверки"); + ДанныеМаркировки.Вставить("ДополнительныйИдентификаторПродукта"); + + ДанныеМаркировки.Вставить("КодМаркировки"); // Исходный код маркировки. Для отображении на экране. + ДанныеМаркировки.Вставить("КодМаркировкиККТ"); // Исходный код маркировки. Маскируемый для передачи на ККТ. + ДанныеМаркировки.Вставить("EAN"); // Штрихкод товара преобразованный из GTIN + + ДанныеМаркировки.Вставить("ПредставлениеШтрихкодаБезКриптоХвоста" , ""); + ДанныеМаркировки.Вставить("ЕстьКриптоХвост", Ложь); + + ПозицияРазделителяGS1 = Найти(КодМаркировки, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1()); + ПозицияРазделителяЭкран = Найти(КодМаркировки, ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1()); + + Если СтрНачинаетсяС(КодМаркировки, "(") Тогда + + КодыGS1 = КодыGS1Служебный(); + РазобратьСтрокуШтрихкодаGS1СоСкобками(КодМаркировки, ДанныеМаркировки, КодыGS1); + + Если ДанныеМаркировки.Разобран Тогда + ЗначениеЭлемента = ДанныеМаркировки.ДанныеШтрихкода.Получить(Идентификаторы.GTIN); + Если ЗначениеЭлемента <> Неопределено Тогда + ДанныеМаркировки.ГлобальныйИдентификаторТорговойЕдиницы = ЗначениеЭлемента.Значение; + КонецЕсли; + ЗначениеЭлемента = ДанныеМаркировки.ДанныеШтрихкода.Получить(Идентификаторы.СерийныйНомер); + Если ЗначениеЭлемента <> Неопределено Тогда + ДанныеМаркировки.СерийныйНомер = ЗначениеЭлемента.Значение; + КонецЕсли; + ЗначениеЭлемента = ДанныеМаркировки.ДанныеШтрихкода.Получить(Идентификаторы.КлючПроверки); + Если ЗначениеЭлемента <> Неопределено Тогда + ДанныеМаркировки.ИдентификаторКлючаПроверки = ЗначениеЭлемента.Значение; + КонецЕсли; + ЗначениеЭлемента = ДанныеМаркировки.ДанныеШтрихкода.Получить(Идентификаторы.КодПроверки); + Если ЗначениеЭлемента <> Неопределено Тогда + ДанныеМаркировки.КодПроверки = ЗначениеЭлемента.Значение; + КонецЕсли; + КонецЕсли; + + ИначеЕсли ПозицияРазделителяGS1 > 0 Или ПозицияРазделителяЭкран > 0 Тогда // В коде маркировки для групповых и транспортных упаковок присутствует символ разделитель GS1 (Dec 29). + + КодыGS1 = КодыGS1Служебный(); + Если ПозицияРазделителяЭкран > 0 Тогда + ЧастиШтрихкода = ОбщегоНазначенияБПОКлиентСервер.РазложитьСтрокуВМассивПодстрок( + КодМаркировки, ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1(), Ложь); + ДанныеМаркировки.КодМаркировки = СтрЗаменить(КодМаркировки, ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1(), ""); + ДанныеМаркировки.КодМаркировкиККТ = ДанныеМаркировки.КодМаркировки; + Иначе + ЧастиШтрихкода = СтрРазделить(КодМаркировки, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), Ложь); + ДанныеМаркировки.КодМаркировки = СтрЗаменить(КодМаркировки, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), ""); + ДанныеМаркировки.КодМаркировкиККТ = СтрЗаменить(КодМаркировки, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1()); + КонецЕсли; + + Для Каждого ЧастьБезРазделителей Из ЧастиШтрихкода Цикл + РазобратьСтрокуШтрихкодаGS1Служебный(ЧастьБезРазделителей, ДанныеМаркировки, КодыGS1); + КонецЦикла; + + Если ДанныеМаркировки.Разобран Тогда + ЗначениеЭлемента = ДанныеМаркировки.ДанныеШтрихкода.Получить(Идентификаторы.GTIN); + Если ЗначениеЭлемента <> Неопределено Тогда + ДанныеМаркировки.ГлобальныйИдентификаторТорговойЕдиницы = ЗначениеЭлемента.Значение; + КонецЕсли; + ЗначениеЭлемента = ДанныеМаркировки.ДанныеШтрихкода.Получить(Идентификаторы.СерийныйНомер); + Если ЗначениеЭлемента <> Неопределено Тогда + ДанныеМаркировки.СерийныйНомер = ЗначениеЭлемента.Значение; + КонецЕсли; + ЗначениеЭлемента = ДанныеМаркировки.ДанныеШтрихкода.Получить(Идентификаторы.КлючПроверки); + Если ЗначениеЭлемента <> Неопределено Тогда + ДанныеМаркировки.ИдентификаторКлючаПроверки = ЗначениеЭлемента.Значение; + КонецЕсли; + ЗначениеЭлемента = ДанныеМаркировки.ДанныеШтрихкода.Получить(Идентификаторы.КодПроверки); + Если ЗначениеЭлемента <> Неопределено Тогда + ДанныеМаркировки.КодПроверки = ЗначениеЭлемента.Значение; + КонецЕсли; + КонецЕсли; + + Иначе + // Код маркировки потребительской упаковке представляет собой строку символов без разделителей. + ДанныеМаркировки.КодМаркировки = КодМаркировки; + + ДлиннаКода = СтрДлина(КодМаркировки); + Если ДлиннаКода = 29 Тогда // Код маркировки табачной потребительской упаковки изложенные в постановлении правительстве №1433 от 27 ноября 2017. + + ДанныеМаркировки.ПотребительскаяУпаковка = Истина; + ДанныеМаркировки.ГлобальныйИдентификаторТорговойЕдиницы = Лев(КодМаркировки, 14); // Код товара по товарной номенклатуре GS1. + ДанныеМаркировки.СерийныйНомер = Сред(КодМаркировки, 15, 7); // Код идентификации упаковки табачной продукции. + ДанныеМаркировки.КодПроверки = Прав(КодМаркировки, 8); // Код проверки. + ДанныеМаркировки.Разобран = Истина; + + ИначеЕсли ДлиннаКода = 31 Тогда // Код маркировки табачной потребительской упаковки, новые требования. + + ДанныеМаркировки.ПотребительскаяУпаковка = Истина; + ДанныеМаркировки.ГлобальныйИдентификаторТорговойЕдиницы = Лев(КодМаркировки, 14); // Код товара по товарной номенклатуре GS1. + ДанныеМаркировки.СерийныйНомер = Сред(КодМаркировки, 15, 7); // Код идентификации упаковки табачной продукции. + КодПроверки = Прав(КодМаркировки, 10); + ДанныеМаркировки.ИдентификаторКлючаПроверки = Лев(КодПроверки, 2); // Идентификатор ключа проверки. + ДанныеМаркировки.КодПроверки = Прав(КодПроверки, 8); // Код проверки. + ДанныеМаркировки.Разобран = Истина; + + Иначе + ДанныеМаркировки.ОписаниеОшибки = НСтр("ru = 'Штрихкод не распознан.'") + КонецЕсли; + + КонецЕсли; + + Если ДанныеМаркировки.Разобран Тогда + // Пытаем получить торговый штрихкод EAN8 или EAN13 из GTIN. + GTIN = ДанныеМаркировки.ГлобальныйИдентификаторТорговойЕдиницы; + Пока Лев(GTIN, 1) = "0" И СтрДлина(GTIN) > 8 Цикл + GTIN = Сред(GTIN, 2); + КонецЦикла; + ДанныеМаркировки.EAN = GTIN; + КонецЕсли; + + Возврат ДанныеМаркировки; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает результат разбора строки штрихкода GS1 +// +// Возвращаемое значение: +// Структура: +// * Разобран - Булево - штрихкод разобран +// * ОписаниеОшибки - Строка - описание ошибки разбора +// * ПредставлениеШтрихкода - Строка - представление штрихкода +// * ДанныеШтрихкода - Соответствие - разобранные разделы штрихкода +// +Функция НовыйРезультатРазбораСтрокиШтрихкодаGS1() Экспорт + + РезультатРазбора = Новый Структура; + РезультатРазбора.Вставить("Разобран" , Ложь); + РезультатРазбора.Вставить("ОписаниеОшибки", ""); + РезультатРазбора.Вставить("ПредставлениеШтрихкода", ""); + РезультатРазбора.Вставить("ДанныеШтрихкода", Новый Соответствие); + + РезультатРазбора.Вставить("ПредставлениеШтрихкодаБезКриптоХвоста" , ""); + РезультатРазбора.Вставить("ЕстьКриптоХвост", Ложь); + +КонецФункции + +// Коды GS1 служебный. +// +// Возвращаемое значение: +// Соответствие из Строка. +// +Функция КодыGS1Служебный() Экспорт; + + Коды = Новый Соответствие; + + ДобавитьКодGS1(Коды, "00" , "SSCC" , 18); + ДобавитьКодGS1(Коды, "01" , "GTIN" , 14); + ДобавитьКодGS1(Коды, "02" , "CONTENT" , 14); + ДобавитьКодGS1(Коды, "10" , "BATCH_LOT" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "11" , "PROD_DATE" , 6); + ДобавитьКодGS1(Коды, "12" , "DUE_DATE" , 6); + ДобавитьКодGS1(Коды, "13" , "PACK_DATE" , 6); + ДобавитьКодGS1(Коды, "15" , "BEST_BEFORE" , 6); + ДобавитьКодGS1(Коды, "16" , "SELL_BY" , 6); + ДобавитьКодGS1(Коды, "17" , "EXPIRE" , 6); + ДобавитьКодGS1(Коды, "20" , "VARIANT" , 2); + ДобавитьКодGS1(Коды, "21" , "SERIAL" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "22" , "CPV" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "240" , "ADDITIONAL_ID" , , 30, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "241" , "CUSTOMER_PART_NO" , , 30, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "242" , "MTO_VARIANT" , , 6); + ДобавитьКодGS1(Коды, "243" , "PCN" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "250" , "SECONDARY_SERIAL" , , 30, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "251" , "REF_TO_SOURCE" , , 30, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "253" , "GDTI" , 13, 17, ТипGS1Число(), ТипGS1Строка()); + ДобавитьКодGS1(Коды, "254" , "GLN_EXTENSION_COMPONENT" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "255" , "GСТ" , 13, 12); + ДобавитьКодGS1(Коды, "30" , "VAR_COUNT" , , 8); + ДобавитьКодGS1(Коды, "310n", "NET_WEIGHT_kg" , 6); + ДобавитьКодGS1(Коды, "311n", "LENGTH_m" , 6); + ДобавитьКодGS1(Коды, "312n", "WIDTH_m" , 6); + ДобавитьКодGS1(Коды, "313n", "HEIGHT_m" , 6); + ДобавитьКодGS1(Коды, "314n", "AREA_m2" , 6); + ДобавитьКодGS1(Коды, "315n", "NET_VOLUME_l" , 6); + ДобавитьКодGS1(Коды, "316n", "NET_VOLUME_m3" , 6); + ДобавитьКодGS1(Коды, "320n", "NET_WEIGHT_lb" , 6); + ДобавитьКодGS1(Коды, "321n", "LENGTH_i" , 6); + ДобавитьКодGS1(Коды, "322n", "LENGTH_f" , 6); + ДобавитьКодGS1(Коды, "323n", "LENGTH_y" , 6); + ДобавитьКодGS1(Коды, "324n", "WIDTH_i" , 6); + ДобавитьКодGS1(Коды, "325n", "WIDTH_f" , 6); + ДобавитьКодGS1(Коды, "326n", "WIDTH_y" , 6); + ДобавитьКодGS1(Коды, "327n", "HEIGHT_i" , 6); + ДобавитьКодGS1(Коды, "328n", "HEIGHT_f" , 6); + ДобавитьКодGS1(Коды, "329n", "HEIGHT_y" , 6); + ДобавитьКодGS1(Коды, "330n", "GROSS_WEIGHT_kg" , 6); + ДобавитьКодGS1(Коды, "331n", "LENGTH_m_log" , 6); + ДобавитьКодGS1(Коды, "332n", "WIDTH_m_log" , 6); + ДобавитьКодGS1(Коды, "333n", "HEIGHT_m_log" , 6); + ДобавитьКодGS1(Коды, "334n", "AREA_m2_log" , 6); + ДобавитьКодGS1(Коды, "335n", "VOLUME_l_log" , 6); + ДобавитьКодGS1(Коды, "336n", "VOLUME_m3_log" , 6); + ДобавитьКодGS1(Коды, "337n", "KG_PER_m2" , 6); + ДобавитьКодGS1(Коды, "340n", "GROSS_WEIGHT_lb" , 6); + ДобавитьКодGS1(Коды, "341n", "LENGTH_i_log" , 6); + ДобавитьКодGS1(Коды, "342n", "LENGTH_f_log" , 6); + ДобавитьКодGS1(Коды, "343n", "LENGTH_y_log" , 6); + ДобавитьКодGS1(Коды, "344n", "WIDTH_i_log" , 6); + ДобавитьКодGS1(Коды, "345n", "WIDTH_f_log" , 6); + ДобавитьКодGS1(Коды, "346n", "WIDTH_y_log" , 6); + ДобавитьКодGS1(Коды, "347n", "HEIGHT_i_log" , 6); + ДобавитьКодGS1(Коды, "348n", "HEIGHT_f_log" , 6); + ДобавитьКодGS1(Коды, "349n", "HEIGHT_y_log" , 6); + ДобавитьКодGS1(Коды, "350n", "AREA_i2" , 6); + ДобавитьКодGS1(Коды, "351n", "AREA_f2" , 6); + ДобавитьКодGS1(Коды, "352n", "AREA_y2" , 6); + ДобавитьКодGS1(Коды, "353n", "AREA_i2_log" , 6); + ДобавитьКодGS1(Коды, "354n", "AREA_f2_log" , 6); + ДобавитьКодGS1(Коды, "355n", "AREA_y2_log" , 6); + ДобавитьКодGS1(Коды, "356n", "NET_WEIGHT_t" , 6); + ДобавитьКодGS1(Коды, "357n", "NET_VOLUME_oz" , 6); + ДобавитьКодGS1(Коды, "360n", "NET_VOLUME_q" , 6); + ДобавитьКодGS1(Коды, "361n", "NET_VOLUME_g" , 6); + ДобавитьКодGS1(Коды, "362n", "VOLUME_q" , 6); + ДобавитьКодGS1(Коды, "363n", "VOLUME_g" , 6); + ДобавитьКодGS1(Коды, "364n", "VOLUME_i3" , 6); + ДобавитьКодGS1(Коды, "365n", "VOLUME_f3" , 6); + ДобавитьКодGS1(Коды, "366n", "VOLUME_y3" , 6); + ДобавитьКодGS1(Коды, "367n", "VOLUME_i3_log" , 6); + ДобавитьКодGS1(Коды, "368n", "VOLUME_f3_log" , 6); + ДобавитьКодGS1(Коды, "369n", "VOLUME_y3_log" , 6); + ДобавитьКодGS1(Коды, "37" , "COUNT" , , 8); + ДобавитьКодGS1(Коды, "390n", "AMOUNT" , , 15); + ДобавитьКодGS1(Коды, "391n", "AMOUNT_ISO" , 3, 15); + ДобавитьКодGS1(Коды, "392n", "PRICE" , , 15); + ДобавитьКодGS1(Коды, "393n", "PRICE_ISO" , 3, 15); + ДобавитьКодGS1(Коды, "394n", "PRCNT_OFF" , 4, , , , Истина); + ДобавитьКодGS1(Коды, "400" , "ORDER_NUMBER" , , 30, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "401" , "GINC" , , 30, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "402" , "GSIN" , 17, , , , Истина); + ДобавитьКодGS1(Коды, "403" , "ROUTE" , , 30, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "410" , "SHIP_TO_LOC" , 13); + ДобавитьКодGS1(Коды, "411" , "BILL_TO" , 13); + ДобавитьКодGS1(Коды, "412" , "PURCHASE_FROM" , 13); + ДобавитьКодGS1(Коды, "413" , "SHIP_FOR_LOC" , 13); + ДобавитьКодGS1(Коды, "414" , "LOC_No" , 13); + ДобавитьКодGS1(Коды, "415" , "PAY_TO" , 13); + ДобавитьКодGS1(Коды, "416" , "PROD_SERV_LOC" , 13); + ДобавитьКодGS1(Коды, "420" , "SHIP_TO_POST" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "421" , "SHIP_TO_POST_ISO" , 3, 9, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "422" , "ORIGIN" , 3, , , , Истина); + ДобавитьКодGS1(Коды, "423" , "CONTRY_INITIAL_PROCESS" , 3, 12); + ДобавитьКодGS1(Коды, "424" , "CONTRY_PROCESS" , 3, , , , Истина); + ДобавитьКодGS1(Коды, "425" , "CONTRY_DISASSEMBLY" , 3, 12); + ДобавитьКодGS1(Коды, "426" , "CONTRY_FULL_PROCESS" , 3, , , , Истина); + ДобавитьКодGS1(Коды, "427" , "ORIGIN_SUBDIVISION" , , 3, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "7001", "NSN" , 13, , , , Истина); + ДобавитьКодGS1(Коды, "7002", "MEAT_CUT" , , 30, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "7003", "EXPIRY_TIME" , 10, , , , Истина); + ДобавитьКодGS1(Коды, "7004", "ACTIVE_POTENCY" , , 4); + ДобавитьКодGS1(Коды, "7005", "CATCH_AREA" , , 12, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "7006", "FIRST_FREEZE_DATE" , 6, , , , Истина); + ДобавитьКодGS1(Коды, "7007", "HARVEST_DATE" , 6, 6); + ДобавитьКодGS1(Коды, "7008", "AQUATIC_SPECIES" , , 3, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "7009", "FISHING_GEAR_TYPE" , , 10, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "7010", "PROD_METHOD" , , 2, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "7020", "REFURB_LOT" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "7021", "FUNC_STAT" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "7022", "REV_STAT" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "7023", "GIAI_ASSEMBLY" , , 30, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "703s", "PROCESSOR_s" , 3, 27, ТипGS1Число(), ТипGS1Строка()); + ДобавитьКодGS1(Коды, "710" , "NHRN_PZN" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "711" , "NHRN_CIP" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "712" , "NHRN_CN" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "713" , "NHRN_DRN" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "8001", "DIMENSIONS" , 14, , , , Истина); + ДобавитьКодGS1(Коды, "8002", "CMT_No" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "8003", "GRAI" , 14, 16, ТипGS1Число(), ТипGS1Строка()); + ДобавитьКодGS1(Коды, "8004", "GIAI" , , 30, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "8005", "PRICE_PER_UNIT" , 6, , , , Истина); + ДобавитьКодGS1(Коды, "8006", "ITIP_or_GCTIN" , 18, , , , Истина); + ДобавитьКодGS1(Коды, "8007", "IBAN" , , 34, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "8008", "PROD_TIME" , 8, 4, , , Истина); + ДобавитьКодGS1(Коды, "8010", "CPID" , , 30, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "8011", "CPID_SERIAL" , , 12); + ДобавитьКодGS1(Коды, "8012", "VERSION" , , 20, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "8017", "GSRN_PROVIDER" , 18, , , , Истина); + ДобавитьКодGS1(Коды, "8018", "GSRN_RECIPIENT" , 18, , , , Истина); + ДобавитьКодGS1(Коды, "8019", "SRIN" , , 10); + ДобавитьКодGS1(Коды, "8020", "REF_No" , , 25, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "8110", "COUPON_CODE_ID" , , 70, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "8111", "POINTS" , 4, , , , Истина); + ДобавитьКодGS1(Коды, "8112", "PAPPERLESS_COUPON_CODE_ID" , , 70, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "8200", "PRODUCT_URL" , , 70, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "90" , "INTERNAL" , , 30, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "91" , "INTERNAL1" , , 90, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "92" , "INTERNAL2" , , 90, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "93" , "INTERNAL3" , , 90, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "94" , "INTERNAL4" , , 90, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "95" , "INTERNAL5" , , 90, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "96" , "INTERNAL6" , , 90, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "97" , "INTERNAL7" , , 90, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "98" , "INTERNAL8" , , 90, , ТипGS1Строка()); + ДобавитьКодGS1(Коды, "99" , "INTERNAL9" , , 90, , ТипGS1Строка()); + + Возврат Коды + +КонецФункции + +// Разобрать штриховой код товара служебная. +// +// Параметры: +// Штрихкод - Строка - Штрихкод +// ШтрихкодВBase64 - Булево - Штрихкод в base64 +// +// Возвращаемое значение: +// Структура - Разобрать штриховой код товара: +// * Разобран - Булево - +// * ОписаниеОшибки - СТрока +// * ПредставлениеШтрихкода - Строка - +// * ДанныеШтрихкода - Строка - +// * ТипИдентификатораТовара - ПеречислениеСсылка.ТипыИдентификаторовТовараККТ - +// * GTIN - Строка - +// * СерийныйНомер - Строка - +// * EAN - Строка - +// * РеквизитКодаТовараHEX - Строка - +// * РеквизитКодаТовара - Строка - +// * ИдентифицируетЭкземпляр - Булево - +// * ПотребительскаяУпаковкаТабачнойПродукции - Булево - +// * ШтрихкодBase64 - Булево - +// * НаименованиеРеквизита - Строка - +// +Функция РазобратьШтриховойКодТовараСлужебная(Знач Штрихкод, Знач ШтрихкодВBase64 = Ложь, КодыGS1 = Неопределено) Экспорт; + + Идентификаторы = ИдентификаторыGS1(); + // Определяем структуру результата. + ДанныеКодаТовара = ЗаполнитьИменаРеквизитовКодаТовара(Ложь); + + Если ШтрихкодВBase64 Тогда + ДанныеКодаТовара.ШтрихкодBase64 = Штрихкод; + + ДвоичныеДанные = Base64Значение(Штрихкод); + Если ДвоичныеДанные = Неопределено Тогда + ШтриховойКодТовара = ШтрихкодВBase64; + Иначе + ШтриховойКодТовара = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные); + КонецЕсли; + + Иначе + ШтриховойКодТовара = Штрихкод; + ДанныеКодаТовара.ШтрихкодBase64 = МенеджерОборудованияКлиентСервер.ШтрихкодВBase64(ШтриховойКодТовара); + КонецЕсли; + + // Алгоритм реализован по приказу Федеральной налоговой службы от 29.08.2019 № ММВ-7-20/434@ "О внесении изменений в приложение № 2 + // к приказу Федеральной налоговой службы от 21.03.2017 № ММВ-7-20/229@" (Зарегистрирован 25.12.2019 № 56978). + ДлинаШтрихкода = СтрДлина(ШтриховойКодТовара); + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараНеРаспознан"); + ДанныеКодаТовара.НаименованиеРеквизита = "NotIdentified"; + + Если ДлинаШтрихкода = 8 Тогда // ТипыИдентификаторовТовара.EAN8 + // Последовательности данных равна 8 символам и последовательность символов состоит из цифр. + Если ТолькоЦифрыВСтроке(ШтриховойКодТовара) Тогда + // Проверяется контрольная сумма по правилам формирования кода EAN-8. + Если МенеджерОборудованияКлиентСервер.РассчитатьКонтрольныйСимволGTIN8(ШтриховойКодТовара) = Прав(ШтриховойКодТовара, 1) Тогда + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеEAN8"); + СформироватьEAN(ДанныеКодаТовара, ШтриховойКодТовара); + СформироватьДвоичныеДанныеДляЧисла(ДанныеКодаТовара, ШтриховойКодТовара); + ДанныеКодаТовара.Разобран = Истина; + ДанныеКодаТовара.НаименованиеРеквизита = "EAN8"; + Возврат ДанныеКодаТовара; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ДлинаШтрихкода = 13 Тогда // ТипыИдентификаторовТовара.EAN13 + // Последовательности данных равна 13 символам и последовательность символов состоит из цифр. + Если ТолькоЦифрыВСтроке(ШтриховойКодТовара) Тогда + // Проверяется контрольная сумма по правилам формирования кода EAN-13. + Если МенеджерОборудованияКлиентСервер.РассчитатьКонтрольныйСимволGTIN13(ШтриховойКодТовара) = Прав(ШтриховойКодТовара, 1) Тогда + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеEAN13"); + СформироватьEAN(ДанныеКодаТовара, ШтриховойКодТовара); + СформироватьДвоичныеДанныеДляЧисла(ДанныеКодаТовара, ШтриховойКодТовара); + ДанныеКодаТовара.Разобран = Истина; + ДанныеКодаТовара.НаименованиеРеквизита = "EAN13"; + Возврат ДанныеКодаТовара; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ДлинаШтрихкода = 14 Тогда // ТипыИдентификаторовТовара.ITF14 + // Последовательности данных равна 14 символам и последовательность символов состоит из цифр. + Если ТолькоЦифрыВСтроке(ШтриховойКодТовара) Тогда + // Проверяется контрольная сумма по правилам формирования кода ITF-14 + Если МенеджерОборудованияКлиентСервер.РассчитатьКонтрольныйСимволGTIN14(ШтриховойКодТовара) = Прав(ШтриховойКодТовара, 1) Тогда + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеITF14"); + СформироватьEAN(ДанныеКодаТовара, ШтриховойКодТовара); + СформироватьДвоичныеДанныеДляЧисла(ДанныеКодаТовара, ШтриховойКодТовара); + ДанныеКодаТовара.Разобран = Истина; + ДанныеКодаТовара.НаименованиеРеквизита = "ITF14"; + Возврат ДанныеКодаТовара; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ДлинаШтрихкода = 20 Тогда // Код товара средства идентификации мехового изделия. + // Последовательности данных равна 20 символам. + // Последовательность символов состоит из прописных латинских букв, цифр и символа-разделителя «-», + // проверяется формат содержания считанной последовательности на шаблон СС-ЦЦЦЦЦЦ-СССССССССС. + Если Сред(ШтриховойКодТовара, 3, 1) = "-" И Сред(ШтриховойКодТовара, 10, 1) = "-" Тогда + + СимвольныйКодГосударства = Сред(ШтриховойКодТовара, 1, 2); + ТипИдентификационногоЗнака = Сред(ШтриховойКодТовара, 4, 6); + СерияИдентификационногоЗнака = Сред(ШтриховойКодТовара, 11, 10); + + Если ПроверкаСтроки(СимвольныйКодГосударства, ПараметрыПроверкиСтроки(Истина)) + И ТолькоЦифрыВСтроке(ТипИдентификационногоЗнака) + И ПроверкаСтроки(СерияИдентификационногоЗнака, ПараметрыПроверкиСтроки(Истина,,Истина)) Тогда + + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.ИзделияИзНатуральногоМеха"); + СформироватьДвоичныеДанныеДляСтроки(ДанныеКодаТовара, ШтриховойКодТовара); + ДанныеКодаТовара.Разобран = Истина; + ДанныеКодаТовара.ИдентифицируетЭкземпляр = Истина; + ДанныеКодаТовара.НаименованиеРеквизита = "MI"; + Возврат ДанныеКодаТовара; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Если ДлинаШтрихкода = 29 Или ДлинаШтрихкода = 25 Тогда // Код товара в формате Data Matrix маркировки табачной продукции. + + ПараметрыПроверкиСтроки = ПараметрыПроверкиСтроки(Истина, Истина, Истина); + ПараметрыПроверкиСтроки.ДопустимыеСимволы = "«!”""%&’'()*+-.,/_:;=<>?»"; + Если ПроверкаСтроки(ШтриховойКодТовара, ПараметрыПроверкиСтроки) Тогда + + GTIN = Лев(ШтриховойКодТовара, 14); + СерийныйНомер = Сред(ШтриховойКодТовара, 15, 7); // Код идентификации упаковки табачной продукции. + МРЦ = Сред(ШтриховойКодТовара, 22, 4); // ЦРЦ. + Если ТолькоЦифрыВСтроке(GTIN) И МенеджерОборудованияКлиентСервер.РассчитатьКонтрольныйСимволGTIN14(GTIN) = Прав(GTIN, 1) Тогда + + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1"); + ДанныеКодаТовара.СерийныйНомер = СерийныйНомер; + СформироватьEAN(ДанныеКодаТовара, GTIN); + // Последующие 11 символов считанной последовательности формируются по правилам интерпретации ASCII в hex + ЗначениеСтроки = СерийныйНомер + МРЦ; + Пока СтрДлина(ЗначениеСтроки) < 13 Цикл + ЗначениеСтроки = ЗначениеСтроки + Символ(32); // Дополняем знаками «20h» в конце (пробелами справа) до 13 байт + КонецЦикла; + СформироватьДвоичныеДанныеДляЧисла(ДанныеКодаТовара, GTIN, ЗначениеСтроки); + ДанныеКодаТовара.Разобран = Истина; + ДанныеКодаТовара.ИдентифицируетЭкземпляр = Истина; + ДанныеКодаТовара.ПотребительскаяУпаковкаТабачнойПродукции = Истина; + ДанныеКодаТовара.НаименованиеРеквизита = "KMK"; + ДанныеКодаТовара.ПредставлениеШтрихкода = ШтриховойКодТовара; + ДанныеКодаТовара.ПредставлениеШтрихкодаБезКриптоХвоста = GTIN + СерийныйНомер + МРЦ; + Возврат ДанныеКодаТовара; + + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ДлинаШтрихкода = 41 + Или ДлинаШтрихкода = 52 Тогда // Код товара в формате Data Matrix маркировки блок табачной продукции. + + Если КодВФорматеDataMatrix40БезGS(ШтриховойКодТовара, ДанныеКодаТовара) Тогда + Возврат ДанныеКодаТовара; + КонецЕсли; + + КонецЕсли; + + Если КодыGS1 = Неопределено Тогда + КодыGS1 = КодыGS1Служебный(); + КонецЕсли; + + Если СтрНачинаетсяС(ШтриховойКодТовара, "(") Тогда + // Штрихкод по стандарту GS1 в HRI виде. + РазобратьСтрокуШтрихкодаGS1СоСкобками(ШтриховойКодТовара, ДанныеКодаТовара, КодыGS1); + КонецЕсли; + + Если НЕ ДанныеКодаТовара.Разобран Тогда + // Штрихкод по стандарту GS1 присутствует символ разделитель GS1 (Dec 29). + ПозицияРазделителяGS1 = Найти(ШтриховойКодТовара, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1()); + ПозицияРазделителяЭкран = Найти(ШтриховойКодТовара, ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1()); + Если ПозицияРазделителяGS1 > 0 Или ПозицияРазделителяЭкран > 0 Тогда + Если ПозицияРазделителяЭкран > 0 Тогда + ЧастиШтрихкода = ОбщегоНазначенияБПОКлиентСервер.РазложитьСтрокуВМассивПодстрок( + ШтриховойКодТовара, ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1(), Ложь); + Иначе + ЧастиШтрихкода = СтрРазделить(ШтриховойКодТовара, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), Ложь); + КонецЕсли; + Для Каждого ЧастьБезРазделителей Из ЧастиШтрихкода Цикл + РазобратьСтрокуШтрихкодаGS1Служебный(ЧастьБезРазделителей, ДанныеКодаТовара, КодыGS1); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если НЕ ДанныеКодаТовара.Разобран Тогда + // Штрихкод по стандарту GS1 без разделителя GS1 (Dec 29). + РазобратьСтрокуШтрихкодаGS1Служебный(ШтриховойКодТовара, ДанныеКодаТовара, КодыGS1); + КонецЕсли; + + // выделить криптохвост + Если ДанныеКодаТовара.ЕстьКриптоХвост Тогда + ШтрихкодБезКриптоХвоста = ШтриховойКодТовара; + КриптоХвост = ""; + ПозицияРазделителяGS1 = СтрНайти(ШтриховойКодТовара, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1()); + ПозицияРазделителяЭкран = СтрНайти(ШтриховойКодТовара, ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1()); + + Если ПозицияРазделителяЭкран > 0 Тогда + РазделительКода = ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1(); + ИначеЕсли ПозицияРазделителяGS1 > 0 Тогда + РазделительКода = ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(); + Иначе + РазделительКода = ""; + КонецЕсли; + + КодЧасти = "91"; + ЭлементКода = ДанныеКодаТовара.ДанныеШтрихкода[КодЧасти]; + Если ЭлементКода <> Неопределено Тогда + ШтрихкодБезКриптоХвоста =СтрЗаменить(ШтрихкодБезКриптоХвоста, + КодЧасти + ЭлементКода.Значение + РазделительКода, ""); + ШтрихкодБезКриптоХвоста =СтрЗаменить(ШтрихкодБезКриптоХвоста, + "("+КодЧасти + ")" + ЭлементКода.Значение + РазделительКода, ""); + КриптоХвост = КриптоХвост + КодЧасти + ЭлементКода.Значение + РазделительКода; + КонецЕсли; + КодЧасти = "92"; + ЭлементКода = ДанныеКодаТовара.ДанныеШтрихкода[КодЧасти]; + Если ЭлементКода <> Неопределено Тогда + ШтрихкодБезКриптоХвоста =СтрЗаменить(ШтрихкодБезКриптоХвоста, + КодЧасти + ЭлементКода.Значение + РазделительКода, ""); + ШтрихкодБезКриптоХвоста =СтрЗаменить(ШтрихкодБезКриптоХвоста, + "("+КодЧасти + ")" + ЭлементКода.Значение + РазделительКода, ""); + КриптоХвост = КриптоХвост + КодЧасти + ЭлементКода.Значение + РазделительКода; + КонецЕсли; + КодЧасти = "93"; + ЭлементКода = ДанныеКодаТовара.ДанныеШтрихкода[КодЧасти]; + Если ЭлементКода <> Неопределено Тогда + ШтрихкодБезКриптоХвоста =СтрЗаменить(ШтрихкодБезКриптоХвоста, + КодЧасти + ЭлементКода.Значение + РазделительКода, ""); + ШтрихкодБезКриптоХвоста =СтрЗаменить(ШтрихкодБезКриптоХвоста, + "("+КодЧасти + ")" + ЭлементКода.Значение + РазделительКода, ""); + КриптоХвост = КриптоХвост + КодЧасти + ЭлементКода.Значение + РазделительКода; + КонецЕсли; + + ДанныеКодаТовара.ШтрихкодБезКриптоХвоста = ШтрихкодБезКриптоХвоста; + ДанныеКодаТовара.ШтрихкодBase64БезКриптоХвоста = ОбщегоНазначенияБПОКлиентСервер.ШтрихкодВBase64(ШтрихкодБезКриптоХвоста); + ДанныеКодаТовара.КриптоХвостBase64 = ОбщегоНазначенияБПОКлиентСервер.ШтрихкодВBase64(КриптоХвост); + КонецЕсли; + + // Штрихкод по стандарту GS1 + Если ДанныеКодаТовара.Разобран Тогда + ЗначениеЭлемента = ДанныеКодаТовара.ДанныеШтрихкода.Получить(Идентификаторы.GTIN); + GTIN = ?(ЗначениеЭлемента <> Неопределено, ЗначениеЭлемента.Значение, Неопределено); + Если GTIN <> Неопределено И ТолькоЦифрыВСтроке(GTIN) И МенеджерОборудованияКлиентСервер.РассчитатьКонтрольныйСимволGTIN14(GTIN) = Прав(GTIN, 1) Тогда + ЗначениеЭлемента = ДанныеКодаТовара.ДанныеШтрихкода.Получить(Идентификаторы.СерийныйНомер); + Если ЗначениеЭлемента <> Неопределено Тогда + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1"); + ДанныеКодаТовара.СерийныйНомер = ЗначениеЭлемента.Значение; + СерийныйНомер = ДанныеКодаТовара.СерийныйНомер; + ЗначениеЭлементаЦена = ДанныеКодаТовара.ДанныеШтрихкода.Получить(Идентификаторы.ЦенаЕдиницыТовара); + Если ЗначениеЭлементаЦена <> Неопределено Тогда + СерийныйНомер = СерийныйНомер + ЗначениеЭлементаЦена.Значение; + КонецЕсли; + СформироватьEAN(ДанныеКодаТовара, GTIN); + СформироватьДвоичныеДанныеДляЧисла(ДанныеКодаТовара, GTIN, СерийныйНомер); + ДанныеКодаТовара.Разобран = Истина; + ДанныеКодаТовара.ИдентифицируетЭкземпляр = Истина; + ДанныеКодаТовара.НаименованиеРеквизита = "GS1.M"; + // Фиксированное значение для AI 98, указывающее на технический КМ. + ЗначениеЭлемента = ДанныеКодаТовара.ДанныеШтрихкода.Получить("98"); + Если ЗначениеЭлемента <> Неопределено Тогда + ДанныеКодаТовара.ТехническийКод = ЗначениеЭлемента.Значение = "crpt"; + КонецЕсли; + Возврат ДанныеКодаТовара; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Штрихкод Datamatrix содержит идентификаторы применения (AI). + Если Лев(ШтриховойКодТовара, 2) = Идентификаторы.GTIN Тогда // Если штрихкод начинается с группы '01' - GTIN . + GTIN = Сред(ШтриховойКодТовара, 3, 14); // Получаем GTIN + // Проверяем GTIN на корректность, и далее идет группа '21' - SERIAL. + Если ТолькоЦифрыВСтроке(GTIN) И МенеджерОборудованияКлиентСервер.РассчитатьКонтрольныйСимволGTIN14(GTIN) = Прав(GTIN, 1) + И Сред(ШтриховойКодТовара, 17, 2) = Идентификаторы.СерийныйНомер Тогда + ДанныеСтроки = Сред(ШтриховойКодТовара, 19); + Если СтрДлина(ДанныеСтроки) > 13 Тогда // + // Предполагаем что серийный номер состоит из 13 символов + СерийныйНомер = Сред(ДанныеСтроки, 1, 13); + СледующаяГруппа2 = Сред(ДанныеСтроки, 14, 2); + СледующаяГруппа3 = Сред(ДанныеСтроки, 14, 3); + СледующаяГруппа4 = Сред(ДанныеСтроки, 14, 4); + Если СледующаяГруппа2 = Идентификаторы.КлючПроверки Или СледующаяГруппа2 = Идентификаторы.КодПроверки + Или СледующаяГруппа2 = "17" Или СледующаяГруппа4 = "7003" + Или СледующаяГруппа3 = Идентификаторы.КодТНВЭД Тогда + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1"); + ДанныеКодаТовара.СерийныйНомер = СерийныйНомер; + СформироватьEAN(ДанныеКодаТовара, GTIN); + СформироватьДвоичныеДанныеДляЧисла(ДанныеКодаТовара, GTIN, ДанныеКодаТовара.СерийныйНомер); + ДанныеКодаТовара.Разобран = Истина; + ДанныеКодаТовара.ИдентифицируетЭкземпляр = Истина; + ДанныеКодаТовара.НаименованиеРеквизита = "GS1.0"; + Возврат ДанныеКодаТовара; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Штрихкод не содержит наличие идентификаторов применения (AI) по стандарту GS1 + Если ДлинаШтрихкода = 68 Тогда // Код товара в кодировке ЕГАИС 2.0 в формате PDF417. + + // Последовательность символов состоит из прописных латинских букв и цифр и не содержит наличие идентификаторов применения + ПараметрыПроверкиСтроки = ПараметрыПроверкиСтроки(Истина, Ложь, Истина); + Если ПроверкаСтроки(ШтриховойКодТовара, ПараметрыПроверкиСтроки) Тогда + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС2"); + // Данные начиная с 9 символа по 31 символ включительно, сформированные по правилам интерпретации ASCII в hex. + ДанныеРеквизитаКодаТовара = Сред(ШтриховойКодТовара, 9, 23); + СформироватьДвоичныеДанныеДляСтроки(ДанныеКодаТовара, ДанныеРеквизитаКодаТовара); + ДанныеКодаТовара.Разобран = Истина; + ДанныеКодаТовара.ИдентифицируетЭкземпляр = Истина; + ДанныеКодаТовара.НаименованиеРеквизита = "EGAIS20"; + Возврат ДанныеКодаТовара; + КонецЕсли; + + ИначеЕсли ДлинаШтрихкода = 150 Тогда // Код товара в кодировке ЕГАИС 3.0 в формате Data Matrix. + + // Последовательность символов состоит из прописных латинских букв и цифр и не содержит наличие идентификаторов применения. + ПараметрыПроверкиСтроки = ПараметрыПроверкиСтроки(Истина, Ложь, Истина); + Если ПроверкаСтроки(ШтриховойКодТовара, ПараметрыПроверкиСтроки) Тогда + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС3"); + // Данные начиная с 1 символа по 14 символ включительно, сформированной по правилам интерпретации ASCII в hex. + ДанныеРеквизитаКодаТовара = Лев(ШтриховойКодТовара, 14); + СформироватьДвоичныеДанныеДляСтроки(ДанныеКодаТовара, ДанныеРеквизитаКодаТовара); + ДанныеКодаТовара.Разобран = Истина; + ДанныеКодаТовара.ИдентифицируетЭкземпляр = Истина; + ДанныеКодаТовара.НаименованиеРеквизита = "EGAIS30"; + Возврат ДанныеКодаТовара; + КонецЕсли; + КонецЕсли; + + СформироватьДвоичныеДанныеДляСтроки(ДанныеКодаТовара, Лев(ШтриховойКодТовара, 30)); + + Возврат ДанныеКодаТовара; + +КонецФункции + +Процедура РазобратьСтрокуШтрихкодаGS1СоСкобками(Штрихкод, РезультатРазбора, КодыGS1) Экспорт + + РезультатРазбора.ПредставлениеШтрихкода = Штрихкод; + РезультатРазбора.ПредставлениеШтрихкодаБезКриптоХвоста = Штрихкод; + + ДлинаШтрихкода = СтрДлина(Штрихкод); + МинимальнаяДлинаИдентификатораПрименения = 2; + МаксимальнаяДлинаИдентификатораПрименения = 4; + + НомерСимвола = 1; + Пока НомерСимвола <= ДлинаШтрихкода Цикл + + Если Сред(Штрихкод, НомерСимвола, 1) <> "(" Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Номер символа %1. Отсутствует ""("".'"), НомерСимвола); + Возврат; + КонецЕсли; + + НомерСимвола = НомерСимвола + 1; + + Позиция = СтрНайти(Штрихкод, ")",, НомерСимвола); + Если Позиция = 0 Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Номер символа %1. Отсутствует "")"".'"), НомерСимвола); + Возврат; + КонецЕсли; + + ИдентификаторПрименения = Сред(Штрихкод, НомерСимвола, Позиция - НомерСимвола); + ДлинаИдентификатора = СтрДлина(ИдентификаторПрименения); + Если ДлинаИдентификатора < МинимальнаяДлинаИдентификатораПрименения Или ДлинаИдентификатора > МаксимальнаяДлинаИдентификатораПрименения Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Номер символа %1. Неизвестный идентификатор применения(AI) %2.'"), НомерСимвола, ИдентификаторПрименения); + Возврат; + КонецЕсли; + + ПоложениеДесятичнойТочкиСтрокой = ""; + ОписаниеКода = КодыGS1[ИдентификаторПрименения]; + Если ОписаниеКода = Неопределено Тогда + Если ДлинаИдентификатора = МаксимальнаяДлинаИдентификатораПрименения Тогда + ОписаниеКода = КодыGS1[Лев(ИдентификаторПрименения, МаксимальнаяДлинаИдентификатораПрименения - 1)]; + ПоложениеДесятичнойТочкиСтрокой = Прав(ИдентификаторПрименения, 1); + КонецЕсли; + КонецЕсли; + + Если ОписаниеКода = Неопределено Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Номер символа %1. Неизвестный идентификатор применения(AI) %2.'"), НомерСимвола, ИдентификаторПрименения); + Возврат; + КонецЕсли; + + НомерСимвола = Позиция + 1; + + Значение = ""; + Если ОписаниеКода.ФиксированнаяДлина > 0 Тогда + Значение = Сред(ШтрихКод, НомерСимвола, ОписаниеКода.ФиксированнаяДлина); + Если СтрДлина(Значение) <> ОписаниеКода.ФиксированнаяДлина Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Номер символа %5. Длина значения (%3) для идентификатора применения(AI) ""%1 %2"" меньше требуемой (%4)'"), + ИдентификаторПрименения, ОписаниеКода.Имя, СтрДлина(Значение), ОписаниеКода.ФиксированнаяДлина, НомерСимвола); + Возврат; + КонецЕсли; + + Если ОписаниеКода.ТипФиксированногоЗначения = ТипGS1Число() Тогда + Если Не ТолькоЦифрыВСтроке(Значение) Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Номер символа %4. Значение (%3) для идентификатора применения(AI) ""%1 %2"" должно содержать только цифры'"), + ИдентификаторПрименения, ОписаниеКода.Имя, СтрДлина(Значение), НомерСимвола); + Возврат; + КонецЕсли; + КонецЕсли; + НомерСимвола = НомерСимвола + ОписаниеКода.ФиксированнаяДлина; + КонецЕсли; + + Если ОписаниеКода.ПеременнаяДлина > 0 И Позиция < ДлинаШтрихкода Тогда + ПозицияСледующегоИдентификатора = СтрНайти(Штрихкод, "(",, НомерСимвола); + + ПравильныйИдентификатор = Ложь; + Пока ПозицияСледующегоИдентификатора > 0 И Не ПравильныйИдентификатор Цикл + ПозицияЗакрывающегоИдентификатора = СтрНайти(Штрихкод, ")", , ПозицияСледующегоИдентификатора); + ПредполагаемыйИдентификатор = Сред(Штрихкод, ПозицияСледующегоИдентификатора + 1,ПозицияЗакрывающегоИдентификатора - ПозицияСледующегоИдентификатора - 1); + ПравильныйИдентификатор = СтрДлина(ПредполагаемыйИдентификатор) > 1 И СтрДлина(ПредполагаемыйИдентификатор) < 5 И ТолькоЦифрыВСтроке(ПредполагаемыйИдентификатор); + Если ПозицияСледующегоИдентификатора >= ДлинаШтрихкода Тогда + ПозицияСледующегоИдентификатора = 0 + ИначеЕсли Не ПравильныйИдентификатор Тогда + ПозицияСледующегоИдентификатора = СтрНайти(Штрихкод, "(",, ПозицияСледующегоИдентификатора + 1); + КонецЕсли; + КонецЦикла; + + Если ПозицияСледующегоИдентификатора > 0 Тогда + ЗначениеПеременное = Сред(Штрихкод, НомерСимвола, ПозицияСледующегоИдентификатора - НомерСимвола); + Иначе + ЗначениеПеременное = Сред(Штрихкод, НомерСимвола); + КонецЕсли; + + Если СтрДлина(ЗначениеПеременное) > ОписаниеКода.ПеременнаяДлина Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Номер символа %5. Длина значения (%3) переменной части для идентификатора применения(AI) ""%1 %2"" больше требуемой (%4)'"), + ИдентификаторПрименения, ОписаниеКода.Имя, СтрДлина(ЗначениеПеременное), ОписаниеКода.ПеременнаяДлина, НомерСимвола); + Возврат; + КонецЕсли; + Если ОписаниеКода.ТипПеременногоЗначения = ТипGS1Число() Тогда + Если Не ТолькоЦифрыВСтроке(ЗначениеПеременное) Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Номер символа %4. Значение (%3) для идентификатора применения(AI) ""%1 %2"" должно содержать только цифры'"), + ИдентификаторПрименения, ОписаниеКода.Имя, СтрДлина(ЗначениеПеременное), НомерСимвола); + Возврат; + КонецЕсли; + КонецЕсли; + НомерСимвола = НомерСимвола + СтрДлина(ЗначениеПеременное); + Значение = Значение + ЗначениеПеременное; + КонецЕсли; + + ПоложениеДесятичнойТочки = 0; + Если Не ПустаяСтрока(ПоложениеДесятичнойТочкиСтрокой) Тогда + ПоложениеДесятичнойТочки = Число(ПоложениеДесятичнойТочкиСтрокой); + Если ПоложениеДесятичнойТочки > 0 Тогда + Для Индекс = 0 По ПоложениеДесятичнойТочки - СтрДлина(Значение) Цикл + Значение = "0" + Значение; + КонецЦикла; + Значение = Лев(Значение, СтрДлина(Значение) - ПоложениеДесятичнойТочки) + "." + Прав(Значение, ПоложениеДесятичнойТочки); + КонецЕсли; + КонецЕсли; + + ОписаниеДанных = Новый Структура; + ОписаниеДанных.Вставить("ПоложениеДесятичнойТочки", ПоложениеДесятичнойТочки); + ОписаниеДанных.Вставить("Значение", Значение); + РезультатРазбора.ДанныеШтрихкода.Вставить(ОписаниеКода.Код, ОписаниеДанных); + + // убрать криптохвост из представления + Если ОписаниеКода.Код = "91" Или ОписаниеКода.Код = "92" Или ОписаниеКода.Код = "93" Тогда + РезультатРазбора.ПредставлениеШтрихкодаБезКриптоХвоста = + СтрЗаменить(РезультатРазбора.ПредставлениеШтрихкодаБезКриптоХвоста, + "("+ОписаниеКода.Код+")"+Значение,""); + РезультатРазбора.ЕстьКриптоХвост = Истина; + КонецЕсли; + + КонецЦикла; + + РезультатРазбора.Разобран = Истина; + +КонецПроцедуры + +Процедура РазобратьСтрокуШтрихкодаGS1Служебный(Штрихкод, РезультатРазбора, КодыGS1) Экспорт + + ДлинаШтрихкода = СтрДлина(Штрихкод); + ПредставлениеШтрихкода = ""; + ПредставлениеШтрихкодаБезКриптоХвоста = ""; + ЕстьКриптоХвост = Ложь; + + НомерСимвола = 1; + Пока НомерСимвола <= ДлинаШтрихкода Цикл + + ИдентификаторПрименения = Сред(Штрихкод, НомерСимвола, 2); + ОписаниеКода = КодыGS1[ИдентификаторПрименения]; + Если ОписаниеКода = Неопределено Тогда + ИдентификаторПрименения = Сред(Штрихкод, НомерСимвола, 3); + ОписаниеКода = КодыGS1[ИдентификаторПрименения]; + Если ОписаниеКода = Неопределено Тогда + ИдентификаторПрименения = Сред(Штрихкод, НомерСимвола, 4); + ОписаниеКода = КодыGS1[ИдентификаторПрименения]; + Если ОписаниеКода = Неопределено Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Неизвестный идентификатор применения(AI) %1.'"), ИдентификаторПрименения); + Возврат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + НомерСимвола = НомерСимвола + СтрДлина(ИдентификаторПрименения); + + ПоложениеДесятичнойТочкиСтрокой = ""; + Если ОписаниеКода.ЕстьПоложениеДесятичнойТочки Тогда + ПоложениеДесятичнойТочкиСтрокой = Сред(Штрихкод, НомерСимвола, 1); + НомерСимвола = НомерСимвола + 1; + КонецЕсли; + + Значение = ""; + Если ОписаниеКода.ФиксированнаяДлина > 0 Тогда + Значение = Сред(ШтрихКод, НомерСимвола, ОписаниеКода.ФиксированнаяДлина); + Если СтрДлина(Значение) <> ОписаниеКода.ФиксированнаяДлина Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Длина значения (%3) для идентификатора применения(AI) ""%1 %2"" меньше требуемой (%4)'"), + ИдентификаторПрименения, ОписаниеКода.Имя, СтрДлина(Значение), ОписаниеКода.ФиксированнаяДлина); + Возврат; + КонецЕсли; + Если ОписаниеКода.ТипФиксированногоЗначения = ТипGS1Число() Тогда + Если Не ТолькоЦифрыВСтроке(Значение) Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Значение (%3) для идентификатора применения(AI) ""%1 %2"" должно содержать только цифры'"), + ИдентификаторПрименения, ОписаниеКода.Имя, СтрДлина(Значение)); + Возврат; + КонецЕсли; + КонецЕсли; + НомерСимвола = НомерСимвола + ОписаниеКода.ФиксированнаяДлина; + КонецЕсли; + Если ОписаниеКода.ПеременнаяДлина > 0 Тогда + ЗначениеПеременное = Сред(Штрихкод, НомерСимвола); + Если СтрДлина(ЗначениеПеременное) > ОписаниеКода.ПеременнаяДлина Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Длина значения (%3) переменной части для идентификатора применения(AI) ""%1 %2"" больше требуемой (%4)'"), + ИдентификаторПрименения, ОписаниеКода.Имя, СтрДлина(ЗначениеПеременное), ОписаниеКода.ПеременнаяДлина); + Возврат; + КонецЕсли; + Если ОписаниеКода.ТипПеременногоЗначения = ТипGS1Число() Тогда + Если Не ТолькоЦифрыВСтроке(ЗначениеПеременное) Тогда + РезультатРазбора.ОписаниеОшибки = СтрШаблон( + НСтр("ru = 'Значение (%3) для идентификатора применения(AI) ""%1 %2"" должно содержать только цифры'"), + ИдентификаторПрименения, ОписаниеКода.Имя, СтрДлина(ЗначениеПеременное)); + Возврат; + КонецЕсли; + КонецЕсли; + НомерСимвола = НомерСимвола + СтрДлина(ЗначениеПеременное); + Значение = Значение + ЗначениеПеременное; + КонецЕсли; + + ПредставлениеШтрихкода = ПредставлениеШтрихкода + "(" + ИдентификаторПрименения + ПоложениеДесятичнойТочкиСтрокой + ")" + Значение; + Если ИдентификаторПрименения = "91" Или ИдентификаторПрименения = "92" Или ИдентификаторПрименения = "93" Тогда + ЕстьКриптоХвост = Истина; + Иначе + ПредставлениеШтрихкодаБезКриптоХвоста = ПредставлениеШтрихкодаБезКриптоХвоста + "(" + ИдентификаторПрименения + ПоложениеДесятичнойТочкиСтрокой + ")" + Значение; + КонецЕсли; + + ПоложениеДесятичнойТочки = 0; + Если Не ПустаяСтрока(ПоложениеДесятичнойТочкиСтрокой) Тогда + ПоложениеДесятичнойТочки = Число(ПоложениеДесятичнойТочкиСтрокой); + Если ПоложениеДесятичнойТочки > 0 Тогда + Для Индекс = 0 По ПоложениеДесятичнойТочки - СтрДлина(Значение) Цикл + Значение = "0" + Значение; + КонецЦикла; + Значение = Лев(Значение, СтрДлина(Значение) - ПоложениеДесятичнойТочки) + "." + Прав(Значение, ПоложениеДесятичнойТочки); + КонецЕсли; + КонецЕсли; + + ОписаниеДанных = Новый Структура; + ОписаниеДанных.Вставить("ПоложениеДесятичнойТочки", ПоложениеДесятичнойТочки); + ОписаниеДанных.Вставить("Значение", Значение); + РезультатРазбора.ДанныеШтрихкода.Вставить(ОписаниеКода.Код, ОписаниеДанных); + + КонецЦикла; + + РезультатРазбора.ПредставлениеШтрихкода = РезультатРазбора.ПредставлениеШтрихкода + ПредставлениеШтрихкода; + РезультатРазбора.ПредставлениеШтрихкодаБезКриптоХвоста = РезультатРазбора.ПредставлениеШтрихкодаБезКриптоХвоста + ПредставлениеШтрихкодаБезКриптоХвоста; + РезультатРазбора.ЕстьКриптоХвост = ЕстьКриптоХвост; + РезультатРазбора.Разобран = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЗаполнитьИменаРеквизитовКодаТовара(КодРазобран = Ложь) + + // Определяем структуру результата. + ДанныеКодаТовара = Новый Структура(); + ДанныеКодаТовара.Вставить("Разобран", КодРазобран); + ДанныеКодаТовара.Вставить("ОписаниеОшибки"); + ДанныеКодаТовара.Вставить("ПредставлениеШтрихкода" , ""); + ДанныеКодаТовара.Вставить("ДанныеШтрихкода", Новый Соответствие); + ДанныеКодаТовара.Вставить("ТипИдентификатораТовара"); // Тип идентификатора товара, Перечисление.ТипыИдентификаторовТовараККТ. + ДанныеКодаТовара.Вставить("GTIN"); // GTIN + ДанныеКодаТовара.Вставить("СерийныйНомер"); // Серийный номер с потребительской или групповой обработки. + ДанныеКодаТовара.Вставить("EAN"); // Штрихкод товара преобразованный из GTIN + ДанныеКодаТовара.Вставить("РеквизитКодаТовараHEX"); // Значение реквизита "код товара" , тег 1162 в бинарном виде. + ДанныеКодаТовара.Вставить("РеквизитКодаТовара"); // Значение реквизита "код товара", тег 1162 в BASE64. + ДанныеКодаТовара.Вставить("ИдентифицируетЭкземпляр", Ложь); // Идентификатора товара идентифицирует экземпляр товара. + ДанныеКодаТовара.Вставить("ПотребительскаяУпаковкаТабачнойПродукции", Ложь); // Код идентифицирует единичную упаковку табачной продукции. + ДанныеКодаТовара.Вставить("ШтрихкодBase64"); // Штрихкод в BASE64 для тега 1163 + ДанныеКодаТовара.Вставить("НаименованиеРеквизита"); // Наименование реквизита для тега 1163 + ДанныеКодаТовара.Вставить("ТехническийКод", Ложь); // Признак технический кода GS1.M + + ДанныеКодаТовара.Вставить("ЕстьКриптоХвост", Ложь); // в штрихкоде присутствует криптохвост + ДанныеКодаТовара.Вставить("ПредставлениеШтрихкодаБезКриптоХвоста" , ""); + ДанныеКодаТовара.Вставить("ШтрихкодБезКриптоХвоста", ""); // код маркировки без криптохвоста + ДанныеКодаТовара.Вставить("ШтрихкодBase64БезКриптоХвоста", ""); // код маркировки без криптохвоста в формате Base64 + ДанныеКодаТовара.Вставить("КриптоХвостBase64", ""); // криптохвост в формате Base64 + + + Возврат ДанныеКодаТовара; + +КонецФункции + +Функция ТипGS1Число(); + + Возврат "N"; + +КонецФункции + +Функция ТипGS1Строка(); + + Возврат "X"; + +КонецФункции + +// Используемые идентификаторы применения по стандарту GS1. +// +Функция ИдентификаторыGS1() + + Результат = Новый Структура(); + Результат.Вставить("GTIN", "01"); + Результат.Вставить("СерийныйНомер", "21"); + Результат.Вставить("КлючПроверки" , "91"); + Результат.Вставить("КодПроверки" , "92"); + Результат.Вставить("КодТНВЭД" , "240"); + Результат.Вставить("ЦенаЕдиницыТовара", "8005"); + Возврат Результат; + +КонецФункции + +// АПК: 142-выкл, АПК: 134-выкл обратная совместимость +Процедура ДобавитьКодGS1(Коды, Код, Имя, ФиксированнаяДлина = 0, ПеременнаяДлина = 0, ТипФиксированногоЗначения = Неопределено, ТипПеременногоЗначения = Неопределено, ЕстьРазделитель = Неопределено); + + ПараметрыОписанияКода = ПараметрыОписанияКода(ФиксированнаяДлина, ПеременнаяДлина, ЕстьРазделитель); + Если ЗначениеЗаполнено(ТипФиксированногоЗначения) Тогда + ПараметрыОписанияКода.ТипФиксированногоЗначения = ТипФиксированногоЗначения; + КонецЕсли; + Если ЗначениеЗаполнено(ТипПеременногоЗначения) Тогда + ПараметрыОписанияКода.ТипПеременногоЗначения = ТипПеременногоЗначения; + КонецЕсли; + + ПоследнийСимволКода = Прав(Код, 1); + Если СтрНайти("0123456789", ПоследнийСимволКода) = 0 Тогда + + КодБезПоследнегоСимвола = Лев(Код, СтрДлина(Код) - 1); + Если ПоследнийСимволКода = "n" Тогда + + Описание = ОписаниеКода(КодБезПоследнегоСимвола, Имя, ПараметрыОписанияКода); + Описание.ЕстьПоложениеДесятичнойТочки = Истина; + Коды.Вставить(КодБезПоследнегоСимвола, Описание); + + Иначе + + Для Индекс = 0 По 9 Цикл + + НовыйКод = КодБезПоследнегоСимвола + Строка(Индекс); + Коды.Вставить(НовыйКод, ОписаниеКода(НовыйКод, Имя, ПараметрыОписанияКода)); + + КонецЦикла; + + КонецЕсли; + + Иначе + + Коды.Вставить(Код, ОписаниеКода(Код, Имя, ПараметрыОписанияКода)); + + КонецЕсли; + +КонецПроцедуры +// АПК: 142-вкл, АПК: 134-вкл + +Функция ПараметрыОписанияКода(ФиксированнаяДлина = 0, ПеременнаяДлина = 0, ЕстьРазделитель = Неопределено) + + ПараметрыОписания = Новый Структура(); + + ПараметрыОписания.Вставить("ФиксированнаяДлина", ФиксированнаяДлина); + ПараметрыОписания.Вставить("ТипФиксированногоЗначения", ТипGS1Число()); + + ПараметрыОписания.Вставить("ПеременнаяДлина", ПеременнаяДлина); + ПараметрыОписания.Вставить("ТипПеременногоЗначения", ТипGS1Число()); + Если ПеременнаяДлина > 0 Тогда + ПараметрыОписания.Вставить("ЕстьРазделитель", Ложь); + Иначе + ПараметрыОписания.Вставить("ЕстьРазделитель", ЗначениеЗаполнено(ЕстьРазделитель)); + КонецЕсли; + + Возврат ПараметрыОписания; + +КонецФункции + +Функция ОписаниеКода(Код, Имя, Параметры); + + ОписаниеКода = Новый Структура; + ОписаниеКода.Вставить("Код", Код); + ОписаниеКода.Вставить("Имя", Имя); + + ОписаниеКода.Вставить("ФиксированнаяДлина", Параметры.ФиксированнаяДлина); + Если Параметры.ФиксированнаяДлина > 0 Тогда + ОписаниеКода.Вставить("ТипФиксированногоЗначения", Параметры.ТипФиксированногоЗначения); + КонецЕсли; + + ОписаниеКода.Вставить("ПеременнаяДлина", Параметры.ПеременнаяДлина); + Если Параметры.ПеременнаяДлина > 0 Тогда + ОписаниеКода.Вставить("ТипПеременногоЗначения", Параметры.ТипПеременногоЗначения); + КонецЕсли; + ОписаниеКода.Вставить("ЕстьРазделитель", ?(Параметры.ПеременнаяДлина > 0, Истина, Параметры.ЕстьРазделитель)); + ОписаниеКода.Вставить("ЕстьПоложениеДесятичнойТочки", Ложь); + + Возврат ОписаниеКода; + +КонецФункции + +// Проверяет, содержит ли строка только цифры. +// +// Параметры: +// СтрокаПроверки - Строка - проверяемая строка. +// +// Возвращаемое значение: +// Булево - Истина - Строка содержит только цифры или пустая, Ложь - строка содержит иные символы. +// +Функция ТолькоЦифрыВСтроке(Знач СтрокаПроверки) + + Если СтрДлина(СтрокаПроверки) = 0 Тогда + Возврат Истина; + КонецЕсли; + + Для Индекс = 1 По СтрДлина(СтрокаПроверки) Цикл + КодСимвола = КодСимвола(Сред(СтрокаПроверки, Индекс, 1)); + Если (КодСимвола < 48) Или (КодСимвола > 57) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Формирует структуру параметров проверки строки. +// +// Параметры: +// ДопустимыЛатПрописные - Булево +// ДопустимыЛатСтрочные - Булево +// ДопустимыЦифры - Булево +// +// Возвращаемое значение: +// Структура: +// * ДопустимыЛатПрописные - Булево +// * ДопустимыЛатСтрочные - Булево +// * ДопустимыЦифры - Булево +// * ДопустимыеСимволы - Строка +// +Функция ПараметрыПроверкиСтроки(ДопустимыЛатПрописные = Ложь, ДопустимыЛатСтрочные = Ложь, ДопустимыЦифры = Ложь) + + ПараметрыПроверкиСтроки = Новый Структура(); + ПараметрыПроверкиСтроки.Вставить("ДопустимыЛатПрописные", ДопустимыЛатПрописные); + ПараметрыПроверкиСтроки.Вставить("ДопустимыЛатСтрочные", ДопустимыЛатСтрочные); + ПараметрыПроверкиСтроки.Вставить("ДопустимыЦифры", ДопустимыЦифры); + ПараметрыПроверкиСтроки.Вставить("ДопустимыеСимволы",""); + + Возврат ПараметрыПроверкиСтроки; + +КонецФункции + +// Проверяет, содержит ли строка символы по условию. +// +// Параметры: +// СтрокаПроверки - Строка - проверяемая строка. +// ПараметрыПроверки - Структура: +// * ДопустимыЛатПрописные - Булево +// * ДопустимыЛатСтрочные - Булево +// * ДопустимыЦифры - Булево +// * ДопустимыеСимволы - Строка +// +// Возвращаемое значение: +// Булево - Истина - Строка содержит только латинские (или допустимые) символы, иначе строка содержит иные символы. +// +Функция ПроверкаСтроки(Знач СтрокаПроверки, ПараметрыПроверки) + + КодыДопустимыхСимволов = Новый Массив; + + Для Индекс = 1 По СтрДлина(ПараметрыПроверки.ДопустимыеСимволы) Цикл + КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ПараметрыПроверки.ДопустимыеСимволы, Индекс, 1))); + КонецЦикла; + + Для Индекс = 1 По СтрДлина(СтрокаПроверки) Цикл + КодСимвола = КодСимвола(Сред(СтрокаПроверки, Индекс, 1)); + ЭтоЛатПрописная = ?(ПараметрыПроверки.ДопустимыЛатПрописные,(КодСимвола > 64) И (КодСимвола < 91), Ложь); + ЭтоЛатСтрочная = ?(ПараметрыПроверки.ДопустимыЛатСтрочные,(КодСимвола > 96) И (КодСимвола < 123), Ложь); + ЭтоЦифра = ?(ПараметрыПроверки.ДопустимыЦифры, (КодСимвола > 47) И (КодСимвола < 58), Ложь); + Если НЕ (ЭтоЛатПрописная Или ЭтоЛатСтрочная Или ЭтоЦифра Или КодыДопустимыхСимволов.Найти(КодСимвола) <> Неопределено) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Префикс кодирования реквизита. +// +// Параметры: +// ТипыИдентификаторовТовараККТ - ПеречислениеСсылка.ТипыИдентификаторовТовараККТ - Типы идентификаторов товара ККТ +// +// Возвращаемое значение: +// Число - Префикс кодирования реквизита +// +Функция ПрефиксКодированияРеквизита(Знач ТипыИдентификаторовТовараККТ) ; + + Если ТипыИдентификаторовТовараККТ = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеEAN8") Тогда + Результат = 17672; // 45h 08h - Код товара в формате EAN-8, UPC-E. + ИначеЕсли ТипыИдентификаторовТовараККТ = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеEAN13") Тогда + Результат = 17677; // 45h 0Dh - Код товара в формате EAN-13, UPC-A. + ИначеЕсли ТипыИдентификаторовТовараККТ = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеITF14") Тогда + Результат = 18702; // 49h 0Eh - Код товара в формате EAN-13, UPC-A. + ИначеЕсли ТипыИдентификаторовТовараККТ = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1") Тогда + Результат = 17485; // 44h 4Dh - Код товара в формате GS1 Data Matrix или Data Matrix маркировки. + ИначеЕсли ТипыИдентификаторовТовараККТ = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.ИзделияИзНатуральногоМеха") Тогда + Результат = 21062; // 52h 46h - Код товара средства идентификации мехового изделия. + ИначеЕсли ТипыИдентификаторовТовараККТ = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС2") Тогда + Результат = 50452; // C5h 14h - Код товара в кодировке ЕГАИС 2.0 в формате PDF417. + ИначеЕсли ТипыИдентификаторовТовараККТ = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС3") Тогда + Результат = 50462; // C5h 1Eh - Код товара в кодировке ЕГАИС 3.0 в формате Data Matrix. + Иначе + Результат = 0; // 00h 00h - Код товара, который не распознан. + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура СформироватьДвоичныеДанныеДляЧисла(ДанныеМаркировки, Знач ЗначениеЧисла = Неопределено, Знач ЗначениеСтроки = Неопределено) + + Префикс = ПрефиксКодированияРеквизита(ДанныеМаркировки.ТипИдентификатораТовара); + + Буфер = Новый БуферДвоичныхДанных(8); + Буфер.ЗаписатьЦелое64(0, Число(ЗначениеЧисла), ПорядокБайтов.BigEndian); + Буфер.ЗаписатьЦелое16(0, Префикс, ПорядокБайтов.BigEndian); + Если Не ПустаяСтрока(ЗначениеСтроки) Тогда + Буфер = Буфер.Соединить(ПолучитьБуферДвоичныхДанныхИзСтроки(ЗначениеСтроки)); + КонецЕсли; + ДанныеМаркировки.РеквизитКодаТовараHEX = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Буфер); + ДанныеМаркировки.РеквизитКодаТовара = Base64Строка(ДанныеМаркировки.РеквизитКодаТовараHEX); + +КонецПроцедуры + +Процедура СформироватьДвоичныеДанныеДляСтроки(ДанныеМаркировки, Знач ЗначениеСтроки = Неопределено) + + Префикс = ПрефиксКодированияРеквизита(ДанныеМаркировки.ТипИдентификатораТовара); + + ДлинаСтроки = СтрДлина(ЗначениеСтроки); + Позиция = 0; + РазмерБуфера = 2 + ДлинаСтроки; + Буфер = Новый БуферДвоичныхДанных(РазмерБуфера); + Буфер.ЗаписатьЦелое16(Позиция, Префикс, ПорядокБайтов.BigEndian); + Позиция = Позиция + 2; + ИндексСимвола = 1; + Пока ИндексСимвола <= ДлинаСтроки Цикл + ЗначКодСимвола = КодСимвола(ЗначениеСтроки, ИндексСимвола); + Если ЗначКодСимвола < 256 Тогда + Буфер.Установить(Позиция-1 + ИндексСимвола, Число(ЗначКодСимвола)); + КонецЕсли; + ИндексСимвола = ИндексСимвола + 1; + КонецЦикла; + ДанныеМаркировки.РеквизитКодаТовараHEX = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Буфер); + ДанныеМаркировки.РеквизитКодаТовара = Base64Строка(ДанныеМаркировки.РеквизитКодаТовараHEX); + +КонецПроцедуры + +Процедура СформироватьEAN(ДанныеМаркировки, Знач GTIN) + + ДанныеМаркировки.GTIN = GTIN; + + Пока СтрДлина(ДанныеМаркировки.GTIN) < 14 Цикл + ДанныеМаркировки.GTIN = "0" + ДанныеМаркировки.GTIN + КонецЦикла; + + // Пытаем получить торговый штрихкод EAN8 или EAN13 из GTIN. + ВремGTIN = GTIN; + Если СтрДлина(ВремGTIN) > 13 Тогда + Пока Лев(ВремGTIN, 1) = "0" И СтрДлина(ВремGTIN) > 13 Цикл + ВремGTIN = Сред(ВремGTIN, 2); + КонецЦикла; + КонецЕсли; + Если СтрДлина(ВремGTIN) = 13 И Лев(ВремGTIN, 5) = "00000" Тогда + ВремGTIN = Сред(ВремGTIN, 6); + КонецЕсли; + Если СтрДлина(ВремGTIN) > 8 И СтрДлина(ВремGTIN) < 13 Тогда + Пока Лев(ВремGTIN, 1) = "0" И СтрДлина(ВремGTIN) > 8 Цикл + ВремGTIN = Сред(ВремGTIN, 2); + КонецЦикла; + КонецЕсли; + + ДанныеМаркировки.EAN = ВремGTIN; + +КонецПроцедуры + +Функция КодВФорматеDataMatrix40БезGS(ШтриховойКодТовара, ДанныеКодаТовара) + + ДлинаШтрихкода = СтрДлина(ШтриховойКодТовара); + Если ДлинаШтрихкода <> 41 + И ДлинаШтрихкода <> 52 Тогда + Возврат Ложь; + КонецЕсли; + + ПараметрыПроверкиСтроки = ПараметрыПроверкиСтроки(Истина, Истина, Истина); + ПараметрыПроверкиСтроки.ДопустимыеСимволы = "«!”""%&’'()*+-.,/_:;=<>?»"; + Если Не ПроверкаСтроки(ШтриховойКодТовара, ПараметрыПроверкиСтроки) Тогда + Возврат Ложь; + КонецЕсли; + + Если Лев(ШтриховойКодТовара, 2) <> "01" Тогда + Возврат Ложь; + КонецЕсли; + + GTIN = Сред(ШтриховойКодТовара, 3, 14); + Если Сред(ШтриховойКодТовара, 17, 2) <> "21" Тогда + Возврат Ложь; + КонецЕсли; + СерийныйНомер = Сред(ШтриховойКодТовара, 19, 7); // Код идентификации упаковки табачной продукции. + Если Сред(ШтриховойКодТовара, 26, 4) <> "8005" Тогда + Возврат Ложь; + КонецЕсли; + МРЦ = Сред(ШтриховойКодТовара, 30, 6); // ЦРЦ. + + Если ДлинаШтрихкода = 52 И Сред(ШтриховойКодТовара, 42, 3) = "240" Тогда + КодТНВЭД = Сред(ШтриховойКодТовара, 45, 8); // КодТНВЭД. + Иначе + КодТНВЭД = ""; + КонецЕсли; + + Если ТолькоЦифрыВСтроке(GTIN) И МенеджерОборудованияКлиентСервер.РассчитатьКонтрольныйСимволGTIN14(GTIN) = Прав(GTIN, 1) Тогда + + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1"); + ДанныеКодаТовара.СерийныйНомер = СерийныйНомер; + СформироватьEAN(ДанныеКодаТовара, GTIN); + // Последующие 11 символов считанной последовательности формируются по правилам интерпретации ASCII в hex + ЗначениеСтроки = СерийныйНомер + МРЦ; + Пока СтрДлина(ЗначениеСтроки) < 13 Цикл + ЗначениеСтроки = ЗначениеСтроки + Символ(32); // Дополняем знаками «20h» в конце (пробелами справа) до 13 байт + КонецЦикла; + СформироватьДвоичныеДанныеДляЧисла(ДанныеКодаТовара, GTIN, ЗначениеСтроки); + ДанныеКодаТовара.Разобран = Истина; + ДанныеКодаТовара.ИдентифицируетЭкземпляр = Истина; + ДанныеКодаТовара.ПотребительскаяУпаковкаТабачнойПродукции = Истина; + ДанныеКодаТовара.НаименованиеРеквизита = "KMK"; + ДанныеКодаТовара.ПредставлениеШтрихкода = ШтриховойКодТовара; + ДанныеКодаТовара.ПредставлениеШтрихкодаБезКриптоХвоста = "01"+GTIN + "21"+СерийныйНомер + "8005" + МРЦ; + Если Не ПустаяСтрока(КодТНВЭД) Тогда + ДанныеКодаТовара.ПредставлениеШтрихкодаБезКриптоХвоста = ДанныеКодаТовара.ПредставлениеШтрихкодаБезКриптоХвоста + "240" + КодТНВЭД; + КонецЕсли; + Возврат Истина; + + КонецЕсли; + Возврат Ложь; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияМаркировкаПовтИсп.xml b/CommonModules/МенеджерОборудованияМаркировкаПовтИсп.xml new file mode 100644 index 0000000..3cf490a --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировкаПовтИсп.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияМаркировкаПовтИсп + + + ru + Менеджер оборудования маркировка повт исп + + + + false + false + true + true + true + false + false + DuringSession + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияМаркировкаПовтИсп/Ext/Module.bsl b/CommonModules/МенеджерОборудованияМаркировкаПовтИсп/Ext/Module.bsl new file mode 100644 index 0000000..a90fb46 --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировкаПовтИсп/Ext/Module.bsl @@ -0,0 +1,14 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Коды GS1. +// +// Возвращаемое значение: +// Соответствие из Строка - Коды GS1 +Функция КодыGS1Служебный() Экспорт + + Возврат МенеджерОборудованияМаркировкаКлиентСервер.КодыGS1Служебный(); + +КонецФункции + +#КонецОбласти + diff --git a/CommonModules/МенеджерОборудованияПовтИсп.xml b/CommonModules/МенеджерОборудованияПовтИсп.xml new file mode 100644 index 0000000..1e51346 --- /dev/null +++ b/CommonModules/МенеджерОборудованияПовтИсп.xml @@ -0,0 +1,23 @@ + + + + + МенеджерОборудованияПовтИсп + + + ru + Менеджер оборудования повт исп + + + Серверные процедуры и функции общего назначения + false + false + true + true + true + false + false + DuringSession + + + \ No newline at end of file diff --git a/CommonModules/МенеджерОборудованияПовтИсп/Ext/Module.bsl b/CommonModules/МенеджерОборудованияПовтИсп/Ext/Module.bsl new file mode 100644 index 0000000..6e46466 --- /dev/null +++ b/CommonModules/МенеджерОборудованияПовтИсп/Ext/Module.bsl @@ -0,0 +1,173 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +Функция СодержимоеОбщегоМакета(Знач ИмяМакета) Экспорт + + СодержимоеМакета = ПолучитьОбщийМакет(ИмяМакета).ПолучитьТекст(); + Возврат СодержимоеМакета; + +КонецФункции + +Функция СовместимостьВнешнейКомпонентыИзФайла(Знач ИмяМакета) Экспорт + + ВремИмяМакета = СтрРазделить(ИмяМакета,".", Ложь); + ВремИмяМакета = ВремИмяМакета[ВремИмяМакета.ВГраница()]; + ДвоичныеДанные = ПолучитьОбщийМакет(ВремИмяМакета); + + Результат = ВнешниеКомпонентыБПО.ИнформацияОКомпонентеИзФайла(ДвоичныеДанные, Ложь); + Если Результат.Разобрано Тогда + Возврат Результат.Реквизиты; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +Функция ПоставляемыеДрайверы() Экспорт + + МодулиОбновления = Новый Массив(); + Если ОбщегоНазначенияБПО.ИспользуетсяУстройстваВвода() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеУстройстваВвода")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройства")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеПлатежныеСистемы")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяДисплеиПокупателя() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеДисплеиПокупателя")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяВесовоеОборудование() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеВесовоеОборудование")); + КонецЕсли; + ДрайверыОборудования = МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования(); + Для Каждого МодульОбновления Из МодулиОбновления Цикл + МодульОбновления.ОбновитьПоставляемыеДрайвера(ДрайверыОборудования); + КонецЦикла; + + Возврат ДрайверыОборудования; + +КонецФункции + +Функция ИдентификаторыДрайверов() Экспорт + + ДрайверыОборудования = ПоставляемыеДрайверы(); + + ДрайверыОборудования.Свернуть("ИдентификаторОбъекта, СнятСПоддержки"); + Результат = Новый Массив(); + Для каждого Элемент Из ДрайверыОборудования Цикл + Если Не Элемент.СнятСПоддержки Тогда + Результат.Добавить(Элемент.ИдентификаторОбъекта); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПараметрыТипыОборудования() Экспорт + + Результат = Новый Структура(); + ДоступныеТипы = ДоступныеТипыОборудования(Истина); + Для каждого Значение Из ДоступныеТипы Цикл + + ИмяЗначения = ОбщегоНазначенияБПО.ИмяЗначенияПеречисления(Значение); + Результат.Вставить(ИмяЗначения, Ложь); + + КонецЦикла; + + // Дополнение типов оборудования + Результат.Вставить("ФискальныйРегистратор", Ложь); + + Возврат Результат; + +КонецФункции + +// Получить соответствие типов оборудования +// +// Возвращаемое значение: +// Соответствие - +// +Функция СоответствиеТиповОборудования() Экспорт + + Соответствие = Новый Соответствие(); + + ДоступныеТипы = ДоступныеТипыОборудования(Истина); + Для каждого Значение Из ДоступныеТипы Цикл + + ИмяЗначения = ОбщегоНазначенияБПО.ИмяЗначенияПеречисления(Значение); + Соответствие.Вставить(ИмяЗначения, Значение); + + КонецЦикла; + + // Russian alphabet. Не локализовывать + Соответствие.Вставить("УстройствоВвода" , Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода); //@NON-NLS-1 @NON-NLS-2 + + // English alphabet. + Соответствие.Вставить("BarcodeScanner" , Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("CardReader" , Перечисления.ТипыПодключаемогоОборудования.СчитывательМагнитныхКарт); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("KKT" , Перечисления.ТипыПодключаемогоОборудования.ККТ); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("FiscalRegistrar" , Перечисления.ТипыПодключаемогоОборудования.ФискальныйРегистратор); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("ReceiptPrinter" , Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("CustomerDisplay" , Перечисления.ТипыПодключаемогоОборудования.ДисплейПокупателя); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("DataCollectionTerminal", Перечисления.ТипыПодключаемогоОборудования.ТерминалСбораДанных); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("POSTerminal" , Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("WeighingScales" , Перечисления.ТипыПодключаемогоОборудования.ЭлектронныеВесы); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("LabelPrintingScale" , Перечисления.ТипыПодключаемогоОборудования.ВесыСПечатьюЭтикеток); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("LabelPrinter" , Перечисления.ТипыПодключаемогоОборудования.ПринтерЭтикеток); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("RFIDReader" , Перечисления.ТипыПодключаемогоОборудования.СчитывательRFID); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("Recognizer" , Перечисления.ТипыПодключаемогоОборудования.УстройствоРаспознавания); //@NON-NLS-1 @NON-NLS-2 + + Возврат Соответствие; + +КонецФункции + +// Возвращает список доступных типов оборудования. +// +// Параметры: +// ВключаяНеиспользуемые - Булево - по умолчанию Ложь, добавить неиспользуемые типы, для совместимости +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования - Массив доступных типов подключаемого оборудования в конфигурации. +// +Функция ДоступныеТипыОборудования(ВключаяНеиспользуемые = Ложь) Экспорт + + СписокТиповОборудования = Новый Массив; + СтандартнаяОбработка = Истина; + + МенеджерОборудованияВызовСервераПереопределяемый.ДоступныеТипыОборудования(СписокТиповОборудования, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + СписокТиповОборудования.Очистить(); + Если ОбщегоНазначенияБПО.ИспользуетсяУстройстваВвода() Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ККТ); + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков); + Если ВключаяНеиспользуемые Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ФискальныйРегистратор); + КонецЕсли; + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяДисплеиПокупателя() Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ДисплейПокупателя); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы() Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяВесовоеОборудование() Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ЭлектронныеВесы); + КонецЕсли; + КонецЕсли; + + Возврат СписокТиповОборудования; + +КонецФункции + + +#КонецОбласти + +#КонецЕсли + diff --git a/CommonModules/ОбновлениеИнформационнойБазыБПО.xml b/CommonModules/ОбновлениеИнформационнойБазыБПО.xml new file mode 100644 index 0000000..04eae8e --- /dev/null +++ b/CommonModules/ОбновлениеИнформационнойБазыБПО.xml @@ -0,0 +1,23 @@ + + + + + ОбновлениеИнформационнойБазыБПО + + + ru + Обновление информационной базы БПО + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОбновлениеИнформационнойБазыБПО/Ext/Module.bsl b/CommonModules/ОбновлениеИнформационнойБазыБПО/Ext/Module.bsl new file mode 100644 index 0000000..185bb2b --- /dev/null +++ b/CommonModules/ОбновлениеИнформационнойБазыБПО/Ext/Module.bsl @@ -0,0 +1,407 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// Сведения о библиотеке (или конфигурации). + +#Область ПрограммныйИнтерфейс + +// Заполняет основные сведения о библиотеке или основной конфигурации. +// Библиотека, имя которой имя совпадает с именем конфигурации в метаданных, определяется как основная конфигурация. +// +// Параметры: +// Описание - Структура - сведения о библиотеке: +// +// * Имя - Строка - имя библиотеки, например, "СтандартныеПодсистемы". +// * Версия - Строка - версия в формате из 4-х цифр, например, "2.1.3.1". +// +// * ТребуемыеПодсистемы - Массив - имена других библиотек (Строка), от которых зависит данная библиотека. +// Обработчики обновления таких библиотек должны быть вызваны ранее +// обработчиков обновления данной библиотеки. +// При циклических зависимостях или, напротив, отсутствии каких-либо зависимостей, +// порядок вызова обработчиков обновления определяется порядком добавления модулей +// в процедуре ПриДобавленииПодсистем общего модуля +// ПодсистемыКонфигурацииПереопределяемый. +// +Процедура ПриДобавленииПодсистемы(Описание) Экспорт + + Описание.Имя = "БиблиотекаПодключаемогоОборудования"; + Описание.Версия = МенеджерОборудования.ВерсияБиблиотеки(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики обновления информационной базы. + +// Добавляет в список процедуры-обработчики обновления данных ИБ +// для всех поддерживаемых версий библиотеки или конфигурации. +// Вызывается перед началом обновления данных ИБ для построения плана обновления. +// +// Параметры: +// Обработчики - ТаблицаЗначений - описание полей, см. в процедуре. +// ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления. +// +// Пример: +// Обработчик = Обработчики.Добавить(); +// Обработчик.Версия = "1.1.0.0"; +// Обработчик.Процедура = "ОбновлениеИБ.ПерейтиНаВерсию_1_1_0_0"; +// Обработчик.РежимВыполнения = "Монопольно". +// +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.ОбновитьПоставляемыеДрайвера"; + Обработчик.Комментарий = НСтр("ru = 'Обновление поставляемых драйверов подключаемого оборудования.'"); + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = МенеджерОборудования.ВерсияБиблиотеки(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.ОбновитьПоставляемыеДрайвера"; + Обработчик.Комментарий = НСтр("ru = 'Обновление поставляемых драйверов подключаемого оборудования.'"); + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = МенеджерОборудования.ВерсияБиблиотеки(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.ОбновитьПодключаемоеОборудование"; + Обработчик.Комментарий = НСтр("ru = 'Обновление оборудования ККМ-офлайн.'"); + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.ОбновитьШаблоныЭтикетокИЦенников"; + Обработчик.Комментарий = НСтр("ru = 'Создание предопределенных шаблонов печати.'"); + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.2.3.4"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "РегистрыСведений.ЗначенияЕМРЦ.ЗаполнитьЗначенияРегистраЕМРЦ"; + Обработчик.Комментарий = НСтр("ru = 'Создание предопределенных шаблонов печати.'"); + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.6.1"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.ОбновитьПараметрыРегистрацииОборудования"; + Обработчик.Комментарий = НСтр("ru = 'Обработка параметров регистрации подключаемого оборудования.'"); + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.6.6"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.ОбновитьМакетыЭтикеток"; + Обработчик.Комментарий = НСтр("ru = 'Обновление макетов этикеток и ценников на новый формат.'"); + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.8.1"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.УстановитьСрокХраненияОпераций"; + Обработчик.Комментарий = НСтр("ru = 'Установка срока хранения операций.'"); + + +КонецПроцедуры + +// Вызывается перед процедурами-обработчиками обновления данных ИБ. +// +Процедура ПередОбновлениемИнформационнойБазы() Экспорт + +КонецПроцедуры + +// Вызывается после завершения обновления данных ИБ. +// +// Параметры: +// ПредыдущаяВерсия - Строка - версия до обновления. "0.0.0.0" для "пустой" ИБ. +// ТекущаяВерсия - Строка - версия после обновления. +// ВыполненныеОбработчики - ДеревоЗначений - список выполненных процедур-обработчиков обновления, +// сгруппированных по номеру версии. +// ВыводитьОписаниеОбновлений - Булево - если установить Истина, то будет выведена форма +// с описанием обновлений. По умолчанию, Истина. +// Возвращаемое значение. +// МонопольныйРежим - Булево - Истина, если обновление выполнялось в монопольном режиме. +// +// Пример: +// // Пример обхода выполненных обработчиков обновления: +// Для Каждого Версия Из ВыполненныеОбработчики.Строки Цикл +// +// Если Версия.Версия = "*" Тогда +// // Обработчик, который может выполнятся при каждой смене версии. +// Иначе +// // Обработчик, который выполняется для определенной версии. +// КонецЕсли; +// +// Для Каждого Обработчик Из Версия.Строки Цикл +// ... +// КонецЦикла; +// +// КонецЦикла; +// +Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсия, Знач ТекущаяВерсия, + Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт + + +КонецПроцедуры + +// Вызывается при подготовке табличного документа с описанием изменений в программе. +// +// Параметры: +// Макет - ТабличныйДокумент - описание обновления всех библиотек и конфигурации. +// Макет можно дополнить или заменить. +// См. также общий макет ОписаниеИзмененийСистемы. +// +Процедура ПриПодготовкеМакетаОписанияОбновлений(Знач Макет) Экспорт + +КонецПроцедуры + +// Позволяет переопределить режим обновления данных информационной базы. +// Для использования в редких (нештатных) случаях перехода, не предусмотренных в +// стандартной процедуре определения режима обновления. +// +// Параметры: +// РежимОбновленияДанных - Строка - в обработчике можно присвоить одно из значений: +// "НачальноеЗаполнение" - если это первый запуск пустой базы (области данных); +// "ОбновлениеВерсии" - если выполняется первый запуск после обновление конфигурации базы данных; +// "ПереходСДругойПрограммы" - если выполняется первый запуск после обновление конфигурации базы данных, +// в которой изменилось имя основной конфигурации. +// +// СтандартнаяОбработка - Булево - если присвоить Ложь, то стандартная процедура +// определения режима обновления не выполняется, +// а используется значение РежимОбновленияДанных. +// +Процедура ПриОпределенииРежимаОбновленияДанных(РежимОбновленияДанных, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Добавляет в список процедуры-обработчики перехода с другой программы (с другим именем конфигурации). +// Например, для перехода между разными, но родственными конфигурациями: базовая -> проф -> корп. +// Вызывается перед началом обновления данных ИБ. +// +// Параметры: +// Обработчики - ТаблицаЗначений - с колонками: +// * ПредыдущееИмяКонфигурации - Строка - имя конфигурации, с которой выполняется переход; +// или "*", если нужно выполнять при переходе с любой конфигурации. +// * Процедура - Строка - полное имя процедуры-обработчика перехода с программы ПредыдущееИмяКонфигурации. +// Например, "ОбновлениеИнформационнойБазыУПП.ЗаполнитьУчетнуюПолитику" +// Обязательно должна быть экспортной. +// +// Пример: +// // Пример добавления процедуры-обработчика в список: +// Обработчик = Обработчики.Добавить(); +// Обработчик.ПредыдущееИмяКонфигурации = "УправлениеТорговлей"; +// Обработчик.Процедура = "ОбновлениеИнформационнойБазыУПП.ЗаполнитьУчетнуюПолитику". +// +Процедура ПриДобавленииОбработчиковПереходаСДругойПрограммы(Обработчики) Экспорт + +КонецПроцедуры + +// Вызывается после выполнения всех процедур-обработчиков перехода с другой программы (с другим именем конфигурации), +// и до начала выполнения обновления данных ИБ. +// +// Параметры: +// ПредыдущееИмяКонфигурации - Строка - имя конфигурации до перехода. +// ПредыдущаяВерсияКонфигурации - Строка - имя предыдущей конфигурации (до перехода). +// Параметры - Структура: +// * ВыполнитьОбновлениеСВерсии - Булево - по умолчанию Истина. Если установить Ложь, +// то будут выполнена только обязательные обработчики обновления (с версией "*"). +// * ВерсияКонфигурации - Строка - номер версии после перехода. +// По умолчанию, равен значению версии конфигурации в свойствах метаданных. +// Для того чтобы выполнить, например, все обработчики обновления с версии ПредыдущаяВерсияКонфигурации, +// следует установить значение параметра в ПредыдущаяВерсияКонфигурации. +// Для того чтобы выполнить вообще все обработчики обновления, установить значение "0.0.0.1". +// * ОчиститьСведенияОПредыдущейКонфигурации - Булево - по умолчанию Истина. +// Для случаев когда предыдущая конфигурация совпадает по имени с подсистемой текущей конфигурации, следует указать Ложь. +// +Процедура ПриЗавершенииПереходаСДругойПрограммы(Знач ПредыдущееИмяКонфигурации, Знач ПредыдущаяВерсияКонфигурации, Параметры) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ПроцедурыОбновления +// АПК:1327-выкл процедуры выполняются в монопольном режиме, #std490 п 2. +// АПК:1328-выкл процедуры выполняются в монопольном режиме, #std490 п 2. + +// Обновить поставляемые драйвера БПО. +// +Процедура ОбновитьПоставляемыеДрайвера(Параметры = Неопределено) Экспорт + + МенеджерОборудования.ОбновитьПоставляемыеДрайвера(); + МенеджерОборудования.ОбновитьУстановленныеДрайвера(); + +КонецПроцедуры + +// Обновить оборудование. +// +Процедура ОбновитьПодключаемоеОборудование(Параметры = Неопределено) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПодключаемоеОборудование.Ссылка КАК Ссылка, + | ПодключаемоеОборудование.ТипОборудования КАК ТипОборудования + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование"; + + РезультатЗапроса = Запрос.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + + ШаблонТекстаОшибки = НСтр("ru = 'Не удалось обработать обновление подключаемого оборудования по причине: %1'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + + Пока Выборка.Следующий() Цикл + НачатьТранзакцию(); + Попытка + ОбработатьПодключаемоеОборудование(Выборка.Ссылка); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ТекстОшибки = СтрШаблон(ШаблонТекстаОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Обновление информационной базы'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()), + ТекстОшибки); + КонецПопытки; + КонецЦикла; + + Если ОбщегоНазначенияБПО.ИспользуетсяОфлайнОборудование() Тогда + МодульМенеджерОфлайнОборудованияВызовСервераПереопределяемый = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОфлайнОборудованияВызовСервераПереопределяемый"); + МодульМенеджерОфлайнОборудованияВызовСервераПереопределяемый.ДополнительнаяОбработкаОбъектовПриПереходеНаОфлайнОборудование(); + КонецЕсли; + +КонецПроцедуры + +// Обновить шаблоны этикеток и ценников БПО. +// +Процедура ОбновитьШаблоныЭтикетокИЦенников(Параметры = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяПечатьЭтикетокИЦенников() Тогда + МодульПечатьЭтикетокИЦенниковБПО = ОбщегоНазначенияБПО.ОбщийМодуль("ПечатьЭтикетокИЦенниковБПО"); + МодульПечатьЭтикетокИЦенниковБПО.ЗаполнитьПредопределенныеЭлементы(); + КонецЕсли; + +КонецПроцедуры + +// АПК:1328-вкл +// АПК:1327-вкл + +// Обновить параметры регистрации ККМ +// +Процедура ОбновитьПараметрыРегистрацииОборудования(Параметры = Неопределено) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПодключаемоеОборудованиеПараметрыРегистрации.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПодключаемоеОборудование.ПараметрыРегистрации КАК ПодключаемоеОборудованиеПараметрыРегистрации + |ГДЕ + | ПодключаемоеОборудованиеПараметрыРегистрации.ЗначениеПараметра В (&ВозможныеЗначения) + | + |СГРУППИРОВАТЬ ПО + | ПодключаемоеОборудованиеПараметрыРегистрации.Ссылка"; + ВозможныеЗначения = Новый Массив(4); + ВозможныеЗначения.Добавить("Да"); + ВозможныеЗначения.Добавить("Нет"); + ВозможныеЗначения.Добавить("Yes"); + ВозможныеЗначения.Добавить("No"); + Запрос.УстановитьПараметр("ВозможныеЗначения", ВозможныеЗначения); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПодключаемоеОборудование"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.ИсточникДанных = Результат; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Ссылка"); + Блокировка.Заблокировать(); + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Для Каждого Строка Из Объект.ПараметрыРегистрации Цикл + Если Строка.ЗначениеПараметра = "Да" + Или Строка.ЗначениеПараметра = "Yes" Тогда + Строка.ЗначениеПараметра = XMLСтрока(Истина); + ИначеЕсли Строка.ЗначениеПараметра = "Нет" + Или Строка.ЗначениеПараметра = "No" Тогда + Строка.ЗначениеПараметра = XMLСтрока(Ложь); + КонецЕсли; + КонецЦикла; + Объект.Записать(); + + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ШаблонТекстаОшибки = НСтр("ru = 'Не удалось преобразовать параметры регистрации подключаемого оборудования по причине: + |%1'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + ТекстОшибки = СтрШаблон(ШаблонТекстаОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Обновление информационной базы'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()), + ТекстОшибки); + КонецПопытки; + + +КонецПроцедуры + +// Обновить макеты этикеток на новый формат. +// +Процедура ОбновитьМакетыЭтикеток(Параметры = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяПечатьЭтикетокИЦенников() Тогда + МодульПечатьЭтикетокИЦенниковБПО = ОбщегоНазначенияБПО.ОбщийМодуль("ПечатьЭтикетокИЦенниковБПО"); + МодульПечатьЭтикетокИЦенниковБПО.ОбновитьМакетыЭтикеток(Параметры); + КонецЕсли; + +КонецПроцедуры + +// Установить значение констант сроков хранения операций в регистрах сведений +// +Процедура УстановитьСрокХраненияОпераций(Параметры = Неопределено) Экспорт + + +КонецПроцедуры + + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// АПК:1327-выкл процедуры выполняются в монопольном режиме, #std490 п 2. +// АПК:1328-выкл процедуры выполняются в монопольном режиме, #std490 п 2. + +// Выполняет дополнительную обработку оборудования +// +// Параметры: +// СсылкаНаОборудование - СправочникСсылка.ПодключаемоеОборудование +// +Процедура ОбработатьПодключаемоеОборудование(СсылкаНаОборудование) + + МенеджерОборудованияВызовСервераПереопределяемый.ОбновитьСправочникПодключаемогоОборудования(СсылкаНаОборудование); + +КонецПроцедуры + +// АПК:1328-вкл +// АПК:1327-вкл + +#КонецОбласти diff --git a/CommonModules/ОборудованиеВесовоеОборудование.xml b/CommonModules/ОборудованиеВесовоеОборудование.xml new file mode 100644 index 0000000..d7e0d09 --- /dev/null +++ b/CommonModules/ОборудованиеВесовоеОборудование.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеВесовоеОборудование + + + ru + Оборудование весовое оборудование сервер + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеВесовоеОборудование/Ext/Module.bsl b/CommonModules/ОборудованиеВесовоеОборудование/Ext/Module.bsl new file mode 100644 index 0000000..e2d8948 --- /dev/null +++ b/CommonModules/ОборудованиеВесовоеОборудование/Ext/Module.bsl @@ -0,0 +1,298 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Добавляет в список поставляемые драйверы в составе конфигурации. +// +// Параметры: +// ДрайвераОборудования - см. МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования +// +Процедура ОбновитьПоставляемыеДрайвера(ДрайвераОборудования) Экспорт + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭлектронныеВесы; + Драйвер.ИмяДрайвера = "Драйвер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; + КонецЕсли; + + КонецЦикла; + + Возврат ПакетыДляВыгрузки; + +КонецФункции + +#КонецОбласти diff --git a/CommonModules/ОборудованиеВесовоеОборудованиеКлиент.xml b/CommonModules/ОборудованиеВесовоеОборудованиеКлиент.xml new file mode 100644 index 0000000..26ff7a1 --- /dev/null +++ b/CommonModules/ОборудованиеВесовоеОборудованиеКлиент.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеВесовоеОборудованиеКлиент + + + ru + Оборудование весовое оборудование клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеВесовоеОборудованиеКлиент/Ext/Module.bsl b/CommonModules/ОборудованиеВесовоеОборудованиеКлиент/Ext/Module.bsl new file mode 100644 index 0000000..7094725 --- /dev/null +++ b/CommonModules/ОборудованиеВесовоеОборудованиеКлиент/Ext/Module.bsl @@ -0,0 +1,257 @@ + +#Область ПрограммныйИнтерфейс + +#Область ЭлектронныеВесы + +// Получает вес с электронных весов. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолученияВесаСЭлектронныхВесов(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "GetWeight"); + КонтекстОперации.Вставить("Результат", Истина); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ЭлектронныеВесы = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьОперациюНаЭлектронныхВесахЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите электронные весы'"), + НСтр("ru='Электронные весы не подключены.'"), + НСтр("ru='Электронные весы не выбраны.'")); + Иначе + НачатьОперациюНаЭлектронныхВесахЗавершение(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +// Начать установку веса тары электронных весов. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьУстановкуВесаТарыЭлектронныхВесов(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "Calibrate"); + КонтекстОперации.Вставить("Результат", Истина); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ЭлектронныеВесы = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьОперациюНаЭлектронныхВесахЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите электронные весы'"), + НСтр("ru='Электронные весы не подключены.'"), + НСтр("ru='Электронные весы не выбраны.'")); + Иначе + НачатьОперациюНаЭлектронныхВесахЗавершение(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +#КонецОбласти + +#Область ВесыСПечатьюЭтикеток + +// Начать выгрузку данных в весы с печатью этикеток. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыгрузкуДанныеВВесыСПечатьюЭтикеток(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Истина); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "UploadGoods"); + КонтекстОперации.Вставить("Результат", Истина); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ВесыСПечатьюЭтикеток = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьОперациюНаЭлектронныхВесахЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите весы с печатью этикеток'"), + НСтр("ru='Весы с печатью этикеток не подключены.'"), + НСтр("ru='Весы с печатью этикеток не выбраны.'")); + Иначе + НачатьОперациюНаЭлектронныхВесахЗавершение(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +// Начать очистку данных в весах с печатью этикеток. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОчисткуТоваровВВесахСПечатьюЭтикеток(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "ClearBase"); + КонтекстОперации.Вставить("Результат", Истина); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ВесыСПечатьюЭтикеток = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьОперациюНаЭлектронныхВесахЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите весы с печатью этикеток'"), + НСтр("ru='Весы с печатью этикеток не подключены.'"), + НСтр("ru='Весы с печатью этикеток не выбраны.'")); + Иначе + НачатьОперациюНаЭлектронныхВесахЗавершение(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +// Начать выгрузку изображений товаров в весы с печатью этикеток. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыгрузкуИзображенийТоваровВВесыСПечатьюЭтикеток(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Истина); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "UploadProductImages"); + КонтекстОперации.Вставить("Результат", Истина); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ВесыСПечатьюЭтикеток = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьОперациюНаЭлектронныхВесахЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите весы с печатью этикеток'"), + НСтр("ru='Весы с печатью этикеток не подключены.'"), + НСтр("ru='Весы с печатью этикеток не выбраны.'")); + Иначе + НачатьОперациюНаЭлектронныхВесахЗавершение(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +// Производить выгрузку данных в весы с печатью этикеток пакетом. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыгрузкуДанныеВВесыСПечатьюЭтикетокПакетом(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "UploadGoodsPacket"); + КонтекстОперации.Вставить("Результат", Истина); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ВесыСПечатьюЭтикеток = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьОперациюНаЭлектронныхВесахЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите весы с печатью этикеток'"), + НСтр("ru='Весы с печатью этикеток не подключены.'"), + НСтр("ru='Весы с печатью этикеток не выбраны.'")); + Иначе + НачатьОперациюНаЭлектронныхВесахЗавершение(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура НачатьОперациюНаЭлектронныхВесахЗавершение(РезультатВыбора, КонтекстОперации) Экспорт + + Если РезультатВыбора.Результат Тогда + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды(КонтекстОперации.Команда, "ОборудованиеВесовоеОборудование", + КонтекстОперации.ДополнительныеПараметры, КонтекстОперации.ПодготовитьДанные, КонтекстОперации.ОбработатьДанные); + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(КонтекстОперации.ОповещениеПриЗавершении, КонтекстОперации.ИдентификаторКлиента, + РезультатВыбора.ИдентификаторУстройства, КонтекстОперации.ПараметрыОперации, ПараметрыВыполнениеКоманды); + Иначе + ВыполнитьОбработкуОповещения(КонтекстОперации.ОповещениеПриЗавершении, РезультатВыбора); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/CommonModules/ОборудованиеВесовоеОборудованиеКлиентСервер.xml b/CommonModules/ОборудованиеВесовоеОборудованиеКлиентСервер.xml new file mode 100644 index 0000000..9ca19ac --- /dev/null +++ b/CommonModules/ОборудованиеВесовоеОборудованиеКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеВесовоеОборудованиеКлиентСервер + + + ru + Оборудование весовое оборудование клиент сервер + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеВесовоеОборудованиеКлиентСервер/Ext/Module.bsl b/CommonModules/ОборудованиеВесовоеОборудованиеКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..1c029bd --- /dev/null +++ b/CommonModules/ОборудованиеВесовоеОборудованиеКлиентСервер/Ext/Module.bsl @@ -0,0 +1,96 @@ + +#Область ПрограммныйИнтерфейс + +// Заполняет структуру параметров операции на Оборудовании. +// +// Параметры: +// ВесТары - Число +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОперацииЭлектронныеВесы(ВесТары = 0) Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ВесТары", ВесТары); + Возврат Параметры; + +КонецФункции + +// Заполняет структуру параметров операции на Оборудовании. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОперацииВесыСПечатьюЭтикеток() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ТаблицаТоваров", Новый Массив()); // Массив Структур, см. ПараметрыСтрокиВыгрузкиВВесыСПечатьюЭтикеток() + Параметры.Вставить("ЧастичнаяВыгрузка", Ложь); + Возврат Параметры; + +КонецФункции + +// Заполняет структуру выгрузки товарной позиции на весы с печатью этикеток. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыСтрокиВыгрузкиВВесыСПечатьюЭтикеток() Экспорт + + ДополнительныеЦены = Новый Структура(); // Дополнительные цены + ДополнительныеЦены.Вставить("Цена1"); + ДополнительныеЦены.Вставить("Цена2"); + ДополнительныеЦены.Вставить("Цена3"); + ДополнительныеЦены.Вставить("Цена4"); + + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("PLU"); // Число,Обязательно - Индекс товара на весах. + ПараметрыСтроки.Вставить("Код"); // Число,Обязательно - Код товара который печатается на штрихкоде этикетки. + ПараметрыСтроки.Вставить("Штрихкод"); + ПараметрыСтроки.Вставить("Наименование"); // Строка,Необязательно + ПараметрыСтроки.Вставить("НаименованиеПолное"); // Строка,Необязательно + ПараметрыСтроки.Вставить("ВесовойТовар", Истина); + ПараметрыСтроки.Вставить("Цена", 0); // Число,Необязательно - Цена товара на весах за килограмм. + ПараметрыСтроки.Вставить("ОписаниеТовара"); // Строка,Необязательно - Текстовое описание товара (состав товара, список ингредиентов и пр.) + ПараметрыСтроки.Вставить("СрокХранения", 0); // Число,Необязательно - Длительность хранения/срок годности товара, в днях + ПараметрыСтроки.Вставить("ФорматЭтикетки"); // Число,Необязательно - Номер формата этикетки + ПараметрыСтроки.Вставить("КнопкаТовара"); // Число,Необязательно - Номер кнопки товара на весах + ПараметрыСтроки.Вставить("ДополнительныеЦены", ДополнительныеЦены); // Структура - Дополнительные цены + + Возврат ПараметрыСтроки; + +КонецФункции + +// Заполняет структуру параметров операции на Оборудовании. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОперацииВыгрузкиИзображенийВесыСПечатьюЭтикеток() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ТаблицаИзображений", Новый Массив()); + Возврат Параметры; + +КонецФункции + +// Заполняет структуру выгрузки изображений на весы с печатью этикеток. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыСтрокиВыгрузкиИзображенийВВесыСПечатьюЭтикеток() Экспорт + + ДополнительныеЦены = Новый Структура(); // Дополнительные цены + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("PLU"); // Число,Обязательно - Индекс товара на весах. + ПараметрыСтроки.Вставить("Код"); // Число,Обязательно - Код товара который печатается на штрихкоде этикетки. + ПараметрыСтроки.Вставить("Изображение"); + + Возврат ПараметрыСтроки; + +КонецФункции + +#КонецОбласти + diff --git a/CommonModules/ОборудованиеДисплеиПокупателя.xml b/CommonModules/ОборудованиеДисплеиПокупателя.xml new file mode 100644 index 0000000..24435c6 --- /dev/null +++ b/CommonModules/ОборудованиеДисплеиПокупателя.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеДисплеиПокупателя + + + ru + Оборудование дисплеи покупателя сервер + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеДисплеиПокупателя/Ext/Module.bsl b/CommonModules/ОборудованиеДисплеиПокупателя/Ext/Module.bsl new file mode 100644 index 0000000..909eebe --- /dev/null +++ b/CommonModules/ОборудованиеДисплеиПокупателя/Ext/Module.bsl @@ -0,0 +1,72 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Добавляет в список поставляемые драйверы в составе конфигурации. +// +// Параметры: +// ДрайвераОборудования - см. МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования +// +Процедура ОбновитьПоставляемыеДрайвера(ДрайвераОборудования) Экспорт + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ДисплейПокупателя; + Драйвер.ИмяДрайвера = "Драйвер1СДисплейПокупателя"; + Драйвер.Наименование = НСтр("ru = '1С:Дисплей покупателя'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "CustomerDisplayEx"; + Драйвер.РекомендуемоеИспользование = Истина; + + +КонецПроцедуры + +// Подготовить данные операции. +// +// Параметры: +// ПараметрыПодключения - Структура -Параметры подключения +// Команда - Строка - Команда +// ПараметрыОперации - Структура -Параметры операции +// +// Возвращаемое значение: +// Неопределено. +Функция ПодготовитьДанныеОперации(ПараметрыПодключения, Команда, ПараметрыОперации) Экспорт + + ДанныеОперации = ПараметрыОперацииДисплеиПокупателя(); + ДанныеОперации.ТекстHTML = "

No information

"; + ДанныеОперации.СтатусОперации = ПараметрыОперации.СтатусОперации; + ДанныеОперации.СтрокиТекста = ПараметрыОперации.СтрокиТекста; + + + Возврат ДанныеОперации; + +КонецФункции + +Процедура ОбработатьДанныеОперации(ПараметрыПодключения, Команда, РезультатВыполнения, ДанныеОперации) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Заполнить структуру операции +// +// Возвращаемое значение: +// Структура - Параметры операции: +// * Результат - Булево. +// * ТекстОшибки - Строка. +Функция ПараметрыОперацииДисплеиПокупателя() + + ПараметрыОперации = Новый Структура(); + ПараметрыОперации.Вставить("Результат", Истина); + ПараметрыОперации.Вставить("СтрокиТекста"); + ПараметрыОперации.Вставить("ЗначениеQRКода"); // Строка - значение QR кода + ПараметрыОперации.Вставить("КартинкаQRКода"); // Строка - строка с base64 представлением png картинки логотипа. + ПараметрыОперации.Вставить("СтатусОперации", 0); // Число - Статус: 0-Не установлены, 1-Выполнено успешно, 2-Операция не выполнена + ПараметрыОперации.Вставить("КодСтатусаРабочегоМеста"); + ПараметрыОперации.Вставить("ТекстОшибки"); + ПараметрыОперации.Вставить("ТекстHTML"); + Возврат ПараметрыОперации; + +КонецФункции + + +#КонецОбласти diff --git a/CommonModules/ОборудованиеДисплеиПокупателяКлиент.xml b/CommonModules/ОборудованиеДисплеиПокупателяКлиент.xml new file mode 100644 index 0000000..4cb7eac --- /dev/null +++ b/CommonModules/ОборудованиеДисплеиПокупателяКлиент.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеДисплеиПокупателяКлиент + + + ru + Оборудование дисплеи покупателя клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеДисплеиПокупателяКлиент/Ext/Module.bsl b/CommonModules/ОборудованиеДисплеиПокупателяКлиент/Ext/Module.bsl new file mode 100644 index 0000000..71278c4 --- /dev/null +++ b/CommonModules/ОборудованиеДисплеиПокупателяКлиент/Ext/Module.bsl @@ -0,0 +1,456 @@ + +#Область ПрограммныйИнтерфейс + +// Заполняет структуру дополнительных параметров операции на Оборудовании. +// +// Параметры: +// СтрокиТекста - Строка - строки текста для отображения. +// ЗначениеQRКода - Строка, Неопределено - Значение QRКода +// +// Возвращаемое значение: +// Структура - Параметры операции дисплей покупателя: +// * СтрокиТекста - Строка - Текстовая строка +// * ЗначениеQRКода - Строка - значение QR кода +// * КартинкаQRКода - Строка - строка с base64 представлением png картинки логотипа. +// * Сумма - Число - Сумма операции. +// * СтатусОперации - ПеречислениеСсылка.СтатусОперацииНаДисплее - Статус операции +// * СтатусРабочегоМеста - ПеречислениеСсылка.СтатусРабочегоМестаНаДисплее - Статус рабочего места +// * ЗвуковойСигнал - Булево - Звуковой сигнал. +// * ТекстHTML - Строка - строка с base64 представлением png картинки логотипа. +// * НазваниеОрганизации - Строка - Название организации +// * Операция - Строка - выполняемая операция. +// * ТипПлатежнойСистемы - ПеречислениеСсылка.ТипыПлатежнойСистемыККТ +// - Неопределено +// * НаличнаяОплата - Булево - Наличная оплата. +// * ДополнительныйТекст - Строка - Дополнительный текст. +// * Сдача - Число - Сдача по операции. +// * ГотовностьКРаботе - Булево - Готовность кассы к работе. +// * КартинкаBase64 - Строка - строка с base64 представлением png картинки логотипа. +// * КолонкиТабличнойЧасти - Массив из Структура +// * ТабличнаяЧасть - Массив из Соответствие +// * Возврат - Булево - флаг того что операция является возвратом +// * ПодвалСумма - Число - Сумма табличной части +// * ВнутренняяОперация - Булево - отображение на дисплее выполняется БПО +// +Функция ПараметрыОперацииДисплейПокупателя(СтрокиТекста = "", ЗначениеQRКода = Неопределено) Экспорт + + Результат = Новый Структура(); + Результат.Вставить("СтрокиТекста", СтрокиТекста); + Результат.Вставить("ЗначениеQRКода", ЗначениеQRКода); + Результат.Вставить("КартинкаQRКода"); + Результат.Вставить("Сумма", 0); + // Статус операции: 0-Не установлены, 1-Выполнено успешно, 2-Операция не выполнена + Результат.Вставить("СтатусОперации"); + Результат.Вставить("СтатусРабочегоМеста"); + Результат.Вставить("ЗвуковойСигнал", Ложь); + Результат.Вставить("ТекстHTML"); + + Результат.Вставить("НазваниеОрганизации"); + Результат.Вставить("Операция"); + Результат.Вставить("ТипПлатежнойСистемы"); + Результат.Вставить("НаличнаяОплата", Ложь); + Результат.Вставить("ДополнительныйТекст"); + Результат.Вставить("Сдача", 0); + Результат.Вставить("ГотовностьКРаботе"); + Результат.Вставить("КартинкаBase64"); + + Результат.Вставить("КолонкиТабличнойЧасти", Новый Массив()); + Результат.Вставить("ТабличнаяЧасть", Новый Массив()); + Результат.Вставить("ПодвалСумма", 0); + Результат.Вставить("Возврат", Ложь); + Результат.Вставить("ПодвалСкидка", 0); + Результат.Вставить("ВнутренняяОперация", Ложь); + + Результат.Вставить("Кнопки", Новый Массив()); + + Возврат Результат; + +КонецФункции + +Функция КнопкаДисплеяПокупателя(Идентификатор, Наименование = "") Экспорт + + Результат = Новый Структура(); + Результат.Вставить("Идентификатор", Идентификатор); + Результат.Вставить("Наименование", ?(ПустаяСтрока(Наименование), Идентификатор, Наименование)); + Возврат Результат; + +КонецФункции + +// Заполняет структуру параметров колонки табличной части дисплея покупателя. +// +// Параметры: +// Имя - Строка +// Заголовок - Строка +// Ширина - Число +// Выравнивание - ГоризонтальноеПоложение +// Возвращаемое значение: +// Структура -Параметры операции дисплей покупателя +// +Функция ПараметрыКолонкиТабличнойЧастиДисплеяПокупателя(Имя, Заголовок = "", Ширина = 0, Выравнивание = Неопределено) Экспорт + + Результат = Новый Структура(); + Результат.Вставить("Имя", Имя); // Строка,Обязательно - Идентификатор колонки + Результат.Вставить("Заголовок", Заголовок); // Строка,Обязательно - Представление колонки + Результат.Вставить("Ширина", Ширина); // Число,Обязательно - Ширина колонки в процентах + Результат.Вставить("Выравнивание", Выравнивание); // ГоризонтальноеПоложение + Возврат Результат; + +КонецФункции + +// Подключенные дисплеи покупателя выводят QR код. +// +// Возвращаемое значение: +// Булево +// +Функция ПодключенныеДисплеиПокупателяВыводятQRКод() Экспорт + + Результат = Ложь; + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + Если Устройство.ДисплейОтображаетQRКод Или Устройство.ДисплейОтображаетГрафику Тогда + Результат = Истина; + Прервать; + КонецЕсли; + КонецЦикла + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Подключенные дисплеи покупателя выводят HTML. +// +// Возвращаемое значение: +// Булево +// +Функция ПодключенныеДисплеиПокупателяВыводятHTML() Экспорт + + Результат = Ложь; + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + Если Устройство.ДисплейОтображаетHTML Тогда + Результат = Истина; + Прервать; + КонецЕсли; + КонецЦикла + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Начать вывод тестовых строк на подключенные дисплеи покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет выведено на все. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыводИнформацииНаДисплейПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("DisplayText", Неопределено, ДополнительныеПараметры, Ложь, Ложь); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, Устройство.Ссылка, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЦикла + КонецЕсли; + + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Начать вывод тестовых строк на подключенные дисплеи покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет выведено на все. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОтображениеИнформацииНаДисплейПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("DisplayInfo", "ОборудованиеДисплеиПокупателя", ДополнительныеПараметры, Истина, Ложь); + ПараметрыОперации.Вставить("КодСтатусаРабочегоМеста", СтатусРабочегоМестаНаДисплее(ПараметрыОперации.СтатусРабочегоМеста)); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, Устройство.Ссылка, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЦикла + КонецЕсли; + + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + + // Начать вывод QR-кода на подключенные дисплеи покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет выведено на все +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыводQRКодаНаДисплейПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("DisplayQRCode", "ОборудованиеДисплеиПокупателя", ДополнительныеПараметры, Ложь, Ложь); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + Если Устройство.ДисплейОтображаетHTML И ПараметрыОперации.ВнутренняяОперация Тогда + СтатусРабочегоМестаНаДисплее_РабочееМестоРаботает = 3; + ПараметрыОперации.Операция = "ФискальныйЧек"; + ПараметрыОперации.Вставить("КодСтатусаРабочегоМеста", СтатусРабочегоМестаНаДисплее_РабочееМестоРаботает); + ПараметрыВыполнениеКоманды.Команда = "DisplayInfo"; + ПараметрыВыполнениеКоманды.ПодготовитьДанные = Истина; + КонецЕсли; + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, Устройство.Ссылка, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЦикла + КонецЕсли; + + Иначе + Если ПараметрыОперации.ВнутренняяОперация Тогда + Устройство = МенеджерОборудованияКлиент.ПолучитьПодключенноеУстройство(ИдентификаторУстройства); + Если Устройство.ДисплейОтображаетHTML Тогда + СтатусРабочегоМестаНаДисплее_РабочееМестоРаботает = 3; + ПараметрыОперации.Операция = "ФискальныйЧек"; + ПараметрыОперации.Вставить("КодСтатусаРабочегоМеста", СтатусРабочегоМестаНаДисплее_РабочееМестоРаботает); + ПараметрыВыполнениеКоманды.Команда = "DisplayInfo"; + ПараметрыВыполнениеКоманды.ПодготовитьДанные = Истина; + КонецЕсли; + КонецЕсли; + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Начать вывод HTML на подключенные дисплеи покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет выведено на все +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыводHTMLНаДисплейПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("OutputHTML", Неопределено, ДополнительныеПараметры, Ложь, Ложь); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + Если Устройство.ДисплейОтображаетHTML Тогда + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, Устройство.Ссылка, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + КонецЦикла + КонецЕсли; + + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Начать очистку подключенных дисплеев покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОчисткуДисплеяПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("ClearText", Неопределено, ДополнительныеПараметры, Ложь, Ложь); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, Устройство.Ссылка, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЦикла + КонецЕсли; + + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Начать отображение статус операции на подключенные дисплеи покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет выведено на все +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыводСтатусаОперацииНаДисплейПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("DisplayStatus", Неопределено, ДополнительныеПараметры, Ложь, Ложь); + ПараметрыОперации.Вставить("КодСтатусОперации", СтатусОперацииНаДисплее(ПараметрыОперации.СтатусОперации)); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + Если Устройство.ДисплейОтображаетСтатус Тогда + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, Устройство.Ссылка, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + КонецЦикла + КонецЕсли; + + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Начать отображение статуса рабочего места на подключенные дисплеи покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет выведено на все +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыводСтатусаРабочегоМестаНаДисплейПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("DisplayStatusRM", Неопределено, ДополнительныеПараметры, Ложь, Ложь); + ПараметрыОперации.Вставить("КодСтатусаРабочегоМеста", СтатусРабочегоМестаНаДисплее(ПараметрыОперации.СтатусРабочегоМеста)); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + Если Устройство.ДисплейОтображаетСостоянияРМ Тогда + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, Устройство.Ссылка, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + КонецЦикла + КонецЕсли; + + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Код статуса рабочего места на дисплее. +// +// Параметры: +// СтатусРабочегоМеста - ПеречислениеСсылка.СтатусРабочегоМестаНаДисплее - Cтатус рабочего места на дисплее +// +// Возвращаемое значение: +// Число - Код статуса. +// +Функция СтатусРабочегоМестаНаДисплее(СтатусРабочегоМеста) Экспорт + + Если СтатусРабочегоМеста = Неопределено Тогда + КодСтатуса = 0 + Иначе + СтатусыРабочегоМеста = Новый Соответствие(); + СтатусыРабочегоМеста.Вставить(ПредопределенноеЗначение("Перечисление.СтатусРабочегоМестаНаДисплее.НеУстановлен") , 0); + СтатусыРабочегоМеста.Вставить(ПредопределенноеЗначение("Перечисление.СтатусРабочегоМестаНаДисплее.СервисныйРежим") , 1); + СтатусыРабочегоМеста.Вставить(ПредопределенноеЗначение("Перечисление.СтатусРабочегоМестаНаДисплее.РабочееМестоСвободно"), 2); + СтатусыРабочегоМеста.Вставить(ПредопределенноеЗначение("Перечисление.СтатусРабочегоМестаНаДисплее.РабочееМестоРаботает"), 3); + СтатусыРабочегоМеста.Вставить(ПредопределенноеЗначение("Перечисление.СтатусРабочегоМестаНаДисплее.ОшибкаНаРабочемМесте"), 4); + КодСтатуса = СтатусыРабочегоМеста.Получить(СтатусРабочегоМеста); + КонецЕсли; + + Возврат КодСтатуса; + +КонецФункции + +// Код статуса операции на дисплее. +// +// Параметры: +// СтатусОперации - ПеречислениеСсылка.СтатусОперацииНаДисплее - Cтатус операции на дисплее +// +// Возвращаемое значение: +// Число - Код статуса. +// +Функция СтатусОперацииНаДисплее(СтатусОперации) Экспорт + + Если СтатусОперации = Неопределено Тогда + КодСтатуса = 0 + Иначе + СтатусыОперации = Новый Соответствие(); + СтатусыОперации.Вставить(ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.НеУстановлен") , 0); + СтатусыОперации.Вставить(ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.ВыполненоУспешно") , 1); + СтатусыОперации.Вставить(ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.ОперацияНеВыполнена"), 2); + СтатусыОперации.Вставить(ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.ОжиданиеОперации") , 0); + СтатусыОперации.Вставить(ПредопределенноеЗначение("Перечисление.СтатусОперацииНаДисплее.Информация") , 0); + КодСтатуса = СтатусыОперации.Получить(СтатусОперации); + КонецЕсли; + + Возврат КодСтатуса; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ОборудованиеПлатежныеСистемы.xml b/CommonModules/ОборудованиеПлатежныеСистемы.xml new file mode 100644 index 0000000..5369ee2 --- /dev/null +++ b/CommonModules/ОборудованиеПлатежныеСистемы.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеПлатежныеСистемы + + + ru + Оборудование платежные системы сервер + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеПлатежныеСистемы/Ext/Module.bsl b/CommonModules/ОборудованиеПлатежныеСистемы/Ext/Module.bsl new file mode 100644 index 0000000..439b126 --- /dev/null +++ b/CommonModules/ОборудованиеПлатежныеСистемы/Ext/Module.bsl @@ -0,0 +1,587 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Добавляет в список поставляемые драйверы в составе конфигурации. +// +// Параметры: +// ДрайвераОборудования - см. МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования +// +Процедура ОбновитьПоставляемыеДрайвера(ДрайвераОборудования) Экспорт + + // ++ Локализация + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал; + Драйвер.ИмяДрайвера = "Драйвер1СЭквайринговыеТерминалыСбербанк"; + Драйвер.Наименование = НСтр("ru = '1С:Эквайринговые терминалы Сбербанк'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "SberAcquiringTerminal"; + Драйвер.СнятСПоддержки = Истина; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал; + Драйвер.ИмяДрайвера = "Драйвер1СЭквайринговыеТерминалыСбербанк2х"; + Драйвер.Наименование = НСтр("ru = '1С:Эквайринговые терминалы Сбербанк 2.Х'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "SberAcquiringTerminal2"; + Драйвер.РекомендуемоеИспользование = Истина; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал; + Драйвер.ИмяДрайвера = "ДрайверАЗУРПлатежнаяСистема"; + Драйвер.Наименование = НСтр("ru = 'АЗУР:Платежная система'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "com_azurpos_payment_AzurPosPayment"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал; + Драйвер.ИмяДрайвера = "ДрайверАТОЛДрайверПлатежногоЯдраПэй"; + Драйвер.Наименование = НСтр("ru = 'АТОЛ:Драйвер платежного ядра АТОЛ Пэй'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "AtolPayAndroidDriver"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал; + Драйвер.ИмяДрайвера = "ДрайверUCSEFTPOSЭквайринговыеТерминалы"; + Драйвер.Наименование = НСтр("ru = 'UCS-AT:Эквайринговые терминалы'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "UcsAT"; + Драйвер.РекомендуемоеИспользование = Истина; + + // -- Локализация + +КонецПроцедуры + +// Подготовить данные операции. +// +// Параметры: +// ПараметрыПодключения - Структура -Параметры подключения +// Команда - Строка - Команда +// ПараметрыОперации - Структура -Параметры операции +// +// Возвращаемое значение: +// Неопределено. +Функция ПодготовитьДанныеОперации(ПараметрыПодключения, Команда, ПараметрыОперации) Экспорт + + ПараметрыОперации.Вставить("Результат", Истина); + ПараметрыОперации.Вставить("ТекстОшибки"); + + Если Команда = "PayElectronicCertificate" Или Команда = "ReturnElectronicCertificate" Тогда + Если ПустаяСтрока(ПараметрыОперации.ИдентификаторКорзины) Или ПараметрыОперации.СуммаЭлектронногоСертификата = 0 Тогда + ПараметрыОперации.ТекстОшибки = НСтр("ru='Неверные параметры в операции.'"); + ПараметрыОперации.Результат = Ложь; + Возврат ПараметрыОперации; + КонецЕсли; + Иначе + Если НЕ (ПараметрыОперации.СуммаОперации > 0) Тогда + ПараметрыОперации.ТекстОшибки = НСтр("ru='Не корректная сумма операции.'"); + ПараметрыОперации.Результат = Ложь; + Возврат ПараметрыОперации; + КонецЕсли; + КонецЕсли; + + Если Не ПустаяСтрока(ПараметрыОперации.РеквизитыКартыQR) И НЕ ПараметрыПодключения.ConsumerPresentedQR Тогда + ПараметрыОперации.ТекстОшибки = НСтр("ru='Consumer-Presented QR не поддерживается драйвером.'"); + ПараметрыОперации.Результат = Ложь; + Возврат ПараметрыОперации; + КонецЕсли; + + Если Команда = "AuthorizeSales" Или Команда = "AuthorizeRefund" Или Команда = "AuthorizeVoid" + Или Команда = "PayByPaymentCardWithCashWithdrawal" Или Команда = "PurchaseWithEnrollment" + Или Команда = "PayElectronicCertificate" Или Команда = "ReturnElectronicCertificate" + Или Команда = "AuthorizePreSales" Или Команда = "AuthorizeCompletion" Или Команда = "AuthorizeVoidPreSales" Тогда + ПараметрыОперации.Вставить("ВходяшиеПараметрыXML", ПолучитьXMLПакетДляОперации(ПараметрыОперации)); + КонецЕсли; + + Возврат ПараметрыОперации; + +КонецФункции + +Процедура ОбработатьДанныеОперации(ПараметрыПодключения, Команда, РезультатВыполнения, ДанныеОперации) Экспорт + + Если Команда = "GetOperationByCards" Тогда + Если РезультатВыполнения.Свойство("РезультатОперацииXML") Тогда + Операции = ОперацииПоКартам(РезультатВыполнения.РезультатОперацииXML); + РезультатВыполнения.Вставить("Операции", Операции); + КонецЕсли; + Иначе + + Если РезультатВыполнения.Свойство("ИсходящиеПараметрыXML") И НЕ ПустаяСтрока(РезультатВыполнения.ИсходящиеПараметрыXML) Тогда + ПараметрыОперации = ОбщегоНазначенияБПО.ПрочитатьКорневойЭлементXML(РезультатВыполнения.ИсходящиеПараметрыXML); + Если ПараметрыОперации.Свойство("AuthorizationCode") Тогда + РезультатВыполнения.КодАвторизации = ПараметрыОперации.AuthorizationCode; + КонецЕсли; + Если ПараметрыОперации.Свойство("CardNumber") Тогда + РезультатВыполнения.НомерКарты = ПараметрыОперации.CardNumber; + КонецЕсли; + Если ПараметрыОперации.Свойство("CardNumberHash") Тогда + РезультатВыполнения.ХешНомерКарты = ПараметрыОперации.CardNumberHash; + КонецЕсли; + Если ПараметрыОперации.Свойство("RRNCode") Тогда + РезультатВыполнения.СсылочныйНомер = ПараметрыОперации.RRNCode; + КонецЕсли; + Если ПараметрыОперации.Свойство("ReceiptNumber") Тогда + РезультатВыполнения.НомерЧекаЭТ = ПараметрыОперации.ReceiptNumber; + КонецЕсли; + Если ПараметрыОперации.Свойство("AuthorizationType") Тогда + РезультатВыполнения.ВидОплатыНаТерминалеКод = ПараметрыОперации.AuthorizationType; + КонецЕсли; + Если ПараметрыОперации.Свойство("OperationStatus") Тогда + СтатусОперации = ПараметрыОперации.OperationStatus; + РезультатВыполнения.СтатусОперации = ?(ЗначениеЗаполнено(СтатусОперации), Число(СтатусОперации), 0); + КонецЕсли; + Если ПараметрыОперации.Свойство("ResultCode") Тогда + КодЗавершения = ПараметрыОперации.ResultCode; + РезультатВыполнения.КодЗавершения = ?(ЗначениеЗаполнено(КодЗавершения), Число(КодЗавершения), 0); + КонецЕсли; + Если ПараметрыОперации.Свойство("PaymentSystemIdentifier") Тогда + РезультатВыполнения.ИдентификаторПлатежнойСистемы = ПараметрыОперации.PaymentSystemIdentifier; + КонецЕсли; + Если ПараметрыОперации.Свойство("UUID") Тогда + РезультатВыполнения.ИдентификаторБанковскойТранзакции = ПараметрыОперации.UUID; + КонецЕсли; + Если ПараметрыОперации.Свойство("Date") Тогда + РезультатВыполнения.ДатаВремя = ПараметрыОперации.Date; + КонецЕсли; + + КонецЕсли; + + Если РезультатВыполнения.Свойство("ТекстСлипЧека") + И Не ПустаяСтрока(РезультатВыполнения.ТекстСлипЧека) Тогда + + Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройства = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройства"); + Если ДанныеОперации.Свойство("ПолныйСлипЧек") И НЕ ДанныеОперации.ПолныйСлипЧек Тогда + ТекстСлипЧека = ОборудованиеПлатежныеСистемыКлиентСервер.ТекстСлипЧекаПоУмолчанию(РезультатВыполнения); + Иначе + ТекстСлипЧека = РезультатВыполнения.ТекстСлипЧека; + КонецЕсли; + ТестовыеЧеки = МодульОборудованиеЧекопечатающиеУстройства.ПолучитьXMLПакетДляТекста(ТекстСлипЧека, ПараметрыПодключения.РевизияИнтерфейса); + РезультатВыполнения.Вставить("ТестовыеЧеки", ТестовыеЧеки); + КонецЕсли; + + КонецЕсли; + + Если РезультатВыполнения.Свойство("ВидОплатыНаТерминалеКод") Тогда + РезультатВыполнения.ВидОплатыНаТерминале = ВидОплатыНаТерминалеПоКоду(Число(РезультатВыполнения.ВидОплатыНаТерминалеКод)); + КонецЕсли; + + КонецЕсли; + + ТипОперации = ТипПлатежнойОперацииПоКоманде(Команда); + ЗаписатьПлатежнуюОперацию(ТипОперации, ДанныеОперации, РезультатВыполнения); + +КонецПроцедуры + +// Записать платежную операцию. +// +Процедура ЗаписатьПлатежнуюОперацию(ТипОперации, ДанныеОперации, РезультатВыполнения) Экспорт + + Если ТипОперации = Неопределено Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ИдентификаторЗапроса = ?(ДанныеОперации.Свойство("ИдентификаторЗапроса"), ДанныеОперации.ИдентификаторЗапроса, Неопределено); + Если ПустаяСтрока(ИдентификаторЗапроса) Или ИдентификаторЗапроса = "0" Тогда + ИдентификаторЗапроса = Новый УникальныйИдентификатор(); + ДанныеОперации.ИдентификаторЗапроса = Строка(ИдентификаторЗапроса);; + КонецЕсли; + + ДокументОснование = ?(ДанныеОперации.Свойство("ДокументОснование"), ДанныеОперации.ДокументОснование, Неопределено); + СуммаОперации = ?(ДанныеОперации.Свойство("СуммаОперации"), ДанныеОперации.СуммаОперации, Неопределено); + ИдентификаторФискальнойОперации = ?(ДанныеОперации.Свойство("ИдентификаторФискальнойОперации"), ДанныеОперации.ИдентификаторФискальнойОперации, Неопределено); + ДатаЗаписи = ОбщегоНазначенияБПО.ДатаСеанса(); + + НаборЗаписей = РегистрыСведений.ПлатежныеОперации.СоздатьНаборЗаписей(); + + Запись = НаборЗаписей.Добавить(); + Запись.ИдентификаторЗапроса = Строка(ИдентификаторЗапроса); + Запись.ДокументОснование = ДокументОснование; + Запись.ДатаЗапроса = ДатаЗаписи; + Запись.ГодМесяц = Год(ДатаЗаписи)*100+Месяц(ДатаЗаписи); + Запись.ТипОперации = ТипОперации; + Запись.ИдентификаторФискальнойОперации = ИдентификаторФискальнойОперации; + Запись.СуммаОперации = СуммаОперации; + Запись.ОперацияВыполнена = РезультатВыполнения.Результат; + Если ПустаяСтрока(ДанныеОперации.ИдентификаторКорзины) Тогда + Если РезультатВыполнения.Свойство("ИдентификаторОперации") Тогда + Запись.ИдентификаторОперации = РезультатВыполнения.ИдентификаторОперации; + КонецЕсли; + Иначе + Запись.ИдентификаторОперации = ДанныеОперации.ИдентификаторКорзины; + КонецЕсли; + + Если РезультатВыполнения.Результат Тогда + Если РезультатВыполнения.Свойство("ВидОплатыНаТерминале") Тогда + Запись.ВидОплатыНаТерминале = РезультатВыполнения.ВидОплатыНаТерминале; + КонецЕсли; + Запись.СсылочныйНомер = ?(РезультатВыполнения.Свойство("СсылочныйНомер"), РезультатВыполнения.СсылочныйНомер, Неопределено); + Запись.КодАвторизации = ?(РезультатВыполнения.Свойство("КодАвторизации"), РезультатВыполнения.КодАвторизации, Неопределено); + Запись.ИдентификаторТерминала = ?(РезультатВыполнения.Свойство("ИдентификаторТерминала"), РезультатВыполнения.ИдентификаторТерминала, Неопределено); + Запись.ИдентификаторБанкаЭквайера = ?(РезультатВыполнения.Свойство("ИдентификаторБанкаЭквайера"), РезультатВыполнения.ИдентификаторБанкаЭквайера, Неопределено); + Запись.ИдентификаторПлатежнойСистемы = ?(РезультатВыполнения.Свойство("ИдентификаторПлатежнойСистемы"),РезультатВыполнения.ИдентификаторПлатежнойСистемы, Неопределено); + Запись.ИдентификаторБанковскойТранзакции = ?(РезультатВыполнения.Свойство("ИдентификаторБанковскойТранзакции"), РезультатВыполнения.ИдентификаторБанковскойТранзакции, Неопределено); + Запись.ДатаВремяТранзакции = ?(РезультатВыполнения.Свойство("ДатаВремя"), РезультатВыполнения.ДатаВремя, Неопределено); + КонецЕсли; + + Сжатие = Новый СжатиеДанных(6); + + Если ДанныеОперации.Свойство("ТекстЗапроса") Тогда + ТекстЗапроса = ДанныеОперации.ТекстЗапроса; + Иначе + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON, ДанныеОперации, , "ЗаписатьОперацию_ПреобразованиеВJSON", ОборудованиеПлатежныеСистемы); + ТекстЗапроса = ЗаписьJSON.Закрыть(); + КонецЕсли; + Запись.ДанныеЗапроса = Новый ХранилищеЗначения(ТекстЗапроса, Сжатие); + + Если ДанныеОперации.Свойство("ТекстОтвета") Тогда + ТекстОтвета = ДанныеОперации.ТекстОтвета; + Иначе + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON, РезультатВыполнения, , "ЗаписатьОперацию_ПреобразованиеВJSON", ОборудованиеПлатежныеСистемы); + ТекстОтвета = ЗаписьJSON.Закрыть(); + КонецЕсли; + Запись.ДанныеОтвета = Новый ХранилищеЗначения(ТекстОтвета, Сжатие); + + НаборЗаписей.Записать(Ложь); + +КонецПроцедуры + +// Получает данные платежных операций. +// +// Параметры: +// ИдентификаторЗапроса - Строка - Идентификатор запроса +// ДокументОснование - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО - документ основание +// +// Возвращаемое значение: +// Булево +// +Функция ДанныеПлатежныхОпераций(ИдентификаторЗапроса = Неопределено, ДокументОснование = Неопределено, ДанныеЗапроса = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПлатежныеОперации = Новый Массив(); + + Запрос = Новый Запрос; + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ПлатежныеОперации.ДокументОснование КАК ДокументОснование, + | ПлатежныеОперации.ИдентификаторОперации КАК ИдентификаторОперации, + | ПлатежныеОперации.ИдентификаторЗапроса КАК ИдентификаторЗапроса, + | ПлатежныеОперации.ИдентификаторФискальнойОперации КАК ИдентификаторФискальнойОперации, + | ПлатежныеОперации.ДатаЗапроса КАК ДатаЗапроса, + | ПлатежныеОперации.ТипОперации КАК ТипОперации, + | ПлатежныеОперации.СуммаОперации КАК СуммаОперации, + | ПлатежныеОперации.ОперацияВыполнена КАК ОперацияВыполнена, + | ПлатежныеОперации.СсылочныйНомер КАК СсылочныйНомер, + | ПлатежныеОперации.КодАвторизации КАК КодАвторизации, + | ПлатежныеОперации.ВидОплатыНаТерминале КАК ВидОплатыНаТерминале, + | ПлатежныеОперации.ИдентификаторТерминала КАК ИдентификаторТерминала, + | ПлатежныеОперации.ИдентификаторБанкаЭквайера КАК ИдентификаторБанкаЭквайера, + | ПлатежныеОперации.ИдентификаторПлатежнойСистемы КАК ИдентификаторПлатежнойСистемы, + | ПлатежныеОперации.ИдентификаторБанковскойТранзакции КАК ИдентификаторБанковскойТранзакции, + | ПлатежныеОперации.ДатаВремяТранзакции КАК ДатаВремяТранзакции, + | ПлатежныеОперации.ДанныеЗапроса КАК ДанныеЗапроса, + | ПлатежныеОперации.ДанныеОтвета КАК ДанныеОтвета + |ИЗ + | РегистрСведений.ПлатежныеОперации КАК ПлатежныеОперации + |ГДЕ + | &Условие"; + + Если ИдентификаторЗапроса <> Неопределено Тогда + ТекстУсловия = "ПлатежныеОперации.ИдентификаторЗапроса = &ИдентификаторЗапроса"; + Запрос.УстановитьПараметр("ИдентификаторЗапроса", ИдентификаторЗапроса); + ИначеЕсли ДокументОснование <> Неопределено Тогда + ТекстУсловия = "ПлатежныеОперации.ДокументОснование = &ДокументОснование"; + Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование); + Иначе + ТекстУсловия = ""; + КонецЕсли; + + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&Условие", ТекстУсловия); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + ПлатежнаяОперация = Новый Структура(); + ПлатежнаяОперация.Вставить("ДокументОснование"); + ПлатежнаяОперация.Вставить("ИдентификаторОперации"); + ПлатежнаяОперация.Вставить("ИдентификаторЗапроса"); + ПлатежнаяОперация.Вставить("ИдентификаторФискальнойОперации"); + ПлатежнаяОперация.Вставить("ДатаЗапроса"); + ПлатежнаяОперация.Вставить("ТипОперации"); + ПлатежнаяОперация.Вставить("СуммаОперации"); + ПлатежнаяОперация.Вставить("ОперацияВыполнена"); + ПлатежнаяОперация.Вставить("СсылочныйНомер"); + ПлатежнаяОперация.Вставить("КодАвторизации"); + ПлатежнаяОперация.Вставить("ВидОплатыНаТерминале"); + ПлатежнаяОперация.Вставить("ИдентификаторТерминала"); + ПлатежнаяОперация.Вставить("ИдентификаторБанкаЭквайера"); + ПлатежнаяОперация.Вставить("ИдентификаторПлатежнойСистемы"); + ПлатежнаяОперация.Вставить("ИдентификаторБанковскойТранзакции"); + ПлатежнаяОперация.Вставить("ДатаВремяТранзакции"); + ПлатежнаяОперация.Вставить("ДанныеЗапроса"); + ПлатежнаяОперация.Вставить("ДанныеОтвета"); + ЗаполнитьЗначенияСвойств(ПлатежнаяОперация, Выборка); + + Если ДанныеЗапроса Тогда + ДанныеЗапросаХранилище = Выборка.ДанныеЗапроса; // ХранилищеЗначения + Если ТипЗнч(ДанныеЗапросаХранилище) = Тип("ХранилищеЗначения") Тогда + ПлатежнаяОперация.Вставить("ДанныеЗапроса", ДанныеЗапросаХранилище.Получить()); + КонецЕсли; + ДанныеОтветаХранилище = Выборка.ДанныеОтвета; // ХранилищеЗначения + Если ТипЗнч(ДанныеОтветаХранилище) = Тип("ХранилищеЗначения") Тогда + ПлатежнаяОперация.Вставить("ДанныеОтвета", ДанныеОтветаХранилище.Получить()); + КонецЕсли; + КонецЕсли; + + ПлатежныеОперации.Добавить(ПлатежнаяОперация); + КонецЦикла; + + Возврат ПлатежныеОперации; + +КонецФункции + +Функция ЗаписатьОперацию_ПреобразованиеВJSON(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт + + Возврат Строка(Значение); + +КонецФункции + +// Проверяет возможность отмены оплаты по документу основания. +// +// Параметры: +// ДокументОснование - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО - документ основание +// +// Возвращаемое значение: +// Булево +// +Функция ВозможнаОтменаОплатыПоЧеку(ДокументОснование) Экспорт + + Если Не ЗначениеЗаполнено(ДокументОснование) Тогда + Возврат Ложь + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + Запрос = Новый Запрос; + + Запрос.Текст = "ВЫБРАТЬ + | ПлатежныеОперации.ИдентификаторОперации КАК ИдентификаторОперации + |ИЗ + | РегистрСведений.ПлатежныеОперации КАК ПлатежныеОперации + |ГДЕ + | ПлатежныеОперации.ДокументОснование = &ДокументОснование + | И ПлатежныеОперации.ТипОперации = &ТипОперации + | И ПлатежныеОперации.ОперацияВыполнена = &ОперацияВыполнена"; + + Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование); + Запрос.УстановитьПараметр("ТипОперации", Перечисления.ТипыПлатежныхОпераций.ОтменаПлатежаПоПлатежнойКарте); + Запрос.УстановитьПараметр("ОперацияВыполнена", Истина); + + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаПоРезультатуЗапроса = РезультатЗапроса.Выбрать(); + Если Не ВыборкаПоРезультатуЗапроса.Следующий() Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ТипПлатежнойОперацииПоКоманде(Команда) + + ТипыОпераций = Новый Соответствие(); + + ТипыОпераций.Вставить("AuthorizeSales", Перечисления.ТипыПлатежныхОпераций.ОплатаПлатежнойКартой); + ТипыОпераций.Вставить("AuthorizeRefund", Перечисления.ТипыПлатежныхОпераций.ВозвратПоПлатежнойКарте); + ТипыОпераций.Вставить("AuthorizeVoid", Перечисления.ТипыПлатежныхОпераций.ОтменаПлатежаПоПлатежнойКарте); + ТипыОпераций.Вставить("PayByPaymentCardWithCashWithdrawal", Перечисления.ТипыПлатежныхОпераций.ОплатаПлатежнойКартойСВыдачейНаличных); + ТипыОпераций.Вставить("PurchaseWithEnrollment", Перечисления.ТипыПлатежныхОпераций.ПокупкаСЗачислением); + ТипыОпераций.Вставить("PayElectronicCertificate", Перечисления.ТипыПлатежныхОпераций.ОплатаЭС); + ТипыОпераций.Вставить("ReturnElectronicCertificate", Перечисления.ТипыПлатежныхОпераций.ВозвратЭС); + ТипыОпераций.Вставить("EmergencyVoid", Перечисления.ТипыПлатежныхОпераций.АварийнаяОтмена); + + Возврат ТипыОпераций.Получить(Команда); + +КонецФункции + + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Получить операции по картам. +// +// Параметры: +// ДанныеXML - Строка +// +// Возвращаемое значение: +// Массив из см. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыПроведеннойЭквайринговойОперации +// +Функция ОперацииПоКартам(ДанныеXML) + + Результат = Новый Массив(); + + Если Не ПустаяСтрока(ДанныеXML) Тогда + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ДанныеXML); + ЧтениеXML.ПерейтиКСодержимому(); + + Если ЧтениеXML.Имя = "Table" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя = "Record" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Операция = ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыПроведеннойЭквайринговойОперации(); + Операция.ТипТранзакции = ЧтениеXML.ЗначениеАтрибута("TypeOperation"); + Операция.НомерМерчанта = ЧтениеXML.ЗначениеАтрибута("MerchantNumber"); + Операция.НомерКарты = ЧтениеXML.ЗначениеАтрибута("CardNumber"); + Если ЧтениеXML.ЗначениеАтрибута("CardNumberHash") <> Неопределено Тогда + Операция.ХешНомерКарты = ЧтениеXML.ЗначениеАтрибута("CardNumberHash"); + КонецЕсли; + Если ЧтениеXML.ЗначениеАтрибута("Amount") <> Неопределено Тогда + Операция.СуммаОперации = Число(ЧтениеXML.ЗначениеАтрибута("Amount")); + КонецЕсли; + Если ЧтениеXML.ЗначениеАтрибута("AmountCash") <> Неопределено Тогда + Операция.СуммаНаличных = Число(ЧтениеXML.ЗначениеАтрибута("AmountCash")); + КонецЕсли; + Если ЧтениеXML.ЗначениеАтрибута("ElectronicCertificateAmount") <> Неопределено Тогда + Операция.СуммаЭлектронногоСертификата = Число(ЧтениеXML.ЗначениеАтрибута("ElectronicCertificateAmount")); + КонецЕсли; + Если ЧтениеXML.ЗначениеАтрибута("ReturnElectronicCertificate") <> Неопределено Тогда + Операция.СуммаСобственныхСредств = Число(ЧтениеXML.ЗначениеАтрибута("ReturnElectronicCertificate")); + КонецЕсли; + Операция.СсылочныйНомер = ЧтениеXML.ЗначениеАтрибута("RRNCode"); + Операция.КодАвторизации= ЧтениеXML.ЗначениеАтрибута("AuthorizationCode"); + Результат.Добавить(Операция); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Вид оплаты на терминале по коду. +// +// Параметры: +// ВидОплатыКод - Число - Код вида оплаты. +// Возвращаемое значение: +// ПеречислениеСсылка.ВидОплатыНаТерминале - Вид оплаты на терминале +// +Функция ВидОплатыНаТерминалеПоКоду(ВидОплатыКод) Экспорт + + Если ВидОплатыКод = 1 Тогда + Результат = Перечисления.ВидОплатыНаТерминале.СБПQR + ИначеЕсли ВидОплатыКод = 2 Тогда + Результат = Перечисления.ВидОплатыНаТерминале.ПлатиQR + Иначе + Результат = Перечисления.ВидОплатыНаТерминале.Карта; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Код вида оплаты на терминале. +// +// Параметры: +// ВидОплаты - ПеречислениеСсылка.ВидОплатыНаТерминале - Вид оплаты на терминале +// Возвращаемое значение: +// Число - Код вида оплаты +// +Функция КодВидаОплатыНаТерминале(ВидОплаты) Экспорт + + Если ВидОплаты = Перечисления.ВидОплатыНаТерминале.СБПQR Тогда + Результат = 1 + ИначеЕсли ВидОплаты = Перечисления.ВидОплатыНаТерминале.ПлатиQR тогда + Результат = 2 + Иначе + Результат = 0 + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Получить XMLПакет для операции. +// +// Параметры: +// ПараметрыОперации - Структура - Параметры +// +// Возвращаемое значение: +// Строка - Получить XMLПакет для операции +Функция ПолучитьXMLПакетДляОперации(ПараметрыОперации) Экспорт + + ЗаписьXML = Новый ЗаписьXML(); + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("OperationParameters"); + + НомерМерчанта = ?(ПараметрыОперации.НомерМерчанта <> Неопределено, ПараметрыОперации.НомерМерчанта, 0); + + ЗаписьXML.ЗаписатьАтрибут("MerchantNumber", XMLСтрока(НомерМерчанта)); + Если Не ПустаяСтрока(ПараметрыОперации.РеквизитыКартыQR) Тогда + ЗаписьXML.ЗаписатьАтрибут("ConsumerPresentedQR", XMLСтрока(ПараметрыОперации.РеквизитыКартыQR)); + КонецЕсли; + + ИспользоватьБиометрию = ?(ПараметрыОперации.ИспользоватьБиометрию <> Неопределено, ПараметрыОперации.ИспользоватьБиометрию, Ложь); + ЗаписьXML.ЗаписатьАтрибут("UseBiometrics", ?(ИспользоватьБиометрию, "1", "0")); + + Если Не ЗначениеЗаполнено(ПараметрыОперации.ВидОплатыНаТерминале) Тогда + ВидОплатыНаТерминалКод = ПараметрыОперации.ВидОплатыНаТерминалеКод; + Иначе + ВидОплатыНаТерминалКод = КодВидаОплатыНаТерминале(ПараметрыОперации.ВидОплатыНаТерминале); + КонецЕсли; + ЗаписьXML.ЗаписатьАтрибут("AuthorizationType", XMLСтрока(ВидОплатыНаТерминалКод)); + + СуммаОперации = ?(ПараметрыОперации.СуммаОперации <> Неопределено, ПараметрыОперации.СуммаОперации, 0); + ЗаписьXML.ЗаписатьАтрибут("Amount", XMLСтрока(СуммаОперации)); + + СуммаНаличных = ?(ПараметрыОперации.СуммаНаличных <> Неопределено, ПараметрыОперации.СуммаНаличных, 0); + ЗаписьXML.ЗаписатьАтрибут("AmountCash", XMLСтрока(СуммаНаличных)); + + СуммаОригинальнойОперации = ?(ПараметрыОперации.СуммаОригинальнойОперации <> Неопределено, ПараметрыОперации.СуммаОригинальнойОперации, 0); + ЗаписьXML.ЗаписатьАтрибут("AmountOriginalTransaction", XMLСтрока(СуммаОригинальнойОперации)); + + НомерКарты = ?(ПараметрыОперации.НомерКарты <> Неопределено, ПараметрыОперации.НомерКарты, ""); + Если Не ПустаяСтрока(НомерКарты) Тогда + ЗаписьXML.ЗаписатьАтрибут("CardNumber", XMLСтрока(НомерКарты)); + КонецЕсли; + + ХешНомерКарты = ?(ПараметрыОперации.ХешНомерКарты <> Неопределено, ПараметрыОперации.ХешНомерКарты, ""); + Если Не ПустаяСтрока(ХешНомерКарты) Тогда + ЗаписьXML.ЗаписатьАтрибут("CardNumberHash", XMLСтрока(ХешНомерКарты)); + КонецЕсли; + + ИдентификаторКорзины = ?(ПараметрыОперации.ИдентификаторКорзины <> Неопределено, ПараметрыОперации.ИдентификаторКорзины, ""); + Если Не ПустаяСтрока(ИдентификаторКорзины) Тогда + ЗаписьXML.ЗаписатьАтрибут("BasketID", XMLСтрока(ИдентификаторКорзины)); + КонецЕсли; + + СуммаЭлектронногоСертификата = ?(ПараметрыОперации.СуммаЭлектронногоСертификата <> Неопределено, ПараметрыОперации.СуммаЭлектронногоСертификата, 0); + ЗаписьXML.ЗаписатьАтрибут("ElectronicCertificateAmount", XMLСтрока(СуммаЭлектронногоСертификата)); + + СуммаСобственныхСредств = ?(ПараметрыОперации.СуммаСобственныхСредств <> Неопределено, ПараметрыОперации.СуммаСобственныхСредств, 0); + ЗаписьXML.ЗаписатьАтрибут("OwnFundsAmount", XMLСтрока(СуммаСобственныхСредств)); + + НомерЧека = ?(ПараметрыОперации.НомерЧека <> Неопределено, ПараметрыОперации.НомерЧека, ""); + Если Не ПустаяСтрока(НомерЧека) Тогда + ЗаписьXML.ЗаписатьАтрибут("ReceiptNumber", XMLСтрока(НомерЧека)); + КонецЕсли; + + СсылочныйНомер = ?(ПараметрыОперации.СсылочныйНомер <> Неопределено, ПараметрыОперации.СсылочныйНомер, ""); + Если Не ПустаяСтрока(СсылочныйНомер) Тогда + ЗаписьXML.ЗаписатьАтрибут("RRNCode", XMLСтрока(СсылочныйНомер)); + КонецЕсли; + + КодАвторизации = ?(ПараметрыОперации.КодАвторизации <> Неопределено, ПараметрыОперации.КодАвторизации, ""); + Если Не ПустаяСтрока(КодАвторизации) Тогда + ЗаписьXML.ЗаписатьАтрибут("AuthorizationCode", XMLСтрока(КодАвторизации)); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + Возврат ЗаписьXML.Закрыть(); + +КонецФункции + + #КонецОбласти diff --git a/CommonModules/ОборудованиеПлатежныеСистемыКлиент.xml b/CommonModules/ОборудованиеПлатежныеСистемыКлиент.xml new file mode 100644 index 0000000..bf318a4 --- /dev/null +++ b/CommonModules/ОборудованиеПлатежныеСистемыКлиент.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеПлатежныеСистемыКлиент + + + ru + Оборудование платежные системы клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеПлатежныеСистемыКлиент/Ext/Module.bsl b/CommonModules/ОборудованиеПлатежныеСистемыКлиент/Ext/Module.bsl new file mode 100644 index 0000000..bd5edd4 --- /dev/null +++ b/CommonModules/ОборудованиеПлатежныеСистемыКлиент/Ext/Module.bsl @@ -0,0 +1,288 @@ + +#Область ПрограммныйИнтерфейс + +// АПК: 142-выкл обратная совместимость + +// Выполнить операции на эквайринговом терминале. +// Если эквайринговый терминал не поддерживает печать квитанций на терминале, для печати подключается печатающее устройство. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// ПечатающееУстройство - Неопределено - Печатающее устройство. +// +Процедура НачатьВыполнениеОперацииНаЭквайринговомТерминале(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено, ПечатающееУстройство = Неопределено) Экспорт + + ДанныеДляДополнения = МенеджерОборудованияКлиент.ПечатьСлипЧекаЭквайринговойОперации(); + + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + Для Каждого Элемент Из ДополнительныеПараметры Цикл + ДанныеДляДополнения.Вставить(Элемент.Ключ, Элемент.Значение); + КонецЦикла; + КонецЕсли; + + КонтекстОперации = КонтекстОперацииНаЭквайринговомТерминале(); + КонтекстОперации.ОповещениеПриЗавершении = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторУстройства = ИдентификаторУстройства; + КонтекстОперации.ПечатающееУстройство = ПечатающееУстройство; + КонтекстОперации.ПараметрыОперации = ПараметрыОперации; + КонтекстОперации.ДополнительныеПараметры = ДополнительныеПараметры; + КонтекстОперации.ТипТранзакции = ПараметрыОперации.ТипТранзакции; + КонтекстОперации.ПодготовитьДанные = Истина; + КонтекстОперации.ОбработатьДанные = Истина; + КонтекстОперации.ОбработатьДанныеПриОшибке = Истина; + КонтекстОперации.ИспользоватьПечатающееУстройство = ПараметрыОперации.ИспользоватьПечатающееУстройство; + КонтекстОперации.ДополнительныеПараметры = ДанныеДляДополнения; + ПараметрыОперации.Вставить("ПолныйСлипЧек", КонтекстОперации.ДополнительныеПараметры.ПолныйСлипЧек); + + ВыполнениеОперацииНаЭквайринговомТерминале(ИдентификаторУстройства, КонтекстОперации); + +КонецПроцедуры + +// Выполнить сверку итогов на эквайринговом терминале. +// Если эквайринговый терминал не поддерживает печать квитанций на терминале, для печати подключается печатающее устройство. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// ПечатающееУстройство - Неопределено - Печатающее устройство. +// +Процедура НачатьВыполнениеСверкиИтоговНаЭквайринговомТерминале(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено, ПечатающееУстройство = Неопределено) Экспорт + + КонтекстОперации = КонтекстОперацииНаЭквайринговомТерминале(); + КонтекстОперации.ОповещениеПриЗавершении = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторУстройства = ИдентификаторУстройства; + КонтекстОперации.ПечатающееУстройство = ПечатающееУстройство; + КонтекстОперации.ПараметрыОперации = ПараметрыОперации; + КонтекстОперации.ДополнительныеПараметры = ДополнительныеПараметры; + КонтекстОперации.ТипТранзакции = "Settlement"; + КонтекстОперации.ПодготовитьДанные = Ложь; + КонтекстОперации.ОбработатьДанные = Истина; + КонтекстОперации.ИспользоватьПечатающееУстройство = Истина; + + ВыполнениеОперацииНаЭквайринговомТерминале(ИдентификаторУстройства, КонтекстОперации); + +КонецПроцедуры + +// Начать получение операции по картам. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолучениеОперацииПоКартам(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = КонтекстОперацииНаЭквайринговомТерминале(); + КонтекстОперации.ОповещениеПриЗавершении = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторУстройства = ИдентификаторУстройства; + КонтекстОперации.ПараметрыОперации = ПараметрыОперации; + КонтекстОперации.ДополнительныеПараметры = ДополнительныеПараметры; + КонтекстОперации.ТипТранзакции = "GetOperationByCards"; + КонтекстОперации.ПодготовитьДанные = Ложь; + КонтекстОперации.ОбработатьДанные = Истина; + + ВыполнениеОперацииНаЭквайринговомТерминале(ИдентификаторУстройства, КонтекстОперации); + +КонецПроцедуры + +// АПК: 142-вкл + +// Начать получение параметров карты. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолучениеПараметровКарты(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = КонтекстОперацииНаЭквайринговомТерминале(); + КонтекстОперации.ОповещениеПриЗавершении = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторУстройства = ИдентификаторУстройства; + КонтекстОперации.ПечатающееУстройство = Неопределено; + КонтекстОперации.ПараметрыОперации = ПараметрыОперации; + КонтекстОперации.ДополнительныеПараметры = ДополнительныеПараметры; + КонтекстОперации.ТипТранзакции = "GetCardParametrs"; + КонтекстОперации.ПодготовитьДанные = Ложь; + КонтекстОперации.ОбработатьДанные = Ложь; + КонтекстОперации.ИспользоватьПечатающееУстройство = Ложь; + + ВыполнениеОперацииНаЭквайринговомТерминале(ИдентификаторУстройства, КонтекстОперации); + +КонецПроцедуры + +// Начать выполнение аварийной отмена операции. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыполнениеАварийнойОтменыОперации(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = КонтекстОперацииНаЭквайринговомТерминале(); + КонтекстОперации.ОповещениеПриЗавершении = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторУстройства = ИдентификаторУстройства; + КонтекстОперации.ПечатающееУстройство = Неопределено; + КонтекстОперации.ПараметрыОперации = ПараметрыОперации; + КонтекстОперации.ДополнительныеПараметры = ДополнительныеПараметры; + КонтекстОперации.ТипТранзакции = "EmergencyVoid"; + КонтекстОперации.ПодготовитьДанные = Ложь; + КонтекстОперации.ОбработатьДанные = Ложь; + КонтекстОперации.ОбработатьДанныеПриОшибке = Ложь; + КонтекстОперации.ИспользоватьПечатающееУстройство = Ложь; + + ВыполнениеОперацииНаЭквайринговомТерминале(ИдентификаторУстройства, КонтекстОперации); + +КонецПроцедуры + +// Возвращает строку последнего слип-чека +// +// Возвращаемое значение: +// Строка +Функция ПоследнийСлипЧек() Экспорт + + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + Возврат ПодключаемоеОборудование.ПоследнийСлипЧек; + +КонецФункции + +// Возвращает возможные типы пакетной операции +// +// Возвращаемое значение: +// Соответствие +Функция ТипыПакетнойОперацииВОчередиЧеков() Экспорт + + Соответствие = Новый Соответствие(); + Соответствие.Вставить("НеПакетнаяОперация", ПредопределенноеЗначение("Перечисление.ТипыПакетнойОперацииВОчередиЧеков.НеПакетнаяОперация")); + Соответствие.Вставить("ФискализацияЧекаСОплатойКартой", ПредопределенноеЗначение("Перечисление.ТипыПакетнойОперацииВОчередиЧеков.ФискализацияЧекаСОплатойКартой")); + Соответствие.Вставить("ПродажаСВыдачейНаличных", ПредопределенноеЗначение("Перечисление.ТипыПакетнойОперацииВОчередиЧеков.ПродажаСВыдачейНаличных")); + Соответствие.Вставить("ПокупкаСЗачислением", ПредопределенноеЗначение("Перечисление.ТипыПакетнойОперацииВОчередиЧеков.ПокупкаСЗачислением")); + Возврат Соответствие; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Устанавливает строку последнего слип-чека +// +// Параметры: +// ТекстСлипЧека - Строка +Процедура УстановитьПоследнийСлипЧек(ТекстСлипЧека) Экспорт + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + ПодключаемоеОборудование.ПоследнийСлипЧек = ТекстСлипЧека; +КонецПроцедуры + +#КонецОбласти + + +#Область СлужебныеПроцедурыИФункции + +Функция КонтекстОперацииНаЭквайринговомТерминале() + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", Неопределено); + КонтекстОперации.Вставить("ИдентификаторКлиента" , Неопределено); + КонтекстОперации.Вставить("ИдентификаторУстройства", Неопределено); + КонтекстОперации.Вставить("ПечатающееУстройство" , Неопределено); + КонтекстОперации.Вставить("ПараметрыОперации" , Неопределено); + КонтекстОперации.Вставить("ДополнительныеПараметры", Неопределено); + КонтекстОперации.Вставить("ТипТранзакции" , Неопределено); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанныеПриОшибке", Ложь); + КонтекстОперации.Вставить("ИспользоватьПечатающееУстройство", Ложь); + КонтекстОперации.Вставить("Результат" , Истина); + Возврат КонтекстОперации; + +КонецФункции + +Процедура ВыполнениеОперацииНаЭквайринговомТерминале(ИдентификаторУстройства, КонтекстОперации) + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ЭквайринговыйТерминал = Истина; + + Оповещение = Новый ОписаниеОповещения("ВыполнениеОперацииНаЭквайринговомТерминалеЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите эквайринговый терминал'"), + НСтр("ru='Эквайринговый терминал не подключен.'"), + НСтр("ru='Эквайринговый терминал не выбран.'")); + Иначе + ВыполнениеОперацииНаЭквайринговомТерминалеЗавершение(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +Процедура ВыполнениеОперацииНаЭквайринговомТерминалеЗавершение(РезультатВыбора, КонтекстОперации) Экспорт + + Если РезультатВыбора.Результат Тогда + КонтекстОперации.ИдентификаторУстройства = РезультатВыбора.ИдентификаторУстройства; + ПараметрыОперации = КонтекстОперации.ПараметрыОперации; + Если КонтекстОперации.ТипТранзакции = "ReturnElectronicCertificate" И ПустаяСтрока(ПараметрыОперации.СсылочныйНомер) Тогда + Оповещение = Новый ОписаниеОповещения("ВыполнениеОперацииНаЭквайринговомТерминалеПослеВводаRRN", ЭтотОбъект, КонтекстОперации); + Подсказка = НСтр("ru='Введите RRN операции cо слип-чека покупки ЭС'"); + ПоказатьВводСтроки(Оповещение, "", Подсказка, 12); + Иначе + ВыполнениеОперацииНаЭквайринговомТерминалеКоманда(КонтекстОперации); + КонецЕсли; + Иначе + ВыполнитьОбработкуОповещения(КонтекстОперации.ОповещениеПриЗавершении, РезультатВыбора); + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнениеОперацииНаЭквайринговомТерминалеПослеВводаRRN(СтрокаRRN, КонтекстОперации) Экспорт + + КонтекстОперации.ПараметрыОперации.СсылочныйНомер = СтрокаRRN; + ВыполнениеОперацииНаЭквайринговомТерминалеКоманда(КонтекстОперации); + +КонецПроцедуры + +Процедура ВыполнениеОперацииНаЭквайринговомТерминалеКоманда(КонтекстОперации) Экспорт + + Если КонтекстОперации.ПараметрыОперации <> Неопределено Тогда + Если КонтекстОперации.ПараметрыОперации.Свойство("РеквизитыКартыQR") Тогда + РеквизитыКартыQR = КонтекстОперации.ПараметрыОперации.РеквизитыКартыQR; + Если Не ПустаяСтрока(РеквизитыКартыQR) Тогда + Если Не ОборудованиеПлатежныеСистемыКлиентСервер.ЭтоРеквизитыКартыQR(РеквизитыКартыQR) Тогда + ТекстСообщения = НСтр("ru='Операция по указанному QR-коду невозможна.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстСообщения); + ВыполнитьОбработкуОповещения(КонтекстОперации.ОповещениеПриЗавершении, РезультатВыполнения); + Возврат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды(КонтекстОперации.ТипТранзакции, "ОборудованиеПлатежныеСистемы", + КонтекстОперации.ДополнительныеПараметры, КонтекстОперации.ПодготовитьДанные, КонтекстОперации.ОбработатьДанные, + КонтекстОперации.ИспользоватьПечатающееУстройство, КонтекстОперации.ОбработатьДанныеПриОшибке); + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(КонтекстОперации.ОповещениеПриЗавершении, КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторУстройства, КонтекстОперации.ПараметрыОперации, ПараметрыВыполнениеКоманды, КонтекстОперации.ПечатающееУстройство); + +КонецПроцедуры + +#КонецОбласти + diff --git a/CommonModules/ОборудованиеПлатежныеСистемыКлиентСервер.xml b/CommonModules/ОборудованиеПлатежныеСистемыКлиентСервер.xml new file mode 100644 index 0000000..3dff92b --- /dev/null +++ b/CommonModules/ОборудованиеПлатежныеСистемыКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеПлатежныеСистемыКлиентСервер + + + ru + Оборудование платежные системы клиент сервер + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеПлатежныеСистемыКлиентСервер/Ext/Module.bsl b/CommonModules/ОборудованиеПлатежныеСистемыКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..d5156b9 --- /dev/null +++ b/CommonModules/ОборудованиеПлатежныеСистемыКлиентСервер/Ext/Module.bsl @@ -0,0 +1,169 @@ + +#Область ПрограммныйИнтерфейс + +// Заполняет структуру параметров карты. +// +// Возвращаемое значение: +// Структура. +Функция ПараметрыКарты() Экспорт; + + Результат = Новый Структура(); + + Результат.Вставить("ОтПоследнейОперации"); + Результат.Вставить("НомерКарты"); // Строка - Маскированный номер карты. + Результат.Вставить("ХешНомерКарты"); // Строка - PAN карты хешированном по алгоритму SHA256 виде. + Результат.Вставить("ТипКарты"); // Строка - Тип карты (VISA,MasterCard). + Результат.Вставить("СвояКарта"); // Булево - Карта банка которые предоставляет услуги эквайринга. + + Возврат Результат; + +КонецФункции + +// Заполняет структуру получение параметров карты. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыПолучениеПараметровКарты() Экспорт; + + Результат = Новый Структура(); + Результат.Вставить("ОтПоследнейОперации", Ложь); + Результат.Вставить("РеквизитыКартыQR"); // Строка,Необязательно - Отсканированный QR-код с мобильном устройства держателя карты, в котором содержатся EMV-реквизиты карты или токена. + Возврат Результат; + +КонецФункции + +// Заполняет структуру параметров выполнения эквайринговой операции. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыВыполненияЭквайринговойОперации() Экспорт; + + Результат = Новый Структура(); + Результат.Вставить("ДокументОснование");// Строка,Необязательно - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО. + Результат.Вставить("ТипТранзакции"); // Строка,Обязательно - Тип транзакции. + Результат.Вставить("РеквизитыКартыQR"); // Строка,Необязательно - Отсканированный QR-код с мобильном устройства держателя карты, в котором содержатся EMV-реквизиты карты или токена. + Результат.Вставить("СуммаОперации", 0); // Число,Обязательно - Сумма операции. + Результат.Вставить("СуммаОригинальнойОперации", 0); // Число,Необязательно - Сумма оригинальной операции. + Результат.Вставить("СуммаНаличных", 0); // Число,Необязательно - Сумма выдаваемых наличных. + Результат.Вставить("НомерМерчанта"); // Целое,Необязательно - Номер мерчанта доступного для данного эквайрингового терминала. + Результат.Вставить("НомерКарты"); // Строка,Необязательно - Маскированный номер карты. + Результат.Вставить("НомерЧека"); // Строка,Необязательно - Номер чека. + Результат.Вставить("НомерЧекаЭТ"); // Строка,Необязательно - Номер чека эквайрингового терминала. + Результат.Вставить("СсылочныйНомер"); // Строка,Необязательно - Уникальный код транзакции RRN. + Результат.Вставить("КодАвторизации"); // Строка,Необязательно - Код авторизации транзакции. + Результат.Вставить("ТекстСлипЧека"); // Строка,Необязательно - Текст квитанции, сформированный Эквайринговым ПО. + Результат.Вставить("ИспользоватьБиометрию", Ложь); // Булево,Необязательно - Разрешено использовать биометрию для операции. + Результат.Вставить("ВидОплатыНаТерминалеКод", 0); // Число, Необязательно - Код вида оплаты на терминале. + Результат.Вставить("ВидОплатыНаТерминале"); // Перечисление.ВидОплатыНаТерминале, Необязательно - Вид оплаты на терминале. + // Параметры выполнения эквайринговой операции c электронным сертификатом. + Результат.Вставить("СуммаЭлектронногоСертификата", 0); // Число,Обязательно - Сумма операции за счет электронных сертификатов. + Результат.Вставить("СуммаСобственныхСредств" , 0); // Число,Обязательно - Сумма операции за счет собственных средств по карте. + Результат.Вставить("ИдентификаторКорзины"); // Строка,Необязательно - Передается Basket ID – Уникальный идентификатор операции в ФЭС НСПК. + // Basket ID операции оплаты в ФЭС НСПК. Необходим для операции возврата без карты в рамках текущего операционного дня. + Результат.Вставить("ИдентификаторКорзиныОперацииОплаты"); // Строка,Необязательно - Basket ID операции оплаты в ФЭС НСПК. + Результат.Вставить("ИдентификаторЗапроса"); // Строка,Необязательно - Уникальный идентификатор запроса к эквайринговому терминалу. + Результат.Вставить("ИдентификаторФискальнойОперации"); // Строка,Необязательно - Уникальный идентификатор фискальной операции. + Результат.Вставить("ИспользоватьПечатающееУстройство", Истина); // Булево,Необязательно - определяет использование печатного устройства при выполнении фискальной операции. + // Расширение + Результат.Вставить("ХешНомерКарты"); // Строка,Необязательно - PAN карты хешированном по алгоритму SHA256 виде. + Возврат Результат; + +КонецФункции + +// Заполняет структуру параметров проведенной эквайринговой операции. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыПроведеннойЭквайринговойОперации() Экспорт; + + Результат = Новый Структура(); + Результат.Вставить("ТипТранзакции"); // Строка,Обязательно - Тип транзакции. + Результат.Вставить("НомерМерчанта"); // Целое,Необязательно - Номер мерчанта доступного для данного эквайрингового терминала. + Результат.Вставить("НомерКарты"); // Строка,Необязательно - Маскированный номер карты. + Результат.Вставить("ХешНомерКарты"); // Строка,Необязательно - Хеш номер карты. + Результат.Вставить("СуммаОперации", 0); // Число,Обязательно - Сумма операции. + Результат.Вставить("СуммаНаличных", 0); // Число,Необязательно - Сумма выдаваемых наличных. + Результат.Вставить("СуммаЭлектронногоСертификата", 0); // Число,Необязательно - Сумма операции за счет электронных сертификатов. + Результат.Вставить("СуммаСобственныхСредств" , 0); // Число,Необязательно - Сумма операции за счет собственных средств по карте. + Результат.Вставить("СсылочныйНомер"); // Строка,Необязательно - Ссылочный номер. + Результат.Вставить("КодАвторизации"); // Строка,Необязательно - Код авторизации. + Результат.Вставить("ДатаВремя"); // Дата,Необязательно - Дата и время инициализации транзакции, содержит локальную дату и время инициализации транзакции + Результат.Вставить("КодЗавершения"); // Число,Необязательно - Дополнительный код завершения операции. + Результат.Вставить("ИдентификаторПлатежнойСистемы"); // Строка,Необязательно - Уникальный идентификатор платежной системы, через которую проводилась операция. + Результат.Вставить("ИдентификаторБанковскойТранзакции"); // Строка,Необязательно - Уникальный идентификатор банковской транзакции, формируемый на стороне банка-эмитента. + + Возврат Результат; + +КонецФункции + +// Проверяет, что QR-код в формате Base64-строки является Consumer-Presented QR +// +// Параметры: +// QRКод - Строка +// +// Возвращаемое значение: +// Булево +Функция ЭтоРеквизитыКартыQR(Знач QRКод) Экспорт + + // Функциональные требования к терминально-кассовому модулю (POI) по обработке транзакции + // Проверка, что QR-код в формате Base64-строки начинается с «hQVDUFY» (индикатор версии и формата). + Результат = СтрНачинаетсяС(QRКод, "hQVDUFY"); //@NON-NLS-1 @NON-NLS-2 + Возврат Результат; + +КонецФункции + +Функция ТипыПлатежнойСистемыККТ() Экспорт + + Соответствие = Новый Соответствие(); + + Соответствие.Вставить("СистемаБыстрыхПлатежей" , ПредопределенноеЗначение("Перечисление.ТипыПлатежнойСистемыККТ.СистемаБыстрыхПлатежей")); + Соответствие.Вставить("СертификатНСПК" , ПредопределенноеЗначение("Перечисление.ТипыПлатежнойСистемыККТ.СертификатНСПК")); + Соответствие.Вставить("ЮКасса" , ПредопределенноеЗначение("Перечисление.ТипыПлатежнойСистемыККТ.ЮКасса")); + + Возврат Соответствие; + +КонецФункции + +// Возвращает текст слип-чека по умолчанию +// +// Параметры: +// ПараметрыСлипЧека - Структура - Параметры слип чека: +// * КодАвторизации - Строка +// * НомерКарты - Строка +// * НомерЧекаЭТ - Строка +// * СсылочныйНомер - Строка +// * СуммаОперации - Число +// * ТекстСлипЧека - Строка +// КороткийСлипЧек - Булево - сформировать текст короткого слип-чека +// +// Возвращаемое значение: +// Строка - Текст слип чека +// +Функция ТекстСлипЧекаПоУмолчанию(ПараметрыСлипЧека, КороткийСлипЧек = Истина) Экспорт + + Если ПараметрыСлипЧека.Результат Тогда + Текст = НСтр("ru = 'ПЛАТЕЖНАЯ ОПЕРАЦИЯ'") + Символы.ПС; + Текст = Текст + СтрШаблон(НСтр("ru = 'Код авторизации: %1'"), ПараметрыСлипЧека.КодАвторизации) + Символы.ПС; + Текст = Текст + СтрШаблон(НСтр("ru = 'Номер карты: %1'"), ПараметрыСлипЧека.НомерКарты) + Символы.ПС; + Текст = Текст + СтрШаблон(НСтр("ru = 'Номер чека ЭТ: %1'"), ПараметрыСлипЧека.НомерЧекаЭТ) + Символы.ПС; + Текст = Текст + СтрШаблон(НСтр("ru = 'Ссылочный номер: %1'"), ПараметрыСлипЧека.СсылочныйНомер) + Символы.ПС; + Если ПараметрыСлипЧека.Свойство("СуммаОперации") Тогда + Текст = Текст + СтрШаблон(НСтр("ru = 'Сумма: %1'"), ПараметрыСлипЧека.СуммаОперации) + Символы.ПС; + КонецЕсли; + Если Не КороткийСлипЧек И ПараметрыСлипЧека.Свойство("ТекстСлипЧека") Тогда + Текст = Текст + ПараметрыСлипЧека.ТекстСлипЧека; + КонецЕсли; + Иначе + Текст = НСтр("ru = 'ОПЕРАЦИЯ ОТКЛОНЕНА'") + Символы.ПС; + Текст = Текст + ПараметрыСлипЧека.ОписаниеОшибки; + КонецЕсли; + + Возврат Текст; + +КонецФункции + +#КонецОбласти + diff --git a/CommonModules/ОборудованиеУстройстваВвода.xml b/CommonModules/ОборудованиеУстройстваВвода.xml new file mode 100644 index 0000000..808ad5f --- /dev/null +++ b/CommonModules/ОборудованиеУстройстваВвода.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеУстройстваВвода + + + ru + Оборудование устройства ввода + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеУстройстваВвода/Ext/Module.bsl b/CommonModules/ОборудованиеУстройстваВвода/Ext/Module.bsl new file mode 100644 index 0000000..339e635 --- /dev/null +++ b/CommonModules/ОборудованиеУстройстваВвода/Ext/Module.bsl @@ -0,0 +1,67 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Добавляет в список поставляемые драйверы в составе конфигурации. +// +// Параметры: +// ДрайвераОборудования - см. МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования +// +Процедура ОбновитьПоставляемыеДрайвера(ДрайвераОборудования) Экспорт + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "Драйвер1ССканерыШтрихкодаNative"; + Драйвер.Наименование = НСтр("ru = '1С:Сканеры штрихкода (Native Api)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "InputDevice"; + Драйвер.ИмяМакетаДрайвера = "Драйвер1СУстройстваВводаNative"; + Драйвер.РекомендуемоеИспользование = Истина; + + // ++ Локализация + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверRightScanУстройстваВвода"; + Драйвер.Наименование = НСтр("ru = 'RightScan:Устройства ввода данных ТСД Urovo'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "RSDriver"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверСканкодСканерШтрихкода"; + Драйвер.Наименование = НСтр("ru = 'Сканкод:Cканер штрихкода Chipherlab ТСД'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ScancodeBarcodeScannerCPT"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверScanPortУстройстваВвода"; + Драйвер.Наименование = НСтр("ru = 'ScanPort:Устройства ввода данных ТСД'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ScanportScanner"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверСканситиУстройстваВвода"; + Драйвер.Наименование = НСтр("ru = 'Скансити:Устройства ввода данных ТСД'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ScanCityNewlandBarcode"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверКлеверенсСканерШтрихкода"; + Драйвер.Наименование = НСтр("ru = 'CLEVERENCE:Драйвер ТСД для мобильной платформы 1С'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "CleverenceBarcodeScanner"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверАТОЛСканерШтрихкода"; + Драйвер.Наименование = НСтр("ru = 'АТОЛ:Устройства ввода данных ТСД'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ru_atol_BarcodeServiceExtension"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверMERTECHСканерШтрихкода"; + Драйвер.Наименование = НСтр("ru = 'MERTECH:Сканер штрихкода ТСД'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ru_mertech_AndroidScannerExtension"; + + // -- Локализация + +КонецПроцедуры + +#КонецОбласти diff --git a/CommonModules/ОборудованиеУстройстваВводаВызовСервера.xml b/CommonModules/ОборудованиеУстройстваВводаВызовСервера.xml new file mode 100644 index 0000000..b2cfec1 --- /dev/null +++ b/CommonModules/ОборудованиеУстройстваВводаВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеУстройстваВводаВызовСервера + + + ru + Оборудование устройства ввода вызов сервера + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеУстройстваВводаВызовСервера/Ext/Module.bsl b/CommonModules/ОборудованиеУстройстваВводаВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..bef6eb8 --- /dev/null +++ b/CommonModules/ОборудованиеУстройстваВводаВызовСервера/Ext/Module.bsl @@ -0,0 +1,34 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Производит разложение данных дорожек магнитной карты по шаблонам. +// +// Параметры: +// ДанныеДорожек - Массив -массив строк. Значения полученные из дорожек. +// ПараметрыДорожек - Массив -массив структур содержащих параметры настройки устройства, где: +// * Использовать - булево - признак использования дорожки. +// * НомерДорожки - число - порядковый номер дорожки 1-3. +// +// Возвращаемое значение: +// Массив из Структура: +// *Шаблон - СправочникСсылка.ШаблоныМагнитныхКарт - ; +// *ДанныеДорожек - Структура: +// **Поле - Строка +// **ЗначениеПоля - Произвольный - +// +Функция РасшифроватьКодМагнитнойКарты(ДанныеДорожек, ПараметрыДорожек) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяШаблоныМагнитныхКарт() Тогда + ИмяМодуля = "Справочники.ШаблоныМагнитныхКарт"; + МодульШаблоныМагнитныхКарт = ОбщегоНазначенияБПО.ОбщийМодуль(ИмяМодуля); + Возврат МодульШаблоныМагнитныхКарт.РасшифроватьКодМагнитнойКарты(ДанныеДорожек, ПараметрыДорожек); + Иначе + ТекстСообщения = НСтр("ru='Выполнение команды невозможно, поскольку подсистема ""%Парам1%"" недоступна.'"); + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Парам1%", "СчитывателиМагнитныхКарт"); + ВызватьИсключение ТекстСообщения; + КонецЕсли; + +КонецФункции + +#КонецОбласти + diff --git a/CommonModules/ОборудованиеУстройстваВводаКлиент.xml b/CommonModules/ОборудованиеУстройстваВводаКлиент.xml new file mode 100644 index 0000000..d6fbc32 --- /dev/null +++ b/CommonModules/ОборудованиеУстройстваВводаКлиент.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеУстройстваВводаКлиент + + + ru + Оборудование устройства ввода клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеУстройстваВводаКлиент/Ext/Module.bsl b/CommonModules/ОборудованиеУстройстваВводаКлиент/Ext/Module.bsl new file mode 100644 index 0000000..4556188 --- /dev/null +++ b/CommonModules/ОборудованиеУстройстваВводаКлиент/Ext/Module.bsl @@ -0,0 +1,24 @@ + +#Область ПрограммныйИнтерфейс + +// Производит разложение данных дорожек магнитной карты по шаблонам. +// Параметры: +// ДанныеДорожек - Массив -- массив строк. Значения полученные из дорожек. +// ПараметрыДорожек - Массив - массив структур содержащих параметры настройки устройства, где: +// * Использовать - булево - признак использования дорожки. +// * НомерДорожки - число - порядковый номер дорожки 1-3. +// +// Возвращаемое значение: +// Массив из Структура: +// * Шаблон - СправочникСсылка.ШаблоныМагнитныхКарт - ; +// * ДанныеДорожек - Структура: +// ** Поле - Строка +// ** ЗначениеПоля - Произвольный - +// +Функция РасшифроватьКодМагнитнойКарты(ДанныеДорожек, ПараметрыДорожек) Экспорт; + + Возврат ОборудованиеУстройстваВводаВызовСервера.РасшифроватьКодМагнитнойКарты(ДанныеДорожек, ПараметрыДорожек); + +КонецФункции + +#КонецОбласти diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройства.xml b/CommonModules/ОборудованиеЧекопечатающиеУстройства.xml new file mode 100644 index 0000000..6e07d54 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройства.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеЧекопечатающиеУстройства + + + ru + Оборудование чекопечатающие устройства сервер + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройства/Ext/Module.bsl b/CommonModules/ОборудованиеЧекопечатающиеУстройства/Ext/Module.bsl new file mode 100644 index 0000000..58ede32 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройства/Ext/Module.bsl @@ -0,0 +1,4384 @@ + +#Область ПрограммныйИнтерфейс + +// Заполнить структуру фискализации чека +// +// Возвращаемое значение: +// Структура. +Функция ПараметрыФискализацииЧека() Экспорт + + ПараметрыФискализации = Новый Структура(); + + ПараметрыФискализации.Вставить("Кассир"); + ПараметрыФискализации.Вставить("КассирИНН"); + + ПараметрыФискализации.Вставить("ДокументОснование"); + ПараметрыФискализации.Вставить("ИдентификаторФискальнойЗаписи"); + + ПараметрыФискализации.Вставить("Организация"); + ПараметрыФискализации.Вставить("ТорговыйОбъект"); + ПараметрыФискализации.Вставить("КорректируемыйДокумент"); + ПараметрыФискализации.Вставить("ЕстьПерсональныеДанные", Ложь); + ПараметрыФискализации.Вставить("СубъектПерсональныхДанных"); + ПараметрыФискализации.Вставить("ТипПерсональныхДанных"); + + ПараметрыФискализации.Вставить("ТипРасчета"); + ПараметрыФискализации.Вставить("ТипДокумента"); + ПараметрыФискализации.Вставить("ТипИнкассации"); + + ПараметрыФискализации.Вставить("РевизияИнтерфейса"); + ПараметрыФискализации.Вставить("ШиринаСтроки"); + ПараметрыФискализации.Вставить("РегистрационныйНомерККТ"); + ПараметрыФискализации.Вставить("ЗаводскойНомерФН"); + ПараметрыФискализации.Вставить("ДополнительныйРеквизит"); + + ПараметрыФискализации.Вставить("НомерСменыККТ" , 0); // Номер смены. + ПараметрыФискализации.Вставить("НомерЧекаККТ" , 0); // Номер фискального чека. + ПараметрыФискализации.Вставить("НомерЧекаЗаСмену", 0); // Номер чека за смену. + ПараметрыФискализации.Вставить("ДатаВремяЧека"); // Дата и время фискализации чека на ККТ. + ПараметрыФискализации.Вставить("ТекущаяСмена"); + + ПараметрыФискализации.Вставить("СуммаЧека", 0); + ПараметрыФискализации.Вставить("ОплатаНаличные" , 0); + ПараметрыФискализации.Вставить("ОплатаЭлектронно", 0); + ПараметрыФискализации.Вставить("ОплатаПредоплата", 0); + ПараметрыФискализации.Вставить("ОплатаПостоплата", 0); + ПараметрыФискализации.Вставить("ОплатаВстречноеПредоставление", 0); + + ПараметрыФискализации.Вставить("ФискальныйПризнак" , ""); // Фискальный признак документа. + ПараметрыФискализации.Вставить("АдресСайтаПроверки", ""); // Адрес сайта проверки ФНС. + ПараметрыФискализации.Вставить("ОшибкаПечати" , Ложь); // Ошибка при печати бумажной формы чека + + ПараметрыФискализации.Вставить("Электронно" , Ложь); + ПараметрыФискализации.Вставить("Отправляет1СSMS" , Ложь); + ПараметрыФискализации.Вставить("Отправляет1СEmail", Ложь); + ПараметрыФискализации.Вставить("АвтономныйРежим" , Ложь); + ПараметрыФискализации.Вставить("ПокупательEmail" ); // Строка,Необязательно - Адрес электронной почты покупателя. + ПараметрыФискализации.Вставить("ПокупательНомер" ); // Строка,Необязательно - Телефонный номер покупателя. В формате +{Ц}. + + ПараметрыФискализации.Вставить("ДанныеЧекаXML"); + ПараметрыФискализации.Вставить("ДанныеЧекаXMLПерсональныеДанные"); + ПараметрыФискализации.Вставить("РезультатОперацииXML"); + ПараметрыФискализации.Вставить("ТекстСообщения"); + + ПараметрыФискализации.Вставить("ТекущееСостояние", ПараметрыФискальнойОперации()); + + ПараметрыФискализации.Вставить("ЧекКоррекцииСторно"); + ПараметрыФискализации.Вставить("СформироватьЧекКоррекцииСторно", Истина); + ПараметрыФискализации.Вставить("ЧекКоррекцииНаККТ", Истина); + + ПараметрыФискализации.Вставить("НеприменениеККТ", Истина); + ПараметрыФискализации.Вставить("ВерсияФФДККТ11" , Ложь); + + ПараметрыФискализации.Вставить("Результат", Истина); + ПараметрыФискализации.Вставить("ОперацияЗаписана", Истина); + ПараметрыФискализации.Вставить("ТекстОшибки"); + + ПараметрыФискализации.Вставить("СтатусСмены", 0); + ПараметрыФискализации.Вставить("ТестовыеЧеки", Новый Массив); + ПараметрыФискализации.Вставить("ТекстЧека"); + ПараметрыФискализации.Вставить("КопияЧека", Новый Массив); + ПараметрыФискализации.Вставить("ДополнительныеДокументы", Новый Массив); + + ПараметрыФискализации.Вставить("ЕдиныйЧек", Ложь); + + ПараметрыФискализации.Вставить("ИдентификаторОплатыПлатежнойСистемы"); + ПараметрыФискализации.Вставить("ТипПлатежнойСистемы"); + + ПараметрыФискализации.Вставить("ДетализацияОплатыДобавлено", Ложь); + ПараметрыФискализации.Вставить("QRКодДобавлено", Ложь); + + ПараметрыФискализации.Вставить("ШтрихкодыПродукции", Новый Соответствие); + Возврат ПараметрыФискализации; + +КонецФункции + +// Параметры фискальной операции. +// +// Возвращаемое значение: +// см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойОперации. +Функция ПараметрыФискальнойОперации() Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойОперации(); + +КонецФункции + +#Область ПараметрыРегистрации + +// Процедура предназначена для сохранения параметров регистрации устройства +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства - +// ПараметрыРегистрации - Структура - +// +// Возвращаемое значение: +// Булево. +Функция СохранитьПараметрыРегистрацииУстройства(Идентификатор, ПараметрыРегистрации) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 + | ПодключаемоеОборудование.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.Ссылка = &Идентификатор"); + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Результат = Ложь; + Возврат Результат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + БлокировкаДанных = Новый БлокировкаДанных(); + ЭлементБлокировки = БлокировкаДанных.Добавить("Справочник.ПодключаемоеОборудование"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Ссылка", Идентификатор); + БлокировкаДанных.Заблокировать(); + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + ОбъектСсылка = Выборка.Ссылка; // СправочникСсылка.ПодключаемоеОборудование + ОбъектСправочника = ОбъектСсылка.ПолучитьОбъект(); + ОбъектСправочника.ПараметрыРегистрации.Очистить(); + Для Каждого ПараметрРегистрации Из ПараметрыРегистрации Цикл + НоваяСтрока = ОбъектСправочника.ПараметрыРегистрации.Добавить(); + НоваяСтрока.НаименованиеПараметра = ПараметрРегистрации.Ключ; + Если ТипЗнч(ПараметрРегистрации.Значение) = Тип("Булево") Тогда + НоваяСтрока.ЗначениеПараметра = XMLСтрока(ПараметрРегистрации.Значение); + Иначе + НоваяСтрока.ЗначениеПараметра = ПараметрРегистрации.Значение; + КонецЕсли; + КонецЦикла; + ОбъектСправочника.Записать(); + Результат = Истина; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Результат = Ложь; + КонецПопытки; + + УстановитьПривилегированныйРежим(Ложь); + + Возврат Результат; + +КонецФункции + +// Функция возвращает по идентификатору устройства параметры регистрации. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыРегистрацииУстройства(Идентификатор) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПодключаемоеОборудование.Ссылка КАК Ссылка, + | ПодключаемоеОборудованиеПараметрыРегистрации.НаименованиеПараметра КАК НаименованиеПараметра, + | ПодключаемоеОборудованиеПараметрыРегистрации.ЗначениеПараметра КАК ЗначениеПараметра + |ИЗ + | Справочник.ПодключаемоеОборудование.ПараметрыРегистрации КАК ПодключаемоеОборудованиеПараметрыРегистрации + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + | ПО ПодключаемоеОборудованиеПараметрыРегистрации.Ссылка = ПодключаемоеОборудование.Ссылка + |ГДЕ + | (ПодключаемоеОборудование.Ссылка = &Идентификатор)"; + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + + РезультатЗапроса = Запрос.Выполнить(); + + ЕстьДанные = Ложь; + ДанныеХранения = Новый Структура(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + // Вставить обработку выборки ВыборкаДетальныеЗаписи + ДанныеХранения.Вставить(ВыборкаДетальныеЗаписи.НаименованиеПараметра, ВыборкаДетальныеЗаписи.ЗначениеПараметра); + ЕстьДанные = Истина; + КонецЦикла; + + РезультатОперации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыРегистрацииККТ(); + РезультатОперации.Вставить("ЕстьДанные", ЕстьДанные); + + Если ЕстьДанные Тогда + РезультатОперации.РегистрационныйНомерККТ = ДанныеХранения.РегистрационныйНомерККТ; + РезультатОперации.ОрганизацияНазвание = ДанныеХранения.ОрганизацияНазвание; + РезультатОперации.ОрганизацияИНН = ДанныеХранения.ОрганизацияИНН; + + Если ДанныеХранения.Свойство("АдресПроведенияРасчетов") Тогда + РезультатОперации.АдресПроведенияРасчетов = ДанныеХранения.АдресПроведенияРасчетов; + КонецЕсли; + Если ДанныеХранения.Свойство("МестоПроведенияРасчетов") Тогда + РезультатОперации.МестоПроведенияРасчетов = ДанныеХранения.МестоПроведенияРасчетов; + КонецЕсли; + + РезультатОперации.КодыСистемыНалогообложения = ДанныеХранения.КодыСистемыНалогообложения; + + Если ДанныеХранения.Свойство("ПризнакАвтономногоРежима") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакАвтономногоРежима) Тогда + РезультатОперации.ПризнакАвтономногоРежима = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакАвтономногоРежима); + КонецЕсли; + Если ДанныеХранения.Свойство("ПризнакШифрованиеДанных") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакШифрованиеДанных) Тогда + РезультатОперации.ПризнакШифрованиеДанных = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакШифрованиеДанных); + КонецЕсли; + Если ДанныеХранения.Свойство("ПризнакРасчетовЗаУслуги") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакРасчетовЗаУслуги) Тогда + РезультатОперации.ПризнакАвтономногоРежима = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакАвтономногоРежима); + КонецЕсли; + Если ДанныеХранения.Свойство("ПризнакФормированияБСО") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакФормированияБСО) Тогда + РезультатОперации.ПризнакФормированияБСО = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакФормированияБСО); + КонецЕсли; + Если ДанныеХранения.Свойство("ПризнакРасчетовТолькоВИнтернет") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакРасчетовТолькоВИнтернет) Тогда + РезультатОперации.ПризнакРасчетовТолькоВИнтернет = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакРасчетовТолькоВИнтернет); + КонецЕсли; + Если ДанныеХранения.Свойство("ПродажаПодакцизногоТовара") И НЕ ПустаяСтрока(ДанныеХранения.ПродажаПодакцизногоТовара) Тогда + РезультатОперации.ПродажаПодакцизногоТовара = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПродажаПодакцизногоТовара); + КонецЕсли; + Если ДанныеХранения.Свойство("ПроведенияАзартныхИгр") И НЕ ПустаяСтрока(ДанныеХранения.ПроведенияАзартныхИгр) Тогда + РезультатОперации.ПроведенияАзартныхИгр = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПроведенияАзартныхИгр); + КонецЕсли; + Если ДанныеХранения.Свойство("ПроведенияЛотерей") И НЕ ПустаяСтрока(ДанныеХранения.ПроведенияЛотерей) Тогда + РезультатОперации.ПроведенияЛотерей = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПроведенияЛотерей); + КонецЕсли; + Если ДанныеХранения.Свойство("УстановкаПринтераВАвтомате") И НЕ ПустаяСтрока(ДанныеХранения.УстановкаПринтераВАвтомате) Тогда + РезультатОперации.УстановкаПринтераВАвтомате = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.УстановкаПринтераВАвтомате); + КонецЕсли; + Если ДанныеХранения.Свойство("ПризнакАвтоматическогоТорговогоАвтомата") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакАвтоматическогоТорговогоАвтомата) Тогда + РезультатОперации.ПризнакАвтоматическогоТорговогоАвтомата = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакАвтоматическогоТорговогоАвтомата); + КонецЕсли; + Если ДанныеХранения.Свойство("ПризнакОказанииУслугОбщественногоПитания") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакОказанииУслугОбщественногоПитания) Тогда + РезультатОперации.ПризнакОказанииУслугОбщественногоПитания = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакОказанииУслугОбщественногоПитания); + КонецЕсли; + Если ДанныеХранения.Свойство("ПризнакОптовойТорговлиСОрганизациями") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакОптовойТорговлиСОрганизациями) Тогда + РезультатОперации.ПризнакОптовойТорговлиСОрганизациями = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакОптовойТорговлиСОрганизациями); + КонецЕсли; + + Если ДанныеХранения.Свойство("ПризнакиАгента") Тогда + РезультатОперации.ПризнакиАгента = ДанныеХранения.ПризнакиАгента; + КонецЕсли; + + РезультатОперации.НомерАвтоматаДляАвтоматическогоРежима = ДанныеХранения.НомерАвтоматаДляАвтоматическогоРежима; + РезультатОперации.ОрганизацияОФДИНН = ДанныеХранения.ОрганизацияОФДИНН; + РезультатОперации.ОрганизацияОФДНазвание = ДанныеХранения.ОрганизацияОФДНазвание; + РезультатОперации.ЗаводскойНомерККТ = ДанныеХранения.ЗаводскойНомерККТ; + РезультатОперации.ЗаводскойНомерФН = ДанныеХранения.ЗаводскойНомерФН; + РезультатОперации.ВерсияФФДККТ = ДанныеХранения.ВерсияФФДККТ; + РезультатОперации.ВерсияФФДФН = ДанныеХранения.ВерсияФФДФН; + Если ДанныеХранения.Свойство("ПризнакФискализации") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакФискализации) Тогда + РезультатОперации.ПризнакФискализации = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакФискализации); + КонецЕсли; + КонецЕсли; + + Возврат РезультатОперации; + +КонецФункции + +// Обновляет параметры регистрации ККТ +// +// Параметры: +// ПараметрыРегистрацииТаблица - ТаблицаЗначений - +// ПараметрыРегистрации - ТаблицаЗначений - +Процедура ОбновитьПараметрыРегистрацииККТ(ПараметрыРегистрацииТаблица, ПараметрыРегистрации) Экспорт + + Для Каждого ПараметрРегистрации Из ПараметрыРегистрации Цикл + + Параметр = ПараметрыРегистрацииТаблица.Добавить(); + НаименованиеПараметра = ПараметрРегистрации.НаименованиеПараметра; + ЗначениеПараметра = ПараметрРегистрации.ЗначениеПараметра; + + Если НаименованиеПараметра = "РегистрационныйНомерККТ" Тогда + НаименованиеПараметра = НСтр("ru='Регистрационный номер ККТ'") + ИначеЕсли НаименованиеПараметра = "ОрганизацияНазвание" Тогда + НаименованиеПараметра = НСтр("ru='Название организации'") + ИначеЕсли НаименованиеПараметра = "ОрганизацияИНН" Тогда + НаименованиеПараметра = НСтр("ru='ИНН организации'") + ИначеЕсли НаименованиеПараметра = "АдресПроведенияРасчетов" Тогда + НаименованиеПараметра = НСтр("ru='Адрес проведения расчетов'") + ИначеЕсли НаименованиеПараметра = "КодыСистемыНалогообложения" Тогда + НаименованиеПараметра = НСтр("ru='Системы налогообложения'"); + СистемыНалогообложения = СтрРазделить(ЗначениеПараметра, ","); + ЗначениеПараметра = ""; + Для Каждого СистемаНалогообложения Из СистемыНалогообложения Цикл + ЗначениеПараметра = ?(Не ПустаяСтрока(ЗначениеПараметра), ЗначениеПараметра + ",", ""); + Если Не ПустаяСтрока(СистемаНалогообложения) Тогда + ЗначениеПараметра = ЗначениеПараметра + """"+ ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеСистемыНалогообложения(Число(СистемаНалогообложения)) + """"; + КонецЕсли; + КонецЦикла; + ИначеЕсли НаименованиеПараметра = "ПризнакАвтономногоРежима" Тогда + НаименованиеПараметра = НСтр("ru='Автономный режим'") + ИначеЕсли НаименованиеПараметра = "ПризнакАвтоматическогоРежима" Тогда + НаименованиеПараметра = НСтр("ru='Автоматический режим'") + ИначеЕсли НаименованиеПараметра = "НомерАвтоматаДляАвтоматическогоРежима" Тогда + НаименованиеПараметра = НСтр("ru='Номер автомата для автоматического режима'") + ИначеЕсли НаименованиеПараметра = "ПризнакШифрованиеДанных" Тогда + НаименованиеПараметра = НСтр("ru='Шифрование данных'") + ИначеЕсли НаименованиеПараметра = "ПризнакРасчетовЗаУслуги" Тогда + НаименованиеПараметра = НСтр("ru='Расчет за услуги'") + ИначеЕсли НаименованиеПараметра = "ПризнакФормированияБСО" Тогда + НаименованиеПараметра = НСтр("ru='Формирования БСО'") + ИначеЕсли НаименованиеПараметра = "ПризнакРасчетовТолькоВИнтернет" Тогда + НаименованиеПараметра = НСтр("ru='Расчет только в интернет'") + ИначеЕсли НаименованиеПараметра = "ОрганизацияОФДИНН" Тогда + НаименованиеПараметра = НСтр("ru='ОФД ИНН'") + ИначеЕсли НаименованиеПараметра = "ОрганизацияОФДНазвание" Тогда + НаименованиеПараметра = НСтр("ru='Наименование ОФД'") + ИначеЕсли НаименованиеПараметра = "ЗаводскойНомерККТ" Тогда + НаименованиеПараметра = НСтр("ru='Заводской номер ККТ'") + ИначеЕсли НаименованиеПараметра = "ПризнакФискализации" Тогда + НаименованиеПараметра = НСтр("ru='Признак фискализации'") + ИначеЕсли НаименованиеПараметра = "ЗаводскойНомерФН" Тогда + НаименованиеПараметра = НСтр("ru='Заводской номер ФН'") + ИначеЕсли НаименованиеПараметра = "НомерДокументаФискализации" Тогда + НаименованиеПараметра = НСтр("ru='Номер документа фискализации'") + ИначеЕсли НаименованиеПараметра = "ДатаВремяФискализации" Тогда + НаименованиеПараметра = НСтр("ru='Дата и время фискализации'") + ИначеЕсли НаименованиеПараметра = "ВерсияФФДККТ" Тогда + НаименованиеПараметра = НСтр("ru='Версия ФФД ККТ'") + ИначеЕсли НаименованиеПараметра = "ВерсияФФДФН" Тогда + НаименованиеПараметра = НСтр("ru='Версия ФФД ФН'") + // ФФД 1.05 и ФФД 1.1 + ИначеЕсли НаименованиеПараметра = "МестоПроведенияРасчетов" Тогда + НаименованиеПараметра = НСтр("ru='Место проведения расчетов'") + ИначеЕсли НаименованиеПараметра = "ПродажаПодакцизногоТовара" Тогда + НаименованиеПараметра = НСтр("ru='Продажа подакцизного товара'") + ИначеЕсли НаименованиеПараметра = "ПроведенияАзартныхИгр" Тогда + НаименованиеПараметра = НСтр("ru='Проведения азартных игр'") + ИначеЕсли НаименованиеПараметра = "ПроведенияЛотерей" Тогда + НаименованиеПараметра = НСтр("ru='Проведения лотерей'") + ИначеЕсли НаименованиеПараметра = "ПризнакиАгента" Тогда + НаименованиеПараметра = НСтр("ru='Признаки агента'") + ИначеЕсли НаименованиеПараметра = "УстановкаПринтераВАвтомате" Тогда + НаименованиеПараметра = НСтр("ru='Установка принтера в автомате'") + // ФФД 1.2 + ИначеЕсли НаименованиеПараметра = "ПроведенияРасчетаВИнтернет" Тогда + НаименованиеПараметра = НСтр("ru='Проведения расчета в интернет'") + ИначеЕсли НаименованиеПараметра = "ПродажаМаркированныхТоваров" Тогда + НаименованиеПараметра = НСтр("ru='Продажа маркированных товаров'") + ИначеЕсли НаименованиеПараметра = "ПризнакПримененияЛомбардами" Тогда + НаименованиеПараметра = НСтр("ru='Применения ломбардами'") + ИначеЕсли НаименованиеПараметра = "ПризнакДеятельностиПоСтрахованию" Тогда + НаименованиеПараметра = НСтр("ru='Деятельность по страхованию'") + // ФФД 1.2 - Приказ ФНС России от 12.04.2023 N ЕД-7-20/239@ + ИначеЕсли НаименованиеПараметра = "ПризнакАвтоматическогоТорговогоАвтомата" Тогда + НаименованиеПараметра = НСтр("ru='Применение в автоматическом торговом автомате'") + ИначеЕсли НаименованиеПараметра = "ПризнакОказанииУслугОбщественногоПитания" Тогда + НаименованиеПараметра = НСтр("ru='Оказании услуг общественного питания'") + ИначеЕсли НаименованиеПараметра = "ПризнакОптовойТорговлиСОрганизациями" Тогда + НаименованиеПараметра = НСтр("ru='Оптовая торговля с организациями и ИП'") + КонецЕсли; + Параметр.НаименованиеПараметра = НаименованиеПараметра; + Параметр.ЗначениеПараметра = ЗначениеПараметра; + КонецЦикла; + +КонецПроцедуры + +// Функция возвращает поддерживает ли фискальное устройство. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства +// +// Возвращаемое значение: +// Булево - Фискальное устройство поддерживает проверку кодов маркировки +Функция ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ИдентификаторУстройства) Экспорт + + Результат = Ложь; + ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ИдентификаторУстройства); + Если ПараметрыРегистрации <> Неопределено Тогда + Результат = ПараметрыРегистрации.Свойство("ВерсияФФДККТ") И ПараметрыРегистрации.ВерсияФФДККТ = "1.2" + И ПараметрыРегистрации.Свойство("ВерсияФФДФН") И ПараметрыРегистрации.ВерсияФФДФН = "1.2"; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Функция возвращает для фискального устройства версию ФФД. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства. +// +// Возвращаемое значение: +// Неопределено - Фискальное устройство поддерживает версию ФФД +Функция ФискальноеУстройствоПоддерживаетВерсиюФФД(ИдентификаторУстройства) Экспорт + + Результат = Неопределено; + ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ИдентификаторУстройства); + Если ПараметрыРегистрации <> Неопределено И ПараметрыРегистрации.Свойство("ВерсияФФДККТ") Тогда + Результат = ПараметрыРегистрации.ВерсияФФДККТ; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ФискальныеОперации + +// Записать операцию в журнал фискальных операций. +// +// Параметры: +// ПараметрыФискализации - Структура - +Процедура ЗаписатьФискальнуюОперацию(ПараметрыФискализации) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ПустаяСтрока(ПараметрыФискализации.ИдентификаторФискальнойЗаписи) Тогда + ИдентификаторЗаписи = Строка(Новый УникальныйИдентификатор); + ПараметрыФискализации.ИдентификаторФискальнойЗаписи = ИдентификаторЗаписи; + Иначе + ИдентификаторЗаписи = ПараметрыФискализации.ИдентификаторФискальнойЗаписи; + КонецЕсли; + // ФискальныеОперации + НаборЗаписей = РегистрыСведений.ФискальныеОперации.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ДокументОснование.Установить(ПараметрыФискализации.ДокументОснование, Истина); + НаборЗаписей.Отбор.ИдентификаторЗаписи.Установить(ИдентификаторЗаписи, Истина); + + НоваяСтрока = НаборЗаписей.Добавить(); + НоваяСтрока.Дата = ПараметрыФискализации.ДатаВремяЧека; + НоваяСтрока.ИдентификаторЗаписи = ИдентификаторЗаписи; + НоваяСтрока.ДокументОснование = ПараметрыФискализации.ДокументОснование; + НоваяСтрока.ФискальныйПризнак = ПараметрыФискализации.ФискальныйПризнак; + НоваяСтрока.ТипДокумента = ПараметрыФискализации.ТипДокумента; + НоваяСтрока.Организация = ПараметрыФискализации.Организация; + НоваяСтрока.ТорговыйОбъект = ПараметрыФискализации.ТорговыйОбъект; + НоваяСтрока.ТипРасчета = ПараметрыФискализации.ТипРасчета; + НоваяСтрока.НомерСменыККМ = ПараметрыФискализации.НомерСменыККТ; + НоваяСтрока.НомерЧекаККМ = ПараметрыФискализации.НомерЧекаККТ; + НоваяСтрока.Сумма = ПараметрыФискализации.СуммаЧека; + НоваяСтрока.ОплатаНаличные = ПараметрыФискализации.ОплатаНаличные; + НоваяСтрока.ОплатаЭлектронно = ПараметрыФискализации.ОплатаЭлектронно; + НоваяСтрока.ОплатаПостоплата = ПараметрыФискализации.ОплатаПостоплата; + НоваяСтрока.ОплатаПредоплата = ПараметрыФискализации.ОплатаПредоплата; + НоваяСтрока.ОплатаВстречноеПредоставление = ПараметрыФискализации.ОплатаВстречноеПредоставление; + НоваяСтрока.ДополнительныйРеквизит = ПараметрыФискализации.ДополнительныйРеквизит; + НоваяСтрока.АдресСайтаПроверки = ПараметрыФискализации.АдресСайтаПроверки; + НоваяСтрока.ЗаводскойНомерФН = ПараметрыФискализации.ЗаводскойНомерФН; + НоваяСтрока.РегистрационныйНомерККТ = ПараметрыФискализации.РегистрационныйНомерККТ; + НоваяСтрока.КорректируемыйДокумент = ПараметрыФискализации.КорректируемыйДокумент; + НоваяСтрока.СубъектПерсональныхДанных = ПараметрыФискализации.СубъектПерсональныхДанных; + НоваяСтрока.ЕдиныйЧек = ПараметрыФискализации.ЕдиныйЧек; + НоваяСтрока.ТипПлатежнойСистемы = ПараметрыФискализации.ТипПлатежнойСистемы; + НоваяСтрока.ИдентификаторОплатыПлатежнойСистемы = ПараметрыФискализации.ИдентификаторОплатыПлатежнойСистемы; + Если ПараметрыФискализации.ДанныеЧекаXML <> Неопределено Тогда + НоваяСтрока.ДанныеXML = Новый ХранилищеЗначения(ПараметрыФискализации.ДанныеЧекаXML); + КонецЕсли; + + НаборЗаписей.Записать(); + + Если ПараметрыФискализации.Свойство("ЗаписьОперацииКМ") Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + ПараметрыЗаписи = МодульМенеджерОборудованияМаркировка.ПараметрыЗаписиРезультатаПроверкиКМ(); + ПараметрыЗаписи.Ключ.ИдентификаторСессии = ПараметрыФискализации.ЗаписьОперацииКМ.ИдентификаторСессии; + ПараметрыЗаписи.Ключ.ИдентификаторЗапроса = ПараметрыФискализации.ЗаписьОперацииКМ.ИдентификаторЗапроса; + Если ПараметрыФискализации.ЗаписьОперацииКМ.ВыполнялосьПодтверждениеПокупки Тогда + ПараметрыЗаписи.ПокупкаПодтверждена = Истина; + КонецЕсли; + МодульМенеджерОборудованияМаркировка.ОбновитьРезультатыПроверкиКодаМаркировкиВРегистре(ПараметрыЗаписи); + МодульМенеджерОборудованияМаркировка.ОбновитьИдентификаторФискальнойОперацииРезультатаПроверкиКодаМаркировки( + ПараметрыФискализации.ЗаписьОперацииКМ.ИдентификаторСессии, ИдентификаторЗаписи); + КонецЕсли; + + Если ПараметрыФискализации.Свойство("ЗаписьОперацииЕГАИС") Тогда + + ЗаписьОперацииЕГАИС = ПараметрыФискализации.ЗаписьОперацииЕГАИС; + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + ПараметрыЗаписи = МодульМенеджерОборудованияМаркировка.ПараметрыЗаписиРезультатаПроверкиЕГАИС();; + ПараметрыЗаписи.ИдентификаторФискальнойОперации = ИдентификаторЗаписи; + ПараметрыЗаписи.Выполнено = ЗаписьОперацииЕГАИС.Выполнено; + ПараметрыЗаписи.ШтрихкодыПродукции = ПараметрыФискализации.ШтрихкодыПродукции; + ПараметрыЗаписи.ИдентификаторЗапроса = ЗаписьОперацииЕГАИС.АдресЧека; + ПараметрыЗаписи.ПодписьЧека = ЗаписьОперацииЕГАИС.ПодписьЧека; + ПараметрыЗаписи.ВходящееСообщение = ЗаписьОперацииЕГАИС.ВходящееСообщение; + ПараметрыЗаписи.ИсходящееСообщение = ЗаписьОперацииЕГАИС.ИсходящееСообщение; + ПараметрыЗаписи.СообщениеПередано = ЗаписьОперацииЕГАИС.СообщениеПередано; + ПараметрыЗаписи.ТекстОшибки = ЗаписьОперацииЕГАИС.ОписаниеОшибки; + МодульМенеджерОборудованияМаркировка.ДобавитьРезультатыОтправкиЕГАИС(ПараметрыЗаписи); + + КонецЕсли; + +КонецПроцедуры + +// АПК: 142-выкл обратная совместимость + +// Получить данные журнала фискальных операций. +// +// Параметры: +// ДокументСсылка - ДокументСсылка - Документ-основание. +// ИдентификаторЗаписи - РегистрСведенийЗапись.ФискальныеОперации - запись фискальной операции. +// ТипыДокументов - ПеречислениеСсылка.ТипыФискальныхДокументовККТ - типы документов. +// ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - тип расчета. +// ФискальныйПризнак - Строка - Фискальный признак документа +// +// Возвращаемое значение: +// Структура - Структура по свойствами: +// * НомерСменыККМ - Число - Номер чека ККМ. +// * Сумма - Число - Сумма. +// * ДокументОснование - ДокументСсылка - Документ-основание. +// * ДанныеXML - ХранилищеЗначения - Данные чека, переданные в ККТ (XML). +// +Функция ДанныеФискальнойОперации(ДокументСсылка, ИдентификаторЗаписи = Неопределено, ТипыДокументов = Неопределено, ТипРасчета = Неопределено, ФискальныйПризнак = Неопределено) Экспорт + + ФискальнаяОперация = Неопределено; + + Если Не (ЗначениеЗаполнено(ДокументСсылка) + Или ЗначениеЗаполнено(ИдентификаторЗаписи) + Или ЗначениеЗаполнено(ТипыДокументов) + Или ЗначениеЗаполнено(ТипРасчета) + Или ЗначениеЗаполнено(ФискальныйПризнак)) Тогда + Возврат ФискальнаяОперация; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ФискальныеОперации.ИдентификаторЗаписи КАК ИдентификаторЗаписи, + | ФискальныеОперации.Дата КАК Дата, + | ФискальныеОперации.НомерЧекаККМ КАК НомерЧекаККМ, + | ФискальныеОперации.НомерСменыККМ КАК НомерСменыККМ, + | ФискальныеОперации.ТипДокумента КАК ТипДокумента, + | ФискальныеОперации.ТипРасчета КАК ТипРасчета, + | ФискальныеОперации.Организация КАК Организация, + | ФискальныеОперации.ТорговыйОбъект КАК ТорговыйОбъект, + | ФискальныеОперации.ЗаводскойНомерФН КАК ЗаводскойНомерФН, + | ФискальныеОперации.РегистрационныйНомерККТ КАК РегистрационныйНомерККТ, + | ФискальныеОперации.ДокументОснование КАК ДокументОснование, + | ФискальныеОперации.КорректируемыйДокумент КАК КорректируемыйДокумент, + | ФискальныеОперации.Сумма КАК Сумма, + | ФискальныеОперации.ФискальныйПризнак КАК ФискальныйПризнак, + | ФискальныеОперации.ДополнительныйРеквизит КАК ДополнительныйРеквизит, + | ФискальныеОперации.ЕдиныйЧек КАК ЕдиныйЧек, + | ФискальныеОперации.ИдентификаторОплатыПлатежнойСистемы КАК ИдентификаторОплатыПлатежнойСистемы, + | ФискальныеОперации.ТипПлатежнойСистемы КАК ТипПлатежнойСистемы, + | ФискальныеОперации.ДанныеXML КАК ДанныеXML + |ИЗ + | РегистрСведений.ФискальныеОперации КАК ФискальныеОперации + |ГДЕ ИСТИНА " + + ?(ЗначениеЗаполнено(ДокументСсылка), " И (ФискальныеОперации.ДокументОснование = &ДокументСсылка)", "") + + ?(ИдентификаторЗаписи = Неопределено, "", " И (ФискальныеОперации.ИдентификаторЗаписи = &ИдентификаторЗаписи)") + + ?(ТипыДокументов = Неопределено, "", " И (ФискальныеОперации.ТипДокумента В (&ТипыДокументов))") + + ?(ТипРасчета = Неопределено, "", " И (ФискальныеОперации.ТипРасчета = &ТипРасчета)") + + ?(ФискальныйПризнак = Неопределено, "", " И (ФискальныеОперации.ФискальныйПризнак = &ФискальныйПризнак)") + + " УПОРЯДОЧИТЬ ПО ФискальныеОперации.Дата УБЫВ, ФискальныеОперации.НомерСменыККМ УБЫВ"); + + Если ЗначениеЗаполнено(ДокументСсылка) Тогда + Запрос.УстановитьПараметр("ДокументСсылка", ДокументСсылка); + КонецЕсли; + + Если ИдентификаторЗаписи <> Неопределено Тогда + Запрос.УстановитьПараметр("ИдентификаторЗаписи", ИдентификаторЗаписи); + КонецЕсли; + + Если ТипыДокументов <> Неопределено Тогда + // Подготовка типов документов для запроса. + МассивТипыДокументов = Новый Массив(); + Если ТипЗнч(ТипыДокументов) = Тип("Массив") Тогда + Для Каждого ТипДокумента Из ТипыДокументов Цикл + МассивТипыДокументов.Добавить(ТипДокумента); + КонецЦикла; + Иначе + МассивТипыДокументов.Добавить(ТипыДокументов); + КонецЕсли; + Запрос.УстановитьПараметр("ТипыДокументов", МассивТипыДокументов); + КонецЕсли; + + Если ТипРасчета <> Неопределено Тогда + Запрос.УстановитьПараметр("ТипРасчета", ТипРасчета); + КонецЕсли; + + Если ФискальныйПризнак <> Неопределено Тогда + Запрос.УстановитьПараметр("ФискальныйПризнак", ФискальныйПризнак); + КонецЕсли; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ФискальнаяОперация = Новый Структура; + ФискальнаяОперация.Вставить("ИдентификаторЗаписи"); + ФискальнаяОперация.Вставить("Дата"); + ФискальнаяОперация.Вставить("НомерЧекаККМ"); + ФискальнаяОперация.Вставить("НомерСменыККМ"); + ФискальнаяОперация.Вставить("ЗаводскойНомерФН"); + ФискальнаяОперация.Вставить("РегистрационныйНомерККТ"); + ФискальнаяОперация.Вставить("ТипДокумента"); + ФискальнаяОперация.Вставить("ТипРасчета"); + ФискальнаяОперация.Вставить("Организация"); + ФискальнаяОперация.Вставить("ТорговыйОбъект"); + ФискальнаяОперация.Вставить("Сумма"); + ФискальнаяОперация.Вставить("ДокументОснование"); + ФискальнаяОперация.Вставить("КорректируемыйДокумент"); + ФискальнаяОперация.Вставить("ФискальныйПризнак"); + ФискальнаяОперация.Вставить("ДополнительныйРеквизит"); + ФискальнаяОперация.Вставить("ЕдиныйЧек"); + ФискальнаяОперация.Вставить("ДанныеXML"); + ФискальнаяОперация.Вставить("ИдентификаторОплатыПлатежнойСистемы"); + ФискальнаяОперация.Вставить("ТипПлатежнойСистемы"); + ЗаполнитьЗначенияСвойств(ФискальнаяОперация, Выборка); + КонецЕсли; + + Возврат ФискальнаяОперация; + +КонецФункции + +// АПК: 142-вкл + +// Получить данные журнала фискальных операций. +// +// Параметры: +// ИдентификаторЗаписи - РегистрСведенийЗапись.ФискальныеОперации - Идентификатор записи. +// +// Возвращаемое значение: +// РегистрСведенийЗапись.ФискальныеОперации. +Функция ФискальнаяОперацииПоИдентификатору(ИдентификаторЗаписи) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ФискальныеОперации.ИдентификаторЗаписи КАК ИдентификаторЗаписи, + | ФискальныеОперации.Дата КАК Дата, + | ФискальныеОперации.НомерЧекаККМ КАК НомерЧекаККМ, + | ФискальныеОперации.НомерСменыККМ КАК НомерСменыККМ, + | ФискальныеОперации.ТипДокумента КАК ТипДокумента, + | ФискальныеОперации.ТипРасчета КАК ТипРасчета, + | ФискальныеОперации.Организация КАК Организация, + | ФискальныеОперации.ТорговыйОбъект КАК ТорговыйОбъект, + | ФискальныеОперации.ЗаводскойНомерФН КАК ЗаводскойНомерФН, + | ФискальныеОперации.РегистрационныйНомерККТ КАК РегистрационныйНомерККТ, + | ФискальныеОперации.ДокументОснование КАК ДокументОснование, + | ФискальныеОперации.КорректируемыйДокумент КАК КорректируемыйДокумент, + | ФискальныеОперации.Сумма КАК Сумма, + | ФискальныеОперации.ФискальныйПризнак КАК ФискальныйПризнак, + | ФискальныеОперации.ДополнительныйРеквизит КАК ДополнительныйРеквизит, + | ФискальныеОперации.ЕдиныйЧек КАК ЕдиныйЧек, + | ФискальныеОперации.ИдентификаторОплатыПлатежнойСистемы КАК ИдентификаторОплатыПлатежнойСистемы, + | ФискальныеОперации.ТипПлатежнойСистемы КАК ТипПлатежнойСистемы, + | ФискальныеОперации.ДанныеXML КАК ДанныеXML + |ИЗ + | РегистрСведений.ФискальныеОперации КАК ФискальныеОперации + |ГДЕ + | (ИдентификаторЗаписи = &ИдентификаторЗаписи)"); + + Запрос.УстановитьПараметр("ИдентификаторЗаписи", ИдентификаторЗаписи); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ФискальнаяОперация = Новый Структура; + ФискальнаяОперация.Вставить("ИдентификаторЗаписи"); + ФискальнаяОперация.Вставить("Дата"); + ФискальнаяОперация.Вставить("НомерЧекаККМ"); + ФискальнаяОперация.Вставить("НомерСменыККМ"); + ФискальнаяОперация.Вставить("ЗаводскойНомерФН"); + ФискальнаяОперация.Вставить("РегистрационныйНомерККТ"); + ФискальнаяОперация.Вставить("ТипДокумента"); + ФискальнаяОперация.Вставить("ТипРасчета"); + ФискальнаяОперация.Вставить("Организация"); + ФискальнаяОперация.Вставить("ТорговыйОбъект"); + ФискальнаяОперация.Вставить("Сумма"); + ФискальнаяОперация.Вставить("ДокументОснование"); + ФискальнаяОперация.Вставить("КорректируемыйДокумент"); + ФискальнаяОперация.Вставить("ФискальныйПризнак"); + ФискальнаяОперация.Вставить("ДополнительныйРеквизит"); + ФискальнаяОперация.Вставить("ЕдиныйЧек"); + ФискальнаяОперация.Вставить("ДанныеXML"); + ФискальнаяОперация.Вставить("ИдентификаторОплатыПлатежнойСистемы"); + ФискальнаяОперация.Вставить("ТипПлатежнойСистемы"); + ЗаполнитьЗначенияСвойств(ФискальнаяОперация, Выборка); + Возврат ФискальнаяОперация; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Получить список журнала фискальных операций. +// +// Параметры: +// ДокументСсылка - ДокументСсылка - Документ-основание. +// ТипыДокументов - ПеречислениеСсылка.ТипыФискальныхДокументовККТ - типы фискальных документов. +// ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - типы расчета. +// +// Возвращаемое значение: +// Массив Из Структура - Структура по свойствами: +// * НомерСменыККМ - Число - Номер чека ККМ. +// * Сумма - Число - Сумма. +// * ДокументОснование - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО - Документ-основание. +// * ДанныеXML - ХранилищеЗначения - Данные чека, переданные в ККТ (XML). +// +Функция СписокФискальныхОпераций(ДокументСсылка, ТипыДокументов = Неопределено, ТипРасчета = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ФискальныеОперации.ИдентификаторЗаписи КАК ИдентификаторЗаписи, + | ФискальныеОперации.НомерЧекаККМ КАК НомерЧекаККМ, + | ФискальныеОперации.НомерСменыККМ КАК НомерСменыККМ, + | ФискальныеОперации.ТипДокумента КАК ТипДокумента, + | ФискальныеОперации.ТипРасчета КАК ТипРасчета, + | ФискальныеОперации.Организация КАК Организация, + | ФискальныеОперации.ТорговыйОбъект КАК ТорговыйОбъект, + | ФискальныеОперации.ЗаводскойНомерФН КАК ЗаводскойНомерФН, + | ФискальныеОперации.РегистрационныйНомерККТ КАК РегистрационныйНомерККТ, + | ФискальныеОперации.ДокументОснование КАК ДокументОснование, + | ФискальныеОперации.КорректируемыйДокумент КАК КорректируемыйДокумент, + | ФискальныеОперации.Сумма КАК Сумма, + | ФискальныеОперации.ФискальныйПризнак КАК ФискальныйПризнак, + | ФискальныеОперации.ДополнительныйРеквизит КАК ДополнительныйРеквизит, + | ФискальныеОперации.ДанныеXML КАК ДанныеXML + |ИЗ + | РегистрСведений.ФискальныеОперации КАК ФискальныеОперации + |ГДЕ + | (ФискальныеОперации.ДокументОснование = &ДокументСсылка)" + + ?(ТипыДокументов = Неопределено, "", " И (ФискальныеОперации.ТипДокумента В (&ТипыДокументов))") + + ?(ТипРасчета = Неопределено, "", " И (ФискальныеОперации.ТипРасчета = &ТипРасчета)") + + " УПОРЯДОЧИТЬ ПО ФискальныеОперации.Дата УБЫВ, ФискальныеОперации.НомерСменыККМ УБЫВ"); + + Запрос.УстановитьПараметр("ДокументСсылка", ДокументСсылка); + + Если ТипыДокументов <> Неопределено Тогда + // Подготовка типов документов для запроса. + МассивТипыДокументов = Новый Массив(); + Если ТипЗнч(ТипыДокументов) = Тип("Массив") Тогда + Для Каждого ТипДокумента Из ТипыДокументов Цикл + МассивТипыДокументов.Добавить(ТипДокумента); + КонецЦикла; + Иначе + МассивТипыДокументов.Добавить(ТипыДокументов); + КонецЕсли; + Запрос.УстановитьПараметр("ТипыДокументов", МассивТипыДокументов); + КонецЕсли; + + Если ТипРасчета <> Неопределено Тогда + Запрос.УстановитьПараметр("ТипРасчета", ТипРасчета); + КонецЕсли; + + СписокОпераций = Новый Массив(); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ФискальнаяОперация = Новый Структура; + ФискальнаяОперация.Вставить("ИдентификаторЗаписи"); + ФискальнаяОперация.Вставить("НомерЧекаККМ"); + ФискальнаяОперация.Вставить("НомерСменыККМ"); + ФискальнаяОперация.Вставить("ЗаводскойНомерФН"); + ФискальнаяОперация.Вставить("РегистрационныйНомерККТ"); + ФискальнаяОперация.Вставить("ТипДокумента"); + ФискальнаяОперация.Вставить("ТипРасчета"); + ФискальнаяОперация.Вставить("Организация"); + ФискальнаяОперация.Вставить("ТорговыйОбъект"); + ФискальнаяОперация.Вставить("Сумма"); + ФискальнаяОперация.Вставить("ДокументОснование"); + ФискальнаяОперация.Вставить("КорректируемыйДокумент"); + ФискальнаяОперация.Вставить("ФискальныйПризнак"); + ФискальнаяОперация.Вставить("ДополнительныйРеквизит"); + ФискальнаяОперация.Вставить("ДанныеXML"); + ЗаполнитьЗначенияСвойств(ФискальнаяОперация, Выборка); + СписокОпераций.Добавить(ФискальнаяОперация); + КонецЦикла; + + Возврат СписокОпераций; + +КонецФункции + +#КонецОбласти + +#Область ФормированиеДанныхККТ + +// Возвращает для каких типов товаров будет заполняться отраслевой реквизит. +// +// Возвращаемое значение: +// Структура: +// * ИзделияИзНатуральногоМеха - Булево - Заполнения для изделия из натурального меха. +// * ОбъемноСортовойУчет - Булево - Заполнения для товаров объемно сортового учета. +// * МолочнаяПродукцияСНечитаемымиКМ - Булево - Заполнения для молочной продукция с нечитаемыми КМ. +// +Функция ТипыТоваровДляЗаполненияОтраслевогоРеквизита() Экспорт; + + ТипыТоваров = Новый Структура(); + ТипыТоваров.Вставить("ИзделияИзНатуральногоМеха", Истина); + ТипыТоваров.Вставить("ОбъемноСортовойУчет", Истина); + ТипыТоваров.Вставить("ОбщественноеПитание", Истина); + ТипыТоваров.Вставить("МолочнаяПродукцияСНечитаемымиКМ", Ложь); + ТипыТоваров.Вставить("ВетеринарныеПрепараты", Истина); + Возврат ТипыТоваров; + +КонецФункции + +// Возвращает для каких типов товаров будет заполняться отраслевой реквизит. +// +// Возвращаемое значение: +// см. ТипыТоваровДляЗаполненияОтраслевогоРеквизита +// +Функция ОтраслевойРеквизитЗаполняетсяДляТиповТоваров() Экспорт + + ТипыТоваров = ТипыТоваровДляЗаполненияОтраслевогоРеквизита(); + МенеджерОборудованияВызовСервераПереопределяемый.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(ТипыТоваров); + Возврат ТипыТоваров; + +КонецФункции + +// Возвращает ведется объемно сортовой учет. +// +// Возвращаемое значение: +// Булево. +// +Функция ВедетсяОбъемноСортовойУчет() Экспорт + + Результат = Ложь; + ОбъемноСортовойУчет = Результат; + СтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.ВедетсяОбъемноСортовойУчет(ОбъемноСортовойУчет, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Результат, ОбъемноСортовойУчет); + Возврат Результат; + +КонецФункции + +// Возвращает оказываются ли услуги общественного питания. +// +// Возвращаемое значение: +// Булево. +// +Функция ОказываютсяУслугиОбщественноеПитания() Экспорт + + Результат = Ложь; + ОбщественноеПитание = Результат; + СтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.ОказываютсяУслугиОбщественноеПитания(ОбщественноеПитание, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Результат, ОбщественноеПитание); + Возврат Результат; + +КонецФункции + +// Возвращает ативность контроля фискализации безналичных платежей +// +// Возвращаемое значение: +// Булево. +// +Функция КонтрольФискализацииБезналичныхПлатежей() Экспорт + + Результат = Истина; + ФискализацииБезналичныхПлатежей = Результат; + СтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.КонтрольФискализацииБезналичныхПлатежей(ФискализацииБезналичныхПлатежей, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Результат, ФискализацииБезналичныхПлатежей); + Возврат Результат; + +КонецФункции + +// Сформировать таблицу параметров в XML для операции с ФН. +// +// Параметры: +// СтруктураПараметров - Структура +// РевизияИнтерфейса - Число - Ревизия интерфейса +// +// Возвращаемое значение: +// ЗаписьXML. +// +Функция СформироватьТаблицуПараметровДляОперацииФН(СтруктураПараметров, РевизияИнтерфейса = 0) Экспорт + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + + ЗаписьXML.ЗаписатьНачалоЭлемента("ParametersFiscal"); + ЗаписьXML.ЗаписатьАтрибут("CashierName" , XMLСтрока(?(СтруктураПараметров.Свойство("Кассир") , XMLСтрока(СтруктураПараметров.Кассир), НСтр("ru='Администратор'")))); + ЗаписьXML.ЗаписатьАтрибут("CashierINN" , XMLСтрока(?(СтруктураПараметров.Свойство("КассирИНН"), XMLСтрока(СтруктураПараметров.КассирИНН), ""))); + Если РевизияИнтерфейса >= 3004 Тогда + // Коды причин изменения сведений о ККТ. + Если Не ПустаяСтрока(СтруктураПараметров.КодыПричинИзмененияСведений) Тогда + ЗаписьXML.ЗаписатьАтрибут("RegistrationLabelCodes", XMLСтрока(СтруктураПараметров.КодыПричинИзмененияСведений)); + КонецЕсли; + Иначе + // Код причины перерегистрации. + ЗаписьXML.ЗаписатьАтрибут("RegistrationReasonCode", XMLСтрока(СтруктураПараметров.КодПричиныПеререгистрации)); + КонецЕсли; + ЗаписьXML.ЗаписатьАтрибут("KKTNumber" , XMLСтрока(СтруктураПараметров.РегистрационныйНомерККТ)); + ЗаписьXML.ЗаписатьАтрибут("CompanyName" , XMLСтрока(СтруктураПараметров.ОрганизацияНазвание)); + ЗаписьXML.ЗаписатьАтрибут("INN" , XMLСтрока(СтруктураПараметров.ОрганизацияИНН)); + ЗаписьXML.ЗаписатьАтрибут("SaleAddress" , XMLСтрока(СтруктураПараметров.АдресПроведенияРасчетов)); + ЗаписьXML.ЗаписатьАтрибут("SaleLocation" , XMLСтрока(СтруктураПараметров.МестоПроведенияРасчетов)); + ЗаписьXML.ЗаписатьАтрибут("TaxationSystems" , XMLСтрока(СтруктураПараметров.КодыСистемыНалогообложения)); + ЗаписьXML.ЗаписатьАтрибут("IsOffline" , XMLСтрока(СтруктураПараметров.ПризнакАвтономногоРежима)); + ЗаписьXML.ЗаписатьАтрибут("IsEncrypted" , XMLСтрока(СтруктураПараметров.ПризнакШифрованиеДанных)); + ЗаписьXML.ЗаписатьАтрибут("IsService" , XMLСтрока(СтруктураПараметров.ПризнакРасчетовЗаУслуги)); + ЗаписьXML.ЗаписатьАтрибут("IsExcisable" , XMLСтрока(СтруктураПараметров.ПродажаПодакцизногоТовара)); + ЗаписьXML.ЗаписатьАтрибут("IsGambling" , XMLСтрока(СтруктураПараметров.ПроведенияАзартныхИгр)); + ЗаписьXML.ЗаписатьАтрибут("IsLottery" , XMLСтрока(СтруктураПараметров.ПроведенияЛотерей)); + ЗаписьXML.ЗаписатьАтрибут("AgentTypes" , XMLСтрока(СтруктураПараметров.ПризнакиАгента)); + ЗаписьXML.ЗаписатьАтрибут("BSOSing" , XMLСтрока(СтруктураПараметров.ПризнакФормированияБСО)); + ЗаписьXML.ЗаписатьАтрибут("IsOnlineOnly" , XMLСтрока(СтруктураПараметров.ПризнакРасчетовТолькоВИнтернет)); + Если РевизияИнтерфейса >= 3004 Тогда // Версия стандарта 3.4 (ОФД 1.2) + ЗаписьXML.ЗаписатьАтрибут("IsOnline" , XMLСтрока(СтруктураПараметров.ПроведенияРасчетаВИнтернет)); + ЗаписьXML.ЗаписатьАтрибут("IsMarking" , XMLСтрока(СтруктураПараметров.ПродажаМаркированныхТоваров)); + ЗаписьXML.ЗаписатьАтрибут("IsPawnshop" , XMLСтрока(СтруктураПараметров.ПризнакПримененияЛомбардами)); + ЗаписьXML.ЗаписатьАтрибут("IsAssurance" , XMLСтрока(СтруктураПараметров.ПризнакДеятельностиПоСтрахованию)); + КонецЕсли; + Если РевизияИнтерфейса >= 4000 Тогда // Версия стандарта 4.0 (ОФД 1.2) + ЗаписьXML.ЗаписатьАтрибут("IsVendingMachine" , XMLСтрока(СтруктураПараметров.ПризнакАвтоматическогоТорговогоАвтомата)); + ЗаписьXML.ЗаписатьАтрибут("IsCateringServices", XMLСтрока(СтруктураПараметров.ПризнакОказанииУслугОбщественногоПитания)); + ЗаписьXML.ЗаписатьАтрибут("IsWholesaleTrade" , XMLСтрока(СтруктураПараметров.ПризнакОптовойТорговлиСОрганизациями)); + КонецЕсли; + ЗаписьXML.ЗаписатьАтрибут("IsAutomaticPrinter", XMLСтрока(СтруктураПараметров.УстановкаПринтераВАвтомате)); + ЗаписьXML.ЗаписатьАтрибут("IsAutomatic" , XMLСтрока(СтруктураПараметров.ПризнакАвтоматическогоРежима)); + ЗаписьXML.ЗаписатьАтрибут("AutomaticNumber" , XMLСтрока(СтруктураПараметров.НомерАвтоматаДляАвтоматическогоРежима)); + ЗаписьXML.ЗаписатьАтрибут("OFDCompany" , XMLСтрока(СтруктураПараметров.ОрганизацияОФДНазвание)); + ЗаписьXML.ЗаписатьАтрибут("OFDCompanyINN" , XMLСтрока(СтруктураПараметров.ОрганизацияОФДИНН)); + Если Не ПустаяСтрока(СтруктураПараметров.ОтправительEmail) Тогда + ЗаписьXML.ЗаписатьАтрибут("SenderEmail", XMLСтрока(СтруктураПараметров.ОтправительEmail)); + КонецЕсли; + Если Не ПустаяСтрока(СтруктураПараметров.АдресСайтаФНС) Тогда + ЗаписьXML.ЗаписатьАтрибут("FNSURL", XMLСтрока(СтруктураПараметров.АдресСайтаФНС)); + КонецЕсли; + + Иначе + + ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters"); + ЗаписьXML.ЗаписатьАтрибут("CashierName" , XMLСтрока(?(СтруктураПараметров.Свойство("Кассир") , XMLСтрока(СтруктураПараметров.Кассир), НСтр("ru='Администратор'")))); + ЗаписьXML.ЗаписатьАтрибут("CashierVATIN", XMLСтрока(?(СтруктураПараметров.Свойство("КассирИНН"), XMLСтрока(СтруктураПараметров.КассирИНН), ""))); + // ФФД 1.0.0 + ЗаписьXML.ЗаписатьАтрибут("KKTNumber" , XMLСтрока(СтруктураПараметров.РегистрационныйНомерККТ)); + ЗаписьXML.ЗаписатьАтрибут("OFDVATIN" , XMLСтрока(СтруктураПараметров.ОрганизацияОФДИНН)); + ЗаписьXML.ЗаписатьАтрибут("OFDOrganizationName", XMLСтрока(СтруктураПараметров.ОрганизацияОФДНазвание)); + ЗаписьXML.ЗаписатьАтрибут("OrganizationName" , XMLСтрока(СтруктураПараметров.ОрганизацияНазвание)); + ЗаписьXML.ЗаписатьАтрибут("VATIN" , XMLСтрока(СтруктураПараметров.ОрганизацияИНН)); + ЗаписьXML.ЗаписатьАтрибут("AddressSettle" , XMLСтрока(СтруктураПараметров.АдресПроведенияРасчетов)); + ЗаписьXML.ЗаписатьАтрибут("TaxVariant" , XMLСтрока(СтруктураПараметров.КодыСистемыНалогообложения)); + ЗаписьXML.ЗаписатьАтрибут("OfflineMode" , XMLСтрока(СтруктураПараметров.ПризнакАвтономногоРежима)); + ЗаписьXML.ЗаписатьАтрибут("DataEncryption" , XMLСтрока(СтруктураПараметров.ПризнакШифрованиеДанных)); + ЗаписьXML.ЗаписатьАтрибут("ServiceSign" , XMLСтрока(СтруктураПараметров.ПризнакРасчетовЗаУслуги)); + ЗаписьXML.ЗаписатьАтрибут("BSOSing" , XMLСтрока(СтруктураПараметров.ПризнакФормированияБСО)); + ЗаписьXML.ЗаписатьАтрибут("CalcOnlineSign" , XMLСтрока(СтруктураПараметров.ПризнакРасчетовТолькоВИнтернет)); + ЗаписьXML.ЗаписатьАтрибут("AutomaticMode" , XMLСтрока(СтруктураПараметров.ПризнакАвтоматическогоРежима)); + ЗаписьXML.ЗаписатьАтрибут("AutomaticNumber" , XMLСтрока(СтруктураПараметров.НомерАвтоматаДляАвтоматическогоРежима)); + // ФФД 1.05 & 1.1 + ЗаписьXML.ЗаписатьАтрибут("PlaceSettle" , XMLСтрока(СтруктураПараметров.МестоПроведенияРасчетов)); + ЗаписьXML.ЗаписатьАтрибут("SaleExcisableGoods" , XMLСтрока(СтруктураПараметров.ПродажаПодакцизногоТовара)); + ЗаписьXML.ЗаписатьАтрибут("SignOfGambling" , XMLСтрока(СтруктураПараметров.ПроведенияАзартныхИгр)); + ЗаписьXML.ЗаписатьАтрибут("SignOfLottery" , XMLСтрока(СтруктураПараметров.ПроведенияЛотерей)); + ЗаписьXML.ЗаписатьАтрибут("SignOfAgent" , XMLСтрока(СтруктураПараметров.ПризнакиАгента)); + ЗаписьXML.ЗаписатьАтрибут("PrinterAutomatic" , XMLСтрока(СтруктураПараметров.УстановкаПринтераВАвтомате)); + // Изменение параметров регистрации. + ЗаписьXML.ЗаписатьАтрибут("ReasonCode" , XMLСтрока(СтруктураПараметров.КодПричиныПеререгистрации)); + Если Не ПустаяСтрока(СтруктураПараметров.КодыПричинИзмененияСведений) Тогда + ЗаписьXML.ЗаписатьАтрибут("InfoChangesReasonsCodes", XMLСтрока(СтруктураПараметров.КодыПричинИзмененияСведений)); + КонецЕсли; + Если Не ПустаяСтрока(СтруктураПараметров.ОтправительEmail) Тогда + ЗаписьXML.ЗаписатьАтрибут("SenderEmail", XMLСтрока(СтруктураПараметров.ОтправительEmail)); + КонецЕсли; + Если Не ПустаяСтрока(СтруктураПараметров.АдресСайтаФНС) Тогда + ЗаписьXML.ЗаписатьАтрибут("FNSWebSite", XMLСтрока(СтруктураПараметров.АдресСайтаФНС)); + КонецЕсли; + + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + Возврат ЗаписьXML.Закрыть(); + +КонецФункции + +// Получить таблицу параметров из ККТ. +// +// Параметры: +// Данные - Структура - Данные. +// РевизияИнтерфейса - Число - Ревизия интерфейса +// +// Возвращаемое значение: +// Структура - Параметры из XMLПакета ККТ: +// * ПризнакФискализации - Строка. +// * НомерДокументаФискализации - Число. +// * ДатаВремяФискализации - Дата. +Функция ПараметрыИзXMLПакетаККТ(Данные, РевизияИнтерфейса = 0) Экспорт + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(Данные); + ЧтениеXML.ПерейтиКСодержимому(); + + Параметры = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыРегистрацииККТ(); + Параметры.Вставить("ТипОборудования", Перечисления.ТипыПодключаемогоОборудования.ККТ); + + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + + Если (ЧтениеXML.Имя = "Parameters" Или ЧтениеXML.Имя = "TableParametersKKT") И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + Параметры.ВерсияФФДФН = "1.1"; + ВерсияФФДФН = ЧтениеXML.ЗначениеАтрибута("FFDVersionFN"); + Если ВерсияФФДФН = "1.0" Тогда + Параметры.ВерсияФФДФН = "1.0" + ИначеЕсли ВерсияФФДФН = "1.0.5" Или ВерсияФФДФН = "1.05" Тогда + Параметры.ВерсияФФДФН = "1.05" + ИначеЕсли ВерсияФФДФН = "1.2" Тогда + Параметры.ВерсияФФДФН = "1.2" + КонецЕсли; + + Параметры.ВерсияФФДККТ = "1.1"; + ВерсияФФДККТ = ЧтениеXML.ЗначениеАтрибута("FFDVersionKKT"); + Если ВерсияФФДККТ = "1.0" Тогда + Параметры.ВерсияФФДККТ = "1.0" + ИначеЕсли ВерсияФФДККТ = "1.0.5" Или ВерсияФФДККТ = "1.05" Тогда + Параметры.ВерсияФФДККТ = "1.05" + ИначеЕсли ВерсияФФДККТ = "1.2" Тогда + Параметры.ВерсияФФДККТ = "1.2" + КонецЕсли; + + // ФФД 1.0 + Параметры.РегистрационныйНомерККТ = СокрЛП(ЧтениеXML.ЗначениеАтрибута("KKTNumber")); + Параметры.ЗаводскойНомерККТ = СокрЛП(ЧтениеXML.ЗначениеАтрибута("KKTSerialNumber")); + Параметры.ЗаводскойНомерФН = СокрЛП(ЧтениеXML.ЗначениеАтрибута("FNSerialNumber")); + Параметры.ОрганизацияНазвание = ЧтениеXML.ЗначениеАтрибута("CompanyName"); + Параметры.ОрганизацияИНН = СокрЛП(ЧтениеXML.ЗначениеАтрибута("INN")); + Параметры.АдресПроведенияРасчетов = ЧтениеXML.ЗначениеАтрибута("SaleAddress"); + Параметры.МестоПроведенияРасчетов = ЧтениеXML.ЗначениеАтрибута("SaleLocation"); + Параметры.КодыСистемыНалогообложения = ЧтениеXML.ЗначениеАтрибута("TaxationSystems"); + Параметры.ПризнакАвтономногоРежима = ВРег(ЧтениеXML.ЗначениеАтрибута("IsOffline")) = "TRUE"; + Параметры.ПризнакШифрованиеДанных = ВРег(ЧтениеXML.ЗначениеАтрибута("IsEncrypted")) = "TRUE"; + Параметры.ПризнакРасчетовЗаУслуги = ВРег(ЧтениеXML.ЗначениеАтрибута("IsService")) = "TRUE"; + Параметры.ПродажаПодакцизногоТовара = ВРег(ЧтениеXML.ЗначениеАтрибута("IsExcisable")) = "TRUE"; + Параметры.ПроведенияАзартныхИгр = ВРег(ЧтениеXML.ЗначениеАтрибута("IsGambling")) = "TRUE"; + Параметры.ПроведенияЛотерей = ВРег(ЧтениеXML.ЗначениеАтрибута("IsLottery")) = "TRUE"; + Параметры.ПризнакиАгента = ЧтениеXML.ЗначениеАтрибута("AgentTypes"); + Параметры.ПризнакФормированияБСО = ВРег(ЧтениеXML.ЗначениеАтрибута("BSOSing")) = "TRUE"; + Параметры.ПризнакРасчетовТолькоВИнтернет = ВРег(ЧтениеXML.ЗначениеАтрибута("IsOnlineOnly")) = "TRUE"; + Параметры.УстановкаПринтераВАвтомате = ВРег(ЧтениеXML.ЗначениеАтрибута("IsAutomaticPrinter")) = "TRUE"; + Параметры.ПризнакАвтоматическогоРежима = ВРег(ЧтениеXML.ЗначениеАтрибута("IsAutomatic")) = "TRUE"; + Параметры.НомерАвтоматаДляАвтоматическогоРежима = ЧтениеXML.ЗначениеАтрибута("AutomaticNumber"); + Параметры.ОрганизацияОФДНазвание = ЧтениеXML.ЗначениеАтрибута("OFDCompany"); + Параметры.ОрганизацияОФДИНН = СокрЛП(ЧтениеXML.ЗначениеАтрибута("OFDCompanyINN")); + Параметры.ПризнакФискализации = ВРег(ЧтениеXML.ЗначениеАтрибута("Fiscal")) = "TRUE"; + Параметры.НомерДокументаФискализации = ЧтениеXML.ЗначениеАтрибута("DocumentNumber"); + Параметры.ДатаВремяФискализации = ЧтениеXML.ЗначениеАтрибута("DateTime"); + Параметры.ОтправительEmail = ЧтениеXML.ЗначениеАтрибута("SenderEmail"); + Параметры.АдресСайтаФНС = ЧтениеXML.ЗначениеАтрибута("FNSURL"); + Если РевизияИнтерфейса >= 3004 Тогда // Версия стандарта 3.4 (ОФД 1.2) + Параметры.ПроведенияРасчетаВИнтернет = ВРег(ЧтениеXML.ЗначениеАтрибута("IsOnline")) = "TRUE"; + Параметры.ПродажаМаркированныхТоваров = ВРег(ЧтениеXML.ЗначениеАтрибута("IsMarking")) = "TRUE"; + Параметры.ПризнакПримененияЛомбардами = ВРег(ЧтениеXML.ЗначениеАтрибута("IsPawnshop")) = "TRUE"; + Параметры.ПризнакДеятельностиПоСтрахованию = ВРег(ЧтениеXML.ЗначениеАтрибута("IsAssurance")) = "TRUE"; + КонецЕсли; + Если РевизияИнтерфейса >= 4000 Тогда // Версия стандарта 4.0 (ОФД 1.2) + Параметры.ПризнакАвтоматическогоТорговогоАвтомата = ВРег(ЧтениеXML.ЗначениеАтрибута("IsVendingMachine")) = "TRUE"; + Параметры.ПризнакОказанииУслугОбщественногоПитания = ВРег(ЧтениеXML.ЗначениеАтрибута("IsCateringServices")) = "TRUE"; + ПризнакОптовойТорговлиСОрганизациями = ЧтениеXML.ЗначениеАтрибута("IsWholesaleTrade"); + Если НЕ ПустаяСтрока(ПризнакОптовойТорговлиСОрганизациями) Тогда + Параметры.ПризнакОптовойТорговлиСОрганизациями = ВРег(ПризнакОптовойТорговлиСОрганизациями) = "TRUE"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Иначе + + Если ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Параметры.ВерсияФФДФН = ЧтениеXML.ЗначениеАтрибута("FFDVersionFN"); + Если ПустаяСтрока(Параметры.ВерсияФФДФН) Тогда + Параметры.ВерсияФФДФН = "1.0"; + КонецЕсли; + Параметры.ВерсияФФДККТ = ЧтениеXML.ЗначениеАтрибута("FFDVersionKKT"); + Если ПустаяСтрока(Параметры.ВерсияФФДККТ) Тогда + Параметры.ВерсияФФДККТ = "1.0"; + КонецЕсли; + // ФФД 1.0 + Параметры.РегистрационныйНомерККТ = СокрЛП(ЧтениеXML.ЗначениеАтрибута("KKTNumber")); + Параметры.ОрганизацияНазвание = ЧтениеXML.ЗначениеАтрибута("OrganizationName"); + Параметры.ОрганизацияИНН = СокрЛП(ЧтениеXML.ЗначениеАтрибута("VATIN")); + Параметры.АдресПроведенияРасчетов = ЧтениеXML.ЗначениеАтрибута("AddressSettle"); + Параметры.МестоПроведенияРасчетов = ЧтениеXML.ЗначениеАтрибута("PlaceSettle"); + Параметры.КодыСистемыНалогообложения = ЧтениеXML.ЗначениеАтрибута("TaxVariant"); + Если ПустаяСтрока(Параметры.КодыСистемыНалогообложения) Тогда + Параметры.КодыСистемыНалогообложения = ЧтениеXML.ЗначениеАтрибута("TaxVarinat"); + КонецЕсли; + Параметры.ПризнакАвтономногоРежима = ВРег(ЧтениеXML.ЗначениеАтрибута("OfflineMode")) = "TRUE"; + Параметры.ПризнакАвтоматическогоРежима = ВРег(ЧтениеXML.ЗначениеАтрибута("AutomaticMode")) = "TRUE"; + Параметры.НомерАвтоматаДляАвтоматическогоРежима = ЧтениеXML.ЗначениеАтрибута("AutomaticNumber"); + Параметры.ПризнакФормированияБСО = ВРег(ЧтениеXML.ЗначениеАтрибута("BSOSing")) = "TRUE"; + Параметры.ПризнакРасчетовТолькоВИнтернет = ВРег(ЧтениеXML.ЗначениеАтрибута("CalcOnlineSign")) = "TRUE"; + Параметры.ПризнакШифрованиеДанных = ВРег(ЧтениеXML.ЗначениеАтрибута("DataEncryption")) = "TRUE"; + Параметры.ОрганизацияОФДИНН = СокрЛП(ЧтениеXML.ЗначениеАтрибута("OFDVATIN")); + Параметры.ОрганизацияОФДНазвание = ЧтениеXML.ЗначениеАтрибута("OFDOrganizationName"); + Параметры.ЗаводскойНомерККТ = СокрЛП(ЧтениеXML.ЗначениеАтрибута("KKTSerialNumber")); + Параметры.ПризнакФискализации = ВРег(ЧтениеXML.ЗначениеАтрибута("Fiscal")) = "TRUE"; + Параметры.ЗаводскойНомерФН = СокрЛП(ЧтениеXML.ЗначениеАтрибута("FNSerialNumber")); + Параметры.НомерДокументаФискализации = ЧтениеXML.ЗначениеАтрибута("DocumentNumber"); + Параметры.ДатаВремяФискализации = ЧтениеXML.ЗначениеАтрибута("DateTime"); + Параметры.ПризнакРасчетовЗаУслуги = ВРег(ЧтениеXML.ЗначениеАтрибута("ServiceSign")) = "TRUE"; + Параметры.ПродажаПодакцизногоТовара = ВРег(ЧтениеXML.ЗначениеАтрибута("SaleExcisableGoods")) = "TRUE"; + Параметры.ПроведенияАзартныхИгр = ВРег(ЧтениеXML.ЗначениеАтрибута("SignOfGambling")) = "TRUE"; + Параметры.ПроведенияЛотерей = ВРег(ЧтениеXML.ЗначениеАтрибута("SignOfLottery")) = "TRUE"; + Параметры.ПризнакиАгента = ЧтениеXML.ЗначениеАтрибута("SignOfAgent"); + Параметры.УстановкаПринтераВАвтомате = ВРег(ЧтениеXML.ЗначениеАтрибута("PrinterAutomatic")) = "TRUE"; + Параметры.ОтправительEmail = ЧтениеXML.ЗначениеАтрибута("SenderEmail"); + Параметры.АдресСайтаФНС = ЧтениеXML.ЗначениеАтрибута("FNSWebSite"); + КонецЕсли; + + КонецЕсли; + + СистемыНалогообложения = Новый Массив(); + Если Не ПустаяСтрока(Параметры.КодыСистемыНалогообложения) Тогда + СистемыНалогообложенияВрем = СтрРазделить(Параметры.КодыСистемыНалогообложения, ","); + Для Каждого ВремСНО Из СистемыНалогообложенияВрем Цикл + СНО = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СистемаНалогообложенияККТПоКоду(Число(ВремСНО)); + СистемыНалогообложения.Добавить(СНО); + КонецЦикла; + Параметры.Вставить("СистемыНалогообложения", СистемыНалогообложения); + КонецЕсли; + + Возврат Параметры; + +КонецФункции + +// Процедура формирует XML пакет для Фискализация чека. +// +// Параметры: +// ОбщиеПараметры - Структура - параметры чека +// ПараметрыФискализации - Структура - параметры фискализации чека. +// ВключатьПерсональныеДанные - Булево - Включать персональные данные. +// ПерсональныеДанные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПерсональныеДанныеПокупателя. +// ТипПерсональныхДанных - ПеречислениеСсылка.ТипыПерсональныхДанныхККТ - Тип персональных данных. +Процедура СформироватьXMLПакетДляФискализацияЧека(ОбщиеПараметры, ПараметрыФискализации, ВключатьПерсональныеДанные = Ложь, + ПерсональныеДанные = Неопределено, ТипПерсональныхДанных = Неопределено) Экспорт + + // ++ Локализация + ПозицииЧека = ОбщиеПараметры.ПозицииЧека; + ТаблицаОплат = ОбщиеПараметры.ТаблицаОплат; + Электронно = ОбщиеПараметры.Электронно; + + ТипРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодРасчетаДенежнымиСредствами(ОбщиеПараметры.ТипРасчета); + СистемаНалогообложения = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодСистемыНалогообложенияККТ(ОбщиеПараметры.СистемаНалогообложения); + + // Таблица оплат + СуммаЧека = 0; + СуммаНаличные = 0; + СуммаЭлектронно = 0; + СуммаПредоплата = 0; + СуммаПостоплата = 0; + СуммаПредоставление = 0; + + Если ТаблицаОплат <> Неопределено Тогда + Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл + Если ТаблицаОплат[ИндексОплаты].ТипОплаты = Перечисления.ТипыОплатыККТ.Электронно Тогда + СуммаЭлектронно = СуммаЭлектронно + ТаблицаОплат[ИндексОплаты].Сумма; + ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = Перечисления.ТипыОплатыККТ.Предоплата Тогда + СуммаПредоплата = СуммаПредоплата + ТаблицаОплат[ИндексОплаты].Сумма; + ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = Перечисления.ТипыОплатыККТ.Постоплата Тогда + СуммаПостоплата = СуммаПостоплата + ТаблицаОплат[ИндексОплаты].Сумма; + ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = Перечисления.ТипыОплатыККТ.ВстречноеПредоставление Тогда + СуммаПредоставление = СуммаПредоставление + ТаблицаОплат[ИндексОплаты].Сумма; + Иначе + СуммаНаличные = СуммаНаличные + ТаблицаОплат[ИндексОплаты].Сумма; + КонецЕсли; + КонецЦикла; + КонецЕсли; + ОплатаНеНаличными = СуммаЭлектронно + СуммаПостоплата + СуммаПредоплата + СуммаПредоставление; + + // Выводим в печатную форму чека дополнительную информацию по СПБ и НСПК + Если ОбщиеПараметры.Свойство("ДетализацияОплаты") И ОбщиеПараметры.ДетализацияОплаты.Количество() > 0 И НЕ ПараметрыФискализации.ДетализацияОплатыДобавлено Тогда + + ПараметрыФискализации.ДетализацияОплатыДобавлено = Истина; + + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(); + ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека); + + ТекстСтроки = НСтр("ru='ДЕТАЛИЗАЦИЯ ОПЛАТЫ'"); + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ТекстСтроки); + СтрокаЧека.Выравнивание = "Центр"; + ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека); + + ФорматЧисла = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0"; + Для Каждого ДетализацияОплаты Из ОбщиеПараметры.ДетализацияОплаты Цикл + ТекстСтроки = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыстроитьПоля(ДетализацияОплаты.НаименованиеТипаОплаты, + Формат(ДетализацияОплаты.Сумма, ФорматЧисла), ПараметрыФискализации.ШиринаСтроки); + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ТекстСтроки); + ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека); + КонецЦикла + КонецЕсли; + + // QR-код по СПБ и НСПК + Если ОбщиеПараметры.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств Тогда + Если ОбщиеПараметры.Свойство("QRКод") И Не ПустаяСтрока(ОбщиеПараметры.QRКод.ЗначениеКода) И НЕ ПараметрыФискализации.QRКодДобавлено Тогда + + ПараметрыФискализации.QRКодДобавлено = Истина; + + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(); + ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека); + + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыШтрихкодВСтрокеЧека("QR", ОбщиеПараметры.QRКод.ЗначениеКода); + ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека); + + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(); + ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека); + + Если НЕ ПустаяСтрока(ОбщиеПараметры.ТипПлатежнойСистемы) Тогда + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ОбщиеПараметры.ТипПлатежнойСистемы); + СтрокаЧека.Выравнивание = "Центр"; + ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека); + КонецЕсли; + Если НЕ ПустаяСтрока(ОбщиеПараметры.QRКод.ТекстПользователя) Тогда + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ОбщиеПараметры.QRКод.ТекстПользователя); + СтрокаЧека.Выравнивание = "Центр"; + ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека); + КонецЕсли; + + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(); + ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека); + + КонецЕсли; + КонецЕсли; + + // Пакетная печать чека. Подготовка пакета. + ЗаписьXML = Новый ЗаписьXML(); + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("CheckPackage"); + + Если ПараметрыФискализации.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters"); + ЗаписьXML.ЗаписатьАтрибут("CashierName", XMLСтрока(ОбщиеПараметры.Кассир)); + Если Не ПустаяСтрока(ОбщиеПараметры.КассирИНН) Тогда + ЗаписьXML.ЗаписатьАтрибут("CashierINN", XMLСтрока(ОбщиеПараметры.КассирИНН)); + КонецЕсли; + ЗаписьXML.ЗаписатьАтрибут("OperationType", XMLСтрока(ТипРасчета)); + ЗаписьXML.ЗаписатьАтрибут("TaxationSystem" , XMLСтрока(СистемаНалогообложения)); + + Если Не ПустаяСтрока(ОбщиеПараметры.ОтправительEmail) И Электронно Тогда // Отправитель Email указывается только для Электронно. + ЗаписьXML.ЗаписатьАтрибут("SenderEmail", XMLСтрока(ОбщиеПараметры.ОтправительEmail)); + КонецЕсли; + + Если ОбщиеПараметры.Свойство("АдресРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.АдресРасчетов) Тогда + ЗаписьXML.ЗаписатьАтрибут("SaleAddress", XMLСтрока(ОбщиеПараметры.АдресРасчетов)); + КонецЕсли; + Если ОбщиеПараметры.Свойство("МестоРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.МестоРасчетов) Тогда + ЗаписьXML.ЗаписатьАтрибут("SaleLocation", XMLСтрока(ОбщиеПараметры.МестоРасчетов)); + КонецЕсли; + + Если ПараметрыФискализации.РевизияИнтерфейса >= 4000 Тогда + Если ОбщиеПараметры.Свойство("СворачиватьОдинаковыеСтрокПриПечати") Тогда + ЗаписьXML.ЗаписатьАтрибут("GroupingPositionsWhenPrinting", XMLСтрока(ОбщиеПараметры.СворачиватьОдинаковыеСтрокПриПечати)); + КонецЕсли; + КонецЕсли; + + Если ОбщиеПараметры.Свойство("ПокупательEmail") Тогда + ЗаписьXML.ЗаписатьАтрибут("CustomerEmail", XMLСтрока(?(ОбщиеПараметры.Свойство("ПокупательEmail"), ОбщиеПараметры.ПокупательEmail, ""))); + КонецЕсли; + // SMS отправляет средствами 1C + Если ОбщиеПараметры.Свойство("ПокупательНомер") Тогда + ПокупательНомер = ?(ОбщиеПараметры.Свойство("ПокупательНомер"), ОбщиеПараметры.ПокупательНомер, ""); + ПокупательНомер = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ПокупательНомер); + ЗаписьXML.ЗаписатьАтрибут("CustomerPhone", XMLСтрока(ПокупательНомер)); + КонецЕсли; + + Если ПараметрыФискализации.РевизияИнтерфейса < 3004 Тогда + + Получатель = ОбщиеПараметры.Получатель; + Если ПустаяСтрока(Получатель) Тогда + Получатель = ОбщиеПараметры.СведенияОПокупателе.Покупатель; + КонецЕсли; + ПолучательИНН = ОбщиеПараметры.ПолучательИНН; + Если ПустаяСтрока(ПолучательИНН) Тогда + ПолучательИНН = ОбщиеПараметры.СведенияОПокупателе.ПокупательИНН; + КонецЕсли; + Если ПерсональныеДанные <> Неопределено Тогда + Если ТипПерсональныхДанных = Перечисления.ТипыПерсональныхДанныхККТ.ИНН Тогда + ПолучательИНН = ПерсональныеДанные.ИНН; + ИначеЕсли Не ПустаяСтрока(ПерсональныеДанные.ДанныеДокумента) Тогда + Получатель = СтрШаблон("<%1> <%2>", Получатель, ПерсональныеДанные.ДанныеДокумента); + КонецЕсли; + КонецЕсли; + Если Не ПустаяСтрока(Получатель) Тогда + ЗаписьXML.ЗаписатьАтрибут("CustomerInfo", XMLСтрока(Получатель)); + КонецЕсли; + Если Не ПустаяСтрока(ПолучательИНН) Тогда + ЗаписьXML.ЗаписатьАтрибут("CustomerINN", XMLСтрока(ПолучательИНН)); + КонецЕсли; + + Иначе + Если ОбщиеПараметры.Свойство("НомерАвтомата") И НЕ ПустаяСтрока(ОбщиеПараметры.НомерАвтомата) Тогда + ЗаписьXML.ЗаписатьАтрибут("AutomatNumber", XMLСтрока(ОбщиеПараметры.НомерАвтомата)); + КонецЕсли; + КонецЕсли; + + Если ОбщиеПараметры.Свойство("ПризнакАгента") И НЕ ПустаяСтрока(ОбщиеПараметры.ПризнакАгента) Тогда + ПризнакАгента = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПризнакаАгента(ОбщиеПараметры.ПризнакАгента); + ЗаписьXML.ЗаписатьАтрибут("AgentType", XMLСтрока(ПризнакАгента)); + КонецЕсли; + + Если ОбщиеПараметры.Свойство("ДополнительныйРеквизит") И НЕ ПустаяСтрока(ОбщиеПараметры.ДополнительныйРеквизит) Тогда + ЗаписьXML.ЗаписатьАтрибут("AdditionalAttribute", XMLСтрока(ОбщиеПараметры.ДополнительныйРеквизит)); + КонецЕсли; + + Если ОбщиеПараметры.Свойство("ДанныеКоррекции") Тогда + ЗаписатьДанныеКоррекции(ЗаписьXML, ОбщиеПараметры.ДанныеКоррекции); + КонецЕсли; + + Если ОбщиеПараметры.Свойство("ДополнительныйРеквизитПользователя") Тогда + ЗаписатьДополнительныйРеквизитПользователя(ЗаписьXML, ОбщиеПараметры.ДополнительныйРеквизитПользователя); + КонецЕсли; + + ЗаписатьДанныеАгента(ЗаписьXML, ОбщиеПараметры.ДанныеАгента, ПараметрыФискализации.РевизияИнтерфейса); + ЗаписатьДанныеПоставщика(ЗаписьXML, ОбщиеПараметры.ДанныеПоставщика, ПараметрыФискализации.РевизияИнтерфейса); + + Если ПараметрыФискализации.РевизияИнтерфейса >= 3004 Тогда + ЗаписатьСведенияОПокупателе(ЗаписьXML, ОбщиеПараметры, ПерсональныеДанные, ТипПерсональныхДанных); + ЗаписатьОперационныйРеквизит(ЗаписьXML, ОбщиеПараметры.ОперационныйРеквизит); + ЗаписатьОтраслевойРеквизит(ЗаписьXML, ОбщиеПараметры.ОтраслевойРеквизит); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + Если ОбщиеПараметры.Свойство("ФорматФД") Тогда + ФорматФД = ОбщиеПараметры.ФорматФД; + Иначе + ФорматФД = "1.2"; + КонецЕсли; + + // Табличная часть + Если ОбщиеПараметры.ПозицииЧека <> Неопределено Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("Positions"); + Для ИндексМассива = 0 По ОбщиеПараметры.ПозицииЧека.Количество() - 1 Цикл + ТекущаяПозиция = ОбщиеПараметры.ПозицииЧека[ИндексМассива]; // см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека + + Если ТекущаяПозиция.Свойство("ФискальнаяСтрока") Тогда // Фискальная строка + + Если ТекущаяПозиция.ЦенаСоСкидками = 0 И ТекущаяПозиция.Сумма > 0 И ТекущаяПозиция.Количество > 0 Тогда + ЦенаСоСкидками = Окр(ТекущаяПозиция.Сумма / ТекущаяПозиция.Количество, 2); + Иначе + ЦенаСоСкидками = ТекущаяПозиция.ЦенаСоСкидками; + КонецЕсли; + ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString"); + ЗаписьXML.ЗаписатьАтрибут("Name" , XMLСтрока(ТекущаяПозиция.Наименование)); // Наименование товара. + ЗаписьXML.ЗаписатьАтрибут("Quantity" , XMLСтрока(ТекущаяПозиция.Количество)); // Количество товара. + ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount" , XMLСтрока(ЦенаСоСкидками)); // Цена единицы товара с учетом скидок/наценок. + ЗаписьXML.ЗаписатьАтрибут("AmountWithDiscount", XMLСтрока(ТекущаяПозиция.Сумма)); // Конечная сумма по позиции чека с учетом всех скидок/наценок. + ЗаписьXML.ЗаписатьАтрибут("DiscountAmount" , XMLСтрока(ТекущаяПозиция.СуммаСкидок)); // Сумма скидок и наценок. + ЗаписьXML.ЗаписатьАтрибут("Department" , XMLСтрока(ТекущаяПозиция.НомерСекции)); // Отдел, по которому ведется продажа + + ЗначениеСтавкаНДС = ПредставлениеСтавкиНДС(ТекущаяПозиция.СтавкаНДС, ПараметрыФискализации.РевизияИнтерфейса); + ЗаписьXML.ЗаписатьАтрибут("VATRate", XMLСтрока(ЗначениеСтавкаНДС)); // Ставка НДС + + Если ТекущаяПозиция.Свойство("СуммаНДС") И НЕ ПустаяСтрока(ТекущаяПозиция.СуммаНДС) И ЗначениеСтавкаНДС <> "none" Тогда + ЗаписьXML.ЗаписатьАтрибут("VATAmount", XMLСтрока(ТекущаяПозиция.СуммаНДС)); + КонецЕсли; + + Если ТекущаяПозиция.Свойство("ПризнакСпособаРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакСпособаРасчета) Тогда + ПризнакСпособаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаСпособаРасчета(ТекущаяПозиция.ПризнакСпособаРасчета); + ЗаписьXML.ЗаписатьАтрибут("PaymentMethod", XMLСтрока(ПризнакСпособаРасчета)); + КонецЕсли; + + ПризнакПредметаРасчета = Неопределено; + Если ТекущаяПозиция.Свойство("ПризнакПредметаРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакПредметаРасчета) Тогда + ПризнакПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаПредметаРасчета(ТекущаяПозиция.ПризнакПредметаРасчета); + Если ПризнакПредметаРасчета <> Неопределено Тогда + ЗаписьXML.ЗаписатьАтрибут("CalculationSubject", XMLСтрока(ПризнакПредметаРасчета)); + КонецЕсли; + КонецЕсли; + + Если ТекущаяПозиция.Свойство("ПризнакАгентаПоПредметуРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакАгентаПоПредметуРасчета) Тогда + ПризнакАгентаПоПредметуРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПризнакаАгента(ТекущаяПозиция.ПризнакАгентаПоПредметуРасчета); + ЗаписьXML.ЗаписатьАтрибут("CalculationAgent", XMLСтрока(ПризнакАгентаПоПредметуРасчета)); + КонецЕсли; + + Если ТекущаяПозиция.Свойство("КодСтраныПроисхожденияТовара") И НЕ ПустаяСтрока(ТекущаяПозиция.КодСтраныПроисхожденияТовара) Тогда + ЗаписьXML.ЗаписатьАтрибут("CountryOfOrigin", XMLСтрока(ТекущаяПозиция.КодСтраныПроисхожденияТовара)); + КонецЕсли; + + Если ТекущаяПозиция.Свойство("НомерТаможеннойДекларации") И НЕ ПустаяСтрока(ТекущаяПозиция.НомерТаможеннойДекларации) Тогда + ЗаписьXML.ЗаписатьАтрибут("CustomsDeclaration", XMLСтрока(ТекущаяПозиция.НомерТаможеннойДекларации)); + КонецЕсли; + + Если ТекущаяПозиция.Свойство("СуммаАкциза") И ТекущаяПозиция.СуммаАкциза <> Неопределено Тогда + Если Число(ТекущаяПозиция.СуммаАкциза) > 0 Тогда + ЗаписьXML.ЗаписатьАтрибут("ExciseAmount", XMLСтрока(ТекущаяПозиция.СуммаАкциза)); + ИначеЕсли ПризнакПредметаРасчета <> Неопределено Тогда + Если ПризнакПредметаРасчета = 2 Или ПризнакПредметаРасчета = 30 Или ПризнакПредметаРасчета = 31 Тогда + ЗаписьXML.ЗаписатьАтрибут("ExciseAmount", XMLСтрока(ТекущаяПозиция.СуммаАкциза)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ТекущаяПозиция.Свойство("ДополнительныйРеквизит") Тогда // Тэг 1191 + + ДополнительныйРеквизит = ""; + Если НЕ ПустаяСтрока(ТекущаяПозиция.ДополнительныйРеквизит) Тогда + ДополнительныйРеквизит = ТекущаяПозиция.ДополнительныйРеквизит; + ИначеЕсли ВедетсяОбъемноСортовойУчет() И ТекущаяПозиция.ОбъемноСортовойУчет И ПараметрыФискализации.РевизияИнтерфейса < 3004 Тогда + // Передача сведений об объемно сортовой товара при оптовой продаже через ККТ + ДополнительныйРеквизит = "crpt=mrk"; + ИначеЕсли ТекущаяПозиция.Свойство("ДробноеКоличество") И ПараметрыФискализации.РевизияИнтерфейса < 3004 Тогда + // Дробное количество, рекомендации ЦРПТ "ВЫВОД ТОВАРА ИЗ ОБОРОТА ПРИ РЕАЛИЗАЦИИ КОНЕЧНЫМ ПОТРЕБИТЕЛЯМ (ЧАСТИЧНАЯ ПРОДАЖА)" + // для 1.05 и 1.1 - пишем в 1191, Формирование и передача фискального документа в ГИС МТ + Если Не ПустаяСтрока(ТекущаяПозиция.ДробноеКоличество.Числитель) И Не ПустаяСтрока(ТекущаяПозиция.ДробноеКоличество.Знаменатель) Тогда + Числитель = Число(ТекущаяПозиция.ДробноеКоличество.Числитель); + Знаменатель = Число(ТекущаяПозиция.ДробноеКоличество.Знаменатель); + ДополнительныйРеквизит = "mrk"; // Префикс «mrk», если после «mrk» указание дробной части отсутствует, упаковка считается выведенной из оборота полностью. + Если Числитель <> Знаменатель Тогда + ДополнительныйРеквизит = ДополнительныйРеквизит + Строка(Числитель) + "/" + Строка(Знаменатель) + "&"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Не ПустаяСтрока(ДополнительныйРеквизит) Тогда + ЗаписьXML.ЗаписатьАтрибут("AdditionalAttribute", XMLСтрока(ДополнительныйРеквизит)); // Тэг 1191 + КонецЕсли; + КонецЕсли; + + Если ПараметрыФискализации.РевизияИнтерфейса >= 3004 Тогда + + Если Не ПустаяСтрока(ТекущаяПозиция.КонтрольнаяМарка) Тогда + ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ТекущаяПозиция.КонтрольнаяМарка)); + КонецЕсли; + + Если ФорматФД = "1.2" Тогда + ДробноеКоличествоУказано = Ложь; + ДробноеКоличество = ТекущаяПозиция.ДробноеКоличество; + Если Не ПустаяСтрока(ДробноеКоличество.Числитель) И Не ПустаяСтрока(ДробноеКоличество.Знаменатель) Тогда + Если Число(ДробноеКоличество.Числитель) > 0 И Число(ДробноеКоличество.Знаменатель) > 0 Тогда + ДробноеКоличествоУказано = Истина; + КонецЕсли; + КонецЕсли; + + Если ДробноеКоличествоУказано Тогда + МераКоличестваПредметаРасчета = 0; + ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета)); + ЗаписьXML.ЗаписатьНачалоЭлемента("FractionalQuantity"); + ЗаписьXML.ЗаписатьАтрибут("Numerator", XMLСтрока(ДробноеКоличество.Числитель)); + ЗаписьXML.ЗаписатьАтрибут("Denominator", XMLСтрока(ДробноеКоличество.Знаменатель)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + Иначе + Если ВедетсяОбъемноСортовойУчет() И ТекущаяПозиция.ОбъемноСортовойУчет И Не ПустаяСтрока(ТекущаяПозиция.КоличествоВесовогоТовара) Тогда + МераКоличестваПредметаРасчета = 11; // Килограмм + Иначе + МераКоличестваПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(ТекущаяПозиция.КодЕдиницыИзмерения); + МераКоличестваПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчета); + КонецЕсли; + ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета)); + КонецЕсли; + КонецЕсли; + Иначе + Если ТекущаяПозиция.Свойство("ЕдиницаИзмерения") И ТекущаяПозиция.ЕдиницаИзмерения <> Неопределено Тогда + ЗаписьXML.ЗаписатьАтрибут("MeasurementUnit", XMLСтрока(Лев(ТекущаяПозиция.ЕдиницаИзмерения, 16))); + КонецЕсли; + КонецЕсли; + + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + МодульМенеджерОборудованияМаркировка.ЗаписатьДанныеКодаТоварнойНоменклатуры(ЗаписьXML, ТекущаяПозиция, ПараметрыФискализации); + + Если ВедетсяОбъемноСортовойУчет() И ТекущаяПозиция.ОбъемноСортовойУчет Тогда + МодульМенеджерОборудованияМаркировка.ЗаполнитьОтраслевойРеквизитОбъемноСортовойУчет(ТекущаяПозиция); + ИначеЕсли ОказываютсяУслугиОбщественноеПитания() И ТекущаяПозиция.ОбщественноеПитание Тогда + МодульМенеджерОборудованияМаркировка.ЗаполнитьОтраслевойРеквизитОбщественноеПитание(ТекущаяПозиция); + ИначеЕсли ТекущаяПозиция.ВетеринарныйПрепарат Тогда + МодульМенеджерОборудованияМаркировка.ЗаполнитьОтраслевойРеквизитВетеринарныеПрепараты(ТекущаяПозиция); + КонецЕсли; + + Если Не ПустаяСтрока(ТекущаяПозиция.ЗапросПроверкиКода.ИдентификаторЗапроса) + И Не ПустаяСтрока(ТекущаяПозиция.ЗапросПроверкиКода.ВременнаяМетка) Тогда + МодульМенеджерОборудованияМаркировка.ЗаполнитьДанныеЗапросПроверкиКода(ТекущаяПозиция); + КонецЕсли; + + КонецЕсли; + + ЗаписатьДанныеАгента(ЗаписьXML, ТекущаяПозиция.ДанныеАгента, ПараметрыФискализации.РевизияИнтерфейса); + ЗаписатьДанныеПоставщика(ЗаписьXML, ТекущаяПозиция.ДанныеПоставщика, ПараметрыФискализации.РевизияИнтерфейса); + Если ПараметрыФискализации.РевизияИнтерфейса >= 3004 Тогда + ЗаписатьОтраслевойРеквизит(ЗаписьXML, ТекущаяПозиция.ОтраслевойРеквизит); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + СуммаЧека = СуммаЧека + ТекущаяПозиция.Сумма; + + ИначеЕсли ТекущаяПозиция.Свойство("ТекстоваяСтрока") Тогда // Текстовая строка + Если ТекущаяПозиция.Свойство("ПереносСтроки") И ТекущаяПозиция.ПереносСтроки Тогда + ТекстовыеСтроки = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПостроитьПолеПереносом(ТекущаяПозиция.Текст, ПараметрыФискализации.ШиринаСтроки); + Иначе + ТекстовыеСтроки = ТекущаяПозиция.Текст; + КонецЕсли; + Выравнивание = ?(ТекущаяПозиция.Свойство("Выравнивание"), ТекущаяПозиция.Выравнивание, "Лево"); + Для НомерСтроки = 1 По СтрЧислоСтрок(ТекстовыеСтроки) Цикл + ВыделеннаяСтрока = СтрПолучитьСтроку(ТекстовыеСтроки, НомерСтроки); + ВыделеннаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыровнятьПоле(ВыделеннаяСтрока, ПараметрыФискализации.ШиринаСтроки, Выравнивание); + ЗаписьXML.ЗаписатьНачалоЭлемента("TextString"); + ЗаписьXML.ЗаписатьАтрибут("Text", XMLСтрока(ВыделеннаяСтрока)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЦикла; + + ИначеЕсли ТекущаяПозиция.Свойство("ШтрихКод") Тогда // Штрихкод + ЗаписьXML.ЗаписатьНачалоЭлемента("Barcode"); + ЗаписьXML.ЗаписатьАтрибут("Type" , XMLСтрока(ТекущаяПозиция.ТипШтрихкода)); + // Значение штрихкода. Штрихкод кодируется текстом в кодировке Base64. + Если ПараметрыФискализации.РевизияИнтерфейса >= 3003 Тогда + ШтрихКодBase64 = МенеджерОборудованияКлиентСервер.ШтрихкодВBase64(ТекущаяПозиция.ШтрихКод); + Если ТекущаяПозиция.Свойство("ШтрихКодBase64") + И НЕ ПустаяСтрока(ТекущаяПозиция.ШтрихКодBase64) Тогда + ШтрихКодBase64 = ТекущаяПозиция.ШтрихКодBase64; + КонецЕсли; + ЗаписьXML.ЗаписатьАтрибут("ValueBase64", XMLСтрока(ШтрихКодBase64)); + Иначе + ЗаписьXML.ЗаписатьАтрибут("Value", XMLСтрока(ТекущаяПозиция.ШтрихКод)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + КонецЦикла; + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + + // Таблица оплат + Если ТаблицаОплат <> Неопределено Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("Payments"); + ЗаписьXML.ЗаписатьАтрибут("Cash", XMLСтрока(СуммаНаличные)); + ЗаписьXML.ЗаписатьАтрибут("ElectronicPayment", XMLСтрока(СуммаЭлектронно)); + ЗаписьXML.ЗаписатьАтрибут("PrePayment", XMLСтрока(СуммаПредоплата)); + ЗаписьXML.ЗаписатьАтрибут("PostPayment", XMLСтрока(СуммаПостоплата)); + ЗаписьXML.ЗаписатьАтрибут("Barter", XMLСтрока(СуммаПредоставление)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + + Если ПараметрыФискализации.РевизияИнтерфейса >= 4004 + И ОбщиеПараметры.СведенияОБезналичнойОплате <> Неопределено + И ОбщиеПараметры.СведенияОБезналичнойОплате.Количество() Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("ElectronicPaymentInfo"); + Для Каждого СведенияОБезналичнойОплате Из ОбщиеПараметры.СведенияОБезналичнойОплате Цикл + ЗаписьXML.ЗаписатьНачалоЭлемента("ElectronicPayment"); + ЗаписьXML.ЗаписатьАтрибут("Amount", XMLСтрока(СведенияОБезналичнойОплате.Сумма)); + ЗаписьXML.ЗаписатьАтрибут("PaymentMethod", XMLСтрока(СведенияОБезналичнойОплате.ПризнакСпособаОплаты)); + ЗаписьXML.ЗаписатьАтрибут("Identifiers", XMLСтрока(СведенияОБезналичнойОплате.Идентификаторы)); + ЗаписьXML.ЗаписатьАтрибут("AdditionalInformation", XMLСтрока(СведенияОБезналичнойОплате.ДополнительныеCведения)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЦикла; + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + + ИначеЕсли ПараметрыФискализации.РевизияИнтерфейса > 2001 Тогда // Версия стандарта 2.2 и выше + + ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters"); + ЗаписьXML.ЗаписатьАтрибут("PaymentType" , XMLСтрока(ТипРасчета)); + ЗаписьXML.ЗаписатьАтрибут("TaxVariant" , XMLСтрока(СистемаНалогообложения)); + ЗаписьXML.ЗаписатьАтрибут("CashierName" , XMLСтрока(ОбщиеПараметры.Кассир)); + ЗаписьXML.ЗаписатьАтрибут("CashierVATIN", ?(ОбщиеПараметры.Свойство("КассирИНН"), XMLСтрока(ОбщиеПараметры.КассирИНН), "")); + Если Не ПустаяСтрока(ОбщиеПараметры.ОтправительEmail) И Электронно Тогда // Отправитель Email указывается только для Электронно. + ЗаписьXML.ЗаписатьАтрибут("SenderEmail", XMLСтрока(ОбщиеПараметры.ОтправительEmail)); + КонецЕсли; + // Email отправляет средствами 1C + Если ОбщиеПараметры.Свойство("Отправляет1СEmail") И НЕ ОбщиеПараметры.Отправляет1СEmail Тогда + ЗаписьXML.ЗаписатьАтрибут("CustomerEmail", XMLСтрока(?(ОбщиеПараметры.Свойство("ПокупательEmail"), ОбщиеПараметры.ПокупательEmail, ""))); + КонецЕсли; + // SMS отправляет средствами 1C + Если ОбщиеПараметры.Свойство("Отправляет1СSMS") И НЕ ОбщиеПараметры.Отправляет1СSMS Тогда + ПокупательНомер = ?(ОбщиеПараметры.Свойство("ПокупательНомер"), ОбщиеПараметры.ПокупательНомер, ""); + Если Не ПустаяСтрока(ПокупательНомер) И Лев(ПокупательНомер, 1) <> "+" Тогда + ПокупательНомер = "+" + ПокупательНомер; + КонецЕсли; + ЗаписьXML.ЗаписатьАтрибут("CustomerPhone", XMLСтрока(ПокупательНомер)); + КонецЕсли; + + Если ОбщиеПараметры.Свойство("ПризнакАгента") И НЕ ПустаяСтрока(ОбщиеПараметры.ПризнакАгента) Тогда // Атрибут с ФФД 1.05 + ПризнакАгента = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПризнакаАгента(ОбщиеПараметры.ПризнакАгента); + ЗаписьXML.ЗаписатьАтрибут("AgentSign", XMLСтрока(ПризнакАгента)); + КонецЕсли; + + Если ОбщиеПараметры.Свойство("АдресРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.АдресРасчетов) Тогда + ЗаписьXML.ЗаписатьАтрибут("AddressSettle", XMLСтрока(ОбщиеПараметры.АдресРасчетов)); + КонецЕсли; + Если ОбщиеПараметры.Свойство("МестоРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.МестоРасчетов) Тогда + ЗаписьXML.ЗаписатьАтрибут("PlaceSettle", XMLСтрока(ОбщиеПараметры.МестоРасчетов)); + КонецЕсли; + + Получатель = ОбщиеПараметры.Получатель; + Если ПустаяСтрока(Получатель) Тогда + Получатель = ОбщиеПараметры.СведенияОПокупателе.Покупатель; + КонецЕсли; + ПолучательИНН = ОбщиеПараметры.ПолучательИНН; + Если ПустаяСтрока(ПолучательИНН) Тогда + ПолучательИНН = ОбщиеПараметры.СведенияОПокупателе.ПокупательИНН; + КонецЕсли; + + Если Не ПустаяСтрока(Получатель) Тогда + ЗаписьXML.ЗаписатьАтрибут("CustomerInfo", XMLСтрока(Получатель)); + КонецЕсли; + Если Не ПустаяСтрока(ПолучательИНН) Тогда + ЗаписьXML.ЗаписатьАтрибут("CustomerINN", XMLСтрока(ПолучательИНН)); + КонецЕсли; + + Если ОбщиеПараметры.Свойство("ДополнительныйРеквизит") И НЕ ПустаяСтрока(ОбщиеПараметры.ДополнительныйРеквизит) Тогда + ЗаписьXML.ЗаписатьАтрибут("AdditionalAttribute", XMLСтрока(ОбщиеПараметры.ДополнительныйРеквизит)); + КонецЕсли; + + Если ОбщиеПараметры.Свойство("ДополнительныйРеквизитПользователя") Тогда + ЗаписатьДополнительныйРеквизитПользователя(ЗаписьXML, ОбщиеПараметры.ДополнительныйРеквизитПользователя); + КонецЕсли; + + ЗаписатьДанныеАгента(ЗаписьXML, ОбщиеПараметры.ДанныеАгента); + ЗаписатьДанныеПоставщика(ЗаписьXML, ОбщиеПараметры.ДанныеПоставщика); + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + // Табличная часть + Если ОбщиеПараметры.ПозицииЧека <> Неопределено Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("Positions"); + Для ИндексМассива = 0 По ОбщиеПараметры.ПозицииЧека.Количество() - 1 Цикл + ТекущаяПозиция = ОбщиеПараметры.ПозицииЧека[ИндексМассива]; //см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека + + Если ТекущаяПозиция.Свойство("ФискальнаяСтрока") Тогда + Если ТекущаяПозиция.ЦенаСоСкидками = 0 И ТекущаяПозиция.Сумма > 0 И ТекущаяПозиция.Количество > 0 Тогда + ЦенаСоСкидками = Окр(ТекущаяПозиция.Сумма / ТекущаяПозиция.Количество, 2); + Иначе + ЦенаСоСкидками = ТекущаяПозиция.ЦенаСоСкидками; + КонецЕсли; + ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString"); + ЗаписьXML.ЗаписатьАтрибут("Name" , XMLСтрока(ТекущаяПозиция.Наименование)); + ЗаписьXML.ЗаписатьАтрибут("Quantity" , XMLСтрока(ТекущаяПозиция.Количество)); + ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount", XMLСтрока(ЦенаСоСкидками)); + ЗаписьXML.ЗаписатьАтрибут("SumWithDiscount" , XMLСтрока(ТекущаяПозиция.Сумма)); + ЗаписьXML.ЗаписатьАтрибут("DiscountSum" , XMLСтрока(ТекущаяПозиция.СуммаСкидок)); + ЗаписьXML.ЗаписатьАтрибут("Department" , XMLСтрока(ТекущаяПозиция.НомерСекции)); + + ЗначениеСтавкаНДС = ПредставлениеСтавкиНДС(ТекущаяПозиция.СтавкаНДС, ПараметрыФискализации.РевизияИнтерфейса); + ЗаписьXML.ЗаписатьАтрибут("Tax", XMLСтрока(ЗначениеСтавкаНДС)); + Если ТекущаяПозиция.Свойство("СуммаНДС") И НЕ ПустаяСтрока(ТекущаяПозиция.СуммаНДС) Тогда + ЗаписьXML.ЗаписатьАтрибут("TaxSum", XMLСтрока(ТекущаяПозиция.СуммаНДС)); + КонецЕсли; + + Если ТекущаяПозиция.Свойство("ПризнакСпособаРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакСпособаРасчета) Тогда + ПризнакСпособаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаСпособаРасчета(ТекущаяПозиция.ПризнакСпособаРасчета); + ЗаписьXML.ЗаписатьАтрибут("SignMethodCalculation", XMLСтрока(ПризнакСпособаРасчета)); + КонецЕсли; + Если ТекущаяПозиция.Свойство("ПризнакПредметаРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакПредметаРасчета) Тогда + ПризнакПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаПредметаРасчета(ТекущаяПозиция.ПризнакПредметаРасчета); + Если ПризнакПредметаРасчета <> Неопределено Тогда + ЗаписьXML.ЗаписатьАтрибут("SignCalculationObject", XMLСтрока(ПризнакПредметаРасчета)); + КонецЕсли; + КонецЕсли; + + Если ТекущаяПозиция.Свойство("ПризнакАгентаПоПредметуРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакАгентаПоПредметуРасчета) Тогда + ПризнакАгентаПоПредметуРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПризнакаАгента(ТекущаяПозиция.ПризнакАгентаПоПредметуРасчета); + ЗаписьXML.ЗаписатьАтрибут("SignSubjectCalculationAgent", XMLСтрока(ПризнакАгентаПоПредметуРасчета)); + КонецЕсли; + + Если ТекущаяПозиция.Свойство("ЕдиницаИзмерения") И ТекущаяПозиция.ЕдиницаИзмерения <> Неопределено Тогда + ЗаписьXML.ЗаписатьАтрибут("MeasurementUnit", XMLСтрока(Лев(ТекущаяПозиция.ЕдиницаИзмерения, 16))); + КонецЕсли; + + Если ТекущаяПозиция.Свойство("КодСтраныПроисхожденияТовара") И НЕ ПустаяСтрока(ТекущаяПозиция.КодСтраныПроисхожденияТовара) Тогда + ЗаписьXML.ЗаписатьАтрибут("CountryOfOrigin", XMLСтрока(ТекущаяПозиция.КодСтраныПроисхожденияТовара)); + КонецЕсли; + Если ТекущаяПозиция.Свойство("НомерТаможеннойДекларации") И НЕ ПустаяСтрока(ТекущаяПозиция.НомерТаможеннойДекларации) Тогда + ЗаписьXML.ЗаписатьАтрибут("CustomsDeclaration", XMLСтрока(ТекущаяПозиция.НомерТаможеннойДекларации)); + КонецЕсли; + Если ТекущаяПозиция.Свойство("СуммаАкциза") И ТекущаяПозиция.СуммаАкциза <> Неопределено Тогда + ЗаписьXML.ЗаписатьАтрибут("ExciseAmount", XMLСтрока(XMLСтрока(ТекущаяПозиция.СуммаАкциза))); + КонецЕсли; + + Если ТекущаяПозиция.Свойство("ДополнительныйРеквизит") И НЕ ПустаяСтрока(ТекущаяПозиция.ДополнительныйРеквизит) Тогда + ЗаписьXML.ЗаписатьАтрибут("AdditionalAttribute", XMLСтрока(XMLСтрока(ТекущаяПозиция.ДополнительныйРеквизит))); + КонецЕсли; + + ЗаписатьДанныеАгента(ЗаписьXML, ТекущаяПозиция.ДанныеАгента); + ЗаписатьДанныеПоставщика(ЗаписьXML, ТекущаяПозиция.ДанныеПоставщика); + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + МодульМенеджерОборудованияМаркировка.ЗаписатьДанныеКодаТоварнойНоменклатуры(ЗаписьXML, ТекущаяПозиция, ПараметрыФискализации); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + СуммаЧека = СуммаЧека + ТекущаяПозиция.Сумма; + + ИначеЕсли ТекущаяПозиция.Свойство("ТекстоваяСтрока") Тогда + + Если ТекущаяПозиция.Свойство("ПереносСтроки") И ТекущаяПозиция.ПереносСтроки Тогда + ТекстовыеСтроки = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПостроитьПолеПереносом(ТекущаяПозиция.Текст, ПараметрыФискализации.ШиринаСтроки); + Иначе + ТекстовыеСтроки = ТекущаяПозиция.Текст; + КонецЕсли; + Выравнивание = ?(ТекущаяПозиция.Свойство("Выравнивание"), ТекущаяПозиция.Выравнивание, "Лево"); + Для НомерСтроки = 1 По СтрЧислоСтрок(ТекстовыеСтроки) Цикл + ВыделеннаяСтрока = СтрПолучитьСтроку(ТекстовыеСтроки, НомерСтроки); + ВыделеннаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыровнятьПоле(ВыделеннаяСтрока, ПараметрыФискализации.ШиринаСтроки, Выравнивание); + ЗаписьXML.ЗаписатьНачалоЭлемента("TextString"); + ЗаписьXML.ЗаписатьАтрибут("Text", XMLСтрока(ВыделеннаяСтрока)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЦикла; + + ИначеЕсли ТекущаяПозиция.Свойство("ШтрихКод") Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("Barcode"); + ЗаписьXML.ЗаписатьАтрибут("BarcodeType", XMLСтрока(ТекущаяПозиция.ТипШтрихкода)); + ЗаписьXML.ЗаписатьАтрибут("Barcode", XMLСтрока(ТекущаяПозиция.ШтрихКод)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + КонецЦикла; + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + + // Таблица оплат + Если ТаблицаОплат <> Неопределено Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("Payments"); + ЗаписьXML.ЗаписатьАтрибут("Cash" , XMLСтрока(СуммаНаличные)); + ЗаписьXML.ЗаписатьАтрибут("ElectronicPayment", XMLСтрока(СуммаЭлектронно)); + ЗаписьXML.ЗаписатьАтрибут("Credit" , XMLСтрока(СуммаПостоплата)); + ЗаписьXML.ЗаписатьАтрибут("AdvancePayment" , XMLСтрока(СуммаПредоплата)); + ЗаписьXML.ЗаписатьАтрибут("CashProvision" , XMLСтрока(СуммаПредоставление)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + ДанныеЧекаXML = ЗаписьXML.Закрыть(); + + Если ВключатьПерсональныеДанные Тогда + ПараметрыФискализации.ДанныеЧекаXMLПерсональныеДанные = ДанныеЧекаXML; + Иначе + ПараметрыФискализации.ДанныеЧекаXML = ДанныеЧекаXML; + ПараметрыФискализации.ТипРасчета = ОбщиеПараметры.ТипРасчета; + ПараметрыФискализации.СуммаЧека = СуммаЧека; + ПараметрыФискализации.ОплатаНаличные = ?(СуммаНаличные + ОплатаНеНаличными > СуммаЧека, СуммаЧека - ОплатаНеНаличными, СуммаНаличные); + ПараметрыФискализации.ОплатаЭлектронно = СуммаЭлектронно; + ПараметрыФискализации.ОплатаПостоплата = СуммаПостоплата; + ПараметрыФискализации.ОплатаПредоплата = СуммаПредоплата; + ПараметрыФискализации.ОплатаВстречноеПредоставление = СуммаПредоставление; + КонецЕсли; + // -- Локализация + +КонецПроцедуры + +// Получить XMLПакет для операции. +// +// Параметры: +// ОбщиеПараметры - Структура, Булево - Общие параметры +// РевизияИнтерфейса - Число - Ревизия интерфейса +// +// Возвращаемое значение: +// Строка - Получить XMLПакет для операции +Функция ПолучитьXMLПакетДляОперации(ОбщиеПараметры, РевизияИнтерфейса = 0) Экспорт + + ЗаписьXML = Новый ЗаписьXML(); + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("InputParameters"); + ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters"); + + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + ЗаписьXML.ЗаписатьАтрибут("CashierName", ?(ОбщиеПараметры.Свойство("Кассир"), XMLСтрока(ОбщиеПараметры.Кассир), НСтр("ru='Администратор'"))); + ЗаписьXML.ЗаписатьАтрибут("CashierINN" , ?(ОбщиеПараметры.Свойство("КассирИНН"), XMLСтрока(ОбщиеПараметры.КассирИНН), "")); + Если ОбщиеПараметры.Свойство("АдресРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.АдресРасчетов) Тогда + ЗаписьXML.ЗаписатьАтрибут("SaleAddress", XMLСтрока(ОбщиеПараметры.АдресРасчетов)); + КонецЕсли; + Если ОбщиеПараметры.Свойство("МестоРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.МестоРасчетов) Тогда + ЗаписьXML.ЗаписатьАтрибут("SaleLocation", XMLСтрока(ОбщиеПараметры.МестоРасчетов)); + КонецЕсли; + Если РевизияИнтерфейса >= 4000 Тогда // Версия стандарта 4.0 (ОФД 1.2) + Если ОбщиеПараметры.Свойство("Печать") И НЕ ПустаяСтрока(ОбщиеПараметры.Печать) Тогда + ЗаписьXML.ЗаписатьАтрибут("PrintRequired", XMLСтрока(ОбщиеПараметры.Печать)); + КонецЕсли; + КонецЕсли; + Иначе + ЗаписьXML.ЗаписатьАтрибут("CashierName" , ?(ОбщиеПараметры.Свойство("Кассир"), XMLСтрока(ОбщиеПараметры.Кассир), НСтр("ru='Администратор'"))); + ЗаписьXML.ЗаписатьАтрибут("CashierVATIN", ?(ОбщиеПараметры.Свойство("КассирИНН"), XMLСтрока(ОбщиеПараметры.КассирИНН), "")); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + Возврат ЗаписьXML.Закрыть(); + +КонецФункции + +// Получить XMLПакет для текста. +// +// Параметры: +// СтрокаТекста - Строка, Структура - Строка текста +// РевизияИнтерфейса - Число - Ревизия интерфейса +// +// Возвращаемое значение: +// Массив из ЗаписьXML - Получить XMLПакет для текста. +Функция ПолучитьXMLПакетДляТекста(СтрокаТекста, РевизияИнтерфейса = 0) Экспорт + + Результат = Новый Массив(); + + // Пакетная печать чека. Подготовка пакета. + ЗаписьXML = Новый ЗаписьXML(); + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("Document"); + + Если НЕ ПустаяСтрока(СтрокаТекста) Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("Positions"); + + Для НомерСтроки = 1 По СтрЧислоСтрок(СтрокаТекста) Цикл + + ВыделеннаяСтрока = СтрПолучитьСтроку(СтрокаТекста, НомерСтроки); + + Если ((Найти(ВыделеннаяСтрока, "[отрезка]") > 0) + Или (Найти(ВыделеннаяСтрока, "[cut]") > 0)) + И НомерСтроки < СтрЧислоСтрок(СтрокаТекста) Тогда + + // Завершаем запись текущего пакета. + ЗаписьXML.ЗаписатьКонецЭлемента(); + ЗаписьXML.ЗаписатьКонецЭлемента(); + Текст = ЗаписьXML.Закрыть(); + Результат.Добавить(Текст); + + // Новый пакет. + ЗаписьXML = Новый ЗаписьXML(); + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("Document"); + ЗаписьXML.ЗаписатьНачалоЭлемента("Positions"); + + ИначеЕсли (Найти(ВыделеннаяСтрока, "|ШтрихКод|") > 0) Тогда + ВыделеннаяСтрока = Сред(ВыделеннаяСтрока, СтрДлина("|ШтрихКод|") + 1); + ВремТипШтрихкода = Сред(ВыделеннаяСтрока, 1, Найти(ВыделеннаяСтрока, "|") - 1); + ВремШтрихКод = СокрЛП(Сред(ВыделеннаяСтрока, Найти(ВыделеннаяСтрока, "|") + 1)); + ЗаписьXML.ЗаписатьНачалоЭлемента("Barcode"); + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + ЗаписьXML.ЗаписатьАтрибут("Type", XMLСтрока(ВремТипШтрихкода)); + // Значение штрихкода. Штрихкод кодируется текстом в кодировке Base64. + Если РевизияИнтерфейса >= 3003 Тогда + ШтрихКодBase64 = МенеджерОборудованияКлиентСервер.ШтрихкодВBase64(ВремШтрихКод); + ЗаписьXML.ЗаписатьАтрибут("ValueBase64", XMLСтрока(ШтрихКодBase64)); + Иначе + ЗаписьXML.ЗаписатьАтрибут("Value", XMLСтрока(ВремШтрихКод)); + КонецЕсли; + Иначе + ЗаписьXML.ЗаписатьАтрибут("BarcodeType", XMLСтрока(ВремТипШтрихкода)); + ЗаписьXML.ЗаписатьАтрибут("Barcode", XMLСтрока(ВремШтрихКод)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + Иначе + ЗаписьXML.ЗаписатьНачалоЭлемента("TextString"); + ЗаписьXML.ЗаписатьАтрибут("Text", XMLСтрока(ВыделеннаяСтрока)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + Текст = ЗаписьXML.Закрыть(); + + Результат.Добавить(Текст); + + Возврат Результат; + +КонецФункции + +// Получить параметры состояния из XML пакета. +// +// Параметры: +// Данные - Произвольный. +// НомерСмены - Неопределено - Номер смены +// +// Возвращаемое значение: +// Структура - Получить параметры состояния из XMLПакета: +// * ДатаСменыККТ - Число - +// * НомерСменыККТ - Число - +// * НомерЧекаККТ - Число - +// * НомерЧекаЗаСмену - Число - +// * СтатусСмены - Неопределено - +// * СчетчикиОперацийПриход - Структура -: +// ** КоличествоЧеков - Число. +// ** СуммаЧеков - Число. +// ** КоличествоЧековКоррекции - Число. +// ** СуммаЧековКоррекции - Число. +// * СчетчикиОперацийВозвратПрихода - Структура -: +// ** КоличествоЧеков - Число. +// ** СуммаЧеков - Число. +// ** КоличествоЧековКоррекции - Число. +// ** СуммаЧековКоррекции - Число. +// * СчетчикиОперацийРасход - Структура -: +// ** КоличествоЧеков - Число. +// ** СуммаЧеков - Число. +// ** КоличествоЧековКоррекции - Число. +// ** СуммаЧековКоррекции - Число. +// * СчетчикиОперацийВозвратРасхода - Структура -: +// ** КоличествоЧеков - Число. +// ** СуммаЧеков - Число. +// ** КоличествоЧековКоррекции - Число. +// ** СуммаЧековКоррекции - Число. +// * КоличествоЧеков - Число. +// * ОстатокНаличных - Число. +// * ПревышеноВремяОжиданияОтветаОФД - Булево - +// * КоличествоНепереданныхФД - Неопределено - +// * НомерПервогоНепереданногоФД - Неопределено - +// * ДатаПервогоНепереданногоФД - Неопределено - +// * НеобходимаСрочнаяЗаменаФН - Булево - +// * ПамятьФНПереполнена - Булево - +// * РесурсФНИсчерпан - Булево - +Функция ПолучитьПараметрыСостоянияИзXMLПакета(Данные, НомерСмены = Неопределено) Экспорт + + Параметры = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыНормализуемыхФискальныхДанных(); + Параметры.НомерСменыККТ = НомерСмены; + + Если Не ПустаяСтрока(Данные) Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(Данные); + ЧтениеXML.ПерейтиКСодержимому(); + Если ЧтениеXML.Имя = "StatusParameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ЧтениеXML.Прочитать() И ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + КоличествоНепереданныхФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentsCounter"); + Параметры.КоличествоНепереданныхФД = ?(ПустаяСтрока(КоличествоНепереданныхФД), 0, Число(КоличествоНепереданныхФД)); + Параметры.НомерПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstNumber"); + ДатаПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstDateTime"); + Если НЕ ПустаяСтрока(ДатаПервогоНепереданногоФД) Тогда + Параметры.ДатаПервогоНепереданногоФД = XMLЗначение(Тип("Дата"), ДатаПервогоНепереданногоФД); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Параметры; + +КонецФункции + +// Получить таблицу параметров смены из ККТ. +// +// Параметры: +// ДанныеXML - Строка - строка XML +// РевизияИнтерфейса - Число - ревизия интерфейса +// НомерСменыККТ - Число - номер смены +// НомерЧекаККТ - Число - номер чека +// +// Возвращаемое значение: +// Структура. +// +Функция ПолучитьПараметрыСменыИзXMLПакета(ДанныеXML, РевизияИнтерфейса = 0, НомерСменыККТ = 0, НомерЧекаККТ = 0) Экспорт + + Параметры = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыНормализуемыхФискальныхДанных(); + Параметры.НомерСменыККТ = НомерСменыККТ; + Параметры.НомерЧекаККТ = НомерЧекаККТ; + + Если Не ПустаяСтрока(ДанныеXML) Тогда + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ДанныеXML); + ЧтениеXML.ПерейтиКСодержимому(); + + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + Если ЧтениеXML.Имя = "OutputParameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ЧтениеXML.Прочитать() И ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Параметры.НомерСменыККТ = ЧтениеXML.ЗначениеАтрибута("ShiftNumber"); + Параметры.НомерЧекаККТ = ЧтениеXML.ЗначениеАтрибута("CheckNumber"); + ДатаСменыККТ = ЧтениеXML.ЗначениеАтрибута("DateTime"); + Если НЕ ПустаяСтрока(ДатаСменыККТ) Тогда + Параметры.ДатаСменыККТ = XMLЗначение(Тип("Дата"), ДатаСменыККТ); + КонецЕсли; + Параметры.НомерЧекаЗаСмену = ЧтениеXML.ЗначениеАтрибута("ShiftClosingCheckNumber"); + Параметры.СтатусСмены = Число(ЧтениеXML.ЗначениеАтрибута("ShiftState")); + Параметры.ОстатокНаличных = ЧтениеXML.ЗначениеАтрибута("CashBalance"); + + КоличествоНепереданныхФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentsCounter"); + Параметры.КоличествоНепереданныхФД = ?(ПустаяСтрока(КоличествоНепереданныхФД), 0, Число(КоличествоНепереданныхФД)); + + Параметры.НомерПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstNumber"); + + КоличествоЧеков = ЧтениеXML.ЗначениеАтрибута("DocumentsCounter"); + Параметры.КоличествоЧеков = ?(ПустаяСтрока(КоличествоЧеков), 0, Число(КоличествоЧеков)); + + ДатаПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstDateTime"); + Если НЕ ПустаяСтрока(ДатаПервогоНепереданногоФД) Тогда + Параметры.ДатаПервогоНепереданногоФД = XMLЗначение(Тип("Дата"), ДатаПервогоНепереданногоФД); + КонецЕсли; + Параметры.НеобходимаСрочнаяЗаменаФН = ВРег(ЧтениеXML.ЗначениеАтрибута("FNError")) = "TRUE"; + Параметры.ПамятьФНПереполнена = ВРег(ЧтениеXML.ЗначениеАтрибута("FNOverflow")) = "TRUE"; + Параметры.РесурсФНИсчерпан = ВРег(ЧтениеXML.ЗначениеАтрибута("FNFail")) = "TRUE"; + СрокДействияФН = ЧтениеXML.ЗначениеАтрибута("FNValidityDate"); + Если НЕ ПустаяСтрока(СрокДействияФН) Тогда + Параметры.СрокДействияФН = XMLЗначение(Тип("Дата"), СрокДействияФН); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Иначе + Если ЧтениеXML.Имя = "OutputParameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ЧтениеXML.Прочитать() И ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Параметры.ПревышеноВремяОжиданияОтветаОФД = ВРег(ЧтениеXML.ЗначениеАтрибута("OFDtimeout")) = "TRUE"; + Параметры.НеобходимаСрочнаяЗаменаФН = ВРег(ЧтениеXML.ЗначениеАтрибута("UrgentReplacementFN")) = "TRUE"; + Параметры.ПамятьФНПереполнена = ВРег(ЧтениеXML.ЗначениеАтрибута("MemoryOverflowFN")) = "TRUE"; + Параметры.РесурсФНИсчерпан = ВРег(ЧтениеXML.ЗначениеАтрибута("ResourcesExhaustionFN")) = "TRUE"; + КоличествоНепереданныхФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentsCounter"); + Параметры.КоличествоНепереданныхФД = ?(ПустаяСтрока(КоличествоНепереданныхФД), 0, Число(КоличествоНепереданныхФД)); + Параметры.НомерПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstNumber"); + ДатаПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstDateTime"); + Если НЕ ПустаяСтрока(ДатаПервогоНепереданногоФД) Тогда + Параметры.ДатаПервогоНепереданногоФД = XMLЗначение(Тип("Дата"), ДатаПервогоНепереданногоФД); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Параметры; + +КонецФункции + +// Заполнить результаты фискализация чека из XML пакета. +// +// Параметры: +// ПараметрыФискализации - Структура +Процедура ЗаполнитьРезультатыФискализацияЧекаИзXMLПакета(ПараметрыФискализации) Экспорт + + Если Не ПустаяСтрока(ПараметрыФискализации.РезультатОперацииXML) Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ПараметрыФискализации.РезультатОперацииXML); + ЧтениеXML.ПерейтиКСодержимому(); + Если ЧтениеXML.Имя = "DocumentOutputParameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ЧтениеXML.Прочитать() И ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ПараметрыФискализации.НомерСменыККТ = ЧтениеXML.ЗначениеАтрибута("ShiftNumber"); + ПараметрыФискализации.НомерЧекаККТ = ЧтениеXML.ЗначениеАтрибута("CheckNumber"); + ПараметрыФискализации.НомерЧекаЗаСмену = ЧтениеXML.ЗначениеАтрибута("ShiftClosingCheckNumber"); + ПараметрыФискализации.ФискальныйПризнак = ЧтениеXML.ЗначениеАтрибута("FiscalSign"); + ПараметрыФискализации.АдресСайтаПроверки = ЧтениеXML.ЗначениеАтрибута("AddressSiteInspections"); + ПараметрыФискализации.ОшибкаПечати = ВРег(ЧтениеXML.ЗначениеАтрибута("PrintError")) = "TRUE" ; + ДатаВремяЧека = ЧтениеXML.ЗначениеАтрибута("DateTime"); + Если НЕ ПустаяСтрока(ДатаВремяЧека) Тогда + ПараметрыФискализации.ДатаВремяЧека = XMLЗначение(Тип("Дата"), ДатаВремяЧека); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Процедура заполняет XML пакет для печати текстового документа +// +// Параметры: +// ТестовыеЧеки - Массив из Строка - +// НефискальныеДокументы - Массив из см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ПараметрыПодключения - См. МенеджерОборудованияКлиентСервер.ПараметрыПодключения +// ШиринаСтроки - Число - ширина строки печатающего устройства +// +Процедура ЗаполнитьXMLПакетыДляТекстовогоДокумента(ТестовыеЧеки, НефискальныеДокументы, ПараметрыПодключения, ШиринаСтроки = 32) Экспорт + + РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + ТипыОборудования = ПараметрыПодключения.ТипыОборудования; + + Для Каждого ПозицииЧека Из НефискальныеДокументы Цикл + + // Пакетная печать чека. Подготовка пакета. + ЗаписьXML = Новый ЗаписьXML(); + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("Document"); + + // Табличная часть + Если ПозицииЧека <> Неопределено Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("Positions"); + Для ИндексМассива = 0 По ПозицииЧека.Количество() - 1 Цикл + ТекущаяПозиция = ПозицииЧека[ИндексМассива]; // см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека + Если ТекущаяПозиция.Свойство("ФискальнаяСтрока") Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString"); + ЗаписьXML.ЗаписатьАтрибут("Name" , XMLСтрока(ТекущаяПозиция.Наименование)); + ЗаписьXML.ЗаписатьАтрибут("Quantity" , XMLСтрока(ТекущаяПозиция.Количество)); + ЗаписьXML.ЗаписатьАтрибут("Price" , XMLСтрока(ТекущаяПозиция.Цена)); + ЗаписьXML.ЗаписатьАтрибут("Amount" , XMLСтрока(ТекущаяПозиция.Сумма)); + ЗаписьXML.ЗаписатьАтрибут("Department", XMLСтрока(ТекущаяПозиция.НомерСекции)); + Если НЕ ПустаяСтрока(ТекущаяПозиция.СтавкаНДС) Тогда + ЗаписьXML.ЗаписатьАтрибут("Tax" , XMLСтрока(ТекущаяПозиция.СтавкаНДС)); + Иначе + ЗаписьXML.ЗаписатьАтрибут("Tax" , "none"); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + ИначеЕсли ТекущаяПозиция.Свойство("ТекстоваяСтрока") Тогда + Если ТекущаяПозиция.Свойство("ПереносСтроки") И ТекущаяПозиция.ПереносСтроки Тогда + ТекстовыеСтроки = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПостроитьПолеПереносом(ТекущаяПозиция.Текст, ШиринаСтроки); + Иначе + ТекстовыеСтроки = ТекущаяПозиция.Текст; + КонецЕсли; + Выравнивание = ?(ТекущаяПозиция.Свойство("Выравнивание"), ТекущаяПозиция.Выравнивание, "Лево"); + Для НомерСтроки = 1 По СтрЧислоСтрок(ТекстовыеСтроки) Цикл + ВыделеннаяСтрока = СтрПолучитьСтроку(ТекстовыеСтроки, НомерСтроки); + ВыделеннаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыровнятьПоле(ВыделеннаяСтрока, ШиринаСтроки, Выравнивание); + ЗаписьXML.ЗаписатьНачалоЭлемента("TextString"); + ЗаписьXML.ЗаписатьАтрибут("Text", XMLСтрока(ВыделеннаяСтрока)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЦикла; + ИначеЕсли ТекущаяПозиция.Свойство("ШтрихКод") Тогда // Штрихкод + ЗаписьXML.ЗаписатьНачалоЭлемента("Barcode"); + Если РевизияИнтерфейса >= 3003 Тогда + ЗаписьXML.ЗаписатьАтрибут("Type" , XMLСтрока(ТекущаяПозиция.ТипШтрихкода)); + // Значение штрихкода. Штрихкод кодируется текстом в кодировке Base64. + ШтрихКодBase64 = МенеджерОборудованияКлиентСервер.ШтрихкодВBase64(ТекущаяПозиция.ШтрихКод); + Если ТекущаяПозиция.Свойство("ШтрихКодBase64") + И НЕ ПустаяСтрока(ТекущаяПозиция.ШтрихКодBase64) Тогда + ШтрихКодBase64 = ТекущаяПозиция.ШтрихКодBase64; + КонецЕсли; + ЗаписьXML.ЗаписатьАтрибут("ValueBase64", XMLСтрока(ШтрихКодBase64)); + ИначеЕсли РевизияИнтерфейса >= 3000 И ТипыОборудования.ККТ Тогда + ЗаписьXML.ЗаписатьАтрибут("Type" , XMLСтрока(ТекущаяПозиция.ТипШтрихкода)); + ЗаписьXML.ЗаписатьАтрибут("Value", XMLСтрока(ТекущаяПозиция.ШтрихКод)); + Иначе + ЗаписьXML.ЗаписатьАтрибут("BarcodeType" , XMLСтрока(ТекущаяПозиция.ТипШтрихкода)); + ЗаписьXML.ЗаписатьАтрибут("Barcode", XMLСтрока(ТекущаяПозиция.ШтрихКод)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + КонецЦикла; + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + Текст = ЗаписьXML.Закрыть(); + ТестовыеЧеки.Добавить(Текст); + + КонецЦикла; + +КонецПроцедуры + +// Получить структуру чека из XML. +// +// Параметры: +// ДанныеXML - Строка - Данные XML +// ДанныхМаркировки - Булево - Будут загружаться данные о маркировке +// +// Возвращаемое значение: +// Структура - Загрузить данные фискализации из XML: +// * ДанныеКоррекции - Структура -: +// ** НомерПредписания - Число - +// ** ДатаКоррекции - Дата - +// ** ОписаниеКоррекции - Строка - +// ** ТипКоррекции - Число - +// * НеприменениеККТ - Булево - +// * КорректируемыйДокумент - Произвольный - +// * ЕстьПерсональныеДанные - Булево - +// * ИндивидуальныйРежимПодготовкиДанныхКПередачеВОФД - Булево - +// * ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число - +// * СпособФорматноЛогическогоКонтроля - Неопределено - +// * СформироватьЧекКоррекции - Булево - +// * ДополнительныйРеквизитПользователя - Структура -: +// ** Значение - Произвольный - +// ** Наименование - Строка - +// * ДополнительныйРеквизит - Неопределено - +// * НефискальныеДокументы - Массив из ОпределяемыйТип.ОснованиеФискальнойОперацииБПО - +// * КассаККМ - Произвольный - +// * ШаблонЧека - Произвольный - +// * ТаблицаОплат - Массив из Структура- +// * ПозицииЧека - Массив из Структура - +// * КопийЧека - Число - +// * ТекстПодвала - Строка - +// * ТекстШапки - Строка - +// * ДатаВремя - Дата - +// * НомерСмены - Число - +// * НомерЧека - Строка - +// * НомерКассы - Строка - +// * НаименованиеМагазина - Строка - +// * АдресМагазина - Строка - +// * ОрганизацияКПП - Строка - +// * ОрганизацияИНН - Строка - +// * ОрганизацияНазвание - Строка - +// * СерийныйНомер - Строка - +// * ПолучательИНН - Строка - +// * Получатель - Строка - +// * ДанныеПоставщика - Структура -: +// ** ИНН - Строка - +// ** Наименование - Строка - +// ** Телефон - Строка - +// * ДанныеАгента - Структура -: +// ** ОператорПоПриемуПлатежей - Структура -: +// *** Телефон - Неопределено - +// ** ОператорПеревода - Структура -: +// *** Телефон - Строка - +// *** Наименование - Строка - +// *** Адрес - Строка - +// *** ИНН - Строка - +// ** ПлатежныйАгент - Структура -: +// *** Операция - Строка - +// *** Телефон - Строка - +// * ПризнакАгента - Неопределено - +// * ПокупательНомер - Строка - +// * ПокупательEmail - Строка - +// * ОтправительEmail - Строка - +// * МестоРасчетов - Строка - +// * АдресРасчетов - Строка - +// * СистемаНалогообложения - ПеречислениеСсылка.ТипыСистемНалогообложенияККТ - +// * Отправляет1СEmail - Булево - +// * Отправляет1СSMS - Булево - +// * ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - +// * Электронно - Булево - +// * ТорговыйОбъект - Неопределено - +// * Организация - Неопределено - +// * ИдентификаторФискальнойЗаписи - Неопределено - +// * ДокументОснование - Неопределено - +// * КассирИНН - Неопределено - +// * Кассир - Строка - +// +Функция ЗагрузитьДанныеФискализацииИзXML(ДанныеXML, ДанныхМаркировки = Истина) Экспорт + + ОбщиеПараметры = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииЧекаКоррекции(); + + ФискальнаяСтрока = Неопределено; + СуммаЧека = 0; + + Если Не ПустаяСтрока(ДанныеXML) Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ДанныеXML); + ЧтениеXML.ПерейтиКСодержимому(); + Если ЧтениеXML.Имя = "CheckPackage" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ТипРасчета = ?(ЧтениеXML.ЗначениеАтрибута("PaymentType") <> Неопределено, ЧтениеXML.ЗначениеАтрибута("PaymentType"), ЧтениеXML.ЗначениеАтрибута("OperationType")); + ОбщиеПараметры.ТипРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.РасчетДенежнымиСредствамиПоКоду(Число(ТипРасчета)); + + СистемаНалогообложения = ?(ЧтениеXML.ЗначениеАтрибута("TaxVariant") <> Неопределено, ЧтениеXML.ЗначениеАтрибута("TaxVariant"), ЧтениеXML.ЗначениеАтрибута("TaxationSystem")); + ОбщиеПараметры.СистемаНалогообложения = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СистемаНалогообложенияККТПоКоду(Число(СистемаНалогообложения)); + + ОбщиеПараметры.Кассир = ЧтениеXML.ЗначениеАтрибута("CashierName"); + ОбщиеПараметры.КассирИНН = ЗначениеXMLАтрибута(ЧтениеXML, "CashierVATIN", "CashierINN", Неопределено); + + ОбщиеПараметры.ОтправительEmail = ЧтениеXML.ЗначениеАтрибута("SenderEmail"); + ОбщиеПараметры.ПокупательEmail = ЧтениеXML.ЗначениеАтрибута("CustomerEmail"); + ОбщиеПараметры.ПокупательНомер = ЧтениеXML.ЗначениеАтрибута("CustomerPhone"); + ОбщиеПараметры.ПризнакАгента = ЧтениеXML.ЗначениеАтрибута("AgentSign"); + ОбщиеПараметры.АдресРасчетов = ЗначениеXMLАтрибута(ЧтениеXML, "SaleAddress", "AddressSettle"); + ОбщиеПараметры.МестоРасчетов = ЗначениеXMLАтрибута(ЧтениеXML, "SaleLocation", "PlaceSettle"); + + ОбщиеПараметры.ДополнительныйРеквизит = ЧтениеXML.ЗначениеАтрибута("AdditionalAttribute"); + // ++ Локализация + Если ЧтениеXML.ЗначениеАтрибута("AgentSign") <> Неопределено Тогда + ПризнакАгента = Число(ЧтениеXML.ЗначениеАтрибута("AgentSign")); + ОбщиеПараметры.ПризнакАгента = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.ПризнакАгентаПоКоду(ПризнакАгента); + КонецЕсли; + // -- Локализация + ОбщиеПараметры.Получатель = ЧтениеXML.ЗначениеАтрибута("CustomerInfo"); + ОбщиеПараметры.ПолучательИНН = ЧтениеXML.ЗначениеАтрибута("CustomerINN"); + КонецЕсли; + + Если ЧтениеXML.Имя = "PurveyorData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ОбщиеПараметры.ДанныеПоставщика.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "PurveyorName"); + ОбщиеПараметры.ДанныеПоставщика.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "PurveyorPhone"); + ОбщиеПараметры.ДанныеПоставщика.ИНН = ЗначениеXMLАтрибута(ЧтениеXML, "PurveyorVATIN"); + КонецЕсли; + + Если ЧтениеXML.Имя = "VendorData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ОбщиеПараметры.ДанныеПоставщика.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "VendorName"); + ОбщиеПараметры.ДанныеПоставщика.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "VendorPhone"); + ОбщиеПараметры.ДанныеПоставщика.ИНН = ЗначениеXMLАтрибута(ЧтениеXML, "VendorINN"); + КонецЕсли; + + Если ЧтениеXML.Имя = "CustomerDetail" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ОбщиеПараметры.СведенияОПокупателе.Покупатель = ЗначениеXMLАтрибута(ЧтениеXML, "Info"); + ОбщиеПараметры.СведенияОПокупателе.ПокупательИНН = ЗначениеXMLАтрибута(ЧтениеXML, "INN"); + ОбщиеПараметры.СведенияОПокупателе.ПокупательАдрес = ЗначениеXMLАтрибута(ЧтениеXML, "Address"); + КонецЕсли; + + Если ЧтениеXML.Имя = "AgentData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ДанныеАгента = ОбщиеПараметры.ДанныеАгента; + ДанныеАгента.ПлатежныйАгент.Операция = ЗначениеXMLАтрибута(ЧтениеXML, "AgentOperation", "PayingAgentOperation"); + ДанныеАгента.ПлатежныйАгент.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "AgentPhone", "PayingAgentPhone"); + ДанныеАгента.ОператорПеревода.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorPhone", "MoneyTransferOperatorPhone"); + ДанныеАгента.ОператорПеревода.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorName", "MoneyTransferOperatorName"); + ДанныеАгента.ОператорПеревода.Адрес = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorAddress", "MoneyTransferOperatorAddress"); + ДанныеАгента.ОператорПеревода.ИНН = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorINN", "MoneyTransferOperatorVATIN"); + ДанныеАгента.ОператорПоПриемуПлатежей.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "PaymentProcessorPhone", "ReceivePaymentsOperatorPhone"); + КонецЕсли; + + Если ЧтениеXML.Имя = "UserAttribute" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ОбщиеПараметры.ДополнительныйРеквизитПользователя.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "Name"); + ОбщиеПараметры.ДополнительныйРеквизитПользователя.Значение = ЗначениеXMLАтрибута(ЧтениеXML, "Value"); + КонецЕсли; + + Если ЧтениеXML.Имя = "Positions" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Пока ЧтениеXML.Прочитать() И НЕ (ЧтениеXML.Имя = "Positions" И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента) Цикл + + Если ЧтениеXML.Имя = "FiscalString" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ФискальнаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека(); + + ФискальнаяСтрока.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "Name"); + ФискальнаяСтрока.Количество = Число(ЗначениеXMLАтрибута(ЧтениеXML, "Quantity", , 0)); + + ФискальнаяСтрока.ЦенаСоСкидками = Число(ЗначениеXMLАтрибута(ЧтениеXML, "PriceWithDiscount", , 0)); + ФискальнаяСтрока.Сумма = Число(ЗначениеXMLАтрибута(ЧтениеXML, "AmountWithDiscount", "SumWithDiscount", 0)); + СуммаЧека = СуммаЧека + ФискальнаяСтрока.Сумма; + СуммаСкидок = ЗначениеXMLАтрибута(ЧтениеXML, "DiscountAmount", "DiscountSum", 0); + Если Не ПустаяСтрока(СуммаСкидок) Тогда + ФискальнаяСтрока.СуммаСкидок = Число(СуммаСкидок); + КонецЕсли; + ФискальнаяСтрока.НомерСекции = Число(ЗначениеXMLАтрибута(ЧтениеXML, "Department", , 0)); + ФискальнаяСтрока.ЕдиницаИзмерения = ЗначениеXMLАтрибута(ЧтениеXML, "MeasurementUnit"); + // ++ Локализация + ПредставлениеСтавкаНДС = ЗначениеXMLАтрибута(ЧтениеXML, "VATRate", "Tax"); + ФискальнаяСтрока.СтавкаНДС = СтавкаНДСПоПредставлению(ПредставлениеСтавкаНДС); + // -- Локализация + СуммаНДС = ЗначениеXMLАтрибута(ЧтениеXML, "VATAmount", "TaxSum", 0); + Если Не ПустаяСтрока(СуммаНДС) Тогда + ФискальнаяСтрока.СуммаНДС = Число(СуммаНДС); + КонецЕсли; + + ПризнакСпособаРасчета = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SignMethodCalculation", "PaymentMethod", 0)); + ФискальнаяСтрока.ПризнакСпособаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПризнакСпособаРасчетаПоКоду(ПризнакСпособаРасчета); + + ПризнакПредметаРасчета = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SignCalculationObject", "CalculationSubject", 0)); + ФискальнаяСтрока.ПризнакПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПризнакПредметаРасчетаПоКоду(ПризнакПредметаРасчета); + + // ++ Локализация + Если ЧтениеXML.ЗначениеАтрибута("SignSubjectCalculationAgent") <> Неопределено Или ЧтениеXML.ЗначениеАтрибута("CalculationAgent") <> Неопределено Тогда + ПризнакАгента = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SignSubjectCalculationAgent", "CalculationAgent", 0)); + ФискальнаяСтрока.ПризнакАгентаПоПредметуРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.ПризнакАгентаПоКоду(ПризнакАгента); + КонецЕсли; + + Если ЧтениеXML.ЗначениеАтрибута("MeasureOfQuantity") <> Неопределено Тогда + МераКоличестваПредметаРасчета = Число(ЗначениеXMLАтрибута(ЧтениеXML, "MeasureOfQuantity", 255)); + ФискальнаяСтрока.КодЕдиницыИзмерения = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодЕдиницыИзмеренияПоККТКоду(МераКоличестваПредметаРасчета); + КонецЕсли; + // -- Локализация + + ФискальнаяСтрока.КодСтраныПроисхожденияТовара = ЗначениеXMLАтрибута(ЧтениеXML, "CountryOfOrigin"); + ФискальнаяСтрока.НомерТаможеннойДекларации = ЗначениеXMLАтрибута(ЧтениеXML, "CustomsDeclaration"); + ФискальнаяСтрока.ДополнительныйРеквизит = ЗначениеXMLАтрибута(ЧтениеXML, "AdditionalAttribute"); + + СуммаАкциза = ЗначениеXMLАтрибута(ЧтениеXML, "ExciseAmount"); + Если НЕ ПустаяСтрока(СуммаАкциза) Тогда + Если Число(СуммаАкциза) > 0 Тогда + ФискальнаяСтрока.СуммаАкциза = Число(СуммаАкциза); + КонецЕсли; + КонецЕсли; + + Если ДанныхМаркировки И ЧтениеXML.ЗначениеАтрибута("MarkingCode") <> Неопределено Тогда + ФискальнаяСтрока.КонтрольнаяМарка = ЧтениеXML.ЗначениеАтрибута("MarkingCode"); + КонецЕсли; + + ОбщиеПараметры.ПозицииЧека.Добавить(ФискальнаяСтрока); + КонецЕсли; + + Если ЧтениеXML.Имя = "AgentData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ФискальнаяСтрока <> Неопределено Тогда + ДанныеАгента = ФискальнаяСтрока.ДанныеАгента; + ДанныеАгента.ПлатежныйАгент.Операция = ЗначениеXMLАтрибута(ЧтениеXML, "AgentOperation", "PayingAgentOperation"); + ДанныеАгента.ПлатежныйАгент.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "AgentPhone", "PayingAgentPhone"); + ДанныеАгента.ОператорПеревода.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorPhone", "MoneyTransferOperatorPhone"); + ДанныеАгента.ОператорПеревода.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorName", "MoneyTransferOperatorName"); + ДанныеАгента.ОператорПеревода.Адрес = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorAddress", "MoneyTransferOperatorAddress"); + ДанныеАгента.ОператорПеревода.ИНН = ЗначениеXMLАтрибута(ЧтениеXML, "AcquirerOperatorINN", "MoneyTransferOperatorVATIN"); + ДанныеАгента.ОператорПоПриемуПлатежей.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "PaymentProcessorPhone", "ReceivePaymentsOperatorPhone"); + КонецЕсли; + КонецЕсли; + + Если ЧтениеXML.Имя = "PurveyorData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ФискальнаяСтрока <> Неопределено Тогда + ФискальнаяСтрока.ДанныеПоставщика.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "PurveyorName"); + ФискальнаяСтрока.ДанныеПоставщика.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "PurveyorPhone"); + ФискальнаяСтрока.ДанныеПоставщика.ИНН = ЗначениеXMLАтрибута(ЧтениеXML, "PurveyorVATIN"); + КонецЕсли; + КонецЕсли; + + Если ЧтениеXML.Имя = "VendorData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ФискальнаяСтрока <> Неопределено Тогда + ФискальнаяСтрока.ДанныеПоставщика.Наименование = ЗначениеXMLАтрибута(ЧтениеXML, "VendorName"); + ФискальнаяСтрока.ДанныеПоставщика.Телефон = ЗначениеXMLАтрибута(ЧтениеXML, "VendorPhone"); + ФискальнаяСтрока.ДанныеПоставщика.ИНН = ЗначениеXMLАтрибута(ЧтениеXML, "VendorINN"); + КонецЕсли; + КонецЕсли; + + Если ЧтениеXML.Имя = "IndustryAttribute" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ФискальнаяСтрока <> Неопределено И ДанныхМаркировки Тогда + ИдентификаторФОИВ = ЗначениеXMLАтрибута(ЧтениеXML, "IdentifierFOIV"); + ФискальнаяСтрока.ОтраслевойРеквизит.ИдентификаторФОИВ = ИдентификаторФОИВ; + ДатаДокументаОснования = ЗначениеXMLАтрибута(ЧтениеXML, "DocumentDate"); + Если Не ПустаяСтрока(ДатаДокументаОснования) Тогда + ФискальнаяСтрока.ОтраслевойРеквизит.ДатаДокументаОснования = ОбщегоНазначенияБПО.СтрокаВДату(XMLЗначение(Тип("Строка"), ДатаДокументаОснования)); + КонецЕсли; + ФискальнаяСтрока.ОтраслевойРеквизит.НомерДокументаОснования = ЗначениеXMLАтрибута(ЧтениеXML, "DocumentNumber"); + ФискальнаяСтрока.ОтраслевойРеквизит.ЗначениеРеквизита = ЗначениеXMLАтрибута(ЧтениеXML, "AttributeValue"); + КонецЕсли; + КонецЕсли; + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() И ДанныхМаркировки Тогда + Если ЧтениеXML.Имя = "GoodCodeData" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ФискальнаяСтрока <> Неопределено Тогда + ФискальнаяСтрока.ДанныеКодаТоварнойНоменклатуры.ГлобальныйИдентификаторТорговойЕдиницы = ЗначениеXMLАтрибута(ЧтениеXML, "GTIN"); + ФискальнаяСтрока.ДанныеКодаТоварнойНоменклатуры.КонтрольныйИдентификационныйЗнак = ЗначениеXMLАтрибута(ЧтениеXML, "Stamp"); + ФискальнаяСтрока.ДанныеКодаТоварнойНоменклатуры.СерийныйНомер = ЗначениеXMLАтрибута(ЧтениеXML, "SerialNumber"); + ТипМаркировки = ЗначениеXMLАтрибута(ЧтениеXML, "StampType"); + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + ФискальнаяСтрока.ДанныеКодаТоварнойНоменклатуры.ТипМаркировки = МодульМенеджерОборудованияМаркировка.ТипМаркировкиККТПоКоду(ТипМаркировки); + ФискальнаяСтрока.ДанныеКодаТоварнойНоменклатуры.РеквизитКодаТовара = ЗначениеXMLАтрибута(ЧтениеXML, "MarkingCode"); + КонецЕсли + КонецЕсли; + КонецЕсли; + + Если ЧтениеXML.Имя = "TextString" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Текст = ЗначениеXMLАтрибута(ЧтениеXML, "Text"); + ТекстоваяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(Текст); + ОбщиеПараметры.ПозицииЧека.Добавить(ТекстоваяСтрока); + КонецЕсли; + + Если ЧтениеXML.Имя = "Barcode" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ТипШтрихкодаЗнач = ЗначениеXMLАтрибута(ЧтениеXML, "Type"); + ШтрихКодЗнач = ЗначениеXMLАтрибута(ЧтениеXML, "Value"); + ШтрихКодBase64 = ЗначениеXMLАтрибута(ЧтениеXML, "ValueBase64"); + СтрокаШтрихКод = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыШтрихкодВСтрокеЧека(ТипШтрихкодаЗнач, ШтрихКодЗнач, ШтрихКодBase64); + ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаШтрихКод); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Если ЧтениеXML.Имя = "Payments" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + СуммаНаличные = Число(ЗначениеXMLАтрибута(ЧтениеXML, "Cash", , 0)); + СуммаЭлектронно = Число(ЗначениеXMLАтрибута(ЧтениеXML, "ElectronicPayment", , 0)); + СуммаПостоплата = Число(ЗначениеXMLАтрибута(ЧтениеXML, "Credit", "PostPayment", 0)); + СуммаПредоплата = Число(ЗначениеXMLАтрибута(ЧтениеXML, "AdvancePayment", "PrePayment", 0)); + СуммаПредоставление = Число(ЗначениеXMLАтрибута(ЧтениеXML, "CashProvision", "Barter", 0)); + + ОплатаНеНаличными = СуммаЭлектронно + СуммаПостоплата + СуммаПредоплата + СуммаПредоставление; + СуммаНаличные = ?(СуммаНаличные + ОплатаНеНаличными > СуммаЧека, СуммаЧека - ОплатаНеНаличными, СуммаНаличные); + + Если СуммаНаличные > 0 Тогда + СтрокаОплаты = Новый Структура(); + СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные")); + СтрокаОплаты.Вставить("Сумма", СуммаНаличные); + ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты); + КонецЕсли; + + Если СуммаЭлектронно > 0 Тогда + СтрокаОплаты = Новый Структура(); + СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно")); + СтрокаОплаты.Вставить("Сумма", СуммаЭлектронно); + ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты); + КонецЕсли; + + Если СуммаПостоплата > 0 Тогда + СтрокаОплаты = Новый Структура(); + СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Постоплата")); + СтрокаОплаты.Вставить("Сумма", СуммаПостоплата); + ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты); + КонецЕсли; + + Если СуммаПредоплата > 0 Тогда + СтрокаОплаты = Новый Структура(); + СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Предоплата")); + СтрокаОплаты.Вставить("Сумма", СуммаПредоплата); + ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты); + КонецЕсли; + + Если СуммаПредоставление > 0 Тогда + СтрокаОплаты = Новый Структура(); + СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.ВстречноеПредоставление")); + СтрокаОплаты.Вставить("Сумма", СуммаПредоставление); + ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты); + КонецЕсли; + + КонецЕсли; + + Если ЧтениеXML.Имя = "ElectronicPaymentInfo" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Пока ЧтениеXML.Прочитать() И НЕ (ЧтениеXML.Имя = "ElectronicPaymentInfo" И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента) Цикл + Если ЧтениеXML.Имя = "ElectronicPayment" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + СведенияОБезналичнойОплате = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыСведенияОБезналичнойОплате(); + СведенияОБезналичнойОплате.ПризнакСпособаОплаты = Число(ЗначениеXMLАтрибута(ЧтениеXML, "PaymentMethod", , 0)); + СведенияОБезналичнойОплате.Идентификаторы = ЗначениеXMLАтрибута(ЧтениеXML, "Identifiers"); + СведенияОБезналичнойОплате.ДополнительныеCведения = ЗначениеXMLАтрибута(ЧтениеXML, "AdditionalInformation"); + ОбщиеПараметры.СведенияОБезналичнойОплате.Добавить(СведенияОБезналичнойОплате); + КонецЕсли; + КонецЦикла + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + + Возврат ОбщиеПараметры; + +КонецФункции + +#КонецОбласти + +// Функция формирует шаблон чека. +// +// Параметры: +// ОбщиеПараметры - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ТипОборудования - Строка - типы оборудования строкой. +// ДополнительныйТекст - Строка - дополнительный текст шаблона чека. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование +// +// Возвращаемое значение: +// Структура. +Функция ШаблонЧека(ОбщиеПараметры, ТипОборудования, ДополнительныйТекст = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт + + СтандартнаяОбработка = Истина; + + ШаблонЧека = Неопределено; + МенеджерОборудованияВызовСервераПереопределяемый.СформироватьШаблонЧека(ШаблонЧека, ОбщиеПараметры, ДополнительныйТекст, СтандартнаяОбработка, ТипОборудования); + Если СтандартнаяОбработка Или ШаблонЧека = Неопределено Тогда + Возврат ОбщиеПараметры; + Иначе + Возврат ШаблонЧека; + КонецЕсли; + +КонецФункции + +// Функция формирует табличный документ по данным фискального чека. +// +// Параметры: +// ТипДокумента - Число +// ОбщиеПараметры - Структура - параметры фискального документа загруженная из данных XML +// см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// РеквизитыЧека - Структура - параметры фискального документа из регистра сведений фискальные документы +// см. ДанныеФискальнойОперации() +// ФорматФФД - Строка - формат фискальных данных, влияет на вывод таблицы оплаты при "1.0" +// используются только виды оплат "НАЛИЧНЫМИ", "ЭЛЕКТРОННО" +// +// Возвращаемое значение: +// ТабличныйДокумент - табличный документ со сформированным фискальным документом, может быть сохранен в любой формат. +// +Функция СформироватьФискальныйДокумент(ТипДокумента, ОбщиеПараметры, РеквизитыЧека = Неопределено, ФорматФФД = "1.1", ШиринаЧека = 42) Экспорт + + Если ТипДокумента = 1 Тогда + Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОбОткрытииСмены(ШиринаЧека, ОбщиеПараметры); + ИначеЕсли ТипДокумента = 2 Тогда + Шаблон = ШаблоныФискальныхДокументов.ШаблонВнесениеНаличных(ШиринаЧека, ОбщиеПараметры); + ИначеЕсли ТипДокумента = 3 Тогда + Шаблон = ШаблоныФискальныхДокументов.ШаблонВнесениеНаличных(ШиринаЧека, ОбщиеПараметры); + ИначеЕсли ТипДокумента = 4 Тогда + Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОТекущемСостоянии(ШиринаЧека, ОбщиеПараметры); + ИначеЕсли ТипДокумента = 5 Тогда + Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОЗакрытииСмены(ШиринаЧека, ОбщиеПараметры); + Иначе + Шаблон = ШаблоныФискальныхДокументов.ШаблонКассовыйЧек(ШиринаЧека, ОбщиеПараметры, РеквизитыЧека); + КонецЕсли; + + ШаблоныФискальныхДокументов.СформироватьДокументПоШаблону(Шаблон); + ТабличныйДокумент = ШаблоныФискальныхДокументов.ВывестиКакТабличныйДокумент(Шаблон); + + Возврат ТабличныйДокумент; + +КонецФункции + +// Функция формирует табличный документ по данным фискального чека. +// +// Параметры: +// ТипДокумента - Число +// ОбщиеПараметры - Структура - параметры фискального документа загруженная из данных XML +// см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// РеквизитыЧека - Структура - параметры фискального документа из регистра сведений фискальные документы +// см. ДанныеФискальнойОперации() +// ФорматФФД - Строка - формат фискальных данных, влияет на вывод таблицы оплаты при "1.0" +// используются только виды оплат "НАЛИЧНЫМИ", "ЭЛЕКТРОННО" +// +// Возвращаемое значение: +// Текст - Строка. +// +Функция СформироватьФискальныйДокументТекст(ТипДокумента, ОбщиеПараметры, РеквизитыЧека = Неопределено, ФорматФФД = "1.1", ШиринаЧека = 42) Экспорт + + Если ТипДокумента = 1 Тогда + Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОбОткрытииСмены(ШиринаЧека, ОбщиеПараметры); + ИначеЕсли ТипДокумента = 2 Тогда + Шаблон = ШаблоныФискальныхДокументов.ШаблонВнесениеНаличных(ШиринаЧека, ОбщиеПараметры); + ИначеЕсли ТипДокумента = 3 Тогда + Шаблон = ШаблоныФискальныхДокументов.ШаблонВнесениеНаличных(ШиринаЧека, ОбщиеПараметры); + ИначеЕсли ТипДокумента = 4 Тогда + Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОТекущемСостоянии(ШиринаЧека, ОбщиеПараметры); + ИначеЕсли ТипДокумента = 5 Тогда + Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОЗакрытииСмены(ШиринаЧека, ОбщиеПараметры); + Иначе + Шаблон = ШаблоныФискальныхДокументов.ШаблонКассовыйЧек(ШиринаЧека, ОбщиеПараметры, РеквизитыЧека); + КонецЕсли; + + ШаблоныФискальныхДокументов.СформироватьДокументПоШаблону(Шаблон); + Текст = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон); + + Возврат Текст; + +КонецФункции + +// Возвращает флаг открыта ли кассовая смена +// +// Параметры: +// СтатусКассовойСмены - ПеречислениеСсылка.СтатусыКассовойСмены +// +// Возвращаемое значение: +// Булево +Функция КассоваяСменаОткрыта(СтатусКассовойСмены) Экспорт + + СменаОткрыта = Неопределено; + Если СтатусКассовойСмены = Перечисления.СтатусыКассовойСмены.Открыта Тогда + СменаОткрыта = Истина; + Иначе + СменаОткрыта = Ложь; + КонецЕсли; + + Возврат СменаОткрыта; + +КонецФункции + +// Возвращает статус что кассовая смена открыта +// +// Возвращаемое значение: +// ПеречислениеСсылка.СтатусыКассовойСмены +Функция СтатусОткрытойСмены() Экспорт + + Возврат Перечисления.СтатусыКассовойСмены.Открыта; + +КонецФункции + +// Возвращает статус что кассовая смена закрыта +// +// Возвращаемое значение: +// ПеречислениеСсылка.СтатусыКассовойСмены +Функция СтатусЗакрытойСмены() Экспорт + + Возврат Перечисления.СтатусыКассовойСмены.Закрыта; + +КонецФункции + +// Возвращает возможные варианты статусов чеков в очереди +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение +Функция СтатусыЧекаВОчереди() Экспорт + + Соответствие = Новый Соответствие(); + + Соответствие.Вставить("Фискализирован" , ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Фискализирован")); + Соответствие.Вставить("Ошибка" , ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Ошибка")); + Соответствие.Вставить("Новый" , ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Новый")); + Соответствие.Вставить("Фискализируется", ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Фискализируется")); + Соответствие.Вставить("Отменен" , ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Отменен")); + + Возврат Соответствие; + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодТовараИдентифицируетЭкземпляр. +// Идентифицирует ли код товара (значение тега 1162) экземпляр товара. +// +// Параметры: +// РеквизитКодаТовара - Строка - Значение реквизита кода товара в BASE64. +// ШтриховойКодТовара - Строка - Штриховой код товара. +// +// Возвращаемое значение: +// Булево - Истина - Если код товара идентифицирует экземпляр товара. +// +Функция КодТовараИдентифицируетЭкземпляр(Знач РеквизитКодаТовара = Неопределено, Знач ШтриховойКодТовара = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.КодТовараИдентифицируетЭкземпляр(РеквизитКодаТовара, ШтриховойКодТовара); + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать ШаблонЧека. +// Функция формирует шаблон чека. +// +// Параметры: +// ОбщиеПараметры - Структура - см.ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека(). +// ТипОборудования - Строка - типы оборудования строкой. +// ДополнительныйТекст - Строка - дополнительный текст шаблона чека. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование +// +// Возвращаемое значение: +// - Структура. +Функция СформироватьШаблонЧека(ОбщиеПараметры, ТипОборудования, ДополнительныйТекст = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт + + Возврат ШаблонЧека(ОбщиеПараметры, ТипОборудования, ДополнительныйТекст, ИдентификаторУстройства); + +КонецФункции + +#КонецОбласти + +// Возвращает название организации по ссылке типа ОпределяемыеТипы.Организация +// +// Параметры: +// Организация - ОпределяемыйТип.ОрганизацияБПО +// +// Возвращаемое значение: +// Структура: +// * Наименование - Строка - Наименование организации +Функция СведенияОбОрганизации(Организация) Экспорт + + Сведения = Новый Структура(); + Сведения.Вставить("Наименование", ""); + СтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.СведенияОбОрганизации(Организация, Сведения, СтандартнаяОбработка); + Если СтандартнаяОбработка Тогда + Сведения.Наименование = Строка(Организация); + КонецЕсли; + Возврат Сведения; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Добавляет в список поставляемые драйверы в составе конфигурации. +// +// Параметры: +// ДрайвераОборудования - см. МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования +// +Процедура ОбновитьПоставляемыеДрайвера(ДрайвераОборудования) Экспорт + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков; + Драйвер.ИмяДрайвера = "Драйвер1СПринтерЧеков"; + Драйвер.Наименование = НСтр("ru = '1С:Принтер чеков'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ReceiptPrinterNative"; + Драйвер.РекомендуемоеИспользование = Истина; + + // ++ Локализация + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков; + Драйвер.ИмяДрайвера = "ДрайверRightScanУстройствоПечати"; + Драйвер.Наименование = НСтр("ru = 'RightScan:Устройство печати ТСД Urovo'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "RSPrinter"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверRightScanККТ54ФЗ"; + Драйвер.Наименование = НСтр("ru = 'RightScan:ККТ с передачей данных в ОФД (54-ФЗ)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "FNCore"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверАЗУРККТ54ФЗФФД12"; + Драйвер.Наименование = НСтр("ru = 'АЗУР:ККТ с передачей данных в ОФД (ФФД 1.2)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "com_azurpos_fz54_AzurPos"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверВерсияТККТ54ФЗ"; + Драйвер.Наименование = НСтр("ru = 'Версия-Т:ККТ с передачей данных в ОФД (54-ФЗ)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "VT_KKT_1CInt"; + Драйвер.СнятСПоддержки = Истина; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверАТОЛККТ54ФЗ10XФФД12"; + Драйвер.Наименование = НСтр("ru = 'АТОЛ:ККТ с передачей данных в ОФД 10.Х (ФФД 1.2)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ATOL_KKT_1C_V10"; + Драйвер.РекомендуемоеИспользование = Истина; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверАТОЛККТ54ФЗ10XФФД12X"; + Драйвер.Наименование = НСтр("ru = 'АТОЛ:ККТ с передачей данных в ОФД 10.x (ФФД 1.2) УСН НДС'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ATOL_KKT_1C_V10X"; + Драйвер.РекомендуемоеИспользование = Истина; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверАтолККТ54ФЗ10X"; + Драйвер.Наименование = НСтр("ru = 'АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) 10.x'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ATOL_KKT_1C83_V10"; + Драйвер.СнятСПоддержки = Истина; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверПОСЦентрККТ54ФЗ4ФФД12NG"; + Драйвер.Наименование = НСтр("ru = 'ПОСЦентр:ККТ с передачей данных в ОФД (ФФД 1.2) NG УСН НДС'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "psc_fr_drv_ng_V1"; + Драйвер.РекомендуемоеИспользование = Истина; + + // -- Локализация + +КонецПроцедуры + +// Подготовить данные операции, перед выполнением команды. +// +// Параметры: +// ПараметрыПодключения - Структура - см. МенеджерОборудованияКлиентСервер.ПараметрыПодключения() +// Команда - Строка - команда для выполнения +// ПараметрыОперации - Структура - +// +// Возвращаемое значение: +// Структура - Подготовить данные операции: +// * Кассир - ОпределяемыйТип.СубъектПерсональныхДанныхБПО +// * КассирИНН - Число +// * ДокументОснование - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО +// * ИдентификаторФискальнойЗаписи - УникальныйИдентификатор +// * Организация - ОпределяемыйТип.ОрганизацияБПО. +// * ТорговыйОбъект - ОпределяемыйТип.ТорговыйОбъектБПО +// * КорректируемыйДокумент - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО +// * ЕстьПерсональныеДанные - Булево - +// * СубъектПерсональныхДанных - ОпределяемыйТип.СубъектПерсональныхДанныхБПО +// * ТипПерсональныхДанных - ПеречислениеСсылка.ТипыПерсональныхДанныхККТ. +// * ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами +// * ТипДокумента - ПеречислениеСсылка.ТипыФискальныхДокументовККТ +// * РевизияИнтерфейса - Число - +// * ШиринаСтроки - Число - +// * РегистрационныйНомерККТ - Строка - +// * ЗаводскойНомерФН - Строка - +// * ДополнительныйРеквизит - Строка - +// * НомерСменыККТ - Число - +// * НомерЧекаККТ - Число - +// * НомерЧекаЗаСмену - Число - +// * ДатаВремяЧека - Дата +// * СуммаЧека - Число - +// * ОплатаНаличные - Число - +// * ОплатаЭлектронно - Число - +// * ОплатаПредоплата - Число - +// * ОплатаПостоплата - Число - +// * ОплатаВстречноеПредоставление - Число - +// * ФискальныйПризнак - Строка - +// * АдресСайтаПроверки - Строка - +// * ОшибкаПечати - Булево - +// * Электронно - Булево - +// * Отправляет1СSMS - Булево - +// * Отправляет1СEmail - Булево - +// * АвтономныйРежим - Булево - +// * ДанныеЧекаXML - Строка +// * ДанныеЧекаXMLПерсональныеДанные - Строка +// * РезультатОперацииXML - Булево +// * ТекстСообщения - Строка +// * ТекущееСостояние - Структура -: +// ** НомерСменыККТ - Число - +// ** НомерЧекаККТ - Число - +// ** СтатусСмены - Число - +// ** ДатаВремя - Дата +// ** ПараметрыXML - Строка - +// ** РезультатXML - Строка - +// ** КассоваяСмена - ДокументСсылка.КассоваяСмена +// ** ТестовыеЧеки - Булево +// ** Результат - Булево - +// ** ТекстОшибки - Строка +// * ЧекКоррекцииСторно - Булево +// * СформироватьЧекКоррекции - Булево - +// * НеприменениеККТ - Булево - +// * ВерсияФФДККТ11 - Булево - +// * Результат - Булево - +// * ОперацияЗаписана - Булево - +// * ТекстОшибки - Строка +// * СтатусСмены - Число - +// * ТестовыеЧеки - Булево +// * ЕдиныйЧек - Булево - +// * ИдентификаторОплатыПлатежнойСистемы - УникальныйИдентификатор +// * ТипПлатежнойСистемы - ПеречислениеСсылка.ТипыПлатежнойСистемыККТ +// +Функция ПодготовитьДанныеОперации(ПараметрыПодключения, Команда, ПараметрыОперации) Экспорт + + ШиринаСтроки = ?(ПараметрыПодключения.Свойство("ШиринаСтроки") И ПараметрыПодключения.ШиринаСтроки > 0, ПараметрыПодключения.ШиринаСтроки, 32); + + ДанныеОперации = Новый Структура(); + ДанныеОперации.Вставить("Результат", Истина); + ДанныеОперации.Вставить("ТекстОшибки"); + ДанныеОперации.Вставить("ТестовыеЧеки"); + ДанныеОперации.Вставить("ТекстЧека"); + + // Для всех операций проверяем корректность ИНН кассира. + Если ПараметрыОперации <> Неопределено И ПараметрыОперации.Свойство("КассирИНН") И НЕ ПустаяСтрока(ПараметрыОперации.КассирИНН) Тогда + ОписаниеОшибки = ""; + Если НЕ ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ИННСоответствуетТребованиям(ПараметрыОперации.КассирИНН, Ложь, ОписаниеОшибки) Тогда + ТекстОшибки = НСтр("ru = 'ИНН кассира некорректен (%Ошибка%)'"); + ОписаниеОшибки = СтрЗаменить(ТекстОшибки, "%Ошибка%", ОписаниеОшибки); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + КонецЕсли; + + // Для всех операций проверяем корректность ИНН организации. + Если ПараметрыОперации <> Неопределено И ПараметрыОперации.Свойство("ОрганизацияИНН") И НЕ ПустаяСтрока(ПараметрыОперации.ОрганизацияИНН) Тогда + Если СтрДлина(ПараметрыОперации.ОрганизацияИНН) <> 10 И СтрДлина(ПараметрыОперации.ОрганизацияИНН) <> 12 Тогда + ОписаниеОшибки = НСтр("ru = 'Неверная длина ИНН организации.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + КонецЕсли; + + // Для всех операций проверяем корректность длины поля Кассир (ФФД 1021) (макс 64) + Если ПараметрыОперации <> Неопределено И ПараметрыОперации.Свойство("Кассир") И НЕ ПустаяСтрока(ПараметрыОперации.Кассир) Тогда + Если СтрДлина(ПараметрыОперации.Кассир) > 64 Тогда + ПараметрыОперации.Кассир = Лев(СокрЛП(ПараметрыОперации.Кассир),64); + КонецЕсли; + КонецЕсли; + + Если Команда = "CheckFiscalization" Тогда + + Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков + И ПараметрыОперации.Свойство("АвтономнаяККТ") И НЕ ПараметрыОперации.АвтономнаяККТ Тогда + ОписаниеОшибки = НСтр("ru='Фискализация на принтерах чеков запрещена.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + + СтатусПоследнейСмены = ПолучитьСтатусПоследнейСмены(ПараметрыПодключения.ИдентификаторУстройства); + Если Не СтатусПоследнейСмены.Активна = Истина Тогда + ОписаниеОшибки = НСтр("ru='Кассовая смена не открыта или истекла.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + Иначе + // Форматно логический контроль + ОписаниеОшибки = ""; + Если ОбщегоНазначенияБПО.ИспользуетсяФорматноЛогическийКонтроль() Тогда + МодульФорматноЛогическийКонтроль = ОбщегоНазначенияБПО.ОбщийМодуль("ФорматноЛогическийКонтроль"); + Если НЕ МодульФорматноЛогическийКонтроль.ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов( + ПараметрыОперации, + ПараметрыПодключения.ИдентификаторУстройства, + ОписаниеОшибки) Тогда + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + МодульФорматноЛогическийКонтроль.ПривестиДанныеКТребуемомуФормату(ПараметрыОперации); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ПараметрыОперации.ДокументОснование) И КонтрольФискализацииБезналичныхПлатежей() Тогда + ЗаполнитьДанныеПлатежныхОпераций(ПараметрыОперации); + КонецЕсли; + + // Параметры фискализации чека + ПараметрыФискализации = ПараметрыФискализацииЧека(); + ПараметрыФискализации.ТекущаяСмена = СтатусПоследнейСмены.КассоваяСмена; + + // Параметры регистрации ККТ + ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства); + ВерсияФФДККТ11 = ?(ПараметрыРегистрации.Свойство("ВерсияФФДККТ"), ПараметрыРегистрации.ВерсияФФДККТ, "1.05"); + ВерсияФФДККТ11 = ВерсияФФДККТ11 = "1.1" Или ВерсияФФДККТ11 = "1.2"; // Признак ФФД 1.1 + + ПараметрыОперации = ШаблонЧека(ПараметрыОперации, Перечисления.ТипыПодключаемогоОборудования.ККТ, Неопределено, ПараметрыПодключения.ИдентификаторУстройства); + + // Добавить текст короткого слип чека в тело фискального чека + Если Не ПустаяСтрока(ПараметрыОперации.ТекстКороткогоСлипЧека) Тогда + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ПараметрыОперации.ТекстКороткогоСлипЧека); + СтрокаЧека.Выравнивание = "Центр"; + ПараметрыОперации.ПозицииЧека.Добавить(СтрокаЧека); + КонецЕсли; + + ПараметрыФискализации.РегистрационныйНомерККТ = ?(ПараметрыРегистрации.Свойство("РегистрационныйНомерККТ"), ПараметрыРегистрации.РегистрационныйНомерККТ, ""); + ПараметрыФискализации.ЗаводскойНомерФН = ?(ПараметрыРегистрации.Свойство("ЗаводскойНомерФН"), ПараметрыРегистрации.ЗаводскойНомерФН, ""); + ПараметрыФискализации.ШиринаСтроки = ШиринаСтроки; + ПараметрыФискализации.РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + ПараметрыФискализации.ДокументОснование = ПараметрыОперации.ДокументОснование; + ПараметрыФискализации.ИдентификаторФискальнойЗаписи = ПараметрыОперации.ИдентификаторФискальнойЗаписи; + ПараметрыФискализации.Организация = ПараметрыОперации.Организация; + ПараметрыФискализации.ТорговыйОбъект = ПараметрыОперации.ТорговыйОбъект; + ПараметрыФискализации.ДополнительныйРеквизит = ПараметрыОперации.ДополнительныйРеквизит; + ПараметрыФискализации.СубъектПерсональныхДанных = ПараметрыОперации.СубъектПерсональныхДанных; + ПараметрыФискализации.ЕстьПерсональныеДанные = ПараметрыОперации.ЕстьПерсональныеДанные; + Если ПараметрыОперации.Свойство("ИдентификаторОплатыПлатежнойСистемы") Тогда + ПараметрыФискализации.ИдентификаторОплатыПлатежнойСистемы = ПараметрыОперации.ИдентификаторОплатыПлатежнойСистемы; + КонецЕсли; + Если ПараметрыОперации.Свойство("ТипПлатежнойСистемы") Тогда + ПараметрыФискализации.ТипПлатежнойСистемы = ПараметрыОперации.ТипПлатежнойСистемы; + КонецЕсли; + Если ПараметрыОперации.Свойство("КорректируемыйДокумент") Тогда + ПараметрыФискализации.КорректируемыйДокумент = ПараметрыОперации.КорректируемыйДокумент; + КонецЕсли; + ПараметрыФискализации.Кассир = ПараметрыОперации.Кассир; + ПараметрыФискализации.КассирИНН = ПараметрыОперации.КассирИНН; + ПараметрыФискализации.Электронно = ПараметрыОперации.Электронно; + ПараметрыФискализации.Отправляет1СSMS = ПараметрыОперации.Отправляет1СSMS; + Если ПараметрыОперации.Отправляет1СSMS Тогда + ПараметрыФискализации.ПокупательНомер = ПараметрыОперации.ПокупательНомер; + КонецЕсли; + ПараметрыФискализации.Отправляет1СEmail = ПараметрыОперации.Отправляет1СEmail; + Если ПараметрыОперации.Отправляет1СEmail Тогда + ПараметрыФискализации.ПокупательEmail = ПараметрыОперации.ПокупательEmail; + КонецЕсли; + ПараметрыФискализации.ВерсияФФДККТ11 = ВерсияФФДККТ11; + ПараметрыФискализации.ЕдиныйЧек = ПараметрыОперации.ЕдиныйЧек; + ПараметрыФискализации.ТипДокумента = Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧек; + + // Формирование XML + СформироватьXMLПакетДляФискализацияЧека(ПараметрыОперации, ПараметрыФискализации); + + Если ПараметрыФискализации.ЕстьПерсональныеДанные Тогда + Если ПустаяСтрока(ПараметрыФискализации.ДатаВремяЧека) Тогда + ДатаВремяЧека = ОбщегоНазначенияБПО.ДатаСеанса(); + Иначе + ДатаВремяЧека = ПараметрыФискализации.ДатаВремяЧека; + КонецЕсли; + СведенияОПокупателе = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПерсональныеДанныеПокупателя(); + ПараметрыФискализации.ТипПерсональныхДанных = ПараметрыОперации.ТипПерсональныхДанных; + МенеджерОборудованияВызовСервераПереопределяемый.ОбработкаЗаполненияПерсональныхДанных(СведенияОПокупателе, ПараметрыФискализации.СубъектПерсональныхДанных, + ПараметрыФискализации.ТипПерсональныхДанных, ДатаВремяЧека); + СформироватьXMLПакетДляФискализацияЧека(ПараметрыОперации, ПараметрыФискализации, Истина, СведенияОПокупателе, ПараметрыФискализации.ТипПерсональныхДанных); + КонецЕсли; + + ПараметрыФискализации.ТекущееСостояние.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса); + + Если ЗначениеЗаполнено(ПараметрыОперации.УстройствоПечати) + И (ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И НЕ ПараметрыПодключения.ТипыОборудования.ПринтерЧеков) Тогда + + Шаблон = ШаблоныФискальныхДокументов.ШаблонКассовыйЧек(ШиринаСтроки, ПараметрыОперации); + ТекстЧека = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон); + ПараметрыФискализации.КопияЧека = ПолучитьXMLПакетДляТекста(ТекстЧека, ПараметрыПодключения.РевизияИнтерфейса); + ПараметрыФискализации.ТекстЧека = ТекстЧека; + + КонецЕсли; + + Если ПараметрыОперации.ПакетДокументов <> Неопределено И ПараметрыОперации.ПакетДокументов.Количество() > 0 Тогда + + Если ПараметрыФискализации.ДополнительныеДокументы = Неопределено Тогда + ПараметрыФискализации.ДополнительныеДокументы = Новый Массив(); + КонецЕсли; + + Для Каждого ДополнительныйДокумент ИЗ ПараметрыОперации.ПакетДокументов Цикл + ТекстПечати = ПолучитьXMLПакетДляТекста(ДополнительныйДокумент.Ключ, ПараметрыПодключения.РевизияИнтерфейса); + ПараметрыФискализации.ДополнительныеДокументы.Добавить(Новый Структура("ТекстПечати, УстройствоПечати" , ТекстПечати, ДополнительныйДокумент.Значение)); + КонецЦикла; + + КонецЕсли; + + Если ПараметрыОперации.НефискальныеДокументы <> Неопределено И ПараметрыОперации.НефискальныеДокументы.Количество() > 0 Тогда + Если ПараметрыФискализации.ТестовыеЧеки = Неопределено Тогда + ПараметрыФискализации.ТестовыеЧеки = Новый Массив(); + КонецЕсли; + ЗаполнитьXMLПакетыДляТекстовогоДокумента( + ПараметрыФискализации.ТестовыеЧеки, + ПараметрыОперации.НефискальныеДокументы, + ПараметрыПодключения, + ШиринаСтроки); + КонецЕсли; + + Для Каждого Позиция Из ПараметрыОперации.ПозицииЧека Цикл + Если Позиция.Свойство("ФискальнаяСтрока") Тогда + ШтрихкодBase64 = ?(ЗначениеЗаполнено(Позиция.ШтрихкодBase64), + Позиция.ШтрихкодBase64, + ОбщегоНазначенияБПОКлиентСервер.ШтрихкодВBase64(Позиция.Штрихкод)); + Если ЗначениеЗаполнено(ШтрихкодBase64) Тогда + + ДанныеПродукции = Новый Структура; + ДанныеПродукции.Вставить("Наименование", Позиция.Наименование); + ПараметрыФискализации.ШтрихкодыПродукции.Вставить(ШтрихкодBase64, ДанныеПродукции); + + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат ПараметрыФискализации; + + ИначеЕсли Команда = "PrintReceiptCorrection" Тогда + + Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков + И ПараметрыОперации.Свойство("АвтономнаяККТ") И НЕ ПараметрыОперации.АвтономнаяККТ Тогда + ОписаниеОшибки = НСтр("ru='Фискализация на принтерах чеков запрещена.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + + ПараметрыФискализации = ПараметрыФискализацииЧека(); + // Параметры регистрации ККТ + ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства); + ВерсияФФДККТ11 = ?(ПараметрыРегистрации.Свойство("ВерсияФФДККТ"), ПараметрыРегистрации.ВерсияФФДККТ, "1.05"); + ВерсияФФДККТ11 = ВерсияФФДККТ11 = "1.1" Или ВерсияФФДККТ11 = "1.2"; // Признак ФФД 1.1 + + Если (ПараметрыПодключения.РевизияИнтерфейса < 3000 И ПараметрыОперации.НеприменениеККТ) + И (ПараметрыОперации.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств + Или ПараметрыОперации.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратРасходаДенежныхСредств) Тогда + ПараметрыФискализации.Результат = Ложь; + ПараметрыФискализации.ТекстОшибки = НСтр("ru='Для данного типа расчета нельзя сформировать чек коррекции для данного ККТ.'"); + Возврат ПараметрыФискализации; + КонецЕсли; + + // Параметры фискализации чека + ПараметрыФискализации.НеприменениеККТ = ПараметрыОперации.НеприменениеККТ; + ПараметрыФискализации.Кассир = ПараметрыОперации.Кассир; + ПараметрыФискализации.Электронно = ПараметрыОперации.Электронно; + ПараметрыФискализации.Отправляет1СSMS = ПараметрыОперации.Отправляет1СSMS; + ПараметрыФискализации.Отправляет1СEmail = ПараметрыОперации.Отправляет1СEmail; + ПараметрыФискализации.Организация = ПараметрыОперации.Организация; + ПараметрыФискализации.ТорговыйОбъект = ПараметрыОперации.ТорговыйОбъект; + ПараметрыФискализации.ДополнительныйРеквизит = ПараметрыОперации.ДополнительныйРеквизит; + ПараметрыФискализации.ВерсияФФДККТ11 = ВерсияФФДККТ11; + ПараметрыФискализации.ЕдиныйЧек = ПараметрыОперации.ЕдиныйЧек; + ПараметрыФискализации.РегистрационныйНомерККТ = ?(ПараметрыРегистрации.Свойство("РегистрационныйНомерККТ"), ПараметрыРегистрации.РегистрационныйНомерККТ, ""); + ПараметрыФискализации.ЗаводскойНомерФН = ?(ПараметрыРегистрации.Свойство("ЗаводскойНомерФН"), ПараметрыРегистрации.ЗаводскойНомерФН, ""); + ПараметрыФискализации.ШиринаСтроки = ШиринаСтроки; + ПараметрыФискализации.РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + ПараметрыФискализации.ДокументОснование = ПараметрыОперации.ДокументОснование; + ПараметрыФискализации.ИдентификаторФискальнойЗаписи = ПараметрыОперации.ИдентификаторФискальнойЗаписи; + ПараметрыФискализации.СформироватьЧекКоррекцииСторно = ПараметрыОперации.СформироватьЧекКоррекцииСторно; + Если ПараметрыОперации.Свойство("КорректируемыйДокумент") Тогда + ПараметрыФискализации.КорректируемыйДокумент = ПараметрыОперации.КорректируемыйДокумент; + КонецЕсли; + + Если ПараметрыОперации.НеприменениеККТ Тогда + ПараметрыФискализации.СформироватьЧекКоррекцииСторно = Ложь; + КонецЕсли; + + Если НЕ ПараметрыФискализации.СформироватьЧекКоррекцииСторно Тогда + // Сценарий 1 - неприменение ККТ. + Если ПараметрыОперации.НеприменениеККТ И ЗначениеЗаполнено(ПараметрыОперации.КорректируемыйДокумент) Тогда + ПараметрыФискализации.Результат = Ложь; + ПараметрыФискализации.ТекстОшибки = НСтр("ru='Чек коррекции «неприменение ККТ» нельзя сформировать для фискализированного ранее чека.'"); + Возврат ПараметрыФискализации; + КонецЕсли; + + ПараметрыФискализации.ЧекКоррекцииНаККТ = Истина; + Если НЕ ПараметрыФискализации.НеприменениеККТ И НЕ ПараметрыФискализации.СформироватьЧекКоррекцииСторно И НЕ ВерсияФФДККТ11 Тогда + ПараметрыФискализации.ЧекКоррекцииНаККТ = Ложь; + // НеприменениеККТ не используется, СформироватьЧекКоррекцииСторно содержит Ложь + // ВерсияФФДККТ11 содержит Ложь, ФФД меньше 1.1 + ЗаменитьТипыОплатыПриКоррекции(ПараметрыОперации, Неопределено); + КонецЕсли; + ПараметрыФискализации.ТипДокумента = ?(ПараметрыФискализации.ЧекКоррекцииНаККТ, Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧекКоррекции, Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧек); + СформироватьXMLПакетДляФискализацияЧека(ПараметрыОперации, ПараметрыФискализации); + Иначе + // Сценарий 2 - исправление нарушений применения ККТ. + Если ПустаяСтрока(ПараметрыОперации.КорректируемыйДокумент) Тогда + ПараметрыФискализации.Результат = Ложь; + ПараметрыФискализации.ТекстОшибки = НСтр("ru='Корректируемый документ не указан для формирования чека коррекции.'"); + Возврат ПараметрыФискализации; + КонецЕсли; + + ТипыДокументов = Новый Массив(); + ТипыДокументов.Добавить(Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧек); // Для ФФД 1.05 + ТипыДокументов.Добавить(Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧекКоррекции); // Для ФФД 1.1 + + КорректируемыйДокументОперация = ДанныеФискальнойОперации(ПараметрыОперации.КорректируемыйДокумент, ,ТипыДокументов); + Если КорректируемыйДокументОперация = Неопределено Тогда + ПараметрыФискализации.Результат = Ложь; + ПараметрыФискализации.ТекстОшибки = НСтр("ru='Не найден ранее фискализированный кассовый чек для формирования чека коррекции.'"); + Возврат ПараметрыФискализации; + КонецЕсли; + + // В зависимости от версии ФФД формируем "Кассовый чек" или "Кассовый чек коррекции". + ПараметрыФискализации.ЧекКоррекцииНаККТ = ВерсияФФДККТ11; + ТипФискальногоДокументов = ?(ПараметрыФискализации.ЧекКоррекцииНаККТ, Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧекКоррекции, Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧек); + // Дополнительный реквизит чека - фискальным признаком документа основания (по которому идет коррекция). + ФискальныйПризнак = КорректируемыйДокументОперация.ФискальныйПризнак; + + // Формируем кассовый чек с корректными реквизитами. + ПараметрыОперации.ДополнительныйРеквизит = ФискальныйПризнак; + ПараметрыФискализации.ДополнительныйРеквизит = ФискальныйПризнак; + ПараметрыФискализации.ТипДокумента = ТипФискальногоДокументов; + + // Формируем параметры фискализации для сторнирующего чека коррекции. + ДанныеСторноЧекаXML = КорректируемыйДокументОперация.ДанныеXML.Получить(); + // Чека коррекции не содержат данные о маркировке + ОбщиеПараметрыСторно = ЗагрузитьДанныеФискализацииИзXML(ДанныеСторноЧекаXML, Ложь); + ОбщиеПараметрыСторно.ДополнительныйРеквизит = ФискальныйПризнак; + + ЗаполнитьЗначенияСвойств(ОбщиеПараметрыСторно.ДанныеКоррекции, ПараметрыОперации.ДанныеКоррекции); + ПодготовитьЧекКоррекции(ПараметрыОперации, ОбщиеПараметрыСторно, ВерсияФФДККТ11); + // Для формата 1.05 + Если НЕ ВерсияФФДККТ11 Тогда + ЗаменитьТипыОплатыПриКоррекции(ПараметрыОперации, ОбщиеПараметрыСторно); + КонецЕсли; + + СформироватьXMLПакетДляФискализацияЧека(ПараметрыОперации, ПараметрыФискализации); + + ПараметрыФискализацииСторно = ПараметрыФискализацииЧека(); + ЗаполнитьЗначенияСвойств(ПараметрыФискализацииСторно, ПараметрыФискализации); + СформироватьXMLПакетДляФискализацияЧека(ОбщиеПараметрыСторно, ПараметрыФискализацииСторно); + + ПараметрыФискализации.ЧекКоррекцииСторно = ПараметрыФискализацииСторно; + + КонецЕсли; + + Возврат ПараметрыФискализации; + + ИначеЕсли Команда = "PrintCheckCopy" Тогда + + Аппаратно = ?(ПараметрыОперации.Свойство("Аппаратно"), ПараметрыОперации.Аппаратно, Истина); + + Если Не Аппаратно Тогда + ДокументСсылка = ?(ПараметрыОперации.Свойство("ДокументСсылка"), ПараметрыОперации.ДокументСсылка, Неопределено); + ФискальныйПризнак = ?(ПараметрыОперации.Свойство("ФискальныйПризнак"), ПараметрыОперации.ФискальныйПризнак, Неопределено); + + Если НЕ ЗначениеЗаполнено(ДокументСсылка) И ПустаяСтрока(ФискальныйПризнак) Тогда + ТекстОшибки = НСтр("ru = 'Не указаны параметры печати копии документа.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ТекстОшибки; + Возврат ДанныеОперации; + КонецЕсли; + + ФискальнаяОперация = ДанныеФискальнойОперации(ДокументСсылка, Неопределено, Неопределено, Неопределено, ФискальныйПризнак); + Если ФискальнаяОперация = Неопределено Тогда + ТекстОшибки = НСтр("ru = 'Фискальный документ для печати копии не найден.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ТекстОшибки; + Возврат ДанныеОперации; + КонецЕсли; + + ПараметрыQRКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыQRКодаЧекаККТ(); + ПараметрыQRКода.ДатаВремяРасчета = ФискальнаяОперация.Дата; + ПараметрыQRКода.СуммаРасчета = ФискальнаяОперация.Сумма; + ПараметрыQRКода.ФискальныйПризнак = ФискальнаяОперация.ФискальныйПризнак; + ПараметрыQRКода.ПризнакРасчета = ФискальнаяОперация.ТипРасчета; + ПараметрыQRКода.НомерФискальногоНакопителя = ФискальнаяОперация.ЗаводскойНомерФН; + ПараметрыQRКода.НомерФискальногоДокумента = ФискальнаяОперация.НомерЧекаККМ; + QRКодЧекаККТ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СформироватьQRКодЧекаККТ(ПараметрыQRКода); + + ДанныеXML = ФискальнаяОперация.ДанныеXML.Получить(); + ПараметрыКопииЧека = ЗагрузитьДанныеФискализацииИзXML(ДанныеXML); + ПараметрыКопииЧека.ДатаВремя = ФискальнаяОперация.Дата; + + ПараметрыПечати = ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента(); + ПараметрыПечати.Заголовок = НСтр("ru = 'КОПИЯ ЧЕКА'");; + ПараметрыПечати.ВыводитьФискальнуюИнформацию = Ложь; + Шаблон = ШаблоныФискальныхДокументов.ШаблонКассовыйЧек(ПараметрыПодключения.ШиринаСтроки, ПараметрыКопииЧека, ФискальнаяОперация, ПараметрыПечати); + ТекстЧека = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон); + + ТекстЧека = ПараметрыПечати.Заголовок + Символы.ПС + ТекстЧека; + ТекстЧека = ТекстЧека + Символы.ПС + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыстроитьПоля(НСтр("ru = 'РН ККТ:'"), ФискальнаяОперация.РегистрационныйНомерККТ, ШиринаСтроки); + ТекстЧека = ТекстЧека + Символы.ПС + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыстроитьПоля(НСтр("ru = 'ФН №:'") , ФискальнаяОперация.ЗаводскойНомерФН, ШиринаСтроки); + ТекстЧека = ТекстЧека + Символы.ПС + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыстроитьПоля(НСтр("ru = 'ФД №:'") , Формат(ФискальнаяОперация.НомерЧекаККМ,"ЧГ="), ШиринаСтроки); + ТекстЧека = ТекстЧека + Символы.ПС + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыстроитьПоля(НСтр("ru = 'ФП:'") , ФискальнаяОперация.ФискальныйПризнак, ШиринаСтроки); + ТекстЧека = ТекстЧека + Символы.ПС + "|ШтрихКод|QR|" + QRКодЧекаККТ; + ДанныеОперации.Вставить("ТестовыеЧеки", ПолучитьXMLПакетДляТекста(ТекстЧека, ПараметрыПодключения.РевизияИнтерфейса)); + ДанныеОперации.ТекстЧека = ТекстЧека; + + ДанныеОперации.Вставить("ТестовыеЧеки", ПолучитьXMLПакетДляТекста(ТекстЧека, ПараметрыПодключения.РевизияИнтерфейса)); + КонецЕсли; + + ДанныеОперации.Вставить("НомерЧека", ПараметрыОперации.НомерЧека); + ДанныеОперации.Вставить("Аппаратно", Аппаратно); + + Возврат ДанныеОперации; + + ИначеЕсли Команда = "PrintText" Тогда + + ДанныеОперации.ТестовыеЧеки = ПолучитьXMLПакетДляТекста(ПараметрыОперации.СтрокиТекста, ПараметрыПодключения.РевизияИнтерфейса); + ДанныеОперации.ТекстЧека = ПараметрыОперации.СтрокиТекста; + Возврат ДанныеОперации; + + ИначеЕсли Команда = "PrintQRCode" Тогда + + ТекстЧека = Символы.ПС; + ТестовыйЧек = Новый Массив(); + Если Не ПустаяСтрока(ПараметрыОперации.QRКод.ЗначениеКода) Тогда + + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(); + ТестовыйЧек.Добавить(СтрокаЧека); + + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыШтрихкодВСтрокеЧека("QR", ПараметрыОперации.QRКод.ЗначениеКода); + ТестовыйЧек.Добавить(СтрокаЧека); + + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(); + ТестовыйЧек.Добавить(СтрокаЧека); + + ТекстЧека = ТекстЧека + Символы.ПС + "|ШтрихКод|QR|" + ПараметрыОперации.QRКод.ЗначениеКода + Символы.ПС; + ТекстЧека = ТекстЧека + Символы.НПП + Символы.ПС; + + Если Не ПустаяСтрока(ПараметрыОперации.ТипПлатежнойСистемы) Тогда + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ПараметрыОперации.ТипПлатежнойСистемы); + СтрокаЧека.Выравнивание = "Центр"; + ТестовыйЧек.Добавить(СтрокаЧека); + ТекстЧека = ТекстЧека + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыровнятьПоле(ПараметрыОперации.ТипПлатежнойСистемы, ПараметрыПодключения.ШиринаСтроки, "Центр") + Символы.ПС; + КонецЕсли; + + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ПараметрыОперации.QRКод.ТекстПользователя); + СтрокаЧека.Выравнивание = "Центр"; + ТестовыйЧек.Добавить(СтрокаЧека); + + Если ЗначениеЗаполнено(ПараметрыОперации.СуммаОперации) Тогда + ФорматЧисла = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0"; + ТекстСуммаОперации = СтрШаблон(НСтр("ru='Сумма операции: %1'"), Формат(ПараметрыОперации.СуммаОперации, ФорматЧисла)); + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ТекстСуммаОперации); + СтрокаЧека.Выравнивание = "Центр"; + ТестовыйЧек.Добавить(СтрокаЧека); + ТекстЧека = ТекстЧека + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ВыровнятьПоле(ТекстСуммаОперации, ПараметрыПодключения.ШиринаСтроки, "Центр") + Символы.ПС; + ТекстЧека = ТекстЧека + Символы.НПП + Символы.ПС; + КонецЕсли; + + СтрокаЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(); + ТестовыйЧек.Добавить(СтрокаЧека); + КонецЕсли; + + НефискальныеДокументы = Новый Массив(); + НефискальныеДокументы.Добавить(ТестовыйЧек); + + ТестовыеЧеки = Новый Массив(); + ЗаполнитьXMLПакетыДляТекстовогоДокумента( + ТестовыеЧеки, НефискальныеДокументы, + ПараметрыПодключения, + ПараметрыПодключения.ШиринаСтроки); + ДанныеОперации.Вставить("ТестовыеЧеки", ТестовыеЧеки); + ДанныеОперации.ТекстЧека = ТекстЧека; + + Возврат ДанныеОперации; + + ИначеЕсли Команда = "OpenShift" Тогда + + Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков + И ПараметрыОперации.Свойство("АвтономнаяККТ") И НЕ ПараметрыОперации.АвтономнаяККТ Тогда + ОписаниеОшибки = НСтр("ru='Фискализация на принтерах чеков запрещена.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + + ДанныеОперации = ПараметрыФискальнойОперации(); + Если ПараметрыОперации.Свойство("ДополнительныеПараметры") Тогда + ДанныеОперации.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры; + КонецЕсли; + + Если Не ПередОткрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Тогда + Возврат ДанныеОперации; + КонецЕсли; + + ДанныеОперации.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса); + + Возврат ДанныеОперации; + + ИначеЕсли Команда = "CloseShift" Тогда + + Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков + И ПараметрыОперации.Свойство("АвтономнаяККТ") И НЕ ПараметрыОперации.АвтономнаяККТ Тогда + ОписаниеОшибки = НСтр("ru='Фискализация на принтерах чеков запрещена.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + + ДанныеОперации = ПараметрыФискальнойОперации(); + Если ПараметрыОперации.Свойство("ДополнительныеПараметры") Тогда + ДанныеОперации.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры; + КонецЕсли; + + Если Не ПередЗакрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Тогда + Возврат ДанныеОперации; + КонецЕсли; + + ДанныеОперации.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса); + + Возврат ДанныеОперации; + + ИначеЕсли Команда = "ReportCurrentStatusOfSettlements" Или Команда = "GetCurrentStatus" Тогда + + Если ПараметрыОперации = Неопределено Тогда + ПараметрыОперации = Новый Структура(); + КонецЕсли; + + ДанныеОперации = ПараметрыФискальнойОперации(); + ДанныеОперации.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса); + + Возврат ДанныеОперации; + + ИначеЕсли Команда = "PrintXReport" Тогда + + Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков + И ПараметрыОперации.Свойство("АвтономнаяККТ") И НЕ ПараметрыОперации.АвтономнаяККТ Тогда + ОписаниеОшибки = НСтр("ru='Фискализация на принтерах чеков запрещена.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + + Если ПараметрыОперации = Неопределено Тогда + ПараметрыОперации = Новый Структура(); + КонецЕсли; + + ДанныеОперации = ПараметрыФискальнойОперации(); + ДанныеОперации.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса); + + Возврат ДанныеОперации; + + ИначеЕсли Команда = "Encash" Тогда + + Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков + И ПараметрыОперации.Свойство("АвтономнаяККТ") И НЕ ПараметрыОперации.АвтономнаяККТ Тогда + ОписаниеОшибки = НСтр("ru='Фискализация на принтерах чеков запрещена.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + + ПараметрыФискализации = ПараметрыФискализацииЧека(); + Если ПараметрыОперации.ТипИнкассации = 0 Тогда + ПараметрыФискализации.ТипДокумента = Перечисления.ТипыФискальныхДокументовККТ.Выемка + Иначе + ПараметрыФискализации.ТипДокумента = Перечисления.ТипыФискальныхДокументовККТ.Внесение + КонецЕсли; + ПараметрыФискализации.ТипИнкассации = ПараметрыОперации.ТипИнкассации; + ПараметрыФискализации.ДатаВремяЧека = ОбщегоНазначенияБПО.ДатаСеанса(); + + Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства); + + ПараметрыФискализации.РегистрационныйНомерККТ = ?(ПараметрыРегистрации.Свойство("РегистрационныйНомерККТ"), ПараметрыРегистрации.РегистрационныйНомерККТ, ""); + ПараметрыФискализации.ЗаводскойНомерФН = ?(ПараметрыРегистрации.Свойство("ЗаводскойНомерФН"), ПараметрыРегистрации.ЗаводскойНомерФН, ""); + ПараметрыФискализации.ШиринаСтроки = ?(ПараметрыПодключения.Свойство("ШиринаСтроки"), ПараметрыПодключения.ШиринаСтроки, 32); + ПараметрыФискализации.РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + + Если ПараметрыОперации.Свойство("ДокументОснование") Тогда + ПараметрыФискализации.ДокументОснование = ПараметрыОперации.ДокументОснование; + КонецЕсли; + Если ПараметрыОперации.Свойство("Кассир") Тогда + ПараметрыФискализации.Кассир = ПараметрыОперации.Кассир; + КонецЕсли; + Если ПараметрыОперации.Свойство("Организация") Тогда + ПараметрыФискализации.Организация = ПараметрыОперации.Организация; + КонецЕсли; + Если ПараметрыОперации.Свойство("ТорговыйОбъект") Тогда + ПараметрыФискализации.ТорговыйОбъект = ПараметрыОперации.ТорговыйОбъект; + КонецЕсли; + ПараметрыФискализации.СуммаЧека = ПараметрыОперации.Сумма; + ПараметрыФискализации.ОплатаНаличные = ПараметрыОперации.Сумма; + ПараметрыФискализации.ДанныеЧекаXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса); + + КонецЕсли; + + Возврат ПараметрыФискализации; + + ИначеЕсли Команда = "OperationFN" Тогда + + ДанныеОперации = ПараметрыФискальнойОперации(); + ДанныеОперации.Вставить("ТипОперации", ПараметрыОперации.ТипОперации); + РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + ДанныеОперации.ПараметрыXML = СформироватьТаблицуПараметровДляОперацииФН(ПараметрыОперации, РевизияИнтерфейса); + Возврат ДанныеОперации; + + ИначеЕсли Команда = "RequestKM" Или Команда = "RequestKMKMNoWait" Тогда + + ДанныеОперации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыЗапросКМ(); + + СтатусПоследнейСмены = ПолучитьСтатусПоследнейСмены(ПараметрыПодключения.ИдентификаторУстройства); + Если Не СтатусПоследнейСмены.Активна = Истина Тогда + ОписаниеОшибки = НСтр("ru='Кассовая смена не открыта или истекла.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + + // ++ Локализация + Если Команда = "RequestKMKMNoWait" Тогда + ПараметрыОперации.ОжидатьПолучениеОтветаОИСМ = Ложь; + КонецЕсли; + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + Если ПустаяСтрока(ПараметрыОперации.ИдентификаторЗапроса) Тогда + ПараметрыОперации.ИдентификаторЗапроса = Новый УникальныйИдентификатор; + КонецЕсли; + + Если Не ПустаяСтрока(ПараметрыОперации.КонтрольнаяМарка) Тогда + ДанныеОперации.Результат = Истина; + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + ДанныеОперации.Вставить("ПараметрыXML", + МодульМенеджерОборудованияМаркировка.СформироватьXMLДляЗапросаКМ(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса)); + ЗаполнитьЗначенияСвойств(ДанныеОперации, ПараметрыОперации); + Иначе + ТекстОшибки = НСтр("ru = 'Контрольная марка не может быть пустой.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ТекстОшибки; + КонецЕсли; + КонецЕсли; + + Возврат ДанныеОперации; + // -- Локализация + + ИначеЕсли Команда = "CheckKM" Тогда + + ДанныеОперации = ОбщегоНазначенияБПО.СкопироватьРекурсивно(ПараметрыОперации); + ДанныеОперации.Вставить("Результат", Истина); + ДанныеОперации.Вставить("ТекстОшибки", ""); + // ++ Локализация + СтатусПоследнейСмены = ПолучитьСтатусПоследнейСмены(ПараметрыПодключения.ИдентификаторУстройства); + Если Не СтатусПоследнейСмены.Активна = Истина Тогда + ОписаниеОшибки = НСтр("ru='Кассовая смена не открыта или истекла.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + + Для Каждого Операция Из ДанныеОперации.ЗапросыКМ Цикл + Если ПустаяСтрока(Операция.ИдентификаторЗапроса) Тогда + Операция.ИдентификаторЗапроса = Строка(Новый УникальныйИдентификатор); + КонецЕсли; + Операция.ОтправлятьНаСерверОИСМ = Операция.ЗапросПроверкиКМСредствамиККТ; + Операция.Вставить("ПараметрыXML", МодульМенеджерОборудованияМаркировка.СформироватьXMLДляЗапросаКМ(Операция, ПараметрыПодключения.РевизияИнтерфейса)); + КонецЦикла; + КонецЕсли; + + // -- Локализация + Возврат ДанныеОперации; + + ИначеЕсли Команда = "CheckFiscalizationPacket" Тогда + + СтатусПоследнейСмены = ПолучитьСтатусПоследнейСмены(ПараметрыПодключения.ИдентификаторУстройства); + Если Не СтатусПоследнейСмены.Активна = Истина Тогда + ОписаниеОшибки = НСтр("ru='Кассовая смена не открыта или истекла.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + + ДанныеОперации = ПараметрыФискализацииЧека(); + + Если ПараметрыОперации <> Неопределено И ПараметрыОперации.Свойство("ДанныеЧекаXML") Тогда + ДанныеОперации.ДанныеЧекаXML = ПараметрыОперации.ДанныеЧекаXML; + КонецЕсли; + + Возврат ДанныеОперации; + + КонецЕсли + +КонецФункции + +// Обработать данные операции после выполнения команды. +// +// Параметры: +// ПараметрыПодключения - Структура - см. МенеджерОборудованияКлиентСервер.ПараметрыПодключения() +// Команда - Строка - команда для выполнения +// РезультатВыполнения - Структура - +// ДанныеОперации - Структура - +Процедура ОбработатьДанныеОперации(ПараметрыПодключения, Команда, РезультатВыполнения, ДанныеОперации) Экспорт + + РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + + Если Команда = "CheckFiscalization" Или Команда = "CheckFiscalizationPacket" Тогда + + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + // Заполнить результаты фискализация чека из XML пакета. + ЗаполнитьРезультатыФискализацияЧекаИзXMLПакета(ДанныеОперации); + КонецЕсли; + + РезультатВыполнения.Вставить("НомерСменыККТ" , ДанныеОперации.НомерСменыККТ); + РезультатВыполнения.Вставить("НомерЧекаККТ" , ДанныеОперации.НомерЧекаККТ); + РезультатВыполнения.Вставить("СтатусСмены", 2); + РезультатВыполнения.Вставить("ДатаВремяЧека" , ДанныеОперации.ДатаВремяЧека); + РезультатВыполнения.Вставить("ФискальныйПризнак" , ДанныеОперации.ФискальныйПризнак); + РезультатВыполнения.Вставить("АдресСайтаПроверки" , ДанныеОперации.АдресСайтаПроверки); + РезультатВыполнения.Вставить("ОшибкаПечати" , ДанныеОперации.ОшибкаПечати); + РезультатВыполнения.Вставить("РегистрационныйНомерККТ", ДанныеОперации.РегистрационныйНомерККТ); + РезультатВыполнения.Вставить("ДанныеЧекаXML" , ДанныеОперации.ДанныеЧекаXML); + РезультатВыполнения.Вставить("ОперацияЗаписана" , Истина); + РезультатВыполнения.Вставить("ПараметрыФискализации" , ДанныеОперации); + + Попытка + // Записать фискальную операцию. + ЗаписатьФискальнуюОперацию(ДанныеОперации); + Исключение + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Запись фискальной операции'"), + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + РезультатВыполнения.ОперацияЗаписана = Ложь; + КонецПопытки; + + ПараметрыQRКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыQRКодаЧекаККТ(); + ПараметрыQRКода.ДатаВремяРасчета = ДанныеОперации.ДатаВремяЧека; + ПараметрыQRКода.СуммаРасчета = ДанныеОперации.СуммаЧека; + ПараметрыQRКода.ФискальныйПризнак = ДанныеОперации.ФискальныйПризнак; + ПараметрыQRКода.ПризнакРасчета = ДанныеОперации.ТипРасчета; + ПараметрыQRКода.НомерФискальногоНакопителя = ДанныеОперации.ЗаводскойНомерФН; + ПараметрыQRКода.НомерФискальногоДокумента = ДанныеОперации.НомерЧекаККТ; + QRКодЧекаККТ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СформироватьQRКодЧекаККТ(ПараметрыQRКода); + + // Отправить электронный чек через рассылку + Если (ДанныеОперации.Отправляет1СSMS Или ДанныеОперации.Отправляет1СEmail) Тогда + МодульРассылкаЭлектронныхЧеков = ОбщегоНазначенияБПО.ОбщийМодуль("РассылкаЭлектронныхЧеков"); + Если МодульРассылкаЭлектронныхЧеков <> Неопределено Тогда + ТекстСообщения = МодульРассылкаЭлектронныхЧеков.ШаблонАтрибутовЧекаДляОтсылки(ДанныеОперации); + МодульРассылкаЭлектронныхЧеков.ОтправитьЭлектронныйЧек( + ДанныеОперации, + ТекстСообщения, + ДанныеОперации.ПокупательEmail, + ДанныеОперации.ПокупательНомер); + КонецЕсли; + КонецЕсли; + + РезультатВыполнения.Вставить("QRКодЧекаККТ", QRКодЧекаККТ); + + ИначеЕсли Команда = "PrintReceiptCorrection" Тогда + + // Заполнить результаты фискализация чека из XML пакета. + ЗаполнитьРезультатыФискализацияЧекаИзXMLПакета(ДанныеОперации); + + РезультатВыполнения.Вставить("НомерСменыККТ" , ДанныеОперации.НомерСменыККТ); + РезультатВыполнения.Вставить("НомерЧекаККТ" , ДанныеОперации.НомерЧекаККТ); + РезультатВыполнения.Вставить("СтатусСмены", 2); + РезультатВыполнения.Вставить("ДатаВремяЧека" , ДанныеОперации.ДатаВремяЧека); + РезультатВыполнения.Вставить("ФискальныйПризнак" , ДанныеОперации.ФискальныйПризнак); + РезультатВыполнения.Вставить("АдресСайтаПроверки" , ДанныеОперации.АдресСайтаПроверки); + РезультатВыполнения.Вставить("ОшибкаПечати" , ДанныеОперации.ОшибкаПечати); + РезультатВыполнения.Вставить("РегистрационныйНомерККТ", ДанныеОперации.РегистрационныйНомерККТ); + РезультатВыполнения.Вставить("ДанныеЧекаXML" , ДанныеОперации.ДанныеЧекаXML); + РезультатВыполнения.Вставить("ОперацияЗаписана" , Истина); + РезультатВыполнения.Вставить("ПараметрыФискализации" , ДанныеОперации); + + Если НЕ ДанныеОперации.НеприменениеККТ И ДанныеОперации.СформироватьЧекКоррекцииСторно Тогда + // Заполнить результаты фискализация чека из XML пакета. + ЗаполнитьРезультатыФискализацияЧекаИзXMLПакета(ДанныеОперации.ЧекКоррекцииСторно); + Попытка + // Записать фискальную операцию - сторно. + ЗаписатьФискальнуюОперацию(ДанныеОперации.ЧекКоррекцииСторно); + Исключение + РезультатВыполнения.ОперацияЗаписана = Ложь; + КонецПопытки; + КонецЕсли; + + Попытка + // Записать фискальную операцию. + ЗаписатьФискальнуюОперацию(ДанныеОперации); + Исключение + РезультатВыполнения.ОперацияЗаписана = Ложь; + КонецПопытки; + + ИначеЕсли Команда = "CloseShift" Тогда + + РезультатВыполнения.Вставить("НомерСменыККТ", ДанныеОперации.НомерСменыККТ); + РезультатВыполнения.Вставить("НомерЧекаККТ" , ДанныеОперации.НомерЧекаККТ); + РезультатВыполнения.Вставить("СтатусСмены" , ДанныеОперации.СтатусСмены); + РезультатВыполнения.Вставить("КассоваяСмена" , ДанныеОперации.КассоваяСмена); + + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + ФискальныеДанныеСтруктура = ПолучитьПараметрыСменыИзXMLПакета(ДанныеОперации.РезультатXML, РевизияИнтерфейса); + РезультатВыполнения.НомерСменыККТ = ФискальныеДанныеСтруктура.НомерСменыККТ; + РезультатВыполнения.НомерЧекаККТ = ФискальныеДанныеСтруктура.НомерЧекаККТ; + РезультатВыполнения.СтатусСмены = ФискальныеДанныеСтруктура.СтатусСмены; + Иначе + ФискальныеДанныеСтруктура = ПолучитьПараметрыСменыИзXMLПакета(ДанныеОперации.РезультатXML); + ФискальныеДанныеСтруктура.НомерСменыККТ = ДанныеОперации.НомерСменыККТ; + ФискальныеДанныеСтруктура.СтатусСмены = 1; // Закрыта + КонецЕсли; + + РезультатВыполнения.Вставить("ФискальныеДанныеСтруктура", ФискальныеДанныеСтруктура); + РезультатВыполнения.Вставить("ФискальныеДанныеXMLСтрока", ДанныеОперации.РезультатXML); + Если ДанныеОперации.Свойство("ДополнительныеПараметры") Тогда + РезультатВыполнения.Вставить("ДополнительныеПараметры", ДанныеОперации.ДополнительныеПараметры); + КонецЕсли; + + ПослеЗакрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения); + + ИначеЕсли Команда = "OpenShift" Тогда + + РезультатВыполнения.Вставить("НомерСменыККТ" , ДанныеОперации.НомерСменыККТ); + РезультатВыполнения.Вставить("НомерЧекаККТ" , ДанныеОперации.НомерЧекаККТ); + РезультатВыполнения.Вставить("СтатусСмены" , ДанныеОперации.СтатусСмены); + РезультатВыполнения.Вставить("КассоваяСмена" , ДанныеОперации.КассоваяСмена); + + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + ФискальныеДанныеСтруктура = ПолучитьПараметрыСменыИзXMLПакета(ДанныеОперации.РезультатXML, РевизияИнтерфейса); + РезультатВыполнения.НомерСменыККТ = ФискальныеДанныеСтруктура.НомерСменыККТ; + РезультатВыполнения.НомерЧекаККТ = ФискальныеДанныеСтруктура.НомерЧекаККТ; + РезультатВыполнения.СтатусСмены = ФискальныеДанныеСтруктура.СтатусСмены; + Иначе // Версия стандарта 2.2 и выше (ОФД 1.05) + ФискальныеДанныеСтруктура = ПолучитьПараметрыСменыИзXMLПакета(ДанныеОперации.РезультатXML, РевизияИнтерфейса); + ФискальныеДанныеСтруктура.НомерСменыККТ = ДанныеОперации.НомерСменыККТ; + ФискальныеДанныеСтруктура.СтатусСмены = 2; // Открыта + КонецЕсли; + РезультатВыполнения.Вставить("ФискальныеДанныеСтруктура", ФискальныеДанныеСтруктура); + РезультатВыполнения.Вставить("ФискальныеДанныеXMLСтрока", ДанныеОперации.РезультатXML); + Если ДанныеОперации.Свойство("ДополнительныеПараметры") Тогда + РезультатВыполнения.Вставить("ДополнительныеПараметры", ДанныеОперации.ДополнительныеПараметры); + КонецЕсли; + + Если ДанныеОперации.Свойство("ПараметрыККТ") И Не ПустаяСтрока(ДанныеОперации.ПараметрыККТ) Тогда + ПараметрыККТ = ПараметрыИзXMLПакетаККТ(ДанныеОперации.ПараметрыККТ, РевизияИнтерфейса); + СохранитьПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства, ПараметрыККТ); + + ВедетсяУчетПродукцииИСМП = МенеджерОборудования.ВедетсяУчетПродукцииИСМП(); + Если ПараметрыККТ.Свойство("ВерсияФФДККТ") И ПараметрыККТ.ВерсияФФДККТ <> "1.2" Тогда + // Письмо Федеральной налоговой службы от 28 октября 2021 г. № ПА-4-20/15207@ О переходе ККТ на ФФД 1.2 + Если ВедетсяУчетПродукцииИСМП Тогда + ТекстСообщения = НСтр("ru='При осуществлении расчетов за маркированные товары необходимо перейти на ККТ с ФФД версии 1.2 в срок до 01.02.2022.'") + Символы.ПС + + НСтр("ru='Письмо ФНС от 28 октября 2021 г. № ПА-4-20/15207@ «О переходе ККТ на ФФД 1.2»'"); + ОбщегоНазначенияБПО.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + ИначеЕсли ПараметрыККТ.Свойство("ВерсияФФДККТ") И ПараметрыККТ.ВерсияФФДККТ = "1.2" И ВедетсяУчетПродукцииИСМП Тогда + Если НЕ ПараметрыККТ.ПродажаМаркированныхТоваров Тогда + ТекстСообщения = НСтр("ru='ККТ не зарегистрирована для работы с маркированной продукцией.'") + Символы.ПС + + НСтр("ru='Необходимо провести перерегистрацию ККТ.'"); + ОбщегоНазначенияБПО.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + КонецЕсли; + Иначе + ПараметрыККТ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыРегистрацииККТ(); + КонецЕсли; + РезультатВыполнения.Вставить("ПараметрыККТ" , ПараметрыККТ); + + ПослеОткрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения); + + ИначеЕсли Команда = "Encash" Тогда + + Попытка + // Записать фискальную операцию. + ЗаписатьФискальнуюОперацию(ДанныеОперации); + Исключение + РезультатВыполнения.ОперацияЗаписана = Ложь; + КонецПопытки; + + ИначеЕсли Команда = "GetDataKKT" Тогда + + ПараметрыККТ = ПараметрыИзXMLПакетаККТ(РезультатВыполнения.ПараметрыККТXML, РевизияИнтерфейса); + РезультатВыполнения.Вставить("ПараметрыККТ" , ПараметрыККТ); + + СохранитьПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства, ПараметрыККТ); + + ИначеЕсли Команда = "GetCurrentStatus" Тогда + + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + ФискальныеДанныеСтруктура = ПолучитьПараметрыСменыИзXMLПакета(ДанныеОперации.РезультатXML, РевизияИнтерфейса); + НомерСменыККТ = ФискальныеДанныеСтруктура.НомерСменыККТ; + НомерЧекаККТ = ФискальныеДанныеСтруктура.НомерЧекаККТ; + СтатусСмены = ФискальныеДанныеСтруктура.СтатусСмены; + Иначе + ФискальныеДанныеСтруктура = ПолучитьПараметрыСостоянияИзXMLПакета(ДанныеОперации.РезультатXML); + НомерСменыККТ = ДанныеОперации.НомерСменыККТ; + НомерЧекаККТ = ДанныеОперации.НомерЧекаККТ; + СтатусСмены = ДанныеОперации.СтатусСмены; + КонецЕсли; + РезультатВыполнения.Вставить("НомерСменыККТ" , НомерСменыККТ); + РезультатВыполнения.Вставить("НомерЧекаККТ" , НомерЧекаККТ); + РезультатВыполнения.Вставить("СтатусСмены", СтатусСмены); + РезультатВыполнения.Вставить("ФискальныеДанные", ФискальныеДанныеСтруктура); + + ИначеЕсли Команда = "RequestKM" Тогда + + // ++ Локализация + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + ДанныеСтруктура = МодульМенеджерОборудованияМаркировка.ПолучитьРезультатыЗапросаКМИзXMLПакета(РезультатВыполнения.РезультатXML); + РезультатВыполнения.Вставить("КодМаркировкиПроверен", ДанныеСтруктура.КодМаркировкиПроверен); + РезультатВыполнения.Вставить("РезультатПроверки", ДанныеСтруктура.РезультатПроверки); + КонецЕсли; + // -- Локализация + + ИначеЕсли Команда = "GetProcessingKMResult" Или Команда = "RequestKMKMNoWait" Тогда + + // ++ Локализация + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + РезультатВыполнения = МодульМенеджерОборудованияМаркировка.ПолучитьРезультатыОИСМКМИзXMLПакета(ДанныеОперации.РезультатXML, РезультатВыполнения); + РезультатВыполнения.СтатусРезультата = МодульМенеджерОборудованияМаркировка.СтатусРезультатаЗапросаКМПоКоду(ДанныеОперации.СтатусРезультатаКод); + РезультатВыполнения.Вставить("РезультатXML", ДанныеОперации.РезультатXML); + + Попытка + Если РезультатВыполнения.Свойство("ЗапросКМ") И РезультатВыполнения.ЗапросКМ <> Неопределено Тогда + СтатусРезультатаКод = ДанныеОперации.СтатусРезультатаКод; + Если СтатусРезультатаКод = 0 Или СтатусРезультатаКод = 2 Тогда + РезультатВыполненияЗапросаКМ = РезультатВыполнения.ЗапросКМ.РезультатВыполнения; + ДанныеОперацииЗапросаКМ = РезультатВыполнения.ЗапросКМ.ДанныеОперации; + + ПараметрыЗаписи = МодульМенеджерОборудованияМаркировка.ПараметрыЗаписиРезультатаПроверкиКМ(); + ПараметрыЗаписи.Ключ.ИдентификаторСессии = РезультатВыполненияЗапросаКМ.ИдентификаторСессии; + ПараметрыЗаписи.Ключ.ИдентификаторЗапроса = РезультатВыполненияЗапросаКМ.ИдентификаторЗапроса; + ПараметрыЗаписи.Результат = РезультатВыполнения.Результат; + ПараметрыЗаписи.ЗапросКМ = ДанныеОперацииЗапросаКМ; + ПараметрыЗаписи.ФлагиПроверкиОИСМ = РезультатВыполнения.РезультатПроверкиОИСМПредставление; + ПараметрыЗаписи.ЛокальныйОтветXML = РезультатВыполненияЗапросаКМ.РезультатXML; + ПараметрыЗаписи.УдаленныйОтветXML = РезультатВыполнения.РезультатXML; + ПараметрыЗаписи.ПокупкаПодтверждена = Истина; + МассивПараметровЗаписей = Новый Массив(); + МассивПараметровЗаписей.Добавить(ПараметрыЗаписи); + + МодульМенеджерОборудованияМаркировка.ДобавитьРезультатыПроверкиКодаМаркировкиВРегистр(МассивПараметровЗаписей); + КонецЕсли; + КонецЕсли; + Исключение + + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Ошибка записи в журнал проверки кода маркировки.'"), + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЕсли; + // -- Локализация + + ИначеЕсли Команда = "CheckKM" Тогда + + // ++ Локализация + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + + Если Не РезультатВыполнения.Результат Тогда + Возврат; + КонецЕсли; + + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + МассивПараметровЗаписей = Новый Массив(); + МассивДанныхОбмена = Новый Массив(); + Для каждого Результат Из РезультатВыполнения.РезультатыОпераций Цикл + Параметры = Новый Структура(); + МодульМенеджерОборудованияМаркировка.ПолучитьРезультатыОИСМКМИзXMLПакета(Результат.Служебная.УдаленныйОтветXML, Параметры); + Результат.Вставить("РезультатПроверкиСведенийОТоваре", Параметры.РезультатПроверкиСведенийОТоваре); + Результат.Вставить("РезультатПроверкиСведенийОТовареПФ", Параметры.РезультатПроверкиСведенийОТовареПФ); + Результат.Вставить("СтатусТовара", Параметры.СтатусТовара); + // для обратной совместимости + ДанныеСтруктура = МодульМенеджерОборудованияМаркировка.ПолучитьРезультатыЗапросаКМИзXMLПакета(Результат.Служебная.ЛокальныйОтветXML); + Результат.Вставить("КодМаркировкиПроверен", ДанныеСтруктура.КодМаркировкиПроверен); + Результат.Вставить("РезультатПроверки", ДанныеСтруктура.РезультатПроверки); + + Результат.Вставить("РезультатПроверкиОИСМ", Параметры.РезультатПроверкиОИСМ); + Результат.Вставить("КодРезультатаПроверкиОИСМ", Параметры.КодРезультатаПроверкиОИСМ); + Результат.Вставить("РезультатПроверкиОИСМПредставление", Параметры.РезультатПроверкиОИСМПредставление); + Результат.Вставить("КодОбработкиЗапроса", Параметры.КодОбработкиЗапроса); + + ПараметрыЗаписи = МодульМенеджерОборудованияМаркировка.ПараметрыЗаписиРезультатаПроверкиКМ(); + ПараметрыЗаписи.Ключ.ИдентификаторСессии = РезультатВыполнения.ИдентификаторСессии; + ПараметрыЗаписи.Ключ.ИдентификаторЗапроса = Результат.ИдентификаторЗапроса; + ПараметрыЗаписи.Результат = Результат.Результат; + ПараметрыЗаписи.ЗапросКМ = Результат.Служебная.ЗапросКМ; + ПараметрыЗаписи.ФлагиПроверкиОИСМ = Параметры.РезультатПроверкиОИСМПредставление; + ПараметрыЗаписи.ЛокальныйОтветXML = Результат.Служебная.ЛокальныйОтветXML; + ПараметрыЗаписи.УдаленныйОтветXML = Результат.Служебная.УдаленныйОтветXML; + ПараметрыЗаписи.ПокупкаПодтверждена = Результат.Служебная.ПокупкаПодтверждена; + МассивПараметровЗаписей.Добавить(ПараметрыЗаписи); + + ДанныеОбмена = Новый Структура(); + ДанныеОбмена.Вставить("ЗапросКМ", ПараметрыЗаписи.ЗапросКМ.ПараметрыXML); + ДанныеОбмена.Вставить("ЛокальныйОтветКМ", ПараметрыЗаписи.ЛокальныйОтветXML); + ДанныеОбмена.Вставить("УдаленныйОтветКМ", ПараметрыЗаписи.УдаленныйОтветXML); + МассивДанныхОбмена.Добавить(ДанныеОбмена); + + КонецЦикла; + МенеджерОборудованияВызовСервераПереопределяемый.ПослеПроверкиКодовМаркировки(МассивДанныхОбмена); + МодульМенеджерОборудованияМаркировка.ДобавитьРезультатыПроверкиКодаМаркировкиВРегистр(МассивПараметровЗаписей); + КонецЕсли; + // -- Локализация + + ИначеЕсли Команда = "OperationFN" Тогда + + Если ДанныеОперации.Свойство("ПараметрыККТ") И Не ПустаяСтрока(ДанныеОперации.ПараметрыККТ) Тогда + ПараметрыККТ = ПараметрыИзXMLПакетаККТ(ДанныеОперации.ПараметрыККТ, РевизияИнтерфейса); + РезультатВыполнения.Вставить("ПараметрыККТ" , ПараметрыККТ); + СохранитьПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства, ПараметрыККТ); + КонецЕсли; + + КонецЕсли + +КонецПроцедуры + +Функция ПередОткрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Экспорт + + Результат = Истина; + + Если ИспользуетсяКассовыеСмены() Тогда + ОписаниеКассовойСмены = ОписаниеПоследнейКассовойСмены(ПараметрыПодключения.ИдентификаторУстройства); + Если ОписаниеКассовойСмены <> Неопределено И ОписаниеКассовойСмены.Статус = Перечисления.СтатусыКассовойСмены.Открыта Тогда + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = НСтр("ru='Кассовая смена уже открыта.'"); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ПередЗакрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Экспорт + + Результат = Истина; + + Если ИспользуетсяКассовыеСмены() Тогда + ОписаниеКассовойСмены = ОписаниеПоследнейКассовойСмены(ПараметрыПодключения.ИдентификаторУстройства); + Если ОписаниеКассовойСмены = Неопределено Тогда + ДанныеОперации.КассоваяСмена = НоваяКассоваяСмена(ПараметрыПодключения.ИдентификаторУстройства, ДанныеОперации); + ИначеЕсли ОписаниеКассовойСмены.Статус = Перечисления.СтатусыКассовойСмены.Открыта Тогда + ДанныеОперации.КассоваяСмена = ОписаниеКассовойСмены.КассоваяСмена; + Иначе + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = НСтр("ru='Кассовая смена уже закрыта.'"); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ПослеОткрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения) Экспорт + + Результат = Истина; + + КассоваяСмена = НоваяКассоваяСмена(ПараметрыПодключения.ИдентификаторУстройства, РезультатВыполнения); + Если Не ЗначениеЗаполнено(РезультатВыполнения.КассоваяСмена) Тогда + РезультатВыполнения.КассоваяСмена = КассоваяСмена; + КонецЕсли; + + МенеджерОборудованияВызовСервераПереопределяемый.ПослеОткрытияКассовойСмены(ПараметрыПодключения.ИдентификаторУстройства, РезультатВыполнения); + + Возврат Результат; + +КонецФункции + +Функция ПослеЗакрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения) Экспорт + + Результат = Истина; + + ЗакрытьКассовуюСмену(РезультатВыполнения); + + МенеджерОборудованияВызовСервераПереопределяемый.ПослеЗакрытияКассовойСмены(ПараметрыПодключения.ИдентификаторУстройства, РезультатВыполнения); + + Возврат Результат; + +КонецФункции + +Функция XMLПакетИнфоКвитанции(Данные, ШиринаСтроки, РевизияИнтерфейса) Экспорт + + Шаблон = ШаблоныФискальныхДокументов.ШаблонИнфоКвитанция(ШиринаСтроки, Данные); + Текст = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон); + + Возврат ОборудованиеЧекопечатающиеУстройства.ПолучитьXMLПакетДляТекста(Текст, РевизияИнтерфейса); +КонецФункции + + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ФормированиеДанныхККТ + +Процедура ЗаполнитьДанныеПлатежныхОпераций(ОбщиеПараметры) + + Если ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы() Тогда + + ДополнительныйРеквизитПользователя = ОбщиеПараметры.ДополнительныйРеквизитПользователя; + + МодульОборудованиеПлатежныеСистемы = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеПлатежныеСистемы"); + ПлатежныеОперации = МодульОборудованиеПлатежныеСистемы.ДанныеПлатежныхОпераций(Неопределено, ОбщиеПараметры.ДокументОснование); + + Если ПлатежныеОперации.Количество() > 0 Тогда + + Операция = ПлатежныеОперации[0]; // Первая операция, в рамках пилотного проекта. + // Префикс «epay» как признак того, что тег 1086 содержит специфичную для передачи информацию по безналичному способу расчета; + Если НЕ ПустаяСтрока(ДополнительныйРеквизитПользователя.Наименование) Тогда + ДополнительныйРеквизитПользователя.Наименование = Строка(ДополнительныйРеквизитПользователя.Наименование) + ";"; + КонецЕсли; + ДополнительныйРеквизитПользователя.Наименование = Строка(ДополнительныйРеквизитПользователя.Наименование) + "epay"; + + // В теге 1086 блоки информации разделяются символом «;» + ДатаВремяТранзакции = Формат(Операция.ДатаВремяТранзакции - Дата(1970,1,1,1,0,0), "ЧГ=0"); // Дата и время в формате UnixTime) + РеквизитЗначение = СтрШаблон("date=%1&rrn=%2&tid=%3&ps=%4&acq=%5&auth=%6&uuid=%7", + ДатаВремяТранзакции, // Дата и время инициализации транзакции, содержит локальную дату и время инициализации транзакции UnixTime + Операция.СсылочныйНомер, // RNN - Идентификатор банковской транзакции. + Операция.ИдентификаторТерминала, // TID - Уникальный идентификационный номер POS-терминала. + Операция.ИдентификаторПлатежнойСистемы, // PS - Уникальный идентификатор платежной системы, через которую проводилась операция. + Операция.ИдентификаторБанкаЭквайера, // ACQ - Уникальный идентификатор банка-эквайера используемый на POS-терминале. + Операция.КодАвторизации, // AUTH - Код авторизации, который присваивается банком-эмитентом. + Операция.ИдентификаторФискальнойОперации); // UUID - Уникальный идентификатор банковской транзакции, формируемый на стороне банка-эмитента. + Если НЕ ПустаяСтрока(ДополнительныйРеквизитПользователя.Значение) Тогда + ДополнительныйРеквизитПользователя.Значение = Строка(ДополнительныйРеквизитПользователя.Значение) + ";"; + КонецЕсли; + ДополнительныйРеквизитПользователя.Значение = Строка(ДополнительныйРеквизитПользователя.Значение) + РеквизитЗначение; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Заменяет типы оплаты при коррекции, используется только при ФФД 1.05 +Процедура ЗаменитьТипыОплатыПриКоррекции(ОбщиеПараметры, ОбщиеПараметрыСторно = Неопределено) + + // Необходимо изменить вид оплат на «ВстречноеПредоставление» + Для Каждого ЭлементМассива Из ОбщиеПараметры.ТаблицаОплат Цикл + ЭлементМассива.ТипОплаты = Перечисления.ТипыОплатыККТ.ВстречноеПредоставление; + КонецЦикла; + + Если ОбщиеПараметрыСторно = Неопределено Тогда + Возврат; + КонецЕсли; + // Необходимо изменить вид оплат на «ВстречноеПредоставление» + Для Каждого ЭлементМассива Из ОбщиеПараметрыСторно.ТаблицаОплат Цикл + ЭлементМассива.ТипОплаты = Перечисления.ТипыОплатыККТ.ВстречноеПредоставление; + КонецЦикла; + +КонецПроцедуры + +Процедура ПодготовитьЧекКоррекции(ОбщиеПараметры, ОбщиеПараметрыСторно, ВерсияФФДККТ11) + + // Меняем признак типа расчета на противоположный. + Если ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств Тогда + ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств; + ИначеЕсли ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств Тогда + ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств; + ИначеЕсли ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.РасходДенежныхСредств Тогда + ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратРасходаДенежныхСредств; + ИначеЕсли ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратРасходаДенежныхСредств Тогда + ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.РасходДенежныхСредств; + КонецЕсли; + +КонецПроцедуры + +// ++ Локализация + +Процедура ЗаписатьДанныеКоррекции(ЗаписьXML, ДанныеКоррекции) + + ЗаписьXML.ЗаписатьНачалоЭлемента("CorrectionData"); + ТипКоррекции = ?(ПустаяСтрока(ДанныеКоррекции.ТипКоррекции), 0, ДанныеКоррекции.ТипКоррекции); + ЗаписьXML.ЗаписатьАтрибут("Type", XMLСтрока(ТипКоррекции)); + Если Не ПустаяСтрока(ДанныеКоррекции.ДатаКоррекции) Тогда + ЗаписьXML.ЗаписатьАтрибут("Date", XMLСтрока(НачалоДня(ДанныеКоррекции.ДатаКоррекции))); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеКоррекции.НомерПредписания) Тогда + ЗаписьXML.ЗаписатьАтрибут("Number", XMLСтрока(ДанныеКоррекции.НомерПредписания)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеКоррекции.ОписаниеКоррекции) Тогда + ЗаписьXML.ЗаписатьАтрибут("Description", XMLСтрока(ДанныеКоррекции.ОписаниеКоррекции)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +// Записывает данные агента в XML файл +// +// Параметры: +// ЗаписьXML - ЗаписьXML +// ДанныеАгента - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеАгента +// РевизияИнтерфейса - Число +// +Процедура ЗаписатьДанныеАгента(ЗаписьXML, ДанныеАгента, РевизияИнтерфейса = 0) + + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + ЗаписьXML.ЗаписатьНачалоЭлемента("AgentData"); + Если Не ПустаяСтрока(ДанныеАгента.ПлатежныйАгент.Операция) Тогда // Операция платежного агента + ЗаписьXML.ЗаписатьАтрибут("AgentOperation", XMLСтрока(ДанныеАгента.ПлатежныйАгент.Операция)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеАгента.ПлатежныйАгент.Телефон) Тогда // Телефон платежного агента + Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеАгента.ПлатежныйАгент.Телефон); + ЗаписьXML.ЗаписатьАтрибут("AgentPhone", Телефон); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеАгента.ОператорПоПриемуПлатежей.Телефон) Тогда // Телефон оператора по приему платежей + Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеАгента.ОператорПоПриемуПлатежей.Телефон); + ЗаписьXML.ЗаписатьАтрибут("PaymentProcessorPhone", Телефон); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.Телефон) Тогда // Телефон оператора перевода + Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеАгента.ОператорПеревода.Телефон); + ЗаписьXML.ЗаписатьАтрибут("AcquirerOperatorPhone", Телефон); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.Наименование) Тогда // Наименование оператора перевода + ЗаписьXML.ЗаписатьАтрибут("AcquirerOperatorName" , XMLСтрока(ДанныеАгента.ОператорПеревода.Наименование)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.Адрес) Тогда // Адрес оператора перевода + ЗаписьXML.ЗаписатьАтрибут("AcquirerOperatorAddress" , XMLСтрока(ДанныеАгента.ОператорПеревода.Адрес)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.ИНН) Тогда // ИНН оператора перевода + ЗаписьXML.ЗаписатьАтрибут("AcquirerOperatorINN" , XMLСтрока(ДанныеАгента.ОператорПеревода.ИНН)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + Иначе + ЗаписьXML.ЗаписатьНачалоЭлемента("AgentData"); + Если Не ПустаяСтрока(ДанныеАгента.ПлатежныйАгент.Операция) Тогда + ЗаписьXML.ЗаписатьАтрибут("PayingAgentOperation", XMLСтрока(ДанныеАгента.ПлатежныйАгент.Операция)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеАгента.ПлатежныйАгент.Телефон) Тогда + Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеАгента.ПлатежныйАгент.Телефон); + ЗаписьXML.ЗаписатьАтрибут("PayingAgentPhone", Телефон); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеАгента.ОператорПоПриемуПлатежей.Телефон) Тогда + Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеАгента.ОператорПоПриемуПлатежей.Телефон); + ЗаписьXML.ЗаписатьАтрибут("ReceivePaymentsOperatorPhone", Телефон); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.Телефон) Тогда + Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеАгента.ОператорПеревода.Телефон); + ЗаписьXML.ЗаписатьАтрибут("MoneyTransferOperatorPhone", Телефон); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.Наименование) Тогда + ЗаписьXML.ЗаписатьАтрибут("MoneyTransferOperatorName", XMLСтрока(ДанныеАгента.ОператорПеревода.Наименование)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.Адрес) Тогда + ЗаписьXML.ЗаписатьАтрибут("MoneyTransferOperatorAddress", XMLСтрока(ДанныеАгента.ОператорПеревода.Адрес)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеАгента.ОператорПеревода.ИНН) Тогда + ЗаписьXML.ЗаписатьАтрибут("MoneyTransferOperatorVATIN" , XMLСтрока(ДанныеАгента.ОператорПеревода.ИНН)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + +КонецПроцедуры + +// Записывает данные поставщика в XML файл +// +// Параметры: +// ЗаписьXML - ЗаписьXML +// ДанныеПоставщика - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеПоставщика +// РевизияИнтерфейса - Число +// +Процедура ЗаписатьДанныеПоставщика(ЗаписьXML, ДанныеПоставщика, РевизияИнтерфейса = 0) + + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + ЗаписьXML.ЗаписатьНачалоЭлемента("VendorData"); + Если Не ПустаяСтрока(ДанныеПоставщика.Телефон) Тогда // Телефон поставщика + Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеПоставщика.Телефон); + ЗаписьXML.ЗаписатьАтрибут("VendorPhone", Телефон); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеПоставщика.Наименование) Тогда // Наименование поставщика + ЗаписьXML.ЗаписатьАтрибут("VendorName", XMLСтрока(ДанныеПоставщика.Наименование)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеПоставщика.ИНН) Тогда // ИНН поставщика + ЗаписьXML.ЗаписатьАтрибут("VendorINN", XMLСтрока(ДанныеПоставщика.ИНН)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + Иначе + ЗаписьXML.ЗаписатьНачалоЭлемента("PurveyorData"); + Если Не ПустаяСтрока(ДанныеПоставщика.Телефон) Тогда + Телефон = МенеджерОборудованияКлиентСервер.АбонентскийНомерФорматФФД(ДанныеПоставщика.Телефон); + ЗаписьXML.ЗаписатьАтрибут("PurveyorPhone", Телефон); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеПоставщика.Наименование) Тогда + ЗаписьXML.ЗаписатьАтрибут("PurveyorName", XMLСтрока(ДанныеПоставщика.Наименование)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеПоставщика.ИНН) Тогда + ЗаписьXML.ЗаписатьАтрибут("PurveyorVATIN", XMLСтрока(ДанныеПоставщика.ИНН)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаписатьДополнительныйРеквизитПользователя(ЗаписьXML, ДополнительныйРеквизитПользователя); + + Если ПустаяСтрока(ДополнительныйРеквизитПользователя.Наименование) + И ПустаяСтрока(ДополнительныйРеквизитПользователя.Значение) Тогда + Возврат; + КонецЕсли; + + ЗаписьXML.ЗаписатьНачалоЭлемента("UserAttribute"); + Если Не ПустаяСтрока(ДополнительныйРеквизитПользователя.Наименование) Тогда // Наименование дополнительного реквизита пользователя. + ЗаписьXML.ЗаписатьАтрибут("Name" , XMLСтрока(ДополнительныйРеквизитПользователя.Наименование)); + КонецЕсли; + Если Не ПустаяСтрока(ДополнительныйРеквизитПользователя.Значение) Тогда // Значение дополнительного реквизита пользователя. + ЗаписьXML.ЗаписатьАтрибут("Value", XMLСтрока(ДополнительныйРеквизитПользователя.Значение)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +Процедура ЗаписатьОперационныйРеквизит(ЗаписьXML, ОперационныйРеквизит) + + ЗаписьXML.ЗаписатьНачалоЭлемента("OperationalAttribute"); + + Если Не ПустаяСтрока(ОперационныйРеквизит.ДатаВремяОперации) Тогда + ЗаписьXML.ЗаписатьАтрибут("DateTime", XMLСтрока(ОперационныйРеквизит.ДатаВремяОперации)); + КонецЕсли; + Если Не ПустаяСтрока(ОперационныйРеквизит.ИдентификаторОперации) Тогда + ЗаписьXML.ЗаписатьАтрибут("OperationID", XMLСтрока(ОперационныйРеквизит.ИдентификаторОперации)); + КонецЕсли; + Если Не ПустаяСтрока(ОперационныйРеквизит.ДанныеОперации) Тогда + ЗаписьXML.ЗаписатьАтрибут("OperationData", XMLСтрока(ОперационныйРеквизит.ДанныеОперации)); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +Процедура ЗаписатьОтраслевойРеквизит(ЗаписьXML, ОтраслевойРеквизит) + + ЗаписьXML.ЗаписатьНачалоЭлемента("IndustryAttribute"); + + Если Не ПустаяСтрока(ОтраслевойРеквизит.ИдентификаторФОИВ) Тогда + ЗаписьXML.ЗаписатьАтрибут("IdentifierFOIV", XMLСтрока(ОтраслевойРеквизит.ИдентификаторФОИВ)); + КонецЕсли; + Если Не ПустаяСтрока(ОтраслевойРеквизит.ДатаДокументаОснования) Тогда + // АПК: 1367-выкл, АПК: 335-выкл особенность локального законодательства + ДатаДокументаОснования = Формат(ОтраслевойРеквизит.ДатаДокументаОснования, "ДФ=""дд.ММ.гггг"""); + // АПК: 1367-вкл, АПК: 335-вкл + ЗаписьXML.ЗаписатьАтрибут("DocumentDate", ДатаДокументаОснования); + КонецЕсли; + Если Не ПустаяСтрока(ОтраслевойРеквизит.НомерДокументаОснования) Тогда + ЗаписьXML.ЗаписатьАтрибут("DocumentNumber", XMLСтрока(ОтраслевойРеквизит.НомерДокументаОснования)); + КонецЕсли; + Если Не ПустаяСтрока(ОтраслевойРеквизит.ЗначениеРеквизита) Тогда + ЗаписьXML.ЗаписатьАтрибут("AttributeValue", XMLСтрока(ОтраслевойРеквизит.ЗначениеРеквизита)); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +Процедура ЗаписатьСведенияОПокупателе(ЗаписьXML, ОбщиеПараметры, ПерсональныеДанные = Неопределено, ТипПерсональныхДанных = Неопределено); + + СведенияОПокупателе = ОбщиеПараметры.СведенияОПокупателе; + + Покупатель = СведенияОПокупателе.Покупатель; + Если ПустаяСтрока(Покупатель) Тогда + Покупатель = ОбщиеПараметры.Получатель; + КонецЕсли; + + Если ПерсональныеДанные <> Неопределено И ТипПерсональныхДанных <> Неопределено И ТипПерсональныхДанных = Перечисления.ТипыПерсональныхДанныхККТ.ИНН Тогда + ПокупательИНН = ПерсональныеДанные.ИНН + Иначе + ПокупательИНН = СведенияОПокупателе.ПокупательИНН; + КонецЕсли; + + Если ПустаяСтрока(ПокупательИНН) Тогда + ПокупательИНН = ОбщиеПараметры.ПолучательИНН; + КонецЕсли; + + ЗаписьXML.ЗаписатьНачалоЭлемента("CustomerDetail"); + + Если Не ПустаяСтрока(Покупатель) Тогда + ЗаписьXML.ЗаписатьАтрибут("Info", XMLСтрока(Покупатель)); + КонецЕсли; + Если Не ПустаяСтрока(ПокупательИНН) Тогда + ЗаписьXML.ЗаписатьАтрибут("INN", XMLСтрока(ПокупательИНН)); + КонецЕсли; + Если Не ПустаяСтрока(СведенияОПокупателе.ПокупательАдрес) Тогда + ЗаписьXML.ЗаписатьАтрибут("Address", XMLСтрока(СведенияОПокупателе.ПокупательАдрес)); + КонецЕсли; + + Если ПерсональныеДанные <> Неопределено И ТипПерсональныхДанных <> Неопределено И ТипПерсональныхДанных = Перечисления.ТипыПерсональныхДанныхККТ.ПаспортныеДанные Тогда + + Если Не ПустаяСтрока(ПерсональныеДанные.Гражданство) Тогда + ЗаписьXML.ЗаписатьАтрибут("Citizenship", XMLСтрока(ПерсональныеДанные.Гражданство)); + КонецЕсли; + + Если Не ПустаяСтрока(ПерсональныеДанные.ВидДокумента) Тогда + ВидДокумента = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодВидДокументаУдостоверяющегоЛичность(ПерсональныеДанные.ВидДокумента); + ЗаписьXML.ЗаписатьАтрибут("DocumentTypeCode", XMLСтрока(ВидДокумента)); + КонецЕсли; + + Если Не ПустаяСтрока(ПерсональныеДанные.ДанныеДокумента) Тогда + ЗаписьXML.ЗаписатьАтрибут("DocumentData", XMLСтрока(ПерсональныеДанные.ДанныеДокумента)); + КонецЕсли; + + Если Не ПустаяСтрока(ПерсональныеДанные.ДатаРождения) Тогда + // АПК: 1367-выкл, АПК: 335-выкл особенность локального законодательства + ДатаРождения = Формат(ПерсональныеДанные.ДатаРождения, "ДФ=""дд.ММ.гггг"""); + // АПК: 1367-вкл, АПК: 335-вкл + ЗаписьXML.ЗаписатьАтрибут("DateOfBirth", ДатаРождения); + КонецЕсли; + + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +// Возвращает представление ставки НДС для драйвера +// Параметры: +// СтавкаНДС - Число - Ставка НДС +// РевизияИнтерфейса - Число - Ревизия интерфейса +// +Функция ПредставлениеСтавкиНДС(СтавкаНДС, РевизияИнтерфейса) + + Если НЕ ПустаяСтрока(СтавкаНДС) Тогда + // В случае не готовности ККТ для поддержки новых ставок можно продолжать пробивать чеки без НДС + Если РевизияИнтерфейса < 4004 Тогда + Если СтавкаНДС = 7 Или СтавкаНДС = 5 Или СтавкаНДС = 105 Или СтавкаНДС = 107 Тогда + ЗначениеСтавкаНДС = "none"; + Возврат ЗначениеСтавкаНДС; + КонецЕсли; + КонецЕсли; + // Ревизия интерфейса 4004 и вышы + Если СтавкаНДС > 100 Тогда + ЗначениеСтавкаНДС = СтрШаблон("%1/%2", СтавкаНДС - 100, СтавкаНДС); + Иначе + ЗначениеСтавкаНДС = СтавкаНДС; + КонецЕсли; + Иначе + ЗначениеСтавкаНДС = "none"; + КонецЕсли; + + Возврат ЗначениеСтавкаНДС; + +КонецФункции + +// Возвращает ставка НДС по представлению +// Параметры: +// ПредставлениеСтавкаНДС - Строка - Ставка НДС +// +Функция СтавкаНДСПоПредставлению(ПредставлениеСтавкаНДС) + + СтавкаНДС = Неопределено; + + Если НЕ (ПустаяСтрока(ПредставлениеСтавкаНДС) Или ПредставлениеСтавкаНДС = "none") Тогда + СтавкиНДС = СтрРазделить(ПредставлениеСтавкаНДС, "/"); + Если СтавкиНДС.Количество() = 1 Тогда + СтавкаНДС = Число(СтавкиНДС[0]) + КонецЕсли; + Если СтавкиНДС.Количество() = 2 Тогда + СтавкаНДС = Число(СтавкиНДС[1]); + КонецЕсли; + КонецЕсли; + + Возврат СтавкаНДС; + +КонецФункции + +// -- Локализация + +Функция ЗначениеXMLАтрибута(ЧтениеXML, ИмяАтрибута, ДопИмяАтрибута = Неопределено, ЗначениеПоУмолчанию = Неопределено) + + Результат = ЗначениеПоУмолчанию; + Если ЧтениеXML.ЗначениеАтрибута(ИмяАтрибута) <> Неопределено Тогда + Результат = ЧтениеXML.ЗначениеАтрибута(ИмяАтрибута); + ИначеЕсли НЕ ПустаяСтрока(ДопИмяАтрибута) И ЧтениеXML.ЗначениеАтрибута(ДопИмяАтрибута) <> Неопределено Тогда + Результат = ЧтениеXML.ЗначениеАтрибута(ДопИмяАтрибута); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область КассоваяСмена + +// Возвращает Истина, если используется подсистема "КассовыеСмены". +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// У хотя бы одной "функциональной" подсистемы включен флажок "Включать в командный интерфейс". +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяКассовыеСмены() + + Возврат ОбщегоНазначенияБПО.ИспользуетсяКассоваяСмена(); + +КонецФункции + +// Для внутреннего использования +// +Функция ПолучитьСтатусПоследнейСмены(ИдентификаторУстройства) + + Если ИспользуетсяКассовыеСмены() Тогда + МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены"); + Возврат МодульКассовыеСмены.СтатусПоследнейСмены(ИдентификаторУстройства); + Иначе + РезультатОперации = Новый Структура(); + РезультатОперации.Вставить("Активна", Истина); + РезультатОперации.Вставить("Открыта", Истина); + РезультатОперации.Вставить("ТекущийНомерЧека", 1); + РезультатОперации.Вставить("КассоваяСмена", Неопределено); + Возврат РезультатОперации; + КонецЕсли; + +КонецФункции + +// Для внутреннего использования +// +Функция НоваяКассоваяСмена(ФискальноеУстройство, ДанныеОперации) + + Если ИспользуетсяКассовыеСмены() Тогда + МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены"); + Возврат МодульКассовыеСмены.НоваяКассоваяСмена(ФискальноеУстройство, ДанныеОперации); + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +// Для внутреннего использования +// +Процедура ЗакрытьКассовуюСмену(ДанныеОперации) + + Если ИспользуетсяКассовыеСмены() Тогда + МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены"); + МодульКассовыеСмены.ЗакрытьКассовуюСмену(ДанныеОперации); + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования +// +Функция ОписаниеПоследнейКассовойСмены(ФискальноеУстройство) + + Если ИспользуетсяКассовыеСмены() Тогда + МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены"); + Возврат МодульКассовыеСмены.ОписаниеПоследнейКассовойСмены(ФискальноеУстройство); + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваВызовСервера.xml b/CommonModules/ОборудованиеЧекопечатающиеУстройстваВызовСервера.xml new file mode 100644 index 0000000..9fbc1ef --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеЧекопечатающиеУстройстваВызовСервера + + + ru + Оборудование чекопечатающие устройства вызов сервера + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваВызовСервера/Ext/Module.bsl b/CommonModules/ОборудованиеЧекопечатающиеУстройстваВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..74c10be --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваВызовСервера/Ext/Module.bsl @@ -0,0 +1,525 @@ + +#Область ПрограммныйИнтерфейс + +#Область ПараметрыРегистрации + +// Функция возвращает поддерживает ли фискальное устройство. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства +// +// Возвращаемое значение: +// Булево - Фискальное устройство поддерживает проверку кодов маркировки +Функция ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ИдентификаторУстройства) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ИдентификаторУстройства); + +КонецФункции + +// Функция возвращает для фискального устройства версию ФФД. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства. +// +// Возвращаемое значение: +// Неопределено - Фискальное устройство поддерживает версию ФФД +Функция ФискальноеУстройствоПоддерживаетВерсиюФФД(ИдентификаторУстройства) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ФискальноеУстройствоПоддерживаетВерсиюФФД(ИдентификаторУстройства); + +КонецФункции + +#КонецОбласти + +#Область ФормированиеДанныхККТ + +// Получить таблицу параметров смены из ККТ. +// +// Параметры: +// ДанныеXML - Строка - строка XML +// РевизияИнтерфейса - Число - ревизия интерфейса +// НомерСменыККТ - Число - номер смены +// НомерЧекаККТ - Число - номер чека +// +// Возвращаемое значение: +// Структура. +// +Функция ПолучитьПараметрыСменыИзXMLПакета(ДанныеXML, РевизияИнтерфейса = 0, НомерСменыККТ = 0, НомерЧекаККТ = 0) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПолучитьПараметрыСменыИзXMLПакета(ДанныеXML, РевизияИнтерфейса, НомерСменыККТ, НомерЧекаККТ); + +КонецФункции + +// Возвращает XML текст инфо-квитанции +// Параметры: +// Данные - Структура +// ШиринаСтроки - Число +// Ревизия - Строка +// +// Возвращаемое значение: +// Строка - Строка XML +// +Функция XMLПакетИнфоКвитанции(Данные, ШиринаСтроки, Ревизия) Экспорт + + Шаблон = ШаблоныФискальныхДокументов.ШаблонИнфоКвитанция(ШиринаСтроки, Данные); + НефискальныйДокумент = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон); + Возврат ОборудованиеЧекопечатающиеУстройства.ПолучитьXMLПакетДляТекста(НефискальныйДокумент, Ревизия); + +КонецФункции + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +#Область ФискальныеОперации + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ЗаписатьФискальнуюОперацию. +// Записать операцию в журнал фискальных операций. +// +// Параметры: +// ПараметрыФискализации - Структура - +Процедура ЗаписатьФискальнуюОперацию(ПараметрыФискализации) Экспорт + + ОборудованиеЧекопечатающиеУстройства.ЗаписатьФискальнуюОперацию(ПараметрыФискализации); + +КонецПроцедуры + +// АПК: 142-выкл обратная совместимость + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ДанныеФискальнойОперации. +// Получить данные журнала фискальных операций. +// +// Параметры: +// ДокументСсылка - ДокументСсылка - Документ-основание. +// ИдентификаторЗаписи - РегистрСведенийЗапись.ФискальныеОперации - запись фискальной операции. +// ТипыДокументов - ПеречислениеСсылка.ТипыФискальныхДокументовККТ - типы документов. +// ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - тип расчета. +// ФискальныйПризнак - Строка - Фискальный признак документа +// +// Возвращаемое значение: +// Структура - Структура по свойствами: +// * НомерСменыККМ - Число - Номер чека ККМ. +// * Сумма - Число - Сумма. +// * ДокументОснование - ДокументСсылка - Документ-основание. +// * ДанныеXML - ХранилищеЗначения - Данные чека, переданные в ККТ (XML). +// +Функция ДанныеФискальнойОперации(ДокументСсылка, ИдентификаторЗаписи = Неопределено, ТипыДокументов = Неопределено, ТипРасчета = Неопределено, ФискальныйПризнак = Неопределено) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ДанныеФискальнойОперации(ДокументСсылка, ИдентификаторЗаписи, ТипыДокументов, ТипРасчета, ФискальныйПризнак); + +КонецФункции + +// АПК: 142-вкл + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ФискальнаяОперацииПоИдентификатору. +// Получить данные журнала фискальных операций. +// +// Параметры: +// ИдентификаторЗаписи - РегистрСведенийЗапись.ФискальныеОперации - Идентификатор записи. +// +// Возвращаемое значение: +// РегистрСведенийЗапись.ФискальныеОперации. +Функция ФискальнаяОперацииПоИдентификатору(ИдентификаторЗаписи) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ФискальнаяОперацииПоИдентификатору(ИдентификаторЗаписи); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.СписокФискальныхОпераций. +// Получить список журнала фискальных операций. +// +// Параметры: +// ДокументСсылка - ДокументСсылка - Документ-основание. +// ТипыДокументов - ПеречислениеСсылка.ТипыФискальныхДокументовККТ - типы фискальных документов. +// ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - типы расчета. +// +// Возвращаемое значение: +// См. ОборудованиеЧекопечатающиеУстройства.СписокФискальныхОпераций +// +Функция СписокФискальныхОпераций(ДокументСсылка, ТипыДокументов = Неопределено, ТипРасчета = Неопределено) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.СписокФискальныхОпераций(ДокументСсылка, ТипыДокументов, ТипРасчета); + +КонецФункции + +#КонецОбласти + +#Область ОчередьЧековККТ + +// Устарела: следует использовать РаспределеннаяФискализация.ДобавитьЧекВОчередьЧековККТ. +// Добавить чек в очередь чеков ККТ. +// +// Параметры: +// ПараметрыЧекаККТ - Структура - Параметры чека ККТ: +// * ПозицииЧека - Массив из См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека - . +// ПараметрыПакетнойОперации - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПакетнойОперацииВОчередиЧеков +// Возвращаемое значение: +// РегистрСведенийЗапись +Функция ДобавитьЧекВОчередьЧековККТ(ПараметрыЧекаККТ, ПараметрыПакетнойОперации = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ДобавитьЧекВОчередьЧековККТ(ПараметрыЧекаККТ, ПараметрыПакетнойОперации); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать РаспределеннаяФискализация.ДанныеЧекаВОчереди. +// Данные чека из очереди. +// +// Параметры: +// ИдентификаторЗаписи - РегистрСведенийЗапись.ФискальныеОперации - Идентификатор записи. +// +// Возвращаемое значение: +// Структура. +Функция ДанныеЧекаВОчереди(ИдентификаторЗаписи) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ДанныеЧекаВОчереди(ИдентификаторЗаписи); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать РаспределеннаяФискализация.ЧекиВОчередиНаФискализацию. +// Чеки в очереди на фискализацию. +// +// Параметры: +// КассаККМ - ОпределяемыйТип.КассаБПО - Касса по которой провести фискализацию, если не указано тогда по всем. +// +// Возвращаемое значение: +// Массив. +Функция ЧекиВОчередиНаФискализацию(КассаККМ = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ЧекиВОчередиНаФискализацию(КассаККМ); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать РаспределеннаяФискализация.УдалитьЧекИзОчереди. +// Удалить чек из очереди. +// +// Параметры: +// ДокументСсылка - ДокументСсылка - Документ-основание. +// +Процедура УдалитьЧекИзОчереди(ДокументСсылка) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + МодульРаспределеннаяФискализация.УдалитьЧекИзОчереди(ДокументСсылка); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализация.ОчиститьОчередьЧеков. +// Очистить очередь чеков. +// +Процедура ОчиститьОчередьЧеков() Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + МодульРаспределеннаяФискализация.ОчиститьОчередьЧеков(); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализация.ЗаписатьСтатусЧекаВОчереди. +// Записать статус чека в очереди. +// +// Параметры: +// ПараметрыФискализации - Структура: +// * ИдентификаторФискальнойЗаписи - Строка +// * ДокументОснование - ДокументСсылка +// * РезультатВыполненияПакетнойОперации - Структура +// СтатусЧека - ПеречислениеСсылка.СтатусЧекаККТВОчереди +// ОборудованиеККТ - СправочникСсылка.ПодключаемоеОборудование - +// ТекстОшибки - Строка +Процедура ЗаписатьСтатусЧекаВОчереди(ПараметрыФискализации, СтатусЧека, ОборудованиеККТ = Неопределено, ТекстОшибки = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + МодульРаспределеннаяФискализация.ЗаписатьСтатусЧекаВОчереди(ПараметрыФискализации, СтатусЧека, ОборудованиеККТ, ТекстОшибки); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализация.ПолучитьСтатусЧекаВОчереди. +// Данные чека из очереди. +// +// Параметры: +// ИдентификаторЗаписи - РегистрСведенийЗапись.ФискальныеОперации - Идентификатор записи. +// +// Возвращаемое значение: +// Структура. +Функция ПолучитьСтатусЧекаВОчереди(ИдентификаторЗаписи) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ПолучитьСтатусЧекаВОчереди(ИдентификаторЗаписи); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать РаспределеннаяФискализация.ПолучитьФискальнуюОперацию. +// Данные чека из очереди по фискальный признаку и номеру чеку ККМ. +// +// Параметры: +// ФискальныйПризнак - Строка - Фискальный признак +// НомерЧекаККМ - Строка - Номер чека ККМ +// +// Возвращаемое значение: +// Неопределено, Структура - Получить фискальную операцию: +// * ДокументОснование - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО. +// * ИдентификаторЗаписи - УникальныйИдентификатор. +// * ФискальныйПризнак - Строка - +// * НомерСменыККМ - Число. +// * НомерЧекаККМ - Число. +Функция ПолучитьФискальнуюОперацию(ФискальныйПризнак, НомерЧекаККМ = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ПолучитьФискальнуюОперацию(ФискальныйПризнак, НомерЧекаККМ); + КонецЕсли; + +КонецФункции + +#КонецОбласти + +// Устарела: следует использовать ФорматноЛогическийКонтроль.ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов. +// Выполняет проверку обязательности заполняет тэгов. +// +// Параметры: +// Параметры - Структура +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование +// ОписаниеОшибки - Строка +// +// Возвращаемое значение: +// Булево. +Функция ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов(Параметры, ИдентификаторУстройства, ОписаниеОшибки) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяФорматноЛогическийКонтроль() Тогда + МодульФорматноЛогическийКонтроль = ОбщегоНазначенияБПО.ОбщийМодуль("ФорматноЛогическийКонтроль"); + Возврат МодульФорматноЛогическийКонтроль.ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов(Параметры, ИдентификаторУстройства, ОписаниеОшибки); + Иначе + Возврат Истина; + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать ФорматноЛогическийКонтроль.ПривестиДанныеКТребуемомуФормату. +// Процедура приводит к формату согласованному с ФНС. +// +// Параметры: +// ОсновныеПараметры - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// Отказ - Булево +// ОписаниеОшибки - Строка +// ИсправленыОсновныеПараметры - Булево +Процедура ПривестиДанныеКТребуемомуФормату(ОсновныеПараметры, Отказ, ОписаниеОшибки, ИсправленыОсновныеПараметры) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяФорматноЛогическийКонтроль() Тогда + МодульФорматноЛогическийКонтроль = ОбщегоНазначенияБПО.ОбщийМодуль("ФорматноЛогическийКонтроль"); + МодульФорматноЛогическийКонтроль.ПривестиДанныеКТребуемомуФормату(ОсновныеПараметры, ИсправленыОсновныеПараметры); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ШаблонЧека. +// Функция формирует шаблон чека. +// +// Параметры: +// ОбщиеПараметры - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ТипОборудования - Строка - типы оборудования строкой. +// ДополнительныйТекст - Строка - дополнительный текст шаблона чека. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование +// +// Возвращаемое значение: +// Структура. +Функция ШаблонЧека(ОбщиеПараметры, ТипОборудования, ДополнительныйТекст = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ШаблонЧека(ОбщиеПараметры, ТипОборудования, ДополнительныйТекст, ИдентификаторУстройства); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.СформироватьФискальныйДокумент. +// Функция формирует табличный документ по данным фискального чека. +// +// Параметры: +// ТипДокумента - Число +// ОбщиеПараметры - Структура - параметры фискального документа загруженная из данных XML +// см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// РеквизитыЧека - Структура - параметры фискального документа из регистра сведений фискальные документы +// см. ДанныеФискальнойОперации() +// ФорматФФД - Строка - формат фискальных данных, влияет на вывод таблицы оплаты при "1.0" +// используются только виды оплат "НАЛИЧНЫМИ", "ЭЛЕКТРОННО" +// +// Возвращаемое значение: +// ТабличныйДокумент - табличный документ со сформированным фискальным документом, может быть сохранен в любой формат. +// +Функция СформироватьФискальныйДокумент(ТипДокумента, ОбщиеПараметры, РеквизитыЧека, ФорматФФД = "1.1") Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.СформироватьФискальныйДокумент(ТипДокумента, ОбщиеПараметры, РеквизитыЧека, ФорматФФД); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.СформироватьФискальныйДокумент. +// Функция формирует табличный документ по данным фискального чека. +// +// Параметры: +// ТипДокумента - Число +// ОбщиеПараметры - Структура - параметры фискального документа загруженная из данных XML +// см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// РеквизитыЧека - Структура - параметры фискального документа из регистра сведений фискальные документы +// см. ДанныеФискальнойОперации(). +// ФорматФФД - Строка - формат фискальных данных, влияет на вывод таблицы оплаты при "1.0" +// используются только виды оплат "НАЛИЧНЫМИ", "ЭЛЕКТРОННО". +// +// Возвращаемое значение: +// Строка - Текст. +// +Функция СформироватьФискальныйДокументТекст(ТипДокумента, ОбщиеПараметры, РеквизитыЧека = Неопределено, ФорматФФД = "1.1", ШиринаЧека = 36) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.СформироватьФискальныйДокументТекст(ТипДокумента, ОбщиеПараметры, РеквизитыЧека, ФорматФФД, ШиринаЧека); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПередОткрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПередОткрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации); + +КонецФункции + +Функция ПередЗакрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПередЗакрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации); + +КонецФункции + +Функция ПослеОткрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПослеОткрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения); + +КонецФункции + +Функция ПослеЗакрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПослеЗакрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения); + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Коды маркировки + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодПланируемыйСтатусМаркируемогоТовара. +// Получить код планируемого статус маркируемого товара +// +// Параметры: +// ПланируемыйСтатусМаркируемогоТовара - ПеречислениеСсылка - Планируемый статус маркируемого товара. +// +// Возвращаемое значение: +// Число - Код планируемого статус маркируемого товара по ОФД +// +Функция КодПланируемыйСтатусМаркируемогоТовара(ПланируемыйСтатусМаркируемогоТовара) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.КодПланируемыйСтатусМаркируемогоТовара(ПланируемыйСтатусМаркируемогоТовара); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодОтветаОИСМОСтатусеТовара. +// Получить код ответ ОИСМ о статусе товара +// +// Параметры: +// ОтветОИСМОСтатусеТовара - ПеречислениеСсылка - Ответ от ИСМО. +// +// Возвращаемое значение: +// Число - Ответ ОИСМ о статусе товара по ОФД +// +Функция КодОтветаОИСМОСтатусеТовара(ОтветОИСМОСтатусеТовара) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.КодОтветаОИСМОСтатусеТовара(ОтветОИСМОСтатусеТовара); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.ОтветОИСМОСтатусеТовараПоКоду. +// Получить ответ ОИСМ о статусе товара по коду. +// +// Параметры: +// ОтветОИСМОСтатусеТовара - Число - Ответ от ИСМО. +// +// Возвращаемое значение: +// ПеречислениеСсылка - Ответ ОИСМ. +// +Функция ОтветОИСМОСтатусеТовараПоКоду(ОтветОИСМОСтатусеТовара) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.ОтветОИСМОСтатусеТовараПоКоду(ОтветОИСМОСтатусеТовара); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодТипаМаркировкиККТ. +// Получить код типа маркировки ККТ по коду. +// +// Параметры: +// ТипМаркировкиККТ - ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТ. +// +// Возвращаемое значение: +// Строка, Произвольный - Код типа маркировки ККТ +Функция КодТипаМаркировкиККТ(ТипМаркировкиККТ) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.КодТипаМаркировкиККТ(ТипМаркировкиККТ); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.ТипМаркировкиККТПоКоду. +// Получить код типа маркировки ККТ. +// +// Параметры: +// КодТипМаркировкиККТ - Число - Код тип маркировки ККТ +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТПо коду +Функция ТипМаркировкиККТПоКоду(КодТипМаркировкиККТ) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.ТипМаркировкиККТПоКоду(КодТипМаркировкиККТ); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.СтатусРезультатаЗапросаКМПоКоду. +// Получить статус результата запроса КМ по коду. +// +// Параметры: +// КодСтатуса - Число - Код статуса. +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка - Статус результата запроса КМПо коду +Функция СтатусРезультатаЗапросаКМПоКоду(КодСтатуса) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.СтатусРезультатаЗапросаКМПоКоду(КодСтатуса); + КонецЕсли; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиент.xml b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиент.xml new file mode 100644 index 0000000..5f06875 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиент.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеЧекопечатающиеУстройстваКлиент + + + ru + Оборудование чекопечатающие устройства клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиент/Ext/Module.bsl b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиент/Ext/Module.bsl new file mode 100644 index 0000000..724bf05 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиент/Ext/Module.bsl @@ -0,0 +1,2555 @@ + +#Область ПрограммныйИнтерфейс + +// Производить печать чека на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьФискализациюЧекаНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт; + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("CheckFiscalization", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры); + // Будет сформировано сообщения в службу технической поддержки при ошибке. + ПараметрыВыполнениеКоманды.СообщенияВСлужбуТехническойПоддержки = Истина; + Если ПараметрыОперации.Свойство("АвтономнаяККТ") И ПараметрыОперации.АвтономнаяККТ Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяАвтономнаяККТ() Тогда + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, + ИдентификаторКлиента, ПараметрыОперации, ПараметрыВыполнениеКоманды, ДополнительныеПараметры); + КонецЕсли; + ИначеЕсли ПараметрыОперации.ОблачнаяККТ Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуютсяОблачныеККТ() Тогда + МодульОборудованиеОблачныеККТКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеОблачныеККТКлиент"); + МодульОборудованиеОблачныеККТКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, + ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Производить печать чека на фискальном устройстве пакетом. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьФискализациюЧекаНаФискальномУстройствеПакетом(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("CheckFiscalizationPacket", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Производить инкассацию на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьИнкассациюНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("Encash", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + + Если ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ЭтоККТБезПодключения(ПараметрыОперации) Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяАвтономнаяККТ() Тогда + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, + ИдентификаторКлиента, ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Производить печать текста на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПечатьТекста(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Истина); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "PrintText"); + КонтекстОперации.Вставить("Результат", Истина); + + ВыполнитьВыборФискальногоУстройства(КонтекстОперации); + +КонецПроцедуры + +// Начать открытие смены на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОткрытиеСменыНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + Контекст = Новый Структура(); + Контекст.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + Контекст.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + Контекст.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + Контекст.Вставить("ПараметрыОперации" , ПараметрыОперации); + Контекст.Вставить("КассаККМ" , ПараметрыОперации.КассаККМ); + Оповещение = Новый ОписаниеОповещения("НачатьОткрытиеСменыНаФискальномУстройстве_Завершение", ЭтотОбъект, Контекст); + + ПараметрыОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("OpenShift", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + // Будет сформировано сообщения в службу технической поддержки при ошибке. + ПараметрыВыполнениеКоманды.СообщенияВСлужбуТехническойПоддержки = Истина; + + Если ПараметрыОперации.АвтономнаяККТ Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяАвтономнаяККТ() Тогда + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент.НачатьВыполнениеКоманды(Оповещение, + ИдентификаторКлиента, ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + ИначеЕсли ПараметрыОперации.ОблачнаяККТ Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуютсяОблачныеККТ() Тогда + МодульОборудованиеОблачныеККТКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеОблачныеККТКлиент"); + МодульОборудованиеОблачныеККТКлиент.НачатьВыполнениеКоманды(Оповещение, + ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(Оповещение, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Завершение операции открытие смены на фискальном устройстве. +// +// Параметры: +// Результат - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании. +// Контекст - Структура +// +Процедура НачатьОткрытиеСменыНаФискальномУстройстве_Завершение(Результат, Контекст) Экспорт + + Если Результат.Свойство("ПараметрыККТ") Тогда + ПараметрыККТ = Результат.ПараметрыККТ; + Если ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ЭтоККТБезПодключения(Контекст.ПараметрыОперации) Тогда + ПараметрыККТ.Вставить("ТипОборудования", ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.ККТ")); + ПараметрыККТ.Вставить("ПризнакАвтономногоРежима", Истина); + КонецЕсли; + МенеджерОборудованияКлиентПереопределяемый.ПриОткрытииСменыНаККТ(Контекст.ИдентификаторУстройства, Результат.ПараметрыККТ); + КонецЕсли; + + ПоказатьПредупреждениеДрайверСнятыйСПоддержки(Результат); + + ВыполнитьОбработкуОповещения(Контекст.ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Начать закрытие смены на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьЗакрытиеСменыНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("CloseShift", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + // Будет сформировано сообщения в службу технической поддержки при ошибке. + ПараметрыВыполнениеКоманды.СообщенияВСлужбуТехническойПоддержки = Истина; + + Если ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ЭтоККТБезПодключения(ПараметрыОперации) Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяАвтономнаяККТ() Тогда + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, + ИдентификаторКлиента, ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + ИначеЕсли ПараметрыОперации.ОблачнаяККТ Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуютсяОблачныеККТ() Тогда + МодульОборудованиеОблачныеККТКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеОблачныеККТКлиент"); + МодульОборудованиеОблачныеККТКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, + ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + Иначе + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + Оповещение = Новый ОписаниеОповещения("НачатьЗакрытиеСменыНаФискальномУстройстве_Завершение", ЭтотОбъект, КонтекстОперации); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(Оповещение, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +Процедура НачатьЗакрытиеСменыНаФискальномУстройстве_Завершение(Результат, КонтекстОперации) Экспорт + + ПоказатьПредупреждениеДрайверСнятыйСПоддержки(Результат); + + ВыполнитьОбработкуОповещения(КонтекстОперации.ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Начать открытие денежного ящика фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОткрытиеДенежногоЯщика(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт; + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "OpenCashDrawer"); + КонтекстОперации.Вставить("Результат", Истина); + + ВыполнитьВыборФискальногоУстройства(КонтекстОперации); + +КонецПроцедуры + +// Получение ширины строки в символах для фискального устройства. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолучениеШириныСтрокиПечатающегоУстройства(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "GetLineLength"); + КонтекстОперации.Вставить("Результат", Истина); + + ВыполнитьВыборФискальногоУстройства(КонтекстОперации); + +КонецПроцедуры + +// Производить аннулирование чека на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьАннулированиеЧекаНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("AnnulCheck", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Ложь, Ложь); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Начать формирование отчета о текущем состоянии расчетов на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьФормированиеОтчетаОТекущемСостоянииРасчетов(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Истина); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "ReportCurrentStatusOfSettlements"); + КонтекстОперации.Вставить("Результат", Истина); + + ВыполнитьВыборФискальногоУстройства(КонтекстОперации); + +КонецПроцедуры + +// Начать формирование отчета отчет без гашения на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьФормированиеОтчетаБезГашения(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Истина); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "PrintXReport"); + КонтекстОперации.Вставить("Результат", Истина); + + ВыполнитьВыборФискальногоУстройства(КонтекстОперации); + +КонецПроцедуры + +// Производить получение параметров фискального устройства. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолучениеПараметровФискальногоУстройства(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + Если ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ЭтоККТБезПодключения(ПараметрыОперации) Тогда + + ПараметрыККТ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыРегистрацииККТ(); + ПараметрыККТ.Вставить("ТипОборудования", ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.ККТ")); + ПараметрыККТ.Вставить("ПризнакАвтономногоРежима", Истина); + + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина); + РезультатОперации.Вставить("ПараметрыККТ" , ПараметрыККТ); + + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + + Иначе + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("GetDataKKT", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Ложь, Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Получение текущего состояния фискального устройства. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолучениеТекущегоСостоянияФискальногоУстройства(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("GetCurrentStatus", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Начать операцию ФН для фискального устройства. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОперациюФНДляФискальногоУстройства(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("OperationFN", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Начать формирование чека коррекции на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьФормированиеЧекаКоррекцииНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("PrintReceiptCorrection", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + + Если ПараметрыОперации.ОблачнаяККТ Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуютсяОблачныеККТ() Тогда + МодульОборудованиеОблачныеККТКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеОблачныеККТКлиент"); + МодульОборудованиеОблачныеККТКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, + ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Осуществляет печать копии чека. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПечатьКопииЧека(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Истина); + КонтекстОперации.Вставить("ОбработатьДанные" , Истина); + КонтекстОперации.Вставить("Команда" , "PrintCheckCopy"); + КонтекстОперации.Вставить("Результат", Истина); + + ВыполнитьВыборФискальногоУстройства(КонтекстОперации); + +КонецПроцедуры + +// Осуществляет печать QR кода на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПечатьQRКодаНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Истина); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "PrintQRCode"); + КонтекстОперации.Вставить("Результат", Истина); + + ВыполнитьВыборФискальногоУстройства(КонтекстОперации); + +КонецПроцедуры + +// Осуществляет открытие сессии регистрации КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОткрытиеСессииРегистрацииКМ(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("OpenSessionRegistrationKM", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Ложь, Ложь); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Осуществляет закрытии сессии регистрации КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьЗакрытииСессииРегистрацииКМ(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("CloseSessionRegistrationKM", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Ложь, Ложь); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Начать подтверждение КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПодтверждениеКМ(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("ConfirmKM", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Ложь, Ложь); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Осуществляет запрос КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПроверкиКМ. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПроверкуКМ(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = МенеджерОборудованияКлиентСервер.ДополнительныеПараметрыОперации(Истина); + Иначе + Если ДополнительныеПараметры.Свойство("ОставитьПодключенным") Тогда + ДополнительныеПараметры.ОставитьПодключенным = Истина; + КонецЕсли; + КонецЕсли; + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("CheckKM", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + ПараметрыВыполнениеКоманды.Вставить("ОбработатьДанныеПриОшибке", Истина); + ПараметрыОперации.Вставить("ИдентификаторКлиента", ИдентификаторКлиента); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Осуществляет повторный запрос КМ, который выполняет проверку без ожидания ответа от удаленного сервера и без подтверждения пользователя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПроверкиКМ. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПовторнуюПроверкуКМ(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыОперации.ОжидатьПолученияОтветаПроверкиКМ = Ложь; + ПараметрыОперации.Вставить("ИдентификаторКлиента", ИдентификаторКлиента); + Для Каждого ЗапросКМ Из ПараметрыОперации.ЗапросыКМ Цикл + ЗапросКМ.ВыполнятьВалидацию = Ложь; + ЗапросКМ.ЗапросРазрешенияПродажиКМ = Ложь; + ЗапросКМ.ИгнорироватьРезультатПроверкиКМ = Истина; + КонецЦикла; + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("CheckKM", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + ПараметрыВыполнениеКоманды.Вставить("ОбработатьДанныеПриОшибке", Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Функция возвращает поддерживает ли фискальное устройство. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства. +// +// Возвращаемое значение: +// Булево - Фискальное устройство поддерживает проверку кодов маркировки +Функция ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ИдентификаторУстройства) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ИдентификаторУстройства); + +КонецФункции + +// Функция возвращает для фискального устройства версию ФФД. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства. +// +// Возвращаемое значение: +// Неопределено - Фискальное устройство поддерживает версию ФФД +Функция ФискальноеУстройствоПоддерживаетВерсиюФФД(ИдентификаторУстройства) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.ФискальноеУстройствоПоддерживаетВерсиюФФД(ИдентификаторУстройства); + +КонецФункции + +#Область ПакетнаяОбработка + +#Область ФискализацияЧекаСОплатойКартой + +// Возвращает структуру для заполнения данными оплаты эквайринговым терминалом и фискализации +// +// Возвращаемое значение: +// Структура: +// * ПараметрыФискализацииЧека - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - См. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * ОповещениеВопросПользователю - ОписаниеОповещения - Описание оповещения пользователя, для самостоятельной выдачи +// сообщения, это оповещение будет вызвано в случае отрицательного ответа от эквайрингового +// терминала при оплате, в процедуру будут переданы результат выполнения пакета операций, +// а также структура содержащая контекст пакета, если требуется продолжить выполнение пакета, +// тогда нужно будет вызвать в модуле ОборудованиеЧекопечатающиеУстройстваКлиент процедуры +// "НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение" или +// "НачатьФискализациюЧекаСОплатойКартой_ПовторитьОплату". +// передав туда этот контекст. +// Процедура оповещения содержит следующие параметры: +// Результат - Структура: +// * РезультатОперации - См. РезультатФискализацииЧекаСОплатойКартой +// * КонтекстОперации - Структура - контекст пакета операции который нужно передать в процедуру +// "ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение" +// для продолжения выполнения пакета +// ДополнительныеПараметры - Любой - значение переданное при создании оповещения +// * СлипЧекВТелеФискального - Булево, Неопределено - Выводить слип-чек в теле фискального, Истина - слип-чек будет выведен +// в теле фискального, Ложь - короткий слип-чек не будет выводиться, Неопределено - короткий слип-чек +// будет выводиться если поддерживает драйвер оборудования. +// +// Пример: +// Определение процедуры оповещения пользователя +// Процедура ВопросПользователюЗавершение(Результат, ДополнительныеПараметры) +// РезультатОперации = Результат.РезультатОперации; +// КонтекстОперации = Результат.КонтекстОперации; +// ... +// // продолжить выполнение пакета операций +// ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение(Истина, КонтекстОперации); +// КонецПроцедуры +// +Функция ПараметрыФискализацияЧекаСОплатойКартой() Экспорт + + Результат = ПараметрыЭквайринговаяОперацияСФискализацией(); + Возврат Результат; + +КонецФункции + +// Выполняет оплату на эквайринговом терминале, а затем фискализацию чека с печатью слип-чека в теле фискального, +// если операция при фискализации закончилась неуспешно, тогда происходит аварийная отмена последней операции на +// эквайринговом терминале. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - Описание процедуры которая будет вызвана при завершении операции +// со следующими параметрами: +// * Результат - См. РезультатФискализацииЧекаСОплатойКартой +// ИдентификаторКлиента - ФормаКлиентскогоПриложения - идентификатор формы. +// ИдентификаторККТ - СправочникСсылка.ПодключаемоеОборудование - ККТ на котором будет печататься фискальный чек +// содержащий в себе слип-чек. +// ИдентификаторЭТ - СправочникСсылка.ПодключаемоеОборудование - Эквайринговый терминал для обработки операции. +// ПараметрыОперации - См. ПараметрыФискализацияЧекаСОплатойКартой +// ДополнительныеПараметры - Структура - Дополнительные параметры которые можно передать в операции +// оплаты и фискализации. +Процедура НачатьФискализациюЧекаСОплатойКартой(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторККТ, + ИдентификаторЭТ, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + // Подготовить контекст пакета операций + КонтекстОперации = КонтекстЭквайринговойОперацииСФискализацией(); + КонтекстОперации.ТипОперации = "ФискализацияЧекаСОплатой"; + + КонтекстОперации.ОповещениеЗавершения = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторККТ = ИдентификаторККТ; + КонтекстОперации.ИдентификаторЭТ = ИдентификаторЭТ; + ЗаполнитьЗначенияСвойств(КонтекстОперации, ПараметрыОперации); + + ПодготовитьКонтекстПакетнойОперации(КонтекстОперации, ДополнительныеПараметры); + + // Выбрать ЭТ если не указан конкретный + ОповещениеЗавершенияПодключения = Новый ОписаниеОповещения("НачатьЭкваринговуюОперациюСФискализацией_ЭквайринговаяОперация", + ЭтотОбъект, + КонтекстОперации); + ПакетнаяОбработка_ВыборУстройства(ОповещениеЗавершенияПодключения, КонтекстОперации); + +КонецПроцедуры + +// Запускает продолжение выполнения пакета, после обработки вопроса пользователя, или же успешной операции на +// эквайринговом терминале +// +// Параметры: +// Результат - Булево - Если Истина, тогда продолжается выполнение операции, иначе вызывается оповещение +// пользователя о завершении работы пакета +// КонтекстОперации - см. КонтекстЭквайринговойОперацииСФискализацией +Процедура НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение(Результат, КонтекстОперации) Экспорт + + ОписаниеОшибки = КонтекстОперации.РезультатВыполненияЭквайринговойОперации.ОписаниеОшибки; + + Если Результат Тогда + НачатьЭкваринговуюОперациюСФискализацией_Фискализация(КонтекстОперации); + Иначе + КонтекстОперации.Результат = Ложь; + КонтекстОперации.ОписаниеОшибки = ОписаниеОшибки; + ВывестиСлипЧекКакТекстовыйДокумент("Отказ", КонтекстОперации); + КонецЕсли; + +КонецПроцедуры + +// Запускает повторно эквайринговой операции. +// +// Параметры: +// КонтекстОперации - см. КонтекстЭквайринговойОперацииСФискализацией +Процедура НачатьФискализациюЧекаСОплатойКартой_ПовторитьОплату(КонтекстОперации) Экспорт + + ОписаниеОшибки = КонтекстОперации.РезультатВыполненияЭквайринговойОперации.ОписаниеОшибки; + + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатВыполнения.Результат = Истина; + РезультатВыполнения.ОписаниеОшибки = ОписаниеОшибки; + РезультатВыполнения.ПодключенноеУстройство = КонтекстОперации.ПодключенныйЭТ; + НачатьЭкваринговуюОперациюСФискализацией_ЭквайринговаяОперация(РезультатВыполнения, КонтекстОперации); + +КонецПроцедуры + +#КонецОбласти + +#Область ПокупкаСЗачислением + +// Возвращает структуру для заполнения данными выплаты эквайринговым терминалом и фискализации +// +// Возвращаемое значение: +// Структура: +// * ПараметрыФискализацииЧека - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - См. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * ОповещениеВопросПользователю - ОписаниеОповещения - Описание оповещения пользователя, для самостоятельной выдачи +// сообщения, это оповещение будет вызвано в случае отрицательного ответа от эквайрингового +// терминала при оплате, в процедуру будут переданы результат выполнения пакета операций, +// а также структура содержащая контекст пакета, если требуется продолжить выполнение пакета, +// тогда нужно будет вызвать в модуле ОборудованиеЧекопечатающиеУстройстваКлиент процедуры +// "НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение" или +// "НачатьФискализациюЧекаСОплатойКартой_ПовторитьОплату". +// передав туда этот контекст. +// Процедура оповещения содержит следующие параметры: +// Результат - Структура: +// * РезультатОперации - См. РезультатФискализацииЧекаСОплатойКартой +// * КонтекстОперации - Структура - контекст пакета операции который нужно передать в процедуру +// "ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение" +// для продолжения выполнения пакета +// ДополнительныеПараметры - Любой - значение переданное при создании оповещения +// * СлипЧекВТелеФискального - Булево, Неопределено - Выводить слип-чек в теле фискального, Истина - слип-чек будет выведен +// в теле фискального, Ложь - короткий слип-чек не будет выводиться, Неопределено - короткий слип-чек +// будет выводиться если поддерживает драйвер оборудования. +// +// Пример: +// Определение процедуры оповещения пользователя +// Процедура ВопросПользователюЗавершение(Результат, ДополнительныеПараметры) +// РезультатОперации = Результат.РезультатОперации; +// КонтекстОперации = Результат.КонтекстОперации; +// ... +// // продолжить выполнение пакета операций +// ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение(Истина, КонтекстОперации); +// КонецПроцедуры +// +Функция ПараметрыПокупкаСЗачислением() Экспорт + + Результат = ПараметрыЭквайринговаяОперацияСФискализацией(); + Возврат Результат; + +КонецФункции + +// Выполняет оплату на эквайринговом терминале, а затем фискализацию чека с печатью слип-чека в теле фискального, +// если операция при фискализации закончилась неуспешно, тогда происходит аварийная отмена последней операции на +// эквайринговом терминале. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - Описание процедуры которая будет вызвана при завершении операции +// со следующими параметрами: +// * Результат - См. РезультатФискализацииЧекаСОплатойКартой +// ИдентификаторКлиента - ФормаКлиентскогоПриложения - идентификатор формы. +// ИдентификаторККТ - СправочникСсылка.ПодключаемоеОборудование - ККТ на котором будет печататься фискальный чек +// содержащий в себе слип-чек. +// ИдентификаторЭТ - СправочникСсылка.ПодключаемоеОборудование - Эквайринговый терминал для обработки операции. +// ПараметрыОперации - См. ПараметрыФискализацияЧекаСОплатойКартой +// ДополнительныеПараметры - Структура - Дополнительные параметры которые можно передать в операции +// оплаты и фискализации. +Процедура НачатьПокупкаСЗачислением(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторККТ, + ИдентификаторЭТ, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + // Подготовить контекст пакета операций + КонтекстОперации = КонтекстЭквайринговойОперацииСФискализацией(); + КонтекстОперации.ТипОперации = "ПокупкаСЗачислением"; + + КонтекстОперации.ОповещениеЗавершения = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторККТ = ИдентификаторККТ; + КонтекстОперации.ИдентификаторЭТ = ИдентификаторЭТ; + ЗаполнитьЗначенияСвойств(КонтекстОперации, ПараметрыОперации); + + ПодготовитьКонтекстПакетнойОперации(КонтекстОперации, ДополнительныеПараметры); + + // Выбрать ЭТ если не указан конкретный + ОповещениеЗавершенияПодключения = Новый ОписаниеОповещения("НачатьЭкваринговуюОперациюСФискализацией_ЭквайринговаяОперация", + ЭтотОбъект, + КонтекстОперации); + ПакетнаяОбработка_ВыборУстройства(ОповещениеЗавершенияПодключения, КонтекстОперации); + +КонецПроцедуры + +// Запускает продолжение выполнения пакета, после обработки вопроса пользователя, или же успешной операции на +// эквайринговом терминале +// +// Параметры: +// Результат - Булево - Если Истина, тогда продолжается выполнение операции, иначе вызывается оповещение +// пользователя о завершении работы пакета +// КонтекстОперации - см. КонтекстЭквайринговойОперацииСФискализацией +Процедура НачатьПокупкаСЗачислением_ПродолжитьВыполнение(Результат, КонтекстОперации) Экспорт + + ОписаниеОшибки = КонтекстОперации.РезультатВыполненияЭквайринговойОперации.ОписаниеОшибки; + + Если Результат Тогда + НачатьЭкваринговуюОперациюСФискализацией_Фискализация(КонтекстОперации); + Иначе + КонтекстОперации.Результат = Ложь; + КонтекстОперации.ОписаниеОшибки = ОписаниеОшибки; + ВывестиСлипЧекКакТекстовыйДокумент("Отказ", КонтекстОперации); + КонецЕсли; + +КонецПроцедуры + +// Запускает повторно эквайринговой операции. +// +// Параметры: +// КонтекстОперации - см. КонтекстЭквайринговойОперацииСФискализацией +Процедура НачатьПокупкаСЗачислением_ПовторитьОплату(КонтекстОперации) Экспорт + + ОписаниеОшибки = КонтекстОперации.РезультатВыполненияЭквайринговойОперации.ОписаниеОшибки; + + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатВыполнения.Результат = Истина; + РезультатВыполнения.ОписаниеОшибки = ОписаниеОшибки; + РезультатВыполнения.ПодключенноеУстройство = КонтекстОперации.ПодключенныйЭТ; + НачатьЭкваринговуюОперациюСФискализацией_ЭквайринговаяОперация(РезультатВыполнения, КонтекстОперации); + +КонецПроцедуры + +#КонецОбласти + +#Область ПродажаСВыдачейНаличных + +// Возвращает структуру для заполнения данными операции продажи с выдачей наличных +// +// Возвращаемое значение: +// Структура: +// * ПараметрыФискализацииЧека - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыФискализацииЧекаВыдачи - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыФискализацииЧекаВозврата - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - См. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * ПризнакАгента - ПеречислениеСсылка.ПризнакиАгента - признак агента для автоматического формирования чека выдачи, +// см стандарт, по умолчанию Банковский платежный агент +// * ДанныеАгента - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеАгента +// * ДанныеПоставщика - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеПоставщика +// * СлипЧекВТелеФискального - Булево, Неопределено - Выводить слип-чек в теле фискального, Истина - слип-чек будет выведен +// в теле фискального, Ложь - короткий слип-чек не будет выводиться, Неопределено - короткий слип-чек +// будет выводиться если поддерживает драйвер оборудования. +// * ВыводитьУведомленияПользователя - Булево - если установлена Истина (по умолчанию), тогда при ошибке операции +// в пакете, будет выведено сообщение пользователю. +// * СуммаВыдачи - Число - сумма выдачи наличных денежных средств +Функция ПараметрыПродажаСВыдачейНаличных() Экспорт + + ПараметрыОперацииФискализацииЧекаПродажи = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека(); + ПараметрыВыполненияЭквайринговойОперации = Неопределено; + ПараметрыДанныеАгента = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеАгента(); + ПараметрыДанныеПоставщика = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеПоставщика(); + ПризнакАгента = ПредопределенноеЗначение("Перечисление.ПризнакиАгента.БанковскийПлатежныйАгент"); + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + ПараметрыВыполненияЭквайринговойОперации = МодульОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации(); + КонецЕсли; + + Результат = Новый Структура(); + Результат.Вставить("ПараметрыФискализацииЧека", ПараметрыОперацииФискализацииЧекаПродажи); + Результат.Вставить("ПараметрыФискализацииЧекаВыдачи", Неопределено); + Результат.Вставить("ПараметрыФискализацииЧекаВозврата", Неопределено); + Результат.Вставить("ПараметрыВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("ПризнакАгента", ПризнакАгента); + Результат.Вставить("ДанныеАгента", ПараметрыДанныеАгента); + Результат.Вставить("ДанныеПоставщика", ПараметрыДанныеПоставщика); + Результат.Вставить("СлипЧекВТелеФискального", Неопределено); + Результат.Вставить("ВыводитьУведомленияПользователя", Ложь); + Результат.Вставить("СуммаВыдачи", 0); + Результат.Вставить("ДокументОснованиеВыдачи", Неопределено); + Результат.Вставить("ДокументОснованиеВозврата", Неопределено); + Результат.Вставить("РеквизитыКартыQR", ""); + + Возврат Результат; + +КонецФункции + +// Заполняет параметры фискализации чека выдачи, по данным эквайринговой операции, параметров чека продажи, +// и данных переданных в параметрах операции, тогда они будут получены из чека продажи в соответствии +// с методическими указаниями для ФФД 1.05 и 1.1 ФНС России +// +// Параметры: +// ПараметрыОперации - см. ПараметрыПродажаСВыдачейНаличных +// +Процедура ЗаполнитьПараметрыЧекаВыдачи(ПараметрыОперации) Экспорт + ПризнакАгента = ПараметрыОперации.ПризнакАгента; + ДанныеАгента = ПараметрыОперации.ДанныеАгента; + ДанныеПоставщика = ПараметрыОперации.ДанныеПоставщика; + ПараметрыФискализацииЧека = ПараметрыОперации.ПараметрыФискализацииЧека; + ПараметрыВыполненияЭквайринговойОперации = ПараметрыОперации.ПараметрыВыполненияЭквайринговойОперации; + СуммаНаличных = ПараметрыВыполненияЭквайринговойОперации.СуммаНаличных; + + // создать чек выдачи наличных + ПараметрыЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека(); + + СписокСвойствДляКопирования = "ДокументОснование, Организация, ТорговыйОбъект, Электронно, Отправляет1СSMS, + |Отправляет1СEmail, СистемаНалогообложения, АдресРасчетов, МестоРасчетов, НомерАвтомата, ОтправительEmail, + |ПокупательEmail, ПокупательНомер, Получатель, ПолучательИНН, СубъектПерсональныхДанных, ЕстьПерсональныеДанные, + |ТипПерсональныхДанных, СерийныйНомер, ОрганизацияНазвание, ОрганизацияИНН, ОрганизацияКПП, АдресМагазина, + |НаименованиеМагазина, НомерКассы, НомерСмены, ДатаВремя, ТекстШапки, ТекстПодвала, КопийЧека, КассаККМ"; + ЗаполнитьЗначенияСвойств(ПараметрыЧека, ПараметрыФискализацииЧека, СписокСвойствДляКопирования); + + Если ЗначениеЗаполнено(ПараметрыОперации.ДокументОснованиеВыдачи) Тогда + ПараметрыЧека.ДокументОснование = ПараметрыОперации.ДокументОснованиеВыдачи; + КонецЕсли; + ПараметрыЧека.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.РасходДенежныхСредств"); + ПараметрыЧека.НомерЧека = Число(ПараметрыФискализацииЧека.НомерЧека) + 1; + + ЗаполнитьЗначенияСвойств(ПараметрыЧека.СведенияОПокупателе, ПараметрыФискализацииЧека.СведенияОПокупателе); + + // Позиции чека для фискализации. + ПараметрыЧека.ПозицииЧека.Очистить(); + СтрокаПозицииЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека(); + СтрокаПозицииЧека.НомерСтрокиТовара = 1; + СтрокаПозицииЧека.Наименование = НСтр("ru = 'Выдача наличных денежных средств'"); + СтрокаПозицииЧека.Количество = 1; + СтрокаПозицииЧека.Цена = СуммаНаличных; + СтрокаПозицииЧека.ЦенаСоСкидками = СуммаНаличных; + СтрокаПозицииЧека.Сумма = СуммаНаличных; + СтрокаПозицииЧека.СтавкаНДС = Неопределено; + СтрокаПозицииЧека.СуммаНДС = 0; + СтрокаПозицииЧека.ЕдиницаИзмерения = НСтр("ru = 'Штука'"); + СтрокаПозицииЧека.КодЕдиницыИзмерения = "796"; + СтрокаПозицииЧека.ДанныеАгента = ПараметрыЧека.ДанныеАгента; + СтрокаПозицииЧека.ДанныеПоставщика = ПараметрыЧека.ДанныеПоставщика; + СтрокаПозицииЧека.ПризнакСпособаРасчета = ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСПолнойОплатой"); + СтрокаПозицииЧека.ПризнакПредметаРасчета = ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Услуга"); + СтрокаПозицииЧека.ПризнакАгентаПоПредметуРасчета = ПризнакАгента; + СтрокаПозицииЧека.ДанныеАгента = ДанныеАгента; + СтрокаПозицииЧека.ДанныеПоставщика = ДанныеПоставщика; + + + ПараметрыЧека.ПозицииЧека.Добавить(СтрокаПозицииЧека); + + ПараметрыЧека.ТаблицаОплат.Очистить(); + СтрокаОплаты = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыСтрокиОплаты(); + СтрокаОплаты.Сумма = СуммаНаличных; + СтрокаОплаты.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные"); + ПараметрыЧека.ТаблицаОплат.Добавить(СтрокаОплаты); + + ПараметрыЧека.ДетализацияОплаты.Очистить(); + + ПараметрыОперации.ПараметрыФискализацииЧекаВыдачи = ПараметрыЧека; + +КонецПроцедуры + +// Заполняет параметры фискализации чека возврата формируемого в случае невыполнения фискализации чека выдачи, +// по данным параметров чека продажи +// +// Параметры: +// ПараметрыОперации - см. ПараметрыПродажаСВыдачейНаличных +// +Процедура ЗаполнитьПараметрыЧекаВозврата(ПараметрыОперации) Экспорт + + ПараметрыФискализацииЧека = ПараметрыОперации.ПараметрыФискализацииЧека; + + // создать чек возврата + ПараметрыЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииЧекаКоррекции(); + + ЗаполнитьЗначенияСвойств(ПараметрыЧека, ПараметрыФискализацииЧека); + ПараметрыЧека.НомерЧека = Число(ПараметрыФискализацииЧека.НомерЧека) + 1; + ПараметрыЧека.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств"); + Если ЗначениеЗаполнено(ПараметрыОперации.ДокументОснованиеВозврата) Тогда + ПараметрыЧека.ДокументОснование = ПараметрыОперации.ДокументОснованиеВозврата; + ИначеЕсли ЗначениеЗаполнено(ПараметрыОперации.ДокументОснованиеВыдачи) Тогда + ПараметрыЧека.ДокументОснование = ПараметрыОперации.ДокументОснованиеВыдачи; + КонецЕсли; + + ПараметрыОперации.ПараметрыФискализацииЧекаВозврата = ПараметрыЧека; + +КонецПроцедуры + +// Выполняет операцию оплата с выдачей наличных на эквайринговом терминале, затем фискализацию чека продажи +// фискализацию чека выдачи. Если фискализация чека продажи не проходит, тогда выполняется аварийная отмена +// последней эквайринговой операции. Если фискализация чека выдачи не проходит тогда выполняется отмена операции +// продажи с помощью чека коррекции, а затем выполняется аварийная отмена последней эквайринговой операции. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - Описание процедуры которая будет вызвана при завершении операции +// со следующими параметрами: +// * Результат - См. ОборудованиеЧекопечатающиеУстройстваКлиент.РезультатПродажаСВыдачейНаличных +// ИдентификаторКлиента - ФормаКлиентскогоПриложения - идентификатор формы. +// ИдентификаторККТ - СправочникСсылка.ПодключаемоеОборудование - ККТ на котором будет печататься фискальный чек +// содержащий в себе слип-чек. +// ИдентификаторЭТ - СправочникСсылка.ПодключаемоеОборудование - Эквайринговый терминал для обработки операции. +// ПараметрыОперации - См. ПараметрыПродажаСВыдачейНаличных +// ДополнительныеПараметры - Структура - Дополнительные параметры которые можно передать в операции +// оплаты и фискализации. +Процедура НачатьПродажаСВыдачейНаличных(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторККТ, + ИдентификаторЭТ, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = КонтекстПродажаСВыдачейНаличных(); + КонтекстОперации.ОповещениеЗавершения = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторККТ = ИдентификаторККТ; + КонтекстОперации.ИдентификаторЭТ = ИдентификаторЭТ; + ЗаполнитьЗначенияСвойств(КонтекстОперации, ПараметрыОперации); + + ПодготовитьКонтекстПакетнойОперации(КонтекстОперации, ДополнительныеПараметры); + + Если ПараметрыОперации.ПараметрыВыполненияЭквайринговойОперации = Неопределено Тогда + ПараметрыОперации.ПараметрыВыполненияЭквайринговойОперации = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации; + КонецЕсли; + Если КонтекстОперации.ПараметрыФискализацииЧекаВыдачи = Неопределено Тогда + ЗаполнитьПараметрыЧекаВыдачи(ПараметрыОперации); + КонтекстОперации.ПараметрыФискализацииЧекаВыдачи = ПараметрыОперации.ПараметрыФискализацииЧекаВыдачи; + КонецЕсли; + Если КонтекстОперации.ПараметрыФискализацииЧекаВозврата = Неопределено Тогда + ЗаполнитьПараметрыЧекаВозврата(ПараметрыОперации); + КонтекстОперации.ПараметрыФискализацииЧекаВозврата = ПараметрыОперации.ПараметрыФискализацииЧекаВозврата; + КонецЕсли; + + // Выбрать ЭТ если не указан конкретный + ОповещениеЗавершенияПодключения = Новый ОписаниеОповещения("НачатьПродажаСВыдачейНаличных_ЭквайринговаяОперация", + ЭтотОбъект, + КонтекстОперации); + ПакетнаяОбработка_ВыборУстройства(ОповещениеЗавершенияПодключения, КонтекстОперации); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +// Возвращает структуру для заполнения данных открытия формы настройки регистрации ККТ +// +// Возвращаемое значение: +// Структура: +// * ФискальноеУстройство - СправочникСсылка.ПодключаемоеОборудование - ссылка на ККТ +// * Организация - ОпределяемыйТип.ОрганизацияБПО +// * ТипОперации - Число +// * ОбработчикЗавершения - ОписаниеОповещения +Функция ПараметрыФормаНастройкиРегистрацииККТ() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ФискальноеУстройство"); + Параметры.Вставить("Организация"); + Параметры.Вставить("ТипОперации", 0); + Возврат Параметры; + +КонецФункции + +// Выполняет открытие формы настроек для регистрации ККТ +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения +// ПараметрыОткрытия - см. ПараметрыФормаНастройкиРегистрацииККТ +Процедура ОткрытьФормуНастройкиРегистрацииККТ(ОповещениеПриЗавершении, ПараметрыОткрытия) Экспорт + + ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация.ОткрытьФормуНастройкиРегистрацииККТ(ОповещениеПриЗавершении, ПараметрыОткрытия); + +КонецПроцедуры + +// Возвращает планируемые статусы маркированного товара +// +// Возвращаемое значение: +// Соответствие +Функция ПланируемыеСтатусыМаркированногоТовара() Экспорт + + Соответствие = Новый Соответствие(); + + // ++ Локализация + Соответствие.Вставить("ШтучныйТоварРеализован" , ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ШтучныйТоварРеализован")); + Соответствие.Вставить("МерныйТоварВСтадииРеализации", ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.МерныйТоварВСтадииРеализации")); + Соответствие.Вставить("ШтучныйТоварВозвращен" , ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ШтучныйТоварВозвращен")); + Соответствие.Вставить("ЧастьТовараВозвращена" , ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ЧастьТовараВозвращена")); + Соответствие.Вставить("СтатусТовараНеИзменился" , ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.СтатусТовараНеИзменился")); + // -- Локализация + + Возврат Соответствие; + +КонецФункции + +// Возвращает значение мера количества предмета расчета литр +// +// Возвращаемое значение: +// ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ +Функция МераКоличестваПредметаРасчетаЛитр() Экспорт + + Возврат ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Литр"); + +КонецФункции + +// Возвращает значение статус обработки запроса по умолчанию +// +// Возвращаемое значение: +// ПеречислениеСсылка +Функция СтатусОбработкиЗапросаПоУмолчанию() Экспорт + + // ++ Локализация + Возврат ПредопределенноеЗначение("Перечисление.СтатусОбработкиЗапросаКМ.ПустаяСсылка"); + // -- Локализация + +КонецФункции + +// Возвращает значение статус результата ожидается +// +// Возвращаемое значение: +// ПеречислениеСсылка +Функция СтатусРезультатаОжидается() Экспорт + + // ++ Локализация + Возврат ПредопределенноеЗначение("Перечисление.СтатусРезультатаЗапросаКМ.Ожидается"); + // -- Локализация + +КонецФункции + +// Возвращает значение статус товара по умолчанию +// +// Возвращаемое значение: +// ПеречислениеСсылка +Функция СтатусТовараПоУмолчанию() Экспорт + + // ++ Локализация + Возврат ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПустаяСсылка"); + // -- Локализация + +КонецФункции + +// Возвращает значение статус результата по умолчанию +// +// Возвращаемое значение: +// ПеречислениеСсылка +Функция СтатусРезультатаПоУмолчанию() Экспорт + + // ++ Локализация + Возврат ПредопределенноеЗначение("Перечисление.СтатусРезультатаЗапросаКМ.ПустаяСсылка"); + // -- Локализация + +КонецФункции + +// Осуществляет запрос КМ без ожидания ответа. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьЗапросКМБезОжиданияОтвета(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("RequestKMKMNoWait", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: следует использовать НачатьПроверкуКМ. +// Осуществляет запрос КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьЗапросКМ(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("RequestKM", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Устарела: следует использовать НачатьПроверкуКМ. +// Начать получения результатов запроса КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолученияРезультатовЗапросаКМ(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("GetProcessingKMResult", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Ложь, Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ПакетнаяОбработка + +// Обрабатывает результат выбора эквайрингового терминала +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстЭквайринговойОперацииСФискализацией +Процедура ПакетнаяОбработка_ВыборУстройстваЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + Результат = РезультатВыполнения.Результат; + + Если Не Результат Тогда + // Эквайринговый терминал не выбран, завершить пакет операций + ЗавершитьПакетОпераций(Ложь, РезультатВыполнения.ОписаниеОшибки, КонтекстОперации); + Возврат; + КонецЕсли; + + ИдентификаторЭТ = РезультатВыполнения.ИдентификаторУстройства; + ИдентификаторКлиента = КонтекстОперации.ИдентификаторКлиента; + КонтекстОперации.ИдентификаторЭТ = ИдентификаторЭТ; + + // Подключить ЭТ, если он не подключен (требуется для проверки возможности печати коротких слип-чеков) + Оповещение = Новый ОписаниеОповещения("ПакетнаяОбработка_ПодключениеУстройстваЗавершение", + ЭтотОбъект, + КонтекстОперации); + ПодключенноеУстройство = МенеджерОборудованияКлиент.ПолучитьПодключенноеУстройство(ИдентификаторЭТ); + Если ПодключенноеУстройство = Неопределено Тогда + ТипыОборудования = Новый Массив(); + ТипыОборудования.Добавить("ЭквайринговыйТерминал"); + МенеджерОборудованияКлиент.НачатьПодключениеОборудования(Оповещение, + ИдентификаторКлиента, + ТипыОборудования, + ИдентификаторЭТ); + Иначе + РезультатВыполнения.ПодключенноеУстройство = ПодключенноеУстройство; + ВыполнитьОбработкуОповещения(Оповещение, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +// Обрабатывает результат подключения эквайрингового терминала +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстЭквайринговойОперацииСФискализацией +Процедура ПакетнаяОбработка_ПодключениеУстройстваЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + Результат = РезультатВыполнения.Результат; + ОписаниеОшибки = РезультатВыполнения.ОписаниеОшибки; + ПодключенноеУстройство = РезультатВыполнения.ПодключенноеУстройство; + Оповещение = КонтекстОперации.ОповещениеЗавершенияПодключения; + + Если Не Результат Тогда + // Не удалось подключить эквайринговый терминал + ЗавершитьПакетОпераций(Ложь, ОписаниеОшибки, КонтекстОперации); + Возврат; + КонецЕсли; + КонтекстОперации.ПодключенныйЭТ = ПодключенноеУстройство; + + ОпределитьВозможностьПечатиСлипЧекаВТелеФискального(КонтекстОперации); + + // Подключить ЭТ, если он не подключен (требуется для проверки возможности печати коротких слип-чеков) + ВыполнитьОбработкуОповещения(Оповещение, РезультатВыполнения); + +КонецПроцедуры + +// Обрабатывает результат печати слип-чека как текстового документа +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстЭквайринговойОперацииСФискализацией +Процедура ПакетнаяОбработка_ПечатьТекстаЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + Результат = КонтекстОперации.Результат; + ОписаниеОшибки = КонтекстОперации.ОписаниеОшибки; + + ЗавершитьПакетОпераций(Результат, ОписаниеОшибки, КонтекстОперации); + +КонецПроцедуры + +#Область ЭквайринговаяОперацияСФискализацией + +// Возвращает заполненную структуру результата выполнения пакета операций +// +// Параметры: +// РезультатОперации - Булево - Результат выполнения пакета операций +// ОписаниеОшибки - Строка - Описание ошибки выполнения пакета операции +// КонтекстОперации - см. КонтекстЭквайринговойОперацииСФискализацией +// +// Возвращаемое значение: +// Структура: +// * Результат - Булево - Результат выполнения пакета операций. +// * ОписаниеОшибки - Строка - Описание ошибки выполнения пакета операции. +// * РезультатВыполненияЭквайринговойОперации - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатФискализацииЧека - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатАварийнойОтменыОперации - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * ПараметрыЭквайринговойОперации - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПакетнойОперацииВОчередиЧеков +Функция РезультатЭквайринговойОперацииСФискализацией(РезультатОперации, ОписаниеОшибки, КонтекстОперации) Экспорт + + Результат = Новый Структура(); + Результат.Вставить("Результат", РезультатОперации); + Результат.Вставить("ОписаниеОшибки", ОписаниеОшибки); + Если КонтекстОперации.ТипОперации = "ПокупкаСЗачислением" Тогда + Результат.Вставить("ТипОперации", ПредопределенноеЗначение("Перечисление.ТипыПакетнойОперацииВОчередиЧеков.ПокупкаСЗачислением")); + ИначеЕсли КонтекстОперации.ТипОперации = "ФискализацияЧекаСОплатой" Тогда + Результат.Вставить("ТипОперации", ПредопределенноеЗначение("Перечисление.ТипыПакетнойОперацииВОчередиЧеков.ФискализацияЧекаСОплатойКартой")); + Иначе + ВызватьИсключение СтрШаблон(НСтр("ru = 'Неизвестный тип операции %1'"), КонтекстОперации.ТипОперации); + КонецЕсли; + Результат.Вставить("РезультатФискализацииЧека", КонтекстОперации.РезультатФискализацииЧека); + Результат.Вставить("РезультатАварийнойОтменыОперации", КонтекстОперации.РезультатАварийнойОтменыОперации); + Результат.Вставить("РезультатВыполненияЭквайринговойОперации", КонтекстОперации.РезультатВыполненияЭквайринговойОперации); + Результат.Вставить("ПараметрыЭквайринговойОперации", Новый Структура()); + + Возврат Результат; + +КонецФункции + +// Начинает выполнение операции на эквайринговом терминале +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстЭквайринговойОперацииСФискализацией +Процедура НачатьЭкваринговуюОперациюСФискализацией_ЭквайринговаяОперация(РезультатВыполнения, КонтекстОперации) Экспорт + + // Проверить возможность выполнения пакета операций + ОписаниеОшибки = ""; + Если Не ЭкваринговаяОперацияСФискализациейДопустима(КонтекстОперации, ОписаниеОшибки) Тогда + ЗавершитьПакетОпераций(Ложь, ОписаниеОшибки, КонтекстОперации); + Возврат; + КонецЕсли; + + // начать выполнение операций + Оповещение = Новый ОписаниеОповещения("НачатьЭкваринговуюОперациюСФискализацией_ЭквайринговаяОперацияЗавершение", + ЭтотОбъект, + КонтекстОперации); + МодульОборудованиеПлатежныеСистемыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиент"); + МодульОборудованиеПлатежныеСистемыКлиент.НачатьВыполнениеОперацииНаЭквайринговомТерминале(Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторЭТ, + КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации, + КонтекстОперации.ДополнительныеПараметры, + КонтекстОперации.ИдентификаторККТ); +КонецПроцедуры + +// Обрабатывает результат выполнения эквайринговой операции, в случае успеха вставляет слип-чек, +// в тело фискального чека. +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстЭквайринговойОперацииСФискализацией +Процедура НачатьЭкваринговуюОперациюСФискализацией_ЭквайринговаяОперацияЗавершение( + РезультатВыполнения, КонтекстОперации) Экспорт + + РезультатВыполнения.Вставить("СуммаОперации", КонтекстОперации.СуммаОперации); + КонтекстОперации.РезультатВыполненияЭквайринговойОперации = РезультатВыполнения; + + Если РезультатВыполнения.Результат Тогда + ВставитьСлипЧекВТелоФискальногоЧека(КонтекстОперации); + НачатьЭкваринговуюОперациюСФискализацией_Фискализация(КонтекстОперации); + Иначе + ОбработатьОтрицательныйРезультатЭквайринговойОперацииСФискализацией(КонтекстОперации); + КонецЕсли; + +КонецПроцедуры + +// Запускает фискализацию кассового чека. +// +// Параметры: +// КонтекстОперации - См. КонтекстЭквайринговойОперацииСФискализацией +Процедура НачатьЭкваринговуюОперациюСФискализацией_Фискализация(КонтекстОперации) Экспорт + + Оповещение = Новый ОписаниеОповещения("НачатьЭкваринговуюОперациюСФискализацией_ФискализацияЗавершение", + ЭтотОбъект, + КонтекстОперации); + НачатьФискализациюЧекаНаФискальномУстройстве(Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторККТ, + КонтекстОперации.ПараметрыФискализацииЧека, + КонтекстОперации.ДополнительныеПараметры); + +КонецПроцедуры + +// Обрабатывает результаты фискализации чека, в случае ошибки фискализации вызывает аварийную отмену последней операции +// эквайрингового терминала +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстЭквайринговойОперацииСФискализацией +Процедура НачатьЭкваринговуюОперациюСФискализацией_ФискализацияЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + КонтекстОперации.РезультатФискализацииЧека = РезультатВыполнения; + Результат = РезультатВыполнения.Результат; + ОписаниеОшибки = РезультатВыполнения.ОписаниеОшибки; + + Если Результат Тогда + Если КонтекстОперации.ПараметрыФискализацииЧека.Электронно Тогда + КонтекстОперации.Результат = Истина; + ВывестиСлипЧекКакТекстовыйДокумент("Электронный", КонтекстОперации); + Иначе + ЗавершитьПакетОпераций(Истина, ОписаниеОшибки, КонтекстОперации); + КонецЕсли; + Иначе + Если КонтекстОперации.РезультатВыполненияЭквайринговойОперации.Результат Тогда + МодульОборудованиеПлатежныеСистемыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиент"); + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + Оповещение = Новый ОписаниеОповещения("НачатьЭкваринговуюОперациюСФискализацией_АварийнаяОтменаЗавершение", + ЭтотОбъект, + КонтекстОперации); + ПараметрыОтменыЭквайринговойОперации = МодульОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации(); + ЗаполнитьЗначенияСвойств( + ПараметрыОтменыЭквайринговойОперации, + КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации, + , + "ТипТранзакции, ИдентификаторЗапроса"); + МодульОборудованиеПлатежныеСистемыКлиент.НачатьВыполнениеАварийнойОтменыОперации(Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторЭТ, + ПараметрыОтменыЭквайринговойОперации, + КонтекстОперации.ДополнительныеПараметры); + Иначе + КонтекстОперации.Результат = Ложь; + КонтекстОперации.ОписаниеОшибки = ОписаниеОшибки; + ВывестиСлипЧекКакТекстовыйДокумент("Отказ", КонтекстОперации); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Обрабатывает результаты аварийной отмены последней операции эквайрингового терминала +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстЭквайринговойОперацииСФискализацией +Процедура НачатьЭкваринговуюОперациюСФискализацией_АварийнаяОтменаЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + КонтекстОперации.РезультатАварийнойОтменыОперации = РезультатВыполнения; + КонтекстОперации.Результат = Ложь; + Если РезультатВыполнения.Результат Тогда + КонтекстОперации.ОписаниеОшибки = КонтекстОперации.РезультатФискализацииЧека.ОписаниеОшибки; + Иначе + КонтекстОперации.ОписаниеОшибки = КонтекстОперации.РезультатАварийнойОтменыОперации.ОписаниеОшибки; + КонецЕсли; + ВывестиСлипЧекКакТекстовыйДокумент("Отказ", КонтекстОперации); + +КонецПроцедуры + +#КонецОбласти + +#Область ПродажаСВыдачейНаличных + +// Начинает выполнение эквайринговой операции "Оплата с выдачей наличных" +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстПродажаСВыдачейНаличных +Процедура НачатьПродажаСВыдачейНаличных_ЭквайринговаяОперация(РезультатВыполнения, КонтекстОперации) Экспорт + + // Проверить возможность выполнения пакета операций + ОписаниеОшибки = ""; + Если Не ПродажаСВыдачейНаличныхДопустима(КонтекстОперации, ОписаниеОшибки) Тогда + ЗавершитьПакетОпераций(Ложь, ОписаниеОшибки, КонтекстОперации); + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения( + "НачатьПродажаСВыдачейНаличных_ЭквайринговаяОперацияЗавершение", + ЭтотОбъект, + КонтекстОперации); + МодульОборудованиеПлатежныеСистемыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиент"); + МодульОборудованиеПлатежныеСистемыКлиент.НачатьВыполнениеОперацииНаЭквайринговомТерминале( + Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторЭТ, + КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации, + КонтекстОперации.ДополнительныеПараметры, + КонтекстОперации.ИдентификаторККТ); + +КонецПроцедуры + +// Начинает выполнение фискализации продажи +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстЭквайринговойОперацииСФискализацией +Процедура НачатьПродажаСВыдачейНаличных_ЭквайринговаяОперацияЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + РезультатВыполнения.Вставить("СуммаОперации", КонтекстОперации.СуммаОперации); + РезультатВыполнения.Вставить("СуммаНаличных", КонтекстОперации.СуммаВыдачи); + КонтекстОперации.РезультатВыполненияЭквайринговойОперации = РезультатВыполнения; + + Результат = РезультатВыполнения.Результат; + ОписаниеОшибки = РезультатВыполнения.ОписаниеОшибки; + + Если РезультатВыполнения.Результат Тогда + // Эквайринговая операция выполнена успешно, требуется произвести фискализацию продажи + Если КонтекстОперации.СлипЧекВТелеФискального Тогда + ВставитьСлипЧекВТелоФискальногоЧека(КонтекстОперации); + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения( + "НачатьПродажаСВыдачейНаличных_ФискализацияПродажиЗавершение", + ЭтотОбъект, + КонтекстОперации); + + НачатьФискализациюЧекаНаФискальномУстройстве( + Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторККТ, + КонтекстОперации.ПараметрыФискализацииЧека, + КонтекстОперации.ДополнительныеПараметры); + Иначе + // Эквайринговая операция не выполнена, завершение пакета операций + Если КонтекстОперации.ВыводитьУведомленияПользователя Тогда + ТекстСообщения = НСтр("ru = 'Оплата с выдачей наличных не удалась.%1%2'"); + ТекстСообщения = СтрШаблон(ТекстСообщения, Символы.ПС, ОписаниеОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + + КонтекстОперации.Результат = Ложь; + КонтекстОперации.ОписаниеОшибки = ОписаниеОшибки; + ВывестиСлипЧекКакТекстовыйДокумент("Отказ", КонтекстОперации); + + КонецЕсли; + +КонецПроцедуры + +// Обрабатывает результат выполнения фискализации продажи +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстПродажаСВыдачейНаличных +Процедура НачатьПродажаСВыдачейНаличных_ФискализацияПродажиЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + КонтекстОперации.РезультатФискализацииЧека = РезультатВыполнения; + + Результат = РезультатВыполнения.Результат; + ОписаниеОшибки = РезультатВыполнения.ОписаниеОшибки; + + Если Результат Тогда + // Фискализация продажи выполнена успешно, требуется произвести фискализацию выдачи + + Оповещение = Новый ОписаниеОповещения("НачатьПродажаСВыдачейНаличных_ФискализацияВыдачиЗавершение", + ЭтотОбъект, + КонтекстОперации); + НачатьФискализациюЧекаНаФискальномУстройстве( + Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторККТ, + КонтекстОперации.ПараметрыФискализацииЧекаВыдачи, + КонтекстОперации.ДополнительныеПараметры); + Иначе + // продажа не выполнена, отмена эквайринговой операции + Если КонтекстОперации.ВыводитьУведомленияПользователя Тогда + ТекстСообщения = НСтр("ru = 'Не удалось произвести фискализацию чека продажи.%1%2'"); + ТекстСообщения = СтрШаблон(ТекстСообщения, Символы.ПС, ОписаниеОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + // фискализация не удалась, требуется произвести отмену операции на ЭТ + МодульОборудованиеПлатежныеСистемыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиент"); + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + Оповещение = Новый ОписаниеОповещения( + "НачатьПродажаСВыдачейНаличных_АварийнаяОтменаЗавершение", + ЭтотОбъект, + КонтекстОперации); + ПараметрыОтменыЭквайринговойОперации = МодульОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации(); + ЗаполнитьЗначенияСвойств( + ПараметрыОтменыЭквайринговойОперации, + КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации, + , + "ТипТранзакции, ИдентификаторЗапроса"); + МодульОборудованиеПлатежныеСистемыКлиент.НачатьВыполнениеАварийнойОтменыОперации( + Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторЭТ, + ПараметрыОтменыЭквайринговойОперации, + КонтекстОперации.ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + +// Обрабатывает результат выполнения фискализации выдачи, в случае не удачи выполняет фискализацию чека возврата +// и аварийную отмену последней эквайринговой операции. Если операция успешна, тогда операция завершается. +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстПродажаСВыдачейНаличных +Процедура НачатьПродажаСВыдачейНаличных_ФискализацияВыдачиЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + КонтекстОперации.РезультатФискализацииЧекаВыдачи = РезультатВыполнения; + Результат = РезультатВыполнения.Результат; + + Если Результат Тогда + Если КонтекстОперации.ПараметрыФискализацииЧекаВыдачи.Электронно Тогда + КонтекстОперации.Результат = Истина; + ВывестиСлипЧекКакТекстовыйДокумент("Электронный", КонтекстОперации); + Иначе + ЗавершитьПакетОпераций(Истина, "", КонтекстОперации); + КонецЕсли; + Иначе + // Фискализация не удалась, требуется произвести отмену фискализации продажи и отмену операции на ЭТ + Оповещение = Новый ОписаниеОповещения( + "НачатьПродажаСВыдачейНаличных_ФискализацияВозвратаПродажиЗавершение", + ЭтотОбъект, + КонтекстОперации); + + НачатьФискализациюЧекаНаФискальномУстройстве( + Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторККТ, + КонтекстОперации.ПараметрыФискализацииЧекаВозврата, + КонтекстОперации.ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + +// Обрабатывает результат выполнения фискализации возврата продажи, и выполняет аварийную отмену последней +// эквайринговой операции. +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. ОборудованиеЧекопечатающиеУстройстваКлиент.КонтекстПродажаСВыдачейНаличных +Процедура НачатьПродажаСВыдачейНаличных_ФискализацияВозвратаПродажиЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + КонтекстОперации.РезультатФискализацииЧекаВозврата = РезультатВыполнения; + Результат = РезультатВыполнения.Результат; + + // Независимо от результата выполнить аварийную отмену эквайринговой операции + МодульОборудованиеПлатежныеСистемыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиент"); + Оповещение = Новый ОписаниеОповещения( + "НачатьПродажаСВыдачейНаличных_АварийнаяОтменаЗавершение", + ЭтотОбъект, + КонтекстОперации); + МодульОборудованиеПлатежныеСистемыКлиент.НачатьВыполнениеАварийнойОтменыОперации( + Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторЭТ, + КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации, + КонтекстОперации.ДополнительныеПараметры); + +КонецПроцедуры + +// Обрабатывает результат выполнения аварийной отмены последней эквайринговой операции +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстПродажаСВыдачейНаличных +Процедура НачатьПродажаСВыдачейНаличных_АварийнаяОтменаЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + КонтекстОперации.РезультатАварийнойОтменыОперации = РезультатВыполнения; + + Если РезультатВыполнения.Результат Тогда + // аварийная отмена выполнена успешно + Если ЗначениеЗаполнено(КонтекстОперации.РезультатФискализацииЧекаВыдачи) Тогда + // отмена в момент фискализации чека выдачи + ОписаниеОшибки = КонтекстОперации.РезультатФискализацииЧекаВыдачи.ОписаниеОшибки; + ТекстСообщения = НСтр("ru = 'Фискализация чека выдачи не выполнена.%1%2'"); + ТекстСообщения = СтрШаблон(ТекстСообщения, Символы.ПС, ОписаниеОшибки); + Если Не КонтекстОперации.РезультатФискализацииЧекаВозврата.Результат Тогда + // чек возврата неудачен + ОписаниеОшибки = КонтекстОперации.РезультатФискализацииЧекаВозврата.ОписаниеОшибки; + ТекстСообщенияКоррекции = НСтр("ru = '%1%2Фискализация чека возврата не выполнена.%2%3'"); + ТекстСообщенияКоррекции = СтрШаблон(ТекстСообщенияКоррекции, ТекстСообщения, Символы.ПС, ОписаниеОшибки); + КонецЕсли; + Иначе + // отмена в момент фискализации чека продажи + ОписаниеОшибки = КонтекстОперации.РезультатФискализацииЧека.ОписаниеОшибки; + ТекстСообщения = НСтр("ru = 'Фискализация чека продажи не выполнена.%1%2'"); + ТекстСообщения = СтрШаблон(ТекстСообщения, Символы.ПС, ОписаниеОшибки); + КонецЕсли; + Иначе + // аварийная отмена оплаты с выдачей наличных не удалась + ОписаниеОшибки = КонтекстОперации.РезультатАварийнойОтменыОперации.ОписаниеОшибки; + ТекстСообщения = НСтр("ru = 'Аварийная отмена оплаты с выдачей наличных не выполнена.%1%2'"); + ТекстСообщения = СтрШаблон(ТекстСообщения, Символы.ПС, ОписаниеОшибки); + КонецЕсли; + Если КонтекстОперации.ВыводитьУведомленияПользователя Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + + КонтекстОперации.Результат = Ложь; + КонтекстОперации.ОписаниеОшибки = ОписаниеОшибки; + ВывестиСлипЧекКакТекстовыйДокумент("Отказ", КонтекстОперации); + +КонецПроцедуры + +// Возвращает заполненную структуру результата выполнения пакета операций +// +// Параметры: +// РезультатОперации - Булево - Результат выполнения пакета операций +// ОписаниеОшибки - Строка - Описание ошибки выполнения пакета операции +// КонтекстОперации - см. КонтекстЭквайринговойОперацииСФискализацией +// +// Возвращаемое значение: +// Структура: +// * Результат - Булево - Результат выполнения пакета операций. +// * ОписаниеОшибки - ИнформацияОбОшибке - Описание ошибки выполнения пакета операции. +// * РезультатВыполненияЭквайринговойОперации - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатФискализацииЧека - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатФискализацииЧекаВыдачи - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатФискализацииЧекаВозврата - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатАварийнойОтменыОперации - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * ПараметрыЭквайринговойОперации - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПакетнойОперацииВОчередиЧеков +// * ПараметрыПродажаСВыдачейНаличных - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПакетнойОперацииВОчередиЧеков +Функция РезультатПродажаСВыдачейНаличных(РезультатОперации, ОписаниеОшибки, КонтекстОперации) Экспорт + + Результат = Новый Структура(); + Результат.Вставить("Результат", РезультатОперации); + Результат.Вставить("ОписаниеОшибки", ОписаниеОшибки); + Результат.Вставить("ТипОперации", ПредопределенноеЗначение("Перечисление.ТипыПакетнойОперацииВОчередиЧеков.ПродажаСВыдачейНаличных")); + Результат.Вставить("РезультатФискализацииЧека", КонтекстОперации.РезультатФискализацииЧека); + Результат.Вставить("РезультатФискализацииЧекаВыдачи", КонтекстОперации.РезультатФискализацииЧекаВыдачи); + Результат.Вставить("РезультатФискализацииЧекаВозврата", КонтекстОперации.РезультатФискализацииЧекаВозврата); + Результат.Вставить("РезультатАварийнойОтменыОперации", КонтекстОперации.РезультатАварийнойОтменыОперации); + Результат.Вставить("РезультатВыполненияЭквайринговойОперации", КонтекстОперации.РезультатВыполненияЭквайринговойОперации); + Результат.Вставить("ПараметрыЭквайринговойОперации", Новый Структура()); + Результат.Вставить("ПараметрыПродажаСВыдачейНаличных", Новый Структура()); + Возврат Результат; + +КонецФункции + +// Возвращает структуру контекст выполнения пакета операций +// +// Возвращаемое значение: +// Структура: +// * ТипОперации - Строка - тип операции +// * Результат - Булево - результат выполнения пакета операций +// * ОписаниеОшибки - Строка - Описание ошибки пакета операций +// * ОповещениеЗавершения - ОписаниеОповещения - Оповещение вызываемое при завершении выполнения пакета +// * ИдентификаторКлиента - ФормаКлиентскогоПриложения - идентификатор формы. +// * ИдентификаторККТ - СправочникСсылка.ПодключаемоеОборудование - ККТ на котором будет печататься фискальный чек +// содержащий в себе слип-чек +// * ИдентификаторЭТ - СправочникСсылка.ПодключаемоеОборудование - Эквайринговый терминал для обработки операции +// * ПодключенныйЭТ - Структура - параметры подключенного терминала +// * ПараметрыФискализацииЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыФискализацииЧекаВыдачи -см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыФискализацииЧекаВозврата - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - см. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * РезультатВыполненияЭквайринговойОперации - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатФискализацииЧека - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатФискализацииЧекаВыдачи - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатФискализацииЧекаВозврата - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатАварийнойОтменыОперации - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * ВыводитьУведомленияПользователя - Булево - если установлена Истина (по умолчанию), тогда при ошибке операции +// в пакете, будет выведено сообщение пользователю. +// * ОставитьПодключенным - Булево - Оставить оборудование подключенным после выполнения пакета +// * ДополнительныеПараметры - Структура - Дополнительные параметры которые можно передать в операции +// оплаты и фискализации +// * РеквизитыКартыQR - Строка +// +Функция КонтекстПродажаСВыдачейНаличных() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("ТипОперации", "ПродажаСВыдачейНаличных"); + Результат.Вставить("Результат", Ложь); + Результат.Вставить("ОписаниеОшибки", ""); + Результат.Вставить("ОповещениеЗавершения", Неопределено); + Результат.Вставить("ИдентификаторКлиента", Неопределено); + Результат.Вставить("ИдентификаторККТ", Неопределено); + Результат.Вставить("ИдентификаторЭТ", Неопределено); + Результат.Вставить("ПодключенныйЭТ", Неопределено); + Результат.Вставить("ПараметрыФискализацииЧека", Неопределено); + Результат.Вставить("ПараметрыФискализацииЧекаВозврата", Неопределено); + Результат.Вставить("ПараметрыФискализацииЧекаВыдачи", Неопределено); + Результат.Вставить("ПараметрыВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("РезультатВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("РезультатФискализацииЧека", Неопределено); + Результат.Вставить("РезультатФискализацииЧекаВозврата", Неопределено); + Результат.Вставить("РезультатФискализацииЧекаВыдачи", Неопределено); + Результат.Вставить("РезультатАварийнойОтменыОперации", Неопределено); + Результат.Вставить("СлипЧекВТелеФискального", Неопределено); + Результат.Вставить("ВыводитьУведомленияПользователя", Неопределено); + Результат.Вставить("ОставитьПодключенным", Ложь); + Результат.Вставить("ДополнительныеПараметры", Новый Структура()); + Результат.Вставить("ПризнакАгента", Неопределено); + Результат.Вставить("ДанныеАгента", Неопределено); + Результат.Вставить("ДанныеПоставщика", Неопределено); + Результат.Вставить("СуммаВыдачи", 0); + Результат.Вставить("СуммаОперации", 0); + Результат.Вставить("РеквизитыКартыQR", ""); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ВыполнитьВыборФискальногоУстройства(КонтекстОперации) + + Если КонтекстОперации.ИдентификаторУстройства = Неопределено Или ПустаяСтрока(КонтекстОперации.ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ПринтерЧеков = Истина; + ПоддерживаемыеТипы.ККТ = Истина; + + Оповещение = Новый ОписаниеОповещения("ВыполнитьОперациюНаФискальномУстройстве", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите фискальное устройство'"), + НСтр("ru='Фискальное устройство не подключено.'"), + НСтр("ru='Фискальное устройство не выбрано.'")); + + Иначе + ВыполнитьОперациюНаФискальномУстройстве(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +Процедура ВыполнитьОперациюНаФискальномУстройстве(РезультатВыбора, КонтекстОперации) Экспорт + + Если РезультатВыбора.Результат Тогда + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды(КонтекстОперации.Команда, + "ОборудованиеЧекопечатающиеУстройства", КонтекстОперации.ДополнительныеПараметры, + КонтекстОперации.ПодготовитьДанные, КонтекстОперации.ОбработатьДанные); + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(КонтекстОперации.ОповещениеПриЗавершении, КонтекстОперации.ИдентификаторКлиента, + РезультатВыбора.ИдентификаторУстройства, КонтекстОперации.ПараметрыОперации, ПараметрыВыполнениеКоманды); + Иначе + ВыполнитьОбработкуОповещения(КонтекстОперации.ОповещениеПриЗавершении, РезультатВыбора); + КонецЕсли; + +КонецПроцедуры + +Процедура ПоказатьПредупреждениеДрайверСнятыйСПоддержки(Результат) + + Если Результат.Свойство("ДрайверСнятСПоддержки") И Результат.ДрайверСнятСПоддержки + И Результат.Свойство("СообщениеПриИспользовании") И Результат.СообщениеПриИспользовании Тогда + ТекстЗаголовок = НСтр("ru = 'Используемый драйвер устарел и снят с поддержки.'"); + ТекстПредупреждения = + Строка(Результат.ИдентификаторУстройства) + Символы.ПС + + НСтр("ru = 'Использование данного драйвера может приводить к некорректному формированию фискальных данных на ККТ.'") + Символы.ПС + + НСтр("ru = 'Необходимо использовать актуальную версию драйвера ККТ для данного производителя.'") + Символы.ПС + + НСтр("ru = 'Перенастройте оборудование в разделе: «Поддержка оборудования – Подключаемое оборудование»'"); + ПоказатьПредупреждение(Неопределено, ТекстПредупреждения, 0, ТекстЗаголовок); + КонецЕсли; + +КонецПроцедуры + +#Область ПакетнаяОбработка + +// Запустить выбор эквайрингового терминала +// +// Параметры: +// ОповещениеЗавершенияПодключения - ОписаниеОповещения +// КонтекстОперации - См. КонтекстЭквайринговойОперацииСФискализацией +Процедура ПакетнаяОбработка_ВыборУстройства(ОповещениеЗавершенияПодключения, КонтекстОперации) + + ИдентификаторЭТ = КонтекстОперации.ИдентификаторЭТ; + КонтекстОперации.Вставить("ОповещениеЗавершенияПодключения", ОповещениеЗавершенияПодключения); + // Выбрать ЭТ если не указан конкретный + Оповещение = Новый ОписаниеОповещения("ПакетнаяОбработка_ВыборУстройстваЗавершение", + ЭтотОбъект, + КонтекстОперации); + Если ИдентификаторЭТ = Неопределено Или ПустаяСтрока(ИдентификаторЭТ) Тогда + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ЭквайринговыйТерминал = Истина; + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, + ПоддерживаемыеТипы, + НСтр("ru='Выберите эквайринговый терминал'"), + НСтр("ru='Эквайринговый терминал не подключен.'"), + НСтр("ru='Эквайринговый терминал не выбран.'")); + Иначе + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатВыполнения.Результат = Истина; + РезультатВыполнения.ИдентификаторУстройства = ИдентификаторЭТ; + ВыполнитьОбработкуОповещения(Оповещение, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +#Область ЭквайринговаяОперацияСФискализацией + +// Возвращает структуру для заполнения данными операции с эквайринговым терминалом и фискализации +// +// Возвращаемое значение: +// Структура: +// * ПараметрыФискализацииЧека - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - См. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * ОповещениеВопросПользователю - ОписаниеОповещения - Описание оповещения пользователя, для самостоятельной выдачи +// сообщения, это оповещение будет вызвано в случае отрицательного ответа от эквайрингового +// терминала при оплате, в процедуру будут переданы результат выполнения пакета операций, +// а также структура содержащая контекст пакета, если требуется продолжить выполнение пакета, +// тогда нужно будет вызвать в модуле ОборудованиеЧекопечатающиеУстройстваКлиент процедуры +// "НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение" или +// "НачатьФискализациюЧекаСОплатойКартой_ПовторитьОплату". +// передав туда этот контекст. +// Процедура оповещения содержит следующие параметры: +// Результат - Структура: +// * РезультатОперации - См. РезультатФискализацииЧекаСОплатойКартой +// * КонтекстОперации - Структура - контекст пакета операции который нужно передать в процедуру +// "ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение" +// для продолжения выполнения пакета +// ДополнительныеПараметры - Любой - значение переданное при создании оповещения +// * СлипЧекВТелеФискального - Булево, Неопределено - Выводить слип-чек в теле фискального, Истина - слип-чек будет выведен +// в теле фискального, Ложь - короткий слип-чек не будет выводиться, Неопределено - короткий слип-чек +// будет выводиться если поддерживает драйвер оборудования. +// +// Пример: +// Определение процедуры оповещения пользователя +// Процедура ВопросПользователюЗавершение(Результат, ДополнительныеПараметры) +// РезультатОперации = Результат.РезультатОперации; +// КонтекстОперации = Результат.КонтекстОперации; +// ... +// // продолжить выполнение пакета операций +// ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение(Истина, КонтекстОперации); +// КонецПроцедуры +// +Функция ПараметрыЭквайринговаяОперацияСФискализацией() + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + ПараметрыВыполненияЭквайринговойОперации = МодульОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации(); + КонецЕсли; + ПараметрыОперацииФискализацииЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека(); + + Результат = Новый Структура(); + Результат.Вставить("ПараметрыФискализацииЧека", ПараметрыОперацииФискализацииЧека); + Результат.Вставить("ПараметрыВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("ОповещениеВопросПользователю", Неопределено); + Результат.Вставить("СлипЧекВТелеФискального", Неопределено); + Результат.Вставить("РеквизитыКартыQR", ""); + Возврат Результат; + +КонецФункции + +// Возвращает структуру, контекст выполнения пакета операций +// +// Возвращаемое значение: +// Структура: +// * ТипОперации - Строка - тип операции +// * Результат - Булево - результат выполнения пакета операций +// * ОписаниеОшибки - Строка - Описание ошибки пакета операций +// * ОповещениеЗавершения - ОписаниеОповещения - Оповещение вызываемое при завершении выполнения пакета +// * ИдентификаторКлиента - ФормаКлиентскогоПриложения - идентификатор формы. +// * ИдентификаторККТ - СправочникСсылка.ПодключаемоеОборудование - ККТ на котором будет печататься фискальный чек +// содержащий в себе слип-чек +// * ИдентификаторЭТ - СправочникСсылка.ПодключаемоеОборудование - Эквайринговый терминал для обработки операции +// * ПодключенныйЭТ - Структура - параметры подключенного терминала +// * ПараметрыФискализацииЧека - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - См. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * РезультатВыполненияЭквайринговойОперации - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатФискализацииЧека - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатАварийнойОтменыОперации - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * ОповещениеВопросПользователю - ОписаниеОповещения - Описание оповещения пользователя, для самостоятельной выдачи +// сообщения, это оповещение будет вызвано в случае отрицательного ответа от эквайрингового +// терминала при оплате, в процедуру будут переданы результат выполнения пакета операций, +// а также структура содержащая контекст пакета. +// * ОставитьПодключенным - Булево - Оставить оборудование подключенным после выполнения пакета +// * ДополнительныеПараметры - Структура - Дополнительные параметры которые можно передать в операции +// оплаты и фискализации +// * РеквизитыКартыQR - Строка +Функция КонтекстЭквайринговойОперацииСФискализацией() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("ТипОперации", ""); + Результат.Вставить("Результат", Ложь); + Результат.Вставить("ОписаниеОшибки", ""); + Результат.Вставить("ОповещениеЗавершения", Неопределено); + Результат.Вставить("ИдентификаторКлиента", Неопределено); + Результат.Вставить("ИдентификаторККТ", Неопределено); + Результат.Вставить("ИдентификаторЭТ", Неопределено); + Результат.Вставить("ПодключенныйЭТ", Неопределено); + Результат.Вставить("ИдентификаторЗаписи", Неопределено); + Результат.Вставить("ПараметрыФискализацииЧека", Неопределено); + Результат.Вставить("ПараметрыВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("РезультатВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("РезультатФискализацииЧека", Неопределено); + Результат.Вставить("РезультатАварийнойОтменыОперации", Неопределено); + Результат.Вставить("СлипЧекВТелеФискального", Неопределено); + Результат.Вставить("ОповещениеВопросПользователю", Неопределено); + Результат.Вставить("ОставитьПодключенным", Ложь); + Результат.Вставить("ДополнительныеПараметры", Новый Структура()); + Результат.Вставить("СуммаОперации", 0); + Результат.Вставить("РеквизитыКартыQR", ""); + Возврат Результат; + +КонецФункции + +// Задает вопрос пользователю, или же вызывает оповещение переданное в параметрах операции +// переданной в процедуру "НачатьФискализациюЧекаСОплатойКартой" +// +// Параметры: +// КонтекстОперации - см. КонтекстЭквайринговойОперацииСФискализацией +Процедура ОбработатьОтрицательныйРезультатЭквайринговойОперацииСФискализацией(КонтекстОперации) + + РезультатВыполнения = КонтекстОперации.РезультатВыполненияЭквайринговойОперации; + ОповещениеВопросПользователю = КонтекстОперации.ОповещениеВопросПользователю; + ОписаниеОшибки = РезультатВыполнения.ОписаниеОшибки; + + Если ОповещениеВопросПользователю <> Неопределено Тогда + // Пользователь создал свое оповещение + Результат = Новый Структура("РезультатОперации, КонтекстОперации"); + Результат.КонтекстОперации = КонтекстОперации; + Результат.РезультатОперации = РезультатЭквайринговойОперацииСФискализацией(Ложь, ОписаниеОшибки, КонтекстОперации); + ВыполнитьОбработкуОповещения(ОповещениеВопросПользователю, Результат); + Иначе + КонтекстОперации.Результат = Ложь; + КонтекстОперации.ОписаниеОшибки = ОписаниеОшибки; + ВывестиСлипЧекКакТекстовыйДокумент("Отказ", КонтекстОперации); + КонецЕсли; + +КонецПроцедуры + +// Выполняет проверку допустимости выполнения операции +// +// Параметры: +// КонтекстОперации - См. КонтекстЭквайринговойОперацииСФискализацией. +// ОписаниеОшибки - Строка - Описание ошибки параметра операции +// +// Возвращаемое значение: +// Булево - Возвращает истина если переданные параметры операции корректны +Функция ЭкваринговаяОперацияСФискализациейДопустима(КонтекстОперации, ОписаниеОшибки) + + ОписаниеОшибки = ""; + // Используется подсистема "Платежные системы" + Если Не ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + ТекстОшибки = НСтр("ru = 'Подсистема ""Платежные системы"" не подключена.'"); + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + ПараметрыВыполненияЭквайринговойОперации = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации; + Если ПараметрыВыполненияЭквайринговойОперации.ТипТранзакции <> "AuthorizeSales" + И ПараметрыВыполненияЭквайринговойОперации.ТипТранзакции <> "PurchaseWithEnrollment" Тогда + ТекстОшибки = НСтр("ru = 'Операция %1 не поддерживается данным режимом.'"); + ТекстОшибки = СтрШаблон(ТекстОшибки, ПараметрыВыполненияЭквайринговойОперации.ТипТранзакции); + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + Если ПараметрыВыполненияЭквайринговойОперации.СуммаОперации <= 0 Тогда + ОписаниеОшибки = ОписаниеОшибки + НСтр("ru = 'Сумма операции должна быть больше 0.'") + Символы.ПС; + КонецЕсли; + + Если ПустаяСтрока(ОписаниеОшибки) Тогда + Возврат Истина; + Иначе + ОписаниеОшибки = Лев(ОписаниеОшибки, СтрДлина(ОписаниеОшибки) - 1); + Возврат Ложь; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область ПродажаСВыдачейНаличных + +// Выполняет проверку корректности заполнения банковского платежного агента +// +// Параметры: +// КонтекстОперации - см. КонтекстПродажаСВыдачейНаличных. +// ОписаниеОшибки - Строка - Описание ошибки параметра операции +// +Процедура ПроверитьКорректностьБанковскогоАгента(КонтекстОперации, ОписаниеОшибки) + + ПараметрыЧекаВыдачи = КонтекстОперации.ПараметрыФискализацииЧекаВыдачи; + Если ПараметрыЧекаВыдачи.ПозицииЧека.Количество()=0 Тогда + ТекстОшибки = НСтр("ru = 'Не задана строка операции выдачи в позиции чека.'"); + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + Иначе + ДанныеАгентаПозиция = ПараметрыЧекаВыдачи.ПозицииЧека[0].ДанныеАгента; // см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеАгента + ДанныеАгентаШапка = ПараметрыЧекаВыдачи.ДанныеАгента; // см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеАгента + + Если Не ЗначениеЗаполнено(ДанныеАгентаПозиция.ОператорПеревода.Телефон) + И Не ЗначениеЗаполнено(ДанныеАгентаШапка.ОператорПеревода.Телефон) Тогда + ТекстОшибки = НСтр("ru = 'Не установлен телефон оператора перевода банковского платежного агента (эквайера).'") ; + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДанныеАгентаПозиция.ОператорПеревода.Наименование) + И Не ЗначениеЗаполнено(ДанныеАгентаШапка.ОператорПеревода.Наименование) Тогда + ТекстОшибки = НСтр("ru = 'Не установлено наименование оператора перевода банковского платежного агента (эквайера).'") ; + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДанныеАгентаПозиция.ОператорПеревода.Адрес) + И Не ЗначениеЗаполнено(ДанныеАгентаШапка.ОператорПеревода.Адрес) Тогда + ТекстОшибки = НСтр("ru = 'Не установлен адрес оператора перевода банковского платежного агента (эквайера).'") ; + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДанныеАгентаПозиция.ОператорПеревода.ИНН) + И Не ЗначениеЗаполнено(ДанныеАгентаШапка.ОператорПеревода.ИНН) Тогда + ТекстОшибки = НСтр("ru = 'Не установлен ИНН оператора перевода банковского платежного агента (эквайера).'") ; + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДанныеАгентаПозиция.ПлатежныйАгент.Телефон) + И Не ЗначениеЗаполнено(ДанныеАгентаШапка.ПлатежныйАгент.Телефон) Тогда + ТекстОшибки = НСтр("ru = 'Не установлен телефон банковского платежного агента (организации).'") ; + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДанныеАгентаПозиция.ПлатежныйАгент.Операция) + И Не ЗначениеЗаполнено(ДанныеАгентаШапка.ПлатежныйАгент.Операция) Тогда + ТекстОшибки = НСтр("ru = 'Не установлена операция банковского платежного агента.'") ; + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Выполняет проверку допустимости выполнения операции +// +// Параметры: +// КонтекстОперации - см. КонтекстПродажаСВыдачейНаличных. +// ОписаниеОшибки - Строка - Описание ошибки параметра операции +// +// Возвращаемое значение: +// Булево - Возвращает истина если переданные параметры операции корректны +Функция ПродажаСВыдачейНаличныхДопустима(КонтекстОперации, ОписаниеОшибки) + + КратностьСуммыВыдачиНаличных = 100; + + ПараметрыВыполненияЭквайринговойОперации = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации; + ПараметрыФискализацииЧекаВыдачи = КонтекстОперации.ПараметрыФискализацииЧекаВыдачи; + ТипТранзакции = ПараметрыВыполненияЭквайринговойОперации.ТипТранзакции; + СуммаОперации = ПараметрыВыполненияЭквайринговойОперации.СуммаОперации; + СуммаНаличных = ПараметрыВыполненияЭквайринговойОперации.СуммаНаличных; + ПодключенноеУстройство = КонтекстОперации.ПодключенныйЭТ; + + Отказ = Ложь; + МенеджерОборудованияВызовСервераПереопределяемый.ПроверитьДостаточностьНаличныхСредств( + КонтекстОперации.ИдентификаторККТ, + СуммаНаличных, + Отказ); + Если Отказ Тогда + ТекстОшибки = НСтр("ru = 'В ККТ не достаточно денежных средств.'"); + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + // проверка кратности суммы выдачи наличных + Если СуммаНаличных % КратностьСуммыВыдачиНаличных <> 0 Тогда + ТекстОшибки = СтрШаблон(НСтр("ru = 'Сумма выдачи наличных должна быть кратной %1.'"), КратностьСуммыВыдачиНаличных); + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + Если ПараметрыФискализацииЧекаВыдачи = Неопределено Тогда + ТекстОшибки = НСтр("ru = 'Не заданы параметры фискализации чека выдачи наличных.'"); + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + // Используется подсистема "Платежные системы" + Если Не ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + ТекстОшибки = НСтр("ru = 'Подсистема ""Платежные системы"" не подключена.'"); + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + Если ТипТранзакции <> "PayByPaymentCardWithCashWithdrawal" Тогда + ТекстОшибки = НСтр("ru = 'Операция %1 не поддерживается данным режимом.'"); + ТекстОшибки = СтрШаблон(ТекстОшибки, ТипТранзакции); + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + Если СуммаОперации <= 0 Тогда + ТекстОшибки = НСтр("ru = 'Сумма операции должна быть больше 0.'"); + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + ПроверитьКорректностьБанковскогоАгента(КонтекстОперации, ОписаниеОшибки); + + Если ПустаяСтрока(ОписаниеОшибки) Тогда + Возврат Истина; + Иначе + ОписаниеОшибки = Лев(ОписаниеОшибки, СтрДлина(ОписаниеОшибки) - 1); + Возврат Ложь; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +// Заполняет параметры выполнения эквайринговой операции на основании параметров фискальной операции +// +// Параметры: +// КонтекстОперации - См. КонтекстПродажаСВыдачейНаличных +Процедура ПодготовитьПараметрыЭквайринговойОперации(КонтекстОперации) + + ПараметрыВыполненияЭквайринговойОперации = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации; + ПараметрыФискализацииЧека = КонтекстОперации.ПараметрыФискализацииЧека; + + Если ПараметрыВыполненияЭквайринговойОперации = Неопределено Тогда + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + ПараметрыВыполненияЭквайринговойОперации = МодульОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации(); + КонецЕсли; + КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации = ПараметрыВыполненияЭквайринговойОперации; + + СуммаОперации = 0; + ТаблицаОплат = ПараметрыФискализацииЧека.ТаблицаОплат; + Для Каждого СтрокаОплаты Из ТаблицаОплат Цикл + Если СтрокаОплаты.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно") Тогда + СуммаОперации = СуммаОперации + СтрокаОплаты.Сумма; + КонецЕсли; + КонецЦикла; + + Если КонтекстОперации.ТипОперации = "ПродажаСВыдачейНаличных" Тогда + СуммаВыдачи = КонтекстОперации.СуммаВыдачи; + ПараметрыВыполненияЭквайринговойОперации.СуммаНаличных = СуммаВыдачи; + ПараметрыВыполненияЭквайринговойОперации.СуммаОперации = СуммаОперации; + ИначеЕсли КонтекстОперации.ТипОперации = "ПокупкаСЗачислением" Тогда + ПараметрыВыполненияЭквайринговойОперации.СуммаОперации = СуммаОперации; + ИначеЕсли КонтекстОперации.ТипОперации = "ФискализацияЧекаСОплатой" Тогда + ПараметрыВыполненияЭквайринговойОперации.СуммаОперации = СуммаОперации; + Иначе + ВызватьИсключение СтрШаблон(НСтр("ru = 'Неизвестный тип операции %1'"), КонтекстОперации.ТипОперации); + КонецЕсли; + + ПараметрыВыполненияЭквайринговойОперации.ДокументОснование = ПараметрыФискализацииЧека.ДокументОснование; + ПараметрыВыполненияЭквайринговойОперации.РеквизитыКартыQR = КонтекстОперации.РеквизитыКартыQR; + ПараметрыВыполненияЭквайринговойОперации.ИдентификаторЗапроса = Новый УникальныйИдентификатор(); + + КонецЕсли; + + Если КонтекстОперации.ТипОперации = "ПродажаСВыдачейНаличных" Тогда + ПараметрыВыполненияЭквайринговойОперации.ТипТранзакции = "PayByPaymentCardWithCashWithdrawal"; + ИначеЕсли КонтекстОперации.ТипОперации = "ПокупкаСЗачислением" Тогда + ПараметрыВыполненияЭквайринговойОперации.ТипТранзакции = "PurchaseWithEnrollment"; + ИначеЕсли КонтекстОперации.ТипОперации = "ФискализацияЧекаСОплатой" Тогда + ПараметрыВыполненияЭквайринговойОперации.ТипТранзакции = "AuthorizeSales"; + Иначе + ВызватьИсключение СтрШаблон(НСтр("ru = 'Неизвестный тип операции %1'"), КонтекстОперации.ТипОперации); + КонецЕсли; + + +КонецПроцедуры + +// Подготавливает контекст пакетной операции для выполнения +// +// Параметры: +// КонтекстОперации - См. КонтекстПродажаСВыдачейНаличных +// ДополнительныеПараметры - Структура - дополнительные параметры переданные при запуске пакета +Процедура ПодготовитьКонтекстПакетнойОперации(КонтекстОперации, ДополнительныеПараметры) + + Если Не ЗначениеЗаполнено(ДополнительныеПараметры) Тогда + ДополнительныеПараметры = Новый Структура(); + КонецЕсли; + КонтекстОперации.ДополнительныеПараметры = ДополнительныеПараметры; + + // запомнить состояние ОставитьПодключенным переданные пользователем + Если ДополнительныеПараметры.Свойство("ОставитьПодключенным") Тогда + КонтекстОперации.ОставитьПодключенным = ДополнительныеПараметры.ОставитьПодключенным; + КонецЕсли; + + ПодготовитьПараметрыЭквайринговойОперации(КонтекстОперации); + + ПараметрыВыполненияЭквайринговойОперации = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации; + КонтекстОперации.СуммаОперации = ПараметрыВыполненияЭквайринговойОперации.СуммаОперации; + + // оставить подключенным оборудование, на все время выполнения пакета + ДополнительныеПараметры.Вставить("ОставитьПодключенным", Истина); +КонецПроцедуры + +// Определяет существует ли возможность печати короткого слип-чека в теле фискального +// +// Параметры: +// КонтекстОперации - См. КонтекстПродажаСВыдачейНаличных +Процедура ОпределитьВозможностьПечатиСлипЧекаВТелеФискального(КонтекстОперации) + + ПодключенноеУстройство = КонтекстОперации.ПодключенныйЭТ; + + // если не установлено в параметрах принудительная печать слип-чека + Если КонтекстОперации.СлипЧекВТелеФискального = Неопределено Тогда + // тогда печатать слип чек в зависимости от устройства + Если ПодключенноеУстройство.КороткиеСлипЧеки И Не ПодключенноеУстройство.ПечатьКвитанцийНаТерминале Тогда + КонтекстОперации.СлипЧекВТелеФискального = Истина; + Иначе + КонтекстОперации.СлипЧекВТелеФискального = Ложь; + КонецЕсли; + КонецЕсли; + + Если КонтекстОперации.СлипЧекВТелеФискального Тогда + КонтекстОперации.ДополнительныеПараметры.Вставить("ИспользоватьПечатающееУстройство", Ложь); + КонецЕсли; + +КонецПроцедуры + +// Отключает оборудование используемое в пакете (ККТ и ЭТ) +// +// Параметры: +// КонтекстОперации - см. КонтекстЭквайринговойОперацииСФискализацией +Процедура ОтключитьОборудованиеПакета(КонтекстОперации) + + // вернуть исходное значение ОставитьПодключенным + ДополнительныеПараметры = КонтекстОперации.ДополнительныеПараметры; + Если ДополнительныеПараметры.Свойство("ОставитьПодключенным") Тогда + ДополнительныеПараметры.ОставитьПодключенным = КонтекстОперации.ОставитьПодключенным; + КонецЕсли; + ОтключатьОборудование = Не КонтекстОперации.ОставитьПодключенным; + + // Требуется отключить оборудование, т.к. во время операции отключение оборудования было отменено + ПодключенноеУстройствоККТ = МенеджерОборудованияКлиент.ПолучитьПодключенноеУстройство(КонтекстОперации.ИдентификаторККТ); + Если ПодключенноеУстройствоККТ <> Неопределено Тогда + Если ОтключатьОборудование Или ПодключенноеУстройствоККТ.СетевоеОборудование Тогда + МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПоИдентификатору( + , + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторККТ); + КонецЕсли; + КонецЕсли; + + ПодключенноеУстройствоЭТ = МенеджерОборудованияКлиент.ПолучитьПодключенноеУстройство(КонтекстОперации.ИдентификаторЭТ); + Если ПодключенноеУстройствоЭТ <> Неопределено Тогда + Если ОтключатьОборудование Или ПодключенноеУстройствоЭТ.СетевоеОборудование Тогда + МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПоИдентификатору( + , + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторЭТ); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Формирует результат пакета операций и вызывает оповещение пользователя при завершении если оно было задано. +// +// Параметры: +// Результат - Булево - флаг того, что пакет операций завершился успешно +// ОписаниеОшибки - Строка - Описание ошибки, которое будет передано в оповещении +// КонтекстОперации - см. КонтекстЭквайринговойОперацииСФискализацией +Процедура ЗавершитьПакетОпераций(Результат, ОписаниеОшибки, КонтекстОперации) + + ТипОперации = КонтекстОперации.ТипОперации; + ОповещениеЗавершения = КонтекстОперации.ОповещениеЗавершения; + + Если КонтекстОперации.РезультатФискализацииЧека <> Неопределено + И КонтекстОперации.РезультатФискализацииЧека.Результат Тогда + ИдентификаторЗапроса = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации.ИдентификаторЗапроса; + ИдентификаторФискальнойЗаписи = КонтекстОперации.ПараметрыФискализацииЧека.ИдентификаторФискальнойЗаписи; + ЛогированиеОперацийБПОСлужебныйВызовСервера.УстановитьИдентификаторФискальнойЗаписи(ИдентификаторЗапроса, ИдентификаторФискальнойЗаписи); + КонецЕсли; + + ОтключитьОборудованиеПакета(КонтекстОперации); + Если ОповещениеЗавершения <> Неопределено Тогда + Если ТипОперации = "ФискализацияЧекаСОплатой" Тогда + РезультатОперации = РезультатЭквайринговойОперацииСФискализацией(Результат, ОписаниеОшибки, КонтекстОперации); + ИначеЕсли ТипОперации = "ПокупкаСЗачислением" Тогда + РезультатОперации = РезультатЭквайринговойОперацииСФискализацией(Результат, ОписаниеОшибки, КонтекстОперации); + ИначеЕсли ТипОперации = "ПродажаСВыдачейНаличных" Тогда + РезультатОперации = РезультатПродажаСВыдачейНаличных(Результат, ОписаниеОшибки, КонтекстОперации); + Иначе + ВызватьИсключение НСтр("ru = 'Неизвестный тип операции.'"); + КонецЕсли; + ВыполнитьОбработкуОповещения(ОповещениеЗавершения, РезультатОперации); + КонецЕсли; +КонецПроцедуры + +#Область ФормированиеСлипЧекаВТелеФискального + +// Возвращает структуру для формирования шаблона слип-чека +// +// Возвращаемое значение: +// Структура: +// * ПараметрыФискализацииЧека - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - См. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * РезультатВыполненияЭквайринговойОперации - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатАварийнойОтменыОперации - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * ДополнительныеПараметры - Структура - Дополнительные параметры переданные ранее в процедуру +// "НачатьФискализациюЧекаСОплатойКартой" +Функция ПараметрыФормированияШаблонаСлипЧека() + + Результат = Новый Структура(); + Результат.Вставить("ПараметрыФискализацииЧека", Неопределено); + Результат.Вставить("ПараметрыВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("РезультатВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("РезультатФискализацииЧека", Неопределено); + Результат.Вставить("РезультатАварийнойОтменыОперации", Неопределено); + Результат.Вставить("ДополнительныеПараметры", Неопределено); + Возврат Результат; + +КонецФункции + +// Формирует шаблон слип-чека и печатает его как текстовый документ на ККТ +// +// Параметры: +// Тип - Строка - Тип слип-чека +// КонтекстОперации - см. КонтекстЭквайринговойОперацииСФискализацией +Процедура ВывестиСлипЧекКакТекстовыйДокумент(Тип, КонтекстОперации) + + Оповещение = Новый ОписаниеОповещения("ПакетнаяОбработка_ПечатьТекстаЗавершение", + ЭтотОбъект, + КонтекстОперации); + Если Не КонтекстОперации.СлипЧекВТелеФискального Тогда + ВыполнитьОбработкуОповещения(Оповещение, Неопределено); + Возврат; + КонецЕсли; + + ПараметрыСлипЧека = КонтекстОперации.РезультатВыполненияЭквайринговойОперации; + Если КонтекстОперации.ТипОперации = "ФискализацияЧекаСОплатой" Тогда + ПараметрыФискализацииЧека = КонтекстОперации.ПараметрыФискализацииЧека; + РезультатФискализацииЧека = КонтекстОперации.РезультатФискализацииЧека; + ИначеЕсли КонтекстОперации.ТипОперации = "ПродажаСВыдачейНаличных" Тогда + ПараметрыФискализацииЧека = КонтекстОперации.ПараметрыФискализацииЧекаВыдачи; + РезультатФискализацииЧека = КонтекстОперации.РезультатФискализацииЧекаВыдачи; + Иначе + ВызватьИсключение НСтр("ru = 'Неизвестный тип операции.'"); + КонецЕсли; + + // дать возможность пользователю поменять текст слип чека + СтандартнаяОбработка = Истина; + ДанныеДляШаблона = ПараметрыФормированияШаблонаСлипЧека(); + ДанныеДляШаблона.ПараметрыФискализацииЧека = ПараметрыФискализацииЧека; + ДанныеДляШаблона.ПараметрыВыполненияЭквайринговойОперации = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации; + ДанныеДляШаблона.РезультатВыполненияЭквайринговойОперации = КонтекстОперации.РезультатВыполненияЭквайринговойОперации; + ДанныеДляШаблона.РезультатФискализацииЧека = РезультатФискализацииЧека; + ДанныеДляШаблона.РезультатАварийнойОтменыОперации = КонтекстОперации.РезультатАварийнойОтменыОперации; + ДанныеДляШаблона.ДополнительныеПараметры = КонтекстОперации.ДополнительныеПараметры; + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + Текст = МодульОборудованиеПлатежныеСистемыКлиентСервер.ТекстСлипЧекаПоУмолчанию( + ДанныеДляШаблона.РезультатВыполненияЭквайринговойОперации, Ложь); + Иначе + Текст = ""; + КонецЕсли; + + МенеджерОборудованияКлиентПереопределяемый.СформироватьШаблонСлипЧека(Тип, ДанныеДляШаблона, Текст, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + // запомнить текст последнего слип-чека в глобальной переменной + Если Не ПустаяСтрока(Текст) И ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиент"); + МодульОборудованиеПлатежныеСистемыКлиент.УстановитьПоследнийСлипЧек(Текст); + КонецЕсли; + + ПараметрыОперации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПечатиТекста(Текст); + НачатьПечатьТекста(Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторККТ, + ПараметрыОперации, + КонтекстОперации.ДополнительныеПараметры); + +КонецПроцедуры + +// Получает текст слип-чека из предопределенной процедуры и вставляет его в тело фискального чека, +// так же записывает текст последнего слип-чека в глобальную переменную +// +// Параметры: +// КонтекстОперации - см. КонтекстЭквайринговойОперацииСФискализацией +Процедура ВставитьСлипЧекВТелоФискальногоЧека(КонтекстОперации) + + Если Не КонтекстОперации.СлипЧекВТелеФискального Тогда + Возврат; + КонецЕсли; + + // сформировать тест слип чека по умолчанию + Тип = "Обычный"; + Если КонтекстОперации.ТипОперации = "ФискализацияЧекаСОплатой" Тогда + ПараметрыФискализацииЧека = КонтекстОперации.ПараметрыФискализацииЧека; + ИначеЕсли КонтекстОперации.ТипОперации = "ПокупкаСЗачислением" Тогда + ПараметрыФискализацииЧека = КонтекстОперации.ПараметрыФискализацииЧека; + ИначеЕсли КонтекстОперации.ТипОперации = "ПродажаСВыдачейНаличных" Тогда + ПараметрыФискализацииЧека = КонтекстОперации.ПараметрыФискализацииЧека; + Иначе + ВызватьИсключение НСтр("ru = 'Неизвестный тип операции.'"); + КонецЕсли; + + // дать возможность пользователю поменять текст слип чека + СтандартнаяОбработка = Истина; + ДанныеДляШаблона = ПараметрыФормированияШаблонаСлипЧека(); + ДанныеДляШаблона.ПараметрыФискализацииЧека = ПараметрыФискализацииЧека; + ДанныеДляШаблона.ПараметрыВыполненияЭквайринговойОперации = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации; + ДанныеДляШаблона.РезультатВыполненияЭквайринговойОперации = КонтекстОперации.РезультатВыполненияЭквайринговойОперации; + ДанныеДляШаблона.ДополнительныеПараметры = КонтекстОперации.ДополнительныеПараметры; + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + Текст = МодульОборудованиеПлатежныеСистемыКлиентСервер.ТекстСлипЧекаПоУмолчанию( + ДанныеДляШаблона.РезультатВыполненияЭквайринговойОперации); + Иначе + Текст = ""; + КонецЕсли; + + МенеджерОборудованияКлиентПереопределяемый.СформироватьШаблонСлипЧека(Тип, ДанныеДляШаблона, Текст, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + // добавить текст слип чека в тело фискального чека + Если ПустаяСтрока(ПараметрыФискализацииЧека.ТекстКороткогоСлипЧека) Тогда + ПараметрыФискализацииЧека.ТекстКороткогоСлипЧека = Текст; + КонецЕсли; + + // запомнить текст последнего слип-чека в глобальной переменной + Если Не ПустаяСтрока(Текст) И ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиент"); + МодульОборудованиеПлатежныеСистемыКлиент.УстановитьПоследнийСлипЧек(Текст); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация.xml b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация.xml new file mode 100644 index 0000000..f6cda89 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация + + + ru + Оборудование чекопечатающие устройства клиент локализация + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация/Ext/Module.bsl b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация/Ext/Module.bsl new file mode 100644 index 0000000..a319601 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация/Ext/Module.bsl @@ -0,0 +1,28 @@ + +#Область ПрограммныйИнтерфейс + +#Область ФормаНастройкиРегистрацииККТ + +// Выполняет открытие формы настроек для регистрации ККТ +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения +// ПараметрыОткрытия - см. ОборудованиеЧекопечатающиеУстройстваКлиент.ПараметрыФормаНастройкиРегистрацииККТ. +Процедура ОткрытьФормуНастройкиРегистрацииККТ(ОповещениеПриЗавершении, ПараметрыОткрытия) Экспорт + + // ++ Локализация + ОткрытьФорму("ОбщаяФорма.НастройкаРегистрацииККТ", + ПараметрыОткрытия, + , + , + , + , + ОповещениеПриЗавершении, + РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + // -- Локализация + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСервер.xml b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСервер.xml new file mode 100644 index 0000000..f17ef8b --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеЧекопечатающиеУстройстваКлиентСервер + + + ru + Оборудование чекопечатающие устройства клиент сервер + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСервер/Ext/Module.bsl b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..0c42fd9 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСервер/Ext/Module.bsl @@ -0,0 +1,2066 @@ + +#Область ПрограммныйИнтерфейс + +// Проверяет соответствие ИНН требованиям. +// +// Параметры: +// ИНН - Строка - проверяемый индивидуальный номер налогоплательщика. +// ЭтоЮридическоеЛицо - Булево - признак, является ли владелец ИНН юридическим лицом. +// ТекстСообщения - Строка - текст сообщения о найденных ошибках. +// +// Возвращаемое значение: +// Булево - Истина, если соответствует. +// +Функция ИННСоответствуетТребованиям(Знач ИНН, ЭтоЮридическоеЛицо, ТекстСообщения) Экспорт + + СоответствуетТребованиям = Истина; + ТекстСообщения = ""; + + ИНН = СокрЛП(ИНН); + ДлинаИНН = СтрДлина(ИНН); + + Если ЭтоЮридическоеЛицо = Неопределено Тогда + ТекстСообщения = ТекстСообщения + НСтр("ru = 'Не определен тип владельца ИНН'"); + Возврат Ложь; + КонецЕсли; + + Если НЕ ОбщегоНазначенияБПОКлиентСервер.ТолькоЦифрыВСтроке(ИНН) Тогда + СоответствуетТребованиям = Ложь; + ТекстСообщения = ТекстСообщения + НСтр("ru = 'ИНН должен состоять только из цифр'"); + КонецЕсли; + + Если ЭтоЮридическоеЛицо И ДлинаИНН <> 10 Тогда + СоответствуетТребованиям = Ложь; + ТекстСообщения = ТекстСообщения + ?(ЗначениеЗаполнено(ТекстСообщения), Символы.ПС, "") + + НСтр("ru = 'ИНН юридического лица должен состоять из 10 цифр'"); + ИначеЕсли НЕ ЭтоЮридическоеЛицо И ДлинаИНН <> 12 Тогда + СоответствуетТребованиям = Ложь; + ТекстСообщения = ТекстСообщения + ?(ЗначениеЗаполнено(ТекстСообщения), Символы.ПС, "") + + НСтр("ru = 'ИНН физического лица должен состоять из 12 цифр'"); + КонецЕсли; + + Если СоответствуетТребованиям Тогда + Если ЭтоЮридическоеЛицо Тогда + КонтрольнаяСумма = 0; + Для Индекс = 1 По 9 Цикл + Если Индекс = 1 Тогда + Множитель = 2; + ИначеЕсли Индекс = 2 Тогда + Множитель = 4; + ИначеЕсли Индекс = 3 Тогда + Множитель = 10; + ИначеЕсли Индекс = 4 Тогда + Множитель = 3; + ИначеЕсли Индекс = 5 Тогда + Множитель = 5; + ИначеЕсли Индекс = 6 Тогда + Множитель = 9; + ИначеЕсли Индекс = 7 Тогда + Множитель = 4; + ИначеЕсли Индекс = 8 Тогда + Множитель = 6; + ИначеЕсли Индекс = 9 Тогда + Множитель = 8; + КонецЕсли; + Цифра = Число(Сред(ИНН, Индекс, 1)); + КонтрольнаяСумма = КонтрольнаяСумма + Цифра * Множитель; + КонецЦикла; + + КонтрольныйРазряд = (КонтрольнаяСумма %11) %10; + Если КонтрольныйРазряд <> Число(Сред(ИНН, 10, 1)) Тогда + СоответствуетТребованиям = Ложь; + ТекстСообщения = ТекстСообщения + ?(ЗначениеЗаполнено(ТекстСообщения), Символы.ПС, "") + + НСтр("ru = 'Контрольное число для ИНН не совпадает с рассчитанным'"); + КонецЕсли; + Иначе + КонтрольнаяСумма11 = 0; + КонтрольнаяСумма12 = 0; + Для Индекс = 1 По 11 Цикл + // Расчет множителя для 11-го и 12-го разрядов. + Если Индекс = 1 Тогда + Множитель11 = 7; + Множитель12 = 3; + ИначеЕсли Индекс = 2 Тогда + Множитель11 = 2; + Множитель12 = 7; + ИначеЕсли Индекс = 3 Тогда + Множитель11 = 4; + Множитель12 = 2; + ИначеЕсли Индекс = 4 Тогда + Множитель11 = 10; + Множитель12 = 4; + ИначеЕсли Индекс = 5 Тогда + Множитель11 = 3; + Множитель12 = 10; + ИначеЕсли Индекс = 6 Тогда + Множитель11 = 5; + Множитель12 = 3; + ИначеЕсли Индекс = 7 Тогда + Множитель11 = 9; + Множитель12 = 5; + ИначеЕсли Индекс = 8 Тогда + Множитель11 = 4; + Множитель12 = 9; + ИначеЕсли Индекс = 9 Тогда + Множитель11 = 6; + Множитель12 = 4; + ИначеЕсли Индекс = 10 Тогда + Множитель11 = 8; + Множитель12 = 6; + ИначеЕсли Индекс = 11 Тогда + Множитель11 = 0; + Множитель12 = 8; + КонецЕсли; + + Цифра = Число(Сред(ИНН, Индекс, 1)); + КонтрольнаяСумма11 = КонтрольнаяСумма11 + Цифра * Множитель11; + КонтрольнаяСумма12 = КонтрольнаяСумма12 + Цифра * Множитель12; + + КонецЦикла; + + КонтрольныйРазряд11 = (КонтрольнаяСумма11 %11) %10; + КонтрольныйРазряд12 = (КонтрольнаяСумма12 %11) %10; + + Если КонтрольныйРазряд11 <> Число(Сред(ИНН,11,1)) ИЛИ КонтрольныйРазряд12 <> Число(Сред(ИНН,12,1)) Тогда + СоответствуетТребованиям = Ложь; + ТекстСообщения = ТекстСообщения + ?(ЗначениеЗаполнено(ТекстСообщения), Символы.ПС, "") + + НСтр("ru = 'Контрольное число для ИНН не совпадает с рассчитанным'"); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Возврат СоответствуетТребованиям; + +КонецФункции + +#Область Конструкторы + +// Заполняет структуру общих параметров фискального накопителя. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыФискальногоНакопителяОбщие() Экспорт + + Параметры = Новый Структура(); + // ФФД 1.0 + Параметры.Вставить("РегистрационныйНомерККТ"); // Регистрационный номер ККТ + Параметры.Вставить("ЗаводскойНомерККТ"); // Заводской номер ККТ + Параметры.Вставить("ЗаводскойНомерФН"); // Заводской номер ФН + Параметры.Вставить("ВерсияФФДФН"); // Версия ФФД ФН (одно из следующих значений "1.0","1.1") + Параметры.Вставить("ВерсияФФДККТ"); // Версия ФФД ККТ (одно из следующих значений "1.0","1.05","1.1") + + Параметры.Вставить("ОрганизацияНазвание"); // Название организации + Параметры.Вставить("ОрганизацияИНН"); // ИНН организация + + Параметры.Вставить("АдресПроведенияРасчетов"); // Адрес проведения расчетов + Параметры.Вставить("МестоПроведенияРасчетов"); // Место проведения расчетов + + Параметры.Вставить("КодыСистемыНалогообложения"); // Коды системы налогообложения + + Параметры.Вставить("ПризнакАвтономногоРежима" , Ложь); // Признак автономного режима + Параметры.Вставить("ПризнакШифрованиеДанных" , Ложь); // Признак шифрование данных + Параметры.Вставить("ПризнакРасчетовЗаУслуги" , Ложь); // Признак расчетов за услуги + Параметры.Вставить("ПродажаПодакцизногоТовара" , Ложь); // Продажа подакцизного товара + + Параметры.Вставить("ПроведенияАзартныхИгр" , Ложь); // Признак проведения азартных игр + Параметры.Вставить("ПроведенияЛотерей" , Ложь); // Признак проведения лотереи + Параметры.Вставить("ПризнакиАгента"); // Коды признаков агента + Параметры.Вставить("ПризнакФормированияБСО" , Ложь); // Признак формирования АС БСО + + Параметры.Вставить("ПризнакРасчетовТолькоВИнтернет", Ложь); // Признак ККТ для расчетов только в Интернет + Параметры.Вставить("УстановкаПринтераВАвтомате" , Ложь); // Признак установки принтера в автомате + Параметры.Вставить("ПризнакАвтоматическогоРежима" , Ложь); // Признак автоматического режима + Параметры.Вставить("НомерАвтоматаДляАвтоматическогоРежима"); // Номер автомата для автоматического режима + Параметры.Вставить("ОрганизацияОФДИНН"); // Название организации ОФД + Параметры.Вставить("ОрганизацияОФДНазвание"); // ИНН организации ОФД + + Параметры.Вставить("ОтправительEmail"); // Адрес электронной почты отправителя чека. + Параметры.Вставить("АдресСайтаФНС"); // Адрес сайта уполномоченного органа (ФНС). + // ФФД 1.2 + Параметры.Вставить("ПроведенияРасчетаВИнтернет" , Ложь); // Признак ККТ для расчетов в Интернет + Параметры.Вставить("ПродажаМаркированныхТоваров" , Ложь); // Признак ККТ торговли товарами, подлежащими обязательной маркировке средствами идентификации + Параметры.Вставить("ПризнакПримененияЛомбардами" , Ложь); // Признак применения ККТ при осуществлении ломбардами кредитования граждан + Параметры.Вставить("ПризнакДеятельностиПоСтрахованию" , Ложь); // Признак применения при осуществлении деятельности по страхованию + // ФФД 1.2 - Приказ ФНС России от 12.04.2023 N ЕД-7-20/239@ + Параметры.Вставить("ПризнакАвтоматическогоТорговогоАвтомата" , Ложь); // Признак применения в автоматическом торговом автомате + Параметры.Вставить("ПризнакОказанииУслугОбщественногоПитания" , Ложь); // Признак применения при оказании услуг общественного питания + Параметры.Вставить("ПризнакОптовойТорговлиСОрганизациями" , Истина); // Признак применения о оптовой торговле с организациями и ИП + + Возврат Параметры; + +КонецФункции + +// Заполняет структуру параметров регистрации ККТ. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыРегистрацииККТ() Экспорт + + Параметры = ПараметрыФискальногоНакопителяОбщие(); + Параметры.Вставить("ПризнакФискализации"); // Признак регистрации фискального накопителя. + Параметры.Вставить("НомерДокументаФискализации"); // Номер документа регистрация фискального накопителя. + Параметры.Вставить("ДатаВремяФискализации"); // Дата и время операции регистрации фискального накопителя. + Возврат Параметры; + +КонецФункции + +// Заполняет структуру параметров Фискализации ФН. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОперацииФискализацииНакопителя() Экспорт + + Параметры = ПараметрыФискальногоНакопителяОбщие(); + + Параметры.Вставить("КодПричиныПеререгистрации"); + Параметры.Вставить("КодыПричинИзмененияСведений"); + Параметры.Вставить("ТипОперации", 1); + + Параметры.Вставить("Кассир" , НСтр("ru='Администратор'")); // Строка,Обязательно - ФИО лица и должность, осуществившего расчет с покупателем (клиентом), оформившего кассовый чек. + Параметры.Вставить("КассирИНН" , Неопределено); // Строка,Необязательно - Идентификационный номер налогоплательщика кассира, при наличии. + + Возврат Параметры; + +КонецФункции + +// Заполняет структуру параметров выполнения операции. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыВыполненияОперации() Экспорт; + + ПараметрыОперации = Новый Структура(); + ПараметрыОперации.Вставить("Кассир" , НСтр("ru='Администратор'")); // ФИО лица и должность, осуществившего операцию. + ПараметрыОперации.Вставить("КассирИНН" , Неопределено); // Идентификационный номер налогоплательщика кассира, при наличии. + Возврат ПараметрыОперации; + +КонецФункции + +// Заполняет структуру данных агента. +// +// Возвращаемое значение: +// Структура: +// * ОператорПоПриемуПлатежей - Структура: +// ** Телефон - Неопределено - +// * ОператорПеревода - Структура: +// ** Телефон - Строка - +// ** Наименование - Строка - +// ** Адрес - Строка - +// ** ИНН - Строка - +// * ПлатежныйАгент - Структура: +// ** Операция - Строка - +// ** Телефон - Строка - +// +Функция ПараметрыДанныеАгента() Экспорт + + // ФФД - Значения реквизита «данные агента» (тег 1223) указаны в таблице 22. + Параметры = Новый Структура(); + + ПлатежныйАгент = Новый Структура(); + ПлатежныйАгент.Вставить("Операция", Неопределено); // Строка - Операция платежного агента. + ПлатежныйАгент.Вставить("Телефон" , Неопределено); // Строка - Телефон платежного агента. В формате +{Ц}. + Параметры.Вставить("ПлатежныйАгент", ПлатежныйАгент); + + ОператорПеревода = Новый Структура(); + ОператорПеревода.Вставить("Телефон" , Неопределено); // Строка - Телефон оператора перевода. В формате +{Ц}. + ОператорПеревода.Вставить("Наименование", Неопределено); // Строка - Наименование оператора перевода. + ОператорПеревода.Вставить("Адрес" , Неопределено); // Строка - Адрес оператора перевода. + ОператорПеревода.Вставить("ИНН" , Неопределено); // Строка - ИНН оператора перевода. + Параметры.Вставить("ОператорПеревода", ОператорПеревода); + + ОператорПоПриемуПлатежей = Новый Структура(); + ОператорПоПриемуПлатежей.Вставить("Телефон", Неопределено); // Строка - Телефон оператора по приему платежей. В формате +{Ц}. + Параметры.Вставить("ОператорПоПриемуПлатежей", ОператорПоПриемуПлатежей); + + Возврат Параметры; + +КонецФункции + +// Заполняет структуру данных поставщика. +// +// Возвращаемое значение: +// Структура - Описание: +// * ИНН - Строка +// * Наименование - Строка +// * Телефон - Строка +// +Функция ПараметрыДанныеПоставщика() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("Телефон"); // Строка - Телефон поставщика. В формате +{Ц}. + Параметры.Вставить("Наименование"); // Строка - Наименование поставщика. + Параметры.Вставить("ИНН"); // Строка - ИНН поставщика. + Возврат Параметры; + +КонецФункции + +// Заполняет структуру данных кода товарной номенклатуры. +// +// Возвращаемое значение: +// Структура - Описание: +// * ЗначениеКодаТовара - Строка +// * ТипКодаТовара - Строка +// * РеквизитКодаТовара - Строка +// * СерийныйНомер - Строка +// * ГлобальныйИдентификаторТорговойЕдиницы - Строка +// * КонтрольныйИдентификационныйЗнак - СТрока +// * ТипМаркировки - ПеречислениеСсылка.ТипыМаркировкиККТ - +// +Функция ПараметрыДанныеКодаТоварнойНоменклатуры() Экспорт + + Параметры = Новый Структура(); + + // Формирование тэга 1162, для ФФД 1.05, 1.1 + Параметры.Вставить("ТипМаркировки"); // Перечисление.ТипыМаркировкиККТ, Необязательно - Тип маркировки. + // Ранее в рамках пилотных проектов (в 2017-2019) по маркировке и регистрации выбытия контрольных марок(КМ) + // через ККТ для каждого вида маркировки ФНС предоставляла отдельный алгоритм для кодирования тега 1162 + // содержащий информацию о КМ. Именно для этого было создано данное перечисление - ТипыМаркировкиККТ. + // Но в соответствии с приказом ФНС от 29.08.2019 № ММВ-7-20/434@ "О внесении изменений в приложение №2 + // к приказу Федеральной налоговой службы от 21.03.2017 № ММВ-7-20/229@“ зарегистрированному 25.12.2019 №56978 + // и вступившему в силу с 01.03.2020г. алгоритм кодирования тега 1162 стал единым для всех типов маркировки. + // Таким образом, данное перечисление и атрибут устарели. Оставлено для совместимости. + Параметры.Вставить("КонтрольныйИдентификационныйЗнак"); // Строка,Необязательно - Контрольный идентификационный знак (КиЗ). + Параметры.Вставить("ГлобальныйИдентификаторТорговойЕдиницы"); // Строка,Необязательно - Глобальный идентификатор торговой единицы (GTIN). + Параметры.Вставить("СерийныйНомер"); // Строка,Необязательно - Серийный номер. + Параметры.Вставить("РеквизитКодаТовара"); // Строка,Необязательно -Значение реквизита кода товара (Значение тэга 1162). Кодируется текстом в кодировке Base64. + + // Формирование тэга 1163, для ФФД 1.2 + Параметры.Вставить("ТипКодаТовара"); // Строка,Необязательно - Таблица 118 + Параметры.Вставить("ЗначениеКодаТовара"); // Строка,Необязательно - Значение кода товара в Base64 (Таблица 118) + + Возврат Параметры; + +КонецФункции + +// Заполняет структуру данных дробное количество для товарной номенклатуры. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыДробноеКоличество() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("Числитель" , Неопределено); // Число,Обязательно - Числитель дробного количества - количество реализуемых товаров из упаковке. + Параметры.Вставить("Знаменатель" , Неопределено); // Число,Обязательно - Знаменатель дробного количества - общее количество товаров в потребительской упаковке. + Возврат Параметры; + +КонецФункции + +// Заполняет структуру дополнительного реквизита пользователя. +// +// Возвращаемое значение: +// Структура: +// * Наименование - Строка +// * Значение - Строка +// +Функция ПараметрыДополнительногоРеквизитаПользователя() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("Наименование", ""); // Строка,Необязательно - Наименование дополнительного реквизита пользователя (Тег 1085). + Параметры.Вставить("Значение", ""); // Строка,Необязательно - Значение дополнительного реквизита пользователя (Тег 1086). + Возврат Параметры; + +КонецФункции + +// Заполняет структуру параметров QR кода. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыQRКода() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ЗначениеКода"); // Строка,Необязательно - Значения QR кода. + Параметры.Вставить("ТекстПользователя", НСтр("ru='Сохраните чек для возврата'")); // Строка,Необязательно - Текст выводимый пользователю. + + Возврат Параметры; + +КонецФункции + +// Заполняет структуру операционного реквизит чека. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОперационныйРеквизит() Экспорт + + // Вложенные тэги 1270 + Параметры = Новый Структура(); + Параметры.Вставить("ДатаВремяОперации"); // Дата,Необязательно - Тэг 1273 - Дата, время операции + Параметры.Вставить("ИдентификаторОперации"); // Целое,Необязательно - Тэг 1271 - Идентификатор операции. + Параметры.Вставить("ДанныеОперации"); // Строка[64],Необязательно - Тэг 1272 - Данные операции. + Возврат Параметры; + +КонецФункции + +// Заполняет структуру отраслевого реквизит чека. +// 1260 - отраслевой реквизит предмета расчета. +// 1261 - отраслевой реквизит чека. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОтраслевойРеквизит() Экспорт + + // Вложенные тэги 1260 & 1261 + Параметры = Новый Структура(); + // Значения реквизита "идентификатор ФОИВ" (тег 1262) приведены в таблице 149. + Параметры.Вставить("ИдентификаторФОИВ"); // Строка[3],Необязательно - Тэг 1262 - Идентификатор ФОИВ. + // Дата нормативного акта федерального органа исполнительной власти, регламентирующего порядок + // заполнения реквизита "значение отраслевого реквизита" (тег 1265) + Параметры.Вставить("ДатаДокументаОснования"); // Дата,Необязательно - Тэг 1263 - Дата документа основания + // Номер нормативного акта федерального органа исполнительной власти, регламентирующего порядок + // заполнения реквизита "значение отраслевого реквизита" (тег 1265) + Параметры.Вставить("НомерДокументаОснования"); // Строка[64],Необязательно - Тэг 1264 - Номер документа основания. + // Состав значений, определенных нормативного актом федерального органа исполнительной власти + Параметры.Вставить("ЗначениеРеквизита"); // Строка[256],Необязательно - Тэг 1265 - Номер документа основания. + Возврат Параметры; + +КонецФункции + +// Заполняет структуру сведений о покупателей. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыСведенияОПокупателе() Экспорт + + // Вложенные тэги 1256 - Сведения о покупателе (клиенте). + Параметры = Новый Структура(); + // Реквизиты начиная с ФФД 1.1 (Введены приказом от 09.04.2018 N ММВ-7-20/207@) + // Наименование организации или фамилия, имя, отчество (при наличии) + Параметры.Вставить("Покупатель"); // Строка,Необязательно - Тэг 1227 - Получатель (покупатель) + Параметры.Вставить("ПокупательИНН"); // Строка,Необязательно - Тэг 1228 - ИНН покупателя (клиента) + Параметры.Вставить("ПокупательАдрес"); // Строка,Необязательно - Тэг 1254 - Адрес покупателя (клиента) + Возврат Параметры; + +КонецФункции + +// Заполняет структуру персональные данные покупателя. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыПерсональныеДанныеПокупателя() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ИНН"); // Строка,Необязательно - ИНН покупателя (клиента) + Параметры.Вставить("ДатаРождения"); // Дата,Необязательно - Дата рождения покупателя (клиента) + Параметры.Вставить("Гражданство"); // Строка,Необязательно - Гражданство покупателя (клиента) + Параметры.Вставить("ВидДокумента"); // Перечисление,Необязательно - Код вида документа, удостоверяющего личность + Параметры.Вставить("ДанныеДокумента"); // Строка,Необязательно - Данные документа, удостоверяющего личность + Возврат Параметры; + +КонецФункции + +// Заполняет структуру параметров операции фискализации чека. +// +// Возвращаемое значение: +// Структура - Описание: +// * ДанныеКоррекции - Структура -: +// ** НомерПредписания - Число +// ** ДатаКоррекции - Дата +// ** ОписаниеКоррекции - Строка +// ** ТипКоррекции - Число - +// * НеприменениеККТ - Булево - +// * КорректируемыйДокумент - Произвольный +// * ЕстьПерсональныеДанные - Булево - +// * ИндивидуальныйРежимПодготовкиДанныхКПередачеВОФД - Булево - +// * ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число - +// * СпособФорматноЛогическогоКонтроля - Неопределено - +// * СформироватьЧекКоррекции - Булево - +// * ДополнительныйРеквизитПользователя - Структура: +// ** Значение - Произвольный +// ** Наименование - Строка +// * ДополнительныйРеквизит - Неопределено - +// * НефискальныеДокументы - Массив Из Строка. +// * КассаККМ - Произвольный - +// * ШаблонЧека - Произвольный +// * ТаблицаОплат - Массив из из см.ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека. +// * ПозицииЧека - Массив из см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека. +// * СведенияОБезналичнойОплате - Массив из см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыСведенияОБезналичнойОплате. +// * КопийЧека - Число - +// * ТекстПодвала - Строка - +// * ТекстШапки - Строка - +// * ДатаВремя - Дата - +// * НомерСмены - Число +// * НомерЧека - Строка +// * НомерКассы - Строка +// * НаименованиеМагазина - Строка +// * АдресМагазина - Строка +// * ОрганизацияКПП - Строка +// * ОрганизацияИНН - Строка +// * ОрганизацияНазвание - Строка +// * СерийныйНомер - Строка +// * ПолучательИНН - Строка +// * Получатель - Строка +// * ДанныеПоставщика - Структура: +// ** ИНН - Строка +// ** Наименование - Строка +// ** Телефон - Строка +// * ДанныеАгента - Структура: +// ** ОператорПоПриемуПлатежей - Структура: +// *** Телефон - Неопределено - +// ** ОператорПеревода - Структура: +// *** Телефон - Строка - +// *** Наименование - Строка - +// *** Адрес - Строка - +// *** ИНН - Строка - +// ** ПлатежныйАгент - Структура: +// *** Операция - Строка - +// *** Телефон - Строка - +// * ПризнакАгента - Неопределено - +// * ПокупательНомер - Строка +// * ОтправительEmail - Строка +// * ПокупательEmail - Строка +// * МестоРасчетов - Строка +// * АдресРасчетов - Строка +// * СистемаНалогообложения - ПеречислениеСсылка.ТипыСистемНалогообложенияККТ - +// * Отправляет1СEmail - Булево - +// * Отправляет1СSMS - Булево - +// * ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - +// * Электронно - Булево - +// * ТорговыйОбъект - Неопределено - +// * Организация - Неопределено - +// * ИдентификаторФискальнойЗаписи - Неопределено - +// * ДокументОснование - Неопределено - +// * КассирИНН - Неопределено - +// * Кассир - Строка - +// * ТекстКороткогоСлипЧека - Строка - текст короткого слип-чека +// * АвтономнаяККТ - Булево - признак не использования ККТ для пробития чека +// +Функция ПараметрыОперацииФискализацииЧека() Экспорт; + + ПараметрыЧека = ПараметрыВыполненияОперации(); + // Общие реквизиты для всех типов оборудования. + ПараметрыЧека.Вставить("ДокументОснование" , Неопределено); // Ссылка,Обязательно. Документ по которому пробивается чек. + ПараметрыЧека.Вставить("ИдентификаторФискальнойЗаписи", Неопределено); // Строка,Необязательно. Идентификатор фискальной записи. + ПараметрыЧека.Вставить("Организация" , Неопределено); // Ссылка,Обязательно. Организация по которому пробивается чек. + ПараметрыЧека.Вставить("ТорговыйОбъект" , Неопределено); // Ссылка,Необязательно. Объект по которому пробивается чек. + ПараметрыЧека.Вставить("Электронно" , Ложь); // Булево,Обязательно - Чек будет предоставлен в электронной форме, без печати. Ложь-Значение по умолчанию. + ПараметрыЧека.Вставить("ТипРасчета" , ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств")); // Обязательно. + ПараметрыЧека.Вставить("Отправляет1СSMS" , Ложь); // Булево,Обязательно - SMS отправляет средствами 1C. Ложь-Значение по умолчанию. + ПараметрыЧека.Вставить("Отправляет1СEmail" , Ложь); // Булево,Обязательно - Email отправляет средствами 1C. Ложь-Значение по умолчанию. + + // Системы налогообложения - "Перечисление.ТипыСистемНалогообложенияККТ" + ПараметрыЧека.Вставить("СистемаНалогообложения", ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ОСН")); // Обязательно. Заполняется значением по умолчанию. + ПараметрыЧека.Вставить("АдресРасчетов" ); // Строка,Необязательно - Адрес расчетов (Тег 1009). + ПараметрыЧека.Вставить("МестоРасчетов" ); // Строка,Необязательно - Место расчетов (Тег 1187). + ПараметрыЧека.Вставить("НомерАвтомата" ); // Строка,Необязательно - Номер автомата (Тег 1036). + ПараметрыЧека.Вставить("ОтправительEmail" ); // Строка,Необязательно - Адрес электронной почты отправителя чека (Тег 1117). + ПараметрыЧека.Вставить("ПокупательEmail" ); // Строка,Необязательно - Адрес электронной почты покупателя. + ПараметрыЧека.Вставить("ПокупательНомер" ); // Строка,Необязательно - Телефонный номер покупателя. В формате +{Ц}. + + // Признак агента - "Перечисление.ПризнакиАгента", (ФФД, Тег 1057, Расшифровка - таблица 10) + ПараметрыЧека.Вставить("ПризнакАгента" , Неопределено); // Перечисление - Признак агента (Тег 1057). + ПараметрыЧека.Вставить("ДанныеАгента" , ПараметрыДанныеАгента()); // Структура,Заполнение необязательно - Данные агента. + ПараметрыЧека.Вставить("ДанныеПоставщика" , ПараметрыДанныеПоставщика()); // Структура,Заполнение необязательно - Данные поставщика. + + // Реквизиты начиная с ФФД 1.1 (Введены приказом от 09.04.2018 N ММВ-7-20/207@) + ПараметрыЧека.Вставить("Получатель" ); // Строка,Необязательно - Тэг 1227 - Получатель (покупатель) + ПараметрыЧека.Вставить("ПолучательИНН" ); // Строка,Необязательно - Тэг 1228 - ИНН получателя (ИНН покупателя) + + // Реквизиты начиная с ФФД 1.2 (Введены приказом от 14.09.2020 N ЕД-7-20/662@) + ПараметрыЧека.Вставить("СубъектПерсональныхДанных"); // Необязательно - Физическое лицо, которое прямо или косвенно определено или определяемо с помощью персональных данных. + ПараметрыЧека.Вставить("ЕстьПерсональныеДанные", Ложь); // Булево,Необязательно - Параметры чека содержат персональные данные. + ПараметрыЧека.Вставить("ТипПерсональныхДанных"); // ПеречислениеСсылка.ТипыПерсональныхДанныеККТ, Необязательно - Тип персональных данных. + + ПараметрыЧека.Вставить("СведенияОПокупателе" , ПараметрыСведенияОПокупателе()); // Структура,Заполнение необязательно - Тэг 1256 - Сведения о покупателе (клиенте) + ПараметрыЧека.Вставить("ОперационныйРеквизит", ПараметрыОперационныйРеквизит()); // Структура,Заполнение необязательно - Тэг 1270 - + ПараметрыЧека.Вставить("ОтраслевойРеквизит" , ПараметрыОтраслевойРеквизит()); // Структура,Заполнение необязательно - Тэг 1261 - Отраслевой реквизит чека, + + // Параметры необходимые для ФР + ПараметрыЧека.Вставить("СерийныйНомер" ); // Строка,Необязательно - Заводской номер ККМ (совместимость с ФР). + // Параметры необходимые для чека ЕНВД на принтере чеков + ПараметрыЧека.Вставить("ОрганизацияНазвание" ); // Строка,Необязательно - Название организации (Для чека ЕНВД). + ПараметрыЧека.Вставить("ОрганизацияИНН" ); // Строка,Необязательно - ИНН организации (Для чека ЕНВД). + ПараметрыЧека.Вставить("ОрганизацияКПП" ); // Строка,Необязательно - КПП организации (Для чека ЕНВД). + ПараметрыЧека.Вставить("АдресМагазина" ); // Строка,Необязательно - Адрес магазина (Для чека ЕНВД). + ПараметрыЧека.Вставить("НаименованиеМагазина"); // Строка,Необязательно - Наименование магазина (Для чека ЕНВД). + ПараметрыЧека.Вставить("НомерКассы" ); // Строка,Необязательно - Номер кассы (Для чека ЕНВД). + ПараметрыЧека.Вставить("НомерЧека" ); // Число,Необязательно - Номер чека (Для чека ЕНВД). + ПараметрыЧека.Вставить("НомерСмены" ); // Число,Необязательно - Номер смены (Для чека ЕНВД). + ПараметрыЧека.Вставить("ДатаВремя", ОбщегоНазначенияБПОКлиентСервер.ДатаСеанса()); // ДатаВремя, Необязательно - Дата время в чеке (Для чека ЕНВД). + // АПК: 374-выкл сообщение в чеках + ПараметрыЧека.Вставить("ТекстШапки" , НСтр("ru='ДОБРО ПОЖАЛОВАТЬ!'")); // Строка - заполняется значением по умолчанию. + ПараметрыЧека.Вставить("ТекстПодвала" , НСтр("ru='СПАСИБО ЗА ПОКУПКУ!'")); // Строка - заполняется значением по умолчанию. + // АПК: 374-вкл + ПараметрыЧека.Вставить("КопийЧека" , 1); // Число,Необязательно - Сколько печатать копий чеков ЕНВД на принтере чеков. + + // Позиции чека для фискализации. + ПараметрыЧека.Вставить("ПозицииЧека" , Новый Массив()); // Массив элементов "Структура". Обязательно. + // Таблица оплаты чека + ПараметрыЧека.Вставить("ТаблицаОплат" , Новый Массив()); // Массив элементов "Структура". Обязательно. + // Пример заполнения строки оплаты: + // СтрокаОплаты = ПараметрыСтрокиОплаты(); + // СтрокаОплаты.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные"); // Наличные + // СтрокаОплаты.Сумма = СуммаВидаОплаты; + // ПараметрыЧека.ТаблицаОплат.Добавить(СтрокаОплаты); + ПараметрыЧека.Вставить("СведенияОБезналичнойОплате" , Новый Массив()); // Массив элементов "Структура". Обязательно. + // Пример заполнения строки оплаты: + // СтрокаОплаты = ПараметрыСведенияОБезналичнойОплате(); + // СтрокаОплаты.Сумма = СуммаВидаОплаты; + // ПараметрыЧека.СведенияОБезналичнойОплате.Добавить(СтрокаОплаты); + + // Параметры для печати чека по шаблону. + ПараметрыЧека.Вставить("ШаблонЧека" ); // Ссылка,Необязательно - Пользовательский шаблон для формирования чека. + ПараметрыЧека.Вставить("КассаККМ" ); // Ссылка,Необязательно - Касса ККМ. + ПараметрыЧека.Вставить("НефискальныеДокументы" , Новый Массив()); // Массив нефискальных документов. Необязательно. + ПараметрыЧека.Вставить("УстройствоПечати"); // Ссылка, Необязательно - Устройство печати документов. Необязательно. + ПараметрыЧека.Вставить("ПакетДокументов", Новый Соответствие()); // Соответствие дополнительных документов и устройств по чеку для печати. Необязательно. + + // Строка,Необязательно - Дополнительный реквизит чека (Тег 1192). + ПараметрыЧека.Вставить("ДополнительныйРеквизит" , Неопределено); + // Структура,Заполнение необязательно - дополнительный реквизит пользователя (Тег 1084). + ПараметрыЧека.Вставить("ДополнительныйРеквизитПользователя", ПараметрыДополнительногоРеквизитаПользователя()); + ПараметрыЧека.Вставить("СформироватьЧекКоррекции", Ложь); // Булево,Необязательно - сформировать чек коррекции, только для ФФД 1.1. + ПараметрыЧека.Вставить("СформироватьЧекКоррекцииСторно", Истина); // Булево,Необязательно - Сформировать чеки коррекции сторно по сценариям ФНС. + + // Форматно-логический контроль - "ПеречислениеСсылка.СпособыФорматноЛогическогоКонтроля" + ПараметрыЧека.Вставить("СпособФорматноЛогическогоКонтроля", Неопределено); // Перечисление,Необязательно - Способ форматно-логического контроля. + ПараметрыЧека.Вставить("ДопустимоеРасхождениеФорматноЛогическогоКонтроля", 0.01); // Число,Необязательно - устанавливается значение по умолчанию. + ПараметрыЧека.Вставить("ИндивидуальныйРежимПодготовкиДанныхКПередачеВОФД", Ложь); // Булево,Необязательно - устанавливается значение по умолчанию. + ПараметрыЧека.Вставить("ЕдиныйЧек", Ложь); // Булево,Необязательно - Одна фискальная операция привязана к нескольким документам. + + // Системе быстрых платежей и сертификаты ФСС + ПараметрыЧека.Вставить("ТипПлатежнойСистемы"); // ПеречислениеСсылка.ТипыПлатежнойСистемыККТ, Необязательно - Тип платежной системы. + ПараметрыЧека.Вставить("ИдентификаторОплатыПлатежнойСистемы"); // Строка,Необязательно - Идентификатор оплаты платежных системы. + ПараметрыЧека.Вставить("QRКод", ПараметрыQRКода()); // Структура,Заполнение необязательно - параметры QR кода в теле чека. + ПараметрыЧека.Вставить("ДетализацияОплаты", Новый Массив()); // Массив элементов "Структура" - ПараметрыДетализацииСтрокиОплаты() + + // Короткий слип-чек + ПараметрыЧека.Вставить("ТекстКороткогоСлипЧека", ""); // Строка - текст короткого слип-чека + // Автономные ККТ + ПараметрыЧека.Вставить("АвтономнаяККТ", Ложь); + ПараметрыЧека.Вставить("ОблачнаяККТ", Ложь); + // Признак сворачивание одинаковых строк на печатной форме документа. + ПараметрыЧека.Вставить("СворачиватьОдинаковыеСтрокПриПечати", Ложь); + + // Признаки ЕГАИС + ПараметрыЧека.Вставить("ЕстьАлкогольнаяПродукцияЕГАИС", Ложь); + ПараметрыЧека.Вставить("ЕстьРазливнаяПродукцияЕГАИС", Ложь); + + Возврат ПараметрыЧека; + +КонецФункции + +// Заполняет структуру параметров фискальной строки для фискализации чека. +// +// Возвращаемое значение: +// Структура: +// * Штрихкод - Строка +// * НомерСекции - Число - +// * ДополнительныйРеквизит - Произвольный +// * СуммаАкциза - Число +// * НомерТаможеннойДекларации - Строка +// * КодСтраныПроисхожденияТовара - Строка +// * ДанныеКодаТоварнойНоменклатуры - Структура: +// ** СерийныйНомер - Строка +// ** ГлобальныйИдентификаторТорговойЕдиницы - Строка +// ** КонтрольныйИдентификационныйЗнак - Строка +// ** ТипМаркировки - Строка +// * ЕдиницаИзмерения - Произвольный +// * ДанныеПоставщика - Структура: +// ** ИНН - Строка +// ** Наименование - Строка +// ** Телефон - Строка +// * ДанныеАгента - см. ПараметрыДанныеАгента +// * ПризнакАгентаПоПредметуРасчета - Число +// * ПризнакПредметаРасчета - Неопределено - +// * ПризнакСпособаРасчета - Неопределено - +// * СуммаНДС - Неопределено - +// * СтавкаНДС - Неопределено - +// * СуммаСкидок - Число +// * Сумма - Число - +// * ЦенаСоСкидками - Число - +// * Цена - Число - +// * Количество - Число - +// * Наименование - Строка +// * НомерСтрокиТовара - Число +// * ФискальнаяСтрока - Строка. +// +Функция ПараметрыФискальнойСтрокиЧека() Экспорт; + + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("ФискальнаяСтрока"); // Строка,Обязательно - Тип строки. Исходящий служебный параметр. + ПараметрыСтроки.Вставить("НомерСтрокиТовара"); // Число,Обязательно - Дополнительный параметр для обработки строк чека для форматно-логического контроля. + // Обязательные реквизиты + ПараметрыСтроки.Вставить("Наименование"); // Строка,Обязательно - Наименование предмета расчета + ПараметрыСтроки.Вставить("Количество" , 0); // Число,Обязательно - Количество предмета расчета + ПараметрыСтроки.Вставить("Цена" , 0); // Число,Обязательно - Цена без учета скидок и наценок (Необходимо для ФР и ФФД 1.0) + ПараметрыСтроки.Вставить("ЦенаСоСкидками" , 0); // Число,Обязательно - Цена с учета скидок и наценок (Необходимо начиная с ФФД 1.05 и выше) + ПараметрыСтроки.Вставить("Сумма" , 0); // Число,Обязательно - Стоимость предмета расчета с учетом скидок и наценок + ПараметрыСтроки.Вставить("СуммаСкидок"); // Число,Необязательно - Сумма скидок и наценок, не входит в ФФД. + ПараметрыСтроки.Вставить("СтавкаНДС" , Неопределено); // Число,Обязательно - Ставка НДС (Значения: Неопределено-БезНДС, 0, 5, 7, 10, 20, 18, 105, 107, 110, 118, 120) + ПараметрыСтроки.Вставить("СуммаНДС" , Неопределено); // Число,Обязательно - Сумма НДС + + // Реквизиты начиная с ФФД 1.05 + // Перечисление - ПризнакиСпособаРасчета - (ФФД, Тег 1214, Расшифровка - таблица 28) + ПараметрыСтроки.Вставить("ПризнакСпособаРасчета", Неопределено); // Признак способа расчета. Обязательно для ФФД 1.05 и выше. + + // Реквизиты начиная с ФФД 1.1 + // Перечисление - ПризнакиПредметаРасчета - (ФФД, Тег 1030, Расшифровка - таблица 29) + ПараметрыСтроки.Вставить("ПризнакПредметаРасчета", Неопределено); // Признак предмета расчета. Обязательно для ФФД 1.1 и выше. + + // Перечисление - ПризнакиАгента - (ФФД, Тег 1222, Расшифровка - таблица 21) + ПараметрыСтроки.Вставить("ПризнакАгентаПоПредметуРасчета"); // Необязательно, Признак агента по предмету расчета, Тег 1222. + ПараметрыСтроки.Вставить("ДанныеАгента" , ПараметрыДанныеАгента()); // Структура - Данные агента, Тег 1223. Заполнение необязательно. + ПараметрыСтроки.Вставить("ДанныеПоставщика" , ПараметрыДанныеПоставщика()); // Структура - Данные агента, Тег 1224. Заполнение необязательно. + + ПараметрыСтроки.Вставить("ЕдиницаИзмерения"); // Необязательно, Единица измерения предмета расчета. + ПараметрыСтроки.Вставить("ДанныеКодаТоварнойНоменклатуры", ПараметрыДанныеКодаТоварнойНоменклатуры()); // Коды товарной номенклатуры. + ПараметрыСтроки.Вставить("КодВидаНоменклатурнойКлассификации"); // Строка,Необязательно - Код вида номенклатурной классификации. + + // Реквизиты начиная с ФФД 1.1 (Введены приказом от 9 апреля 2018 г. N ММВ-7-20/207@) + ПараметрыСтроки.Вставить("КодСтраныПроисхожденияТовара"); // Строка,Необязательно - Цифровой код страны происхождения товара в соответствии с Общероссийским классификатором стран мира. + ПараметрыСтроки.Вставить("НомерТаможеннойДекларации"); // Строка,Необязательно - Регистрационный номер таможенной декларации. + ПараметрыСтроки.Вставить("СуммаАкциза"); // Число,Необязательно - Сумма акциза, включенная в стоимость предмета расчета. + ПараметрыСтроки.Вставить("ДополнительныйРеквизит"); // Строка,Необязательно - Дополнительный реквизит предмета расчета, Тег 1191. + + // Реквизиты начиная с ФФД 1.2 + + // Дробное количество, рекомендации ЦРПТ "ВЫВОД ТОВАРА ИЗ ОБОРОТА ПРИ РЕАЛИЗАЦИИ КОНЕЧНЫМ ПОТРЕБИТЕЛЯМ (ЧАСТИЧНАЯ ПРОДАЖА)" + // для 1.05 и 1.1 - пишем в 1191, Формирование и передача фискального документа в ГИС МТ + // для 1.2 - пишем в 1291 + ПараметрыСтроки.Вставить("ДробноеКоличество", ПараметрыДробноеКоличество()); + ПараметрыСтроки.Вставить("КонтрольнаяМарка"); // Строка,Необязательно - Код контрольной марки. Кодируется текстом в кодировке Base64. + ПараметрыСтроки.Вставить("КодЕдиницыИзмерения"); // Строка,Обязательно - Код единицы измерения в соответствии с общероссийским классификатором единиц измерения. + ПараметрыСтроки.Вставить("ОтраслевойРеквизит", ПараметрыОтраслевойРеквизит()); // Структура,Заполнение необязательно - Тэг 1260 - Отраслевой реквизит предмета расчета. + + // Дополнительные реквизиты не входящие в ФФД. + ПараметрыСтроки.Вставить("НомерСекции" , 0); // Число,Необязательно - Номер секции ФР (для совместимости), 0-Значение по умолчанию. + ПараметрыСтроки.Вставить("Штрихкод"); // Строка,Необязательно - Штрихкод + ПараметрыСтроки.Вставить("ШтрихкодBase64"); // Строка,Необязательно - Штрихкод, Кодируется текстом в кодировке Base64. + + // Продажа товаров при оказании услуг общественного питания (HORECA) + ПараметрыСтроки.Вставить("ОбщественноеПитание", Ложь); // Булево,Необязательно - Признак товара, что он реализуется в общественном питании + + // Продажа товаров в объемно-сортовом учете. + ПараметрыСтроки.Вставить("ОбъемноСортовойУчет", Ложь); // Булево,Необязательно - Признак товара, что он подлежит объемно-сортовому учету. + ПараметрыСтроки.Вставить("КоличествоВесовогоТовара", Неопределено); // Число,Необязательно - Количество весового товара при объемно-сортовом учете. + // Дата производства товара для формирования отраслевых тегов при продаже молочной продукции с нечитаемыми DataMatrix. + ПараметрыСтроки.Вставить("ДатаПроизводства"); // Дата,Необязательно - Дата производства товара. + + // Продажа ветеринарного лекарственного препарата + ПараметрыСтроки.Вставить("ВетеринарныйПрепарат", Ложь); // Булево,Необязательно - Признак товара, ветеринарный лекарственный препарат. + ПараметрыСтроки.Вставить("ВетеринарноеТребование", Ложь); // Булево,Необязательно - Признак товара, что используется ветеринарное требование. + ПараметрыСтроки.Вставить("РецептНомер"); // Строка,Необязательно - Номер рецепта\требования + ПараметрыСтроки.Вставить("РецептДата"); // Дата,Необязательно - Дата рецепта\требования. + + // Разрешительная система проверки кода + ПараметрыСтроки.Вставить("ЗапросПроверкиКода", ПараметрыЗапросПроверкиКода()); // Данные запроса проверки кода для разрешительной системы + + // Устарело. Для совместимости. + ПараметрыСтроки.Вставить("NTIN"); // Строка,Необязательно - NTIN идентификаторы товара + + Возврат ПараметрыСтроки; + +КонецФункции + +// Заполняет структуру параметров текстовой строки для фискализации чека. +// +// Параметры: +// Текст - Строка - Текстовая строка +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыТекстовойСтрокиЧека(Текст = Неопределено) Экспорт; + + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("ТекстоваяСтрока"); // Тип строки. Исходящий служебный параметр. + ПараметрыСтроки.Вставить("Текст", Текст); // Строка,Обязательно - Текстовая строка + ПараметрыСтроки.Вставить("ПереносСтроки", Ложь); // Булево,Необязательно - Перенос строки, устанавливается значение по умолчанию. + ПараметрыСтроки.Вставить("Выравнивание" , "Лево"); // Строка,Необязательно - Выравнивание текста, Значения: "Лево", "Право", "Центр". + Возврат ПараметрыСтроки; + +КонецФункции + +// Заполняет структуру параметров штрихкода в строке для фискализации чека. +// +// Параметры: +// ТипШтрихкодаЗнач - Строка - Тип штрихкода. +// ШтрихКодЗнач - Строка - Значение штрихкода. +// ШтрихКодBase64 - Строка - Значение штрихкода в Base64. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыШтрихкодВСтрокеЧека(ТипШтрихкодаЗнач = Неопределено, ШтрихКодЗнач = Неопределено, ШтрихКодBase64 = Неопределено) Экспорт; + + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("ТипШтрихкода", ТипШтрихкодаЗнач); // Строка,Обязательно - Тип штрихкода. + ПараметрыСтроки.Вставить("ШтрихКод" , ШтрихКодЗнач); // Строка,Обязательно - Значение штрихкода. + ПараметрыСтроки.Вставить("ШтрихКодBase64", ШтрихКодBase64); // Строка,Обязательно - Значение штрихкода в Base64. + Возврат ПараметрыСтроки; + +КонецФункции + +// Заполняет структуру параметров строки оплаты. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыСтрокиОплаты(Сумма = 0) Экспорт + + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные")); + ПараметрыСтроки.Вставить("Сумма" , Сумма); + Возврат ПараметрыСтроки; + +КонецФункции + +// Заполняет структуру параметров детализации строки оплаты. +// +// Параметры: +// НаименованиеТипаОплаты - Строка +// Сумма - Число +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыДетализацииСтрокиОплаты(НаименованиеТипаОплаты = Неопределено, Сумма = 0) Экспорт + + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("НаименованиеТипаОплаты", НаименованиеТипаОплаты); // Строка,Обязательно Текстовая строка + ПараметрыСтроки.Вставить("Сумма", Сумма); + Возврат ПараметрыСтроки; + +КонецФункции + +// Заполняет структуру параметров сведений о безналичной оплате. +// +// Параметры: +// Сумма - Число - Cумма оплаты безналичными +// ПризнакСпособаОплаты - Число - Признак способа оплаты безналичными +// Идентификаторы - Строка - Идентификаторы безналичной оплаты +// ДополнительныеCведения - Строка - Дополнительные сведения о безналичной оплате +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыСведенияОБезналичнойОплате() Экспорт + + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("Сумма", 0); // Число,Обязательно - Cумма оплаты безналичными + ПараметрыСтроки.Вставить("ПризнакСпособаОплаты", 0); // Число,Обязательно - Признак способа оплаты безналичными + ПараметрыСтроки.Вставить("Идентификаторы"); // Строка,Необязательно - Идентификаторы безналичной оплаты + ПараметрыСтроки.Вставить("ДополнительныеCведения"); // Строка,Необязательно - Дополнительные сведения о безналичной оплате + Возврат ПараметрыСтроки; + +КонецФункции + +// Заполняет структуру параметров строки оплаты. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыДанныеКоррекции() Экспорт + + ДанныеКоррекции = Новый Структура(); + ДанныеКоррекции.Вставить("ТипКоррекции", 0); // Число,Обязательно - Тип коррекции: 0-самостоятельно, 1-по предписанию. + ДанныеКоррекции.Вставить("ОписаниеКоррекции"); // Строка,Необязательно - Описание коррекции. + ДанныеКоррекции.Вставить("ДатаКоррекции"); // ДатаВремя,Обязательно - Дата совершения корректируемого расчета. + ДанныеКоррекции.Вставить("НомерПредписания"); // Строка,Обязательно - Номер предписания налогового органа. + Возврат ДанныеКоррекции; + +КонецФункции + +// Заполняет структуру параметров выполнения операции чека коррекции. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОперацииЧекаКоррекции() Экспорт; + + ПараметрыЧека = ПараметрыОперацииФискализацииЧека(); + ПараметрыЧека.Вставить("КорректируемыйДокумент"); + ПараметрыЧека.Вставить("НеприменениеККТ", Ложь); + ПараметрыЧека.Вставить("ДанныеКоррекции", ПараметрыДанныеКоррекции()); + + Возврат ПараметрыЧека; + +КонецФункции + +// Заполняет структуру параметров открытия и закрытия смены. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОткрытияЗакрытияСмены() Экспорт; + + ПараметрыОперации = ПараметрыВыполненияОперации(); + + ПараметрыОперации.Вставить("АдресРасчетов"); // Строка,Необязательно - Адрес расчетов (Тег 1009). + ПараметрыОперации.Вставить("МестоРасчетов"); // Строка,Необязательно - Место расчетов (Тег 1187). + ПараметрыОперации.Вставить("КассаККМ"); //ОпределяемыйТип.КассаБПО,Необязательно - касса ккм для закрытия смены. + ПараметрыОперации.Вставить("Печать", Истина); // Булево,Необязательно - Необходима печать требуемого документа. + ПараметрыОперации.Вставить("АвтономнаяККТ", Ложь); // Булево,Необязательно - Признак автономной ККТ. + ПараметрыОперации.Вставить("ОблачнаяККТ", Ложь); // Булево,Необязательно - Признак облачной ККТ. + + Возврат ПараметрыОперации; + +КонецФункции + +// Заполняет структуру параметров инкассацию на фискальном устройстве. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыИнкассации() Экспорт; + + ПараметрыОперации = ПараметрыВыполненияОперации(); + ПараметрыОперации.Вставить("ДокументОснование" , Неопределено); // Ссылка,Необязательно. Документ по которому формируется операция. + ПараметрыОперации.Вставить("Организация" , Неопределено); // Ссылка,Необязательно. Организация по которой формируется операция. + ПараметрыОперации.Вставить("ТорговыйОбъект" , Неопределено); // Ссылка,Необязательно. Объект по которому формируется операция. + ПараметрыОперации.Вставить("КассаККМ" , Неопределено); // Ссылка,Необязательно. Объект по которому формируется операция. + + ПараметрыОперации.Вставить("ТипИнкассации"); // Число,Обязательно - Тип инкассации (1-внесение, 0-выемка) + ПараметрыОперации.Вставить("Сумма", 0); // Число,Обязательно - Сумма инкассации. + + Возврат ПараметрыОперации; + +КонецФункции + +// Заполняет структуру параметров печати копии чека. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыПечатьКопииЧека() Экспорт; + + ПараметрыОперации = ПараметрыВыполненияОперации(); + ПараметрыОперации.Вставить("ДокументСсылка" , Неопределено); // Ссылка - Документ по которому пробивается чек. + ПараметрыОперации.Вставить("НомерЧекаККТ" , Неопределено); // Строка - Номер фискального чека. + ПараметрыОперации.Вставить("Аппаратно" , Истина); // Булево - Печать копии чека производиться аппаратно по данным ККТ, иначе по регистру фискальных операций. + ПараметрыОперации.Вставить("НомерЧека" , Неопределено); // Строка - Номер чека для аппаратной печати чека на ККТ. + ПараметрыОперации.Вставить("ФискальныйПризнак"); // Строка - Фискальный признак документа. + Возврат ПараметрыОперации; + +КонецФункции + +// Заполняет структуру параметров аннулирования чека. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОперацииАннулированияЧека() Экспорт; + + ПараметрыОперации = ПараметрыВыполненияОперации(); + ПараметрыОперации.Вставить("ТипРасчета" , ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств")); + ПараметрыОперации.Вставить("Фискальный" , Истина); + Возврат ПараметрыОперации; + +КонецФункции + +// Заполняет структуру печати QR кода на фискальном устройстве. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыПечатиQRКодаНаФискальномУстройстве() Экспорт; + + ПараметрыОперации = Новый Структура(); + + ПараметрыОперации.Вставить("ТипПлатежнойСистемы"); // ПеречислениеСсылка.ТипыПлатежнойСистемыККТ, Необязательно - Тип платежной системы. + ПараметрыОперации.Вставить("ИдентификаторОплатыПлатежнойСистемы"); // Строка,Необязательно - Идентификатор оплаты платежных системы. + ПараметрыОперации.Вставить("QRКод", ПараметрыQRКода()); // Структура,Заполнение необязательно - параметры QR кода в теле чека. + ПараметрыОперации.QRКод.ТекстПользователя = НСтр("ru='Для совершения платежа отсканируйте QR-код'"); + ПараметрыОперации.Вставить("СуммаОперации", Неопределено); // Число,Необязательно - Сумма операции. + + Возврат ПараметрыОперации; + +КонецФункции + +// Параметры счетчиков операций. +// +// Возвращаемое значение: +// Структура - Параметры нормализуемых фискальных данных: +// * КоличествоЧеков - Число - +// * СуммаЧеков - Число - +// * КоличествоЧековКоррекции - Число - +// * СуммаЧековКоррекции - Число - +// +Функция ПараметрыСчетчиковОпераций() Экспорт + + СтруктураРезультат = Новый Структура(); + + СтруктураРезультат.Вставить("КоличествоЧеков"); + СтруктураРезультат.Вставить("СуммаЧеков"); + СтруктураРезультат.Вставить("КоличествоЧековКоррекции"); + СтруктураРезультат.Вставить("СуммаЧековКоррекции"); + + Возврат СтруктураРезультат; + +КонецФункции + +// Заполняет структуру параметров нормализуемых фискальных данных. +// +// Возвращаемое значение: +// Структура - Параметры нормализуемых фискальных данных: +// * ДатаСменыККТ - Число - +// * НомерСменыККТ - Число - +// * НомерЧекаККТ - Число - +// * НомерЧекаЗаСмену - Число - +// * СтатусСмены - Неопределено - +// * СчетчикиОперацийПриход - Структура -: +// ** КоличествоЧеков - Число. +// ** СуммаЧеков - Число. +// ** КоличествоЧековКоррекции - Число. +// ** СуммаЧековКоррекции - Число. +// * СчетчикиОперацийВозвратПрихода - Структура -: +// ** КоличествоЧеков - Число. +// ** СуммаЧеков - Число. +// ** КоличествоЧековКоррекции - Число. +// ** СуммаЧековКоррекции - Число. +// * СчетчикиОперацийРасход - Структура -: +// ** КоличествоЧеков - Число. +// ** СуммаЧеков - Число. +// ** КоличествоЧековКоррекции - Число. +// ** СуммаЧековКоррекции - Число. +// * СчетчикиОперацийВозвратРасхода - Структура -: +// ** КоличествоЧеков - Число. +// ** СуммаЧеков - Число. +// ** КоличествоЧековКоррекции - Число. +// ** СуммаЧековКоррекции - Число. +// * КоличествоЧеков - Число. +// * ОстатокНаличных - Число. +// * ПревышеноВремяОжиданияОтветаОФД - Булево - +// * КоличествоНепереданныхФД - Неопределено - +// * НомерПервогоНепереданногоФД - Неопределено - +// * ДатаПервогоНепереданногоФД - Неопределено - +// * НеобходимаСрочнаяЗаменаФН - Булево - +// * ПамятьФНПереполнена - Булево - +// * РесурсФНИсчерпан - Булево - +// +Функция ПараметрыНормализуемыхФискальныхДанных() Экспорт + + СтруктураРезультат = Новый Структура(); + + СтруктураРезультат.Вставить("ДатаСменыККТ" , Неопределено); // Дата открытой/закрытой смены. + СтруктураРезультат.Вставить("НомерСменыККТ" , 0); // Номер открытой/закрытой смены. + СтруктураРезультат.Вставить("НомерЧекаККТ" , 0); // Номер последнего фискального чека. + СтруктураРезультат.Вставить("НомерЧекаЗаСмену" , 0); // Номер последнего чека за смену. + СтруктураРезультат.Вставить("СтатусСмены" , Неопределено); // Состояние смены: 1-Закрыта, 2-Открыта, 3-Истекла. + СтруктураРезультат.Вставить("КоличествоЧеков" , 0); // Количество чеков и чеков коррекции со всеми признаками расчетов + СтруктураРезультат.Вставить("СчетчикиОперацийПриход" , ПараметрыСчетчиковОпераций()); // Счетчики операций по типу "приход". + СтруктураРезультат.Вставить("СчетчикиОперацийВозвратПрихода", ПараметрыСчетчиковОпераций()); // Счетчики операций по типу "возврат прихода". + СтруктураРезультат.Вставить("СчетчикиОперацийРасход" , ПараметрыСчетчиковОпераций()); // Счетчики операций по типу "расход". + СтруктураРезультат.Вставить("СчетчикиОперацийВозвратРасхода", ПараметрыСчетчиковОпераций()); // Счетчики операций по типу "возврат расхода". + СтруктураРезультат.Вставить("ОстатокНаличных"); // Остаток наличных денежных средств в кассе + СтруктураРезультат.Вставить("ПревышеноВремяОжиданияОтветаОФД", Ложь); + СтруктураРезультат.Вставить("КоличествоНепереданныхФД" , Неопределено); // Количество непереданных документов. + СтруктураРезультат.Вставить("НомерПервогоНепереданногоФД", Неопределено); // Номер первого непереданного документ. + СтруктураРезультат.Вставить("ДатаПервогоНепереданногоФД" , Неопределено); // Дата и время первого из непереданных документов. + + СтруктураРезультат.Вставить("НеобходимаСрочнаяЗаменаФН" , Ложь); // Признак необходимости срочной замены ФН. + СтруктураРезультат.Вставить("ПамятьФНПереполнена" , Ложь); // Признак переполнения памяти ФН. + СтруктураРезультат.Вставить("РесурсФНИсчерпан" , Ложь); // Признак исчерпания ресурса ФН. + СтруктураРезультат.Вставить("СрокДействияФН" , Неопределено); // Срок действия ФН + + Возврат СтруктураРезультат; + +КонецФункции + +// Заполняет структуру параметров печати текста. +// +// Параметры: +// СтрокиТекста - Строка +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыПечатиТекста(СтрокиТекста = Неопределено) Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("СтрокиТекста", СтрокиТекста); + Возврат Параметры; + +КонецФункции + +// Заполняет структуру параметров запрос КМ. +// +// Возвращаемое значение: +// Структура - параметры запроса КМ: +// * ИдентификаторЗапроса - Строка - Уникальный идентификатор запроса +// * ВыполнятьВалидацию - Булево - выполнять проверку кода маркировки средствами БПО +// * ИгнорироватьРезультатПроверкиКМ - Булево - игнорировать результат проверки КМ и автоматически подтверждать продажу товара. +// * ЗапросПроверкиКМСредствамиККТ - Булево - выполнять запрос проверки КМ на удаленном сервере ОИСМ (ИСМП). +// Обычно этот флаг сбрасывается в Ложь при использовании объемно-сортового учета. +// * ОжидатьПолучениеОтветаОИСМ - Булево - Будет ли ожидаться получение ответа от ОИСМ. (ИСМП) +// * ОтправлятьНаСерверОИСМ - Булево - (устарела) Запрос КМ формируется локально или отправляется на сервер ОИСМ. +// * Количество - Число - Количество +// * ДробноеКоличество - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДробноеКоличество. +// * КонтрольнаяМарка - Строка - Код контрольной марки. Кодируется текстом в кодировке Base64. +// * КодЕдиницыИзмерения - Строка - Код единицы измерения в соответствии с общероссийским классификатором единиц +// измерения. Если значение реквизита заполнено, используется он, иначе МераКоличестваПредметаРасчета. +// * МераКоличестваПредметаРасчета - ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ - Мера количества предмета расчета. +// Тэг 2108. Значение из таблицы 114 (ФФД). +// * ПланируемыйСтатусТовара - ПеречислениеСсылка. +// * Наименование - Строка - строковое наименование предмета расчета, для отображения в журнате операций провенрки кода маркировки +// * ДополнительныеПараметры - Неопределено, Структура - дополнительные параметры которые могут быть переданы в операцию, +// это значение вернется в оповещении при выполнении операции. +// * ЗапросРазрешенияПродажиКМ - Булево - выполнялся запрос разрешения продажи +// * АдресСервераЗапросаРазрешения - Строка - адрес сервера где выполнялся запрос разрешения +// * ТекстЗапросаРазрешения - Строка - текст запроса для получения разрешения +// * КодОтветаРазрешения - Неопределено, Строка - код ответа который получен от удаленного сервера, если код не задан, а значение флага +// ЗапросРазрешенияПродажиКМ установлено в Истина, тогда код будет содержать текст Таймаут. +// * РезультатЗапросаРазрешения - Строка - JSON - строка, ответ от удаленного сервера ГИС МТ +// * ИдентификаторЗапросаРазрешения - Строка - идентификатор запроса полученного разрешения +// * ВремяЗапросаРазрешения - Неопределено, Строка, Дата - таймштамп полученный с удаленого сервера +// * ПродажаРазрешена - Булево - продажа разрешена, на форме записи будет отображение, что продажа разрешена. +// * ПричинаЗапрета - Строка - Причина запрета продажи, для отображения на форме записи +// * ДополнительныеСведения - Массив из см. ДополнительноеСведениеЗапросаКМ +// +Функция ПараметрыЗапросКМ() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("Результат", Истина); + Параметры.Вставить("ТекстОшибки"); + + Параметры.Вставить("ИдентификаторЗапроса", ""); + Параметры.Вставить("ВыполнятьВалидацию", Ложь); + Параметры.Вставить("ИгнорироватьРезультатПроверкиКМ", Ложь); + Параметры.Вставить("ЗапросПроверкиКМСредствамиККТ", Истина); + Параметры.Вставить("ОжидатьПолучениеОтветаОИСМ", Истина); + Параметры.Вставить("ОтправлятьНаСерверОИСМ", Истина); + Параметры.Вставить("Количество", 0); + Параметры.Вставить("ДробноеКоличество", ПараметрыДробноеКоличество()); + Параметры.Вставить("КонтрольнаяМарка", ""); + Параметры.Вставить("КодЕдиницыИзмерения", ""); + Параметры.Вставить("МераКоличестваПредметаРасчета"); + Параметры.Вставить("ПланируемыйСтатусТовара"); + Параметры.Вставить("Наименование"); + Параметры.Вставить("ДополнительныеПараметры", Неопределено); + + // запрос к серверу ГИС МТ + Параметры.Вставить("ЗапросРазрешенияПродажиКМ", Ложь); + Параметры.Вставить("АдресСервераЗапросаРазрешения", ""); + Параметры.Вставить("ТекстЗапросаРазрешения", ""); + Параметры.Вставить("КодОтветаРазрешения", Неопределено); + Параметры.Вставить("РезультатЗапросаРазрешения", ""); + Параметры.Вставить("ИдентификаторЗапросаРазрешения", ""); + Параметры.Вставить("ВремяЗапросаРазрешения", Неопределено); + Параметры.Вставить("ПродажаРазрешена", Ложь); + Параметры.Вставить("ПричинаЗапрета", ""); + Параметры.Вставить("ДополнительныеСведения", Новый Массив); + + Возврат Параметры; + +КонецФункции + +// Дополнительное сведение запроса КМ для отображения на форме записи операции +// +// Возвращаемое значение: +// Структура: +// * Заголовок - Строка - заголовок элемента +// * Значение - Произвольный +Функция ДополнительноеСведениеЗапросаКМ() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Заголовок", ""); + Результат.Вставить("Значение"); + Возврат Результат; + +КонецФункции + +// Заполняет структуру параметров запрос КМ. +// +// Возвращаемое значение: +// Структура -Параметры проверки КМ: +// * ОтображатьФорму - Булево - отображать форму с прогрессом выполнения средставми библиотеки +// * ОжидатьПолученияОтветаПроверкиКМ - Булево - (не используется) ожидать завершения запроса от удаленного сервера ОИСМ (ИСМП). +// * ЗапросыКМ - Массив из см. ПараметрыЗапросКМ - массив запросов КМ +// +Функция ПараметрыПроверкиКМ() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ОтображатьФорму", Ложь); + Параметры.Вставить("ОжидатьПолученияОтветаПроверкиКМ", Ложь); // было ОжидатьПолучениеОтветаОИСМ + Параметры.Вставить("ЗапросыКМ", Новый Массив()); + + Возврат Параметры; + +КонецФункции + +// Заполняет структуру параметров запрос КМ. +// +// Возвращаемое значение: +// Структура: +// * ИдентификаторЗапроса - Строка - Уникальный идентификатор запроса +// +Функция ПараметрыПодтверждениеКМ() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ИдентификаторЗапроса"); // Строка,Обязательно - Уникальный идентификатор запроса + Параметры.Вставить("Выбытие", Истина); // Булево,Обязательно - КМ будет реализована в состав документа о реализации маркированного товара. + Возврат Параметры; + +КонецФункции + +// Заполняет структуру пакетной операции для добавления ее в очередь чеков +// +// Возвращаемое значение: +// Структура: +// * ТипОперации - ПеречислениеСсылка.ТипыПакетнойОперацииВОчередиЧеков +// * ИдентификаторЭТ - СправочникСсылка.ПодключаемоеОборудование - Эквайринговый терминал для обработки операции +// * СлипЧекВТелеФискального - Булево, Неопределено - Выводить слип-чек в теле фискального, Истина - слип-чек будет выведен +// в теле фискального, Ложь - короткий слип-чек не будет выводиться, Неопределено - короткий слип-чек +// будет выводиться если поддерживает драйвер оборудования. +// * ПараметрыЭквайринговойОперации - Структура: +// ** ВидОплаты - Строка - +// ** ПроцентКомиссии - Число - +// ** РеквизитыКартыQR - Строка - +// * ПараметрыПродажаСВыдачейНаличных - Структура: +// ** СуммаВыдачи - Число - сумма выдачи наличных, в случае операции продажа с выдачей наличных +// ** ДанныеАгента - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеАгента +// ** ДанныеПоставщика - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеПоставщика +// ** ДокументОснованиеВыдачи - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО, Неопределено - +// ** ДокументОснованиеВозврата - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО, Неопределено - +// +Функция ПараметрыПакетнойОперацииВОчередиЧеков() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ТипОперации", ПредопределенноеЗначение("Перечисление.ТипыПакетнойОперацииВОчередиЧеков.НеПакетнаяОперация")); + Параметры.Вставить("ИдентификаторЭТ"); + Параметры.Вставить("СлипЧекВТелеФискального"); + + ПараметрыЭквайринговойОперации = Новый Структура(); + ПараметрыЭквайринговойОперации.Вставить("ВидОплаты"); + ПараметрыЭквайринговойОперации.Вставить("ПроцентКомиссии"); + ПараметрыЭквайринговойОперации.Вставить("РеквизитыКартыQR", ""); + + Параметры.Вставить("ПараметрыЭквайринговойОперации", ПараметрыЭквайринговойОперации); + + ПараметрыПродажаСВыдачейНаличных = Новый Структура(); + ПараметрыПродажаСВыдачейНаличных.Вставить("СуммаВыдачи"); + ПараметрыПродажаСВыдачейНаличных.Вставить("ДанныеАгента", ПараметрыДанныеАгента()); + ПараметрыПродажаСВыдачейНаличных.Вставить("ДанныеПоставщика", ПараметрыДанныеПоставщика()); + ПараметрыПродажаСВыдачейНаличных.Вставить("ДокументОснованиеВыдачи", Неопределено); + ПараметрыПродажаСВыдачейНаличных.Вставить("ДокументОснованиеВозврата", Неопределено); + + Параметры.Вставить("ПараметрыПродажаСВыдачейНаличных", ПараметрыПродажаСВыдачейНаличных); + Возврат Параметры; + +КонецФункции + +// Параметры фискальной операции. +// +// Возвращаемое значение: +// Структура - Параметры фискальной операции: +// * Кассир - ОпределяемыйТип.СубъектПерсональныхДанныхБПО +// * ДокументОснование - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО +// * Организация - ОпределяемыйТип.ОрганизацияБПО +// * ТорговыйОбъект - ОпределяемыйТип.ТорговыйОбъектБПО +// * НомерСменыККТ - Число - +// * НомерЧекаККТ - Число - +// * СтатусСмены - Число - +// * ДатаВремя - Дата +// * ПараметрыXML - Строка - +// * РезультатXML - Строка - +// * КассоваяСмена - ДокументСсылка.КассоваяСмена +// * ТестовыеЧеки - Булево +// * ТекстЧека - Строка +// * ДополнительныеПараметры - Произвольный +// * Результат - Булево - +// * ТекстОшибки - Строка +// +Функция ПараметрыФискальнойОперации() Экспорт + + ДанныеОперации = Новый Структура(); + ДанныеОперации.Вставить("Кассир"); + ДанныеОперации.Вставить("ДокументОснование"); + ДанныеОперации.Вставить("Организация"); + ДанныеОперации.Вставить("ТорговыйОбъект"); + + ДанныеОперации.Вставить("НомерСменыККТ" , 0); + ДанныеОперации.Вставить("НомерЧекаККТ" , 0); + ДанныеОперации.Вставить("СтатусСмены", 0); + ДанныеОперации.Вставить("ДатаВремя"); + ДанныеОперации.Вставить("ПараметрыXML", ""); + ДанныеОперации.Вставить("РезультатXML", ""); + ДанныеОперации.Вставить("КассоваяСмена"); + ДанныеОперации.Вставить("ТестовыеЧеки"); + ДанныеОперации.Вставить("ТекстЧека"); + ДанныеОперации.Вставить("ДополнительныеПараметры"); + ДанныеОперации.Вставить("Результат", Истина); + ДанныеОперации.Вставить("ТекстОшибки"); + + Возврат ДанныеОперации; + +КонецФункции + +// Заполняет структуру данных запроса проверки кода для разрешительной системы. +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыЗапросПроверкиКода() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ИдентификаторЗапроса"); // Строка,Обязательно - Уникальный идентификатор запроса. + Параметры.Вставить("ВременнаяМетка"); // Строка,Обязательно - Дата и время с точностью до миллисекунд формирования запроса в текстовом виде. + // Реализация с 1 сентября 2025 года + Параметры.Вставить("ИдентификаторЭкземпляра"); // Строка,Обязательно - Идентификатор экземпляра ЛМ ЧЗ inst + Параметры.Вставить("ВерсияБазы"); // Строка,Обязательно - Версия базы, на которой осуществлялась проверка ver + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область QRКодЧекаККТ + +// Функция возвращает структуру параметров QR кода чека ККТ. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыQRКодаЧекаККТ() Экспорт + + ПараметрыШтрихкода = Новый Структура(); + ПараметрыШтрихкода.Вставить("ДатаВремяРасчета"); // Дата и время осуществления расчета + ПараметрыШтрихкода.Вставить("СуммаРасчета", 0); // Сумма расчета в рублях и копейках + ПараметрыШтрихкода.Вставить("НомерФискальногоНакопителя"); // Заводской номер фискального накопителя + ПараметрыШтрихкода.Вставить("НомерФискальногоДокумента"); // Порядковый номер фискального документа + ПараметрыШтрихкода.Вставить("ФискальныйПризнак"); // Фискальный признак документ + ПараметрыШтрихкода.Вставить("ПризнакРасчета"); // Признак расчета, перечисление + ПараметрыШтрихкода.Вставить("ПризнакРасчетаКод"); // Признак расчета, код + Возврат ПараметрыШтрихкода; + +КонецФункции + +// Функция расшифровывает QR код для чека ККТ. Структура описана в документе ФФД в разделе 61. +// +// Параметры: +// ЗначениеQRКода - Строка +// Возвращаемое значение: +// Структура. +// +Функция РасшифроватьQRКодЧекаККТ(ЗначениеQRКода) Экспорт + + ДанныеШтрихкода = ПараметрыQRКодаЧекаККТ(); + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.РасшифроватьQRКодЧекаККТ(ЗначениеQRКода, ДанныеШтрихкода); + Возврат ДанныеШтрихкода; + +КонецФункции + +// Функция формирует QR код для чека ККТ. Структура описана в документе ФФД в разделе 61. +// +// Параметры: +// ПараметрыQRКода - Структура +// Возвращаемое значение: +// Строка. +// +Функция СформироватьQRКодЧекаККТ(ПараметрыQRКода) Экспорт + + ДанныеQRКода = ""; + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.СформироватьQRКодЧекаККТ(ПараметрыQRКода, ДанныеQRКода); + Возврат ДанныеQRКода; + +КонецФункции + +#КонецОбласти + +#Область КодыОФД + +/////////////////////////////////////////////////////////////////////////////// +// Система налогообложения + +// Получить код системы налогообложения ККТ. +// +// Параметры: +// СистемаНалогообложенияККТ - ПеречислениеСсылка.ТипыСистемНалогообложенияККТ - Система налогообложения ККТ. +// +// Возвращаемое значение: +// Произвольный, Число - Код системы налогообложения ККТ +Функция КодСистемыНалогообложенияККТ(СистемаНалогообложенияККТ) Экспорт + + Код = 0; + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.КодСистемыНалогообложенияККТ(Код, СистемаНалогообложенияККТ); + Возврат Код; + +КонецФункции + +// Получить систему налогообложения ККТ по коду +// +// Параметры: +// КодСистемыНалогообложенияККТ - Число - Код системы налогообложения ККТ. +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.ТипыСистемНалогообложенияККТ - Система налогообложения ККТПо коду +Функция СистемаНалогообложенияККТПоКоду(КодСистемыНалогообложенияККТ) Экспорт + + Значение = 0; + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.СистемаНалогообложенияККТПоКоду(Значение, КодСистемыНалогообложенияККТ); + Возврат Значение; + +КонецФункции + +// Получить наименование системы налогообложения по коду. +// +// Параметры: +// СистемаНалогообложения - Число, Произвольный - Система налогообложения +// Кратко - Булево - Кратко +// +// Возвращаемое значение: +// Строка, Произвольный - Наименование системы налогообложения +Функция НаименованиеСистемыНалогообложения(СистемаНалогообложения, Кратко = Ложь) Экспорт; + + Наименование = 0; + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.НаименованиеСистемыНалогообложения(Наименование, СистемаНалогообложения, Кратко); + Возврат Наименование; + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Коды видов документов + +// Возвращает код вида документа удостоверяющего личность ККТ. +// +// Параметры: +// ВидДокументаУдостоверяющегоЛичность - ПеречислениеСсылка - Вид документа удостоверяющего личность +// +// Возвращаемое значение: +// Произвольный, Число - Код вид документа удостоверяющего личность +Функция КодВидДокументаУдостоверяющегоЛичность(ВидДокументаУдостоверяющегоЛичность) Экспорт + + Код = 0; + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.КодВидДокументаУдостоверяющегоЛичность(Код, ВидДокументаУдостоверяющегоЛичность); + Возврат Код; + +КонецФункции + +// Возвращает вида документа удостоверяющего личность ККТ по коду. +// +// Параметры: +// КодВидаДокументаУдостоверяющегоЛичность - Число - Код вида документа удостоверяющего личность. +// +// Возвращаемое значение: +// ПеречислениеСсылка, Произвольный - Вид документа удостоверяющего личность по коду +Функция ВидДокументаУдостоверяющегоЛичностьПоКоду(КодВидаДокументаУдостоверяющегоЛичность) Экспорт + + Значение = ""; + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.ВидДокументаУдостоверяющегоЛичностьПоКоду(Значение, КодВидаДокументаУдостоверяющегоЛичность); + Возврат Значение; + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Коды расчетов, признаков расчетов и предметов расчетов + +// Получить код расчета денежными средствами. +// +// Параметры: +// ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - Тип расчета. +// +// Возвращаемое значение: +// Произвольный, Число - Код расчета денежными средствами +Функция КодРасчетаДенежнымиСредствами(ТипРасчета) Экспорт + + ТипыРасчета = Новый Соответствие(); + ТипыРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств") , 1); + ТипыРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств") , 2); + ТипыРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.РасходДенежныхСредств") , 3); + ТипыРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратРасходаДенежныхСредств"), 4); + + Возврат ТипыРасчета.Получить(ТипРасчета); + +КонецФункции + +// Получить наименование кода расчета денежными средствами по коду. +// +// Параметры: +// КодРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - Тип расчета. +// +// Возвращаемое значение: +// Строка - Наименование кода расчета денежными средствами +Функция НаименованиеКодаРасчетаДенежнымиСредствами(КодРасчета) Экспорт + + ТипыРасчета = Новый Соответствие(); + ТипыРасчета.Вставить(1, НСтр("ru='ПРИХОД'")); // Чек продажи + ТипыРасчета.Вставить(2, НСтр("ru='ВОЗВРАТ ПРИХОДА'")); // Чек возврата продажи + ТипыРасчета.Вставить(3, НСтр("ru='РАСХОД'")); // Чек покупки + ТипыРасчета.Вставить(4, НСтр("ru='ВОЗВРАТ РАСХОДА'")); // Чек возврата покупки + + Возврат ТипыРасчета.Получить(КодРасчета); + +КонецФункции + +// Получить типа расчета денежными средствами по коду. +// +// Параметры: +// КодПризнакаРасчета - Число - Код признака расчета. +// +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами, Произвольный - Расчет денежными средствами по коду +Функция РасчетДенежнымиСредствамиПоКоду(КодПризнакаРасчета) Экспорт + + ТипыРасчета = Новый Соответствие(); + ТипыРасчета.Вставить(1, ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств")); + ТипыРасчета.Вставить(2, ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств")); + ТипыРасчета.Вставить(3, ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.РасходДенежныхСредств")); + ТипыРасчета.Вставить(4, ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратРасходаДенежныхСредств")); + + Возврат ТипыРасчета.Получить(КодПризнакаРасчета); + +КонецФункции + +// Получить код признака способа расчета. +// +// Параметры: +// ПризнакСпособаРасчета - ПеречислениеСсылка.ПризнакиСпособаРасчета - Признак способа расчета. +// +// Возвращаемое значение: +// Произвольный, Число - Код признака способа расчета +Функция КодПризнакаСпособаРасчета(ПризнакСпособаРасчета) Экспорт + + ПризнакиСпособаРасчета = Новый Соответствие(); + ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПредоплатаПолная") , 1); + ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПредоплатаЧастичная") , 2); + ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.Аванс") , 3); + ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСПолнойОплатой") , 4); + ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСЧастичнойОплатой"), 5); + ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаБезОплаты") , 6); + ПризнакиСпособаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ОплатаКредита") , 7); + + Возврат ПризнакиСпособаРасчета.Получить(ПризнакСпособаРасчета); + +КонецФункции + +// Получить признак способа расчета по коду. +// +// Параметры: +// КодПризнакаСпособаРасчета - Число - Код признака способа расчета. +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.ПризнакиСпособаРасчета - Признак способа расчета по коду +Функция ПризнакСпособаРасчетаПоКоду(КодПризнакаСпособаРасчета) Экспорт + + ПризнакиСпособаРасчета = Новый Соответствие(); + ПризнакиСпособаРасчета.Вставить(1, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПредоплатаПолная")); + ПризнакиСпособаРасчета.Вставить(2, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПредоплатаЧастичная")); + ПризнакиСпособаРасчета.Вставить(3, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.Аванс")); + ПризнакиСпособаРасчета.Вставить(4, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСПолнойОплатой")); + ПризнакиСпособаРасчета.Вставить(5, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСЧастичнойОплатой")); + ПризнакиСпособаРасчета.Вставить(6, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаБезОплаты")); + ПризнакиСпособаРасчета.Вставить(7, ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ОплатаКредита")); + + Возврат ПризнакиСпособаРасчета.Получить(КодПризнакаСпособаРасчета); + +КонецФункции + +// Получить наименование признака способа расчета по коду. +// +// Параметры: +// КодПризнакаСпособаРасчета - Число, Произвольный - Код признака способа расчета +// +// Возвращаемое значение: +// Строка, Произвольный - Наименование признака способа расчета +Функция НаименованиеПризнакаСпособаРасчета(КодПризнакаСпособаРасчета) Экспорт; + + ПризнакиСпособаРасчета = Новый Соответствие(); + + ПризнакиСпособаРасчета.Вставить(1, НСтр("ru='ПРЕДОПЛАТА 100%'")); + ПризнакиСпособаРасчета.Вставить(2, НСтр("ru='ПРЕДОПЛАТА'")); + ПризнакиСпособаРасчета.Вставить(3, НСтр("ru='АВАНС'")); + ПризнакиСпособаРасчета.Вставить(4, НСтр("ru='ПОЛНЫЙ РАСЧЕТ'")); + ПризнакиСпособаРасчета.Вставить(5, НСтр("ru='ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ'")); + ПризнакиСпособаРасчета.Вставить(6, НСтр("ru='ПЕРЕДАЧА В КРЕДИТ'")); + ПризнакиСпособаРасчета.Вставить(7, НСтр("ru='ОПЛАТА КРЕДИТА'")); + + Возврат ПризнакиСпособаРасчета.Получить(КодПризнакаСпособаРасчета); + +КонецФункции + +// Получить код признака способа расчета. +// +// Параметры: +// ПризнакПредметаРасчета - ПеречислениеСсылка.ПризнакиПредметаРасчета - Признак предмета расчета. +// +// Возвращаемое значение: +// Произвольный, Число - Код признака предмета расчета +Функция КодПризнакаПредметаРасчета(ПризнакПредметаРасчета) Экспорт + + Код = 0; + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.КодПризнакаПредметаРасчета(Код, ПризнакПредметаРасчета); + Возврат Код; + +КонецФункции + +// Получить признак способа расчета по коду. +// +// Параметры: +// КодПризнакаПредметаРасчета - Число - Код признака предмета расчета. +// +// Возвращаемое значение: +// ПеречислениеСсылка.ПризнакиПредметаРасчета, Произвольный - Признак предмета расчета по коду +Функция ПризнакПредметаРасчетаПоКоду(КодПризнакаПредметаРасчета) Экспорт + + Значение = 0; + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.ПризнакПредметаРасчетаПоКоду(Значение, КодПризнакаПредметаРасчета); + Возврат Значение; + +КонецФункции + +// Получить наименование признака предмета расчета по коду. +// +// Параметры: +// КодПризнакаПредметаРасчета -Число - Код признака предмета расчета. +// +// Возвращаемое значение: +// Строка, Произвольный - Наименование признака предмета расчета +Функция НаименованиеПризнакаПредметаРасчета(КодПризнакаПредметаРасчета) Экспорт + + Наименование = ""; + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.НаименованиеПризнакаПредметаРасчета(Наименование, КодПризнакаПредметаРасчета); + Возврат Наименование; + +КонецФункции + +// Возвращает текстовое представление типа оплаты на ККТ по версии ФФД +// +// Параметры: +// ТипОплатыККТ - ПеречислениеСсылка.ТипыОплатыККТ +// ВерсияФФД - Строка - "1.0", "1.1", "1.2" +// +// Возвращаемое значение: +// Строка. +Функция НаименованиеТипаОплатыККТ(ТипОплатыККТ, ВерсияФФД) Экспорт + + Наименование = ""; + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.НаименованиеТипаОплатыККТ(Наименование, ТипОплатыККТ, ВерсияФФД); + Возврат Наименование; + +КонецФункции + +// Устанавливает признак того что система налогообложения ОСН +// +// Параметры: +// ЭтоОСН - Булево +// СистемаНалогообложения - ПеречислениеСсылка.ТипыСистемНалогообложенияККТ +// +Процедура ЯвляетсяОСН(ЭтоОСН, СистемаНалогообложения) Экспорт + + Если СистемаНалогообложения = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ОСН") Тогда + ЭтоОСН = Истина; + Иначе + ЭтоОСН = Ложь; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +// ++ Локализация + +#Область КодыОФД + +/////////////////////////////////////////////////////////////////////////////// +// Коды признаков агентов + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПризнакаАгента. +// Получить признак агента по коду. +// +// Параметры: +// КодПризнакаАгента - ПеречислениеСсылка.ПризнакиАгента - Код признака агента +// +// Возвращаемое значение: +// Произвольный, Число - Код признака агента +Функция КодПризнакаАгента(КодПризнакаАгента) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПризнакаАгента(КодПризнакаАгента); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.ПризнакАгентаПоКоду. +// Получить код типа признака агента. +// +// Параметры: +// ПризнакАгента - Число - Признак агента +// +// Возвращаемое значение: +// ПеречислениеСсылка.ПризнакиАгента, Произвольный - Признак агента по коду +Функция ПризнакАгентаПоКоду(ПризнакАгента) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.ПризнакАгентаПоКоду(ПризнакАгента); + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Коды изменений сведений ККТ + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПричиныИзмененияСведенийККТ. +// Получить код причины изменения сведений о ККТ. +// +// Параметры: +// ПричинаИзмененияСведенийККТ - ПеречислениеСсылка.ПричиныИзмененияСведенийККТ - Причина изменения сведений ККТ. +// +// Возвращаемое значение: +// Произвольный, Число - Код причины изменения сведений ККТ +Функция КодПричиныИзмененияСведенийККТ(ПричинаИзмененияСведенийККТ) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодПричиныИзмененияСведенийККТ(ПричинаИзмененияСведенийККТ); + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Коды маркировки + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодПланируемыйСтатусМаркируемогоТовара. +// Получить код планируемого статус маркируемого товара +// +// Параметры: +// ПланируемыйСтатусМаркируемогоТовара - ПеречислениеСсылка - Планируемый статус маркируемого товара. +// +// Возвращаемое значение: +// Число - Код планируемого статус маркируемого товара по ОФД +// +Функция КодПланируемыйСтатусМаркируемогоТовара(ПланируемыйСтатусМаркируемогоТовара) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.КодПланируемыйСтатусМаркируемогоТовара(ПланируемыйСтатусМаркируемогоТовара); + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодОтветаОИСМОСтатусеТовара. +// Получить код ответ ОИСМ о статусе товара +// +// Параметры: +// ОтветОИСМОСтатусеТовара - ПеречислениеСсылка.ОтветОИСМОСтатусеТовара - Ответ от ИСМО. +// +// Возвращаемое значение: +// Число - Ответ ОИСМ о статусе товара по ОФД +// +Функция КодОтветаОИСМОСтатусеТовара(ОтветОИСМОСтатусеТовара) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.КодОтветаОИСМОСтатусеТовара(ОтветОИСМОСтатусеТовара); + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.ОтветОИСМОСтатусеТовараПоКоду. +// Получить ответ ОИСМ о статусе товара по коду. +// +// Параметры: +// ОтветОИСМОСтатусеТовара - Число - Ответ от ИСМО. +// +// Возвращаемое значение: +// ПеречислениеСсылка.ОтветОИСМОСтатусеТовара - Ответ ОИСМ. +// +Функция ОтветОИСМОСтатусеТовараПоКоду(ОтветОИСМОСтатусеТовара) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.ОтветОИСМОСтатусеТовараПоКоду(ОтветОИСМОСтатусеТовара); + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодТипаМаркировкиККТ. +// Получить код типа маркировки ККТ по коду. +// +// Параметры: +// ТипМаркировкиККТ - ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТ. +// +// Возвращаемое значение: +// Строка, Произвольный - Код типа маркировки ККТ +Функция КодТипаМаркировкиККТ(ТипМаркировкиККТ) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.КодТипаМаркировкиККТ(ТипМаркировкиККТ); + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.ТипМаркировкиККТПоКоду. +// Получить код типа маркировки ККТ. +// +// Параметры: +// КодТипМаркировкиККТ - Число - Код тип маркировки ККТ +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТПо коду +Функция ТипМаркировкиККТПоКоду(КодТипМаркировкиККТ) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.ТипМаркировкиККТПоКоду(КодТипМаркировкиККТ); + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.СтатусРезультатаЗапросаКМПоКоду. +// Получить статус результата запроса КМ по коду. +// +// Параметры: +// КодСтатуса - Число - Код статуса. +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.СтатусРезультатаЗапросаКМ - Статус результата запроса КМПо коду +Функция СтатусРезультатаЗапросаКМПоКоду(КодСтатуса) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.СтатусРезультатаЗапросаКМПоКоду(КодСтатуса); + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Коды единицы измерения + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодМерыКоличестваПредметаРасчетаККТ. +// Код меры количества предмета расчета ККТ. +// +// Параметры: +// МераКоличестваПредметаРасчетаККТ - ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ - Мера количества предмета расчета ККТ +// +// Возвращаемое значение: +// Произвольный, Число - Код меры количества предмета расчета ККТ +Функция КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчетаККТ) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчетаККТ); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.МераКоличестваПредметаРасчетаККТПоКоду. +// Получить меру количества предмета расчета по коду. +// +// Параметры: +// КодМерыКоличестваПредметаРасчетаККТ - ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ - Код меры количества предмета расчета ККТ +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ - Мера количества предмета расчета ККТПо коду +Функция МераКоличестваПредметаРасчетаККТПоКоду(КодМерыКоличестваПредметаРасчетаККТ) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.МераКоличестваПредметаРасчетаККТПоКоду(КодМерыКоличестваПредметаРасчетаККТ); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения. +// Получить меру количества предмета расчета по коду единицы измерения. +// +// Параметры: +// КодЕдиницыИзмерения - Число - Код единицы измерения. +// +// Возвращаемое значение: +// ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ, Произвольный - Мера количества предмета расчета по коду единицы измерения +Функция МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(КодЕдиницыИзмерения) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(КодЕдиницыИзмерения); + +КонецФункции + + +#Область НефискальныйДокумент + +// АПК: 142-выкл обратная совместимость + +// Устарела: следует использовать механизм ШаблоныФискальныхДокументов.ШаблонКассовыйЧек. +// Функция формирует текст нефискального документа по шаблону. +// +// Параметры: +// ТипДокумента - Число +// ОбщиеПараметры - Структура - где: +// * ПозицииЧека - Массив из Структура - где: +// ** Наименование - Строка - . +// ** ДанныеПоставщика - Структура - где: +// *** Наименование - Строка - . +// ** ДанныеАгента - Структура - где: +// *** ОператорПеревода - Структура - +// *** Наименование - Строка - . +// * ДанныеПоставщика - Структура - где: +// ** Наименование - Строка - . +// * ДанныеАгента - Структура - где: +// ** ОператорПеревода - Структура - +// ** Наименование - Строка - . +// ШиринаСтроки - Число +// ДополнительныйТекст - Строка +// ФорматФФД - Строка +// ПолеПодписи - Булево - выводить поле подписи +// +// Возвращаемое значение: +// Строка - . +// +Функция СформироватьТекстНефискальногоДокумента(ТипДокумента, ОбщиеПараметры, ШиринаСтроки = 32, ДополнительныйТекст = Неопределено, ФорматФФД = "1.1", ПолеПодписи = Истина) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.СформироватьФискальныйДокументТекст(ТипДокумента, ОбщиеПараметры, Неопределено, ФорматФФД, ШиринаСтроки); + +КонецФункции + +// АПК: 142-вкл + +// Устарела: следует использовать механизм ШаблоныФискальныхДокументов.ШаблонКассовыйЧек. +// Функция формирует текст нефискального чека по шаблону. +// +// Параметры: +// ОбщиеПараметры - Структура - см. СформироватьТекстНефискальногоДокумента() +// ШиринаСтроки - Число +// ФорматФФД - Строка +// ПолеПодписи - Булево - выводить поле подписи +// +// Возвращаемое значение: +// Структура. +// +Функция СформироватьТекстНефискальногоЧека(ОбщиеПараметры, ШиринаСтроки = 32, ФорматФФД = "1.1", ПолеПодписи = Истина) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.СформироватьФискальныйДокументТекст(0, ОбщиеПараметры, Неопределено, ФорматФФД, ШиринаСтроки); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +// -- Локализация + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает Истина если используется ККТ без подключения оборудования +// +// Параметры: +// ПараметрыОперации - Структура - параметры выполнения операции. +// +// Возвращаемое значение: +// Булево +Функция ЭтоККТБезПодключения(ПараметрыОперации) Экспорт + + Возврат ЗначениеЗаполнено(ПараметрыОперации) + И ПараметрыОперации.Свойство("КассаККМ") + И ЗначениеЗаполнено(ПараметрыОперации.КассаККМ); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Выстраивает строку по длине поля, если поле длинное - переносит на следующую строку. +// +// Параметры: +// Текст - Неопределено, Строка - Текст +// ДлинаПоля - Число - Длина поля +// ДобСимвол - Строка - Доб символ +// ПоЦентру - Булево - По центру +// +// Возвращаемое значение: +// Неопределено, Строка - Построить поле переносом +Функция ПостроитьПолеПереносом(Знач Текст, Знач ДлинаПоля, ДобСимвол = "", ПоЦентру = Ложь) Экспорт + + ДобСимвол = ?(ПустаяСтрока(ДобСимвол), " ", ДобСимвол); + + Если СтрДлина(Текст) > ДлинаПоля Тогда + ТекстПолный = ""; + Пока СтрДлина(Текст) > ДлинаПоля Цикл + ТекстПолный = ТекстПолный + ?(ПустаяСтрока(ТекстПолный), "", Символы.ПС) + Лев(Текст, ДлинаПоля); + Текст = Сред(Текст, ДлинаПоля + 1); + КонецЦикла; + ТекстПолный = ТекстПолный + ?(ПустаяСтрока(Текст), "", Символы.ПС + Текст); + Иначе + Если ПоЦентру Тогда + ТекстПолный = Текст; + ДобавлятьСправа = Истина; + Пока СтрДлина(ТекстПолный) < ДлинаПоля Цикл + Если ДобавлятьСправа Тогда + ТекстПолный = ТекстПолный + ДобСимвол; + Иначе + ТекстПолный = ДобСимвол + ТекстПолный; + КонецЕсли; + ДобавлятьСправа = Не ДобавлятьСправа; + КонецЦикла; + Иначе + ТекстПолный = Текст; + КонецЕсли; + КонецЕсли; + + Возврат ТекстПолный; + +КонецФункции + +// Обрезает передаваемую строку по длине поля, если поле слишком короткое - дополняет символами. +// +// Параметры: +// Текст - Строка - Текст +// ДлинаПоля - Число - Длина поля +// ДобСимвол - Строка - Доб символ +// ДобавлятьСправа - Булево - если истина добавлять ДобСимвол справа, иначе слева. +// +// Возвращаемое значение: +// Строка. +// +Функция ПостроитьПоле(Знач Текст, Знач ДлинаПоля, ДобСимвол = "", ДобавлятьСправа = Истина) Экспорт + + ДобСимвол = ?(ПустаяСтрока(ДобСимвол), " ", ДобСимвол); + + ТекстПолный = Лев(Текст, ДлинаПоля); + Пока СтрДлина(ТекстПолный) < ДлинаПоля Цикл + Если ДобавлятьСправа Тогда + ТекстПолный = ТекстПолный + ДобСимвол; + Иначе + ТекстПолный = ДобСимвол + ТекстПолный; + КонецЕсли; + КонецЦикла; + + Возврат ТекстПолный; + +КонецФункции + +// Формирует строку из двух полей, если передается одно поле дополняет символами до нужного размера. +// +// Параметры: +// Текст1 - Строка +// Текст2 - Строка +// ДлинаПоля - Число +// +// Возвращаемое значение: +// Строка. +// +Функция ВыстроитьПоля(Знач Текст1, Знач Текст2 = "", Знач ДлинаПоля = 32) Экспорт + + Если ПустаяСтрока(Текст2) Тогда + ТекстПолный = ПостроитьПоле(Текст1, СтрДлина(Текст1) + Цел((ДлинаПоля - СтрДлина(Текст1))/2), , Ложь); + ТекстПолный = ПостроитьПоле(ТекстПолный, ДлинаПоля); + ИначеЕсли СтрДлина(Текст1) + СтрДлина(Текст2) < ДлинаПоля Тогда + ТекстПолный = ПостроитьПоле(Текст1, ДлинаПоля - СтрДлина(Текст2)) + Текст2; + Иначе + ТекстПолный = ПостроитьПоле(Текст1, ДлинаПоля) + Символы.ПС + ПостроитьПоле(Текст2, ДлинаПоля, ,Ложь) + КонецЕсли; + + Возврат ТекстПолный; + +КонецФункции + +// Выровнять передаваемую строку по длине поля, если поле слишком короткое - дополняет символами. +// +// Параметры: +// Текст - Строка - Текст +// ДлинаПоля - Число - Длина поля +// Выравнивание - Строка - Выравнивание +// ДобСимвол - Строка - Доб символ +// +// Возвращаемое значение: +// Строка - Выровненное поле +Функция ВыровнятьПоле(Знач Текст, Знач ДлинаПоля = 32, Знач Выравнивание = "Лево", ДобСимвол = "") Экспорт + + ДобСимвол = ?(ПустаяСтрока(ДобСимвол), " ", ДобСимвол); + НачПозиция = Истина; + ТекстПолный = Лев(Текст, ДлинаПоля); + Пока СтрДлина(ТекстПолный) < ДлинаПоля Цикл + Если Выравнивание = "Лево" Тогда + ТекстПолный = ТекстПолный + ДобСимвол; + ИначеЕсли Выравнивание = "Право" Тогда + ТекстПолный = ДобСимвол + ТекстПолный; + Иначе + Если НачПозиция Тогда + ТекстПолный = ТекстПолный + ДобСимвол; + НачПозиция = Ложь; + Иначе + ТекстПолный = ДобСимвол + ТекстПолный; + НачПозиция = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат ТекстПолный; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.xml b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.xml new file mode 100644 index 0000000..58af5f4 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация + + + ru + Оборудование чекопечатающие устройства клиент сервер локализация + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация/Ext/Module.bsl b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация/Ext/Module.bsl new file mode 100644 index 0000000..1c3583e --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация/Ext/Module.bsl @@ -0,0 +1,414 @@ +#Область ПрограммныйИнтерфейс + +#Область QRКодЧекаККТ + +// Расшифровывает QR код для чека ККТ. Структура описана в документе ФФД в разделе 61. +// +// Параметры: +// ЗначениеQRКода - Строка +// ДанныеШтрихкода - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыQRКодаЧекаККТ. +// +Процедура РасшифроватьQRКодЧекаККТ(ЗначениеQRКода, ДанныеШтрихкода) Экспорт + + // ++ Локализация + ДанныеШтрихкода.Вставить("Расшифрован", Истина); + + ПозицияСимволаСР = Найти(ЗначениеQRКода, "&s="); + ПозицияСимволаФП = Найти(ЗначениеQRКода, "&fp="); + ПозицияСимволаФН = Найти(ЗначениеQRКода, "&fn="); + ПозицияСимволаФД = Найти(ЗначениеQRКода, "&i="); + + Если Лев(ЗначениеQRКода, 2) <> "t=" Или ПозицияСимволаСР = 0 Или ПозицияСимволаФП = 0 Или ПозицияСимволаФН = 0 Или ПозицияСимволаФД = 0 Тогда + ДанныеШтрихкода.Расшифрован = Ложь; + Возврат; + КонецЕсли; + // Дата время расчета. + ДатаВремяРасчета = Сред(ЗначениеQRКода, 3, ПозицияСимволаСР - 3); + ДанныеШтрихкода.ДатаВремяРасчета = Дата(Лев(ДатаВремяРасчета, 4), Сред(ДатаВремяРасчета, 5, 2), Сред(ДатаВремяРасчета, 7, 2), + Сред(ДатаВремяРасчета, 10, 2), Сред(ДатаВремяРасчета, 12, 2) ,0); + // Номер фискального накопителя + ДанныеШтрихкода.НомерФискальногоНакопителя = Сред(ЗначениеQRКода, ПозицияСимволаФН + 4, ПозицияСимволаФД - ПозицияСимволаФН - 4); + // Номер фискального документа + ДанныеШтрихкода.НомерФискальногоДокумента = Сред(ЗначениеQRКода, ПозицияСимволаФД + 3, ПозицияСимволаФП - ПозицияСимволаФД - 3); + // Сумма расчета + ДанныеШтрихкода.СуммаРасчета = Число(Сред(ЗначениеQRКода, ПозицияСимволаСР + 3, ПозицияСимволаФН - ПозицияСимволаСР - 3)); + // Фискальный признак + Значение = Сред(ЗначениеQRКода, ПозицияСимволаФП + 4); + ДанныеШтрихкода.ФискальныйПризнак = Лев(Значение, СтрДлина(Значение) - 4); + // Признак расчета + ДанныеШтрихкода.ПризнакРасчетаКод = Число(Прав(Значение, 1)); + ДанныеШтрихкода.ПризнакРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.РасчетДенежнымиСредствамиПоКоду(ДанныеШтрихкода.ПризнакРасчетаКод); + + // -- Локализация + +КонецПроцедуры + +// Формирует QR код для чека ККТ. Структура описана в документе ФФД в разделе 61. +// +// Параметры: +// ПараметрыQRКода - Структура +// ДанныеQRКода - Строка - сформированная строка. +// +Процедура СформироватьQRКодЧекаККТ(ПараметрыQRКода, ДанныеQRКода) Экспорт + + // ++ Локализация + ДанныеQRКода = "t=%D%&s=%S%&fn=%F%&i=%I%&fp=%P%&n=%T%"; // Не локализовывать - утверждено ФФД. + // Формирование QR кода. + // АПК: 1367-выкл особенность локального законодательства + ДанныеQRКода = СтрЗаменить(ДанныеQRКода, "%D%", Формат(ПараметрыQRКода.ДатаВремяРасчета, "ДФ='ггггММддTЧЧмм'")); // Не локализовывать - утверждено ФФД. + // АПК: 1367-вкл + ДанныеQRКода = СтрЗаменить(ДанныеQRКода, "%F%", ПараметрыQRКода.НомерФискальногоНакопителя); + ДанныеQRКода = СтрЗаменить(ДанныеQRКода, "%S%", Формат(ПараметрыQRКода.СуммаРасчета, "ЧДЦ=2;ЧГ=;ЧРД=.")); + ДанныеQRКода = СтрЗаменить(ДанныеQRКода, "%I%", Формат(ПараметрыQRКода.НомерФискальногоДокумента, "ЧГ=")); + ДанныеQRКода = СтрЗаменить(ДанныеQRКода, "%P%", ПараметрыQRКода.ФискальныйПризнак); + Если ПараметрыQRКода.Свойство("ПризнакРасчета") И Не ПустаяСтрока(ПараметрыQRКода.ПризнакРасчета) Тогда + ПризнакРасчетаКод = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодРасчетаДенежнымиСредствами(ПараметрыQRКода.ПризнакРасчета); + Иначе + ПризнакРасчетаКод = ПараметрыQRКода.ПризнакРасчетаКод; + КонецЕсли; + ДанныеQRКода = СтрЗаменить(ДанныеQRКода, "%T%", ПризнакРасчетаКод); + + // -- Локализация + +КонецПроцедуры + +#КонецОбласти + +#Область КодыОФД + +/////////////////////////////////////////////////////////////////////////////// +// Система налогообложения + +// Возвращает код системы налогообложения ККТ. +// +// Параметры: +// Код - Число +// СистемаНалогообложенияККТ - ПеречислениеСсылка.ТипыСистемНалогообложенияККТ - Система налогообложения ККТ. +// +Процедура КодСистемыНалогообложенияККТ(Код, СистемаНалогообложенияККТ) Экспорт + + // ++ Локализация + СистемыНалогообложения = Новый Соответствие(); + СистемыНалогообложения.Вставить(ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ОСН") , 0); + СистемыНалогообложения.Вставить(ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.УСНДоход") , 1); + СистемыНалогообложения.Вставить(ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.УСНДоходРасход"), 2); + СистемыНалогообложения.Вставить(ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ЕНВД") , 3); + СистемыНалогообложения.Вставить(ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ЕСН") , 4); + СистемыНалогообложения.Вставить(ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.Патент") , 5); + + Код = СистемыНалогообложения.Получить(СистемаНалогообложенияККТ); + + // -- Локализация +КонецПроцедуры + +// Возвращает систему налогообложения ККТ по коду +// +// Параметры: +// Значение - ПеречислениеСсылка.ТипыСистемНалогообложенияККТ +// КодСистемыНалогообложенияККТ - Число - Код системы налогообложения ККТ. +// +Процедура СистемаНалогообложенияККТПоКоду(Значение, КодСистемыНалогообложенияККТ) Экспорт + + // ++ Локализация + СистемыНалогообложения = Новый Соответствие(); + СистемыНалогообложения.Вставить(0, ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ОСН")); + СистемыНалогообложения.Вставить(1, ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.УСНДоход")); + СистемыНалогообложения.Вставить(2, ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.УСНДоходРасход")); + СистемыНалогообложения.Вставить(3, ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ЕНВД")); + СистемыНалогообложения.Вставить(4, ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ЕСН")); + СистемыНалогообложения.Вставить(5, ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.Патент")); + + Значение = СистемыНалогообложения.Получить(КодСистемыНалогообложенияККТ); + + // -- Локализация +КонецПроцедуры + +// Возвращает наименование системы налогообложения по коду. +// +// Параметры: +// Значение - Строка +// СистемаНалогообложения - Число, Произвольный - Система налогообложения +// Кратко - Булево - Кратко +// +Процедура НаименованиеСистемыНалогообложения(Значение, СистемаНалогообложения, Кратко = Ложь) Экспорт; + + // ++ Локализация + + СистемыНалогообложения = Новый Соответствие(); + Если Кратко Тогда + СистемыНалогообложения.Вставить(0, НСтр("ru='ОСН'")); + СистемыНалогообложения.Вставить(1, НСтр("ru='УСН доход'")); + СистемыНалогообложения.Вставить(2, НСтр("ru='УСН доход-расход'")); + СистемыНалогообложения.Вставить(3, НСтр("ru='ЕНВД'")); + СистемыНалогообложения.Вставить(4, НСтр("ru='ЕСН'")); + СистемыНалогообложения.Вставить(5, НСтр("ru='Патент'")); + Иначе + СистемыНалогообложения.Вставить(0, НСтр("ru='Общая'")); + СистемыНалогообложения.Вставить(1, НСтр("ru='Упрощенная Доход'")); + СистемыНалогообложения.Вставить(2, НСтр("ru='Упрощенная Доход минус Расход'")); + СистемыНалогообложения.Вставить(3, НСтр("ru='Единый налог на вмененный доход'")); + СистемыНалогообложения.Вставить(4, НСтр("ru='Единый сельскохозяйственный налог'")); + СистемыНалогообложения.Вставить(5, НСтр("ru='Патентная система налогообложения'")); + КонецЕсли; + + Значение = СистемыНалогообложения.Получить(СистемаНалогообложения); + + // -- Локализация +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// Коды видов документов + +// Возвращает код вида документа удостоверяющего личность ККТ. +// +// Параметры: +// Код - Число +// ВидДокументаУдостоверяющегоЛичность - ПеречислениеСсылка - Вид документа удостоверяющего личность +// +Процедура КодВидДокументаУдостоверяющегоЛичность(Код, ВидДокументаУдостоверяющегоЛичность) Экспорт + + // ++ Локализация + ВидДокумента = Новый Соответствие(); + + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ПаспортГражданинаРФ"), 21); + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ПаспортГражданинаРФЗаПределамиРФ"), 22); + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ВременноеУдостоверениеЛичностиГражданинаРФ"), 26); + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.СвидетельствоОРожденииГражданинаРФ"), 27); + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ИныеДокументыУдостоверяющиеЛичностьГражданинаРФ"), 28); + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ПаспортИностранногоГражданина"), 31); + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ИныеДокументыУдостоверяющимиЛичностьИностранногоГражданина"), 32); + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ДокументВыданныйИностраннымГосударствомУдостоверяющегоЛичностьБезГражданства"), 33); + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ВидНаЖительствоДляЛицБезГражданства"), 34); + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.РазрешениеНаВременноеПроживаниеДляЛицБезГражданства"), 35); + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.СвидетельствоОРасХодатайстваОПризнанииЛицаБезГражданстваБеженцемНаТерриторииРФ"), 36); + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.УдостоверениеБеженца"), 37); + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ИныеДокументыУдостоверяющимиЛичностьЛицБезГражданстваРФ"), 38); + // АПК: 1036-выкл - ограничение длины идентификатора + ВидДокумента.Вставить(ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ДокументУдостовЛичностьЛицаНаПериодРассмотренияЗаявленияОПризнанииГражданиномРФ"), 40); + // АПК: 1036-вкл + + Код = ВидДокумента.Получить(ВидДокументаУдостоверяющегоЛичность); + // -- Локализация + +КонецПроцедуры + +// Возвращает вида документа удостоверяющего личность ККТ по коду. +// +// Параметры: +// Значение - ПеречислениеСсылка +// КодВидаДокументаУдостоверяющегоЛичность - Число - Код вида документа удостоверяющего личность. +// +Процедура ВидДокументаУдостоверяющегоЛичностьПоКоду(Значение, КодВидаДокументаУдостоверяющегоЛичность) Экспорт + + // ++ Локализация + ВидДокумента = Новый Соответствие(); + + ВидДокумента.Вставить(21, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ПаспортГражданинаРФ")); + ВидДокумента.Вставить(22, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ПаспортГражданинаРФЗаПределамиРФ")); + ВидДокумента.Вставить(26, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ВременноеУдостоверениеЛичностиГражданинаРФ")); + ВидДокумента.Вставить(27, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.СвидетельствоОРожденииГражданинаРФ")); + ВидДокумента.Вставить(28, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ИныеДокументыУдостоверяющиеЛичностьГражданинаРФ")); + ВидДокумента.Вставить(31, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ПаспортИностранногоГражданина")); + ВидДокумента.Вставить(32, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ИныеДокументыУдостоверяющимиЛичностьИностранногоГражданина")); + ВидДокумента.Вставить(33, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ДокументВыданныйИностраннымГосударствомУдостоверяющегоЛичностьБезГражданства")); + ВидДокумента.Вставить(34, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ВидНаЖительствоДляЛицБезГражданства")); + ВидДокумента.Вставить(35, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.РазрешениеНаВременноеПроживаниеДляЛицБезГражданства")); + ВидДокумента.Вставить(36, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.СвидетельствоОРасХодатайстваОПризнанииЛицаБезГражданстваБеженцемНаТерриторииРФ")); + ВидДокумента.Вставить(37, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.УдостоверениеБеженца")); + ВидДокумента.Вставить(38, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ИныеДокументыУдостоверяющимиЛичностьЛицБезГражданстваРФ")); + // АПК: 1036-выкл ограничение длины идентификатора + ВидДокумента.Вставить(40, ПредопределенноеЗначение("Перечисление.ВидДокументаУдостоверяющегоЛичностьККТ.ДокументУдостовЛичностьЛицаНаПериодРассмотренияЗаявленияОПризнанииГражданиномРФ")); + // АПК: 1036-вкл + + Значение = ВидДокумента.Получить(КодВидаДокументаУдостоверяющегоЛичность); + // -- Локализация + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// Коды расчетов, признаков расчетов и предметов расчетов + +// Возвращает текстовое представление типа оплаты на ККТ по версии ФФД +// +// Параметры: +// Наименование - Строка +// ТипОплатыККТ - ПеречислениеСсылка.ТипыОплатыККТ +// ВерсияФФД - Строка - "1.0", "1.1", "1.2" +// +Процедура НаименованиеТипаОплатыККТ(Наименование, ТипОплатыККТ, ВерсияФФД) Экспорт + + // ++ Локализация + + ТаблицаТипОплатыККТ = Новый Соответствие(); + Если ВерсияФФД = "1.0" Тогда + ТаблицаТипОплатыККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные"), " "+НСтр("ru='НАЛИЧНЫМИ='")); + ТаблицаТипОплатыККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно"), " "+НСтр("ru='ЭЛЕКТРОННЫМИ='")); + ТаблицаТипОплатыККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Предоплата"), " "+НСтр("ru='ЭЛЕКТРОННЫМИ='")); + ТаблицаТипОплатыККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Постоплата"), " "+НСтр("ru='ЭЛЕКТРОННЫМИ='")); + ТаблицаТипОплатыККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.ВстречноеПредоставление"), " "+НСтр("ru='ЭЛЕКТРОННЫМИ='")); + Иначе + ТаблицаТипОплатыККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные"), " "+НСтр("ru='НАЛИЧНЫМИ='")); + ТаблицаТипОплатыККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно"), " "+НСтр("ru='БЕЗНАЛИЧНЫМИ='")); + ТаблицаТипОплатыККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Предоплата"), " "+НСтр("ru='ПРЕДВАРИТЕЛЬНАЯ='")); + ТаблицаТипОплатыККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Постоплата"), " "+НСтр("ru='ПОСЛЕДУЮЩАЯ='")); + ТаблицаТипОплатыККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.ВстречноеПредоставление"), " "+НСтр("ru='ИНАЯ ФОРМА='")); + КонецЕсли; + + Наименование = ТаблицаТипОплатыККТ.Получить(ТипОплатыККТ); + + // -- Локализация + +КонецПроцедуры + +// Возвращает код признака способа расчета. +// +// Параметры: +// Код - Число +// ПризнакПредметаРасчета - ПеречислениеСсылка.ПризнакиПредметаРасчета - Признак предмета расчета. +// +Процедура КодПризнакаПредметаРасчета(Код, ПризнакПредметаРасчета) Экспорт + + // ++ Локализация + ПризнакиПредметаРасчета = Новый Соответствие(); + + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Товар") , 1); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ПодакцизныйТовар") , 2); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Работа") , 3); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Услуга") , 4); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.СтавкаАзартнойИгры") , 5); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ВыигрышАзартнойИгры") , 6); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ЛотерейныйБилет") , 7); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ВыигрышЛотереи") , 8); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ПредоставлениеРИД") , 9); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Платеж") , 10); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.АгентскоеВознаграждение"), 11); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Выплата") , 12); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ИнойПредметРасчета") , 13); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ИмущественноеПраво") , 14); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ВнереализационныйДоход") , 15); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.СтраховыеВзносы") , 16); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ТорговыйСбор") , 17); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.КурортныйСбор") , 18); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ТуристическийНалог") , 18); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Залог") , 19); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Расход") , 20); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ОбязательноеПенсионноеСтрахованиеИП") , 21); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ОбязательноеПенсионноеСтрахование") , 22); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ОбязательноеМедицинскоеСтрахованиеИП"), 23); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ОбязательноеМедицинскоеСтрахование") , 24); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ОбязательноеСоциальноеСтрахование") , 25); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ПлатежКазино") , 26); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ПлатежВыплата") , 10); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.СоставнойПредметРасчета"), 10); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ВыдачаДенежныхСредств"), 27); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ПодакцизныйТоварМаркируемыйСИНеИмеющийКМ") , 30); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ПодакцизныйТоварМаркируемыйСИИмеющийКМ") , 31); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ТоварМаркируемыйСИНеИмеющийКМ"), 32); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ТоварМаркируемыйСИИмеющийКМ") , 33); + + Код = ПризнакиПредметаРасчета.Получить(ПризнакПредметаРасчета); + + // -- Локализация +КонецПроцедуры + +// Возвращает признак способа расчета по коду. +// +// Параметры: +// Значение - ПеречислениеСсылка.ПризнакиПредметаРасчета +// КодПризнакаПредметаРасчета - Число - Код признака предмета расчета. +// +Процедура ПризнакПредметаРасчетаПоКоду(Значение, КодПризнакаПредметаРасчета) Экспорт + + // ++ Локализация + ПризнакиПредметаРасчета = Новый Соответствие(); + + ПризнакиПредметаРасчета.Вставить(1, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Товар")); + ПризнакиПредметаРасчета.Вставить(2, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ПодакцизныйТовар")); + ПризнакиПредметаРасчета.Вставить(3, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Работа")); + ПризнакиПредметаРасчета.Вставить(4, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Услуга")); + ПризнакиПредметаРасчета.Вставить(5, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.СтавкаАзартнойИгры")); + ПризнакиПредметаРасчета.Вставить(6, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ВыигрышАзартнойИгры")); + ПризнакиПредметаРасчета.Вставить(7, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ЛотерейныйБилет")); + ПризнакиПредметаРасчета.Вставить(8, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ВыигрышЛотереи")); + ПризнакиПредметаРасчета.Вставить(9, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ПредоставлениеРИД")); + ПризнакиПредметаРасчета.Вставить(10, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Платеж")); + ПризнакиПредметаРасчета.Вставить(11, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.АгентскоеВознаграждение")); + ПризнакиПредметаРасчета.Вставить(12, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Выплата")); + ПризнакиПредметаРасчета.Вставить(13, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ИнойПредметРасчета")); + ПризнакиПредметаРасчета.Вставить(14, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ИмущественноеПраво")); + ПризнакиПредметаРасчета.Вставить(15, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ВнереализационныйДоход")); + ПризнакиПредметаРасчета.Вставить(16, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.СтраховыеВзносы")); + ПризнакиПредметаРасчета.Вставить(17, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ТорговыйСбор")); + ПризнакиПредметаРасчета.Вставить(18, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ТуристическийНалог")); + ПризнакиПредметаРасчета.Вставить(19, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Залог")); + ПризнакиПредметаРасчета.Вставить(20, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Расход")); + ПризнакиПредметаРасчета.Вставить(21, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ОбязательноеПенсионноеСтрахованиеИП")); + ПризнакиПредметаРасчета.Вставить(22, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ОбязательноеПенсионноеСтрахование")); + ПризнакиПредметаРасчета.Вставить(23, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ОбязательноеМедицинскоеСтрахованиеИП")); + ПризнакиПредметаРасчета.Вставить(24, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ОбязательноеМедицинскоеСтрахование")); + ПризнакиПредметаРасчета.Вставить(25, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ОбязательноеСоциальноеСтрахование")); + ПризнакиПредметаРасчета.Вставить(26, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ПлатежКазино")); + ПризнакиПредметаРасчета.Вставить(27, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ВыдачаДенежныхСредств")); + ПризнакиПредметаРасчета.Вставить(30, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ПодакцизныйТоварМаркируемыйСИНеИмеющийКМ")); + ПризнакиПредметаРасчета.Вставить(31, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ПодакцизныйТоварМаркируемыйСИИмеющийКМ")); + ПризнакиПредметаРасчета.Вставить(32, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ТоварМаркируемыйСИНеИмеющийКМ")); + ПризнакиПредметаРасчета.Вставить(33, ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ТоварМаркируемыйСИИмеющийКМ")); + + Значение = ПризнакиПредметаРасчета.Получить(КодПризнакаПредметаРасчета); + + // -- Локализация + +КонецПроцедуры + +// Возвращает наименование признака предмета расчета по коду. +// +// Параметры: +// Наименование - Строка +// КодПризнакаПредметаРасчета -Число - Код признака предмета расчета. +// +Процедура НаименованиеПризнакаПредметаРасчета(Наименование, КодПризнакаПредметаРасчета) Экспорт + + // ++ Локализация + + ПризнакиПредметаРасчета = Новый Соответствие(); + + ПризнакиПредметаРасчета.Вставить(1, НСтр("ru='ТОВАР'")); + ПризнакиПредметаРасчета.Вставить(2, НСтр("ru='ПОДАКЦИЗНЫЙ ТОВАР'")); + ПризнакиПредметаРасчета.Вставить(3, НСтр("ru='РАБОТА'")); + ПризнакиПредметаРасчета.Вставить(4, НСтр("ru='УСЛУГА'")); + ПризнакиПредметаРасчета.Вставить(5, НСтр("ru='СТАВКА АЗАРТНОЙ ИГРЫ'")); + ПризнакиПредметаРасчета.Вставить(6, НСтр("ru='ВЫИГРЫШ АЗАРТНОЙ ИГРЫ'")); + ПризнакиПредметаРасчета.Вставить(7, НСтр("ru='СТАВКА ЛОТЕРЕИ'")); + ПризнакиПредметаРасчета.Вставить(8, НСтр("ru='ВЫИГРЫШ ЛОТЕРЕИ'")); + ПризнакиПредметаРасчета.Вставить(9, НСтр("ru='ПРЕДОСТАВЛЕНИЕ РИД'")); + ПризнакиПредметаРасчета.Вставить(10, НСтр("ru='ПЛАТЕЖ'")); + ПризнакиПредметаРасчета.Вставить(11, НСтр("ru='АГЕНТСКОЕ ВОЗНАГРАЖДЕНИЕ'")); + ПризнакиПредметаРасчета.Вставить(12, НСтр("ru='ВЫПЛАТА'")); + ПризнакиПредметаРасчета.Вставить(13, НСтр("ru='ИНОЙ ПРЕДМЕТ РАСЧЕТА'")); + ПризнакиПредметаРасчета.Вставить(14, НСтр("ru='ИМУЩЕСТВЕННОЕ ПРАВО'")); + ПризнакиПредметаРасчета.Вставить(15, НСтр("ru='ВНЕРЕАЛИЗАЦИОННЫЙ ДОХОД'")); + ПризнакиПредметаРасчета.Вставить(16, НСтр("ru='ИНЫЕ ПЛАТЕЖИ И ВЗНОСЫ'")); + ПризнакиПредметаРасчета.Вставить(17, НСтр("ru='ТОРГОВЫЙ СБОР'")); + ПризнакиПредметаРасчета.Вставить(18, НСтр("ru='ТУРИСТИЧЕСКИЙ НАЛОГ'")); + ПризнакиПредметаРасчета.Вставить(19, НСтр("ru='ЗАЛОГ'")); + ПризнакиПредметаРасчета.Вставить(20, НСтр("ru='РАСХОД'")); + ПризнакиПредметаРасчета.Вставить(21, НСтр("ru='ВЗНОСЫ НА ОПС ИП'")); + ПризнакиПредметаРасчета.Вставить(22, НСтр("ru='ВЗНОСЫ НА ОПС'")); + ПризнакиПредметаРасчета.Вставить(23, НСтр("ru='ВЗНОСЫ НА ОМС ИП'")); + ПризнакиПредметаРасчета.Вставить(24, НСтр("ru='ВЗНОСЫ НА ОМС'")); + ПризнакиПредметаРасчета.Вставить(25, НСтр("ru='ВЗНОСЫ НА ОСС'")); + ПризнакиПредметаРасчета.Вставить(26, НСтр("ru='ПЛАТЕЖ КАЗИНО'")); + ПризнакиПредметаРасчета.Вставить(27, НСтр("ru='ВЫДАЧА ДЕНЕЖНЫХ СРЕДСТВ'")); + ПризнакиПредметаРасчета.Вставить(30, НСтр("ru='АТНМ'")); + ПризнакиПредметаРасчета.Вставить(31, НСтр("ru='АТМ'")); + ПризнакиПредметаРасчета.Вставить(32, НСтр("ru='ТНМ'")); + ПризнакиПредметаРасчета.Вставить(33, НСтр("ru='ТМ'")); + + Наименование = ПризнакиПредметаРасчета.Получить(КодПризнакаПредметаРасчета); + + // -- Локализация +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваЛокализация.xml b/CommonModules/ОборудованиеЧекопечатающиеУстройстваЛокализация.xml new file mode 100644 index 0000000..ccf8354 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваЛокализация.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеЧекопечатающиеУстройстваЛокализация + + + ru + Оборудование чекопечатающие устройства + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваЛокализация/Ext/Module.bsl b/CommonModules/ОборудованиеЧекопечатающиеУстройстваЛокализация/Ext/Module.bsl new file mode 100644 index 0000000..39cbb7e --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваЛокализация/Ext/Module.bsl @@ -0,0 +1,351 @@ + +#Область ПрограммныйИнтерфейс + +#Область ПараметрыРегистрации + +// Сохраняет параметры регистрации устройства +// +// Параметры: +// Результат - Булево +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства - +// ПараметрыРегистрации - Структура - +// +Процедура СохранитьПараметрыРегистрацииУстройства(Результат, Идентификатор, ПараметрыРегистрации) Экспорт + + // ++ Локализация + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 + | ПодключаемоеОборудование.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.Ссылка = &Идентификатор"); + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Результат = Ложь; + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + БлокировкаДанных = Новый БлокировкаДанных(); + ЭлементБлокировки = БлокировкаДанных.Добавить("Справочник.ПодключаемоеОборудование"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Ссылка", Идентификатор); + БлокировкаДанных.Заблокировать(); + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + ОбъектСсылка = Выборка.Ссылка; // СправочникСсылка.ПодключаемоеОборудование + ОбъектСправочника = ОбъектСсылка.ПолучитьОбъект(); + ОбъектСправочника.ПараметрыРегистрации.Очистить(); + Для Каждого ПараметрРегистрации Из ПараметрыРегистрации Цикл + НоваяСтрока = ОбъектСправочника.ПараметрыРегистрации.Добавить(); + НоваяСтрока.НаименованиеПараметра = ПараметрРегистрации.Ключ; + Если ТипЗнч(ПараметрРегистрации.Значение) = Тип("Булево") Тогда + НоваяСтрока.ЗначениеПараметра = XMLСтрока(ПараметрРегистрации.Значение); + Иначе + НоваяСтрока.ЗначениеПараметра = ПараметрРегистрации.Значение; + КонецЕсли; + КонецЦикла; + ОбъектСправочника.Записать(); + Результат = Истина; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Результат = Ложь; + КонецПопытки; + + УстановитьПривилегированныйРежим(Ложь); + + // -- Локализация + +КонецПроцедуры + +// Возвращает по идентификатору устройства параметры регистрации. +// +// Параметры: +// ПараметрыРегистрации - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыРегистрацииККТ +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование +// +Процедура ПараметрыРегистрацииУстройства(ПараметрыРегистрации, Идентификатор) Экспорт + + // ++ Локализация + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПодключаемоеОборудование.Ссылка КАК Ссылка, + | ПодключаемоеОборудованиеПараметрыРегистрации.НаименованиеПараметра КАК НаименованиеПараметра, + | ПодключаемоеОборудованиеПараметрыРегистрации.ЗначениеПараметра КАК ЗначениеПараметра + |ИЗ + | Справочник.ПодключаемоеОборудование.ПараметрыРегистрации КАК ПодключаемоеОборудованиеПараметрыРегистрации + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + | ПО ПодключаемоеОборудованиеПараметрыРегистрации.Ссылка = ПодключаемоеОборудование.Ссылка + |ГДЕ + | ПодключаемоеОборудование.Ссылка = &Идентификатор"; + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + + РезультатЗапроса = Запрос.Выполнить(); + + ЕстьДанные = Ложь; + ДанныеХранения = Новый Структура(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + // Вставить обработку выборки ВыборкаДетальныеЗаписи + ДанныеХранения.Вставить(ВыборкаДетальныеЗаписи.НаименованиеПараметра, ВыборкаДетальныеЗаписи.ЗначениеПараметра); + ЕстьДанные = Истина; + КонецЦикла; + + ПараметрыРегистрации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыРегистрацииККТ(); + ПараметрыРегистрации.Вставить("ЕстьДанные", ЕстьДанные); + + Если ЕстьДанные Тогда + ПараметрыРегистрации.РегистрационныйНомерККТ = ДанныеХранения.РегистрационныйНомерККТ; + ПараметрыРегистрации.ОрганизацияНазвание = ДанныеХранения.ОрганизацияНазвание; + ПараметрыРегистрации.ОрганизацияИНН = ДанныеХранения.ОрганизацияИНН; + + Если ДанныеХранения.Свойство("АдресПроведенияРасчетов") Тогда + ПараметрыРегистрации.АдресПроведенияРасчетов = ДанныеХранения.АдресПроведенияРасчетов; + КонецЕсли; + Если ДанныеХранения.Свойство("МестоПроведенияРасчетов") Тогда + ПараметрыРегистрации.МестоПроведенияРасчетов = ДанныеХранения.МестоПроведенияРасчетов; + КонецЕсли; + + ПараметрыРегистрации.КодыСистемыНалогообложения = ДанныеХранения.КодыСистемыНалогообложения; + + Если ДанныеХранения.Свойство("ПризнакАвтономногоРежима") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакАвтономногоРежима) Тогда + ПараметрыРегистрации.ПризнакАвтономногоРежима = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакАвтономногоРежима); + КонецЕсли; + Если ДанныеХранения.Свойство("ПризнакШифрованиеДанных") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакШифрованиеДанных) Тогда + ПараметрыРегистрации.ПризнакШифрованиеДанных = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакШифрованиеДанных); + КонецЕсли; + Если ДанныеХранения.Свойство("ПризнакРасчетовЗаУслуги") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакРасчетовЗаУслуги) Тогда + ПараметрыРегистрации.ПризнакАвтономногоРежима = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакАвтономногоРежима); + КонецЕсли; + Если ДанныеХранения.Свойство("ПризнакФормированияБСО") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакФормированияБСО) Тогда + ПараметрыРегистрации.ПризнакФормированияБСО = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакФормированияБСО); + КонецЕсли; + Если ДанныеХранения.Свойство("ПризнакРасчетовТолькоВИнтернет") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакРасчетовТолькоВИнтернет) Тогда + ПараметрыРегистрации.ПризнакРасчетовТолькоВИнтернет = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакРасчетовТолькоВИнтернет); + КонецЕсли; + Если ДанныеХранения.Свойство("ПродажаПодакцизногоТовара") И НЕ ПустаяСтрока(ДанныеХранения.ПродажаПодакцизногоТовара) Тогда + ПараметрыРегистрации.ПродажаПодакцизногоТовара = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПродажаПодакцизногоТовара); + КонецЕсли; + Если ДанныеХранения.Свойство("ПроведенияАзартныхИгр") И НЕ ПустаяСтрока(ДанныеХранения.ПроведенияАзартныхИгр) Тогда + ПараметрыРегистрации.ПроведенияАзартныхИгр = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПроведенияАзартныхИгр); + КонецЕсли; + Если ДанныеХранения.Свойство("ПроведенияЛотерей") И НЕ ПустаяСтрока(ДанныеХранения.ПроведенияЛотерей) Тогда + ПараметрыРегистрации.ПроведенияЛотерей = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПроведенияЛотерей); + КонецЕсли; + Если ДанныеХранения.Свойство("УстановкаПринтераВАвтомате") И НЕ ПустаяСтрока(ДанныеХранения.УстановкаПринтераВАвтомате) Тогда + ПараметрыРегистрации.УстановкаПринтераВАвтомате = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.УстановкаПринтераВАвтомате); + КонецЕсли; + + Если ДанныеХранения.Свойство("ПризнакиАгента") Тогда + ПараметрыРегистрации.ПризнакиАгента = ДанныеХранения.ПризнакиАгента; + КонецЕсли; + + ПараметрыРегистрации.НомерАвтоматаДляАвтоматическогоРежима = ДанныеХранения.НомерАвтоматаДляАвтоматическогоРежима; + ПараметрыРегистрации.ОрганизацияОФДИНН = ДанныеХранения.ОрганизацияОФДИНН; + ПараметрыРегистрации.ОрганизацияОФДНазвание = ДанныеХранения.ОрганизацияОФДНазвание; + ПараметрыРегистрации.ЗаводскойНомерККТ = ДанныеХранения.ЗаводскойНомерККТ; + ПараметрыРегистрации.ЗаводскойНомерФН = ДанныеХранения.ЗаводскойНомерФН; + ПараметрыРегистрации.ВерсияФФДККТ = ДанныеХранения.ВерсияФФДККТ; + ПараметрыРегистрации.ВерсияФФДФН = ДанныеХранения.ВерсияФФДФН; + Если ДанныеХранения.Свойство("ПризнакФискализации") И НЕ ПустаяСтрока(ДанныеХранения.ПризнакФискализации) Тогда + ПараметрыРегистрации.ПризнакФискализации = ОбщегоНазначенияБПО.ПреобразоватьВБулево(ДанныеХранения.ПризнакФискализации); + КонецЕсли; + КонецЕсли; + + // -- Локализация + +КонецПроцедуры + +// Обновляет параметры регистрации ККТ +// +// Параметры: +// ПараметрыРегистрацииТаблица - ТаблицаЗначений - +// ПараметрыРегистрации - ТаблицаЗначений - +// +Процедура ОбновитьПараметрыРегистрацииККТ(ПараметрыРегистрацииТаблица, ПараметрыРегистрации) Экспорт + + // ++ Локализация + + Для Каждого ПараметрРегистрации Из ПараметрыРегистрации Цикл + + Параметр = ПараметрыРегистрацииТаблица.Добавить(); + НаименованиеПараметра = ПараметрРегистрации.НаименованиеПараметра; + ЗначениеПараметра = ПараметрРегистрации.ЗначениеПараметра; + + Если НаименованиеПараметра = "РегистрационныйНомерККТ" Тогда + НаименованиеПараметра = НСтр("ru='Регистрационный номер ККТ'") + ИначеЕсли НаименованиеПараметра = "ОрганизацияНазвание" Тогда + НаименованиеПараметра = НСтр("ru='Название организации'") + ИначеЕсли НаименованиеПараметра = "ОрганизацияИНН" Тогда + НаименованиеПараметра = НСтр("ru='ИНН организации'") + ИначеЕсли НаименованиеПараметра = "АдресПроведенияРасчетов" Тогда + НаименованиеПараметра = НСтр("ru='Адрес проведения расчетов'") + ИначеЕсли НаименованиеПараметра = "КодыСистемыНалогообложения" Тогда + НаименованиеПараметра = НСтр("ru='Системы налогообложения'"); + СистемыНалогообложения = СтрРазделить(ЗначениеПараметра, ","); + ЗначениеПараметра = ""; + Для Каждого СистемаНалогообложения Из СистемыНалогообложения Цикл + ЗначениеПараметра = ?(Не ПустаяСтрока(ЗначениеПараметра), ЗначениеПараметра + ",", ""); + Если Не ПустаяСтрока(СистемаНалогообложения) Тогда + ЗначениеПараметра = ЗначениеПараметра + """"+ ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеСистемыНалогообложения(Число(СистемаНалогообложения)) + """"; + КонецЕсли; + КонецЦикла; + ИначеЕсли НаименованиеПараметра = "ПризнакАвтономногоРежима" Тогда + НаименованиеПараметра = НСтр("ru='Автономный режим'") + ИначеЕсли НаименованиеПараметра = "ПризнакАвтоматическогоРежима" Тогда + НаименованиеПараметра = НСтр("ru='Автоматический режим'") + ИначеЕсли НаименованиеПараметра = "НомерАвтоматаДляАвтоматическогоРежима" Тогда + НаименованиеПараметра = НСтр("ru='Номер автомата для автоматического режима'") + ИначеЕсли НаименованиеПараметра = "ПризнакШифрованиеДанных" Тогда + НаименованиеПараметра = НСтр("ru='Шифрование данных'") + ИначеЕсли НаименованиеПараметра = "ПризнакРасчетовЗаУслуги" Тогда + НаименованиеПараметра = НСтр("ru='Расчет за услуги'") + ИначеЕсли НаименованиеПараметра = "ПризнакФормированияБСО" Тогда + НаименованиеПараметра = НСтр("ru='Формирования БСО'") + ИначеЕсли НаименованиеПараметра = "ПризнакРасчетовТолькоВИнтернет" Тогда + НаименованиеПараметра = НСтр("ru='Расчет только в интернет'") + ИначеЕсли НаименованиеПараметра = "ОрганизацияОФДИНН" Тогда + НаименованиеПараметра = НСтр("ru='ОФД ИНН'") + ИначеЕсли НаименованиеПараметра = "ОрганизацияОФДНазвание" Тогда + НаименованиеПараметра = НСтр("ru='Наименование ОФД'") + ИначеЕсли НаименованиеПараметра = "ЗаводскойНомерККТ" Тогда + НаименованиеПараметра = НСтр("ru='Заводской номер ККТ'") + ИначеЕсли НаименованиеПараметра = "ПризнакФискализации" Тогда + НаименованиеПараметра = НСтр("ru='Признак фискализации'") + ИначеЕсли НаименованиеПараметра = "ЗаводскойНомерФН" Тогда + НаименованиеПараметра = НСтр("ru='Заводской номер ФН'") + ИначеЕсли НаименованиеПараметра = "НомерДокументаФискализации" Тогда + НаименованиеПараметра = НСтр("ru='Номер документа фискализации'") + ИначеЕсли НаименованиеПараметра = "ДатаВремяФискализации" Тогда + НаименованиеПараметра = НСтр("ru='Дата и время фискализации'") + ИначеЕсли НаименованиеПараметра = "ВерсияФФДККТ" Тогда + НаименованиеПараметра = НСтр("ru='Версия ФФД ККТ'") + ИначеЕсли НаименованиеПараметра = "ВерсияФФДФН" Тогда + НаименованиеПараметра = НСтр("ru='Версия ФФД ФН'") + // ФФД 1.05 и ФФД 1.1 + ИначеЕсли НаименованиеПараметра = "МестоПроведенияРасчетов" Тогда + НаименованиеПараметра = НСтр("ru='Место проведения расчетов'") + ИначеЕсли НаименованиеПараметра = "ПродажаПодакцизногоТовара" Тогда + НаименованиеПараметра = НСтр("ru='Продажа подакцизного товара'") + ИначеЕсли НаименованиеПараметра = "ПроведенияАзартныхИгр" Тогда + НаименованиеПараметра = НСтр("ru='Проведения азартных игр'") + ИначеЕсли НаименованиеПараметра = "ПроведенияЛотерей" Тогда + НаименованиеПараметра = НСтр("ru='Проведения лотерей'") + ИначеЕсли НаименованиеПараметра = "ПризнакиАгента" Тогда + НаименованиеПараметра = НСтр("ru='Признаки агента'") + ИначеЕсли НаименованиеПараметра = "УстановкаПринтераВАвтомате" Тогда + НаименованиеПараметра = НСтр("ru='Установка принтера в автомате'") + КонецЕсли; + + Параметр.НаименованиеПараметра = НаименованиеПараметра; + Параметр.ЗначениеПараметра = ЗначениеПараметра; + КонецЦикла; + + // -- Локализация + +КонецПроцедуры + +// Возвращает поддерживает ли фискальное устройство проверку кодов маркировки. +// +// Параметры: +// Результат - Булево - Фискальное устройство поддерживает проверку кодов маркировки +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства +// +Процедура ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(Результат, ИдентификаторУстройства) Экспорт + + // ++ Локализация + + Результат = Ложь; + ПараметрыРегистрации = Новый Структура(); + ПараметрыРегистрацииУстройства(ПараметрыРегистрации, ИдентификаторУстройства); + Если ПараметрыРегистрации <> Неопределено Тогда + Результат = ПараметрыРегистрации.Свойство("ВерсияФФДККТ") И ПараметрыРегистрации.ВерсияФФДККТ = "1.2" + И ПараметрыРегистрации.Свойство("ВерсияФФДФН") И ПараметрыРегистрации.ВерсияФФДФН = "1.2"; + КонецЕсли; + + // -- Локализация + +КонецПроцедуры + +// Возвращает для фискального устройства версию ФФД. +// +// Параметры: +// Результат - Строка - Версию ФФД поддерживаемая устройством +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства. +// +Процедура ФискальноеУстройствоПоддерживаетВерсиюФФД(Результат, ИдентификаторУстройства) Экспорт + + // ++ Локализация + + Результат = Неопределено; + ПараметрыРегистрации = Новый Структура(); + ПараметрыРегистрацииУстройства(ПараметрыРегистрации, ИдентификаторУстройства); + Если ПараметрыРегистрации <> Неопределено И ПараметрыРегистрации.Свойство("ВерсияФФДККТ") Тогда + Результат = ПараметрыРегистрации.ВерсияФФДККТ; + КонецЕсли; + + // -- Локализация + +КонецПроцедуры + +#КонецОбласти + +// Выполняет проверку обязательности заполняет тэгов. +// +// Параметры: +// Результат - Булево +// Параметры - Структура +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование +// ОписаниеОшибки - Строка +// +Процедура ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов(Результат, Параметры, ИдентификаторУстройства, ОписаниеОшибки) Экспорт + + // ++ Локализация + + Если ОбщегоНазначенияБПО.ИспользуетсяФорматноЛогическийКонтроль() Тогда + МодульФорматноЛогическийКонтроль = ОбщегоНазначенияБПО.ОбщийМодуль("ФорматноЛогическийКонтроль"); + Результат = МодульФорматноЛогическийКонтроль.ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов(Параметры, ИдентификаторУстройства, ОписаниеОшибки); + Иначе + Результат = Истина; + КонецЕсли; + + // -- Локализация + +КонецПроцедуры + +// Приводит к формату согласованному с ФНС. +// +// Параметры: +// ОсновныеПараметры - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// Отказ - Булево +// ОписаниеОшибки - Строка +// ИсправленыОсновныеПараметры - Булево +Процедура ПривестиДанныеКТребуемомуФормату(ОсновныеПараметры, ИсправленыОсновныеПараметры) Экспорт + + // ++ Локализация + + Если ОбщегоНазначенияБПО.ИспользуетсяФорматноЛогическийКонтроль() Тогда + МодульФорматноЛогическийКонтроль = ОбщегоНазначенияБПО.ОбщийМодуль("ФорматноЛогическийКонтроль"); + МодульФорматноЛогическийКонтроль.ПривестиДанныеКТребуемомуФормату(ОсновныеПараметры, ИсправленыОсновныеПараметры); + КонецЕсли; + + // -- Локализация + +КонецПроцедуры + +#КонецОбласти diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.xml b/CommonModules/ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.xml new file mode 100644 index 0000000..e55a22b --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер + + + ru + Оборудование чекопечатающие устройства РФ клиент сервер + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер/Ext/Module.bsl b/CommonModules/ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..1b92765 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер/Ext/Module.bsl @@ -0,0 +1,275 @@ + +#Область ПрограммныйИнтерфейс + +#Область КодыОФД + +/////////////////////////////////////////////////////////////////////////////// +// Коды изменений сведений ККТ + +// Возвращает код причины изменения сведений о ККТ. +// +// Параметры: +// ПричинаИзмененияСведенийККТ - ПеречислениеСсылка.ПричиныИзмененияСведенийККТ - Причина изменения сведений ККТ. +// +// Возвращаемое значение: +// Произвольный, Число - Код причины изменения сведений ККТ +Функция КодПричиныИзмененияСведенийККТ(ПричинаИзмененияСведенийККТ) Экспорт + + ПричиныИзмененияСведенийККТ = Новый Соответствие(); + + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ЗаменаФН") , 0); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ЗаменаОФД") , 1); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ИзменениеНаименованияПользователя"), 2); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ИзменениеАдреса") , 3); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ПереводВРежимПередачиДанных") , 4); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ПереводВАвтономныйРежим") , 5); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ИзменениеВерсии") , 6); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ИзменениеСистемНалогообложения") , 7); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ИзменениеНомераУстройства") , 8); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ПереводВНеавтоматическийРежим") , 9); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ПереводВАвтоматическийРежим") , 10); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ВключениеБСО") , 11); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ВыключениеБСО") , 12); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ВключениеРежимаРасчетовВИнтернет") , 13); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ВыключениеРежимаРасчетовВИнтернет"), 14); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ВключениеРежимаАгента") , 15); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ВыключениеРежимаАгента") , 16); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ВключениеРежимаАзартныхИгр") , 17); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ВыключениеРежимаАзартныхИгр") , 18); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ВключениеРежимаЛотереи") , 19); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ВыключениеРежимаЛотереи") , 20); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ИзменениеВерсииФФД") , 21); + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.Иное") , 31); + + Возврат ПричиныИзмененияСведенийККТ.Получить(ПричинаИзмененияСведенийККТ); + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Коды признаков агентов + +// Возвращает признак агента по коду. +// +// Параметры: +// КодПризнакаАгента - ПеречислениеСсылка.ПризнакиАгента - Код признака агента +// +// Возвращаемое значение: +// Произвольный, Число - Код признака агента +Функция КодПризнакаАгента(КодПризнакаАгента) Экспорт + + ПризнакиАгента = Новый Соответствие(); + + ПризнакиАгента.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиАгента.БанковскийПлатежныйАгент") , 0); + ПризнакиАгента.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиАгента.БанковскийПлатежныйСубагент"), 1); + ПризнакиАгента.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиАгента.ПлатежныйАгент") , 2); + ПризнакиАгента.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиАгента.ПлатежныйСубагент") , 3); + ПризнакиАгента.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиАгента.Поверенный") , 4); + ПризнакиАгента.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиАгента.Комиссионер") , 5); + ПризнакиАгента.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиАгента.Агент") , 6); + + Возврат ПризнакиАгента.Получить(КодПризнакаАгента); + +КонецФункции + +// Возвращает код типа признака агента. +// +// Параметры: +// ПризнакАгента - Число - Признак агента +// +// Возвращаемое значение: +// ПеречислениеСсылка.ПризнакиАгента, Произвольный - Признак агента по коду +Функция ПризнакАгентаПоКоду(ПризнакАгента) Экспорт + + ПризнакиАгента = Новый Соответствие(); + + ПризнакиАгента.Вставить(0, ПредопределенноеЗначение("Перечисление.ПризнакиАгента.БанковскийПлатежныйАгент")); + ПризнакиАгента.Вставить(1, ПредопределенноеЗначение("Перечисление.ПризнакиАгента.БанковскийПлатежныйСубагент")); + ПризнакиАгента.Вставить(2, ПредопределенноеЗначение("Перечисление.ПризнакиАгента.ПлатежныйАгент")); + ПризнакиАгента.Вставить(3, ПредопределенноеЗначение("Перечисление.ПризнакиАгента.ПлатежныйСубагент")); + ПризнакиАгента.Вставить(4, ПредопределенноеЗначение("Перечисление.ПризнакиАгента.Поверенный")); + ПризнакиАгента.Вставить(5, ПредопределенноеЗначение("Перечисление.ПризнакиАгента.Комиссионер")); + ПризнакиАгента.Вставить(6, ПредопределенноеЗначение("Перечисление.ПризнакиАгента.Агент")); + + Возврат ПризнакиАгента.Получить(ПризнакАгента); + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Коды единицы измерения + +// Возвращает код меры количества предмета расчета ККТ. +// +// Параметры: +// МераКоличестваПредметаРасчетаККТ - ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ - Мера количества предмета расчета ККТ +// +// Возвращаемое значение: +// Произвольный, Число - Код меры количества предмета расчета ККТ +Функция КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчетаККТ) Экспорт + + МерыКоличества = Новый Соответствие(); + + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Штука"), 0); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Грамм"), 10); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Килограмм"), 11); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Тонна"), 12); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Сантиметр"), 20); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Дециметр"), 21); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Метр"), 22); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КвадратныйСантиметр"), 30); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КвадратныйДециметр"), 31); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КвадратныйМетр"), 32); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Миллилитр"), 40); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Литр"), 41); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КубическийМетр"), 42); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КиловаттЧас"), 50); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Гигакалория"), 51); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.СуткиДень"), 70); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Час"), 71); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Минута"), 72); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Секунда"), 73); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Килобайт"), 80); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Мегабайт"), 81); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Гигабайт"), 82); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Терабайт"), 83); + МерыКоличества.Вставить(ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.ИныеЕдиницыИзмерения"), 255); + + Возврат МерыКоличества.Получить(МераКоличестваПредметаРасчетаККТ); + +КонецФункции + +// Возвращает меру количества предмета расчета по коду. +// +// Параметры: +// КодМерыКоличестваПредметаРасчетаККТ - ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ - Код меры количества предмета расчета ККТ +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ - Мера количества предмета расчета ККТ по коду +// +Функция МераКоличестваПредметаРасчетаККТПоКоду(КодМерыКоличестваПредметаРасчетаККТ) Экспорт + + МерыКоличества = Новый Соответствие(); + + МерыКоличества.Вставить(0, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Штука")); + МерыКоличества.Вставить(10, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Грамм")); + МерыКоличества.Вставить(11, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Килограмм")); + МерыКоличества.Вставить(12, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Тонна")); + МерыКоличества.Вставить(20, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Сантиметр")); + МерыКоличества.Вставить(21, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Дециметр")); + МерыКоличества.Вставить(22, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Метр")); + МерыКоличества.Вставить(30, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КвадратныйСантиметр")); + МерыКоличества.Вставить(31, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КвадратныйДециметр")); + МерыКоличества.Вставить(32, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КвадратныйМетр")); + МерыКоличества.Вставить(40, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Миллилитр")); + МерыКоличества.Вставить(41, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Литр")); + МерыКоличества.Вставить(42, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КубическийМетр")); + МерыКоличества.Вставить(50, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КиловаттЧас")); + МерыКоличества.Вставить(51, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Гигакалория")); + МерыКоличества.Вставить(70, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.СуткиДень")); + МерыКоличества.Вставить(71, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Час")); + МерыКоличества.Вставить(72, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Минута")); + МерыКоличества.Вставить(73, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Секунда")); + МерыКоличества.Вставить(80, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Килобайт")); + МерыКоличества.Вставить(81, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Мегабайт")); + МерыКоличества.Вставить(82, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Гигабайт")); + МерыКоличества.Вставить(83, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Терабайт")); + МерыКоличества.Вставить(255, ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.ИныеЕдиницыИзмерения")); + + Возврат МерыКоличества.Получить(КодМерыКоличестваПредметаРасчетаККТ); + +КонецФункции + +// Возвращает меру количества предмета расчета по коду единицы измерения. +// +// Параметры: +// КодЕдиницыИзмерения - Число - Код единицы измерения. +// +// Возвращаемое значение: +// ПеречислениеСсылка.МераКоличестваПредметаРасчетаККТ, Произвольный - Мера количества предмета расчета по коду единицы измерения +Функция МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(КодЕдиницыИзмерения) Экспорт + + МерыКоличества = Новый Соответствие(); + + МерыКоличества.Вставить("796", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Штука")); + + МерыКоличества.Вставить("163", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Грамм")); + МерыКоличества.Вставить("166", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Килограмм")); + МерыКоличества.Вставить("168", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Тонна")); + + МерыКоличества.Вставить("004", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Сантиметр")); + МерыКоличества.Вставить("005", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Дециметр")); + МерыКоличества.Вставить("006", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Метр")); + + МерыКоличества.Вставить("051", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КвадратныйСантиметр")); + МерыКоличества.Вставить("053", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КвадратныйДециметр")); + МерыКоличества.Вставить("055", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КвадратныйМетр")); + + МерыКоличества.Вставить("111", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Миллилитр")); + МерыКоличества.Вставить("112", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Литр")); + МерыКоличества.Вставить("113", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КубическийМетр")); + + МерыКоличества.Вставить("245", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.КиловаттЧас")); + МерыКоличества.Вставить("233", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Гигакалория")); + + МерыКоличества.Вставить("359", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.СуткиДень")); + МерыКоличества.Вставить("356", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Час")); + МерыКоличества.Вставить("355", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Минута")); + МерыКоличества.Вставить("354", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Секунда")); + + МерыКоличества.Вставить("256", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Килобайт")); + МерыКоличества.Вставить("257", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Мегабайт")); + МерыКоличества.Вставить("2553", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Гигабайт")); + МерыКоличества.Вставить("2554", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Терабайт")); + + МерыКоличества = МерыКоличества.Получить(Строка(КодЕдиницыИзмерения)); + Если МерыКоличества = Неопределено Тогда + МерыКоличества = ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.ИныеЕдиницыИзмерения"); + КонецЕсли; + + Возврат МерыКоличества; + +КонецФункции + +// Возвращает код единицы измерения по ККТ коду. +// +// Параметры: +// КодМерыКоличестваПредметаРасчетаККТ - Число - Код меры количества предмета расчета ККТ. +// +// Возвращаемое значение: +// Строка +// +Функция КодЕдиницыИзмеренияПоККТКоду(КодМерыКоличестваПредметаРасчетаККТ) Экспорт + + МерыКоличества = Новый Соответствие(); + МерыКоличества.Вставить(0, "796"); + МерыКоличества.Вставить(10, "163"); + МерыКоличества.Вставить(11, "166"); + МерыКоличества.Вставить(12, "168"); + МерыКоличества.Вставить(20, "004"); + МерыКоличества.Вставить(21, "005"); + МерыКоличества.Вставить(22, "006"); + МерыКоличества.Вставить(30, "051"); + МерыКоличества.Вставить(31, "053"); + МерыКоличества.Вставить(32, "055"); + МерыКоличества.Вставить(40, "111"); + МерыКоличества.Вставить(41, "112"); + МерыКоличества.Вставить(42, "113"); + МерыКоличества.Вставить(50, "245"); + МерыКоличества.Вставить(51, "233"); + МерыКоличества.Вставить(70, "359"); + МерыКоличества.Вставить(71, "356"); + МерыКоличества.Вставить(72, "355"); + МерыКоличества.Вставить(73, "354"); + МерыКоличества.Вставить(80, "256"); + МерыКоличества.Вставить(81, "257"); + МерыКоличества.Вставить(82, "2553"); + МерыКоличества.Вставить(83, "2554"); + + КодЕдиницыИзмерения = МерыКоличества.Получить(КодМерыКоличестваПредметаРасчетаККТ); + + Возврат КодЕдиницыИзмерения; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/CommonModules/ОбщегоНазначенияБПО.xml b/CommonModules/ОбщегоНазначенияБПО.xml new file mode 100644 index 0000000..8a7a09d --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПО.xml @@ -0,0 +1,23 @@ + + + + + ОбщегоНазначенияБПО + + + ru + Общего назначения БПО + + + Серверные процедуры и функции общего назначения БПО + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОбщегоНазначенияБПО/Ext/Module.bsl b/CommonModules/ОбщегоНазначенияБПО/Ext/Module.bsl new file mode 100644 index 0000000..f88cca4 --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПО/Ext/Module.bsl @@ -0,0 +1,1565 @@ +#Область ПрограммныйИнтерфейс + +// Получает текущую дату сервера, приведенную к часовому поясу сеанса. +// Предназначена для использования вместо функции ТекущаяДатаСеанса. +// +// Возвращаемое значение: +// Дата - текущая дата сеанса. +// +Функция ДатаСеанса() Экспорт +#Если МобильноеПриложениеСервер Тогда + // BSLLS:DeprecatedCurrentDate-off + //@skip-check use-non-recommended-method + Возврат ТекущаяДата(); // АПК: 143 особенность мобильного приложения + // BSLLS:DeprecatedCurrentDate-on +#Иначе + Возврат ТекущаяДатаСеанса(); +#КонецЕсли +КонецФункции + +#Область РаботаСXML + +// Функция читает корневой элемент XML. +// +// Параметры: +// СтрокаXML - Строка - XML строка. +// +// Возвращаемое значение: +// Структура +// +Функция ПрочитатьКорневойЭлементXML(СтрокаXML) Экспорт + + Результат = Новый Структура(); + Если Не ПустаяСтрока(СтрокаXML) Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(СтрокаXML); + ЧтениеXML.ПерейтиКСодержимому(); + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда + Пока ЧтениеXML.ПрочитатьАтрибут() Цикл + Результат.Вставить(ЧтениеXML.Имя, ЧтениеXML.Значение); + КонецЦикла + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Функция возвращает Истина, если внедрена Библиотека стандартных подсистем +// +// Возвращаемое значение: +// Булево. +Функция ИспользуетсяБСП() Экспорт + + // Вызов БСП + СтандартныеПодсистемы = Метаданные.Подсистемы.Найти("СтандартныеПодсистемы"); + Если СтандартныеПодсистемы = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + Возврат СтандартныеПодсистемы.Подсистемы.Найти("БазоваяФункциональность") <> Неопределено; + // Конец Вызов БСП + +КонецФункции + +// Возвращает установленную версию БСП, если БСП не установлена тогда +// возвращает "0.0.0.0" +// +// Возвращаемое значение: +// Строка +Функция ВерсияБСП() Экспорт + + Версия = "0.0.0.0"; + + // Вызов БСП + Если ИспользуетсяБСП() Тогда + МодульСтандартныеПодсистемыСервер = ОбщийМодуль("СтандартныеПодсистемыСервер"); + Если МодульСтандартныеПодсистемыСервер <> Неопределено Тогда + Версия = МодульСтандартныеПодсистемыСервер.ВерсияБиблиотеки(); + КонецЕсли; + КонецЕсли; + // Конец Вызов БСП + + Возврат Версия; + +КонецФункции + +#Область ОповещениеПользователя + +// Формирует и выводит сообщение, которое может быть связано с элементом управления формы. +// +// Параметры: +// ТекстСообщенияПользователю - Строка - текст сообщения. +// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится. +// Поле - Строка - наименование реквизита формы. +// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы). +// Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина. +//@skip-check method-too-many-params +Процедура СообщитьПользователю(Знач ТекстСообщенияПользователю, Знач КлючДанных = Неопределено, Знач Поле = "", + Знач ПутьКДанным = "", Отказ = Ложь) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + ОбщегоНазначенияМодуль.СообщитьПользователю(ТекстСообщенияПользователю, КлючДанных, Поле, ПутьКДанным, Отказ); + // Конец Вызов БСП + + Иначе + СообщитьПользователюБПО(ТекстСообщенияПользователю, КлючДанных, Поле, ПутьКДанным, Отказ); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +// Формирует запись ошибки в журнал регистрации. +// +// Параметры: +// ИмяСобытия - Строка +// Комментарий - Строка, Неопределено - +// Метаданные - ОбъектМетаданных - +// +Процедура ЗаписатьОшибкуВЖурналРегистрации(ИмяСобытия, Комментарий = Неопределено, ПредставлениеУровня = "Ошибка", Метаданные = Неопределено) Экспорт + + #Если МобильноеПриложениеСервер Тогда + ОбщегоНазначенияБПОПереопределяемый.ЗаписатьОшибкуВМобильномПриложении(ИмяСобытия, ПредставлениеУровня, Метаданные, Комментарий); + #Иначе + Если Комментарий = Неопределено Тогда + Комментарий = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецЕсли; + Уровень = УровеньСобытияПоПредставлению(ПредставлениеУровня); + ЗаписьЖурналаРегистрации(ИмяСобытия, Уровень, Метаданные, ,Комментарий); + #КонецЕсли + +КонецПроцедуры + +// Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы +// по ссылке на объект. +// +// Если доступа к одному из реквизитов нет, возникнет исключение прав доступа. +// Если необходимо зачитать реквизит независимо от прав текущего пользователя, +// то следует использовать предварительный переход в привилегированный режим. +// +// Функция не предназначена для получения значений реквизитов пустых ссылок. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить. +// +// Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате +// требований к свойствам структуры. +// Например, "Код, Наименование, Родитель". +// - Структура, ФиксированнаяСтруктура - в качестве ключа передается +// псевдоним поля для возвращаемой структуры с результатом, а в качестве +// значения (опционально) фактическое имя поля в таблице. +// Если значение не определено, то имя поля берется из ключа. +// - Массив из Строка +// - ФиксированныйМассив из Строка - имена реквизитов в формате требований +// к свойствам структуры. +// +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных реквизитов. +// Если строка затребованных реквизитов пуста, то возвращается пустая структура. +// Если в качестве объекта передана пустая ссылка, то все реквизиты вернутся со значением Неопределено. +// +Функция ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.ЗначенияРеквизитовОбъекта(Ссылка, Реквизиты); + // Конец Вызов БСП + + Иначе + Возврат ЗначенияРеквизитовОбъектаБПО(Ссылка, Реквизиты); + КонецЕсли; + +КонецФункции + +// Возвращает значение реквизита, прочитанного из информационной базы по ссылке на объект. +// +// Если доступа к реквизиту нет, возникнет исключение прав доступа. +// Если необходимо зачитать реквизит независимо от прав текущего пользователя, +// то следует использовать предварительный переход в привилегированный режим. +// +// Функция не предназначена для получения значений реквизитов пустых ссылок. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - элемент справочника, документ, ... +// ИмяРеквизита - Строка -например, "Код". +// +// Возвращаемое значение: +// Произвольный - зависит от типа значения прочитанного реквизита. +// +Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита) Экспорт + + Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита); + Возврат Результат[СтрЗаменить(ИмяРеквизита, ".", "")]; + +КонецФункции + +// Возвращает код основного языка конфигурации, например "ru". +// +// Возвращаемое значение: +// Строка - код языка. +// +Функция КодОсновногоЯзыка() Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.КодОсновногоЯзыка(); + // Конец Вызов БСП + + КонецЕсли; + + Возврат Метаданные.ОсновнойЯзык.КодЯзыка; + +КонецФункции + +// Определяет режим эксплуатации информационной базы файловый (Истина) или серверный (Ложь). +// При проверке используется СтрокаСоединенияИнформационнойБазы, которую можно указать явно. +// +// Параметры: +// СтрокаСоединенияИнформационнойБазы - Строка - параметр используется, если +// нужно проверить строку соединения не текущей информационной базы. +// +// Возвращаемое значение: +// Булево. +// +Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт + + Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда + СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); + КонецЕсли; + Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1; + +КонецФункции + +// Возвращает Истина, если эта информационная база подключена к 1С:Fresh. +// +// Возвращаемое значение: +// Булево - признак автономного рабочего места. +// +Функция ЭтоАвтономноеРабочееМесто() Экспорт + + // Вызов БСП + Если ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщийМодуль("ОбменДаннымиСервер"); + Возврат МодульОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто(); + КонецЕсли; + // Конец Вызов БСП + + Возврат Ложь; + +КонецФункции + +// Возвращает Истина, если приложение запущено через веб-клиент +// +// Возвращаемое значение: +// Булево - признак веб клиента. +// +Функция ЭтоВебКлиент() Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.ЭтоВебКлиент(); + // Конец Вызов БСП + + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Возвращает Истина, если мобильное приложение или мобильный клиент +// +// Возвращаемое значение: +// Булево - признак мобильной платформы. +// +Функция ЭтоМобильнаяПлатформа() Экспорт + + ТипПриложения = КлиентскоеПриложение.ТипПриложения(); + МобильнаяПлатформа = ТипПриложения = ТипКлиентскогоПриложения.МобильноеПриложениеКлиент Или ТипПриложения = ТипКлиентскогоПриложения.МобильныйКлиент; + + Возврат МобильнаяПлатформа; + +КонецФункции + +// Возвращает признак работы в режиме разделения данных по областям +// (технически это признак условного разделения). +// +// Возвращает Ложь, если конфигурация не может работать в режиме разделения данных +// (не содержит общих реквизитов, предназначенных для разделения данных). +// +// Возвращаемое значение: +// Булево - Истина, если разделение включено, +// Ложь, если разделение выключено или не поддерживается. +// +Функция РазделениеВключено() Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.РазделениеВключено(); + // Конец Вызов БСП + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ИмяКомпьютераКлиента() Экспорт +#Если НЕ МобильноеПриложениеСервер Тогда + Возврат ПолучитьТекущийСеансИнформационнойБазы().ИмяКомпьютера; +#Иначе + Возврат ""; +#КонецЕсли +КонецФункции + + +// Возвращает признак возможности обращения к разделенным данным (которые входят в состав разделителей). +// Признак относится к сеансу, но может меняться во время работы сеанса, если разделение было включено +// в самом сеансе, поэтому проверку следует делать непосредственно перед обращением к разделенным данным. +// +// Возвращает Истина, если конфигурация не может работать в режиме разделения данных +// (не содержит общих реквизитов, предназначенных для разделения данных). +// +// Возвращаемое значение: +// Булево - Истина, если разделение не поддерживается, либо разделение выключено, +// либо разделение включено и разделители установлены. +// Ложь, если разделение включено и разделители не установлены. +// +Функция ДоступноИспользованиеРазделенныхДанных() Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.ДоступноИспользованиеРазделенныхДанных(); + // Конец Вызов БСП + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Возвращает Истина, если "функциональная" подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// У "функциональной" подсистемы снят флажок "Включать в командный интерфейс". +// +// Параметры: +// ПолноеИмяПодсистемы - Строка - полное имя объекта метаданных подсистема +// без слов "Подсистема." и с учетом регистра символов. +// Например: "СтандартныеПодсистемы.ВариантыОтчетов". +// +// Пример: +// +// Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда +// МодульВариантыОтчетов = ОбщегоНазначенияБПО.ОбщийМодуль("ВариантыОтчетов"); +// МодульВариантыОтчетов.<Имя метода>(); +// КонецЕсли; +// +// Возвращаемое значение: +// Булево. +// +Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.ПодсистемаСуществует(ПолноеИмяПодсистемы); + // Конец Вызов БСП + + Иначе + ИменаПодсистем = ОбщегоНазначенияБПОПовтИсп.ИменаПодсистем(); + Возврат ИменаПодсистем.Получить(ПолноеИмяПодсистемы) <> Неопределено; + КонецЕсли; + +КонецФункции + +// Возвращает ссылку на общий модуль по имени. +// +// Параметры: +// Имя - Строка - имя общего модуля, например: +// "ОбщегоНазначения", +// "ОбщегоНазначенияКлиент". +// +// Возвращаемое значение: +// ОбщийМодуль. +// +Функция ОбщийМодуль(Имя) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодульБПО("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.ОбщийМодуль(Имя); + // Конец Вызов БСП + + Иначе + Возврат ОбщийМодульБПО(Имя); + КонецЕсли; + +КонецФункции + +// Выполняет действия перед продолжением выполнения обработчика регламентного задания. +// +// Например, проверяет возможность выполнения обработчика регламентного задания. +// Если администратор не заблокировал выполнение регламентных заданий до +// окончания обновления ИБ, тогда требуется прекратить выполнение обработчика. +// +// Параметры: +// РегламентноеЗадание - РегламентноеЗадание - регламентное задание, +// из которого был вызван данный метод. Необходимо передавать для проверки доступности +// по функциональным опциям. +// +Процедура ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание = Неопределено) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + ОбщегоНазначенияМодуль.ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание); + // Конец Вызов БСП + + КонецЕсли; + +КонецПроцедуры + +// Вычисляет контрольную сумму для произвольных данных по указанному алгоритму. +// +// Параметры: +// Данные - Произвольный - любое сериализуемое значение. +// Алгоритм - ХешФункция - алгоритм расчета контрольной суммы. По умолчанию, MD5. +// +// Возвращаемое значение: +// Строка - контрольная сумма строкой без пробелов (например 32 символа). +// +Функция КонтрольнаяСуммаСтрокой(Знач Данные, Знач Алгоритм = Неопределено) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.КонтрольнаяСуммаСтрокой(Данные, Алгоритм); + // Конец Вызов БСП + + Иначе + Возврат КонтрольнаяСуммаСтрокойБПО(Данные, Алгоритм); + КонецЕсли; + +КонецФункции + +// Преобразует таблицу значений в массив структур. +// Может использоваться для передачи на клиент данных в том случае, если таблица +// значений содержит только такие значения, которые могут +// быть переданы с сервера на клиент. +// +// Полученный массив содержит структуры, каждая из которых повторяет +// структуру колонок таблицы значений. +// +// Не рекомендуется использовать для преобразования таблиц значений +// с большим количеством строк. +// +// Параметры: +// ТаблицаЗначений - ТаблицаЗначений - исходная таблица значений. +// +// Возвращаемое значение: +// Массив - коллекция строк таблицы в виде структур. +// +Функция ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.ТаблицаЗначенийВМассив(ТаблицаЗначений); + // Конец Вызов БСП + + Иначе + Массив = Новый Массив(); + СтруктураСтрокой = ""; + НужнаЗапятая = Ложь; + Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл + Если НужнаЗапятая Тогда + СтруктураСтрокой = СтруктураСтрокой + ","; + КонецЕсли; + СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя; + НужнаЗапятая = Истина; + КонецЦикла; + Для Каждого Строка Из ТаблицаЗначений Цикл + НоваяСтрока = Новый Структура(СтруктураСтрокой); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); + Массив.Добавить(НоваяСтрока); + КонецЦикла; + Возврат Массив; + КонецЕсли; + +КонецФункции + +// Проверяет, умещаются ли переданные табличные документы на страницу при печати. +// +// Параметры: +// ТабДокумент - ТабличныйДокумент - табличный документ. +// ВыводимыеОбласти - Массив из ТабличныйДокумент +// - ТабличныйДокумент - массив из проверяемых таблиц или табличный документ. +// РезультатПриОшибке - Булево - какой возвращать результат при возникновении ошибки. +// +// Возвращаемое значение: +// Булево - умещаются или нет переданные документы. +// +Функция ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, РезультатПриОшибке = Истина) Экспорт + + Попытка + Возврат ТабДокумент.ПроверитьВывод(ВыводимыеОбласти); + Исключение + Возврат РезультатПриОшибке; + КонецПопытки; + +КонецФункции + +// Возвращает структуру сформированную по регистру сведений +// +// Параметры: +// МетаданныеРегистрСведений - ОбъектМетаданныхРегистрСведений +// МассивХранилищ - Массив из Строка - куда будут записаны имена полей регистра сведений содержащие тип ХранилищеЗначений +// +// Возвращаемое значение: +// Структура +// +Функция СтруктураИзМетаданныхРегистраСведений(МетаданныеРегистрСведений, МассивХранилищ = Неопределено) Экспорт + + Результат = Новый Структура(); + Если ТипЗнч(МассивХранилищ) <> Тип("Массив") Тогда + МассивХранилищ = Новый Массив(); + КонецЕсли; + Для Каждого Измерение Из МетаданныеРегистрСведений.Измерения Цикл + Результат.Вставить(Измерение.Имя); + КонецЦикла; + Для Каждого Ресурс Из МетаданныеРегистрСведений.Ресурсы Цикл + Если Ресурс.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда + МассивХранилищ.Добавить(Ресурс.Имя); + Продолжить; + КонецЕсли; + Результат.Вставить(Ресурс.Имя); + КонецЦикла; + Для Каждого Реквизит Из МетаданныеРегистрСведений.Реквизиты Цикл + Если Реквизит.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда + МассивХранилищ.Добавить(Реквизит.Имя); + Продолжить; + КонецЕсли; + Результат.Вставить(Реквизит.Имя); + КонецЦикла; + Возврат Результат; + +КонецФункции // СтруктураИзМетаданныхОбъекта() + +#Область ИнтерфейсныйПроцедурыИФункции + +// Установить свойства элемента управления +// +// Параметры: +// ЭлементУправления - ПолеФормы +// +Процедура ПодготовитьЭлементУправления(ЭлементУправления) Экспорт + + ЭлементУправления.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + ЭлементУправления.ШрифтЗаголовка = ШрифтыСтиля.МелкийШрифтТекста; + +КонецПроцедуры + +#КонецОбласти + +// Преобразует строку таблицы значений в структуру. +// Свойства структуры и их значения совпадают с колонками переданной строки. +// +// Параметры: +// СтрокаТаблицыЗначений - СтрокаТаблицыЗначений +// +// Возвращаемое значение: +// Структура - преобразованная строка таблицы значений. +// +Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт + + Структура = Новый Структура; + Для каждого Колонка Из СтрокаТаблицыЗначений.Владелец().Колонки Цикл + Структура.Вставить(Колонка.Имя, СтрокаТаблицыЗначений[Колонка.Имя]); + КонецЦикла; + + Возврат Структура; + +КонецФункции + +#Область Данные + +// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно, +// с учетом типов дочерних элементов. При этом содержимое значений объектных типов +// (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект. +// +// Параметры: +// Источник - Структура +// - ФиксированнаяСтруктура +// - Соответствие +// - ФиксированноеСоответствие +// - Массив +// - ФиксированныйМассив +// - СписокЗначений - объект, который необходимо скопировать. +// ФиксироватьДанные - Булево - если Истина - фиксировать, если Ложь - снять фиксацию. +// - Неопределено - не изменять. +// +// Возвращаемое значение: +// Структура, +// ФиксированнаяСтруктура, +// Соответствие +// ФиксированноеСоответствие +// Массив +// ФиксированныйМассив +// СписокЗначений - копия объекта, переданного в параметре Источник. +// +Функция СкопироватьРекурсивно(Источник, ФиксироватьДанные = Неопределено) Экспорт + + Перем Приемник; + + ТипИсточника = ТипЗнч(Источник); + + Если ТипИсточника = Тип("ТаблицаЗначений") Тогда + Возврат Источник.Скопировать(); + КонецЕсли; + + Если ТипИсточника = Тип("Структура") + Или ТипИсточника = Тип("ФиксированнаяСтруктура") Тогда + Приемник = СкопироватьСтруктуру(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("Соответствие") + Или ТипИсточника = Тип("ФиксированноеСоответствие") Тогда + Приемник = СкопироватьСоответствие(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("Массив") + Или ТипИсточника = Тип("ФиксированныйМассив") Тогда + Приемник = СкопироватьМассив(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда + Приемник = СкопироватьСписокЗначений(Источник, ФиксироватьДанные); + Иначе + Приемник = Источник; + КонецЕсли; + + Возврат Приемник; + +КонецФункции + +// Приводит строковое значение к дате. +// +// Параметры: +// Значение - Строка - строковое значение, которое приводится к дате. +// +// Возвращаемое значение: +// Дата - приведенное значение. +// +Функция СтрокаВДату(Знач Значение) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияКлиентСерверМодуль = ОбщийМодуль("ОбщегоНазначенияКлиентСервер"); + Возврат ОбщегоНазначенияКлиентСерверМодуль.СтрокаВДату(Значение); + // Конец Вызов БСП + + Иначе + Возврат СтрокаВДатуБПО(Значение); + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область ДоступныеПодсистемы + +// Возвращает Истина, если используется устройства ввода и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяУстройстваВвода() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.УстройстваВвода"); + +КонецФункции + +// Возвращает Истина, если используется устройства "Шаблоны магнитных карт" и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяШаблоныМагнитныхКарт() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.УстройстваВвода.ШаблоныМагнитныхКарт"); + +КонецФункции + +// Возвращает Истина, если используется подсистемы фискальных устройств и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяЧекопечатающиеУстройства() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства"); + +КонецФункции + +// Возвращает Истина, если используется "Кассовая смена" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяКассоваяСмена() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.КассоваяСмена"); + +КонецФункции + +// Возвращает Истина, если используется "РассылкаЭлектронныхЧеков" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяРассылкаЭлектронныхЧеков() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.РассылкаЭлектронныхЧеков"); + +КонецФункции + +// Возвращает Истина, если используется "ФорматноЛогическийКонтроль" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяФорматноЛогическийКонтроль() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.ФорматноЛогическийКонтроль"); + +КонецФункции + +// Возвращает Истина, если используется "Маркировка" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяМаркировка() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.Маркировка"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Платежные системы" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПлатежныеСистемы() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ПлатежныеСистемы"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Дисплеи покупателя" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяДисплеиПокупателя() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ДисплеиПокупателя"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Весовое оборудование" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяВесовоеОборудование() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ВесовоеОборудование"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Терминалы сбора данных" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяТерминалыСбораДанных() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ТерминалыСбораДанных"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Принтеры этикеток" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПринтерыЭтикеток() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ПринтерыЭтикеток"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Считыватель RFID" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяСчитывательRFID() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.СчитывательRFID"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "УстройствоРаспознавания" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяУстройствоРаспознавания() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.УстройствоРаспознавания"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "ОблачныеККТ" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуютсяОблачныеККТ() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ОблачныеККТ"); + +КонецФункции +// Возвращает Истина, если используется подсистема "Офлайн-оборудование" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяОфлайнОборудование() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ОфлайнОборудование"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Печать этикеток и ценников" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПечатьЭтикетокИЦенников() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПечатьЭтикетокИЦенников"); + +КонецФункции + +// Возвращает Истина если существует подсистема ПоддержкаОборудования.СообщенияВСлужбуТехническойПоддержки +// +// Возвращаемое значение: +// Булево +Функция ИспользуетсяСообщенияВСлужбуТехническойПоддержки() Экспорт + + // Вызов БИП + Возврат ПодсистемаСуществует("ИнтернетПоддержкаПользователей.СообщенияВСлужбуТехническойПоддержки") + И ПодсистемаСуществует("ПоддержкаОборудования.СообщенияВСлужбуТехническойПоддержки"); + // Конец Вызов БИП + +КонецФункции + +// Возвращает Истина, если используется подсистема "Электронные сертификаты НСПК" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяЭлектронныеСертификатыНСПК() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ЭлектронныеСертификаты"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "СертификатыНУЦМинцифры" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяСертификатыНУЦМинцифры() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ЭлектронныеСертификаты.СертификатыНУЦМинцифры"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "РаспределеннаяФискализация" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяРаспределеннаяФискализация() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.РаспределеннаяФискализация"); + +КонецФункции + +// Возвращает Истина, если используется "АвтономнаяККТ" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяАвтономнаяККТ() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.АвтономнаяККТ"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "НастройкиПрограммы" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяНастройкиПрограммыБПО() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.НастройкиПрограммы"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "ЛогированиеОборудования" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПодсистемаЛогирования() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ЛогированиеОборудования"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "НесертифицированноеОборудование" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяНесертифицированноеОборудование() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.НесертифицированноеОборудование"); + +КонецФункции + +#КонецОбласти + +// Преобразовать в булево возможные значения строки +// +// Параметры: +// Строка - Строка +// +// Возвращаемое значение: +// Булево +// +Функция ПреобразоватьВБулево(Строка) Экспорт + + Попытка + Возврат XMLЗначение(Тип("Булево"), Строка); + Исключение + Возврат ВРег(Строка) = "ДА" Или ВРег(Строка) = "TRUE" Или ВРег(Строка) = "YES"; + КонецПопытки; + +КонецФункции + +Функция ИмяЗначенияПеречисления(Значение) Экспорт + + ИмяПеречисления = Значение.Метаданные().Имя; + ИндексЗначенияПеречисления = Перечисления[ИмяПеречисления].Индекс(Значение); + ИмяЗначенияПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначенияПеречисления].Имя; + Возврат ИмяЗначенияПеречисления; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ОповещениеПользователя + +// Формирует и выводит сообщение, которое может быть связано с элементом управления формы. +// +// Параметры: +// ТекстСообщенияПользователю - Строка - текст сообщения. +// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится. +// Поле - Строка - наименование реквизита формы. +// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы). +// Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина. +//@skip-check method-too-many-params +Процедура СообщитьПользователюБПО( + Знач ТекстСообщенияПользователю, + Знач КлючДанных = Неопределено, + Знач Поле = "", + Знач ПутьКДанным = "", + Отказ = Ложь) + + ЭтоОбъект = Ложь; + + Если КлючДанных <> Неопределено + И XMLТипЗнч(КлючДанных) <> Неопределено Тогда + + ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; + ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0; + КонецЕсли; + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстСообщенияПользователю; + Сообщение.Поле = Поле; + + //@skip-check empty-except-statement + // АПК: 280-выкл + Попытка + Если ЭтоОбъект Тогда + Сообщение.УстановитьДанные(КлючДанных); + Иначе + Сообщение.КлючДанных = КлючДанных; + КонецЕсли; + + Если НЕ ПустаяСтрока(ПутьКДанным) Тогда + Сообщение.ПутьКДанным = ПутьКДанным; + КонецЕсли; + Исключение + + КонецПопытки; + // АПК: 280-вкл + + Сообщение.Сообщить(); + + Отказ = Истина; + +КонецПроцедуры + +#КонецОбласти + +// Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы +// по ссылке на объект. +// +// Если доступа к одному из реквизитов нет, возникнет исключение прав доступа. +// Если необходимо зачитать реквизит независимо от прав текущего пользователя, +// то следует использовать предварительный переход в привилегированный режим. +// +// Функция не предназначена для получения значений реквизитов пустых ссылок. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить. +// +// Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате +// требований к свойствам структуры. +// Например, "Код, Наименование, Родитель". +// - Структура, ФиксированнаяСтруктура - в качестве ключа передается +// псевдоним поля для возвращаемой структуры с результатом, а в качестве +// значения (опционально) фактическое имя поля в таблице. +// Если значение не определено, то имя поля берется из ключа. +// - Массив из Строка - имена реквизитов в формате требований +// к свойствам структуры. +// +// Возвращаемое значение: +// Структура - содержит имена (ключи) и значения затребованных реквизитов. +// Если строка затребованных реквизитов пуста, то возвращается пустая структура. +// Если в качестве объекта передана пустая ссылка, то все реквизиты вернутся со значением Неопределено. +// +Функция ЗначенияРеквизитовОбъектаБПО(Ссылка, Знач Реквизиты) + + Если ТипЗнч(Реквизиты) = Тип("Строка") Тогда + Если ПустаяСтрока(Реквизиты) Тогда + Возврат Новый Структура; + КонецЕсли; + Реквизиты = СтрРазделить(Реквизиты, ",", Ложь); + КонецЕсли; + + СтруктураРеквизитов = Новый Структура; + Если ТипЗнч(Реквизиты) = Тип("Структура") Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда + СтруктураРеквизитов = Реквизиты; + ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив") Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда + Для Каждого Реквизит Из Реквизиты Цикл + СтруктураРеквизитов.Вставить(СтрЗаменить(Реквизит, ".", ""), Реквизит); + КонецЦикла; + Иначе + ВызватьИсключение СтрШаблон(НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты))); + КонецЕсли; + + ТекстПолей = ""; + Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл + ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение), + СокрЛП(КлючИЗначение.Значение), + СокрЛП(КлючИЗначение.Ключ)); + + Псевдоним = СокрЛП(КлючИЗначение.Ключ); + + ТекстПолей = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + " + | " + ИмяПоля + " КАК " + Псевдоним; + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.Текст = + "ВЫБРАТЬ + | &ТекстПолей + |ИЗ + | &ПолноеИмя КАК ПсевдонимЗаданнойТаблицы + |ГДЕ + | ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстПолей", ТекстПолей); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПолноеИмя", Ссылка.Метаданные().ПолноеИмя()); + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Результат = Новый Структура; + Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл + Результат.Вставить(КлючИЗначение.Ключ); + КонецЦикла; + ЗаполнитьЗначенияСвойств(Результат, Выборка); + + Возврат Результат; + +КонецФункции + +// Возвращает ссылку на общий модуль по имени. +// +// Параметры: +// Имя - Строка - имя общего модуля, например: +// "ОбщегоНазначения", +// "ОбщегоНазначенияКлиент". +// +// Возвращаемое значение: +// ОбщийМодуль. +// +Функция ОбщийМодульБПО(Имя) + + Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда + // АПК:486-выкл ВычислитьВБезопасномРежиме не используется, чтобы избежать вызова ОбщийМодуль рекурсивно. + #Если Не МобильноеПриложениеСервер Тогда + УстановитьБезопасныйРежим(Истина); + #КонецЕсли + Модуль = Вычислить(Имя); + // АПК:486-вкл + ИначеЕсли СтрЧислоВхождений(Имя, ".") = 1 Тогда + Возврат СерверныйМодульМенеджера(Имя); + Иначе + Модуль = Неопределено; + КонецЕсли; + + Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда + ВызватьИсключение СтрШаблон(НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя); + КонецЕсли; + + Возврат Модуль; + +КонецФункции + +// Вычисляет контрольную сумму для произвольных данных по указанному алгоритму. +// +// Параметры: +// Данные - Произвольный - любое сериализуемое значение. +// Алгоритм - ХешФункция - алгоритм расчета контрольной суммы. По умолчанию, MD5. +// +// Возвращаемое значение: +// Строка - контрольная сумма строкой без пробелов (например 32 символа). +// +Функция КонтрольнаяСуммаСтрокойБПО(Знач Данные, Знач Алгоритм = Неопределено) Экспорт + + Если Алгоритм = Неопределено Тогда + Алгоритм = ХешФункция.MD5; + КонецЕсли; + + ХешированиеДанных = Новый ХешированиеДанных(Алгоритм); + Если ТипЗнч(Данные) <> Тип("Строка") И ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда + Данные = ЗначениеВСтрокуXML(Данные); + КонецЕсли; + ХешированиеДанных.Добавить(Данные); + + Если ТипЗнч(ХешированиеДанных.ХешСумма) = Тип("ДвоичныеДанные") Тогда + Результат = СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""); + ИначеЕсли ТипЗнч(ХешированиеДанных.ХешСумма) = Тип("Число") Тогда + Результат = Формат(ХешированиеДанных.ХешСумма, "ЧГ="); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает серверный модуль менеджера по имени объекта. +Функция СерверныйМодульМенеджера(Имя) + ОбъектНайден = Ложь; + + ЧастиИмени = СтрРазделить(Имя, "."); + Если ЧастиИмени.Количество() = 2 Тогда + + ИмяВида = ВРег(ЧастиИмени[0]); + ИмяОбъекта = ЧастиИмени[1]; + + Если ИмяВида = ВРег("Константы") Тогда + Если Метаданные.Константы.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("РегистрыСведений") Тогда + Если Метаданные.РегистрыСведений.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("РегистрыНакопления") Тогда + Если Метаданные.РегистрыНакопления.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("РегистрыБухгалтерии") Тогда + Если Метаданные.РегистрыБухгалтерии.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("РегистрыРасчета") Тогда + Если Метаданные.РегистрыРасчета.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("Справочники") Тогда + Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("Документы") Тогда + Если Метаданные.Документы.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("Отчеты") Тогда + Если Метаданные.Отчеты.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("Обработки") Тогда + Если Метаданные.Обработки.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("БизнесПроцессы") Тогда + Если Метаданные.БизнесПроцессы.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("ЖурналыДокументов") Тогда + Если Метаданные.ЖурналыДокументов.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("Задачи") Тогда + Если Метаданные.Задачи.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("ПланыСчетов") Тогда + Если Метаданные.ПланыСчетов.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("ПланыОбмена") Тогда + Если Метаданные.ПланыОбмена.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("ПланыВидовХарактеристик") Тогда + Если Метаданные.ПланыВидовХарактеристик.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + ИначеЕсли ИмяВида = ВРег("ПланыВидовРасчета") Тогда + Если Метаданные.ПланыВидовРасчета.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектНайден = Истина; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Если Не ОбъектНайден Тогда + ВызватьИсключение СтрШаблон( + НСтр("ru = 'Объект метаданных ""%1"" не найден, + |либо для него не поддерживается получение модуля менеджера.'"), Имя); + КонецЕсли; + + // АПК: 486-выкл, 488-выкл ВычислитьВБезопасномРежиме не используется, чтобы избежать вызова ОбщийМодуль рекурсивно. + #Если Не МобильноеПриложениеСервер Тогда + УстановитьБезопасныйРежим(Истина); + #КонецЕсли + Модуль = Вычислить(Имя); + // АПК: 486-вкл, 488-вкл + + Возврат Модуль; +КонецФункции + +// Преобразует (сериализует) любое значение в XML-строку. +// Преобразованы в могут быть только те объекты, для которых в синтакс-помощнике указано, что они сериализуются. +// См. также ЗначениеИзСтрокиXML. +// +// Параметры: +// Значение - Произвольный - значение, которое необходимо сериализовать в XML-строку. +// +// Возвращаемое значение: +// Строка - XML-строка. +// +Функция ЗначениеВСтрокуXML(Значение) + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное); + + Возврат ЗаписьXML.Закрыть(); +КонецФункции + +// Приводит строковое значение к дате. +// +// Параметры: +// Значение - Строка - строковое значение, которое приводится к дате. +// +// Возвращаемое значение: +// Дата - приведенное значение. +// +Функция СтрокаВДатуБПО(Знач Значение) + + ПустаяДата = Дата(1, 1, 1); + + Если Не ЗначениеЗаполнено(Значение) Тогда + Возврат ПустаяДата; + КонецЕсли; + + ОписаниеДаты = Новый ОписаниеТипов("Дата"); + Дата = ОписаниеДаты.ПривестиЗначение(Значение); + + Если ТипЗнч(Дата) = Тип("Дата") + И ЗначениеЗаполнено(Дата) Тогда + + Возврат Дата; + КонецЕсли; + + #Область ПодготовкаЧастейДаты + + КоличествоСимволов = СтрДлина(Значение); + + Если КоличествоСимволов > 25 Тогда + Возврат ПустаяДата; + КонецЕсли; + + ЧастиЗначения = Новый Массив; + ЧастьЗначения = ""; + + Для НомерСимвола = 1 По КоличествоСимволов Цикл + + Символ = Сред(Значение, НомерСимвола, 1); + + Если ЭтоЧисло(Символ) Тогда + + ЧастьЗначения = ЧастьЗначения + Символ; + + Иначе + + Если Не ПустаяСтрока(ЧастьЗначения) Тогда + ЧастиЗначения.Добавить(ЧастьЗначения); + КонецЕсли; + + ЧастьЗначения = ""; + + КонецЕсли; + + Если НомерСимвола = КоличествоСимволов + И Не ПустаяСтрока(ЧастьЗначения) Тогда + + ЧастиЗначения.Добавить(ЧастьЗначения); + КонецЕсли; + + КонецЦикла; + + Если ЧастиЗначения.Количество() < 3 Тогда + Возврат ПустаяДата; + КонецЕсли; + + Если ЧастиЗначения.Количество() < 4 Тогда + ЧастиЗначения.Добавить("00"); + КонецЕсли; + + Если ЧастиЗначения.Количество() < 5 Тогда + ЧастиЗначения.Добавить("00"); + КонецЕсли; + + Если ЧастиЗначения.Количество() < 6 Тогда + ЧастиЗначения.Добавить("00"); + КонецЕсли; + + #КонецОбласти + + // Если формат ггггММддЧЧммсс: + НормализованноеЗначение = ЧастиЗначения[2] + ЧастиЗначения[1] + ЧастиЗначения[0] + + ЧастиЗначения[3] + ЧастиЗначения[4] + ЧастиЗначения[5]; + + Дата = ОписаниеДаты.ПривестиЗначение(НормализованноеЗначение); + + Если ТипЗнч(Дата) = Тип("Дата") + И ЗначениеЗаполнено(Дата) Тогда + + Возврат Дата; + КонецЕсли; + + // Если формат ггггддММЧЧммсс + НормализованноеЗначение = ЧастиЗначения[2] + ЧастиЗначения[0] + ЧастиЗначения[1] + + ЧастиЗначения[3] + ЧастиЗначения[4] + ЧастиЗначения[5]; + + Дата = ОписаниеДаты.ПривестиЗначение(НормализованноеЗначение); + + Если ТипЗнч(Дата) = Тип("Дата") + И ЗначениеЗаполнено(Дата) Тогда + + Возврат Дата; + КонецЕсли; + + Возврат ПустаяДата; + +КонецФункции + +// Возвращает признак того, что переданное значение является, либо не является, числом. +// +// Параметры: +// ПроверяемоеЗначение - Строка - значение, которое проверяется на соответствие числу. +// +// Возвращаемое значение: +// Булево - признак того, что переданное значение является, либо не является, числом. +// +Функция ЭтоЧисло(Знач ПроверяемоеЗначение) + + Если ПроверяемоеЗначение = "0" Тогда + Возврат Истина; + КонецЕсли; + + ОписаниеЧисла = Новый ОписаниеТипов("Число"); + + Возврат ОписаниеЧисла.ПривестиЗначение(ПроверяемоеЗначение) <> 0; + +КонецФункции + +#Область Данные + +#Область СкопироватьРекурсивно + +Функция СкопироватьСтруктуру(СтруктураИсточник, ФиксироватьДанные) + + СтруктураРезультат = Новый Структура; + + Для Каждого КлючИЗначение Из СтруктураИсточник Цикл + СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(СтруктураИсточник) = Тип("ФиксированнаяСтруктура") Тогда + + Возврат Новый ФиксированнаяСтруктура(СтруктураРезультат); + КонецЕсли; + + Возврат СтруктураРезультат; + +КонецФункции + +Функция СкопироватьСоответствие(СоответствиеИсточник, ФиксироватьДанные) + + СоответствиеРезультат = Новый Соответствие; + + Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл + СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(СоответствиеИсточник) = Тип("ФиксированноеСоответствие") Тогда + Возврат Новый ФиксированноеСоответствие(СоответствиеРезультат); + КонецЕсли; + + Возврат СоответствиеРезультат; + +КонецФункции + +Функция СкопироватьМассив(МассивИсточник, ФиксироватьДанные) + + МассивРезультат = Новый Массив; + + Для Каждого Элемент Из МассивИсточник Цикл + МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(МассивИсточник) = Тип("ФиксированныйМассив") Тогда + Возврат Новый ФиксированныйМассив(МассивРезультат); + КонецЕсли; + + Возврат МассивРезультат; + +КонецФункции + +Функция СкопироватьСписокЗначений(СписокИсточник, ФиксироватьДанные) + + СписокРезультат = Новый СписокЗначений; + + Для Каждого ЭлементСписка Из СписокИсточник Цикл + СписокРезультат.Добавить( + СкопироватьРекурсивно(ЭлементСписка.Значение, ФиксироватьДанные), + ЭлементСписка.Представление, + ЭлементСписка.Пометка, + ЭлементСписка.Картинка); + КонецЦикла; + + Возврат СписокРезультат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Если Не МобильноеПриложениеСервер Тогда + +Функция УровеньСобытияПоПредставлению(ПредставлениеУровня) + Если ПредставлениеУровня = "Информация" Тогда + Возврат УровеньЖурналаРегистрации.Информация; + ИначеЕсли ПредставлениеУровня = "Ошибка" Тогда + Возврат УровеньЖурналаРегистрации.Ошибка; + ИначеЕсли ПредставлениеУровня = "Предупреждение" Тогда + Возврат УровеньЖурналаРегистрации.Предупреждение; + ИначеЕсли ПредставлениеУровня = "Примечание" Тогда + Возврат УровеньЖурналаРегистрации.Примечание; + КонецЕсли; +КонецФункции + +#КонецЕсли + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ОбщегоНазначенияБПОКлиент.xml b/CommonModules/ОбщегоНазначенияБПОКлиент.xml new file mode 100644 index 0000000..1369eb4 --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОКлиент.xml @@ -0,0 +1,23 @@ + + + + + ОбщегоНазначенияБПОКлиент + + + ru + Общего назначения БПО клиент + + + Клиентские процедуры общего назначения БПО + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОбщегоНазначенияБПОКлиент/Ext/Module.bsl b/CommonModules/ОбщегоНазначенияБПОКлиент/Ext/Module.bsl new file mode 100644 index 0000000..a475e15 --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОКлиент/Ext/Module.bsl @@ -0,0 +1,1046 @@ + +#Область ПрограммныйИнтерфейс + +// Возвращает текущую дату, происходит обращение к серверу, для получения точной даты. +// +// Возвращаемое значение: +// Дата - текущая дата сеанса. +// +Функция ДатаСеанса() Экспорт + + ДатаСеанса = МенеджерОборудованияКлиентПереопределяемый.ДатаСеанса(); + Если ЗначениеЗаполнено(ДатаСеанса) Тогда + Возврат ДатаСеанса; + КонецЕсли; + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульОбщегоНазначенияКлиент = ОбщийМодуль("ОбщегоНазначенияКлиент"); + Возврат МодульОбщегоНазначенияКлиент.ДатаСеанса(); + // Конец Вызов БСП + + КонецЕсли; + + Поправка = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПоправкаКВремениСеанса; + ДатаСеанса = ТекущаяДата() + Поправка; // АПК:143 ТекущаяДата() для вычисления времени сеанса + Возврат ДатаСеанса; + +КонецФункции + +#Область РаботаСXML + +// Функция читает корневой элемент XML. +// +// Параметры: +// СтрокаXML - Строка - XML строка. +// +// Возвращаемое значение: +// Структура +// +Функция ПрочитатьКорневойЭлементXML(СтрокаXML) Экспорт + +#Если ВебКлиент Тогда + Возврат ОбщегоНазначенияБПОСлужебныйВызовСервера.ПрочитатьКорневойЭлементXML(СтрокаXML); +#Иначе + Результат = Новый Структура(); + Если Не ПустаяСтрока(СтрокаXML) Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(СтрокаXML); + ЧтениеXML.ПерейтиКСодержимому(); + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда + Пока ЧтениеXML.ПрочитатьАтрибут() Цикл + Результат.Вставить(ЧтениеXML.Имя, ЧтениеXML.Значение); + КонецЦикла + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат Результат; +#КонецЕсли + +КонецФункции + +#КонецОбласти + +#Область Данные + +// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно, +// с учетом типов дочерних элементов. При этом содержимое значений объектных типов +// (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект. +// +// Параметры: +// Источник - Структура +// - ФиксированнаяСтруктура +// - Соответствие +// - ФиксированноеСоответствие +// - Массив +// - ФиксированныйМассив +// - СписокЗначений - объект, который необходимо скопировать. +// ФиксироватьДанные - Булево - если Истина - фиксировать, если Ложь - снять фиксацию. +// - Неопределено - не изменять. +// +// Возвращаемое значение: +// Структура, +// ФиксированнаяСтруктура, +// Соответствие +// ФиксированноеСоответствие +// Массив +// ФиксированныйМассив +// СписокЗначений - копия объекта, переданного в параметре Источник. +// +Функция СкопироватьРекурсивно(Источник, ФиксироватьДанные = Неопределено) Экспорт + + Перем Приемник; + + ТипИсточника = ТипЗнч(Источник); + + Если ТипИсточника = Тип("Структура") + Или ТипИсточника = Тип("ФиксированнаяСтруктура") Тогда + Приемник = СкопироватьСтруктуру(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("Соответствие") + Или ТипИсточника = Тип("ФиксированноеСоответствие") Тогда + Приемник = СкопироватьСоответствие(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("Массив") + Или ТипИсточника = Тип("ФиксированныйМассив") Тогда + Приемник = СкопироватьМассив(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда + Приемник = СкопироватьСписокЗначений(Источник, ФиксироватьДанные); + Иначе + Приемник = Источник; + КонецЕсли; + + Возврат Приемник; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Функция возвращает Истина, если внедрена Библиотека стандартных подсистем +// +// Возвращаемое значение: +// Булево. +Функция ИспользуетсяБСП() Экспорт + + // Вызов БСП + Возврат ПараметрПриложения("СтандартныеПодсистемы.ПараметрыКлиента") <> Неопределено; + // Конец Вызов БСП + +КонецФункции + +// Возвращает установленную версию БСП, если БСП не установлена тогда +// возвращает "0.0.0.0" +// +// Возвращаемое значение: +// Строка +Функция ВерсияБСП() Экспорт + Возврат ПараметрПриложения("БПО.ВерсияБСП"); +КонецФункции + +Функция ПараметрПриложения(Знач ИмяПараметра) Экспорт + + // Вызов БСП + Если ТипЗнч(ПараметрыПриложения) = Тип("Соответствие") Тогда + Возврат ПараметрыПриложения[ИмяПараметра]; // Переменная в модуле приложения + Иначе + Возврат Неопределено; + КонецЕсли; + // Конец Вызов БСП + +КонецФункции + +Процедура УстановитьПараметрПриложения(Знач ИмяПараметра, Значение) Экспорт + + // Вызов БСП + Если ТипЗнч(ПараметрыПриложения) = Тип("Соответствие") Тогда + ПараметрыПриложения[ИмяПараметра] = Значение; // Переменная в модуле приложения + КонецЕсли; + // Конец Вызов БСП + +КонецПроцедуры + +Процедура УдалитьПараметрПриложения(Знач ИмяПараметра) Экспорт + + // Вызов БСП + Если ТипЗнч(ПараметрыПриложения) = Тип("Соответствие") Тогда + ПараметрыПриложения.Удалить(ИмяПараметра); // Переменная в модуле приложения + КонецЕсли; + // Конец Вызов БСП + +КонецПроцедуры + +Функция ПараметрыРаботыКлиентаПриЗапуске() Экспорт + + // Вызов БСП + МодульСтандартныеПодсистемыКлиент = ОбщийМодуль("СтандартныеПодсистемыКлиент"); + Возврат МодульСтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + // Конец Вызов БСП + +КонецФункции + +Функция СистемаЛогирования() Экспорт + Возврат МенеджерОборудованияКлиент.ПодключаемоеОборудование().СистемаЛогирования; +КонецФункции + + +// Формирует и выводит сообщение, которое может быть связано с элементом управления формы. +// +// Параметры: +// ИмяСобытия - Строка +// Комментарий - Строка, Неопределено - +// Метаданные - ОбъектМетаданных - +// +Процедура ЗаписатьОшибкуВЖурналРегистрации(ИмяСобытия, Комментарий = Неопределено, ПредставлениеУровня = "Ошибка", Метаданные = Неопределено) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульЖурналРегистрацииКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ЖурналРегистрацииКлиент"); + МодульЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, ПредставлениеУровня, Комментарий); + // Конец Вызов БСП + + Иначе + + ОбщегоНазначенияБПОСлужебныйВызовСервера.ЗаписатьОшибкуВЖурналРегистрации(ИмяСобытия, Комментарий, ПредставлениеУровня, Метаданные); + + КонецЕсли; + +КонецПроцедуры + +Процедура ОткрытьНавигационнуюСсылку(Ссылка) Экспорт + + // Вызов БСП + МодульФайловаяСистемаКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ФайловаяСистемаКлиент"); + МодульФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(Ссылка); + // Конец Вызов БСП + +КонецПроцедуры + +#Область ОповещениеПользователя + +// Формирует и выводит сообщение, которое может быть связано с элементом управления формы. +// +// Параметры: +// ТекстСообщенияПользователю - Строка - текст сообщения. +// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится. +// Поле - Строка - наименование реквизита формы. +// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы). +// Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина. +//@skip-check method-too-many-params +Процедура СообщитьПользователю(Знач ТекстСообщенияПользователю, Знач КлючДанных = Неопределено, Знач Поле = "", + Знач ПутьКДанным = "", Отказ = Ложь) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульОбщегоНазначенияКлиент = ОбщийМодуль("ОбщегоНазначенияКлиент"); + МодульОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщенияПользователю, КлючДанных, Поле, ПутьКДанным, Отказ); + // Конец Вызов БСП + + Иначе + СообщитьПользователюБПО(ТекстСообщенияПользователю, КлючДанных, Поле, ПутьКДанным, Отказ); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область УсловныеВызовы + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для вызова необязательных подсистем. + +// Возвращает Истина, если функциональная подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Параметры: +// ПолноеИмяПодсистемы - Строка +// +// Возвращаемое значение: +// Булево - Истина, если существует. +// +Функция ПодсистемаСуществует(Знач ПолноеИмяПодсистемы) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульОбщегоНазначенияКлиент = ОбщийМодуль("ОбщегоНазначенияКлиент"); + Возврат МодульОбщегоНазначенияКлиент.ПодсистемаСуществует(ПолноеИмяПодсистемы); + // Конец Вызов БСП + + Иначе + ИмяПараметра = "БПО.ПодсистемыКонфигурации"; + ИменаПодсистем = ПараметрыПриложения[ИмяПараметра]; + Возврат ИменаПодсистем.Получить(ПолноеИмяПодсистемы) <> Неопределено; + КонецЕсли; + +КонецФункции + +// Возвращает ссылку на общий модуль или модуль менеджера по имени. +// +// Параметры: +// Имя - Строка - имя общего модуля. +// +// Возвращаемое значение: +// ОбщийМодуль - общий модуль. +// +Функция ОбщийМодуль(Знач Имя) Экспорт + + Модуль = Вычислить(Имя); + +#Если Не ВебКлиент Тогда + + // В веб-клиенте не проверяется + // т.к. при обращении к модулям с вызовом сервера типа такого модуля в веб-клиенте не существует. + + Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда + ВызватьИсключение СтрШаблон( + НСтр("ru = 'Общий модуль ""%1"" не существует.'"), + Имя); + КонецЕсли; + +#КонецЕсли + + Возврат Модуль; + +КонецФункции + +#КонецОбласти + +#Область ТекущееОкружение + +//////////////////////////////////////////////////////////////////////////////// +// Функции описания текущего окружения клиентского приложения и операционной системы. + +// Возвращает Истина, если клиентское приложение запущено под управлением ОС Windows. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоWindowsКлиент() Экспорт + + ТипПлатформыКлиента = ТипПлатформыКлиента(); + Возврат ТипПлатформыКлиента = ТипПлатформы.Windows_x86 + Или ТипПлатформыКлиента = ТипПлатформы.Windows_x86_64; + +КонецФункции + +// Возвращает Истина, если клиентское приложение запущено под управлением ОС Linux. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоLinuxКлиент() Экспорт + + ТипПлатформыКлиента = ТипПлатформыКлиента(); + Возврат ТипПлатформыКлиента = ТипПлатформы.Linux_x86 + Или ТипПлатформыКлиента = ТипПлатформы.Linux_x86_64; + +КонецФункции + +// Возвращает Истина, если клиентское приложение запущено под управлением macOS. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоMacOSКлиент() Экспорт + + ТипПлатформыКлиента = ТипПлатформыКлиента(); + Возврат ТипПлатформыКлиента = ТипПлатформы.MacOS_x86 + Или ТипПлатформыКлиента = ТипПлатформы.MacOS_x86_64; + +КонецФункции + +// Возвращает Истина, если приложение запущено через веб-клиент +// +// Возвращаемое значение: +// Булево - признак веб клиента. +// +Функция ЭтоВебКлиент() Экспорт + +#Если ВебКлиент Тогда + Возврат Истина; +#Иначе + Возврат Ложь; +#КонецЕсли + +КонецФункции + +// Возвращает Истина, если клиентское приложение подключено к базе через веб-сервер. +// +// Возвращаемое значение: +// Булево - Истина, если подключен. +// +Функция КлиентПодключенЧерезВебСервер() Экспорт + + Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы()), "WS=") = 1; + +КонецФункции + +// Возвращает Истина, если включен режим отладки. +// +// Возвращаемое значение: +// Булево - Истина, если включен режим отладки. +// +Функция РежимОтладки() Экспорт + + Возврат СтрНайти(ПараметрЗапуска, "РежимОтладки") > 0; + +КонецФункции + +// Возвращает объем оперативной памяти, доступной клиентскому приложению. +// +// Возвращаемое значение: +// Число - количество гигабайтов оперативной памяти с точностью до десятых долей. +// Неопределено - нет клиентского приложения, то есть ТекущийРежимЗапуска() = Неопределено. +// +Функция ОперативнаяПамятьДоступнаяКлиентскомуПриложению() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + Возврат Окр(СистемнаяИнформация.ОперативнаяПамять / 1024, 1); + +КонецФункции + +// Возвращает тип платформы клиента. +// +// Возвращаемое значение: +// ТипПлатформы, Неопределено - тип платформы на которой запущен клиент. В режиме веб-клиента, если тип +// платформы иной, чем описан в типе ТипПлатформы, то возвращается Неопределено. +// +Функция ТипПлатформыКлиента() Экспорт + + СистемнаяИнфо = Новый СистемнаяИнформация; + Возврат СистемнаяИнфо.ТипПлатформы; + +КонецФункции + +// Возвращает признак работы в режиме разделения данных по областям +// (технически это признак условного разделения). +// +// Возвращает Ложь, если конфигурация не может работать в режиме разделения данных +// (не содержит общих реквизитов, предназначенных для разделения данных). +// +// Возвращаемое значение: +// Булево - Истина, если разделение включено, +// Ложь, если разделение выключено или не поддерживается. +// +Функция РазделениеВключено() Экспорт + + Если ИспользуетсяБСП() Тогда + // Вызов БСП + МодульОбщегоНазначенияКлиент = ОбщийМодуль("ОбщегоНазначенияКлиент"); + Возврат МодульОбщегоНазначенияКлиент.РазделениеВключено(); + // Конец Вызов БСП + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Возвращает признак возможности обращения к разделенным данным (которые входят в состав разделителей). +// Признак относится к сеансу, но может меняться во время работы сеанса, если разделение было включено +// в самом сеансе, поэтому проверку следует делать непосредственно перед обращением к разделенным данным. +// +// Возвращает Истина, если конфигурация не может работать в режиме разделения данных +// (не содержит общих реквизитов, предназначенных для разделения данных). +// +// Возвращаемое значение: +// Булево - Истина, если разделение не поддерживается, либо разделение выключено, +// либо разделение включено и разделители установлены. +// Ложь, если разделение включено и разделители не установлены. +// +Функция ДоступноИспользованиеРазделенныхДанных() Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + МодульОбщегоНазначенияКлиент = ОбщийМодуль("ОбщегоНазначенияКлиент"); + Возврат МодульОбщегоНазначенияКлиент.ДоступноИспользованиеРазделенныхДанных(); + // Конец Вызов БСП + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ИмяКомпьютераКлиента() Экспорт + +#Если Не ВебКлиент Тогда + Возврат ИмяКомпьютера(); +#Иначе + Возврат ""; +#КонецЕсли + +КонецФункции + +#КонецОбласти + +#Область ДоступныеПодсистемы + +// Возвращает Истина, если используется устройства ввода и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяУстройстваВвода() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.УстройстваВвода"); + +КонецФункции + +// Возвращает Истина, если используется устройства "Шаблоны магнитных карт" и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяШаблоныМагнитныхКарт() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.УстройстваВвода.ШаблоныМагнитныхКарт"); + +КонецФункции + +// Возвращает Истина, если используется подсистемы фискальных устройств и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяЧекопечатающиеУстройства() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства"); + +КонецФункции + +// Возвращает Истина, если используется "Кассовая смена" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяКассоваяСмена() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.КассоваяСмена"); + +КонецФункции + +// Возвращает Истина, если используется "РассылкаЭлектронныхЧеков" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяРассылкаЭлектронныхЧеков() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.РассылкаЭлектронныхЧеков"); + +КонецФункции + +// Возвращает Истина, если используется "ФорматноЛогическийКонтроль" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяФорматноЛогическийКонтроль() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.ФорматноЛогическийКонтроль"); + +КонецФункции + +// Возвращает Истина, если используется "Маркировка" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяМаркировка() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.Маркировка"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Платежные системы" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПлатежныеСистемы() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ПлатежныеСистемы"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Дисплеи покупателя" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяДисплеиПокупателя() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ДисплеиПокупателя"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Весовое оборудование" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяВесовоеОборудование() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ВесовоеОборудование"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Терминалы сбора данных" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяТерминалыСбораДанных() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ТерминалыСбораДанных"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Принтеры этикеток" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПринтерыЭтикеток() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ПринтерыЭтикеток"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Считыватель RFID" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяСчитывательRFID() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.СчитывательRFID"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Офлайн-оборудование" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяОфлайнОборудование() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ОфлайнОборудование"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Печать этикеток и ценников" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПечатьЭтикетокИЦенников() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПечатьЭтикетокИЦенников"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Электронные сертификаты НСПК" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяЭлектронныеСертификатыНСПК() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ЭлектронныеСертификаты"); + +КонецФункции + +// Возвращает Истина если существует подсистема СтандартныеПодсистемы.ОценкаПроизводительности +// и можно выполнять оценку производительности +// +// Возвращаемое значение: +// Булево +Функция ИспользуетсяОценкаПроизводительности() Экспорт + + // Вызов БСП + Возврат ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + // Конец Вызов БСП + +КонецФункции + +// Возвращает Истина если существует подсистема СтандартныеПодсистемы.БазоваяФункциональность +// +// Возвращаемое значение: +// Булево +Функция ИспользуетсяБазоваяФункциональность() Экспорт + + // Вызов БСП + Возврат ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность"); + // Конец Вызов БСП + +КонецФункции + +// Возвращает Истина если существует подсистема ПоддержкаОборудования.СообщенияВСлужбуТехническойПоддержки +// +// Возвращаемое значение: +// Булево +Функция ИспользуетсяСообщенияВСлужбуТехническойПоддержки() Экспорт + + // Вызов БИП + Возврат ПодсистемаСуществует("ИнтернетПоддержкаПользователей.СообщенияВСлужбуТехническойПоддержки") + И ПодсистемаСуществует("ПоддержкаОборудования.СообщенияВСлужбуТехническойПоддержки"); + // Конец Вызов БСП + +КонецФункции + +// Возвращает Истина, если используется подсистема "СертификатыНУЦМинцифры" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяСертификатыНУЦМинцифры() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ЭлектронныеСертификаты.СертификатыНУЦМинцифры"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "РаспределеннаяФискализация" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяРаспределеннаяФискализация() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.РаспределеннаяФискализация"); + +КонецФункции + +// Возвращает Истина, если используется "АвтономнаяККТ" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяАвтономнаяККТ() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.АвтономнаяККТ"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "НастройкиПрограммы" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяНастройкиПрограммыБПО() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.НастройкиПрограммы"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "УстройствоРаспознавания" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяУстройствоРаспознавания() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.УстройствоРаспознавания"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "ОблачныеККТ" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуютсяОблачныеККТ() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ОблачныеККТ"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "ЛогированиеОборудования" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПодсистемаЛогирования() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ЛогированиеОборудования"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "НесертифицированноеОборудование" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяНесертифицированноеОборудование() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.НесертифицированноеОборудование"); + +КонецФункции + +#КонецОбласти + +#Область ОценкаПроизводительности + +// Начинает замер времени если используется подсистема Оценка производительности, если передано значение ПользовательскоеОповещение, +// тогда оно будет подменено оповещением завершения замера, а затем будет вызвано ПользовательскоеОповещение. +// +// Параметры: +// КлючеваяОперация - Строка - имя ключевой операции +// ПользовательскоеОповещение - ОписаниеОповещения - оповещение которое будет подменено +// ФиксироватьСОшибкой - Булево - признак автоматической фиксации ошибки. +// АвтоЗавершение - Булево - Истина - признак автоматического завершения замера. +// +// Возвращаемое значение: +// УникальныйИдентификатор - уникальный идентификатор замера, который позволяет идентифицировать замер. +// +Функция ЗамерВремениБПО(КлючеваяОперация, ПользовательскоеОповещение = Неопределено, ФиксироватьСОшибкой = Ложь, АвтоЗавершение = Ложь) Экспорт + + УИДЗамера = Неопределено; +#Если Не МобильноеПриложениеКлиент Тогда + Если ИспользуетсяОценкаПроизводительности() Тогда + + // Вызов БСП + МодульОценкаПроизводительностиКлиент = ОбщийМодуль("ОценкаПроизводительностиКлиент"); + УИДЗамера = МодульОценкаПроизводительностиКлиент.ЗамерВремени(КлючеваяОперация, ФиксироватьСОшибкой, АвтоЗавершение); + // Конец Вызов БСП + + КонтекстЗамера = Новый Структура(); + КонтекстЗамера.Вставить("УИДЗамера", УИДЗамера); + КонтекстЗамера.Вставить("ПользовательскоеОповещение", ПользовательскоеОповещение); + КонтекстЗамера.Вставить("МодульОценкаПроизводительностиКлиент", МодульОценкаПроизводительностиКлиент); + // Подменить пользовательское оповещение + ПользовательскоеОповещение = Новый ОписаниеОповещения("ЗамерВремениБПО_ЗавершениеЗамера", ЭтотОбъект, КонтекстЗамера); + КонецЕсли; +#КонецЕсли + + Возврат УИДЗамера; + +КонецФункции + +// Начинает замер времени если используется подсистема Оценка производительности. +// +// Параметры: +// КлючеваяОперация - Строка - имя ключевой операции +// ФиксироватьСОшибкой - Булево - признак автоматической фиксации ошибки. +// АвтоЗавершение - Булево - Истина - признак автоматического завершения замера. +// +// Возвращаемое значение: +// УникальныйИдентификатор - уникальный идентификатор замера, который позволяет идентифицировать замер. +// +Функция НачатьЗамерВремениБПО(КлючеваяОперация, ФиксироватьСОшибкой = Ложь, АвтоЗавершение = Ложь) Экспорт + + УИДЗамера = Неопределено; +#Если Не МобильноеПриложениеКлиент Тогда + Если ИспользуетсяОценкаПроизводительности() Тогда + // Вызов БСП + МодульОценкаПроизводительностиКлиент = ОбщийМодуль("ОценкаПроизводительностиКлиент"); + УИДЗамера = МодульОценкаПроизводительностиКлиент.ЗамерВремени(КлючеваяОперация, ФиксироватьСОшибкой, АвтоЗавершение); + // Конец Вызов БСП + КонецЕсли; +#КонецЕсли + + Возврат УИДЗамера; + +КонецФункции + +// Завершает замер времени если используется подсистема Оценка производительности +// +// Параметры: +// УИДЗамера -УникальныйИдентификатор - уникальный идентификатор замера, который позволяет идентифицировать замер. +// ВыполненСОшибкой - Булево - признак того, что замер не был выполнен до конца. +// +Процедура ЗавершитьЗамерВремениБПО(УИДЗамера, ВыполненСОшибкой = Ложь) Экспорт + +#Если Не МобильноеПриложениеКлиент Тогда + Если ИспользуетсяОценкаПроизводительности() Тогда + // Вызов БСП + МодульОценкаПроизводительностиКлиент = ОбщийМодуль("ОценкаПроизводительностиКлиент"); + МодульОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(УИДЗамера, ВыполненСОшибкой); + // Конец Вызов БСП + КонецЕсли; +#КонецЕсли + +КонецПроцедуры + +// Процедура подменяемая в качестве пользовательского оповещения +// +// Параметры: +// Результат - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстЗамера - Структура - контекст оповещения замера: +// * УИДЗамера - УникальныйИдентификатор +// * ПользовательскоеОповещение - ОписаниеОповещения +// * МодульОценкаПроизводительностиКлиент - ОбщийМодуль +// +Процедура ЗамерВремениБПО_ЗавершениеЗамера(Результат, КонтекстЗамера) Экспорт + +#Если Не МобильноеПриложениеКлиент Тогда + Если ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("Результат") Тогда + ВыполненСОшибкой = Не Результат.Результат; + Иначе + ВыполненСОшибкой = Ложь; + КонецЕсли; + + МодульОценкаПроизводительностиКлиент = КонтекстЗамера.МодульОценкаПроизводительностиКлиент; + МодульОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(КонтекстЗамера.УИДЗамера, ВыполненСОшибкой); + + // Выполнить подмененное оповещение + Если КонтекстЗамера.ПользовательскоеОповещение<>Неопределено Тогда + ВыполнитьОбработкуОповещения(КонтекстЗамера.ПользовательскоеОповещение, Результат); + КонецЕсли; +#КонецЕсли + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ОповещениеПользователя + +// Формирует и выводит сообщение, которое может быть связано с элементом управления формы. +// +// Параметры: +// ТекстСообщенияПользователю - Строка - текст сообщения. +// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится. +// Поле - Строка - наименование реквизита формы. +// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы). +// Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина. +// @skip-check method-too-many-params +Процедура СообщитьПользователюБПО( + Знач ТекстСообщенияПользователю, + Знач КлючДанных = Неопределено, + Знач Поле = "", + Знач ПутьКДанным = "", + Отказ = Ложь) Экспорт + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстСообщенияПользователю; + Сообщение.Поле = Поле; + + //@skip-check empty-except-statement + Попытка + Если НЕ ПустаяСтрока(ПутьКДанным) Тогда + Сообщение.ПутьКДанным = ПутьКДанным; + КонецЕсли; + Исключение + + КонецПопытки; + + Сообщение.Сообщить(); + + Отказ = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область СкопироватьРекурсивно + +Функция СкопироватьСтруктуру(СтруктураИсточник, ФиксироватьДанные) + + СтруктураРезультат = Новый Структура; + + Для Каждого КлючИЗначение Из СтруктураИсточник Цикл + СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(СтруктураИсточник) = Тип("ФиксированнаяСтруктура") Тогда + + Возврат Новый ФиксированнаяСтруктура(СтруктураРезультат); + КонецЕсли; + + Возврат СтруктураРезультат; + +КонецФункции + +Функция СкопироватьСоответствие(СоответствиеИсточник, ФиксироватьДанные) + + СоответствиеРезультат = Новый Соответствие; + + Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл + СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(СоответствиеИсточник) = Тип("ФиксированноеСоответствие") Тогда + Возврат Новый ФиксированноеСоответствие(СоответствиеРезультат); + КонецЕсли; + + Возврат СоответствиеРезультат; + +КонецФункции + +Функция СкопироватьМассив(МассивИсточник, ФиксироватьДанные) + + МассивРезультат = Новый Массив; + + Для Каждого Элемент Из МассивИсточник Цикл + МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(МассивИсточник) = Тип("ФиксированныйМассив") Тогда + Возврат Новый ФиксированныйМассив(МассивРезультат); + КонецЕсли; + + Возврат МассивРезультат; + +КонецФункции + +Функция СкопироватьСписокЗначений(СписокИсточник, ФиксироватьДанные) + + СписокРезультат = Новый СписокЗначений; + + Для Каждого ЭлементСписка Из СписокИсточник Цикл + СписокРезультат.Добавить( + СкопироватьРекурсивно(ЭлементСписка.Значение, ФиксироватьДанные), + ЭлементСписка.Представление, + ЭлементСписка.Пометка, + ЭлементСписка.Картинка); + КонецЦикла; + + Возврат СписокРезультат; + +КонецФункции + +#КонецОбласти + + +#КонецОбласти diff --git a/CommonModules/ОбщегоНазначенияБПОКлиентСервер.xml b/CommonModules/ОбщегоНазначенияБПОКлиентСервер.xml new file mode 100644 index 0000000..9eb4503 --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + ОбщегоНазначенияБПОКлиентСервер + + + ru + Общего назначения БПО клиент сервер + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОбщегоНазначенияБПОКлиентСервер/Ext/Module.bsl b/CommonModules/ОбщегоНазначенияБПОКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..9644a05 --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОКлиентСервер/Ext/Module.bsl @@ -0,0 +1,814 @@ +#Область ПрограммныйИнтерфейс + +// Функция возвращает разделитель GS1. +// +// Возвращаемое значение: +// Строка. +// +Функция РазделительGS1() Экспорт; + + Возврат Символ(29); // Dec 29 + +КонецФункции + +// Функция возвращает экранированный символ GS1. +// +// Возвращаемое значение: +// Строка. +// +Функция ЭкранированныйСимволGS1() Экспорт; + + Возврат "\x1d"; // Используется для экранирования символа GS1. + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Разбивает строку на несколько строк по указанному разделителю. Разделитель может иметь любую длину. +// В случаях, когда разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы, +// рекомендуется использовать функцию платформы СтрРазделить. +// +// Параметры: +// Значение - Строка - текст с разделителями. +// Разделитель - Строка - разделитель строк текста, минимум 1 символ. +// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк. +// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: +// > для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки +// включаются в результат; +// > если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в +// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а +// при других разделителях результатом функции будет пустой массив. +// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок. +// +// Возвращаемое значение: +// Массив из Строка +// +// Пример: +// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") +// - возвратит массив из 5 элементов, три из которых - пустые: "", "один", "", "два", ""; +// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) +// - возвратит массив из двух элементов: "один", "два"; +// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(" один два ", " ") +// - возвратит массив из двух элементов: "один", "два"; +// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("") +// - возвратит пустой массив; +// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("",,Ложь) +// - возвратит массив с одним элементом: ""(пустая строка); +// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("", " ") +// - возвратит массив с одним элементом: "" (пустая строка). +// +Функция РазложитьСтрокуВМассивПодстрок(Знач Значение, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, + СокращатьНепечатаемыеСимволы = Ложь) Экспорт + + Если СтрДлина(Разделитель) = 1 + И ПропускатьПустыеСтроки = Неопределено + И СокращатьНепечатаемыеСимволы Тогда + + Результат = СтрРазделить(Значение, Разделитель, Ложь); + Для Индекс = 0 По Результат.ВГраница() Цикл + Результат[Индекс] = СокрЛП(Результат[Индекс]) + КонецЦикла; + Возврат Результат; + + КонецЕсли; + + Результат = Новый Массив; + + // Для обеспечения обратной совместимости. + Если ПропускатьПустыеСтроки = Неопределено Тогда + ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); + Если ПустаяСтрока(Значение) Тогда + Если Разделитель = " " Тогда + Результат.Добавить(""); + КонецЕсли; + Возврат Результат; + КонецЕсли; + КонецЕсли; + // + + Позиция = СтрНайти(Значение, Разделитель); + Пока Позиция > 0 Цикл + Подстрока = Лев(Значение, Позиция - 1); + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда + Если СокращатьНепечатаемыеСимволы Тогда + Результат.Добавить(СокрЛП(Подстрока)); + Иначе + Результат.Добавить(Подстрока); + КонецЕсли; + КонецЕсли; + Значение = Сред(Значение, Позиция + СтрДлина(Разделитель)); + Позиция = СтрНайти(Значение, Разделитель); + КонецЦикла; + + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Значение) Тогда + Если СокращатьНепечатаемыеСимволы Тогда + Результат.Добавить(СокрЛП(Значение)); + Иначе + Результат.Добавить(Значение); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Разбирает строку URI на составные части и возвращает в виде структуры. +// На основе RFC 3986. +// +// Параметры: +// СтрокаURI - Строка - ссылка на ресурс в формате: +// <схема>://<логин>:<пароль>@<хост>:<порт>/<путь>?<параметры>#<якорь>. +// +// Возвращаемое значение: +// Структура - составные части URI согласно формату: +// * Схема - Строка. +// * Логин - Строка. +// * Пароль - Строка. +// * ИмяСервера - Строка - часть <хост>:<порт> входного параметра. +// * Хост - Строка. +// * Порт - Неопределено, Число - +// * ПутьНаСервере - Строка - часть <путь>?<параметры>#<якорь> входного параметра. +// +Функция СтруктураURI(Знач СтрокаURI) Экспорт + + СтрокаURI = СокрЛП(СтрокаURI); + + // схема + Схема = ""; + Позиция = Найти(СтрокаURI, "://"); + Если Позиция > 0 Тогда + Схема = НРег(Лев(СтрокаURI, Позиция - 1)); + СтрокаURI = Сред(СтрокаURI, Позиция + 3); + КонецЕсли; + + // Строка соединения и путь на сервере. + СтрокаСоединения = СтрокаURI; + ПутьНаСервере = ""; + Позиция = Найти(СтрокаСоединения, "/"); + Если Позиция > 0 Тогда + ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1); + СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); + КонецЕсли; + + // Информация пользователя и имя сервера. + СтрокаАвторизации = ""; + ИмяСервера = СтрокаСоединения; + Позиция = Найти(СтрокаСоединения, "@"); + Если Позиция > 0 Тогда + СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); + ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); + КонецЕсли; + + // логин и пароль + Логин = СтрокаАвторизации; + Пароль = ""; + Позиция = Найти(СтрокаАвторизации, ":"); + Если Позиция > 0 Тогда + Логин = Лев(СтрокаАвторизации, Позиция - 1); + Пароль = Сред(СтрокаАвторизации, Позиция + 1); + КонецЕсли; + + // хост и порт + Хост = ИмяСервера; + Порт = ""; + Позиция = Найти(ИмяСервера, ":"); + Если Позиция > 0 Тогда + Хост = Лев(ИмяСервера, Позиция - 1); + Порт = Сред(ИмяСервера, Позиция + 1); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Схема", Схема); + Результат.Вставить("Логин", Логин); + Результат.Вставить("Пароль", Пароль); + Результат.Вставить("ИмяСервера", ИмяСервера); + Результат.Вставить("Хост", Хост); + Результат.Вставить("Порт", ?(ПустаяСтрока(Порт), Неопределено, Число(Порт))); + Результат.Вставить("ПутьНаСервере", ПутьНаСервере); + + Возврат Результат; + +КонецФункции + +// Возвращает Истина, если клиентское приложение является мобильным клиентом. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоМобильныйКлиент() Экспорт + +#Если МобильныйКлиент Тогда + Возврат Истина; +#ИначеЕсли Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + + ЭтоМобильныйКлиент = Ложь; + + Если ЭтоМобильныйКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; + + Возврат ЭтоМобильныйКлиент; +#Иначе + Возврат Ложь; +#КонецЕсли + +КонецФункции + +// Создает массив и помещает в него переданное значение. +// +// Параметры: +// Значение - Произвольный - любое значение. +// +// Возвращаемое значение: +// Массив из Произвольный - массив из одного элемента. +// +Функция ЗначениеВМассиве(Значение) Экспорт + + Массив = Новый Массив; + Массив.Добавить(Значение); + + Возврат Массив; + +КонецФункции + +// Base64 в штрихкод. +// +// Параметры: +// ШтрихкодВBase64 - Строка - Штрихкод в base64 +// +// Возвращаемое значение: +// Строка - Base64 в штрихкод +Функция Base64ВШтрихкод(ШтрихкодВBase64) Экспорт + + ДвоичныеДанные = Base64Значение(ШтрихкодВBase64); + Если ДвоичныеДанные = Неопределено Тогда + Штрихкод = ШтрихкодВBase64; + Иначе + Штрихкод = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные); + КонецЕсли; + + Возврат Штрихкод; + +КонецФункции + +// Штрихкод в base64. +// +// Параметры: +// Штрихкод - Строка - Штрихкод +// +// Возвращаемое значение: +// Строка - Штрихкод в base64 +Функция ШтрихкодВBase64(Штрихкод) Экспорт + + Если Штрихкод = Неопределено Тогда + ДвоичныеДанныеСтроки = Неопределено; + Иначе + ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(Штрихкод); + ШтрихкодBase64 = Base64Строка(ДвоичныеДанныеСтроки); + ШтрихкодBase64 = СтрЗаменить(ШтрихкодBase64, Символы.ПС, ""); + ШтрихкодBase64 = СтрЗаменить(ШтрихкодBase64, Символы.ВК, ""); + КонецЕсли; + + Возврат ШтрихкодBase64; + +КонецФункции + +// Функция возвращает разделитель RS. +// +// Возвращаемое значение: +// Строка. +// +Функция РазделительRS() Экспорт; + + Возврат Символ(30); // Dec 30 + +КонецФункции + +// Функция возвращает экранированный символ RS. +// +// Возвращаемое значение: +// Строка. +// +Функция ЭкранированныйСимволRS() Экспорт; + + Возврат "\x1e"; // Используется для экранирования символа RS. + +КонецФункции + +// Функция возвращает разделитель EOT. +// +// Возвращаемое значение: +// Строка. +// +Функция РазделительEOT() Экспорт; + + Возврат Символ(4); // Dec 4 + +КонецФункции + +// Функция возвращает экранированный символ EOT. +// +// Возвращаемое значение: +// Строка. +// +Функция ЭкранированныйСимволEOT() Экспорт; + + Возврат "\x4"; // Используется для экранирования символа EOT. + +КонецФункции + +// Преобразовать TimeStamp в дату +// Параметры: +// Timestamp - Строка, Число - значение содержащее временной штамп +// +// Возвращаемое значение: +// Дата +// +Функция TimestampВДату(Timestamp) Экспорт + Попытка + Возврат Дата("19700101")+(?(ТипЗнч(Timestamp) = Тип("Строка"), Число(Timestamp), Timestamp) / 1000); + Исключение + Возврат Неопределено; + КонецПопытки; +КонецФункции + +// Преобразовать дату в TimeStamp +// +// Параметры: +// Дата - Дата - дата которую требуется преобразовать +// +// Возвращаемое значение: +// Строка +// +Функция ДатуВTimestamp(Дата = Неопределено) Экспорт + + Возврат Формат(Число(?(ТипЗнч(Дата) = Тип("Дата"), Дата, ТекущаяДата()) - Дата("19700101")),"ЧН=0; ЧГ=0"); + +КонецФункции + +Функция ПредставлениеРевизияИнтерфейса(РевизияИнтерфейса) Экспорт + + Если РевизияИнтерфейса >= 5000 Тогда + Результат = "5." + Строка(РевизияИнтерфейса - 5000); + ИначеЕсли РевизияИнтерфейса >= 4000 Тогда + Результат = "4." + Строка(РевизияИнтерфейса - 4000); + ИначеЕсли РевизияИнтерфейса >= 3000 Тогда + Результат = "3." + Строка(РевизияИнтерфейса - 3000); + ИначеЕсли РевизияИнтерфейса >= 2000 Тогда + Результат = "2." + Строка(РевизияИнтерфейса - 2000); + ИначеЕсли РевизияИнтерфейса > 1000 Тогда + Результат = "1." + Строка(РевизияИнтерфейса - 1000); + Иначе + Результат = ""; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#Область Интернет + +// Создает объект описания защищенного соединения OpenSSL. +// См. также описание объекта ЗащищенноеСоединениеOpenSSL в синтаксис-помощнике. +// +// Параметры: +// СертификатКлиента - СертификатКлиентаФайл +// - СертификатКлиентаWindows +// - Неопределено - клиентский сертификат OpenSSL. +// СертификатыУдостоверяющихЦентров - СертификатыУдостоверяющихЦентровФайл +// - СертификатыУдостоверяющихЦентровWindows +// - СертификатыУдостоверяющихЦентровLinux +// - СертификатыУдостоверяющихЦентровОС +// - Неопределено - сертификаты удостоверяющих центров OpenSSL. +// +// Возвращаемое значение: +// ЗащищенноеСоединениеOpenSSL +// +Функция НовоеЗащищенноеСоединение(Знач СертификатКлиента = Неопределено, Знач СертификатыУдостоверяющихЦентров = Неопределено) Экспорт + + ЗащищенноеСоединение = Неопределено; +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если ОбщегоНазначенияБПО.ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщегоНазначенияБПО.ОбщийМодуль("ОбщегоНазначенияКлиентСервер"); + ЗащищенноеСоединение = ОбщегоНазначенияМодуль.НовоеЗащищенноеСоединение(СертификатКлиента, СертификатыУдостоверяющихЦентров); + // Конец Вызов БСП + + КонецЕсли; +#Иначе + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОбщегоНазначенияКлиентСервер"); + ЗащищенноеСоединение = ОбщегоНазначенияМодуль.НовоеЗащищенноеСоединение(СертификатКлиента, СертификатыУдостоверяющихЦентров); + // Конец Вызов БСП + + КонецЕсли; +#КонецЕсли + + Если ЗащищенноеСоединение = Неопределено Тогда + + #Если ВебКлиент Или МобильныйКлиент Тогда + ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL; + #Иначе + Если СертификатыУдостоверяющихЦентров = Неопределено Тогда + ВерсииПлатформыДляИспользованияСертификатов = "8.3.22.2470; 8.3.23.2122; 8.3.24.1446"; + + СистемнаяИнформация = Новый СистемнаяИнформация; + ТекущийНомерВерсии = ВерсияКонфигурацииБезНомераСборки(СистемнаяИнформация.ВерсияПриложения); + ИспользоватьСертификатыУдостоверяющихЦентров = СравнитьВерсииБезНомераСборки(ТекущийНомерВерсии, "8.3.21") > 0; + + Если ИспользоватьСертификатыУдостоверяющихЦентров Тогда + Если СравнитьВерсииБезНомераСборки(ТекущийНомерВерсии, "8.3.25") < 0 Тогда + Для Каждого НомерСборки Из СтрРазделить(ВерсииПлатформыДляИспользованияСертификатов, "; ", Ложь) Цикл + Если СтрНачинаетсяС(НомерСборки, ТекущийНомерВерсии + ".") Тогда + ИспользоватьСертификатыУдостоверяющихЦентров = + СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, НомерСборки) >= 0; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ИспользоватьСертификатыУдостоверяющихЦентров Тогда + СертификатыУдостоверяющихЦентров = Новый СертификатыУдостоверяющихЦентровОС(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(СертификатКлиента, СертификатыУдостоверяющихЦентров); + #КонецЕсли + + КонецЕсли; + + Возврат ЗащищенноеСоединение; + +КонецФункции + +#КонецОбласти + +// Проверяет наличие реквизита или свойства у произвольного объекта без обращения к метаданным. +// +// Параметры: +// Объект - Произвольный - объект, у которого нужно проверить наличие реквизита или свойства; +// ИмяРеквизита - Строка - имя реквизита или свойства. +// +// Возвращаемое значение: +// Булево - Истина, если есть. +// +Функция ЕстьРеквизитИлиСвойствоОбъекта(Объект, ИмяРеквизита) Экспорт + + КлючУникальности = Новый УникальныйИдентификатор; + СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности); + ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект); + + Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности; + +КонецФункции + +// Проверяет, содержит ли строка только цифры. +// +// Параметры: +// Значение - Строка - проверяемая строка. +// Устаревший - Булево - устаревший параметр, не используется. +// ПробелыЗапрещены - Булево - если Ложь, то в строке допустимо наличие пробелов. +// +// Возвращаемое значение: +// Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы. +// +// Пример: +// Результат = ТолькоЦифрыВСтроке("0123"); // Истина +// Результат = ТолькоЦифрыВСтроке("0123abc"); // Ложь +// Результат = ТолькоЦифрыВСтроке("01 2 3",, Ложь); // Истина +// +Функция ТолькоЦифрыВСтроке(Знач Значение, Знач Устаревший = Истина, Знач ПробелыЗапрещены = Истина) Экспорт + + Если ТипЗнч(Значение) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ПробелыЗапрещены Тогда + Значение = СтрЗаменить(Значение, " ", ""); + КонецЕсли; + + Если СтрДлина(Значение) = 0 Тогда + Возврат Истина; + КонецЕсли; + + // Если содержит только цифры, то в результате замен должна быть получена пустая строка. + // Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы. + Возврат СтрДлина( + СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( + СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( + Значение, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "")) = 0; + +КонецФункции + +Функция СтрокаЗапускаБезопасная(СтрокаЗапуска) Экспорт + // Безопасными считаются такие строковые данные, которые не содержат в себе следующие символы: "$", "`", "|", "||" ";", "&", "&&". + ОпасныйВызов = СтрНайти(СтрокаЗапуска, "$")>0 + Или СтрНайти(СтрокаЗапуска, "`")>0 + Или СтрНайти(СтрокаЗапуска, "|")>0 + Или СтрНайти(СтрокаЗапуска, "||")>0 + Или СтрНайти(СтрокаЗапуска, ";")>0 + Или СтрНайти(СтрокаЗапуска, "&")>0 + Или СтрНайти(СтрокаЗапуска, "&&")>0; + Возврат Не ОпасныйВызов; +КонецФункции + +Функция ДатаСеанса() Экспорт + Возврат ОбщегоНазначенияБПОСлужебныйВызовСервера.ДатаСеанса(); +КонецФункции + +// Преобразовать идентификатор в строку с пробелами +// +// Параметры: +// Идентификатор - Строка - идентификатор который требуется преобразовать +// +// Возвращаемое значение: +// Строка - идентификатор преобразованный в читаемый вид +Функция ПредставлениеИдентификатора(Идентификатор) Экспорт + + РазмерСтроки = СтрДлина(Идентификатор); + Результат = ""; + Для Номер=1 По РазмерСтроки Цикл + КодСимвола = КодСимвола(Идентификатор, Номер); + КодСледующегоСимвола = КодСимвола(Идентификатор, Номер + 1); + КлассСимвола = ""; + Если КодСимвола >= КодСимвола("а") И КодСимвола <= КодСимвола("я") Тогда + Результат = Результат + Символ(КодСимвола); + ИначеЕсли КодСимвола >= КодСимвола("a") И КодСимвола <= КодСимвола("z") Тогда + Результат = Результат + Символ(КодСимвола); + ИначеЕсли КодСимвола >= КодСимвола("А") И КодСимвола <= КодСимвола("Я") Тогда + Если Номер = 1 Тогда + Результат = Результат + Символ(КодСимвола); + Иначе + КодПредыдущегоСимвола = КодСимвола(Идентификатор, Номер - 1); + Если КодПредыдущегоСимвола >= КодСимвола("0") И КодПредыдущегоСимвола <= КодСимвола("9") Тогда + Результат = Результат + Символ(КодСимвола); + ИначеЕсли КодПредыдущегоСимвола >= КодСимвола("A") И КодПредыдущегоСимвола <= КодСимвола("Z") Тогда + Результат = Результат + Символ(КодСимвола); + ИначеЕсли КодПредыдущегоСимвола >= КодСимвола("А") И КодПредыдущегоСимвола <= КодСимвола("Я") Тогда + Результат = Результат + Символ(КодСимвола); + ИначеЕсли КодСледующегоСимвола >= КодСимвола("А") И КодСледующегоСимвола <= КодСимвола("Я") Тогда + Результат = Результат + " " + Символ(КодСимвола); + Иначе + Результат = Результат + " " + НРег(Символ(КодСимвола)); + КонецЕсли; + КонецЕсли; + ИначеЕсли КодСимвола >= КодСимвола("A") И КодСимвола <= КодСимвола("Z") Тогда + Если Номер = 1 Тогда + Результат = Результат + Символ(КодСимвола); + Иначе + КодПредыдущегоСимвола = КодСимвола(Идентификатор, Номер - 1); + Если КодПредыдущегоСимвола >= КодСимвола("A") И КодПредыдущегоСимвола <= КодСимвола("Z") Тогда + Результат = Результат + Символ(КодСимвола); + ИначеЕсли КодПредыдущегоСимвола = КодСимвола("_") Тогда + Результат = Результат + Символ(КодСимвола); + Иначе + Результат = Результат + " " + Символ(КодСимвола); + КонецЕсли; + КонецЕсли; + ИначеЕсли КодСимвола >= КодСимвола("0") И КодСимвола <= КодСимвола("9") Тогда + Если Номер = 1 Тогда + Результат = Результат + Символ(КодСимвола); + Иначе + КодПредыдущегоСимвола = КодСимвола(Идентификатор, Номер - 1); + Если КодПредыдущегоСимвола >= КодСимвола("0") И КодПредыдущегоСимвола <= КодСимвола("9") Тогда + Результат = Результат + Символ(КодСимвола); + ИначеЕсли КодПредыдущегоСимвола >= КодСимвола("A") И КодПредыдущегоСимвола <= КодСимвола("Z") Тогда + Результат = Результат + Символ(КодСимвола); + ИначеЕсли КодПредыдущегоСимвола >= КодСимвола("А") И КодПредыдущегоСимвола <= КодСимвола("Я") Тогда + Результат = Результат + Символ(КодСимвола); + Иначе + Результат = Результат + " " + Символ(КодСимвола); + КонецЕсли; + КонецЕсли; + ИначеЕсли КодСимвола = КодСимвола("_") Тогда + Результат = Результат + Символ(КодСимвола); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Получает номер версии конфигурации без номера сборки. +// +// Параметры: +// Версия - Строка - версия конфигурации в формате РР.ПП.ЗЗ.СС, +// где СС - номер сборки, который будет удален. +// +// Возвращаемое значение: +// Строка - номер версии конфигурации без номера сборки в формате РР.ПП.ЗЗ. +// +Функция ВерсияКонфигурацииБезНомераСборки(Знач Версия) Экспорт + + Массив = СтрРазделить(Версия, "."); + + Если Массив.Количество() < 3 Тогда + Возврат Версия; + КонецЕсли; + + Результат = "[Редакция].[Подредакция].[Релиз]"; + Результат = СтрЗаменить(Результат, "[Редакция]", Массив[0]); + Результат = СтрЗаменить(Результат, "[Подредакция]", Массив[1]); + Результат = СтрЗаменить(Результат, "[Релиз]", Массив[2]); + + Возврат Результат; +КонецФункции + +// Сравнить две строки версий. +// +// Параметры: +// СтрокаВерсии1 - Строка - номер версии в формате РР.{П|ПП}.ЗЗ. +// СтрокаВерсии2 - Строка - второй сравниваемый номер версии. +// +// Возвращаемое значение: +// Число - больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны. +// +Функция СравнитьВерсииБезНомераСборки(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт + + Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0.0", СтрокаВерсии1); + Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0.0", СтрокаВерсии2); + Версия1 = СтрРазделить(Строка1, "."); + Если Версия1.Количество() <> 3 Тогда + ВызватьИсключение ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неправильный формат параметра %1: %2'"), "СтрокаВерсии1", СтрокаВерсии1); + КонецЕсли; + Версия2 = СтрРазделить(Строка2, "."); + Если Версия2.Количество() <> 3 Тогда + ВызватьИсключение ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неправильный формат параметра %1: %2'"), "СтрокаВерсии2", СтрокаВерсии2); + КонецЕсли; + + Результат = 0; + Для Разряд = 0 По 2 Цикл + Результат = Число(Версия1[Разряд]) - Число(Версия2[Разряд]); + Если Результат <> 0 Тогда + Возврат Результат; + КонецЕсли; + КонецЦикла; + Возврат Результат; + +КонецФункции + +// Сравнить две строки версий. +// +// Параметры: +// СтрокаВерсии1 - Строка - номер версии в формате РР.{П|ПП}.ЗЗ.СС. +// СтрокаВерсии2 - Строка - второй сравниваемый номер версии. +// +// Возвращаемое значение: +// Число - больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны. +// +Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт + + Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0.0.0", СтрокаВерсии1); + Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0.0.0", СтрокаВерсии2); + Версия1 = СтрРазделить(Строка1, "."); + Если Версия1.Количество() <> 4 Тогда + ВызватьИсключение ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неправильный формат параметра %1: %2'"), "СтрокаВерсии1", СтрокаВерсии1); + КонецЕсли; + Версия2 = СтрРазделить(Строка2, "."); + Если Версия2.Количество() <> 4 Тогда + ВызватьИсключение ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неправильный формат параметра %1: %2'"), "СтрокаВерсии2", СтрокаВерсии2); + КонецЕсли; + + Результат = 0; + Для Разряд = 0 По 3 Цикл + Результат = Число(Версия1[Разряд]) - Число(Версия2[Разряд]); + Если Результат <> 0 Тогда + Возврат Результат; + КонецЕсли; + КонецЦикла; + Возврат Результат; + +КонецФункции + +// Подставляет параметры в строку. Максимально возможное число параметров - 9. +// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. +// +// Параметры: +// ШаблонСтроки - Строка - шаблон строки с параметрами (вхождениями вида "%<номер параметра>", +// например "%1 пошел в %2"); +// Параметр1 - Строка - значение подставляемого параметра. +// Параметр2 - Строка +// Параметр3 - Строка +// Параметр4 - Строка +// Параметр5 - Строка +// Параметр6 - Строка +// Параметр7 - Строка +// Параметр8 - Строка +// Параметр9 - Строка +// +// Возвращаемое значение: +// Строка - текстовая строка с подставленными параметрами. +// +// Пример: +// СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел +// в Зоопарк". +// +Функция ПодставитьПараметрыВСтроку(Знач ШаблонСтроки, + Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, + Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт + + ЕстьПараметрыСПроцентом = СтрНайти(Параметр1, "%") + Или СтрНайти(Параметр2, "%") + Или СтрНайти(Параметр3, "%") + Или СтрНайти(Параметр4, "%") + Или СтрНайти(Параметр5, "%") + Или СтрНайти(Параметр6, "%") + Или СтрНайти(Параметр7, "%") + Или СтрНайти(Параметр8, "%") + Или СтрНайти(Параметр9, "%"); + + Если ЕстьПараметрыСПроцентом Тогда + Возврат ПодставитьПараметрыСПроцентом(ШаблонСтроки, Параметр1, + Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9); + КонецЕсли; + + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%1", Параметр1); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%2", Параметр2); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%3", Параметр3); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%4", Параметр4); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%5", Параметр5); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%6", Параметр6); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%7", Параметр7); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%8", Параметр8); + ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%9", Параметр9); + Возврат ШаблонСтроки; + +КонецФункции + +// Вставляет параметры в строку, учитывая, что в параметрах могут использоваться подстановочные слова %1, %2 и т.д. +Функция ПодставитьПараметрыСПроцентом(Знач СтрокаПодстановки, + Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, + Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) + + Результат = ""; + Позиция = СтрНайти(СтрокаПодстановки, "%"); + Пока Позиция > 0 Цикл + Результат = Результат + Лев(СтрокаПодстановки, Позиция - 1); + СимволПослеПроцента = Сред(СтрокаПодстановки, Позиция + 1, 1); + ПодставляемыйПараметр = Неопределено; + Если СимволПослеПроцента = "1" Тогда + ПодставляемыйПараметр = Параметр1; + ИначеЕсли СимволПослеПроцента = "2" Тогда + ПодставляемыйПараметр = Параметр2; + ИначеЕсли СимволПослеПроцента = "3" Тогда + ПодставляемыйПараметр = Параметр3; + ИначеЕсли СимволПослеПроцента = "4" Тогда + ПодставляемыйПараметр = Параметр4; + ИначеЕсли СимволПослеПроцента = "5" Тогда + ПодставляемыйПараметр = Параметр5; + ИначеЕсли СимволПослеПроцента = "6" Тогда + ПодставляемыйПараметр = Параметр6; + ИначеЕсли СимволПослеПроцента = "7" Тогда + ПодставляемыйПараметр = Параметр7 + ИначеЕсли СимволПослеПроцента = "8" Тогда + ПодставляемыйПараметр = Параметр8; + ИначеЕсли СимволПослеПроцента = "9" Тогда + ПодставляемыйПараметр = Параметр9; + КонецЕсли; + Если ПодставляемыйПараметр = Неопределено Тогда + Результат = Результат + "%"; + СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 1); + Иначе + Результат = Результат + ПодставляемыйПараметр; + СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 2); + КонецЕсли; + Позиция = СтрНайти(СтрокаПодстановки, "%"); + КонецЦикла; + Результат = Результат + СтрокаПодстановки; + + Возврат Результат; + +КонецФункции + +Функция МассивыСовпадают(Массив1, Массив2) Экспорт + + Если Массив1.Количество() <> Массив2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого Элемент Из Массив1 Цикл + Если Массив2.Найти(Элемент) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + + +#КонецОбласти diff --git a/CommonModules/ОбщегоНазначенияБПОПереопределяемый.xml b/CommonModules/ОбщегоНазначенияБПОПереопределяемый.xml new file mode 100644 index 0000000..6febd91 --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОПереопределяемый.xml @@ -0,0 +1,23 @@ + + + + + ОбщегоНазначенияБПОПереопределяемый + + + ru + Общего назначения БПО переопределяемый + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОбщегоНазначенияБПОПереопределяемый/Ext/Module.bsl b/CommonModules/ОбщегоНазначенияБПОПереопределяемый/Ext/Module.bsl new file mode 100644 index 0000000..a4656bd --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОПереопределяемый/Ext/Module.bsl @@ -0,0 +1,17 @@ + +#Область ПрограммныйИнтерфейс + +// Выполняет запись ошибки в мобильном приложении вместо журнала регистрации +// @skip-check module-empty-method +// +// Параметры: +// ИмяСобытия - Строка +// ПредставлениеУровня - Строка - возможные значения: "Ошибка", "Предупреждение", "Информация" +// Метаданные - ОбъектМетаданных +// Комментарий - Строка +// +Процедура ЗаписатьОшибкуВМобильномПриложении(ИмяСобытия, ПредставлениеУровня, Метаданные, Комментарий) Экспорт + +КонецПроцедуры + +#КонецОбласти diff --git a/CommonModules/ОбщегоНазначенияБПОПовтИсп.xml b/CommonModules/ОбщегоНазначенияБПОПовтИсп.xml new file mode 100644 index 0000000..d2ae13a --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОПовтИсп.xml @@ -0,0 +1,23 @@ + + + + + ОбщегоНазначенияБПОПовтИсп + + + ru + Общего назначения БПОПовт исп + + + Серверные процедуры и функции общего назначения БПО + false + false + true + true + true + false + false + DuringSession + + + \ No newline at end of file diff --git a/CommonModules/ОбщегоНазначенияБПОПовтИсп/Ext/Module.bsl b/CommonModules/ОбщегоНазначенияБПОПовтИсп/Ext/Module.bsl new file mode 100644 index 0000000..86d841a --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОПовтИсп/Ext/Module.bsl @@ -0,0 +1,67 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает соответствие имен "функциональных" подсистем и значения Истина. +// У "функциональной" подсистемы снят флажок "Включать в командный интерфейс". +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение +// +Функция ИменаПодсистем() Экспорт + + Имена = Новый Соответствие; + ВставитьИменаПодчиненныхПодсистем(Имена, Метаданные); + + Возврат Новый ФиксированноеСоответствие(Имена); + +КонецФункции + +Функция РежимЗамещенияДоступен() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация(); + Версия = СистемнаяИнформация.ВерсияПриложения; + + Если ОбщегоНазначенияБПОКлиентСервер.СравнитьВерсии(Версия, "8.3.25.1336") < 0 Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция РежимЗамещенияУдаление() Экспорт + +#Если Не МобильноеПриложениеСервер Тогда + УстановитьБезопасныйРежим(Истина); +#КонецЕсли + Возврат Вычислить("РежимЗамещения.Удаление"); + +КонецФункции + + +#КонецОбласти + + +#Область СлужебныеПроцедурыИФункции + +Процедура ВставитьИменаПодчиненныхПодсистем(Имена, РодительскаяПодсистема, ИмяРодительскойПодсистемы = "") + + Для Каждого ТекущаяПодсистема Из РодительскаяПодсистема.Подсистемы Цикл + + Если ТекущаяПодсистема.ВключатьВКомандныйИнтерфейс Тогда + Продолжить; + КонецЕсли; + + ИмяТекущейПодсистемы = ИмяРодительскойПодсистемы + ТекущаяПодсистема.Имя; + Имена.Вставить(ИмяТекущейПодсистемы, Истина); + + Если ТекущаяПодсистема.Подсистемы.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + ВставитьИменаПодчиненныхПодсистем(Имена, ТекущаяПодсистема, ИмяТекущейПодсистемы + "."); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git a/CommonModules/ОбщегоНазначенияБПОСлужебныйВызовСервера.xml b/CommonModules/ОбщегоНазначенияБПОСлужебныйВызовСервера.xml new file mode 100644 index 0000000..e901b01 --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОСлужебныйВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ОбщегоНазначенияБПОСлужебныйВызовСервера + + + ru + Общего назначения БПО служебный + + + Общего назначения служебный БПО + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ОбщегоНазначенияБПОСлужебныйВызовСервера/Ext/Module.bsl b/CommonModules/ОбщегоНазначенияБПОСлужебныйВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..9bb19fe --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,57 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ДатаСеанса() Экспорт + Возврат ОбщегоНазначенияБПО.ДатаСеанса(); +КонецФункции + +#Область РаботаСXML + +// Функция читает корневой элемент XML. +// +// Параметры: +// СтрокаXML - Строка - XML строка. +// +// Возвращаемое значение: +// Структура +// +Функция ПрочитатьКорневойЭлементXML(СтрокаXML) Экспорт + + Возврат ОбщегоНазначенияБПО.ПрочитатьКорневойЭлементXML(СтрокаXML); + +КонецФункции + +#КонецОбласти + +// Возвращает истина если данные аутентификации пользователя интернет поддержки заполнены +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки() Экспорт + + // Вызов БИП + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.БазоваяФункциональностьБИП") Тогда + МодульИнтернетПоддержкаПользователей = ОбщегоНазначенияБПО.ОбщийМодуль("ИнтернетПоддержкаПользователей"); + Возврат МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); + КонецЕсли; + // Конец Вызов БИП + + Возврат Ложь; + +КонецФункции + +// Формирует и выводит сообщение, которое может быть связано с элементом управления формы. +// +// Параметры: +// ИмяСобытия - Строка +// Комментарий - Строка, Неопределено - +// Метаданные - ОбъектМетаданных - +// +Процедура ЗаписатьОшибкуВЖурналРегистрации(ИмяСобытия, Комментарий = Неопределено, ПредставлениеУровня = "Ошибка", Метаданные = Неопределено) Экспорт + + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации(ИмяСобытия, Комментарий, ПредставлениеУровня, Метаданные); + +КонецПроцедуры + +#КонецОбласти diff --git a/CommonModules/ПодключаемоеОборудованиеДрайверКлиент.xml b/CommonModules/ПодключаемоеОборудованиеДрайверКлиент.xml new file mode 100644 index 0000000..e8fa66d --- /dev/null +++ b/CommonModules/ПодключаемоеОборудованиеДрайверКлиент.xml @@ -0,0 +1,23 @@ + + + + + ПодключаемоеОборудованиеДрайверКлиент + + + ru + Обработчик универсального драйвера + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ПодключаемоеОборудованиеДрайверКлиент/Ext/Module.bsl b/CommonModules/ПодключаемоеОборудованиеДрайверКлиент/Ext/Module.bsl new file mode 100644 index 0000000..0238ac3 --- /dev/null +++ b/CommonModules/ПодключаемоеОборудованиеДрайверКлиент/Ext/Module.bsl @@ -0,0 +1,3858 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Функция начинает выполнение команды, обрабатывает и перенаправляет на исполнение команду к драйверу. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ПараметрыПодключения - Структура +// Команда - Строка - команда для выполнения +// ДанныеОперации - Структура - данные операции для выполнения команды +// +// Возвращаемое значение: +// см. РезультатОперацииНаОборудовании +// +Асинх Функция ВыполнениеКоманды(ПараметрыПодключения, Команда, ДанныеОперации) Экспорт; + + ОбъектДрайвера = ПараметрыПодключения.ОбъектДрайвера; + ДанныеОперации.Вставить("Команда", Команда); + + // ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ФИСКАЛЬНЫМИ УСТРОЙСТВАМИ + Если Команда = "CheckFiscalization" Тогда + РезультатВыполнения = Ждать ФискализацияЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "PrintText" Или Команда = "PrintQRCode" Тогда + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "OpenShift" Тогда + РезультатВыполнения = Ждать ОткрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "CloseShift" Тогда + РезультатВыполнения = Ждать ЗакрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "Encash" Тогда + РезультатВыполнения = Ждать Инкассация(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "OpenCashDrawer" Тогда + РезультатВыполнения = Ждать ОткрытьДенежныйЯщик(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "PrintReceiptCorrection" Тогда + РезультатВыполнения = Ждать ПечатьЧекаКоррекции(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "ReportCurrentStatusOfSettlements" Тогда + РезультатВыполнения = Ждать ОтчетОТекущемСостоянииРасчетов(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "PrintXReport" Тогда + РезультатВыполнения = Ждать ОтчетБезГашения(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "GetLineLength" Тогда + РезультатВыполнения = Ждать ШиринаСтроки(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "AnnulCheck" Тогда + РезультатВыполнения = Ждать АннулированиеЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "GetDataKKT" Тогда + РезультатВыполнения = Ждать ПараметрыККТ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "GetCurrentStatus" Тогда + РезультатВыполнения = Ждать ТекущееСостояние(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "OperationFN" Тогда + РезультатВыполнения = Ждать ОперацияФискальногоНакопителя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "PrintCheckCopy" Тогда + РезультатВыполнения = Ждать НапечататьКопиюЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "OpenSessionRegistrationKM" Тогда + РезультатВыполнения = Ждать ОткрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "CloseSessionRegistrationKM" Тогда + РезультатВыполнения = Ждать ЗакрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "RequestKM" Тогда + РезультатВыполнения = Ждать ЗапросКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "RequestKMKMNoWait" Тогда + РезультатВыполнения = Ждать ЗапросКМБезОжиданияОтвета(ПараметрыПодключения.ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "GetProcessingKMResult" Тогда + РезультатВыполнения = Ждать РезультатыЗапросаКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "ConfirmKM" Тогда + РезультатВыполнения = Ждать ПодтвердитьКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "CheckKM" Тогда + РезультатВыполнения = Ждать ПроверкаКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "CheckFiscalizationPacket" Тогда + РезультатВыполнения = Ждать ФискализацияЧекаПакетом(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + // ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ЭКВАЙРИНГОВЫМИ ТЕРМИНАЛАМИ + ИначеЕсли Команда = "AuthorizeSales" Или Команда = "AuthorizeRefund" Или Команда = "AuthorizeVoid" + Или Команда = "PayByPaymentCardWithCashWithdrawal" Или Команда = "PurchaseWithEnrollment" Тогда + Если ПараметрыПодключения.РевизияИнтерфейса > 4002 Тогда + РезультатВыполнения = Ждать ЭквайринговаяОперацияXML(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда); + Иначе + РезультатВыполнения = Ждать ЭквайринговаяОперация(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда); + КонецЕсли; + ИначеЕсли Команда = "PayElectronicCertificate" Или Команда = "ReturnElectronicCertificate" Тогда + Если ПараметрыПодключения.РевизияИнтерфейса > 4002 Тогда + РезультатВыполнения = Ждать ЭквайринговаяОперацияСЭлектроннымСертификатомXML(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда); + Иначе + РезультатВыполнения = Ждать ЭквайринговаяОперацияСЭлектроннымСертификатом(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда); + КонецЕсли; + ИначеЕсли Команда = "Settlement" Тогда // Сверка итогов по картам + РезультатВыполнения = Ждать ИтогиДняПоКартам(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "EmergencyVoid" Тогда // Аварийная отмена платежа + РезультатВыполнения = Ждать АварийнаяОтменаОперации(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "GetCardParametrs" Тогда // Получить параметры карты + РезультатВыполнения = Ждать ПараметрыКарты(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "GetOperationByCards" Тогда // Получить параметры карты + РезультатВыполнения = Ждать ОперацииПоКартам(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "AuthorizePreSales" Или Команда = "AuthorizeCompletion" Или Команда = "AuthorizeVoidPreSales" Тогда + РезультатВыполнения = Ждать ЭквайринговаяОперацияXML(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда); + + // ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ДИСПЛЕЯМИ ПОКУПАТЕЛЯ + ИначеЕсли Команда = "GetOutputOptions" Тогда // Получить параметры вывода. + РезультатВыполнения = Ждать ПараметрыВывода(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "DisplayText" Тогда // Вывод строк на дисплей. + РезультатВыполнения = Ждать ВывестиСтрокуНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "ClearText" Тогда // Очистка дисплея. + РезультатВыполнения = Ждать ОчиститьДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "DisplayQRCode" Тогда // Вывод QR кода на дисплей. + РезультатВыполнения = Ждать ВывестиQRКодНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "DisplayStatus" Тогда // Вывести статус на дисплей покупателя + РезультатВыполнения = Ждать ВывестиСтатусНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "DisplayStatusRM" Тогда // Вывести статус рабочего места на дисплей покупателя + РезультатВыполнения = Ждать ВывестиСтатусРабочегоМестаНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "OutputHTML" Тогда // Вывести HTML на дисплей покупателя. + РезультатВыполнения = Ждать ВывестиHTMLНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "DisplayInfo" Тогда // Вывести информацию на дисплей покупателя + РезультатВыполнения = Ждать ВывестиИнформациюНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + // ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ЭЛЕКТРОННЫМИ ВЕСАМИ + ИначеЕсли Команда = "GetWeight" Тогда // Получить вес. + РезультатВыполнения = Ждать ПолучитьВес(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "Calibrate" Тогда // Установить вес тары. + РезультатВыполнения = Ждать Тарировать(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + Иначе + ОписаниеОшибки = НСтр("ru='Недопустимая команда.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция начинает выполнение команды несертифицированного оборудования, обрабатывает и перенаправляет +// на исполнение команду к драйверу. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ПараметрыПодключения - Структура +// Команда - Строка - команда для выполнения +// ДанныеОперации - Структура - данные операции для выполнения команды +// +// Возвращаемое значение: +// см. РезультатОперацииНаОборудовании +// +Асинх Функция ВыполнениеКомандыНесертифицированногоОборудованияАсинх(ПараметрыПодключения, Команда, ДанныеОперации) Экспорт; + + ОбъектДрайвера = ПараметрыПодключения.ОбъектДрайвера; + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатВыполнения.Вставить("Результат", Ложь); + РезультатВыполнения.Вставить("ОписаниеОшибки", ""); + РезультатВыполнения.Вставить("ИдентификаторУстройства", ПараметрыПодключения.ИдентификаторУстройства); + + Попытка + МодульОборудованиеНесертифицированноеКлиентПереопределяемый = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеНесертифицированноеКлиентПереопределяемый"); + Результат = Ждать МодульОборудованиеНесертифицированноеКлиентПереопределяемый.ВыполнитьКомандуАсинх( + ОбъектДрайвера, ПараметрыПодключения, Команда, ДанныеОперации, РезультатВыполнения); + Если Результат <> Неопределено Тогда + РезультатВыполнения.Результат = Результат; + КонецЕсли; + Исключение + Возврат ОшибкаВызоваДрайвера(Команда, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Если Не РезультатВыполнения.Результат Тогда + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Возвращает объект драйвера +// +// Параметры: +// ПараметрыПодключения - Структура +// +// Возвращаемое значение: +// ОбъектВнешнейКомпоненты +// +Асинх Функция ОбъектДрайвераАсинх(ПараметрыПодключения) Экспорт + + Если ПараметрыПодключения.ИдентификаторОбъекта = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ОбъектДрайвера = МенеджерОборудованияКлиент.ОбъектДрайвераИзКэша(ПараметрыПодключения.ИдентификаторОбъекта); + Если ОбъектДрайвера <> Неопределено Тогда + Возврат ОбъектДрайвера; + КонецЕсли; + + ТекстСообщения = СтрШаблон( + НСтр("ru = 'Для продолжения работы требуется установка внешней компоненты ""%1"".'"), + ПараметрыПодключения.Наименование); + + Если ПараметрыПодключения.ПодключениеИзМакета Или ОбщегоНазначенияБПОКлиентСервер.ЭтоМобильныйКлиент() Тогда + + Операция = НСтр("ru = 'Подключить из макета'"); + Если Не ПараметрыПодключения.МакетДоступен Тогда + + ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Для внешней компоненты макет %1 не обнаружен.'"), ПараметрыПодключения.ИмяМакетаДрайвера); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Операция, ОписаниеОшибки); + Возврат Неопределено; + + КонецЕсли; + + Если МенеджерОборудованияКлиент.ДопустимаУстановкаКомпоненты(ПараметрыПодключения.ИмяМакетаДрайвера) Тогда + + Параметры = ВнешниеКомпонентыБПОКлиент.ПараметрыПодключения(); + Параметры.ТекстПояснения = ТекстСообщения; + Параметры.Изолированно = ПараметрыПодключения.БезопасноеПодключение; + Параметры.Кэшировать = Ложь; + + ДанныеЛога = Новый Структура(); + ДанныеЛога.Вставить("Идентификатор", ПараметрыПодключения.ИдентификаторОбъекта); + ДанныеЛога.Вставить("ПолноеИмяМакета", ПараметрыПодключения.ИмяМакетаДрайвера); + ДанныеЛога.Вставить("ПараметрыПодключения", Параметры); + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, Операция, ДанныеЛога); + РезультатПодключения = Ждать ВнешниеКомпонентыБПОКлиент.ПодключитьКомпонентуИзМакетаАсинх(ПараметрыПодключения.ИдентификаторОбъекта, ПараметрыПодключения.ИмяМакетаДрайвера, Параметры); + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатПодключения, "Подключено, ОписаниеОшибки"); + + Иначе + + РезультатПодключения = ВнешниеКомпонентыБПОКлиент.РезультатПодключения(); + РезультатПодключения.Подключено = Ложь; + ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Подключение внешней компоненты из макета %1 не допустимо.'"), ПараметрыПодключения.ИмяМакетаДрайвера); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Операция, ОписаниеОшибки); + + КонецЕсли; + + ИначеЕсли ПараметрыПодключения.ПодключениеЛокальноПоИдентификатору Тогда + #Если ВебКлиент Тогда + РезультатПодключения = ВнешниеКомпонентыБПОКлиент.РезультатПодключения(); + РезультатПодключения.Подключено = Ложь; + #Иначе + Операция = НСтр("ru = 'Подключить из реестра Windows'"); + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, Операция, ПараметрыПодключения.ИдентификаторОбъекта, "Идентификатор"); + РезультатПодключения = Ждать ВнешниеКомпонентыБПОКлиент.ПодключитьКомпонентуИзРеестраWindowsАсинх(ПараметрыПодключения.ИдентификаторОбъекта); + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатПодключения, "Подключено, ОписаниеОшибки"); + #КонецЕсли + Иначе + Параметры = ВнешниеКомпонентыБПОКлиент.ПараметрыПодключения(); + Параметры.ТекстПояснения = ТекстСообщения; + Параметры.Изолированно = ПараметрыПодключения.БезопасноеПодключение; + Параметры.Кэшировать = Ложь; + Параметры.ПредложитьЗагрузить = Истина; + Параметры.ПредложитьУстановить = Истина; + Параметры.ОбновлятьАвтоматически = Ложь; + + Операция = НСтр("ru = 'Подключить компоненту'"); + ДанныеЛога = Новый Структура(); + ДанныеЛога.Вставить("Идентификатор", ПараметрыПодключения.ИдентификаторОбъекта); + ДанныеЛога.Вставить("ПараметрыПодключения", Параметры); + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, Операция, ДанныеЛога); + РезультатПодключения = Ждать ВнешниеКомпонентыБПОКлиент.ПодключитьКомпонентуАсинх(ПараметрыПодключения.ИдентификаторОбъекта, Неопределено, Параметры); + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатПодключения, "Подключено, ОписаниеОшибки"); + КонецЕсли; + + Если РезультатПодключения.Подключено Тогда + ОбъектДрайвера = РезультатПодключения.ПодключаемыйМодуль; + МенеджерОборудованияКлиент.ДобавитьДрайверВКэш(ПараметрыПодключения.ИдентификаторОбъекта, ОбъектДрайвера); + КонецЕсли; + + Возврат ОбъектДрайвера; + +КонецФункции + +// Возвращает описание драйвера +// +// Параметры: +// ПараметрыПодключения - Структура +// +// Возвращаемое значение: +// см. РезультатОперацииНаОборудовании +// +Асинх Функция ОписаниеДрайвераАсинх(ПараметрыПодключения) Экспорт + + ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения); + Если ОбъектДрайвера = Неопределено Тогда + + РезультатВыполнения = ОшибкаЗагрузкиДрайвера(ПараметрыПодключения); + Возврат РезультатВыполнения; + + Иначе + + Если Не ПустаяСтрока(ПараметрыПодключения.ШаблонЛокализации) Тогда + Попытка + ТекущийЯзык = ТекущийЯзык(); + КодЯзыкаПользователя = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка); + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "SetLocalization", ВМассив(КодЯзыкаПользователя, ПараметрыПодключения.ШаблонЛокализации)); + РезультатВызова = Ждать ОбъектДрайвера.УстановитьЛокализациюАсинх(КодЯзыкаПользователя, ПараметрыПодключения.ШаблонЛокализации); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Если Не РезультатВызова.Значение Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка локализации драйвера.'")); + ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + КонецПопытки; + КонецЕсли; + + ОписаниеПолучено = Истина; + ОписаниеДрайвера = МенеджерОборудованияКлиентСервер.ПараметрыОписанияДрайвера(); + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetDescription"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОписаниеАсинх(ОписаниеДрайвера.ОписаниеДрайвераXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Исключение + РевизияИнтерфейса = 2005; + ОписаниеПолучено = Ложь; + КонецПопытки; + + Если Не ОписаниеПолучено Тогда + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОписаниеАсинх(ОписаниеДрайвера.НаименованиеДрайвера, ОписаниеДрайвера.ОписаниеДрайвера, ОписаниеДрайвера.ТипОборудования, + РевизияИнтерфейса, ОписаниеДрайвера.ИнтеграционныйКомпонент, ОписаниеДрайвера.ОсновнойДрайверУстановлен, ОписаниеДрайвера.URLЗагрузкиДрайвера); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова, + "Name, Description, EquipmentType, InterfaceRevision, IntegrationLibrary, MainDriverInstalled, DownloadURL"); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат ОшибкаВызоваДрайвера("ПолучитьОписание", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Истина); + КонецПопытки; + КонецЕсли; + + Если РезультатВызова.Значение <> Истина Тогда + ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + ПараметрыВызова = РезультатВызова.Параметры; + Если ПараметрыВызова.Количество() > 1 И Не СтрНачинаетсяС(ПараметрыВызова[0], "= 4000 И ОписаниеДрайвера.ПоддерживаетсяЛокализация Тогда + ШаблонЛокализации = ""; + Попытка + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetLocalizationPattern"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьШаблонЛокализацииАсинх(ШаблонЛокализации); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Если РезультатВызова.Значение Тогда + ПараметрыВызова = РезультатВызова.Параметры; + ОписаниеДрайвера.ШаблонЛокализации = ПараметрыВызова[0]; + КонецЕсли + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка получения шаблон локализации драйвера.'") + Символы.ПС + ОписаниеОшибки); + КонецПопытки; + Если РезультатВызова.Значение <> Истина Тогда + ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + КонецЕсли; + + ОписаниеДрайвера.РевизияИнтерфейсаПредставление = ПредставлениеРевизияИнтерфейса(ОписаниеДрайвера.РевизияИнтерфейса); + ПараметрыПодключения.РевизияИнтерфейса = ОписаниеДрайвера.РевизияИнтерфейса; + + Если НЕ ОписаниеДрайвера.РевизияИнтерфейса > 4002 Тогда + // Устанавливаем тип оборудования. + Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения, Истина, Ложь); + Если Не Результат Тогда + Возврат ОшибкаВызоваДрайвера("УстановитьПараметрыДрайвера"); + КонецЕсли; + КонецЕсли; + + // Получаем параметры драйвера. Для 4003 и выше - тип оборудования установиться в методе. + Результат = Ждать ПараметрыДрайвераАсинх(ОбъектДрайвера, ОписаниеДрайвера, ПараметрыПодключения); + + РезультатВыполнения = РезультатОперацииНаОборудовании(Результат); + РезультатВыполнения.Вставить("ОписаниеДрайвера", ОписаниеДрайвера); + Возврат РезультатВыполнения; + + КонецЕсли; + +КонецФункции + +// Возвращает параметры драйвера +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ОписаниеДрайвера - Структура +// ПараметрыПодключения - Структура +// +// Возвращаемое значение: +// Булево +// +Асинх Функция ПараметрыДрайвераАсинх(ОбъектДрайвера, ОписаниеДрайвера, ПараметрыПодключения) Экспорт + + ПараметрыДрайвера = ""; + + Если ПараметрыПодключения.РевизияИнтерфейса > 4002 Тогда + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "EquipmentParameters", ПараметрыПодключения, "ТипОборудованияИмя"); + РезультатВызова = Ждать ОбъектДрайвера.ПараметрыОборудованияАсинх(ПараметрыПодключения.ТипОборудованияИмя, ПараметрыДрайвера); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + ОписаниеДрайвера.ПараметрыДрайвера = РезультатВызова.Параметры[1]; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка получения параметров драйвера.'") + Символы.ПС + ОписаниеОшибки); + Возврат Ложь; + КонецПопытки; + Иначе + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetParameters"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыАсинх(ПараметрыДрайвера); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ОписаниеДрайвера.ПараметрыДрайвера = РезультатВызова.Параметры[0]; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка получения параметров драйвера.'") + Символы.ПС + ОписаниеОшибки); + Возврат Ложь; + КонецПопытки; + КонецЕсли; + + Если РезультатВызова.Значение <> Истина Тогда + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + ДополнительныеДействия = ""; + Попытка + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetAdditionalActions"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьДополнительныеДействияАсинх(ДополнительныеДействия); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка получения описания драйвера.'")); + Возврат Ложь; + КонецПопытки; + + Если РезультатВызова.Значение <> Истина Тогда + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + ПараметрыВызова = РезультатВызова.Параметры; + ОписаниеДрайвера.ДополнительныеДействия = ПараметрыВызова[0]; + ОписаниеДрайвера.Установлен = Истина; + + Если ПараметрыПодключения.Свойство("КоличествоПодключенных") Тогда + ОписаниеДрайвера.Вставить("КоличествоПодключенных", ПараметрыПодключения.КоличествоПодключенных); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Устанавливает параметры драйвера +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// УстановитьТипОборудования - Булево +// УстановитьПараметры - Булево +// +// Возвращаемое значение: +// Булево +// +Асинх Функция УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения, УстановитьТипОборудования = Истина, УстановитьПараметры = Истина) Экспорт + + Если УстановитьТипОборудования И ПараметрыПодключения.Свойство("ТипОборудованияИмя") Тогда + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "SetParameter", ВМассив("EquipmentType", ПараметрыПодключения.ТипОборудованияИмя)); + РезультатВызова = Ждать ОбъектДрайвера.УстановитьПараметрАсинх("EquipmentType", ПараметрыПодключения.ТипОборудованияИмя); // ТипОборудования + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат Ложь; + КонецПопытки; + Если РезультатВызова.Значение <> Истина Тогда // Может быть Неопределено + ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + КонецЕсли; + + Если УстановитьПараметры И ПараметрыПодключения.Параметры <> Неопределено Тогда + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "SetParameter", ПараметрыПодключения.Параметры); + + Для Каждого Параметр Из ПараметрыПодключения.Параметры Цикл + Если Лев(Параметр.Ключ, 2) = "P_" Тогда + ЗначениеПараметра = Параметр.Значение; + ИмяПараметра = Сред(Параметр.Ключ, 3); + Попытка + РезультатВызова = Ждать ОбъектДрайвера.УстановитьПараметрАсинх(ИмяПараметра, ЗначениеПараметра); // Структура + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат Ложь; + КонецПопытки; + Если РезультатВызова.Значение <> Истина Тогда // Может быть Неопределено + ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + КонецЕсли; + КонецЦикла; + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Функция начинает подключение устройства. +// +// Параметры: +// ПараметрыПодключения - Структура +// +// Возвращаемое значение: +// см. РезультатОперацииНаОборудовании +// +Асинх Функция ПодключитьУстройствоАсинх(ПараметрыПодключения) Экспорт + + Если ПараметрыПодключения.ТипОборудования = ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.ОблачнаяККТ") Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Возврат РезультатВыполнения; + КонецЕсли; + + ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения); + Если ОбъектДрайвера = Неопределено Тогда + Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения); + КонецЕсли; + + ПараметрыПодключения.ОбъектДрайвера = ОбъектДрайвера; + + РевизияИнтерфейса = 2005; + ОписаниеПолучено = Истина; + ОписаниеДрайвера = МенеджерОборудованияКлиентСервер.ПараметрыОписанияДрайвера(); + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetInterfaceRevision"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьРевизиюИнтерфейсаАсинх(); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + РевизияИнтерфейса = РезультатВызова.Значение; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + ОписаниеПолучено = Ложь; + КонецПопытки; + + Если Не ОписаниеПолучено Тогда + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetDescription"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОписаниеАсинх(ОписаниеДрайвера.НаименованиеДрайвера, ОписаниеДрайвера.ОписаниеДрайвера, ОписаниеДрайвера.ТипОборудования, + ОписаниеДрайвера.РевизияИнтерфейса, ОписаниеДрайвера.ИнтеграционныйКомпонент, ОписаниеДрайвера.ОсновнойДрайверУстановлен, ОписаниеДрайвера.URLЗагрузкиДрайвера); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + РевизияИнтерфейса = РезультатВызова.Параметры[3]; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат ОшибкаВызоваДрайвера("ПолучитьОписание"); + КонецПопытки; + КонецЕсли; + ПараметрыПодключения.РевизияИнтерфейса = РевизияИнтерфейса; + ОписаниеДрайвера.РевизияИнтерфейса = РевизияИнтерфейса; + + Если ПустаяСтрока(ПараметрыПодключения.РевизияИнтерфейса) Или ПараметрыПодключения.РевизияИнтерфейса = 0 Тогда + ОписаниеОшибки = НСтр("ru='Ревизия интерфейса драйвера не определена.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + Иначе + ПараметрыПодключения.РевизияИнтерфейсаПредставление = ПредставлениеРевизияИнтерфейса(ПараметрыПодключения.РевизияИнтерфейса); + КонецЕсли; + + Если ПараметрыПодключения.РевизияИнтерфейса >= 4000 Тогда + Если Не ПустаяСтрока(ПараметрыПодключения.ШаблонЛокализации) Тогда + Попытка + ТекущийЯзык = ТекущийЯзык(); + КодЯзыка = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка); + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "SetLocalization", ВМассив(КодЯзыка, ПараметрыПодключения.ШаблонЛокализации)); + РезультатВызова = Ждать ОбъектДрайвера.УстановитьЛокализациюАсинх(КодЯзыка, ПараметрыПодключения.ШаблонЛокализации); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Если НЕ РезультатВызова.Значение Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка локализации драйвера.'")); + ОшибкаВызоваДрайвера("УстановитьЛокализацию"); + КонецЕсли + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + КонецПопытки; + КонецЕсли; + КонецЕсли; + + Если ПараметрыПодключения.РевизияИнтерфейса > 4002 Тогда + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ConnectEquipment", ПараметрыПодключения, ", ТипОборудованияИмя, ПараметрыXML"); + РезультатВызова = Ждать ОбъектДрайвера.ПодключитьОборудованиеАсинх(ПараметрыПодключения.ИДУстройства, + ПараметрыПодключения.ТипОборудованияИмя, ПараметрыПодключения.ПараметрыXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ПараметрыПодключения.ИДУстройства = РезультатВызова.Параметры[0]; + Результат = РезультатВызова.Значение; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат ОшибкаВызоваДрайвера("ПодключитьОборудование", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + + Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения, Истина, Ложь); + Если Не Результат Тогда + Возврат ОшибкаВызоваДрайвера("УстановитьПараметрыДрайвера"); + КонецЕсли; + + Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения, Ложь); + Если Не Результат Тогда + Возврат ОшибкаВызоваДрайвера("УстановитьПараметрыДрайвера"); + КонецЕсли; + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "Open"); + РезультатВызова = Ждать ОбъектДрайвера.ПодключитьАсинх(ПараметрыПодключения.ИДУстройства); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ПараметрыПодключения.ИДУстройства = РезультатВызова.Параметры[0]; + Результат = РезультатВызова.Значение; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат ОшибкаВызоваДрайвера("Подключить", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + КонецЕсли; + + Если Результат <> Истина Тогда // Может быть Неопределено + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + Возврат РезультатВыполнения; + Иначе + + ТипыОборудования = ПараметрыПодключения.ТипыОборудования; + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяЧекопечатающиеУстройства() + И ((ТипыОборудования.Свойство("ККТ") И ТипыОборудования.ККТ) + Или (ТипыОборудования.Свойство("ПринтерЧеков") И ТипыОборудования.ПринтерЧеков) + Или (ТипыОборудования.Свойство("ФискальныйРегистратор") И ТипыОборудования.ФискальныйРегистратор) + ) Тогда + Результат = Ждать ШиринаСтроки(ОбъектДрайвера, ПараметрыПодключения, Неопределено) + КонецЕсли; + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() + И ТипыОборудования.Свойство("ЭквайринговыйТерминал") И ТипыОборудования.ЭквайринговыйТерминал Тогда + Результат = Ждать ПараметрыТерминала(ОбъектДрайвера, ПараметрыПодключения, Неопределено) + КонецЕсли; + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяДисплеиПокупателя() + И ТипыОборудования.Свойство("ДисплейПокупателя") И ТипыОборудования.ДисплейПокупателя Тогда + Результат = Ждать ПараметрыВывода(ОбъектДрайвера, ПараметрыПодключения, Неопределено); + Если ПараметрыПодключения.ДисплейОтрабатываетНажатия Тогда + ПараметрыПодключения.ИменаСобытий.Добавить("Нажатие"); //@NON-NLS-1 @NON-NLS-2 + ПараметрыПодключения.ИменаСобытий.Добавить("OnClick"); + КонецЕсли; + КонецЕсли; + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяВесовоеОборудование() + И ТипыОборудования.Свойство("ЭлектронныеВесы") И ТипыОборудования.ЭлектронныеВесы Тогда + Результат = Ждать ПараметрыВесов(ОбъектДрайвера, ПараметрыПодключения, Неопределено); + Если ПараметрыПодключения.СобытиеПолученииВеса Тогда + ПараметрыПодключения.ИменаСобытий.Добавить("Взвешивание"); //@NON-NLS-1 @NON-NLS-2 + ПараметрыПодключения.ИменаСобытий.Добавить("Weighting"); + КонецЕсли; + КонецЕсли; + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяУстройстваВвода() + И ТипыОборудования.Свойство("СканерШтрихкода") Тогда + + Если ПараметрыПодключения.ТипыОборудования.СканерШтрихкода Тогда + ПараметрыПодключения.ИменаСобытий.Добавить("Штрихкод"); //@NON-NLS-1 @NON-NLS-2 + ПараметрыПодключения.ИменаСобытий.Добавить("ШтрихкодBase64"); //@NON-NLS-1 @NON-NLS-2 + ПараметрыПодключения.ИменаСобытий.Добавить("Barcode"); + ПараметрыПодключения.ИменаСобытий.Добавить("BarcodeBase64"); + КонецЕсли; + + Если ПараметрыПодключения.ТипыОборудования.СканерШтрихкода Тогда + ПараметрыПодключения.ИменаСобытий.Добавить("НажатиеКлавиши"); //@NON-NLS-1 @NON-NLS-2 + ПараметрыПодключения.ИменаСобытий.Добавить("KeyPress"); + КонецЕсли; + КонецЕсли; + + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Возврат РезультатВыполнения; + КонецЕсли; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Возврат РезультатВыполнения; + +КонецФункции + +// Функция начинает отключение устройства. +// +// Параметры: +// ПараметрыПодключения - Структура +// +// Возвращаемое значение: +// см. РезультатОперацииНаОборудовании +// +Асинх Функция ОтключитьУстройствоАсинх(ПараметрыПодключения) Экспорт + + ОбъектДрайвера = ПараметрыПодключения.ОбъектДрайвера; + Если ОбъектДрайвера = Неопределено Тогда + Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения); + КонецЕсли; + + Если ПараметрыПодключения.РевизияИнтерфейса > 4002 Тогда + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "DisconnectEquipment"); + РезультатВызова = Ждать ОбъектДрайвера.ОтключитьОборудованиеАсинх(ПараметрыПодключения.ИДУстройства); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + РезультатВыполнения = РезультатОперацииНаОборудовании(РезультатВызова.Значение); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат ОшибкаВызоваДрайвера("ОтключитьОборудование", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "Close"); + РезультатВызова = Ждать ОбъектДрайвера.ОтключитьАсинх(ПараметрыПодключения.ИДУстройства); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + РезультатВыполнения = РезультатОперацииНаОборудовании(РезультатВызова.Значение); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат ОшибкаВызоваДрайвера("Отключить", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; + + Если РезультатВызова.Значение <> Истина Тогда + ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Выполняет тест устройства +// +// Параметры: +// ПараметрыПодключения - Структура +// +// Возвращаемое значение: +// см. РезультатОперацииНаОборудовании +// +Асинх Функция ТестУстройстваАсинх(ПараметрыПодключения) Экспорт + + ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения); + Если ОбъектДрайвера = Неопределено Тогда + Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения); + КонецЕсли; + + РевизияИнтерфейса = Ждать РевизияИнтерфейсаАсинх(ОбъектДрайвера, ПараметрыПодключения); + + Результат = Ложь; + РезультатТеста = ""; + АктивированДемоРежим = ""; + Если РевизияИнтерфейса > 4002 Тогда + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "EquipmentTest", ПараметрыПодключения, "ТипОборудованияИмя, ПараметрыXML"); + РезультатВызова = Ждать ОбъектДрайвера.ТестированиеОборудованияАсинх(ПараметрыПодключения.ТипОборудованияИмя, + ПараметрыПодключения.ПараметрыXML, РезультатТеста, АктивированДемоРежим); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат ОшибкаВызоваДрайвера("ТестированиеОборудования", ТекстОшибки); + КонецПопытки; + + Если ТипЗнч(РезультатВызова.Значение) = Тип("Булево") Тогда + Результат = РезультатВызова.Значение; + РезультатТеста = РезультатВызова.Параметры[2]; + АктивированДемоРежим = РезультатВызова.Параметры[3]; + Если РезультатВызова.Значение <> Истина Тогда + ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + КонецЕсли; + Иначе + Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения); + Если Результат Тогда + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "DeviceTest"); + РезультатВызова = Ждать ОбъектДрайвера.ТестУстройстваАсинх(РезультатТеста, АктивированДемоРежим); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат ОшибкаВызоваДрайвера("ТестУстройства"); + КонецПопытки; + + Если ТипЗнч(РезультатВызова.Значение) = Тип("Булево") Тогда + Результат = РезультатВызова.Значение; + РезультатТеста = РезультатВызова.Параметры[0]; + АктивированДемоРежим = РезультатВызова.Параметры[1]; + Если РезультатВызова.Значение <> Истина Тогда + ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + КонецЕсли; + Иначе + Возврат ОшибкаВызоваДрайвера("УстановитьПараметрыДрайвера"); + КонецЕсли; + КонецЕсли; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Результат); + РезультатВыполнения.Вставить("РезультатВыполнения" , РезультатТеста); + РезультатВыполнения.Вставить("АктивированДемоРежим", АктивированДемоРежим); + + Возврат РезультатВыполнения; + +КонецФункции + +// Выполняет автонастройку устройства +// +// Параметры: +// ПараметрыПодключения - Структура +// +// Возвращаемое значение: +// см. РезультатОперацииНаОборудовании +// +Асинх Функция АвтонастройкаУстройстваАсинх(ПараметрыПодключения) Экспорт + + ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения); + Если ОбъектДрайвера = Неопределено Тогда + Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения); + КонецЕсли; + + РевизияИнтерфейса = Ждать РевизияИнтерфейсаАсинх(ОбъектДрайвера, ПараметрыПодключения); + + Результат = Ложь; + ПоказыватьОкноАвтонастройки = Истина; + Таймаут = 60; + ПараметрыПодключенияXML = ""; + + Если РевизияИнтерфейса > 4002 Тогда + + Попытка + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "EquipmentAutoSetup", + ВМассив(,ПараметрыПодключения.ПараметрыXML,,ПоказыватьОкноАвтонастройки,Таймаут)); + РезультатВызова = Ждать ОбъектДрайвера.АвтонастройкаОборудованияАсинх(ПараметрыПодключения.ТипОборудованияИмя, + ПараметрыПодключения.ПараметрыXML, ПараметрыПодключенияXML, ПоказыватьОкноАвтонастройки, Таймаут); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + КонецПопытки; + + + Если ТипЗнч(РезультатВызова.Значение) = Тип("Булево") Тогда + Результат = РезультатВызова.Значение; + ПараметрыПодключенияXML = РезультатВызова.Параметры[2]; + Если РезультатВызова.Значение <> Истина Тогда + ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + КонецЕсли; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Результат); + РезультатВыполнения.Вставить("ПараметрыПодключенияXML", ПараметрыПодключенияXML); + РезультатВыполнения.Вставить("ПараметрыПодключения" , МенеджерОборудованияВызовСервера.ЗагрузитьПараметрыXML(ПараметрыПодключенияXML)); + + Иначе + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Выполняет дополнительное действие +// +// Параметры: +// ПараметрыПодключения - Структура +// ПараметрыВыполнения - Структура +// +// Возвращаемое значение: +// см. РезультатОперацииНаОборудовании +// +Асинх Функция ВыполнитьДополнительноеДействиеАсинх(ПараметрыПодключения, ПараметрыВыполнения) Экспорт + + ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения); + Если ОбъектДрайвера = Неопределено Тогда + Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения); + КонецЕсли; + + Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения); + Если Результат Тогда + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "DoAdditionalAction", ПараметрыВыполнения, "ИмяДействия"); + РезультатВызова = Ждать ОбъектДрайвера.ВыполнитьДополнительноеДействиеАсинх(ПараметрыВыполнения.ИмяДействия); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Результат = РезультатВызова.Значение; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + ОписаниеОшибки = НСтр("ru='Ошибка выполнения дополнительного действия.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецПопытки; + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Если РезультатВызова.Значение <> Истина Тогда + РезультатВыполнения = ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Иначе + Возврат ОшибкаВызоваДрайвера("УстановитьПараметрыДрайвера"); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Выполняет тест устройства +// +// Параметры: +// ПараметрыПодключения - Структура +// +// Возвращаемое значение: +// см. РезультатОперацииНаОборудовании +// +Асинх Функция РевизияИнтерфейсаАсинх(ОбъектДрайвера, ПараметрыПодключения) Экспорт + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetInterfaceRevision"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьРевизиюИнтерфейсаАсинх(); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + РевизияИнтерфейса = РезультатВызова.Значение; + Исключение + // Версия требований 2.5 и ниже + РевизияИнтерфейса = 2005; + КонецПопытки; + ПараметрыПодключения.РевизияИнтерфейса = РевизияИнтерфейса; + + Возврат РевизияИнтерфейса; + +КонецФункции + +#Область РежимСовместимости + +// Начинает выполнение команды, обрабатывает и перенаправляет на исполнение команду к драйверу. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ПараметрыПодключения - Структура +// Команда - Строка - команда для выполнения +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Процедура НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ПараметрыПодключения, Команда, ДанныеОперации) Экспорт + + Если ПараметрыПодключения.Несертифицированное Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяНесертифицированноеОборудование() Тогда + РезультатВыполнения = Ждать ВыполнениеКомандыНесертифицированногоОборудованияАсинх(ПараметрыПодключения, Команда, ДанныеОперации); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + Иначе + Результат = Ждать ВыполнениеКоманды(ПараметрыПодключения, Команда, ДанныеОперации); + Если Результат.Свойство("ДлительнаяОперация") Тогда + Если Результат.ДлительнаяОперация = "ПроверкаКМ" Тогда + МодульМенеджерОборудованияМаркировкаКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("МенеджерОборудованияМаркировкаКлиент"); + МодульМенеджерОборудованияМаркировкаКлиент.ДлительнаяОперацияПроверкаКМ(ОповещениеПриЗавершении, Команда, ПараметрыПодключения, ДанныеОперации); + КонецЕсли; + Иначе + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Начинает получение объекта драйвера +Асинх Процедура НачатьПолучениеОбъектаДрайвера(ОповещениеПриЗавершении, ПараметрыПодключения) Экспорт + + Результат = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Начинает получение описания драйвера +Асинх Процедура НачатьПолучениеОписанияДрайвера(ОповещениеПриЗавершении, ПараметрыПодключения) Экспорт + + Результат = Ждать ОписаниеДрайвераАсинх(ПараметрыПодключения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Процедура начинает подключение устройства. +// +Асинх Процедура НачатьПодключениеУстройства(ОповещениеПриЗавершении, ПараметрыПодключения) Экспорт + + Результат = Ждать ПодключитьУстройствоАсинх(ПараметрыПодключения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Процедура начинает отключение устройства. +// +Асинх Процедура НачатьОтключениеУстройства(ОповещениеПриЗавершении, ПараметрыПодключения) Экспорт + + Результат = Ждать ОтключитьУстройствоАсинх(ПараметрыПодключения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Процедура начинает тест устройства. +// +Асинх Процедура НачатьТестУстройства(ОповещениеПриЗавершении, ПараметрыПодключения, ПараметрыВыполнения) Экспорт + + Результат = Ждать ТестУстройстваАсинх(ПараметрыПодключения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Процедура начинает автонастройку устройства. +// +Асинх Процедура НачатьАвтонастройкуУстройства(ОповещениеПриЗавершении, ПараметрыПодключения, ПараметрыВыполнения) Экспорт + + Результат = Ждать АвтонастройкаУстройстваАсинх(ПараметрыПодключения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Выполнение дополнительного действия для устройства. +// +Асинх Процедура НачатьВыполнитьДополнительноеДействие(ОповещениеПриЗавершении, ПараметрыПодключения, ПараметрыВыполнения) Экспорт + + Результат = Ждать ВыполнитьДополнительноеДействиеАсинх(ПараметрыПодключения, ПараметрыВыполнения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработатьСобытие + +Функция ОбработатьСобытиеШтрихкод(Данные) Экспорт + + ИмяСобытия = "ScanData"; + Штрихкод = СокрЛП(Данные); + Если МенеджерОборудованияКлиент.СобытиеУстройствВводаНовыйФормат() Тогда + ДанныеСобытия = Новый Структура("Штрихкод,Данные", Штрихкод, Данные); + Иначе + ДанныеСобытия = Новый Массив(); + ДанныеСобытия.Добавить(Штрихкод); + МассивВторогоПорядка = Новый Массив(); + МассивВторогоПорядка.Добавить(Данные); + МассивВторогоПорядка.Добавить(Штрихкод); + МассивВторогоПорядка.Добавить(0); + ДанныеСобытия.Добавить(МассивВторогоПорядка); + КонецЕсли; + + РезультатОбработки = Новый Структура(); + РезультатОбработки.Вставить("Результат", Истина); + РезультатОбработки.Вставить("Событие" , ИмяСобытия); + РезультатОбработки.Вставить("Данные" , ДанныеСобытия); + Возврат РезультатОбработки; + +КонецФункции + +Функция ОбработатьСобытиеШтрихкод64(Данные) Экспорт + + ИмяСобытия = "ScanDataBase64"; + Штрихкод = СокрЛП(Данные); + Если МенеджерОборудованияКлиент.СобытиеУстройствВводаНовыйФормат() Тогда + ДанныеСобытия = Новый Структура("Штрихкод,Данные", Штрихкод, Данные); + Иначе + ДанныеСобытия = Новый Массив(); + ДанныеСобытия.Добавить(Штрихкод); + МассивВторогоПорядка = Новый Массив(); + МассивВторогоПорядка.Добавить(Данные); + МассивВторогоПорядка.Добавить(Штрихкод); + МассивВторогоПорядка.Добавить(0); + ДанныеСобытия.Добавить(МассивВторогоПорядка); + КонецЕсли; + + РезультатОбработки = Новый Структура(); + РезультатОбработки.Вставить("Результат", Истина); + РезультатОбработки.Вставить("Событие" , ИмяСобытия); + РезультатОбработки.Вставить("Данные" , ДанныеСобытия); + Возврат РезультатОбработки; + +КонецФункции + +Функция ОбработатьНажатиеКлавиши(Данные) Экспорт + + ИмяСобытия = "KeyPress"; + Штрихкод = СокрЛП(Данные); + ДанныеСобытия = Новый Структура("НажатаяКлавиша,Данные", СокрЛП(Данные), Данные); + + РезультатОбработки = Новый Структура(); + РезультатОбработки.Вставить("Результат", Истина); + РезультатОбработки.Вставить("Событие" , ИмяСобытия); + РезультатОбработки.Вставить("Данные" , ДанныеСобытия); + Возврат РезультатОбработки; + +КонецФункции + +Функция ОбработатьНажатиеНаДисплее(Данные) Экспорт + + ИмяСобытия = "Pressed"; + + РезультатОбработки = Новый Структура(); + РезультатОбработки.Вставить("Результат", Истина); + РезультатОбработки.Вставить("Событие" , ИмяСобытия); + РезультатОбработки.Вставить("Данные" , Данные); + Возврат РезультатОбработки; + +КонецФункции + + +Функция ОбработатьСобытиеВеса(ПараметрыПодключения, Данные) Экспорт + + Результат = Истина; + ИмяСобытия = "Weighting"; + Стабилизация = Истина; + ОшибкаРазмещения = Ложь; + ЗонаПересечения = Новый Массив(); + Вес = 0; + + ДанныеМассив = СтрРазделить(СокрЛП(Данные), ";"); + Попытка + Вес = ?(ДанныеМассив.Количество() > 0, Число(ДанныеМассив[0]), 0); + Если ДанныеМассив.Количество() > 1 И ВРег(ДанныеМассив[1]) = "UNSTABLE" Тогда + Стабилизация = Ложь; // Вес не стабилизирован + КонецЕсли; + Если ДанныеМассив.Количество() > 2 Тогда // Ошибка размещения + ОшибкаРазмещенияМассив = СтрРазделить(СокрЛП(ДанныеМассив[2]), ","); + Для Каждого ОшибкаРазмещенияЭлемент Из ОшибкаРазмещенияМассив Цикл + ОшибкаРазмещения = Истина; + Если Не ПустаяСтрока(ОшибкаРазмещенияЭлемент) И ВРег(Лев(ОшибкаРазмещенияЭлемент,3)) = "ERR" Тогда + СтрЗонаПересечения = Сред(ОшибкаРазмещенияЭлемент, 5); + Если Не ПустаяСтрока(СтрЗонаПересечения) Тогда + ЗонаПересечения.Добавить(Число(СтрЗонаПересечения)); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Исключение + Результат = Ложь; + КонецПопытки; + + ДанныеСобытия = ПараметрыСобытияВеса(); + ДанныеСобытия.ИдентификаторУстройства = ПараметрыПодключения.ИдентификаторУстройства; + ДанныеСобытия.Вес = Вес; + ДанныеСобытия.Стабилизация = Стабилизация; + ДанныеСобытия.ОшибкаРазмещения = ОшибкаРазмещения; + ДанныеСобытия.ЗонаПересечения = ЗонаПересечения; + + РезультатОбработки = Новый Структура(); + РезультатОбработки.Вставить("Результат", Результат); + РезультатОбработки.Вставить("Событие" , ИмяСобытия); + РезультатОбработки.Вставить("Данные" , ДанныеСобытия); + Возврат РезультатОбработки; + +КонецФункции + +// Функция осуществляет обработку внешних событий подключаемого оборудования. +// +// Возвращаемое значение: +// Структура. +// +Функция ОбработатьСобытие(ОбъектДрайвера, ПараметрыПодключения, Событие, Данные) Экспорт + + Операция = СтрШаблон(НСтр("ru = 'Событие: %1'"), Событие); + ДанныеДляЛога = ОбщегоНазначенияБПОКлиентСервер.ШтрихкодВBase64(Данные); + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, Операция, ДанныеДляЛога, "Данные"); + + Если Событие = "Штрихкод" Или Событие = "Barcode" Тогда + РезультатОбработки = ОбработатьСобытиеШтрихкод(Данные); + ИначеЕсли Событие = "ШтрихкодBase64" Или Событие = "BarcodeBase64" Тогда + РезультатОбработки = ОбработатьСобытиеШтрихкод64(Данные); + ИначеЕсли Событие = "НажатиеКлавиши" Или Событие = "KeyPress" Тогда + РезультатОбработки = ОбработатьНажатиеКлавиши(Данные); + ИначеЕсли Событие = "Взвешивание" Или Событие = "Weighting" Тогда + РезультатОбработки = ОбработатьСобытиеВеса(ПараметрыПодключения, Данные); + ИначеЕсли Событие = "Нажатие" Или Событие = "OnClick" Тогда + РезультатОбработки = ОбработатьНажатиеНаДисплее(Данные); + Иначе + РезультатОбработки = Новый Структура(); + РезультатОбработки.Вставить("Результат", Ложь); + РезультатОбработки.Вставить("Событие" , ""); + РезультатОбработки.Вставить("Данные" , Данные); + Возврат РезультатОбработки; + КонецЕсли; + + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатОбработки); + Возврат РезультатОбработки; + +КонецФункции + +#КонецОбласти + +#Область ОбщиеСинхронныеМетодыОбработчиков + +// Конструктор результата выполнения операции на оборудовании +// +// Параметры: +// Результат - Булево +// ОписаниеОшибки - Строка +// - Неопределено +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование +// - Неопределено +// +// Возвращаемое значение: +// Структура: +// * Результат - Булево +// * ОписаниеОшибки - Строка +// - Неопределено +// * ОшибкаЗагрузки - Булево +// * ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование +// - Неопределено +// +Функция РезультатОперацииНаОборудовании(Результат = Ложь, ОписаниеОшибки = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт + + РезультатВыполнения = Новый Структура(); + РезультатВыполнения.Вставить("Результат" , Результат); + РезультатВыполнения.Вставить("ОписаниеОшибки", ОписаниеОшибки); + РезультатВыполнения.Вставить("ОшибкаЗагрузки", Ложь); + РезультатВыполнения.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + Возврат РезультатВыполнения; + +КонецФункции + +Функция ОшибкаЗагрузкиДрайвера(ПараметрыПодключения, ОписаниеОшибки = "") Экспорт + + Текст = НСтр("ru='%1: Не удалось загрузить драйвер устройства. + |Проверьте, что драйвер корректно установлен и зарегистрирован в системе. + |%2'"); + Текст = СтрШаблон(Текст, ПараметрыПодключения.Наименование, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, Текст); + РезультатВыполнения.ОшибкаЗагрузки = Истина; + Возврат РезультатВыполнения; + +КонецФункции + +Функция ОшибкаВызоваДрайвера(МетодДрайвера = Неопределено, ОписаниеОшибки = Неопределено, ЗаписьВЖурналРегистрации = Ложь) Экспорт + + Если НЕ ПустаяСтрока(МетодДрайвера) Тогда + СообщениеОбОшибке = НСтр("ru='Ошибка вызова метода драйвера <%1>.'"); + СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, МетодДрайвера); + Иначе + СообщениеОбОшибке = НСтр("ru='Данный тип оборудования не поддерживает данную команду.'"); + КонецЕсли; + + Если НЕ ПустаяСтрока(ОписаниеОшибки) Тогда + СообщениеОбОшибке = СообщениеОбОшибке + Символы.ПС + ОписаниеОшибки; + КонецЕсли; + + Если ЗаписьВЖурналРегистрации Тогда + ОбщегоНазначенияБПОКлиент.ЗаписатьОшибкуВЖурналРегистрации(НСтр("ru = 'Подключаемое оборудование.'"), СообщениеОбОшибке); + КонецЕсли; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, СообщениеОбОшибке); + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Установить информацию приложения в драйвере +// +// Параметры: +// ПараметрыПодключения - Структура +// ПараметрыВыполнения - Структура +// +// Возвращаемое значение: +// см. РезультатОперацииНаОборудовании +// +Асинх Функция УстановитьИнформациюПриложенияАсинх(ОбъектДрайвера, ПараметрыПодключения) + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "SetApplicationInformation", ПараметрыПодключения, "ПараметрыПриложенияXML"); + РезультатВызова = Ждать ОбъектДрайвера.УстановитьИнформациюПриложенияАсинх(ПараметрыПодключения.ПараметрыПриложенияXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + ОписаниеОшибки = НСтр("ru='Ошибка установки информации приложения для драйвера.'"); + Возврат РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + КонецПопытки; + + РезультатВыполнения = РезультатОперацииНаОборудовании(РезультатВызова.Значение); + Если РезультатВызова.Значение <> Истина Тогда + ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +Асинх Функция ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога = Неопределено) + + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОшибкуАсинх(""); // Структура + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, РезультатВызова.Параметры[0]); + + Если ЗаписьЛога <> Неопределено Тогда + ЗаписатьОшибкуДрайвераВЛогОперации(ЗаписьЛога, РезультатВызова); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +Функция ПредставлениеРевизияИнтерфейса(РевизияИнтерфейса) + + Возврат ОбщегоНазначенияБПОКлиентСервер.ПредставлениеРевизияИнтерфейса(РевизияИнтерфейса); + +КонецФункции + +#Область ФискальныеУстройства + +// Получает ширину строки в символах. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ШиринаСтроки(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.Свойство("ШиринаСтроки") И ПараметрыПодключения.ШиринаСтроки > 0 Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ШиринаСтроки", ПараметрыПодключения.ШиринаСтроки); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetLineLength"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьШиринуСтрокиАсинх(ПараметрыПодключения.ИДУстройства, 0); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ПараметрыПодключения.ШиринаСтроки = РезультатВызова.Параметры[1]; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат ОшибкаВызоваДрайвера("ПолучитьШиринуСтроки", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ШиринаСтроки", РезультатВызова.Параметры[1]); // Структура + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет фискализацию чека. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ФискализацияЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + ТекущийСтатус = Неопределено; + ВыполнялосьПодтверждениеПокупки = Ложь; + Если ПараметрыПодключения.РевизияИнтерфейса >= 3004 Тогда + ТекущийСтатус = МенеджерОборудованияКлиент.ПроверкаКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + // Если есть текущая проверка КМ + Если НЕ ПустаяСтрока(ТекущийСтатус.ИдентификаторЗапроса) Тогда + Попытка + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ConfirmKM", ВМассив(ТекущийСтатус.ИдентификаторЗапроса,0)); + РезультатВызова = Ждать ОбъектДрайвера.ПодтвердитьКМАсинх(ПараметрыПодключения.ИДУстройства, ТекущийСтатус.ИдентификаторЗапроса, 0); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + МенеджерОборудованияКлиент.УстановитьПроверкуКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + ВыполнялосьПодтверждениеПокупки = Истина; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПодтвердитьКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + КонецЕсли; + КонецЕсли; + + Попытка + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + Если ДанныеОперации.ЕстьПерсональныеДанные Тогда + ДанныеЧекаXML = ДанныеОперации.ДанныеЧекаXMLПерсональныеДанные + Иначе + ДанныеЧекаXML = ДанныеОперации.ДанныеЧекаXML; + КонецЕсли; + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, Экранировать(ДанныеОперации.ДанныеЧекаXML))); + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ПараметрыВызова = РезультатВызова.Параметры; + ДанныеОперации.РезультатОперацииXML = ПараметрыВызова[3]; + Иначе // Версия стандарта 2.2 (ОФД 1.05) + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(,ДанныеОперации.Электронно, Экранировать(ДанныеОперации.ДанныеЧекаXML))); + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, + ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ, ДанныеОперации.ФискальныйПризнак, ДанныеОперации.АдресСайтаПроверки); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ПараметрыВызова = РезультатВызова.Параметры; + ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[3]; + ДанныеОперации.НомерСменыККТ = ПараметрыВызова[4]; + ДанныеОперации.ФискальныйПризнак = ПараметрыВызова[5]; + ДанныеОперации.АдресСайтаПроверки = ПараметрыВызова[6]; + КонецЕсли; + ДанныеОперации.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса(); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("СформироватьЧек", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + МенеджерОборудованияКлиент.УстановитьСессиюПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + Если ТекущийСтатус <> Неопределено Тогда + ЗаписьОперацииКМ = Новый Структура(); + ЗаписьОперацииКМ.Вставить("ИдентификаторСессии", ТекущийСтатус.ИдентификаторСессии); + ЗаписьОперацииКМ.Вставить("ИдентификаторЗапроса", ТекущийСтатус.ИдентификаторЗапроса); + ЗаписьОперацииКМ.Вставить("ВыполнялосьПодтверждениеПокупки", ВыполнялосьПодтверждениеПокупки); + ДанныеОперации.Вставить("ЗаписьОперацииКМ", ЗаписьОперацииКМ); + КонецЕсли; + Если ДанныеОперации.ТестовыеЧеки <> Неопределено И ДанныеОперации.ТестовыеЧеки.Количество() > 0 Тогда + РезультатПечатиНефискальныхДокументов = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + РезультатВыполнения.Вставить("РезультатПечатиНефискальныхДокументов", РезультатПечатиНефискальныхДокументов); + КонецЕсли; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Иначе + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет печать чека коррекции. +// +Асинх Функция ПечатьЧекаКоррекции(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + + Если ДанныеОперации.ЧекКоррекцииНаККТ Тогда + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCorrectionCheck", ВМассив( , Экранировать(ДанныеОперации.ДанныеЧекаXML))); + Если ПараметрыПодключения.РевизияИнтерфейса >= 4004 Тогда + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекКоррекцииАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, + ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML); // Структура + + ПараметрыВызова = РезультатВызова.Параметры; + Результат = РезультатВызова.Значение; + Если Результат Тогда + ДанныеОперации.ДанныеЧекаXML = ПараметрыВызова[2]; + ДанныеОперации.РезультатОперацииXML = ПараметрыВызова[3]; + КонецЕсли; + Иначе + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекКоррекцииАсинх(ПараметрыПодключения.ИДУстройства, + ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML); // Структура + + ПараметрыВызова = РезультатВызова.Параметры; + Результат = РезультатВызова.Значение; + Если Результат Тогда + ДанныеОперации.ДанныеЧекаXML = ПараметрыВызова[1]; + ДанныеОперации.РезультатОперацииXML = ПараметрыВызова[2]; + КонецЕсли; + КонецЕсли; + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Иначе + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCorrectionCheck", ВМассив(, Экранировать(ДанныеОперации.ДанныеЧекаXML))); + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекКоррекцииАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ, + ДанныеОперации.ФискальныйПризнак, ДанныеОперации.АдресСайтаПроверки); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ПараметрыВызова = РезультатВызова.Параметры; + Результат = РезультатВызова.Значение; + Если Результат Тогда + ДанныеОперации.ДанныеЧекаXML = ПараметрыВызова[1]; + ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[2]; + ДанныеОперации.НомерСменыККТ = ПараметрыВызова[3]; + ДанныеОперации.ФискальныйПризнак = ПараметрыВызова[4]; + ДанныеОперации.АдресСайтаПроверки = ПараметрыВызова[5]; + КонецЕсли; + ДанныеОперации.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса(); + КонецЕсли; + Иначе + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(,ДанныеОперации.Электронно, Экранировать(ДанныеОперации.ДанныеЧекаXML))); + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, + ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ПараметрыВызова = РезультатВызова.Параметры; + Результат = РезультатВызова.Значение; + Если Результат Тогда + ДанныеОперации.ДанныеЧекаXML = ПараметрыВызова[2]; + ДанныеОперации.РезультатОперацииXML = ПараметрыВызова[3]; + КонецЕсли; + Иначе + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(,ДанныеОперации.Электронно, Экранировать(ДанныеОперации.ДанныеЧекаXML))); + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, + ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ, ДанныеОперации.ФискальныйПризнак, ДанныеОперации.АдресСайтаПроверки); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ПараметрыВызова = РезультатВызова.Параметры; + Результат = РезультатВызова.Значение; + Если Результат Тогда + ДанныеОперации.ДанныеЧекаXML = ПараметрыВызова[2]; + ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[3]; + ДанныеОперации.НомерСменыККТ = ПараметрыВызова[4]; + ДанныеОперации.ФискальныйПризнак = ПараметрыВызова[5]; + ДанныеОперации.АдресСайтаПроверки = ПараметрыВызова[6]; + КонецЕсли; + ДанныеОперации.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса(); + КонецЕсли; + КонецЕсли; + + Если Результат И ДанныеОперации.СформироватьЧекКоррекцииСторно Тогда + ПараметрыФискализацииСторно = ДанныеОперации.ЧекКоррекцииСторно; + Если ДанныеОперации.ЧекКоррекцииНаККТ Тогда + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCorrectionCheck", ВМассив(, Экранировать(ДанныеОперации.ДанныеЧекаXML))); + Если ПараметрыПодключения.РевизияИнтерфейса >= 4004 Тогда + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекКоррекцииАсинх(ПараметрыПодключения.ИДУстройства, ПараметрыФискализацииСторно.Электронно, + ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.РезультатОперацииXML); // Структура + + ПараметрыВызова = РезультатВызова.Параметры; + Результат = РезультатВызова.Значение; + Если Результат Тогда + ПараметрыФискализацииСторно.ДанныеЧекаXML = ПараметрыВызова[2]; + ПараметрыФискализацииСторно.РезультатОперацииXML = ПараметрыВызова[3]; + КонецЕсли; + Иначе + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекКоррекцииАсинх(ПараметрыПодключения.ИДУстройства, + ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.РезультатОперацииXML); // Структура + + ПараметрыВызова = РезультатВызова.Параметры; + Результат = РезультатВызова.Значение; + Если Результат Тогда + ПараметрыФискализацииСторно.ДанныеЧекаXML = ПараметрыВызова[1]; + ПараметрыФискализацииСторно.РезультатОперацииXML = ПараметрыВызова[2]; + КонецЕсли; + КонецЕсли; + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Иначе + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCorrectionCheck", ВМассив(, Экранировать(ДанныеОперации.ДанныеЧекаXML))); + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекКоррекцииАсинх(ПараметрыПодключения.ИДУстройства, ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.НомерЧекаККТ, ПараметрыФискализацииСторно.НомерСменыККТ, + ПараметрыФискализацииСторно.ФискальныйПризнак, ПараметрыФискализацииСторно.АдресСайтаПроверки); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + + ПараметрыВызова = РезультатВызова.Параметры; + Результат = РезультатВызова.Значение; + Если Результат Тогда + ПараметрыФискализацииСторно.ДанныеЧекаXML = ПараметрыВызова[1]; + ПараметрыФискализацииСторно.НомерЧекаККТ = ПараметрыВызова[2]; + ПараметрыФискализацииСторно.НомерСменыККТ = ПараметрыВызова[3]; + ПараметрыФискализацииСторно.ФискальныйПризнак = ПараметрыВызова[4]; + ПараметрыФискализацииСторно.АдресСайтаПроверки = ПараметрыВызова[5]; + КонецЕсли; + ПараметрыФискализацииСторно.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса(); + КонецЕсли; + Иначе + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(, ДанныеОперации.Электронно, Экранировать(ДанныеОперации.ДанныеЧекаXML))); + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, ПараметрыФискализацииСторно.Электронно, + ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.РезультатОперацииXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ПараметрыВызова = РезультатВызова.Параметры; + Результат = РезультатВызова.Значение; + Если Результат Тогда + ПараметрыФискализацииСторно.ДанныеЧекаXML = ПараметрыВызова[2]; + ПараметрыФискализацииСторно.РезультатОперацииXML = ПараметрыВызова[3]; + КонецЕсли; + Иначе + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(, ДанныеОперации.Электронно, Экранировать(ДанныеОперации.ДанныеЧекаXML))); + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх( + ПараметрыПодключения.ИДУстройства, + ПараметрыФискализацииСторно.Электронно, + ПараметрыФискализацииСторно.ДанныеЧекаXML, + ПараметрыФискализацииСторно.НомерЧекаККТ, + ПараметрыФискализацииСторно.НомерСменыККТ, + ПараметрыФискализацииСторно.ФискальныйПризнак, + ПараметрыФискализацииСторно.АдресСайтаПроверки); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ПараметрыВызова = РезультатВызова.Параметры; + Результат = РезультатВызова.Значение; + Если Результат Тогда + ПараметрыФискализацииСторно.ДанныеЧекаXML = ПараметрыВызова[2]; + ПараметрыФискализацииСторно.НомерЧекаККТ = ПараметрыВызова[3]; + ПараметрыФискализацииСторно.НомерСменыККТ = ПараметрыВызова[4]; + ПараметрыФискализацииСторно.ФискальныйПризнак = ПараметрыВызова[5]; + ПараметрыФискализацииСторно.АдресСайтаПроверки = ПараметрыВызова[6]; + КонецЕсли; + ПараметрыФискализацииСторно.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса(); + + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Результат Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("СформироватьЧекКоррекции", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет печать текста. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Попытка + Если ДанныеОперации.Свойство("ТестовыеЧеки") И ДанныеОперации.ТестовыеЧеки.Количество() > 0 Тогда + Для Каждого ТекстПечати Из ДанныеОперации.ТестовыеЧеки Цикл + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PrintTextDocument", ВМассив(,ТекстПечати)); + РезультатВызова = Ждать ОбъектДрайвера.НапечататьТекстовыйДокументАсинх(ПараметрыПодключения.ИДУстройства, ТекстПечати); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Если НЕ РезультатВызова.Значение Тогда + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + Возврат РезультатВыполнения; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ДанныеОперации.Свойство("КопияЧека") И ДанныеОперации.КопияЧека.Количество() > 0 Тогда + Для Каждого Копия Из ДанныеОперации.КопияЧека Цикл + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PrintTextDocument", ВМассив(,Копия)); + РезультатВызова = Ждать ОбъектДрайвера.НапечататьТекстовыйДокументАсинх(ПараметрыПодключения.ИДУстройства, Копия); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Если НЕ РезультатВызова.Значение Тогда + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + Возврат РезультатВыполнения; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьТекстовыйДокумент", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет инкассацию. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция Инкассация(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + СуммаЧека = ?(ДанныеОперации.ТипИнкассации = 1, ДанныеОперации.СуммаЧека, - ДанныеОперации.СуммаЧека); + Попытка + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CashInOutcome", ВМассив(,ДанныеОперации.ДанныеЧекаXML, СуммаЧека)); + РезультатВызова = Ждать ОбъектДрайвера.НапечататьЧекВнесенияВыемкиАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ДанныеЧекаXML, СуммаЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + ДанныеОперации.СтатусСмены = 1; // Открыта + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьЧекВнесенияВыемки", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Иначе + РезультатВыполнения = ОшибкаВызоваДрайвера(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет закрытие смены. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ЗакрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь); + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CloseShift", ДанныеОперации, ", ПараметрыXML"); + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + РезультатВызова = Ждать ОбъектДрайвера.ЗакрытьСменуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Иначе + РезультатВызова = Ждать ОбъектДрайвера.ЗакрытьСменуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML, + ДанныеОперации.НомерСменыККТ, ДанныеОперации.НомерЧекаККТ); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат ОшибкаВызоваДрайвера("ЗакрытьСмену", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())) + КонецПопытки; + + Если РезультатВызова.Значение Тогда + ПараметрыВызова = РезультатВызова.Параметры; + ДанныеОперации.СтатусСмены = 1; // Статус 1 - Закрыта, 2 - Открыта, 3 - Истекла. + ДанныеОперации.РезультатXML = ПараметрыВызова[2]; + Если ПараметрыВызова.Количество() > 3 Тогда + ДанныеОперации.НомерСменыККТ = ПараметрыВызова[3]; + ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[4]; + КонецЕсли; + РезультатВыполнения.Результат = Истина; + РезультатВыполнения.Вставить("ДрайверСнятСПоддержки" , ПараметрыПодключения.СнятСПоддержки); + РезультатВыполнения.Вставить("СообщениеПриИспользовании", ПараметрыПодключения.СообщениеПриИспользовании); + + Если ПараметрыПодключения.РевизияИнтерфейса > 4001 Тогда + Результат = Ждать УстановитьИнформациюПриложенияАсинх(ОбъектДрайвера, ПараметрыПодключения); + КонецЕсли; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + Иначе + РезультатВыполнения = ОшибкаВызоваДрайвера(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет открытие смены. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ОткрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + ПараметрыККТ = ""; + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetDataKKT"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыККТАсинх(ПараметрыПодключения.ИДУстройства, ПараметрыККТ); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыККТ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + ПараметрыККТ = РезультатВызова.Параметры[1]; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + Возврат РезультатВыполнения; + КонецЕсли; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь); + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "OpenShift", ДанныеОперации, ", ПараметрыXML"); + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + РезультатВызова = Ждать ОбъектДрайвера.ОткрытьСменуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Иначе + РезультатВызова = Ждать ОбъектДрайвера.ОткрытьСменуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML, + ДанныеОперации.НомерСменыККТ, ДанныеОперации.НомерЧекаККТ); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + КонецЕсли; + Исключение + Возврат ОшибкаВызоваДрайвера("ОткрытьСмену", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())) + КонецПопытки; + + Если РезультатВызова.Значение Тогда + ПараметрыВызова = РезультатВызова.Параметры; + ДанныеОперации.СтатусСмены = 2; // Статус 1 - Закрыта, 2 - Открыта, 3 - Истекла. + ДанныеОперации.Вставить("ПараметрыККТ", ПараметрыККТ); + ДанныеОперации.РезультатXML = ПараметрыВызова[2]; + Если ПараметрыВызова.Количество() > 3 Тогда + ДанныеОперации.НомерСменыККТ = ПараметрыВызова[3]; + ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[4]; + КонецЕсли; + РезультатВыполнения.Результат = Истина; + РезультатВыполнения.Вставить("ДрайверСнятСПоддержки" , ПараметрыПодключения.СнятСПоддержки); + РезультатВыполнения.Вставить("СообщениеПриИспользовании", ПараметрыПодключения.СообщениеПриИспользовании); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + Иначе + РезультатВыполнения = ОшибкаВызоваДрайвера(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет открытие денежного ящика. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ОткрытьДенежныйЯщик(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "OpenCashDrawer"); + РезультатВызова = Ждать ОбъектДрайвера.ОткрытьДенежныйЯщикАсинх(ПараметрыПодключения.ИДУстройства); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ОткрытьДенежныйЯщик", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет формирование отчета о текущем состоянии расчетов. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ОтчетОТекущемСостоянииРасчетов(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + РезультатXML = ""; + Попытка + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReportCurrentStatusOfSettlements", ДанныеОперации, ", ПараметрыXML"); + РезультатВызова = Ждать ОбъектДрайвера.ОтчетОТекущемСостоянииРасчетовАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, РезультатXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + ДанныеОперации.РезультатXML = РезультатВызова.Параметры[2]; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ОтчетОТекущемСостоянииРасчетов", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Иначе + РезультатВыполнения = ОшибкаВызоваДрайвера(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет формирование отчет без гашения. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ОтчетБезГашения(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PrintXReport", ДанныеОперации, ", ПараметрыXML"); + РезультатВызова = Ждать ОбъектДрайвера.НапечататьОтчетБезГашенияАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьОтчетБезГашения", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Иначе + РезультатВыполнения = ОшибкаВызоваДрайвера(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет аннулирование чека. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция АннулированиеЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("НомерСменыККТ" , Неопределено); + РезультатВыполнения.Вставить("НомерЧекаККТ" , Неопределено); + РезультатВыполнения.Вставить("СтатусСмены", 2); + РезультатВыполнения.Вставить("ДатаВремяЧека", ОбщегоНазначенияБПОКлиент.ДатаСеанса()); + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет получение параметров ККТ. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ПараметрыККТ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetDataKKT"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыККТАсинх(ПараметрыПодключения.ИДУстройства, ""); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат ОшибкаВызоваДрайвера("ПолучитьПараметрыККТ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ПараметрыККТXML", РезультатВызова.Параметры[1]); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + Иначе + РезультатВыполнения = ОшибкаВызоваДрайвера(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет открытие смены. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ТекущееСостояние(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Тогда + Возврат ОшибкаВызоваДрайвера(); + КонецЕсли; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь); + Попытка + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetCurrentStatus", ДанныеОперации, ", ПараметрыXML"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьТекущееСостояниеАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Иначе + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetCurrentStatus"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьТекущееСостояниеАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ, + ДанныеОперации.СтатусСмены, ДанныеОперации.РезультатXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + Возврат ОшибкаВызоваДрайвера("ПолучитьТекущееСостояние", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())) + КонецПопытки; + + Если РезультатВызова.Значение Тогда + ПараметрыВызова = РезультатВызова.Параметры; + РезультатВыполнения.Результат = Истина; + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда + ДанныеОперации.ПараметрыXML = ПараметрыВызова[1]; + ДанныеОперации.РезультатXML = ПараметрыВызова[2]; + Иначе + ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[1]; + ДанныеОперации.НомерСменыККТ = ПараметрыВызова[2]; + ДанныеОперации.СтатусСмены = ПараметрыВызова[3]; + ДанныеОперации.РезультатXML = ПараметрыВызова[4]; + КонецЕсли; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + Возврат РезультатВыполнения; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Процедура осуществляет операцию с фискальным накопителем. +// +Асинх Функция ОперацияФискальногоНакопителя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Тогда + Возврат ОшибкаВызоваДрайвера(); + КонецЕсли; + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "OperationFN", ДанныеОперации, ", ТипОперации, ПараметрыXML"); + РезультатВызова = Ждать ОбъектДрайвера.ОперацияФНАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ТипОперации, ДанныеОперации.ПараметрыXML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если НЕ РезультатВызова.Значение Тогда + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + Возврат РезультатВыполнения; + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ОперацияФН", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetDataKKT"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыККТАсинх(ПараметрыПодключения.ИДУстройства, ""); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + ДанныеОперации.Вставить("ПараметрыККТ", РезультатВызова.Параметры[1]); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыККТ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция печать копию чека. +// +Асинх Функция НапечататьКопиюЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Тогда + Возврат ОшибкаВызоваДрайвера(); + КонецЕсли; + + Если ДанныеОперации.Свойство("Аппаратно") И ДанныеОперации.Аппаратно Тогда + + НомерЧека = 0; + Если ДанныеОперации <> Неопределено И ДанныеОперации.Свойство("НомерЧека") Тогда + НомерЧека = ДанныеОперации.НомерЧека; + КонецЕсли; + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PrintCheckCopy", ВМассив(, НомерЧека)); + РезультатВызова = Ждать ОбъектДрайвера.НапечататьКопиюЧекаАсинх(ПараметрыПодключения.ИДУстройства, НомерЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("НомерЧека", НомерЧека); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьКопиюЧека", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Иначе + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция открывает сессию регистрации КМ. +// +Асинх Функция ОткрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда + + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "OpenSessionRegistrationKM", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + + КонецЕсли; + + ИдентификаторСессии = МенеджерОборудованияКлиент.СессияПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + Если НЕ ПустаяСтрока(ИдентификаторСессии) Тогда + + ОписаниеОшибки = НСтр("ru='Сессия проверки кодов маркировки уже открыта.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "OpenSessionRegistrationKM", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + + КонецЕсли; + + Попытка + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "OpenSessionRegistrationKM"); + РезультатВызова = Ждать ОбъектДрайвера.ОткрытьСессиюРегистрацииКМАсинх(ПараметрыПодключения.ИДУстройства); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Если РезультатВызова.Значение Тогда + ИдентификаторСессии = Строка(Новый УникальныйИдентификатор); + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ИдентификаторСессии", ИдентификаторСессии); + МенеджерОборудованияКлиент.УстановитьСессиюПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства, ИдентификаторСессии); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + Исключение + + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ОткрытьСессиюРегистрацииКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция закрывает сессию регистрации КМ. +// +Асинх Функция ЗакрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда + + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "CloseSessionRegistrationKM", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + + КонецЕсли; + + ИдентификаторСессии = МенеджерОборудованияКлиент.СессияПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + Если ПустаяСтрока(ИдентификаторСессии) Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CloseSessionRegistrationKM"); + РезультатВызова = Ждать ОбъектДрайвера.ЗакрытьСессиюРегистрацииКМАсинх(ПараметрыПодключения.ИДУстройства); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + МенеджерОборудованияКлиент.УстановитьСессиюПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ЗакрытьСессиюРегистрацииКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Запрос КМ. +// +Асинх Функция ЗапросКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "ConfirmKM", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + ТекущийСтатус = МенеджерОборудованияКлиент.ПроверкаКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + ИдентификаторСессии = ТекущийСтатус.ИдентификаторСессии; + ИдентификаторЗапроса = ТекущийСтатус.ИдентификаторЗапроса; + + // Если нет открытой сессии - открываем автоматически. + Если ПустаяСтрока(ИдентификаторСессии) Тогда + ВремРезультатВыполнения = Ждать ОткрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + Если Не ВремРезультатВыполнения.Результат Тогда + Возврат ВремРезультатВыполнения; + Иначе + ИдентификаторСессии = ВремРезультатВыполнения.ИдентификаторСессии; + КонецЕсли; + КонецЕсли; + + // Если есть текущая проверка КМ + Если НЕ ПустаяСтрока(ИдентификаторЗапроса) Тогда + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ConfirmKM", ВМассив(, ИдентификаторЗапроса, 0)); + РезультатВызова = Ждать ОбъектДрайвера.ПодтвердитьКМАсинх(ПараметрыПодключения.ИДУстройства, ИдентификаторЗапроса, 0); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + МенеджерОборудованияКлиент.УстановитьПроверкуКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПодтвердитьКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + + КонецЕсли; + + ИдентификаторЗапроса = ДанныеОперации.ИдентификаторЗапроса; + Попытка + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "RequestKM", ВМассив(, Экранировать(ДанныеОперации.ПараметрыXML))); + РезультатВызова = Ждать ОбъектДрайвера.ЗапросКМАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ""); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + + ПараметрыВызова = РезультатВызова.Параметры; + РезультатОперацииXML = ПараметрыВызова[2]; + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ИдентификаторСессии" , ИдентификаторСессии); + РезультатВыполнения.Вставить("ИдентификаторЗапроса", ИдентификаторЗапроса); + РезультатВыполнения.Вставить("ЗапросXML" , ДанныеОперации.ПараметрыXML); + РезультатВыполнения.Вставить("РезультатXML", РезультатОперацииXML); + МенеджерОборудованияКлиент.УстановитьРезультатПроверкиКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства, + ИдентификаторСессии, ДанныеОперации, РезультатВыполнения, ИдентификаторЗапроса); + + ПромежуточныйРезультат = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПромежуточныйРезультат; + ДанныеПромежуточногоРезультата = Новый Структура(); + ДанныеПромежуточногоРезультата.Вставить("ДанныеОперации", ДанныеОперации); + ДанныеПромежуточногоРезультата.Вставить("РезультатВыполнения", РезультатВыполнения); + ПромежуточныйРезультат.Вставить("ЗапросКМ", ДанныеПромежуточногоРезультата); + + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ЗапросКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Запрос КМ без ожидания ответа. +// +Асинх Функция ЗапросКМБезОжиданияОтвета(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + РезультатВыполнения = Ждать ЗапросКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + СтатусЗапроса = 0; + РезультатОперацииXML = ""; + Если РезультатВыполнения.Результат Тогда + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetProcessingKMResult"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьРезультатыЗапросаКМАсинх(ПараметрыПодключения.ИДУстройства, РезультатОперацииXML, СтатусЗапроса); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Если РезультатВызова.Значение Тогда + РезультатОперацииXML = РезультатВызова.Параметры[1]; + СтатусЗапроса = РезультатВызова.Параметры[2]; + ДанныеОперации.Вставить("РезультатXML", РезультатОперацииXML); + ДанныеОперации.Вставить("СтатусРезультатаКод", СтатусЗапроса); + РезультатВыполнения.Результат = Истина; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьРезультатыЗапросаКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Если РезультатВызова.Значение Тогда + ДанныеОперации.Вставить("Выбытие", Истина); + РезультатВыполнения = Ждать ПодтвердитьКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + КонецЕсли; + + КонецЕсли; + + Если РезультатВыполнения.Результат И (СтатусЗапроса = 0 Или СтатусЗапроса = 2) Тогда + ПромежуточныйРезультат = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПромежуточныйРезультат; + РезультатВыполнения.Вставить("ЗапросКМ", ПромежуточныйРезультат.Получить("ЗапросКМ")); + ПромежуточныйРезультат.Удалить("ЗапросКМ"); + ИначеЕсли Не РезультатВыполнения.Результат Тогда + ПромежуточныйРезультат = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПромежуточныйРезультат; + РезультатВыполнения.Вставить("ЗапросКМ", ПромежуточныйРезультат.Получить("ЗапросКМ")); + ПромежуточныйРезультат.Удалить("ЗапросКМ"); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Подтвердить результаты запроса КМ. +// +Асинх Функция ПодтвердитьКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "ConfirmKM", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + ИдентификаторЗапроса = ?(ДанныеОперации.Свойство("ИдентификаторЗапроса"), ДанныеОперации.ИдентификаторЗапроса, ""); + Выбытие = ?(ДанныеОперации.Свойство("Выбытие"), ДанныеОперации.Выбытие, Истина); + + Если ПустаяСтрока(ИдентификаторЗапроса) Тогда + ОписаниеОшибки = НСтр("ru='Идентификатор запроса КМ не указан.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "ConfirmKM", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + + ТипПодтверждения = ?(Выбытие, 0, 1); + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ConfirmKM", ВМассив(, ИдентификаторЗапроса, ТипПодтверждения)); + РезультатВызова = Ждать ОбъектДрайвера.ПодтвердитьКМАсинх(ПараметрыПодключения.ИДУстройства, ИдентификаторЗапроса, ТипПодтверждения); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ИдентификаторЗапроса", ИдентификаторЗапроса); + МенеджерОборудованияКлиент.УстановитьПроверкуКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПодтвердитьКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Получить результаты запроса КМ. +// +Асинх Функция РезультатыЗапросаКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "GetProcessingKMResult", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + + ПромежуточныйРезультат = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПромежуточныйРезультат; + РезультатВыполнения.Вставить("ЗапросКМ", ПромежуточныйРезультат.Получить("ЗапросКМ")); + ПромежуточныйРезультат.Удалить("ЗапросКМ"); + + Возврат РезультатВыполнения; + КонецЕсли; + + СтатусЗапроса = 0; + РезультатОперацииXML = ""; + Попытка + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetProcessingKMResult"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьРезультатыЗапросаКМАсинх(ПараметрыПодключения.ИДУстройства, РезультатОперацииXML, СтатусЗапроса); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатОперацииXML = РезультатВызова.Параметры[1]; + СтатусЗапроса = РезультатВызова.Параметры[2]; + ДанныеОперации.Вставить("РезультатXML", РезультатОперацииXML); + ДанныеОперации.Вставить("СтатусРезультатаКод", СтатусЗапроса); + + Иначе + ДанныеОперации.Вставить("РезультатXML", ""); + ДанныеОперации.Вставить("СтатусРезультатаКод", 0); + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьРезультатыЗапросаКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Если РезультатВыполнения.Результат И (СтатусЗапроса = 0 Или СтатусЗапроса = 2) Тогда + ПромежуточныйРезультат = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПромежуточныйРезультат; + РезультатВыполнения.Вставить("ЗапросКМ", ПромежуточныйРезультат.Получить("ЗапросКМ")); + ПромежуточныйРезультат.Удалить("ЗапросКМ"); + ИначеЕсли Не РезультатВыполнения.Результат Тогда + ПромежуточныйРезультат = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПромежуточныйРезультат; + РезультатВыполнения.Вставить("ЗапросКМ", ПромежуточныйРезультат.Получить("ЗапросКМ")); + ПромежуточныйРезультат.Удалить("ЗапросКМ"); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Проверка КМ. +// +Асинх Функция ПроверкаКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда + ОписаниеОшибки = СтрШаблон( + НСтр("ru='Драйвер %1 (версия %2) (рев.%3) не поддерживает операцию проверки кода маркировки. Для корректной работы требуется обновить драйвер.'"), + ПараметрыПодключения.Наименование, + ПараметрыПодключения.ВерсияДрайвера, + ПараметрыПодключения.РевизияИнтерфейса); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "RequestKM", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ДлительнаяОперация", "ПроверкаКМ"); + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет фискализацию чека пакетом. +// +Асинх Функция ФискализацияЧекаПакетом(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "ProcessCheck", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(, Ложь, ДанныеОперации.ДанныеЧекаXML)); + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, Ложь, ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML);; // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("СформироватьЧек", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область ЭквайринговыеТерминалы + +Функция РезультатЭквайринговойОперации(Результат, ОписаниеОшибки, ПараметрыПодключения) Экспорт + + РезультатВыполнения = РезультатОперацииНаОборудовании(Результат, ОписаниеОшибки, ПараметрыПодключения.ИдентификаторУстройства); + + РезультатВыполнения.Вставить("ВидОплатыНаТерминале"); + РезультатВыполнения.Вставить("ВидОплатыНаТерминалеКод", 0); + РезультатВыполнения.Вставить("НомерМерчанта"); + РезультатВыполнения.Вставить("НомерКарты"); + РезультатВыполнения.Вставить("НомерЧекаЭТ"); + РезультатВыполнения.Вставить("СсылочныйНомер"); + РезультатВыполнения.Вставить("КодАвторизации"); + РезультатВыполнения.Вставить("СтатусОперации"); + РезультатВыполнения.Вставить("РеквизитыКартыQR"); + РезультатВыполнения.Вставить("ИдентификаторКорзины"); + + РезультатВыполнения.Вставить("СуммаОперации"); + РезультатВыполнения.Вставить("СуммаЭлектронногоСертификата"); + РезультатВыполнения.Вставить("СуммаСобственныхСредств"); + РезультатВыполнения.Вставить("ТекстСлипЧека"); + + РезультатВыполнения.Вставить("ХешНомерКарты"); + РезультатВыполнения.Вставить("СсылкаНаПлатежныйСчет"); + РезультатВыполнения.Вставить("ДатаВремя"); + РезультатВыполнения.Вставить("КодЗавершения"); + РезультатВыполнения.Вставить("ИдентификаторПлатежнойСистемы"); + РезультатВыполнения.Вставить("ИдентификаторБанковскойТранзакции"); + + РезультатВыполнения.Вставить("ИдентификаторТерминала" , ПараметрыПодключения.ИдентификаторТерминала); + РезультатВыполнения.Вставить("ИдентификаторБанкаЭквайера", ПараметрыПодключения.ИдентификаторБанкаЭквайера); + + Возврат РезультатВыполнения; + +КонецФункции + +// Процедура возвращает параметры терминале. +// +Асинх Функция ПараметрыТерминала(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.РевизияИнтерфейса >= 3004 Тогда + Попытка + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "TerminalParamters"); + РезультатВызова = Ждать ОбъектДрайвера.ПараметрыТерминалаАсинх(ПараметрыПодключения.ИДУстройства, ""); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + РезультатОперацииXML = РезультатВызова.Параметры[1]; + + Если РезультатВызова.Значение Тогда + + ПараметрыТерминала = ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML(РезультатОперацииXML); + Если ПараметрыТерминала.Свойство("TerminalID") И Не ПустаяСтрока(ПараметрыТерминала.TerminalID) Тогда + ПараметрыПодключения.ИдентификаторТерминала = ПараметрыТерминала.TerminalID; + КонецЕсли; + Если ПараметрыТерминала.Свойство("AcquiringBankIdentifier") И Не ПустаяСтрока(ПараметрыТерминала.AcquiringBankIdentifier) Тогда + ПараметрыПодключения.ИдентификаторБанкаЭквайера = ПараметрыТерминала.AcquiringBankIdentifier; + КонецЕсли; + ПараметрыПодключения.ПечатьКвитанцийНаТерминале = ПараметрыТерминала.Свойство("PrintSlipOnTerminal") И ВРег(ПараметрыТерминала.PrintSlipOnTerminal) = "TRUE"; + ПараметрыПодключения.КороткиеСлипЧеки = ПараметрыТерминала.Свойство("ShortSlip") И ВРег(ПараметрыТерминала.ShortSlip) = "TRUE"; + ПараметрыПодключения.ВыдачиНаличныхДенежныхСредств = ПараметрыТерминала.Свойство("CashWithdrawal") И ВРег(ПараметрыТерминала.CashWithdrawal) = "TRUE"; + ПараметрыПодключения.ОплатаЭлектроннымиСертификатами = ПараметрыТерминала.Свойство("ElectronicCertificates") И ВРег(ПараметрыТерминала.ElectronicCertificates) = "TRUE"; + ПараметрыПодключения.ЧастичнаяОтмена = ПараметрыТерминала.Свойство("PartialCancellation") И ВРег(ПараметрыТерминала.PartialCancellation) = "TRUE"; + ПараметрыПодключения.ConsumerPresentedQR = ПараметрыТерминала.Свойство("ConsumerPresentedQR") И ВРег(ПараметрыТерминала.ConsumerPresentedQR) = "TRUE"; + ПараметрыПодключения.ПокупкаСЗачислениемНаКарту = ПараметрыТерминала.Свойство("PurchaseWithEnrollment") И ВРег(ПараметрыТерминала.PurchaseWithEnrollment) = "TRUE"; + ПараметрыПодключения.СписокОперацийПоКартам = ПараметрыТерминала.Свойство("ListCardTransactions") И ВРег(ПараметрыТерминала.ListCardTransactions) = "TRUE"; + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + КонецЕсли + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПараметрыТерминала", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + Попытка + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PrintSlipOnTerminal"); + РезультатВызова = Ждать ОбъектДрайвера.ПечатьКвитанцийНаТерминалеАсинх(); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ПараметрыПодключения.ПечатьКвитанцийНаТерминале = РезультатВызова.Значение; + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПечатьКвитанцийНаТерминале", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция выполняет получение параметров карты. +// +Асинх Функция ПараметрыКарты(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + + Если РевизияИнтерфейса > 3004 Тогда + ОтПоследнейОперации = Ложь; + НомерКарты = ""; + ХешНомерКарты = ""; + РеквизитыКартыQR = ""; + СсылкаНаПлатежныйСчет = ""; + ТипКарты = ""; + СвояКарта = 0; + Попытка + Если РевизияИнтерфейса >= 4000 Тогда + РеквизитыКартыQR = ?(ДанныеОперации.Свойство("РеквизитыКартыQR"), ДанныеОперации.РеквизитыКартыQR, ""); + Если Не ПустаяСтрока(РеквизитыКартыQR) И НЕ ПараметрыПодключения.ConsumerPresentedQR Тогда + ОписаниеОшибки = НСтр("ru='Consumer-Presented QR не поддерживается драйвером.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "GetCardParametrs", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetCardParametrs", ВМассив(, РеквизитыКартыQR, ОтПоследнейОперации)); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыКартыАсинх(ПараметрыПодключения.ИДУстройства, РеквизитыКартыQR, ОтПоследнейОперации, НомерКарты, ХешНомерКарты, СсылкаНаПлатежныйСчет, ТипКарты, СвояКарта); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли РевизияИнтерфейса >= 3007 Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetCardParametrs", ВМассив(,ОтПоследнейОперации)); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыКартыАсинх(ПараметрыПодключения.ИДУстройства, ОтПоследнейОперации, НомерКарты, ХешНомерКарты, СсылкаНаПлатежныйСчет, ТипКарты, СвояКарта); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Иначе + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetCardParametrs", ВМассив(,ОтПоследнейОперации)); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыКартыАсинх(ПараметрыПодключения.ИДУстройства, ОтПоследнейОперации, НомерКарты, ХешНомерКарты, ТипКарты, СвояКарта); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова, ", , НомерКарты, ХешНомерКарты, ТипКарты, СвояКарта"); + КонецЕсли; + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Если РевизияИнтерфейса >= 4000 Тогда + РеквизитыКартыQR = РезультатВызова.Параметры[1]; + НомерКарты = РезультатВызова.Параметры[3]; + ХешНомерКарты = РезультатВызова.Параметры[4]; + СсылкаНаПлатежныйСчет = РезультатВызова.Параметры[5]; + ТипКарты = РезультатВызова.Параметры[6]; + СвояКарта = РезультатВызова.Параметры[7]; + ИначеЕсли РевизияИнтерфейса >= 3007 Тогда + НомерКарты = РезультатВызова.Параметры[2]; + ХешНомерКарты = РезультатВызова.Параметры[3]; + СсылкаНаПлатежныйСчет = РезультатВызова.Параметры[4]; + ТипКарты = РезультатВызова.Параметры[5]; + СвояКарта = РезультатВызова.Параметры[6]; + Иначе + НомерКарты = РезультатВызова.Параметры[2]; + ХешНомерКарты = РезультатВызова.Параметры[3]; + ТипКарты = РезультатВызова.Параметры[4]; + СвояКарта = РезультатВызова.Параметры[5]; + КонецЕсли; + РезультатВыполнения.Вставить("НомерКарты" , НомерКарты); + РезультатВыполнения.Вставить("ХешНомерКарты", ХешНомерКарты); + РезультатВыполнения.Вставить("СсылкаНаПлатежныйСчет", СсылкаНаПлатежныйСчет); + РезультатВыполнения.Вставить("РеквизитыКартыQR" , РеквизитыКартыQR); + РезультатВыполнения.Вставить("ТипКарты" , ТипКарты); + РезультатВыполнения.Вставить("СвояКарта" , СвояКарта); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыКарты", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "GetCardParametrs", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Процедура возвращает операции по картам. +// +Асинх Функция ОперацииПоКартам(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.РевизияИнтерфейса < 4000 Тогда + + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "GetOperationByCards", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + + Иначе + + Если НЕ ПараметрыПодключения.СписокОперацийПоКартам Тогда + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "GetOperationByCards", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetOperationByCards"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОперацииПоКартамАсинх(ПараметрыПодключения.ИДУстройства, ""); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатОперацииXML = РезультатВызова.Параметры[1]; + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("РезультатОперацииXML", РезультатОперацииXML); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьОперацииПоКартам", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет операцию на ЭТ. +// +Асинх Функция ЭквайринговаяОперация(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда) + + РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + + РеквизитыКартыQR = ?(ДанныеОперации.РеквизитыКартыQR <> Неопределено, ДанныеОперации.РеквизитыКартыQR, ""); + НомерМерчанта = ?(ДанныеОперации.НомерМерчанта <> Неопределено, ДанныеОперации.НомерМерчанта, 0); + НомерКарты = ?(ДанныеОперации.НомерКарты <> Неопределено, ДанныеОперации.НомерКарты, ""); + НомерЧека = ?(ДанныеОперации.НомерЧека <> Неопределено, ДанныеОперации.НомерЧека, ""); + СсылочныйНомер = ?(ДанныеОперации.СсылочныйНомер <> Неопределено, ДанныеОперации.СсылочныйНомер, ""); + КодАвторизации = ?(ДанныеОперации.КодАвторизации <> Неопределено, ДанныеОперации.КодАвторизации, ""); + СуммаОперации = ?(ДанныеОперации.СуммаОперации <> Неопределено, ДанныеОперации.СуммаОперации, 0); + СуммаНаличных = ?(ДанныеОперации.СуммаНаличных <> Неопределено, ДанныеОперации.СуммаНаличных, 0); + СуммаОригинальнойОперации = ?(ДанныеОперации.СуммаОригинальнойОперации <> Неопределено, ДанныеОперации.СуммаОригинальнойОперации, 0); + ТекстСлипЧека = ""; + + Попытка + Если РевизияИнтерфейса >= 4000 Тогда + + Если Команда = "AuthorizeSales" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayByPaymentCard", + ВМассив(,НомерМерчанта,РеквизитыКартыQR,СуммаОперации,НомерКарты,НомерЧека)); + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, СуммаОперации, + НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли Команда = "AuthorizeRefund" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReturnPaymentByPaymentCard", + ВМассив(,НомерМерчанта,РеквизитыКартыQR,СуммаОперации,НомерКарты,НомерЧека,СсылочныйНомер,КодАвторизации)); + РезультатВызова = Ждать ОбъектДрайвера.ВернутьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, СуммаОперации, + НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли Команда = "AuthorizeVoid" Тогда + + Если СуммаОригинальнойОперации > 0 И НЕ ПараметрыПодключения.ЧастичнаяОтмена Тогда + ОписаниеОшибки = НСтр("ru='Частичная отмена не поддерживается драйвером.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "CancelPaymentByPaymentCard", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + Иначе + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReturnPaymentByPaymentCard", + ВМассив(,НомерМерчанта,РеквизитыКартыQR,СуммаОперации,НомерКарты,НомерЧека,СсылочныйНомер,КодАвторизации)); + РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, СуммаОперации, + СуммаОригинальнойОперации, НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + КонецЕсли; + + ИначеЕсли Команда = "PayByPaymentCardWithCashWithdrawal" Тогда + + Если ПараметрыПодключения.ВыдачиНаличныхДенежныхСредств Тогда + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayByPaymentCardWithCashWithdrawal", + ВМассив(,НомерМерчанта,РеквизитыКартыQR,СуммаОперации,СуммаНаличных)); + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойCВыдачейНаличныхАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, СуммаОперации, + СуммаНаличных, НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Иначе + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "PayByPaymentCardWithCashWithdrawal", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Иначе + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + ИначеЕсли РевизияИнтерфейса >= 3005 Тогда + + Если Команда = "AuthorizeSales" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayByPaymentCard", ВМассив(, НомерМерчанта, СуммаОперации, НомерКарты, НомерЧека)); + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, СуммаОперации, + НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли Команда = "AuthorizeRefund" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReturnPaymentByPaymentCard", + ВМассив(,НомерМерчанта,СуммаОперации,НомерКарты,НомерЧека,СсылочныйНомер,КодАвторизации)); + РезультатВызова = Ждать ОбъектДрайвера.ВернутьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, СуммаОперации, + НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли Команда = "AuthorizeVoid" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CancelPaymentByPaymentCard", + ВМассив(,НомерМерчанта,СуммаОперации,НомерКарты,НомерЧека,СсылочныйНомер,КодАвторизации)); + РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, СуммаОперации, + НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли РевизияИнтерфейса >= 3006 И Команда = "PayByPaymentCardWithCashWithdrawal" Тогда + + Если ПараметрыПодключения.ВыдачиНаличныхДенежныхСредств Тогда + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayByPaymentCardWithCashWithdrawal", + ВМассив(,НомерМерчанта,СуммаОперации,СуммаНаличных)); + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойCВыдачейНаличныхАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, СуммаОперации, + СуммаНаличных, НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова, ", , , НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека"); + Иначе + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "PayByPaymentCardWithCashWithdrawal", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Иначе + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Иначе + + Если Команда = "AuthorizeSales" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayByPaymentCard", ВМассив(,НомерКарты, СуммаОперации, НомерЧека)); + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойАсинх(ПараметрыПодключения.ИДУстройства, НомерКарты, СуммаОперации, + НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли Команда = "AuthorizeRefund" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReturnPaymentByPaymentCard", + ВМассив(,НомерКарты,СуммаОперации,НомерЧека,СсылочныйНомер,КодАвторизации)); + РезультатВызова = Ждать ОбъектДрайвера.ВернутьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерКарты, СуммаОперации, + НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли Команда = "AuthorizeVoid" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CancelPaymentByPaymentCard", + ВМассив(,НомерКарты,СуммаОперации,НомерЧека,СсылочныйНомер,КодАвторизации)); + РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерКарты, СуммаОперации, + НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Иначе + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + КонецЕсли; + + Если РезультатВызова.Значение Тогда + Если РевизияИнтерфейса >= 4000 Тогда + НомерМерчанта = РезультатВызова.Параметры[1]; + РеквизитыКартыQR = РезультатВызова.Параметры[2]; + СуммаОперации = РезультатВызова.Параметры[3]; + Если Команда = "AuthorizeVoid" Тогда + НомерКарты = РезультатВызова.Параметры[5]; + НомерЧека = РезультатВызова.Параметры[6]; + СсылочныйНомер = РезультатВызова.Параметры[7]; + КодАвторизации = РезультатВызова.Параметры[8]; + ТекстСлипЧека = РезультатВызова.Параметры[9]; + ИначеЕсли Команда = "PayByPaymentCardWithCashWithdrawal" Тогда + СуммаНаличных = РезультатВызова.Параметры[4]; + НомерКарты = РезультатВызова.Параметры[5]; + НомерЧека = РезультатВызова.Параметры[6]; + СсылочныйНомер = РезультатВызова.Параметры[7]; + КодАвторизации = РезультатВызова.Параметры[8]; + ТекстСлипЧека = РезультатВызова.Параметры[9]; + Иначе + НомерКарты = РезультатВызова.Параметры[4]; + НомерЧека = РезультатВызова.Параметры[5]; + СсылочныйНомер = РезультатВызова.Параметры[6]; + КодАвторизации = РезультатВызова.Параметры[7]; + ТекстСлипЧека = РезультатВызова.Параметры[8]; + КонецЕсли; + ИначеЕсли РевизияИнтерфейса >= 3005 Тогда + НомерМерчанта = РезультатВызова.Параметры[1]; + СуммаОперации = РезультатВызова.Параметры[2]; + Если Команда = "PayByPaymentCardWithCashWithdrawal" Тогда + СуммаНаличных = РезультатВызова.Параметры[3]; + НомерКарты = РезультатВызова.Параметры[4]; + НомерЧека = РезультатВызова.Параметры[5]; + СсылочныйНомер = РезультатВызова.Параметры[6]; + КодАвторизации = РезультатВызова.Параметры[7]; + ТекстСлипЧека = РезультатВызова.Параметры[8]; + Иначе + НомерКарты = РезультатВызова.Параметры[3]; + НомерЧека = РезультатВызова.Параметры[4]; + СсылочныйНомер = РезультатВызова.Параметры[5]; + КодАвторизации = РезультатВызова.Параметры[6]; + ТекстСлипЧека = РезультатВызова.Параметры[7]; + КонецЕсли; + Иначе + НомерКарты = РезультатВызова.Параметры[1]; + СуммаОперации = РезультатВызова.Параметры[2]; + НомерЧека = РезультатВызова.Параметры[3]; + СсылочныйНомер = РезультатВызова.Параметры[4]; + КодАвторизации = РезультатВызова.Параметры[5]; + ТекстСлипЧека = РезультатВызова.Параметры[6]; + КонецЕсли; + РезультатВыполнения = РезультатЭквайринговойОперации(Истина, Неопределено, ПараметрыПодключения); + РезультатВыполнения.НомерМерчанта = НомерМерчанта; + РезультатВыполнения.НомерКарты = НомерКарты; + РезультатВыполнения.НомерЧекаЭТ = НомерЧека; + РезультатВыполнения.СсылочныйНомер = СсылочныйНомер; + РезультатВыполнения.КодАвторизации = КодАвторизации; + РезультатВыполнения.СуммаОперации = СуммаОперации; + РезультатВыполнения.РеквизитыКартыQR = РеквизитыКартыQR; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + РезультатВыполнения.Вставить("ТекстСлипЧека" , ТекстСлипЧека); + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + ПодключаемоеОборудование.ПоследнийСлипЧек = ТекстСлипЧека; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера(Команда, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет операцию на ЭТ в XML режиме. +// +Асинх Функция ЭквайринговаяОперацияXML(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда) + + Если ПараметрыПодключения.РевизияИнтерфейса < 4003 Тогда + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + РеквизитыКартыQR = ?(ДанныеОперации.РеквизитыКартыQR <> Неопределено, ДанныеОперации.РеквизитыКартыQR, ""); + СуммаОперации = ?(ДанныеОперации.СуммаОперации <> Неопределено, ДанныеОперации.СуммаОперации, 0); + НомерМерчанта = ?(ДанныеОперации.НомерМерчанта <> Неопределено, ДанныеОперации.НомерМерчанта, 0); + СуммаОригинальнойОперации = ?(ДанныеОперации.СуммаОригинальнойОперации <> Неопределено, ДанныеОперации.СуммаОригинальнойОперации, 0); + ВходяшиеПараметрыXML = ?(ДанныеОперации.Свойство("ВходяшиеПараметрыXML"), ДанныеОперации.ВходяшиеПараметрыXML, ""); + ТекстСлипЧека = ""; + ИсходящиеПараметрыXML = ""; + + Попытка + Если Команда = "AuthorizeSales" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "Pay", ВМассив(,ВходяшиеПараметрыXML)); + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли Команда = "AuthorizeRefund" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReturnPayment", ВМассив(,ВходяшиеПараметрыXML)); + РезультатВызова = Ждать ОбъектДрайвера.ВернутьПлатежАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли Команда = "AuthorizeVoid" Тогда + + Если СуммаОригинальнойОперации > 0 И НЕ ПараметрыПодключения.ЧастичнаяОтмена Тогда + ОписаниеОшибки = НСтр("ru='Частичная отмена не поддерживается драйвером.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "CancelPayment", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + Иначе + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CancelPayment", ВМассив(,ВходяшиеПараметрыXML)); + РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПлатежАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + КонецЕсли; + + ИначеЕсли Команда = "PayByPaymentCardWithCashWithdrawal" Тогда + + Если ПараметрыПодключения.ВыдачиНаличныхДенежныхСредств Тогда + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayWithCashWithdrawal", ВМассив(,ВходяшиеПараметрыXML)); + РезультатВызова = Ждать ОбъектДрайвера.ОплатаCВыдачейНаличныхАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Иначе + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "PayWithCashWithdrawal", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + ИначеЕсли Команда = "PurchaseWithEnrollment" Тогда + + Если ПараметрыПодключения.ПокупкаСЗачислениемНаКарту Тогда + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PurchaseWithEnrollment", ВМассив(,ВходяшиеПараметрыXML)); + РезультатВызова = Ждать ОбъектДрайвера.ПокупкаСЗачислениемАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Иначе + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "PurchaseWithEnrollment", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + ИначеЕсли Команда = "AuthorizePreSales" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "Authorisation", ВМассив(,ВходяшиеПараметрыXML)); + РезультатВызова = Ждать ОбъектДрайвера.ПреавторизацияАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли Команда = "AuthorizeCompletion" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "AuthConfirmation", ВМассив(,ВходяшиеПараметрыXML)); + РезультатВызова = Ждать ОбъектДрайвера.ЗавершитьПреавторизациюАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли Команда = "AuthorizeVoidPreSales" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CancelAuthorisation", ВМассив(,ВходяшиеПараметрыXML)); + РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПреавторизациюАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Иначе + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатЭквайринговойОперации(Истина, Неопределено, ПараметрыПодключения); + РезультатВыполнения.НомерМерчанта = НомерМерчанта; + РезультатВыполнения.СуммаОперации = СуммаОперации; + РезультатВыполнения.РеквизитыКартыQR = РеквизитыКартыQR; + + ВходяшиеПараметрыXML = РезультатВызова.Параметры[1]; + ИсходящиеПараметрыXML = РезультатВызова.Параметры[2]; + РезультатВыполнения.Вставить("ВходяшиеПараметрыXML" , ВходяшиеПараметрыXML); + РезультатВыполнения.Вставить("ИсходящиеПараметрыXML" , ИсходящиеПараметрыXML); + ТекстСлипЧека = РезультатВызова.Параметры[3]; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + РезультатВыполнения.Вставить("ТекстСлипЧека" , ТекстСлипЧека); + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + ПодключаемоеОборудование.ПоследнийСлипЧек = ТекстСлипЧека; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера(Команда, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет операцию на ЭТ c электронным сертификатом. +// +Асинх Функция ЭквайринговаяОперацияСЭлектроннымСертификатом(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда) + + Если ПараметрыПодключения.РевизияИнтерфейса < 3005 Тогда + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + РеквизитыКартыQR = ?(ДанныеОперации.РеквизитыКартыQR <> Неопределено, ДанныеОперации.РеквизитыКартыQR, ""); + НомерМерчанта = ?(ДанныеОперации.НомерМерчанта <> Неопределено, ДанныеОперации.НомерМерчанта, 0); + НомерКарты = ?(ДанныеОперации.НомерКарты <> Неопределено, ДанныеОперации.НомерКарты, ""); + НомерЧека = ?(ДанныеОперации.НомерЧека <> Неопределено, ДанныеОперации.НомерЧека, ""); + СсылочныйНомер = ?(ДанныеОперации.СсылочныйНомер <> Неопределено, ДанныеОперации.СсылочныйНомер, ""); + КодАвторизации = ?(ДанныеОперации.КодАвторизации <> Неопределено, ДанныеОперации.КодАвторизации, ""); + ИдентификаторКорзины = ?(ДанныеОперации.ИдентификаторКорзины <> Неопределено, ДанныеОперации.ИдентификаторКорзины, ""); + СуммаЭлектронногоСертификата = ?(ДанныеОперации.СуммаЭлектронногоСертификата <> Неопределено, ДанныеОперации.СуммаЭлектронногоСертификата, 0); + СуммаСобственныхСредств = ?(ДанныеОперации.СуммаСобственныхСредств <> Неопределено, ДанныеОперации.СуммаСобственныхСредств, 0); + ТекстСлипЧека = ""; + СтатусОперации = 0; + + Если НЕ ПараметрыПодключения.ОплатаЭлектроннымиСертификатами Тогда + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + Если ПараметрыПодключения.РевизияИнтерфейса >= 4000 Тогда + Если Команда = "PayElectronicCertificate" Тогда + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayElectronicCertificate", + ВМассив(,НомерМерчанта, РеквизитыКартыQR, ИдентификаторКорзины, СуммаЭлектронногоСертификата, СуммаСобственныхСредств)); + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьЭлектроннымСертификатомАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, ИдентификаторКорзины, + СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека, + СсылочныйНомер, КодАвторизации, СтатусОперации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + ИначеЕсли Команда = "ReturnElectronicCertificate" Тогда + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayElectronicCertificate", + ВМассив(,НомерМерчанта, РеквизитыКартыQR, ИдентификаторКорзины, СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека, СсылочныйНомер)); + РезультатВызова = Ждать ОбъектДрайвера.ВернутьЭлектроннымСертификатомАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, ИдентификаторКорзины, + СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека, + СсылочныйНомер, КодАвторизации, СтатусОперации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Иначе + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + Иначе + Если Команда = "PayElectronicCertificate" Тогда + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayElectronicCertificate", + ВМассив(,НомерМерчанта, ИдентификаторКорзины, СуммаЭлектронногоСертификата, СуммаСобственныхСредств)); + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьЭлектроннымСертификатомАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, ИдентификаторКорзины, + СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека, + СсылочныйНомер, КодАвторизации, СтатусОперации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + ИначеЕсли Команда = "ReturnElectronicCertificate" Тогда + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayElectronicCertificate", + ВМассив(,НомерМерчанта, ИдентификаторКорзины, СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека, СсылочныйНомер)); + РезультатВызова = Ждать ОбъектДрайвера.ВернутьЭлектроннымСертификатомАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, ИдентификаторКорзины, + СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека, + СсылочныйНомер, КодАвторизации, СтатусОперации, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Иначе + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + КонецЕсли; + + Если РезультатВызова.Значение Тогда + Если ПараметрыПодключения.РевизияИнтерфейса >= 4000 Тогда + НомерМерчанта = РезультатВызова.Параметры[1]; + РеквизитыКартыQR = РезультатВызова.Параметры[2]; + ИдентификаторКорзины = РезультатВызова.Параметры[3]; + СуммаЭлектронногоСертификата = РезультатВызова.Параметры[4]; + СуммаСобственныхСредств = РезультатВызова.Параметры[5]; + НомерКарты = РезультатВызова.Параметры[6]; + НомерЧека = РезультатВызова.Параметры[7]; + СсылочныйНомер = РезультатВызова.Параметры[8]; + КодАвторизации = РезультатВызова.Параметры[9]; + СтатусОперации = РезультатВызова.Параметры[10]; + ТекстСлипЧека = РезультатВызова.Параметры[11]; + Иначе + НомерМерчанта = РезультатВызова.Параметры[1]; + ИдентификаторКорзины = РезультатВызова.Параметры[2]; + СуммаЭлектронногоСертификата = РезультатВызова.Параметры[3]; + СуммаСобственныхСредств = РезультатВызова.Параметры[4]; + НомерКарты = РезультатВызова.Параметры[5]; + НомерЧека = РезультатВызова.Параметры[6]; + СсылочныйНомер = РезультатВызова.Параметры[7]; + КодАвторизации = РезультатВызова.Параметры[8]; + СтатусОперации = РезультатВызова.Параметры[9]; + ТекстСлипЧека = РезультатВызова.Параметры[10]; + КонецЕсли; + РезультатВыполнения = РезультатЭквайринговойОперации(Истина, Неопределено, ПараметрыПодключения); + РезультатВыполнения.НомерМерчанта = НомерМерчанта; + РезультатВыполнения.НомерКарты = НомерКарты; + РезультатВыполнения.НомерЧекаЭТ = НомерЧека; + РезультатВыполнения.СсылочныйНомер = СсылочныйНомер; + РезультатВыполнения.КодАвторизации = КодАвторизации; + РезультатВыполнения.СтатусОперации = СтатусОперации; + РезультатВыполнения.РеквизитыКартыQR = РеквизитыКартыQR; + РезультатВыполнения.ИдентификаторКорзины = ИдентификаторКорзины; + РезультатВыполнения.СуммаЭлектронногоСертификата = СуммаЭлектронногоСертификата; + РезультатВыполнения.СуммаСобственныхСредств = СуммаСобственныхСредств; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + РезультатВыполнения.Вставить("ТекстСлипЧека" , ТекстСлипЧека); + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + ПодключаемоеОборудование.ПоследнийСлипЧек = ТекстСлипЧека; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера(Команда, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет аварийную отмену операции по карте. +// +Асинх Функция АварийнаяОтменаОперации(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "EmergencyReversal"); + РезультатВызова = Ждать ОбъектДрайвера.АварийнаяОтменаОперацииАсинх(ПараметрыПодключения.ИДУстройства); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("АварийнаяОтменаОперации", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет сверку итогов по картам. +// +Асинх Функция ИтогиДняПоКартам(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + ТекстСлипЧека = ""; + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "Settlement"); + РезультатВызова = Ждать ОбъектДрайвера.ИтогиДняПоКартамАсинх(ПараметрыПодключения.ИДУстройства, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ТекстСлипЧека", РезультатВызова.Параметры[1]); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ИтогиДняПоКартам", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Если ПараметрыПодключения.РевизияИнтерфейса > 4001 Тогда + Результат = Ждать УстановитьИнформациюПриложенияАсинх(ОбъектДрайвера, ПараметрыПодключения); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет операцию на ЭТ c электронным сертификатом в XML режиме. +// +Асинх Функция ЭквайринговаяОперацияСЭлектроннымСертификатомXML(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда) + + Если ПараметрыПодключения.РевизияИнтерфейса < 4003 Тогда + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + РеквизитыКартыQR = ?(ДанныеОперации.РеквизитыКартыQR <> Неопределено, ДанныеОперации.РеквизитыКартыQR, ""); + НомерМерчанта = ?(ДанныеОперации.НомерМерчанта <> Неопределено, ДанныеОперации.НомерМерчанта, 0); + ИдентификаторКорзины = ?(ДанныеОперации.ИдентификаторКорзины <> Неопределено, ДанныеОперации.ИдентификаторКорзины, ""); + СуммаЭлектронногоСертификата = ?(ДанныеОперации.СуммаЭлектронногоСертификата <> Неопределено, ДанныеОперации.СуммаЭлектронногоСертификата, 0); + СуммаСобственныхСредств = ?(ДанныеОперации.СуммаСобственныхСредств <> Неопределено, ДанныеОперации.СуммаСобственныхСредств, 0); + ВходяшиеПараметрыXML = ?(ДанныеОперации.Свойство("ВходяшиеПараметрыXML"), ДанныеОперации.ВходяшиеПараметрыXML, ""); + ТекстСлипЧека = ""; + ИсходящиеПараметрыXML = ""; + + Если НЕ ПараметрыПодключения.ОплатаЭлектроннымиСертификатами Тогда + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + Если Команда = "PayElectronicCertificate" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayElectronicCertificate", ВМассив(,ВходяшиеПараметрыXML)); + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьСертификатомАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + ИначеЕсли Команда = "ReturnElectronicCertificate" Тогда + + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReturnElectronicCertificate", ВМассив(,ВходяшиеПараметрыXML)); + РезультатВызова = Ждать ОбъектДрайвера.ВернутьСертификатомАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + + Иначе + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатЭквайринговойОперации(Истина, Неопределено, ПараметрыПодключения); + РезультатВыполнения.НомерМерчанта = НомерМерчанта; + РезультатВыполнения.РеквизитыКартыQR = РеквизитыКартыQR; + РезультатВыполнения.ИдентификаторКорзины = ИдентификаторКорзины; + РезультатВыполнения.СуммаЭлектронногоСертификата = СуммаЭлектронногоСертификата; + РезультатВыполнения.СуммаСобственныхСредств = СуммаСобственныхСредств; + + ВходяшиеПараметрыXML = РезультатВызова.Параметры[1]; + ИсходящиеПараметрыXML = РезультатВызова.Параметры[2]; + РезультатВыполнения.Вставить("ВходяшиеПараметрыXML" , ВходяшиеПараметрыXML); + РезультатВыполнения.Вставить("ИсходящиеПараметрыXML" , ИсходящиеПараметрыXML); + ТекстСлипЧека = РезультатВызова.Параметры[3]; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + + РезультатВыполнения.Вставить("ТекстСлипЧека" , ТекстСлипЧека); + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + ПодключаемоеОборудование.ПоследнийСлипЧек = ТекстСлипЧека; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера(Команда, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область ДисплейПокупателя + +// Функция возвращает параметры вывода на дисплей покупателя. +// +Асинх Функция ПараметрыВывода(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.РевизияИнтерфейса >= 3004 Тогда + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetCustomerDisplayOptions"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыДисплеяПокупателяАсинх(ПараметрыПодключения.ИДУстройства, ""); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + РезультатОперацииXML = РезультатВызова.Параметры[1]; + Если РезультатВызова.Значение Тогда + ПараметрыДисплея = ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML(РезультатОперацииXML); + Если ПараметрыДисплея.Свойство("Columns") И Не ПустаяСтрока(ПараметрыДисплея.Columns) Тогда + ПараметрыПодключения.СтолбцовНаДисплее = Число(ПараметрыДисплея.Columns); + КонецЕсли; + Если ПараметрыДисплея.Свойство("Rows") И Не ПустаяСтрока(ПараметрыДисплея.Rows) Тогда + ПараметрыПодключения.СтрокНаДисплее = Число(ПараметрыДисплея.Rows); + КонецЕсли; + ПараметрыПодключения.ДисплейОтображаетТекст = ПараметрыДисплея.Свойство("DisplayText") И ВРег(ПараметрыДисплея.DisplayText) = "TRUE"; + ПараметрыПодключения.ДисплейОтображаетГрафику = ПараметрыДисплея.Свойство("DisplayGraphics") И ВРег(ПараметрыДисплея.DisplayGraphics) = "TRUE"; + ПараметрыПодключения.ДисплейОтображаетQRКод = ПараметрыДисплея.Свойство("DisplayQRCode") И ВРег(ПараметрыДисплея.DisplayQRCode) = "TRUE"; + ПараметрыПодключения.ДисплейОтображаетHTML = ПараметрыДисплея.Свойство("DisplayHTML") И ВРег(ПараметрыДисплея.DisplayHTML) = "TRUE"; + ПараметрыПодключения.ДисплейОтображаетСтатус = ПараметрыДисплея.Свойство("DisplayStatus") И ВРег(ПараметрыДисплея.DisplayStatus) = "TRUE"; + ПараметрыПодключения.ДисплейОтображаетСостоянияРМ = ПараметрыДисплея.Свойство("DisplayWorkplaceStatus") И ВРег(ПараметрыДисплея.DisplayWorkplaceStatus) = "TRUE"; + ПараметрыПодключения.ДисплейОтрабатываетНажатия = ПараметрыДисплея.Свойство("DisplayInteractiveMode") И ВРег(ПараметрыДисплея.DisplayInteractiveMode) = "TRUE"; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("СтолбцовНаДисплее", ПараметрыПодключения.СтолбцовНаДисплее); + РезультатВыполнения.Вставить("СтрокНаДисплее" , ПараметрыПодключения.СтрокНаДисплее); + РезультатВыполнения.Вставить("ДисплейОтображаетТекст" , ПараметрыПодключения.ДисплейОтображаетТекст); + РезультатВыполнения.Вставить("ДисплейОтображаетГрафику", ПараметрыПодключения.ДисплейОтображаетГрафику); + РезультатВыполнения.Вставить("ДисплейОтображаетQRКод" , ПараметрыПодключения.ДисплейОтображаетQRКод); + РезультатВыполнения.Вставить("ДисплейОтображаетHTML" , ПараметрыПодключения.ДисплейОтображаетHTML); + РезультатВыполнения.Вставить("ДисплейОтображаетСтатус" , ПараметрыПодключения.ДисплейОтображаетСтатус); + РезультатВыполнения.Вставить("ДисплейОтображаетСостоянияРМ", ПараметрыПодключения.ДисплейОтображаетСостоянияРМ); + РезультатВыполнения.Вставить("ДисплейОтрабатываетНажатия", ПараметрыПодключения.ДисплейОтрабатываетНажатия); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыДисплеяПокупателя", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetOutputOptions"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыВыводаАсинх(ПараметрыПодключения.ИДУстройства, 20, 2); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + ПараметрыПодключения.СтолбцовНаДисплее = Число(РезультатВызова.Параметры[1]); + ПараметрыПодключения.СтрокНаДисплее = Число(РезультатВызова.Параметры[2]); + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("СтолбцовНаДисплее", ПараметрыПодключения.СтолбцовНаДисплее); + РезультатВыполнения.Вставить("СтрокНаДисплее" , ПараметрыПодключения.СтрокНаДисплее); + РезультатВыполнения.Вставить("ДисплейОтображаетТекст" , Истина); + РезультатВыполнения.Вставить("ДисплейОтображаетГрафику", Ложь); + РезультатВыполнения.Вставить("ДисплейОтображаетQRКод" , Ложь); + РезультатВыполнения.Вставить("ДисплейОтображаетHTML" , Ложь); + РезультатВыполнения.Вставить("ДисплейОтображаетСтатус" , Ложь); + РезультатВыполнения.Вставить("ДисплейОтображаетСостоянияРМ", Ложь); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыВывода", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет вывод списка строк на дисплей покупателя. +// +Асинх Функция ВывестиСтрокуНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + СтрокиТекста = ?(ДанныеОперации.Свойство("СтрокиТекста"), ДанныеОперации.СтрокиТекста, НСтр("ru='Данные для вывода не указаны'")); + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "StringOutputOnCustomerDisplay", ВМассив(,СтрокиТекста)); + РезультатВызова = Ждать ОбъектДрайвера.ВывестиСтрокуНаДисплейПокупателяАсинх(ПараметрыПодключения.ИДУстройства, СтрокиТекста); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ВывестиСтрокуНаДисплейПокупателя", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет вывод QR кода на дисплей покупателя. +// +Асинх Функция ВывестиQRКодНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + ЗначениеQRКода = ?(ДанныеОперации.Свойство("ЗначениеQRКода"), ДанныеОперации.ЗначениеQRКода, ""); + КартинкаQRКода = ?(ДанныеОперации.Свойство("КартинкаQRКода"), ДанныеОперации.КартинкаQRКода, ""); + СтрокиТекста = ?(ДанныеОперации.Свойство("СтрокиТекста"), ДанныеОперации.СтрокиТекста, ""); + + Если Не ПустаяСтрока(СтрокиТекста) Тогда + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "StringOutputOnCustomerDisplay", ВМассив(,СтрокиТекста)); + РезультатВызова = Ждать ОбъектДрайвера.ВывестиСтрокуНаДисплейПокупателяАсинх(ПараметрыПодключения.ИДУстройства, СтрокиТекста); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + Возврат РезультатВыполнения; + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ВывестиСтрокуНаДисплейПокупателя", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + КонецЕсли; + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "QRCodeOutputOnCustomerDisplay", ВМассив(,ЗначениеQRКода, КартинкаQRКода)); + РезультатВызова = Ждать ОбъектДрайвера.ВывестиQRКодНаДисплейПокупателяАсинх(ПараметрыПодключения.ИДУстройства, ЗначениеQRКода, КартинкаQRКода); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ВывестиQRКодНаДисплейПокупателя", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет вывод HTML на дисплей покупателя. +// +Асинх Функция ВывестиHTMLНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + ТекстHTML = ?(ДанныеОперации.Свойство("ТекстHTML"), ДанныеОперации.ТекстHTML, ""); + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "OutputHTML", ВМассив(,ТекстHTML)); + РезультатВызова = Ждать ОбъектДрайвера.ВывестиHTMLАсинх(ПараметрыПодключения.ИДУстройства, ТекстHTML); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ВывестиHTML", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет вывод информации на дисплей покупателя. +// +Асинх Функция ВывестиИнформациюНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + + Если ПараметрыПодключения.ДисплейОтображаетHTML Тогда + РезультатВыполнения = Ждать ВывестиHTMLНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + Иначе + + Если ПараметрыПодключения.ДисплейОтображаетТекст Тогда + РезультатВыполнения = Ждать ВывестиСтрокуНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + КонецЕсли; + + Если ПараметрыПодключения.ДисплейОтображаетQRКод Тогда + РезультатВыполнения = Ждать ВывестиQRКодНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + КонецЕсли; + + Если ПараметрыПодключения.ДисплейОтображаетСтатус Тогда + СтатусОперации = ?(ДанныеОперации.Свойство("СтатусОперации"), ДанныеОперации.СтатусОперации, 0); + Если СтатусОперации = 1 Или СтатусОперации = 2 Тогда + РезультатВыполнения = Ждать ВывестиСтатусНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Если ПараметрыПодключения.ДисплейОтображаетСостоянияРМ Тогда + РезультатВыполнения = Ждать ВывестиСтатусРабочегоМестаНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет вывод статуса на дисплей покупателя. +// +Асинх Функция ВывестиСтатусНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.РевизияИнтерфейса < 3009 Тогда + ОписаниеОшибки = НСтр("ru='Устройство не поддерживает данную операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "DisplayOperationStatus", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + СтатусОперации = ?(ДанныеОперации.Свойство("КодСтатусОперации"), ДанныеОперации.КодСтатусОперации, 0); + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "DisplayOperationStatus", ВМассив(,СтатусОперации)); + РезультатВызова = Ждать ОбъектДрайвера.ОтобразитьСтатусОперацииАсинх(ПараметрыПодключения.ИДУстройства, СтатусОперации); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ОтобразитьСтатусОперации", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет вывод статуса рабочего места на дисплей покупателя. +// +Асинх Функция ВывестиСтатусРабочегоМестаНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.РевизияИнтерфейса < 4001 Тогда + ОписаниеОшибки = НСтр("ru='Устройство не поддерживает данную операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "DisplayWorkplaceStatus", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + СтатусРабочегоМеста = ?(ДанныеОперации.Свойство("КодСтатусаРабочегоМеста"), ДанныеОперации.КодСтатусаРабочегоМеста, 0); + ЗвуковойСигнал = ?(ДанныеОперации.Свойство("ЗвуковойСигнал"), ?(ДанныеОперации.ЗвуковойСигнал, 1, 0), 0); + + Если ЗвуковойСигнал = 0 + И ПараметрыПодключения.Свойство("КодТекущегоСтатусаРабочегоМеста") + И ПараметрыПодключения.КодТекущегоСтатусаРабочегоМеста = СтатусРабочегоМеста Тогда + Возврат РезультатОперацииНаОборудовании(Истина); + КонецЕсли; + ПараметрыПодключения.Вставить("КодТекущегоСтатусаРабочегоМеста", СтатусРабочегоМеста); + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "DisplayWorkplaceStatus", ВМассив(,СтатусРабочегоМеста, ЗвуковойСигнал)); + РезультатВызова = Ждать ОбъектДрайвера.ОтобразитьСтатусРабочегоМестаАсинх(ПараметрыПодключения.ИДУстройства, СтатусРабочегоМеста, ЗвуковойСигнал); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ОтобразитьСтатусРабочегоМеста", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет очистку дисплея покупателя. +// +Асинх Функция ОчиститьДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ClearCustomerDisplay"); + РезультатВызова = Ждать ОбъектДрайвера.ОчиститьДисплейПокупателяАсинх(ПараметрыПодключения.ИДУстройства); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ОчиститьДисплейПокупателя", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область ЭлектронныеВесы + +// Функция возвращает параметры события веса. +// +// Возвращаемое значение: +// Структура - Параметры события веса: +// * ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование +// * Вес - Число +// * Стабилизация - Булево - +// * ОшибкаРазмещения - Булево - +// * ЗонаПересечения - Массив из Число - +// +Функция ПараметрыСобытияВеса() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("ИдентификаторУстройства"); + Результат.Вставить("Вес"); + Результат.Вставить("Стабилизация", Истина); + Результат.Вставить("ОшибкаРазмещения", Ложь); + Результат.Вставить("ЗонаПересечения" , Новый Массив()); + Возврат Результат; + +КонецФункции + +// Функция возвращает параметры весов. +// +Асинх Функция ПараметрыВесов(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.РевизияИнтерфейса >= 4000 Тогда + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ScaleOptions"); + РезультатВызова = Ждать ОбъектДрайвера.ПараметрыВесовАсинх(ПараметрыПодключения.ИДУстройства, ""); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + РезультатОперацииXML = РезультатВызова.Параметры[1]; + Если РезультатВызова.Значение Тогда + ПараметрыВесов = ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML(РезультатОперацииXML); + ПараметрыПодключения.ВесыПоддерживаютТарирование = ПараметрыВесов.Свойство("Calibrate") И ВРег(ПараметрыВесов.Calibrate) = "TRUE"; + ПараметрыПодключения.СобытиеПолученииВеса = ПараметрыВесов.Свойство("WeighingEvent") И ВРег(ПараметрыВесов.WeighingEvent) = "TRUE"; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ВесыПоддерживаютТарирование", ПараметрыПодключения.ВесыПоддерживаютТарирование); + РезультатВыполнения.Вставить("СобытиеПолученииВеса" , ПараметрыПодключения.СобытиеПолученииВеса); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПараметрыВесов", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ВесыПоддерживаютТарирование", Ложь); + РезультатВыполнения.Вставить("СобытиеПолученииВеса" , Ложь); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет получение веса груза, расположенного на весах. +// +Асинх Функция ПолучитьВес(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Вес = 0; + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetWeight"); + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьВесАсинх(ПараметрыПодключения.ИДУстройства, Вес); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + Вес = Число(РезультатВызова.Параметры[1]); + Если Вес < 0 Тогда + Вес = 0; + КонецЕсли; + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("Вес", Вес); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьВес", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет установку веса тары на весах. +// +Асинх Функция Тарировать(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.РевизияИнтерфейса >= 4001 И НЕ ПараметрыПодключения.ВесыПоддерживаютТарирование Тогда + ОписаниеОшибки = НСтр("ru='Оборудование не поддерживает данную операцию.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, "Calibrate", ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + ВесТары = ?(ДанныеОперации.Свойство("ВесТары"), Число(ДанныеОперации.ВесТары), 0); + + Попытка + ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "Calibrate", ВМассив(,ВесТары)); + РезультатВызова = Ждать ОбъектДрайвера.УстановитьВесТарыАсинх(ПараметрыПодключения.ИДУстройства, ВесТары); // Структура + ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + КонецЕсли; + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки); + РезультатВыполнения = ОшибкаВызоваДрайвера("УстановитьВесТары", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + + +#КонецОбласти + + +#Область ЛогированиеОпераций + +Функция НачатьЗаписьЛогаОперации(ПараметрыПодключения, Команда, ЗначенияПараметров = Неопределено, ИдентификаторыВходящихПараметров = "") +КонецФункции + +Функция ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова, ИдентификаторыИсходящихПараметров = "") +КонецФункции + +Функция ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки) +КонецФункции + +Функция ЗаписатьОшибкуДрайвераВЛогОперации(ЗаписьЛога, РезультатВызова) + + +КонецФункции + +Функция ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки) +КонецФункции + +Функция ВМассив(Параметр1, Параметр2=Null, Параметр3=Null, Параметр4=Null, Параметр5=Null, Параметр6=Null, Параметр7=Null, Параметр8=Null, Параметр9=Null) + + Результат = Новый Массив(); + Возврат Результат; + +КонецФункции + +Функция Экранировать(Знач Значение) + + Значение = СтрЗаменить(Значение, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1()); + Значение = СтрЗаменить(Значение, ОбщегоНазначенияБПОКлиентСервер.РазделительEOT(), ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволEOT()); + Значение = СтрЗаменить(Значение, ОбщегоНазначенияБПОКлиентСервер.РазделительRS(), ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволRS()); + Значение = СтрЗаменить(Значение, Символ(0), "\n"); + Возврат Значение; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/CommonModules/СинхронизацияУТ.xml b/CommonModules/СинхронизацияУТ.xml new file mode 100644 index 0000000..3a2f6e3 --- /dev/null +++ b/CommonModules/СинхронизацияУТ.xml @@ -0,0 +1,23 @@ + + + + + СинхронизацияУТ + + + ru + Синхронизация УТ + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/СинхронизацияУТ/Ext/Module.bsl b/CommonModules/СинхронизацияУТ/Ext/Module.bsl new file mode 100644 index 0000000..142d353 --- /dev/null +++ b/CommonModules/СинхронизацияУТ/Ext/Module.bsl @@ -0,0 +1,1179 @@ + +Функция ЗапроситьДокументыСборкиСтикеровкиНаСервере(Номер) Экспорт + Пользователь = "admin1c"; + Пароль = "A400943@!"; + HTTPСоединение = Новый HTTPСоединение("technozonee.itinalog.ru",5443,Пользователь,Пароль,,,Новый ЗащищенноеСоединениеOpenSSL()); + // HTTPСоединение = Новый HTTPСоединение("127.0.0.1",80,Пользователь,Пароль,,,); + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Content-Type","application/xml_request"); + // Получали один док, теперь массив доков + ТелоЗапроса = ПолучитьОбщийМакет(Метаданные.ОбщиеМакеты.ШаблонGetArrayDoc); + HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса.ТекущаяОбласть.Текст); + РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); + ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку(); + Возврат ТекстОтвета; + +КонецФункции +// +Функция getDocInvent(Номер) Экспорт // не используется в данной конфе + + СтрокаURI = "http://192.168.1.155/unf/ws/tsdsync"; + + Пользователь = "802165066"; + Пароль = "5tg77h90ik"; + + HTTPСоединение = Новый HTTPСоединение("192.168.1.155",80,Пользователь,Пароль,,,); + + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Content-Type","application/xml_request"); + + ТелоЗапроса = ПолучитьОбщийМакет(Метаданные.ОбщиеМакеты.ШаблонGetDocInvent); + + HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(СтрЗаменить(ТелоЗапроса.ТекущаяОбласть.Текст,"$Штрихкод",Номер)); + РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); + ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку(); + Возврат ТекстОтвета; + +КонецФункции + + +Функция ВыгрузитьДокументыСборкиСтикеровкиНаСервер(Док, ТипДока) Экспорт // Отправляем Док СборкиМП + Пользователь = "admin1c"; + Пароль = "A400943@!"; + + HTTPСоединение = Новый HTTPСоединение("technozonee.itinalog.ru", 5443, Пользователь, Пароль, , , + Новый ЗащищенноеСоединениеOpenSSL); + // HTTPСоединение = Новый HTTPСоединение("127.0.0.1",80,Пользователь,Пароль,,,); + Заголовки = Новый Соответствие; + Заголовки.Вставить("Content-Type", "application/xml_request"); + + ТелоЗапроса = ПолучитьОбщийМакет("ШаблонSetDoc").ТекущаяОбласть.Текст; + + ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$ДокСсылка", Док.Ссылка.УникальныйИдентификатор()); + ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$Дата", Строка(Формат(Док.Дата, "ДФ=""гггг-ММ-дд'T'ЧЧ:мм:сс"""))); + ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$Номер", Док.Номер); + ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$ТипДокумента", ТипЗнч(Док.Ссылка)); + //ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$КонтрагентСсылка", Док.Партнер.УникальныйИдентификатор()); + ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$АвторСсылка", Док.Автор.УникальныйИдентификатор()); + СтрокиЗапроса=""; + Для Каждого строка Из Док.ТоварыТолькоКоличество Цикл + ТелоСтроки = ПолучитьОбщийМакет("ШаблонSetDocPostup").ТекущаяОбласть.Текст; + ТелоСтроки= СтрЗаменить(ТелоСтроки, "$Строка", Формат(Строка.НомерСтроки,"ЧГ=0")); + Если ТипДока = "Сборка МП" Тогда + ТелоСтроки= СтрЗаменить(ТелоСтроки, "$НоменклатураСсылка", Строка.Номенклатура.УникальныйИдентификатор()); + ТелоСтроки= СтрЗаменить(ТелоСтроки, "$ЕдСсылка", "00-00-00"); + ТелоСтроки= СтрЗаменить(ТелоСтроки, "$КодКлас", "00-00-00"); // чтобы не было ошибки при выгрузке + ТелоСтроки= СтрЗаменить(ТелоСтроки, "$КодМаркировки", ""); + ИначеЕсли ТипДока = "Стикеровка МП" Тогда + ТелоСтроки= СтрЗаменить(ТелоСтроки, "$НоменклатураСсылка", Строка.КарточкаМП.УникальныйИдентификатор()); + ТелоСтроки= СтрЗаменить(ТелоСтроки, "$ЕдСсылка", строка.КодМП); + ТелоСтроки= СтрЗаменить(ТелоСтроки, "$КодКлас", строка.ШтрихкодПоставки); // чтобы не было ошибки при выгрузке + КодМаркировкиВыгрузки = ""; + Если ЗначениеЗаполнено(строка.МаркаСтрока) И строка.МаркаСтрока <> "-" Тогда + КодМаркировкиВыгрузки = XMLСтрока(строка.МаркаСтрока); + КонецЕсли; + ТелоСтроки= СтрЗаменить(ТелоСтроки, "$КодМаркировки", КодМаркировкиВыгрузки); + КонецЕсли; + ТелоСтроки= СтрЗаменить(ТелоСтроки, "$НаимКлас", "00-00-00"); // чтобы не было ошибки при выгрузке + ТелоСтроки= СтрЗаменить(ТелоСтроки, "$Количество", Строка.Отсканировано); + ТелоСтроки= СтрЗаменить(ТелоСтроки, "$типз", "СобственныеТовары"); + СтрокиЗапроса=СтрокиЗапроса + ТелоСтроки; + КонецЦикла; + ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$Запасы", СтрокиЗапроса); + //HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки); + HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); + РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); + ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку(); + Возврат ТекстОтвета; + +КонецФункции + +Функция SetDocInvent(Док) Экспорт // // не используется в данной конфе + + СтрокаURI = "http://localhost/unf/ws/tsdsync"; + + Пользователь = "802165066"; + Пароль = "5tg77h90ik"; + + HTTPСоединение = Новый HTTPСоединение("192.168.1.155",80,Пользователь,Пароль,,,); + + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Content-Type","application/xml_request"); + + ТелоЗапроса = ПолучитьОбщийМакет("ШаблонSetDocInvent").ТекущаяОбласть.Текст; + + ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$ДокСсылка",Док.Ссылка.УникальныйИдентификатор()); + ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$Дата",Строка(Формат(Док.Дата,"ДФ=""гггг-ММ-дд'T'ЧЧ:мм:сс""")) ); + ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$Номер",Док.Номер); + СтрокиЗапроса=""; + + Для каждого строка из Док.Запасы Цикл + ТелоСтроки = ПолучитьОбщийМакет("ШаблонSetDocInventTov").ТекущаяОбласть.Текст; + ТелоСтроки= СтрЗаменить(ТелоСтроки,"$Строка",Строка.НомерСтроки); + ТелоСтроки= СтрЗаменить(ТелоСтроки,"$НоменклатураСсылка",Строка.Номенклатура.УникальныйИдентификатор()); + ТелоСтроки= СтрЗаменить(ТелоСтроки,"$ЕдСсылка",Строка.Номенклатура.ЕдиницаИзмерения.УникальныйИдентификатор()); + ТелоСтроки= СтрЗаменить(ТелоСтроки,"$КодКлас",Строка.Номенклатура.ЕдиницаИзмерения.Код); + ТелоСтроки= СтрЗаменить(ТелоСтроки,"$НаимКлас",Строка.Номенклатура.ЕдиницаИзмерения.Наименование); + ТелоСтроки= СтрЗаменить(ТелоСтроки,"$Количество",Строка.Количество); + ТелоСтроки= СтрЗаменить(ТелоСтроки,"$Колуч",Строка.КоличествоУчет); + ТелоСтроки= СтрЗаменить(ТелоСтроки,"$типз","СобственныеТовары"); + СтрокиЗапроса=СтрокиЗапроса+ТелоСтроки; + КонецЦикла; + + ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$Запасы",СтрокиЗапроса); + HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); + РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); + ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку(); + Возврат ТекстОтвета; + +КонецФункции + + + +Функция КодироватьСтрокуВBase64(Знач Строка, + Знач Кодировка = Неопределено, + Знач ЗаписатьBOM = Ложь) Экспорт + + // Устанавливаем кодировку по умолчанию, если не указана + Если Не ЗначениеЗаполнено(Кодировка) Тогда + Кодировка = КодировкаТекста.UTF8; + КонецЕсли; + + // Преобразуем строку в двоичные данные + ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(Строка, Кодировка, ЗаписатьBOM); + + // Кодируем двоичные данные в Base64 + Результат = Base64Строка(ДвоичныеДанные); + + Возврат Результат; + +КонецФункции + +Функция РаспечататьКодПоставкиНаПринтере(ДанныеОтправки) Экспорт + СтрокаURI = "/unf/hs/prints/PrintUp"; + хост="technozonee.itinalog.ru"; + //Хост = "127.0.0.1"; + HTTPСоединение = Новый HTTPСоединение(хост,5443,"admin1c","A400943@!",,,Новый ЗащищенноеСоединениеOpenSSL()); + //HTTPСоединение = Новый HTTPСоединение(хост,80,"admin1c","A400943@!",,,); + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Content-Type","application/json"); + //ДанныеОтправки=Новый Структура(); + ПринтерПоУмолчанию = Константы.ПринтерПоУмолчанию.Получить(); + Если ЗначениеЗаполнено(ПринтерПоУмолчанию) Тогда + ДанныеОтправки.Вставить("Printer", ПринтерПоУмолчанию.ИдентификаторРабМеста + ";" + ПринтерПоУмолчанию.ИмяПринтера); + Иначе + ДанныеОтправки.Вставить("Printer", ""); + КонецЕсли; + ЗапросJSON = ПростаяЗаписьJSON(ДанныеОтправки); + HTTPЗапрос = Новый HTTPЗапрос(СтрокаURI, Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(ЗапросJSON); + РезультатЗапроса = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос); + ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку(); + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(ТекстОтвета); + Данные = ПрочитатьJSON(ЧтениеJSON); + ЧтениеJSON.Закрыть(); +КонецФункции + +Функция ЗапросДанныеДляМаркетов(Док, Шк) Экспорт // + МаркетПлейс=Лев(Док.ПоставкиМП[0].ПоставкаМП.Номер, 2); + СтрокаURI = "/unf/hs/tsd/MarketPlace/"; + хост="technozonee.itinalog.ru"; + HTTPСоединение = Новый HTTPСоединение(хост,5443,"admin1c","A400943@!",,,Новый ЗащищенноеСоединениеOpenSSL()); + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Content-Type","application/json"); + ДанныеОтправки=Новый Структура(); + ДанныеОтправки.Вставить("barcode", Шк); + ДанныеОтправки.Вставить("TypeMarket", МаркетПлейс); + ДанныеОтправки.Вставить("integra", СтроковыйМассивДокОЗОН(Док)); + ПринтерПоУмолчанию = Константы.ПринтерПоУмолчанию.Получить(); + Если ЗначениеЗаполнено(ПринтерПоУмолчанию) Тогда + ДанныеОтправки.Вставить("Printer", ПринтерПоУмолчанию.ИдентификаторРабМеста + ";" + ПринтерПоУмолчанию.ИмяПринтера); + Иначе + ДанныеОтправки.Вставить("Printer", ""); + КонецЕсли; + ЗапросJSON = ПростаяЗаписьJSON(ДанныеОтправки); + HTTPЗапрос = Новый HTTPЗапрос(СтрокаURI, Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(ЗапросJSON); + РезультатЗапроса = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос); + ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку(); + Попытка + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(ТекстОтвета); + Данные = ПрочитатьJSON(ЧтениеJSON); + Исключение + Сообщить(ТекстОтвета + Символы.ПС + ОписаниеОшибки()); + КонецПопытки; + ЧтениеJSON.Закрыть(); + Возврат Данные; +КонецФункции + +Функция СтроковыйМассивДокОЗОН(Док) + МассивСтрок = ""; + Для Каждого строка из Док.ПоставкиМП Цикл + МассивСтрок = МассивСтрок + строка.ПоставкаМП.Номер + ";"; + КонецЦикла; + Возврат МассивСтрок; +КонецФункции + + +Функция ПростаяЗаписьJSON(ДанныеОтправки) + + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON,ДанныеОтправки); + Возврат ЗаписьJSON.Закрыть(); + +КонецФункции + +Функция GetUsers() Экспорт + Пользователь = "admin1c"; + Пароль = "A400943@!"; + + HTTPСоединение = Новый HTTPСоединение("technozonee.itinalog.ru",5443,Пользователь,Пароль,,,Новый ЗащищенноеСоединениеOpenSSL()); + // HTTPСоединение = Новый HTTPСоединение("127.0.0.1",80,Пользователь,Пароль,,,); + + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Content-Type","application/xml_request"); + + ТелоЗапроса = ПолучитьОбщийМакет(Метаданные.ОбщиеМакеты.ШаблонGetUsers); + + HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки); + //HTTPЗапрос = Новый HTTPЗапрос("/unfgal/ws/tsdsync", Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса.ТекущаяОбласть.Текст); + РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); + ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку(); + Возврат ТекстОтвета; + +КонецФункции + +Функция GetPrints() Экспорт + СтрокаURI = "/unf/hs/prints/GetPrintstoTSD"; + хост="technozonee.itinalog.ru"; + HTTPСоединение = Новый HTTPСоединение(хост,5443,"admin1c","A400943@!",,,Новый ЗащищенноеСоединениеOpenSSL()); + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Content-Type","application/json"); + ДанныеОтправки=Новый Структура(); + ЗапросJSON = ПростаяЗаписьJSON(ДанныеОтправки); + HTTPЗапрос = Новый HTTPЗапрос(СтрокаURI, Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(ЗапросJSON); + РезультатЗапроса = HTTPСоединение.ВызватьHTTPМетод("GET",HTTPЗапрос); + ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку(); + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(ТекстОтвета); + Данные = ПрочитатьJSON(ЧтениеJSON); + ЧтениеJSON.Закрыть(); + Возврат Данные; +КонецФункции + + + + +Функция ОтправитьДокШтрихкодов(Док) Экспорт + //СтрокаURI = "http://localhost/unf/ws/tsdsync"; + Пользователь = "admin1c"; + Пароль = "A400943@!"; + HTTPСоединение = Новый HTTPСоединение("technozonee.itinalog.ru",5443,Пользователь,Пароль,,,Новый ЗащищенноеСоединениеOpenSSL()); + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Content-Type","application/xml_request"); + + ТелоЗапроса = ПолучитьОбщийМакет("ШаблонSetDocBarcode").ТекущаяОбласть.Текст; + ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$ДокСсылка",Строка(Док.Ссылка.УникальныйИдентификатор())); + ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$Дата",Строка(Формат(Док.Дата,"ДФ=""гггг-ММ-дд'T'ЧЧ:мм:сс""")) ); + ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$Номер",Док.Номер); + + СтрокиЗапроса=""; + Для каждого строка из Док.Штрихкоды Цикл + ТелоСтроки = ПолучитьОбщийМакет("ШаблонSetDocBarcodeLine").ТекущаяОбласть.Текст; + // Отключили, так как будем все передавать в кодированном варианте + // ТелоСтроки= СтрЗаменить(ТелоСтроки,"$ШтрихкодВСтроке", Строка.ШтрихкодСтрока); + ТелоСтроки= СтрЗаменить(ТелоСтроки,"$ШтрихкодКодированный", Строка.ШтрихкодКодированный); + СтрокиЗапроса=СтрокиЗапроса+ТелоСтроки; + КонецЦикла; + ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$СтрокаШК",СтрокиЗапроса); + HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); + РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); + ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку(); + Возврат ТекстОтвета; +КонецФункции + +#Область ЯчейкиИПеремещение + +Функция ПолучитьHTTPСоединениеТСД() + Возврат Новый HTTPСоединение("technozonee.itinalog.ru", 5443, "admin1c", "A400943@!", , , + Новый ЗащищенноеСоединениеOpenSSL()); +КонецФункции + +Функция ВыполнитьSOAPЗапросТСД(ИмяМакета) Экспорт + HTTPСоединение = ПолучитьHTTPСоединениеТСД(); + Заголовки = Новый Соответствие; + Заголовки.Вставить("Content-Type", "application/xml_request"); + ПараметрыЗапроса = ПараметрыSOAPЗапросаТСД(ИмяМакета); + HTTPЗапрос = Новый HTTPЗапрос(ПараметрыЗапроса.АдресРесурса, Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(ПараметрыЗапроса.Тело); + РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); + Возврат РезультатЗапроса.ПолучитьТелоКакСтроку(); +КонецФункции + +// Параметры для асинхронного HTTP на клиенте (без блокировки UI). +Функция ПараметрыSOAPЗапросаТСД(ИмяМакета) Экспорт + + ПараметрыЗапроса = Новый Структура; + ПараметрыЗапроса.Вставить("Хост", "technozonee.itinalog.ru"); + ПараметрыЗапроса.Вставить("Порт", 5443); + ПараметрыЗапроса.Вставить("Пользователь", "admin1c"); + ПараметрыЗапроса.Вставить("Пароль", "A400943@!"); + ПараметрыЗапроса.Вставить("АдресРесурса", "/unf/ws/tsdsync"); + ПараметрыЗапроса.Вставить("Тело", ПолучитьОбщийМакет(ИмяМакета).ТекущаяОбласть.Текст); + Возврат ПараметрыЗапроса; + +КонецФункции + +Процедура ЗагрузитьЯчейкиПартииИОстатки() Экспорт + ЗагрузитьОрганизацииИзУНФ(); + ЗагрузитьЯчейкиИзУНФ(); + ЗагрузитьПартииИзУНФ(); + ЗагрузитьОстаткиПоЯчейкамИзУНФ(); + ЗагрузитьШтрихкодыИзУНФ(); +КонецПроцедуры + +Функция GetCells() Экспорт + Возврат ВыполнитьSOAPЗапросТСД("ШаблонGetCells"); +КонецФункции + +Функция GetOrganizations() Экспорт + Возврат ВыполнитьSOAPЗапросТСД("ШаблонGetOrganizations"); +КонецФункции + +Функция GetBatches() Экспорт + Возврат ВыполнитьSOAPЗапросТСД("ШаблонGetBatches"); +КонецФункции + +Функция GetStockInCells() Экспорт + Возврат ВыполнитьSOAPЗапросТСД("ШаблонGetStockInCells"); +КонецФункции + +Функция GetNom() Экспорт + Возврат ВыполнитьSOAPЗапросТСД("ШаблонGetNom"); +КонецФункции + +Процедура ЗагрузитьОрганизацииИзУНФ() Экспорт + ЗагрузитьОрганизацииИзОтвета(GetOrganizations()); +КонецПроцедуры + +Процедура ЗагрузитьОрганизацииИзОтвета(XmlОтвет) Экспорт + + Попытка + ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "GetOrganizationsResponse"); + Исключение + Сообщить("Ошибка GetOrganizations: " + ОписаниеОшибки() + Символы.ПС + XmlОтвет); + Возврат; + КонецПопытки; + + Если ОбXDTO = Неопределено Тогда + Возврат; + КонецЕсли; + + МассивЗначений = МассивValueИзОтветаТСД(ОбXDTO); + Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда + Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл + ЗаписатьОрганизациюИзXDTO(МассивЗначений.Получить(Индекс)); + КонецЦикла; + ИначеЕсли МассивЗначений <> Неопределено Тогда + ЗаписатьОрганизациюИзXDTO(МассивЗначений); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаписатьОрганизациюИзXDTO(Элемент) + + Если Элемент = Неопределено Тогда + Возврат; + КонецЕсли; + + // GetOrganizations: 0-ссылка, 1-наименование, 2-код + СсылкаUUID = ЗначениеСвойстваXDTO(Элемент, 0); + Наименование = ЗначениеСвойстваXDTO(Элемент, 1); + Код = ЗначениеСвойстваXDTO(Элемент, 2); + + Если Не ЗначениеЗаполнено(СсылкаUUID) Тогда + Возврат; + КонецЕсли; + + Ссылка = Справочники.Организации.ПолучитьСсылку(Новый УникальныйИдентификатор(СсылкаUUID)); + ОбъектОрганизации = Ссылка.ПолучитьОбъект(); + Если ОбъектОрганизации = Неопределено Тогда + ОбъектОрганизации = Справочники.Организации.СоздатьЭлемент(); + ОбъектОрганизации.УстановитьСсылкуНового(Ссылка); + КонецЕсли; + + Если ЗначениеЗаполнено(Наименование) Тогда + ОбъектОрганизации.Наименование = Наименование; + ИначеЕсли Не ЗначениеЗаполнено(ОбъектОрганизации.Наименование) Тогда + ОбъектОрганизации.Наименование = "Организация " + Лев(СсылкаUUID, 8); + КонецЕсли; + + Если ЗначениеЗаполнено(Код) Тогда + Попытка + ОбъектОрганизации.Код = Код; + Исключение + КонецПопытки; + КонецЕсли; + + ОбъектОрганизации.Записать(); + +КонецПроцедуры + +Процедура ЗагрузитьЯчейкиИзУНФ() Экспорт + ЗагрузитьЯчейкиИзОтвета(GetCells()); +КонецПроцедуры + +Процедура ЗагрузитьЯчейкиИзОтвета(XmlОтвет) Экспорт + + Попытка + ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "GetCellsResponse"); + Исключение + Сообщить("Ошибка GetCells: " + ОписаниеОшибки() + Символы.ПС + XmlОтвет); + Возврат; + КонецПопытки; + + Если ОбXDTO = Неопределено Тогда + Возврат; + КонецЕсли; + + МассивЗначений = МассивValueИзОтветаТСД(ОбXDTO); + Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда + Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл + ЗаписатьЯчейкуИзXDTO(МассивЗначений.Получить(Индекс)); + КонецЦикла; + ИначеЕсли МассивЗначений <> Неопределено Тогда + ЗаписатьЯчейкуИзXDTO(МассивЗначений); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаписатьЯчейкуИзXDTO(Элемент) + + Если Элемент = Неопределено Тогда + Возврат; + КонецЕсли; + + // GetCells: 0-ссылка, 1-наименование, 2-код, 3-склад UUID, 4-штрихкод, 5-наименование склада + СсылкаUUID = ЗначениеСвойстваXDTO(Элемент, 0); + Наименование = ЗначениеСвойстваXDTO(Элемент, 1); + Код = ЗначениеСвойстваXDTO(Элемент, 2); + СкладUUID = ЗначениеСвойстваXDTO(Элемент, 3); + Штрихкод = ЗначениеСвойстваXDTO(Элемент, 4); + НаименованиеСклада = ЗначениеСвойстваXDTO(Элемент, 5); + + Если Не ЗначениеЗаполнено(СсылкаUUID) Тогда + Возврат; + КонецЕсли; + + СкладСсылка = ОбеспечитьСкладПоUUID(СкладUUID, НаименованиеСклада); + + Ссылка = Справочники.Ячейки.ПолучитьСсылку(Новый УникальныйИдентификатор(СсылкаUUID)); + ОбъектЯчейки = Ссылка.ПолучитьОбъект(); + Если ОбъектЯчейки = Неопределено Тогда + ОбъектЯчейки = Справочники.Ячейки.СоздатьЭлемент(); + ОбъектЯчейки.УстановитьСсылкуНового(Ссылка); + КонецЕсли; + ОбъектЯчейки.Наименование = Наименование; + Если ЗначениеЗаполнено(Код) Тогда + ОбъектЯчейки.Код = Код; + КонецЕсли; + ОбъектЯчейки.Владелец = СкладСсылка; + ОбъектЯчейки.Штрихкод = Штрихкод; + ОбъектЯчейки.Записать(); + +КонецПроцедуры + +// Создаёт/обновляет склад по UUID. Наименование обязательно из УНФ (индекс 5 GetCells), +// иначе в представлении остаётся заглушка с куском идентификатора. +Функция ОбеспечитьСкладПоUUID(СкладUUID, НаименованиеСклада) Экспорт + + Если Не ЗначениеЗаполнено(СкладUUID) Тогда + Возврат Справочники.СтруктурныеЕдиницы.ПустаяСсылка(); + КонецЕсли; + + СкладСсылка = Справочники.СтруктурныеЕдиницы.ПолучитьСсылку(Новый УникальныйИдентификатор(СкладUUID)); + СкладОбъект = СкладСсылка.ПолучитьОбъект(); + ЭтоНовый = (СкладОбъект = Неопределено); + Если ЭтоНовый Тогда + СкладОбъект = Справочники.СтруктурныеЕдиницы.СоздатьЭлемент(); + СкладОбъект.УстановитьСсылкуНового(СкладСсылка); + КонецЕсли; + + ИмяСклада = СокрЛП(НаименованиеСклада); + Если Не ЗначениеЗаполнено(ИмяСклада) Тогда + ИмяСклада = СокрЛП(СкладОбъект.Наименование); + КонецЕсли; + Если Не ЗначениеЗаполнено(ИмяСклада) Или ЭтоЗаглушкаИмениСклада(ИмяСклада, СкладUUID) Тогда + ИмяСклада = "Склад"; + КонецЕсли; + + НужнаЗапись = ЭтоНовый Или СкладОбъект.Наименование <> ИмяСклада; + Если НужнаЗапись Тогда + СкладОбъект.Наименование = ИмяСклада; + СкладОбъект.Записать(); + КонецЕсли; + + Возврат СкладОбъект.Ссылка; + +КонецФункции + +Функция ЭтоЗаглушкаИмениСклада(ИмяСклада, СкладUUID) + + ПрефиксUUID = ВРег(Лев(СкладUUID, 8)); + Если ВРег(ИмяСклада) = "СКЛАД " + ПрефиксUUID Тогда + Возврат Истина; + КонецЕсли; + Возврат Ложь; + +КонецФункции + +Процедура ЗагрузитьПартииИзУНФ() Экспорт + ЗагрузитьПартииИзОтвета(GetBatches()); +КонецПроцедуры + +Процедура ЗагрузитьПартииИзОтвета(XmlОтвет) Экспорт + + Попытка + ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "GetBatchesResponse"); + Исключение + Сообщить("Ошибка GetBatches: " + ОписаниеОшибки() + Символы.ПС + XmlОтвет); + Возврат; + КонецПопытки; + + Если ОбXDTO = Неопределено Тогда + Возврат; + КонецЕсли; + + МассивЗначений = МассивValueИзОтветаТСД(ОбXDTO); + + Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда + Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл + ЗаписатьПартиюИзXDTO(МассивЗначений.Получить(Индекс)); + КонецЦикла; + ИначеЕсли МассивЗначений <> Неопределено Тогда + ЗаписатьПартиюИзXDTO(МассивЗначений); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаписатьПартиюИзXDTO(Элемент) + + Если Элемент = Неопределено Тогда + Возврат; + КонецЕсли; + + СсылкаUUID = ЗначениеСвойстваXDTO(Элемент, 0); + Наименование = ЗначениеСвойстваXDTO(Элемент, 1); + НоменклатураUUID = ЗначениеСвойстваXDTO(Элемент, 2); + + Если Не ЗначениеЗаполнено(СсылкаUUID) Или Не ЗначениеЗаполнено(НоменклатураUUID) Тогда + Возврат; + КонецЕсли; + + НоменклатураСсылка = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(НоменклатураUUID)); + Если НоменклатураСсылка.ПолучитьОбъект() = Неопределено Тогда + Возврат; + КонецЕсли; + + Ссылка = Справочники.ПартииНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор(СсылкаUUID)); + ОбъектПартии = Ссылка.ПолучитьОбъект(); + Если ОбъектПартии = Неопределено Тогда + ОбъектПартии = Справочники.ПартииНоменклатуры.СоздатьЭлемент(); + ОбъектПартии.УстановитьСсылкуНового(Ссылка); + КонецЕсли; + ОбъектПартии.Наименование = Наименование; + ОбъектПартии.Владелец = НоменклатураСсылка; + ОбъектПартии.Записать(); + +КонецПроцедуры + +Процедура ЗагрузитьОстаткиПоЯчейкамИзУНФ() Экспорт + ЗагрузитьОстаткиПоЯчейкамИзОтвета(GetStockInCells()); +КонецПроцедуры + +Процедура ЗагрузитьШтрихкодыИзУНФ() Экспорт + ЗагрузитьШтрихкодыИзОтвета(GetNom()); +КонецПроцедуры + +Функция ИнтервалАктуальностиДанныхУНФСекунд() + Возврат 30 * 60; // 30 минут +КонецФункции + +Функция НужнаЗагрузкаДанныхУНФ() Экспорт + + ДатаЗагрузки = Константы.ДатаПоследнейЗагрузкиДанныхУНФ.Получить(); + Если Не ЗначениеЗаполнено(ДатаЗагрузки) Тогда + Возврат Истина; + КонецЕсли; + Возврат (ТекущаяДата() - ДатаЗагрузки) >= ИнтервалАктуальностиДанныхУНФСекунд(); + +КонецФункции + +Процедура ЗафиксироватьДатуЗагрузкиДанныхУНФ() Экспорт + Константы.ДатаПоследнейЗагрузкиДанныхУНФ.Установить(ТекущаяДата()); +КонецПроцедуры + +Функция ДатаПоследнейЗагрузкиДанныхУНФСтрокой() Экспорт + + ДатаЗагрузки = Константы.ДатаПоследнейЗагрузкиДанныхУНФ.Получить(); + Если Не ЗначениеЗаполнено(ДатаЗагрузки) Тогда + Возврат ""; + КонецЕсли; + Возврат Формат(ДатаЗагрузки, "ДФ='dd.MM.yyyy HH:mm'"); + +КонецФункции + +// Готовит таблицу ШК во временном хранилище и очищает старые записи. +// Возврат: Адрес, Количество (элементов-владельцев) +Функция ПодготовитьЗагрузкуШтрихкодов(УникальныйИдентификаторФормы) Экспорт + + XmlОтвет = GetNom(); + + Попытка + ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "getNomResponse"); + Исключение + Попытка + ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "GetNomResponse"); + Исключение + ВызватьИсключение("Ошибка GetNom: " + ОписаниеОшибки()); + КонецПопытки; + КонецПопытки; + + Если ОбXDTO = Неопределено Тогда + ВызватьИсключение("GetNom: пустой ответ УНФ. Штрихкоды не изменены."); + КонецЕсли; + + МассивЗначений = МассивValueИзОтветаТСД(ОбXDTO); + Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда + Если МассивЗначений.Количество() > 0 И Не ЭтоЭлементОтветаValueProperty(МассивЗначений.Получить(0)) Тогда + ВызватьИсключение("GetNom: неверный формат ответа (ожидается Value/Property). Штрихкоды не изменены."); + КонецЕсли; + ИначеЕсли Не ЭтоЭлементОтветаValueProperty(МассивЗначений) Тогда + ВызватьИсключение("GetNom: неверный формат ответа (ожидается Value/Property). Штрихкоды не изменены."); + КонецЕсли; + + ТаблицаДанных = НовыйТаблицаДанныхШтрихкодов(); + Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда + Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл + ДобавитьЭлементШтрихкодовВТаблицу(ТаблицаДанных, МассивЗначений.Получить(Индекс)); + КонецЦикла; + ИначеЕсли МассивЗначений <> Неопределено Тогда + ДобавитьЭлементШтрихкодовВТаблицу(ТаблицаДанных, МассивЗначений); + КонецЕсли; + + ОчиститьШтрихкодыНоменклатурыИКарточекМП(); + + Результат = Новый Структура; + Результат.Вставить("Адрес", ПоместитьВоВременноеХранилище(ТаблицаДанных, УникальныйИдентификаторФормы)); + Результат.Вставить("Количество", ТаблицаДанных.Количество()); + Возврат Результат; + +КонецФункции + +// Пишет порцию владельцев ШК из временного хранилища. +// Возврат: Записано, СледующийИндекс, Готово +Функция ЗаписатьПорциюШтрихкодов(АдресДанных, ИндексНачала, РазмерПорции = 40) Экспорт + + ТаблицаДанных = ПолучитьИзВременногоХранилища(АдресДанных); + Если ТипЗнч(ТаблицаДанных) <> Тип("ТаблицаЗначений") Тогда + ВызватьИсключение("Нет данных штрихкодов для записи (временное хранилище пусто)."); + КонецЕсли; + + Всего = ТаблицаДанных.Количество(); + Если ИндексНачала >= Всего Тогда + Результат = Новый Структура; + Результат.Вставить("Записано", 0); + Результат.Вставить("СледующийИндекс", ИндексНачала); + Результат.Вставить("Готово", Истина); + Возврат Результат; + КонецЕсли; + + ИндексКонца = Мин(ИндексНачала + РазмерПорции - 1, Всего - 1); + КоличествоЗаписано = 0; + НаборЗаписей = РегистрыСведений.ШтрихкодыУпаковок.СоздатьНаборЗаписей(); + + Для Индекс = ИндексНачала По ИндексКонца Цикл + СтрокаДанных = ТаблицаДанных[Индекс]; + ВладелецШтрихкода = Неопределено; + Если ВРег(СтрокаДанных.ТипОбъекта) = "КАРТОЧКИМП" Или ВРег(СтрокаДанных.ТипОбъекта) = "КАРТОЧКАМП" Тогда + ВладелецШтрихкода = ОбеспечитьКарточкуМППоUUID(СтрокаДанных.СсылкаUUID, СтрокаДанных.Наименование, СтрокаДанных.СвязаннаяНоменклатураUUID); + Иначе + ВладелецШтрихкода = ОбеспечитьНоменклатуруПоUUID(СтрокаДанных.СсылкаUUID, СтрокаДанных.Наименование); + КонецЕсли; + Если Не ЗначениеЗаполнено(ВладелецШтрихкода) Тогда + Продолжить; + КонецЕсли; + + МассивШК = СтрРазделить(СтрокаДанных.СтрокаШтрихкодов, ";", Ложь); + Для Каждого Штрихкод Из МассивШК Цикл + Штрихкод = СокрЛП(Штрихкод); + Если Не ЗначениеЗаполнено(Штрихкод) Или Штрихкод = "0" Тогда + Продолжить; + КонецЕсли; + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.Штрихкод = Штрихкод; + НоваяЗапись.Номенклатура = ВладелецШтрихкода; + КоличествоЗаписано = КоличествоЗаписано + 1; + КонецЦикла; + КонецЦикла; + + Если НаборЗаписей.Количество() > 0 Тогда + НаборЗаписей.Записать(Ложь); + КонецЕсли; + + СледующийИндекс = ИндексКонца + 1; + Результат = Новый Структура; + Результат.Вставить("Записано", КоличествоЗаписано); + Результат.Вставить("СледующийИндекс", СледующийИндекс); + Результат.Вставить("Готово", СледующийИндекс >= Всего); + Возврат Результат; + +КонецФункции + +Функция НовыйТаблицаДанныхШтрихкодов() + + ТаблицаДанных = Новый ТаблицаЗначений; + ТаблицаДанных.Колонки.Добавить("СсылкаUUID", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(36))); + ТаблицаДанных.Колонки.Добавить("ТипОбъекта", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(50))); + ТаблицаДанных.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150))); + ТаблицаДанных.Колонки.Добавить("СтрокаШтрихкодов", Новый ОписаниеТипов("Строка")); + ТаблицаДанных.Колонки.Добавить("СвязаннаяНоменклатураUUID", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(36))); + Возврат ТаблицаДанных; + +КонецФункции + +Процедура ДобавитьЭлементШтрихкодовВТаблицу(ТаблицаДанных, Элемент) + + Если Элемент = Неопределено Тогда + Возврат; + КонецЕсли; + + СсылкаUUID = СокрЛП(ЗначениеСвойстваXDTO(Элемент, 0)); + ТипОбъекта = СокрЛП(ЗначениеСвойстваXDTO(Элемент, 1)); + Наименование = СокрЛП(ЗначениеСвойстваXDTO(Элемент, 2)); + СтрокаШтрихкодов = СокрЛП(ЗначениеСвойстваXDTO(Элемент, 3)); + СвязаннаяНоменклатураUUID = СокрЛП(ЗначениеСвойстваXDTO(Элемент, 4)); + + Если Не ЭтоUUID(СсылкаUUID) Тогда + Возврат; + КонецЕсли; + Если Не ЗначениеЗаполнено(СтрокаШтрихкодов) Или СтрокаШтрихкодов = "0" Тогда + Возврат; // без ШК не пишем и не создаём справочник + КонецЕсли; + + НоваяСтрока = ТаблицаДанных.Добавить(); + НоваяСтрока.СсылкаUUID = СсылкаUUID; + НоваяСтрока.ТипОбъекта = ТипОбъекта; + НоваяСтрока.Наименование = Наименование; + НоваяСтрока.СтрокаШтрихкодов = СтрокаШтрихкодов; + НоваяСтрока.СвязаннаяНоменклатураUUID = СвязаннаяНоменклатураUUID; + +КонецПроцедуры + +// GetNom: 0-UUID, 1-тип (Номенклатура/КарточкиМП), 2-наименование, 3-ШК через ";", 4-UUID связанной номенклатуры +Процедура ЗагрузитьШтрихкодыИзОтвета(XmlОтвет) Экспорт + + Попытка + ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "getNomResponse"); + Исключение + Попытка + ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "GetNomResponse"); + Исключение + ВызватьИсключение("Ошибка GetNom: " + ОписаниеОшибки()); + КонецПопытки; + КонецПопытки; + + Если ОбXDTO = Неопределено Тогда + ВызватьИсключение("GetNom: пустой ответ УНФ. Штрихкоды не изменены."); + КонецЕсли; + + МассивЗначений = МассивValueИзОтветаТСД(ОбXDTO); + Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда + Если МассивЗначений.Количество() > 0 И Не ЭтоЭлементОтветаValueProperty(МассивЗначений.Получить(0)) Тогда + ВызватьИсключение("GetNom: неверный формат ответа (ожидается Value/Property). Обновите getNom() на УНФ. Штрихкоды не изменены."); + КонецЕсли; + ИначеЕсли Не ЭтоЭлементОтветаValueProperty(МассивЗначений) Тогда + ВызватьИсключение("GetNom: неверный формат ответа (ожидается Value/Property). Обновите getNom() на УНФ. Штрихкоды не изменены."); + КонецЕсли; + + ТаблицаДанных = НовыйТаблицаДанныхШтрихкодов(); + Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда + Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл + ДобавитьЭлементШтрихкодовВТаблицу(ТаблицаДанных, МассивЗначений.Получить(Индекс)); + КонецЦикла; + ИначеЕсли МассивЗначений <> Неопределено Тогда + ДобавитьЭлементШтрихкодовВТаблицу(ТаблицаДанных, МассивЗначений); + КонецЕсли; + + ОчиститьШтрихкодыНоменклатурыИКарточекМП(); + + КоличествоЗаписано = 0; + Если ТаблицаДанных.Количество() > 0 Тогда + Адрес = ПоместитьВоВременноеХранилище(ТаблицаДанных); + Индекс = 0; + Пока Истина Цикл + РезультатПорции = ЗаписатьПорциюШтрихкодов(Адрес, Индекс, 200); + КоличествоЗаписано = КоличествоЗаписано + РезультатПорции.Записано; + Индекс = РезультатПорции.СледующийИндекс; + Если РезультатПорции.Готово Тогда + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если КоличествоЗаписано = 0 Тогда + Сообщить("GetNom: ответ получен, но штрихкодов для записи нет."); + Иначе + Сообщить("Записано штрихкодов: " + Формат(КоличествоЗаписано, "ЧГ=0")); + КонецЕсли; + +КонецПроцедуры + +Функция ЭтоЭлементОтветаValueProperty(Элемент) + + Если Элемент = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + Попытка + Свойства = Элемент.Property; + Возврат Свойства <> Неопределено; + Исключение + Возврат Ложь; + КонецПопытки; + +КонецФункции + +Процедура ОчиститьШтрихкодыНоменклатурыИКарточекМП() + + // Полная очистка регистра (используется только для номенклатуры/карточек МП) + НаборЗаписей = РегистрыСведений.ШтрихкодыУпаковок.СоздатьНаборЗаписей(); + НаборЗаписей.Записать(); + +КонецПроцедуры + +Функция ЗаписатьШтрихкодыИзXDTO(Элемент) + + ТаблицаДанных = НовыйТаблицаДанныхШтрихкодов(); + ДобавитьЭлементШтрихкодовВТаблицу(ТаблицаДанных, Элемент); + Если ТаблицаДанных.Количество() = 0 Тогда + Возврат 0; + КонецЕсли; + + Адрес = ПоместитьВоВременноеХранилище(ТаблицаДанных); + РезультатПорции = ЗаписатьПорциюШтрихкодов(Адрес, 0, 1000); + Возврат РезультатПорции.Записано; + +КонецФункции + +Функция ОбеспечитьНоменклатуруПоUUID(НоменклатураUUID, Наименование) Экспорт + + Если Не ЭтоUUID(НоменклатураUUID) Тогда + Возврат Справочники.Номенклатура.ПустаяСсылка(); + КонецЕсли; + + Ссылка = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(НоменклатураUUID)); + ОбъектНоменклатуры = Ссылка.ПолучитьОбъект(); + Если ОбъектНоменклатуры = Неопределено Тогда + ОбъектНоменклатуры = Справочники.Номенклатура.СоздатьЭлемент(); + ОбъектНоменклатуры.УстановитьСсылкуНового(Ссылка); + ОбъектНоменклатуры.Наименование = ?(ЗначениеЗаполнено(Наименование), Наименование, "Номенклатура " + Лев(НоменклатураUUID, 8)); + ОбъектНоменклатуры.Записать(); + ИначеЕсли ЗначениеЗаполнено(Наименование) И ОбъектНоменклатуры.Наименование <> Наименование Тогда + ОбъектНоменклатуры.Наименование = Наименование; + ОбъектНоменклатуры.Записать(); + КонецЕсли; + + Возврат Ссылка; + +КонецФункции + +Функция ОбеспечитьКарточкуМППоUUID(КарточкаUUID, Наименование, НоменклатураUUID = "") Экспорт + + Если Не ЭтоUUID(КарточкаUUID) Тогда + Возврат Справочники.КарточкиМП.ПустаяСсылка(); + КонецЕсли; + + Ссылка = Справочники.КарточкиМП.ПолучитьСсылку(Новый УникальныйИдентификатор(КарточкаUUID)); + ОбъектКарточки = Ссылка.ПолучитьОбъект(); + Если ОбъектКарточки = Неопределено Тогда + ОбъектКарточки = Справочники.КарточкиМП.СоздатьЭлемент(); + ОбъектКарточки.УстановитьСсылкуНового(Ссылка); + КонецЕсли; + + Если ЗначениеЗаполнено(Наименование) Тогда + ОбъектКарточки.Наименование = Наименование; + ИначеЕсли Не ЗначениеЗаполнено(ОбъектКарточки.Наименование) Тогда + ОбъектКарточки.Наименование = "Карточка " + Лев(КарточкаUUID, 8); + КонецЕсли; + + Если ЭтоUUID(НоменклатураUUID) Тогда + НоменклатураСсылка = ОбеспечитьНоменклатуруПоUUID(НоменклатураUUID, ""); + Попытка + ОбъектКарточки.Номенклатура = НоменклатураСсылка; + Исключение + КонецПопытки; + КонецЕсли; + + ОбъектКарточки.Записать(); + Возврат Ссылка; + +КонецФункции + +Функция ЭтоUUID(Знач СтрокаUUID) + + СтрокаUUID = СокрЛП(Строка(СтрокаUUID)); + Если СтрДлина(СтрокаUUID) <> 36 Тогда + Возврат Ложь; + КонецЕсли; + Попытка + Проверка = Новый УникальныйИдентификатор(СтрокаUUID); + Возврат Истина; + Исключение + Возврат Ложь; + КонецПопытки; + +КонецФункции + +Процедура ЗагрузитьОстаткиПоЯчейкамИзОтвета(XmlОтвет) Экспорт + + Попытка + ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "GetStockInCellsResponse"); + Исключение + Сообщить("Ошибка GetStockInCells: " + ОписаниеОшибки() + Символы.ПС + XmlОтвет); + Возврат; + КонецПопытки; + + НаборОчистки = РегистрыСведений.ЗапасыНаСкладах.СоздатьНаборЗаписей(); + НаборОчистки.Прочитать(); + НаборОчистки.Очистить(); + НаборОчистки.Записать(); + + Если ОбXDTO = Неопределено Тогда + Возврат; + КонецЕсли; + + МассивЗначений = МассивValueИзОтветаТСД(ОбXDTO); + + Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда + Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл + ЗаписатьОстатокИзXDTO(МассивЗначений.Получить(Индекс)); + КонецЦикла; + ИначеЕсли МассивЗначений <> Неопределено Тогда + ЗаписатьОстатокИзXDTO(МассивЗначений); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаписатьОстатокИзXDTO(Элемент) + + Если Элемент = Неопределено Тогда + Возврат; + КонецЕсли; + + СкладUUID = ЗначениеСвойстваXDTO(Элемент, 0); + ЯчейкаUUID = ЗначениеСвойстваXDTO(Элемент, 1); + НоменклатураUUID = ЗначениеСвойстваXDTO(Элемент, 2); + ПартияUUID = ЗначениеСвойстваXDTO(Элемент, 3); + КоличествоСтр = ЗначениеСвойстваXDTO(Элемент, 4); + + Если Не ЗначениеЗаполнено(СкладUUID) Или Не ЗначениеЗаполнено(ЯчейкаUUID) + Или Не ЗначениеЗаполнено(НоменклатураUUID) Тогда + Возврат; + КонецЕсли; + + МенеджерЗаписи = РегистрыСведений.ЗапасыНаСкладах.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.СтруктурнаяЕдиница = Справочники.СтруктурныеЕдиницы.ПолучитьСсылку(Новый УникальныйИдентификатор(СкладUUID)); + МенеджерЗаписи.Ячейка = Справочники.Ячейки.ПолучитьСсылку(Новый УникальныйИдентификатор(ЯчейкаUUID)); + МенеджерЗаписи.Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(НоменклатураUUID)); + Если ЗначениеЗаполнено(ПартияUUID) И ПартияUUID <> "00000000-0000-0000-0000-000000000000" Тогда + МенеджерЗаписи.Партия = Справочники.ПартииНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор(ПартияUUID)); + КонецЕсли; + Попытка + МенеджерЗаписи.Количество = Число(КоличествоСтр); + Исключение + МенеджерЗаписи.Количество = 0; + КонецПопытки; + МенеджерЗаписи.Записать(); + +КонецПроцедуры + +Функция ЗначениеСвойстваXDTO(Элемент, Индекс) + + Попытка + Возврат Строка(Элемент.Property.Получить(Индекс).Value); + Исключение + КонецПопытки; + Возврат ""; + +КонецФункции + +// return операции Get* имеет тип string: внутри — XML с узлами Value/Property, +// либо уже объект XDTO (как у части ответов). Нормализуем оба варианта. +Функция ПрочитатьReturnОперацииТСД(XmlОтвет, ИмяResponse) Экспорт + + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(XmlОтвет); + Фабрика = Новый ФабрикаXDTO; + Тело = Фабрика.ПрочитатьXML(Чтение).Body[ИмяResponse].return; + + Если Тело = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если ТипЗнч(Тело) = Тип("Строка") Тогда + Если Не ЗначениеЗаполнено(СокрЛП(Тело)) Тогда + Возврат Неопределено; + КонецЕсли; + ЧтениеВложенный = Новый ЧтениеXML; + ЧтениеВложенный.УстановитьСтроку(Тело); + Возврат Фабрика.ПрочитатьXML(ЧтениеВложенный); + КонецЕсли; + + Возврат Тело; + +КонецФункции + +Функция МассивValueИзОтветаТСД(ОбXDTO) + + Если ОбXDTO = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Попытка + Возврат ОбXDTO.Value; + Исключение + Возврат ОбXDTO; + КонецПопытки; + +КонецФункции + +Функция ВыгрузитьПеремещениеПоЯчейкам(СсылкаДокумента) Экспорт + + Док = СсылкаДокумента.ПолучитьОбъект(); + Если Док = Неопределено Тогда + Возврат "Документ не найден"; + КонецЕсли; + Если Не ЗначениеЗаполнено(Док.Организация) Тогда + Возврат "Не заполнена организация"; + КонецЕсли; + Если Не ЗначениеЗаполнено(Док.Автор) Тогда + Возврат "Не заполнен автор"; + КонецЕсли; + + HTTPСоединение = ПолучитьHTTPСоединениеТСД(); + Заголовки = Новый Соответствие; + Заголовки.Вставить("Content-Type", "application/xml_request"); + + ТелоЗапроса = ПолучитьОбщийМакет("ШаблонSetDocCellMove").ТекущаяОбласть.Текст; + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ДокСсылка", Строка(Док.Ссылка.УникальныйИдентификатор())); + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$Дата", Формат(Док.Дата, "ДФ=""гггг-ММ-дд'T'ЧЧ:мм:сс""")); + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$Номер", Док.Номер); + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$СкладСсылка", Строка(Док.СтруктурнаяЕдиница.УникальныйИдентификатор())); + Если Док.ВидОперации = Перечисления.ВидыОперацийПеремещенияПоЯчейкам.ИзНесколькихВОдну Тогда + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ВидОперации", "ИзНесколькихВОдну"); + Иначе + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ВидОперации", "ИзОднойВНесколько"); + КонецЕсли; + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$АвторСсылка", + ?(ЗначениеЗаполнено(Док.Автор), Строка(Док.Автор.УникальныйИдентификатор()), + "00000000-0000-0000-0000-000000000000")); + Если ЗначениеЗаполнено(Док.Организация) Тогда + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ОрганизацияСсылка", + Строка(Док.Организация.УникальныйИдентификатор())); + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ОрганизацияНаименование", + XMLСтрока(Строка(Док.Организация))); + Иначе + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ОрганизацияСсылка", + "00000000-0000-0000-0000-000000000000"); + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ОрганизацияНаименование", "Организация"); + КонецЕсли; + // Обязательное свойство XDTO поступления ТМУ (в ТСД контрагента нет) + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$КонтрагентСсылка", "00000000-0000-0000-0000-000000000000"); + + // Сортировка по ячейке-источнику: в УНФ одна ячейка-источник = один документ + ТаблицаСтрок = Новый ТаблицаЗначений; + ТаблицаСтрок.Колонки.Добавить("ЯчейкаИсточник"); + ТаблицаСтрок.Колонки.Добавить("Ячейка"); + ТаблицаСтрок.Колонки.Добавить("Номенклатура"); + ТаблицаСтрок.Колонки.Добавить("Партия"); + ТаблицаСтрок.Колонки.Добавить("Количество"); + ТаблицаСтрок.Колонки.Добавить("ЕдиницаИзмерения"); + ТаблицаСтрок.Колонки.Добавить("Штрихкод"); + ТаблицаСтрок.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число")); + + НомерСтроки = 0; + Для Каждого СтрокаТЧ Из Док.Запасы Цикл + НомерСтроки = НомерСтроки + 1; + НовСтр = ТаблицаСтрок.Добавить(); + НовСтр.ЯчейкаИсточник = СтрокаТЧ.ЯчейкаИсточник; + НовСтр.Ячейка = СтрокаТЧ.Ячейка; + НовСтр.Номенклатура = СтрокаТЧ.Номенклатура; + НовСтр.Партия = СтрокаТЧ.Партия; + НовСтр.Количество = СтрокаТЧ.Количество; + НовСтр.ЕдиницаИзмерения = СтрокаТЧ.ЕдиницаИзмерения; + НовСтр.Штрихкод = СтрокаТЧ.Штрихкод; + НовСтр.НомерСтроки = НомерСтроки; + КонецЦикла; + ТаблицаСтрок.Сортировать("ЯчейкаИсточник, Номенклатура, Ячейка"); + + СтрокиЗапроса = ""; + НомерСтрокиВыгрузки = 0; + Для Каждого СтрокаТЧ Из ТаблицаСтрок Цикл + НомерСтрокиВыгрузки = НомерСтрокиВыгрузки + 1; + ТелоСтроки = ПолучитьОбщийМакет("ШаблонSetDocCellMoveLine").ТекущаяОбласть.Текст; + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$Строка", Формат(НомерСтрокиВыгрузки, "ЧГ=0")); + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$НоменклатураСсылка", Строка(СтрокаТЧ.Номенклатура.УникальныйИдентификатор())); + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$НоменклатураНаименование", XMLСтрока(Строка(СтрокаТЧ.Номенклатура))); + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$ПартияСсылка", + ?(ЗначениеЗаполнено(СтрокаТЧ.Партия), Строка(СтрокаТЧ.Партия.УникальныйИдентификатор()), + "00000000-0000-0000-0000-000000000000")); + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$Количество", Формат(СтрокаТЧ.Количество, "ЧРД=.; ЧГ=0")); + Если ЗначениеЗаполнено(СтрокаТЧ.ЕдиницаИзмерения) Тогда + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$ЕдСсылка", Строка(СтрокаТЧ.ЕдиницаИзмерения.УникальныйИдентификатор())); + Попытка + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$КодКлас", Строка(СтрокаТЧ.ЕдиницаИзмерения.Код)); + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$НаимКлас", Строка(СтрокаТЧ.ЕдиницаИзмерения.Наименование)); + Исключение + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$КодКлас", "796"); + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$НаимКлас", XMLСтрока(Строка(СтрокаТЧ.ЕдиницаИзмерения))); + КонецПопытки; + Иначе + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$ЕдСсылка", "00000000-0000-0000-0000-000000000000"); + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$КодКлас", "796"); + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$НаимКлас", "шт"); + КонецЕсли; + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$типз", "СобственныеТовары"); + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$ЯчейкаИсточникСсылка", + ?(ЗначениеЗаполнено(СтрокаТЧ.ЯчейкаИсточник), Строка(СтрокаТЧ.ЯчейкаИсточник.УникальныйИдентификатор()), + "00000000-0000-0000-0000-000000000000")); + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$ЯчейкаСтрокиСсылка", + ?(ЗначениеЗаполнено(СтрокаТЧ.Ячейка), Строка(СтрокаТЧ.Ячейка.УникальныйИдентификатор()), + "00000000-0000-0000-0000-000000000000")); + ТелоСтроки = СтрЗаменить(ТелоСтроки, "$Штрихкод", XMLСтрока(СтрокаТЧ.Штрихкод)); + СтрокиЗапроса = СтрокиЗапроса + ТелоСтроки; + КонецЦикла; + + ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$Запасы", СтрокиЗапроса); + HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); + РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); + ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку(); + + Док.Статус = Перечисления.Статус.Отправлен; + Док.Записать(); + + Возврат ТекстОтвета; + +КонецФункции + +#КонецОбласти diff --git a/CommonModules/СинхронизацияУТКлиент.xml b/CommonModules/СинхронизацияУТКлиент.xml new file mode 100644 index 0000000..0023ab9 --- /dev/null +++ b/CommonModules/СинхронизацияУТКлиент.xml @@ -0,0 +1,23 @@ + + + + + СинхронизацияУТКлиент + + + ru + Синхронизация УТ клиент + + + + false + true + false + false + false + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/СинхронизацияУТКлиент/Ext/Module.bsl b/CommonModules/СинхронизацияУТКлиент/Ext/Module.bsl new file mode 100644 index 0000000..81f8b15 --- /dev/null +++ b/CommonModules/СинхронизацияУТКлиент/Ext/Module.bsl @@ -0,0 +1,31 @@ + +#Область ПрограммныйИнтерфейс + +// Асинхронный SOAP к /unf/ws/tsdsync — HTTP на клиенте, UI не блокируется на время сети. +// +Асинх Функция ВыполнитьSOAPЗапросТСДАсинх(ИмяМакета) Экспорт + + ПараметрыЗапроса = СинхронизацияУТ.ПараметрыSOAPЗапросаТСД(ИмяМакета); + + ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL; + HTTPСоединение = Новый HTTPСоединение( + ПараметрыЗапроса.Хост, + ПараметрыЗапроса.Порт, + ПараметрыЗапроса.Пользователь, + ПараметрыЗапроса.Пароль, + , + , + ЗащищенноеСоединение); + + Заголовки = Новый Соответствие; + Заголовки.Вставить("Content-Type", "application/xml_request"); + + HTTPЗапрос = Новый HTTPЗапрос(ПараметрыЗапроса.АдресРесурса, Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(ПараметрыЗапроса.Тело); + + РезультатЗапроса = Ждать HTTPСоединение.ВызватьHTTPМетодАсинх("POST", HTTPЗапрос); + Возврат РезультатЗапроса.ПолучитьТелоКакСтроку(); + +КонецФункции + +#КонецОбласти diff --git a/CommonModules/ФорматноЛогическийКонтроль.xml b/CommonModules/ФорматноЛогическийКонтроль.xml new file mode 100644 index 0000000..35b16b4 --- /dev/null +++ b/CommonModules/ФорматноЛогическийКонтроль.xml @@ -0,0 +1,23 @@ + + + + + ФорматноЛогическийКонтроль + + + ru + Форматно логический контроль сервер + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ФорматноЛогическийКонтроль/Ext/Module.bsl b/CommonModules/ФорматноЛогическийКонтроль/Ext/Module.bsl new file mode 100644 index 0000000..ae3d440 --- /dev/null +++ b/CommonModules/ФорматноЛогическийКонтроль/Ext/Module.bsl @@ -0,0 +1,1431 @@ + +#Область ПрограммныйИнтерфейс + +// Выполняет проверку правильности заполнения тегов в соответствии с ФФД +// +// Параметры: +// ДанныеЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Не обязательный +// Ошибки - Массив из строка - Строки ошибок по результатам контроля +// ИсправленыОсновныеПараметры - Булево +// +// Возвращаемое значение: +// Булево. +Функция ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов(ДанныеЧека, ИдентификаторУстройства, Ошибки = Неопределено, ИсправленыОсновныеПараметры = Неопределено) Экспорт + + Результат = Ложь; + Проверка = ПараметрыПроверки(); + Если Не ЗначениеЗаполнено(ИдентификаторУстройства) Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Не выбрано устройство'")); + Ошибки = Проверка.Ошибки; + Возврат Результат; + КонецЕсли; + + ПараметрыРегистрации = ОборудованиеЧекопечатающиеУстройства.ПараметрыРегистрацииУстройства(ИдентификаторУстройства); + ПривестиАдресИМестоРасчетов(ДанныеЧека, ПараметрыРегистрации); + ПривестиДанныеКТребуемомуФормату(ДанныеЧека, ИсправленыОсновныеПараметры, ПараметрыРегистрации); + + СтруктураДанныхФЛК = СтруктураДанныхФорматноЛогическогоКонтроля(ИдентификаторУстройства); + Проверка.ВерсияФФД = СтруктураДанныхФЛК.ФорматФД; + ДанныеЧека.Вставить("ФорматФД", СтруктураДанныхФЛК.ФорматФД); + ЗаполнитьЗначенияСвойств(Проверка, + ОбщегоНазначенияБПО.ЗначенияРеквизитовОбъекта(ИдентификаторУстройства, "ИспользуетсяФН36, ТипОборудования")); + + ПроверитьРеквизит(Проверка, ДанныеЧека, "АдресРасчетов"); + ПроверитьРеквизит(Проверка, ДанныеЧека, "МестоРасчетов", "1.05, 1.1, 1.2"); + ПроверитьРеквизит(Проверка, ДанныеЧека, "ОрганизацияНазвание"); + ПроверитьРеквизит(Проверка, ДанныеЧека, "ОрганизацияИНН"); + ПроверитьРеквизит(Проверка, ДанныеЧека, "ТипРасчета"); + ПроверитьРеквизит(Проверка, ДанныеЧека, "СистемаНалогообложения"); + ПроверитьРеквизит(Проверка, ДанныеЧека, "Кассир"); + ПроверитьДлинуРеквизита(Проверка, ДанныеЧека, "Кассир", 64); + ПроверитьРеквизитИНН (Проверка, ДанныеЧека, "КассирИНН"); + ПроверитьСведенияОПокупателе(Проверка, ДанныеЧека); + ПроверитьКодыНалогообложения(Проверка, ДанныеЧека, ПараметрыРегистрации.КодыСистемыНалогообложения); + ПроверитьЭлектронныйЧек(Проверка, ДанныеЧека); + + СуммыПозиций = ПараметрыСуммыПозиций(); + СуммыОплат = ПараметрыСуммыОплат(); + ВыполнитьПроверкуФактическойОплаты = Ложь; + Для Каждого Позиция Из ДанныеЧека.ПозицииЧека Цикл + УвеличитьНомерПозиции(Проверка); + Если Позиция.Свойство("ФискальнаяСтрока") Тогда + ПроверитьРеквизит(Проверка, Позиция, "Количество"); + ПроверитьРеквизит(Проверка, Позиция, "ПризнакСпособаРасчета", "1.05, 1.1, 1.2"); + ПроверитьРеквизит(Проверка, Позиция, "ПризнакПредметаРасчета", "1.1, 1.2"); + ПроверитьДанныеАгента(Проверка, ДанныеЧека, Позиция); + ПроверитьДанныеПоставщика(Проверка, ДанныеЧека, Позиция); + ВычислитьСуммыПозиций(СуммыПозиций, Позиция); + ПреобразоватьПризнакПредметаРасчета(Проверка, Позиция); + ПризнакСпособаРасчета = Позиция.ПризнакСпособаРасчета; + Если ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаЧастичная + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ОплатаКредита Тогда + ВыполнитьПроверкуФактическойОплаты = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Для Каждого ЭлементОплаты Из ДанныеЧека.ТаблицаОплат Цикл + ПроверитьРеквизит(Проверка, ЭлементОплаты, "ТипОплаты"); + ВычислитьСуммыОплат(СуммыОплат, ЭлементОплаты); + КонецЦикла; + ВычислитьСуммуНаличныеБезСдачи(СуммыПозиций, СуммыОплат); + ПроверитьСуммыОплат(Проверка, СуммыПозиций, СуммыОплат); + Если ВыполнитьПроверкуФактическойОплаты Тогда + ПроверитьСуммуФактическихОплат(Проверка, СуммыПозиций, СуммыОплат); + КонецЕсли; + ПреобразоватьСистемуНалогообложения(Проверка, ДанныеЧека); + + Результат = Проверка.Ошибки.Количество() = 0; + Ошибки = СтрСоединить(Проверка.Ошибки, Символы.ПС); + + Возврат Результат; + +КонецФункции + +// Выполняет корректировку данных чека +// +// Параметры: +// ДанныеЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ИсправленыОсновныеПараметры - Булево +// +Процедура ПривестиДанныеКТребуемомуФормату(ДанныеЧека, ИсправленыОсновныеПараметры = Неопределено, ПараметрыРегистрации = Неопределено) Экспорт + + Если ДанныеЧека.ИндивидуальныйРежимПодготовкиДанныхКПередачеВОФД Тогда + Возврат; + КонецЕсли; + + Если ДанныеЧека.СпособФорматноЛогическогоКонтроля = Перечисления.СпособыФорматноЛогическогоКонтроля.НеКонтролировать Тогда + Возврат; + КонецЕсли; + + СуммыПозиций = ПараметрыСуммыПозиций(); + НужноПривестиСуммы = Ложь; + ИсправленыОсновныеПараметры = Ложь; + Для Каждого Позиция Из ДанныеЧека.ПозицииЧека Цикл + Если Позиция.Свойство("ФискальнаяСтрока") Тогда + + ПривестиЕслиСпособРасчетаБезПередачиТовара(Позиция, ИсправленыОсновныеПараметры); + ПривестиСтавкиНДС(Позиция); + ВычислитьСуммыПозиций(СуммыПозиций, Позиция); + + ПризнакСпособаРасчета = Позиция.ПризнакСпособаРасчета; + Если ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаЧастичная + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ОплатаКредита Тогда + НужноПривестиСуммы = Истина; + КонецЕсли; + + КонецЕсли; + КонецЦикла; + + Если НужноПривестиСуммы Тогда + СуммыОплат = ПараметрыСуммыОплат(); + Для Каждого СтрокаОплат Из ДанныеЧека.ТаблицаОплат Цикл + ВычислитьСуммыОплат(СуммыОплат, СтрокаОплат); + КонецЦикла; + ВычислитьСуммуНаличныеБезСдачи(СуммыПозиций, СуммыОплат); + ПривестиСуммыПозицийЧекаКСуммеТаблицыОплат(ДанныеЧека, СуммыПозиций, СуммыОплат); + КонецЕсли; + +КонецПроцедуры + +// Определяет требуется ли выполнить корректировку сумм в позициях чека +// +// Параметры: +// ДанныеЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Не обязательный +// Если заполнено оборудование и не заполнен способ контроля в общих параметрах, +// то способ контроля и допустимое расхождение получаются из подключаемого оборудования. +// +// Возвращаемое значение: +// Булево +// +Функция НуженФорматноЛогическийКонтроль(ДанныеЧека, ИдентификаторУстройства = Неопределено) Экспорт + + СтандартнаяОбработка = Истина; + ПереопределяемыйРезультат = ФорматноЛогическийКонтрольПереопределяемый.НуженФорматноЛогическийКонтроль(ДанныеЧека, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + Возврат ПереопределяемыйРезультат; + КонецЕсли; + + СпособФорматноЛогическогоКонтроля = ДанныеЧека.СпособФорматноЛогическогоКонтроля; + ДопустимоеРасхождение = ДанныеЧека.ДопустимоеРасхождениеФорматноЛогическогоКонтроля; + + Если СпособФорматноЛогическогоКонтроля = Неопределено И ИдентификаторУстройства <> Неопределено Тогда + СтруктураДанныхФЛК = СтруктураДанныхФорматноЛогическогоКонтроля(ИдентификаторУстройства); + ДопустимоеРасхождение = СтруктураДанныхФЛК.ДопустимоеРасхождениеФорматноЛогическогоКонтроля; + СпособФорматноЛогическогоКонтроля = СтруктураДанныхФЛК.СпособФорматноЛогическогоКонтроля; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СпособФорматноЛогическогоКонтроля) + ИЛИ СпособФорматноЛогическогоКонтроля = Перечисления.СпособыФорматноЛогическогоКонтроля.НеКонтролировать Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого ТекущаяПозиция Из ДанныеЧека.ПозицииЧека Цикл + Если Не ТекущаяПозиция.Свойство("ФискальнаяСтрока") Тогда + Продолжить; + КонецЕсли; + + Количество = ?(ТекущаяПозиция.Количество = 0, 1, ТекущаяПозиция.Количество); + Если Количество = 1 Тогда + Если ТекущаяПозиция.ЦенаСоСкидками <> ТекущаяПозиция.Сумма Тогда + Возврат Истина; + КонецЕсли; + Иначе + Если Окр(ТекущаяПозиция.ЦенаСоСкидками * Количество, 2, 1) <> ТекущаяПозиция.Сумма Тогда + Сумма = ТекущаяПозиция.Сумма; + // Умножаем входящее количество на заданную цену и получаем новую промежуточную сумму. + // Сумму НЕ округляем - Требования АСК ККТ ФНС РФ. + НоваяСуммаБезОкругления = Количество * ТекущаяПозиция.ЦенаСоСкидками; + // Вычисляем разницу между промежуточной и входящей суммой. + РазницаСумм = НоваяСуммаБезОкругления - Сумма; + // Если разница допустима - оставляем одну строку. + // Если разницы нет - оставляем одну строку. + Если РазницаСумм >= -ДопустимоеРасхождение И РазницаСумм <= ДопустимоеРасхождение Тогда + // Дополнительно получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество. + // Цену округляем. + РасчетнаяЦена = Окр(Сумма / Количество, 2, 1); + Если ТекущаяПозиция.ЦенаСоСкидками <> РасчетнаяЦена Тогда + // Но. Если цена не совпадает с расчетной - все равно надо ее пересчитывать. + Возврат Истина; + КонецЕсли; + Иначе + // Надо разделять строку. + Возврат Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Выполняет проверку сумм фискальных строк, осуществляя форматно-логический контроль чека. +// Функция переопределяется методом ФорматноЛогическийКонтрольПереопределяемый.ПровестиФорматноЛогическийКонтроль. +// +// Параметры: +// ДанныеЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Не обязательный +// Если заполнено оборудование и не заполнен способ контроля в общих параметрах, +// то способ контроля и допустимое расхождение получаются из подключаемого оборудования. +// +Процедура ПровестиФорматноЛогическийКонтроль(ДанныеЧека, ИдентификаторУстройства = Неопределено) Экспорт + + СтандартнаяОбработка = Истина; + ФорматноЛогическийКонтрольПереопределяемый.ПровестиФорматноЛогическийКонтроль(ДанныеЧека, СтандартнаяОбработка, ИдентификаторУстройства); + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + Если Не НуженФорматноЛогическийКонтроль(ДанныеЧека, ИдентификаторУстройства) Тогда + Возврат; + КонецЕсли; + + СпособФорматноЛогическогоКонтроля = ДанныеЧека.СпособФорматноЛогическогоКонтроля; + ДопустимоеРасхождение = ДанныеЧека.ДопустимоеРасхождениеФорматноЛогическогоКонтроля; + + Если СпособФорматноЛогическогоКонтроля = Неопределено И ИдентификаторУстройства <> Неопределено Тогда + СтруктураДанныхФЛК = СтруктураДанныхФорматноЛогическогоКонтроля(ИдентификаторУстройства); + ДопустимоеРасхождение = СтруктураДанныхФЛК.ДопустимоеРасхождениеФорматноЛогическогоКонтроля; + СпособФорматноЛогическогоКонтроля = СтруктураДанныхФЛК.СпособФорматноЛогическогоКонтроля; + КонецЕсли; + + Если ЗначениеЗаполнено(СпособФорматноЛогическогоКонтроля) Тогда + НовыеПозицииЧека = Новый Массив; + Если СпособФорматноЛогическогоКонтроля = Перечисления.СпособыФорматноЛогическогоКонтроля.НеКонтролировать Тогда + Возврат; + ИначеЕсли СпособФорматноЛогическогоКонтроля = Перечисления.СпособыФорматноЛогическогоКонтроля.ЗачитыватьСуммы Тогда + ПривестиПозицииЧекаПоАлгоритмуЗачитыватьСуммы(ДанныеЧека.ПозицииЧека, НовыеПозицииЧека, ДопустимоеРасхождение); + ДанныеЧека.ПозицииЧека = НовыеПозицииЧека; + ИначеЕсли СпособФорматноЛогическогоКонтроля = Перечисления.СпособыФорматноЛогическогоКонтроля.РазделятьСтроки Тогда + ПривестиПозицииЧекаПоАлгоритмуРазделятьСтроки(ДанныеЧека.ПозицииЧека, НовыеПозицииЧека, ДопустимоеРасхождение); + ДанныеЧека.ПозицииЧека = НовыеПозицииЧека; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Структура данных форматно-логического контроля +// +// Параметры: +// ПодключаемоеОборудование - СправочникСсылка.ПодключаемоеОборудование - Устройство, фискализирующее чек +// +// Возвращаемое значение: +// Структура - Структура данных форматно логического контроля: +// * СпособФорматноЛогическогоКонтроля - Неопределено +// - ПеречислениеСсылка.СпособыФорматноЛогическогоКонтроля +// * ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число - +// * ФорматФД - Строка - +// +Функция СтруктураДанныхФорматноЛогическогоКонтроля(ПодключаемоеОборудование) Экспорт + + ФорматФД = "1.0"; + + ВозвращаемаяСтруктура = Новый Структура; + ВозвращаемаяСтруктура.Вставить("СпособФорматноЛогическогоКонтроля" , Неопределено); + ВозвращаемаяСтруктура.Вставить("ДопустимоеРасхождениеФорматноЛогическогоКонтроля", 0.01); + ВозвращаемаяСтруктура.Вставить("ФорматФД", ФорматФД); + + СтандартнаяОбработка = Истина; + ФорматноЛогическийКонтрольПереопределяемый.ПолучитьСтруктуруДанныхФорматноЛогическогоКонтроля(ПодключаемоеОборудование, ВозвращаемаяСтруктура, СтандартнаяОбработка); + + Если Не СтандартнаяОбработка Тогда + Возврат ВозвращаемаяСтруктура; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПодключаемоеОборудование.ДопустимоеРасхождениеФорматноЛогическогоКонтроля КАК ДопустимоеРасхождениеФорматноЛогическогоКонтроля, + | ПодключаемоеОборудование.СпособФорматноЛогическогоКонтроля КАК СпособФорматноЛогическогоКонтроля, + | ПодключаемоеОборудованиеПараметрыРегистрации.ЗначениеПараметра КАК ФорматФД + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодключаемоеОборудование.ПараметрыРегистрации КАК ПодключаемоеОборудованиеПараметрыРегистрации + | ПО ПодключаемоеОборудование.Ссылка = ПодключаемоеОборудованиеПараметрыРегистрации.Ссылка + | И (ПодключаемоеОборудованиеПараметрыРегистрации.Ссылка = &Ссылка) + | И (ПодключаемоеОборудованиеПараметрыРегистрации.НаименованиеПараметра = ""ВерсияФФДККТ"") + |ГДЕ + | ПодключаемоеОборудование.Ссылка = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", ПодключаемоеОборудование); + + Результат = Запрос.Выполнить(); + Если Не Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + ВозвращаемаяСтруктура.ФорматФД = Выборка.ФорматФД; + ВозвращаемаяСтруктура.СпособФорматноЛогическогоКонтроля = Выборка.СпособФорматноЛогическогоКонтроля; + ВозвращаемаяСтруктура.ДопустимоеРасхождениеФорматноЛогическогоКонтроля = Выборка.ДопустимоеРасхождениеФорматноЛогическогоКонтроля; + КонецЕсли; + + Возврат ВозвращаемаяСтруктура; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Возвращает структуру проверки форматно-логического контроля +// +// Возвращаемое значение: +// Структура: +// * ВерсияФФД - Строка - Версия формата, по которому выполнять проверку +// * ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования +// * ИспользуетсяФН36 - Булево - +// * Ошибки - Массив из Строка - строки содержащие описание найденных ошибок +// * НомерПозиции - Число - номер проверяемой позиции в чеке +// +Функция ПараметрыПроверки() + Параметры = Новый Структура; + Параметры.Вставить("ВерсияФФД", "1.2"); + Параметры.Вставить("ТипОборудования", Перечисления.ТипыПодключаемогоОборудования.ПустаяСсылка()); + Параметры.Вставить("ИспользуетсяФН36", Ложь); + Параметры.Вставить("Ошибки", Новый Массив); // Массив из Строка + Параметры.Вставить("НомерПозиции",0); + Возврат Параметры; +КонецФункции + +// Скопировать структуру. +// +// Параметры: +// Данные - Произвольный, Структура - Текущая позиция +// +// Возвращаемое значение: +// Структура +// +Функция СкопироватьСтруктуру(Данные) + + НоваяСтруктура = Новый Структура; + Для Каждого ЭлементСтруктуры Из Данные Цикл + НоваяСтруктура.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); + КонецЦикла; + + Возврат НоваяСтруктура; + +КонецФункции + +// Функция сортирует массив фискальных строк +// +// Параметры: +// МассивФискальныхСтрок - Массив из см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ИмяРеквизита - Строка +Процедура СортироватьМассивФискальныхСтрок(МассивФискальныхСтрок, ИмяРеквизита = "СтрокаПоследнегоТовара") + + МаксимальныйИндекс = МассивФискальныхСтрок.ВГраница(); + Если МаксимальныйИндекс >= 0 Тогда + // Начинаем со второго элемента. + Для ТекущийИндекс = 1 По МаксимальныйИндекс Цикл + ТекущаяСтрока = МассивФискальныхСтрок[ТекущийИндекс]; + НоваяТекущаяСтрока = СкопироватьСтруктуру(ТекущаяСтрока); + НовыйИндексТекущейСтроки = -1; + Для ОбратныйСчетчик = 1 По ТекущийИндекс Цикл + ПредыдущаяСтрока = МассивФискальныхСтрок[ТекущийИндекс - ОбратныйСчетчик]; + Если ПредыдущаяСтрока[ИмяРеквизита] > ТекущаяСтрока[ИмяРеквизита] Тогда + НоваяПредыдущаяСтрока = СкопироватьСтруктуру(ПредыдущаяСтрока); + + НовыйИндексТекущейСтроки = ТекущийИндекс - ОбратныйСчетчик; + МассивФискальныхСтрок.Удалить(НовыйИндексТекущейСтроки + 1); + МассивФискальныхСтрок.Вставить(НовыйИндексТекущейСтроки + 1, НоваяПредыдущаяСтрока); + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + Если НовыйИндексТекущейСтроки >=0 Тогда + МассивФискальныхСтрок.Удалить(НовыйИндексТекущейСтроки); + МассивФискальныхСтрок.Вставить(НовыйИндексТекущейСтроки, НоваяТекущаяСтрока); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +#Область СпециальныеПроверки + +// Выполняет проверку кода налогообложения в данных чека +// +// Параметры: +// Проверка - см. ПараметрыПроверки. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ДоступныеКодыСистемыНалогообложения - Строка +// +Процедура ПроверитьКодыНалогообложения(Проверка, Данные, ДоступныеКодыСистемыНалогообложения) + + Если Проверка.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ Тогда + // Проверка системы налогообложения + КодыНалогообложения = СтрРазделить(ДоступныеКодыСистемыНалогообложения, ","); + СистемаНалогообложения = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодСистемыНалогообложенияККТ(Данные.СистемаНалогообложения); + Если КодыНалогообложения.Найти(Строка(СистемаНалогообложения)) = Неопределено Тогда + ТекстОшибки = НСтр("ru = 'ККТ не зарегистрирована с указанной системой налогообложения: ""%1""'"); + ТекстОшибки = СтрШаблон(ТекстОшибки, Строка(Данные.СистемаНалогообложения)); + Проверка.Ошибки.Добавить(ТекстОшибки); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Выполняет проверку реквизитов для электронного чека +// +// Параметры: +// Проверка - см. ПараметрыПроверки. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// +Процедура ПроверитьЭлектронныйЧек(Проверка, Данные) + + // Электронный чек + Если Данные.Электронно + И ПустаяСтрока(Данные.ПокупательEmail) И ПустаяСтрока(Данные.ПокупательНомер) Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Для электронного чека нужно указать либо Email, либо телефон.'")); + КонецЕсли; + + Если Данные.Отправляет1СEmail И ПустаяСтрока(Данные.ПокупательEmail) Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Не заполнен E-mail'")); + КонецЕсли; + + Если Данные.Отправляет1СSMS И НЕ ЗначениеЗаполнено(Данные.ПокупательНомер) Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Не заполнен номер телефона'")); + КонецЕсли; + +КонецПроцедуры + +// Выполняет проверку сведений о покупателе в данных чека +// +// Параметры: +// Проверка - см. ПараметрыПроверки. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// +Процедура ПроверитьСведенияОПокупателе(Проверка, Данные) + + // при формате 1.05 реквизит необязателен + Если ВерсияФФД(Проверка, "1.05") Тогда + Возврат; + КонецЕсли; + + СведенияОПокупателе = Данные.СведенияОПокупателе; + Если ПустаяСтрока(Данные.Получатель) И ПустаяСтрока(СведенияОПокупателе.Покупатель) Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Данные.ПолучательИНН) Или ЗначениеЗаполнено(СведенияОПокупателе.ПокупательИНН) Тогда + Возврат; + КонецЕсли; + + Если Данные.ЕстьПерсональныеДанные Тогда + ПерсональныеДанные = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПерсональныеДанныеПокупателя(); + ТипПерсональныхДанных = Данные.ТипПерсональныхДанных; + + МенеджерОборудованияВызовСервераПереопределяемый.ОбработкаЗаполненияПерсональныхДанных( + ПерсональныеДанные, + Данные.СубъектПерсональныхДанных, + ТипПерсональныхДанных, + ?(ПустаяСтрока(Данные.ДатаВремя), ОбщегоНазначенияБПО.ДатаСеанса(), Данные.ДатаВремя)); + + Если ТипПерсональныхДанных = Перечисления.ТипыПерсональныхДанныхККТ.ИНН И ЗначениеЗаполнено(ПерсональныеДанные.ИНН) Тогда + Возврат; + ИначеЕсли ТипПерсональныхДанных = Перечисления.ТипыПерсональныхДанныхККТ.ПаспортныеДанные + И ЗначениеЗаполнено(ПерсональныеДанные.ДатаРождения) + И ЗначениеЗаполнено(ПерсональныеДанные.ВидДокумента) + И ЗначениеЗаполнено(ПерсональныеДанные.ДанныеДокумента) Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Проверка.Ошибки.Добавить(НСтр("ru = 'Не указан ИНН или дата рождения и реквизиты документа удостоверяющего личность покупателя.'")); + +КонецПроцедуры + +// Выполняет проверку заполнения данных агента +// +// Параметры: +// Проверка - см. ПараметрыПроверки. +// ДанныеЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// Позиция - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека +// +Процедура ПроверитьДанныеАгента(Проверка, ДанныеЧека, Позиция) + + Если ЗаполненРеквизит(Проверка, Позиция, "ПризнакАгентаПоПредметуРасчета") Тогда + + ПризнакАгента = Неопределено; + ПризнакАгентаПоПредметуРасчета = Неопределено; + Если ЕстьРеквизит(Проверка, ДанныеЧека, "ПризнакАгента", ПризнакАгента) + И ЗначениеЗаполнено(ПризнакАгента) + И ЕстьРеквизит(Проверка, Позиция, "ПризнакАгентаПоПредметуРасчета", ПризнакАгентаПоПредметуРасчета) + И ЗначениеЗаполнено(ПризнакАгентаПоПредметуРасчета) Тогда + Если ДанныеЧека.ПризнакАгента <> Позиция.ПризнакАгентаПоПредметуРасчета Тогда + ШаблонОшибки = НСтр("ru = 'Признак платежного агента в шапке не совпадает с признаком платежного агента по предмету расчета в строке №%2.'"); + Проверка.Ошибки.Добавить(ТекстОшибки(ШаблонОшибки, "", Проверка.НомерПозиции)); + КонецЕсли; + КонецЕсли; + + МассивДанных = Новый Массив(); + МассивДанных.Добавить(ДанныеЧека.ДанныеАгента.ОператорПеревода); + МассивДанных.Добавить(Позиция.ДанныеАгента.ОператорПеревода); + + ПризнакАгентаПоПредметуРасчета = Позиция.ПризнакАгентаПоПредметуРасчета; + Если ПризнакАгентаПоПредметуРасчета = Перечисления.ПризнакиАгента.БанковскийПлатежныйАгент + Или ПризнакАгентаПоПредметуРасчета = Перечисления.ПризнакиАгента.БанковскийПлатежныйСубагент Тогда + ШаблонОшибки = НСтр("ru = 'Не установлен %1 оператора перевода банковского платежного агента.'"); + ПроверитьРеквизитВМассивеДанных(Проверка, МассивДанных, "Телефон",, ШаблонОшибки); + ПроверитьРеквизитВМассивеДанных(Проверка, МассивДанных, "Адрес",, ШаблонОшибки); + ПроверитьРеквизитВМассивеДанных(Проверка, МассивДанных, "ИНН",, ШаблонОшибки); + ШаблонОшибки = НСтр("ru = 'Не установлено %1 оператора перевода банковского платежного агента.'"); + ПроверитьРеквизитВМассивеДанных(Проверка, МассивДанных, "Наименование",, ШаблонОшибки); + КонецЕсли; + + ШаблонОшибки = НСтр("ru = '%1 оператора перевода в строке %2 не равен этому значению в шапке.'"); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "Телефон", ШаблонОшибки); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "Адрес", ШаблонОшибки); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "ИНН", ШаблонОшибки); + ШаблонОшибки = НСтр("ru = '%1 оператора перевода в строке %2 не равно этому значению в шапке.'"); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "Наименование", ШаблонОшибки); + + МассивДанных.Очистить(); + МассивДанных.Добавить(ДанныеЧека.ДанныеАгента.ОператорПоПриемуПлатежей); + МассивДанных.Добавить(Позиция.ДанныеАгента.ОператорПоПриемуПлатежей); + ШаблонОшибки = НСтр("ru = '%1 оператора по приему платежей в строке %2 не равен этому значению в шапке.'"); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "Телефон", ШаблонОшибки); + + МассивДанных.Очистить(); + МассивДанных.Добавить(ДанныеЧека.ДанныеАгента.ПлатежныйАгент); + МассивДанных.Добавить(Позиция.ДанныеАгента.ПлатежныйАгент); + ШаблонОшибки = НСтр("ru = '%1 платежного агента в строке %2 не равен этому значению в шапке.'"); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "Телефон", ШаблонОшибки); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "Операция", ШаблонОшибки); + + МассивДанных.Очистить(); + МассивДанных.Добавить(ДанныеЧека.ДанныеПоставщика); + МассивДанных.Добавить(Позиция.ДанныеПоставщика); + ШаблонОшибки = НСтр("ru = '%1 поставщика в строке %2 не равен этому значению в шапке.'"); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "Телефон", ШаблонОшибки); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "ИНН", ШаблонОшибки); + ШаблонОшибки = НСтр("ru = '%1 поставщика в строке %2 не равно этому значению в шапке.'"); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "Наименование", ШаблонОшибки); + КонецЕсли; +КонецПроцедуры + +// Выполняет проверку заполнения данных поставщика +// +// Параметры: +// Проверка - см. ПараметрыПроверки. +// ДанныеЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// Позиция - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека +// +Процедура ПроверитьДанныеПоставщика(Проверка, ДанныеЧека, Позиция) + + Если ЗаполненРеквизит(Проверка, Позиция, "ПризнакАгентаПоПредметуРасчета") Тогда + + МассивДанных = Новый Массив(); + МассивДанных.Добавить(ДанныеЧека.ДанныеПоставщика); + МассивДанных.Добавить(Позиция.ДанныеПоставщика); + + ШаблонОшибки = НСтр("ru = '%1 поставщика в строке %2 не равен этому значению в шапке.'"); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "Телефон", ШаблонОшибки); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "ИНН", ШаблонОшибки); + ШаблонОшибки = НСтр("ru = '%1 поставщика в строке %2 не равно этому значению в шапке.'"); + ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, "Наименование", ШаблонОшибки); + + КонецЕсли; +КонецПроцедуры + +// Выполняет проверку оплаты +// +// Параметры: +// Проверка - см. ПараметрыПроверки +// СуммыПозиций - см. ПараметрыСуммыПозиций +// СуммыОплат - см. ПараметрыСуммыОплат +Процедура ПроверитьСуммыОплат(Проверка, СуммыПозиций, СуммыОплат) + + Если СуммыПозиций.Общая > СуммыОплат.Общая Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Сумма товарных позиций больше суммы оплат'")); + ИначеЕсли СуммыОплат.Общая > СуммыПозиций.Общая Тогда + Если (СуммыОплат.Общая - СуммыОплат.Наличные) > СуммыПозиций.Общая Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Сумма безналичных оплат больше суммы товарных позиций'")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Выполняет проверку фактической оплаты +// +// Параметры: +// Проверка - см. ПараметрыПроверки +// СуммыПозиций - см. ПараметрыСуммыПозиций +// СуммыОплат - см. ПараметрыСуммыОплат +Процедура ПроверитьСуммуФактическихОплат(Проверка, СуммыПозиций, СуммыОплат) + + СуммаФактическихОплат = СуммыОплат.НаличныеБезСдачи + СуммыОплат.Электронно + СуммыОплат.ВстречноеПредоставление + - СуммыПозиций.ПолнаяОплата; + Если СуммаФактическихОплат < 0 Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Сумма по строкам с указанием признака полной оплаты меньше чем сумма самих оплат'")); + ИначеЕсли СуммаФактическихОплат = 0 Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Необходимо указать оплату'")); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПроцедурыИФункцииДляПриведенияКФормату + +Процедура ПривестиЕслиСпособРасчетаБезПередачиТовара(Позиция, ИсправленыОсновныеПараметры) + + ПризнакСпособаРасчета = Позиция.ПризнакСпособаРасчета; + Если ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаЧастичная + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ОплатаКредита + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.Аванс + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаПолная Тогда + Позиция.ЕдиницаИзмерения = "Платеж"; + Позиция.Количество = 1; + Позиция.Цена = Позиция.Сумма; + Позиция.ЦенаСоСкидками = Позиция.Сумма; + Позиция.СуммаСкидок = 0; + Позиция.ПризнакПредметаРасчета = Перечисления.ПризнакиПредметаРасчета.ПлатежВыплата; + ИсправленыОсновныеПараметры = Истина; + КонецЕсли; + +КонецПроцедуры + +Процедура ПривестиСтавкиНДС(Позиция) + + ПризнакСпособаРасчета = Позиция.ПризнакСпособаРасчета; + Если ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаЧастичная + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.Аванс + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаПолная Тогда + Если Позиция.СтавкаНДС = Неопределено Тогда + Позиция.СуммаНДС = 0; + ИначеЕсли Позиция.СтавкаНДС > 0 И Позиция.СтавкаНДС < 100 Тогда + Позиция.СтавкаНДС = 100 + Позиция.СтавкаНДС; + КонецЕсли; + ИначеЕсли ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ОплатаКредита Тогда + Позиция.СтавкаНДС = Неопределено; + Позиция.СуммаНДС = 0; + КонецЕсли; + +КонецПроцедуры + +// Приводит суммы позиций чека к сумме полной оплаты +// +// Параметры: +// ОсновныеПараметры - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// СуммыПозиций - см. ПараметрыСуммыПозиций +// СуммыОплат - см. ПараметрыСуммыОплат +// +Процедура ПривестиСуммыПозицийЧекаКСуммеТаблицыОплат(ОсновныеПараметры, СуммыПозиций, СуммыОплат) + + СуммаФактическихОплат = СуммыОплат.НаличныеБезСдачи + СуммыОплат.Электронно + СуммыОплат.ВстречноеПредоставление; + СуммаФактическихОплат = СуммаФактическихОплат - СуммыПозиций.ПолнаяОплата; + СуммаНеобходимойПолнойОплаты = СуммыПозиций.Общая - СуммыПозиций.ПередачаБезОплаты - СуммыПозиций.ПолнаяОплата; + + // Сумма всегда больше нулю, т.к. в чеке есть строки в частичной оплатой + Если СуммаФактическихОплат < СуммаНеобходимойПолнойОплаты Тогда + Коэффициент = СуммаФактическихОплат / СуммаНеобходимойПолнойОплаты; + МаксимальнаяСумма = 0; + РассчитаннаяСуммаЧека = 0; + ПозицияСМаксимальнойСуммой = Неопределено; + Для Каждого Позиция Из ОсновныеПараметры.ПозицииЧека Цикл + Если Позиция.Свойство("ФискальнаяСтрока") Тогда + ПризнакСпособаРасчета = Позиция.ПризнакСпособаРасчета; + Если ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаЧастичная + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ОплатаКредита Тогда + Если Позиция.Сумма > МаксимальнаяСумма Тогда + МаксимальнаяСумма = Позиция.Сумма; + ПозицияСМаксимальнойСуммой = Позиция; + КонецЕсли; + ПриведеннаяСумма = Окр(Позиция.Сумма * Коэффициент,2,1); + Позиция.Сумма = ПриведеннаяСумма; + Позиция.Цена = ПриведеннаяСумма; + Позиция.ЦенаСоСкидками = ПриведеннаяСумма; + РассчитаннаяСуммаЧека = РассчитаннаяСуммаЧека + ПриведеннаяСумма; + Если Позиция.СуммаНДС <> Неопределено Тогда + Позиция.СуммаНДС = Окр(Позиция.СуммаНДС * Коэффициент,2,1); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Иначе + Возврат; + КонецЕсли; + + Отклонение = СуммаФактическихОплат - РассчитаннаяСуммаЧека; + + Если Макс(Отклонение, -Отклонение) >= 0.01 Тогда + Позиция = ПозицияСМаксимальнойСуммой; + Сумма = Позиция.Сумма; + СуммаСОтклонением = Позиция.Сумма + Отклонение; + Позиция.Цена = СуммаСОтклонением; + Позиция.Сумма = СуммаСОтклонением; + Позиция.ЦенаСоСкидками = СуммаСОтклонением; + + Если Позиция.СуммаНДС <> Неопределено И Сумма > 0 Тогда + // Максимальная сумма не может быть равна или меньше нуля + // Определяем отклонение НДС + Позиция.СуммаНДС = Окр(СуммаСОтклонением * Позиция.СуммаНДС / Сумма, 2,1); + КонецЕсли; + КонецЕсли; + // Общие суммы НДС по ставкам пересчитывается далее по алгоритму. + + // ИсправитьТаблицуОплат + СуммаИсправленияОплат = СуммаНеобходимойПолнойОплаты - СуммаФактическихОплат; + Если СуммаИсправленияОплат > 0 Тогда + Для Каждого СтрокаОплат Из ОсновныеПараметры.ТаблицаОплат Цикл + ТипОплаты = СтрокаОплат.ТипОплаты; + Если ТипОплаты = Перечисления.ТипыОплатыККТ.Постоплата + Или ТипОплаты = Перечисления.ТипыОплатыККТ.Предоплата Тогда + + Если СуммаИсправленияОплат >= СтрокаОплат.Сумма Тогда + СуммаИсправленияОплат = СуммаИсправленияОплат - СтрокаОплат.Сумма; + СтрокаОплат.Сумма = 0; + Иначе + СуммаИсправленияОплат = 0; + СтрокаОплат.Сумма = СтрокаОплат.Сумма - СуммаИсправленияОплат; + КонецЕсли; + Если СуммаИсправленияОплат <= 0 Тогда + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КоличествоЭлементов = ОсновныеПараметры.ТаблицаОплат.Количество(); + Для Индекс = 1 По КоличествоЭлементов Цикл + Если ОсновныеПараметры.ТаблицаОплат[КоличествоЭлементов - Индекс].Сумма = 0 Тогда + ОсновныеПараметры.ТаблицаОплат.Удалить(КоличествоЭлементов - Индекс); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Функция выполняет разделение фискальной строки. +// +Процедура РазделитьФискальнуюСтроку(ТекущаяПозиция, НовыеПозицииЧека, РасчетнаяЦена, РазницаСумм) + + СтандартнаяОбработка = Истина; + ФорматноЛогическийКонтрольПереопределяемый.РазделитьФискальнуюСтроку(ТекущаяПозиция, НовыеПозицииЧека, РасчетнаяЦена, РазницаСумм, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + // Запоминаем начальные значения. + КоличествоНачальное = ТекущаяПозиция.Количество; + СуммаСкидокНачальная = ТекущаяПозиция.СуммаСкидок; + СуммаНДСНачальная = ТекущаяПозиция.СуммаНДС; // Рассчитывается формально, т.к. сумма НДС текущими драйверами игнорируется. + СуммаНачальная = ТекущаяПозиция.Сумма; + + // Если разница есть, то ее делим на копейку. + // Получаем количество, которое нужно переоценить. + КоличествоПереоценки = Окр(РазницаСумм / 0.01, 3, 1); + Если КоличествоПереоценки < 0 Тогда + КоличествоПереоценки = -КоличествоПереоценки; + КонецЕсли; + + // Из начального количества отнимаем количество переоценки. + // Получаем количество, которое остается по расчетной цене. + КоличествоРасчетное = ТекущаяПозиция.Количество - КоличествоПереоценки; + + // Цена переоценки во всех примерах отличается от расчетной на 1 копейку. + // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная. + ЦенаПереоценки = РасчетнаяЦена - Окр(РазницаСумм / КоличествоПереоценки, 2, 1); + + // Теперь считаются суммы, т.к. по ним выполняется анализ коэффициента для пересчета + СуммаПереоценки = Окр(КоличествоПереоценки * ЦенаПереоценки, 2, 1); + СуммаРасчетная = Окр(КоличествоРасчетное * РасчетнаяЦена, 2, 1); + + // Распределяем суммы скидок пропорционально количеству. + // Если суммы есть. А если их нет, то должно остаться Неопределено. + Если СуммаСкидокНачальная <> Неопределено Тогда + Если КоличествоПереоценки > КоличествоРасчетное Тогда + СуммаСкидокПереоценки = Окр(СуммаСкидокНачальная * КоличествоПереоценки / КоличествоНачальное, 2, 1); + СуммаСкидокРасчетная = СуммаСкидокНачальная - СуммаСкидокПереоценки; + Иначе + СуммаСкидокРасчетная = Окр(СуммаСкидокНачальная * КоличествоРасчетное / КоличествоНачальное, 2, 1); + СуммаСкидокПереоценки = СуммаСкидокНачальная - СуммаСкидокРасчетная; + КонецЕсли; + КонецЕсли; + + // А суммы распределяем НДС пропорционально суммам. + // Потому что распределение пропорционально количеству. + // Вызывает расхождения в некоторых критичных ситуациях. + // Если суммы есть. А если их нет, то должно остаться Неопределено. + Если СуммаНДСНачальная <> Неопределено Тогда + Если СуммаПереоценки > СуммаРасчетная Тогда + СуммаНДСПереоценки = Окр(СуммаНДСНачальная * СуммаПереоценки / СуммаНачальная, 2, 1); + СуммаНДСРасчетная = СуммаНДСНачальная - СуммаНДСПереоценки; + Иначе + СуммаНДСРасчетная = Окр(СуммаНДСНачальная * СуммаРасчетная / СуммаНачальная, 2, 1); + СуммаНДСПереоценки = СуммаНДСНачальная - СуммаНДСРасчетная; + КонецЕсли; + КонецЕсли; + + // Выводим вместо первоначальной строки две новых. + // Сначала с расчетной ценой и остатком количества. + // И суммой - произведение цены и количества. + НоваяПозиция = СкопироватьСтруктуру(ТекущаяПозиция); + НоваяПозиция.Количество = КоличествоРасчетное; + НоваяПозиция.ЦенаСоСкидками = РасчетнаяЦена; + НоваяПозиция.Сумма = СуммаРасчетная; + Если СуммаСкидокНачальная <> Неопределено Тогда + НоваяПозиция.СуммаСкидок = СуммаСкидокНачальная - СуммаСкидокПереоценки; + КонецЕсли; + Если СуммаНДСНачальная <> Неопределено Тогда + НоваяПозиция.СуммаНДС = СуммаНДСРасчетная; + КонецЕсли; + НовыеПозицииЧека.Добавить(НоваяПозиция); + + // Потом с переоцененной ценой и переоцененным количеством. + // И суммой - произведение цены и количества. + НоваяПозиция = СкопироватьСтруктуру(ТекущаяПозиция); + НоваяПозиция.Количество = КоличествоПереоценки; + НоваяПозиция.ЦенаСоСкидками = ЦенаПереоценки; + НоваяПозиция.Сумма = СуммаПереоценки; + Если СуммаСкидокНачальная <> Неопределено Тогда + НоваяПозиция.СуммаСкидок = СуммаСкидокПереоценки; + КонецЕсли; + Если СуммаНДСНачальная <> Неопределено Тогда + НоваяПозиция.СуммаНДС = СуммаНДСПереоценки; + КонецЕсли; + НовыеПозицииЧека.Добавить(НоваяПозиция); + +КонецПроцедуры + +Процедура ПривестиПозицииЧекаПоАлгоритмуРазделятьСтроки(ПозицииЧека, НовыеПозицииЧека, ДопустимоеРасхождение) + + Для Каждого ТекущаяПозиция Из ПозицииЧека Цикл + Если Не ТекущаяПозиция.Свойство("ФискальнаяСтрока") Тогда + НоваяПозиция = СкопироватьСтруктуру(ТекущаяПозиция); + НовыеПозицииЧека.Добавить(НоваяПозиция); + Продолжить; + КонецЕсли; + + Количество = ?(ТекущаяПозиция.Количество = 0, 1, ТекущаяПозиция.Количество); + Если Количество = 1 Тогда + НоваяПозиция = СкопироватьСтруктуру(ТекущаяПозиция); + НоваяПозиция.ЦенаСоСкидками = НоваяПозиция.Сумма; + НовыеПозицииЧека.Добавить(НоваяПозиция); + Продолжить; + КонецЕсли; + НоваяСуммаБезОкругления = Количество * ТекущаяПозиция.ЦенаСоСкидками; + Сумма = ТекущаяПозиция.Сумма; + РазницаСуммДляПроверки = НоваяСуммаБезОкругления - Сумма; + // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество. + РасчетнаяЦена = Окр(Сумма / Количество, 2, 1); + // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков. + // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму. + НоваяСумма = Окр(Количество * РасчетнаяЦена, 2, 1); + // Вычисляем разницу между промежуточной и входящей суммой. + РазницаСумм = НоваяСумма - Сумма; + Если Окр(ТекущаяПозиция.ЦенаСоСкидками * Количество, 2, 1) = ТекущаяПозиция.Сумма Тогда + // Цену не пересчитываем. + НоваяПозиция = СкопироватьСтруктуру(ТекущаяПозиция); + НовыеПозицииЧека.Добавить(НоваяПозиция); + Продолжить; + ИначеЕсли РазницаСуммДляПроверки >= -ДопустимоеРасхождение И РазницаСуммДляПроверки <= ДопустимоеРасхождение Тогда + // Если разница допустима - оставляем одну строку. + // Если разницы нет - оставляем одну строку. + НоваяПозиция = СкопироватьСтруктуру(ТекущаяПозиция); + // Но подменяем расчетную цену. + НоваяПозиция.ЦенаСоСкидками = РасчетнаяЦена; + НовыеПозицииЧека.Добавить(НоваяПозиция); + Продолжить; + ИначеЕсли РазницаСумм = 0 Тогда + // Если разница неокругленная есть, а округленной нет. + // То передаем в ККТ как есть - оставляем одну строку. + НоваяПозиция = СкопироватьСтруктуру(ТекущаяПозиция); + // Но подменяем расчетную цену. + НоваяПозиция.ЦенаСоСкидками = РасчетнаяЦена; + НовыеПозицииЧека.Добавить(НоваяПозиция); + Продолжить; + Иначе + // Разделяем строку. + РазделитьФискальнуюСтроку(ТекущаяПозиция, НовыеПозицииЧека, РасчетнаяЦена, РазницаСумм); + КонецЕсли; + + КонецЦикла; +КонецПроцедуры + +Процедура ПривестиПозицииЧекаПоАлгоритмуЗачитыватьСуммы(ПозицииЧека, НовыеПозицииЧека, ДопустимоеРасхождение) + + СтрокиПоложительные = Новый Массив; + СтрокиОтрицательные = Новый Массив; + СтрокаПоследнегоТовара = 0; + + Для Каждого ТекущаяПозиция Из ПозицииЧека Цикл + Если Не ТекущаяПозиция.Свойство("ФискальнаяСтрока") Тогда + НоваяПозиция = СкопироватьСтруктуру(ТекущаяПозиция); + Если СтрокаПоследнегоТовара = 0 Тогда + НоваяПозиция.Вставить("СтрокаПоследнегоТовара", 0); + Иначе + НоваяПозиция.Вставить("СтрокаПоследнегоТовара", 99999); + КонецЕсли; + НовыеПозицииЧека.Добавить(НоваяПозиция); + Продолжить; + КонецЕсли; + + СтрокаПоследнегоТовара = ТекущаяПозиция.НомерСтрокиТовара; + Количество = ?(ТекущаяПозиция.Количество = 0, 1, ТекущаяПозиция.Количество); + Если Количество = 1 Тогда + НоваяПозиция = СкопироватьСтруктуру(ТекущаяПозиция); + НоваяПозиция.ЦенаСоСкидками = НоваяПозиция.Сумма; + НоваяПозиция.Вставить("СтрокаПоследнегоТовара", СтрокаПоследнегоТовара); + НовыеПозицииЧека.Добавить(НоваяПозиция); + Продолжить; + КонецЕсли; + + НоваяСуммаБезОкругления = Количество * ТекущаяПозиция.ЦенаСоСкидками; + Сумма = ТекущаяПозиция.Сумма; + РазницаСуммДляПроверки = НоваяСуммаБезОкругления - Сумма; + // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество. + РасчетнаяЦена = Окр(Сумма / Количество, 2, 1); + // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков. + // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму. + НоваяСумма = Окр(Количество * РасчетнаяЦена, 2, 1); + // Вычисляем разницу между промежуточной и входящей суммой. + РазницаСумм = НоваяСумма - Сумма; + + НоваяПозиция = СкопироватьСтруктуру(ТекущаяПозиция); + НоваяПозиция.Вставить("РасчетнаяЦена", РасчетнаяЦена); + НоваяПозиция.Вставить("РазницаСумм", РазницаСумм); + НоваяПозиция.Вставить("РазницаСуммДляПроверки", РазницаСуммДляПроверки); + НоваяПозиция.Вставить("СтрокаПоследнегоТовара", СтрокаПоследнегоТовара); + Если Окр(ТекущаяПозиция.ЦенаСоСкидками * Количество, 2, 1) = ТекущаяПозиция.Сумма Тогда + // Строку оставляем в первоначальном виде. + НовыеПозицииЧека.Добавить(НоваяПозиция); + Продолжить; + ИначеЕсли РазницаСуммДляПроверки >= -ДопустимоеРасхождение И РазницаСуммДляПроверки <= ДопустимоеРасхождение Тогда + // Если разница допустима - оставляем одну строку. + // Но подменяем расчетную цену. + НоваяПозиция.ЦенаСоСкидками = РасчетнаяЦена; + НовыеПозицииЧека.Добавить(НоваяПозиция); + Продолжить; + ИначеЕсли РазницаСумм = 0 Тогда + // Если разница неокругленная есть, а округленной нет. + // То передаем в ККТ как есть - оставляем одну строку. + // Но подменяем расчетную цену. + НоваяПозиция.ЦенаСоСкидками = РасчетнаяЦена; + НовыеПозицииЧека.Добавить(НоваяПозиция); + Продолжить; + ИначеЕсли РазницаСумм > 0 Тогда + // Если разница есть, то строку с положительной разницей добавляем в массив положительных строк. + СтрокиПоложительные.Добавить(НоваяПозиция); + Иначе + // Если разница есть, то строку с отрицательной разницей добавляем в массив отрицательных строк. + НоваяПозиция.РазницаСумм = -РазницаСумм; + СтрокиОтрицательные.Добавить(НоваяПозиция); + КонецЕсли; + КонецЦикла; + + ИндексПоложительных = СтрокиПоложительные.ВГраница(); + ИндексОтрицательных = СтрокиОтрицательные.ВГраница(); + Если ИндексПоложительных >= 0 И ИндексОтрицательных >= 0 Тогда + // В массиве положительных и отрицательных. + // Находим строки с совпадающей по модулю сумой расхождения. + // Строки идут одна к одному. + СдвигПоложительного = 0; + Для СчетчикПоложительный = 0 По ИндексПоложительных Цикл + ПоложительнаяСтрока = СтрокиПоложительные[СчетчикПоложительный - СдвигПоложительного]; + СдвигОтрицательного = 0; + ИндексОтрицательных = СтрокиОтрицательные.ВГраница(); + Для СчетчикОтрицательный = 0 По ИндексОтрицательных Цикл + ОтрицательнаяСтрока = СтрокиОтрицательные[СчетчикОтрицательный - СдвигОтрицательного]; + Если ПоложительнаяСтрока.РазницаСумм = ОтрицательнаяСтрока.РазницаСумм Тогда + // Перекрываем разницу по совпадающим строкам из одного массива суммами другого. + // Увеличивая сумму в положительной строке и уменьшая в отрицательной. + ПоложительнаяСтрока.Сумма = ПоложительнаяСтрока.Сумма + ПоложительнаяСтрока.РазницаСумм; + ОтрицательнаяСтрока.Сумма = ОтрицательнаяСтрока.Сумма - ПоложительнаяСтрока.РазницаСумм; + + // Перекрытые строки переносим в массив для печати и удаляем из массивов. + НоваяПозиция = СкопироватьСтруктуру(ПоложительнаяСтрока); + НовыеПозицииЧека.Добавить(НоваяПозиция); + + НоваяПозиция = СкопироватьСтруктуру(ОтрицательнаяСтрока); + НовыеПозицииЧека.Добавить(НоваяПозиция); + + СтрокиПоложительные.Удалить(СчетчикПоложительный - СдвигПоложительного); + СтрокиОтрицательные.Удалить(СчетчикОтрицательный - СдвигОтрицательного); + + СдвигПоложительного = СдвигПоложительного + 1; + СдвигОтрицательного = СдвигОтрицательного + 1; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ИндексПоложительных < 0 Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + ИндексПоложительных = СтрокиПоложительные.ВГраница(); + ИндексОтрицательных = СтрокиОтрицательные.ВГраница(); + Если ИндексПоложительных >= 0 И ИндексОтрицательных >= 0 Тогда + // Обходим строки положительного массива. + // Увеличивая сумму в каждой из них на сумму расхождения. + // Которую распределяем по строкам с отрицательным расхождением, уменьшая сумму там. + СдвигПоложительного = 0; + Для СчетчикПоложительный = 0 По ИндексПоложительных Цикл + ПоложительнаяСтрока = СтрокиПоложительные[СчетчикПоложительный - СдвигПоложительного]; + Если ПоложительнаяСтрока.РазницаСумм <= ДопустимоеРасхождение Тогда + // Разница сумм в строке всегда по модулю. + Продолжить; + КонецЕсли; + СдвигОтрицательного = 0; + ИндексОтрицательных = СтрокиОтрицательные.ВГраница(); + Для СчетчикОтрицательный = 0 По ИндексОтрицательных Цикл + ОтрицательнаяСтрока = СтрокиОтрицательные[СчетчикОтрицательный - СдвигОтрицательного]; + Если ОтрицательнаяСтрока.РазницаСумм <= ДопустимоеРасхождение + И ОтрицательнаяСтрока.РазницаСумм <> ПоложительнаяСтрока.РазницаСумм Тогда + // Разница сумм в строке всегда по модулю. + Продолжить; + КонецЕсли; + // Перекрываем разницу по совпадающим строкам из одного массива суммами другого. + // Увеличивая сумму в положительной строке и уменьшая в отрицательной. + + Если ПоложительнаяСтрока.РазницаСумм > ОтрицательнаяСтрока.РазницаСумм Тогда + ПоложительнаяСтрока.Сумма = ПоложительнаяСтрока.Сумма + ОтрицательнаяСтрока.РазницаСумм; + ОтрицательнаяСтрока.Сумма = ОтрицательнаяСтрока.Сумма - ОтрицательнаяСтрока.РазницаСумм; + // Уменьшаем остаток разницы положительной строки + ПоложительнаяСтрока.РазницаСумм = ПоложительнаяСтрока.РазницаСумм - ОтрицательнаяСтрока.РазницаСумм; + // Перекрытую строку переносим в массив для печати. + + НоваяПозиция = СкопироватьСтруктуру(ОтрицательнаяСтрока); + НовыеПозицииЧека.Добавить(НоваяПозиция); + + // И удаляем из массивов. + СтрокиОтрицательные.Удалить(СчетчикОтрицательный - СдвигОтрицательного); + // Сдвигаем отрицательные счетчики + СдвигОтрицательного = СдвигОтрицательного + 1; + + Иначе + + НадоУдалятьОтрицательные = ПоложительнаяСтрока.РазницаСумм = ОтрицательнаяСтрока.РазницаСумм; + + ПоложительнаяСтрока.Сумма = ПоложительнаяСтрока.Сумма + ПоложительнаяСтрока.РазницаСумм; + ОтрицательнаяСтрока.Сумма = ОтрицательнаяСтрока.Сумма - ПоложительнаяСтрока.РазницаСумм; + // Уменьшаем остаток разницы положительной строки + ОтрицательнаяСтрока.РазницаСумм = ОтрицательнаяСтрока.РазницаСумм - ПоложительнаяСтрока.РазницаСумм; + // Перекрытую строку переносим в массив для печати. + + НоваяПозиция = СкопироватьСтруктуру(ПоложительнаяСтрока); + НовыеПозицииЧека.Добавить(НоваяПозиция); + Если НадоУдалятьОтрицательные Тогда + НоваяПозиция = СкопироватьСтруктуру(ОтрицательнаяСтрока); + НовыеПозицииЧека.Добавить(НоваяПозиция); + КонецЕсли; + + // И удаляем из массивов. + СтрокиПоложительные.Удалить(СчетчикПоложительный - СдвигПоложительного); + // Сдвигаем положительные счетчики + СдвигПоложительного = СдвигПоложительного + 1; + + Если НадоУдалятьОтрицательные Тогда + // И удаляем из массивов. + СтрокиОтрицательные.Удалить(СчетчикОтрицательный - СдвигОтрицательного); + // Сдвигаем отрицательные счетчики + СдвигОтрицательного = СдвигОтрицательного + 1; + КонецЕсли; + + // Отрицательный цикл прерываем. + // Ибо закрывать текущую строку придется следующей положительной. + // Если она есть. + Прервать; + КонецЕсли; + КонецЦикла; + + Если ИндексПоложительных < 0 Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + ИндексПоложительных = СтрокиПоложительные.ВГраница(); + // Оставшиеся строки обоих массивов разделяются. + // Каждая на две по первому алгоритму и добавляются в массив для печати. + Если ИндексПоложительных >= 0 Тогда + Для Каждого ТекущаяПозиция Из СтрокиПоложительные Цикл + // Еще раз пересчитываем разницу + // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество. + РасчетнаяЦена = Окр(ТекущаяПозиция.Сумма / ТекущаяПозиция.Количество, 2, 1); + // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков. + // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму. + НоваяСумма = Окр(ТекущаяПозиция.Количество * РасчетнаяЦена, 2, 1); + // Вычисляем разницу между промежуточной и входящей суммой. + РазницаСумм = НоваяСумма - ТекущаяПозиция.Сумма; + Если ТекущаяПозиция.РазницаСуммДляПроверки >= -ДопустимоеРасхождение И ТекущаяПозиция.РазницаСуммДляПроверки <= ДопустимоеРасхождение Тогда + // Если разница допустима - оставляем одну строку. + НовыеПозицииЧека.Добавить(ТекущаяПозиция); + ИначеЕсли РазницаСумм = 0 Тогда + // Если разница неокругленная есть, а округленной нет. + // То передаем в ККТ как есть - оставляем одну строку. + НовыеПозицииЧека.Добавить(ТекущаяПозиция); + Иначе + // Разделяем строку. + РазделитьФискальнуюСтроку(ТекущаяПозиция, НовыеПозицииЧека, РасчетнаяЦена, РазницаСумм); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ИндексОтрицательных = СтрокиОтрицательные.ВГраница(); + Если ИндексОтрицательных >= 0 Тогда + Для Каждого ТекущаяПозиция Из СтрокиОтрицательные Цикл + // Еще раз пересчитываем разницу + // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество. + РасчетнаяЦена = Окр(ТекущаяПозиция.Сумма / ТекущаяПозиция.Количество, 2, 1); + // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков. + // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму. + НоваяСумма = Окр(ТекущаяПозиция.Количество * РасчетнаяЦена, 2, 1); + // Вычисляем разницу между промежуточной и входящей суммой. + РазницаСумм = НоваяСумма - ТекущаяПозиция.Сумма; + Если ТекущаяПозиция.РазницаСуммДляПроверки >= -ДопустимоеРасхождение И ТекущаяПозиция.РазницаСуммДляПроверки <= ДопустимоеРасхождение Тогда + // Если разница допустима - оставляем одну строку. + НовыеПозицииЧека.Добавить(ТекущаяПозиция); + ИначеЕсли РазницаСумм = 0 Тогда + // Если разница неокругленная есть, а округленной нет. + // То передаем в ККТ как есть - оставляем одну строку. + НовыеПозицииЧека.Добавить(ТекущаяПозиция); + Иначе + // Разделяем строку. + РазделитьФискальнуюСтроку(ТекущаяПозиция, НовыеПозицииЧека, РасчетнаяЦена, РазницаСумм); + КонецЕсли; + КонецЦикла; + КонецЕсли; + // Массив для печати сортируется по первоначальному номеру строки. + СортироватьМассивФискальныхСтрок(НовыеПозицииЧека); + +КонецПроцедуры + +Процедура ПривестиАдресИМестоРасчетов(ДанныеЧека, ПараметрыРегистрации) + + Если ПараметрыРегистрации = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДанныеЧека.АдресРасчетов) Тогда + ДанныеЧека.АдресРасчетов = ПараметрыРегистрации.АдресПроведенияРасчетов; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДанныеЧека.МестоРасчетов) Тогда + ДанныеЧека.МестоРасчетов = ПараметрыРегистрации.МестоПроведенияРасчетов; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции + +// Увеличивает номер позиции в структуре проверки +// +// Параметры: +// Проверка - см. ПараметрыПроверки +// +Процедура УвеличитьНомерПозиции(Проверка) + Проверка.НомерПозиции = Проверка.НомерПозиции + 1; +КонецПроцедуры + +// Формирует текст ошибки подставляя имя реквизита и номер позиции +// +// Параметры: +// ШаблонОшибки - Строка +// ИмяРеквизита - Строка +// НомерПозиции - Строка +// +Функция ТекстОшибки(ШаблонОшибки, Знач ИмяРеквизита, Знач НомерПозиции) + + НомерПозиции = Формат(НомерПозиции, "ЧГ=0"); + Ошибка = СтрЗаменить(ШаблонОшибки,"%1", ИмяРеквизита); + Ошибка = СтрЗаменить(Ошибка,"%2", НомерПозиции); + Возврат Ошибка; + +КонецФункции + +#КонецОбласти + +#Область ПроцедурыИФункцииДляПроверки + +// Выполняет проверку на соответствие формата фискальных документов +// +// Параметры: +// Проверка - см. ПараметрыПроверки +// ВерсииФФД - Неопределено, Строка - версия на которую нужно проверить, может быть указано несколько если задано Неопределено, тогда любая версия ФФД +// +Функция ВерсияФФД(Проверка, ВерсииФФД = Неопределено) + + Если ВерсииФФД = Неопределено Тогда + Возврат Истина; + КонецЕсли; + + Возврат СтрНайти(ВерсииФФД, Проверка.ВерсияФФД)>0; + +КонецФункции + +Функция ЕстьРеквизит(Проверка, Данные, Знач ИмяРеквизита, Значение) + + Если Данные.Свойство(ИмяРеквизита, Значение) Тогда + Возврат Истина; + КонецЕсли; + + Проверка.Ошибки.Добавить(СтрШаблон(НСтр("ru = 'Реквизит %1 отсутствует.'"), ИмяРеквизита)); + Возврат Ложь; + +КонецФункции + +Функция ЗаполненРеквизит(Проверка, Данные, Знач ИмяРеквизита) + + Значение = Неопределено; + Если ЕстьРеквизит(Проверка, Данные, ИмяРеквизита, Значение) Тогда + Возврат ЗначениеЗаполнено(Значение); + КонецЕсли; + Возврат Ложь; + +КонецФункции + +Процедура ПроверитьРеквизит(Проверка, Данные, Знач ИмяРеквизита = Неопределено, Знач ВерсииФФД = Неопределено, Знач ШаблонОшибки = Неопределено) + + Если Не ВерсияФФД(Проверка, ВерсииФФД) Тогда + Возврат; + КонецЕсли; + + Значение = Неопределено; + Если ЕстьРеквизит(Проверка, Данные, ИмяРеквизита, Значение) Тогда + Если Не ЗначениеЗаполнено(Значение) Тогда + Если ЗначениеЗаполнено(Проверка.НомерПозиции) Тогда + ШаблонОшибки = ?(ШаблонОшибки = Неопределено, НСтр("ru = '%1 не заполнен в строке №%2.'"), ШаблонОшибки); + Иначе + ШаблонОшибки = ?(ШаблонОшибки = Неопределено, НСтр("ru = '%1 не заполнен.'"), ШаблонОшибки); + КонецЕсли; + Идентификатор = ОбщегоНазначенияБПОКлиентСервер.ПредставлениеИдентификатора(ИмяРеквизита); + Идентификатор = ВРег(Лев(Идентификатор,1)) + Сред(Идентификатор,2); + Проверка.Ошибки.Добавить(ТекстОшибки(ШаблонОшибки, Идентификатор, Проверка.НомерПозиции)); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьРеквизитВМассивеДанных(Проверка, МассивДанных, Знач ИмяРеквизита = Неопределено, Знач ВерсииФФД = Неопределено, Знач ШаблонОшибки = Неопределено) + + РеквизитЗаполнен = Ложь; + Для Каждого Данные Из МассивДанных Цикл + Значение = Неопределено; + Если ЕстьРеквизит(Проверка, Данные, ИмяРеквизита, Значение) И ЗначениеЗаполнено(Значение) Тогда + РеквизитЗаполнен = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если Не РеквизитЗаполнен Тогда + ШаблонОшибки = ?(ШаблонОшибки = Неопределено, + НСтр("ru = 'Реквизит %1 не заполнен в шапке или в строке %2.'"), + ШаблонОшибки); + Проверка.Ошибки.Добавить(ТекстОшибки(ШаблонОшибки, ИмяРеквизита, Проверка.НомерПозиции)); + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьСовпадениеРеквизитаВМассивеДанных(Проверка, МассивДанных, Знач ИмяРеквизита = Неопределено, Знач ШаблонОшибки = Неопределено) + + РеквизитСовпадает = Истина; + ЗначениеРеквизита = Неопределено; + Для Каждого Данные Из МассивДанных Цикл + Значение = Неопределено; + Если ЕстьРеквизит(Проверка, Данные, ИмяРеквизита, Значение) И ЗначениеЗаполнено(Значение) Тогда + Если ЗначениеРеквизита = Неопределено Тогда + ЗначениеРеквизита = Значение; + ИначеЕсли ЗначениеРеквизита <> Значение Тогда + РеквизитСовпадает = Ложь; + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если Не РеквизитСовпадает Тогда + ШаблонОшибки = ?(ШаблонОшибки = Неопределено, + НСтр("ru = 'Значение реквизита %1 в строке %2 и шапке неравны.'"), + ШаблонОшибки); + Проверка.Ошибки.Добавить(ТекстОшибки(ШаблонОшибки, ИмяРеквизита, Проверка.НомерПозиции)); + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьРеквизитИНН(Проверка, Данные, Знач ИмяРеквизита) + + Значение = Неопределено; + Если ЕстьРеквизит(Проверка, Данные, ИмяРеквизита, Значение) Тогда + ОписаниеОшибки = ""; + Если ЗначениеЗаполнено(Значение) + И НЕ ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ИННСоответствуетТребованиям(Значение, Ложь, ОписаниеОшибки) Тогда + Проверка.Ошибки.Добавить(СтрШаблон(НСтр("ru = 'ИНН (%1) некорректен (%2)'"), ИмяРеквизита, ОписаниеОшибки)); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьДлинуРеквизита(Проверка, Данные, Знач ИмяРеквизита, Длина) + + Ошибки = Проверка.Ошибки; + Значение = Неопределено; + Если ЕстьРеквизит(Проверка, Данные, ИмяРеквизита, Значение) Тогда + Если ЗначениеЗаполнено(Значение) И СтрДлина(Значение) > Длина Тогда + Ошибки.Добавить(СтрШаблон(НСтр("ru = 'Длинна реквизита (%1) превышает %2 символа'"), ИмяРеквизита, Длина)); + КонецЕсли; + КонецЕсли; + + +КонецПроцедуры + +// Возвращает структуру сумм позиций чека +// +// Возвращаемое значение: +// Структура +Функция ПараметрыСуммыПозиций() + + Структура = Новый Структура(); + Структура.Вставить("Общая", 0); + Структура.Вставить("ПолнаяОплата", 0); + Структура.Вставить("ПередачаБезОплаты", 0); + Возврат Структура; + +КонецФункции + +Функция ПараметрыСуммыОплат() + + Структура = Новый Структура(); + Структура.Вставить("Общая", 0); + Структура.Вставить("Наличные", 0); + Структура.Вставить("НаличныеБезСдачи", 0); + Структура.Вставить("Электронно", 0); + Структура.Вставить("ВстречноеПредоставление", 0); + Структура.Вставить("Предоплата", 0); + Структура.Вставить("Постоплата", 0); + Возврат Структура; + +КонецФункции + +// Вычисляет суммы позиций чека по позиции +// +// Параметры: +// СуммыПозицийЧека - см. ПараметрыСуммыПозицийЧека +// Позиция - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека +// +Процедура ВычислитьСуммыПозиций(СуммыПозицийЧека, Позиция) + + ПризнакСпособаРасчета = Позиция.ПризнакСпособаРасчета; + Если ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.Аванс + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаПолная + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПередачаСПолнойОплатой Тогда + СуммыПозицийЧека.ПолнаяОплата = СуммыПозицийЧека.ПолнаяОплата + Позиция.Сумма; + ИначеЕсли ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПередачаБезОплаты Тогда + СуммыПозицийЧека.ПередачаБезОплаты = СуммыПозицийЧека.ПередачаБезОплаты + Позиция.Сумма; + КонецЕсли; + СуммыПозицийЧека.Общая = СуммыПозицийЧека.Общая + Позиция.Сумма; + +КонецПроцедуры + +Процедура ВычислитьСуммыОплат(СуммыОплат, СтрокаОплат) + + Если СтрокаОплат.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные") Тогда + СуммыОплат.Наличные = СуммыОплат.Наличные + СтрокаОплат.Сумма; + ИначеЕсли СтрокаОплат.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно") Тогда + СуммыОплат.Электронно = СуммыОплат.Электронно + СтрокаОплат.Сумма; + ИначеЕсли СтрокаОплат.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.ВстречноеПредоставление") Тогда + СуммыОплат.ВстречноеПредоставление = СуммыОплат.ВстречноеПредоставление + СтрокаОплат.Сумма; + ИначеЕсли СтрокаОплат.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Предоплата") Тогда + СуммыОплат.Предоплата = СуммыОплат.Предоплата + СтрокаОплат.Сумма; + ИначеЕсли СтрокаОплат.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Постоплата") Тогда + СуммыОплат.Постоплата = СуммыОплат.Постоплата + СтрокаОплат.Сумма; + КонецЕсли; + СуммыОплат.Общая = СуммыОплат.Общая + СтрокаОплат.Сумма; + +КонецПроцедуры + +Процедура ВычислитьСуммуНаличныеБезСдачи(СуммыПозиций, СуммыОплат) + + СуммыОплат.НаличныеБезСдачи = СуммыОплат.Наличные; + + // Проверяем что сумма наличные указана со сдачей. + Если СуммыОплат.Общая > СуммыПозиций.Общая И СуммыОплат.Наличные > 0 Тогда + НаличныеСдача = СуммыОплат.Общая - СуммыПозиций.Общая; + Если СуммыОплат.Наличные > НаличныеСдача Тогда + СуммыОплат.НаличныеБезСдачи = СуммыОплат.Наличные - НаличныеСдача; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПреобразоватьСистемуНалогообложения(Проверка, Данные) + + ИспользуетсяФН36 = Проверка.ИспользуетсяФН36; + // Проверка системы налогообложения + Если Проверка.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ Тогда + // Пользователи, переходящие с 01.01.2021 с ЕНВД на ОСН могут не менять систему налогообложения + // в настройках кассы, если используют фискальный накопитель со сроком действия 36 мес. + // Подробнее см. Письмо ФНС России от 03.12.2020 № АБ-4-20/19907@. + Если ИспользуетсяФН36 И Данные.СистемаНалогообложения = Перечисления.ТипыСистемНалогообложенияККТ.ОСН Тогда + // Если в фискализируемом в чеке приходит – ОСН и для ККТ установлена галка «Используется ФН 36 мес.(ЕНВД)» меняем ОСН на ЕНВД. + Данные.СистемаНалогообложения = Перечисления.ТипыСистемНалогообложенияККТ.ЕНВД; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПреобразоватьПризнакПредметаРасчета(Проверка, Данные) + + Если Не ВерсияФФД(Проверка, "1.2") Тогда + // Значения доступные только в ФФД 1.2 преобразуем в значения доступные в ФФД 1.1, 1.05 + ПризнакПредметаРасчета = Данные.ПризнакПредметаРасчета; + Если ПризнакПредметаРасчета = Перечисления.ПризнакиПредметаРасчета.ПодакцизныйТоварМаркируемыйСИНеИмеющийКМ + Или ПризнакПредметаРасчета = Перечисления.ПризнакиПредметаРасчета.ПодакцизныйТоварМаркируемыйСИИмеющийКМ Тогда + Данные.ПризнакПредметаРасчета = Перечисления.ПризнакиПредметаРасчета.ПодакцизныйТовар; + ИначеЕсли ПризнакПредметаРасчета = Перечисления.ПризнакиПредметаРасчета.ТоварМаркируемыйСИНеИмеющийКМ + Или ПризнакПредметаРасчета = Перечисления.ПризнакиПредметаРасчета.ТоварМаркируемыйСИИмеющийКМ Тогда + Данные.ПризнакПредметаРасчета = Перечисления.ПризнакиПредметаРасчета.Товар; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ФорматноЛогическийКонтрольВызовСервера.xml b/CommonModules/ФорматноЛогическийКонтрольВызовСервера.xml new file mode 100644 index 0000000..d996e7b --- /dev/null +++ b/CommonModules/ФорматноЛогическийКонтрольВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ФорматноЛогическийКонтрольВызовСервера + + + ru + Форматно логический контроль вызов сервера + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ФорматноЛогическийКонтрольВызовСервера/Ext/Module.bsl b/CommonModules/ФорматноЛогическийКонтрольВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..0035e0b --- /dev/null +++ b/CommonModules/ФорматноЛогическийКонтрольВызовСервера/Ext/Module.bsl @@ -0,0 +1,100 @@ + +#Область ПрограммныйИнтерфейс + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: следует использовать ФорматноЛогическийКонтроль.ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов. +// Выполняет проверку обязательности заполняет тэгов +// +// Параметры: +// Параметры - Структура - Структура анализируемых параметров. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Устройство, фискализирующее чек +// ОписаниеОшибки - Строка - описание ошибки для возврата в случае нахождения ошибки +// +// Возвращаемое значение: +// Булево - Истина когда обязательные данные консистентны +Функция ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов(Параметры, ИдентификаторУстройства, ОписаниеОшибки) Экспорт + + Возврат ФорматноЛогическийКонтроль.ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов(Параметры, ИдентификаторУстройства, ОписаниеОшибки); + +КонецФункции + +// Устарела: следует использовать ФорматноЛогическийКонтроль.СтруктураДанныхФорматноЛогическогоКонтроля. +// Структура данных форматно-логического контроля +// +// Параметры: +// ПодключаемоеОборудование - СправочникСсылка.ПодключаемоеОборудование - Устройство, фискализирующее чек +// +// Возвращаемое значение: +// Структура - Структура данных форматно логического контроля: +// * СпособФорматноЛогическогоКонтроля - Неопределено - +// * ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число - +// * ФорматФД - Строка - +// * ФорматФД - Строка, Произвольный - +// +Функция СтруктураДанныхФорматноЛогическогоКонтроля(ПодключаемоеОборудование) Экспорт + + Возврат ФорматноЛогическийКонтроль.СтруктураДанныхФорматноЛогическогоКонтроля(ПодключаемоеОборудование); + +КонецФункции + +// Устарела: следует использовать ФорматноЛогическийКонтроль.ПривестиДанныеКТребуемомуФормату. +// Процедура приводит к формату согласованному с ФНС. +// Для старта преобразования данных нужно. +// +// Параметры: +// ОсновныеПараметры - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// Отказ - Булево +// ОписаниеОшибки - Строка +// ИсправленыОсновныеПараметры - Булево +// +Процедура ПривестиДанныеКТребуемомуФормату(ОсновныеПараметры, Отказ, ОписаниеОшибки, ИсправленыОсновныеПараметры) Экспорт + + ФорматноЛогическийКонтроль.ПривестиДанныеКТребуемомуФормату(ОсновныеПараметры, ИсправленыОсновныеПараметры); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Функция выполняет проверку сумм фискальных строк, +// осуществляя форматно-логический контроль чека. +// Функция переопределяется методом ФорматноЛогическийКонтрольПереопределяемый.ПровестиФорматноЛогическийКонтроль. +// +// Параметры: +// ОбщиеПараметры - Структура - Полученная ранее методом ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека, +// и заполненная данными чека. +// Содержит параметры для контроля: +// СпособФорматноЛогическогоКонтроля - ПеречислениеСсылка.СпособыФорматноЛогическогоКонтроля - если не заполнена, +// то контроль не выполняется, +// ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число - по умолчанию установленное 54-ФЗ отклонение - 0.01. +// +// ПодключаемоеОборудование - СправочникСсылка.ПодключаемоеОборудование - Не обязательный +// Если заполнено оборудование и не заполнен способ контроля в общих параметрах, +// то способ контроля и допустимое расхождение получаются из подключаемого оборудования. +// +Процедура ПровестиФорматноЛогическийКонтроль(ОбщиеПараметры, ПодключаемоеОборудование = Неопределено) Экспорт + + ФорматноЛогическийКонтроль.ПровестиФорматноЛогическийКонтроль(ОбщиеПараметры, ПодключаемоеОборудование); + +КонецПроцедуры + +// Функция выполняет проверку сумм фискальных строк, +// осуществляя форматно-логический контроль чека. +// +// Параметры: +// ОбщиеПараметры - Структура +// +// Возвращаемое значение: +// Булево +// +Функция НуженФорматноЛогическийКонтроль(ОбщиеПараметры) Экспорт + + Возврат ФорматноЛогическийКонтроль.НуженФорматноЛогическийКонтроль(ОбщиеПараметры); + +КонецФункции + +#КонецОбласти diff --git a/CommonModules/ФорматноЛогическийКонтрольКлиентСервер.xml b/CommonModules/ФорматноЛогическийКонтрольКлиентСервер.xml new file mode 100644 index 0000000..28194b8 --- /dev/null +++ b/CommonModules/ФорматноЛогическийКонтрольКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + ФорматноЛогическийКонтрольКлиентСервер + + + ru + Форматно логический контроль клиент сервер + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ФорматноЛогическийКонтрольКлиентСервер/Ext/Module.bsl b/CommonModules/ФорматноЛогическийКонтрольКлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..d6834b5 --- /dev/null +++ b/CommonModules/ФорматноЛогическийКонтрольКлиентСервер/Ext/Module.bsl @@ -0,0 +1,77 @@ + +#Область ПрограммныйИнтерфейс + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: следует использовать ФорматноЛогическийКонтроль.ПровестиФорматноЛогическийКонтроль. +// Функция выполняет проверку сумм фискальных строк, +// осуществляя форматно-логический контроль чека. +// Функция переопределяется методом ФорматноЛогическийКонтрольПереопределяемый.ПровестиФорматноЛогическийКонтроль. +// +// Параметры: +// ОбщиеПараметры - Структура - Полученная ранее методом ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека, +// и заполненная данными чека. +// Содержит параметры для контроля: +// СпособФорматноЛогическогоКонтроля - ПеречислениеСсылка.СпособыФорматноЛогическогоКонтроля - если не заполнена, +// то контроль не выполняется, +// ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число - по умолчанию установленное 54-ФЗ отклонение - 0.01. +// +// ПодключаемоеОборудование - СправочникСсылка.ПодключаемоеОборудование - Не обязательный +// Если заполнено оборудование и не заполнен способ контроля в общих параметрах, +// то способ контроля и допустимое расхождение получаются из подключаемого оборудования. +// +Процедура ПровестиФорматноЛогическийКонтроль(ОбщиеПараметры, ПодключаемоеОборудование = Неопределено) Экспорт + + ФорматноЛогическийКонтрольВызовСервера.ПровестиФорматноЛогическийКонтроль(ОбщиеПараметры, ПодключаемоеОборудование); + +КонецПроцедуры + +// Устарела: следует использовать ФорматноЛогическийКонтроль.НуженФорматноЛогическийКонтроль. +// Функция выполняет проверку сумм фискальных строк, +// осуществляя форматно-логический контроль чека. +// +// Параметры: +// ОбщиеПараметры - Структура +// +// Возвращаемое значение: +// Булево +// +Функция НуженФорматноЛогическийКонтроль(ОбщиеПараметры) Экспорт + + Возврат ФорматноЛогическийКонтрольВызовСервера.НуженФорматноЛогическийКонтроль(ОбщиеПараметры); + +КонецФункции + +// Устарела: следует использовать ФорматноЛогическийКонтроль.ПривестиДанныеКТребуемомуФормату. +// Процедура приводит к формату согласованному с ФНС. +// +// Параметры: +// ОсновныеПараметры - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// Отказ - Булево +// ОписаниеОшибки - Строка +// ИсправленыОсновныеПараметры - Булево +// +Процедура ПривестиДанныеКТребуемомуФормату(ОсновныеПараметры, Отказ, ОписаниеОшибки, ИсправленыОсновныеПараметры) Экспорт + + ФорматноЛогическийКонтрольВызовСервера.ПривестиДанныеКТребуемомуФормату(ОсновныеПараметры, Отказ, ОписаниеОшибки, ИсправленыОсновныеПараметры); + +КонецПроцедуры + +// Устарела: больше не используется +// Процедура приводит суммы позиций чека к сумме полной оплаты +// +// Параметры: +// ОсновныеПараметры - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ОбщаяСуммаЧека - Число - Общая сумма позиций чека +// СуммаПолнойОплаты - Число - Сумма оплаченная +// СуммаПередачиБезОплаты - Число - Сумма без оплаты +// Отказ - Булево - Флаг отказа +// ОписаниеОшибки - Строка - Описание ошибки +// +Процедура ПривестиСуммыПозицийЧекаКСуммеТаблицыОплат(ОсновныеПараметры, ОбщаяСуммаЧека, СуммаПолнойОплаты, СуммаПередачиБезОплаты, Отказ, ОписаниеОшибки) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти diff --git a/CommonModules/ФорматноЛогическийКонтрольПереопределяемый.xml b/CommonModules/ФорматноЛогическийКонтрольПереопределяемый.xml new file mode 100644 index 0000000..a4c0f42 --- /dev/null +++ b/CommonModules/ФорматноЛогическийКонтрольПереопределяемый.xml @@ -0,0 +1,23 @@ + + + + + ФорматноЛогическийКонтрольПереопределяемый + + + ru + Форматно логический контроль сервер переопределяемый + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ФорматноЛогическийКонтрольПереопределяемый/Ext/Module.bsl b/CommonModules/ФорматноЛогическийКонтрольПереопределяемый/Ext/Module.bsl new file mode 100644 index 0000000..ba6cbfe --- /dev/null +++ b/CommonModules/ФорматноЛогическийКонтрольПереопределяемый/Ext/Module.bsl @@ -0,0 +1,61 @@ + +#Область ПрограммныйИнтерфейс + +// Функция переопределяет типовой форматно-логический контроль чека. +// Параметры: +// ОбщиеПараметры - Структура - структура, полученная ранее методом ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека, +// и заполненная данными чека. +// Содержит параметры для контроля: +// СпособФорматноЛогическогоКонтроля - ПеречислениеСсылка.СпособыФорматноЛогическогоКонтроля - если не заполнена, то контроль не выполняется, +// ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число - по умолчанию установленное 54-ФЗ отклонение - 0.01. +// СтандартнаяОбработка - Булево - Если присваивается значение Ложь, то стандартный контроль выполняться не будет. +// ПодключаемоеОборудование - СправочникСсылка.ПодключаемоеОборудование - Не обязательный. +// Если заполнено оборудование и не заполнен способ контроля в общих параметрах, +// то способ контроля и допустимое расхождение можно получать из подключаемого оборудования. +Процедура ПровестиФорматноЛогическийКонтроль(ОбщиеПараметры, СтандартнаяОбработка, ПодключаемоеОборудование = Неопределено) Экспорт + +КонецПроцедуры + +// Функция выполняет разделение фискальной строки. +// +// Параметры: +// ТекущаяПозиция - Структура +// НовыеПозицииЧека - Массив +// РасчетнаяЦена - Число +// РазницаСумм - Число +// СтандартнаяОбработка - Булево - выполнять стандартное разделение фискальной строки +// +Процедура РазделитьФискальнуюСтроку(ТекущаяПозиция, НовыеПозицииЧека, РасчетнаяЦена, РазницаСумм, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Функция выполняет проверку необходимости форматно-логического контроля. +// +// Параметры: +// ОбщиеПараметры - Структура +// СтандартнаяОбработка - Булево - выполнять стандартную обработку +// +// Возвращаемое значение: +// Булево. +Функция НуженФорматноЛогическийКонтроль(ОбщиеПараметры, СтандартнаяОбработка) Экспорт + +КонецФункции + +// Функция получает структуру данных форматно-логического контроля. +// +// Параметры: +// ПодключаемоеОборудование - СправочникСсылка.ПодключаемоеОборудование - Устройство, фискализирующее чек +// СтруктураДанныхФорматноЛогическогоКонтроля - Структура - Структура данных форматно логического контроля: +// * СпособФорматноЛогическогоКонтроля - Неопределено - +// * ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число - +// * ФорматФД - Строка - +// * ФорматФД - Строка, Произвольный - +// СтандартнаяОбработка - Булево - выполнять стандартную обработку +// +// Возвращаемое значение: +// Булево. +Функция ПолучитьСтруктуруДанныхФорматноЛогическогоКонтроля(ПодключаемоеОборудование, СтруктураДанныхФорматноЛогическогоКонтроля, СтандартнаяОбработка) Экспорт + +КонецФункции + +#КонецОбласти diff --git a/CommonModules/ШаблоныФискальныхДокументов.xml b/CommonModules/ШаблоныФискальныхДокументов.xml new file mode 100644 index 0000000..dc4d37f --- /dev/null +++ b/CommonModules/ШаблоныФискальныхДокументов.xml @@ -0,0 +1,23 @@ + + + + + ШаблоныФискальныхДокументов + + + ru + Шаблоны фискальных документов + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ШаблоныФискальныхДокументов/Ext/Module.bsl b/CommonModules/ШаблоныФискальныхДокументов/Ext/Module.bsl new file mode 100644 index 0000000..1a0242f --- /dev/null +++ b/CommonModules/ШаблоныФискальныхДокументов/Ext/Module.bsl @@ -0,0 +1,777 @@ +#Область ПрограммныйИнтерфейс + +#Область ФорматыВывода + +// Возвращает формат для строки шаблона. +// +// Параметры: +// БазовыйФормат - см. НовыйФормат. +// +// Возвращаемое значение: +// Структура: +// * Тип - Строка - тип строки шаблона: Строка, Разделитель, Штрихкод, XML. +// * Выравнивание - ГоризонтальноеПоложение. +// * ВыравниваниеЗаголовка - Булево - Истина - выравнивать заголовок вместе с текстом, иначе Ложь. +// * ОбтеканиеСлева - Булево - Истина - выполнять обтекание слева. +// * ОбтеканиеСправа - Булево - Истина - выполнять обтекание справа. +// * Ширина - Строка - ширина колонки в символах или процентах: +// "10" - 10 символов; +// "40%" - 40% от строки; +// "*" - автоматически попытаться полностью поместить в колонку; +// "0", "" - распределить поровну оставшееся место в строке. +// * Заполнитель - Строка - символ заполнитель строки между заголовком и полем, по умолчанию " ". +// * ВыводитьЗаголовок - Булево - принудительно выводить заголовок даже если значение не установлено. +// * ПодавлятьПробелы - Булево - удалять пробелы в строке. +// * ШтрихкодТип - Строка - тип штрихкода: "EAN13", "QR". +// * ШтрихкодВысота - Число - высота штрихкода в строках. +// * ЭлементXML - Структура. +// * ИмяАтрибутаXML - Строка. +// +Функция НовыйФормат(БазовыйФормат = Неопределено) Экспорт + + Выравнивание = ГоризонтальноеПоложение.Лево; // ГоризонтальноеПоложение + Формат = Новый Структура(); + Формат.Вставить("Тип", "СТРОКА"); + Формат.Вставить("Выравнивание", Выравнивание); + Формат.Вставить("ВыравниваниеЗаголовка", Ложь); + Формат.Вставить("ОбтеканиеСлева", Ложь); + Формат.Вставить("ОбтеканиеСправа", Ложь); + Формат.Вставить("Ширина", "0"); + Формат.Вставить("Заполнитель", " "); + Формат.Вставить("ВыводитьЗаголовок", Ложь); + Формат.Вставить("ПодавлятьПробелы", Истина); + Формат.Вставить("ЭлементXML", Новый Структура()); + Формат.Вставить("ИмяАтрибутаXML", ""); + Формат.Вставить("ШтрихкодТип", ""); + Формат.Вставить("ИспользоватьBase64", Ложь); + Формат.Вставить("ШтрихкодВысота", 0); + + Если БазовыйФормат <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Формат, БазовыйФормат); + КонецЕсли; + + Возврат Формат; + +КонецФункции + +// Возвращает формат для строки разделителя. +// +// Возвращаемое значение: +// Структура - см. НовыйФормат. +// +Функция ФорматРазделитель() Экспорт + + Результат = НовыйФормат(); // НовыйФормат + Результат.Тип = "Разделитель"; + Результат.ВыводитьЗаголовок = Истина; + Возврат Результат; + +КонецФункции + +// Возвращает формат для штрихкода. +// +// Параметры: +// Выравнивание - ГоризонтальноеПоложение. +// ШтрихкодТип - Строка. +// ШтрихкодВысота - Число. +// ИспользоватьBase64 - Булево. +// +// Возвращаемое значение: +// Структура - см. НовыйФормат. +Функция ФорматШтрихкод(Выравнивание = Неопределено, ШтрихкодТип = "EAN13", ШтрихкодВысота = 0, ИспользоватьBase64 = Истина) Экспорт + + Результат = НовыйФормат(); + Результат.Тип = "ШТРИХКОД"; + Результат.Выравнивание = ?(Выравнивание = Неопределено, ГоризонтальноеПоложение.Лево, Выравнивание); + Результат.ШтрихкодВысота = ШтрихкодВысота; + Результат.ШтрихкодТип = ШтрихкодТип; + Результат.ИспользоватьBase64 = ИспользоватьBase64; + Возврат Результат; + +КонецФункции + +// Возвращает формат для штрихкода. +// +// Параметры: +// Ширина - Строка - ширина штрихкода +// Выравнивание - ГоризонтальноеПоложение +// ШтрихкодТип - Строка +// ШтрихкодВысота - Число - высота штрихкода +// ИспользоватьBase64 - Булево. +// +// Возвращаемое значение: +// Структура - см. НовыйФормат +Функция ФорматШтрихкодШирина(Ширина, Выравнивание = Неопределено, ШтрихкодТип = "EAN13", ШтрихкодВысота = 0, ИспользоватьBase64 = Истина) Экспорт + + Результат = НовыйФормат(); + Результат.Тип = "ШТРИХКОД"; + Результат.Ширина = Ширина; + Результат.Выравнивание = ?(Выравнивание = Неопределено, ГоризонтальноеПоложение.Лево, Выравнивание); + Результат.ШтрихкодВысота = ШтрихкодВысота; + Результат.ШтрихкодТип = ШтрихкодТип; + Результат.ИспользоватьBase64 = ИспользоватьBase64; + Возврат Результат; + +КонецФункции + +// Возвращает формат для строки. +// +// Параметры: +// Выравнивание - ГоризонтальноеПоложение. +// ВыравниваниеЗаголовка - Булево - Истина - выравнивать заголовок вместе с текстом, иначе Ложь. +// Обтекание - Булево - использовать обтекание +// +// Возвращаемое значение: +// Структура - см. НовыйФормат +Функция ФорматСтрока(Выравнивание = Неопределено, ВыравниваниеЗаголовка = Ложь, Обтекание = Ложь) Экспорт + + Результат = НовыйФормат(); + Результат.Выравнивание = ?(Выравнивание = Неопределено, ГоризонтальноеПоложение.Лево, Выравнивание); + Результат.ВыравниваниеЗаголовка = ВыравниваниеЗаголовка; + Результат.ОбтеканиеСлева = Обтекание; + Результат.ОбтеканиеСправа = Обтекание; + Возврат Результат; + +КонецФункции + +// Возвращает формат для строки. +// +// Параметры: +// Ширина - Строка - ширина штрихкода +// Выравнивание - ГоризонтальноеПоложение +// ВыравниваниеЗаголовка - Булево - Истина - выравнивать заголовок вместе с текстом, иначе Ложь. +// Обтекание - Булево - использовать обтекание +// +// Возвращаемое значение: +// Структура - см. НовыйФормат +// +Функция ФорматСтрокаШирина(Ширина, Выравнивание = Неопределено, ВыравниваниеЗаголовка = Ложь, Обтекание = Ложь) Экспорт + + Результат = НовыйФормат(); + Результат.Тип = "Строка"; + Результат.Ширина = Ширина; + Результат.Выравнивание = ?(Выравнивание = Неопределено, ГоризонтальноеПоложение.Лево, Выравнивание); + Результат.ВыравниваниеЗаголовка = ВыравниваниеЗаголовка; + Результат.ОбтеканиеСлева = Обтекание; + Результат.ОбтеканиеСправа = Обтекание; + Возврат Результат; + +КонецФункции + +// Возвращает формат для элемента XML. +// +// Параметры: +// ЭлементXML - Структура +// ИмяАтрибутаXML - Строка +// БазовыйФормат - см. НовыйФормат +// +// Возвращаемое значение: +// Структура - см. НовыйФормат +// +Функция ФорматXML(ЭлементXML, ИмяАтрибутаXML, БазовыйФормат = Неопределено) Экспорт + + Результат = НовыйФормат(); + Если ТипЗнч(БазовыйФормат) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(Результат, БазовыйФормат); + Иначе + Результат.Тип = "XML"; + КонецЕсли; + Результат.ЭлементXML = ЭлементXML; + Результат.ИмяАтрибутаXML = ИмяАтрибутаXML; + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область Конструкторы + +// Создает объект шаблона. +// +// Параметры: +// ШиринаСтроки - Число - ширина строки для расчета шаблона +// +// Возвращаемое значение: +// Структура: +// * ШиринаСтроки - Число +// * Отладка - Булево +// * СтрокиОшибок - Массив из Строка +// * XML - Булево +// * КореньXML - Структура +// * ЭлементыXML - см. НовыйСоответствиеЭлементыXML +// * Элементы - Массив из Структура +// * Результат - Массив из структура + // +Функция НовыйШаблон(ШиринаСтроки = 48) Экспорт + + Шаблон = Новый Структура(); + Шаблон.Вставить("ШиринаСтроки", ?(ЗначениеЗаполнено(ШиринаСтроки), ШиринаСтроки, 0)); + Шаблон.Вставить("Отладка", Ложь); + Шаблон.Вставить("СтрокиОшибок", Новый Массив()); + Шаблон.Вставить("XML", Ложь); + Шаблон.Вставить("КореньXML", Новый Структура()); + Шаблон.Вставить("ЭлементыXML", НовыйСоответствиеЭлементыXML()); + Шаблон.Вставить("Элементы", Новый Массив()); + Шаблон.Вставить("Результат", Новый Массив()); + Шаблон.Вставить("Сформирован", Ложь); + Возврат Шаблон; + +КонецФункции + +// Добавляет элемент XML в шаблон. +// +// Параметры: +// Шаблон - см. НовыйШаблон +// ИмяЭлемента - Строка +// Родитель - см. НовыйЭлементXML +// +// Возвращаемое значение: +// Структура: +// * Имя - Строка +// * Дочерние - Массив из см. НовыйЭлементXML +// * ВыводитьПоСтрокам - Булево +// * ЭлементXML - см. НовыйЭлементXML +// * АтрибутыXML - Соответствие из Структура +// +Функция НовыйЭлементXML(Шаблон, ИмяЭлемента, Родитель = Неопределено) Экспорт + + ЭлементXML = Новый Структура(); + ЭлементXML.Вставить("Имя", ИмяЭлемента); + ЭлементXML.Вставить("Дочерние", Новый Массив()); + ЭлементXML.Вставить("ВыводитьПоСтрокам", Ложь); + ЭлементXML.Вставить("ЭлементXML", Новый Структура()); + ЭлементXML.Вставить("АтрибутыXML", НовыйСоответствиеАтрибутыXML()); + + Если Родитель = Неопределено Тогда + + Шаблон.КореньXML = ЭлементXML; + Шаблон.ЭлементыXML.Вставить(ИмяЭлемента, ЭлементXML); + + ИначеЕсли ТипЗнч(Родитель) = Тип("Строка") Тогда + + ЭлементXMLРодитель = Шаблон.ЭлементыXML.Получить(Родитель); + Если ЭлементXMLРодитель = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + ЭлементXMLРодитель.Дочерние.Добавить(ЭлементXML); + Шаблон.ЭлементыXML.Вставить(ИмяЭлемента, ЭлементXML); + + ИначеЕсли ТипЗнч(Родитель) = Тип("Структура") Тогда + + ЭлементXMLРодитель = Шаблон.ЭлементыXML.Получить(Родитель); + Если ЭлементXMLРодитель = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + ЭлементXMLРодитель.Дочерние.Добавить(ЭлементXML); + + КонецЕсли; + + Возврат ЭлементXML; + +КонецФункции + +#КонецОбласти + +#Область ФормированиеИВывод + +// Добавить строку в шаблон, перегруженная процедура: +// * ШаблонНоваяСтрока(Шаблон, Заголовок, Значение, Формат) +// * ШаблонНоваяСтрока(Шаблон, Заголовок, Значение) +// * ШаблонНоваяСтрока(Шаблон, Значение, Формат) +// * ШаблонНоваяСтрока(Шаблон, Значение) +// +// Параметры: +// Шаблон - см. НовыйШаблон +// Параметр1 - Строка, Произвольный - Заголовок, Значение которое будет добавлено в шаблон +// Параметр2 - Структура, Произвольный - Значение или формат которое будет добавлено в шаблон +// Параметр3 - Структура - Формат см. НовыйФормат +Процедура ДобавитьСтроку(Шаблон, Параметр1 = Неопределено, Параметр2 = Неопределено, Параметр3 = Неопределено) Экспорт + + Если ТипЗнч(Параметр3)=Тип("Структура") Тогда + // параметр1 - заголовок, параметр2 - значение, параметр3 - формат + ШаблоныФискальныхДокументовСлужебный.ДобавитьЭлементШаблона(Шаблон, Параметр1, Параметр2, Параметр3); + ИначеЕсли Параметр3 = Неопределено Тогда + Если ТипЗнч(Параметр2)=Тип("Структура") Тогда + // параметр1 - значение, параметр2 - Формат, параметр3 - отсутствует + ШаблоныФискальныхДокументовСлужебный.ДобавитьЭлементШаблона(Шаблон, "", Параметр1, Параметр2); + ИначеЕсли Параметр2 = Неопределено Тогда + // параметр1 - значение, параметр2 - отсутствует, параметр3 - отсутствует + ШаблоныФискальныхДокументовСлужебный.ДобавитьЭлементШаблона(Шаблон, "", Параметр1, НовыйФормат()); + Иначе + // параметр1 - заголовок, параметр2 - значение, параметр3 - отсутствует (формат) + ШаблоныФискальныхДокументовСлужебный.ДобавитьЭлементШаблона(Шаблон, Параметр1, Параметр2, НовыйФормат()); + КонецЕсли; + Иначе + // параметр1 - заголовок, параметр2 - значение, параметр3 - непонятно что + ШаблоныФискальныхДокументовСлужебный.ДобавитьЭлементШаблона(Шаблон, Параметр1, Параметр2, НовыйФормат()); + КонецЕсли; + +КонецПроцедуры + +// Добавить колонку в шаблон, перегруженная процедура: +// * ШаблонНоваяСтрока(Шаблон, Заголовок, Значение, Формат) +// * ШаблонНоваяСтрока(Шаблон, Заголовок, Значение) +// * ШаблонНоваяСтрока(Шаблон, Значение, Формат) +// * ШаблонНоваяСтрока(Шаблон, Значение) +// +// Параметры: +// Шаблон - см. НовыйШаблон +// Параметр1 - Строка, Произвольный - Заголовок, Значение которое будет добавлено в шаблон +// Параметр2 - Структура, Произвольный - Значение или формат которое будет добавлено в шаблон +// Параметр3 - см. НовыйФормат +Процедура ДобавитьКолонку(Шаблон, Параметр1 = Неопределено, Параметр2 = Неопределено, Параметр3 = Неопределено) Экспорт + + Если ТипЗнч(Параметр3)=Тип("Структура") Тогда + // параметр1 - заголовок, параметр2 - значение, параметр3 - формат + ШаблоныФискальныхДокументовСлужебный.ДобавитьКолонкуЭлементаШаблона(Шаблон, Параметр1, Параметр2, Параметр3); + ИначеЕсли Параметр3 = Неопределено Тогда + Если ТипЗнч(Параметр2)=Тип("Структура") Тогда + // параметр1 - значение, параметр2 - Формат, параметр3 - отсутствует + ШаблоныФискальныхДокументовСлужебный.ДобавитьКолонкуЭлементаШаблона(Шаблон, "", Параметр1, Параметр2); + ИначеЕсли Параметр2 = Неопределено Тогда + // параметр1 - значение, параметр2 - отсутствует, параметр3 - отсутствует + ШаблоныФискальныхДокументовСлужебный.ДобавитьКолонкуЭлементаШаблона(Шаблон, "", Параметр1, НовыйФормат()); + Иначе + // параметр1 - заголовок, параметр2 - значение, параметр3 - отсутствует (формат) + ШаблоныФискальныхДокументовСлужебный.ДобавитьКолонкуЭлементаШаблона(Шаблон, Параметр1, Параметр2, НовыйФормат()); + КонецЕсли; + Иначе + // параметр1 - заголовок, параметр2 - значение, параметр3 - непонятно что + ШаблоныФискальныхДокументовСлужебный.ДобавитьКолонкуЭлементаШаблона(Шаблон, Параметр1, Параметр2, НовыйФормат()); + КонецЕсли; + +КонецПроцедуры + +// Формирует документ по заданному шаблону. +// +// Параметры: +// Шаблон - см. НовыйШаблон +// +Процедура СформироватьДокументПоШаблону(Шаблон) Экспорт + + Для Каждого Элемент Из Шаблон.Элементы Цикл + + Если Элемент.Колонки.Количество()=0 Тогда + Продолжить; + КонецЕсли; + + ШаблоныФискальныхДокументовСлужебный.УстановитьШиринуКолонокЭлемента(Шаблон, Элемент.Колонки); + ШаблоныФискальныхДокументовСлужебный.СформироватьСтрокуЭлементаШаблона(Шаблон, Элемент); + + Если ЗначениеЗаполнено(Элемент.ЭлементXML) Тогда + Элемент.ЭлементXML.ВыводитьПоСтрокам = Элемент.ВыводитьПоСтрокам; + Элемент.ЭлементXML.АтрибутыXML.Вставить(Элемент.ИмяАтрибутаXML, Элемент.Строки); + КонецЕсли; + + Для Каждого Колонка Из Элемент.Колонки Цикл + Если ВРег(Колонка.Тип) = "ШТРИХКОД" Тогда + Элемент.Картинки.Добавить(Колонка); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Шаблон.Сформирован = Истина; + +КонецПроцедуры + +// Выводит сформированный документ как текстовая строка. +// +// Параметры: +// Шаблон - см. НовыйШаблон +// +// Возвращаемое значение: +// Строка +// +Функция ВывестиКакТекст(Шаблон, ЗамещатьШтрихкоды = Ложь) Экспорт + + Если Не Шаблон.Сформирован Тогда + СформироватьДокументПоШаблону(Шаблон); + КонецЕсли; + + Строки = Новый Массив(); // Массив из Строка + ИндексСтроки = 0; + + Картинки = Новый Массив(); // Массив из Структура + + Для Каждого Элемент Из Шаблон.Элементы Цикл + + НачалоЭлемента = ИндексСтроки; + Для Каждого Строка Из Элемент.Строки Цикл + Строки.Добавить(Строка); + ИндексСтроки = ИндексСтроки + 1; + КонецЦикла; + + Для Каждого Картинка Из Элемент.Картинки Цикл + Картинка.НачальнаяСтрока = НачалоЭлемента; + Картинки.Добавить(Картинка); + КонецЦикла; + + КонецЦикла; + + Если Не ЗамещатьШтрихкоды Тогда + Для Каждого Картинка Из Картинки Цикл // Структура + СтрокаШтрихкода = "|"+НСтр("ru = 'Штрихкод'")+"|" + Картинка.ШтрихкодТип + "|"; + Для Индекс = Картинка.НачальнаяСтрока По Картинка.НачальнаяСтрока + Картинка.ШтрихкодВысота-1 Цикл + Если Индекс = Строки.ВГраница() Тогда + Строки.Добавить(СтрокаСимволов(Шаблон.ШиринаСтроки)); + КонецЕсли; + Строка = Строки[Индекс]; + Позиция = Картинка.НачальнаяПозиция; + Ширина = Картинка.НачальнаяШирина; + СтрокаВывода = Лев(СтрокаШтрихкода + СтрокаСимволов(Ширина), Ширина); + СтрокаШтрихкода = Сред(СтрокаШтрихкода, Ширина+1); + Строка = Лев(Строка, Позиция-1)+СтрокаВывода+Сред(Строка, Позиция+Ширина); + Строки[Индекс] = Строка; + КонецЦикла; + КонецЦикла; + КонецЕсли; + + Возврат СтрСоединить(Строки, Символы.ПС); + +КонецФункции + +// Выводит сформированный документ как табличный документ. +// +// Параметры: +// Шаблон - см. НовыйШаблон +// +// Возвращаемое значение: +// ТабличныйДокумент +// +Функция ВывестиКакТабличныйДокумент(Шаблон) Экспорт + + Если Не Шаблон.Сформирован Тогда + СформироватьДокументПоШаблону(Шаблон); + КонецЕсли; + + ТабличныйДокумент = Новый ТабличныйДокумент(); + + Область = ТабличныйДокумент.Область();//"C1:C"+Шаблон.ШиринаСтроки); + Область.ШиринаКолонки = 1; + Область.ВысотаСтроки = 9; + Область.АвтоВысотаСтроки = Ложь; + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; + Область.ВертикальноеПоложение = ВертикальноеПоложение.Центр; + Область.Шрифт = Новый Шрифт("Courier new", 8); + НомерСтроки = 1; + + Для Каждого Элемент Из Шаблон.Элементы Цикл + + НачалоЭлемента = НомерСтроки; + Для Каждого Строка Из Элемент.Строки Цикл + + ДлинаСтроки = СтрДлина(Строка); + + Для НомерСимвола = 1 По ДлинаСтроки Цикл + Область = ТабличныйДокумент.Область(НомерСтроки, НомерСимвола); + Область.Текст = Сред(Строка, НомерСимвола, 1); + КонецЦикла; + НомерСтроки = НомерСтроки + 1; + КонецЦикла; + + Для Каждого Картинка Из Элемент.Картинки Цикл // Структура + + Позиция = Картинка.НачальнаяПозиция; + ШиринаШтрихкода = Картинка.НачальнаяШирина; + ШтрихкодВысота = Картинка.ШтрихкодВысота; + + ОбластьСтроки = ТабличныйДокумент.Область(НачалоЭлемента, , НачалоЭлемента + ШтрихкодВысота, ); + ОбластьСтроки.ВместеСоСледующим = Истина; + + Область = ТабличныйДокумент.Область(НачалоЭлемента, Позиция, + НачалоЭлемента + ШтрихкодВысота, Позиция + ШиринаШтрихкода); + ШаблоныФискальныхДокументовСлужебный.ВывестиШтрихкод(ТабличныйДокумент, Область, Картинка.ШтрихкодТип, Картинка.Строка, Картинка.ИспользоватьBase64); + + КонецЦикла; + + КонецЦикла; + + Возврат ТабличныйДокумент; + +КонецФункции + +// Выводит сформированный документ как документ PDF. +// +// Параметры: +// Шаблон - см. НовыйШаблон +// +// Возвращаемое значение: +// ДокументPDF +// +Функция ВывестиКакPDF(Шаблон) Экспорт + + Поток = Новый ПотокВПамяти(); + ТабличныйДокумент = ВывестиКакТабличныйДокумент(Шаблон); + ТабличныйДокумент.Записать(Поток, ТипФайлаТабличногоДокумента.PDF); + + ДокументPDF = Новый ДокументPDF(); + ДокументPDF.Прочитать(Поток); + + Возврат ДокументPDF; + +КонецФункции + +#КонецОбласти + +#Область Шаблоны + +// Возвращает структуру параметров для формирования шаблона фискального документа. +// +// Возвращаемое значение: +// Структура: +// * ВерсияФФД - Строка - версия формата фискальных документов +// * Заголовок - Строка +// * Подпись - Булево - формировать ли поле подписи в документе +// * ДополнительныйТекст - Строка - дополнительный текст для вывода внизу документа +// +Функция ПараметрыШаблонаФискальногоДокумента() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("ВерсияФФД", "1.2"); + Результат.Вставить("Заголовок", ""); + Результат.Вставить("Подпись", Истина); + Результат.Вставить("ДополнительныйТекст", ""); + Результат.Вставить("ВыводитьФискальнуюИнформацию", Истина); + Возврат Результат; + +КонецФункции + +// Генерирует шаблон кассового чека, по данным операции фискализации чека. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ФискальнаяОперация - Структура +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонКассовыйЧек(ШиринаСтроки, Данные, ФискальнаяОперация = Неопределено, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонКассовыйЧек(Шаблон, Данные, ФискальнаяОперация, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонКассовыйЧек(Шаблон, Данные, ФискальнаяОперация, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +// Генерирует шаблон отчета об открытии смены. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонОтчетОбОткрытииСмены(ШиринаСтроки, Данные, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонОтчетОбОткрытииСмены(Шаблон, Данные, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонОтчетОбОткрытииСмены(Шаблон, Данные, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +// Генерирует шаблон отчета о закрытии смены. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонОтчетОЗакрытииСмены(ШиринаСтроки, Данные, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонОтчетОЗакрытииСмены(Шаблон, Данные, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонОтчетОЗакрытииСмены(Шаблон, Данные, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +// Генерирует шаблон отчета о текущем состоянии. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыВыполненияОперации +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонОтчетОТекущемСостоянии(ШиринаСтроки, Данные, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонОтчетОТекущемСостоянии(Шаблон, Данные, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонОтчетОТекущемСостоянии(Шаблон, Данные, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +// Генерирует шаблон отчета о снятии наличных. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыИнкассации +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонСнятиеНаличных(ШиринаСтроки, Данные, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонСнятиеНаличных(Шаблон, Данные, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонСнятиеНаличных(Шаблон, Данные, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +// Генерирует шаблон отчета о внесении наличных. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыИнкассации +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонВнесениеНаличных(ШиринаСтроки, Данные, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонВнесениеНаличных(Шаблон, Данные, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонВнесениеНаличных(Шаблон, Данные, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +// Генерирует шаблон отчета о инфо квитанции. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыВыполненияОперации +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонИнфоКвитанция(ШиринаСтроки, Данные, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонИнфоКвитанция(Шаблон, Данные, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонИнфоКвитанция(Шаблон, Данные, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Возвращает соответствие элементов XML +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение: +// * Ключ - Строка +// * Значение - см. НовыйЭлементXML +// +Функция НовыйСоответствиеЭлементыXML() + Возврат Новый Соответствие(); +КонецФункции + +// Возвращает соответствие атрибутов XML +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение: +// * Ключ - Строка +// * Значение - Строка +// +Функция НовыйСоответствиеАтрибутыXML() + Возврат Новый Соответствие(); +КонецФункции + +// Создает строку символов заданного размера. +// +// Параметры: +// Размер - Число - размер строки которую нужно создать +// Символ - Строка - символы которыми будет заполнен результат +// +// Возвращаемое значение: +// Строка - строка символов заданного размера +// +Функция СтрокаСимволов(Размер, Символ = " ") + Возврат ШаблоныФискальныхДокументовСлужебный.СтрокаСимволов(Размер, Символ); +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ШаблоныФискальныхДокументовЛокализация.xml b/CommonModules/ШаблоныФискальныхДокументовЛокализация.xml new file mode 100644 index 0000000..d092b87 --- /dev/null +++ b/CommonModules/ШаблоныФискальныхДокументовЛокализация.xml @@ -0,0 +1,23 @@ + + + + + ШаблоныФискальныхДокументовЛокализация + + + ru + Шаблоны фискальных документов локализация + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ШаблоныФискальныхДокументовЛокализация/Ext/Module.bsl b/CommonModules/ШаблоныФискальныхДокументовЛокализация/Ext/Module.bsl new file mode 100644 index 0000000..003a6bd --- /dev/null +++ b/CommonModules/ШаблоныФискальныхДокументовЛокализация/Ext/Module.bsl @@ -0,0 +1,102 @@ +#Область ПрограммныйИнтерфейс + +// Генерирует шаблон кассового чека, по данным операции фискализации чека +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ФискальнаяОперация - Структура +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонКассовыйЧек(Шаблон, Данные, ФискальнаяОперация, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +// Генерирует шаблон отчета об открытии смены +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонОтчетОбОткрытииСмены(Шаблон, Данные, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +// Генерирует шаблон отчета о закрытии смены +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонОтчетОЗакрытииСмены(Шаблон, Данные, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +// Генерирует шаблон отчета о текущем состоянии +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыВыполненияОперации +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонОтчетОТекущемСостоянии(Шаблон, Данные, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +// Генерирует шаблон отчета о снятии наличных +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыИнкассации +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонСнятиеНаличных(Шаблон, Данные, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +// Генерирует шаблон отчета о внесении наличных +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыИнкассации +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонВнесениеНаличных(Шаблон, Данные, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +// Генерирует шаблон отчета о инфо квитанции +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыВыполненияОперации +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонИнфоКвитанция(Шаблон, Данные, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +#КонецОбласти diff --git a/CommonModules/ШаблоныФискальныхДокументовСлужебный.xml b/CommonModules/ШаблоныФискальныхДокументовСлужебный.xml new file mode 100644 index 0000000..48dc2b4 --- /dev/null +++ b/CommonModules/ШаблоныФискальныхДокументовСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ШаблоныФискальныхДокументовСлужебный + + + ru + Шаблоны фискальных документов служебный + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ШаблоныФискальныхДокументовСлужебный/Ext/Module.bsl b/CommonModules/ШаблоныФискальныхДокументовСлужебный/Ext/Module.bsl new file mode 100644 index 0000000..c9e3afd --- /dev/null +++ b/CommonModules/ШаблоныФискальныхДокументовСлужебный/Ext/Module.bsl @@ -0,0 +1,1225 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Генерирует шаблон универсального кассового чека, по данным операции фискализации чека, +// независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// ФискальнаяОперация - Структура. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонКассовыйЧек(Шаблон, Данные, ФискальнаяОперация, Параметры) Экспорт + + ПодготовитьКассовыйЧек(Данные, ФискальнаяОперация, Параметры.ВерсияФФД); + + ШаблонКассовыйЧекШапка(Шаблон, Данные, Параметры); + + Для Каждого ПозицияЧека Из Данные.ПозицииЧека Цикл + Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда + ШаблонКассовыйЧекПозицияЧекаФискальнаяСтрока(Шаблон, ПозицияЧека); + ИначеЕсли ПозицияЧека.Свойство("ТекстоваяСтрока") Тогда + ШаблонКассовыйЧекПозицияЧекаТекстоваяСтрока(Шаблон, ПозицияЧека); + ИначеЕсли ПозицияЧека.Свойство("ШтрихКод") Тогда + ШаблонКассовыйЧекПозицияЧекаШтрихкод(Шаблон, ПозицияЧека); + КонецЕсли; + КонецЦикла; + + ШаблонКассовыйЧекПодвал(Шаблон, Данные, ФискальнаяОперация, Параметры); + +КонецПроцедуры + +// Генерирует шаблон универсального отчет об открытии смены, независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонОтчетОбОткрытииСмены(Шаблон, Данные, Параметры) Экспорт + + ШаблонОтчет(Шаблон, Данные, Параметры, НСтр("ru='ОТКРЫТИЕ СМЕНЫ'")); + +КонецПроцедуры + +// Генерирует шаблон универсального отчет о закрытии смены, независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонОтчетОЗакрытииСмены(Шаблон, Данные, Параметры) Экспорт + + ШаблонОтчет(Шаблон, Данные, Параметры, НСтр("ru='ОТЧЕТ С ГАШЕНИЕМ'")); + +КонецПроцедуры + +// Генерирует шаблон универсального отчет о текущем состоянии, независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонОтчетОТекущемСостоянии(Шаблон, Данные, Параметры) Экспорт + + ШаблонОтчет(Шаблон, Данные, Параметры, НСтр("ru='ОТЧЕТ БЕЗ ГАШЕНИЯ'")); + +КонецПроцедуры + +// Генерирует шаблон универсального отчет о снятии наличных, независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонСнятиеНаличных(Шаблон, Данные, Параметры) Экспорт + + ШаблонОперацияИнкассации(Шаблон, Данные, Параметры, НСтр("ru='ВЫЕМКА'")); + +КонецПроцедуры + +// Генерирует шаблон универсального отчета о внесении наличных, независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонВнесениеНаличных(Шаблон, Данные, Параметры) Экспорт + + ШаблонОперацияИнкассации(Шаблон, Данные, Параметры, НСтр("ru='ВНЕСЕНИЕ'")); + +КонецПроцедуры + +// Генерирует шаблон инфо квитанции, независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - Структура +// +Процедура ШаблонИнфоКвитанция(Шаблон, Данные, Параметры) Экспорт + + Модуль = ШаблоныФискальныхДокументов; + ФорматРазделитель = Модуль.ФорматРазделитель(); + ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр); + ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право); + ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево); + ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине); + + Модуль.ДобавитьСтроку (Шаблон, Параметры.Заголовок, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.НаименованиеОрганизации, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИНН:'"), Данные.ИНН, ФорматЛево); + Модуль.ДобавитьКолонку(Шаблон, НСтр("ru='КПП:'"), Данные.КПП, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССА:'"), Данные.НомерКассы, ФорматЛево); + Модуль.ДобавитьКолонку(Шаблон, НСтр("ru='СМЕНА:'"), Данные.НомерСмены, ФорматПраво); + + ДатаВремя = Формат(ОбщегоНазначенияБПО.ДатаСеанса(), "ДФ=""дд.ММ.гггг ЧЧ:мм"""); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ЧЕК:'"), Данные.НомерЧека, ФорматЛево); + Модуль.ДобавитьКолонку(Шаблон, НСтр("ru='ДАТА:'"), ДатаВремя, ФорматПраво); + + Если Не ПустаяСтрока(Данные.АдресЧека) Тогда + Модуль.ДобавитьСтроку(Шаблон, "|ШтрихКод|QR|" + Данные.АдресЧека, ФорматЛево); + КонецЕсли; + + Модуль.ДобавитьСтроку(Шаблон, Данные.АдресЧека, ФорматЦентр); + Модуль.ДобавитьСтроку(Шаблон, Данные.ПодписьЧека, ФорматЦентр); + +КонецПроцедуры + +#Область ГенераторШаблона + +// Создает строку символов заданного размера. +// +// Параметры: +// Размер - Число - размер строки которую нужно создать. +// Символ - Строка - символы которыми будет заполнен результат. +// +// Возвращаемое значение: +// Строка - строка символов заданного размера. +// +Функция СтрокаСимволов(Размер, Символ = " ") Экспорт + + ПустаяСтрока = ""; + ДлинаСимвола = СтрДлина(Символ); + Если ДлинаСимвола = 0 Тогда + Возврат ПустаяСтрока; + КонецЕсли; + + КоличествоПодстрок = Цел(Размер / ДлинаСимвола)+1; + Для Номер = 1 По КоличествоПодстрок Цикл + ПустаяСтрока = ПустаяСтрока + Символ; + КонецЦикла; + + Возврат Лев(ПустаяСтрока, Размер); + +КонецФункции + +// Добавляет строку в шаблон. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Заголовок - Строка - Заголовок который будет добавлено в шаблон. +// Значение - Произвольный - Значение которое будет добавлено в шаблон. +// Формат - см. ШаблоныФискальныхДокументов.НовыйФормат. +Процедура ДобавитьЭлементШаблона(Шаблон, Заголовок = "", Значение = Неопределено, Формат = Неопределено) Экспорт + + Элемент = НовыйЭлементШаблона(); + + Если ЗначениеЗаполнено(Элемент.ЭлементXML) Тогда + Если ТипЗнч(Элемент.ЭлементXML) = Тип("Строка") Тогда + Элемент.ЭлементXML = Шаблон.ЭлементыXML.Получить(Элемент.ЭлементXML); + КонецЕсли; + КонецЕсли; + Шаблон.Элементы.Добавить(Элемент); + + ДобавитьКолонкуЭлементаШаблона(Шаблон, Заголовок, Значение, Формат); + +КонецПроцедуры + +// Добавляет колонку в последнюю строку шаблона. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Заголовок - Строка. +// Значение - Произвольный. +// Формат - см. ШаблоныФискальныхДокументов.НовыйФормат. +// +Процедура ДобавитьКолонкуЭлементаШаблона(Шаблон, Заголовок = "", Значение = Неопределено, Формат = Неопределено) Экспорт + + Элемент = Шаблон.Элементы[Шаблон.Элементы.ВГраница()]; + Колонка = НоваяКолонкаЭлементаШаблона(); + + Колонка.Значение = Значение; + Колонка.Строка = Строка(Значение); + Колонка.Заголовок = Заголовок; + Колонка.ШиринаФормат = Формат.Ширина; + + ЗаполнитьЗначенияСвойств(Колонка, Формат, , "Ширина"); + + // вычислить высоту штрихкода по умолчанию + Если ВРег(Формат.Тип) = "ШТРИХКОД" И Колонка.ШтрихкодВысота = 0 Тогда + ВысотаДвумерногоКода = 4; + ВысотаОдномерногоКода = 2; + Колонка.ШтрихкодВысота = ?(ВРег(Колонка.ШтрихкодТип) = "QR", ВысотаДвумерногоКода, ВысотаОдномерногоКода); + КонецЕсли; + + Если Колонка.ПодавлятьПробелы Тогда + Колонка.Заголовок = СокрЛП(Колонка.Заголовок); + КонецЕсли; + + Если СтрДлина(Колонка.Строка) > 0 Или Колонка.ВыводитьЗаголовок Тогда + Элемент.Колонки.Добавить(Колонка); + КонецЕсли; + +КонецПроцедуры + +// Вычисляет и устанавливает ширину колонок у переданного массива колонок. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// МассивКолонок - Массив из см. НоваяКолонкаЭлементаШаблона. +// +Процедура УстановитьШиринуКолонокЭлемента(Шаблон, МассивКолонок) Экспорт + + ШиринаСтроки = Шаблон.ШиринаСтроки; + Если ШиринаСтроки = 0 Тогда + Возврат; + КонецЕсли; + + ОбщаяШиринаКолонок = 0; + КоличествоКолонокСНулевойШириной = 0; + + Для Каждого Колонка Из МассивКолонок Цикл + + Если Колонка.Тип = "XML" Тогда + Продолжить; + КонецЕсли; + + // вычислить заданную ширину колонок + Если Колонка.ШиринаФормат = "*" Тогда + // вычислить оптимальную ширину + Колонка.Ширина = Мин(ШиринаСтроки, СтрДлина(Колонка.Строка + Колонка.Заголовок)); + ИначеЕсли СтрНайти(Колонка.ШиринаФормат, "%")>0 Тогда + // вычислить ширину в процентах + ШиринаВПроцентах = Число(Лев(Колонка.ШиринаФормат, СтрДлина(Колонка.ШиринаФормат)-1)); + Колонка.Ширина = Цел(ШиринаСтроки / 100 * ШиринаВПроцентах); + Иначе + // установить ширину в символах + Колонка.Ширина = Число(Колонка.ШиринаФормат); + КонецЕсли; + + // подготовить значения для расчета ширины у колонок с не заданной шириной + Если Колонка.Ширина = 0 Тогда + КоличествоКолонокСНулевойШириной = КоличествоКолонокСНулевойШириной + 1; + Иначе + ОбщаяШиринаКолонок = ОбщаяШиринаКолонок + Колонка.Ширина; + КонецЕсли; + + КонецЦикла; + + // установить ширину у колонок с не заданной шириной + НеИспользуемаяШирина = Макс(0, ШиринаСтроки - ОбщаяШиринаКолонок); + Если КоличествоКолонокСНулевойШириной>0 И НеИспользуемаяШирина>0 Тогда + ОбщаяШиринаКолонок = 0; + ШиринаКолонки = Цел(НеИспользуемаяШирина / КоличествоКолонокСНулевойШириной); + Для Каждого Колонка Из МассивКолонок Цикл + + Если Колонка.Тип = "XML" Тогда + Продолжить; + КонецЕсли; + + Если Колонка.Ширина = 0 Тогда + Колонка.Ширина = ШиринаКолонки; + КонецЕсли; + ОбщаяШиринаКолонок = ОбщаяШиринаКолонок + Колонка.Ширина; + КонецЦикла; + КонецЕсли; + + // скорректировать первую колонку на погрешность округления + Если ОбщаяШиринаКолонок<ШиринаСтроки И МассивКолонок.Количество()>0 Тогда + МассивКолонок[0].Ширина = МассивКолонок[0].Ширина + (ШиринаСтроки - ОбщаяШиринаКолонок); + КонецЕсли; + +КонецПроцедуры + +// Формирует массив строк у элемента, колонки выводятся в соответствии с заданным форматированием. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Элемент - см. НовыйЭлементШаблона. +// +Процедура СформироватьСтрокуЭлементаШаблона(Шаблон, Элемент) Экспорт + + Колонки = Элемент.Колонки; + Строки = Элемент.Строки; + ВыводЗавершен = Ложь; + Пока Не ВыводЗавершен Цикл + + ПерваяСтрока = ?(Строки.Количество()=0, Истина, Ложь); + ВыводЗавершен = Истина; + СтрокаВывода = Новый Массив(); + Позиция = 1; + Для Каждого Колонка Из Колонки Цикл // НоваяКолонкаЭлементаШаблона + + Выравнивание = Колонка.Выравнивание; + Ширина = Колонка.Ширина; + Заполнитель = Колонка.Заполнитель; + Если ПерваяСтрока Тогда + // в первой строке выводится заголовок + Заголовок = Колонка.Заголовок; + ШиринаБезЗаголовка = Макс(0, Колонка.Ширина - СтрДлина(Заголовок)); + Колонка.НачальнаяПозиция = Позиция; + Колонка.НачальнаяШирина = Колонка.Ширина; + Позиция = Позиция + Колонка.Ширина; + Иначе + Заголовок = ""; + ШиринаБезЗаголовка = Колонка.Ширина; + КонецЕсли; + + Если Колонка.Тип = "XML" Или ШиринаБезЗаголовка = 0 Тогда + СтрокаКолонки = Колонка.Строка; + СтрокаКолонки = Заголовок + СтрокаКолонки; + Иначе + Если ВРег(Колонка.Тип) = "ШТРИХКОД" Тогда + СтрокаКолонки = СтрокаСимволов(Ширина, " "); + Иначе + Если ВРег(Колонка.Тип) = "РАЗДЕЛИТЕЛЬ" Тогда + СтрокаКолонки = СтрокаСимволов(Ширина, Колонка.Строка); + Колонка.Строка = ""; + Иначе + СтрокаКолонки = ВырезатьСлеваПоСловам(Колонка.Строка, ШиринаБезЗаголовка); + Если ПустаяСтрока(Колонка.Строка) И Выравнивание = ГоризонтальноеПоложение.ПоШирине Тогда + // это последняя строка при выравнивании по ширине, ее нужно выровнять слева + Выравнивание = ГоризонтальноеПоложение.Лево; + КонецЕсли; + СтрокаКолонки = ВыровнятьСтроку(Заголовок, СтрокаКолонки, Выравнивание, Колонка.ВыравниваниеЗаголовка, Ширина, Заполнитель); + КонецЕсли; + + // подготовиться к обтеканию колонок + Если ПустаяСтрока(Колонка.Строка) Тогда + // Текст в колонке закончился, ее больше не нужно выводить + Колонка.НоваяШирина = 0; + Колонка.Завершена = Истина; + Иначе + Колонка.НоваяШирина = Колонка.Ширина; + ВыводЗавершен = Ложь; + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + СтрокаВывода.Добавить(СтрокаКолонки); + + КонецЦикла; + + ПересчитатьРазмерыКолонок(Колонки); + + Строки.Добавить(СтрСоединить(СтрокаВывода)); + + КонецЦикла; + +КонецПроцедуры + +// Выводит в записьXML переданный элемент рекурсивно. +// +// Параметры: +// Запись - ЗаписьXML. +// Элемент - Структура. +// +Процедура ВывестиЭлементXML(Запись, Элемент) Экспорт + + Если Элемент.ВыводитьПоСтрокам Тогда + Для Каждого Строка Из Элемент.Строки Цикл + Запись.ЗаписатьНачалоЭлемента(Элемент.Имя); + Запись.ЗаписатьАтрибут(Элемент.ИмяАтрибутаXML, XMLСтрока(Строка)); + Запись.ЗаписатьКонецЭлемента(); + КонецЦикла; + Иначе + Если Элемент.АтрибутыXML.Количество()=0 И Элемент.Дочерние.Количество()=0 Тогда + Возврат; + КонецЕсли; + Запись.ЗаписатьНачалоЭлемента(Элемент.Имя); + Для Каждого Атрибут Из Элемент.АтрибутыXML Цикл + Строка = СтрСоединить(Атрибут.Значение); + Запись.ЗаписатьАтрибут(Атрибут.Ключ, XMLСтрока(Строка)); + КонецЦикла; + Для Каждого Дочерний Из Элемент.Дочерние Цикл + ВывестиЭлементXML(Запись, Дочерний); + КонецЦикла; + Запись.ЗаписатьКонецЭлемента(); + КонецЕсли; + +КонецПроцедуры + +// Выводит штрихкод табличный документ. +// +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент - документ где должен быть выведен штрихкод. +// Область - ОбластьЯчеекТабличногоДокумента - область где должен быть выведен штрихкод. +// ТипШтрихкода - Строка - тип штрихкода в текстовом виде. +// Штрихкод - Строка - значение штрихкода. +// ИспользоватьBase64 - Булево - Использовать Base64. +// +Процедура ВывестиШтрихкод(ТабличныйДокумент, Область, ТипШтрихкода, Знач Штрихкод, Знач ИспользоватьBase64 = Ложь) Экспорт + + ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода(); + ПараметрыШтрихкода.Масштабировать = Истина; + ПараметрыШтрихкода.СохранятьПропорции = Истина; + ПараметрыШтрихкода.ОтображатьТекст = Ложь; + ПараметрыШтрихкода.Штрихкод = Штрихкод; + ПараметрыШтрихкода.ТипВходныхДанных = ?(ИспользоватьBase64, 1, 0); + ПараметрыШтрихкода.ТипКода = ЧисловойТипШтрихкода(ТипШтрихкода); + + Штрихкод = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка); + Если ПараметрыШтрихкода.ТипКода = 16 Тогда + Штрихкод.РазмерКартинки = РазмерКартинки.Пропорционально; + ПараметрыШтрихкода.Ширина = 100; + ПараметрыШтрихкода.Высота = 100; + Иначе + Штрихкод.РазмерКартинки = РазмерКартинки.РеальныйРазмер; + ПараметрыШтрихкода.Ширина = 100; + ПараметрыШтрихкода.Высота = 100; + КонецЕсли; + + Изображение = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода); + Штрихкод.Картинка = Изображение.Картинка; + Штрихкод.ГраницаСверху = Ложь; + Штрихкод.ГраницаСнизу = Ложь; + Штрихкод.ГраницаСправа = Ложь; + Штрихкод.ГраницаСлева = Ложь; + + Область.ПоВыделеннымКолонкам = Истина; + Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; + Штрихкод.Расположить(Область); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ШаблоныДокументов + +// Выполняет предварительную подготовку. +// +// Параметры: +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека. +// ВерсияФФД - Строка. +// +Процедура ПодготовитьКассовыйЧек(Данные, ФискальнаяОперация, ВерсияФФД) + + Если Не ЗначениеЗаполнено(Данные.ОрганизацияНазвание) И ЗначениеЗаполнено(ФискальнаяОперация) Тогда + Сведения = ОборудованиеЧекопечатающиеУстройства.СведенияОбОрганизации(ФискальнаяОперация.Организация); + Данные.ОрганизацияНазвание = Сведения.Наименование; + КонецЕсли; + + // позиции чека + ТаблицаНДС = Новый Соответствие(); + ТаблицаСумма = Новый Соответствие(); + СуммаЧека = 0; + СуммаОплаты = 0; + + Для Каждого ПозицияЧека Из Данные.ПозицииЧека Цикл + + Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда + Сумма = ПозицияЧека.Сумма; + СтавкаНДС = ПозицияЧека.СтавкаНДС; + СуммаНДС = ?(ПозицияЧека.СуммаНДС = 0, 0, ПозицияЧека.СуммаНДС); + + // НДС + Если СтавкаНДС = Неопределено Тогда + ТекстНалога = НСтр("ru='БЕЗ НДС'"); + СуммаВТаблицеПоКлючу(ТаблицаНДС, "БЕЗНДС", СуммаНДС); + СуммаВТаблицеПоКлючу(ТаблицаСумма, "БЕЗНДС", Сумма); + ИначеЕсли СтавкаНДС = 0 Тогда + ТекстНалога = НСтр("ru='НДС 0%'"); + СуммаВТаблицеПоКлючу(ТаблицаНДС, СтавкаНДС, СуммаНДС); + СуммаВТаблицеПоКлючу(ТаблицаСумма, СтавкаНДС, Сумма); + ИначеЕсли СтавкаНДС < 100 Тогда + ТекстНалога = СтрШаблон(НСтр("ru='НДС %1%%'"), СтавкаНДС); + СуммаНДС = ?(СуммаНДС = Неопределено, 0, СуммаНДС); + СуммаВТаблицеПоКлючу(ТаблицаНДС, СтавкаНДС, СуммаНДС); + СуммаВТаблицеПоКлючу(ТаблицаСумма, СтавкаНДС, Сумма); + ИначеЕсли СтавкаНДС >= 100 Тогда + ТекстНалога = СтрШаблон(НСтр("ru='НДС %1/%2%%'"), СтавкаНДС-100, СтавкаНДС); + СуммаНДС = ?(СуммаНДС = Неопределено, 0, СуммаНДС); + СуммаВТаблицеПоКлючу(ТаблицаНДС, СтавкаНДС, СуммаНДС); + СуммаВТаблицеПоКлючу(ТаблицаСумма, СтавкаНДС, Сумма); + КонецЕсли; + ПозицияЧека.Вставить("ТекстНалога", ТекстНалога); + + СуммаЧека = СуммаЧека + Сумма; + КонецЕсли; + КонецЦикла; + + // подвал чека + // таблица оплаты + ТекстТаблицаОплат = Новый Соответствие(); + Для Каждого СтрокаОплаты Из Данные.ТаблицаОплат Цикл + Если СтрокаОплаты.Сумма = 0 Тогда + Продолжить; + КонецЕсли; + ТипОплаты = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеТипаОплатыККТ(СтрокаОплаты.ТипОплаты, ВерсияФФД); + СуммаВТаблицеПоКлючу(ТекстТаблицаОплат, ТипОплаты, СтрокаОплаты.Сумма); + СуммаОплаты = СуммаОплаты + СтрокаОплаты.Сумма; + КонецЦикла; + Данные.Вставить("ТекстТаблицаОплат", ТекстТаблицаОплат); + Данные.Вставить("СуммаОплаты", СуммаОплаты); + Данные.Вставить("СуммаЧека", СуммаЧека); + + // таблица НДС + ТекстТаблицаНДС = Новый Соответствие(); + Для Каждого СтрокаНДС Из ТаблицаНДС Цикл + + СтавкаНДС = СтрокаНДС.Ключ; + СуммаНДС = СтрокаНДС.Значение; + Если СтавкаНДС = "БЕЗНДС" Тогда + Заголовок = " "+НСтр("ru='СУММА БЕЗ НДС'"); + Сумма = ТаблицаСумма.Получить(СтавкаНДС); + СуммаНДС = ?(Сумма > 0, Сумма, 0); + ИначеЕсли СтавкаНДС = 0 Тогда + Заголовок = " "+НСтр("ru='СУММА С НДС 0%'"); + Сумма = ТаблицаСумма.Получить(СтавкаНДС); + СуммаНДС = ?(Сумма > 0, Сумма, 0); + ИначеЕсли СтавкаНДС < 100 Тогда + Заголовок = СтрШаблон(НСтр("ru='СУММА НДС %1%%'"), СтавкаНДС); + Сумма = ТаблицаСумма.Получить(СтавкаНДС); + СуммаНДС = ?(СуммаНДС > 0, СуммаНДС, Сумма / (100+СтавкаНДС) * СтавкаНДС ); + ИначеЕсли СтавкаНДС >= 100 Тогда + Заголовок = СтрШаблон(НСтр("ru='СУММА НДС %1/%2%%'"), СтавкаНДС-100, СтавкаНДС); + Сумма = ТаблицаСумма.Получить(СтавкаНДС); + СуммаНДС = ?(СуммаНДС > 0, СуммаНДС, Сумма / СтавкаНДС * (СтавкаНДС-100) ); + КонецЕсли; + ТекстТаблицаНДС.Вставить(Заголовок, СуммаНДС); + + КонецЦикла; + Данные.Вставить("ТекстТаблицаНДС", ТекстТаблицаНДС); + + // QR код + Если ЗначениеЗаполнено(ФискальнаяОперация) Тогда + ПараметрыQRКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыQRКодаЧекаККТ(); + ПараметрыQRКода.ДатаВремяРасчета = ФискальнаяОперация.Дата; + ПараметрыQRКода.СуммаРасчета = ФискальнаяОперация.Сумма; + ПараметрыQRКода.ФискальныйПризнак = ФискальнаяОперация.ФискальныйПризнак; + ПараметрыQRКода.ПризнакРасчета = ФискальнаяОперация.ТипРасчета; + ПараметрыQRКода.НомерФискальногоНакопителя = ФискальнаяОперация.ЗаводскойНомерФН; + ПараметрыQRКода.НомерФискальногоДокумента = ФискальнаяОперация.НомерЧекаККМ; + Данные.QRКод.ЗначениеКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СформироватьQRКодЧекаККТ(ПараметрыQRКода); + КонецЕсли; + +КонецПроцедуры + +// Процедура суммирует в соответствии значение по переданному ключу. +Процедура СуммаВТаблицеПоКлючу(Таблица, Ключ, Значение) + Сумма = Таблица.Получить(Ключ); + Сумма = ?(Сумма = Неопределено, 0, Сумма); + Таблица.Вставить(Ключ, Сумма + ?(Значение = Неопределено, 0, Значение)); +КонецПроцедуры + +// Генерирует шаблон универсального отчета. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// НазваниеДокумента - Строка. +// +Процедура ШаблонОтчет(Шаблон, Данные, Параметры, НазваниеДокумента) Экспорт + + Модуль = ШаблоныФискальныхДокументов; + ФорматРазделитель = Модуль.ФорматРазделитель(); + ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр); + ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право); + ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево); + ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине); + + ДатаВремя = ОбщегоНазначенияБПО.ДатаСеанса(); + ДатаВремя = Формат(ДатаВремя, НСтр("ru = 'ДФ=""дд.ММ.гггг ЧЧ:мм""'")); + + ФорматПодпись = ШаблоныФискальныхДокументов.НовыйФормат(ФорматЛево); + ФорматПодпись.Заполнитель = "_"; + ФорматПодпись.ВыводитьЗаголовок = Истина; + + Модуль.ДобавитьСтроку (Шаблон, Параметры.Заголовок, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='НЕФИСКАЛЬНЫЙ РЕЖИМ'"), ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, "=", ФорматРазделитель); + Модуль.ДобавитьСтроку (Шаблон, Данные.АдресРасчетов, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.МестоРасчетов, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, НазваниеДокумента, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, ДатаВремя, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССИР:'"), Данные.Кассир, ФорматЛево); + Если Параметры.Подпись Тогда + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПОДПИСЬ:'"), ФорматПодпись); + КонецЕсли; + Модуль.ДобавитьСтроку (Шаблон, "=", ФорматРазделитель); + +КонецПроцедуры + +// Генерирует шаблон универсального отчета инкассации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// НазваниеОперации - Строка +// +Процедура ШаблонОперацияИнкассации(Шаблон, Данные, Параметры, НазваниеОперации) Экспорт + + Модуль = ШаблоныФискальныхДокументов; + ФорматРазделитель = Модуль.ФорматРазделитель(); + ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр); + ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право); + ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево); + ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине); + + ДатаВремя = ОбщегоНазначенияБПО.ДатаСеанса(); + ДатаВремя = Формат(ДатаВремя, НСтр("ru = 'ДФ=""дд.ММ.гггг ЧЧ:мм""'")); + + ФорматПодпись = ШаблоныФискальныхДокументов.НовыйФормат(ФорматЛево); + ФорматПодпись.Заполнитель = "_"; + ФорматПодпись.ВыводитьЗаголовок = Истина; + + ФорматЧисла = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0"; + + Модуль.ДобавитьСтроку (Шаблон, Параметры.Заголовок, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='НЕФИСКАЛЬНЫЙ РЕЖИМ'"), ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.Организация, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='СУММА='"), Формат(Данные.Сумма, ФорматЧисла), ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, "=", ФорматРазделитель); + Модуль.ДобавитьСтроку (Шаблон, НазваниеОперации, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, ДатаВремя, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССИР:'"), Данные.Кассир, ФорматЛево); + Если Параметры.Подпись Тогда + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПОДПИСЬ:'"), ФорматПодпись); + КонецЕсли; + +КонецПроцедуры + +// Генерирует шаблон шапки кассового чека. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонКассовыйЧекШапка(Шаблон, Данные, Параметры) + + Модуль = ШаблоныФискальныхДокументов; + + ФорматРазделитель = Модуль.ФорматРазделитель(); + ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр); + ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право); + ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево); + ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине); + + Модуль.ДобавитьСтроку (Шаблон, Параметры.Заголовок, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, "=======", ФорматРазделитель); + Модуль.ДобавитьСтроку (Шаблон, Данные.ОрганизацияНазвание, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.АдресРасчетов, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.МестоРасчетов, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.АдресМагазина, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.ТекстШапки, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССОВЫЙ ЧЕК'"), ФорматЦентр); + + КодРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодРасчетаДенежнымиСредствами(Данные.ТипРасчета); + ТипЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеКодаРасчетаДенежнымиСредствами(КодРасчета); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИНН'")+" ", Данные.ОрганизацияИНН, ФорматЛево); + Модуль.ДобавитьКолонку(Шаблон, ТипЧека, ФорматПраво); + + ДатаВремя = ?(НЕ ПустаяСтрока(Данные.ДатаВремя), Данные.ДатаВремя, ОбщегоНазначенияБПО.ДатаСеанса()); + ДатаВремя = Формат(ДатаВремя, НСтр("ru = 'ДФ=""дд.ММ.гггг ЧЧ:мм""'")); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ЧЕК №'"), Данные.НомерЧека, ФорматЛево); + Модуль.ДобавитьКолонку(Шаблон, ДатаВремя, ФорматПраво); + + Покупатель = Данные.Получатель; + ПокупательИНН = Данные.ПолучательИНН; + ПокупательАдрес = ""; + СведенияОПокупателе = Данные.СведенияОПокупателе; + Покупатель = ?(Не ПустаяСтрока(СведенияОПокупателе.Покупатель), СведенияОПокупателе.Покупатель, Покупатель); + ПокупательИНН = ?(Не ПустаяСтрока(СведенияОПокупателе.ПокупательИНН), СведенияОПокупателе.ПокупательИНН, ПокупательИНН); + ПокупательАдрес = ?(Не ПустаяСтрока(СведенияОПокупателе.ПокупательАдрес), СведенияОПокупателе.ПокупательАдрес, ПокупательАдрес); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПОКУПАТЕЛЬ:'"), Покупатель, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИНН ПОКУПАТЕЛЯ:'"), ПокупательИНН, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='АДРЕС ПОКУПАТЕЛЯ:'"), ПокупательАдрес, ФорматПраво); + + Модуль.ДобавитьСтроку (Шаблон, ВРег(Данные.ПризнакАгента), ФорматЛево); + + // ++ Локализация + ДанныеПоставщика = Данные.ДанныеПоставщика; + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПОСТАВЩИК:'"), ДанныеПоставщика.Наименование, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ТЛФ.ПОСТ.:'"), ДанныеПоставщика.Телефон, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИНН ПОСТАВЩИКА:'"), ДанныеПоставщика.ИНН, ФорматПраво); + + ПлатежныйАгент = Данные.ДанныеАгента.ПлатежныйАгент; + ОператорПеревода = Данные.ДанныеАгента.ОператорПеревода; + ОператорПоПриемуПлатежей = Данные.ДанныеАгента.ОператорПоПриемуПлатежей; + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПЛ.АГЕНТ ОПЕР.:'"), ПлатежныйАгент.Операция, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПЛ.АГЕНТ.ТЛФ.:'"), ПлатежныйАгент.Телефон, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ОПЕРАТОР ПЕРЕВОДА:'"), ОператорПеревода.Наименование, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ТЛФ.ОП.ПЕРЕВОДА:'"), ОператорПеревода.Телефон, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='АДР.ОП.ПЕРЕВОДА:'"), ОператорПеревода.Адрес, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИНН ОП.ПЕРЕВОДА:'"), ОператорПеревода.ИНН, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ОПЕР.ПО ПРИЕМУ ПЛАТ.ТЛФ:'"), ОператорПоПриемуПлатежей.Телефон, ФорматПраво); + // -- Локализация + + ДополнительныйРеквизитПользователя = Данные.ДополнительныйРеквизитПользователя; + Модуль.ДобавитьСтроку (Шаблон, ДополнительныйРеквизитПользователя.Наименование, ДополнительныйРеквизитПользователя.Значение, ФорматПраво); + + Модуль.ДобавитьСтроку(Шаблон, "-", ФорматРазделитель); + +КонецПроцедуры + +// Генерирует шаблон фискальной строки в позиции кассового чека. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// ПозицияЧека - Структура. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонКассовыйЧекПозицияЧекаФискальнаяСтрока(Шаблон, ПозицияЧека) + + Модуль = ШаблоныФискальныхДокументов; + + ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр); + ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право); + ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево); + ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине); + + // позиции чека + ФорматЧисла2 = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0"; + ФорматЧисла3 = "ЧРД=.;ЧЦ=12;ЧДЦ=3;ЧН=0.000;ЧГ=0"; + + Количество = ПозицияЧека.Количество; + Сумма = ПозицияЧека.Сумма; + СуммаСкидок = ?(ПустаяСтрока(ПозицияЧека.СуммаСкидок), 0, ПозицияЧека.СуммаСкидок); + ЦенаДляПечати = Окр(Сумма / ?(Количество > 0, Количество, 1), 2); + + СтрокаТовара = СтрШаблон("%1 х %2=%3", + Формат(Количество, ФорматЧисла3), + Формат(ЦенаДляПечати, ФорматЧисла2), + Формат(Сумма, ФорматЧисла2)); + + Модуль.ДобавитьСтроку (Шаблон, ПозицияЧека.Наименование, ФорматЛево); + Модуль.ДобавитьСтроку (Шаблон, СтрокаТовара, ФорматПраво); + + Если СуммаСкидок > 0 Тогда + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='СКИДКА='"), Формат(СуммаСкидок, ФорматЧисла2), ФорматЛево); + ИначеЕсли СуммаСкидок < 0 Тогда + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='НАДБАВКА='"), Формат(СуммаСкидок, ФорматЧисла2), ФорматЛево); + Иначе + Модуль.ДобавитьСтроку (Шаблон); + КонецЕсли; + Модуль.ДобавитьКолонку(Шаблон, ПозицияЧека.ТекстНалога, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, ВРег(ПозицияЧека.ПризнакПредметаРасчета), ФорматПраво); + + ПризнакСпособаРасчета = + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаСпособаРасчета(ПозицияЧека.ПризнакСпособаРасчета); + ПризнакСпособаРасчетаНаименование = + ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеПризнакаСпособаРасчета(ПризнакСпособаРасчета); + Модуль.ДобавитьСтроку (Шаблон, ПризнакСпособаРасчетаНаименование, ФорматЛево); + + // ++ Локализация + // Маркировка + Если НЕ ПустаяСтрока(ПозицияЧека.КонтрольнаяМарка) Тогда + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='[М]'"), ФорматЛево); + Иначе + Штрихкод = ПозицияЧека.Штрихкод; + Если НЕ ПустаяСтрока(ПозицияЧека.КодВидаНоменклатурнойКлассификации) Тогда + Штрихкод = ПозицияЧека.КодВидаНоменклатурнойКлассификации; + КонецЕсли; + + КодТовараТекст = Штрихкод; + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + КодТовараИдентифицируетЭкземпляр = МодульМенеджерОборудованияМаркировка.КодТовараИдентифицируетЭкземпляр( + ПозицияЧека.ДанныеКодаТоварнойНоменклатуры.РеквизитКодаТовара, + Штрихкод); + Если КодТовараИдентифицируетЭкземпляр Тогда + КодТовараТекст = НСтр("ru='[М]'") + КодТовараТекст + Символы.НПП; + КонецЕсли; + КонецЕсли; + Модуль.ДобавитьСтроку (Шаблон, КодТовараТекст, ФорматЛево); + КонецЕсли; + // -- Локализация + + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КОД СТРАНЫ:'"), ПозицияЧека.КодСтраныПроисхожденияТовара, ФорматЛево); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ДЕКЛАРАЦИЯ:'"), ПозицияЧека.НомерТаможеннойДекларации, ФорматЛево); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='АКЦИЗ:'"), ПозицияЧека.СуммаАкциза, ФорматЛево); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ЕД.ИЗМЕРЕНИЯ:'"),ПозицияЧека.ЕдиницаИзмерения, ФорматЛево); + Модуль.ДобавитьСтроку (Шаблон, ВРег(ПозицияЧека.ПризнакАгентаПоПредметуРасчета), ФорматЛево); + + // ++ Локализация + ДанныеПоставщика = ПозицияЧека.ДанныеПоставщика; + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ПОСТАВЩИК:'"), ДанныеПоставщика.Наименование, ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ТЛФ.ПОСТ.:'"), ДанныеПоставщика.Телефон, ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ИНН ПОСТАВЩИКА:'"), ДанныеПоставщика.ИНН, ФорматПраво); + + ПлатежныйАгент = ПозицияЧека.ДанныеАгента.ПлатежныйАгент; + ОператорПеревода = ПозицияЧека.ДанныеАгента.ОператорПеревода; + ОператорПоПриемуПлатежей = ПозицияЧека.ДанныеАгента.ОператорПоПриемуПлатежей; + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ПЛ.АГЕНТ ОПЕР.:'"), ПлатежныйАгент.Операция, ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ПЛ.АГЕНТ.ТЛФ.:'"), ПлатежныйАгент.Телефон, ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ОПЕРАТОР ПЕРЕВОДА:'"), ОператорПеревода.Наименование, ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ТЛФ.ОП.ПЕРЕВОДА:'"), ОператорПеревода.Телефон, ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='АДР.ОП.ПЕРЕВОДА:'"), ОператорПеревода.Адрес, ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ИНН ОП.ПЕРЕВОДА:'"), ОператорПеревода.ИНН, ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ОПЕР.ПО ПРИЕМУ ПЛАТ.ТЛФ:'"), ОператорПоПриемуПлатежей.Телефон, ФорматПраво); + // -- Локализация + + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ДОП.РЕК.:'"), ПозицияЧека.ДополнительныйРеквизит, ФорматПраво); + +КонецПроцедуры + +// Генерирует шаблон текстовой строки в позиции кассового чека. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// ПозицияЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонКассовыйЧекПозицияЧекаТекстоваяСтрока(Шаблон, ПозицияЧека) + + Модуль = ШаблоныФискальныхДокументов; + + Формат = Модуль.ФорматСтрока(ГоризонтальноеПоложение[ПозицияЧека.Выравнивание]); + Модуль.ДобавитьСтроку (Шаблон, ПозицияЧека.Текст, Формат); + +КонецПроцедуры + +// Генерирует шаблон строки штрихкода в позиции кассового чека. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// ПозицияЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыШтрихкодВСтрокеЧека +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонКассовыйЧекПозицияЧекаШтрихкод(Шаблон, ПозицияЧека) + + Модуль = ШаблоныФискальныхДокументов; + + Формат = Модуль.ФорматШтрихкод(ГоризонтальноеПоложение.Центр, ПозицияЧека.ТипШтрихкода, 2); + Модуль.ДобавитьСтроку(Шаблон, ПозицияЧека.ШтрихкодBase64, Формат); + Модуль.ДобавитьСтроку(Шаблон, " "); + +КонецПроцедуры + +// Генерирует шаблон подвала кассового чека. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека. +// ФискальнаяОперация - Структура. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонКассовыйЧекПодвал(Шаблон, Данные, ФискальнаяОперация, Параметры) + + Модуль = ШаблоныФискальныхДокументов; + + ФорматРазделитель = Модуль.ФорматРазделитель(); + ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр); + ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право); + ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево); + ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине); + + // позиции чека + ФорматЧисла2 = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0"; + ФорматЧисла3 = "ЧРД=.;ЧЦ=12;ЧДЦ=3;ЧН=0.000;ЧГ=0"; + + СуммаОплаты = Данные.СуммаОплаты; + СуммаЧека = Данные.СуммаЧека; + + Модуль.ДобавитьСтроку (Шаблон, "-", ФорматРазделитель); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИТОГ='"), Формат(СуммаЧека, ФорматЧисла2), ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, "-", ФорматРазделитель); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ОПЛАТА'"), ФорматЛево); + + ФорматШирина2 = ШаблоныФискальныхДокументов.ФорматСтрокаШирина(2); + Для Каждого СтрокаОплаты Из Данные.ТекстТаблицаОплат Цикл + Модуль.ДобавитьСтроку (Шаблон, " ", ФорматШирина2); + Модуль.ДобавитьКолонку(Шаблон, СтрокаОплаты.Ключ, Формат(СтрокаОплаты.Значение, ФорматЧисла2), ФорматПраво); + КонецЦикла; + + Если СуммаОплаты - СуммаЧека > 0 Тогда + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ПОЛУЧЕНО='"), Формат(СуммаОплаты, ФорматЧисла2), ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='СДАЧА='"), Формат(СуммаОплаты - СуммаЧека, ФорматЧисла2), ФорматПраво); + КонецЕсли; + + // ++ Локализация + СНОКод = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодСистемыНалогообложенияККТ(Данные.СистемаНалогообложения); + СНО = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеСистемыНалогообложения(СНОКод, Истина); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='СНО:'"), СНО, ФорматЛево); + // -- Локализация + + Для Каждого СтрокаНДС Из Данные.ТекстТаблицаНДС Цикл + Модуль.ДобавитьСтроку (Шаблон, " ", ФорматШирина2); + Модуль.ДобавитьКолонку(Шаблон, СтрокаНДС.Ключ, Формат(СтрокаНДС.Значение, ФорматЧисла2), ФорматПраво); + КонецЦикла; + + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССИР:'"), Данные.Кассир, ФорматЛево); + Если Параметры.Подпись Тогда + Формат = ШаблоныФискальныхДокументов.НовыйФормат(ФорматЛево); + Формат.Заполнитель = "_"; + Формат.ВыводитьЗаголовок = Истина; + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПОДПИСЬ:'"), Формат); + КонецЕсли; + Модуль.ДобавитьСтроку (Шаблон, Параметры.ДополнительныйТекст, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.ТекстПодвала, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, "======", ФорматРазделитель); + + // QR код и данные фискальной операции + Если Параметры.ВыводитьФискальнуюИнформацию И ФискальнаяОперация <> Неопределено Тогда + Модуль.ДобавитьСтроку(Шаблон, " "); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='РН ККТ:'"), ФискальнаяОперация.РегистрационныйНомерККТ, ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ФН №:'"), ФискальнаяОперация.ЗаводскойНомерФН, ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ФД №:'"), Формат(ФискальнаяОперация.НомерЧекаККМ,"ЧГ="), ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ФП:'"), ФискальнаяОперация.ФискальныйПризнак, ФорматПраво); + Модуль.ДобавитьСтроку(Шаблон, " "); + Формат = Модуль.ФорматШтрихкод(ГоризонтальноеПоложение.Центр, "QR", 6, Ложь); + Модуль.ДобавитьСтроку(Шаблон, Данные.QRКод.ЗначениеКода, Формат); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ГенераторШаблона + +// Конструктор элемента шаблона. +// +// Возвращаемое значение: +// Структура: +// * Строки - Массив из Строка - массив сформированных строк. +// * Колонки - Массив из см. НоваяКолонкаЭлементаШаблона. +// * Картинки - Массив из Структура. +// * ВыводитьПоСтрокам - Булево. +// * ЭлементXML - Структура +// * ИмяАтрибутаXML - Строка. +// +Функция НовыйЭлементШаблона() + + Элемент = Новый Структура(); + Элемент.Вставить("Строки", Новый Массив()); // Массив из Строка + Элемент.Вставить("Колонки", Новый Массив()); // Массив из см. НоваяКолонкаЭлементаШаблона + Элемент.Вставить("Картинки", Новый Массив()); // Массив из Структура + Элемент.Вставить("ВыводитьПоСтрокам", Истина); + Элемент.Вставить("ЭлементXML", Новый Структура()); + Элемент.Вставить("ИмяАтрибутаXML", ""); + Возврат Элемент; + +КонецФункции + +// Создает и возвращает структуру содержащую данные о колонке. +// +// Возвращаемое значение: +// Структура: +// * Тип - Строка - тип строки шаблона: Строка, Разделитель, Штрихкод, XML. +// * Выравнивание - ГоризонтальноеПоложение. +// * ВыравниваниеЗаголовка - Булево. +// * ОбтеканиеСлева - Булево. +// * ОбтеканиеСправа - Булево. +// * Ширина - Число - ширина поля абсолютное значение. +// * ШиринаФормат - Строка - ширина поля абсолютное или процент. +// * ВыводитьЗаголовок - Булево - флаг принудительного вывода заголовка если строка не содержит значения. +// * ПодавлятьПробелы - Булево. +// * Заполнитель - Строка - символы заполнитель при выравнивании. +// * ШтрихкодТип - Строка. +// * ШтрихкодВысота - Число. +// * Заголовок - Строка - заголовок поля, строка из шаблона до первого выражения. +// * Значение - Произвольный. +// * Строка - Строка - значение преобразованное в строку. +// * НачальнаяПозиция - Число - позиция в строке где начинается первая строка колонки. +// * НачальнаяШирина - Число - первоначальная ширина колонки. +// * НоваяШирина - Число - новая ширина колонки, используется при расчете обтекания. +// * Завершена - Булево - вывод колонки завершен, используется при расчете обтекания. +// * НачальнаяСтрока - Число. +// +Функция НоваяКолонкаЭлементаШаблона() + + Колонка = Новый Структура(); + Колонка.Вставить("Тип", "СТРОКА"); + // формат колонки + Выравнивание = ГоризонтальноеПоложение.Лево; // ГоризонтальноеПоложение + Колонка.Вставить("Выравнивание", Выравнивание); + Колонка.Вставить("ВыравниваниеЗаголовка", Ложь); + Колонка.Вставить("ОбтеканиеСлева", Ложь); + Колонка.Вставить("ОбтеканиеСправа", Ложь); + Колонка.Вставить("Ширина", 0); + Колонка.Вставить("ШиринаФормат", "0"); + Колонка.Вставить("ВыводитьЗаголовок", Ложь); + Колонка.Вставить("ПодавлятьПробелы", Истина); + Колонка.Вставить("Заполнитель", " "); + Колонка.Вставить("ШтрихкодТип", "EAN13"); + Колонка.Вставить("ШтрихкодВысота", 2); + Колонка.Вставить("ИспользоватьBase64", Истина); + // значения + Колонка.Вставить("Заголовок", ""); + Колонка.Вставить("Значение", Неопределено); + Колонка.Вставить("Строка", ""); + // служебные свойства + Колонка.Вставить("НачальнаяПозиция", 0); + Колонка.Вставить("НачальнаяШирина", 0); + Колонка.Вставить("НоваяШирина", 0); + Колонка.Вставить("Завершена", Ложь); + Колонка.Вставить("НачальнаяСтрока", 0); + + + Возврат Колонка; + +КонецФункции + +// Выполняет пересчет размеров колонок, для создания эффекта обтекания. +// +// Параметры: +// МассивКолонок - Массив из см. НоваяКолонкаЭлементаШаблона. +// +Процедура ПересчитатьРазмерыКолонок(МассивКолонок) + + Индекс = 0; + Пока Индекс<=МассивКолонок.ВГраница() Цикл + + Колонка = МассивКолонок[Индекс]; + Если Не Колонка.Завершена Тогда + // выполнить обтекание влево + Если Колонка.ОбтеканиеСлева Тогда + ИндексКолонкиСлева = Индекс-1; + Пока ИндексКолонкиСлева>=0 Цикл + Если МассивКолонок[ИндексКолонкиСлева].НоваяШирина = 0 + И МассивКолонок[ИндексКолонкиСлева].Ширина>0 Тогда + Колонка.Ширина = Колонка.Ширина + МассивКолонок[ИндексКолонкиСлева].Ширина; + МассивКолонок[ИндексКолонкиСлева].Ширина = 0; + Иначе + Прервать; + КонецЕсли; + ИндексКолонкиСлева = ИндексКолонкиСлева - 1; + КонецЦикла; + + КонецЕсли; + // выполнить обтекание вправо + Если Колонка.ОбтеканиеСправа Тогда + ИндексКолонкиСправа = Индекс + 1; + Пока ИндексКолонкиСправа <= МассивКолонок.ВГраница() Цикл + Если МассивКолонок[ИндексКолонкиСправа].НоваяШирина = 0 + И МассивКолонок[ИндексКолонкиСправа].Ширина>0 Тогда + Колонка.Ширина = Колонка.Ширина + МассивКолонок[ИндексКолонкиСправа].Ширина; + МассивКолонок[ИндексКолонкиСправа].Ширина = 0; + Иначе + Прервать; + КонецЕсли; + ИндексКолонкиСправа = ИндексКолонкиСправа + 1; + КонецЦикла; + + КонецЕсли; + КонецЕсли; + Индекс = Индекс + 1; + КонецЦикла; + +КонецПроцедуры + +// Выравнивает строку по переданным правилам, по заданной ширине. +// +// Параметры: +// Заголовок - Строка - текст который будет выведен перед строкой. +// Строка - Строка - строка которую требуется выровнять. +// Выравнивание - ГоризонтальноеПоложение. +// ВыравниваниеЗаголовка - Булево - выравнивать ли заголовок вместе с текстом. +// ШиринаСтроки - Число - ширина строки по которой требуется выровнять строку. +// Заполнитель - Строка - символы которые будут использоваться как пустая строка при заполнении. +// +// Возвращаемое значение: +// Строка - Строка - выровненная по правилам строка. +// +Функция ВыровнятьСтроку(Заголовок, Строка, Выравнивание, ВыравниваниеЗаголовка, ШиринаСтроки, Заполнитель = " ") + + ПустаяСтрока = СтрокаСимволов(ШиринаСтроки, Заполнитель); + + Если Выравнивание = ГоризонтальноеПоложение.Право И Не ВыравниваниеЗаголовка Тогда // выравнивание справа без заголовка + Размер = ШиринаСтроки - СтрДлина(Заголовок); + Результат = Заголовок + Прав(ПустаяСтрока + Строка, Размер); + ИначеЕсли Выравнивание = ГоризонтальноеПоложение.Право И ВыравниваниеЗаголовка Тогда // выравнивание справа вместе с заголовком + Размер = ШиринаСтроки; + Результат = Прав(ПустаяСтрока + Заголовок + Строка, Размер); + ИначеЕсли Выравнивание = ГоризонтальноеПоложение.Лево И Не ВыравниваниеЗаголовка Тогда // выравнивание слева без заголовка + Размер = ШиринаСтроки - СтрДлина(Заголовок); + Результат = Заголовок + Лев(Строка + ПустаяСтрока, Размер); + ИначеЕсли Выравнивание = ГоризонтальноеПоложение.Лево И ВыравниваниеЗаголовка Тогда // выравнивание слева вместе с заголовком + Размер = ШиринаСтроки; + Результат = Лев(Заголовок + Строка + ПустаяСтрока, Размер); + ИначеЕсли Выравнивание = ГоризонтальноеПоложение.Центр И Не ВыравниваниеЗаголовка Тогда // выравнивание по центру без заголовка + Размер = ШиринаСтроки - СтрДлина(Заголовок); + РазмерСтроки = СтрДлина(Строка); + РазмерСлева = Цел((Размер - РазмерСтроки) / 2); + Результат = Заголовок + Лев(Лев(ПустаяСтрока, РазмерСлева) + Строка + ПустаяСтрока, Размер); + ИначеЕсли Выравнивание = ГоризонтальноеПоложение.Центр И ВыравниваниеЗаголовка Тогда // выравнивание по центру вместе с заголовком + Размер = ШиринаСтроки; + РазмерСтроки = СтрДлина(Заголовок + Строка); + РазмерСлева = Цел((Размер - РазмерСтроки) / 2); + Результат = Лев(Лев(ПустаяСтрока, РазмерСлева) + Заголовок + Строка + ПустаяСтрока, Размер); + ИначеЕсли Выравнивание = ГоризонтальноеПоложение.ПоШирине И ВыравниваниеЗаголовка Тогда // выравнивание по ширине вместе с заголовком + Текст = Заголовок + Строка; + Размер = ШиринаСтроки; + РазмерСтроки = СтрДлина(Текст); + Строки = СтрРазделить(Текст, " ", Истина); + Индекс = 0; + Пока РазмерСтроки<Размер Цикл + Строки[Индекс] = Строки[Индекс]+" "; + Индекс = ?(Индекс < Строки.ВГраница()-1, Индекс + 1, 0); + РазмерСтроки = РазмерСтроки + 1; + КонецЦикла; + Результат = СтрСоединить(Строки, " "); + ИначеЕсли Выравнивание = ГоризонтальноеПоложение.ПоШирине И Не ВыравниваниеЗаголовка Тогда // выравнивание по ширине без заголовка + Текст = Строка; + Размер = ШиринаСтроки; + РазмерСтроки = СтрДлина(Текст); + Строки = СтрРазделить(Текст, " ", Истина); + Индекс = 0; + Пока РазмерСтроки<Размер Цикл + Строки[Индекс] = Строки[Индекс]+" "; + Индекс = ?(Индекс < Строки.ВГраница()-1, Индекс + 1, 0); + РазмерСтроки = РазмерСтроки + 1; + КонецЦикла; + Результат = Заголовок + СтрСоединить(Строки, " "); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает строку отрезанную по пробелу, что бы она поместилась в заданный размер. +// +// Параметры: +// Текст - Строка - строка из которой требуется вырезать слова. +// Размер - Число - максимальный размер строки. +// +// Возвращаемое значение: +// Строка - отрезанная по пробелу строка. +// +Функция ВырезатьСлеваПоСловам(Текст, Размер) + + СледующийПробел = СтрНайти(Текст, " "); + ДлинаТекста = СтрДлина(Текст); + Если СледующийПробел > Размер+1 Тогда + // пробел после строки, отрезается по символам + ПозицияПробел = Размер; + ИначеЕсли СледующийПробел = 0 Тогда + // нет пробелов, отрезается либо по размеру, либо по всей строке + ПозицияПробел = Мин(Размер, ДлинаТекста); + Иначе + // есть пробел в границе + Пока СледующийПробел <= Размер+1 Цикл + ПозицияПробел = СледующийПробел; + Если ПозицияПробел < ДлинаТекста Тогда + СледующийПробел = СтрНайти(Текст, " ", , ПозицияПробел+1); + Иначе + СледующийПробел = ДлинаТекста; + КонецЕсли; + Если СледующийПробел = 0 Тогда + Если ПозицияПробел = 0 Тогда + ПозицияПробел = Размер; + ИначеЕсли Размер >= ДлинаТекста Тогда + ПозицияПробел = ДлинаТекста; + КонецЕсли; + Прервать; + ИначеЕсли СледующийПробел = ДлинаТекста Тогда + ПозицияПробел = СледующийПробел; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Результат = СокрЛП(Лев(Текст, ПозицияПробел)); + Текст = СокрЛП(Сред(Текст, ПозицияПробел+1)); + + Возврат Результат; + +КонецФункции + +// Возвращает код типа штрихкода по имени для передачи в ГенерацияШтрихкода. +// +// Параметры: +// СтрокаТипШтрихкода - Строка - текстовое представление вида штрихкода. +// +// Возвращаемое значение: +// Число - числовое представление штрихкода, для использования в генерации штрихкодов. +// +Функция ЧисловойТипШтрихкода(СтрокаТипШтрихкода) + + ТипыШтрихкода = Новый Соответствие(); + ТипыШтрихкода.Вставить("EAN8", 0); + ТипыШтрихкода.Вставить("EAN13", 1); + ТипыШтрихкода.Вставить("EAN128", 2); + ТипыШтрихкода.Вставить("Code39", 3); + ТипыШтрихкода.Вставить("Code128", 4); + ТипыШтрихкода.Вставить("Code16k", 5); + ТипыШтрихкода.Вставить("PDF417", 6); + ТипыШтрихкода.Вставить("Standart (Industrial) 2 of 5", 7); + ТипыШтрихкода.Вставить("Interleaved 2 of 5", 8); + ТипыШтрихкода.Вставить("Code39", 9); + ТипыШтрихкода.Вставить("Code93", 10); + ТипыШтрихкода.Вставить("ITF14", 11); + ТипыШтрихкода.Вставить("RSS14", 12); + ТипыШтрихкода.Вставить("EAN13AddOn2", 14); + ТипыШтрихкода.Вставить("EAN13AddOn5", 15); + ТипыШтрихкода.Вставить("QR", 16); + ТипыШтрихкода.Вставить("GS1DataBarExpandedStacked", 17); + ТипыШтрихкода.Вставить("Datamatrix ASCII", 18); + ТипыШтрихкода.Вставить("Datamatrix BASE256", 19); + ТипыШтрихкода.Вставить("Datamatrix TEXT", 20); + ТипыШтрихкода.Вставить("Datamatrix C40", 21); + ТипыШтрихкода.Вставить("Datamatrix X12", 22); + ТипыШтрихкода.Вставить("Datamatrix EDIFACT", 23); + ТипыШтрихкода.Вставить("Datamatrix GS1ASCII", 24); + + Результат = ТипыШтрихкода.Получить(СтрокаТипШтрихкода); + + Возврат ?(Результат = Неопределено, 99, Результат); + +КонецФункции + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ШтрихкодированиеОбщегоНазначенияИС.xml b/CommonModules/ШтрихкодированиеОбщегоНазначенияИС.xml new file mode 100644 index 0000000..fe0858b --- /dev/null +++ b/CommonModules/ШтрихкодированиеОбщегоНазначенияИС.xml @@ -0,0 +1,23 @@ + + + + + ШтрихкодированиеОбщегоНазначенияИС + + + ru + Штрихкодирование общего назначения ИС + + + + false + false + true + true + false + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ШтрихкодированиеОбщегоНазначенияИС/Ext/Module.bsl b/CommonModules/ШтрихкодированиеОбщегоНазначенияИС/Ext/Module.bsl new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/CommonModules/ШтрихкодированиеОбщегоНазначенияИС/Ext/Module.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/CommonModules/ЭлектронныеСертификатыНСПК.xml b/CommonModules/ЭлектронныеСертификатыНСПК.xml new file mode 100644 index 0000000..0a92954 --- /dev/null +++ b/CommonModules/ЭлектронныеСертификатыНСПК.xml @@ -0,0 +1,23 @@ + + + + + ЭлектронныеСертификатыНСПК + + + ru + Электронные сертификаты НСПК + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ЭлектронныеСертификатыНСПК/Ext/Module.bsl b/CommonModules/ЭлектронныеСертификатыНСПК/Ext/Module.bsl new file mode 100644 index 0000000..20ade97 --- /dev/null +++ b/CommonModules/ЭлектронныеСертификатыНСПК/Ext/Module.bsl @@ -0,0 +1,842 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Возвращает признак наличия ошибок отправки подтверждений НСПК. +// +// Возвращаемое значение: +// Булево - признак наличия ошибок отправки подтверждений НСПК. +// +Функция ЕстьОшибкиОтправкиПодтвержденийНСПК() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТекстЗапроса = + "ВЫБРАТЬ + | ОшибкиПодтвержденияНСПК.ОснованиеФискальнойОперации КАК ОснованиеФискальнойОперации + |ИЗ + | РегистрСведений.ОшибкиПодтвержденияНСПК КАК ОшибкиПодтвержденияНСПК"; + Запрос = Новый Запрос(ТекстЗапроса); + + Результат = НЕ Запрос.Выполнить().Пустой(); + + Возврат Результат; + +КонецФункции + +// Возвращает представление ошибки операции НСПК. +// +// Параметры: +// ОснованиеФискальнойОперации - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО. +// +// Возвращаемое значение: +// Строка - содержит представление ошибки НСПК. +// +Функция ПолучитьПредставлениеОшибкиНСПК(ОснованиеФискальнойОперации) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Результат = Неопределено; + + ТекстЗапроса = + "ВЫБРАТЬ + | ОшибкиПодтвержденияНСПК.ОснованиеФискальнойОперации КАК ОснованиеФискальнойОперации, + | ОшибкиПодтвержденияНСПК.КодРезультата КАК КодРезультата, + | ОшибкиПодтвержденияНСПК.ОписаниеОшибки КАК ОписаниеОшибки + |ИЗ + | РегистрСведений.ОшибкиПодтвержденияНСПК КАК ОшибкиПодтвержденияНСПК + |ГДЕ + | ОшибкиПодтвержденияНСПК.ОснованиеФискальнойОперации = &ОснованиеФискальнойОперации"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ОснованиеФискальнойОперации", ОснованиеФискальнойОперации); + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + Результат = СтрШаблон(НСтр("ru='%1 + |Код результата: %2 + |Описание ошибки: %3'"), + Строка(ОснованиеФискальнойОперации), + Строка(Выборка.КодРезультата), + Строка(Выборка.ОписаниеОшибки)); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: используйте клиентскую версию компоненты. +// Возвращает версию ВК взаимодействия с НСПК +// +// Возвращаемое значение: +// Строка - Версия ВК. +// +Функция ВерсияВК() Экспорт + + ВнешняяКомпонента = ПодготовитьКомпонентуИнтеграцииНСПК(); + Версия = ВнешняяКомпонента.Версия(); + + Возврат Версия; + +КонецФункции + +// Устарела: используйте клиентскую версию компоненты. +// Тестовое подключение к НСПК +// +// Параметры: +// ПараметрыОперации - см.ЭлектронныеСертификатыНСПК.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// Структура: +// *Результат - Булево. +// *КодРезультата - Число. +// *ОписаниеОшибки - Строка. +// *ТоварныеПозиции - Массив. +// *ИдентификаторКорзины - Число. +// *СуммаСертификатами - Число. +// +Функция ТестовоеПодключение(ПараметрыОперации) Экспорт + + ВнешняяКомпонента = ПодготовитьКомпонентуИнтеграцииНСПК(ПараметрыОперации); + + ИдентификаторЗапроса = ПараметрыОперации.ИдентификаторЗапроса; + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ТестовоеСообщение = НСтр("ru = 'Тест 1С'"); + + ТекстРезультата = ВнешняяКомпонента.эхо(ИдентификаторЗапроса, ИдентификаторКассы, ТестовоеСообщение); + + СписокОшибок = ВнешняяКомпонента.ПолучитьСписокОшибок(); + РезультатВыполнения = ПрочитатьJSONРезультатОперации(ТекстРезультата, СписокОшибок); + + Возврат РезультатВыполнения; + +КонецФункции + +// Устарела: используйте клиентскую версию компоненты. +// Предварительное одобрение использования сертификатов +// +// Параметры: +// ПараметрыОперации - см.ЭлектронныеСертификатыНСПК.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// Структура: +// *Результат - Булево. +// *КодРезультата - Число. +// *ОписаниеОшибки - Строка. +// *ТоварныеПозиции - Массив. +// *ИдентификаторКорзины - Число. +// *СуммаСертификатами - Число. +// +Функция ПредварительноеОдобрениеИспользования(ПараметрыОперации) Экспорт + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПроверитьПараметрыОперации(ПараметрыОперации, Истина); + Если НЕ РезультатВыполнения.Результат Тогда + Возврат РезультатВыполнения; + КонецЕсли; + + ВнешняяКомпонента = ПодготовитьКомпонентуИнтеграцииНСПК(ПараметрыОперации); + + ИдентификаторЗапроса = Строка(ПараметрыОперации.ИдентификаторЗапроса); + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ХешНомерКарты = ПараметрыОперации.ХешНомерКарты; + СсылкаНаПлатежныйСчет = ПараметрыОперации.СсылкаНаПлатежныйСчет; + ТоварныеПозицииJSON = ЭлектронныеСертификатыНСПККлиентСервер.ПолучитьJSONТоварныеПозиции(ПараметрыОперации.ТоварныеПозиции, Истина); + + ТекстРезультата = ВнешняяКомпонента.ЗапросНаПредварительноеОдобрениеИспользования( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + ХешНомерКарты, // Строка + СсылкаНаПлатежныйСчет, // Строка + ТоварныеПозицииJSON); // Строка + + Параметры = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + Параметры.ТекстРезультата = ТекстРезультата; + Параметры.СписокОшибок = ВнешняяКомпонента.ПолучитьСписокОшибок(); + Параметры.ПараметрыОперации = ПараметрыОперации; + Параметры.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПредварительноеОдобрениеИспользованияЭС(); + + РезультатВыполнения = ЭлектронныеСертификатыНСПК.ОбработатьРезультатВыполненияНаСервере(Параметры); + + Возврат РезультатВыполнения; + +КонецФункции + +// Устарела: используйте клиентскую версию компоненты. +// Предварительное одобрение возврата сертификатов +// +// Параметры: +// ПараметрыОперации - см.ЭлектронныеСертификатыНСПК.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// Структура: +// *Результат - Булево. +// *КодРезультата - Число. +// *ОписаниеОшибки - Строка. +// *ТоварныеПозиции - Массив. +// *ИдентификаторКорзины - Число. +// *СуммаСертификатами - Число. +// +Функция ПредварительноеОдобрениеВозврата(ПараметрыОперации) Экспорт + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПроверитьПараметрыОперации(ПараметрыОперации, Истина); + Если НЕ РезультатВыполнения.Результат Тогда + Возврат РезультатВыполнения; + КонецЕсли; + + ВнешняяКомпонента = ПодготовитьКомпонентуИнтеграцииНСПК(ПараметрыОперации); + + ИдентификаторЗапроса = Строка(ПараметрыОперации.ИдентификаторЗапроса); + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ХешНомерКарты = ПараметрыОперации.ХешНомерКарты; + СсылкаНаПлатежныйСчет = ПараметрыОперации.СсылкаНаПлатежныйСчет; + ИдентификаторКорзины = ПараметрыОперации.ИдентификаторКорзины; + ТоварныеПозицииJSON = ЭлектронныеСертификатыНСПККлиентСервер.ПолучитьJSONТоварныеПозиции(ПараметрыОперации.ТоварныеПозиции); + + ТекстРезультата = ВнешняяКомпонента.ЗапросНаПредварительноеОдобрениеВозврата( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + ИдентификаторКорзины, // Строка + ХешНомерКарты, // Строка + СсылкаНаПлатежныйСчет, // Строка + ТоварныеПозицииJSON); // Строка + + Параметры = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + Параметры.ТекстРезультата = ТекстРезультата; + Параметры.СписокОшибок = ВнешняяКомпонента.ПолучитьСписокОшибок(); + Параметры.ПараметрыОперации = ПараметрыОперации; + Параметры.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПредварительноеОдобрениеВозвратаЭС(); + + РезультатВыполнения = ЭлектронныеСертификатыНСПК.ОбработатьРезультатВыполненияНаСервере(Параметры); + + Возврат РезультатВыполнения; + +КонецФункции + +// Устарела: используйте клиентскую версию компоненты. +// Получение идентификатора корзины +// +// Параметры: +// ПараметрыОперации - см.ЭлектронныеСертификатыНСПК.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// Структура: +// *Результат - Булево. +// *КодРезультата - Число. +// *ОписаниеОшибки - Строка. +// *ИдентификаторКорзины - Число. +// +Функция ПолучениеИдентификатораКорзины(ПараметрыОперации) Экспорт + + ВнешняяКомпонента = ПодготовитьКомпонентуИнтеграцииНСПК(ПараметрыОперации); + + ИдентификаторЗапроса = ПараметрыОперации.ИдентификаторЗапроса; + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + + НомерФискальногоНакопителя = ПараметрыОперации.НомерФискальногоНакопителя; + ФискальныйПризнакЧека = ПараметрыОперации.ФискальныйПризнакЧека; + ФискальныйЧекНомер = ПараметрыОперации.ФискальныйЧекНомер; + + Если НЕ ПустаяСтрока(ПараметрыОперации.QRКодЧекаККТ) Тогда + ДанныеШтрихкода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.РасшифроватьQRКодЧекаККТ(ПараметрыОперации.QRКодЧекаККТ); + Если ДанныеШтрихкода.Расшифрован Тогда + НомерФискальногоНакопителя = ДанныеШтрихкода.НомерФискальногоНакопителя; + ФискальныйПризнакЧека = ДанныеШтрихкода.ФискальныйПризнак; + ФискальныйЧекНомер = ДанныеШтрихкода.НомерФискальногоДокумента; + КонецЕсли; + КонецЕсли; + + ФискальныйПризнакЧека = Строка(ФискальныйПризнакЧека); + ФискальныйЧекНомер = Формат(Число(ФискальныйЧекНомер), "ЧГ=0"); + + ТекстРезультата = ВнешняяКомпонента.ЗапросНаПолучениеИдентификатораКорзиныОперацииПокупки( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + НомерФискальногоНакопителя, // Строка + ФискальныйЧекНомер, // Строка + ФискальныйПризнакЧека); // Строка + + Параметры = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + Параметры.ТекстРезультата = ТекстРезультата; + Параметры.СписокОшибок = ВнешняяКомпонента.ПолучитьСписокОшибок(); + Параметры.ПараметрыОперации = ПараметрыОперации; + Параметры.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПолучениеИдентификатораОперации(); + + РезультатВыполнения = ЭлектронныеСертификатыНСПК.ОбработатьРезультатВыполненияНаСервере(Параметры); + + Возврат РезультатВыполнения; + +КонецФункции + +// Устарела: используйте клиентскую версию компоненты. +// Передача данных фискального чека +// +// Параметры: +// ПараметрыОперации - см.ЭлектронныеСертификатыНСПК.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// Структура: +// *Результат - Булево. +// *КодРезультата - Число. +// *ОписаниеОшибки - Строка. +// *ТоварныеПозиции - Массив. +// *ИдентификаторКорзины - Число. +// *СуммаСертификатами - Число. +// +Функция ПередачаДанныхФискальногоЧека(ПараметрыОперации) Экспорт + + ВнешняяКомпонента = ПодготовитьКомпонентуИнтеграцииНСПК(ПараметрыОперации); + + ИдентификаторЗапроса = ПараметрыОперации.ИдентификаторЗапроса; + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ИдентификаторКорзины = ПараметрыОперации.ИдентификаторКорзины; + + НомерФискальногоНакопителя = Строка(ПараметрыОперации.НомерФискальногоНакопителя); + ФискальныйТипРасчета = Число(ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодРасчетаДенежнымиСредствами(ПараметрыОперации.ФискальныйТипРасчета)); + ФискальныйПризнакЧека = Строка(ПараметрыОперации.ФискальныйПризнакЧека); + + ФискальныйЧекНомер = Формат(Число(ПараметрыОперации.ФискальныйЧекНомер), "ЧГ=0"); + ФискальныйЧекСумма = Формат(ПараметрыОперации.ФискальныйЧекСумма, "ЧГ=0;ЧДЦ=2;ЧРД=."); + ФискальныйМестоРасчетов = Строка(ПараметрыОперации.ФискальныйМестоРасчетов); + // АПК: 1367-выкл особенность локального законодательства + Если ПараметрыОперации.ПротоколОбмена = Перечисления.ПротоколОбменаФЭСНСПК.ВерсияV2 Тогда + ФискальныйЧекДатаВремя = Формат(ПараметрыОперации.ФискальныйЧекДатаВремя, "ДФ=""ггггММддTЧЧмм"""); + Иначе + ФискальныйЧекДатаВремя = Формат(ПараметрыОперации.ФискальныйЧекДатаВремя, "ДФ=""ггггММддЧЧмм"""); + КонецЕсли; + // АПК: 1367 + ОснованиеФискальнойОперации = ПараметрыОперации.ОснованиеФискальнойОперации; + + ТекстРезультата = ВнешняяКомпонента.ПередачаДанныхФискальногоЧека( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + ИдентификаторКорзины, // Строка + НомерФискальногоНакопителя, // Строка + ФискальныйЧекНомер, // Строка + ФискальныйПризнакЧека, // Строка + ФискальныйЧекСумма, // Строка + ФискальныйЧекДатаВремя, // Строка + ФискальныйТипРасчета, // Число + ФискальныйМестоРасчетов); // Строка + + Параметры = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + Параметры.ТекстРезультата = ТекстРезультата; + Параметры.СписокОшибок = ВнешняяКомпонента.ПолучитьСписокОшибок(); + Параметры.ПараметрыОперации = ПараметрыОперации; + Параметры.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПередачаДанныхФискальногоЧека(); + Параметры.ОснованиеФискальнойОперации = ОснованиеФискальнойОперации; + + РезультатВыполнения = ЭлектронныеСертификатыНСПК.ОбработатьРезультатВыполненияНаСервере(Параметры); + + Возврат РезультатВыполнения; + +КонецФункции + +// Устарела: используйте клиентскую версию компоненты. +// Получение состава корзины +// +// Параметры: +// ПараметрыОперации - см.ЭлектронныеСертификатыНСПК.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// Структура: +// *Результат - Булево. +// *КодРезультата - Число. +// *ОписаниеОшибки - Строка. +// *ТоварныеПозиции - Массив. +// *ИдентификаторКорзины - Число. +// *СуммаСертификатами - Число. +// +Функция ПолучениеСоставаКорзины(ПараметрыОперации) Экспорт + + ВнешняяКомпонента = ПодготовитьКомпонентуИнтеграцииНСПК(ПараметрыОперации); + + ИдентификаторЗапроса = ПараметрыОперации.ИдентификаторЗапроса; + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ИдентификаторКорзины = ПараметрыОперации.ИдентификаторКорзины; + + ТекстРезультата = ВнешняяКомпонента.ЗапросНаПолучениеСоставаКорзиныОригинальнойПокупки( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + ИдентификаторКорзины); // Строка + + Параметры = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + Параметры.ТекстРезультата = ТекстРезультата; + Параметры.СписокОшибок = ВнешняяКомпонента.ПолучитьСписокОшибок(); + Параметры.ПараметрыОперации = ПараметрыОперации; + Параметры.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПолучениеСоставаКорзины(); + + РезультатВыполнения = ЭлектронныеСертификатыНСПК.ОбработатьРезультатВыполненияНаСервере(Параметры); + + Возврат РезультатВыполнения; + +КонецФункции + +// Устарела: используйте клиентскую версию компоненты. +// Получение списка сертификатов +// +// Параметры: +// ПараметрыОперации - см.ЭлектронныеСертификатыНСПК.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// Структура: +// *Результат - Булево. +// *КодРезультата - Число. +// *ОписаниеОшибки - Строка. +// +Функция ПолучениеСпискаСертификатов(ПараметрыОперации) Экспорт + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПроверитьПараметрыОперации(ПараметрыОперации, Истина); + Если НЕ РезультатВыполнения.Результат Тогда + Возврат РезультатВыполнения; + КонецЕсли; + + ВнешняяКомпонента = ПодготовитьКомпонентуИнтеграцииНСПК(ПараметрыОперации); + + ИдентификаторЗапроса = Строка(ПараметрыОперации.ИдентификаторЗапроса); + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ХешНомерКарты = ПараметрыОперации.ХешНомерКарты; + СсылкаНаПлатежныйСчет = ПараметрыОперации.СсылкаНаПлатежныйСчет; + + ТекстРезультата = ВнешняяКомпонента.ЗапросНаПолучениеСпискаСертификатов( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + ХешНомерКарты, // Строка + СсылкаНаПлатежныйСчет); // Строка + + Параметры = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + Параметры.ТекстРезультата = ТекстРезультата; + Параметры.СписокОшибок = ВнешняяКомпонента.ПолучитьСписокОшибок(); + Параметры.ПараметрыОперации = ПараметрыОперации; + Параметры.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПолучениеСпискаСертификатов(); + + РезультатВыполнения = ЭлектронныеСертификатыНСПК.ОбработатьРезультатВыполненияНаСервере(Параметры); + + Возврат РезультатВыполнения; + +КонецФункции + +// Устарела: используйте клиентскую версию компоненты. +// Получение списка идентификаторов корзин покупок ТСП +// +// Параметры: +// ПараметрыОперации - см.ЭлектронныеСертификатыНСПК.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// Структура: +// *Результат - Булево. +// *КодРезультата - Число. +// *ОписаниеОшибки - Строка. +// +Функция ПолучениеСпискаИдентификаторовКорзинПокупокТСП(ПараметрыОперации) Экспорт + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПроверитьПараметрыОперации(ПараметрыОперации); + Если НЕ РезультатВыполнения.Результат Тогда + Возврат РезультатВыполнения; + КонецЕсли; + + ВнешняяКомпонента = ПодготовитьКомпонентуИнтеграцииНСПК(ПараметрыОперации); + + ИдентификаторЗапроса = Строка(ПараметрыОперации.ИдентификаторЗапроса); + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ХешНомерКарты = ПараметрыОперации.ХешНомерКарты; + СсылкаНаПлатежныйСчет = ПараметрыОперации.СсылкаНаПлатежныйСчет; + КодТовараТРУ = ПараметрыОперации.КодТовараТРУ; + + ТекстРезультата = ВнешняяКомпонента.ЗапросНаПолучениеСпискаИдентификаторовКорзинПокупокТСП( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + КодТовараТРУ, // Строка + ХешНомерКарты, // Строка + СсылкаНаПлатежныйСчет); // Строка + + Параметры = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + Параметры.ТекстРезультата = ТекстРезультата; + Параметры.СписокОшибок = ВнешняяКомпонента.ПолучитьСписокОшибок(); + Параметры.ПараметрыОперации = ПараметрыОперации; + Параметры.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПолучениеСпискаИдентификаторовКорзинПокупокТСП(); + + РезультатВыполнения = ЭлектронныеСертификатыНСПК.ОбработатьРезультатВыполненияНаСервере(Параметры); + + Возврат РезультатВыполнения; + +КонецФункции + +// Устарела: используйте клиентскую версию компоненты. +// Выполняет подключение внешней компоненты. +// +// Возвращаемое значение: +// ОбъектВнешнейКомпоненты +// Неопределено - если компоненту не удалось загрузить. +// +Функция ПодключитьКомпонентуИнтеграцииНСПК() Экспорт + + ОписаниеКомпоненты = ЭлектронныеСертификатыНСПККлиентСервер.ОписаниеКомпоненты(); + ИмяОбъекта = ОписаниеКомпоненты.ИмяОбъекта; + ПолноеИмяМакета = ОписаниеКомпоненты.ПолноеИмяМакета; + + Возврат ВнешниеКомпонентыБПО.ПодключитьКомпоненту(ИмяОбъекта, ПолноеИмяМакета); + +КонецФункции + +// Устарела: используйте клиентскую версию компоненты. +// Пустая структура для выполнения операции взаимодействия с сервером НСПК +// +// Возвращаемое значение: +// Структура: +// * АдресСервера - Строка - Endpoint +// * КлючДоступа - Строка - APIKey +// * КлючКассы - Строка - MACKey +// +Функция ПараметрыОперацииНСПК() Экспорт + + Возврат ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК(); + +КонецФункции + +// Устарела: используйте клиентскую версию компоненты. +// Пустая структура для параметров товарной позиции +// +// Возвращаемое значение: +// Структура: +// * НомерПозиции - Строка - Порядковый номер позиции в корзине начиная с 1 +// * Артикул - Строка - Артикул товара +// * КодТовараТРУ - Строка - Полный код товара, согласованный с перечнем ТРУ +// * Количество - Число - Количество единиц товара +// * Цена - Число - Цена за единицу товара в рублях +// * Сертификаты - Массив из см.ЭлектронныеСертификатыНСПК.ПараметрыСертификата +// +Функция ПараметрыТоварнойПозиции() Экспорт + + Возврат ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыТоварнойПозиции(); + +КонецФункции + +// Устарела: используйте клиентскую версию компоненты. +// Пустая структура параметров сертификата +// +// Возвращаемое значение: +// Структура: +// * Идентификатор - Строка - Идентификатор сертификата +// * Количество - Число - Количество +// * Цена - Число - Цена +// * МаксимальнаяЦена - Число - Максимальная цена +// +Функция ПараметрыСертификата() Экспорт + + Возврат ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыСертификата(); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Выполняет обработку результата отправки подтверждения. +// +Процедура ОбработатьРезультатОтправкиПодтверждения(ОснованиеФискальнойОперации, РезультатВыполнения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.ОшибкиПодтвержденияНСПК.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОснованиеФискальнойОперации = ОснованиеФискальнойОперации; + Если РезультатВыполнения.Результат Тогда + МенеджерЗаписи.Удалить(); + Иначе + МенеджерЗаписи.КодРезультата = РезультатВыполнения.КодРезультата; + МенеджерЗаписи.ОписаниеОшибки = РезультатВыполнения.ОписаниеОшибки; + МенеджерЗаписи.Записать(); + КонецЕсли; + +КонецПроцедуры + +Функция ПрочитатьJSONРезультатОперации(СтрокаJSON, СписокОшибок = Неопределено, ОснованиеФискальнойОперации = Неопределено) Экспорт + + ОписаниеОшибки = ?(ПустаяСтрока(СписокОшибок), "", СписокОшибок); + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации(Ложь, ОписаниеОшибки); + + Если Не ПустаяСтрока(СтрокаJSON) + И Не СтрНачинаетсяС(СтрокаJSON, "") Тогда + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(СтрокаJSON); + + РезультатОперации = ПрочитатьJSON(ЧтениеJSON); + Если РезультатОперации.Свойство("result") Тогда + РезультатВыполнения.КодРезультата = Число(РезультатОперации.result.code); + РезультатВыполнения.Результат = РезультатВыполнения.КодРезультата = 0; + РезультатВыполнения.ОписаниеОшибки = РезультатОперации.result.description; + Если НЕ ПустаяСтрока(ОписаниеОшибки) Тогда + РезультатВыполнения.ОписаниеОшибки = РезультатВыполнения.ОписаниеОшибки = Символы.ПС + ОписаниеОшибки; + КонецЕсли; + КонецЕсли; + + Если РезультатВыполнения.Результат И РезультатОперации.Свойство("purchaseBasketId") Тогда + РезультатВыполнения.ИдентификаторКорзины = РезультатОперации.purchaseBasketId; + КонецЕсли; + + Если РезультатВыполнения.Результат И РезультатОперации.Свойство("basket") Тогда + + Если РезультатОперации.basket.Свойство("purchaseBasketId") Тогда + РезультатВыполнения.ИдентификаторКорзины = РезультатОперации.basket.purchaseBasketId; + КонецЕсли; + Если РезультатОперации.basket.Свойство("returnBasketId") Тогда + РезультатВыполнения.ИдентификаторКорзины = РезультатОперации.basket.returnBasketId; + КонецЕсли; + Если РезультатОперации.basket.Свойство("totalCertAmount") И Число(РезультатОперации.basket.totalCertAmount) > 0 Тогда + РезультатВыполнения.СуммаСертификатами = Число(РезультатОперации.basket.totalCertAmount) / 100; + КонецЕсли; + + Если РезультатОперации.basket.Свойство("article") Тогда + Для Каждого Позиция Из РезультатОперации.basket.article Цикл + + ТоварнаяПозиция = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыТоварнойПозиции(); + Если Позиция.Свойство("articleCode") Тогда + ТоварнаяПозиция.Артикул = Позиция.articleCode; + КонецЕсли; + Если Позиция.Свойство("articleNumber") Тогда + ТоварнаяПозиция.НомерПозиции = Позиция.articleNumber; + КонецЕсли; + Если Позиция.Свойство("price") Тогда + ТоварнаяПозиция.Цена = Число(Позиция.price) / 100; + КонецЕсли; + Если Позиция.Свойство("truCode") Тогда + ТоварнаяПозиция.КодТовараТРУ = Позиция.truCode; + КонецЕсли; + + Если Позиция.Свойство("certificate") Тогда + Для Каждого Сертификат Из Позиция.certificate Цикл + СертификатСтрока = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыСертификата(); + Если Сертификат.Свойство("certificateId") Тогда + СертификатСтрока.Идентификатор = Сертификат.certificateId; + КонецЕсли; + Если Сертификат.Свойство("certCount") Тогда + СертификатСтрока.Количество = Сертификат.certCount; + КонецЕсли; + Если Сертификат.Свойство("certPrice") Тогда + СертификатСтрока.Цена = Число(Сертификат.certPrice) / 100; + КонецЕсли; + Если Сертификат.Свойство("certMaxPrice") Тогда + СертификатСтрока.МаксимальнаяЦена = Число(Сертификат.certMaxPrice) / 100; + КонецЕсли; + ТоварнаяПозиция.Сертификаты.Добавить(СертификатСтрока); + КонецЦикла; + КонецЕсли; + РезультатВыполнения.ТоварныеПозиции.Добавить(ТоварнаяПозиция); + + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если РезультатВыполнения.Результат И РезультатОперации.Свойство("baskets") И ЗначениеЗаполнено(РезультатОперации.baskets) Тогда + Для Каждого ИдентификаторКорзины Из РезультатОперации.baskets Цикл + ИдентификаторКорзиныСтрока = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыИдентификаторовКорзинПокупокТСП(); + Если ИдентификаторКорзины.Свойство("basketId") Тогда + ИдентификаторКорзиныСтрока.ИдентификаторКорзины = ИдентификаторКорзины.basketId; + КонецЕсли; + Если ИдентификаторКорзины.Свойство("authDate") Тогда + ИдентификаторКорзиныСтрока.ДатаАвторизации = XMLЗначение(Тип("Дата"), ИдентификаторКорзины.authDate); + КонецЕсли; + РезультатВыполнения.ИдентификаторыКорзинПокупок.Добавить(ИдентификаторКорзиныСтрока); + КонецЦикла; + КонецЕсли; + + Если РезультатВыполнения.Результат И РезультатОперации.Свойство("certificates") Тогда + Для Каждого Сертификат Из РезультатОперации.certificates Цикл + + СертификатСтрока = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыДоступногоСертификата(); + Если Сертификат.Свойство("id") Тогда + СертификатСтрока.Идентификатор = Сертификат.id; + КонецЕсли; + Если Сертификат.Свойство("comment") Тогда + СертификатСтрока.Комментарий = Сертификат.comment; + КонецЕсли; + Если Сертификат.Свойство("balanceCount") И ЗначениеЗаполнено(Сертификат.balanceCount) Тогда + СертификатСтрока.БалансКоличество = Число(Сертификат.balanceCount); + КонецЕсли; + Если Сертификат.Свойство("balanceMoney") И ЗначениеЗаполнено(Сертификат.balanceMoney) Тогда + СертификатСтрока.БалансДенежныхСредств = Число(Сертификат.balanceMoney) / 100; + КонецЕсли; + Если Сертификат.Свойство("limitMoney") И ЗначениеЗаполнено(Сертификат.limitMoney) Тогда + СертификатСтрока.ЛимитДенежныхСредств = Число(Сертификат.limitMoney) / 100; + КонецЕсли; + Если Сертификат.Свойство("type") Тогда + СертификатСтрока.Тип = Сертификат.type; + КонецЕсли; + Если Сертификат.Свойство("startDate") И ЗначениеЗаполнено(Сертификат.startDate)Тогда + СертификатСтрока.ДатаНачалаДействия = XMLЗначение(Тип("Дата"), Сертификат.startDate); + КонецЕсли; + Если Сертификат.Свойство("expiryDate") И ЗначениеЗаполнено(Сертификат.expiryDate) Тогда + СертификатСтрока.ДатаЗавершенияДействия = XMLЗначение(Тип("Дата"), Сертификат.expiryDate); + КонецЕсли; + + Если Сертификат.Свойство("tru") Тогда + Для Каждого КодТовараТРУ Из Сертификат.tru Цикл + СтрокаКодТовараТРУ = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыДоступногоКодТовараТРУ(); + Если КодТовараТРУ.Свойство("truCode") Тогда + СтрокаКодТовараТРУ.КодТовараТРУ = КодТовараТРУ.truCode; + КонецЕсли; + Если КодТовараТРУ.Свойство("balanceCount") И ЗначениеЗаполнено(КодТовараТРУ.balanceCount) Тогда + СтрокаКодТовараТРУ.БалансКоличество = Число(КодТовараТРУ.balanceCount); + КонецЕсли; + Если КодТовараТРУ.Свойство("balanceMoney") И ЗначениеЗаполнено(КодТовараТРУ.balanceMoney) Тогда + СтрокаКодТовараТРУ.БалансДенежныхСредств = Число(КодТовараТРУ.balanceMoney) / 100; + КонецЕсли; + Если КодТовараТРУ.Свойство("limitMoney") И ЗначениеЗаполнено(КодТовараТРУ.limitMoney) Тогда + СтрокаКодТовараТРУ.ЛимитДенежныхСредств = Число(КодТовараТРУ.limitMoney) / 100; + КонецЕсли; + СертификатСтрока.КодыТоваровТРУ.Добавить(СтрокаКодТовараТРУ); + РезультатВыполнения.ТоварныеПозиции.Добавить(СтрокаКодТовараТРУ); + КонецЦикла; + КонецЕсли; + + РезультатВыполнения.ДоступныеСертификаты.Добавить(СертификатСтрока); + + КонецЦикла; + КонецЕсли; + + ЧтениеJSON.Закрыть(); + Иначе + РезультатВыполнения.ОписаниеОшибки = ?(ПустаяСтрока(ОписаниеОшибки), НСтр("ru = 'Ответ не получен'"), ОписаниеОшибки); + КонецЕсли; + + Если ЗначениеЗаполнено(ОснованиеФискальнойОперации) Тогда + ЭлектронныеСертификатыНСПК.ОбработатьРезультатОтправкиПодтверждения(ОснованиеФискальнойОперации, РезультатВыполнения); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +Функция ОбработатьРезультатВыполненияНаСервере(Параметры) Экспорт + + ТекстРезультата = Параметры.ТекстРезультата; + СписокОшибок = Параметры.СписокОшибок; + ОснованиеФискальнойОперации = Параметры.ОснованиеФискальнойОперации; + ПараметрыОперации = Параметры.ПараметрыОперации; + ТипПлатежнойОперации = Параметры.ТипПлатежнойОперации; + + РезультатВыполнения = ПрочитатьJSONРезультатОперации(ТекстРезультата, СписокОшибок, ОснованиеФискальнойОперации); + + ТипОперации = ТипПлатежнойОперацииПоКоманде(ТипПлатежнойОперации); + ЗаписатьИсториюПлатежнойОперации(ТипОперации, ПараметрыОперации, РезультатВыполнения, ТекстРезультата); + + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Выполняет подготовка внешней компоненты. +// +// Возвращаемое значение: +// ОбъектВнешнейКомпоненты +// Неопределено - если компоненту не удалось загрузить. +// +Функция ПодготовитьКомпонентуИнтеграцииНСПК(ПараметрыОперации = Неопределено) + + ВнешняяКомпонента = ПодключитьКомпонентуИнтеграцииНСПК(); + Если ВнешняяКомпонента = Неопределено Тогда + ТекстСообщения = НСтр("ru = 'Ошибка подключения внешней компоненты НСПК.'"); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Ошибка компоненты НСПК'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()), + ТекстСообщения); + ВызватьИсключение ТекстСообщения; + КонецЕсли; + + Если ПараметрыОперации <> Неопределено Тогда + ПараметрыJSON = ЭлектронныеСертификатыНСПККлиентСервер.ПолучитьJSONПараметры(ПараметрыОперации); + ВнешняяКомпонента.УстановитьПараметры(ПараметрыJSON); + КонецЕсли; + + Возврат ВнешняяКомпонента; + +КонецФункции + +Функция ТипПлатежнойОперацииПоКоманде(Команда) + + ТипыОпераций = Новый Соответствие(); + + ТипыОпераций.Вставить(ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПредварительноеОдобрениеИспользованияЭС(), + Перечисления.ТипыПлатежныхОпераций.ПредварительноеОдобрениеИспользованияЭС); + ТипыОпераций.Вставить(ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПредварительноеОдобрениеВозвратаЭС(), + Перечисления.ТипыПлатежныхОпераций.ПредварительноеОдобрениеВозвратаЭС); + ТипыОпераций.Вставить(ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПередачаДанныхФискальногоЧека(), + Перечисления.ТипыПлатежныхОпераций.ПередачаДанныхФискальногоЧека); + ТипыОпераций.Вставить(ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПолучениеИдентификатораОперации(), + Перечисления.ТипыПлатежныхОпераций.ПолучениеИдентификатораОперации); + ТипыОпераций.Вставить(ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПолучениеСоставаКорзины(), + Перечисления.ТипыПлатежныхОпераций.ПолучениеСоставаКорзины); + ТипыОпераций.Вставить(ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПолучениеСпискаСертификатов(), + Перечисления.ТипыПлатежныхОпераций.ПолучениеСпискаЭС); + ТипыОпераций.Вставить(ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПолучениеСпискаИдентификаторовКорзинПокупокТСП(), + Перечисления.ТипыПлатежныхОпераций.ПолучениеСпискаИдентификаторовКорзинПокупокТСП); + Возврат ТипыОпераций.Получить(Команда); + +КонецФункции + +Процедура ЗаписатьИсториюПлатежнойОперации(ТипОперации, ДанныеОперации, РезультатВыполнения, ТекстОтветаJSON) + + СуммаОперации = 0; + Если ТипОперации = Перечисления.ТипыПлатежныхОпераций.ПередачаДанныхФискальногоЧека Тогда + СуммаОперации = ДанныеОперации.ФискальныйЧекСумма; + Иначе + Для Каждого ТоварнаяПозиция Из ДанныеОперации.ТоварныеПозиции Цикл + Если ТоварнаяПозиция.Цена <> Неопределено И ТоварнаяПозиция.Количество <> Неопределено Тогда + СуммаОперации = СуммаОперации + (ТоварнаяПозиция.Цена * ТоварнаяПозиция.Количество); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб); + ЧтениеJSON = Новый ЧтениеJSON(); + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON); + Сжатие = Новый СжатиеДанных(6); + ОтветBase64 = ""; + + Если Не ПустаяСтрока(ТекстОтветаJSON) + И Не СтрНачинаетсяС(ТекстОтветаJSON, "") Тогда + ЧтениеJSON.УстановитьСтроку(ТекстОтветаJSON); + ОтветJSON = ПрочитатьJSON(ЧтениеJSON); + Если ОтветJSON.Свойство("request", ОтветBase64) <> Неопределено Тогда + ОтветJSON.Удалить("request"); + ЗаписатьJSON(ЗаписьJSON, ОтветJSON, , "ЗаписатьИсториюПлатежнойОперации_ПреобразованиеВJSON", ЭлектронныеСертификатыНСПК); + ТекстОтвета = ЗаписьJSON.Закрыть(); + ТекстЗапроса = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(ОтветBase64)); + Иначе + ЗаписатьJSON(ЗаписьJSON, ДанныеОперации, , "ЗаписатьИсториюПлатежнойОперации_ПреобразованиеВJSON", ЭлектронныеСертификатыНСПК); + ТекстЗапроса = ЗаписьJSON.Закрыть(); + ТекстОтвета = ТекстОтветаJSON; + КонецЕсли; + Иначе + ТекстОтвета = ТекстОтветаJSON; + КонецЕсли; + + ДанныеОперации.Вставить("ТекстЗапроса" , ТекстЗапроса); + ДанныеОперации.Вставить("ТекстОтвета" , ТекстОтвета); + ДанныеОперации.Вставить("СуммаОперации", СуммаОперации); + РезультатВыполнения.Вставить("ВидОплатыНаТерминале", Перечисления.ВидОплатыНаТерминале.Карта); + + ОборудованиеПлатежныеСистемы.ЗаписатьПлатежнуюОперацию(ТипОперации, ДанныеОперации, РезультатВыполнения); + +КонецПроцедуры + +Функция ЗаписатьИсториюПлатежнойОперации_ПреобразованиеВJSON(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт + + Возврат Строка(Значение); + +КонецФункции + +#КонецОбласти diff --git a/CommonModules/ЭлектронныеСертификатыНСПКВызовСервера.xml b/CommonModules/ЭлектронныеСертификатыНСПКВызовСервера.xml new file mode 100644 index 0000000..9e270ce --- /dev/null +++ b/CommonModules/ЭлектронныеСертификатыНСПКВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЭлектронныеСертификатыНСПКВызовСервера + + + ru + Электронные сертификаты НСПК Вызов сервера + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ЭлектронныеСертификатыНСПКВызовСервера/Ext/Module.bsl b/CommonModules/ЭлектронныеСертификатыНСПКВызовСервера/Ext/Module.bsl new file mode 100644 index 0000000..193de27 --- /dev/null +++ b/CommonModules/ЭлектронныеСертификатыНСПКВызовСервера/Ext/Module.bsl @@ -0,0 +1,54 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Обработать данные операции. +// +// Параметры: +// ПараметрыВыполнения - См. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере +// +// Возвращаемое значение: +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации +// +Функция ОбработатьДанныеОперации(ПараметрыВыполнения) Экспорт + + Возврат ЭлектронныеСертификатыНСПК.ОбработатьРезультатВыполненияНаСервере(ПараметрыВыполнения); + +КонецФункции + +// Обработать данные товарной позиции, на сервере, для использования в Web-клиенте +// +// Параметры: +// ТоварныеПозиции - Массив из Структура +// НормализоватьКодТРУ - Булево - Код товара ТРУ преобразовать к виду NNNNNNNNN.NNNNNNNNNYYYYMMMMZZZ +// +// Возвращаемое значение: +// Строка +// +Функция ПолучитьJSONТоварныеПозиции(ТоварныеПозиции, НормализоватьКодТРУ = Ложь) Экспорт + + Возврат ЭлектронныеСертификатыНСПККлиентСервер.ПолучитьJSONТоварныеПозиции(ТоварныеПозиции, НормализоватьКодТРУ); + +КонецФункции + +// Подготовить параметры подключения, на сервере, для использования в Web-клиенте +// +// Параметры: +// ПараметрыОперации - Структура +// +// Возвращаемое значение: +// Строка +// +Функция ПолучитьJSONПараметры(ПараметрыОперации) Экспорт + + Возврат ЭлектронныеСертификатыНСПККлиентСервер.ПолучитьJSONПараметры(ПараметрыОперации); + +КонецФункции + +#КонецОбласти diff --git a/CommonModules/ЭлектронныеСертификатыНСПККлиент.xml b/CommonModules/ЭлектронныеСертификатыНСПККлиент.xml new file mode 100644 index 0000000..7b80b8c --- /dev/null +++ b/CommonModules/ЭлектронныеСертификатыНСПККлиент.xml @@ -0,0 +1,23 @@ + + + + + ЭлектронныеСертификатыНСПККлиент + + + ru + Электронные сертификаты НСПК Клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ЭлектронныеСертификатыНСПККлиент/Ext/Module.bsl b/CommonModules/ЭлектронныеСертификатыНСПККлиент/Ext/Module.bsl new file mode 100644 index 0000000..c9ba41e --- /dev/null +++ b/CommonModules/ЭлектронныеСертификатыНСПККлиент/Ext/Module.bsl @@ -0,0 +1,728 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Установить компоненту для интеграции с НСПК +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - Оповещение вызываемое после установки +// описание результата см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации . +// +Асинх Процедура УстановитьКомпонентуИнтеграцииНСПК(ОповещениеПриЗавершении = Неопределено) Экспорт + + РезультатПодключения = Ждать УстановитьКомпонентуИнтеграцииНСПКАсинх(); + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации(РезультатПодключения.Установлено, РезультатПодключения.ОписаниеОшибки); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + +КонецПроцедуры + +// Установить компоненту для интеграции с НСПК +// +// Возвращаемое значение: +// см. ВнешниеКомпонентыБПОКлиент.РезультатУстановки +// +Асинх Функция УстановитьКомпонентуИнтеграцииНСПКАсинх() Экспорт + + ОписаниеКомпоненты = ЭлектронныеСертификатыНСПККлиентСервер.ОписаниеКомпоненты(); + ИмяОбъекта = ОписаниеКомпоненты.ИмяОбъекта; + ПолноеИмяМакета = ОписаниеКомпоненты.ПолноеИмяМакета; + + РезультатВыполнения = Ждать ВнешниеКомпонентыБПОКлиент.УстановитьКомпонентуИзМакетаАсинх(ПолноеИмяМакета); + + Возврат РезультатВыполнения; + +КонецФункции + +// Начинает подключение компоненты интеграции НСПК +// +// Параметры: +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации +// +Асинх Функция ПодключитьКомпонентуИнтеграцииНСПКАсинх(ПараметрыОперации = Неопределено) Экспорт + + ОписаниеКомпоненты = ЭлектронныеСертификатыНСПККлиентСервер.ОписаниеКомпоненты(); + ИмяОбъекта = ОписаниеКомпоненты.ИмяОбъекта; + ПолноеИмяМакета = ОписаниеКомпоненты.ПолноеИмяМакета; + + ВнешняяКомпонента = МенеджерОборудованияКлиент.ОбъектДрайвераИзКэша(ИмяОбъекта); + Если ВнешняяКомпонента <> Неопределено Тогда + РезультатПодключения = ВнешниеКомпонентыБПОКлиент.РезультатПодключения(); + РезультатПодключения.ПодключаемыйМодуль = ВнешняяКомпонента; + РезультатПодключения.Подключено = Истина; + Иначе + РезультатПодключения = Ждать ВнешниеКомпонентыБПОКлиент.ПодключитьКомпонентуИзМакетаАсинх(ИмяОбъекта, ПолноеИмяМакета); + Если Не РезультатПодключения.Подключено Тогда + РезультатУстановки = Ждать ВнешниеКомпонентыБПОКлиент.УстановитьКомпонентуИзМакетаАсинх(ПолноеИмяМакета); + Если Не РезультатУстановки.Установлено Тогда + ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Ошибка установки компоненты %1: %2'"), ИмяОбъекта, РезультатУстановки.ОписаниеОшибки); + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + КонецЕсли; + + РезультатПодключения = Ждать ВнешниеКомпонентыБПОКлиент.ПодключитьКомпонентуИзМакетаАсинх(ИмяОбъекта, ПолноеИмяМакета); + Если Не РезультатПодключения.Подключено Тогда + ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Ошибка подключения компоненты %1: %2'"), ИмяОбъекта, РезультатПодключения.ОписаниеОшибки); + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + МенеджерОборудованияКлиент.ДобавитьДрайверВКэш(ИмяОбъекта, РезультатПодключения.ПодключаемыйМодуль); + КонецЕсли; + + ВнешняяКомпонента = РезультатПодключения.ПодключаемыйМодуль; + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + РезультатВызова = Ждать ВнешняяКомпонента.ВерсияАсинх(); + Версия = РезультатВызова.Значение; + // Вызов БСП + МодульОбщегоНазначенияКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОбщегоНазначенияКлиентСервер"); + Если НЕ МодульОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия, ОписаниеКомпоненты.ВерсияМинимальная) >= 0 Тогда + ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Используется компонента %1 не актуальной версии %2. Необходимо обновить до версии %3 и выше.'"), + ИмяОбъекта, Версия, ОписаниеКомпоненты.ВерсияМинимальная); + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + КонецЕсли; + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации(Истина); + РезультатВыполнения.Вставить("ВнешняяКомпонента", ВнешняяКомпонента); + + Если ПараметрыОперации <> Неопределено Тогда + ПараметрыJSON = ЭлектронныеСертификатыНСПККлиентСервер.ПолучитьJSONПараметры(ПараметрыОперации); + Результат = Ждать ВнешняяКомпонента.УстановитьПараметрыАсинх(ПараметрыJSON); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Подключает компоненту и начинает получение версии внешней компоненты НСПК +// +// Возвращаемое значение: +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации +// +Асинх Функция ПолучениеВерсииВКАсинх() Экспорт + + РезультатПодключения = Ждать ПодключитьКомпонентуИнтеграцииНСПКАсинх(); + Если РезультатПодключения.Результат Тогда + ВнешняяКомпонента = РезультатПодключения.ВнешняяКомпонента; + РезультатВызова = Ждать ВнешняяКомпонента.ВерсияАсинх(); + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации(Истина); + РезультатВыполнения.Вставить("Версия", РезультатВызова.Значение); + Иначе + Возврат РезультатПодключения; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Подключает компоненту и начинает получение версии внешней компоненты НСПК +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - В случае успеха результатом оповещения будет номер версии, в случае ошибки +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации. +// +Асинх Процедура НачатьПолучениеВерсииВК(ОповещениеПриЗавершении) Экспорт + + РезультатВыполнения = Ждать ПолучениеВерсииВКАсинх(); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + +КонецПроцедуры + +// Подключает компоненту и начинает тестовое подключение к НСПК +// +// Параметры: +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации +// +Асинх Функция ТестовоеПодключениеАсинх(ПараметрыОперации) Экспорт + + РезультатПодключения = Ждать ПодключитьКомпонентуИнтеграцииНСПКАсинх(ПараметрыОперации); + + Если РезультатПодключения.Результат Тогда + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПроверитьПараметрыОперации(ПараметрыОперации); + Если НЕ РезультатВыполнения.Результат Тогда + Возврат РезультатВыполнения; + КонецЕсли; + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.ЭлектронныеСертификатыНСПККлиент.ТестовоеПодключение"; + ИдентификаторЗамера = ОбщегоНазначенияБПОКлиент.НачатьЗамерВремениБПО(КлючеваяОперация); + + ВнешняяКомпонента = РезультатПодключения.ВнешняяКомпонента; + ИдентификаторЗапроса = ПараметрыОперации.ИдентификаторЗапроса; + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ТестовоеСообщение = НСтр("ru = 'Тест 1С'"); + + // АПК: 1036-выкл совместимость с драйвером + РезультатВызова = Ждать ВнешняяКомпонента.эхоАсинх( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + ТестовоеСообщение); // Строка + // АПК: 1036-вкл + + ПараметрыЗавершение = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + ПараметрыЗавершение.ТекстРезультата = РезультатВызова.Значение; + ПараметрыЗавершение.ТипПлатежнойОперации = Неопределено; + ПараметрыЗавершение.ПараметрыОперации = ПараметрыОперации; + + // Замер производительности + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(ИдентификаторЗамера); + + РезультатВыполнения = Ждать ЗавершениеОперации(ВнешняяКомпонента, ПараметрыЗавершение); + + Иначе + Возврат РезультатПодключения; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Подключает компоненту и начинает тестовое подключение к НСПК +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения, описание результата +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации. +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +Асинх Процедура НачатьТестовоеПодключение(ОповещениеПриЗавершении, ПараметрыОперации) Экспорт + + РезультатВыполнения = Ждать ТестовоеПодключениеАсинх(ПараметрыОперации); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + +КонецПроцедуры + +// Выполняет операцию предварительного одобрения использования сертификатов +// +// Параметры: +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации +// +Асинх Функция ПредварительноеОдобрениеИспользованияАсинх(ПараметрыОперации) Экспорт + + РезультатПодключения = Ждать ПодключитьКомпонентуИнтеграцииНСПКАсинх(ПараметрыОперации); + + Если РезультатПодключения.Результат Тогда + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПроверитьПараметрыОперации(ПараметрыОперации, Истина); + Если НЕ РезультатВыполнения.Результат Тогда + Возврат РезультатВыполнения; + КонецЕсли; + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.ЭлектронныеСертификатыНСПККлиент.ПредварительноеОдобрениеИспользования"; + ИдентификаторЗамера = ОбщегоНазначенияБПОКлиент.НачатьЗамерВремениБПО(КлючеваяОперация); + + ВнешняяКомпонента = РезультатПодключения.ВнешняяКомпонента; + ИдентификаторЗапроса = Строка(ПараметрыОперации.ИдентификаторЗапроса); + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ХешНомерКарты = ПараметрыОперации.ХешНомерКарты; + СсылкаНаПлатежныйСчет = ПараметрыОперации.СсылкаНаПлатежныйСчет; + + ТоварныеПозицииJSON = ЭлектронныеСертификатыНСПККлиентСервер.ПолучитьJSONТоварныеПозиции(ПараметрыОперации.ТоварныеПозиции, Истина); + + РезультатВызова = Ждать ВнешняяКомпонента.ЗапросНаПредварительноеОдобрениеИспользованияАсинх( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + ХешНомерКарты, // Строка + СсылкаНаПлатежныйСчет, // Строка + ТоварныеПозицииJSON); // Строка + + ПараметрыЗавершение = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + ПараметрыЗавершение.ТекстРезультата = РезультатВызова.Значение; + ПараметрыЗавершение.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПредварительноеОдобрениеИспользованияЭС(); + ПараметрыЗавершение.ПараметрыОперации = ПараметрыОперации; + + // Замер производительности + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(ИдентификаторЗамера); + + РезультатВыполнения = Ждать ЗавершениеОперации(ВнешняяКомпонента, ПараметрыЗавершение); + Иначе + Возврат РезультатПодключения; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Подключает компоненту и начинает предварительное одобрение использования сертификатов +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения, описание результата +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации. +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +Асинх Процедура НачатьПредварительноеОдобрениеИспользования(ОповещениеПриЗавершении, ПараметрыОперации) Экспорт + + РезультатВыполнения = Ждать ПредварительноеОдобрениеИспользованияАсинх(ПараметрыОперации); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + +КонецПроцедуры + +// Подключает компоненту и начинает предварительное одобрение возврата сертификатов +// +// Параметры: +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации +// +Асинх Функция ПредварительноеОдобрениеВозвратаАсинх(ПараметрыОперации) Экспорт + + РезультатПодключения = Ждать ПодключитьКомпонентуИнтеграцииНСПКАсинх(ПараметрыОперации); + + Если РезультатПодключения.Результат Тогда + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПроверитьПараметрыОперации(ПараметрыОперации, Истина); + Если НЕ РезультатВыполнения.Результат Тогда + Возврат РезультатВыполнения; + КонецЕсли; + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.ЭлектронныеСертификатыНСПККлиент.ПредварительноеОдобрениеВозврата"; + ИдентификаторЗамера = ОбщегоНазначенияБПОКлиент.НачатьЗамерВремениБПО(КлючеваяОперация); + + ВнешняяКомпонента = РезультатПодключения.ВнешняяКомпонента; + ИдентификаторЗапроса = Строка(ПараметрыОперации.ИдентификаторЗапроса); + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ХешНомерКарты = ПараметрыОперации.ХешНомерКарты; + СсылкаНаПлатежныйСчет = ПараметрыОперации.СсылкаНаПлатежныйСчет; + ИдентификаторКорзины = ПараметрыОперации.ИдентификаторКорзины; + + ТоварныеПозицииJSON = ЭлектронныеСертификатыНСПККлиентСервер.ПолучитьJSONТоварныеПозиции(ПараметрыОперации.ТоварныеПозиции); + + РезультатВызова = Ждать ВнешняяКомпонента.ЗапросНаПредварительноеОдобрениеВозвратаАсинх( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + ИдентификаторКорзины, // Строка + ХешНомерКарты, // Строка + СсылкаНаПлатежныйСчет, // Строка + ТоварныеПозицииJSON); // Строка + + ПараметрыЗавершение = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + ПараметрыЗавершение.ТекстРезультата = РезультатВызова.Значение; + ПараметрыЗавершение.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПредварительноеОдобрениеВозвратаЭС(); + ПараметрыЗавершение.ПараметрыОперации = ПараметрыОперации; + + // Замер производительности + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(ИдентификаторЗамера); + + РезультатВыполнения = Ждать ЗавершениеОперации(ВнешняяКомпонента, ПараметрыЗавершение); + Иначе + Возврат РезультатПодключения; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Подключает компоненту и начинает предварительное одобрение возврата сертификатов +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения, описание результата +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации. +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +Асинх Процедура НачатьПредварительноеОдобрениеВозврата(ОповещениеПриЗавершении, ПараметрыОперации) Экспорт + + РезультатВыполнения = Ждать ПредварительноеОдобрениеВозвратаАсинх(ПараметрыОперации); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + +КонецПроцедуры + +// Подключает компоненту и начинает выполнение получения состава корзины +// +// Параметры: +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации +// +Асинх Функция ПолучениеСоставаКорзиныАсинх(ПараметрыОперации) Экспорт + + РезультатПодключения = Ждать ПодключитьКомпонентуИнтеграцииНСПКАсинх(ПараметрыОперации); + + Если РезультатПодключения.Результат Тогда + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПроверитьПараметрыОперации(ПараметрыОперации); + Если НЕ РезультатВыполнения.Результат Тогда + Возврат РезультатВыполнения; + КонецЕсли; + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.ЭлектронныеСертификатыНСПККлиент.ПолучениеСоставаКорзины"; + ИдентификаторЗамера = ОбщегоНазначенияБПОКлиент.НачатьЗамерВремениБПО(КлючеваяОперация); + + ВнешняяКомпонента = РезультатПодключения.ВнешняяКомпонента; + ИдентификаторЗапроса = Строка(ПараметрыОперации.ИдентификаторЗапроса); + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ИдентификаторКорзины = ПараметрыОперации.ИдентификаторКорзины; + + РезультатВызова = Ждать ВнешняяКомпонента.ЗапросНаПолучениеСоставаКорзиныОригинальнойПокупкиАсинх( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + ИдентификаторКорзины); // Строка + + ПараметрыЗавершение = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + ПараметрыЗавершение.ТекстРезультата = РезультатВызова.Значение; + ПараметрыЗавершение.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПолучениеСоставаКорзины(); + ПараметрыЗавершение.ПараметрыОперации = ПараметрыОперации; + + // Замер производительности + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(ИдентификаторЗамера); + + РезультатВыполнения = Ждать ЗавершениеОперации(ВнешняяКомпонента, ПараметрыЗавершение); + Иначе + Возврат РезультатПодключения; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Подключает компоненту и начинает выполнение получения состава корзины +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения, описание результата +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации. +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +Асинх Процедура НачатьПолучениеСоставаКорзины(ОповещениеПриЗавершении, ПараметрыОперации) Экспорт + + РезультатВыполнения = Ждать ПолучениеСоставаКорзиныАсинх(ПараметрыОперации); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + +КонецПроцедуры + +// Подключает компоненту и начинает выполнение получение списка сертификатов +// +// Параметры: +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации +// +Асинх Функция ПолучениеСпискаСертификатовАсинх(ПараметрыОперации) Экспорт + + РезультатПодключения = Ждать ПодключитьКомпонентуИнтеграцииНСПКАсинх(ПараметрыОперации); + + Если РезультатПодключения.Результат Тогда + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПроверитьПараметрыОперации(ПараметрыОперации, Истина); + Если НЕ РезультатВыполнения.Результат Тогда + Возврат РезультатВыполнения; + КонецЕсли; + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.ЭлектронныеСертификатыНСПККлиент.ПолучениеСпискаСертификатов"; + ИдентификаторЗамера = ОбщегоНазначенияБПОКлиент.НачатьЗамерВремениБПО(КлючеваяОперация); + + ВнешняяКомпонента = РезультатПодключения.ВнешняяКомпонента; + ИдентификаторЗапроса = Строка(ПараметрыОперации.ИдентификаторЗапроса); + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ХешНомерКарты = ПараметрыОперации.ХешНомерКарты; + СсылкаНаПлатежныйСчет = ПараметрыОперации.СсылкаНаПлатежныйСчет; + + РезультатВызова = Ждать ВнешняяКомпонента.ЗапросНаПолучениеСпискаСертификатовАсинх( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + ХешНомерКарты, // Строка + СсылкаНаПлатежныйСчет); // Строка + + ПараметрыЗавершение = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + ПараметрыЗавершение.ТекстРезультата = РезультатВызова.Значение; + ПараметрыЗавершение.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПолучениеСпискаСертификатов(); + ПараметрыЗавершение.ПараметрыОперации = ПараметрыОперации; + + // Замер производительности + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(ИдентификаторЗамера); + + РезультатВыполнения = Ждать ЗавершениеОперации(ВнешняяКомпонента, ПараметрыЗавершение); + Иначе + Возврат РезультатПодключения; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Подключает компоненту и начинает выполнение получение списка сертификатов +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения, описание результата +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации. +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +Асинх Процедура НачатьПолучениеСпискаСертификатов(ОповещениеПриЗавершении, ПараметрыОперации) Экспорт + + РезультатВыполнения = Ждать ПолучениеСпискаСертификатовАсинх(ПараметрыОперации); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + +КонецПроцедуры + +// Подключает компоненту и начинает выполнение получение списка идентификаторов корзин покупок ТСП +// +// Параметры: +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации +// +Асинх Функция ПолучениеСпискаИдентификаторовКорзинПокупокТСПАсинх(ПараметрыОперации) Экспорт + + РезультатПодключения = Ждать ПодключитьКомпонентуИнтеграцииНСПКАсинх(ПараметрыОперации); + + Если РезультатПодключения.Результат Тогда + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПроверитьПараметрыОперации(ПараметрыОперации, Истина); + Если НЕ РезультатВыполнения.Результат Тогда + Возврат РезультатВыполнения; + КонецЕсли; + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.ЭлектронныеСертификатыНСПККлиент.ПолучениеСпискаИдентификаторовКорзинПокупокТСП"; + ИдентификаторЗамера = ОбщегоНазначенияБПОКлиент.НачатьЗамерВремениБПО(КлючеваяОперация); + + ВнешняяКомпонента = РезультатПодключения.ВнешняяКомпонента; + ИдентификаторЗапроса = Строка(ПараметрыОперации.ИдентификаторЗапроса); + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ХешНомерКарты = ПараметрыОперации.ХешНомерКарты; + СсылкаНаПлатежныйСчет = ПараметрыОперации.СсылкаНаПлатежныйСчет; + КодТовараТРУ = ПараметрыОперации.КодТовараТРУ; + + РезультатВызова = Ждать ВнешняяКомпонента.ЗапросНаПолучениеСпискаИдентификаторовКорзинПокупокТСПАсинх( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + КодТовараТРУ, // Строка + ХешНомерКарты, // Строка + СсылкаНаПлатежныйСчет); // Строка + + ПараметрыЗавершение = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + ПараметрыЗавершение.ТекстРезультата = РезультатВызова.Значение; + ПараметрыЗавершение.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПолучениеСпискаИдентификаторовКорзинПокупокТСП(); + ПараметрыЗавершение.ПараметрыОперации = ПараметрыОперации; + + // Замер производительности + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(ИдентификаторЗамера); + + РезультатВыполнения = Ждать ЗавершениеОперации(ВнешняяКомпонента, ПараметрыЗавершение); + Иначе + Возврат РезультатПодключения; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Подключает компоненту и начинает выполнение получение списка идентификаторов корзин покупок ТСП +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения, описание результата +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации. +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +Асинх Процедура НачатьПолучениеСпискаИдентификаторовКорзинПокупокТСП(ОповещениеПриЗавершении, ПараметрыОперации) Экспорт + + РезультатВыполнения = Ждать ПолучениеСпискаИдентификаторовКорзинПокупокТСПАсинх(ПараметрыОперации); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + +КонецПроцедуры + +// Выполняет выполнение получения идентификатора корзины +// +// Параметры: +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации +// +Асинх Функция ПолучениеИдентификатораКорзиныАсинх(ПараметрыОперации) Экспорт + + РезультатПодключения = Ждать ПодключитьКомпонентуИнтеграцииНСПКАсинх(ПараметрыОперации); + + Если РезультатПодключения.Результат Тогда + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПроверитьПараметрыОперации(ПараметрыОперации); + Если НЕ РезультатВыполнения.Результат Тогда + Возврат РезультатВыполнения; + КонецЕсли; + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.ЭлектронныеСертификатыНСПККлиент.ПолучениеИдентификатораКорзины"; + ИдентификаторЗамера = ОбщегоНазначенияБПОКлиент.НачатьЗамерВремениБПО(КлючеваяОперация); + + ВнешняяКомпонента = РезультатПодключения.ВнешняяКомпонента; + ИдентификаторЗапроса = ПараметрыОперации.ИдентификаторЗапроса; + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + НомерФискальногоНакопителя = ПараметрыОперации.НомерФискальногоНакопителя; + ФискальныйПризнакЧека = ПараметрыОперации.ФискальныйПризнакЧека; + ФискальныйЧекНомер = ПараметрыОперации.ФискальныйЧекНомер; + + Если НЕ ПустаяСтрока(ПараметрыОперации.QRКодЧекаККТ) Тогда + ДанныеШтрихкода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.РасшифроватьQRКодЧекаККТ(ПараметрыОперации.QRКодЧекаККТ); + Если ДанныеШтрихкода.Расшифрован Тогда + НомерФискальногоНакопителя = ДанныеШтрихкода.НомерФискальногоНакопителя; + ФискальныйПризнакЧека = ДанныеШтрихкода.ФискальныйПризнак; + ФискальныйЧекНомер = ДанныеШтрихкода.НомерФискальногоДокумента; + КонецЕсли; + КонецЕсли; + + ФискальныйПризнакЧека = Строка(ФискальныйПризнакЧека); + ФискальныйЧекНомер = Формат(Число(ФискальныйЧекНомер), "ЧГ=0"); + + РезультатВызова = Ждать ВнешняяКомпонента.ЗапросНаПолучениеИдентификатораКорзиныОперацииПокупкиАсинх( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + НомерФискальногоНакопителя, // Строка + ФискальныйЧекНомер, // Строка + ФискальныйПризнакЧека); // Строка + + ПараметрыЗавершение = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + ПараметрыЗавершение.ТекстРезультата = РезультатВызова.Значение; + ПараметрыЗавершение.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПолучениеИдентификатораОперации(); + ПараметрыЗавершение.ПараметрыОперации = ПараметрыОперации; + + // Замер производительности + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(ИдентификаторЗамера); + + РезультатВыполнения = Ждать ЗавершениеОперации(ВнешняяКомпонента, ПараметрыЗавершение); + Иначе + Возврат РезультатПодключения; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Подключает компоненту и начинает выполнение получения идентификатора корзины +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения, описание результата +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации. +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +Асинх Процедура НачатьПолучениеИдентификатораКорзины(ОповещениеПриЗавершении, ПараметрыОперации) Экспорт + + РезультатВыполнения = Ждать ПолучениеИдентификатораКорзиныАсинх(ПараметрыОперации); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + +КонецПроцедуры + +// Выполняет передачу данных фискального чека +// +// Параметры: +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +// Возвращаемое значение: +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации +// +Асинх Функция ПередачаДанныхФискальногоЧекаАсинх(ПараметрыОперации) Экспорт + + РезультатПодключения = Ждать ПодключитьКомпонентуИнтеграцииНСПКАсинх(ПараметрыОперации); + + Если РезультатПодключения.Результат Тогда + + РезультатВыполнения = ЭлектронныеСертификатыНСПККлиентСервер.ПроверитьПараметрыОперации(ПараметрыОперации); + Если НЕ РезультатВыполнения.Результат Тогда + Возврат РезультатВыполнения; + КонецЕсли; + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.ЭлектронныеСертификатыНСПККлиент.ПередачаДанныхФискальногоЧека"; + ИдентификаторЗамера = ОбщегоНазначенияБПОКлиент.НачатьЗамерВремениБПО(КлючеваяОперация); + + ВнешняяКомпонента = РезультатПодключения.ВнешняяКомпонента; + ИдентификаторЗапроса = ПараметрыОперации.ИдентификаторЗапроса; + ИдентификаторКассы = ПараметрыОперации.ИдентификаторКассы; + ИдентификаторКорзины = ПараметрыОперации.ИдентификаторКорзины; + НомерФискальногоНакопителя = Строка(ПараметрыОперации.НомерФискальногоНакопителя); + ФискальныйТипРасчета = Число(ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодРасчетаДенежнымиСредствами(ПараметрыОперации.ФискальныйТипРасчета)); + ФискальныйПризнакЧека = Строка(ПараметрыОперации.ФискальныйПризнакЧека); + ФискальныйЧекНомер = Формат(Число(ПараметрыОперации.ФискальныйЧекНомер), "ЧГ=0"); + ФискальныйЧекСумма = Формат(ПараметрыОперации.ФискальныйЧекСумма, "ЧГ=0;ЧДЦ=2;ЧРД=."); + ФискальныйМестоРасчетов = Строка(ПараметрыОперации.ФискальныйМестоРасчетов); + // АПК: 1367-выкл особенность локального законодательства + Если ПараметрыОперации.ПротоколОбмена = ПредопределенноеЗначение("Перечисление.ПротоколОбменаФЭСНСПК.ВерсияV2") Тогда + ФискальныйЧекДатаВремя = Формат(ПараметрыОперации.ФискальныйЧекДатаВремя, "ДФ=""ггггММддTЧЧмм"""); + Иначе + ФискальныйЧекДатаВремя = Формат(ПараметрыОперации.ФискальныйЧекДатаВремя, "ДФ=""ггггММддЧЧмм"""); + КонецЕсли; + // АПК: 1367 + + РезультатВызова = Ждать ВнешняяКомпонента.ПередачаДанныхФискальногоЧекаАсинх( + ИдентификаторЗапроса, // Строка + ИдентификаторКассы, // Строка + ИдентификаторКорзины, // Строка + НомерФискальногоНакопителя, // Строка + ФискальныйЧекНомер, // Строка + ФискальныйПризнакЧека, // Строка + ФискальныйЧекСумма, // Строка + ФискальныйЧекДатаВремя, // Строка + ФискальныйТипРасчета, // Число + ФискальныйМестоРасчетов); // Строка + + ПараметрыЗавершение = ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперацииНаСервере(); + ПараметрыЗавершение.ТекстРезультата = РезультатВызова.Значение; + ПараметрыЗавершение.ТипПлатежнойОперации = ЭлектронныеСертификатыНСПККлиентСервер.ТипПлатежнойОперацииПередачаДанныхФискальногоЧека(); + ПараметрыЗавершение.ПараметрыОперации = ПараметрыОперации; + ПараметрыЗавершение.ОснованиеФискальнойОперации = ПараметрыОперации.ОснованиеФискальнойОперации; + + // Замер производительности + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(ИдентификаторЗамера); + + РезультатВыполнения = Ждать ЗавершениеОперации(ВнешняяКомпонента, ПараметрыЗавершение); + Иначе + Возврат РезультатПодключения; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Подключает компоненту и начинает передача данных фискального чека +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения, описание результата +// см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыВыполненияОперации. +// ПараметрыОперации - см. ЭлектронныеСертификатыНСПККлиентСервер.ПараметрыОперацииНСПК +// +Асинх Процедура НачатьПередачуДанныхФискальногоЧека(ОповещениеПриЗавершении, ПараметрыОперации) Экспорт + + РезультатВыполнения = Ждать ПередачаДанныхФискальногоЧекаАсинх(ПараметрыОперации); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Асинх Функция ЗавершениеОперации(ВнешняяКомпонента, ПараметрыЗавершение) + + РезультатВызова = Ждать ВнешняяКомпонента.ПолучитьСписокОшибокАсинх(); + Если РезультатВызова <> Неопределено Тогда + ПараметрыЗавершение.СписокОшибок = РезультатВызова.Значение; + КонецЕсли; + + Возврат ЭлектронныеСертификатыНСПКВызовСервера.ОбработатьДанныеОперации(ПараметрыЗавершение); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/ЭлектронныеСертификатыНСПККлиентСервер.xml b/CommonModules/ЭлектронныеСертификатыНСПККлиентСервер.xml new file mode 100644 index 0000000..f3215a9 --- /dev/null +++ b/CommonModules/ЭлектронныеСертификатыНСПККлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + ЭлектронныеСертификатыНСПККлиентСервер + + + ru + Электронные сертификаты НСПК Клиент сервер + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/CommonModules/ЭлектронныеСертификатыНСПККлиентСервер/Ext/Module.bsl b/CommonModules/ЭлектронныеСертификатыНСПККлиентСервер/Ext/Module.bsl new file mode 100644 index 0000000..c542006 --- /dev/null +++ b/CommonModules/ЭлектронныеСертификатыНСПККлиентСервер/Ext/Module.bsl @@ -0,0 +1,464 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Описание подключения внешней компоненты (FECNSPK). +// +// Возвращаемое значение: +// Структура: +// * ПолноеИмяМакета - Строка +// * ИмяОбъекта - Строка +// +Функция ОписаниеКомпоненты() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("ИмяОбъекта", "FECNSPK"); + Параметры.Вставить("ПолноеИмяМакета", "ОбщийМакет.КомпонентаИнтеграцииНСПК"); + Параметры.Вставить("ВерсияМинимальная", "1.3.2.1"); + Возврат Параметры; + +КонецФункции + +// Пустая структура для выполнения операции взаимодействия с сервером НСПК +// +// Возвращаемое значение: +// Структура: +// * АдресСервера - Строка - Endpoint +// * КлючДоступа - Строка - APIKey +// * КлючКассы - Строка - MACKey +// * ПроверятьКорневыеСертификаты - Булево - Проверка корневого сертификата сервера НСПК +// * ПротоколОбмена - Перечисление.ПротоколОбменаФЭСНСПК - Протокол обмена ФЭС НСПК +// * ИдентификаторЗапроса - Строка - Уникальный идентификатор запроса (нужно генерировать на прикладном коде в формате uuid). +// * ИдентификаторКассы - Строка - Идентификатор кассы. +// * ХешНомерКарты - Строка - Хешированный PAN карты. +// * СсылкаНаПлатежныйСчет - Строка - Payment Account Reference, Уникальный идентификатор для токенезированных (виртуальных) карт связанный с PAN конкретного держателя карты. +// * ИдентификаторКорзины - Строка - Идентификатор корзины. +// * ТоварныеПозиции - Массив - Структур - ПараметрыТоварнойПозиции() +// * КодТовараТРУ - Строка - Полный код товара, согласованный с перечнем ТРУ +// * НомерФискальногоНакопителя - Строка - Заводской номер фискального накопителя +// * ФискальныйТипРасчета - Перечисление.ТипыРасчетаДенежнымиСредствами - Признак расчета +// * ФискальныйПризнакЧека - Строка - Фискальный признак документа +// * ФискальныйЧекНомер - Число - Порядковый номер фискального документа +// * ФискальныйЧекДатаВремя - ДатаВремя - Дата и время осуществления расчета +// * ФискальныйЧекСумма - Число - Сумма расчета +// * ФискальныйМестоРасчетов - Строка - Место расчетов +// * QRКодЧекаККТ - Строка - QR код чека ККТ +// * ОснованиеФискальнойОперации - Ссылка - ОснованиеФискальнойОперацииБПО +// +Функция ПараметрыОперацииНСПК() Экспорт + + ИнтернетПрокси = Новый Структура(); + ИнтернетПрокси.Вставить("Сервер"); + ИнтернетПрокси.Вставить("Порт"); + ИнтернетПрокси.Вставить("Пользователь"); + ИнтернетПрокси.Вставить("Пароль"); + + Параметры = Новый Структура(); + + Параметры.Вставить("АдресСервера"); // Endpoint + Параметры.Вставить("КлючДоступа"); // APIKey + Параметры.Вставить("КлючКассы"); // MACKey + Параметры.Вставить("ИнтернетПрокси", ИнтернетПрокси); // ИнтернетПрокси + + Параметры.Вставить("ПроверятьКорневыеСертификаты", Истина); // Булево - Проверка корневого сертификата сервера НСПК + Параметры.Вставить("ПротоколОбмена", ПредопределенноеЗначение("Перечисление.ПротоколОбменаФЭСНСПК.ВерсияV1")); // Перечисление.ПротоколОбменаФЭСНСПК, Обязательно - Протокол обмена ФЭС НСПК. + Параметры.Вставить("ИдентификаторЗапроса"); // Строка - Уникальный идентификатор запроса (нужно генерировать на прикладном коде в формате uuid). + Параметры.Вставить("ИдентификаторКассы"); // Строка - Идентификатор кассы. + Параметры.Вставить("ХешНомерКарты"); // Строка - Хешированный PAN карты. + Параметры.Вставить("СсылкаНаПлатежныйСчет", ""); // Строка - Payment Account Reference, Уникальный идентификатор для токенезированных (виртуальных) карт связанный с PAN конкретного держателя карты. + + Параметры.Вставить("ИдентификаторКорзины"); // Строка - Идентификатор корзины. + Параметры.Вставить("ТоварныеПозиции", Новый Массив()); // Массив - Структур - ПараметрыТоварнойПозиции() + Параметры.Вставить("КодТовараТРУ"); // Строка - Полный код товара, согласованный с перечнем ТРУ + + Параметры.Вставить("НомерФискальногоНакопителя"); // Строка - Заводской номер фискального накопителя + Параметры.Вставить("ФискальныйТипРасчета", ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств")); // Перечисление.ТипыРасчетаДенежнымиСредствами - Признак расчета + Параметры.Вставить("ФискальныйПризнакЧека"); // Строка - Фискальный признак документа + Параметры.Вставить("ФискальныйЧекНомер"); // Число - Порядковый номер фискального документа + Параметры.Вставить("ФискальныйЧекДатаВремя"); // ДатаВремя - Дата и время осуществления расчета + Параметры.Вставить("ФискальныйЧекСумма"); // Число - Сумма расчета + Параметры.Вставить("ФискальныйМестоРасчетов"); // Строка - Место расчетов + + Параметры.Вставить("QRКодЧекаККТ"); // Строка - QR код чека ККТ + Параметры.Вставить("ОснованиеФискальнойОперации"); // Ссылка - ОснованиеФискальнойОперацииБПО + + Возврат Параметры; + +КонецФункции + +// Пустая структура для параметров товарной позиции +// +// Возвращаемое значение: +// Структура: +// * НомерПозиции - Строка - Порядковый номер позиции в корзине начиная с 1 +// * Артикул - Строка - Артикул товара +// * КодТовараТРУ - Строка - Полный код товара, согласованный с перечнем ТРУ +// * Количество - Число - Количество единиц товара +// * Цена - Число - Цена за единицу товара в рублях +// * Сертификаты - Массив из см.ЭлектронныеСертификатыНСПК.ПараметрыСертификата +// +Функция ПараметрыТоварнойПозиции() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("НомерПозиции"); // Строка - Порядковый номер позиции в корзине начиная с 1 + Параметры.Вставить("НомерПозицииВозврата"); // Строка - Порядковый номер позиции в корзине покупки, которая содержит возвращаемый товар + Параметры.Вставить("СертификатПоследниеЦифры"); // Строка - Последние цифры (6 символов) сертификата для выбора + Параметры.Вставить("Артикул"); // Строка - Артикул товара + Параметры.Вставить("КодТовараТРУ"); // Строка - Полный код товара, согласованный с перечнем ТРУ + Параметры.Вставить("Количество"); // Число - Количество единиц товара + Параметры.Вставить("Цена"); // Число - Цена за единицу товара в рублях + Параметры.Вставить("Сертификаты", Новый Массив()); // Сертификаты + Возврат Параметры; + +КонецФункции + +// Пустая структура для параметров товарной позиции +// +// Возвращаемое значение: +// Структура: +// * КодТовараТРУ - Строка - Полный код товара, согласованный с перечнем ТРУ +// * БалансКоличество - Число - Доступное количество +// * БалансДенежныхСредств - Число - Баланс денежных средств +// * ЛимитДенежныхСредств - Число - Лимит денежных средств +// +Функция ПараметрыДоступногоКодТовараТРУ() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("КодТовараТРУ"); // Строка - Полный код товара, согласованный с перечнем ТРУ + Параметры.Вставить("БалансКоличество"); // Число - Доступное количество + Параметры.Вставить("БалансДенежныхСредств"); // Число - Баланс денежных средств + Параметры.Вставить("ЛимитДенежныхСредств"); // Число - Лимит денежных средств + Возврат Параметры; + +КонецФункции + +// Пустая структура для параметров доступного сертификата +// +// Возвращаемое значение: +// Структура: +// * БалансКоличество - Число - Доступное количество +// * БалансДенежныхСредств - Число - Баланс денежных средств +// * Идентификатор - Строка - Идентификатор сертификата +// * Комментарий - Строка - Комментарий +// * ДатаНачалаДействия - ДатаВремя - Дата начала действия +// * ДатаЗавершенияДействия - ДатаВремя - Дата завершения действия +// * ЛимитДенежныхСредств - Число - Лимит денежных средств +// * Тип - Строка - Тип сертификата +// * КодыТоваровТРУ - Массив - Доступные для сертификата коды товаров ТРУ +// +Функция ПараметрыДоступногоСертификата() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("БалансКоличество"); // Число - Доступное количество + Параметры.Вставить("БалансДенежныхСредств"); // Число - Баланс денежных средств + Параметры.Вставить("Идентификатор"); // Строка - Идентификатор сертификата + Параметры.Вставить("Комментарий"); // Строка - Комментарий + Параметры.Вставить("ДатаНачалаДействия"); // ДатаВремя - Дата начала действия + Параметры.Вставить("ДатаЗавершенияДействия"); // ДатаВремя - Дата завершения действия + Параметры.Вставить("ЛимитДенежныхСредств"); // Число - Лимит денежных средств + Параметры.Вставить("Тип"); // Строка - Тип сертификата + Параметры.Вставить("КодыТоваровТРУ", Новый Массив()); // Массив - Доступные для сертификата коды товаров ТРУ + Возврат Параметры; + +КонецФункции + +// Пустая структура параметров сертификата +// +// Возвращаемое значение: +// Структура: +// * Идентификатор - Строка - Идентификатор сертификата +// * Количество - Число - Количество +// * Цена - Число - Цена +// * МаксимальнаяЦена - Число - Максимальная цена +// +Функция ПараметрыСертификата() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("Идентификатор"); // Идентификатор + Параметры.Вставить("Количество"); // Количество + Параметры.Вставить("Цена"); // Цена + Параметры.Вставить("МаксимальнаяЦена"); // Максимальная цена + Возврат Параметры; + +КонецФункции + +// Пустая структура параметров идентификаторов корзин покупок ТСП +// +// Возвращаемое значение: +// Структура: +// * ИдентификаторКорзины - Строка - Идентификатор сертификата +// * ДатаАвторизации - ДатаВремя - Дата авторизации +// +Функция ПараметрыИдентификаторовКорзинПокупокТСП() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ИдентификаторКорзины"); // Идентификатор корзины + Параметры.Вставить("ДатаАвторизации"); // Дата авторизации + Возврат Параметры; + +КонецФункции + +// Результат выполнения операции взаимодействия с сервером НСПК +// +// Параметры: +// Результат - Булево. +// ОписаниеОшибки - Строка. +// +// Возвращаемое значение: +// Структура: +// * Результат - Булево. +// * КодРезультата - Число. +// * ОписаниеОшибки - Строка. +// * ТоварныеПозиции - Массив. +// * ИдентификаторКорзины - Число. +// * СуммаСертификатами - Число. +// +Функция ПараметрыВыполненияОперации(Результат = Ложь, ОписаниеОшибки = Неопределено) Экспорт + + РезультатВыполнения = Новый Структура(); + РезультатВыполнения.Вставить("Результат" , Результат); + РезультатВыполнения.Вставить("КодРезультата" , 999); + РезультатВыполнения.Вставить("ОписаниеОшибки", ОписаниеОшибки); + РезультатВыполнения.Вставить("ТоварныеПозиции", Новый Массив()); + РезультатВыполнения.Вставить("ДоступныеСертификаты", Новый Массив()); + РезультатВыполнения.Вставить("ИдентификаторКорзины"); + РезультатВыполнения.Вставить("СуммаСертификатами", 0); + РезультатВыполнения.Вставить("ИдентификаторыКорзинПокупок", Новый Массив()); + + Возврат РезультатВыполнения; + +КонецФункции + +// Результат выполнения операции взаимодействия с сервером НСПК +// +// Параметры: +// ПараметрыОперации - Структура - +// ПроверятьПлатежныйСчет - Булево - +// ПроверятьКорректностьТРУ - Булево - +// +// Возвращаемое значение: +// Структура +// +Функция ПроверитьПараметрыОперации(ПараметрыОперации, ПроверятьПлатежныйСчет = Ложь, ПроверятьКорректностьТРУ = Ложь) Экспорт + + РезультатВыполнения = ПараметрыВыполненияОперации(Истина); + + ПараметрыОперации.ИдентификаторЗапроса = Строка(ПараметрыОперации.ИдентификаторЗапроса); + Если ПустаяСтрока(ПараметрыОперации.ИдентификаторЗапроса) Или ПараметрыОперации.ИдентификаторЗапроса = "0" Тогда + ПараметрыОперации.ИдентификаторЗапроса = Строка(Новый УникальныйИдентификатор()); + КонецЕсли; + + Если СтрДлина(Строка(ПараметрыОперации.ИдентификаторЗапроса)) < 36 Тогда + РезультатВыполнения.ОписаниеОшибки = НСтр("ru = 'Необходим корректный идентификатор запроса (UUID).'"); + РезультатВыполнения.Результат = Ложь; + Возврат РезультатВыполнения; + КонецЕсли; + + Если ПроверятьКорректностьТРУ Тогда + // Полный код ТРУ указывается в запросе и имеет формат: NNNNNNNNN.NNNNNNNNNYYYYMMMMZZZ + Для Каждого ТоварнаяПозиция Из ПараметрыОперации.ТоварныеПозиции Цикл + КодТовараТРУ = СтрРазделить(ТоварнаяПозиция.КодТовараТРУ, "."); + КодКорректный = (КодТовараТРУ.Количество() = 2) + И СтрДлина(КодТовараТРУ[0]) = 9 И ОбщегоНазначенияБПОКлиентСервер.ТолькоЦифрыВСтроке(КодТовараТРУ[0]) + И (СтрДлина(КодТовараТРУ[1]) = 20) И ОбщегоНазначенияБПОКлиентСервер.ТолькоЦифрыВСтроке(КодТовараТРУ[1]); + Если НЕ КодКорректный Тогда + РезультатВыполнения.ОписаниеОшибки = НСтр("ru = 'Код ТРУ указан некорректно. Код должен быть в формате NNNNNNNNN.NNNNNNNNNNNNNNNNNNNN'"); + РезультатВыполнения.Результат = Ложь; + Возврат РезультатВыполнения; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ПроверятьПлатежныйСчет + И ПараметрыОперации.ПротоколОбмена = ПредопределенноеЗначение("Перечисление.ПротоколОбменаФЭСНСПК.ВерсияV2") + И ПустаяСтрока(ПараметрыОперации.СсылкаНаПлатежныйСчет) Тогда + РезультатВыполнения.ОписаниеОшибки = НСтр("ru = 'Ошибка проведения операции по протоколу ФЭС НСПК v2.'") + Символы.ПС + + НСтр("ru = 'Необходимо обязательное указание PAR (Payment Account Reference).'"); + РезультатВыполнения.Результат = Ложь; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПолучитьJSONПараметры(ПараметрыОперации) Экспорт + +#Если ВебКлиент Тогда + Возврат ЭлектронныеСертификатыНСПКВызовСервера.ПолучитьJSONПараметры(ПараметрыОперации); +#Иначе + + ПараметрыЗапись = Новый Структура(); + + Если ПараметрыОперации <> Неопределено Тогда + + Если ПараметрыОперации.Свойство("АдресСервера") Тогда + АдресСервера = СокрЛП(ПараметрыОперации.АдресСервера); + Если Прав(АдресСервера, 1)="/" Или Прав(АдресСервера, 1)="\" Тогда + АдресСервера = Лев(АдресСервера, СтрДлина(АдресСервера)-1); + КонецЕсли; + ПараметрыЗапись.Вставить("Host", АдресСервера); + КонецЕсли; + + Если ПараметрыОперации.Свойство("КлючДоступа") Тогда + ПараметрыЗапись.Вставить("ApiKey", СокрЛП(ПараметрыОперации.КлючДоступа)); + КонецЕсли; + + Если ПараметрыОперации.Свойство("КлючКассы") Тогда + ПараметрыЗапись.Вставить("MACKey", СокрЛП(ПараметрыОперации.КлючКассы)); + КонецЕсли; + + Если ПараметрыОперации.Свойство("ПроверятьКорневыеСертификаты") Тогда + ПараметрыЗапись.Вставить("CheckRootCertificates", ?(ПараметрыОперации.ПроверятьКорневыеСертификаты, "True", "False")); + КонецЕсли; + + Если ПараметрыОперации.Свойство("ПротоколОбмена") Тогда + ВерсияАПИ = ?(ПараметрыОперации.ПротоколОбмена = ПредопределенноеЗначение("Перечисление.ПротоколОбменаФЭСНСПК.ВерсияV2"), 2, 1); + ПараметрыЗапись.Вставить("APIVersion", ВерсияАПИ); + КонецЕсли; + + Если ПараметрыОперации.Свойство("ИнтернетПрокси") Тогда + ИнтернетПрокси = ПараметрыОперации.ИнтернетПрокси; + ПараметрыЗапись.Вставить("Proxy" , СокрЛП(ИнтернетПрокси.Сервер)); + ПараметрыЗапись.Вставить("ProxyPort" , СокрЛП(ИнтернетПрокси.Порт)); + ПараметрыЗапись.Вставить("ProxyUser" , СокрЛП(ИнтернетПрокси.Пользователь)); + ПараметрыЗапись.Вставить("ProxyPassword", СокрЛП(ИнтернетПрокси.Пароль)); + КонецЕсли; + + КонецЕсли; + + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.ПроверятьСтруктуру = Ложь; + ЗаписьJSON.УстановитьСтроку(); + + ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапись); + Результат = ЗаписьJSON.Закрыть(); + + Возврат Результат; +#КонецЕсли + +КонецФункции + +// Обработать данные товарной позиции, формирование текста JSON +// +// Параметры: +// ТоварныеПозиции - Массив из Структура +// НормализоватьКодТРУ - Булево - Код товара ТРУ преобразовать к виду NNNNNNNNN.NNNNNNNNNYYYYMMMMZZZ +// +// Возвращаемое значение: +// Строка +// +Функция ПолучитьJSONТоварныеПозиции(ТоварныеПозиции, НормализоватьКодТРУ = Ложь) Экспорт + +#Если ВебКлиент Тогда + Возврат ЭлектронныеСертификатыНСПКВызовСервера.ПолучитьJSONТоварныеПозиции(ТоварныеПозиции, НормализоватьКодТРУ); +#Иначе + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.ПроверятьСтруктуру = Ложь; + ЗаписьJSON.УстановитьСтроку(); + Позиции = Новый Массив(); + Для Каждого Позиция Из ТоварныеПозиции Цикл + Товар = Новый Структура(); + Товар.Вставить("count" , Позиция.Количество); + Товар.Вставить("price" , Позиция.Цена * 100); // Цена за единицу товара в копейках + КодТовараТРУ = Позиция.КодТовараТРУ; + + Если НормализоватьКодТРУ Тогда + КодТовараТРУ = СокрЛП(КодТовараТРУ); + КодТовараТРУ = СтрЗаменить(КодТовараТРУ, " ", "0"); + Пока СтрДлина(КодТовараТРУ) < 30 Цикл + КодТовараТРУ = КодТовараТРУ + "0"; + КонецЦикла; + КонецЕсли; + + Товар.Вставить("truCode", КодТовараТРУ); + Если Позиция.Свойство("Артикул") Тогда + Товар.Вставить("articleCode", Позиция.Артикул); + КонецЕсли; + Товар.Вставить("articleNumber", Позиция.НомерПозиции); + Если Позиция.Свойство("НомерПозицииВозврата") Тогда + Товар.Вставить("originalArticleNumber", Позиция.НомерПозицииВозврата); + КонецЕсли; + Если Не ПустаяСтрока(Позиция.СертификатПоследниеЦифры) Тогда + ДополнительныйРеквизит = Новый Структура(); + ДополнительныйРеквизит.Вставить("code", "certificateLastNumbers"); + ДополнительныйРеквизит.Вставить("value", Лев(Позиция.СертификатПоследниеЦифры, 6)); + МассивРеквизит = Новый Массив(); + МассивРеквизит.Добавить(ДополнительныйРеквизит); + Товар.Вставить("additionalInfo", МассивРеквизит); + КонецЕсли; + Позиции.Добавить(Товар); + КонецЦикла; + ЗаписатьJSON(ЗаписьJSON, Позиции); + Результат = ЗаписьJSON.Закрыть(); + + Возврат Результат; +#КонецЕсли + +КонецФункции + +Функция ПараметрыВыполненияОперацииНаСервере() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("ТекстРезультата", ""); + Результат.Вставить("СписокОшибок", ""); + Результат.Вставить("ОснованиеФискальнойОперации", Неопределено); + Результат.Вставить("ПараметрыОперации"); // Структура + Результат.Вставить("ТипПлатежнойОперации", ""); + + Возврат Результат; + +КонецФункции + +Функция ТипПлатежнойОперацииПредварительноеОдобрениеИспользованияЭС() Экспорт + + Возврат "ПредварительноеОдобрениеИспользованияЭС"; // Не локализовывать + +КонецФункции + +Функция ТипПлатежнойОперацииПредварительноеОдобрениеВозвратаЭС() Экспорт + + Возврат "ПредварительноеОдобрениеВозвратаЭС"; // Не локализовывать + +КонецФункции + +Функция ТипПлатежнойОперацииПередачаДанныхФискальногоЧека() Экспорт + + Возврат "ПередачаДанныхФискальногоЧека"; // Не локализовывать + +КонецФункции + +Функция ТипПлатежнойОперацииПолучениеИдентификатораОперации() Экспорт + + Возврат "ПолучениеИдентификатораОперации"; // Не локализовывать + +КонецФункции + +Функция ТипПлатежнойОперацииПолучениеСоставаКорзины() Экспорт + + Возврат "ПолучениеСоставаКорзины"; // Не локализовывать + +КонецФункции + +Функция ТипПлатежнойОперацииПолучениеСпискаСертификатов() Экспорт + + Возврат "ПолучениеСпискаСертификатов"; // Не локализовывать + +КонецФункции + +Функция ТипПлатежнойОперацииПолучениеСпискаИдентификаторовКорзинПокупокТСП() Экспорт + + Возврат "ПолучениеСпискаИдентификаторовКорзинПокупокТСП"; // Не локализовывать + +КонецФункции + +#КонецОбласти diff --git a/CommonPictures/ВнешняяКомпонентаДоступна.xml b/CommonPictures/ВнешняяКомпонентаДоступна.xml new file mode 100644 index 0000000..c3401f1 --- /dev/null +++ b/CommonPictures/ВнешняяКомпонентаДоступна.xml @@ -0,0 +1,17 @@ + + + + + ВнешняяКомпонентаДоступна + + + ru + Внешняя компонента доступна + + + + false + false + + + \ No newline at end of file diff --git a/CommonPictures/ВнешняяКомпонентаДоступна/Ext/Picture.xml b/CommonPictures/ВнешняяКомпонентаДоступна/Ext/Picture.xml new file mode 100644 index 0000000..15c0e58 --- /dev/null +++ b/CommonPictures/ВнешняяКомпонентаДоступна/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.zip + false + + \ No newline at end of file diff --git a/CommonPictures/ВнешняяКомпонентаДоступна/Ext/Picture/Picture.zip b/CommonPictures/ВнешняяКомпонентаДоступна/Ext/Picture/Picture.zip new file mode 100644 index 0000000..92294b5 Binary files /dev/null and b/CommonPictures/ВнешняяКомпонентаДоступна/Ext/Picture/Picture.zip differ diff --git a/CommonPictures/ВнешняяКомпонентаНеДоступна.xml b/CommonPictures/ВнешняяКомпонентаНеДоступна.xml new file mode 100644 index 0000000..0a4ffe2 --- /dev/null +++ b/CommonPictures/ВнешняяКомпонентаНеДоступна.xml @@ -0,0 +1,17 @@ + + + + + ВнешняяКомпонентаНеДоступна + + + ru + Внешняя компонента не доступна + + + + false + false + + + \ No newline at end of file diff --git a/CommonPictures/ВнешняяКомпонентаНеДоступна/Ext/Picture.xml b/CommonPictures/ВнешняяКомпонентаНеДоступна/Ext/Picture.xml new file mode 100644 index 0000000..15c0e58 --- /dev/null +++ b/CommonPictures/ВнешняяКомпонентаНеДоступна/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.zip + false + + \ No newline at end of file diff --git a/CommonPictures/ВнешняяКомпонентаНеДоступна/Ext/Picture/Picture.zip b/CommonPictures/ВнешняяКомпонентаНеДоступна/Ext/Picture/Picture.zip new file mode 100644 index 0000000..b5d5563 Binary files /dev/null and b/CommonPictures/ВнешняяКомпонентаНеДоступна/Ext/Picture/Picture.zip differ diff --git a/CommonTemplates/Драйвер1СДисплейПокупателя.xml b/CommonTemplates/Драйвер1СДисплейПокупателя.xml new file mode 100644 index 0000000..04224ab --- /dev/null +++ b/CommonTemplates/Драйвер1СДисплейПокупателя.xml @@ -0,0 +1,16 @@ + + + + + Драйвер1СДисплейПокупателя + + + ru + Драйвер "1С:Дисплей покупателя" + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/Драйвер1СДисплейПокупателя/Ext/Template.bin b/CommonTemplates/Драйвер1СДисплейПокупателя/Ext/Template.bin new file mode 100644 index 0000000..9a774a0 Binary files /dev/null and b/CommonTemplates/Драйвер1СДисплейПокупателя/Ext/Template.bin differ diff --git a/CommonTemplates/Драйвер1СПринтерЧеков.xml b/CommonTemplates/Драйвер1СПринтерЧеков.xml new file mode 100644 index 0000000..5aca565 --- /dev/null +++ b/CommonTemplates/Драйвер1СПринтерЧеков.xml @@ -0,0 +1,16 @@ + + + + + Драйвер1СПринтерЧеков + + + ru + Драйвер "1С:Принтер чеков" + + + Компонента использует библиотеки ImageMagick и libxml2. ImageMagick разработана ImageMagick Studio LLC, лицензия http://www.imagemagick.org/script/license.php. libxml2 разработана Daniel Veillard, лицензия http://www.xmlsoft.org/FAQ.html#License + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/Драйвер1СПринтерЧеков/Ext/Template.bin b/CommonTemplates/Драйвер1СПринтерЧеков/Ext/Template.bin new file mode 100644 index 0000000..d248430 Binary files /dev/null and b/CommonTemplates/Драйвер1СПринтерЧеков/Ext/Template.bin differ diff --git a/CommonTemplates/Драйвер1СУстройстваВводаNative.xml b/CommonTemplates/Драйвер1СУстройстваВводаNative.xml new file mode 100644 index 0000000..6d5f236 --- /dev/null +++ b/CommonTemplates/Драйвер1СУстройстваВводаNative.xml @@ -0,0 +1,16 @@ + + + + + Драйвер1СУстройстваВводаNative + + + ru + Драйвер "1С:Устройства ввод (NativeApi)" + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/Драйвер1СУстройстваВводаNative/Ext/Template.bin b/CommonTemplates/Драйвер1СУстройстваВводаNative/Ext/Template.bin new file mode 100644 index 0000000..6c6690b Binary files /dev/null and b/CommonTemplates/Драйвер1СУстройстваВводаNative/Ext/Template.bin differ diff --git a/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru.xml b/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru.xml new file mode 100644 index 0000000..8c7662c --- /dev/null +++ b/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru.xml @@ -0,0 +1,16 @@ + + + + + Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru + + + ru + Драйвер "1С:Эквайринговые терминалы Сбербанк 2.Х" + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru/Ext/Template.bin b/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru/Ext/Template.bin new file mode 100644 index 0000000..d3c23a4 Binary files /dev/null and b/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru/Ext/Template.bin differ diff --git a/CommonTemplates/Драйвер1СЭлектронныеВесы.xml b/CommonTemplates/Драйвер1СЭлектронныеВесы.xml new file mode 100644 index 0000000..0ac93ed --- /dev/null +++ b/CommonTemplates/Драйвер1СЭлектронныеВесы.xml @@ -0,0 +1,16 @@ + + + + + Драйвер1СЭлектронныеВесы + + + ru + Драйвер1 с электронные весы + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/Драйвер1СЭлектронныеВесы/Ext/Template.bin b/CommonTemplates/Драйвер1СЭлектронныеВесы/Ext/Template.bin new file mode 100644 index 0000000..caf91ef Binary files /dev/null and b/CommonTemplates/Драйвер1СЭлектронныеВесы/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверMERTECHСканерШтрихкода_ru.xml b/CommonTemplates/ДрайверMERTECHСканерШтрихкода_ru.xml new file mode 100644 index 0000000..5e60f54 --- /dev/null +++ b/CommonTemplates/ДрайверMERTECHСканерШтрихкода_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверMERTECHСканерШтрихкода_ru + + + ru + MERTECH:Сканер штрихкода ТСД + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверMERTECHСканерШтрихкода_ru/Ext/Template.bin b/CommonTemplates/ДрайверMERTECHСканерШтрихкода_ru/Ext/Template.bin new file mode 100644 index 0000000..f4cb03c Binary files /dev/null and b/CommonTemplates/ДрайверMERTECHСканерШтрихкода_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверRightScanККТ54ФЗ_ru.xml b/CommonTemplates/ДрайверRightScanККТ54ФЗ_ru.xml new file mode 100644 index 0000000..2a08c70 --- /dev/null +++ b/CommonTemplates/ДрайверRightScanККТ54ФЗ_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверRightScanККТ54ФЗ_ru + + + ru + Драйвер "RightScan:ККТ с передачей данных в ОФД (54-ФЗ)" + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверRightScanККТ54ФЗ_ru/Ext/Template.bin b/CommonTemplates/ДрайверRightScanККТ54ФЗ_ru/Ext/Template.bin new file mode 100644 index 0000000..965fb9e Binary files /dev/null and b/CommonTemplates/ДрайверRightScanККТ54ФЗ_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверRightScanУстройстваВвода_ru.xml b/CommonTemplates/ДрайверRightScanУстройстваВвода_ru.xml new file mode 100644 index 0000000..a2a444e --- /dev/null +++ b/CommonTemplates/ДрайверRightScanУстройстваВвода_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверRightScanУстройстваВвода_ru + + + ru + RightScan:Устройства ввода данных ТСД Urovo + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверRightScanУстройстваВвода_ru/Ext/Template.bin b/CommonTemplates/ДрайверRightScanУстройстваВвода_ru/Ext/Template.bin new file mode 100644 index 0000000..565fe83 Binary files /dev/null and b/CommonTemplates/ДрайверRightScanУстройстваВвода_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверRightScanУстройствоПечати_ru.xml b/CommonTemplates/ДрайверRightScanУстройствоПечати_ru.xml new file mode 100644 index 0000000..f836eb1 --- /dev/null +++ b/CommonTemplates/ДрайверRightScanУстройствоПечати_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверRightScanУстройствоПечати_ru + + + ru + RightScan:Устройство печати ТСД Urovo + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверRightScanУстройствоПечати_ru/Ext/Template.bin b/CommonTemplates/ДрайверRightScanУстройствоПечати_ru/Ext/Template.bin new file mode 100644 index 0000000..5da2f53 Binary files /dev/null and b/CommonTemplates/ДрайверRightScanУстройствоПечати_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверScanPortУстройстваВвода_ru.xml b/CommonTemplates/ДрайверScanPortУстройстваВвода_ru.xml new file mode 100644 index 0000000..f6f7ec7 --- /dev/null +++ b/CommonTemplates/ДрайверScanPortУстройстваВвода_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверScanPortУстройстваВвода_ru + + + ru + ScanPort:Устройства ввода данных + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверScanPortУстройстваВвода_ru/Ext/Template.bin b/CommonTemplates/ДрайверScanPortУстройстваВвода_ru/Ext/Template.bin new file mode 100644 index 0000000..b87c647 Binary files /dev/null and b/CommonTemplates/ДрайверScanPortУстройстваВвода_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверUCSEFTPOSЭквайринговыеТерминалы_ru.xml b/CommonTemplates/ДрайверUCSEFTPOSЭквайринговыеТерминалы_ru.xml new file mode 100644 index 0000000..2217d48 --- /dev/null +++ b/CommonTemplates/ДрайверUCSEFTPOSЭквайринговыеТерминалы_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверUCSEFTPOSЭквайринговыеТерминалы_ru + + + ru + Драйвер "UCS-AT:Эквайринговые терминалы" + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверUCSEFTPOSЭквайринговыеТерминалы_ru/Ext/Template.bin b/CommonTemplates/ДрайверUCSEFTPOSЭквайринговыеТерминалы_ru/Ext/Template.bin new file mode 100644 index 0000000..e0d5351 Binary files /dev/null and b/CommonTemplates/ДрайверUCSEFTPOSЭквайринговыеТерминалы_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверАЗУРККТ54ФЗФФД12_ru.xml b/CommonTemplates/ДрайверАЗУРККТ54ФЗФФД12_ru.xml new file mode 100644 index 0000000..b0602e9 --- /dev/null +++ b/CommonTemplates/ДрайверАЗУРККТ54ФЗФФД12_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверАЗУРККТ54ФЗФФД12_ru + + + ru + Драйвер "АЗУР:ККТ с передачей данных в ОФД (ФФД 1.2)" + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверАЗУРККТ54ФЗФФД12_ru/Ext/Template.bin b/CommonTemplates/ДрайверАЗУРККТ54ФЗФФД12_ru/Ext/Template.bin new file mode 100644 index 0000000..f2aac40 Binary files /dev/null and b/CommonTemplates/ДрайверАЗУРККТ54ФЗФФД12_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверАЗУРПлатежнаяСистема_ru.xml b/CommonTemplates/ДрайверАЗУРПлатежнаяСистема_ru.xml new file mode 100644 index 0000000..9833d17 --- /dev/null +++ b/CommonTemplates/ДрайверАЗУРПлатежнаяСистема_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверАЗУРПлатежнаяСистема_ru + + + ru + Драйвер "АЗУР:Платежная система" + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверАЗУРПлатежнаяСистема_ru/Ext/Template.bin b/CommonTemplates/ДрайверАЗУРПлатежнаяСистема_ru/Ext/Template.bin new file mode 100644 index 0000000..f0912eb Binary files /dev/null and b/CommonTemplates/ДрайверАЗУРПлатежнаяСистема_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверАТОЛДрайверПлатежногоЯдраПэй_ru.xml b/CommonTemplates/ДрайверАТОЛДрайверПлатежногоЯдраПэй_ru.xml new file mode 100644 index 0000000..b1cd998 --- /dev/null +++ b/CommonTemplates/ДрайверАТОЛДрайверПлатежногоЯдраПэй_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверАТОЛДрайверПлатежногоЯдраПэй_ru + + + ru + Драйвер "АТОЛ:Драйвер платежного ядра АТОЛ Пэй" + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверАТОЛДрайверПлатежногоЯдраПэй_ru/Ext/Template.bin b/CommonTemplates/ДрайверАТОЛДрайверПлатежногоЯдраПэй_ru/Ext/Template.bin new file mode 100644 index 0000000..0100d6f Binary files /dev/null and b/CommonTemplates/ДрайверАТОЛДрайверПлатежногоЯдраПэй_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверАТОЛККТ54ФЗ10XФФД12X_ru.xml b/CommonTemplates/ДрайверАТОЛККТ54ФЗ10XФФД12X_ru.xml new file mode 100644 index 0000000..ba98f03 --- /dev/null +++ b/CommonTemplates/ДрайверАТОЛККТ54ФЗ10XФФД12X_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверАТОЛККТ54ФЗ10XФФД12X_ru + + + ru + АТОЛ:ККТ с передачей данных в ОФД 10.x (ФФД 1.2) УСН НДС + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверАТОЛККТ54ФЗ10XФФД12X_ru/Ext/Template.bin b/CommonTemplates/ДрайверАТОЛККТ54ФЗ10XФФД12X_ru/Ext/Template.bin new file mode 100644 index 0000000..9d20920 Binary files /dev/null and b/CommonTemplates/ДрайверАТОЛККТ54ФЗ10XФФД12X_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверАТОЛККТ54ФЗ10XФФД12_ru.xml b/CommonTemplates/ДрайверАТОЛККТ54ФЗ10XФФД12_ru.xml new file mode 100644 index 0000000..b95a850 --- /dev/null +++ b/CommonTemplates/ДрайверАТОЛККТ54ФЗ10XФФД12_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверАТОЛККТ54ФЗ10XФФД12_ru + + + ru + АТОЛ:ККТ с передачей данных в ОФД 10.Х (ФФД 1.2) + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверАТОЛККТ54ФЗ10XФФД12_ru/Ext/Template.bin b/CommonTemplates/ДрайверАТОЛККТ54ФЗ10XФФД12_ru/Ext/Template.bin new file mode 100644 index 0000000..200bca8 Binary files /dev/null and b/CommonTemplates/ДрайверАТОЛККТ54ФЗ10XФФД12_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверАТОЛСканерШтрихкода_ru.xml b/CommonTemplates/ДрайверАТОЛСканерШтрихкода_ru.xml new file mode 100644 index 0000000..a85ad28 --- /dev/null +++ b/CommonTemplates/ДрайверАТОЛСканерШтрихкода_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверАТОЛСканерШтрихкода_ru + + + ru + АТОЛ:Устройства ввода данных + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверАТОЛСканерШтрихкода_ru/Ext/Template.bin b/CommonTemplates/ДрайверАТОЛСканерШтрихкода_ru/Ext/Template.bin new file mode 100644 index 0000000..1d1132a Binary files /dev/null and b/CommonTemplates/ДрайверАТОЛСканерШтрихкода_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверВерсияТККТ54ФЗ_ru.xml b/CommonTemplates/ДрайверВерсияТККТ54ФЗ_ru.xml new file mode 100644 index 0000000..99de1a4 --- /dev/null +++ b/CommonTemplates/ДрайверВерсияТККТ54ФЗ_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверВерсияТККТ54ФЗ_ru + + + ru + Версия-Т:ККТ с передачей данных в ОФД (54-ФЗ) + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверВерсияТККТ54ФЗ_ru/Ext/Template.bin b/CommonTemplates/ДрайверВерсияТККТ54ФЗ_ru/Ext/Template.bin new file mode 100644 index 0000000..ba60601 Binary files /dev/null and b/CommonTemplates/ДрайверВерсияТККТ54ФЗ_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверКлеверенсСканерШтрихкода_ru.xml b/CommonTemplates/ДрайверКлеверенсСканерШтрихкода_ru.xml new file mode 100644 index 0000000..e5daa5d --- /dev/null +++ b/CommonTemplates/ДрайверКлеверенсСканерШтрихкода_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверКлеверенсСканерШтрихкода_ru + + + ru + Клеверенс:Устройства ввода данных + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверКлеверенсСканерШтрихкода_ru/Ext/Template.bin b/CommonTemplates/ДрайверКлеверенсСканерШтрихкода_ru/Ext/Template.bin new file mode 100644 index 0000000..19e59ee Binary files /dev/null and b/CommonTemplates/ДрайверКлеверенсСканерШтрихкода_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru.xml b/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru.xml new file mode 100644 index 0000000..74653bf --- /dev/null +++ b/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru + + + ru + Драйвер "ПОСЦентр:ККТ с передачей данных в ОФД (ФФД 1.2) NG УСН НДС" + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru/Ext/Template.bin b/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru/Ext/Template.bin new file mode 100644 index 0000000..8b26882 Binary files /dev/null and b/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверПОСЦентрЭлектронныеВесыNG_ru.xml b/CommonTemplates/ДрайверПОСЦентрЭлектронныеВесыNG_ru.xml new file mode 100644 index 0000000..970ed21 --- /dev/null +++ b/CommonTemplates/ДрайверПОСЦентрЭлектронныеВесыNG_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверПОСЦентрЭлектронныеВесыNG_ru + + + ru + Драйвер "POScenter:Электронные весы SLIM NG" + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверПОСЦентрЭлектронныеВесыNG_ru/Ext/Template.bin b/CommonTemplates/ДрайверПОСЦентрЭлектронныеВесыNG_ru/Ext/Template.bin new file mode 100644 index 0000000..2ee6788 Binary files /dev/null and b/CommonTemplates/ДрайверПОСЦентрЭлектронныеВесыNG_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверСканкодСканерШтрихкода_ru.xml b/CommonTemplates/ДрайверСканкодСканерШтрихкода_ru.xml new file mode 100644 index 0000000..96fe58a --- /dev/null +++ b/CommonTemplates/ДрайверСканкодСканерШтрихкода_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверСканкодСканерШтрихкода_ru + + + ru + Сканкод:Cканер штрихкода Chipherlab (Native) + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверСканкодСканерШтрихкода_ru/Ext/Template.bin b/CommonTemplates/ДрайверСканкодСканерШтрихкода_ru/Ext/Template.bin new file mode 100644 index 0000000..d0f8c53 Binary files /dev/null and b/CommonTemplates/ДрайверСканкодСканерШтрихкода_ru/Ext/Template.bin differ diff --git a/CommonTemplates/ДрайверСканситиУстройстваВвода_ru.xml b/CommonTemplates/ДрайверСканситиУстройстваВвода_ru.xml new file mode 100644 index 0000000..12b5b36 --- /dev/null +++ b/CommonTemplates/ДрайверСканситиУстройстваВвода_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверСканситиУстройстваВвода_ru + + + ru + СКАН СИТИ:Устройства ввода данных + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверСканситиУстройстваВвода_ru/Ext/Template.bin b/CommonTemplates/ДрайверСканситиУстройстваВвода_ru/Ext/Template.bin new file mode 100644 index 0000000..2f17db2 Binary files /dev/null and b/CommonTemplates/ДрайверСканситиУстройстваВвода_ru/Ext/Template.bin differ diff --git a/CommonTemplates/КодВидаНоменклатурнойКлассификации.xml b/CommonTemplates/КодВидаНоменклатурнойКлассификации.xml new file mode 100644 index 0000000..b325961 --- /dev/null +++ b/CommonTemplates/КодВидаНоменклатурнойКлассификации.xml @@ -0,0 +1,16 @@ + + + + + КодВидаНоменклатурнойКлассификации + + + ru + Код вида номенклатурной классификации + + + + TextDocument + + + \ No newline at end of file diff --git a/CommonTemplates/КодВидаНоменклатурнойКлассификации/Ext/Template.txt b/CommonTemplates/КодВидаНоменклатурнойКлассификации/Ext/Template.txt new file mode 100644 index 0000000..ac60a47 --- /dev/null +++ b/CommonTemplates/КодВидаНоменклатурнойКлассификации/Ext/Template.txt @@ -0,0 +1,66 @@ + +<КодВидаНоменклатурнойКлассификации> + <НоменклатурнаяКлассификация Имя="Маска лицевая для защиты дыхательных путей, одноразового (многоразового) использования"> + <ВидНоменклатурнойКлассификации Имя="Маска лицевая для защиты дыхательных путей, многоразового использования" КодВида="2400001323807"/> + <ВидНоменклатурнойКлассификации Имя="Маска лицевая для защиты дыхательных путей, одноразового использования" КодВида="2400003675805"/> + + <НоменклатурнаяКлассификация Имя="Респиратор общего применения"> + <ВидНоменклатурнойКлассификации Имя="Респиратор общего применения" КодВида="2400001807703"/> + + <НоменклатурнаяКлассификация Имя="Респиратор хирургический"> + <ВидНоменклатурнойКлассификации Имя="Респиратор хирургический" КодВида="2400001818303"/> + <ВидНоменклатурнойКлассификации Имя="Респиратор хирургический антибактериальный" КодВида="2400002186203"/> + + <НоменклатурнаяКлассификация Имя="Средство назальное для защиты от загрязненного воздуха, местного действия"> + <ВидНоменклатурнойКлассификации Имя="Средство назальное для защиты от загрязненного воздуха, местного действия" КодВида="2400001368105"/> + + <НоменклатурнаяКлассификация Имя="Перчатки смотровые (процедурные)"> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) из латекса гевеи, неопудренные, нестерильные" КодВида="2400001225408"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) из латекса гевеи, опудренные" КодВида="2400001225606"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) из латекса гевеи, неопудренные, стерильные" КодВида="2400001226108"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) из полихлоропрена, неопудренные" КодВида="2400001393503"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) нитриловые, неопудренные, нестерильные" КодВида="2400001858309"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) нитриловые, опудренные" КодВида="2400001858507"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) виниловые, неопудренные" КодВида="2400002052805"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) виниловые, опудренные" КодВида="2400002052904"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) из гваюлового латекса, неопудренные" КодВида="2400002984502"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) из этиленвинилацетата, неопудренные, стерильные" КодВида="2400003117107"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) из этиленвинилацетата, неопудренные, нестерильные" КодВида="2400003117206"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) нитриловые, неопудренные, антибактериальные" КодВида="2400003207907"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) полиизопреновые, неопудренные" КодВида="2400003215308"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) нитриловые, неопудренные, стерильные" КодВида="2400003297700"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) виниловые, неопудренные, стерильные" КодВида="2400003356704"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) виниловые, опудренные, стерильные" КодВида="2400003356803"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) из латекса гевеи, опудренные, стерильные" КодВида="2400003433108"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) полиизопреновые, опудренные" КодВида="2400003492303"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) из полихлоропрена, неопудренные, стерильные" КодВида="2400003495700"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) из полихлоропрена, неопудренные, стерильные" КодВида="2400003495809"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) нитриловые, опудренные, стерильные" КодВида="2400003495908"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) полиизопреновые, неопудренные, стерильные" КодВида="2400003496004"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) полиизопреновые, опудренные, стерильные" КодВида="2400003496103"/> + + <НоменклатурнаяКлассификация Имя="Перчатки смотровые (процедурные) полиизопреновые, опудренные, стерильные"> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические из латекса гевеи, неопудренные" КодВида="2400001226306"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические из латекса гевеи, опудренные" КодВида="2400001226405"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические из полихлоропрена, неопудренные" КодВида="2400001393107"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки смотровые (процедурные) из полихлоропрена, опудренные" КодВида="2400001393602"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические из блоксополимера стирола, неопудренные, антибактериальные" КодВида="2400001565306"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические нитриловые, опудренные" КодВида="2400001857203"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические нитриловые, неопудренные" КодВида="2400001857005"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические полиизопреновые, неопудренные" КодВида="2400002015909"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические полиизопреновые, неопудренные, антибактериальные" КодВида="2400002016005"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические полиизопреновые, опудренные" КодВида="2400002016104"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические из блоксополимера стирола, неопудренные" КодВида="2400003161209"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические полимерно-композитные, неопудренные" КодВида="2400003227806"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические полимерно-композитные, неопудренные" КодВида="2400003237409"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические из латекса гевеи, неопудренные, антибактериальные" КодВида="2400003263408"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические из гваюлового латекса, неопудренные" КодВида="2400003356902"/> + <ВидНоменклатурнойКлассификации Имя="Перчатки хирургические из полихлоропрена, опудренные" КодВида="2400003356902"/> + + <НоменклатурнаяКлассификация Имя="Набор гигиенической одежды для посетителей"> + <ВидНоменклатурнойКлассификации Имя="Набор гигиенической одежды для посетителей" КодВида="2400002886806"/> + + <НоменклатурнаяКлассификация Имя="Комбинезон гигиенический для посетителей"> + <ВидНоменклатурнойКлассификации Имя="Комбинезон гигиенический для посетителей" КодВида="2400002886707"/> + + diff --git a/CommonTemplates/КомпонентаИнтеграцииНСПК.xml b/CommonTemplates/КомпонентаИнтеграцииНСПК.xml new file mode 100644 index 0000000..c0d9613 --- /dev/null +++ b/CommonTemplates/КомпонентаИнтеграцииНСПК.xml @@ -0,0 +1,16 @@ + + + + + КомпонентаИнтеграцииНСПК + + + ru + Компонента интеграции НСПК + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/КомпонентаИнтеграцииНСПК/Ext/Template.bin b/CommonTemplates/КомпонентаИнтеграцииНСПК/Ext/Template.bin new file mode 100644 index 0000000..3fe63b8 Binary files /dev/null and b/CommonTemplates/КомпонентаИнтеграцииНСПК/Ext/Template.bin differ diff --git a/CommonTemplates/ШаблонGetArrayDoc.xml b/CommonTemplates/ШаблонGetArrayDoc.xml new file mode 100644 index 0000000..62b34ef --- /dev/null +++ b/CommonTemplates/ШаблонGetArrayDoc.xml @@ -0,0 +1,16 @@ + + + + + ШаблонGetArrayDoc + + + ru + Шаблон get array doc + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetArrayDoc/Ext/Template.xml b/CommonTemplates/ШаблонGetArrayDoc/Ext/Template.xml new file mode 100644 index 0000000..7f66122 --- /dev/null +++ b/CommonTemplates/ШаблонGetArrayDoc/Ext/Template.xml @@ -0,0 +1,61 @@ + + + + ru + ru + + ru1 + Номенклатура + Номенклатура + + + ru + Русский + Русский + + + + 1 + + 0 + + 1 + + + + + 0 + + 2 + + + 0 + + + ru + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsd="https://technozonee.itinalog.ru:5443/tsdsync"> + <soapenv:Header/> + <soapenv:Body> + <tsd:GetArrayDoc/> + </soapenv:Body> +</soapenv:Envelope> + + + + + + + true + 3 + 1 + 1 + + 894 + + + 300 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetBatches.xml b/CommonTemplates/ШаблонGetBatches.xml new file mode 100644 index 0000000..75a55e5 --- /dev/null +++ b/CommonTemplates/ШаблонGetBatches.xml @@ -0,0 +1,16 @@ + + + + + ШаблонGetBatches + + + ru + Шаблон Get Batches + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetBatches/Ext/Template.xml b/CommonTemplates/ШаблонGetBatches/Ext/Template.xml new file mode 100644 index 0000000..7da1ed8 --- /dev/null +++ b/CommonTemplates/ШаблонGetBatches/Ext/Template.xml @@ -0,0 +1,46 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 1 + + + 0 + + + + 1 + + + ru + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsd="https://technozonee.itinalog.ru:5443/tsdsync"> + <soapenv:Header/> + <soapenv:Body> + <tsd:GetBatches/> + </soapenv:Body> +</soapenv:Envelope> + + + + + + + true + 2 + 1 + 1 + + 720 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetCells.xml b/CommonTemplates/ШаблонGetCells.xml new file mode 100644 index 0000000..10aa28b --- /dev/null +++ b/CommonTemplates/ШаблонGetCells.xml @@ -0,0 +1,16 @@ + + + + + ШаблонGetCells + + + ru + Шаблон Get Cells + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetCells/Ext/Template.xml b/CommonTemplates/ШаблонGetCells/Ext/Template.xml new file mode 100644 index 0000000..b13ca90 --- /dev/null +++ b/CommonTemplates/ШаблонGetCells/Ext/Template.xml @@ -0,0 +1,46 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 1 + + + 0 + + + + 1 + + + ru + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsd="https://technozonee.itinalog.ru:5443/tsdsync"> + <soapenv:Header/> + <soapenv:Body> + <tsd:GetCells/> + </soapenv:Body> +</soapenv:Envelope> + + + + + + + true + 2 + 1 + 1 + + 720 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetDoc.xml b/CommonTemplates/ШаблонGetDoc.xml new file mode 100644 index 0000000..99b9316 --- /dev/null +++ b/CommonTemplates/ШаблонGetDoc.xml @@ -0,0 +1,16 @@ + + + + + ШаблонGetDoc + + + ru + Шаблон get doc + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetDoc/Ext/Template.xml b/CommonTemplates/ШаблонGetDoc/Ext/Template.xml new file mode 100644 index 0000000..e30a5ef --- /dev/null +++ b/CommonTemplates/ШаблонGetDoc/Ext/Template.xml @@ -0,0 +1,73 @@ + + + + ru + ru + + ru + Русский + Русский + + + ru1 + Номенклатура + Номенклатура + + + + 8 + + 0 + + 1 + + + + + 0 + + + + 0 + + + ru + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsd="https://technozonee.itinalog.ru:5443/tsdsync"> + <soapenv:Header/> + <soapenv:Body> + <tsd:getDoc> + <tsd:barcode>$Штрихкод</tsd:barcode> + </tsd:getDoc> + </soapenv:Body> +</soapenv:Envelope> + + + + + + 7 + + 0 + + + + + + + 1 + 7 + + true + + + true + 2 + 8 + 8 + + 344 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetDocInvent.xml b/CommonTemplates/ШаблонGetDocInvent.xml new file mode 100644 index 0000000..e93a068 --- /dev/null +++ b/CommonTemplates/ШаблонGetDocInvent.xml @@ -0,0 +1,16 @@ + + + + + ШаблонGetDocInvent + + + ru + Шаблон get doc invent + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetDocInvent/Ext/Template.xml b/CommonTemplates/ШаблонGetDocInvent/Ext/Template.xml new file mode 100644 index 0000000..a45a21b --- /dev/null +++ b/CommonTemplates/ШаблонGetDocInvent/Ext/Template.xml @@ -0,0 +1,79 @@ + + + + ru + ru + + ru + Русский + Русский + + + ru1 + Номенклатура + Номенклатура + + + + 8 + + 0 + + 1 + + + + + 0 + + + + 0 + + + ru + <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tsd="http://192.168.1.155/tsdsync"> + <soap:Header/> + <soap:Body> + <tsd:getDocInvent> + <tsd:barcode>$Штрихкод</tsd:barcode> + </tsd:getDocInvent> + </soap:Body> +</soap:Envelope> + + + + + + + 0 + + + + + 7 + + 0 + + + + + + + 1 + 7 + + true + + + true + 2 + 8 + 8 + + 479 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetNom.xml b/CommonTemplates/ШаблонGetNom.xml new file mode 100644 index 0000000..976b38f --- /dev/null +++ b/CommonTemplates/ШаблонGetNom.xml @@ -0,0 +1,16 @@ + + + + + ШаблонGetNom + + + ru + Шаблон get nom + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetNom/Ext/Template.xml b/CommonTemplates/ШаблонGetNom/Ext/Template.xml new file mode 100644 index 0000000..0fc9f7a --- /dev/null +++ b/CommonTemplates/ШаблонGetNom/Ext/Template.xml @@ -0,0 +1,46 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 1 + + + 0 + + + + 1 + + + ru + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsd="https://technozonee.itinalog.ru:5443/tsdsync"> + <soapenv:Header/> + <soapenv:Body> + <tsd:getNom/> + </soapenv:Body> +</soapenv:Envelope> + + + + + + + true + 2 + 1 + 1 + + 720 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetOrganizations.xml b/CommonTemplates/ШаблонGetOrganizations.xml new file mode 100644 index 0000000..adc51f9 --- /dev/null +++ b/CommonTemplates/ШаблонGetOrganizations.xml @@ -0,0 +1,16 @@ + + + + + ШаблонGetOrganizations + + + ru + Шаблон Get Organizations + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetOrganizations/Ext/Template.xml b/CommonTemplates/ШаблонGetOrganizations/Ext/Template.xml new file mode 100644 index 0000000..1366896 --- /dev/null +++ b/CommonTemplates/ШаблонGetOrganizations/Ext/Template.xml @@ -0,0 +1,46 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 1 + + + 0 + + + + 1 + + + ru + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsd="https://technozonee.itinalog.ru:5443/tsdsync"> + <soapenv:Header/> + <soapenv:Body> + <tsd:GetOrganizations/> + </soapenv:Body> +</soapenv:Envelope> + + + + + + + true + 2 + 1 + 1 + + 720 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetStockInCells.xml b/CommonTemplates/ШаблонGetStockInCells.xml new file mode 100644 index 0000000..2a9ceff --- /dev/null +++ b/CommonTemplates/ШаблонGetStockInCells.xml @@ -0,0 +1,16 @@ + + + + + ШаблонGetStockInCells + + + ru + Шаблон Get Stock In Cells + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetStockInCells/Ext/Template.xml b/CommonTemplates/ШаблонGetStockInCells/Ext/Template.xml new file mode 100644 index 0000000..c3a6aa2 --- /dev/null +++ b/CommonTemplates/ШаблонGetStockInCells/Ext/Template.xml @@ -0,0 +1,46 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 1 + + + 0 + + + + 1 + + + ru + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsd="https://technozonee.itinalog.ru:5443/tsdsync"> + <soapenv:Header/> + <soapenv:Body> + <tsd:GetStockInCells/> + </soapenv:Body> +</soapenv:Envelope> + + + + + + + true + 2 + 1 + 1 + + 720 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetUsers.xml b/CommonTemplates/ШаблонGetUsers.xml new file mode 100644 index 0000000..d21d408 --- /dev/null +++ b/CommonTemplates/ШаблонGetUsers.xml @@ -0,0 +1,16 @@ + + + + + ШаблонGetUsers + + + ru + Шаблон get users + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонGetUsers/Ext/Template.xml b/CommonTemplates/ШаблонGetUsers/Ext/Template.xml new file mode 100644 index 0000000..2be7900 --- /dev/null +++ b/CommonTemplates/ШаблонGetUsers/Ext/Template.xml @@ -0,0 +1,61 @@ + + + + ru + ru + + ru1 + Номенклатура + Номенклатура + + + ru + Русский + Русский + + + + 1 + + 0 + + 1 + + + + + 0 + + 2 + + + 3 + + + ru + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsd="https://technozonee.itinalog.ru:5443/tsdsync"> + <soapenv:Header/> + <soapenv:Body> + <tsd:GetUsers/> + </soapenv:Body> +</soapenv:Envelope> + + + + + + + true + 3 + 1 + 1 + + 1077 + + + 240 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDoc.xml b/CommonTemplates/ШаблонSetDoc.xml new file mode 100644 index 0000000..80c988f --- /dev/null +++ b/CommonTemplates/ШаблонSetDoc.xml @@ -0,0 +1,16 @@ + + + + + ШаблонSetDoc + + + ru + Шаблон set doc + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDoc/Ext/Template.xml b/CommonTemplates/ШаблонSetDoc/Ext/Template.xml new file mode 100644 index 0000000..831a6e6 --- /dev/null +++ b/CommonTemplates/ШаблонSetDoc/Ext/Template.xml @@ -0,0 +1,615 @@ + + + + ru + ru + + ru1 + Номенклатура + Номенклатура + + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + + 0 + + + + 0 + + + ru + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsd="https://technozonee.itinalog.ru:5443/tsdsync"> + <soapenv:Header/> + <soapenv:Body> + <tsd:setDoc> + <tsd:doc> + <КлючевыеСвойства xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>$ДокСсылка</Ссылка> + <Дата>$Дата</Дата> + <Номер>$Номер</Номер> + <ТипДокумента>$ТипДокумента</ТипДокумента> +<Организация><Наименование>Организация</Наименование><ЮридическоеФизическоеЛицо>ЮридическоеЛицо</ЮридическоеФизическоеЛицо> + </Организация> +<Контрагент xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>$КонтрагентСсылка</Ссылка> + <Наименование>Тандер</Наименование> + <НаименованиеПолное>Акционерное общество "Тандер"</НаименованиеПолное> + <ИНН>2310031475</ИНН> + <КПП>997350001</КПП> + <ЮридическоеФизическоеЛицо>ЮридическоеЛицо</ЮридическоеФизическоеЛицо> + <СтранаРегистрации> + <Ссылка>836947b4-cf37-11ee-9021-18c04d9c88a0</Ссылка> + <ДанныеКлассификатора> + <Код>643</Код> + <Наименование>РОССИЯ</Наименование> + </ДанныеКлассификатора> + </СтранаРегистрации> + <ИндивидуальныйПредприниматель>false</ИндивидуальныйПредприниматель> + </Контрагент> + </КлючевыеСвойства> + <Товары xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19">$Запасы</Товары> + <Валюта xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>836947f4-cf37-11ee-9021-18c04d9c88a0</Ссылка> + <ДанныеКлассификатора> + <Код>643</Код> + <Наименование>RUB</Наименование> + </ДанныеКлассификатора> + </Валюта> + <ВидОперации xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19">ПокупкаУПоставщика</ВидОперации> + <Подразделение xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>$АвторСсылка</Ссылка> + <Наименование>Тандер</Наименование> + </Подразделение> + <ДанныеВзаиморасчетов xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"></ДанныеВзаиморасчетов> + </tsd:doc> + </tsd:setDoc> + </soapenv:Body> +</soapenv:Envelope> + + + + + + + + + + 0 + + + + + + 1 + + 2 + + + 0 + + + + + + 0 + + + + + + 2 + + 3 + + + 0 + + + + + + 0 + + + + + + 3 + + + + 0 + + + + 5 + + 0 + + + + + + 4 + + + + 0 + + + + 6 + + 0 + + + + + + 5 + + + + 0 + + + + 6 + + 0 + + + + + + 6 + + + + 0 + + + + 5 + + 0 + + + + + + 7 + + + + 0 + + + + + + 0 + + + + + + 8 + + + + 0 + + + + + 0 + + + + + + 9 + + + + 0 + + + + + + + 10 + + + + 0 + + + + + + 11 + + + + 0 + + + + + + 12 + + + + 0 + + + + + + 13 + + true + + + + 14 + + + + 0 + + + + + + 15 + + + + 0 + + + + + + 16 + + + 1 + + 0 + + + + 4 + + 0 + + + + + + 17 + + + 5 + + 0 + + + + + + 18 + + + 5 + + 0 + + + + + + 19 + + + 4 + + 0 + + + + + + 20 + + + + 0 + + + + + + 21 + + true + + + + 22 + + + + 0 + + + + + + 23 + + + 4 + + 0 + + + + + + 24 + + + 4 + + 0 + + + + + + 25 + + + 4 + + 0 + + + + + + 26 + + + 4 + + 0 + + + + + + 27 + + + 4 + + 0 + + + + + + 28 + + + 4 + + 0 + + + + + + 29 + + + 4 + + 0 + + + + + + 30 + + + 5 + + 0 + + + + + + 31 + + + 5 + + 0 + + + + + + 32 + + + 6 + + 0 + + + + + + 33 + + + 6 + + 0 + + + + + + 34 + + + + 0 + + + + + 5 + + 0 + + + + + + 35 + + + 4 + + 0 + + + + + + 36 + + + 4 + + 0 + + + + + + 37 + + + 3 + + 0 + + + + + + 38 + + + + 0 + + + + + + 39 + + + + 0 + + + + + + 40 + + + + 0 + + + + + + 41 + + + + 0 + + + + + + 42 + + + + 0 + + + + + + 43 + + + + 0 + + + + + true + 4 + 44 + 44 + + 809 + + + 403 + + + 36 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocBarcode.xml b/CommonTemplates/ШаблонSetDocBarcode.xml new file mode 100644 index 0000000..e671dfe --- /dev/null +++ b/CommonTemplates/ШаблонSetDocBarcode.xml @@ -0,0 +1,16 @@ + + + + + ШаблонSetDocBarcode + + + ru + Шаблон set doc barcode + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocBarcode/Ext/Template.xml b/CommonTemplates/ШаблонSetDocBarcode/Ext/Template.xml new file mode 100644 index 0000000..34f5711 --- /dev/null +++ b/CommonTemplates/ШаблонSetDocBarcode/Ext/Template.xml @@ -0,0 +1,356 @@ + + + + ru + ru + + ru1 + Номенклатура + Номенклатура + + + ru + Русский + Русский + + + + 2 + + 0 + + 1 + + + + + 0 + + 2 + + + 3 + + + ru + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsd="https://technozonee.itinalog.ru:5443/tsdsync"> + <soapenv:Header/> + <soapenv:Body> + <tsd:setDocBarcode> + <tsd:DocBarcode> + <СсылкаДок>$ДокСсылка</СсылкаДок> + <Дата>$Дата</Дата> + <Номер>$Номер</Номер> + <Штрихкоды>$СтрокаШК</Штрихкоды> + </tsd:DocBarcode> + </tsd:setDocBarcode> + </soapenv:Body> +</soapenv:Envelope> + + + + + + + 0 + + + + + + + 1 + + 4 + + + 5 + + + + + + + 2 + + + + 1 + + + + + + + 3 + + + + 1 + + + + + + 4 + + + + 1 + + + + + 0 + + + + + + 5 + + + + 1 + + + + + + 6 + + + + 1 + + + + + + 7 + + + + 1 + + + + + + 8 + + + + 1 + + + + + + 9 + + + + 1 + + + + + 0 + + + + + + 10 + + + + 1 + + + + + + 11 + + + + 1 + + + + + + 12 + + + + 1 + + + + + + 13 + + + + 0 + + + + + + 14 + + + + 0 + + + + + + 15 + 17 + + true + + + + 18 + + + + 0 + + + + + + + 19 + + + + 0 + + + + + + + 20 + 23 + + true + + + + 24 + + + + 0 + + + + + + + 25 + 27 + + true + + + + 28 + + + + 0 + + + + + + + 29 + 30 + + true + + + + 31 + + + + 0 + + + + + + + 32 + 33 + + true + + + + 34 + + + + 0 + + + + + + + 35 + + true + + + + 36 + + + + 0 + + + + + + true + 6 + 37 + 37 + + 511 + + + 506 + + + 619 + 511 + + + 36 + + + 242 + 511 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocBarcodeLine.xml b/CommonTemplates/ШаблонSetDocBarcodeLine.xml new file mode 100644 index 0000000..60a9185 --- /dev/null +++ b/CommonTemplates/ШаблонSetDocBarcodeLine.xml @@ -0,0 +1,16 @@ + + + + + ШаблонSetDocBarcodeLine + + + ru + Шаблон set doc barcode line + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocBarcodeLine/Ext/Template.xml b/CommonTemplates/ШаблонSetDocBarcodeLine/Ext/Template.xml new file mode 100644 index 0000000..11a7f9d --- /dev/null +++ b/CommonTemplates/ШаблонSetDocBarcodeLine/Ext/Template.xml @@ -0,0 +1,339 @@ + + + + ru + ru + + ru1 + Номенклатура + Номенклатура + + + ru + Русский + Русский + + + + 2 + + 0 + + 1 + + + + + 0 + + 2 + + + 0 + + + ru + <Строка> +<ШтрихкодСтрока>$ШтрихкодВСтроке</ШтрихкодСтрока> +<ШтрихкодКодир>$ШтрихкодКодированный</ШтрихкодКодир> +</Строка> + + + + + + + 0 + + + + + + + 1 + + 3 + + + 0 + + + + + + + 2 + + + + 0 + + + + + + + 3 + + + + 0 + + + + + + 4 + + + + 0 + + + + + 0 + + + + + + 5 + + + + 0 + + + + + + 6 + + + + 0 + + + + + + 7 + + + + 0 + + + + + + 8 + + + + 0 + + + + + + 9 + + + + 0 + + + + + 0 + + + + + + 10 + + + + 0 + + + + + + 11 + + + + 0 + + + + + + 12 + + + + 0 + + + + + + 13 + + + + 0 + + + + + + 14 + + + + 0 + + + + + + 15 + 17 + + true + + + + 18 + + + + 0 + + + + + + + 19 + + + + 0 + + + + + + + 20 + 23 + + true + + + + 24 + + + + 0 + + + + + + + 25 + 27 + + true + + + + 28 + + + + 0 + + + + + + + 29 + 30 + + true + + + + 31 + + + + 0 + + + + + + + 32 + 33 + + true + + + + 34 + + + + 0 + + + + + + + 35 + + true + + + + 36 + + + + 0 + + + + + + true + 4 + 37 + 37 + + 511 + + + 187 + + + 106 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocCellMove.xml b/CommonTemplates/ШаблонSetDocCellMove.xml new file mode 100644 index 0000000..619de16 --- /dev/null +++ b/CommonTemplates/ШаблонSetDocCellMove.xml @@ -0,0 +1,16 @@ + + + + + ШаблонSetDocCellMove + + + ru + Шаблон Set Doc Cell Move + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocCellMove/Ext/Template.xml b/CommonTemplates/ШаблонSetDocCellMove/Ext/Template.xml new file mode 100644 index 0000000..d08aac3 --- /dev/null +++ b/CommonTemplates/ШаблонSetDocCellMove/Ext/Template.xml @@ -0,0 +1,93 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 1 + + + 0 + + + + 1 + + + ru + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsd="https://technozonee.itinalog.ru:5443/tsdsync"> + <soapenv:Header/> + <soapenv:Body> + <tsd:setDoc> + <tsd:doc> + <КлючевыеСвойства xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>$ДокСсылка</Ссылка> + <Дата>$Дата</Дата> + <Номер>$Номер</Номер> + <ТипДокумента>ПеремещениеПоЯчейкам</ТипДокумента> + <Организация> + <Ссылка>$ОрганизацияСсылка</Ссылка> + <Наименование>$ОрганизацияНаименование</Наименование> + <ЮридическоеФизическоеЛицо>ЮридическоеЛицо</ЮридическоеФизическоеЛицо> + </Организация> + <Контрагент xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>$КонтрагентСсылка</Ссылка> + <Наименование>Тандер</Наименование> + <НаименованиеПолное>Акционерное общество "Тандер"</НаименованиеПолное> + <ИНН>2310031475</ИНН> + <КПП>997350001</КПП> + <ЮридическоеФизическоеЛицо>ЮридическоеЛицо</ЮридическоеФизическоеЛицо> + <СтранаРегистрации> + <Ссылка>836947b4-cf37-11ee-9021-18c04d9c88a0</Ссылка> + <ДанныеКлассификатора> + <Код>643</Код> + <Наименование>РОССИЯ</Наименование> + </ДанныеКлассификатора> + </СтранаРегистрации> + <ИндивидуальныйПредприниматель>false</ИндивидуальныйПредприниматель> + </Контрагент> + </КлючевыеСвойства> + <СтруктурнаяЕдиница>$СкладСсылка</СтруктурнаяЕдиница> + <Валюта xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>836947f4-cf37-11ee-9021-18c04d9c88a0</Ссылка> + <ДанныеКлассификатора> + <Код>643</Код> + <Наименование>RUB</Наименование> + </ДанныеКлассификатора> + </Валюта> + <ВидОперации xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19">ПокупкаУПоставщика</ВидОперации> + <ВидОперацииПеремещенияПоЯчейкам>$ВидОперации</ВидОперацииПеремещенияПоЯчейкам> + <Подразделение xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>$АвторСсылка</Ссылка> + <Наименование>Тандер</Наименование> + </Подразделение> + <ДанныеВзаиморасчетов xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"></ДанныеВзаиморасчетов> + <Автор>$АвторСсылка</Автор> + <Запасы>$Запасы</Запасы> + </tsd:doc> + </tsd:setDoc> + </soapenv:Body> +</soapenv:Envelope> + + + + + + + true + 2 + 1 + 1 + + 720 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocCellMoveLine.xml b/CommonTemplates/ШаблонSetDocCellMoveLine.xml new file mode 100644 index 0000000..f49de5b --- /dev/null +++ b/CommonTemplates/ШаблонSetDocCellMoveLine.xml @@ -0,0 +1,16 @@ + + + + + ШаблонSetDocCellMoveLine + + + ru + Шаблон Set Doc Cell Move Line + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocCellMoveLine/Ext/Template.xml b/CommonTemplates/ШаблонSetDocCellMoveLine/Ext/Template.xml new file mode 100644 index 0000000..5cac414 --- /dev/null +++ b/CommonTemplates/ШаблонSetDocCellMoveLine/Ext/Template.xml @@ -0,0 +1,63 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 1 + + + 0 + + + + 1 + + + ru + <Строка> + <НомерСтрокиДокумента>$Строка</НомерСтрокиДокумента> + <ДанныеНоменклатуры> + <Номенклатура xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>$НоменклатураСсылка</Ссылка> + <Наименование>$НоменклатураНаименование</Наименование> + </Номенклатура> + </ДанныеНоменклатуры> + <Номенклатура>$НоменклатураСсылка</Номенклатура> + <Партия>$ПартияСсылка</Партия> + <ЕдиницаИзмерения> + <Ссылка>$ЕдСсылка</Ссылка> + <ДанныеКлассификатора> + <Код>$КодКлас</Код> + <Наименование>$НаимКлас</Наименование> + </ДанныеКлассификатора> + </ЕдиницаИзмерения> + <Количество xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19">$Количество</Количество> + <ТипЗапасов xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19">$типз</ТипЗапасов> + <ЯчейкаИсточник>$ЯчейкаИсточникСсылка</ЯчейкаИсточник> + <Ячейка>$ЯчейкаСтрокиСсылка</Ячейка> + <Штрихкод>$Штрихкод</Штрихкод> +</Строка> + + + + + + + true + 2 + 1 + 1 + + 720 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocInvent.xml b/CommonTemplates/ШаблонSetDocInvent.xml new file mode 100644 index 0000000..9a15c60 --- /dev/null +++ b/CommonTemplates/ШаблонSetDocInvent.xml @@ -0,0 +1,16 @@ + + + + + ШаблонSetDocInvent + + + ru + Шаблон set doc invent + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocInvent/Ext/Template.xml b/CommonTemplates/ШаблонSetDocInvent/Ext/Template.xml new file mode 100644 index 0000000..34e1300 --- /dev/null +++ b/CommonTemplates/ШаблонSetDocInvent/Ext/Template.xml @@ -0,0 +1,531 @@ + + + + ru + ru + + ru + Русский + Русский + + + ru1 + Номенклатура + Номенклатура + + + + 7 + + 0 + + 1 + + + + + 0 + + + + 0 + + + ru + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsd="http://192.168.1.155/tsdsync"> + <soapenv:Header/> + <soapenv:Body> + <tsd:setDocInvent> + <tsd:doc> + <КлючевыеСвойства xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>$ДокСсылка</Ссылка> + <Дата>$Дата</Дата> + <Номер>$Номер</Номер> +<Организация> +<Наименование></Наименование> +<ЮридическоеФизическоеЛицо>ЮридическоеЛицо</ЮридическоеФизическоеЛицо> + </Организация> + </КлючевыеСвойства> + <Товары xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19">$Запасы</Товары> + </tsd:doc> + </tsd:setDocInvent> + </soapenv:Body> +</soapenv:Envelope> + + + + + + + + + + 2 + + + + + + + 1 + + + + 0 + + + + + 2 + + + + + + 2 + + + + 0 + + + + + + 3 + + + + 0 + + + + + + 4 + + + + 0 + + + + + + 5 + + + + 0 + + + + + + 6 + + + + 0 + + + + + + 7 + + + + 0 + + + + + + 8 + + + + 0 + + + + + + 9 + + + + 0 + + + + + + 10 + + + + 0 + + + + + + 11 + + + + 0 + + + + + + 12 + + + + 0 + + + + + + 13 + + true + + + + 14 + + + + 0 + + + + + + 15 + + + + 0 + + + + + + 16 + + + 1 + + 0 + + + + 4 + + 0 + + + + + + 17 + + + 5 + + 0 + + + + + + 18 + + + 5 + + 0 + + + + + + 19 + + + 4 + + 0 + + + + + + 20 + + + + 0 + + + + + + 21 + + true + + + + 22 + + + + 0 + + + + + + 23 + + + 4 + + 0 + + + + + + 24 + + + 4 + + 0 + + + + + + 25 + + + 4 + + 0 + + + + + + 26 + + + 4 + + 0 + + + + + + 27 + + + 4 + + 0 + + + + + + 28 + + + 4 + + 0 + + + + + + 29 + + + 4 + + 0 + + + + + + 30 + + + 5 + + 0 + + + + + + 31 + + + 5 + + 0 + + + + + + 32 + + + 6 + + 0 + + + + + + 33 + + + 6 + + 0 + + + + + + 34 + + + 5 + + 0 + + + + + + 35 + + + 4 + + 0 + + + + + + 36 + + + 4 + + 0 + + + + + + 37 + + + 3 + + 0 + + + + + + 38 + + + + 0 + + + + + + 39 + + + + 0 + + + + + + 40 + + + + 0 + + + + + + 41 + + + + 0 + + + + + + 42 + + + + 0 + + + + + + 43 + + + + 0 + + + + + true + 2 + 44 + 44 + + 707 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocInventTov.xml b/CommonTemplates/ШаблонSetDocInventTov.xml new file mode 100644 index 0000000..38fcf91 --- /dev/null +++ b/CommonTemplates/ШаблонSetDocInventTov.xml @@ -0,0 +1,16 @@ + + + + + ШаблонSetDocInventTov + + + ru + Шаблон set doc invent tov + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocInventTov/Ext/Template.xml b/CommonTemplates/ШаблонSetDocInventTov/Ext/Template.xml new file mode 100644 index 0000000..8570701 --- /dev/null +++ b/CommonTemplates/ШаблонSetDocInventTov/Ext/Template.xml @@ -0,0 +1,235 @@ + + + + ru + ru + + ru1 + Номенклатура + Номенклатура + + + ru + Русский + Русский + + + + 2 + + 0 + + 1 + + + + + 0 + + + + 0 + + + ru + <Строка> +<НомерСтрокиДокумента>$Строка</НомерСтрокиДокумента> +<ДанныеНоменклатуры> + <Номенклатура xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>$НоменклатураСсылка</Ссылка> + <Наименование></Наименование> + <МаркировкаМП></МаркировкаМП> + </Номенклатура> +</ДанныеНоменклатуры> +<ЕдиницаИзмерения> +<Ссылка>$ЕдСсылка</Ссылка> +<ДанныеКлассификатора> +<Код>$КодКлас</Код> +<Наименование>$НаимКлас</Наименование> +<КодМаркировки>$КодМаркировки</КодМаркировки> +</ДанныеКлассификатора> +</ЕдиницаИзмерения> + <Количество xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19">$Количество</Количество> + <КоличествоУчет xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19">$Колуч</КоличествоУчет> +<ТипЗапасов xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19">$типз</ТипЗапасов> +<ДанныеКарточкиМП> + <Номенклатура xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>$НоменклатураСсылка</Ссылка> + <Наименование></Наименование> + </Номенклатура> +<ДанныеКарточкиМП> + </Строка> + + + + + + + + 0 + + + + + + + 1 + + + + 0 + + + + + + 2 + + + + 0 + + + + + + 3 + + + + 0 + + + + + + 4 + + + + 0 + + + + + 0 + + + + + + 5 + + + + 0 + + + + + + 6 + + + + 0 + + + + + + 7 + + + + 0 + + + + + + 8 + + + + 0 + + + + + + 9 + + + + 0 + + + + + 0 + + + + + + 10 + + + + 0 + + + + + + 11 + + + + 0 + + + + + + 12 + + + + 0 + + + + + + 13 + + + + 0 + + + + + + 14 + + + + 0 + + + + + true + 2 + 15 + 15 + + 581 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocPostup.xml b/CommonTemplates/ШаблонSetDocPostup.xml new file mode 100644 index 0000000..e6fb997 --- /dev/null +++ b/CommonTemplates/ШаблонSetDocPostup.xml @@ -0,0 +1,16 @@ + + + + + ШаблонSetDocPostup + + + ru + Шаблон set doc postup + + + + SpreadsheetDocument + + + \ No newline at end of file diff --git a/CommonTemplates/ШаблонSetDocPostup/Ext/Template.xml b/CommonTemplates/ШаблонSetDocPostup/Ext/Template.xml new file mode 100644 index 0000000..66732f3 --- /dev/null +++ b/CommonTemplates/ШаблонSetDocPostup/Ext/Template.xml @@ -0,0 +1,380 @@ + + + + ru + ru + + ru1 + Номенклатура + Номенклатура + + + ru + Русский + Русский + + + + 2 + + 0 + + 1 + + + + + 0 + + 2 + + + 0 + + + ru + <Строка> +<НомерСтрокиДокумента>$Строка</НомерСтрокиДокумента> +<ДанныеНоменклатуры> + <Номенклатура xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>$НоменклатураСсылка</Ссылка> + <Наименование></Наименование> + <МаркировкаМП>0</МаркировкаМП> + </Номенклатура> +</ДанныеНоменклатуры> +<ЕдиницаИзмерения> +<Ссылка>$ЕдСсылка</Ссылка> +<ДанныеКлассификатора> +<Код>$КодКлас</Код> +<Наименование>$НаимКлас</Наименование> +</ДанныеКлассификатора> +</ЕдиницаИзмерения> + <Количество xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19">$Количество</Количество> +<ТипЗапасов xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19">$типз</ТипЗапасов> +<ДанныеКарточкиМП> + <Номенклатура xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> + <Ссылка>$НоменклатураСсылка</Ссылка> + <Наименование></Наименование> + </Номенклатура> +</ДанныеКарточкиМП> +<КомплектацияНоменклатуры xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> +<строка><ВладелецСсылка></ВладелецСсылка> +<Ссылка></Ссылка> +<НаименованиеКомплекта></НаименованиеКомплекта> +<ТаблицаСостава> +<строка> +<Номенклатура xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> +<Номенклатура xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"> +<Ссылка></Ссылка> +<Наименование></Наименование> +</Номенклатура> +</Номенклатура> +<Количество></Количество> +<КоличествоКомплектов></КоличествоКомплектов> +</строка> +</ТаблицаСостава> +</строка> +</КомплектацияНоменклатуры> +<КодМаркировки>$КодМаркировки</КодМаркировки> + </Строка> + + + + + + + + 0 + + + + + + + 1 + + 3 + + + 0 + + + + + + + 2 + + + + 0 + + + + + + + 3 + + + + 0 + + + + + + 4 + + + + 0 + + + + + 0 + + + + + + 5 + + + + 0 + + + + + + 6 + + + + 0 + + + + + + 7 + + + + 0 + + + + + + 8 + + + + 0 + + + + + + 9 + + + + 0 + + + + + 0 + + + + + + 10 + + + + 0 + + + + + + 11 + + + + 0 + + + + + + 12 + + + + 0 + + + + + + 13 + + + + 0 + + + + + + 14 + + + + 0 + + + + + + 15 + 17 + + true + + + + 18 + + + + 0 + + + + + + + 19 + + + + 0 + + + + + + + 20 + 23 + + true + + + + 24 + + + + 0 + + + + + + + 25 + 27 + + true + + + + 28 + + + + 0 + + + + + + + 29 + 30 + + true + + + + 31 + + + + 0 + + + + + + + 32 + 33 + + true + + + + 34 + + + + 0 + + + + + + + 35 + + true + + + + 36 + + + + 0 + + + + + + true + 4 + 37 + 37 + + 444 + + + 1699 + + + 826 + + + 72 + + \ No newline at end of file diff --git a/CommonTemplates/еррор.xml b/CommonTemplates/еррор.xml new file mode 100644 index 0000000..c42fd78 --- /dev/null +++ b/CommonTemplates/еррор.xml @@ -0,0 +1,16 @@ + + + + + еррор + + + ru + Еррор + + + + BinaryData + + + \ No newline at end of file diff --git a/CommonTemplates/еррор/Ext/Template.bin b/CommonTemplates/еррор/Ext/Template.bin new file mode 100644 index 0000000..f517e52 Binary files /dev/null and b/CommonTemplates/еррор/Ext/Template.bin differ diff --git a/CommonTemplates/ок.xml b/CommonTemplates/ок.xml new file mode 100644 index 0000000..ac675aa --- /dev/null +++ b/CommonTemplates/ок.xml @@ -0,0 +1,16 @@ + + + + + ок + + + ru + Ок + + + + BinaryData + + + \ No newline at end of file diff --git a/CommonTemplates/ок/Ext/Template.bin b/CommonTemplates/ок/Ext/Template.bin new file mode 100644 index 0000000..83480b2 Binary files /dev/null and b/CommonTemplates/ок/Ext/Template.bin differ diff --git a/ConfigDumpInfo.xml b/ConfigDumpInfo.xml new file mode 100644 index 0000000..75cbb60 --- /dev/null +++ b/ConfigDumpInfo.xml @@ -0,0 +1,1514 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Configuration.xml b/Configuration.xml new file mode 100644 index 0000000..5037a3b --- /dev/null +++ b/Configuration.xml @@ -0,0 +1,537 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + bab5980f-11a1-4a78-8563-c1e7af208ba9 + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + 8c164daa-d823-4b08-b22e-a6f995c4dd10 + + + e3687481-0a87-462c-a166-9f34594f9bba + 7ea94d52-de5e-4579-ac51-348afced3f73 + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + f90a2958-545d-4a10-ab74-1a9ba417c785 + + + 51f2d5d8-ea4d-4064-8892-82951750031e + b8d60afa-1a71-43a6-8cfa-75609ddb8d11 + + + e68182ea-4237-4383-967f-90c1e3370bc7 + c988b8e7-4f7d-4dcc-8350-ca2d2149009e + + + fb282519-d103-4dd3-bc12-cb271d631dfc + 5c087b23-345b-4053-8c07-a3cf0dc940fb + + + + МобильныйТСД + + + ru + Склад: МаркетПлейсы + + + + + Version8_5_1 + ManagedApplication + + PlatformApplication + MobilePlatformApplication + + Russian + + Role.ПолныеПрава + Role.АдминистраторСистемы + Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок + + Фирма "1С" + 3.2.620 + http://downloads.v8.1c.ru/tmplts/ + false + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + true + + + LocalNotifications + true + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + true + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + true + + + AudioPlaybackAndVibration + true + + + BackgroundAudioPlaybackAndVibration + true + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + true + + + Videoconferences + false + + + NFC + true + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + true + + + AllIncomingShareRequestsTypesProcessing + true + + + TextToSpeech + false + + + + + + NavigationLeft + Auto + Normal + OpenDataInDialogs + + + + + Language.Русский + + + ru + Библиотека подключаемого оборудования, редакция 3.2 + + + + + ru + Библиотека подключаемого оборудования, редакция 3.2 + + + + + ru + Copyright (C) ООО "1C-Софт", 2009–2025. Все права защищены + + + + + ru + http://www.1c.ru + + + + + ru + http://v8.1c.ru/cel + + + Managed + NotAutoFree + UseWithWarnings + Use + Taxi + DontUse + DontUse + Version8_3_24 + + + + Номенклатура + Русский + ПоддержкаОборудования + ТСД + ВнешняяКомпонентаДоступна + ВнешняяКомпонентаНеДоступна + РабочееМестоКлиента + АдминистраторСистемы + БазовыеПраваБПО + ВыполнениеСинхронизацииДанных + ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок + ПолныеПрава + СохранениеДанныхПользователя + Драйвер1СДисплейПокупателя + Драйвер1СПринтерЧеков + Драйвер1СУстройстваВводаNative + Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru + Драйвер1СЭлектронныеВесы + ДрайверMERTECHСканерШтрихкода_ru + ДрайверRightScanККТ54ФЗ_ru + ДрайверRightScanУстройстваВвода_ru + ДрайверRightScanУстройствоПечати_ru + ДрайверScanPortУстройстваВвода_ru + ДрайверUCSEFTPOSЭквайринговыеТерминалы_ru + ДрайверАЗУРККТ54ФЗФФД12_ru + ДрайверАЗУРПлатежнаяСистема_ru + ДрайверАТОЛДрайверПлатежногоЯдраПэй_ru + ДрайверАТОЛККТ54ФЗ10XФФД12_ru + ДрайверАТОЛККТ54ФЗ10XФФД12X_ru + ДрайверАТОЛСканерШтрихкода_ru + ДрайверВерсияТККТ54ФЗ_ru + ДрайверКлеверенсСканерШтрихкода_ru + ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru + ДрайверПОСЦентрЭлектронныеВесыNG_ru + ДрайверСканкодСканерШтрихкода_ru + ДрайверСканситиУстройстваВвода_ru + еррор + КодВидаНоменклатурнойКлассификации + КомпонентаИнтеграцииНСПК + ок + ШаблонGetArrayDoc + ШаблонGetDoc + ШаблонGetDocInvent + ШаблонGetNom + ШаблонGetUsers + ШаблонGetCells + ШаблонGetOrganizations + ШаблонGetBatches + ШаблонGetStockInCells + ШаблонSetDoc + ШаблонSetDocCellMove + ШаблонSetDocCellMoveLine + ШаблонSetDocInvent + ШаблонSetDocInventTov + ШаблонSetDocPostup + ШаблонSetDocBarcode + ШаблонSetDocBarcodeLine + ВнешниеКомпонентыБПО + ВнешниеКомпонентыБПОКлиент + ВнешниеКомпонентыБПОПереопределяемый + ГенерацияШтрихкода + ГенерацияШтрихкодаСерверПовтИсп + ИнтеграцияПодсистемБПО + ИнтеграцияПодсистемБПОКлиент + ИнтеграцияПодсистемБПОКлиентПовтИсп + ИнтеграцияПодсистемБПОСлужебныйВызовСервера + ЛогированиеОперацийБПО + ЛогированиеОперацийБПОПереопределяемый + ЛогированиеОперацийБПОСлужебныйВызовСервера + МенеджерОборудования + МенеджерОборудованияВызовСервера + МенеджерОборудованияВызовСервераПереопределяемый + МенеджерОборудованияГлобальный + МенеджерОборудованияКлиент + МенеджерОборудованияКлиентПереопределяемый + МенеджерОборудованияКлиентПовтИсп + МенеджерОборудованияКлиентСервер + МенеджерОборудованияКлиентСерверПереопределяемый + МенеджерОборудованияМаркировка + МенеджерОборудованияМаркировкаВызовСервера + МенеджерОборудованияМаркировкаКлиент + МенеджерОборудованияМаркировкаКлиентПовтИсп + МенеджерОборудованияМаркировкаКлиентСервер + МенеджерОборудованияМаркировкаПовтИсп + МенеджерОборудованияПовтИсп + ОбновлениеИнформационнойБазыБПО + ОборудованиеВесовоеОборудование + ОборудованиеВесовоеОборудованиеКлиент + ОборудованиеВесовоеОборудованиеКлиентСервер + ОборудованиеДисплеиПокупателя + ОборудованиеДисплеиПокупателяКлиент + ОборудованиеПлатежныеСистемы + ОборудованиеПлатежныеСистемыКлиент + ОборудованиеПлатежныеСистемыКлиентСервер + ОборудованиеУстройстваВвода + ОборудованиеУстройстваВводаВызовСервера + ОборудованиеУстройстваВводаКлиент + ОборудованиеЧекопечатающиеУстройства + ОборудованиеЧекопечатающиеУстройстваВызовСервера + ОборудованиеЧекопечатающиеУстройстваКлиент + ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация + ОборудованиеЧекопечатающиеУстройстваКлиентСервер + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация + ОборудованиеЧекопечатающиеУстройстваЛокализация + ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер + ОбщегоНазначенияБПО + ОбщегоНазначенияБПОКлиент + ОбщегоНазначенияБПОКлиентСервер + ОбщегоНазначенияБПОПереопределяемый + ОбщегоНазначенияБПОПовтИсп + ОбщегоНазначенияБПОСлужебныйВызовСервера + ПодключаемоеОборудованиеДрайверКлиент + СинхронизацияУТ + СинхронизацияУТКлиент + ФорматноЛогическийКонтроль + ФорматноЛогическийКонтрольВызовСервера + ФорматноЛогическийКонтрольКлиентСервер + ФорматноЛогическийКонтрольПереопределяемый + ШаблоныФискальныхДокументов + ШаблоныФискальныхДокументовЛокализация + ШаблоныФискальныхДокументовСлужебный + ШтрихкодированиеОбщегоНазначенияИС + ЭлектронныеСертификатыНСПК + ЭлектронныеСертификатыНСПКВызовСервера + ЭлектронныеСертификатыНСПККлиент + ЭлектронныеСертификатыНСПККлиентСервер + ДенежнаяСуммаЛюбогоЗнака + ДенежнаяСуммаНеотрицательная + КассаБПО + ОрганизацияБПО + ОснованиеФискальнойОперацииБПО + ПользовательБПО + СообщениеЕГАИСвБПО + СубъектПерсональныхДанныхБПО + ТипыПодключаемогоОборудования + ТорговыйОбъектБПО + ВыбратьРМТекущегоСеанса + ОбновлениеИнформационнойБазыБПО + РегистрФискальныхОпераций + СверкаИтоговПоКартам + УправлениеФискальнымУстройством + УправлениеЭквайринговымТерминалом + ОбновитьДрайвераОборудования + АвторизированныйПользователь + СрокХраненияОперацийПроверкиКМ + ХранитьУспешныеОперацииРазрешения + ИспользоватьПодключаемоеОборудование + ПодключатьОборудованиеПриЗапуске + ПринтерПоУмолчанию + КлючQRАвторизацииТСД + ДатаПоследнейЗагрузкиДанныхУНФ + ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО + КодВидаНоменклатурнойКлассификации + НастройкаРегистрацииККТ + ПодборПоставкиТовара + ПроверкаКонтрольнойМаркиБПО + УправлениеФискальнымУстройством + УправлениеЭквайринговымТерминалом + ФормаАвторизации + ДрайверыОборудования + ЕдиницыИзмерения + КарточкиМП + КлассификаторЕдиницИзмерения + КомплектацииНоменклатуры + Номенклатура + Партнеры + ПодключаемоеОборудование + Пользователи + РабочиеМеста + СтруктурныеЕдиницы + Организации + ПринтерыДляПечати + Ячейки + ПартииНоменклатуры + ИнвентаризацияЗапасов + ПоставкаМП + СборкаЗаказа + СтикеровкаМП + ПулШтрихкодов + ПеремещениеПоЯчейкам + ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО + КодВидаНоменклатурнойКлассификации + НастройкаРегистрацииККТ + ПроверкаКонтрольнойМаркиБПО + УправлениеФискальнымУстройством + УправлениеЭквайринговымТерминалом + ВидДокументаУдостоверяющегоЛичностьККТ + ВидОплатыНаТерминале + ВидыМаркированнойПродукцииБПО + ВидыОперацийИзмененияСостоянияФН + ВидыПродукцииИС + ВидыУпаковокИС + МераКоличестваПредметаРасчетаККТ + ОбработчикиДрайверовПодключаемогоОборудования + ОтветОИСМОСтатусеТовара + ПериодХраненияИсторииОпераций + ПланируемыйСтатусМаркируемогоТовара + ПоляШаблоновМагнитныхКарт + ПризнакиАгента + ПризнакиПредметаРасчета + ПризнакиСпособаРасчета + ПричиныИзмененияСведенийККТ + ПричиныПеререгистрацииФН + ПротоколОбменаФЭСНСПК + СпособПодключенияДрайвера + СпособыФорматноЛогическогоКонтроля + Статус + ВидыОперацийПеремещенияПоЯчейкам + СтатусОбработкиЗапросаКМ + СтатусОперацииНаДисплее + СтатусРабочегоМестаНаДисплее + СтатусРезультатаЗапросаКМ + СтатусЧекаККТВОчереди + СтатусыКассовойСмены + ТипыИдентификаторовТовараККТ + ТипыИзмеряемыхВеличин + ТипыМаркировкиККТ + ТипыОплатыККТ + ТипыПакетнойОперацииВОчередиЧеков + ТипыПерсональныхДанныхККТ + ТипыПлатежнойСистемыККТ + ТипыПлатежныхОпераций + ТипыПодключаемогоОборудования + ТипыПодключенияОборудования + ТипыРасчетаДенежнымиСредствами + ТипыСистемНалогообложенияККТ + ТипыФискальныхДокументовККТ + ТипыЧековКоррекции + ТипыШтрихкодов + ШаблоныКодовМаркировкиСУЗ + ЗначенияЕМРЦ + ОперацииПроверкиКМ + ОсобенностиУчета + ОшибкиПодтвержденияНСПК + ПлатежныеОперации + ФискальныеОперации + ЦеныНоменклатуры + ЗапасыНаСкладах + ШтрихкодыУпаковок + + + \ No newline at end of file diff --git a/Constants/АвторизированныйПользователь.xml b/Constants/АвторизированныйПользователь.xml new file mode 100644 index 0000000..96bffca --- /dev/null +++ b/Constants/АвторизированныйПользователь.xml @@ -0,0 +1,58 @@ + + + + + + 06a5d5b2-1ead-42a1-b0d0-505228d31dc5 + 5af92a7f-d1e0-49c1-8272-f64d3afb6ab5 + + + 53527fbe-718a-4dca-9e86-6e475d03a83b + de993bbe-3b14-4245-8d98-3b5c3519cd61 + + + 48d8c1ad-34ef-41a2-9fca-4cdd9aaffa8a + 7868edce-c540-42c4-92d8-bf92cdd25aae + + + + АвторизированныйПользователь + + + ru + Авторизированный пользователь + + + + + cfg:CatalogRef.Пользователи + + true + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + + + Auto + Managed + DontUse + false + false + + + \ No newline at end of file diff --git a/Constants/ДатаПоследнейЗагрузкиДанныхУНФ.xml b/Constants/ДатаПоследнейЗагрузкиДанныхУНФ.xml new file mode 100644 index 0000000..d558a3f --- /dev/null +++ b/Constants/ДатаПоследнейЗагрузкиДанныхУНФ.xml @@ -0,0 +1,61 @@ + + + + + + f55a936f-8adf-4c91-843a-5bd29231a994 + 2cd2245d-5303-44fb-925f-e78fe7d8f9f2 + + + c2876b6c-7058-4fb5-964a-c408a067f3af + c9100310-45f4-4bdd-b247-309b589ad342 + + + 8a90c806-8e76-47f8-b572-d1d0ab9c4af0 + 1b6156b4-0122-443b-96cc-349ef43798a6 + + + + ДатаПоследнейЗагрузкиДанныхУНФ + + + ru + Дата последней загрузки данных УНФ + + + + + xs:dateTime + + DateTime + + + true + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + + + Auto + Managed + DontUse + false + false + + + \ No newline at end of file diff --git a/Constants/ИспользоватьПодключаемоеОборудование.xml b/Constants/ИспользоватьПодключаемоеОборудование.xml new file mode 100644 index 0000000..2558744 --- /dev/null +++ b/Constants/ИспользоватьПодключаемоеОборудование.xml @@ -0,0 +1,58 @@ + + + + + + a74b7aaa-4514-44f7-b786-f2122a8947cd + 41a34e29-2d77-4aca-b91e-cae53e78a4cf + + + 2809c8fb-1a25-4616-ab17-50c934a4ed21 + 6111e573-a135-4d48-8ebd-02cf913dde27 + + + 8702e049-340f-4003-b1b1-e5021719840d + ef327779-559b-4056-a658-85ff11e2d97c + + + + ИспользоватьПодключаемоеОборудование + + + ru + Использовать подключаемое оборудование + + + + + xs:boolean + + true + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + + + Auto + Managed + DontUse + false + false + + + \ No newline at end of file diff --git a/Constants/КлючQRАвторизацииТСД.xml b/Constants/КлючQRАвторизацииТСД.xml new file mode 100644 index 0000000..866afc6 --- /dev/null +++ b/Constants/КлючQRАвторизацииТСД.xml @@ -0,0 +1,62 @@ + + + + + + 76c94260-f3ef-4dbd-a2b1-68e8c3a94dac + 3ef79d28-5d63-4780-abab-7578c5f5e5bc + + + 46162b8f-3aaa-4447-88c5-d44edf857815 + cd4ff8c7-134b-4d43-88b9-3db3404e93ac + + + 66ed7bed-c263-45da-936c-fd80ac89f383 + c9168677-63c3-4721-8d10-2d81c1e8a818 + + + + КлючQRАвторизацииТСД + + + ru + Ключ QRАвторизации + + + + + xs:string + + 100 + Variable + + + true + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + + + Auto + Managed + DontUse + false + false + + + \ No newline at end of file diff --git a/Constants/ПодключатьОборудованиеПриЗапуске.xml b/Constants/ПодключатьОборудованиеПриЗапуске.xml new file mode 100644 index 0000000..a1a765c --- /dev/null +++ b/Constants/ПодключатьОборудованиеПриЗапуске.xml @@ -0,0 +1,58 @@ + + + + + + f683023e-54f0-4e24-8c29-eedd95aa5493 + cdd7b69c-3c45-48b6-9dce-f3f75e6217a6 + + + 343013c9-aa63-41f9-8b21-af30e0096c5c + 063555e8-2895-4566-8833-efbc30b53ef4 + + + 572c829d-40e3-4f11-9453-aa6dd77f4868 + 717a803e-7fc8-40cb-ad23-f37f785931ef + + + + ПодключатьОборудованиеПриЗапуске + + + ru + Подключать оборудование при запуске + + + + + xs:boolean + + true + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + + + Auto + Managed + DontUse + false + false + + + \ No newline at end of file diff --git a/Constants/ПринтерПоУмолчанию.xml b/Constants/ПринтерПоУмолчанию.xml new file mode 100644 index 0000000..1cbbfc7 --- /dev/null +++ b/Constants/ПринтерПоУмолчанию.xml @@ -0,0 +1,58 @@ + + + + + + 37d87734-ce6c-4b1e-8ad5-ca21ac263705 + 06e9763b-31b3-4f1d-a589-03bdd1309618 + + + 1c81a5cc-feba-40ba-99ad-227c19d3acd8 + 4d2708e3-517b-4282-9010-df178a91302d + + + 8e6436b6-5856-45b6-b9a8-71f9a4c12c03 + 12e9691e-5792-4bf3-bf46-370bd8cc0c28 + + + + ПринтерПоУмолчанию + + + ru + Принтер по умолчанию + + + + + cfg:CatalogRef.ПринтерыДляПечати + + true + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + + + Auto + Managed + DontUse + false + false + + + \ No newline at end of file diff --git a/Constants/СрокХраненияОперацийПроверкиКМ.xml b/Constants/СрокХраненияОперацийПроверкиКМ.xml new file mode 100644 index 0000000..e0085f9 --- /dev/null +++ b/Constants/СрокХраненияОперацийПроверкиКМ.xml @@ -0,0 +1,58 @@ + + + + + + 1a802881-aa7c-4a95-90bd-b8e2b5f0383c + 24fb9986-591a-4b24-9582-7911dee5047b + + + 511e5eb6-4426-4766-ac83-0994e888ebfd + 56419a3b-a19c-477b-93ae-523444ddf583 + + + f99ac414-10f5-477e-bec1-1b03a0d80844 + 198006be-79a1-4a35-872b-ed288d5a9db2 + + + + СрокХраненияОперацийПроверкиКМ + + + ru + Срок хранения операций проверки КМ + + + + + cfg:EnumRef.ПериодХраненияИсторииОпераций + + true + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + + + Auto + Managed + DontUse + false + false + + + \ No newline at end of file diff --git a/Constants/ХранитьУспешныеОперацииРазрешения.xml b/Constants/ХранитьУспешныеОперацииРазрешения.xml new file mode 100644 index 0000000..83d926f --- /dev/null +++ b/Constants/ХранитьУспешныеОперацииРазрешения.xml @@ -0,0 +1,58 @@ + + + + + + 28c7e7cb-5f35-462f-a005-4d51402e9595 + af20fefb-77d1-47a5-ba98-782a8c0a6d5c + + + 64b78793-54c0-46a5-ae17-5a17983f1ca5 + 5e3fb621-edf7-438f-bb91-8156724ce0fe + + + 31c9b47c-9814-4735-b1d0-0450e3768e54 + c1006d38-089d-4b53-b4a2-1f0187099697 + + + + ХранитьУспешныеОперацииРазрешения + + + ru + Хранить успешные операции разрешения продажи + + + + + xs:boolean + + true + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + + + Auto + Managed + DontUse + false + false + + + \ No newline at end of file diff --git a/Constants/ХранитьУспешныеОперацииРазрешения/Ext/ManagerModule.bsl b/Constants/ХранитьУспешныеОперацииРазрешения/Ext/ManagerModule.bsl new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Constants/ХранитьУспешныеОперацииРазрешения/Ext/ManagerModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Constants/ХранитьУспешныеОперацииРазрешения/Ext/ValueManagerModule.bsl b/Constants/ХранитьУспешныеОперацииРазрешения/Ext/ValueManagerModule.bsl new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Constants/ХранитьУспешныеОперацииРазрешения/Ext/ValueManagerModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/DefinedTypes/ДенежнаяСуммаЛюбогоЗнака.xml b/DefinedTypes/ДенежнаяСуммаЛюбогоЗнака.xml new file mode 100644 index 0000000..29dedea --- /dev/null +++ b/DefinedTypes/ДенежнаяСуммаЛюбогоЗнака.xml @@ -0,0 +1,29 @@ + + + + + + 7e5bbe0e-d9d5-4d1a-bb0f-3301ac51f412 + 1c008ca3-6095-4554-bbce-ea7066d86400 + + + + ДенежнаяСуммаЛюбогоЗнака + + + ru + Денежная сумма любого знака + + + + + xs:decimal + + 15 + 2 + Any + + + + + \ No newline at end of file diff --git a/DefinedTypes/ДенежнаяСуммаНеотрицательная.xml b/DefinedTypes/ДенежнаяСуммаНеотрицательная.xml new file mode 100644 index 0000000..4d77828 --- /dev/null +++ b/DefinedTypes/ДенежнаяСуммаНеотрицательная.xml @@ -0,0 +1,29 @@ + + + + + + 09e14b81-e36d-4ff8-b21b-c41172266147 + 567be1a9-be0e-4fa9-beb0-1640363264c0 + + + + ДенежнаяСуммаНеотрицательная + + + ru + Денежная сумма неотрицательная + + + + + xs:decimal + + 15 + 2 + Nonnegative + + + + + \ No newline at end of file diff --git a/DefinedTypes/КассаБПО.xml b/DefinedTypes/КассаБПО.xml new file mode 100644 index 0000000..db30d1e --- /dev/null +++ b/DefinedTypes/КассаБПО.xml @@ -0,0 +1,28 @@ + + + + + + 3fb31ab4-48ac-4b17-9875-fbf850d6a1ad + 6f394ea6-2a18-49f4-ba6c-d61ecd11faec + + + + КассаБПО + + + ru + Касса БПО + + + + + xs:string + + 10 + Variable + + + + + \ No newline at end of file diff --git a/DefinedTypes/ОрганизацияБПО.xml b/DefinedTypes/ОрганизацияБПО.xml new file mode 100644 index 0000000..b1ec8bd --- /dev/null +++ b/DefinedTypes/ОрганизацияБПО.xml @@ -0,0 +1,28 @@ + + + + + + d229b658-97dd-4834-addc-643cf99271be + a1291a36-395c-4b5b-a01a-2fc17ea39b0d + + + + ОрганизацияБПО + + + ru + Организация БПО + + + + + xs:string + + 100 + Variable + + + + + \ No newline at end of file diff --git a/DefinedTypes/ОснованиеФискальнойОперацииБПО.xml b/DefinedTypes/ОснованиеФискальнойОперацииБПО.xml new file mode 100644 index 0000000..552ad44 --- /dev/null +++ b/DefinedTypes/ОснованиеФискальнойОперацииБПО.xml @@ -0,0 +1,28 @@ + + + + + + 467d6f0e-81bc-4c0a-8b9f-e5ec0ea60108 + 562eb3d9-705a-4a8a-a624-7d6e18eb1671 + + + + ОснованиеФискальнойОперацииБПО + + + ru + Основание фискальной операции БПО + + + + + xs:string + + 10 + Variable + + + + + \ No newline at end of file diff --git a/DefinedTypes/ПользовательБПО.xml b/DefinedTypes/ПользовательБПО.xml new file mode 100644 index 0000000..f6c294c --- /dev/null +++ b/DefinedTypes/ПользовательБПО.xml @@ -0,0 +1,28 @@ + + + + + + 80e6f5c1-eb69-4f70-99ae-6ee200f01071 + fda4350a-092c-4fc3-962e-80d28d593e63 + + + + ПользовательБПО + + + ru + Пользователь БПО + + + + + xs:string + + 20 + Variable + + + + + \ No newline at end of file diff --git a/DefinedTypes/СообщениеЕГАИСвБПО.xml b/DefinedTypes/СообщениеЕГАИСвБПО.xml new file mode 100644 index 0000000..5319cb9 --- /dev/null +++ b/DefinedTypes/СообщениеЕГАИСвБПО.xml @@ -0,0 +1,28 @@ + + + + + + 07dfe483-754c-45d7-a6e2-11fb8afc5198 + a40e2a73-8e2b-415a-a32c-693fac40dba6 + + + + СообщениеЕГАИСвБПО + + + ru + Сообщение ЕГАИС в БПО + + + + + xs:string + + 10 + Variable + + + + + \ No newline at end of file diff --git a/DefinedTypes/СубъектПерсональныхДанныхБПО.xml b/DefinedTypes/СубъектПерсональныхДанныхБПО.xml new file mode 100644 index 0000000..1d251f8 --- /dev/null +++ b/DefinedTypes/СубъектПерсональныхДанныхБПО.xml @@ -0,0 +1,28 @@ + + + + + + b9ab97fa-13b4-4b3c-ab1d-aa8db95f8574 + 1d294a48-5575-4a3f-9a69-199769fa0e7e + + + + СубъектПерсональныхДанныхБПО + + + ru + Субъект персональных данных БПО + + + + + xs:string + + 59 + Variable + + + + + \ No newline at end of file diff --git a/DefinedTypes/ТипыПодключаемогоОборудования.xml b/DefinedTypes/ТипыПодключаемогоОборудования.xml new file mode 100644 index 0000000..cd4494a --- /dev/null +++ b/DefinedTypes/ТипыПодключаемогоОборудования.xml @@ -0,0 +1,24 @@ + + + + + + b065c68f-0bff-4c3b-9e25-b74a44663a8e + 655e4728-371e-4aff-96f7-f7abf8425636 + + + + ТипыПодключаемогоОборудования + + + ru + Типы подключаемого оборудования + + + + + cfg:EnumRef.ТипыПодключаемогоОборудования + + + + \ No newline at end of file diff --git a/DefinedTypes/ТорговыйОбъектБПО.xml b/DefinedTypes/ТорговыйОбъектБПО.xml new file mode 100644 index 0000000..63ee92f --- /dev/null +++ b/DefinedTypes/ТорговыйОбъектБПО.xml @@ -0,0 +1,28 @@ + + + + + + 6af88af9-5016-4314-8d83-19a0682531b9 + 134e1ee8-8449-4b93-9d19-f3b0fb3d0e36 + + + + ТорговыйОбъектБПО + + + ru + Торговый объект БПО + + + + + xs:string + + 50 + Variable + + + + + \ No newline at end of file diff --git a/DocumentNumerators/ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО.xml b/DocumentNumerators/ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО.xml new file mode 100644 index 0000000..2ffb8bc --- /dev/null +++ b/DocumentNumerators/ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО.xml @@ -0,0 +1,20 @@ + + + + + ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО + + + ru + Вопрос об установке расширения для работы с 1С:Предприятием + + + + String + 9 + Variable + Nonperiodical + true + + + \ No newline at end of file diff --git a/DocumentNumerators/КодВидаНоменклатурнойКлассификации.xml b/DocumentNumerators/КодВидаНоменклатурнойКлассификации.xml new file mode 100644 index 0000000..671f2ae --- /dev/null +++ b/DocumentNumerators/КодВидаНоменклатурнойКлассификации.xml @@ -0,0 +1,20 @@ + + + + + КодВидаНоменклатурнойКлассификации + + + ru + Код вида номенклатурной классификации + + + + String + 9 + Variable + Nonperiodical + true + + + \ No newline at end of file diff --git a/DocumentNumerators/НастройкаРегистрацииККТ.xml b/DocumentNumerators/НастройкаРегистрацииККТ.xml new file mode 100644 index 0000000..33e3e1c --- /dev/null +++ b/DocumentNumerators/НастройкаРегистрацииККТ.xml @@ -0,0 +1,20 @@ + + + + + НастройкаРегистрацииККТ + + + ru + Настройка регистрации ККТ + + + + String + 9 + Variable + Nonperiodical + true + + + \ No newline at end of file diff --git a/DocumentNumerators/ПроверкаКонтрольнойМаркиБПО.xml b/DocumentNumerators/ПроверкаКонтрольнойМаркиБПО.xml new file mode 100644 index 0000000..5dc6a6d --- /dev/null +++ b/DocumentNumerators/ПроверкаКонтрольнойМаркиБПО.xml @@ -0,0 +1,20 @@ + + + + + ПроверкаКонтрольнойМаркиБПО + + + ru + Проверка контрольной марки БПО + + + + String + 9 + Variable + Nonperiodical + true + + + \ No newline at end of file diff --git a/DocumentNumerators/УправлениеФискальнымУстройством.xml b/DocumentNumerators/УправлениеФискальнымУстройством.xml new file mode 100644 index 0000000..a1e4c1b --- /dev/null +++ b/DocumentNumerators/УправлениеФискальнымУстройством.xml @@ -0,0 +1,20 @@ + + + + + УправлениеФискальнымУстройством + + + ru + Управление фискальным устройством + + + + String + 9 + Variable + Nonperiodical + true + + + \ No newline at end of file diff --git a/DocumentNumerators/УправлениеЭквайринговымТерминалом.xml b/DocumentNumerators/УправлениеЭквайринговымТерминалом.xml new file mode 100644 index 0000000..7c9ba51 --- /dev/null +++ b/DocumentNumerators/УправлениеЭквайринговымТерминалом.xml @@ -0,0 +1,20 @@ + + + + + УправлениеЭквайринговымТерминалом + + + ru + Управление эквайринговым терминалом + + + + String + 9 + Variable + Nonperiodical + true + + + \ No newline at end of file diff --git a/Documents/ИнвентаризацияЗапасов.xml b/Documents/ИнвентаризацияЗапасов.xml new file mode 100644 index 0000000..e23e2d6 --- /dev/null +++ b/Documents/ИнвентаризацияЗапасов.xml @@ -0,0 +1,349 @@ + + + + + + 4dea5bb8-d51c-42a4-b5fe-66b90ce46a06 + aab1f25a-312f-44a3-ae5d-6fddf8bbeac6 + + + 52c5e213-87eb-4fb0-9ef0-ae0caaab1452 + 986ea2c5-3992-423a-8838-b87210a1cd77 + + + 951d1eab-2220-474f-aac7-0a2d5758a85a + d012ce43-acdf-41c9-90e7-d558159cfe09 + + + 8c8fcb88-8c2a-485d-acc7-59e1da5ffac2 + da88b83d-c72b-4b22-bb20-9162345d8189 + + + 33a51a4b-e674-4097-9d5e-ff93fc517d72 + 667be89b-9d02-42c8-95a3-f13db7f3e951 + + + + ИнвентаризацияЗапасов + + + true + + String + 15 + Variable + Nonperiodical + true + true + + + + Document.ИнвентаризацияЗапасов.StandardAttribute.Number + + Use + Begin + DontUse + Directly + Document.ИнвентаризацияЗапасов.Form.ФормаДокумента + Document.ИнвентаризацияЗапасов.Form.ФормаСписка + + + + + Allow + Allow + AutoDeleteOnUnpost + WriteSelected + AutoFill + + true + true + false + + Managed + Use + + + + + + Auto + DontUse + false + false + + + + + Организация + + + ru + Организация + + + + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + СтруктурнаяЕдиница + + + ru + Склад + + + + + cfg:CatalogRef.СтруктурныеЕдиницы + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Статус + + + ru + Статус + + + + + cfg:EnumRef.Статус + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + +
ФормаСписка
+
ФормаДокумента
+ + + + 8ecddddc-b921-46a2-bb2f-102f37480fee + 5d8c17a1-db15-4225-80bc-689ace3bf408 + + + 83534f3b-88a7-4a94-96a6-c4503cb0de7f + 12c66e77-a3a0-41d6-a53a-465a94e8f81c + + + + Запасы + + + ru + Запасы + + + + + DontCheck + 5 + + + + + Номенклатура + + + ru + Номенклатура + + + + + cfg:CatalogRef.КарточкиМП + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Количество + + + ru + Количество + + + + + xs:decimal + + 5 + 2 + Nonnegative + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + КоличествоУчет + + + ru + Количество учет + + + + + xs:decimal + + 5 + 2 + Nonnegative + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + +
+
+
\ No newline at end of file diff --git a/Documents/ИнвентаризацияЗапасов/Ext/ObjectModule.bsl b/Documents/ИнвентаризацияЗапасов/Ext/ObjectModule.bsl new file mode 100644 index 0000000..47785a5 --- /dev/null +++ b/Documents/ИнвентаризацияЗапасов/Ext/ObjectModule.bsl @@ -0,0 +1,6 @@ + +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + если РежимЗаписи=режимзаписидокумента.Проведение тогда + Этотобъект.Статус = Перечисления.Статус.Котправке; + КонецЕсли; +КонецПроцедуры diff --git a/Documents/ИнвентаризацияЗапасов/Forms/ФормаДокумента.xml b/Documents/ИнвентаризацияЗапасов/Forms/ФормаДокумента.xml new file mode 100644 index 0000000..234dd1b --- /dev/null +++ b/Documents/ИнвентаризацияЗапасов/Forms/ФормаДокумента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаДокумента + + + ru + Форма документа + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/ИнвентаризацияЗапасов/Forms/ФормаДокумента/Ext/Form.xml b/Documents/ИнвентаризацияЗапасов/Forms/ФормаДокумента/Ext/Form.xml new file mode 100644 index 0000000..9188497 --- /dev/null +++ b/Documents/ИнвентаризацияЗапасов/Forms/ФормаДокумента/Ext/Form.xml @@ -0,0 +1,243 @@ + +
+ DontBlock + Vertical + CurrentOrLast + Auto + true + + + ВнешнееСобытие + ПередЗаписью + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары</v8:content> + </v8:item> + + Vertical + false + + + + List + false + false + UseHeightInFormRows + SingleRow + Row + false + true + true + true + Объект.Запасы + SelectionPresentationAndChoice + + + + false + + + + + Запасы + SearchStringRepresentation + + + + + + + Запасы + ViewStatusRepresentation + + + + + + + Запасы + SearchControl + + + + + + + Объект.Запасы.LineNumber + false + EnterOnInput + true + 2 + + + + + + + + Объект.Запасы.Номенклатура + true + EnterOnInput + true + false + true + true + true + + + + + + + + Объект.Запасы.Номенклатура.ЕдиницаИзмерения + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ед. измер.</v8:content> + </v8:item> + + Right + EnterOnInput + + StdPicture.ScheduledJob + true + + Right + true + true + + + + + Объект.Запасы.КоличествоУчет + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кол. Учет</v8:content> + </v8:item> + + Right + EnterOnInput + Right + true + true + + + + + + + + + + Объект.Запасы.Количество + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отскан.</v8:content> + </v8:item> + + Center + EnterOnInput + + CommonPicture.ВнешняяКомпонентаДоступна + false + + Center + Center + true + 1 + true + true + false + false + style:AccentColor + + + + + +
+
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реквизиты</v8:content> + </v8:item> + + Vertical + false + + + + Объект.Number + true + EnterOnInput + true + true + + + + + Объект.Date + true + EnterOnInput + true + true + + + + + Объект.Организация + false + EnterOnInput + true + true + + + + + Объект.СтруктурнаяЕдиница + false + EnterOnInput + true + true + + + + + Объект.Статус + true + + + + + +
+
+
+ + + + cfg:DocumentObject.ИнвентаризацияЗапасов + + true + true + + Объект.RegisterRecords + + + + \ No newline at end of file diff --git a/Documents/ИнвентаризацияЗапасов/Forms/ФормаДокумента/Ext/Form/Module.bsl b/Documents/ИнвентаризацияЗапасов/Forms/ФормаДокумента/Ext/Form/Module.bsl new file mode 100644 index 0000000..c8de26d --- /dev/null +++ b/Documents/ИнвентаризацияЗапасов/Forms/ФормаДокумента/Ext/Form/Module.bsl @@ -0,0 +1,37 @@ + +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) + если ВводДоступен() тогда + Если Событие="Штрихкод" Тогда + ном = НайтиНомВБазе(Данные); + если ном <> неопределено тогда + тов=Объект.Запасы.НайтиСтроки(новый Структура("Номенклатура",ном)); + если тов <> неопределено И тов.Количество() > 0 Тогда + тов[0].Количество= тов[0].Количество + 1; + Элементы.Запасы.ТекущаяСтрока = тов[0].ПолучитьИдентификатор(); + иначе + Сообщить("Такого товара нет в документе"); + конецЕсли; + иначе + Сообщить("По данному штрихкоду не нашли номенклатуру"); + КонецЕсли; +КонецЕсли; +конецесли; +КонецПроцедуры + +Функция НайтиНомВБазе(штрих) + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШтрихкодыУпаковок.Номенклатура.Ссылка КАК НоменклатураСсылка + |ИЗ + | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок + |ГДЕ + | ШтрихкодыУпаковок.Штрихкод = &Штрихкод"; + + Запрос.УстановитьПараметр("Штрихкод", штрих); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Если РезультатЗапроса.Количество()>0 Тогда + возврат РезультатЗапроса[0].НоменклатураСсылка; + КонецЕсли; +КонецФункции diff --git a/Documents/ИнвентаризацияЗапасов/Forms/ФормаСписка.xml b/Documents/ИнвентаризацияЗапасов/Forms/ФормаСписка.xml new file mode 100644 index 0000000..8ca7c63 --- /dev/null +++ b/Documents/ИнвентаризацияЗапасов/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/ИнвентаризацияЗапасов/Forms/ФормаСписка/Ext/Form.xml b/Documents/ИнвентаризацияЗапасов/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..9246762 --- /dev/null +++ b/Documents/ИнвентаризацияЗапасов/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,117 @@ + +
+ DontBlock + Vertical + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + WeakSeparation + false + + + + List + None + true + Cell + ExpandTopLevel + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Date + true + + + + + Список.Number + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Document.ИнвентаризацияЗапасов + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git a/Documents/ПеремещениеПоЯчейкам.xml b/Documents/ПеремещениеПоЯчейкам.xml new file mode 100644 index 0000000..02cf832 --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам.xml @@ -0,0 +1,620 @@ + + + + + + 870383a4-1123-4f8a-b6ef-65d6583b1c27 + 4667c53f-7ef2-46cb-819e-519a6f309afd + + + c08f068c-86f8-4d4c-b6eb-93b850d0298e + 24ffb3cd-5919-4604-96a4-975e7d36251c + + + e72eef57-0d9b-464b-82fd-27b6a4915b07 + be9eb67e-1c43-4db4-a701-65cc44baccf0 + + + 7ab5d3c5-f5dd-4ec9-a3ef-04e7c9d4d345 + 0a519632-dc34-44ed-a35a-15fbe94f7b58 + + + cca39d28-7017-43ed-a51c-35bca84d4f5f + 2ec47651-7955-43eb-b88e-010f1d2fb516 + + + + ПеремещениеПоЯчейкам + + + ru + Перемещение по ячейкам + + + + true + + String + 15 + Variable + Nonperiodical + true + true + + + + Document.ПеремещениеПоЯчейкам.StandardAttribute.Number + + Use + Begin + DontUse + Directly + Document.ПеремещениеПоЯчейкам.Form.ФормаДокумента + Document.ПеремещениеПоЯчейкам.Form.ФормаСписка + + + + + Allow + Allow + AutoDeleteOnUnpost + WriteSelected + AutoFill + + true + true + false + + Managed + Use + + + + + + Auto + DontUse + false + false + + + + + Организация + + + ru + Организация + + + + + cfg:CatalogRef.Организации + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + СтруктурнаяЕдиница + + + ru + Склад + + + + + cfg:CatalogRef.СтруктурныеЕдиницы + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ВидОперации + + + ru + Вид операции + + + + + cfg:EnumRef.ВидыОперацийПеремещенияПоЯчейкам + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Автор + + + ru + Автор + + + + + cfg:CatalogRef.Пользователи + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Статус + + + ru + Статус + + + + + cfg:EnumRef.Статус + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Комментарий + + + ru + Комментарий + + + + + xs:string + + 250 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + +
ФормаСписка
+
ФормаДокумента
+
ФормаСканированияСтроки
+
ФормаОстатковЯчейки
+ + + + e1a02e51-fc25-4d54-841b-e47f087b3e31 + 2be365e0-e6b8-4981-b433-2d3ea974e6fb + + + e6532086-8fdb-41c8-81d9-10f305d7cef3 + 46551217-1d94-42da-b409-38b47fcb6f9d + + + + Запасы + + + ru + Запасы + + + + + DontCheck + 5 + + + + + Номенклатура + + + ru + Номенклатура + + + + + cfg:CatalogRef.Номенклатура + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Партия + + + ru + Партия + + + + + cfg:CatalogRef.ПартииНоменклатуры + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Количество + + + ru + Количество + + + + + xs:decimal + + 15 + 3 + Nonnegative + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ЕдиницаИзмерения + + + ru + Единица измерения + + + + + cfg:CatalogRef.ЕдиницыИзмерения + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ЯчейкаИсточник + + + ru + Ячейка источник + + + + + cfg:CatalogRef.Ячейки + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Ячейка + + + ru + Ячейка назначения + + + + + cfg:CatalogRef.Ячейки + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Штрихкод + + + ru + Штрихкод + + + + + xs:string + + 200 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + +
+
+
\ No newline at end of file diff --git a/Documents/ПеремещениеПоЯчейкам/Ext/ObjectModule.bsl b/Documents/ПеремещениеПоЯчейкам/Ext/ObjectModule.bsl new file mode 100644 index 0000000..dca9e87 --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Ext/ObjectModule.bsl @@ -0,0 +1,5 @@ +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + если РежимЗаписи=режимзаписидокумента.Проведение тогда + Этотобъект.Статус = Перечисления.Статус.Обработан; + КонецЕсли; +КонецПроцедуры diff --git a/Documents/ПеремещениеПоЯчейкам/Forms/ФормаДокумента.xml b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаДокумента.xml new file mode 100644 index 0000000..93c893f --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаДокумента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаДокумента + + + ru + Форма документа + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/ПеремещениеПоЯчейкам/Forms/ФормаДокумента/Ext/Form.xml b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаДокумента/Ext/Form.xml new file mode 100644 index 0000000..8cd0351 --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаДокумента/Ext/Form.xml @@ -0,0 +1,182 @@ + +
+ DontBlock + Vertical + CurrentOrLast + Auto + true + + + + + + + ОбработкаОповещения + ПриОткрытии + ВнешнееСобытие + ПриСозданииНаСервере + + + + Объект.Организация + + + + + Объект.СтруктурнаяЕдиница + + + + + Объект.ВидОперации + + + + + Объект.Автор + true + + + + + Объект.Статус + true + + + + + style:AccentColor + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сканируйте ячейку-источник</v8:content> + </v8:item> + + + + + + List + Объект.Запасы + + + + false + + + + + Запасы + SearchStringRepresentation + + + + + + + Запасы + ViewStatusRepresentation + + + + + + + Запасы + SearchControl + + + + + + + Объект.Запасы.Номенклатура + EnterOnInput + 2 + + + + + + + + Объект.Запасы.ЯчейкаИсточник + EnterOnInput + style:ToolTipBackColor + + + + + Объект.Запасы.Ячейка + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ячейка назначения</v8:content> + </v8:item> + + EnterOnInput + style:ToolTipBackColor + + + + + + + Объект.Запасы.Количество + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кол - во</v8:content> + </v8:item> + + EnterOnInput + 1 + style:AccentColor + + + + + + Объект.Запасы.Партия + false + EnterOnInput + + + + + Объект.Запасы.Штрихкод + false + EnterOnInput + + + + +
+
+ + + + cfg:DocumentObject.ПеремещениеПоЯчейкам + + true + true + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выгрузить в УНФ</v8:content> + </v8:item> + + ВыгрузитьВУНФ + + + \ No newline at end of file diff --git a/Documents/ПеремещениеПоЯчейкам/Forms/ФормаДокумента/Ext/Form/Module.bsl b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаДокумента/Ext/Form/Module.bsl new file mode 100644 index 0000000..a06a432 --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаДокумента/Ext/Form/Module.bsl @@ -0,0 +1,235 @@ +&НаКлиенте +Перем НеВызыватьВС; +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не ЗначениеЗаполнено(Объект.ВидОперации) Тогда + Объект.ВидОперации = Перечисления.ВидыОперацийПеремещенияПоЯчейкам.ИзОднойВНесколько; + КонецЕсли; + Если Не ЗначениеЗаполнено(Объект.Статус) Тогда + Объект.Статус = Перечисления.Статус.Вработе; + КонецЕсли; + Если Не ЗначениеЗаполнено(Объект.Автор) Тогда + Объект.Автор = Константы.АвторизированныйПользователь.Получить(); + КонецЕсли; + Если Не ЗначениеЗаполнено(Объект.Организация) Тогда + Объект.Организация = ОрганизацияПоУмолчанию(); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ОрганизацияПоУмолчанию() + + Выборка = Справочники.Организации.Выбрать(); + Если Выборка.Следующий() Тогда + Возврат Выборка.Ссылка; + КонецЕсли; + Возврат Справочники.Организации.ПустаяСсылка(); + +КонецФункции + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + НеВызыватьВС = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) + + // Каким то непонятным методом вызывается два раза внешнее событие + // на этой форме из другой формы. сделали через переменную + Если НеВызыватьВС Тогда + НеВызыватьВС = Ложь; + Возврат; + КонецЕсли; + + Если Событие <> "Штрихкод" Тогда + Возврат; + КонецЕсли; + Если Не ВводДоступен() Тогда + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Объект.СтруктурнаяЕдиница) Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить("Укажите склад"); + Возврат; + КонецЕсли; + + ДанныеШК = СокрЛП(Данные); + + Если ЭтоШтрихкодТовара(ДанныеШК) Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить("Ожидается ячейка-источник, а не ШК товара"); + Возврат; + КонецЕсли; + + ЯчейкаИсточник = НайтиЯчейкуПоШтрихкоду(ДанныеШК, Объект.СтруктурнаяЕдиница); + Если Не ЗначениеЗаполнено(ЯчейкаИсточник) Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить("Ячейка-источник не найдена: " + ДанныеШК); + Возврат; + КонецЕсли; + + ВоспроизвестиЗвукУспеха(); + + // Чтобы повтор того же ШК не обработался снова при открытии формы подбора + НеВызыватьВС = Истина; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Склад", Объект.СтруктурнаяЕдиница); + ПараметрыФормы.Вставить("ЯчейкаИсточник", ЯчейкаИсточник); + ОткрытьФорму("Документ.ПеремещениеПоЯчейкам.Форма.ФормаСканированияСтроки", ПараметрыФормы, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "ПеремещениеПоЯчейкам_ПодборТоваров" Тогда + // Как в стикеровке: при возврате из дочерней формы гасим повтор ВС + НеВызыватьВС = Истина; + ДобавитьТоварыИзПодбора(Параметр); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьТоварыИзПодбора(ДанныеПодбора) + + Для Каждого ДанныеСтроки Из ДанныеПодбора.Товары Цикл + ЯчейкаНазначения = ДанныеПодбора.ЯчейкаНазначения; + Если ТипЗнч(ДанныеСтроки) = Тип("Структура") И ДанныеСтроки.Свойство("ЯчейкаНазначения") + И ЗначениеЗаполнено(ДанныеСтроки.ЯчейкаНазначения) Тогда + ЯчейкаНазначения = ДанныеСтроки.ЯчейкаНазначения; + КонецЕсли; + + НайденныеСтроки = Объект.Запасы.НайтиСтроки(Новый Структура( + "Номенклатура, ЯчейкаИсточник, Ячейка", + ДанныеСтроки.Номенклатура, + ДанныеПодбора.ЯчейкаИсточник, + ЯчейкаНазначения)); + + Если НайденныеСтроки.Количество() > 0 Тогда + НайденныеСтроки[0].Количество = НайденныеСтроки[0].Количество + ДанныеСтроки.Количество; + Иначе + НоваяСтрока = Объект.Запасы.Добавить(); + НоваяСтрока.Номенклатура = ДанныеСтроки.Номенклатура; + НоваяСтрока.ЯчейкаИсточник = ДанныеПодбора.ЯчейкаИсточник; + НоваяСтрока.Ячейка = ЯчейкаНазначения; + НоваяСтрока.Количество = ДанныеСтроки.Количество; + НоваяСтрока.Партия = ДанныеСтроки.Партия; + НоваяСтрока.Штрихкод = ДанныеСтроки.Штрихкод; + НоваяСтрока.ЕдиницаИзмерения = ДанныеСтроки.ЕдиницаИзмерения; + КонецЕсли; + КонецЦикла; + Модифицированность = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ВоспроизвестиЗвукУспеха() + + #Если МобильноеПриложениеКлиент Тогда + Попытка + СредстваМультимедиа.ВоспроизвестиАудио(ПолучитьАдресФайла("ок")); + Исключение + КонецПопытки; + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ВоспроизвестиЗвукОшибки() + + #Если МобильноеПриложениеКлиент Тогда + Попытка + СредстваМультимедиа.ВоспроизвестиАудио(ПолучитьАдресФайла("еррор")); + Исключение + КонецПопытки; + #КонецЕсли + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПолучитьАдресФайла(ТипМакета) + Возврат ПолучитьОбщийМакет(ТипМакета); +КонецФункции + +&НаСервереБезКонтекста +Функция ЭтоШтрихкодТовара(Штрихкод) + + Если СтрДлина(Штрихкод) = 13 Тогда + Возврат Истина; + КонецЕсли; + + Возврат ЗначениеЗаполнено(НайтиНоменклатуруПоШтрихкоду(Штрихкод)); + +КонецФункции + +&НаСервереБезКонтекста +Функция НайтиНоменклатуруПоШтрихкоду(Штрих) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ШтрихкодыУпаковок.Номенклатура КАК Номенклатура + |ИЗ + | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок + |ГДЕ + | ШтрихкодыУпаковок.Штрихкод = &Штрихкод + | И ТИПЗНАЧЕНИЯ(ШтрихкодыУпаковок.Номенклатура) = ТИП(Справочник.Номенклатура)"; + Запрос.УстановитьПараметр("Штрихкод", Штрих); + Результат = Запрос.Выполнить().Выбрать(); + Если Результат.Следующий() Тогда + Возврат Результат.Номенклатура; + КонецЕсли; + + Возврат Справочники.Номенклатура.ПустаяСсылка(); + +КонецФункции + +&НаСервереБезКонтекста +Функция НайтиЯчейкуПоШтрихкоду(Штрихкод, Склад) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Ячейки.Ссылка КАК Ссылка + |ИЗ + | Справочник.Ячейки КАК Ячейки + |ГДЕ + | Ячейки.Штрихкод = &Штрихкод + | И (Ячейки.Владелец = &Склад + | ИЛИ &Склад = ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка))"; + Запрос.УстановитьПараметр("Штрихкод", Штрихкод); + Запрос.УстановитьПараметр("Склад", Склад); + Результат = Запрос.Выполнить().Выбрать(); + Если Результат.Следующий() Тогда + Возврат Результат.Ссылка; + КонецЕсли; + Возврат Справочники.Ячейки.ПустаяСсылка(); + +КонецФункции + +&НаКлиенте +Процедура ВыгрузитьВУНФ(Команда) + + Если Не ЗначениеЗаполнено(Объект.Ссылка) Или Модифицированность Тогда + Если Не Записать() Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + ТекстОтвета = ВыгрузитьВУНФНаСервере(Объект.Ссылка); + Сообщить(ТекстОтвета); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ВыгрузитьВУНФНаСервере(СсылкаДокумента) + Возврат СинхронизацияУТ.ВыгрузитьПеремещениеПоЯчейкам(СсылкаДокумента); +КонецФункции diff --git a/Documents/ПеремещениеПоЯчейкам/Forms/ФормаОстатковЯчейки.xml b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаОстатковЯчейки.xml new file mode 100644 index 0000000..58c10df --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаОстатковЯчейки.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаОстатковЯчейки + + + ru + Остатки ячейки + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/ПеремещениеПоЯчейкам/Forms/ФормаОстатковЯчейки/Ext/Form.xml b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаОстатковЯчейки/Ext/Form.xml new file mode 100644 index 0000000..de153a6 --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаОстатковЯчейки/Ext/Form.xml @@ -0,0 +1,133 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Остатки ячейки</v8:content> + </v8:item> + + LockOwner + false + Vertical + + + ПриСозданииНаСервере + + + + Ячейка + true + + + + + List + true + false + false + Остатки + + + + false + + + + + Остатки + SearchStringRepresentation + + + + + + + Остатки + ViewStatusRepresentation + + + + + + + Остатки + SearchControl + + + + + + + Остатки.Номенклатура + EnterOnInput + + + + + Остатки.Количество + EnterOnInput + + + + +
+
+ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ячейка</v8:content> + </v8:item> + + + cfg:CatalogRef.Ячейки + + + + + cfg:CatalogRef.СтруктурныеЕдиницы + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Остатки</v8:content> + </v8:item> + + + v8:ValueTable + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номенклатура</v8:content> + </v8:item> + + + cfg:CatalogRef.Номенклатура + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Количество</v8:content> + </v8:item> + + + xs:decimal + + 15 + 3 + Any + + + + + + + \ No newline at end of file diff --git a/Documents/ПеремещениеПоЯчейкам/Forms/ФормаОстатковЯчейки/Ext/Form/Module.bsl b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаОстатковЯчейки/Ext/Form/Module.bsl new file mode 100644 index 0000000..f79922e --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаОстатковЯчейки/Ext/Form/Module.bsl @@ -0,0 +1,48 @@ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Параметры.Свойство("Ячейка", Ячейка); + Параметры.Свойство("Склад", Склад); + + ЗаполнитьОстатки(); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьОстатки() + + Остатки.Очистить(); + + Если Не ЗначениеЗаполнено(Ячейка) Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЗапасыНаСкладах.Номенклатура КАК Номенклатура, + | СУММА(ЗапасыНаСкладах.Количество) КАК Количество + |ИЗ + | РегистрСведений.ЗапасыНаСкладах КАК ЗапасыНаСкладах + |ГДЕ + | ЗапасыНаСкладах.Ячейка = &Ячейка + | И (ЗапасыНаСкладах.СтруктурнаяЕдиница = &Склад + | ИЛИ &Склад = ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка)) + | И ЗапасыНаСкладах.Количество <> 0 + | + |СГРУППИРОВАТЬ ПО + | ЗапасыНаСкладах.Номенклатура + | + |УПОРЯДОЧИТЬ ПО + | Номенклатура"; + Запрос.УстановитьПараметр("Ячейка", Ячейка); + Запрос.УстановитьПараметр("Склад", Склад); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + НовСтр = Остатки.Добавить(); + НовСтр.Номенклатура = Выборка.Номенклатура; + НовСтр.Количество = Выборка.Количество; + КонецЦикла; + +КонецПроцедуры diff --git a/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСканированияСтроки.xml b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСканированияСтроки.xml new file mode 100644 index 0000000..aaa0af7 --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСканированияСтроки.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСканированияСтроки + + + ru + Форма сканирования строки + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСканированияСтроки/Ext/Form.xml b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСканированияСтроки/Ext/Form.xml new file mode 100644 index 0000000..acb5802 --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСканированияСтроки/Ext/Form.xml @@ -0,0 +1,179 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Подбор товара</v8:content> + </v8:item> + + LockOwner + false + Vertical + + + + + + + + ПриОткрытии + ПередЗакрытием + ВнешнееСобытие + ПриСозданииНаСервере + + + + НесколькоЯчеекНазначения + Right + + + + НесколькоЯчеекНазначенияПриИзменении + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сканируйте товары (ШК 13 символов), затем ячейку назначения</v8:content> + </v8:item> + + + + + + ЯчейкаИсточник + true + + + + + List + СписокТоваров + + + false + + + + + СписокТоваров + SearchStringRepresentation + + + + + + + СписокТоваров + ViewStatusRepresentation + + + + + + + СписокТоваров + SearchControl + + + + + + + СписокТоваров.Presentation + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товар / ячейка назначения</v8:content> + </v8:item> + + EnterOnInput + + + + +
+
+ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ячейка источник</v8:content> + </v8:item> + + + cfg:CatalogRef.Ячейки + + + + + cfg:CatalogRef.СтруктурныеЕдиницы + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Список товаров</v8:content> + </v8:item> + + + v8:ValueListType + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Несколько ячеек назначения</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ожидание ячейки назначения</v8:content> + </v8:item> + + + xs:boolean + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Завершить подбор</v8:content> + </v8:item> + + ЗавершитьПодбор + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Остатки ячейки</v8:content> + </v8:item> + + ПоказатьОстаткиЯчейки + + +
\ No newline at end of file diff --git a/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСканированияСтроки/Ext/Form/Module.bsl b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСканированияСтроки/Ext/Form/Module.bsl new file mode 100644 index 0000000..1d606f3 --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСканированияСтроки/Ext/Form/Module.bsl @@ -0,0 +1,491 @@ +&НаКлиенте +Перем НеВызыватьВС; +&НаКлиенте +Перем ОжидаемыйТовар; +&НаКлиенте +Перем ПодборПереданВДокумент; + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Параметры.Свойство("Склад", Склад); + Параметры.Свойство("ЯчейкаИсточник", ЯчейкаИсточник); + НесколькоЯчеекНазначения = Ложь; + ОжиданиеЯчейкиНазначения = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + НеВызыватьВС = Ложь; + ОжидаемыйТовар = Неопределено; + ПодборПереданВДокумент = Ложь; + ОбновитьПодсказкуИКнопкиРежима(); + +КонецПроцедуры + +&НаКлиенте +Процедура НесколькоЯчеекНазначенияПриИзменении(Элемент) + + ОжиданиеЯчейкиНазначения = Ложь; + ОжидаемыйТовар = Неопределено; + ОбновитьПодсказкуИКнопкиРежима(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПодсказкуИКнопкиРежима() + + Элементы.ЗавершитьПодбор.Видимость = НесколькоЯчеекНазначения; + + Если НесколькоЯчеекНазначения Тогда + Если ОжиданиеЯчейкиНазначения Тогда + Элементы.Подсказка.Заголовок = "Сканируйте ячейку назначения для выбранного товара"; + Иначе + Элементы.Подсказка.Заголовок = "Режим нескольких ячеек: товар → ячейка. Затем «Завершить подбор»"; + КонецЕсли; + Иначе + Элементы.Подсказка.Заголовок = "Сканируйте товары (ШК 13 символов), затем ячейку назначения"; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьПодбор(Команда) + + Если ОжиданиеЯчейкиНазначения Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить("Сначала отсканируйте ячейку назначения для текущего товара"); + Возврат; + КонецЕсли; + Если СписокТоваров.Количество() = 0 Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить("Список товаров пуст"); + Возврат; + КонецЕсли; + + ПередатьВсеТоварыИзСпискаВДокумент(); + ПодборПереданВДокумент = Истина; + НеВызыватьВС = Истина; + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьОстаткиЯчейки(Команда) + + Если Не ЗначениеЗаполнено(ЯчейкаИсточник) Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить("Ячейка-источник не задана"); + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ячейка", ЯчейкаИсточник); + ПараметрыФормы.Вставить("Склад", Склад); + ОткрытьФорму("Документ.ПеремещениеПоЯчейкам.Форма.ФормаОстатковЯчейки", ПараметрыФормы, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если ЗавершениеРаботы Тогда + Возврат; + КонецЕсли; + Если ПодборПереданВДокумент Тогда + Возврат; + КонецЕсли; + Если Не НесколькоЯчеекНазначения Тогда + Возврат; + КонецЕсли; + Если СписокТоваров.Количество() = 0 Тогда + Возврат; + КонецЕсли; + Если ОжиданиеЯчейкиНазначения Тогда + Возврат; + КонецЕсли; + + ПередатьВсеТоварыИзСпискаВДокумент(); + ПодборПереданВДокумент = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) + + Если НеВызыватьВС Тогда + НеВызыватьВС = Ложь; + Возврат; + КонецЕсли; + + Если Событие <> "Штрихкод" Тогда + Возврат; + КонецЕсли; + + ОбработатьШтрихкод(СокрЛП(Данные)); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьШтрихкод(ДанныеШК) + + Если НесколькоЯчеекНазначения Тогда + ОбработатьШтрихкодНесколькоЯчеек(ДанныеШК); + Иначе + ОбработатьШтрихкодСтандартно(ДанныеШК); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьШтрихкодСтандартно(ДанныеШК) + + Если СтрДлина(ДанныеШК) = 13 Тогда + РезультатДобавления = ДобавитьТоварПоШтрихкодуНаСервере(ДанныеШК, Склад, ЯчейкаИсточник); + Если РезультатДобавления.Ошибка Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить(РезультатДобавления.ТекстОшибки); + Возврат; + КонецЕсли; + ДобавитьИлиСуммироватьВСписок(РезультатДобавления.ДанныеТовара, РезультатДобавления.Представление, Неопределено); + ВоспроизвестиЗвукУспеха(); + Возврат; + КонецЕсли; + + ЯчейкаНазначения = НайтиЯчейкуПоШтрихкоду(ДанныеШК, Склад); + Если Не ЗначениеЗаполнено(ЯчейкаНазначения) Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить("Ожидается ШК товара (13 символов) или ячейка назначения"); + Возврат; + КонецЕсли; + + Если ЯчейкаНазначения = ЯчейкаИсточник Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить("Ячейка назначения совпадает с ячейкой-источником"); + Возврат; + КонецЕсли; + + Если СписокТоваров.Количество() = 0 Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить("Сначала отсканируйте товары из ячейки-источника"); + Возврат; + КонецЕсли; + + Для Каждого ЭлементСписка Из СписокТоваров Цикл + ДанныеТовара = ЭлементСписка.Значение; + Если ТипЗнч(ДанныеТовара) = Тип("Структура") Тогда + ДанныеТовара.Вставить("ЯчейкаНазначения", ЯчейкаНазначения); + ЭлементСписка.Представление = ПредставлениеСтрокиПодбора( + ДанныеТовара.Номенклатура, ДанныеТовара.Штрихкод, ЯчейкаНазначения, ДанныеТовара.Количество); + КонецЕсли; + КонецЦикла; + + ВоспроизвестиЗвукУспеха(); + ПередатьВсеТоварыИзСпискаВДокумент(ЯчейкаНазначения); + ПодборПереданВДокумент = Истина; + НеВызыватьВС = Истина; + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьШтрихкодНесколькоЯчеек(ДанныеШК) + + Если ОжиданиеЯчейкиНазначения Тогда + ЯчейкаНазначения = НайтиЯчейкуПоШтрихкоду(ДанныеШК, Склад); + Если Не ЗначениеЗаполнено(ЯчейкаНазначения) Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить("Ожидается ячейка назначения"); + Возврат; + КонецЕсли; + Если ЯчейкаНазначения = ЯчейкаИсточник Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить("Ячейка назначения совпадает с ячейкой-источником"); + Возврат; + КонецЕсли; + Если ОжидаемыйТовар = Неопределено Тогда + ОжиданиеЯчейкиНазначения = Ложь; + ОбновитьПодсказкуИКнопкиРежима(); + ВоспроизвестиЗвукОшибки(); + Сообщить("Сначала отсканируйте товар"); + Возврат; + КонецЕсли; + + ДанныеТовара = ОжидаемыйТовар; + ДанныеТовара.Вставить("ЯчейкаНазначения", ЯчейкаНазначения); + Представление = ПредставлениеСтрокиПодбора( + ДанныеТовара.Номенклатура, ДанныеТовара.Штрихкод, ЯчейкаНазначения, ДанныеТовара.Количество); + ДобавитьИлиСуммироватьВСписок(ДанныеТовара, Представление, ЯчейкаНазначения); + + ОжидаемыйТовар = Неопределено; + ОжиданиеЯчейкиНазначения = Ложь; + ОбновитьПодсказкуИКнопкиРежима(); + ВоспроизвестиЗвукУспеха(); + Сообщить("Добавлено в список. Сканируйте следующий товар или нажмите «Завершить подбор»"); + Возврат; + КонецЕсли; + + Если СтрДлина(ДанныеШК) <> 13 Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить("Сначала отсканируйте товар (ШК 13 символов)"); + Возврат; + КонецЕсли; + + РезультатДобавления = ДобавитьТоварПоШтрихкодуНаСервере(ДанныеШК, Склад, ЯчейкаИсточник); + Если РезультатДобавления.Ошибка Тогда + ВоспроизвестиЗвукОшибки(); + Сообщить(РезультатДобавления.ТекстОшибки); + Возврат; + КонецЕсли; + + ОжидаемыйТовар = РезультатДобавления.ДанныеТовара; + ОжиданиеЯчейкиНазначения = Истина; + ОбновитьПодсказкуИКнопкиРежима(); + ВоспроизвестиЗвукУспеха(); + Сообщить("Сканируйте ячейку назначения для: " + РезультатДобавления.Представление); + +КонецПроцедуры + +&НаКлиенте +Функция ПредставлениеСтрокиПодбора(Номенклатура, Штрихкод, ЯчейкаНазначения, Количество = 1) + + Текст = Строка(Номенклатура) + " [" + Штрихкод + "] x" + Формат(Количество, "ЧГ=0"); + Если ЗначениеЗаполнено(ЯчейкаНазначения) Тогда + Текст = Текст + " → " + Строка(ЯчейкаНазначения); + КонецЕсли; + Возврат Текст; + +КонецФункции + +&НаКлиенте +Функция НайтиЭлементСпискаПодбора(Номенклатура, ЯчейкаНазначения) + + Для Каждого ЭлементСписка Из СписокТоваров Цикл + ДанныеТовара = ЭлементСписка.Значение; + Если ТипЗнч(ДанныеТовара) <> Тип("Структура") Тогда + Продолжить; + КонецЕсли; + Если ДанныеТовара.Номенклатура <> Номенклатура Тогда + Продолжить; + КонецЕсли; + + ЕстьЯчейкаВСтроке = ДанныеТовара.Свойство("ЯчейкаНазначения") И ЗначениеЗаполнено(ДанныеТовара.ЯчейкаНазначения); + Если ЗначениеЗаполнено(ЯчейкаНазначения) Тогда + Если ЕстьЯчейкаВСтроке И ДанныеТовара.ЯчейкаНазначения = ЯчейкаНазначения Тогда + Возврат ЭлементСписка; + КонецЕсли; + ИначеЕсли Не ЕстьЯчейкаВСтроке Тогда + Возврат ЭлементСписка; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +&НаКлиенте +Процедура ДобавитьИлиСуммироватьВСписок(ДанныеТовара, Представление, ЯчейкаНазначения) + + СуществующийЭлемент = НайтиЭлементСпискаПодбора(ДанныеТовара.Номенклатура, ЯчейкаНазначения); + Если СуществующийЭлемент <> Неопределено Тогда + СуществующиеДанные = СуществующийЭлемент.Значение; + СуществующиеДанные.Количество = СуществующиеДанные.Количество + ДанныеТовара.Количество; + Если ЗначениеЗаполнено(ЯчейкаНазначения) Тогда + СуществующиеДанные.Вставить("ЯчейкаНазначения", ЯчейкаНазначения); + КонецЕсли; + СуществующийЭлемент.Представление = ПредставлениеСтрокиПодбора( + СуществующиеДанные.Номенклатура, + СуществующиеДанные.Штрихкод, + ?(СуществующиеДанные.Свойство("ЯчейкаНазначения"), СуществующиеДанные.ЯчейкаНазначения, Неопределено), + СуществующиеДанные.Количество); + Возврат; + КонецЕсли; + + СписокТоваров.Добавить(ДанныеТовара, ПредставлениеСтрокиПодбора( + ДанныеТовара.Номенклатура, + ДанныеТовара.Штрихкод, + ЯчейкаНазначения, + ДанныеТовара.Количество)); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередатьВсеТоварыИзСпискаВДокумент(ЯчейкаНазначенияОбщая = Неопределено) + + Товары = Новый Массив; + Для Каждого ЭлементСписка Из СписокТоваров Цикл + ДанныеТовара = ЭлементСписка.Значение; + Если ТипЗнч(ДанныеТовара) <> Тип("Структура") Тогда + Продолжить; + КонецЕсли; + Если Не ДанныеТовара.Свойство("ЯчейкаНазначения") Или Не ЗначениеЗаполнено(ДанныеТовара.ЯчейкаНазначения) Тогда + Если ЗначениеЗаполнено(ЯчейкаНазначенияОбщая) Тогда + ДанныеТовара.Вставить("ЯчейкаНазначения", ЯчейкаНазначенияОбщая); + Иначе + Продолжить; + КонецЕсли; + КонецЕсли; + Товары.Добавить(ДанныеТовара); + КонецЦикла; + + Если Товары.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ЯчейкаНазначенияОбщая) Тогда + ЯчейкаНазначенияОбщая = Товары[0].ЯчейкаНазначения; + КонецЕсли; + + ДанныеПодбора = Новый Структура; + ДанныеПодбора.Вставить("ЯчейкаИсточник", ЯчейкаИсточник); + ДанныеПодбора.Вставить("ЯчейкаНазначения", ЯчейкаНазначенияОбщая); + ДанныеПодбора.Вставить("Товары", Товары); + + НеВызыватьВС = Истина; + Оповестить("ПеремещениеПоЯчейкам_ПодборТоваров", ДанныеПодбора); + +КонецПроцедуры + +&НаКлиенте +Процедура ВоспроизвестиЗвукУспеха() + + #Если МобильноеПриложениеКлиент Тогда + Попытка + СредстваМультимедиа.ВоспроизвестиАудио(ПолучитьАдресФайла("ок")); + Исключение + КонецПопытки; + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ВоспроизвестиЗвукОшибки() + + #Если МобильноеПриложениеКлиент Тогда + Попытка + СредстваМультимедиа.ВоспроизвестиАудио(ПолучитьАдресФайла("еррор")); + Исключение + КонецПопытки; + #КонецЕсли + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПолучитьАдресФайла(ТипМакета) + Возврат ПолучитьОбщийМакет(ТипМакета); +КонецФункции + +&НаСервереБезКонтекста +Функция ДобавитьТоварПоШтрихкодуНаСервере(Штрихкод, Склад, ЯчейкаИсточник) + + Результат = Новый Структура("Ошибка, ТекстОшибки, ДанныеТовара, Представление", Ложь, "", Неопределено, ""); + + Если СтрДлина(Штрихкод) <> 13 Тогда + Результат.Ошибка = Истина; + Результат.ТекстОшибки = "ШК товара должен содержать 13 символов"; + Возврат Результат; + КонецЕсли; + + Номенклатура = НайтиНоменклатуруПоШтрихкоду(Штрихкод); + Если Не ЗначениеЗаполнено(Номенклатура) Тогда + Результат.Ошибка = Истина; + Результат.ТекстОшибки = "Товар по штрихкоду не найден: " + Штрихкод; + Возврат Результат; + КонецЕсли; + + ДанныеОстатка = НайтиОстатокВЯчейке(Номенклатура, Склад, ЯчейкаИсточник); + Если Не ДанныеОстатка.ЕстьОстаток Тогда + Результат.Ошибка = Истина; + Результат.ТекстОшибки = "Товара нет в ячейке-источнике: " + Строка(Номенклатура); + Возврат Результат; + КонецЕсли; + + ДанныеТовара = Новый Структура; + ДанныеТовара.Вставить("Номенклатура", Номенклатура); + ДанныеТовара.Вставить("Партия", ДанныеОстатка.Партия); + ДанныеТовара.Вставить("Количество", 1); + ДанныеТовара.Вставить("ЕдиницаИзмерения", Номенклатура.ЕдиницаИзмерения); + ДанныеТовара.Вставить("Штрихкод", Штрихкод); + + Результат.ДанныеТовара = ДанныеТовара; + Результат.Представление = Строка(Номенклатура) + " [" + Штрихкод + "]"; + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Функция НайтиОстатокВЯчейке(Номенклатура, Склад, ЯчейкаИсточник) + + Результат = Новый Структура("ЕстьОстаток, Партия", Ложь, Справочники.ПартииНоменклатуры.ПустаяСсылка()); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ЗапасыНаСкладах.Партия КАК Партия, + | ЗапасыНаСкладах.Количество КАК Количество + |ИЗ + | РегистрСведений.ЗапасыНаСкладах КАК ЗапасыНаСкладах + |ГДЕ + | ЗапасыНаСкладах.Номенклатура = &Номенклатура + | И ЗапасыНаСкладах.СтруктурнаяЕдиница = &Склад + | И ЗапасыНаСкладах.Ячейка = &Ячейка + | И ЗапасыНаСкладах.Количество > 0"; + Запрос.УстановитьПараметр("Номенклатура", Номенклатура); + Запрос.УстановитьПараметр("Склад", Склад); + Запрос.УстановитьПараметр("Ячейка", ЯчейкаИсточник); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Результат.ЕстьОстаток = Истина; + Результат.Партия = Выборка.Партия; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Функция НайтиНоменклатуруПоШтрихкоду(Штрих) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ШтрихкодыУпаковок.Номенклатура КАК Номенклатура + |ИЗ + | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок + |ГДЕ + | ШтрихкодыУпаковок.Штрихкод = &Штрихкод + | И ТИПЗНАЧЕНИЯ(ШтрихкодыУпаковок.Номенклатура) = ТИП(Справочник.Номенклатура)"; + Запрос.УстановитьПараметр("Штрихкод", Штрих); + Результат = Запрос.Выполнить().Выбрать(); + Если Результат.Следующий() Тогда + Возврат Результат.Номенклатура; + КонецЕсли; + + Возврат Справочники.Номенклатура.ПустаяСсылка(); + +КонецФункции + +&НаСервереБезКонтекста +Функция НайтиЯчейкуПоШтрихкоду(Штрихкод, Склад) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Ячейки.Ссылка КАК Ссылка + |ИЗ + | Справочник.Ячейки КАК Ячейки + |ГДЕ + | Ячейки.Штрихкод = &Штрихкод + | И (Ячейки.Владелец = &Склад + | ИЛИ &Склад = ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка))"; + Запрос.УстановитьПараметр("Штрихкод", Штрихкод); + Запрос.УстановитьПараметр("Склад", Склад); + Результат = Запрос.Выполнить().Выбрать(); + Если Результат.Следующий() Тогда + Возврат Результат.Ссылка; + КонецЕсли; + Возврат Справочники.Ячейки.ПустаяСсылка(); + +КонецФункции diff --git a/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСписка.xml b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСписка.xml new file mode 100644 index 0000000..5bf4f7e --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСписка/Ext/Form.xml b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..0a02383 --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,105 @@ + +
+ + + + List + true + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Date + + + + + Список.Number + + + + + Список.СтруктурнаяЕдиница + + + + + Список.Статус + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Document.ПеремещениеПоЯчейкам + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git a/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСписка/Ext/Form/Module.bsl b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСписка/Ext/Form/Module.bsl new file mode 100644 index 0000000..e02abfc --- /dev/null +++ b/Documents/ПеремещениеПоЯчейкам/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1 @@ + diff --git a/Documents/ПоставкаМП.xml b/Documents/ПоставкаМП.xml new file mode 100644 index 0000000..fbf7ae5 --- /dev/null +++ b/Documents/ПоставкаМП.xml @@ -0,0 +1,474 @@ + + + + + + e5274ec3-10b9-405c-bb32-adc70b7a6fab + 5a9ce242-ea81-4bf0-a9e7-d5ad19d234cd + + + e03322a8-4a43-4fc5-81d0-cde777f95ada + 55d52925-ac0c-4309-ba94-5cf02a0fbbdc + + + 4312fc2a-3b5e-40d4-a3db-c8f655c6bbc4 + f7e2bd0a-4956-4245-b8d6-3b37f0e6ec39 + + + 3a76345f-b49c-40f2-a1cf-d21fef58e121 + 5f96f81f-3e32-421d-b642-d821d29d5279 + + + d9ad4d05-5800-4799-8c8c-bf807dab7967 + 979f5f67-bfd9-4706-9fdc-bd0e323e9095 + + + + ПоставкаМП + + + ru + Обмен с УНФ + + + + true + + String + 50 + Variable + Nonperiodical + true + true + + + + Document.ПоставкаМП.StandardAttribute.Number + + Use + Begin + DontUse + Directly + Document.ПоставкаМП.Form.ФормаДокумента + Document.ПоставкаМП.Form.ФормаСписка + + + + + Allow + Deny + AutoDeleteOnUnpost + WriteSelected + AutoFill + + true + true + false + + Managed + Use + + + + + + Auto + DontUse + false + false + + + + + Партнер + + + ru + Партнер + + + + + cfg:CatalogRef.Партнеры + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Статус + + + ru + Статус + + + + + cfg:EnumRef.Статус + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Отвественный + + + ru + Отвественный + + + + + cfg:CatalogRef.Пользователи + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + +
ФормаСписка
+
ФормаДокумента
+
ПодборПоставкиТовара
+ + + + ea801e4c-f884-4f1e-a4ad-64683972e69a + 373970f9-94dd-4b82-868e-390561ba5760 + + + ad8a94b7-29b5-48f6-8346-64249fdb27ea + bbe22f94-42c7-4c3b-ad1f-a3c45b22eca9 + + + + Товары + + + ru + Товары + + + + + DontCheck + 5 + + + + + КарточкаМП + + + ru + Карточка МП + + + + + cfg:CatalogRef.КарточкиМП + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Количество + + + ru + Количество + + + + + xs:decimal + + 5 + 2 + Nonnegative + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Отсканировано + + + ru + Отсканировано + + + + + xs:decimal + + 10 + 0 + Any + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + КодМП + + + ru + Код МП + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ШтрихкодПоставки + + + ru + Штрихкод поставки + + + + + xs:string + + 60 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Ячейка + + + ru + Ячейка + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + +
+
+
\ No newline at end of file diff --git a/Documents/ПоставкаМП/Ext/ObjectModule.bsl b/Documents/ПоставкаМП/Ext/ObjectModule.bsl new file mode 100644 index 0000000..3ca4d01 --- /dev/null +++ b/Documents/ПоставкаМП/Ext/ObjectModule.bsl @@ -0,0 +1,9 @@ + +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + если РежимЗаписи=режимзаписидокумента.Проведение тогда + Этотобъект.Статус = Перечисления.Статус.Обработан; + КонецЕсли; +КонецПроцедуры + +Процедура ОбработкаПроведения(Отказ, РежимПроведения) +КонецПроцедуры; \ No newline at end of file diff --git a/Documents/ПоставкаМП/Forms/ПодборПоставкиТовара.xml b/Documents/ПоставкаМП/Forms/ПодборПоставкиТовара.xml new file mode 100644 index 0000000..b4de10e --- /dev/null +++ b/Documents/ПоставкаМП/Forms/ПодборПоставкиТовара.xml @@ -0,0 +1,22 @@ + + +
+ + ПодборПоставкиТовара + + + ru + Подбор поставки товара + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/ПоставкаМП/Forms/ПодборПоставкиТовара/Ext/Form.xml b/Documents/ПоставкаМП/Forms/ПодборПоставкиТовара/Ext/Form.xml new file mode 100644 index 0000000..2702d2e --- /dev/null +++ b/Documents/ПоставкаМП/Forms/ПодборПоставкиТовара/Ext/Form.xml @@ -0,0 +1,146 @@ + +
+ LockWholeInterface + Vertical + None + Compact + false + false + false + + + ВнешнееСобытие + ПриСозданииНаСервере + + + + true + style:AccentColor + + + + + + НаимНоменклатура + false + true + None + true + + + + + КодМП + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код МП</v8:content> + </v8:item> + + Left + true + true + + + + + + style:ActivityColor + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код поставки МП</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Документ основание</v8:content> + </v8:item> + + + cfg:DocumentRef.ПоставкаМП + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ном</v8:content> + </v8:item> + + + cfg:CatalogRef.КарточкиМП + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Есть поставка</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Есть товар</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Маркет</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Наим номенклатура</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + \ No newline at end of file diff --git a/Documents/ПоставкаМП/Forms/ПодборПоставкиТовара/Ext/Form/Module.bsl b/Documents/ПоставкаМП/Forms/ПодборПоставкиТовара/Ext/Form/Module.bsl new file mode 100644 index 0000000..32d42f8 --- /dev/null +++ b/Documents/ПоставкаМП/Forms/ПодборПоставкиТовара/Ext/Form/Module.bsl @@ -0,0 +1,125 @@ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + элементы.СтатусКодаВПоставке.Заголовок=Параметры.СтатусКодаВПоставке; + элементы.Подсказка1.Заголовок=Параметры.Подсказка1; + КодМП=Параметры.КодМП; + ДокументОснование=Параметры.ДокументОснование; + ном=Параметры.ном; + ЕстьПоставка=параметры.ЕстьПоставка; + ЕстьТовар=параметры.ЕстьТовар; + Маркет=параметры.маркет; + если ЕстьТовар Тогда + элементы.КодМП.Видимость=ложь; + элементы.НаимНоменклатура.Видимость=Истина; + НаимНоменклатура=ном.Наименование + конецесли; +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) + если ЭтаФорма.вводдоступен() тогда + если Маркет="YA" Тогда + // Обрежем штрихкод поставки яндекса + Данные=ПривестиСтрокуВПорядок(Данные, "-"); + postingNumber=Данные; + конецесли; + Если Событие="Штрихкод" И СтрДлина(Данные)=13 И ЕстьПоставка Тогда + номПоиск=НайтиНомВБазе(Данные);// находим товар в базе + если значениезаполнено(номПоиск) тогда + структураПоиска=Новый структура(); + структураПоиска.Вставить("КодМП", КодМП); + структураПоиска.Вставить("Номенклатура", номПоиск); + Рез=НайтиТоварВДокеПоШК(структураПоиска); + если рез=истина тогда + ПараметрыТов = Новый Структура(); + ПараметрыТов.Вставить("КодМП", КодМП); + ПараметрыТов.Вставить("Номенклатура", номПоиск); + Оповестить("НашлиТоварВПоставке", ПараметрыТов, ЭтаФорма); + ЭтаФорма.Закрыть(); + иначе + Оповестить("НЕнашлиТоварВПоставке", , ЭтаФорма); + ЭтаФорма.Закрыть(); + Конецесли; + иначе + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Не нашли товар в базе"); + конецесли; + Конецесли; + Если Событие="Штрихкод" И НЕ СтрДлина(Данные)=13 И ЕстьТовар Тогда + структураПоиска=Новый структура(); + ПараметрыТов = Новый Структура(); + если Маркет="OZ" Тогда + ДанныеОтвета=СинхронизацияУТ.ЗапросДанныеДляМаркетов(ДокументОснование, Данные); + postingNumber=ДанныеОтвета.result.posting_number; + структураПоиска.Вставить("КодМП", postingNumber); + конецесли; + если Маркет="WB" Тогда + postingNumber=Данные; + структураПоиска.Вставить("ШтрихкодПоставки", postingNumber); + конецесли; + структураПоиска.Вставить("Номенклатура", ном); + Рез=НайтиТоварВДокеПоШК(структураПоиска); + если рез=истина тогда + если НЕ Маркет="WB" Тогда + ПараметрыТов.Вставить("КодМП", postingNumber); + иначе + ПараметрыТов.Вставить("ШтрихкодПоставки", postingNumber); + конецесли; + ПараметрыТов.Вставить("Номенклатура", ном); + Оповестить("НашлиТоварВПоставке", ПараметрыТов, ЭтаФорма); + ЭтаФорма.Закрыть(); + иначе + Оповестить("НЕнашлиТоварВПоставке", , ЭтаФорма); + ЭтаФорма.Закрыть(); + конецесли; + + + +конецесли; +конецесли; +КонецПроцедуры + +Функция НайтиТоварВДокеПоШК(стрПоиска) + тов=ДокументОснование.Товары.НайтиСтроки(стрПоиска); + если тов <> неопределено И тов.Количество() > 0 Тогда + возврат истина; + иначе + возврат ложь; + конецесли; +КонецФункции + +Функция ПривестиСтрокуВПорядок(Строка, СтрокаПоиска) + ДлинаСтрокиПоиска = СтрДлина(СтрокаПоиска)-1; + ПозицияСтрокиПоиска = СтрНайти(Строка, СтрокаПоиска); + если ПозицияСтрокиПоиска=0 тогда возврат Строка; конецесли; + ДлинаСтроки = ПозицияСтрокиПоиска + ДлинаСтрокиПоиска - 1; + НоваяСтрока = Лев(Строка, ДлинаСтроки); + возврат НоваяСтрока; +КонецФункции + +Функция НайтиНомВБазе(штрих) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШтрихкодыУпаковок.Номенклатура.Ссылка КАК НоменклатураСсылка + |ИЗ + | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок + |ГДЕ + | ШтрихкодыУпаковок.Штрихкод = &Штрихкод"; + + Запрос.УстановитьПараметр("Штрихкод", штрих); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Если РезультатЗапроса.Количество()>0 Тогда + возврат РезультатЗапроса[0].НоменклатураСсылка; + КонецЕсли; +КонецФункции + +&НаСервере +Функция ПолучитьАдресФайла(ТипМакета) + Данные = ПолучитьОбщийМакет(ТипМакета); + Возврат Данные; + КонецФункции \ No newline at end of file diff --git a/Documents/ПоставкаМП/Forms/ФормаДокумента.xml b/Documents/ПоставкаМП/Forms/ФормаДокумента.xml new file mode 100644 index 0000000..9aeb285 --- /dev/null +++ b/Documents/ПоставкаМП/Forms/ФормаДокумента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаДокумента + + + ru + Форма документа + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/ПоставкаМП/Forms/ФормаДокумента/Ext/Form.xml b/Documents/ПоставкаМП/Forms/ФормаДокумента/Ext/Form.xml new file mode 100644 index 0000000..e130548 --- /dev/null +++ b/Documents/ПоставкаМП/Forms/ФормаДокумента/Ext/Form.xml @@ -0,0 +1,413 @@ + +
+ DontBlock + false + Vertical + CurrentOrLast + Auto + true + + false + + + + + + + + + ОбработкаОповещения + ПриОткрытии + ПередЗакрытием + ВнешнееСобытие + ПередЗаписью + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Страницы</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары</v8:content> + </v8:item> + + Vertical + false + + + + List + true + UseHeightInFormRows + Row + false + true + Объект.Товары + SelectionPresentationAndChoice + + + + false + + + + false + + Товары + SearchStringRepresentation + + + + + + + Товары + ViewStatusRepresentation + + + + + + false + + Товары + SearchControl + + + + + + + + + + Объект.Товары.КарточкаМП + style:ReportGroup1BackColor + EnterOnInput + true + true + true + true + style:ReportGroup1BackColor + + + + + Объект.Товары.КодМП + EnterOnInput + true + true + + + + + Объект.Товары.ШтрихкодПоставки + EnterOnInput + true + true + + + + + Объект.Товары.Ячейка + EnterOnInput + true + + + + + + + 1 + + + + Объект.Товары.Количество + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>кол-во</v8:content> + </v8:item> + + Center + EnterOnInput + + CommonPicture.ВнешняяКомпонентаДоступна + false + + Center + Center + true + 1 + true + style:AccentColor + + + + + + Объект.Товары.Отсканировано + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отсканировано</v8:content> + </v8:item> + + style:ToolTipBackColor + Center + EnterOnInput + Center + Center + true + 1 + true + style:NegativeTextColor + style:ToolTipBackColor + + + + + + + + Объект.Товары.LineNumber + false + EnterOnInput + true + + + + +
+
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реквизиты</v8:content> + </v8:item> + + + + ru + Реквизиты + + + Vertical + ItemsRightTitlesLeft + false + + + + Объект.Date + true + EnterOnInput + true + true + + + + + Объект.Партнер + true + EnterOnInput + true + true + true + + + + + Объект.Number + true + EnterOnInput + true + true + + + + + Объект.Статус + EnterOnInput + true + true + + + + + Объект.Отвественный + true + true + + + + + +
+
+
+ + + + cfg:DocumentObject.ПоставкаМП + + true + true + + Объект.RegisterRecords + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отсканировано КМ</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Использовать подключаемое оборудование</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сканирование упаковок</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Удаление КМ</v8:content> + </v8:item> + + + xs:boolean + + + + + + + ТоварыНомерСтроки + + + ТоварыНоменклатура + + + ТоварыКоличество + + + ТоварыОтсканировано + + + + + AndGroup + + + Объект.Товары.Количество + Equal + Объект.Товары.Отсканировано + + + Объект.Товары.Отсканировано + Greater + 0 + + + Объект.Товары.Маркируемый + Equal + true + + + + + ЦветФона + #00FF00 + + + + + + + ТоварыНомерСтроки + + + ТоварыНоменклатура + + + ТоварыКоличество + + + ТоварыОтсканировано + + + + + Объект.Товары.Маркируемый + Equal + false + + + + + ЦветФона + #999999 + + + + + + \ No newline at end of file diff --git a/Documents/ПоставкаМП/Forms/ФормаДокумента/Ext/Form/Module.bsl b/Documents/ПоставкаМП/Forms/ФормаДокумента/Ext/Form/Module.bsl new file mode 100644 index 0000000..93c8b87 --- /dev/null +++ b/Documents/ПоставкаМП/Forms/ФормаДокумента/Ext/Form/Module.bsl @@ -0,0 +1,233 @@ +&НаКлиенте +Перем НеВызыватьВС; // каким то непонятным методом вызывается два раза внешнее событие +// на этой форме из другой формы. сделали через переменную +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) + если НеВызыватьВС=истина тогда + НеВызыватьВС=ложь; + возврат; конецесли; + + МаркетПлейс=Лев(Объект.Номер,2); + если ВводДоступен() тогда + Если Событие="Штрихкод" Тогда // это поставка маркета CODE128 + Если НЕ СтрДлина(Данные)=13 ИЛИ СтрДлина(Данные)=13 И СтрНайти(Данные, "-") > 0 Тогда + // Обрежем штрихкод поставки яндекса + если МаркетПлейс="YA" Тогда + Данные=ПривестиСтрокуВПорядок(Данные, "-"); + postingNumber=Данные; + тов=Объект.Товары.НайтиСтроки(новый Структура("КодМП",postingNumber)); + конецесли; + // Отправим запрос по api в ОЗОН для получения поставки + если МаркетПлейс="OZ" Тогда + ДанныеОтвета=СинхронизацияУТ.ЗапросДанныеДляМаркетов(Объект.Ссылка, Данные); + postingNumber=ДанныеОтвета.result.posting_number; + тов=Объект.Товары.НайтиСтроки(новый Структура("КодМП",postingNumber)); + КонецЕсли; + // Найдем штрихкод поставки в табличной части + если МаркетПлейс="WB" Тогда + postingNumber=Данные; + тов=Объект.Товары.НайтиСтроки(новый Структура("ШтрихкодПоставки",postingNumber)); + КонецЕсли; + если тов <> неопределено И тов.Количество() > 0 Тогда + если тов[0].Отсканировано= тов[0].Количество тогда + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Данную поставку уже отсканированили"); + возврат; + конецЕсли; + ПараметрыОткрытия=Новый структура(); + ПараметрыОткрытия.Вставить("КодМП", тов[0].КодМП); + ПараметрыОткрытия.Вставить("ДокументОснование", Объект.Ссылка); + ПараметрыОткрытия.Вставить("СтатусКодаВПоставке", "Данная поставка найдена в документе"); + ПараметрыОткрытия.Вставить("Подсказка1", "Отсканируйте штрихкод товара в поставке"); + ПараметрыОткрытия.Вставить("ном", неопределено); + ПараметрыОткрытия.Вставить("ЕстьПоставка", Истина); + ПараметрыОткрытия.Вставить("ЕстьТовар", ложь); + ПараметрыОткрытия.Вставить("Маркет", МаркетПлейс); + ФайлЗвука = ПолучитьАдресФайла("ок"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + ОткрытьФормуМодально("Документ.ПоставкаМП.Форма.ПодборПоставкиТовара", ПараметрыОткрытия, ЭтаФорма); + иначе + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Данной поставки нет в документе!"); + возврат; + КонецЕсли; + + конецесли; + Если СтрДлина(Данные)=13 Тогда + + тов=Объект.Товары.НайтиСтроки(новый Структура("Номенклатура",НайтиНомВБазе(данные))); + если тов <> неопределено И тов.Количество() > 0 Тогда + если тов.Количество() > 1 тогда + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Несколько позиций товара в документе. Отсканируйте поставку"); + возврат; + Иначе + если тов[0].Отсканировано= тов[0].Количество тогда + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Данный товар в поставке уже отсканированили"); + возврат; + конецесли; + конецесли; + ПараметрыОткрытия=Новый структура(); + ПараметрыОткрытия.Вставить("КодМП", "Не определен"); + ПараметрыОткрытия.Вставить("ДокументОснование", Объект.Ссылка); + ПараметрыОткрытия.Вставить("СтатусКодаВПоставке", "Данный товар найден в документе"); + ПараметрыОткрытия.Вставить("Подсказка1", "Отсканируйте qr-код поставки"); + ПараметрыОткрытия.Вставить("ном", тов[0].Номенклатура); + ПараметрыОткрытия.Вставить("ЕстьТовар", Истина); + ПараметрыОткрытия.Вставить("Маркет", МаркетПлейс); + ПараметрыОткрытия.Вставить("ЕстьПоставка", ложь); + ФайлЗвука = ПолучитьАдресФайла("ок"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + ОткрытьФормуМодально("Документ.ПоставкаМП.Форма.ПодборПоставкиТовара", ПараметрыОткрытия, ЭтаФорма); + иначе + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Такого товара нет в документе"); + КонецЕсли; + Конецесли; + конецесли; + КонецЕсли; +КонецПроцедуры + +Функция НайтиНомВБазе(штрих) + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШтрихкодыУпаковок.Номенклатура.Ссылка КАК НоменклатураСсылка + |ИЗ + | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок + |ГДЕ + | ШтрихкодыУпаковок.Штрихкод = &Штрихкод"; + + Запрос.УстановитьПараметр("Штрихкод", штрих); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Если РезультатЗапроса.Количество()>0 Тогда + возврат РезультатЗапроса[0].НоменклатураСсылка; + КонецЕсли; +КонецФункции + + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + если ИмяСобытия="НашлиТоварВПоставке" Тогда + НеВызыватьВС=истина; + структураПоиска=Новый структура(); + если Параметр.Свойство("КодМП") Тогда + структураПоиска.Вставить("КодМП", Параметр.КодМП); + КонецЕсли; + если Параметр.Свойство("ШтрихкодПоставки") Тогда + структураПоиска.Вставить("ШтрихкодПоставки", Параметр.ШтрихкодПоставки); + КонецЕсли; + структураПоиска.Вставить("Номенклатура", Параметр.Номенклатура); + тов=Объект.Товары.НайтиСтроки(структураПоиска); + Если тов <> неопределено И тов.Количество() > 0 Тогда + тов[0].Отсканировано= тов[0].Отсканировано + 1; + Элементы.Товары.ТекущаяСтрока = тов[0].ПолучитьИдентификатор(); + ФайлЗвука = ПолучитьАдресФайла("ок"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли +КонецЕсли; +КонецЕсли; + если ИмяСобытия="НЕнашлиТоварВПоставке" Тогда + Сообщить("Данного товара нет в данной поставке"); + НеВызыватьВС=истина; + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + КонецЕсли; +КонецПроцедуры + + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + НеВызыватьВС=ложь; +КонецПроцедуры + +Функция ПривестиСтрокуВПорядок(Строка, СтрокаПоиска) + ДлинаСтрокиПоиска = СтрДлина(СтрокаПоиска)-1; + ПозицияСтрокиПоиска = СтрНайти(Строка, СтрокаПоиска); + если ПозицияСтрокиПоиска=0 тогда возврат Строка; конецесли; + ДлинаСтроки = ПозицияСтрокиПоиска + ДлинаСтрокиПоиска - 1; + НоваяСтрока = Лев(Строка, ДлинаСтроки); + возврат НоваяСтрока; +КонецФункции + +&НаСервере +Функция ПолучитьАдресФайла(ТипМакета) + Данные = ПолучитьОбщийМакет(ТипМакета); + Возврат Данные; +КонецФункции + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + Если ОбъектМодифицирован(Объект.Ссылка) Тогда + Сообщить("Сохраните документ!"); + Отказ=Истина; + КонецЕсли; +КонецПроцедуры + +Функция ОбъектМодифицирован(СсылкаОбъект, ПроверятьТабличныеЧасти = Истина, ПроверятьСтандартные = Истина) + + Ссылка = СсылкаОбъект; + Метаданное = СсылкаОбъект.Метаданные(); + + Для каждого Реквизит из Метаданное.Реквизиты Цикл + Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Если ПроверятьСтандартные Тогда + Для каждого Реквизит из Метаданное.СтандартныеРеквизиты Цикл + Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + + Если ПроверятьТабличныеЧасти Тогда + Для каждого ТЧ из Метаданное.ТабличныеЧасти Цикл + + Если Объект[ТЧ.Имя].Количество() <> Ссылка[ТЧ.Имя].Количество() Тогда + Возврат Истина; + КонецЕсли; + + Для Индекс = 0 по Объект[ТЧ.Имя].Количество()-1 Цикл + ОбъектСтрокаТЧ = Объект[ТЧ.Имя][Индекс]; + СсылкаСтрокаТЧ = Ссылка[ТЧ.Имя][Индекс]; + Для каждого РеквизитТЧ из ТЧ.Реквизиты Цикл + Если ОбъектСтрокаТЧ[РеквизитТЧ.Имя] <> СсылкаСтрокаТЧ[РеквизитТЧ.Имя] Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + КонецЦикла; + КонецЕсли; + + Возврат Ложь; + +КонецФункции diff --git a/Documents/ПоставкаМП/Forms/ФормаСписка.xml b/Documents/ПоставкаМП/Forms/ФормаСписка.xml new file mode 100644 index 0000000..de8c6f0 --- /dev/null +++ b/Documents/ПоставкаМП/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/ПоставкаМП/Forms/ФормаСписка/Ext/Form.xml b/Documents/ПоставкаМП/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..a66c4ab --- /dev/null +++ b/Documents/ПоставкаМП/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,1227 @@ + +
+ DontBlock + Use + Vertical + + false + + + ОбработкаОповещения + ПриОткрытии + ВнешнееСобытие + ПриСозданииНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + WeakSeparation + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вкладки</v8:content> + </v8:item> + + + + ru + Вкладки + + + true + true + TabsOnTop + + + ВкладкиПриСменеСтраницы + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сборка</v8:content> + </v8:item> + + + + + ru + Заказы + + + Vertical + style:ToolTipBackColor + false + + + + Cell + false + СписокЗаказы + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Список заказы</v8:content> + </v8:item> + + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + false + + + + false + + СписокЗаказы + SearchStringRepresentation + + + + + + false + + СписокЗаказы + ViewStatusRepresentation + + + + + + false + + СписокЗаказы + SearchControl + + + + + + + + + + СписокЗаказы.Статус + true + + + + + СписокЗаказы.Ref + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сборка МП</v8:content> + </v8:item> + + EnterOnInput + true + + + + + + +
+
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Стикеровка</v8:content> + </v8:item> + + + Vertical + style:AuxiliaryNavigationColor + false + + + + List + None + Cell + ExpandTopLevel + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + + + + Список.Статус + 3 + + + + + Список.Ref + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Стикеровка</v8:content> + </v8:item> + + + + + + + +
+
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поставки МП</v8:content> + </v8:item> + + + Vertical + style:ReportGroup2BackColor + false + + + + Cell + false + СписокПоставкиМП + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поставки МПЖурнал</v8:content> + </v8:item> + + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + false + + + + false + + ПоставкиМПТаблица + SearchStringRepresentation + + + + + + false + + ПоставкиМПТаблица + ViewStatusRepresentation + + + + + + false + + ПоставкиМПТаблица + SearchControl + + + + + + + СписокПоставкиМП.Ref + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поставка МП</v8:content> + </v8:item> + + EnterOnInput + true + + + + +
+
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перемещения</v8:content> + </v8:item> + + + + + ru + Перемещение по ячейкам + + + + + + true + true + СписокПеремещенияПоЯчейкам + СписокПеремещенияПоЯчейкам.DefaultPicture + auto + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + + + + СписокПеремещенияПоЯчейкам + SearchStringRepresentation + + + + + + + СписокПеремещенияПоЯчейкам + ViewStatusRepresentation + + + + + + + СписокПеремещенияПоЯчейкам + SearchControl + + + + + + + + + + СписокПеремещенияПоЯчейкам.Number + EnterOnInput + true + 2 + + + + + СписокПеремещенияПоЯчейкам.Date + EnterOnInput + true + 2 + + + + + + + + + + СписокПеремещенияПоЯчейкам.СтруктурнаяЕдиница + EnterOnInput + true + 2 + + + + + СписокПеремещенияПоЯчейкам.Статус + EnterOnInput + true + + + + + + + СписокПеремещенияПоЯчейкам.ВидОперации + false + EnterOnInput + true + + + + + СписокПеремещенияПоЯчейкам.Автор + false + EnterOnInput + true + + + + + СписокПеремещенияПоЯчейкам.Комментарий + false + EnterOnInput + true + + + + +
+ +
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Штрихкодирование</v8:content> + </v8:item> + + + + + ru + Штрихкодирование + + + + + + true + true + СписокШтрихкодирования + СписокШтрихкодирования.DefaultPicture + auto + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + false + + + + + + + false + + СписокШтрихкодирования + SearchStringRepresentation + + + + + + false + + СписокШтрихкодирования + ViewStatusRepresentation + + + + + + + СписокШтрихкодирования + SearchControl + + + + + + + СписокШтрихкодирования.Ref + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Документ ШК</v8:content> + </v8:item> + + EnterOnInput + true + + + + +
+ +
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Синхронизация</v8:content> + </v8:item> + + + + + ru + Синхронизация + + + + StdPicture.Reread + true + + Vertical + style:ButtonBackColor + false + + + + + + false + true + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузка справочников...</v8:content> + </v8:item> + + + + + + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузка поставки МП</v8:content> + </v8:item> + + + HorizontalIfPossible + StrongSeparation + style:ReportHeaderBackColor + + + + Номер + style:AccentColor + + true + + + + + + + Результат + None + 50 + 5 + true + + + + + КОтправке + + style:ToolTipBackColor + + + + + + + + РезультатОтправки + None + 50 + 5 + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Печать марки</v8:content> + </v8:item> + + + + + ru + Печать марки + + + Vertical + false + + + + ДокПоставкиМП + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Документ поставки</v8:content> + </v8:item> + + true + + + + + style:ButtonTextColor + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content> + +Отсканируйте марку для ее повторной печати</v8:content> + </v8:item> + + + + + + + +
+
+
+ + + + cfg:DynamicList + + true + + false + true + Document.СтикеровкаМП + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + + Статус + Asc + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер или ШК</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Зарегистрировано к отправке</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат отправки</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Использовать подключаемое оборудование</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поддерживаемые типы подключаемого оборудования</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Список поставки МП</v8:content> + </v8:item> + + + cfg:DynamicList + + + false + true + Document.ПоставкаМП + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер инвент</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Список заказы</v8:content> + </v8:item> + + + cfg:DynamicList + + + false + true + Document.СборкаЗаказа + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Док поставки МП</v8:content> + </v8:item> + + + cfg:DocumentRef.ПоставкаМП + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Список штрихкодирования</v8:content> + </v8:item> + + + cfg:DynamicList + + + false + true + Document.ПулШтрихкодов + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Список перемещения по ячейкам</v8:content> + </v8:item> + + + cfg:DynamicList + + + false + true + Document.ПеремещениеПоЯчейкам + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + xs:decimal + + 2 + 0 + Nonnegative + + + + + + xs:string + + 0 + Variable + + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузить</v8:content> + </v8:item> + + + + ru + Загрузить + + + Загрузить + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обновить справочники</v8:content> + </v8:item> + + ОбновитьСправочники + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выгрузить</v8:content> + </v8:item> + + + + ru + Выгрузить + + + Выгрузить + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузить инвент</v8:content> + </v8:item> + + + + ru + Загрузить инвент + + + ЗагрузитьИнвент + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузить номенклатуру</v8:content> + </v8:item> + + + + ru + Получить ном + + + ПолучитьНом + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выгрузить док шк</v8:content> + </v8:item> + + + + ru + Выгрузить док шк + + + ВыгрузитьДокШк + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тест печати марки</v8:content> + </v8:item> + + + + ru + Тест печати марки + + + ТестПечатиМарки + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выгрузить перемещения в УНФ</v8:content> + </v8:item> + + + + ru + Выгрузить перемещения в УНФ + + + ВыгрузитьПеремещенияВУНФ + + + \ No newline at end of file diff --git a/Documents/ПоставкаМП/Forms/ФормаСписка/Ext/Form/Module.bsl b/Documents/ПоставкаМП/Forms/ФормаСписка/Ext/Form/Module.bsl new file mode 100644 index 0000000..95a70c7 --- /dev/null +++ b/Documents/ПоставкаМП/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,889 @@ + +&НаКлиенте +Процедура Загрузить(Команда) + ЗагрузитьНаСервере(); +КонецПроцедуры + +&НаСервере +Функция ЗагрузитьНаСервере(ШтрихКод = Неопределено) // загружаем док поставки МП на ТСД + Xmlответ=СинхронизацияУТ.ЗапроситьДокументыСборкиСтикеровкиНаСервере(ЭтотОбъект.Номер); + + Чтение=Новый ЧтениеXML; + Чтение.УстановитьСтроку(Xmlответ); + Фабрика=Новый ФабрикаXDTO; + Попытка + ОбXDTO=Фабрика.ПрочитатьXML(Чтение).Body.GetArrayDocResponse.return; + Исключение + //@skip-check use-non-recommended-method + Сообщить(Xmlответ + Символы.ПС + ОписаниеОшибки()); + Возврат Ложь; + КонецПопытки; + + Если ТипЗнч(ОбXDTO.ДокСборкиМП) = Тип("СписокXDTO") Тогда + // Если получили список документов сборки, то + Для Каждого строка Из ОбXDTO.ДокСборкиМП Цикл + ПолучитьДокументыССервераУНФ(строка); + КонецЦикла; + ИначеЕсли ТипЗнч(ОбXDTO.ДокСборкиМП) = Тип("ОбъектXDTO") Тогда + ПолучитьДокументыССервераУНФ(ОбXDTO.ДокСборкиМП); + КонецЕсли; +КонецФункции + +Процедура ПолучитьДокументыССервераУНФ(ДокXDTO) + Если ДокXDTO.ТипДокумента = "Сборка МП" Тогда + Док=Документы.СборкаЗаказа.ПолучитьСсылку(Новый УникальныйИдентификатор(ДокXDTO.Ссылка)); + Док=Док.ПолучитьОбъект(); + Если Док = Неопределено Тогда + Док=Документы.СборкаЗаказа.СоздатьДокумент(); + Док.УстановитьСсылкуНового(Документы.СборкаЗаказа.ПолучитьСсылку( + Новый УникальныйИдентификатор(ДокXDTO.Ссылка))); + КонецЕсли; + ИначеЕсли ДокXDTO.ТипДокумента = "Стикеровка МП" Тогда + Док=Документы.СтикеровкаМП.ПолучитьСсылку(Новый УникальныйИдентификатор(ДокXDTO.Ссылка)); + Док=Док.ПолучитьОбъект(); + Если Док = Неопределено Тогда + Док=Документы.СтикеровкаМП.СоздатьДокумент(); + Док.УстановитьСсылкуНового(Документы.СтикеровкаМП.ПолучитьСсылку( + Новый УникальныйИдентификатор(ДокXDTO.Ссылка))); + КонецЕсли; + КонецЕсли; + Док.Номер = ДокXDTO.Номер; + Док.Дата = Дата(СтрЗаменить(СтрЗаменить(СтрЗаменить(ДокXDTO.Дата, "T", ""), "-", ""), ":", "")); + Док.Автор = Константы.АвторизированныйПользователь.Получить(); + Док.Статус = Перечисления.Статус.Вработе; + Док.ПоставкиМП.Очистить(); + Если ТипЗнч(ДокXDTO.ДокПоставкаМП) = Тип("СписокXDTO") Тогда + Для Каждого строка Из ДокXDTO.ДокПоставкаМП Цикл + ДокСб=Док.ПоставкиМП.Добавить(); + ДокСб.ПоставкаМП=СоздатьДокПоставкиМП(строка); + КонецЦикла; + ИначеЕсли ТипЗнч(ДокXDTO.ДокПоставкаМП) = Тип("ОбъектXDTO") Тогда + ДокСб=Док.ПоставкиМП.Добавить(); + ДокСб.ПоставкаМП=СоздатьДокПоставкиМП(ДокXDTO.ДокПоставкаМП); + КонецЕсли; + + Если Док.ЭтоНовый() Тогда + Док.Записать(); + Результат=Результат + + Символы.ПС + + "Загружен документ " + ДокXDTO.ТипДокумента + " № " + ДокXDTO.Номер + Символы.ПС + " от " + ДокXDTO.Дата + + Символы.Пс; + Иначе + Док.Записать(); + Результат=Результат + + Символы.ПС + + "Обновлен документ " + ДокXDTO.ТипДокумента + " № " + ДокXDTO.Номер + Символы.ПС + " от " + ДокXDTO.Дата + + Символы.Пс; + КонецЕсли; +КонецПроцедуры + +Функция СоздатьДокПоставкиМП(ДокМП) + ДокПоставкаМП=Документы.ПоставкаМП.ПолучитьСсылку(Новый УникальныйИдентификатор(ДокМП.КлючевыеСвойства.Ссылка)); + ДокПоставкаМП=ДокПоставкаМП.ПолучитьОбъект(); + ЭтотОбъект.Результат=""; + Если ДокПоставкаМП=неопределено Тогда + ДокПоставкаМП=Документы.ПоставкаМП.СоздатьДокумент(); + ДокПоставкаМП.УстановитьСсылкуНового(Документы.ПоставкаМП.ПолучитьСсылку(Новый УникальныйИдентификатор(ДокМП.КлючевыеСвойства.Ссылка))); + КонецЕсли; + ДокПоставкаМП.Номер=ДокМП.КлючевыеСвойства.Номер; + ДокПоставкаМП.Дата=Дата(СтрЗаменить(СтрЗаменить(СтрЗаменить(ДокМП.КлючевыеСвойства.Дата,"T",""),"-",""),":","")); + ДокПоставкаМП.Партнер=ПолучитьПартнер(ДокМП); + + Если ТипЗнч(ДокМП.Товары.Строка) = Тип("СписокXDTO") Тогда + + Для Каждого строка Из ДокМП.Товары.Строка Цикл + ДокТовар(ДокПоставкаМП, строка); + КонецЦикла; + + ИначеЕсли ТипЗнч(ДокМП.Товары.Строка) = Тип("ОбъектXDTO") Тогда + + ДокТовар(ДокПоставкаМП, ДокМП.Товары.Строка); + + КонецЕсли; + ДокПоставкаМП.Статус=Перечисления.Статус.Вработе; + ДокПоставкаМП.Отвественный=Константы.АвторизированныйПользователь.Получить(); + ДокПоставкаМП.Записать(); + Возврат ДокПоставкаМП.Ссылка; +КонецФункции + +&НаСервере +Процедура ДокТовар(ДокЗаказ, строка) + Ном = ПолучитьНоменклатураИКарточкуМП(строка); + СтруктураПоиска = Новый Структура; + СтруктураПоиска.Вставить("КарточкаМП", Ном); + СтруктураПоиска.Вставить("КодМП", строка.СчетУчета); + Тов = ДокЗаказ.Товары.НайтиСтроки(СтруктураПоиска); + Если Тов <> Неопределено И Тов.Количество() > 0 Тогда + Тов[0].Количество=строка.Количество; + Тов[0].КодМП=строка.СчетУчета; + Тов[0].Ячейка = Строка.Ячейка; + Если Не строка.СчетУчетаНДС = "0" Тогда + Тов[0].ШтрихкодПоставки=строка.СчетУчетаНДС; + КонецЕсли; + Если Тов[0].количество = Тов[0].отсканировано Тогда + Возврат; + КонецЕсли; + Иначе + ДокТовар= ДокЗаказ.Товары.Добавить(); + ДокТовар.КарточкаМП=ном; + ДокТовар.Количество=строка.Количество; + ДокТовар.КодМП=строка.СчетУчета; + ДокТовар.Ячейка = строка.Ячейка; + Если Не строка.СчетУчетаНДС = "0" Тогда + ДокТовар.ШтрихкодПоставки=строка.СчетУчетаНДС; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ДокМарка(ДокЗаказ,строка) + ДокМарка= ДокЗаказ.КодыМаркировки.Добавить(); + ДокМарка.Номенклатура=ПолучитьНоменклатураИКарточкуМП(строка,ложь); + ДокМарка.Код=ДекодироватьСтрокуВBase64(строка.код); + ДокМарка.Строка=ДокЗаказ.Товары.Найти(ДокМарка.Номенклатура,"Номенклатура").НомерСтроки; +КонецПроцедуры + + +Функция ДекодироватьСтрокуВBase64(строка64) + + + ДвоичныеДанные = Base64Значение(строка64); + + + //// Создаем временный файл для промежуточного хранения + ВременныйФайл = ПолучитьИмяВременногоФайла(); + ДвоичныеДанные.Записать(ВременныйФайл); + + //// Определяем кодировку для чтения файла + КодировкаДляЧтения = "UTF8"; + + //// Читаем содержимое файла в нужной кодировке + ЧтениеТекста = Новый ЧтениеТекста(ВременныйФайл, КодировкаДляЧтения); + рез = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + возврат рез; +КонецФункции + + +&НаСервере +Функция ПолучитьПартнер(ОбXDTO) + + ПартнерСсылка=Справочники.Партнеры.ПолучитьСсылку(Новый УникальныйИдентификатор(ОбXDTO.КонтрагентСтороннейКомпании.Ссылка)); + Партнер=ПартнерСсылка.ПолучитьОбъект(); + Если Партнер=неопределено Тогда + Партнер=Справочники.Партнеры.СоздатьЭлемент(); + Партнер.УстановитьСсылкуНового(ПартнерСсылка); + КонецЕсли; + Партнер.Наименование=ОбXDTO.КонтрагентСтороннейКомпании.Наименование; + Партнер.Записать(); + Возврат Партнер.Ссылка; +КонецФункции + +&НаСервере +Функция ПолучитьНоменклатураИКарточкуМП(ОбXDTO,создавать=истина) + // Создание номенклатуры + Если НЕ ОбXDTO.ДанныеНоменклатуры.Номенклатура.Ссылка = "00000000-0000-0000-0000-000000000000" Тогда + НоменклатураСсылка=Справочники.Номенклатура.ПолучитьСсылку( + Новый УникальныйИдентификатор(ОбXDTO.ДанныеНоменклатуры.Номенклатура.Ссылка)); + Номенклатура=НоменклатураСсылка.ПолучитьОбъект(); + Если Номенклатура = Неопределено Тогда + Номенклатура=Справочники.Номенклатура.СоздатьЭлемент(); + Номенклатура.УстановитьСсылкуНового(НоменклатураСсылка); + КонецЕсли; + Номенклатура.Наименование=ОбXDTO.ДанныеНоменклатуры.Номенклатура.Наименование; + Номенклатура.АртикулПродавца = ОбXDTO.ДанныеНоменклатуры.Номенклатура.Артикул; + Номенклатура.МаркировкаМП = ОбXDTO.ДанныеНоменклатуры.Номенклатура.МаркировкаМП; + Если ОбXDTO.КомплектацияНоменклатуры <> неопределено Тогда + Номенклатура.Комплект = Истина; + Номенклатура.Записать(); + СоздатьКомплектациюНоменклатуры(ОбXDTO, Номенклатура.Ссылка); + Иначе + Номенклатура.Записать(); + КонецЕсли; + ШтрихкодыНомМассив = РазложитьСтрокуВМассивПодстрок(ОбXDTO.ДанныеНоменклатуры.ШтрихКод, ";", Истина); + Если ШтрихкодыНомМассив.Количество() > 0 Тогда + Для Каждого элемент Из ШтрихкодыНомМассив Цикл + НоваяЗапись = РегистрыСведений.ШтрихкодыУпаковок.СоздатьМенеджерЗаписи(); + НоваяЗапись.Штрихкод = элемент; + НоваяЗапись.Номенклатура=Номенклатура.Ссылка; + НоваяЗапись.Записать(Истина); + КонецЦикла; + КонецЕсли; + КонецЕсли; + //Иначе + // //обновим штрихкоды и комплектацию + // Если ОбXDTO.КомплектацияНоменклатуры <> Неопределено Тогда + // СоздатьКомплектациюНоменклатуры(ОбXDTO, Номенклатура.Ссылка); + // КонецЕсли; + // ШтрихкодыНомМассив = РазложитьСтрокуВМассивПодстрок(ОбXDTO.ДанныеНоменклатуры.ШтрихКод, ";", Истина); + // Если ШтрихкодыНомМассив.Количество() > 0 Тогда + // Для Каждого элемент Из ШтрихкодыНомМассив Цикл + // НоваяЗапись = РегистрыСведений.ШтрихкодыУпаковок.СоздатьМенеджерЗаписи(); + // НоваяЗапись.Штрихкод = элемент; + // НоваяЗапись.Номенклатура=Номенклатура.Ссылка; + // НоваяЗапись.Записать(Истина); + // КонецЦикла; + // КонецЕсли; + //КонецЕсли; + + // Создание КарточкиМП + КарточкаМПСсылка=Справочники.КарточкиМП.ПолучитьСсылку( + Новый УникальныйИдентификатор(ОбXDTO.ДанныеКарточкиМП.Номенклатура.Ссылка)); + КарточкаМП=КарточкаМПСсылка.ПолучитьОбъект(); + Если ОбXDTO.ДанныеКарточкиМП.Номенклатура.Ссылка = "00000000-0000-0000-0000-000000000000" Тогда + ВызватьИсключение("Не заполнена карточка МП в документе ПоставкаМП!"); + КонецЕсли; + Если КарточкаМП = Неопределено Тогда + КарточкаМП=Справочники.КарточкиМП.СоздатьЭлемент(); + КарточкаМП.УстановитьСсылкуНового(КарточкаМПСсылка); + КонецЕсли; + КарточкаМП.Наименование=ОбXDTO.ДанныеКарточкиМП.Номенклатура.Наименование; + Если НЕ ОбXDTO.ДанныеНоменклатуры.Номенклатура.Ссылка = "00000000-0000-0000-0000-000000000000" Тогда + КарточкаМП.Номенклатура=Номенклатура.Ссылка; + КарточкаМП.МаркировкаМП = ОбXDTO.ДанныеНоменклатуры.Номенклатура.МаркировкаМП; + КонецЕсли; + КарточкаМП.Записать(); + ШтрихкодыНомМассив = РазложитьСтрокуВМассивПодстрок(ОбXDTO.ДанныеКарточкиМП.ШтрихКод, ";", Истина); + Если ШтрихкодыНомМассив.Количество() > 0 Тогда + Для Каждого элемент Из ШтрихкодыНомМассив Цикл + НоваяЗапись = РегистрыСведений.ШтрихкодыУпаковок.СоздатьМенеджерЗаписи(); + НоваяЗапись.Штрихкод = элемент; + НоваяЗапись.Номенклатура=КарточкаМП.Ссылка; + НоваяЗапись.Записать(Истина); + КонецЦикла; + КонецЕсли; + //Иначе + // //обновим только штрихкоды + // ШтрихкодыНомМассив = РазложитьСтрокуВМассивПодстрок(ОбXDTO.ДанныеКарточкиМП.ШтрихКод, ";", Истина); + // КарточкаМП.Номенклатура=Номенклатура.Ссылка; + // КарточкаМП.Записать(); + // Если ШтрихкодыНомМассив.Количество() > 0 Тогда + // Для Каждого элемент Из ШтрихкодыНомМассив Цикл + // НоваяЗапись = РегистрыСведений.ШтрихкодыУпаковок.СоздатьМенеджерЗаписи(); + // НоваяЗапись.Штрихкод = элемент; + // НоваяЗапись.Номенклатура=КарточкаМП.Ссылка; + // НоваяЗапись.Записать(Истина); + // КонецЦикла; + // КонецЕсли; + //КонецЕсли; + возврат КарточкаМП.Ссылка; +КонецФункции + +Функция НайтиЕдИзмер(ЕдиницаИзмерСпр, создавать=истина) + Спр = Справочники.ЕдиницыИзмерения.ПолучитьСсылку(Новый УникальныйИдентификатор(ЕдиницаИзмерСпр.Ссылка)); + СпрЕд = Спр.ПолучитьОбъект(); + + Если СпрЕд=неопределено Тогда + Если создавать Тогда + СпрЕд=Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); + СпрЕд.Код = ЕдиницаИзмерСпр.ДанныеКлассификатора.Код; + СпрЕд.Наименование = ЕдиницаИзмерСпр.ДанныеКлассификатора.Наименование; + СпрЕд.УстановитьСсылкуНового(Спр); + СпрЕд.Записать(); + иначе + конецесли; + КонецЕсли; + + возврат СпрЕд.Ссылка; +КонецФункции +&НаКлиенте +Процедура Выгрузить(Команда) + ВыгрузитьНаСервере(); +КонецПроцедуры + + +Процедура СоздатьКомплектациюНоменклатуры(ОбXDTO, Владелец) + Если ТипЗнч(ОбXDTO.КомплектацияНоменклатуры.Строка) = Тип("ОбъектXDTO") Тогда + СпрКомплектацияСсылка=Справочники.КомплектацииНоменклатуры.ПолучитьСсылку( + Новый УникальныйИдентификатор(ОбXDTO.КомплектацияНоменклатуры.строка.Ссылка)); + СпрКомплектация=СпрКомплектацияСсылка.ПолучитьОбъект(); + Если СпрКомплектация = Неопределено Тогда + СпрКомплектация = Справочники.КомплектацииНоменклатуры.СоздатьЭлемент(); + СпрКомплектация.УстановитьСсылкуНового(СпрКомплектацияСсылка); + КонецЕсли; + СпрКомплектация.Владелец = Владелец; + СпрКомплектация.Наименование = ОбXDTO.КомплектацияНоменклатуры.строка.НаименованиеКомплекта; + Если ТипЗнч(ОбXDTO.КомплектацияНоменклатуры.строка.ТаблицаСостава.строка) = Тип("СписокXDTO") Тогда + СпрКомплектация.Состав.Очистить(); + Для Каждого строка Из ОбXDTO.КомплектацияНоменклатуры.строка.ТаблицаСостава.Строка Цикл + Сост = СпрКомплектация.Состав.Добавить(); + Сост.Номенклатура = НайтиНомВБазе(строка.Номенклатура); + Сост.Количество = строка.Количество; + Сост.КоличествоКомплектов = строка.КоличествоКомплектов; + КонецЦикла; + СпрКомплектация.Записать(); + ИначеЕсли ТипЗнч(ОбXDTO.КомплектацияНоменклатуры.строка.ТаблицаСостава.строка) = Тип("ОбъектXDTO") Тогда + СпрКомплектация.Состав.Очистить(); + Сост = СпрКомплектация.Состав.Добавить(); + Сост.Номенклатура = НайтиНомВБазе(ОбXDTO.КомплектацияНоменклатуры.строка.ТаблицаСостава.Строка.Номенклатура); + Сост.Количество = ОбXDTO.КомплектацияНоменклатуры.строка.ТаблицаСостава.Строка.Количество; + Сост.КоличествоКомплектов = ОбXDTO.КомплектацияНоменклатуры.строка.ТаблицаСостава.Строка.КоличествоКомплектов; + СпрКомплектация.Записать(); + КонецЕсли; + + ИначеЕсли ТипЗнч(ОбXDTO.КомплектацияНоменклатуры.Строка) = Тип("СписокXDTO") Тогда + Для Каждого строка Из ОбXDTO.КомплектацияНоменклатуры.Строка Цикл + СпрКомплектацияСсылка=Справочники.КомплектацииНоменклатуры.ПолучитьСсылку( + Новый УникальныйИдентификатор(строка.Ссылка)); + СпрКомплектация=СпрКомплектацияСсылка.ПолучитьОбъект(); + Если СпрКомплектация = неопределено Тогда + СпрКомплектация = Справочники.КомплектацииНоменклатуры.СоздатьЭлемент(); + СпрКомплектация.УстановитьСсылкуНового(СпрКомплектацияСсылка); + КонецЕсли; + СпрКомплектация.Владелец = Владелец; + СпрКомплектация.Наименование = строка.НаименованиеКомплекта; + Если ТипЗнч(строка.ТаблицаСостава.строка) = Тип("СписокXDTO") Тогда + СпрКомплектация.Состав.Очистить(); + Для Каждого строка Из строка.ТаблицаСостава.Строка Цикл + Сост = СпрКомплектация.Состав.Добавить(); + Сост.Номенклатура = НайтиНомВБазе(строка.Номенклатура); + Сост.Количество = строка.Количество; + Сост.КоличествоКомплектов = строка.КоличествоКомплектов; + КонецЦикла; + СпрКомплектация.Записать(); + ИначеЕсли ТипЗнч(строка.ТаблицаСостава.строка) = Тип("ОбъектXDTO") Тогда + СпрКомплектация.Состав.Очистить(); + Сост = СпрКомплектация.Состав.Добавить(); + Сост.Номенклатура = НайтиНомВБазе(строка.ТаблицаСостава.строка.Номенклатура); + Сост.Количество = строка.ТаблицаСостава.строка.Количество; + Сост.КоличествоКомплектов = строка.ТаблицаСостава.строка.КоличествоКомплектов; + СпрКомплектация.Записать(); + КонецЕсли; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ВыгрузитьНаСервере() + РезультатОтправки=""; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СборкаЗаказа.Ссылка КАК Ссылка, + | СборкаЗаказа.Дата КАК Дата + |ИЗ + | Документ.СборкаЗаказа КАК СборкаЗаказа + |ГДЕ + | СборкаЗаказа.Проведен = ИСТИНА + | И СборкаЗаказа.Статус = &Статус + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | СтикеровкаМП.Ссылка, + | СтикеровкаМП.Дата + |ИЗ + | Документ.СтикеровкаМП КАК СтикеровкаМП + |ГДЕ + | СтикеровкаМП.Проведен = ИСТИНА + | И СтикеровкаМП.Статус = &Статус + | + |УПОРЯДОЧИТЬ ПО + | Дата"; + Запрос.УстановитьПараметр("Проведен", Истина); + Запрос.УстановитьПараметр("Статус", Перечисления.Статус.Обработан); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + xmlответ=СинхронизацияУТ.ВыгрузитьДокументыСборкиСтикеровкиНаСервер(ВыборкаДетальныеЗаписи.Ссылка, + Строка(ТипЗнч(ВыборкаДетальныеЗаписи.Ссылка))); + Чтение=Новый ЧтениеXML; + Чтение.УстановитьСтроку(xmlответ); + Фабрика=Новый ФабрикаXDTO; + Попытка + ОбXDTO=Фабрика.ПрочитатьXML(Чтение).Body.setDocResponse.return; + Если ОбXDTO Тогда + Док=ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); + Док.Статус=Перечисления.Статус.Отправлен; + Док.Записать(); + РезультатОтправки=РезультатОтправки + "Успешно отправлен " + ВыборкаДетальныеЗаписи.Ссылка + Символы.Пс; + Иначе + РезультатОтправки=РезультатОтправки + "Ошибка отправки " + ВыборкаДетальныеЗаписи.Ссылка + Символы.Пс; + КонецЕсли; + Исключение + Сообщить(xmlответ + Символы.ПС + ОписаниеОшибки()); + КонецПопытки; + КонецЦикла; + + Если Не значениеЗаполнено(РезультатОтправки) Тогда + РезультатОтправки="Нет документов для отправки"; + КонецЕсли; + КОтправкеИнфо(); +КонецПроцедуры + +&НаСервере +Процедура КОтправкеИнфо() + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СборкаЗаказа.Ссылка КАК Ссылка, + | СборкаЗаказа.Дата КАК Дата + |ИЗ + | Документ.СборкаЗаказа КАК СборкаЗаказа + |ГДЕ + | СборкаЗаказа.Проведен = ИСТИНА + | И СборкаЗаказа.Статус = &Статус + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | СтикеровкаМП.Ссылка, + | СтикеровкаМП.Дата + |ИЗ + | Документ.СтикеровкаМП КАК СтикеровкаМП + |ГДЕ + | СтикеровкаМП.Проведен = ИСТИНА + | И СтикеровкаМП.Статус = &Статус + | + |УПОРЯДОЧИТЬ ПО + | Дата"; + Запрос.УстановитьПараметр("Проведен", Истина); + Запрос.УстановитьПараметр("Статус", Перечисления.Статус.Обработан); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + + ЭтотОбъект.КОтправке = РезультатЗапроса.Количество(); +КонецПроцедуры + +Функция НайтиНомВБазе(ДанныеНом) + // Создание номенклатуры + НоменклатураСсылка=Справочники.Номенклатура.ПолучитьСсылку( + Новый УникальныйИдентификатор(ДанныеНом.Номенклатура.Ссылка)); + Номенклатура=НоменклатураСсылка.ПолучитьОбъект(); + Если Номенклатура = Неопределено Тогда + Номенклатура=Справочники.Номенклатура.СоздатьЭлемент(); + Номенклатура.Наименование=ДанныеНом.Номенклатура.Наименование; + Номенклатура.УстановитьСсылкуНового(НоменклатураСсылка); + Номенклатура.Записать(); + НоменклатураСсылка = Номенклатура.Ссылка; + ШтрихкодыНомМассив = РазложитьСтрокуВМассивПодстрок(ДанныеНом.ШтрихКод, ";", Истина); + Если ШтрихкодыНомМассив.Количество() > 0 Тогда + Для Каждого элемент Из ШтрихкодыНомМассив Цикл + НоваяЗапись = РегистрыСведений.ШтрихкодыУпаковок.СоздатьМенеджерЗаписи(); + НоваяЗапись.Штрихкод = элемент; + НоваяЗапись.Номенклатура=Номенклатура.Ссылка; + НоваяЗапись.Записать(Истина); + КонецЦикла; + КонецЕсли; + Иначе + //обновим штрихкоды и комплектацию + ШтрихкодыНомМассив = РазложитьСтрокуВМассивПодстрок(ДанныеНом.ШтрихКод, ";", Истина); + Если ШтрихкодыНомМассив.Количество() > 0 Тогда + Для Каждого элемент Из ШтрихкодыНомМассив Цикл + НоваяЗапись = РегистрыСведений.ШтрихкодыУпаковок.СоздатьМенеджерЗаписи(); + НоваяЗапись.Штрихкод = элемент; + НоваяЗапись.Номенклатура=Номенклатура.Ссылка; + НоваяЗапись.Записать(Истина); + КонецЦикла; + КонецЕсли; + КонецЕсли; + Возврат НоменклатураСсылка; +КонецФункции + +&НаКлиенте +Процедура ВкладкиПриСменеСтраницы(Элемент, ТекущаяСтраница) + ЕСли ТекущаяСтраница.Имя="Синхронизация" Тогда + КОтправкеИнфо(); + КонецЕсли; + + Результат=""; + РезультатОтправки=""; + +КонецПроцедуры + + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если ПодключатьЛиОборудованиеПриЗапуске() Тогда + ЭтотОбъект.ИспользоватьПодключаемоеОборудование = Истина; + МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода"); + КонецЕсли; +КонецПроцедуры + + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) +// ИнтеграцияПодсистемБПО.ОбновлениеИнформационнойБазыБПО(); +КонецПроцедуры + + +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) + если ВводДоступен() тогда + Если Событие="Штрихкод" Тогда + Если Элементы.Вкладки.ТекущаяСтраница.Имя = "ПечатьМарки" Тогда + // чтобы не было ошибки при передачи марок с клиента на сервер. 1С может вылететь. + // непонятные символы удалять нельзя из XML , так как потеряем суть марки + ОтправитьНаПечатьМарку(ПолучитьДвоичныеДанныеИзСтроки(Данные)); + КонецЕсли; + конецесли; + конецесли; +КонецПроцедуры + +Процедура ОтправитьНаПечатьМарку(ДД) + МассивДляПечати = Новый Массив(); + Результат = Base64Строка(ДД); + Результат = СтрЗаменить(Результат, Символы.ПС, ""); + Результат = СтрЗаменить(Результат, Символы.ВК, ""); + СтруктураПечати=Новый Структура; + Если ЗначениеЗаполнено(ДокПоставкиМП) Тогда + СтруктураПечати.Вставить("Ссылка",строка(ДокПоставкиМП.Ссылка.УникальныйИдентификатор())); + КонецЕсли; + СтруктураПечати.Вставить("СписокКодМП", МассивДляПечати); + СтруктураПечати.Вставить("КодМаркировки", Результат); + СинхронизацияУТ.РаспечататьКодПоставкиНаПринтере(СтруктураПечати); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + ИмяСобытия1=ИмяСобытия; + Параметр1= Параметр; + Источник1= Источник; +КонецПроцедуры + + +&НаСервере +Функция ЗагрузитьИнвентНаСервере(ШтрихКод=неопределено) // загружаем документ инвент на ТСД + Если ШтрихКод=неопределено тогда + xmlответ=СинхронизацияУТ.getDocInvent(НомерИнвент); + Иначе + xmlответ=СинхронизацияУТ.getDocInvent(ШтрихКод); + КонецЕсли; + Чтение=Новый ЧтениеXML; + Чтение.УстановитьСтроку(xmlответ); + Фабрика=Новый ФабрикаXDTO; + Попытка + ОбXDTO=Фабрика.ПрочитатьXML(Чтение).Body.getDocInventResponse.return; + Исключение + Сообщить(ОписаниеОшибки()); + возврат Ложь; + КонецПопытки; + Если ОбXDTO.КлючевыеСвойства.Ссылка="00000000-0000-0000-0000-000000000000" Тогда + Сообщить("Документ не найден!"); + Возврат Ложь; + КонецЕсли; + + + ДокЗаказСсылка=Документы.ИнвентаризацияЗапасов.ПолучитьСсылку(Новый УникальныйИдентификатор(ОбXDTO.КлючевыеСвойства.Ссылка)); + ДокЗаказ=ДокЗаказСсылка.ПолучитьОбъект(); + ЭтотОбъект.Результат=""; + Если ДокЗаказ=неопределено Тогда + ДокЗаказ=Документы.ИнвентаризацияЗапасов.СоздатьДокумент(); + ДокЗаказ.УстановитьСсылкуНового(ДокЗаказСсылка); + ЭтотОбъект.Результат="Загружена инвентаризация запасов № "+ОбXDTO.КлючевыеСвойства.Номер+Символы.ПС+" от "+ОбXDTO.КлючевыеСвойства.Дата+Символы.Пс; + Иначе + ЭтотОбъект.Результат="Обновлена инвентаризация запасов № "+ОбXDTO.КлючевыеСвойства.Номер+Символы.ПС+" от "+ОбXDTO.КлючевыеСвойства.Дата+Символы.Пс; + КонецЕсли; + ДокЗаказ.Номер=ОбXDTO.КлючевыеСвойства.Номер; + ДокЗаказ.Дата=Дата(СтрЗаменить(СтрЗаменить(СтрЗаменить(ОбXDTO.КлючевыеСвойства.Дата,"T",""),"-",""),":","")); + ДокЗаказ.Запасы.Очистить(); + Если ТипЗнч(ОбXDTO.Товары.Строка)=Тип("СписокXDTO") Тогда + + Для каждого строка из ОбXDTO.Товары.Строка Цикл + ДокТовар(ДокЗаказ,строка); + КонецЦикла; + + ИначеЕсли ТипЗнч(ОбXDTO.Товары.Строка)=Тип("ОбъектXDTO") Тогда + + ДокТовар(ДокЗаказ,ОбXDTO.Товары.Строка); + + КонецЕсли; + ДокЗаказ.Статус=Перечисления.Статус.Вработе; + ДокЗаказ.Записать(); + Возврат ДокЗаказ.Ссылка; +КонецФункции + + +&НаКлиенте +Процедура ЗагрузитьИнвент(Команда) + ЗагрузитьИнвентНаСервере(); +КонецПроцедуры + + +&НаКлиенте +Процедура ПолучитьНом(Команда) + ПолучитьНомНаСервере(); +КонецПроцедуры + + +&НаСервере +Процедура ПолучитьНомНаСервере() + xmlответ=СинхронизацияУТ.GetNom(); +КонецПроцедуры + + +Функция РазложитьСтрокуВМассивПодстрок(Знач Значение, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, + СокращатьНепечатаемыеСимволы = Ложь) Экспорт + + Если СтрДлина(Разделитель) = 1 + И ПропускатьПустыеСтроки = Неопределено + И СокращатьНепечатаемыеСимволы Тогда + + РезультатМассив = СтрРазделить(Значение, Разделитель, Ложь); + Для Индекс = 0 По Результат.ВГраница() Цикл + Результат[Индекс] = СокрЛП(Результат[Индекс]); + КонецЦикла; + Возврат РезультатМассив; + + КонецЕсли; + + РезультатМассив = Новый Массив; + + // Для обеспечения обратной совместимости. + Если ПропускатьПустыеСтроки = Неопределено Тогда + ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); + Если ПустаяСтрока(Значение) Тогда + Если Разделитель = " " Тогда + РезультатМассив.Добавить(""); + КонецЕсли; + Возврат РезультатМассив; + КонецЕсли; + КонецЕсли; + + Если СтрДлина(Разделитель) = 0 Тогда + Если ПропускатьПустыеСтроки И ПустаяСтрока(Значение) Тогда + Возврат РезультатМассив; + КонецЕсли; + Если СокращатьНепечатаемыеСимволы Тогда + Значение = СокрЛП(Значение); + КонецЕсли; + РезультатМассив.Добавить(Значение); + Возврат РезультатМассив; + КонецЕсли; + + Позиция = СтрНайти(Значение, Разделитель); + Пока Позиция > 0 Цикл + Подстрока = Лев(Значение, Позиция - 1); + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда + Если СокращатьНепечатаемыеСимволы Тогда + Подстрока = СокрЛП(Подстрока); + КонецЕсли; + РезультатМассив.Добавить(Подстрока); + КонецЕсли; + Значение = Сред(Значение, Позиция + СтрДлина(Разделитель)); + Позиция = СтрНайти(Значение, Разделитель); + КонецЦикла; + + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Значение) Тогда + Если СокращатьНепечатаемыеСимволы Тогда + Значение = СокрЛП(Значение); + КонецЕсли; + РезультатМассив.Добавить(Значение); + КонецЕсли; + + Возврат РезультатМассив; + +КонецФункции + + +&НаСервере +Процедура ВыгрузитьДокШкНаСервере() + // Отдельно отправим документы с штрихкодами + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПулШтрихкодов.Ссылка КАК Ссылка + |ИЗ + | Документ.ПулШтрихкодов КАК ПулШтрихкодов + |ГДЕ + | ПулШтрихкодов.Проведен = ИСТИНА + | И ПулШтрихкодов.Статус = &Статус"; + Запрос.УстановитьПараметр("Статус", Перечисления.Статус.Обработан); + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Чтение=Новый ЧтениеXML; + Чтение.УстановитьСтроку(СинхронизацияУТ.ОтправитьДокШтрихкодов(ВыборкаДетальныеЗаписи.Ссылка)); + Фабрика=Новый ФабрикаXDTO; + Попытка + ОбXDTO=Фабрика.ПрочитатьXML(Чтение).Body.setDocBarcodeResponse.return; + Если ОбXDTO = "true" Тогда + Сообщить("Выгрузили документ с ШК " + ВыборкаДетальныеЗаписи.Ссылка); + Док = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); + Док.Статус = Перечисления.Статус.Отправлен; + Док.Записать(); + Иначе + Сообщить(ОбXDTO); + КонецЕсли; + Исключение + Сообщить(ОписаниеОшибки()); + КонецПопытки; + КонецЦикла; +КонецПроцедуры + + +&НаКлиенте +Процедура ВыгрузитьДокШк(Команда) + ВыгрузитьДокШкНаСервере(); +КонецПроцедуры + +&НаСервере +Процедура ВыгрузитьПеремещенияВУНФНаСервере() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПеремещениеПоЯчейкам.Ссылка КАК Ссылка + |ИЗ + | Документ.ПеремещениеПоЯчейкам КАК ПеремещениеПоЯчейкам + |ГДЕ + | ПеремещениеПоЯчейкам.Проведен = ИСТИНА + | И ПеремещениеПоЯчейкам.Статус = &Статус"; + Запрос.УстановитьПараметр("Статус", Перечисления.Статус.Обработан); + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Попытка + ТекстОтвета = СинхронизацияУТ.ВыгрузитьПеремещениеПоЯчейкам(ВыборкаДетальныеЗаписи.Ссылка); + Сообщить("Выгрузили перемещение " + ВыборкаДетальныеЗаписи.Ссылка + ": " + ТекстОтвета); + Исключение + Сообщить(ОписаниеОшибки()); + КонецПопытки; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузитьПеремещенияВУНФ(Команда) + ВыгрузитьПеремещенияВУНФНаСервере(); + Элементы.СписокПеремещенияПоЯчейкам.Обновить(); +КонецПроцедуры + +Функция ПодключатьЛиОборудованиеПриЗапуске() + возврат Константы.ПодключатьОборудованиеПриЗапуске.Получить(); +КонецФункции + +&НаКлиенте +Процедура ТестПечатиМарки(Команда) + ОтправитьНаПечатьМарку(ПолучитьДвоичныеДанныеИзСтроки("0104811977003101215xdBTe91EE1292M9bepEExk+F9/E8sMvfYtGWpkWUOzDPLZqhMKJuJ8JY=")); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСправочники(Команда) + + ЭтапЗагрузкиСправочников = 0; + АдресДанныхШК = ""; + ИндексПорцииШК = 0; + ВсегоЭлементовШК = 0; + ЗаписаноШтрихкодов = 0; + Элементы.СтатусСправочников.Видимость = Истина; + Элементы.СтатусСправочников.Заголовок = "Начинаем загрузку справочников..."; + ПодключитьОбработчикОжидания("ВыполнитьЭтапЗагрузкиСправочников", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьЭтапЗагрузкиСправочников() + + Попытка + Если ЭтапЗагрузкиСправочников = 0 Тогда + Элементы.СтатусСправочников.Заголовок = "Организации: загрузка..."; + ЗагрузитьОрганизацииСправочниковНаСервере(); + ЭтапЗагрузкиСправочников = 1; + ПодключитьОбработчикОжидания("ВыполнитьЭтапЗагрузкиСправочников", 0.1, Истина); + + ИначеЕсли ЭтапЗагрузкиСправочников = 1 Тогда + Элементы.СтатусСправочников.Заголовок = "Ячейки: загрузка..."; + ЗагрузитьЯчейкиСправочниковНаСервере(); + ЭтапЗагрузкиСправочников = 2; + ПодключитьОбработчикОжидания("ВыполнитьЭтапЗагрузкиСправочников", 0.1, Истина); + + ИначеЕсли ЭтапЗагрузкиСправочников = 2 Тогда + Элементы.СтатусСправочников.Заголовок = "Партии: загрузка..."; + ЗагрузитьПартииСправочниковНаСервере(); + ЭтапЗагрузкиСправочников = 3; + ПодключитьОбработчикОжидания("ВыполнитьЭтапЗагрузкиСправочников", 0.1, Истина); + + ИначеЕсли ЭтапЗагрузкиСправочников = 3 Тогда + Элементы.СтатусСправочников.Заголовок = "Остатки: загрузка..."; + ЗагрузитьОстаткиСправочниковНаСервере(); + ЭтапЗагрузкиСправочников = 4; + ПодключитьОбработчикОжидания("ВыполнитьЭтапЗагрузкиСправочников", 0.1, Истина); + + ИначеЕсли ЭтапЗагрузкиСправочников = 4 Тогда + Элементы.СтатусСправочников.Заголовок = "Штрихкоды: получение..."; + РезультатПодготовки = ПодготовитьЗагрузкуШтрихкодовСправочниковНаСервере(УникальныйИдентификатор); + АдресДанныхШК = РезультатПодготовки.Адрес; + ВсегоЭлементовШК = РезультатПодготовки.Количество; + ИндексПорцииШК = 0; + ЗаписаноШтрихкодов = 0; + Если ВсегоЭлементовШК = 0 Тогда + ЗавершитьЗагрузкуСправочников("Справочники загружены (штрихкодов нет)"); + Иначе + ЭтапЗагрузкиСправочников = 5; + ПодключитьОбработчикОжидания("ВыполнитьЭтапЗагрузкиСправочников", 0.05, Истина); + КонецЕсли; + + ИначеЕсли ЭтапЗагрузкиСправочников = 5 Тогда + РезультатПорции = ЗаписатьПорциюШтрихкодовСправочниковНаСервере(АдресДанныхШК, ИндексПорцииШК, 40); + ИндексПорцииШК = РезультатПорции.СледующийИндекс; + ЗаписаноШтрихкодов = ЗаписаноШтрихкодов + РезультатПорции.Записано; + Элементы.СтатусСправочников.Заголовок = "Штрихкоды: " + + Формат(Мин(ИндексПорцииШК, ВсегоЭлементовШК), "ЧГ=0") + + " / " + Формат(ВсегоЭлементовШК, "ЧГ=0"); + Если РезультатПорции.Готово Тогда + ЗавершитьЗагрузкуСправочников( + "Справочники загружены (штрихкодов: " + Формат(ЗаписаноШтрихкодов, "ЧГ=0") + ")"); + Иначе + ПодключитьОбработчикОжидания("ВыполнитьЭтапЗагрузкиСправочников", 0.05, Истина); + КонецЕсли; + КонецЕсли; + Исключение + ТекстОшибки = "Ошибка загрузки справочников: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Элементы.СтатусСправочников.Заголовок = ТекстОшибки; + Сообщить(ТекстОшибки); + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьЗагрузкуСправочников(ТекстИтога) + + ЗафиксироватьДатуЗагрузкиСправочниковНаСервере(); + Элементы.СтатусСправочников.Заголовок = ТекстИтога; + Сообщить(ТекстИтога); + ПодключитьОбработчикОжидания("СкрытьСтатусСправочников", 2, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура СкрытьСтатусСправочников() + Элементы.СтатусСправочников.Видимость = Ложь; +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗагрузитьОрганизацииСправочниковНаСервере() + СинхронизацияУТ.ЗагрузитьОрганизацииИзУНФ(); +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗагрузитьЯчейкиСправочниковНаСервере() + СинхронизацияУТ.ЗагрузитьЯчейкиИзУНФ(); +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗагрузитьПартииСправочниковНаСервере() + СинхронизацияУТ.ЗагрузитьПартииИзУНФ(); +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗагрузитьОстаткиСправочниковНаСервере() + СинхронизацияУТ.ЗагрузитьОстаткиПоЯчейкамИзУНФ(); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПодготовитьЗагрузкуШтрихкодовСправочниковНаСервере(УникальныйИдентификаторФормы) + Возврат СинхронизацияУТ.ПодготовитьЗагрузкуШтрихкодов(УникальныйИдентификаторФормы); +КонецФункции + +&НаСервереБезКонтекста +Функция ЗаписатьПорциюШтрихкодовСправочниковНаСервере(АдресДанных, ИндексНачала, РазмерПорции) + Возврат СинхронизацияУТ.ЗаписатьПорциюШтрихкодов(АдресДанных, ИндексНачала, РазмерПорции); +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗафиксироватьДатуЗагрузкиСправочниковНаСервере() + СинхронизацияУТ.ЗафиксироватьДатуЗагрузкиДанныхУНФ(); +КонецПроцедуры diff --git a/Documents/ПулШтрихкодов.xml b/Documents/ПулШтрихкодов.xml new file mode 100644 index 0000000..2499da0 --- /dev/null +++ b/Documents/ПулШтрихкодов.xml @@ -0,0 +1,233 @@ + + + + + + 9eb55cd5-d90d-4c7a-983e-aaab886b7994 + 144380e7-c44f-4505-a711-a294d23f7745 + + + 46674e94-d3c6-4daa-88ef-a77b9683255c + 5e456e48-31fa-4472-bd8f-1cb65a719722 + + + f9bb5d67-14a5-4639-8523-435a8df9ec79 + b91dc396-7f46-484d-8bf1-3b477029bb42 + + + 6d7928c7-cbd1-4e98-927a-1e9fdc71863b + 5e798ce9-9852-4eda-adc0-603e1c506e92 + + + c681fa5f-02f5-4a27-9f9d-4c94e6854a87 + 9f6e64ca-a858-45dc-97b5-17ee1fac721b + + + + ПулШтрихкодов + + + ru + Пул штрихкодов + + + + true + + String + 9 + Variable + Nonperiodical + true + true + + + + Document.ПулШтрихкодов.StandardAttribute.Number + + Use + Begin + DontUse + Directly + Document.ПулШтрихкодов.Form.ФормаДокумента + Document.ПулШтрихкодов.Form.ФормаСписка + + + + + Allow + Allow + AutoDeleteOnUnpost + WriteSelected + AutoFill + + true + true + false + + Managed + Use + + + + + + Auto + DontUse + false + false + + + + + Статус + + + ru + Статус + + + + + cfg:EnumRef.Статус + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + +
ФормаДокумента
+
ФормаСписка
+ + + + d8bef3d6-7b16-43b9-b0eb-284e0f76dfd5 + af213e78-1cce-466a-bbe1-1e3b971d6880 + + + 7a6121d7-1adc-4f36-8185-b8c8eb34fec6 + 63ac535a-0bc1-4f26-8a8f-784772614f68 + + + + Штрихкоды + + + ru + Штрихкоды + + + + + DontCheck + 5 + + + + + ШтрихкодСтрока + + + ru + Штрихкод строка + + + + + xs:string + + 125 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ШтрихкодКодированный + + + ru + Штрихкод кодированный + + + + + xs:string + + 145 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + +
+
+
\ No newline at end of file diff --git a/Documents/ПулШтрихкодов/Ext/ObjectModule.bsl b/Documents/ПулШтрихкодов/Ext/ObjectModule.bsl new file mode 100644 index 0000000..dca9e87 --- /dev/null +++ b/Documents/ПулШтрихкодов/Ext/ObjectModule.bsl @@ -0,0 +1,5 @@ +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + если РежимЗаписи=режимзаписидокумента.Проведение тогда + Этотобъект.Статус = Перечисления.Статус.Обработан; + КонецЕсли; +КонецПроцедуры diff --git a/Documents/ПулШтрихкодов/Forms/ФормаДокумента.xml b/Documents/ПулШтрихкодов/Forms/ФормаДокумента.xml new file mode 100644 index 0000000..b68a2fd --- /dev/null +++ b/Documents/ПулШтрихкодов/Forms/ФормаДокумента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаДокумента + + + ru + Форма документа + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/ПулШтрихкодов/Forms/ФормаДокумента/Ext/Form.xml b/Documents/ПулШтрихкодов/Forms/ФормаДокумента/Ext/Form.xml new file mode 100644 index 0000000..a7096a7 --- /dev/null +++ b/Documents/ПулШтрихкодов/Forms/ФормаДокумента/Ext/Form.xml @@ -0,0 +1,174 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Штрихкоды</v8:content> + </v8:item> + + + Abort + Cancel + ChangeHistory + Close + Copy + CustomizeForm + Help + Ignore + No + OK + OpenFromMainServer + OpenFromStandaloneServer + Post + Reread + RestoreValues + Retry + SaveValues + ShowInList + Yes + + CurrentOrLast + Auto + true + + + + + + + + ВнешнееСобытие + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер дата</v8:content> + </v8:item> + + + + ru + Номер дата + + + AlwaysHorizontal + false + + + + Объект.Number + EnterOnInput + true + + + + + Объект.Date + EnterOnInput + true + + + + + + + Объект.Статус + true + + + + + List + Top + UseHeightInFormRows + true + true + true + Объект.Штрихкоды + SelectionPresentationAndChoice + true + + + + false + + + + + + + false + + Штрихкоды + SearchStringRepresentation + + + + + + false + + Штрихкоды + ViewStatusRepresentation + + + + + + + Штрихкоды + SearchControl + + + + + + + Объект.Штрихкоды.LineNumber + EnterOnInput + + + + + Объект.Штрихкоды.ШтрихкодСтрока + EnterOnInput + true + + + + +
+
+ + + + cfg:DocumentObject.ПулШтрихкодов + + true + true + + Объект.RegisterRecords + + + +
\ No newline at end of file diff --git a/Documents/ПулШтрихкодов/Forms/ФормаДокумента/Ext/Form/Module.bsl b/Documents/ПулШтрихкодов/Forms/ФормаДокумента/Ext/Form/Module.bsl new file mode 100644 index 0000000..76f1ede --- /dev/null +++ b/Documents/ПулШтрихкодов/Forms/ФормаДокумента/Ext/Form/Module.bsl @@ -0,0 +1,25 @@ + +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) + Если ВводДоступен() тогда + Если Событие="Штрихкод" Тогда + Шк = Объект.Штрихкоды.Добавить(); + Шк.ШтрихкодСтрока = Данные; + // Это для кодов маркировки, но будем кодировать все + Шк.ШтрихкодКодированный = ЗакодироватьМаркуВ64(ПолучитьДвоичныеДанныеИзСтроки(Данные)); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + + +Функция ЗакодироватьМаркуВ64(ДД) + // Взято из БСП + // ШтрихкодированиеОбщегоНазначенияСКлиентСервер И ОбщегоНазначенияИСКлиентСервер + Base64 = Base64Строка(ДД); + Base64 = СтрЗаменить(Base64, Символы.ПС, ""); + Base64 = СтрЗаменить(Base64, Символы.ВК, ""); + возврат Base64; +КонецФункции + + + diff --git a/Documents/ПулШтрихкодов/Forms/ФормаСписка.xml b/Documents/ПулШтрихкодов/Forms/ФормаСписка.xml new file mode 100644 index 0000000..4f81089 --- /dev/null +++ b/Documents/ПулШтрихкодов/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/ПулШтрихкодов/Forms/ФормаСписка/Ext/Form.xml b/Documents/ПулШтрихкодов/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..349a83a --- /dev/null +++ b/Documents/ПулШтрихкодов/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,115 @@ + +
+ + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + WeakSeparation + false + + + + List + None + true + ExpandTopLevel + true + Список + Список.DefaultPicture + false + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Date + true + + + + + Список.Number + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Document.ПулШтрихкодов + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git a/Documents/ПулШтрихкодов/Forms/ФормаСписка/Ext/Form/Module.bsl b/Documents/ПулШтрихкодов/Forms/ФормаСписка/Ext/Form/Module.bsl new file mode 100644 index 0000000..dbbef41 --- /dev/null +++ b/Documents/ПулШтрихкодов/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,9 @@ + +&НаСервере +Процедура ВыгрузитьДокШкНаСервере() +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузитьДокШк(Команда) + ВыгрузитьДокШкНаСервере(); +КонецПроцедуры diff --git a/Documents/СборкаЗаказа.xml b/Documents/СборкаЗаказа.xml new file mode 100644 index 0000000..3f64220 --- /dev/null +++ b/Documents/СборкаЗаказа.xml @@ -0,0 +1,374 @@ + + + + + + 06858c78-e544-4989-824c-1569b16ea022 + 1d9a3122-0af1-48cf-be6c-77581ecff86a + + + bcb9250d-66e3-47b7-b354-4683e69257b5 + 8960e583-5177-4958-bbcb-92e983d7d83c + + + 02a5014f-c834-4781-a48d-bc5cecd9822d + 1fe22d4e-3639-4e3a-a944-32ad5abc5d58 + + + 3bf8f743-e499-4d00-b871-ea3be74dae34 + 28f99515-ea4a-401a-990e-b311b0d157aa + + + 9c044c6f-d8e7-4caa-bccd-ddcba89e8a7c + e2bc66e5-2aff-40b4-81a3-09f671060991 + + + + СборкаЗаказа + + + ru + Сборка МП + + + + true + + String + 9 + Variable + Nonperiodical + true + true + + + + Document.СборкаЗаказа.StandardAttribute.Number + + Use + Begin + DontUse + Directly + Document.СборкаЗаказа.Form.ФормаДокумента + Document.СборкаЗаказа.Form.ФормаСписка + + + + + Allow + Allow + AutoDeleteOnUnpost + WriteSelected + AutoFill + + true + true + false + + Managed + Use + + + + + + Auto + DontUse + false + false + + + + + Статус + + + ru + Статус + + + + + cfg:EnumRef.Статус + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Автор + + + ru + Автор + + + + + cfg:CatalogRef.Пользователи + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + +
ФормаДокумента
+
ФормаСписка
+ + + + ac5d6fe8-bb05-493a-af41-c53a1e68ccc1 + b2045c6c-f527-4e7e-8c30-6a0746e5ab47 + + + 8b34f296-b2ad-450a-a9c8-aa6f05702030 + a80cc559-fe1f-4265-92c9-1ffac30881f7 + + + + ПоставкиМП + + + ru + Поставки МП + + + + + DontCheck + 5 + + + + + ПоставкаМП + + + ru + Поставка МП + + + + + cfg:DocumentRef.ПоставкаМП + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + + + + 4cbc4afc-34ce-4429-9681-e3f934f6c1be + 3be25f17-2caf-4f56-b246-e5047d4afde7 + + + 997bf6df-0461-47a5-b3d1-2379fe5203fe + e3baab71-cd51-4131-b233-b025500fa367 + + + + ТоварыТолькоКоличество + + + ru + Товары только количество + + + + + DontCheck + 5 + + + + + Номенклатура + + + ru + Номенклатура + + + + + cfg:CatalogRef.Номенклатура + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Отсканировано + + + ru + Отсканировано + + + + + xs:decimal + + 10 + 0 + Any + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Ячейка + + + ru + Ячейка + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + +
+
+
\ No newline at end of file diff --git a/Documents/СборкаЗаказа/Ext/ObjectModule.bsl b/Documents/СборкаЗаказа/Ext/ObjectModule.bsl new file mode 100644 index 0000000..dca9e87 --- /dev/null +++ b/Documents/СборкаЗаказа/Ext/ObjectModule.bsl @@ -0,0 +1,5 @@ +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + если РежимЗаписи=режимзаписидокумента.Проведение тогда + Этотобъект.Статус = Перечисления.Статус.Обработан; + КонецЕсли; +КонецПроцедуры diff --git a/Documents/СборкаЗаказа/Forms/ФормаДокумента.xml b/Documents/СборкаЗаказа/Forms/ФормаДокумента.xml new file mode 100644 index 0000000..5285fbe --- /dev/null +++ b/Documents/СборкаЗаказа/Forms/ФормаДокумента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаДокумента + + + ru + Форма документа + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/СборкаЗаказа/Forms/ФормаДокумента/Ext/Form.xml b/Documents/СборкаЗаказа/Forms/ФормаДокумента/Ext/Form.xml new file mode 100644 index 0000000..8a9a8a4 --- /dev/null +++ b/Documents/СборкаЗаказа/Forms/ФормаДокумента/Ext/Form.xml @@ -0,0 +1,559 @@ + +
+ DontBlock + Vertical + CurrentOrLast + Auto + true + + false + + + + + + + + + ОбработкаОповещения + ПриОткрытии + ПередЗакрытием + ВнешнееСобытие + ПередЗаписьюНаСервере + ПриСозданииНаСервере + ПриЗаписиНаСервере + + + + false + true + Cell + false + Объект.ТоварыТолькоКоличество + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары</v8:content> + </v8:item> + + + + + false + + + + + Товары + SearchStringRepresentation + + + + + + + Товары + ViewStatusRepresentation + + + + + + + Товары + SearchControl + + + + + + + Объект.ТоварыТолькоКоличество.LineNumber + false + EnterOnInput + true + + + + + Объект.ТоварыТолькоКоличество.Номенклатура + EnterOnInput + true + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары группа1</v8:content> + </v8:item> + + true + true + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кол-во</v8:content> + </v8:item> + + Center + EnterOnInput + Center + Center + true + + + + + Объект.ТоварыТолькоКоличество.Отсканировано + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отсканировано</v8:content> + </v8:item> + + Center + EnterOnInput + Center + Center + true + + + + + + +
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа страницы</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары</v8:content> + </v8:item> + + Vertical + false + + + + List + UseHeightInFormRows + Cell + false + true + true + true + ТоварыВиртуал + SelectionPresentationAndChoice + + + + false + + + + false + + ТоварыВиртуал + SearchStringRepresentation + + + + + + false + + ТоварыВиртуал + ViewStatusRepresentation + + + + + + + ТоварыВиртуал + SearchControl + + + + + + + + + + ТоварыВиртуал.Номенклатура + EnterOnInput + true + true + 2 + true + UseContentHeight + + + + + ТоварыВиртуал.АртикулПродавца + EnterOnInput + true + 2 + true + UseContentHeight + + + + + ТоварыВиртуал.Ячейка + true + EnterOnInput + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары виртуал группа1</v8:content> + </v8:item> + + 1 + + + + ТоварыВиртуал.Количество + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>кол-во</v8:content> + </v8:item> + + Center + EnterOnInput + Center + Center + true + 2 + style:AccentColor + + + + + + ТоварыВиртуал.Отсканировано + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Скан</v8:content> + </v8:item> + + Center + EnterOnInput + Center + Center + true + 2 + style:SpecialTextColor + + + + + + + +
+
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поставки МП</v8:content> + </v8:item> + + Vertical + false + + + + Cell + false + Объект.ПоставкиМП + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поставки МП</v8:content> + </v8:item> + + + + + false + + + + + ПоставкиМП + SearchStringRepresentation + + + + + + + ПоставкиМП + ViewStatusRepresentation + + + + + + + ПоставкиМП + SearchControl + + + + + + + Объект.ПоставкиМП.LineNumber + false + EnterOnInput + true + + + + + Объект.ПоставкиМП.ПоставкаМП + EnterOnInput + true + + + + +
+
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Инфо</v8:content> + </v8:item> + + Vertical + ItemsRightTitlesLeft + false + + + + Объект.Number + EnterOnInput + true + true + + + + + Объект.Date + true + EnterOnInput + true + true + + + + + Объект.Статус + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Статус</v8:content> + </v8:item> + + + + + + Объект.Автор + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Автор</v8:content> + </v8:item> + + + + + + +
+
+
+ + + + cfg:DocumentObject.СборкаЗаказа + + true + true + + Объект.RegisterRecords + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары виртуал</v8:content> + </v8:item> + + + v8:ValueTable + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номенклатура</v8:content> + </v8:item> + + + cfg:CatalogRef.Номенклатура + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отсканировано</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Количество</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Артикул продавца</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ячейка</v8:content> + </v8:item> + + + xs:string + + 50 + Variable + + + + + + + \ No newline at end of file diff --git a/Documents/СборкаЗаказа/Forms/ФормаДокумента/Ext/Form/Module.bsl b/Documents/СборкаЗаказа/Forms/ФормаДокумента/Ext/Form/Module.bsl new file mode 100644 index 0000000..018c093 --- /dev/null +++ b/Documents/СборкаЗаказа/Forms/ФормаДокумента/Ext/Form/Module.bsl @@ -0,0 +1,241 @@ + &НаКлиенте +Перем НеВызыватьВС; +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + Если НЕ Объект.Проведен Тогда + //Если ОбъектМодифицирован(Объект.Ссылка) Тогда + // Сообщить("Сохраните документ!"); + // Отказ=Истина; + //КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + ТекущийОбъект.ТоварыТолькоКоличество.Загрузить(ТоварыВиртуал.Выгрузить()); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + //Ном = НайтиШтрихкодНом(Параметр[0]); + //Если ЗначениеЗаполнено(Ном) Тогда + // ТовВирт=ТоварыВиртуал.НайтиСтроки(Новый Структура("Номенклатура", Ном)); + // Если ТовВирт <> Неопределено И ТовВирт.Количество() > 0 Тогда + // ТовВирт[0].Отсканировано = ТовВирт[0].Отсканировано + 1; + // ФайлЗвука = ПолучитьАдресФайла("ок"); + // #Если МобильноеПриложениеКлиент Тогда + // СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + // #КонецЕсли + // Иначе + // Сообщить("Данного товара нет в документе"); + // ФайлЗвука = ПолучитьАдресФайла("еррор"); + // #Если МобильноеПриложениеКлиент Тогда + // СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + // #КонецЕсли + // КонецЕсли; + //КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) + если НеВызыватьВС=истина тогда + НеВызыватьВС=ложь; + возврат; конецесли; + + если ВводДоступен() тогда + Ном = НайтиШтрихкодНом(Данные); + Если ЗначениеЗаполнено(Ном) Тогда + ТовВирт=ТоварыВиртуал.НайтиСтроки(Новый Структура("Номенклатура", Ном)); + Если ТовВирт <> Неопределено И ТовВирт.Количество() > 0 Тогда + Если ТовВирт[0].Отсканировано = ТовВирт[0].Количество Тогда + Сообщить("Собрали весь товар!"); + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Возврат; + КонецЕсли; + ТовВирт[0].Отсканировано = ТовВирт[0].Отсканировано + 1; + Элементы.ТоварыВиртуал.ТекущаяСтрока = ТовВирт[0].ПолучитьИдентификатор(); + НеВызыватьВС=истина; + ФайлЗвука = ПолучитьАдресФайла("ок"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Иначе + Сообщить("Данного товара нет в документе"); + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + КонецЕсли; + Иначе + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Не нашли номенклатуру в базе"); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ПолучитьАдресФайла(ТипМакета) + Данные = ПолучитьОбщийМакет(ТипМакета); + Возврат Данные; +КонецФункции +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Объект.ПоставкиМП.Количество() > 0 Тогда + СсылкиПоставкиМП = Объект.ПоставкиМП.Выгрузить().ВыгрузитьКолонку("ПоставкаМП"); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СУММА(ПоставкаМПТовары.Количество) КАК Количество, + | ПоставкаМПТовары.КарточкаМП.Номенклатура.Ссылка КАК Номенклатура, + | ПоставкаМПТовары.КарточкаМП.Номенклатура.АртикулПродавца КАК АртикулПродавца, + | ПоставкаМПТовары.КарточкаМП.Наименование КАК КарточкаМПНаименование + |ИЗ + | Документ.ПоставкаМП.Товары КАК ПоставкаМПТовары + |ГДЕ + | ПоставкаМПТовары.Ссылка В(&СписокЗначений) + | + |СГРУППИРОВАТЬ ПО + | ПоставкаМПТовары.КарточкаМП.Номенклатура.Ссылка, + | ПоставкаМПТовары.КарточкаМП.Номенклатура.АртикулПродавца, + | ПоставкаМПТовары.КарточкаМП.Наименование"; + Запрос.УстановитьПараметр("СписокЗначений", СсылкиПоставкиМП); + ТоварыСПоставок = Запрос.Выполнить().Выгрузить(); + + Для Каждого строка Из ТоварыСПоставок Цикл + Если ЗначениеЗаполнено(строка.Номенклатура) Тогда + Если строка.Номенклатура.Комплект Тогда + Запрос1 = Новый Запрос; + Запрос1.Текст = + "ВЫБРАТЬ + | КомплектацииНоменклатурыСостав.Номенклатура.Ссылка КАК НоменклатураСсылка, + | КомплектацииНоменклатурыСостав.Количество КАК Количество, + | КомплектацииНоменклатурыСостав.Номенклатура.АртикулПродавца КАК АртикулПродавца + |ИЗ + | Справочник.КомплектацииНоменклатуры.Состав КАК КомплектацииНоменклатурыСостав + |ГДЕ + | КомплектацииНоменклатурыСостав.Ссылка.Владелец = &Владелец"; + + Запрос1.УстановитьПараметр("Владелец", строка.Номенклатура); + РезультатЗапроса1 = Запрос1.Выполнить(); + ВыборкаДетальныеЗаписи1 = РезультатЗапроса1.Выбрать(); + Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл + Тов = ТоварыВиртуал.Добавить(); + Тов.Номенклатура = ВыборкаДетальныеЗаписи1.НоменклатураСсылка; + Тов.Количество = ВыборкаДетальныеЗаписи1.Количество; + Если ВыборкаДетальныеЗаписи1.АртикулПродавца <> "ОбъектXDTO" Тогда + Тов.АртикулПродавца = ВыборкаДетальныеЗаписи1.АртикулПродавца; + КонецЕсли; + ТовКол=Объект.ТоварыТолькоКоличество.НайтиСтроки(Новый Структура("Номенклатура", + ВыборкаДетальныеЗаписи1.НоменклатураСсылка)); + Если ТовКол <> Неопределено И ТовКол.Количество() > 0 Тогда + Тов.Отсканировано = ТовКол[0].Отсканировано; + КонецЕсли; + КонецЦикла; + Иначе + Тов = ТоварыВиртуал.Добавить(); + Тов.Номенклатура = строка.Номенклатура; + Тов.Количество = строка.Количество; + Если строка.АртикулПродавца <> "ОбъектXDTO" Тогда + Тов.АртикулПродавца = строка.АртикулПродавца; + КонецЕсли; + ТовКол=Объект.ТоварыТолькоКоличество.НайтиСтроки(Новый Структура("Номенклатура", + строка.Номенклатура)); + Если ТовКол <> Неопределено И ТовКол.Количество() > 0 Тогда + Тов.Отсканировано = ТовКол[0].Отсканировано; + КонецЕсли; + КонецЕсли; + Иначе + Сообщить("У карточки МП " + строка.КарточкаМПНаименование + " нет сопоставления с номенклатурой"); + КонецЕсли; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +Функция ОбъектМодифицирован(СсылкаОбъект, ПроверятьТабличныеЧасти = Истина, ПроверятьСтандартные = Истина) + Объект.ТоварыТолькоКоличество.Загрузить(ТоварыВиртуал.Выгрузить()); + Ссылка = СсылкаОбъект; + Метаданное = СсылкаОбъект.Метаданные(); + + Для каждого Реквизит из Метаданное.Реквизиты Цикл + Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Если ПроверятьСтандартные Тогда + Для каждого Реквизит из Метаданное.СтандартныеРеквизиты Цикл + Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + + Если ПроверятьТабличныеЧасти Тогда + Для каждого ТЧ из Метаданное.ТабличныеЧасти Цикл + + Если Объект[ТЧ.Имя].Количество() <> Ссылка[ТЧ.Имя].Количество() Тогда + Возврат Истина; + КонецЕсли; + + Для Индекс = 0 по Объект[ТЧ.Имя].Количество()-1 Цикл + ОбъектСтрокаТЧ = Объект[ТЧ.Имя][Индекс]; + СсылкаСтрокаТЧ = Ссылка[ТЧ.Имя][Индекс]; + Для каждого РеквизитТЧ из ТЧ.Реквизиты Цикл + Если ОбъектСтрокаТЧ[РеквизитТЧ.Имя] <> СсылкаСтрокаТЧ[РеквизитТЧ.Имя] Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + КонецЦикла; + КонецЕсли; + + Возврат Ложь; + +КонецФункции +Функция НайтиШтрихкодНом(Штрих) + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШтрихкодыУпаковок.Номенклатура.Ссылка КАК НоменклатураСсылка + |ИЗ + | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок + |ГДЕ + | ШтрихкодыУпаковок.Штрихкод = &Штрихкод + | И ТИПЗНАЧЕНИЯ(ШтрихкодыУпаковок.Номенклатура.Ссылка) = ТИП(Справочник.Номенклатура)"; + + Запрос.УстановитьПараметр("Штрихкод", Штрих); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Если РезультатЗапроса.Количество() > 0 Тогда + Возврат РезультатЗапроса[0].НоменклатураСсылка; + КонецЕсли; + + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШтрихкодыУпаковок.Номенклатура.Ссылка КАК КарточкаМПСсылка + |ИЗ + | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок + |ГДЕ + | ШтрихкодыУпаковок.Штрихкод = &Штрихкод + | И ТИПЗНАЧЕНИЯ(ШтрихкодыУпаковок.Номенклатура.Ссылка) = ТИП(Справочник.КарточкиМП)"; + + Запрос.УстановитьПараметр("Штрихкод", штрих); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Если РезультатЗапроса.Количество()>0 Тогда + Возврат РезультатЗапроса[0].КарточкаМПСсылка.Номенклатура.Ссылка; + КонецЕсли; +КонецФункции + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + НеВызыватьВС=ложь; +КонецПроцедуры diff --git a/Documents/СборкаЗаказа/Forms/ФормаСписка.xml b/Documents/СборкаЗаказа/Forms/ФормаСписка.xml new file mode 100644 index 0000000..d8bc48f --- /dev/null +++ b/Documents/СборкаЗаказа/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/СборкаЗаказа/Forms/ФормаСписка/Ext/Form.xml b/Documents/СборкаЗаказа/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..d200899 --- /dev/null +++ b/Documents/СборкаЗаказа/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,117 @@ + +
+ DontBlock + Vertical + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + WeakSeparation + false + + + + List + None + true + Cell + ExpandTopLevel + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Number + true + + + + + Список.Date + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Document.СборкаЗаказа + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git a/Documents/СтикеровкаМП.xml b/Documents/СтикеровкаМП.xml new file mode 100644 index 0000000..82781c2 --- /dev/null +++ b/Documents/СтикеровкаМП.xml @@ -0,0 +1,621 @@ + + + + + + 7eccf739-e0cf-4a07-a32e-f285478f148e + d56c18cf-0237-4c00-a9b4-9eb3cc04f5f0 + + + 2fd2cb8a-8137-4aab-b1a6-f0073db45490 + 0189ec8b-6a9a-4ea5-95cb-8f32ab52d8c5 + + + 5e329f09-4040-4b9e-9153-0fcc928e4316 + 0d27126d-69dc-443b-9312-318906bef659 + + + 4e1b9ce7-f260-4d84-8c55-5f8d0cfcc498 + 6a0b8188-ee18-4fdc-a201-327c3bc759a2 + + + aa9d5b2a-9e54-49a7-a609-bd70a4183a14 + 16313791-03d4-4b93-9715-2fc611ad0d29 + + + + СтикеровкаМП + + + ru + Стикеровка МП + + + + true + + String + 50 + Variable + Nonperiodical + true + true + + + + Document.СтикеровкаМП.StandardAttribute.Number + + Use + Begin + DontUse + Directly + Document.СтикеровкаМП.Form.ФормаДокумента + + + + + + Allow + Deny + AutoDeleteOnUnpost + WriteSelected + AutoFill + + true + true + false + + Managed + Use + + + + + + Auto + DontUse + false + false + + + + + Партнер + + + ru + Партнер + + + + + cfg:CatalogRef.Партнеры + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Статус + + + ru + Статус + + + + + cfg:EnumRef.Статус + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Автор + + + ru + Автор + + + + + cfg:CatalogRef.Пользователи + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Маркет + + + ru + Маркет + + + + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + +
ФормаДокумента
+
ПодборПоставкиТовара
+ + + + bcbf96ca-4b9a-445e-9679-b805ee59800c + a10c745b-b424-422f-a253-79c78e48101b + + + cd2a004a-f900-4db0-8f36-b86f240430bf + 5fb8c846-e789-44c6-a370-5aef21ee2817 + + + + ТоварыТолькоКоличество + + + ru + Товары только количество + + + + + DontCheck + 5 + + + + + КарточкаМП + + + ru + Карточка МП + + + + + cfg:CatalogRef.КарточкиМП + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Количество + + + ru + Количество + + + + + xs:decimal + + 5 + 2 + Nonnegative + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Отсканировано + + + ru + Отсканировано + + + + + xs:decimal + + 10 + 0 + Any + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + КодМП + + + ru + Код МП + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ШтрихкодПоставки + + + ru + Штрихкод поставки + + + + + xs:string + + 60 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + МаркаСтрока + + + ru + Марка строка + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Ячейка + + + ru + Ячейка + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + + + + 433fb595-1009-4ea2-a773-bbdc37376a9d + 9ce11ce4-1191-4bb2-8572-79bffadac557 + + + 330c1214-2c01-4da8-958d-11021a008d55 + 570cb633-766a-4120-b6bf-c4c3e52c7196 + + + + ПоставкиМП + + + ru + Поставки МП + + + + + DontCheck + 5 + + + + + ПоставкаМП + + + ru + Поставка МП + + + + + cfg:DocumentRef.ПоставкаМП + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + +
+
+
\ No newline at end of file diff --git a/Documents/СтикеровкаМП/Ext/ObjectModule.bsl b/Documents/СтикеровкаМП/Ext/ObjectModule.bsl new file mode 100644 index 0000000..3ca4d01 --- /dev/null +++ b/Documents/СтикеровкаМП/Ext/ObjectModule.bsl @@ -0,0 +1,9 @@ + +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + если РежимЗаписи=режимзаписидокумента.Проведение тогда + Этотобъект.Статус = Перечисления.Статус.Обработан; + КонецЕсли; +КонецПроцедуры + +Процедура ОбработкаПроведения(Отказ, РежимПроведения) +КонецПроцедуры; \ No newline at end of file diff --git a/Documents/СтикеровкаМП/Forms/ПодборПоставкиТовара.xml b/Documents/СтикеровкаМП/Forms/ПодборПоставкиТовара.xml new file mode 100644 index 0000000..37a7d9b --- /dev/null +++ b/Documents/СтикеровкаМП/Forms/ПодборПоставкиТовара.xml @@ -0,0 +1,22 @@ + + +
+ + ПодборПоставкиТовара + + + ru + Подбор поставки товара + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/СтикеровкаМП/Forms/ПодборПоставкиТовара/Ext/Form.xml b/Documents/СтикеровкаМП/Forms/ПодборПоставкиТовара/Ext/Form.xml new file mode 100644 index 0000000..d53a17a --- /dev/null +++ b/Documents/СтикеровкаМП/Forms/ПодборПоставкиТовара/Ext/Form.xml @@ -0,0 +1,193 @@ + +
+ LockWholeInterface + Vertical + None + Compact + false + false + false + + + ПриОткрытии + ВнешнееСобытие + ПриСозданииНаСервере + + + + true + style:AccentColor + + + + + + НаимНоменклатура + false + true + None + true + + + + + КодМП + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код МП</v8:content> + </v8:item> + + Left + true + true + + + + + + style:ActivityColor + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код поставки МП</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Документ основание</v8:content> + </v8:item> + + + cfg:DocumentRef.СтикеровкаМП + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ном</v8:content> + </v8:item> + + + cfg:CatalogRef.КарточкиМП + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Есть поставка</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Есть товар</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Маркет</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Наим номенклатура</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер поставки МП</v8:content> + </v8:item> + + + xs:string + + 110 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код маркировки</v8:content> + </v8:item> + + + xs:string + + 145 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кол тов найдено</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Any + + + + + \ No newline at end of file diff --git a/Documents/СтикеровкаМП/Forms/ПодборПоставкиТовара/Ext/Form/Module.bsl b/Documents/СтикеровкаМП/Forms/ПодборПоставкиТовара/Ext/Form/Module.bsl new file mode 100644 index 0000000..f927821 --- /dev/null +++ b/Documents/СтикеровкаМП/Forms/ПодборПоставкиТовара/Ext/Form/Module.bsl @@ -0,0 +1,336 @@ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + элементы.СтатусКодаВПоставке.Заголовок=Параметры.СтатусКодаВПоставке; + элементы.Подсказка1.Заголовок=Параметры.Подсказка1; + КодМП=Параметры.КодМП; + ДокументОснование=Параметры.ДокументОснование; + ном=Параметры.ном; + ЕстьПоставка=параметры.ЕстьПоставка; + ЕстьТовар=параметры.ЕстьТовар; + Маркет=параметры.маркет; + НомерПоставкиМП = параметры.НомерПоставкиМП; + КодМаркировки = ""; + Если параметры.Свойство("КодМаркировки") И ЗначениеЗаполнено(параметры.КодМаркировки) + И параметры.КодМаркировки <> "-" Тогда + КодМаркировки = параметры.КодМаркировки; + КонецЕсли; + если ЕстьТовар Тогда + элементы.КодМП.Видимость=ложь; + элементы.НаимНоменклатура.Видимость=Истина; + НаимНоменклатура=ном.Наименование + конецесли; +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) +// Если ЭтаФорма.вводдоступен() Тогда + + // Если отсканировали товар/марку и еще раз — ждём QR поставки + Если Событие="Штрихкод" И ЕстьТовар + И (СтрДлина(Данные)=13 И НЕ СтрНайти(Данные, "-") ИЛИ ЭтоКодМаркировкиПодбор(Данные)) Тогда + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ПолучитьАдресФайла("еррор")); + #КонецЕсли + Сообщить("Отсканируйте QR - код поставки"); + Возврат; + КонецЕсли; + + // Код маркировки после поставки: разбираем как ШК товара и сохраняем Base64 + Если Событие="Штрихкод" И ЕстьПоставка И ЭтоКодМаркировкиПодбор(Данные) Тогда + РезультатРазбора = РазобратьКодМаркировкиПодбор(Данные); + Если Не ЗначениеЗаполнено(РезультатРазбора.ШтрихкодТовара) Тогда + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ПолучитьАдресФайла("еррор")); + #КонецЕсли + Сообщить("Не удалось извлечь ШК из кода маркировки"); + Возврат; + КонецЕсли; + КодМаркировки = РезультатРазбора.КодBase64; + Данные = РезультатРазбора.ШтрихкодТовара; + КонецЕсли; + + Если Маркет="YA" Тогда + // Обрежем штрихкод поставки яндекса + Данные=ПривестиСтрокуВПорядок(Данные, "-"); + postingNumber=Данные; + конецесли; + Если Событие="Штрихкод" И СтрДлина(Данные)=13 И ЕстьПоставка Тогда + РезПоиск=НайтиНомВБазе(Данные, КодМП);// находим товар в базе. Может быть не один // 27.04.2026 + если ЗначениеЗаполнено(РезПоиск) тогда + Если ОпредМаркТовара(РезПоиск) И Не ЗначениеЗаполнено(КодМаркировки) Тогда + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ПолучитьАдресФайла("еррор")); + #КонецЕсли + Сообщить("Это маркированый товар. Отсканируйте марку"); + Возврат; + КонецЕсли; + //структураПоиска=Новый структура(); + //структураПоиска.Вставить("КодМП", КодМП); + //структураПоиска.Вставить("КарточкаМП", номПоиск); + //Рез=НайтиТоварВДокеПоШК(структураПоиска); + //если рез=истина тогда + ПараметрыТов = Новый Структура(); + ПараметрыТов.Вставить("КодМП", КодМП); + ПараметрыТов.Вставить("Номенклатура", РезПоиск); + Если ЗначениеЗаполнено(КодМаркировки) Тогда + ПараметрыТов.Вставить("КодМаркировки", КодМаркировки); + КонецЕсли; + Оповестить("НашлиТоварВПоставке", ПараметрыТов, ЭтаФорма); + ЭтаФорма.Закрыть(); + //иначе + // Оповестить("НЕнашлиТоварВПоставке", , ЭтаФорма); + // ЭтаФорма.Закрыть(); + //Конецесли; + иначе + Оповестить("НЕнашлиТоварВПоставке", , ЭтаФорма); + ЭтаФорма.Закрыть(); + + //#Если МобильноеПриложениеКлиент Тогда + // СредстваМультимедиа.ВоспроизвестиАудио(ПолучитьАдресФайла("еррор")); + //#КонецЕсли + //Сообщить("Не нашли товар в базе"); + конецесли; + ИначеЕсли Событие="Штрихкод" И НЕ СтрДлина(Данные)=13 И ЕстьТовар Тогда + структураПоиска=Новый структура(); + ПараметрыТов = Новый Структура(); + если Маркет="OZ" Тогда + ДанныеОтвета=СинхронизацияУТ.ЗапросДанныеДляМаркетов(ДокументОснование, Данные); + postingNumber=ДанныеОтвета.result.posting_number; + структураПоиска.Вставить("КодМП", postingNumber); + конецесли; + если Маркет="WB" ИЛИ Маркет="FB" Тогда + postingNumber=Данные; + структураПоиска.Вставить("ШтрихкодПоставки", postingNumber); + конецесли; + структураПоиска.Вставить("КарточкаМП", ном); + // Если у нас несколько товаров в одинаковым ШК, то смысла в ном нет + // Значит найдем товар по ШК поставки + ном = НайтиНомПоШКПоставки(postingNumber); + Если ЗначениеЗаполнено(ном) Тогда + структураПоиска.КарточкаМП = ном; + КонецЕсли; + РезПоиска=НайтиТоварВДокеПоШК(структураПоиска); + //если рез=истина тогда + Если РезПоиска=истина Тогда + если НЕ Маркет="WB" ИЛИ НЕ Маркет="FB" Тогда + ПараметрыТов.Вставить("КодМП", postingNumber); + иначе + ПараметрыТов.Вставить("ШтрихкодПоставки", postingNumber); + конецесли; + ПараметрыТов.Вставить("Номенклатура", ном); + Если ЗначениеЗаполнено(КодМаркировки) Тогда + ПараметрыТов.Вставить("КодМаркировки", КодМаркировки); + КонецЕсли; + Оповестить("НашлиТоварВПоставке", ПараметрыТов, ЭтаФорма); + ЭтаФорма.Закрыть(); + иначе + Оповестить("НЕнашлиТоварВПоставке", , ЭтаФорма); + ЭтаФорма.Закрыть(); + конецесли; + конецесли; +КонецПроцедуры + +Функция НайтиНомПоШКПоставки(НомерПоставки) + СсылкиПоставкиМП = ДокументОснование.ПоставкиМП.Выгрузить().ВыгрузитьКолонку("ПоставкаМП"); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПоставкаМПТовары.Количество КАК Количество, + | ПоставкаМПТовары.Отсканировано КАК Отсканировано, + | ПоставкаМПТовары.КодМП КАК КодМП, + | ПоставкаМПТовары.ШтрихкодПоставки КАК ШтрихкодПоставки, + | ПоставкаМПТовары.КарточкаМП.Ссылка КАК КарточкаМП + |ИЗ + | Документ.ПоставкаМП.Товары КАК ПоставкаМПТовары + |ГДЕ + | ПоставкаМПТовары.Ссылка В (&СписокЗначений)"; + Запрос.УстановитьПараметр("СписокЗначений", СсылкиПоставкиМП); + ТоварыНом = Запрос.Выполнить().Выгрузить(); + если НЕ Маркет="WB" Тогда + тов=ТоварыНом.НайтиСтроки(Новый Структура("КодМП", НомерПоставки)); + Иначе + тов=ТоварыНом.НайтиСтроки(Новый Структура("ШтрихкодПоставки", НомерПоставки)); + КонецЕсли; + если тов <> неопределено И тов.Количество() > 0 Тогда + возврат тов[0].КарточкаМП; + конецесли; +КонецФункции + +&НаКлиенте +Функция ЭтоКодМаркировкиПодбор(Знач ДанныеСкана) + + ДанныеСкана = СокрЛП(Строка(ДанныеСкана)); + Если Не ЗначениеЗаполнено(ДанныеСкана) Тогда + Возврат Ложь; + КонецЕсли; + + Если СтрДлина(ДанныеСкана) > 40 И СтрНайти(ДанныеСкана, "=") > 0 + И СтрНайти("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", Лев(ДанныеСкана, 1)) > 0 Тогда + Попытка + Декод = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(ДанныеСкана)); + Если СтрДлина(Декод) > 20 И Лев(Декод, 2) = "01" Тогда + Возврат Истина; + КонецЕсли; + Исключение + КонецПопытки; + КонецЕсли; + + Возврат СтрДлина(ДанныеСкана) > 20 И Лев(ДанныеСкана, 2) = "01"; + +КонецФункции + +&НаКлиенте +Функция РазобратьКодМаркировкиПодбор(Знач ДанныеСкана) + + Результат = Новый Структура("ШтрихкодТовара, КодBase64", "", ""); + СыройКод = СокрЛП(Строка(ДанныеСкана)); + + Если СтрДлина(СыройКод) > 40 И СтрНайти(СыройКод, "=") > 0 Тогда + Попытка + Декод = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(СыройКод)); + Если СтрДлина(Декод) > 20 И Лев(Декод, 2) = "01" Тогда + Результат.КодBase64 = СтрЗаменить(СтрЗаменить(СыройКод, Символы.ПС, ""), Символы.ВК, ""); + СыройКод = Декод; + КонецЕсли; + Исключение + КонецПопытки; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат.КодBase64) Тогда + Код64 = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(СыройКод)); + Код64 = СтрЗаменить(Код64, Символы.ПС, ""); + Код64 = СтрЗаменить(Код64, Символы.ВК, ""); + Результат.КодBase64 = Код64; + КонецЕсли; + + Если Лев(СыройКод, 2) = "01" И СтрДлина(СыройКод) >= 16 Тогда + Гтин14 = Сред(СыройКод, 3, 14); + Если СтрДлина(Гтин14) = 14 Тогда + ШтрихкодТовара = Сред(Гтин14, 2, 13); + Если ЭтоЦифровойШтрихкодПодбор(ШтрихкодТовара) Тогда + Результат.ШтрихкодТовара = ШтрихкодТовара; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат.ШтрихкодТовара) И СтрДлина(СыройКод) >= 16 Тогда + Кандидат = Сред(СыройКод, 4, 13); + Если ЭтоЦифровойШтрихкодПодбор(Кандидат) Тогда + Результат.ШтрихкодТовара = Кандидат; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Функция ЭтоЦифровойШтрихкодПодбор(Знач СтрокаШК) + + СтрокаШК = СокрЛП(Строка(СтрокаШК)); + Если СтрДлина(СтрокаШК) <> 13 Тогда + Возврат Ложь; + КонецЕсли; + Для Индекс = 1 По 13 Цикл + Если СтрНайти("0123456789", Сред(СтрокаШК, Индекс, 1)) = 0 Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + Возврат Истина; + +КонецФункции + +Функция НайтиТоварВДокеПоШК(стрПоиска) + СсылкиПоставкиМП = ДокументОснование.ПоставкиМП.Выгрузить().ВыгрузитьКолонку("ПоставкаМП"); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПоставкаМПТовары.Количество КАК Количество, + | ПоставкаМПТовары.Отсканировано КАК Отсканировано, + | ПоставкаМПТовары.КодМП КАК КодМП, + | ПоставкаМПТовары.ШтрихкодПоставки КАК ШтрихкодПоставки, + | ПоставкаМПТовары.КарточкаМП.Ссылка КАК КарточкаМП + |ИЗ + | Документ.ПоставкаМП.Товары КАК ПоставкаМПТовары + |ГДЕ + | ПоставкаМПТовары.Ссылка В (&СписокЗначений)"; + Запрос.УстановитьПараметр("СписокЗначений", СсылкиПоставкиМП); + ТоварыНом = Запрос.Выполнить().Выгрузить(); + тов=ТоварыНом.НайтиСтроки(стрПоиска); + если тов <> неопределено И тов.Количество() > 0 Тогда + возврат истина; + иначе + возврат ложь; + конецесли; +КонецФункции + +Функция ПривестиСтрокуВПорядок(Строка, СтрокаПоиска) + ДлинаСтрокиПоиска = СтрДлина(СтрокаПоиска)-1; + ПозицияСтрокиПоиска = СтрНайти(Строка, СтрокаПоиска); + если ПозицияСтрокиПоиска=0 тогда возврат Строка; конецесли; + ДлинаСтроки = ПозицияСтрокиПоиска + ДлинаСтрокиПоиска - 1; + НоваяСтрока = Лев(Строка, ДлинаСтроки); + возврат НоваяСтрока; +КонецФункции + +Функция НайтиНомВБазе(штрих, КодМП) + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШтрихкодыУпаковок.Номенклатура.Ссылка КАК НоменклатураСсылка + |ИЗ + | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок + |ГДЕ + | ШтрихкодыУпаковок.Штрихкод = &Штрихкод + | И ТИПЗНАЧЕНИЯ(ШтрихкодыУпаковок.Номенклатура.Ссылка) = ТИП(Справочник.КарточкиМП)"; + + Запрос.УстановитьПараметр("Штрихкод", штрих); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Пока РезультатЗапроса.Следующий() Цикл + Рез=НайтиТоварВДокеПоШК(Новый Структура("КодМП, КарточкаМП", КодМП, РезультатЗапроса.НоменклатураСсылка)); + Если Рез=истина Тогда Возврат РезультатЗапроса.НоменклатураСсылка; Иначе ПродолжитЬ; КонецЕсли; + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШтрихкодыУпаковок.Номенклатура.Ссылка КАК НоменклатураСсылка + |ИЗ + | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок + |ГДЕ + | ШтрихкодыУпаковок.Штрихкод = &Штрихкод + | И ТИПЗНАЧЕНИЯ(ШтрихкодыУпаковок.Номенклатура.Ссылка) = ТИП(Справочник.Номенклатура)"; + + Запрос.УстановитьПараметр("Штрихкод", штрих); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Пока РезультатЗапроса.Следующий() Цикл + Запрос1 = Новый Запрос; + Запрос1.Текст = + "ВЫБРАТЬ + | КарточкиМП.Ссылка КАК Ссылка + |ИЗ + | Справочник.КарточкиМП КАК КарточкиМП + |ГДЕ + | КарточкиМП.Номенклатура = &Номенклатура"; + Запрос1.УстановитьПараметр("Номенклатура", РезультатЗапроса.НоменклатураСсылка); + ВыборкаКарточек = Запрос1.Выполнить().Выбрать(); + Пока ВыборкаКарточек.Следующий() Цикл + Рез = НайтиТоварВДокеПоШК(Новый Структура("КодМП, КарточкаМП", КодМП, ВыборкаКарточек.Ссылка)); + Если Рез = Истина Тогда + Возврат ВыборкаКарточек.Ссылка; + КонецЕсли; + КонецЦикла; + КонецЦикла; + +КонецФункции + +&НаСервереБезКонтекста +Функция ОпредМаркТовара(Товар) + Возврат Товар.МаркировкаМП; +КонецФункции + +&НаСервере +Функция ПолучитьАдресФайла(ТипМакета) + Данные = ПолучитьОбщийМакет(ТипМакета); + Возврат Данные; +КонецФункции diff --git a/Documents/СтикеровкаМП/Forms/ФормаДокумента.xml b/Documents/СтикеровкаМП/Forms/ФормаДокумента.xml new file mode 100644 index 0000000..b73ecdf --- /dev/null +++ b/Documents/СтикеровкаМП/Forms/ФормаДокумента.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаДокумента + + + ru + Форма документа + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/Documents/СтикеровкаМП/Forms/ФормаДокумента/Ext/Form.xml b/Documents/СтикеровкаМП/Forms/ФормаДокумента/Ext/Form.xml new file mode 100644 index 0000000..645af84 --- /dev/null +++ b/Documents/СтикеровкаМП/Forms/ФормаДокумента/Ext/Form.xml @@ -0,0 +1,845 @@ + +
+ DontBlock + false + Vertical + CurrentOrLast + Auto + true + + false + + + + + + + + + ОбработкаОповещения + ПриОткрытии + ПередЗакрытием + ВнешнееСобытие + ПередЗаписьюНаСервере + ПриСозданииНаСервере + + + + ПечататьШКТовара + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Печатать ШК товара</v8:content> + </v8:item> + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Страницы</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары</v8:content> + </v8:item> + + Vertical + false + + + + List + false + true + false + UseHeightInFormRows + SingleRow + Row + false + true + Объект.ТоварыТолькоКоличество + SelectionPresentationAndChoice + + + + false + + + + false + + ТоварыТолькоКоличество + SearchStringRepresentation + + + + + + + ТоварыТолькоКоличество + ViewStatusRepresentation + + + + + + false + + ТоварыТолькоКоличество + SearchControl + + + + + + + + + + Объект.ТоварыТолькоКоличество.КарточкаМП + style:ReportGroup1BackColor + EnterOnInput + true + true + true + true + style:ReportGroup1BackColor + + + + + Объект.ТоварыТолькоКоличество.КодМП + EnterOnInput + true + true + + + + + + + 1 + + + + Объект.ТоварыТолькоКоличество.Количество + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>кол-во</v8:content> + </v8:item> + + Center + EnterOnInput + + CommonPicture.ВнешняяКомпонентаДоступна + false + + Center + Center + true + 1 + true + style:AccentColor + + + + + + Объект.ТоварыТолькоКоличество.Отсканировано + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отсканировано</v8:content> + </v8:item> + + style:ToolTipBackColor + Center + EnterOnInput + Center + Center + true + 1 + true + style:NegativeTextColor + style:ToolTipBackColor + + + + + + + + Объект.ТоварыТолькоКоличество.LineNumber + false + EnterOnInput + true + + + + +
+
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары</v8:content> + </v8:item> + + Vertical + false + + + + List + true + UseHeightInFormRows + Cell + false + ТоварыВирт + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары вирт на форме</v8:content> + </v8:item> + + SelectionPresentationAndChoice + + + + false + + + + + ТоварыВиртНаФорме + SearchStringRepresentation + + + + + + false + + ТоварыВиртНаФорме + ViewStatusRepresentation + + + + + + false + + ТоварыВиртНаФорме + SearchControl + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары вирт на форме группа1</v8:content> + </v8:item> + + + + + ТоварыВирт.КарточкаМП + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Карточка МП</v8:content> + </v8:item> + + EnterOnInput + true + true + UseContentHeight + + + + + ТоварыВирт.КодМП + EnterOnInput + true + 1 + UseContentHeight + + + + + ТоварыВирт.Ячейка + false + true + EnterOnInput + true + + + + + ТоварыВирт.МаркаСтрока + false + EnterOnInput + true + + + + + ТоварыВирт.Номер + false + EnterOnInput + true + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары вирт на форме группа2</v8:content> + </v8:item> + + + + + ТоварыВирт.Количество + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>кол-во</v8:content> + </v8:item> + + Center + EnterOnInput + Center + Center + true + 2 + style:ButtonTextColor + + + + + + ТоварыВирт.Отсканировано + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Скан</v8:content> + </v8:item> + + Center + EnterOnInput + Center + Center + true + 2 + style:SpecialTextColor + + + + + + + +
+
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реквизиты</v8:content> + </v8:item> + + + + ru + Реквизиты + + + Vertical + ItemsRightTitlesLeft + false + + + + Объект.Date + true + EnterOnInput + true + true + + + + + Объект.Партнер + true + EnterOnInput + true + true + true + + + + + Объект.Number + true + EnterOnInput + true + true + + + + + Объект.Статус + EnterOnInput + true + true + + + + + Объект.Автор + true + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коды</v8:content> + </v8:item> + + + + ru + Коды + + + + + + List + true + true + true + true + ТоварыВирт + auto + + + + false + + + + false + + КодыМарк + SearchStringRepresentation + + + + + + false + + КодыМарк + ViewStatusRepresentation + + + + + + false + + КодыМарк + SearchControl + + + + + + + ТоварыВирт.МаркаПредставление + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код маркировки</v8:content> + </v8:item> + + EnterOnInput + true + + + + + ТоварыВирт.МаркаСтрока + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код Base64</v8:content> + </v8:item> + + EnterOnInput + true + true + false + false + + + + +
+
+
+
+
+
+ + + + cfg:DocumentObject.СтикеровкаМП + + true + true + + Объект.RegisterRecords + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отсканировано КМ</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Использовать подключаемое оборудование</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сканирование упаковок</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Удаление КМ</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары вирт</v8:content> + </v8:item> + + + v8:ValueTable + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Карточка МП</v8:content> + </v8:item> + + + cfg:CatalogRef.КарточкиМП + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Количество</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отсканировано</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Any + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код МП</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Штрихкод поставки</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер</v8:content> + </v8:item> + + + xs:string + + 110 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ячейка</v8:content> + </v8:item> + + + xs:string + + 50 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Марка Base64</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код маркировки</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Печатать ШКТовара</v8:content> + </v8:item> + + + xs:boolean + + + + + + + ТоварыНомерСтроки + + + ТоварыНоменклатура + + + ТоварыКоличество + + + ТоварыОтсканировано + + + + + AndGroup + + + Объект.Товары.Количество + Equal + Объект.Товары.Отсканировано + + + Объект.Товары.Отсканировано + Greater + 0 + + + Объект.Товары.Маркируемый + Equal + true + + + + + ЦветФона + #00FF00 + + + + + + + ТоварыНомерСтроки + + + ТоварыНоменклатура + + + ТоварыКоличество + + + ТоварыОтсканировано + + + + + Объект.Товары.Маркируемый + Equal + false + + + + + ЦветФона + #999999 + + + + + + \ No newline at end of file diff --git a/Documents/СтикеровкаМП/Forms/ФормаДокумента/Ext/Form/Module.bsl b/Documents/СтикеровкаМП/Forms/ФормаДокумента/Ext/Form/Module.bsl new file mode 100644 index 0000000..798640e --- /dev/null +++ b/Documents/СтикеровкаМП/Forms/ФормаДокумента/Ext/Form/Module.bsl @@ -0,0 +1,522 @@ +&НаКлиенте +Перем НеВызыватьВС, МаркаТовара; +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + ТекущийОбъект.ТоварыТолькоКоличество.Загрузить(ТоварыВирт.Выгрузить()); +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Объект.ПоставкиМП.Количество() > 0 Тогда + СсылкиПоставкиМП = Объект.ПоставкиМП.Выгрузить().ВыгрузитьКолонку("ПоставкаМП"); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПоставкаМПТовары.Количество КАК Количество, + | ПоставкаМПТовары.Отсканировано КАК Отсканировано, + | ПоставкаМПТовары.КодМП КАК КодМП, + | ПоставкаМПТовары.ШтрихкодПоставки КАК ШтрихкодПоставки, + | ПоставкаМПТовары.КарточкаМП.Ссылка КАК КарточкаМП, + | ПоставкаМПТовары.Ссылка.Номер КАК Номер, + | ПоставкаМПТовары.Ячейка КАК Ячейка + |ИЗ + | Документ.ПоставкаМП.Товары КАК ПоставкаМПТовары + |ГДЕ + | ПоставкаМПТовары.Ссылка В(&СписокЗначений)"; + Запрос.УстановитьПараметр("СписокЗначений", СсылкиПоставкиМП); + ТоварыВирт.Загрузить(Запрос.Выполнить().Выгрузить()); + Для Каждого строка Из ТоварыВирт Цикл + СтруктураПоиска = Новый Структура(); + СтруктураПоиска.Вставить("КарточкаМП", строка.КарточкаМП); + СтруктураПоиска.Вставить("КодМП", строка.КодМП); + ТовКол=Объект.ТоварыТолькоКоличество.НайтиСтроки(СтруктураПоиска); + Если ТовКол <> Неопределено И ТовКол.Количество() > 0 Тогда + строка.Отсканировано = ТовКол[0].Отсканировано; + строка.МаркаСтрока = ТовКол[0].МаркаСтрока; + строка.МаркаПредставление = ПредставлениеКодаМаркировкиНаСервере(ТовКол[0].МаркаСтрока); + КонецЕсли; + КонецЦикла; + КонецЕсли; + ПечататьШКТовара=Истина; +КонецПроцедуры +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) + // Каким то непонятным методом вызывается два раза внешнее событие + // на этой форме из другой формы. сделали через переменную + Если НеВызыватьВС Тогда + НеВызыватьВС = Ложь; + Возврат; + конецесли; + МаркаТовара = Неопределено; + МаркетПлейс=ИдентификаторМаркетПлейса(); + // Это максимальный костыль. При закрытии второй формы не отрабатывает функция ВводДоступен() + // на это форме из Windows клиента. ХЗ почему. Пока работаем так + #Если НЕ МобильноеПриложениеКлиент Тогда + Если ЭтаФорма.ИмяФормы = "Документ.СтикеровкаМП.Форма.ФормаДокумента" Тогда + #Иначе + Если ВводДоступен() тогда + #КонецЕсли + Если Событие="Штрихкод" Тогда // это поставка маркета CODE128 + // Код маркировки (DataMatrix): достаём ШК товара (GTIN→EAN13) и сохраняем КМ в Base64 + Если ЭтоКодМаркировки(Данные) Тогда + РезультатРазбора = РазобратьКодМаркировки(Данные); + Если Не ЗначениеЗаполнено(РезультатРазбора.ШтрихкодТовара) Тогда + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Не удалось извлечь ШК товара из кода маркировки"); + Возврат; + КонецЕсли; + МаркаТовара = РезультатРазбора.КодBase64; + Данные = РезультатРазбора.ШтрихкодТовара; + КонецЕсли; + Если НЕ СтрДлина(Данные)=13 ИЛИ СтрДлина(Данные)=13 И СтрНайти(Данные, "-") > 0 Тогда + // Обрежем штрихкод поставки яндекса + Если МаркетПлейс="YA" Тогда + Данные=ПривестиСтрокуВПорядок(Данные, "-"); + postingNumber=Данные; + тов=ТоварыВирт.НайтиСтроки(новый Структура("КодМП",postingNumber)); + // Отправим запрос по api в ОЗОН для получения поставки + ИначеЕсли МаркетПлейс="OZ" Тогда + ДанныеОтвета=СинхронизацияУТ.ЗапросДанныеДляМаркетов(Объект.Ссылка, Данные); + postingNumber=ДанныеОтвета.result.posting_number; + тов=ТоварыВирт.НайтиСтроки(новый Структура("КодМП",postingNumber)); + ИначеЕсли МаркетПлейс="WB" ИЛИ МаркетПлейс="FB" Тогда + postingNumber=Данные; + тов=ТоварыВирт.НайтиСтроки(новый Структура("ШтрихкодПоставки",postingNumber)); + КонецЕсли; + Если тов <> неопределено И тов.Количество() > 0 Тогда + Если тов[0].Отсканировано= тов[0].Количество тогда + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Данную поставку уже отсканированили"); + возврат; + конецЕсли; + ПараметрыОткрытия=Новый структура(); + ПараметрыОткрытия.Вставить("КодМП", тов[0].КодМП); + ПараметрыОткрытия.Вставить("НомерПоставкиМП", тов[0].Номер); + ПараметрыОткрытия.Вставить("ДокументОснование", Объект.Ссылка); + ПараметрыОткрытия.Вставить("СтатусКодаВПоставке", "Данная поставка найдена в документе"); + ПараметрыОткрытия.Вставить("Подсказка1", "Отсканируйте штрихкод товара в поставке"); + ПараметрыОткрытия.Вставить("ном", неопределено); + ПараметрыОткрытия.Вставить("ЕстьПоставка", Истина); + ПараметрыОткрытия.Вставить("ЕстьТовар", ложь); + ПараметрыОткрытия.Вставить("Маркет", МаркетПлейс); + ФайлЗвука = ПолучитьАдресФайла("ок"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + // СинхронизацияУТ.РаспечататьКодПоставкиНаПринтере(тов[0].КодМП); + ОткрытьФорму("Документ.СтикеровкаМП.Форма.ПодборПоставкиТовара", ПараметрыОткрытия, ЭтаФорма); + иначе + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Данной поставки нет в документе!"); + возврат; + КонецЕсли; + ИначеЕсли СтрДлина(Данные)=13 Тогда + МассивДляПечати = Новый Массив(); + идент = НайтиНомВБазе(Данные); + если идент <> Неопределено Тогда + тов = ТоварыВирт.НайтиПоИдентификатору(идент); + КонецЕсли; + если тов <> неопределено Тогда + Если ОпредМаркТовара(тов.КарточкаМП) И МаркаТовара = Неопределено Тогда + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Это маркированый товар. Отсканируйте марку"); + Возврат; + КонецЕсли; + если тов.Отсканировано= тов.Количество тогда + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Данный товар в поставке уже отсканированили"); + возврат; + конецесли; + ПараметрыОткрытия=Новый структура(); + ПараметрыОткрытия.Вставить("КодМП", "Не определен"); + ПараметрыОткрытия.Вставить("НомерПоставкиМП", тов.Номер); + ПараметрыОткрытия.Вставить("ДокументОснование", Объект.Ссылка); + ПараметрыОткрытия.Вставить("СтатусКодаВПоставке", "Данный товар найден в документе"); + ПараметрыОткрытия.Вставить("Подсказка1", "Отсканируйте qr-код поставки"); + ПараметрыОткрытия.Вставить("ном", тов.КарточкаМП); + ПараметрыОткрытия.Вставить("ЕстьТовар", Истина); + ПараметрыОткрытия.Вставить("Маркет", МаркетПлейс); + ПараметрыОткрытия.Вставить("ЕстьПоставка", ложь); + Если МаркаТовара <> Неопределено Тогда + ПараметрыОткрытия.Вставить("КодМаркировки",МаркаТовара); + КонецЕсли; + ФайлЗвука = ПолучитьАдресФайла("ок"); + СтруктураПечати=Новый Структура; + СтруктураПечати.Вставить("Ссылка",строка(Объект.Ссылка.УникальныйИдентификатор())); + СтруктураПечати.Вставить("ПечататьШКТовара", ПечататьШКТовара); + МассивДляПечати.Добавить(тов.КодМП); + СтруктураПечати.Вставить("СписокКодМП",МассивДляПечати); + Если МаркаТовара <> Неопределено Тогда + СтруктураПечати.Вставить("КодМаркировки",МаркаТовара); + КонецЕсли; + СинхронизацияУТ.РаспечататьКодПоставкиНаПринтере(СтруктураПечати); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + ОткрытьФорму("Документ.СтикеровкаМП.Форма.ПодборПоставкиТовара", ПараметрыОткрытия, ЭтаФорма); + иначе + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + Сообщить("Такого товара нет в документе либо по нему все отсканировали"); + КонецЕсли; + Конецесли; + конецесли; + КонецЕсли; +КонецПроцедуры + +Функция НайтиНомВБазе(штрих) + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШтрихкодыУпаковок.Номенклатура.Ссылка КАК НоменклатураСсылка + |ИЗ + | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок + |ГДЕ + | ШтрихкодыУпаковок.Штрихкод = &Штрихкод + | И ТИПЗНАЧЕНИЯ(ШтрихкодыУпаковок.Номенклатура.Ссылка) = ТИП(Справочник.КарточкиМП)"; + + Запрос.УстановитьПараметр("Штрихкод", штрих); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Если РезультатЗапроса.Количество()>0 Тогда + Для Каждого строка из РезультатЗапроса Цикл + СтрПоиск= Новый Структура(); + СтрПоиск.Вставить("КарточкаМП",строка.НоменклатураСсылка); + СтрПоиск.Вставить("Отсканировано", 0); + тов=ТоварыВирт.НайтиСтроки(СтрПоиск); + Если тов <> неопределено И тов.Количество() > 0 Тогда + возврат тов[0].ПолучитьИдентификатор(); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШтрихкодыУпаковок.Номенклатура.Ссылка КАК НоменклатураСсылка + |ИЗ + | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок + |ГДЕ + | ШтрихкодыУпаковок.Штрихкод = &Штрихкод + | И ТИПЗНАЧЕНИЯ(ШтрихкодыУпаковок.Номенклатура.Ссылка) = ТИП(Справочник.Номенклатура)"; + + Запрос.УстановитьПараметр("Штрихкод", Штрих); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Если РезультатЗапроса.Количество() > 0 Тогда + Запрос1 = Новый Запрос; + Запрос1.Текст = + "ВЫБРАТЬ + | КарточкиМП.Ссылка КАК Ссылка + |ИЗ + | Справочник.КарточкиМП КАК КарточкиМП + |ГДЕ + | КарточкиМП.Номенклатура = &Номенклатура"; + Запрос1.УстановитьПараметр("Номенклатура", РезультатЗапроса[0].НоменклатураСсылка); + РезультатЗапроса1 = Запрос1.Выполнить().Выгрузить(); + Для Каждого строка из РезультатЗапроса1 Цикл + СтрПоиск= Новый Структура(); + СтрПоиск.Вставить("КарточкаМП",строка.Ссылка); + СтрПоиск.Вставить("Отсканировано", 0); + тов=ТоварыВирт.НайтиСтроки(СтрПоиск); + если тов <> неопределено И тов.Количество() > 0 Тогда + Возврат тов[0].ПолучитьИдентификатор(); + КОнецЕсли; + КонецЦикла; + КонецЕсли; +КонецФункции + + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + если ИмяСобытия="НашлиТоварВПоставке" Тогда + НеВызыватьВС=истина; + структураПоиска=Новый структура(); + если Параметр.Свойство("КодМП") Тогда + структураПоиска.Вставить("КодМП", Параметр.КодМП); + КонецЕсли; + если Параметр.Свойство("ШтрихкодПоставки") Тогда + структураПоиска.Вставить("ШтрихкодПоставки", Параметр.ШтрихкодПоставки); + КонецЕсли; + структураПоиска.Вставить("КарточкаМП", Параметр.Номенклатура); + тов=ТоварыВирт.НайтиСтроки(структураПоиска); + Если тов <> неопределено И тов.Количество() > 0 Тогда + Для каждого элемент из тов цикл + если элемент.Отсканировано = элемент.количество Тогда Продолжить; КонецЕсли; + тов[0].Отсканировано= тов[0].Отсканировано + 1; + если Параметр.Свойство("КодМаркировки") И ЗначениеЗаполнено(Параметр.КодМаркировки) + И Параметр.КодМаркировки <> "-" Тогда + тов[0].МаркаСтрока = Параметр.КодМаркировки; + тов[0].МаркаПредставление = ПредставлениеКодаМаркировки(Параметр.КодМаркировки); + КонецЕсли; + Элементы.ТоварыВиртНаФорме.ТекущаяСтрока = тов[0].ПолучитьИдентификатор(); + ФайлЗвука = ПолучитьАдресФайла("ок"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + КонецЦикла; + КонецЕсли; + ИначеЕсли ИмяСобытия="НЕнашлиТоварВПоставке" Тогда + Сообщить("Нет соотвествия товара и поставки в данном документе!"); + НеВызыватьВС=истина; + ФайлЗвука = ПолучитьАдресФайла("еррор"); + #Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); + #КонецЕсли + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ЭтоКодМаркировки(Знач ДанныеСкана) + + ДанныеСкана = СокрЛП(Строка(ДанныеСкана)); + Если Не ЗначениеЗаполнено(ДанныеСкана) Тогда + Возврат Ложь; + КонецЕсли; + + // Уже Base64-строка марки (из печати/повторного скана) + Если СтрДлина(ДанныеСкана) > 40 И СтрНайти(ДанныеСкана, "=") > 0 + И СтрНайти("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", Лев(ДанныеСкана, 1)) > 0 Тогда + Попытка + Декод = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(ДанныеСкана)); + Если СтрДлина(Декод) > 20 И Лев(Декод, 2) = "01" Тогда + Возврат Истина; + КонецЕсли; + Исключение + КонецПопытки; + КонецЕсли; + + Возврат СтрДлина(ДанныеСкана) > 20 И Лев(ДанныеСкана, 2) = "01"; + +КонецФункции + +&НаКлиенте +Функция РазобратьКодМаркировки(Знач ДанныеСкана) + + Результат = Новый Структура("ШтрихкодТовара, КодBase64, Представление", "", "", ""); + ДанныеСкана = СокрЛП(Строка(ДанныеСкана)); + + СыройКод = ДанныеСкана; + // Если пришла уже Base64 — декодируем для разбора GTIN + Если СтрДлина(ДанныеСкана) > 40 И СтрНайти(ДанныеСкана, "=") > 0 Тогда + Попытка + Декод = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(ДанныеСкана)); + Если СтрДлина(Декод) > 20 И Лев(Декод, 2) = "01" Тогда + СыройКод = Декод; + Результат.КодBase64 = СтрЗаменить(СтрЗаменить(ДанныеСкана, Символы.ПС, ""), Символы.ВК, ""); + КонецЕсли; + Исключение + КонецПопытки; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат.КодBase64) Тогда + Результат.КодBase64 = ЗакодироватьМаркуВ64(ПолучитьДвоичныеДанныеИзСтроки(СыройКод)); + КонецЕсли; + + // AI 01 + GTIN-14 → EAN-13 = 13 цифр начиная с позиции 4 (без ведущей цифры GTIN) + Гтин14 = ""; + Если Лев(СыройКод, 2) = "01" И СтрДлина(СыройКод) >= 16 Тогда + Гтин14 = Сред(СыройКод, 3, 14); + КонецЕсли; + + ШтрихкодТовара = ""; + Если СтрДлина(Гтин14) = 14 Тогда + ШтрихкодТовара = Сред(Гтин14, 2, 13); // типичный EAN-13 из GTIN-14 + Если Не ЭтоЦифровойШтрихкод(ШтрихкодТовара) Тогда + ШтрихкодТовара = ""; + КонецЕсли; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ШтрихкодТовара) И СтрДлина(СыройКод) >= 16 Тогда + Кандидат = Сред(СыройКод, 4, 13); + Если ЭтоЦифровойШтрихкод(Кандидат) Тогда + ШтрихкодТовара = Кандидат; + КонецЕсли; + КонецЕсли; + + Результат.ШтрихкодТовара = ШтрихкодТовара; + Результат.Представление = ПредставлениеСырогоКодаМаркировки(СыройКод); + Возврат Результат; + +КонецФункции + +&НаКлиенте +Функция ЭтоЦифровойШтрихкод(Знач СтрокаШК) + + СтрокаШК = СокрЛП(Строка(СтрокаШК)); + Если СтрДлина(СтрокаШК) <> 13 Тогда + Возврат Ложь; + КонецЕсли; + Для Индекс = 1 По 13 Цикл + Если СтрНайти("0123456789", Сред(СтрокаШК, Индекс, 1)) = 0 Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + Возврат Истина; + +КонецФункции + +&НаКлиенте +Функция ПредставлениеСырогоКодаМаркировки(Знач СыройКод) + + Текст = СтрЗаменить(Строка(СыройКод), Символ(29), " "); + Текст = СтрЗаменить(Текст, Символы.ПС, " "); + Текст = СтрЗаменить(Текст, Символы.ВК, " "); + Если СтрДлина(Текст) > 80 Тогда + Возврат Лев(Текст, 77) + "..."; + КонецЕсли; + Возврат Текст; + +КонецФункции + +&НаКлиенте +Функция ПредставлениеКодаМаркировки(Знач КодBase64) + + Если Не ЗначениеЗаполнено(КодBase64) Или КодBase64 = "-" Тогда + Возврат ""; + КонецЕсли; + Попытка + СыройКод = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(КодBase64)); + Возврат ПредставлениеСырогоКодаМаркировки(СыройКод); + Исключение + Возврат Лев(Строка(КодBase64), 40); + КонецПопытки; + +КонецФункции + +&НаКлиенте +Функция ПолучитьШкТовараИзМарки(данные) + // Совместимость: возвращает только ШК, Base64 кладёт в МаркаТовара + РезультатРазбора = РазобратьКодМаркировки(данные); + МаркаТовара = РезультатРазбора.КодBase64; + Возврат РезультатРазбора.ШтрихкодТовара; +КонецФункции + +&НаКлиенте +Функция ЗакодироватьМаркуВ64(ДД) + // Взято из БСП + Base64 = Base64Строка(ДД); + Base64 = СтрЗаменить(Base64, Символы.ПС, ""); + Base64 = СтрЗаменить(Base64, Символы.ВК, ""); + Возврат Base64; +КонецФункции + +&НаСервереБезКонтекста +Функция ПредставлениеКодаМаркировкиНаСервере(Знач КодBase64) + + Если Не ЗначениеЗаполнено(КодBase64) Или КодBase64 = "-" Тогда + Возврат ""; + КонецЕсли; + Попытка + СыройКод = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(КодBase64)); + Текст = СтрЗаменить(Строка(СыройКод), Символ(29), " "); + Текст = СтрЗаменить(Текст, Символы.ПС, " "); + Текст = СтрЗаменить(Текст, Символы.ВК, " "); + Если СтрДлина(Текст) > 80 Тогда + Возврат Лев(Текст, 77) + "..."; + КонецЕсли; + Возврат Текст; + Исключение + Возврат Лев(Строка(КодBase64), 40); + КонецПопытки; + +КонецФункции + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + НеВызыватьВС=ложь; +КонецПроцедуры + +Функция ПривестиСтрокуВПорядок(Строка, СтрокаПоиска) + ДлинаСтрокиПоиска = СтрДлина(СтрокаПоиска)-1; + ПозицияСтрокиПоиска = СтрНайти(Строка, СтрокаПоиска); + если ПозицияСтрокиПоиска=0 тогда возврат Строка; конецесли; + ДлинаСтроки = ПозицияСтрокиПоиска + ДлинаСтрокиПоиска - 1; + НоваяСтрока = Лев(Строка, ДлинаСтроки); + возврат НоваяСтрока; +КонецФункции + +&НаСервере +Функция ПолучитьАдресФайла(ТипМакета) + Данные = ПолучитьОбщийМакет(ТипМакета); + Возврат Данные; +КонецФункции + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + Если НЕ Объект.Проведен Тогда + //Если ОбъектМодифицирован(Объект.Ссылка) Тогда + // Сообщить("Сохраните документ!"); + // Отказ=Истина; + //КонецЕсли; + КонецЕсли +КонецПроцедуры + +Функция ОбъектМодифицирован(СсылкаОбъект, ПроверятьТабличныеЧасти = Истина, ПроверятьСтандартные = Истина) + Объект.ТоварыТолькоКоличество.Загрузить(ТоварыВирт.Выгрузить()); + Ссылка = СсылкаОбъект; + Метаданное = СсылкаОбъект.Метаданные(); + + Для каждого Реквизит из Метаданное.Реквизиты Цикл + Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Если ПроверятьСтандартные Тогда + Для каждого Реквизит из Метаданное.СтандартныеРеквизиты Цикл + Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + + Если ПроверятьТабличныеЧасти Тогда + Для каждого ТЧ из Метаданное.ТабличныеЧасти Цикл + + Если Объект[ТЧ.Имя].Количество() <> Ссылка[ТЧ.Имя].Количество() Тогда + Возврат Истина; + КонецЕсли; + + Для Индекс = 0 по Объект[ТЧ.Имя].Количество()-1 Цикл + ОбъектСтрокаТЧ = Объект[ТЧ.Имя][Индекс]; + СсылкаСтрокаТЧ = Ссылка[ТЧ.Имя][Индекс]; + Для каждого РеквизитТЧ из ТЧ.Реквизиты Цикл + Если ОбъектСтрокаТЧ[РеквизитТЧ.Имя] <> СсылкаСтрокаТЧ[РеквизитТЧ.Имя] Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + КонецЦикла; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +&НаСервере +Функция ИдентификаторМаркетПлейса() + МК=Лев(Объект.ПоставкиМП[0].ПоставкаМП.Номер, 2); + возврат МК; +КонецФункции + +Функция ОпредМаркТовара(Товар) + Возврат Товар.МаркировкаМП; +КонецФункции \ No newline at end of file diff --git a/Enums/ВидДокументаУдостоверяющегоЛичностьККТ.xml b/Enums/ВидДокументаУдостоверяющегоЛичностьККТ.xml new file mode 100644 index 0000000..237fd28 --- /dev/null +++ b/Enums/ВидДокументаУдостоверяющегоЛичностьККТ.xml @@ -0,0 +1,281 @@ + + + + + + 12a231fd-cfd6-4a40-b3b8-0ee0e33d6d7b + 6210c732-d388-4460-820a-cfcc5da87d97 + + + f53ccc86-6f90-46d5-a2fa-40c63e77724b + 03711d67-3613-4b75-a6db-e208d7f33b72 + + + f7769a3e-6c24-46d8-be4e-26424c9924b7 + 03aa74da-41b0-4a4c-8802-edd6f4779291 + + + + ВидДокументаУдостоверяющегоЛичностьККТ + + + ru + Вид документа удостоверяющего личность ККТ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ПаспортГражданинаРФ + + + ru + Паспорт гражданина Российской Федерации + + + Паспорт гражданина Российской Федерации + auto + + + + + ПаспортГражданинаРФЗаПределамиРФ + + + ru + Паспорт гражданина Российской Федерации за пределами Российской Федерации + + + Паспорт гражданина Российской Федерации, дипломатический паспорт, служебный паспорт, удостоверяющие личность гражданина Российской Федерации за пределами Российской Федерации + auto + + + + + ВременноеУдостоверениеЛичностиГражданинаРФ + + + ru + Временное удостоверение личности гражданина Российской Федерации + + + Временное удостоверение личности гражданина Российской Федерации, выдаваемое на период оформления паспорта гражданина Российской Федерации + auto + + + + + СвидетельствоОРожденииГражданинаРФ + + + ru + Свидетельство о рождении гражданина Российской Федерации + + + Свидетельство о рождении гражданина Российской Федерации (для граждан Российской Федерации в возрасте до 14 лет) + auto + + + + + ИныеДокументыУдостоверяющиеЛичностьГражданинаРФ + + + ru + Иные документы удостоверяющие личность гражданина Российской Федерации + + + Иные документы, признаваемые документами, удостоверяющими личность гражданина Российской Федерации в соответствии с законодательством Российской Федерации + auto + + + + + ПаспортИностранногоГражданина + + + ru + Паспорт иностранного гражданина + + + Паспорт иностранного гражданина + auto + + + + + ИныеДокументыУдостоверяющимиЛичностьИностранногоГражданина + + + ru + Иные документы удостоверяющими личность иностранного гражданина + + + Иные документы, признаваемые документами, удостоверяющими личность иностранного гражданина в соответствии с законодательством Российской Федерации и международным договором Российской Федерации + auto + + + + + ДокументВыданныйИностраннымГосударствомУдостоверяющегоЛичностьБезГражданства + + + ru + Документ выданный иностранным государством удостоверяющего личность лица без гражданства. + + + Документ, выданный иностранным государством и признаваемый в соответствии с международным договором Российской Федерации в качестве документа, удостоверяющего личность лица без гражданства. + auto + + + + + ВидНаЖительствоДляЛицБезГражданства + + + ru + Вид на жительство (для лиц без гражданства) + + + Вид на жительство (для лиц без гражданства) + auto + + + + + РазрешениеНаВременноеПроживаниеДляЛицБезГражданства + + + ru + Разрешение на временное проживание (для лиц без гражданства) + + + Разрешение на временное проживание (для лиц без гражданства) + auto + + + + + СвидетельствоОРасХодатайстваОПризнанииЛицаБезГражданстваБеженцемНаТерриторииРФ + + + ru + Свидетельство о рассмотрении ходатайства о признании лица без гражданства беженцем на территории Российской Федерации + + + Свидетельство о рассмотрении ходатайства о признании лица без гражданства беженцем на территории Российской Федерации по существу + auto + + + + + УдостоверениеБеженца + + + ru + Удостоверение беженца + + + Удостоверение беженца + auto + + + + + ИныеДокументыУдостоверяющимиЛичностьЛицБезГражданстваРФ + + + ru + Иные документы удостоверяющими личность лиц без гражданства Российской Федерации + + + Иные документы, признаваемые документами, удостоверяющими личность лиц без гражданства в соответствии с законодательством Российской Федерации и международным договором Российской Федерации + auto + + + + + ДокументУдостовЛичностьЛицаНаПериодРассмотренияЗаявленияОПризнанииГражданиномРФ + + + ru + Документ, удостоверяющий личность лица, не имеющего действительного документа, на период рассмотрения заявления о признании гражданином Российской Федерации + + + Документ, удостоверяющий личность лица, не имеющего действительного документа, удостоверяющего личность, на период рассмотрения заявления о признании гражданином Российской Федерации или о приеме в гражданство Российской Федерации + auto + + + + + \ No newline at end of file diff --git a/Enums/ВидОплатыНаТерминале.xml b/Enums/ВидОплатыНаТерминале.xml new file mode 100644 index 0000000..d27eb0e --- /dev/null +++ b/Enums/ВидОплатыНаТерминале.xml @@ -0,0 +1,138 @@ + + + + + + 2dee9170-7539-4ce1-af95-ba6091f7e3df + b54b1857-1ca8-4d7c-96e5-9304d398df48 + + + b7f06d09-31da-431b-a6f7-8a65e8bbca83 + b426fad9-63f9-459f-bb64-60407e93e1bf + + + 8260bdbc-4c49-4e58-ad7b-a5c8ef74ac2f + 9f3621ab-f224-4f6e-b72a-785d90c1961c + + + + ВидОплатыНаТерминале + + + ru + Вид оплаты на терминале + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Карта + + + ru + Карта + + + + auto + + + + + СБПQR + + + ru + СБПQR + + + + auto + + + + + ПлатиQR + + + ru + Плати QR + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ВидыМаркированнойПродукцииБПО.xml b/Enums/ВидыМаркированнойПродукцииБПО.xml new file mode 100644 index 0000000..372b777 --- /dev/null +++ b/Enums/ВидыМаркированнойПродукцииБПО.xml @@ -0,0 +1,632 @@ + + + + + + 60082310-8c2d-4f49-ba7b-bff72134b60b + ec60d726-8e57-430c-b039-fbe63a6fc899 + + + 4e70b132-9b9e-450c-b6f3-66d5056f1f2f + 1738992f-a6c6-46df-ba2a-da2c206e8b2a + + + efbaeba9-885b-402d-927e-a17bc365cc7c + 6580b87c-e997-47ad-b29e-5f63c85c06fa + + + + ВидыМаркированнойПродукцииБПО + + + ru + Виды маркированной продукции БПО + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ИзделияИзМеха + + + ru + Изделия из меха + + + + auto + + + + + Табак + + + ru + Табачная продукция + + + + auto + + + + + Обувь + + + ru + Обувная продукция + + + + auto + + + + + ЛегкаяПромышленность + + + ru + Товары легкой промышленности и одежда + + + + auto + + + + + МолочнаяПродукция + + + ru + Молоко и молочная продукция + + + + auto + + + + + Шины + + + ru + Шины и автопокрышки + + + + auto + + + + + Фотоаппараты + + + ru + Фотокамеры и лампы-вспышки + + + + auto + + + + + Духи + + + ru + Духи и туалетная вода + + + + auto + + + + + Велосипеды + + + ru + Велосипеды + + + + auto + + + + + КреслаКоляски + + + ru + Кресла-коляски + + + + auto + + + + + АльтернативныйТабак + + + ru + Альтернативный табак + + + + auto + + + + + УпакованнаяВода + + + ru + Упакованная вода + + + + auto + + + + + Антисептики + + + ru + Антисептики + + + + auto + + + + + БАДы + + + ru + БАДы + + + + auto + + + + + НикотиносодержащаяПродукция + + + ru + Никотиносодержащая продукция + + + + auto + + + + + Пиво + + + ru + Пиво + + + + auto + + + + + СоковаяПродукция + + + ru + Соковая продукция + + + + auto + + + + + БезалкогольноеПиво + + + ru + Безалкогольное пиво + + + + auto + + + + + Морепродукты + + + ru + Морепродукты + + + + auto + + + + + РазливноеПиво + + + ru + Разливное пиво + + + + auto + + + + + ВетеринарныеПрепараты + + + ru + Ветеринарные препараты + + + + auto + + + + + ИгрыИИгрушкиДляДетей + + + ru + Игры и игрушки для детей + + + + auto + + + + + РадиоэлектроннаяПродукция + + + ru + Радиоэлектронная продукция + + + + auto + + + + + ТитановаяМеталлопродукция + + + ru + Титановая металлопродукция + + + + auto + + + + + РастительныеМасла + + + ru + Растительные масла + + + + auto + + + + + ОптоволокноИОптоволоконнаяПродукция + + + ru + Оптоволокно и оптоволоконная продукция + + + + auto + + + + + ПарфюмерныеИКосметическиеСредстваИБытоваяХимия + + + ru + Парфюмерные и косметические средства и бытовая химия + + + + auto + + + + + КормаДляЖивотных + + + ru + Корма для животных + + + + auto + + + + + Мясо + + + ru + Мясо + + + + auto + + + + + ПечатнаяПродукция + + + ru + Печатная продукция + + + + auto + + + + + СтроительныеМатериалы + + + ru + Строительные материалы + + + + auto + + + + + ОтопительныеПриборы + + + ru + Отопительные приборы + + + + auto + + + + + Бакалея + + + ru + Бакалея + + + + auto + + + + + ТелефоныИНоутбуки + + + ru + Телефоны и ноутбуки + + + + auto + + + + + ПиротехническиеИзделияИСредстваПожарнойБезопасности + + + ru + Пиротехнические изделия и средства пожарной безопасности + + + + auto + + + + + КабельнаяПродукция + + + ru + Кабельная продукция + + + + auto + + + + + МоторныеМасла + + + ru + Моторные масла + + + + auto + + + + + БезалкогольныеНапитки + + + ru + Безалкогольные напитки + + + + auto + + + + + ТехническиеСредстваРеабилитации + + + ru + Технические средства реабилитации + + + + auto + + + + + МедицинскиеИзделия + + + ru + Медицинские изделия + + + + auto + + + + + КонсервированнаяПродукция + + + ru + Консервированная продукция + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ВидыОперацийИзмененияСостоянияФН.xml b/Enums/ВидыОперацийИзмененияСостоянияФН.xml new file mode 100644 index 0000000..89b2182 --- /dev/null +++ b/Enums/ВидыОперацийИзмененияСостоянияФН.xml @@ -0,0 +1,138 @@ + + + + + + 596c362d-1af4-4d6d-a5a4-67dd1ef6ea1e + ec52eb5f-654f-4481-b60b-3238cd14fb2e + + + a2507258-43f0-46e5-8095-f0f72beb6832 + 7247dcd4-c54a-4d0d-9a79-e33bfc85a1ff + + + ef21e4e6-5772-49ff-a745-67a0b4bd2f74 + 87bc7045-d3ff-47b3-835e-f2a2a02c3563 + + + + ВидыОперацийИзмененияСостоянияФН + + + ru + Виды операций изменения состояния ФН + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Регистрация + + + ru + Регистрация фискального накопителя + + + + auto + + + + + ИзменениеПараметровРегистрации + + + ru + Изменение параметров регистрации + + + + auto + + + + + Закрытие + + + ru + Закрытие фискального накопителя + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ВидыОперацийПеремещенияПоЯчейкам.xml b/Enums/ВидыОперацийПеремещенияПоЯчейкам.xml new file mode 100644 index 0000000..fad6226 --- /dev/null +++ b/Enums/ВидыОперацийПеремещенияПоЯчейкам.xml @@ -0,0 +1,69 @@ + + + + + + 69aa57a5-b5a9-4c1f-9daf-625fa836e811 + d91d7b9a-a438-45d0-a7d9-26f4eadc6b51 + + + b08b013d-53fa-4300-9dde-334e166f81e6 + 11d9f4f8-74b4-43a5-96f2-7556be7c4467 + + + cc6a8727-bdc7-4d44-a396-2d6068a29753 + 825d8437-671a-472b-8f65-845beb2e7593 + + + + ВидыОперацийПеремещенияПоЯчейкам + + + ru + Виды операций перемещения по ячейкам + + + + false + + true + BothWays + + + + + + + + Auto + + + + + ИзОднойВНесколько + + + ru + Из одной в несколько + + + + auto + + + + + ИзНесколькихВОдну + + + ru + Из нескольких в одну + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ВидыПродукцииИС.xml b/Enums/ВидыПродукцииИС.xml new file mode 100644 index 0000000..6ac7b97 --- /dev/null +++ b/Enums/ВидыПродукцииИС.xml @@ -0,0 +1,892 @@ + + + + + + 559d9fb8-ee4a-4dd9-9b55-06e316e3af60 + 99fb91cc-37fd-486b-bd5f-8120d527d73c + + + 9fe0cd38-96e8-46f9-99ea-7210df721bbb + 255b33df-f613-4734-9ee1-13854ab4f8bd + + + 1610d7c0-458f-4b07-994c-647092a806ee + ebe9c99e-36b6-48a6-90f5-b4b0787ff99f + + + + ВидыПродукцииИС + + + ru + Виды продукции ИС + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Алкогольная + + + ru + Алкогольная продукция + + + + auto + + + + + Табак + + + ru + Табачная продукция + + + + auto + + + + + Обувь + + + ru + Обувная продукция + + + + auto + + + + + ЛегкаяПромышленность + + + ru + Товары легкой промышленности и одежда + + + + auto + + + + + МолочнаяПродукцияПодконтрольнаяВЕТИС + + + ru + Молоко и молочная продукция + + + + auto + + + + + Шины + + + ru + Шины и автопокрышки + + + + auto + + + + + Фотоаппараты + + + ru + Фотокамеры и лампы-вспышки + + + + auto + + + + + Духи + + + ru + Духи и туалетная вода + + + + auto + + + + + Велосипеды + + + ru + Велосипеды + + + + auto + + + + + КреслаКоляски + + + ru + Кресла-коляски + + + + auto + + + + + АльтернативныйТабак + + + ru + Альтернативная табачная продукция + + + + auto + + + + + УпакованнаяВода + + + ru + Упакованная вода + + + + auto + + + + + МолочнаяПродукцияБезВЕТИС + + + ru + Молоко и молочная продукция (без ВетИС) + + + + auto + + + + + Антисептики + + + ru + Антисептики + + + + auto + + + + + БАДы + + + ru + БАДы + + + + auto + + + + + НикотиносодержащаяПродукция + + + ru + Никотиносодержащая продукция + + + + auto + + + + + Пиво + + + ru + Пиво в кегах + + + + auto + + + + + ПродукцияИзНатуральногоМеха + + + ru + Товары из натурального меха + + + + auto + + + + + Зерно + + + ru + Зерно + + + + auto + + + + + ПродуктыПереработкиЗерна + + + ru + Продукты переработки зерна + + + + auto + + + + + СоковаяПродукция + + + ru + Соковая продукция + + + + auto + + + + + БезалкогольноеПиво + + + ru + Безалкогольное пиво + + + + auto + + + + + ПодконтрольнаяПродукцияВЕТИС + + + ru + Подконтрольная продукция ВЕТИС + + + + auto + + + + + МорепродуктыПодконтрольныеВЕТИС + + + ru + Морепродукты + + + + auto + + + + + ПодконтрольнаяПродукцияСАТУРН + + + ru + Подконтрольная продукция ФГИС "Сатурн" + + + + auto + + + + + ЗерноВЕТИС + + + ru + Зерно, подконтрольное ВетИС (фуражное зерно) + + + + auto + + + + + ПродуктыПереработкиЗернаВЕТИС + + + ru + Продукты переработки зерна, подконтрольные ВетИС + + + + auto + + + + + КормаДляЖивотныхПодконтрольныеВЕТИС + + + ru + Корма для животных - сухие + + + + auto + + + + + МясоПодконтрольноеВЕТИС + + + ru + Мясо + + + + auto + + + + + ВетеринарныеПрепараты + + + ru + Ветеринарные препараты + + + + auto + + + + + ИгрыИИгрушкиДляДетей + + + ru + Игры и игрушки для детей + + + + auto + + + + + РадиоэлектроннаяПродукция + + + ru + Радиоэлектронная продукция + + + + auto + + + + + ТитановаяМеталлопродукция + + + ru + Титановая металлопродукция + + + + auto + + + + + КонсервированнаяПродукцияПодконтрольнаяВЕТИС + + + ru + Консервированная продукция + + + + auto + + + + + РастительныеМасла + + + ru + Растительные масла + + + + auto + + + + + ОптоволокноИОптоволоконнаяПродукция + + + ru + Оптоволокно и оптоволоконная продукция + + + + auto + + + + + ПарфюмерныеИКосметическиеСредстваИБытоваяХимия + + + ru + Парфюмерные и косметические средства и бытовая химия + + + + auto + + + + + КормаДляЖивотныхБезВЕТИС + + + ru + Корма для животных - сухие (без ВетИС) + + + + auto + + + + + КонсервированнаяПродукцияБезВЕТИС + + + ru + Консервированная продукция (без ВетИС) + + + + auto + + + + + ПечатнаяПродукция + + + ru + Печатная продукция + + + + auto + + + + + СтроительныеМатериалы + + + ru + Строительные материалы + + + + auto + + + + + ОтопительныеПриборы + + + ru + Отопительные приборы + + + + auto + + + + + Бакалея + + + ru + Бакалея + + + + auto + + + + + АлкогольнаяПродукцияДо9Процентов + + + ru + Алкогольная продукция до 9% + + + + auto + + + + + ТелефоныИНоутбуки + + + ru + Телефоны и ноутбуки + + + + auto + + + + + ПиротехническиеИзделияИСредстваПожарнойБезопасности + + + ru + Пиротехнические изделия и средства пожарной безопасности + + + + auto + + + + + КабельнаяПродукция + + + ru + Кабельная продукция + + + + auto + + + + + МоторныеМасла + + + ru + Моторные масла + + + + auto + + + + + БезалкогольныеНапитки + + + ru + Безалкогольные напитки + + + + auto + + + + + ПивоВПотребительскихУпаковках + + + ru + Пиво в потребительских упаковках + + + + auto + + + + + ТехническиеСредстваРеабилитации + + + ru + Технические средства реабилитации + + + + auto + + + + + МедицинскиеИзделия + + + ru + Медицинские изделия + + + + auto + + + + + МедицинскиеИзделия20 + + + ru + Медицинские изделия 2.0 + + + + auto + + + + + ЛегкаяПромышленность2025 + + + ru + Товары легкой промышленности и одежда 2025 + + + + auto + + + + + КормаДляЖивотныхВлажныеПодконтрольныеВЕТИС + + + ru + Корма для животных - влажные + + + + auto + + + + + КормаДляЖивотныхВлажныеБезВЕТИС + + + ru + Корма для животных - влажные (без ВетИС) + + + + auto + + + + + ПолимерныеТрубы + + + ru + Полимерные трубы + + + + auto + + + + + СладостиИКондитерскиеИзделия + + + ru + Сладости и кондитерские изделия + + + + auto + + + + + ПечатныеПлаты + + + ru + Печатные платы + + + + auto + + + + + ДезинфицирующиеСредства + + + ru + Дезинфицирующие средства + + + + auto + + + + + БАДы2025 + + + ru + БАДы 2.0 + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ВидыПродукцииИС/Ext/ManagerModule.bsl b/Enums/ВидыПродукцииИС/Ext/ManagerModule.bsl new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Enums/ВидыПродукцииИС/Ext/ManagerModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Enums/ВидыУпаковокИС.xml b/Enums/ВидыУпаковокИС.xml new file mode 100644 index 0000000..027bf70 --- /dev/null +++ b/Enums/ВидыУпаковокИС.xml @@ -0,0 +1,203 @@ + + + + + + 1206e3cb-da1a-4091-8815-ea0807024b51 + 6c0468b5-ec29-4bb7-8a0c-595b970fb4af + + + f5c3658f-ea97-469f-9aa2-031d1a1b3f4c + ed2eb22b-1a50-4889-9f89-9fff6e6d7d82 + + + bef9ccf2-26ab-4b2b-b063-348b16021ff2 + abdef212-d15e-426c-98c0-0a14f91f9458 + + + + ВидыУпаковокИС + + + ru + Виды упаковок ИС + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Логистическая + + + ru + Логистическая + + + + auto + + + + + Групповая + + + ru + Групповая + + + + auto + + + + + Потребительская + + + ru + Потребительская + + + + auto + + + + + Неопределен + + + ru + Неопределен + + + + auto + + + + + АкцизнаяМаркаСНомеромИСерией + + + ru + Акцизная марка с номером и серией + + + + auto + + + + + АгрегированныйТаможенныйКод + + + ru + Агрегированный таможенный код + + + + auto + + + + + Набор + + + ru + Набор + + + + auto + + + + + ОбъемноСортовойУчет + + + ru + Объемно сортовой учет + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/МераКоличестваПредметаРасчетаККТ.xml b/Enums/МераКоличестваПредметаРасчетаККТ.xml new file mode 100644 index 0000000..c93709a --- /dev/null +++ b/Enums/МераКоличестваПредметаРасчетаККТ.xml @@ -0,0 +1,411 @@ + + + + + + 40a1ab04-4975-4238-9859-912d89b12e76 + ee640683-5664-41cf-aff4-e83c803b22fd + + + 87f44d56-da9d-4799-a59a-b4e8b681172a + 13b44e1e-67bb-44ab-9deb-14ddc5613ef3 + + + b8cdb7e0-7d89-4e5e-8ae7-9319ff9c6700 + c6055d28-73fd-481c-bc59-c149ce882758 + + + + МераКоличестваПредметаРасчетаККТ + + + ru + Мера количества предмета расчета ККТ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Штука + + + ru + Штука + + + + auto + + + + + Грамм + + + ru + Грамм + + + + auto + + + + + Килограмм + + + ru + Килограмм + + + + auto + + + + + Тонна + + + ru + Тонна + + + + auto + + + + + Сантиметр + + + ru + Сантиметр + + + + auto + + + + + Дециметр + + + ru + Дециметр + + + + auto + + + + + Метр + + + ru + Метр + + + + auto + + + + + КвадратныйСантиметр + + + ru + Квадратный сантиметр + + + + auto + + + + + КвадратныйДециметр + + + ru + Квадратный дециметр + + + + auto + + + + + КвадратныйМетр + + + ru + Квадратный метр + + + + auto + + + + + Миллилитр + + + ru + Миллилитр + + + + auto + + + + + Литр + + + ru + Литр + + + + auto + + + + + КубическийМетр + + + ru + Кубический метр + + + + auto + + + + + КиловаттЧас + + + ru + Киловатт час + + + + auto + + + + + Гигакалория + + + ru + Гигакалория + + + + auto + + + + + СуткиДень + + + ru + Сутки (день) + + + + auto + + + + + Час + + + ru + Час + + + + auto + + + + + Минута + + + ru + Минута + + + + auto + + + + + Секунда + + + ru + Секунда + + + + auto + + + + + Килобайт + + + ru + Килобайт + + + + auto + + + + + Мегабайт + + + ru + Мегабайт + + + + auto + + + + + Гигабайт + + + ru + Гигабайт + + + + auto + + + + + Терабайт + + + ru + Терабайт + + + + auto + + + + + ИныеЕдиницыИзмерения + + + ru + Иные единицы измерения + + + Применяется при использовании иных единиц измерения + auto + + + + + \ No newline at end of file diff --git a/Enums/ОбработчикиДрайверовПодключаемогоОборудования.xml b/Enums/ОбработчикиДрайверовПодключаемогоОборудования.xml new file mode 100644 index 0000000..8f3c1bb --- /dev/null +++ b/Enums/ОбработчикиДрайверовПодключаемогоОборудования.xml @@ -0,0 +1,1724 @@ + + + + + + 13ca54dc-661e-4d33-87e6-379ab1bb2795 + 22deeab2-3e23-4216-9c60-9a6c494c48a0 + + + 7242cda7-90ea-4bbb-9ac4-6ec71e0db66b + ee48b23b-8e4a-483d-a67e-ba7a948b30da + + + 9fa4c828-ad08-4797-af64-850d29346285 + 9a74034a-2fca-45e2-8c75-114e6f9728a9 + + + + ОбработчикиДрайверовПодключаемогоОборудования + + + ru + Обработчики драйверов подключаемого оборудования + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Обработчик1СWebСервисОборудование + + + ru + 1С:Web-сервис оборудование + + + Web-сервис оборудование + auto + + + + + Обработчик1СДисплейПокупателя + + + ru + 1С:Дисплей покупателя + + + ДисплейПокупателя + auto + + + + + Обработчик1СККМED + + + ru + 1С:ККМ ED + + + ККМОфлайн + auto + + + + + Обработчик1СККМOffline + + + ru + 1С:Офлайн-оборудование + + + ККМОфлайн + auto + + + + + Обработчик1СПринтерЧеков + + + ru + 1С:Принтер чеков + + + ПринтерЧеков + auto + + + + + Обработчик1СРарусДисплеиПокупателя + + + ru + 1С-Рарус:Дисплеи покупателя + + + ДисплейПокупателя + auto + + + + + Обработчик1СРарусФискальныеРегистраторыМебиус + + + ru + 1С-Рарус:Фискальные регистраторы Мебиус + + + ФискальныйРегистратор + auto + + + + + Обработчик1СРарусФискальныеРегистраторыФеликс + + + ru + 1С-Рарус:Фискальные регистраторы Феликс + + + ФискальныйРегистратор + auto + + + + + Обработчик1ССканерыШтрихкода + + + ru + 1С:Сканеры штрихкода (COM) + + + СканерШтрихкода + auto + + + + + Обработчик1ССканерыШтрихкодаNative + + + ru + 1С:Сканеры штрихкода (NativeApi) + + + СканерШтрихкода + auto + + + + + Обработчик1ССчитывателиМагнитныхКарт + + + ru + 1С:Считыватели магнитных карт (COM) + + + СчитывательМагнитныхКарт + auto + + + + + Обработчик1ССчитывателиМагнитныхКартNative + + + ru + 1С:Считыватели магнитных карт (NativeApi) + + + СчитывательМагнитныхКарт + auto + + + + + Обработчик1СФискальныйРегистраторЭмулятор + + + ru + 1С:Фискальный регистратор (эмулятор) + + + ФискальныйРегистратор + auto + + + + + Обработчик1СЭвоторККМOffline + + + ru + 1С:Эвотор Офлайн + + + ККМОфлайн + auto + + + + + Обработчик1СЭквайринговыеТерминалыСбербанк + + + ru + 1С:Эквайринговые терминалы Сбербанк + + + ЭквайринговыйТерминал + auto + + + + + Обработчик1СЭквайринговыеТерминалыСбербанк2х + + + ru + 1С:Эквайринговые терминалы Сбербанк 2.Х + + + ЭквайринговыйТерминал + auto + + + + + Обработчик1СЭлектронныеВесы + + + ru + 1С:Электронные весы (NativeApi) + + + ЭлектронныеВесы + auto + + + + + ОбработчикACOMВесыСПечатьюЭтикеток + + + ru + ACOM:Весы с печатью этикеток + + + ВесыСПечатьюЭтикеток + auto + + + + + ОбработчикARCUS2ЭквайринговыеТерминалыIngenico + + + ru + ARCUS2:Эквайринговые терминалы Ingenico + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикARSККТ54ФЗ + + + ru + ars:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + ОбработчикBizerbaВесыСПечатьюЭтикеток + + + ru + Bizerba: Драйвер весов с печатью этикеток + + + ВесыСПечатьюЭтикеток + auto + + + + + ОбработчикCASВесыСПечатьюЭтикеток + + + ru + CAS:Весы с печатью этикеток + + + ВесыСПечатьюЭтикеток + auto + + + + + ОбработчикCASЭлектронныеВесы + + + ru + CAS:Электронные весы + + + ЭлектронныеВесы + auto + + + + + ОбработчикCASЭлектронныеВесы2х + + + ru + CAS:Электронные весы 2.х + + + ЭлектронныеВесы + auto + + + + + ОбработчикERFIDСчитывательRFID + + + ru + ERFID:Считыватель RFID + + + Считыватель RFID + auto + + + + + ОбработчикFITККТ54ФЗ + + + ru + FIT:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + ОбработчикIboxProПоддержкаMPosЭквайринга + + + ru + iboxPro:Поддержка mPos эквайринга + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикIronLogicСчитывателиБесконтактныхКарт + + + ru + IronLogic:Считыватели бесконтактных карт Z-2 + + + СчитывательМагнитныхКарт + auto + + + + + ОбработчикISBCСчитывательRFID + + + ru + ISBC:Считыватель RFID + + + Считыватель RFID + auto + + + + + ОбработчикMPos2canЭквайринг + + + ru + mPos2can:Поддержка 2can эквайринга + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикMSTARККТ54ФЗ + + + ru + MSTAR:ККТ с передачей данных в ОФД (ФФД 1.2) + + + ККТ + auto + + + + + ОбработчикNEWTONККТ54ФЗ + + + ru + NEWTON:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + ОбработчикPOSUAДисплеиПокупателя + + + ru + POSUA:Дисплеи покупателя + + + ДисплейПокупателя + auto + + + + + ОбработчикRightScanТерминалыСбораДанных + + + ru + RightScan:Терминалы сбора данных (ПО RS:Mobile ACS) + + + ТерминалСбораДанных + auto + + + + + ОбработчикSKAM1CЭквайринговыеСистемы + + + ru + SKAM-1C: Эквайринговые системы + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикSKAMUNIPOSЭквайринговыеСистемы + + + ru + SKAM-UNIPOS:Эквайринговое решение СофтКейс + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикSkyPOSЭквайринговыеТерминалы + + + ru + SkyPOS:Эквайринговые терминалы + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикTRPOSЭквайринговыеТерминалы + + + ru + TRPOS:Эквайринговые терминалы + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикUCSEFTPOSЭквайринговыеТерминалы + + + ru + UCS-AT:Эквайринговые терминалы + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикWNJIККТ54ФЗ + + + ru + WNJI:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + ОбработчикАТОЛВесыСПечатьюЭтикеток8X + + + ru + АТОЛ:Весы c печатью этикеток 8.X + + + ВесыСПечатьюЭтикеток + auto + + + + + ОбработчикАтолДисплеиПокупателя + + + ru + АТОЛ:Дисплеи покупателя + + + ДисплейПокупателя + auto + + + + + ОбработчикАтолДисплеиПокупателя8X + + + ru + АТОЛ:Дисплеи покупателя 8.Х + + + ДисплейПокупателя + auto + + + + + ОбработчикАтолККМOffline + + + ru + АТОЛ:ККМ Офлайн + + + ККМОфлайн + auto + + + + + ОбработчикАтолККТ54ФЗ + + + ru + АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + ОбработчикАтолККТ54ФЗ10X + + + ru + АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) 10.Х + + + ККТ + auto + + + + + ОбработчикАТОЛККТ54ФЗ10XФФД12 + + + ru + АТОЛ:ККТ с передачей данных в ОФД 10.Х (ФФД 1.2) + + + ККТ + auto + + + + + ОбработчикАтолККТ54ФЗ9X + + + ru + АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) 9.Х + + + ККТ + auto + + + + + ОбработчикАтолПринтераЭтикеток + + + ru + АТОЛ:Принтера этикеток + + + ПринтерЭтикеток + auto + + + + + ОбработчикАтолСканерыШтрихкода + + + ru + АТОЛ:Сканеры штрихкода + + + СканерШтрихкода + auto + + + + + ОбработчикАтолСканерыШтрихкода8X + + + ru + АТОЛ:Сканеры штрихкода 8.Х + + + СканерШтрихкода + auto + + + + + ОбработчикАтолСчитывателиМагнитныхКарт + + + ru + АТОЛ:Считыватели магнитных карт + + + СчитывательМагнитныхКарт + auto + + + + + ОбработчикАтолСчитывателиМагнитныхКарт8X + + + ru + АТОЛ:Считыватели магнитных карт 8.Х + + + СчитывательМагнитныхКарт + auto + + + + + ОбработчикАтолТерминалыСбораДанных + + + ru + АТОЛ:Терминалы сбора данных + + + ТерминалСбораДанных + auto + + + + + ОбработчикАтолТерминалыСбораДанныхMobileLogistics + + + ru + АТОЛ:Терминалы сбора данных MobileLogistics 8.Х + + + ТерминалСбораДанных + auto + + + + + ОбработчикАтолФискальныеРегистраторы + + + ru + АТОЛ:Фискальные регистраторы 6.Х + + + ФискальныйРегистратор + auto + + + + + ОбработчикАтолФискальныеРегистраторы8X + + + ru + АТОЛ:Фискальные регистраторы 8.Х + + + ФискальныйРегистратор + auto + + + + + ОбработчикАтолФискальныеРегистраторыУниверсальный + + + ru + АТОЛ:Фискальные регистраторы (Универсальный) + + + ФискальныйРегистратор + auto + + + + + ОбработчикАтолЭлектронныеВесы + + + ru + АТОЛ:Электронные весы + + + ЭлектронныеВесы + auto + + + + + ОбработчикАтолЭлектронныеВесы8X + + + ru + АТОЛ:Электронные весы 8.Х + + + ЭлектронныеВесы + auto + + + + + ОбработчикВерсияТK1Ф54ФЗ + + + ru + Версия-Т:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + ОбработчикВерсияТФискальныеРегистраторы + + + ru + Версия-Т:Фискальные регистраторы КАСБИ + + + ФискальныйРегистратор + auto + + + + + ОбработчикГАЗПРОМБАНКЭквайринговыеТерминалы + + + ru + ГАЗПРОМБАНК:Эквайринговые терминалы + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикГексагонПринтераЭтикеток + + + ru + Гексагон:Принтера этикеток Zebra,Proton,Toshiba-TEC,Datamax-O neil + + + ПринтерЭтикеток + auto + + + + + ОбработчикГексагонСканерыШтрихкода + + + ru + Гексагон:Сканеры штрихкода Proton + + + СканерШтрихкода + auto + + + + + ОбработчикГексагонТерминалыСбораДанных + + + ru + Гексагон:Терминалы сбора данных Goods + + + ТерминалСбораДанных + auto + + + + + ОбработчикДримкасККТ54ФЗ + + + ru + Дримкас:ККТ с передачей данных в ОФД Вики Принт (ФФД 1.2) + + + ККТ + auto + + + + + ОбработчикДримкасФискальныеРегистраторыVikiPrint + + + ru + Дримкас:Фискальные регистраторы VikiPrint + + + ФискальныйРегистратор + auto + + + + + ОбработчикИнитпроККТ54ФЗ + + + ru + Инитпро:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + ОбработчикИнкотексККТ54ФЗ + + + ru + Инкотекс:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + ОбработчикИнкотексККТ54ФЗФФ12 + + + ru + Инкотекс:ККТ с передачей данных в ОФД (54-ФЗ) ФФД 1.2 + + + ККТ + auto + + + + + ОбработчикИНПАСЭквайринговыеТерминалыSmart + + + ru + ИНПАС:Эквайринговые терминалы Smart + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикИНПАСЭквайринговыеТерминалыUNIPOS + + + ru + ИНПАС:Эквайринговые терминалы UNIPOS + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикИскраККТ54ФЗ + + + ru + ИСКРА:ККТ с передачей данных в ОФД (ФФД 1.2) + + + ККТ + auto + + + + + ОбработчикИскраФискальныеРегистраторыПрим + + + ru + Искра:Фискальные регистраторы Прим + + + ФискальныйРегистратор + auto + + + + + ОбработчикКАСТОМФ54ФЗ + + + ru + КАСТОМ:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + ОбработчикККСДисплеиПокупателя + + + ru + ККС:Дисплеи покупателя + + + ДисплейПокупателя + auto + + + + + ОбработчикККСККТ54ФЗ + + + ru + ККС:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + ОбработчикККСККТ54ФЗ2Х + + + ru + ККС:ККТ с передачей данных в ОФД (ФФД 1.2) + + + ККТ + auto + + + + + ОбработчикККСФискальныеРегистраторы + + + ru + ККС:Фискальные регистраторы + + + ФискальныйРегистратор + auto + + + + + ОбработчикКлеверенсСчитывателиRFID + + + ru + Клеверенс:Cчитыватели RFID + + + АПК:216 - устоявшиеся сокращения + auto + + + + + ОбработчикКлеверенсТерминалыСбораДанных + + + ru + Клеверенс:Терминалы сбора данных + + + ТерминалСбораДанных + auto + + + + + ОбработчикКристаллСервисДисплеиПокупателяVikiVision + + + ru + Кристалл Сервис:Дисплей покупателя VikiVision + + + ДисплейПокупателя + auto + + + + + ОбработчикКристаллСервисФискальныеРегистраторыPirit + + + ru + Кристалл Сервис:Фискальные регистраторы Pirit + + + ФискальныйРегистратор + auto + + + + + ОбработчикМассаКВесыСПечатьюЭтикеток + + + ru + Масса-К:Весы с печатью этикеток + + + ВесыСПечатьюЭтикеток + auto + + + + + ОбработчикМассаКЭлектронныеВесы + + + ru + Масса-К:Электронные весы + + + ЭлектронныеВесы + auto + + + + + ОбработчикМАСЭлектронныеВесы + + + ru + МАС:Электронные весы + + + ЭлектронныеВесы + auto + + + + + ОбработчикМЕБИУСККТ54ФЗ + + + ru + МЕБИУС:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + ОбработчикОРИОНФискальныеРегистраторы + + + ru + ОРИОН:Фискальный регистратор ФР01К + + + ФискальныйРегистратор + auto + + + + + ОбработчикПБФЭквайринговыеТерминалы + + + ru + ПБФ:Драйвер терминала Aisino + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикРБСВесыCПечатьюЭтикеток + + + ru + РБС:Весы c печатью этикеток + + + ВесыСПечатьюЭтикеток + auto + + + + + ОбработчикРусГардСчитывательМагнитныхКарт + + + ru + РусГард:Считыватель магнитных карт + + + СчитывательМагнитныхКарт + auto + + + + + ОбработчикСБРФЭквайринговыеТерминалы + + + ru + СБРФ:Эквайринговые терминалы + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикСервисПлюсВесыСПечатьюЭтикеток + + + ru + СервисПлюс:Весы с печатью этикеток + + + ВесыСПечатьюЭтикеток + auto + + + + + ОбработчикСервисПлюсЭлектронныеВесы + + + ru + СервисПлюс:Электронные весы + + + ЭлектронныеВесы + auto + + + + + ОбработчикСканкодДисплеиПокупателя + + + ru + Сканкод:Дисплеи покупателя + + + ДисплейПокупателя + auto + + + + + ОбработчикСканкодДисплеиПокупателяNative + + + ru + Сканкод:Дисплеи покупателя (NativeAPI) + + + ДисплейПокупателя + auto + + + + + ОбработчикСканкодПринтераЭтикетокGodexEZPL8Native + + + ru + Сканкод:Принтера этикеток GodexEZPL8 (NativeAPI) + + + ПринтерЭтикеток + auto + + + + + ОбработчикСканкодСканерыШтрихкода + + + ru + Сканкод:Сканеры штрихкода + + + СканерШтрихкода + auto + + + + + ОбработчикСканкодСчитывательRFIDCipherLab + + + ru + Сканкод:Считыватели RFID CipherLab + + + Считыватель RFID + auto + + + + + ОбработчикСканкодТерминалыСбораДанных + + + ru + Сканкод:Терминалы сбора данных + + + ТерминалСбораДанных + auto + + + + + ОбработчикСканкодТерминалыСбораДанныхCipherLab8G2 + + + ru + Сканкод:Терминалы сбора данных CipherLab8 G2 + + + ТерминалСбораДанных + auto + + + + + ОбработчикСканкодТерминалыСбораДанныхNative + + + ru + Сканкод:Терминалы сбора данных CipherLAB 8x00 (NativeApi) + + + ТерминалСбораДанных + auto + + + + + ОбработчикСканситиПринтераЭтикеток + + + ru + Скансити:Принтер печати этикеток TSC + + + ПринтерЭтикеток + auto + + + + + ОбработчикСканситиТерминалСбораДанныхCitySoftBusiness + + + ru + Скансити:Терминал сбора данных CitySoft Business + + + ТерминалСбораДанных + auto + + + + + ОбработчикСканситиТерминалСбораДанныхCitySoftLite + + + ru + Скансити:Терминал сбора данных CitySoft Lite + + + ТерминалСбораДанных + auto + + + + + ОбработчикСканситиТерминалСбораДанныхCitySoftStandart + + + ru + Скансити:Терминал сбора данных CitySoft Standart + + + ТерминалСбораДанных + auto + + + + + ОбработчикСканситиТерминалыСбораДанных + + + ru + Скансити:Терминалы сбора данных + + + ТерминалСбораДанных + auto + + + + + ОбработчикСчетмашККТ54ФЗ + + + ru + Счетмаш:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + ОбработчикХарвестрТерминалыСбораДанных + + + ru + Харвестр:Приложение сбора данных + + + ТерминалСбораДанных + auto + + + + + ОбработчикШтрихМВесыСПечатьюЭтикеток + + + ru + ШТРИХ-М:Весы с печатью этикеток + + + ВесыСПечатьюЭтикеток + auto + + + + + ОбработчикШтрихМВесыСПечатьюЭтикетокШтрихПринт + + + ru + ШТРИХ-М:Весы с печатью этикеток ШТРИХ-ПРИНТ + + + ВесыСПечатьюЭтикеток + auto + + + + + ОбработчикШтрихМДисплеиПокупателя + + + ru + ШТРИХ-М:Дисплеи покупателя + + + ДисплейПокупателя + auto + + + + + ОбработчикШтрихМККМOffline + + + ru + ШТРИХ-М:ККМ Офлайн + + + ККМОфлайн + auto + + + + + ОбработчикШтрихМККТ54ФЗ + + + ru + ШТРИХ-М:ККТ с передачей данных в ОФД (54-ФЗ) 4.14 + + + ККТ + auto + + + + + ОбработчикШтрихМККТ54ФЗ415 + + + ru + ШТРИХ-М:ККТ с передачей данных в ОФД (54-ФЗ) 4.15 + + + ККТ + auto + + + + + ОбработчикШтрихМККТ54ФЗ4ФФД12 + + + ru + ШТРИХ-М:ККТ с передачей данных в ОФД (ФФД 1.2) + + + ККТ + auto + + + + + ОбработчикШтрихМПлатежныйТерминалYarus + + + ru + ШТРИХ-М:Платежный терминал Yarus + + + ЭквайринговыйТерминал + auto + + + + + ОбработчикШтрихМТерминалыСбораДанных + + + ru + ШТРИХ-М:Терминалы сбора данных + + + ТерминалСбораДанных + auto + + + + + ОбработчикШтрихМФискальныеРегистраторы + + + ru + ШТРИХ-М:Фискальные регистраторы + + + ФискальныйРегистратор + auto + + + + + ОбработчикШтрихМФискальныеРегистраторыУниверсальный + + + ru + ШТРИХ-М:Фискальные регистраторы (Универсальный) + + + ФискальныйРегистратор + auto + + + + + ОбработчикШтрихМЭлектронныеВесы + + + ru + ШТРИХ-М:Электронные весы + + + ЭлектронныеВесы + auto + + + + + ОбработчикШтрихМЭлектронныеВесыPOS2 + + + ru + ШТРИХ-М:Электронные весы POS2 + + + ЭлектронныеВесы + auto + + + + + ОбработчикЭвоторДисплейПокупателя + + + ru + Эвотор:Дисплей покупателя + + + ДисплейПокупателя + auto + + + + + ОбработчикЭвоторККТ54ФЗ + + + ru + Эвотор:ККТ с передачей данных в ОФД (54-ФЗ) + + + ККТ + auto + + + + + \ No newline at end of file diff --git a/Enums/ОбработчикиДрайверовПодключаемогоОборудования/Ext/ManagerModule.bsl b/Enums/ОбработчикиДрайверовПодключаемогоОборудования/Ext/ManagerModule.bsl new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Enums/ОбработчикиДрайверовПодключаемогоОборудования/Ext/ManagerModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Enums/ОтветОИСМОСтатусеТовара.xml b/Enums/ОтветОИСМОСтатусеТовара.xml new file mode 100644 index 0000000..f5074a6 --- /dev/null +++ b/Enums/ОтветОИСМОСтатусеТовара.xml @@ -0,0 +1,138 @@ + + + + + + cfb95b13-cf4a-44f2-9588-820dc3331262 + 5d91e90e-c332-4dc3-8b49-75b663a6961b + + + 8174e665-2a21-46f7-a013-a9a1b3525084 + e3e48f0f-552c-4e5b-8c1d-9fbb63d8e698 + + + b80bf236-f4ab-4153-95a2-b7614ef5bc3b + f34a53d9-34f9-4f2e-9a41-0efd7c51530a + + + + ОтветОИСМОСтатусеТовара + + + ru + Ответ ОИСМ о статусе товара + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ПланируемыйСтатусТовараКорректен + + + ru + Планируемый статус товара корректен + + + Планируемый статус товара корректен + auto + + + + + ПланируемыйСтатусТовараНекорректен + + + ru + Планируемый статус товара некорректен + + + Планируемый статус товара некорректен + auto + + + + + ОборотТовараПриостановлен + + + ru + Оборот товара приостановлен + + + Оборот товара приостановлен + auto + + + + + \ No newline at end of file diff --git a/Enums/ПериодХраненияИсторииОпераций.xml b/Enums/ПериодХраненияИсторииОпераций.xml new file mode 100644 index 0000000..cef0a62 --- /dev/null +++ b/Enums/ПериодХраненияИсторииОпераций.xml @@ -0,0 +1,203 @@ + + + + + + 3540434f-e1dc-4d01-81d4-bfd9cffb9511 + 3a3d0e90-1541-46ad-9216-4200de7d60c1 + + + 06dee8cf-8891-4ce3-bfe8-a457327e0983 + 2124c455-6fcb-4b63-b7ba-c7deca3622f1 + + + 35949914-2844-4fb6-b773-c1c5980e59db + 5a324151-7131-4a6e-aa66-fb7bd5414990 + + + + ПериодХраненияИсторииОпераций + + + ru + Период хранения истории операций + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + День + + + ru + День + + + + auto + + + + + Неделя + + + ru + Неделя + + + + auto + + + + + Декада + + + ru + Декада + + + + auto + + + + + Месяц + + + ru + Месяц + + + + auto + + + + + Квартал + + + ru + Квартал + + + + auto + + + + + Полугодие + + + ru + Полугодие + + + + auto + + + + + Год + + + ru + Год + + + + auto + + + + + ВсеВремя + + + ru + Все время + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ПланируемыйСтатусМаркируемогоТовара.xml b/Enums/ПланируемыйСтатусМаркируемогоТовара.xml new file mode 100644 index 0000000..466ee53 --- /dev/null +++ b/Enums/ПланируемыйСтатусМаркируемогоТовара.xml @@ -0,0 +1,164 @@ + + + + + + f36cec28-0ec9-4457-a25f-8907a2626194 + 4693a49f-5bb1-4a4c-9bad-edfa716faee3 + + + 8fdcfb2f-c4b6-472f-beb5-494545c2ef22 + 933c6cc2-c8c9-4c73-99ca-aa14e4006737 + + + 3475b56e-cbe4-4915-bc92-ef71525c653b + f8445fdb-a7ab-4745-85f8-2fcec977cde7 + + + + ПланируемыйСтатусМаркируемогоТовара + + + ru + Планируемый статус маркируемого товара + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ШтучныйТоварРеализован + + + ru + Штучный товар реализован + + + Штучный товар, подлежащий обязательной маркировке средством идентификации, реализован + auto + + + + + МерныйТоварВСтадииРеализации + + + ru + Мерный товар в стадии реализации + + + Мерный товар, подлежащий обязательной маркировке средством идентификации, в стадии реализации + auto + + + + + ШтучныйТоварВозвращен + + + ru + Штучный товар возвращен + + + Штучный товар, подлежащий обязательной маркировке средством идентификации, возвращен + auto + + + + + ЧастьТовараВозвращена + + + ru + Часть товара возвращена + + + Часть товара, подлежащего обязательной маркировке средством идентификации, возвращена + auto + + + + + СтатусТовараНеИзменился + + + ru + Статус товара не изменился + + + Статус товара, подлежащего обязательной маркировке средством идентификации, не изменился + auto + + + + + \ No newline at end of file diff --git a/Enums/ПоляШаблоновМагнитныхКарт.xml b/Enums/ПоляШаблоновМагнитныхКарт.xml new file mode 100644 index 0000000..2b6dec4 --- /dev/null +++ b/Enums/ПоляШаблоновМагнитныхКарт.xml @@ -0,0 +1,112 @@ + + + + + + d734a7b6-c082-494f-bfef-a0a6596cef75 + f1cb8f9c-a10c-4624-b391-25e333ddad2a + + + 5669a7cb-221e-4bdb-a6bf-8169bba01038 + 054fcb43-5621-409f-89e1-2ef540823795 + + + 120f2843-f157-4bc6-9fa7-3adeca1b004a + 700d79c1-c57c-4029-bf0d-98e04fb6c097 + + + + ПоляШаблоновМагнитныхКарт + + + ru + Поля шаблонов магнитных карт + + + + true + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + false + BothWays + + + + + + + + Auto + + + + + Код + + + ru + Код + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ПризнакиАгента.xml b/Enums/ПризнакиАгента.xml new file mode 100644 index 0000000..88b512a --- /dev/null +++ b/Enums/ПризнакиАгента.xml @@ -0,0 +1,190 @@ + + + + + + 5a2549ca-bc44-481c-91f5-dc537fda2c07 + 08a6ab25-e0ba-41e9-88d3-a75b2fe652cb + + + 95962bf4-110c-4a47-9530-d0a81ec5162a + 6df08593-bd74-4a03-a9c9-24eb97eda2b4 + + + 3b70829c-a2f7-468d-bb0a-e6093dff8e12 + 508a9d07-9ac3-4ef3-90b9-eb6727069a01 + + + + ПризнакиАгента + + + ru + Признаки агента + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + БанковскийПлатежныйАгент + + + ru + Банковский платежный агент + + + Оказание услуг покупателю (клиенту) пользователем, являющимся банковским платежным агентом + auto + + + + + БанковскийПлатежныйСубагент + + + ru + Банковский платежный субагент + + + Оказание услуг покупателю (клиенту) пользователем, являющимся банковским платежным субагентом + auto + + + + + ПлатежныйАгент + + + ru + Платежный агент + + + Оказание услуг покупателю (клиенту) пользователем, являющимся платежным агентом + auto + + + + + ПлатежныйСубагент + + + ru + Платежный субагент + + + Оказание услуг покупателю (клиенту) пользователем, являющимся платежным субагентом + auto + + + + + Поверенный + + + ru + Поверенный + + + Осуществление расчета с покупателем (клиентом) пользователем, являющимся поверенным + auto + + + + + Комиссионер + + + ru + Комиссионер + + + Осуществление расчета с покупателем (клиентом) пользователем, являющимся комиссионером + auto + + + + + Агент + + + ru + Агент + + + Осуществление расчета с покупателем (клиентом) пользователем, являющимся агентом и не являющимся банковским платежным агентом (субагентом), платежным агентом (субагентом), поверенным, комиссионером + auto + + + + + \ No newline at end of file diff --git a/Enums/ПризнакиПредметаРасчета.xml b/Enums/ПризнакиПредметаРасчета.xml new file mode 100644 index 0000000..caf6a69 --- /dev/null +++ b/Enums/ПризнакиПредметаРасчета.xml @@ -0,0 +1,541 @@ + + + + + + 23c6a5f7-fd44-46cf-8e9e-00fbf9a519a9 + 74c4d14a-991f-4e86-a8b8-8295f564689d + + + 90158d58-eb0d-4a8a-b4c9-86abbe9f4ac1 + a29d0460-46f4-436a-911a-31e940bff9c8 + + + ca60d579-0624-4aa5-96ea-00e2788c79cd + eaa5d39e-1710-41c6-8699-99553547c961 + + + + ПризнакиПредметаРасчета + + + ru + Признаки предмета расчета + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Товар + + + ru + Товар + + + Реализуемый товар, за исключением подакцизного товара + auto + + + + + ПодакцизныйТовар + + + ru + Подакцизный товар + + + Реализуемый подакцизный товар + auto + + + + + Работа + + + ru + Работа + + + Выполняемая работа + auto + + + + + Услуга + + + ru + Услуга + + + Оказываемая услуга + auto + + + + + СтавкаАзартнойИгры + + + ru + Ставка азартной игры + + + Прием ставок при осуществлении деятельности по проведению азартных игр + auto + + + + + ВыигрышАзартнойИгры + + + ru + Выигрыш азартной игры + + + Выплата денежных средств в виде выигрыша при осуществлении деятельности по проведению азартных игр + auto + + + + + ЛотерейныйБилет + + + ru + Лотерейный билет + + + Прием денежных средств при реализации лотерейных билетов + auto + + + + + ВыигрышЛотереи + + + ru + Выигрыш лотереи + + + Выплата денежных средств в виде выигрыша при осуществлении деятельности по проведению лотерей + auto + + + + + ПредоставлениеРИД + + + ru + Предоставление РИД + + + Предоставлении прав на использование результатов интеллектуальной деятельности или средств индивидуализации + auto + + + + + ПлатежВыплата + + + ru + Платеж/выплата + + + Аванс, задаток, предоплата, кредит, взнос в счет оплаты, пени, штраф, вознаграждение, бонус и ином аналогичном предмете расчета + auto + + + + + АгентскоеВознаграждение + + + ru + Агентское вознаграждение + + + Вознаграждение пользователя, являющегося платежным агентом (субагентом), банковским платежным агентом (субагентом), комиссионером, поверенным или иным агентом + auto + + + + + СоставнойПредметРасчета + + + ru + Составной предмет расчета + + + Предмет расчета, состоящем из предметов, каждому из которых может быть присвоено другие значения перечисления + auto + + + + + ИнойПредметРасчета + + + ru + Иной предмет расчета + + + Предмет расчета, не относящемуся к предметам расчета, которым может быть присвоено значение перечисления + auto + + + + + ИмущественноеПраво + + + ru + Имущественное право + + + Передача имущественных прав + auto + + + + + ВнереализационныйДоход + + + ru + Внереализационный доход + + + Внереализационный доход + auto + + + + + СтраховыеВзносы + + + ru + Страховые взносы + + + Сумма расходов, уменьшающих сумму налога (авансовых платежей) в соответствии с пунктом 3.1 статьи 346.21 Налогового кодекса РФ + auto + + + + + ТорговыйСбор + + + ru + Торговый сбор + + + Сумма уплаченного торгового сбора + auto + + + + + КурортныйСбор + + + ru + Курортный сбор + + + Курортный сбор + auto + + + + + ТуристическийНалог + + + ru + Туристический налог + + + Туристический налог + auto + + + + + Залог + + + ru + Залог + + + Залог + auto + + + + + Платеж + + + ru + Платеж + + + Об авансе, задатке, предоплате и кредите + auto + + + + + Выплата + + + ru + Выплата + + + О взносе в счет оплаты пени, штрафе, вознаграждении, бонусе и ином аналогичном предмете расчета + auto + + + + + Расход + + + ru + Расход + + + О суммах произведенных расходов в соответствии со статьей 346.16 Налогового кодекса Российской Федерации, уменьшающих доход + auto + + + + + ОбязательноеПенсионноеСтрахованиеИП + + + ru + Взносы на ОПС ИП + + + О страховых взносах на обязательное пенсионное страхование, уплачиваемых ИП, не производящими выплаты и иные вознаграждения физическим лицам + auto + + + + + ОбязательноеПенсионноеСтрахование + + + ru + Взносы на ОПС + + + О страховых взносах на обязательное пенсионное страхование, уплачиваемых организациями и ИП, производящими выплаты и иные вознаграждения физическим лицам + auto + + + + + ОбязательноеМедицинскоеСтрахованиеИП + + + ru + Взносы на ОМС ИП + + + О страховых взносах на обязательное медицинское страхование, уплачиваемых ИП, не производящими выплаты и иные вознаграждения физическим лицам + auto + + + + + ОбязательноеМедицинскоеСтрахование + + + ru + Взносы на ОМС + + + О страховых взносах на обязательное медицинское страхование, уплачиваемые организациями и ИП, производящими выплаты и иные вознаграждения физическим лицам + auto + + + + + ОбязательноеСоциальноеСтрахование + + + ru + Взносы на ОСС + + + О страховых взносах на обязательное социальное страхование на случай временной нетрудоспособности и в связи с материнством, на обязательное социальное страхование от несчастных случаев на производстве и профессиональных заболеваний + auto + + + + + ПлатежКазино + + + ru + Платеж казино + + + О приеме и выплате денежных средств при осуществлении деятельности казино с использованием обменных знаков казино, зале игровых автоматов + auto + + + + + ВыдачаДенежныхСредств + + + ru + Выдача денежных средств + + + Выдача денежных средств банковским платежным агентом + auto + + + + + ПодакцизныйТоварМаркируемыйСИНеИмеющийКМ + + + ru + Подакцизный товар, маркируемым средством идентификации, не имеющий кода маркировки + + + О реализуемом подакцизном товаре, маркируемым средством идентификации, не имеющем кода маркировки + auto + + + + + ПодакцизныйТоварМаркируемыйСИИмеющийКМ + + + ru + Подакцизный товар, маркируемым средством идентификации, имеющий код маркировки + + + О реализуемом подакцизном товаре, маркируемым средством идентификации, имеющем код маркировки + auto + + + + + ТоварМаркируемыйСИНеИмеющийКМ + + + ru + Товар маркируемый средством идентификации, не имеющий кода маркировки + + + О реализуемом товаре, маркируемым средством идентификации, не имеющем кода маркировки, за исключением подакцизного товара + auto + + + + + ТоварМаркируемыйСИИмеющийКМ + + + ru + Товар маркируемый средством идентификации, имеющий код маркировки + + + О реализуемом товаре, маркируемым средством идентификации, имеющем код маркировки, за исключением подакцизного товара + auto + + + + + \ No newline at end of file diff --git a/Enums/ПризнакиСпособаРасчета.xml b/Enums/ПризнакиСпособаРасчета.xml new file mode 100644 index 0000000..b389918 --- /dev/null +++ b/Enums/ПризнакиСпособаРасчета.xml @@ -0,0 +1,190 @@ + + + + + + 0fcc3a06-6b72-4bcd-bb27-a5c085556f3d + 3585f42c-3b95-4ba8-bb8c-8fde3d67f581 + + + cf578c53-e3a9-4d12-b742-171b1250e6f6 + 9b16f226-535d-4726-b322-d8f397357bbc + + + 4e71b2eb-9cb7-4c3d-ba92-0a34467c93f0 + eb00e47f-20c4-44f2-b276-3617e6792a21 + + + + ПризнакиСпособаРасчета + + + ru + Признаки способа расчета + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Аванс + + + ru + Аванс + + + Аванс + auto + + + + + ОплатаКредита + + + ru + Оплата кредита + + + Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита) + auto + + + + + ПередачаБезОплаты + + + ru + Передача без оплаты + + + Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит + auto + + + + + ПередачаСПолнойОплатой + + + ru + Передача с полной оплатой + + + Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета + auto + + + + + ПередачаСЧастичнойОплатой + + + ru + Передача с частичной оплатой + + + Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит + auto + + + + + ПредоплатаПолная + + + ru + Предоплата полная + + + Полная предварительная оплата до момента передачи предмета расчета + auto + + + + + ПредоплатаЧастичная + + + ru + Предоплата частичная + + + Частичная предварительная оплата до момента передачи предмета расчета + auto + + + + + \ No newline at end of file diff --git a/Enums/ПричиныИзмененияСведенийККТ.xml b/Enums/ПричиныИзмененияСведенийККТ.xml new file mode 100644 index 0000000..16d2aad --- /dev/null +++ b/Enums/ПричиныИзмененияСведенийККТ.xml @@ -0,0 +1,398 @@ + + + + + + 992f3e57-fc09-48e2-b023-94870dc12449 + 15f6e65c-ac56-4e85-8575-a68478191a1f + + + 0eab08bd-2438-4967-b32a-0b4018e4e470 + 29b8a32c-5267-4821-83fc-41002dcbb8de + + + acf0f3da-ca12-4784-959c-c103d07af88b + da49e30f-5acc-433b-8ef7-2d46fbdfbe92 + + + + ПричиныИзмененияСведенийККТ + + + ru + Причины изменения сведений о ККТ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ЗаменаФН + + + ru + Замена фискального накопителя + + + Замена фискального накопителя + auto + + + + + ЗаменаОФД + + + ru + Замена оператора фискальных данных + + + Замена оператора фискальных данных + auto + + + + + ИзменениеНаименованияПользователя + + + ru + Изменение наименования пользователя контрольно-кассовой техники + + + Изменение наименования пользователя контрольно-кассовой техники + auto + + + + + ИзменениеАдреса + + + ru + Изменение адреса и (или) места установки (применения) контрольно-кассовой техники + + + Изменение адреса и (или) места установки (применения) контрольно-кассовой техники + auto + + + + + ПереводВРежимПередачиДанных + + + ru + Перевод ККТ из автономного режима в режим передачи данных + + + Перевод ККТ из автономного режима в режим передачи данных + auto + + + + + ПереводВАвтономныйРежим + + + ru + Перевод ККТ из режима передачи данных в автономный режим + + + Перевод ККТ из режима передачи данных в автономный режим + auto + + + + + ИзменениеВерсии + + + ru + Изменение версии модели ККТ + + + Изменение версии модели ККТ + auto + + + + + ИзменениеСистемНалогообложения + + + ru + Изменение перечня систем налогообложения, применяемых при осуществлении расчетов + + + Изменение перечня систем налогообложения, применяемых при осуществлении расчетов + auto + + + + + ИзменениеНомераУстройства + + + ru + Изменение номера автоматического устройства для расчетов, в составе которого применяется ККТ + + + Изменение номера автоматического устройства для расчетов, в составе которого применяется ККТ + auto + + + + + ПереводВНеавтоматическийРежим + + + ru + Перевод ККТ из автоматического режима в неавтоматический режим (осуществление расчетов кассиром) + + + Перевод ККТ из автоматического режима в неавтоматический режим (осуществление расчетов кассиром) + auto + + + + + ПереводВАвтоматическийРежим + + + ru + Перевод ККТ из неавтоматического режима (осуществление расчетов кассиром) в автоматический режим + + + Перевод ККТ из неавтоматического режима (осуществление расчетов кассиром) в автоматический режим + auto + + + + + ВключениеБСО + + + ru + Перевод ККТ из режима, не позволяющего формировать БСО, в режим, позволяющий формировать БСО + + + Перевод ККТ из режима, не позволяющего формировать БСО, в режим, позволяющий формировать БСО + auto + + + + + ВыключениеБСО + + + ru + Перевод ККТ из режима, позволяющего формировать БСО, в режим, не позволяющий формировать БСО + + + Перевод ККТ из режима, позволяющего формировать БСО, в режим, не позволяющий формировать БСО + auto + + + + + ВключениеРежимаРасчетовВИнтернет + + + ru + Перевод ККТ в режим расчетов в сети Интернет + + + Перевод ККТ в режим расчетов в сети Интернет + auto + + + + + ВыключениеРежимаРасчетовВИнтернет + + + ru + Перевод ККТ из режима расчетов в сети Интернет + + + Перевод ККТ из режима расчетов в сети Интернет + auto + + + + + ВключениеРежимаАгента + + + ru + Перевод ККТ в режим, позволяющий оказывать услуги платежного или банковского агента + + + Перевод ККТ из режима, не позволяющего оказывать услуги платежного агента (субагента) или банковского платежного агента в режим, позволяющий оказывать услуги платежного агента (субагента) или банковского платежного агента + auto + + + + + ВыключениеРежимаАгента + + + ru + Перевод ККТ в режим не позволяющий оказывать услуги платежного или банковского агента + + + Перевод ККТ из режима, позволяющего оказывать услуги платежного агента (субагента) или банковского платежного агента, в режим, не позволяющий оказывать услуги платежного агента (субагента) или банковского платежного агента + auto + + + + + ВключениеРежимаАзартныхИгр + + + ru + Перевод ККТ в режим, позволяющий применять ККТ при приеме ставок + + + Перевод ККТ из режима, не позволяющего применять ККТ при приеме ставок и выплате денежных средств в виде выигрыша при осуществлении деятельности по организации и проведению азартных игр, в режим, позволяющий применять ККТ при приеме ставок и выплате денеж + auto + + + + + ВыключениеРежимаАзартныхИгр + + + ru + Перевод ККТ в режим, не позволяющий применять ККТ при приеме ставок + + + Перевод ККТ из режима, позволяющего применять ККТ при приеме ставок и выплате денежных средств в виде выигрыша при осуществлении деятельности по организации и проведению азартных игр, в режим, не позволяющий применять ККТ при приеме ставок и выплате денеж + auto + + + + + ВключениеРежимаЛотереи + + + ru + Перевод ККТ в режим, позволяющий применять ККТ при реализации лотерейных билетов + + + Перевод ККТ из режима, не позволяющего применять ККТ при приеме денежных средств при реализации лотерейных билетов, электронных лотерейных билетов, приеме лотерейных ставок и выплате денежных средств в виде выигрыша при осуществлении деятельности по орган + auto + + + + + ВыключениеРежимаЛотереи + + + ru + Перевод ККТ в режим, не позволяющий применять ККТ при реализации лотерейных билетов + + + Перевод ККТ из режима, позволяющего применять ККТ при приеме денежных средств при реализации лотерейных билетов, электронных лотерейных билетов, приеме лотерейных ставок и выплате денежных средств в виде выигрыша при осуществлении деятельности по организа + auto + + + + + ИзменениеВерсииФФД + + + ru + Изменение версии ФФД + + + Изменение версии ФФД + auto + + + + + Иное + + + ru + Иные причины + + + Иные причины + auto + + + + + \ No newline at end of file diff --git a/Enums/ПричиныПеререгистрацииФН.xml b/Enums/ПричиныПеререгистрацииФН.xml new file mode 100644 index 0000000..0b65b59 --- /dev/null +++ b/Enums/ПричиныПеререгистрацииФН.xml @@ -0,0 +1,151 @@ + + + + + + d61ae0c2-134a-40f7-a29f-a0d303393abd + da563baf-03f8-4941-b54b-6f32f1b294d3 + + + c5c17341-b445-4118-a29d-2ddaeca8e108 + 294ec0f5-ce7e-4dc4-a0a8-253dc6c616b4 + + + ef1d6199-62ce-4f79-9999-c270a6b31f83 + 312b4f6e-2317-4a37-871e-1b3f035630e1 + + + + ПричиныПеререгистрацииФН + + + ru + Причины перерегистрации ФН + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ЗаменаФН + + + ru + Замена ФН + + + + auto + + + + + ЗаменаОФД + + + ru + Замена ОФД + + + + auto + + + + + ИзменениеРеквизитов + + + ru + Изменение реквизитов + + + + auto + + + + + ИзменениеНастроекККТ + + + ru + Изменение настроек ККТ + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ПротоколОбменаФЭСНСПК.xml b/Enums/ПротоколОбменаФЭСНСПК.xml new file mode 100644 index 0000000..8e3341d --- /dev/null +++ b/Enums/ПротоколОбменаФЭСНСПК.xml @@ -0,0 +1,125 @@ + + + + + + 100db70b-4dbb-49f7-b0f3-1255f538c02e + c9f79862-d807-414c-bdbb-54029bace42d + + + 5e176cb2-e56e-4b4c-a052-fa63ea9525f6 + 73a0becf-768e-4819-84bf-4bc3f2409eec + + + ee8b096e-d5d6-43ce-9717-4ab06fed52ac + 0990f196-4e81-42a2-bd8c-f982e0b042d2 + + + + ПротоколОбменаФЭСНСПК + + + ru + Протокол обмена ФЭСНСПК + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ВерсияV1 + + + ru + Версия V1 + + + + auto + + + + + ВерсияV2 + + + ru + Версия V2 + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/СпособПодключенияДрайвера.xml b/Enums/СпособПодключенияДрайвера.xml new file mode 100644 index 0000000..781186a --- /dev/null +++ b/Enums/СпособПодключенияДрайвера.xml @@ -0,0 +1,138 @@ + + + + + + 89e2e66d-6248-4108-ab39-585a583b8f67 + 1daa2ea1-4fd6-4b24-aacf-0a37b83f38e2 + + + 9077577b-912b-44da-9f38-03358920422e + e56a4fea-02be-4fda-a53a-b65843ac1864 + + + 44a9744e-8d91-4182-86fb-57d328c7a004 + 66106bc9-2547-4331-90e5-db1834af8026 + + + + СпособПодключенияДрайвера + + + ru + Способ подключения драйвера + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ИзМакета + + + ru + Драйвер подключается из макета + + + Установка драйвера осуществляется из макета конфигурации + auto + + + + + ЛокальноПоИдентификатору + + + ru + Драйвер установлен на локальном компьютере + + + Подключатся драйвер, установленный на локальном компьютере по ProgID + auto + + + + + ИзИнформационнойБазы + + + ru + Драйвер подключается из информационной базы + + + Установка драйвера осуществляется из информационной базы + auto + + + + + \ No newline at end of file diff --git a/Enums/СпособыФорматноЛогическогоКонтроля.xml b/Enums/СпособыФорматноЛогическогоКонтроля.xml new file mode 100644 index 0000000..b7d1a33 --- /dev/null +++ b/Enums/СпособыФорматноЛогическогоКонтроля.xml @@ -0,0 +1,138 @@ + + + + + + 2506ed26-867c-4f18-846c-188d08b632bb + 77f80acb-1124-4cd2-bdf4-9e620a05cac2 + + + 4e1b7a16-2e36-4d3a-a088-160d2975b165 + adf836a9-17c2-487a-9fea-3f1413695919 + + + c050fbbd-d2d2-4e22-9ab3-e705e3004785 + 0c2e0770-edbc-41f0-b573-782d00f49ed1 + + + + СпособыФорматноЛогическогоКонтроля + + + ru + Способы форматно-логического контроля + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + РазделятьСтроки + + + ru + Разделять строки + + + + auto + + + + + ЗачитыватьСуммы + + + ru + Зачитывать суммы + + + + auto + + + + + НеКонтролировать + + + ru + Не контролировать + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/Статус.xml b/Enums/Статус.xml new file mode 100644 index 0000000..b5ac257 --- /dev/null +++ b/Enums/Статус.xml @@ -0,0 +1,82 @@ + + + + + + e3dc8fdd-ae9e-4fc7-9111-37570b8c7f2b + 4ed34308-a645-40b4-9cd5-c94a8d778727 + + + 7e61cea9-0b83-4c34-9e1e-8870c3b6c3bd + afe80229-a42c-4509-810b-7320e8f2115d + + + f5b285ca-d7e9-48b0-8942-43677f10443d + 84c9b5e6-6558-41be-bf43-7c842a938b11 + + + + Статус + + + ru + Статус + + + + false + + true + BothWays + + + + + + + + Auto + + + + + Вработе + + + ru + В работе + + + + auto + + + + + Обработан + + + ru + Обработан + + + + auto + + + + + Отправлен + + + ru + Отправлен + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/СтатусОбработкиЗапросаКМ.xml b/Enums/СтатусОбработкиЗапросаКМ.xml new file mode 100644 index 0000000..0ba5bcb --- /dev/null +++ b/Enums/СтатусОбработкиЗапросаКМ.xml @@ -0,0 +1,138 @@ + + + + + + 571ae60f-09a9-417b-b345-82a23e38f7a6 + 35e9568e-0c59-46d7-b139-e87a274af216 + + + 6a592bf2-a6a3-48e6-b3d8-46c3ebc87eff + 5f75e169-bc5c-4324-a378-c3ae87bbcef8 + + + fe09baf4-39f1-422a-8c01-fb3e5ed6911d + 04839e80-a73f-41eb-b770-91608ac787db + + + + СтатусОбработкиЗапросаКМ + + + ru + Статус обработки запроса КМ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + КорректныйФормат + + + ru + Корректный формат, в том числе корректный формат КМ + + + + auto + + + + + НекорректныйФормат + + + ru + Некорректный формат + + + + auto + + + + + НекорректныйФорматКМ + + + ru + Код маркировки имеет некорректный формат (не распознан) + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/СтатусОперацииНаДисплее.xml b/Enums/СтатусОперацииНаДисплее.xml new file mode 100644 index 0000000..3209919 --- /dev/null +++ b/Enums/СтатусОперацииНаДисплее.xml @@ -0,0 +1,164 @@ + + + + + + 345596d4-c194-4b9d-bb36-45dce03ee9d2 + 7494f577-3378-4d00-876d-aaf283b55c43 + + + 49983c76-a7d8-4fec-aad1-5e410d890a2b + 3679901e-bed3-42a7-acb8-cb800203ab3f + + + 4cc05866-c5c6-4599-86f0-b8665d6a9fb9 + 2881b6a7-d803-44de-a7b0-e15a6c0a5737 + + + + СтатусОперацииНаДисплее + + + ru + Статус операции на дисплее + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + НеУстановлен + + + ru + Не установлен + + + + auto + + + + + ВыполненоУспешно + + + ru + Выполнено успешно + + + + auto + + + + + ОперацияНеВыполнена + + + ru + Операция не выполнена + + + + auto + + + + + ОжиданиеОперации + + + ru + Ожидание операции + + + + auto + + + + + Информация + + + ru + Информация + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/СтатусРабочегоМестаНаДисплее.xml b/Enums/СтатусРабочегоМестаНаДисплее.xml new file mode 100644 index 0000000..0351405 --- /dev/null +++ b/Enums/СтатусРабочегоМестаНаДисплее.xml @@ -0,0 +1,164 @@ + + + + + + 6a1fdada-6c49-4336-b9f5-0980131ccc94 + d30f2ac4-49b9-40f4-a38f-ab81a0b2b847 + + + 8bdbc9f9-3517-419a-b4c4-10eed6184c04 + 90b78321-0b4e-403e-8ea3-b9564ee7969b + + + b32e62b1-738c-4eda-bddf-0d51ea545671 + 8e360892-fe24-4eff-9c52-c6f8cf664909 + + + + СтатусРабочегоМестаНаДисплее + + + ru + Статус рабочего места на дисплее + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + НеУстановлен + + + ru + Не установлен + + + + auto + + + + + СервисныйРежим + + + ru + Сервисный режим + + + + auto + + + + + РабочееМестоСвободно + + + ru + Рабочее место свободно + + + + auto + + + + + РабочееМестоРаботает + + + ru + Рабочее место работает + + + + auto + + + + + ОшибкаНаРабочемМесте + + + ru + Ошибка на рабочем месте + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/СтатусРезультатаЗапросаКМ.xml b/Enums/СтатусРезультатаЗапросаКМ.xml new file mode 100644 index 0000000..2338233 --- /dev/null +++ b/Enums/СтатусРезультатаЗапросаКМ.xml @@ -0,0 +1,138 @@ + + + + + + cba47f94-4ad2-4ae7-98c9-e736722774f3 + 6f8d6b72-3418-444c-8a64-f566f06c1b51 + + + 9737337b-43d6-4fe0-83f4-e6942e2abd49 + 78368d3b-dee6-48ad-8b05-cc167fe44bc7 + + + 4a212257-75c3-4c6f-810b-363ee0e26421 + 19d9be32-db35-4905-b553-06e2d68881e1 + + + + СтатусРезультатаЗапросаКМ + + + ru + Статус результата запроса КМ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Получен + + + ru + Получен + + + + auto + + + + + Ожидается + + + ru + Ожидается + + + + auto + + + + + НеМожетБытьПолучен + + + ru + Не может быть получен + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/СтатусЧекаККТВОчереди.xml b/Enums/СтатусЧекаККТВОчереди.xml new file mode 100644 index 0000000..098cf37 --- /dev/null +++ b/Enums/СтатусЧекаККТВОчереди.xml @@ -0,0 +1,164 @@ + + + + + + d69526a5-03fa-4626-8447-b71a46437dcb + 058e0f53-d7c4-4cdf-8361-2ae51e8b61cb + + + a1e6896f-9c21-447c-b3bf-08a37727f848 + 1dc27430-9d04-4c0c-816f-bcf266129764 + + + c4eb191c-ddca-4eae-9259-72b3469a9596 + 49ca6120-ff3e-4255-80ee-c78552d25469 + + + + СтатусЧекаККТВОчереди + + + ru + Статус чека ККТ в очереди + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Новый + + + ru + Новый + + + + auto + + + + + Фискализирован + + + ru + Фискализирован + + + + auto + + + + + Ошибка + + + ru + Ошибка + + + + auto + + + + + Отменен + + + ru + Отменен + + + + auto + + + + + Фискализируется + + + ru + Фискализируется + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/СтатусыКассовойСмены.xml b/Enums/СтатусыКассовойСмены.xml new file mode 100644 index 0000000..88cf9b4 --- /dev/null +++ b/Enums/СтатусыКассовойСмены.xml @@ -0,0 +1,125 @@ + + + + + + ca71d9d8-e88c-4f3b-8c1c-1fb066e17380 + a9343301-8eb2-4c58-a007-cb4ebc73acd1 + + + 5930ad14-c578-4f75-8e82-74a5d9cb56ad + 372627fc-105e-4c13-bbb7-287adc3a8ca2 + + + c524c363-4676-459f-8ced-488e5cdd19c7 + 6005417c-9f95-43f6-bf7c-4da313901d5f + + + + СтатусыКассовойСмены + + + ru + Статусы кассовой смены + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Открыта + + + ru + Открыта + + + + auto + + + + + Закрыта + + + ru + Закрыта + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыИдентификаторовТовараККТ.xml b/Enums/ТипыИдентификаторовТовараККТ.xml new file mode 100644 index 0000000..983a527 --- /dev/null +++ b/Enums/ТипыИдентификаторовТовараККТ.xml @@ -0,0 +1,203 @@ + + + + + + 0076d551-f0d2-4455-af64-184436c6fec5 + d83cc4f9-d133-4245-8632-d69612a9317e + + + cc126218-93a4-4a3b-baa0-56a2c38b61e1 + fc0efee8-02ac-4d0a-a292-2b9015ae39fd + + + 41d08b7a-1518-4aff-82cb-359a48a1f99c + 4409f320-1a73-4188-8fd0-d69650a6be18 + + + + ТипыИдентификаторовТовараККТ + + + ru + Типы идентификаторов товара ККТ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + КодТовараНеРаспознан + + + ru + Код товара не распознан + + + Код товара, который не распознан + auto + + + + + КодТовараВФорматеEAN8 + + + ru + EAN-8 + + + Код товара в формате EAN-8, UPC-E + auto + + + + + КодТовараВФорматеEAN13 + + + ru + EAN-13 + + + Код товара в формате EAN-13, UPC-A + auto + + + + + КодТовараВФорматеITF14 + + + ru + ITF-14 + + + Код товара в формате ITF-14 + auto + + + + + КодТовараВФорматеDataMatrixGS1 + + + ru + Data Matrix + + + Код товара в формате GS1 Data Matrix или Data Matrix маркировки + auto + + + + + ИзделияИзНатуральногоМеха + + + ru + Изделия из натурального меха + + + + auto + + + + + КодТовараВФорматеЕГАИС2 + + + ru + ЕГАИС 2.0 + + + Код товара в кодировке ЕГАИС 2.0 в формате PDF417 + auto + + + + + КодТовараВФорматеЕГАИС3 + + + ru + ЕГАИС 3.0 + + + Код товара в кодировке ЕГАИС 3.0 в формате Data Matrix + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыИзмеряемыхВеличин.xml b/Enums/ТипыИзмеряемыхВеличин.xml new file mode 100644 index 0000000..28a7915 --- /dev/null +++ b/Enums/ТипыИзмеряемыхВеличин.xml @@ -0,0 +1,229 @@ + + + + + + 1cc9e77a-cb3c-4ced-944f-9ec9c4655be7 + 0b6b501f-a082-44b3-bc68-115ccc59c7a4 + + + eeb8e2e7-1c23-4680-b00f-1e28c11ddfc1 + 423d2d94-c5ce-41f6-ae10-187854d5377e + + + 684bc1b3-e6a3-4967-a382-d4ef1c173376 + bd67e3cd-d013-4286-8a4b-436ed34097a6 + + + + ТипыИзмеряемыхВеличин + + + ru + Типы измеряемых величин + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Вес + + + ru + Вес + + + + auto + + + + + Объем + + + ru + Объем + + + + auto + + + + + Площадь + + + ru + Площадь + + + + auto + + + + + Длина + + + ru + Длина + + + + auto + + + + + КоличествоШтук + + + ru + Количество штук + + + + auto + + + + + Упаковка + + + ru + Упаковка + + + Выбирается программно, + auto + + + + + Мощность + + + ru + Мощность + + + + auto + + + + + Энергия + + + ru + Энергия + + + + auto + + + + + ЭлектрическийЗаряд + + + ru + Электрический заряд + + + + auto + + + + + Время + + + ru + Время + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыИзмеряемыхВеличин/Ext/ManagerModule.bsl b/Enums/ТипыИзмеряемыхВеличин/Ext/ManagerModule.bsl new file mode 100644 index 0000000..8f7d969 --- /dev/null +++ b/Enums/ТипыИзмеряемыхВеличин/Ext/ManagerModule.bsl @@ -0,0 +1,34 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТипыИзмеряемыхВеличин.Ссылка, + | ТипыИзмеряемыхВеличин.Порядок КАК Порядок + |ИЗ + | Перечисление.ТипыИзмеряемыхВеличин КАК ТипыИзмеряемыхВеличин + |ГДЕ + | ТипыИзмеряемыхВеличин.Ссылка <> ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка) + | + |УПОРЯДОЧИТЬ ПО + | Порядок"; + + Выборка = Запрос.Выполнить().Выбрать(); + + ДанныеВыбора = Новый СписокЗначений; + + Пока Выборка.Следующий() Цикл + ДанныеВыбора.Добавить(Выборка.Ссылка); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/Enums/ТипыМаркировкиККТ.xml b/Enums/ТипыМаркировкиККТ.xml new file mode 100644 index 0000000..a791b67 --- /dev/null +++ b/Enums/ТипыМаркировкиККТ.xml @@ -0,0 +1,151 @@ + + + + + + cc7eab92-e04a-4cd6-922d-dc7ce2fc4526 + 2617e1c8-8fdc-4756-b933-5a1c8c91396c + + + 67f740d3-be3c-4dcf-b31f-38c42bf7c800 + d1705e76-c2e0-4664-86e9-f901b8da2e1d + + + 4cec0784-2c04-4c1c-b0b5-ff0da1c2b61f + 9b85a984-5cf5-4f7b-a0af-c287c0e6a4a1 + + + + ТипыМаркировкиККТ + + + ru + Типы маркировки ККТ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ИзделияИзМеха + + + ru + Изделия из меха + + + + auto + + + + + ЛекарственныеПрепараты + + + ru + Лекарственные препараты + + + + auto + + + + + ТабачнаяПродукция + + + ru + Табачная продукция + + + + auto + + + + + ОбувныеТовары + + + ru + Обувные товары + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыОплатыККТ.xml b/Enums/ТипыОплатыККТ.xml new file mode 100644 index 0000000..4a132b0 --- /dev/null +++ b/Enums/ТипыОплатыККТ.xml @@ -0,0 +1,164 @@ + + + + + + f9c7713b-a541-437a-aa17-7e9f57e061fb + fcbe2477-8a7a-4ede-a07e-51febbee49a2 + + + 015540f4-bf05-44c8-875a-f61edc8bdb3c + 68aa07b3-2f61-4a6b-afb1-b54018320711 + + + 0dc281b2-52f5-425e-92b6-efa21510191e + 500c0b0b-dd04-4297-af05-8604fbd8002d + + + + ТипыОплатыККТ + + + ru + Типы оплаты ККТ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Наличные + + + ru + Наличная оплата + + + Оплата наличными средствами платежа + auto + + + + + Электронно + + + ru + Безналичные средства + + + Оплата безналичными средствами платежа + auto + + + + + Предоплата + + + ru + Предоплата + + + Зачет аванса и/или предыдущих платежей + auto + + + + + Постоплата + + + ru + Постоплата (кредит) + + + Подлежит последующей уплате (в кредит) + auto + + + + + ВстречноеПредоставление + + + ru + Встречное предоставление + + + Подлежит уплате встречным предоставлением + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыПакетнойОперацииВОчередиЧеков.xml b/Enums/ТипыПакетнойОперацииВОчередиЧеков.xml new file mode 100644 index 0000000..d9c88b5 --- /dev/null +++ b/Enums/ТипыПакетнойОперацииВОчередиЧеков.xml @@ -0,0 +1,151 @@ + + + + + + e6094dec-aca2-408d-9f64-b180326fea59 + bd430474-84eb-4c42-9160-0fa41579c30d + + + e4e0d3b2-cf13-4435-a94c-0ec9c392c0e0 + 8055a7e5-55f5-46c8-be67-108e17018067 + + + 2f0e6c41-6a7d-494e-9480-9d7a3bad03bf + 57e73dc6-17b0-4f78-94e0-c83ed91ee683 + + + + ТипыПакетнойОперацииВОчередиЧеков + + + ru + Типы пакетной операции в очереди чеков + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + НеПакетнаяОперация + + + ru + Не пакетная операция + + + + auto + + + + + ФискализацияЧекаСОплатойКартой + + + ru + Фискализация чека с оплатой картой + + + + auto + + + + + ПродажаСВыдачейНаличных + + + ru + Продажа с выдачей наличных + + + + auto + + + + + ПокупкаСЗачислением + + + ru + Покупка с зачислением + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыПерсональныхДанныхККТ.xml b/Enums/ТипыПерсональныхДанныхККТ.xml new file mode 100644 index 0000000..f62bbcf --- /dev/null +++ b/Enums/ТипыПерсональныхДанныхККТ.xml @@ -0,0 +1,125 @@ + + + + + + cca3cd35-d305-40bd-87cd-4cd3b8f5b407 + 57793a54-f892-418e-92ed-06fa69891e62 + + + e2c38b5b-6ae1-437e-b390-63262f5af1a6 + 0710ab19-4a1b-4b5b-8d16-0834675fdcc6 + + + be1cde72-55d4-4048-9f33-a14cc86bd1b4 + 866409c8-eff0-4faf-96e0-4968ad5b328e + + + + ТипыПерсональныхДанныхККТ + + + ru + Типы персональных данных ККТ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ИНН + + + ru + ИНН + + + Для идентификации используется ИНН + auto + + + + + ПаспортныеДанные + + + ru + Паспортные данные + + + Для идентификации используется паспортные данные + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыПлатежнойСистемыККТ.xml b/Enums/ТипыПлатежнойСистемыККТ.xml new file mode 100644 index 0000000..051b8de --- /dev/null +++ b/Enums/ТипыПлатежнойСистемыККТ.xml @@ -0,0 +1,151 @@ + + + + + + 62c2e3a6-c0a5-4cca-9727-cf72f4073639 + 5b8847ec-bf73-49fc-92aa-cc8e632b8902 + + + db1944a3-059d-4917-9a09-d921d0903c6e + 257e7f10-66ed-41d7-8f46-e908fea9d147 + + + cc29a352-2cd7-4d6b-9ebb-89f7f3dc1783 + 35e67ab3-f9bc-434f-a387-2c0ac19efb2e + + + + ТипыПлатежнойСистемыККТ + + + ru + Типы платежной системы ККТ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + СистемаБыстрыхПлатежей + + + ru + Система быстрых платежей + + + + auto + + + + + SWiP + + + ru + Платежная система SWiP + + + + auto + + + + + СертификатНСПК + + + ru + Электронные сертификаты (ФЗ-491) + + + + auto + + + + + ЮКасса + + + ru + Платежная система ЮКасса + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыПлатежныхОпераций.xml b/Enums/ТипыПлатежныхОпераций.xml new file mode 100644 index 0000000..f37369c --- /dev/null +++ b/Enums/ТипыПлатежныхОпераций.xml @@ -0,0 +1,307 @@ + + + + + + e51ed3d2-182e-465a-a6ce-699eb94f7db4 + 88384e76-22f4-4677-aed0-223e8e8d158f + + + dfb1c192-606c-4bc5-8a98-48ad823c69e5 + 115be03a-fb5b-48b1-a052-b546dcb86fbb + + + b3c623b3-8b36-4b11-be8d-e09dfd3ce528 + 8c0c10ad-bda7-4ee0-bf97-018654bd3b46 + + + + ТипыПлатежныхОпераций + + + ru + Типы платежных операций + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + АварийнаяОтмена + + + ru + Аварийная отмена + + + + auto + + + + + ВозвратПоПлатежнойКарте + + + ru + Возврат по платежной карте + + + + auto + + + + + ВозвратЭС + + + ru + Возврат ЭС + + + + auto + + + + + ОплатаПлатежнойКартой + + + ru + Оплата платежной картой + + + + auto + + + + + ОплатаПлатежнойКартойСВыдачейНаличных + + + ru + Оплата платежной картой с выдачей наличных + + + + auto + + + + + ОплатаПлатежнойСистемой + + + ru + Оплата платежной системой + + + + auto + + + + + ПокупкаСЗачислением + + + ru + Покупка с зачислением денежных средств на карту + + + + auto + + + + + ОплатаЭС + + + ru + Оплата ЭС + + + + auto + + + + + ОтменаПлатежаПоПлатежнойКарте + + + ru + Отмена платежа по платежной карте + + + + auto + + + + + ПередачаДанныхФискальногоЧека + + + ru + Передача данных фискального чека + + + + auto + + + + + ПолучениеИдентификатораОперации + + + ru + Получение идентификатора операции + + + + auto + + + + + ПолучениеСоставаКорзины + + + ru + Получение состава корзины + + + + auto + + + + + ПолучениеСпискаЭС + + + ru + Получение списка ЭС + + + + auto + + + + + ПолучениеСпискаИдентификаторовКорзинПокупокТСП + + + ru + Получение списка идентификаторов корзин покупок ТСП + + + + auto + + + + + ПредварительноеОдобрениеВозвратаЭС + + + ru + Предварительное одобрение возврата ЭС + + + + auto + + + + + ПредварительноеОдобрениеИспользованияЭС + + + ru + Предварительное одобрение использования ЭС + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыПодключаемогоОборудования.xml b/Enums/ТипыПодключаемогоОборудования.xml new file mode 100644 index 0000000..73140d9 --- /dev/null +++ b/Enums/ТипыПодключаемогоОборудования.xml @@ -0,0 +1,307 @@ + + + + + + 4fdc847d-32ea-4204-8aff-0384bf06e4b7 + b3a4b002-99b9-4f18-a2cd-1ad5de825c2f + + + 166f01e9-e484-4b05-a14d-ddd85221c59b + 12e5dcfc-69df-4bc2-a7fc-2540cd35d154 + + + d17fa3f4-6afd-456f-86f9-7ff4f7b71232 + ca92f19c-1f30-489e-b7c6-3681964097c9 + + + + ТипыПодключаемогоОборудования + + + ru + Типы подключаемого оборудования + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + DontUse + + + + + СканерШтрихкода + + + ru + Сканеры штрихкода + + + Scanner + auto + + + + + СчитывательМагнитныхКарт + + + ru + Считыватели магнитных карт + + + MSR + auto + + + + + ФискальныйРегистратор + + + ru + Фискальные регистраторы + + + FiscalPrinter + auto + + + + + ПринтерЧеков + + + ru + Принтеры чеков + + + ReceiptPrinter + auto + + + + + ДисплейПокупателя + + + ru + Дисплеи покупателя + + + LineDisplay + auto + + + + + ТерминалСбораДанных + + + ru + Терминалы сбора данных + + + DataCollectionTerminal + auto + + + + + ЭквайринговыйТерминал + + + ru + Эквайринговые терминалы + + + AcquiringTerminal + auto + + + + + ЭлектронныеВесы + + + ru + Электронные весы + + + Scale + auto + + + + + ВесыСПечатьюЭтикеток + + + ru + Весы с печатью этикеток + + + ScaleOffline + auto + + + + + УдалитьККМОфлайн + + + ru + Офлайн-оборудование + + + ECROffline + auto + + + + + ПринтерЭтикеток + + + ru + Принтеры этикеток + + + LabelPrinter + auto + + + + + СчитывательRFID + + + ru + Считыватели RFID + + + RFID + auto + + + + + УстройствоРаспознавания + + + ru + Устройство распознавания + + + + auto + + + + + ККТ + + + ru + ККТ с передачей данных + + + KKT + auto + + + + + ОблачнаяККТ + + + ru + Облачная ККТ + + + + auto + + + + + Несертифицируемое + + + ru + Несертифицируемое оборудование + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыПодключаемогоОборудования/Ext/ManagerModule.bsl b/Enums/ТипыПодключаемогоОборудования/Ext/ManagerModule.bsl new file mode 100644 index 0000000..3546e30 --- /dev/null +++ b/Enums/ТипыПодключаемогоОборудования/Ext/ManagerModule.bsl @@ -0,0 +1,20 @@ +#Область ОбработчикиСобытий + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) + + ДанныеВыбора = Новый СписокЗначений; + + Если Параметры.Свойство("ТипПодключения") И Параметры.ТипПодключения = Перечисления.ТипыПодключенияОборудования.ОбщийДоступ Тогда + ДанныеВыбора.ЗагрузитьЗначения(МенеджерОборудования.ДоступныеТипыОбщедоступногоОборудования()); + Иначе + ДанныеВыбора.ЗагрузитьЗначения(МенеджерОборудования.ДоступныеТипыОборудования()); + КонецЕсли; + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +#КонецЕсли + +#КонецОбласти \ No newline at end of file diff --git a/Enums/ТипыПодключенияОборудования.xml b/Enums/ТипыПодключенияОборудования.xml new file mode 100644 index 0000000..abcb3e4 --- /dev/null +++ b/Enums/ТипыПодключенияОборудования.xml @@ -0,0 +1,125 @@ + + + + + + 4856c6ad-546b-4118-9654-bf99128e246a + a0687c97-3199-4ab3-9072-7125f3e261ed + + + 98e2a4db-1229-4508-b346-27100bfba349 + 30beb2f4-89bb-4b7c-8f37-b40f645105dc + + + 96c82b47-d458-4537-82ec-b857199d666f + afe7678c-7cd7-4a17-b537-052f9ba85b99 + + + + ТипыПодключенияОборудования + + + ru + Типы подключения оборудования + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ЛокальноеПодключение + + + ru + Локальное подключение + + + + auto + + + + + ОбщийДоступ + + + ru + Общий доступ + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыРасчетаДенежнымиСредствами.xml b/Enums/ТипыРасчетаДенежнымиСредствами.xml new file mode 100644 index 0000000..66f7e6c --- /dev/null +++ b/Enums/ТипыРасчетаДенежнымиСредствами.xml @@ -0,0 +1,151 @@ + + + + + + cf957eab-67db-4913-880d-39cbea7ec6cd + 034e69d1-5154-4fb1-b760-566383708622 + + + 6f59f210-9dee-493f-b400-4cec61036b2f + 3a2964b7-f8a0-4b4d-816f-8cc2becc1347 + + + 69595377-cb4e-4325-8e9c-ea0f1e0369b0 + 02cffa10-98bd-4b31-86cf-315bf0d9e842 + + + + ТипыРасчетаДенежнымиСредствами + + + ru + Типы расчета денежными средствами + + + Типы расчета денежными средствами для кассового чека + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ПриходДенежныхСредств + + + ru + Приход денежных средств + + + Чек продажи + auto + + + + + ВозвратДенежныхСредств + + + ru + Возврат денежных средств + + + Чек возврата продажи + auto + + + + + РасходДенежныхСредств + + + ru + Расход денежных средств + + + Чек покупки + auto + + + + + ВозвратРасходаДенежныхСредств + + + ru + Возврат расхода денежных средств + + + Чек возврата покупки + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыСистемНалогообложенияККТ.xml b/Enums/ТипыСистемНалогообложенияККТ.xml new file mode 100644 index 0000000..7bfc7ef --- /dev/null +++ b/Enums/ТипыСистемНалогообложенияККТ.xml @@ -0,0 +1,177 @@ + + + + + + 06d3c2fe-328e-4e46-a6f7-d280cd9d1218 + b02f4307-7820-48a9-bab8-5bf6e3ba8b8b + + + ff8ae88d-5305-40bb-8c4b-310c005e62e4 + 1d4724b6-435d-445a-88ef-9af93ec40f8d + + + 83b9e17b-23bc-421b-8c66-0830fc70d83a + e3fe924f-20d0-49b3-8490-e51fbae19fd8 + + + + ТипыСистемНалогообложенияККТ + + + ru + Типы систем налогообложения ККТ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ОСН + + + ru + Общая + + + Общая систем налогообложения + auto + + + + + УСНДоход + + + ru + Упрощенная доход + + + Упрощенная доход + auto + + + + + УСНДоходРасход + + + ru + Упрощенная доход минус расход + + + Упрощенная доход минус расход + auto + + + + + ЕНВД + + + ru + Единый налог на вмененный доход + + + Единый налог на вмененный доход + auto + + + + + ЕСН + + + ru + Единый сельскохозяйственный налог + + + Единый сельскохозяйственный налог + auto + + + + + Патент + + + ru + Патентная система налогообложения + + + Патентная система налогообложения + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыФискальныхДокументовККТ.xml b/Enums/ТипыФискальныхДокументовККТ.xml new file mode 100644 index 0000000..07fdc2b --- /dev/null +++ b/Enums/ТипыФискальныхДокументовККТ.xml @@ -0,0 +1,151 @@ + + + + + + fd15730d-ce18-4a64-9680-478affd19748 + 145e2771-a4e1-4a1f-b9e8-400bd24f8ef7 + + + 4ccfa25b-ff12-4592-8a78-64cd89e7a559 + 6f093530-2617-430a-9d63-b9ec1c74bfee + + + 68a31d8d-e508-4b23-a4fb-55f14f63bbc2 + 926240ff-fc4e-4152-9107-dd7b71780098 + + + + ТипыФискальныхДокументовККТ + + + ru + Типы фискальных документов ККТ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + КассовыйЧек + + + ru + Кассовый чек + + + + auto + + + + + КассовыйЧекКоррекции + + + ru + Кассовый чек коррекции + + + + auto + + + + + Внесение + + + ru + Внесение денежных средств + + + + auto + + + + + Выемка + + + ru + Выемка денежных средств + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыЧековКоррекции.xml b/Enums/ТипыЧековКоррекции.xml new file mode 100644 index 0000000..15d9ccd --- /dev/null +++ b/Enums/ТипыЧековКоррекции.xml @@ -0,0 +1,125 @@ + + + + + + 4ffc9628-ed85-490f-bfa4-5e5914b9f42e + d58d423b-899f-453a-a894-73cb5a80662f + + + ae37a5e9-56a0-41b1-8f97-304eef1a8008 + 4faf6e5c-5991-4d37-8a67-0e64aaaac925 + + + 9980a6fa-acef-4296-adde-57a2e0c2a0b1 + 86017b1e-b1b1-4ea2-8b61-02b0b4f212fc + + + + ТипыЧековКоррекции + + + ru + Типы чеков коррекции + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + ПоПредписанию + + + ru + По предписанию + + + + auto + + + + + Самостоятельно + + + ru + Самостоятельно + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ТипыШтрихкодов.xml b/Enums/ТипыШтрихкодов.xml new file mode 100644 index 0000000..706d963 --- /dev/null +++ b/Enums/ТипыШтрихкодов.xml @@ -0,0 +1,268 @@ + + + + + + f34f8985-e181-4dae-b746-7692404796fe + 7968c822-138e-4aa8-9f44-758bc9a61aaa + + + f78d9b78-ab68-4bc9-97f4-6e5916d0513a + 9f133d56-1f20-42b5-8fbf-d39e3da05bed + + + 18fcb3d1-45b4-4371-8da2-e493dbac736b + 17c5fec7-7974-400a-b704-bedee130a5a2 + + + + ТипыШтрихкодов + + + ru + Типы штрихкодов + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + PDF417 + + + ru + PDF417 + + + + auto + + + + + DataMatrix + + + ru + Data matrix + + + + auto + + + + + ITF14 + + + ru + ITF14 + + + + auto + + + + + EAN8 + + + ru + EAN8 + + + + auto + + + + + EAN13 + + + ru + EAN13 + + + + auto + + + + + Code39 + + + ru + Code39 + + + + auto + + + + + Code128 + + + ru + Code128 + + + + auto + + + + + SSCC + + + ru + SSCC + + + + auto + + + + + GS1_DataBarExpandedStacked + + + ru + GS1-DataBar Expanded Stacked + + + + auto + + + + + GS1_128 + + + ru + GS1-128 + + + + auto + + + + + QR + + + ru + QR + + + + auto + + + + + GS1_DataMatrix + + + ru + GS-1 Data matrix + + + + auto + + + + + Неопределен + + + ru + Неопределен + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/ШаблоныКодовМаркировкиСУЗ.xml b/Enums/ШаблоныКодовМаркировкиСУЗ.xml new file mode 100644 index 0000000..4621ad4 --- /dev/null +++ b/Enums/ШаблоныКодовМаркировкиСУЗ.xml @@ -0,0 +1,2621 @@ + + + + + + 7ad5d229-9fc0-4008-a169-1003113ae6c5 + b9566430-6dfd-46ce-8cfe-da0112cc88d5 + + + ff10cad1-f8c9-4ea0-b646-9cf5870ee7eb + f0b2be9b-e4f2-4238-889c-2a9b7dbb7d08 + + + 820ff236-f4b9-4269-bab5-0b6acfd6a1ea + 2dc4d1a7-8a1d-457f-a2e3-e76c449457db + + + + ШаблоныКодовМаркировкиСУЗ + + + ru + Шаблоны кодов маркировки СУЗ + + + + false + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + true + BothWays + + + + + + + + Auto + + + + + Обувь + + + ru + Обувь + + + + auto + + + + + БлокТабачныхПачек + + + ru + Блок табачных пачек + + + + auto + + + + + ТабачнаяПачка + + + ru + Табачная пачка + + + + auto + + + + + ЛегкаяПромышленность + + + ru + Единица товара (Товары легкой промышленности и одежда) + + + + auto + + + + + МолочнаяПродукцияПодконтрольнаяВЕТИС + + + ru + Молоко и молочная продукция + + + + auto + + + + + СкоропортящаясяМолочнаяПродукцияВЕТИС + + + ru + Скоропортящаяся молочная продукция ВЕТИС + + + + auto + + + + + МолочнаяПродукцияБезУказанияСроковГодностиВЕТИС + + + ru + Молочная продукция без указания сроков годности ВЕТИС + + + + auto + + + + + Шины + + + ru + Шины и автопокрышки + + + + auto + + + + + Фотоаппараты + + + ru + Единица товара (Фотоаппараты и лампы-вспышки) + + + + auto + + + + + Духи + + + ru + Единица товара (Духи и туалетная вода) + + + + auto + + + + + Велосипеды + + + ru + Велосипеды + + + + auto + + + + + КреслаКоляски + + + ru + Медицинские изделия + + + + auto + + + + + ДухиКомплект + + + ru + Комплект (Духи и туалетная вода) + + + + auto + + + + + ЛегкаяПромышленностьКомплект + + + ru + Комплект (Товары легкой промышленности и одежда) + + + + auto + + + + + ФотоаппаратыКомплект + + + ru + Комплект (Фотоаппараты и лампы-вспышки) + + + + auto + + + + + АльтернативныйТабакБлок + + + ru + Альтернативный табак (Блок GS1) + + + + auto + + + + + АльтернативныйТабакПачка + + + ru + Альтернативный табак (классический табак) + + + + auto + + + + + АльтернативныйТабакПачкаGS1 + + + ru + Альтернативный табак (ПачкаGS1) + + + + auto + + + + + УпакованнаяВода + + + ru + Упакованная вода + + + + auto + + + + + МолочнаяПродукцияБезВЕТИС + + + ru + Молочная продукция без ВЕТИС + + + + auto + + + + + МолочнаяПродукцияСерия6СимволовВЕТИС + + + ru + Молоко и молочная продукция + + + + auto + + + + + МолочнаяПродукцияСерия6СимволовБезВЕТИС + + + ru + Молоко и молочная продукция (без ВЕТИС) + + + + auto + + + + + Антисептики + + + ru + Антисептики + + + + auto + + + + + БАДы + + + ru + БАДы + + + + auto + + + + + Пиво + + + ru + Пиво + + + + auto + + + + + НикотиносодержащаяПродукцияПачка + + + ru + Никотиносодержащая продукция (пачка) + + + + auto + + + + + НикотиносодержащаяПродукцияБлок + + + ru + Никотиносодержащая продукция (блок) + + + + auto + + + + + ПродукцияИзНатуральногоМеха + + + ru + Товары из натурального меха + + + + auto + + + + + НикотиносодержащаяПродукцияНабор + + + ru + Набор (Никотиносодержащая продукция) + + + + auto + + + + + ДухиНабор + + + ru + Набор (Духи и туалетная вода) + + + + auto + + + + + ЛегкаяПромышленностьНабор + + + ru + Набор (Легкая промышленность) + + + + auto + + + + + ФотоаппаратыНабор + + + ru + Набор (Фотоаппараты и лампы-вспышки) + + + + auto + + + + + АнтисептикиНабор + + + ru + Набор (Антисептики) + + + + auto + + + + + МолочнаяПродукцияПодконтрольнаяВЕТИСНабор + + + ru + Набор (Молочная продукция подконтрольная ВЕТИС) + + + + auto + + + + + МолочнаяПродукцияБезВЕТИСНабор + + + ru + Набор (Молочная продукция без ВЕТИС) + + + + auto + + + + + АнтисептикиГрупповаяУпаковка + + + ru + Групповая упаковка (Антисептики) + + + + auto + + + + + МолочнаяПродукцияПодконтрольнаяВЕТИСГрупповаяУпаковка + + + ru + Групповая упаковка (Молочная продукция подконтрольная ВЕТИС) + + + + auto + + + + + МолочнаяПродукцияБезВЕТИСГрупповаяУпаковка + + + ru + Групповая упаковка (Молочная продукция без ВЕТИС) + + + + auto + + + + + ПивоГрупповаяУпаковка + + + ru + Групповая упаковка (Пиво) + + + + auto + + + + + УпакованнаяВодаГрупповаяУпаковка + + + ru + Групповая упаковка (Упакованная вода) + + + + auto + + + + + СоковаяПродукция + + + ru + Соковая продукция + + + + auto + + + + + БезалкогольноеПиво + + + ru + Безалкогольное пиво + + + + auto + + + + + БАДыНабор + + + ru + Набор (БАДы) + + + + auto + + + + + БАДыГрупповаяУпаковка + + + ru + Групповая упаковка (БАДы) + + + + auto + + + + + БАДыСтандартныйКМ + + + ru + БАДы - Стандартный КМ + + + + auto + + + + + БАДыНаборСтандартныйКМ + + + ru + Набор (БАДы - Стандартный КМ) + + + + auto + + + + + БАДыГрупповаяУпаковкаСтандартныйКМ + + + ru + Групповая упаковка (БАДы - Стандартный КМ) + + + + auto + + + + + АнтисептикиСтандартныйКМ + + + ru + Антисептики - Стандартный КМ + + + + auto + + + + + АнтисептикиНаборСтандартныйКМ + + + ru + Набор (Антисептики - Стандартный КМ) + + + + auto + + + + + АнтисептикиГрупповаяУпаковкаСтандартныйКМ + + + ru + Групповая упаковка (Антисептики - Стандартный КМ) + + + + auto + + + + + КреслаКоляскиНабор + + + ru + Набор (Медицинские изделия) + + + + auto + + + + + КреслаКоляскиГрупповаяУпаковка + + + ru + Групповая упаковка (Медицинские изделия) + + + + auto + + + + + СоковаяПродукцияНабор + + + ru + Набор (Соковая продукция) + + + + auto + + + + + СоковаяПродукцияГрупповаяУпаковка + + + ru + Групповая упаковка (Соковая продукция) + + + + auto + + + + + Морепродукты + + + ru + Морепродукты + + + + auto + + + + + МорепродуктыГрупповаяУпаковка + + + ru + Групповая упаковка (Морепродукты) + + + + auto + + + + + МорепродуктыСтандартныйКМ + + + ru + Морепродукты - Стандартный КМ + + + + auto + + + + + МорепродуктыГрупповаяУпаковкаСтандартныйКМ + + + ru + Групповая упаковка (Морепродукты - Стандартный КМ) + + + + auto + + + + + КормаДляЖивотных + + + ru + Корма для животных + + + + auto + + + + + КормаДляЖивотныхСтандартныйКМ + + + ru + Корма для животных - Стандартный КМ + + + + auto + + + + + Мясо + + + ru + Мясо + + + + auto + + + + + ВетеринарныеПрепараты + + + ru + Ветеринарные препараты + + + + auto + + + + + ИгрыИИгрушкиДляДетей + + + ru + Игры и игрушки для детей + + + + auto + + + + + РадиоэлектроннаяПродукция + + + ru + Радиоэлектронная продукция + + + + auto + + + + + РадиоэлектроннаяПродукцияГрупповаяУпаковка + + + ru + Групповая упаковка (Радиоэлектронная продукция) + + + + auto + + + + + РадиоэлектроннаяПродукцияСтандартныйКМ + + + ru + Радиоэлектронная продукция - Стандартный КМ + + + + auto + + + + + РадиоэлектроннаяПродукцияГрупповаяУпаковкаСтандартныйКМ + + + ru + Групповая упаковка (Радиоэлектронная продукция - Стандартный КМ) + + + + auto + + + + + ТитановаяМеталлопродукция + + + ru + Титановая металлопродукция + + + + auto + + + + + КонсервированнаяПродукция + + + ru + Консервированная продукция + + + + auto + + + + + КонсервированнаяПродукцияСтандартныйКМ + + + ru + Консервированная продукция - Стандартный КМ + + + + auto + + + + + РастительныеМасла + + + ru + Растительные масла + + + + auto + + + + + ОптоволокноИОптоволоконнаяПродукция + + + ru + Оптоволокно и оптоволоконная продукция + + + + auto + + + + + ОптоволокноИОптоволоконнаяПродукцияГрупповаяУпаковка + + + ru + Групповая упаковка (Оптоволокно и оптоволоконная продукция) + + + + auto + + + + + ОптоволокноИОптоволоконнаяПродукцияСтандартныйКМ + + + ru + Оптоволокно и оптоволоконная продукция - Стандартный КМ + + + + auto + + + + + ОптоволокноИОптоволоконнаяПродукцияГрупповаяУпаковкаСтандартныйКМ + + + ru + Групповая упаковка (Оптоволокно и оптоволоконная продукция - Стандартный КМ) + + + + auto + + + + + ПарфюмерныеИКосметическиеСредстваИБытоваяХимия + + + ru + Парфюмерные и косметические средства и бытовая химия + + + + auto + + + + + ПарфюмерныеИКосметическиеСредстваИБытоваяХимияСтандартныйКМ + + + ru + Парфюмерные и косметические средства и бытовая химия - Стандартный КМ + + + + auto + + + + + КормаДляЖивотныхБезВЕТИС + + + ru + Корма для животных (без ВетИС) + + + + auto + + + + + КормаДляЖивотныхБезВЕТИССтандартныйКМ + + + ru + Корма для животных (без ВетИС) - Стандартный КМ + + + + auto + + + + + КонсервированнаяПродукцияБезВЕТИС + + + ru + Консервированная продукция (без ВетИС) + + + + auto + + + + + КонсервированнаяПродукцияБезВЕТИССтандартныйКМ + + + ru + Консервированная продукция (без ВетИС) - Стандартный КМ + + + + auto + + + + + РастительныеМаслаСтандартныйКМ + + + ru + Растительные масла - Стандартный КМ + + + + auto + + + + + ПечатнаяПродукция + + + ru + Печатная продукция + + + + auto + + + + + ПечатнаяПродукцияСтандартныйКМ + + + ru + Печатная продукция стандартный КМ + + + + auto + + + + + ПечатнаяПродукцияГрупповаяУпаковка + + + ru + Печатная продукция групповая упаковка + + + + auto + + + + + ПечатнаяПродукцияГрупповаяУпаковкаСтандартныйКМ + + + ru + Печатная продукция групповая упаковка стандартный КМ + + + + auto + + + + + СтроительныеМатериалы + + + ru + Строительные материалы + + + + auto + + + + + СтроительныеМатериалыСтандартныйКМ + + + ru + Строительные материалы стандартный КМ + + + + auto + + + + + СтроительныеМатериалыГрупповаяУпаковка + + + ru + Строительные материалы групповая упаковка + + + + auto + + + + + СтроительныеМатериалыГрупповаяУпаковкаСтандартныйКМ + + + ru + Строительные материалы групповая упаковка стандартный КМ + + + + auto + + + + + ОтопительныеПриборы + + + ru + Отопительные приборы + + + + auto + + + + + ОтопительныеПриборыСтандартныйКМ + + + ru + Отопительные приборы стандартный КМ + + + + auto + + + + + ОтопительныеПриборыГрупповаяУпаковка + + + ru + Отопительные приборы групповая упаковка + + + + auto + + + + + ОтопительныеПриборыГрупповаяУпаковкаСтандартныйКМ + + + ru + Отопительные приборы групповая упаковка стандартный КМ + + + + auto + + + + + Бакалея + + + ru + Бакалея + + + + auto + + + + + БакалеяСтандартныйКМ + + + ru + Бакалея стандартный КМ + + + + auto + + + + + БакалеяГрупповаяУпаковка + + + ru + Бакалея групповая упаковка + + + + auto + + + + + БакалеяГрупповаяУпаковкаСтандартныйКМ + + + ru + Бакалея групповая упаковка стандартный КМ + + + + auto + + + + + АлкогольнаяПродукцияДо9Процентов + + + ru + Алкогольная продукция до9 процентов + + + + auto + + + + + АлкогольнаяПродукцияДо9ПроцентовСтандартныйКМ + + + ru + Алкогольная продукция до9 процентов стандартный КМ + + + + auto + + + + + АлкогольнаяПродукцияДо9ПроцентовГрупповаяУпаковка + + + ru + Алкогольная продукция до9 процентов групповая упаковка + + + + auto + + + + + АлкогольнаяПродукцияДо9ПроцентовГрупповаяУпаковкаСтандартныйКМ + + + ru + Алкогольная продукция до9 процентов групповая упаковка стандартный КМ + + + + auto + + + + + СладостиИКондитерскиеИзделия + + + ru + Сладости и кондитерские изделия + + + + auto + + + + + СладостиИКондитерскиеИзделияСтандартныйКМ + + + ru + Сладости и кондитерские изделия стандартный КМ + + + + auto + + + + + СладостиИКондитерскиеИзделияГрупповаяУпаковка + + + ru + Сладости и кондитерские изделия групповая упаковка + + + + auto + + + + + СладостиИКондитерскиеИзделияГрупповаяУпаковкаСтандартныйКМ + + + ru + Сладости и кондитерские изделия групповая упаковка стандартный КМ + + + + auto + + + + + ПиротехническиеИзделияИСредстваПожарнойБезопасности + + + ru + Пиротехнические изделия и средства пожарной безопасности + + + + auto + + + + + ПиротехническиеИзделияИСредстваПожарнойБезопасностиСтандартныйКМ + + + ru + Пиротехнические изделия и средства пожарной безопасности стандартный КМ + + + + auto + + + + + ПиротехническиеИзделияИСредстваПожарнойБезопасностиГрупповаяУпаковка + + + ru + Пиротехнические изделия и средства пожарной безопасности групповая упаковка + + + + auto + + + + + ПиротехническиеИзделияИСредстваПожарнойБезопасностиГрупповаяУпаковкаСтКМ + + + ru + Пиротехнические изделия и средства пожарной безопасности групповая упаковка ст КМ + + + + auto + + + + + ПиротехническиеИзделияИСредстваПожарнойБезопасностиНабор + + + ru + Пиротехнические изделия и средства пожарной безопасности набор + + + + auto + + + + + ПиротехническиеИзделияИСредстваПожарнойБезопасностиНаборСтандартныйКМ + + + ru + Пиротехнические изделия и средства пожарной безопасности набор стандартный КМ + + + + auto + + + + + ПечатнаяПродукцияНабор + + + ru + Печатная продукция набор + + + + auto + + + + + ПечатнаяПродукцияНаборСтандартныйКМ + + + ru + Печатная продукция набор стандартный КМ + + + + auto + + + + + СтроительныеМатериалыНабор + + + ru + Строительные материалы набор + + + + auto + + + + + СтроительныеМатериалыНаборСтандартныйКМ + + + ru + Строительные материалы набор стандартный КМ + + + + auto + + + + + ОтопительныеПриборыНабор + + + ru + Отопительные приборы набор + + + + auto + + + + + ОтопительныеПриборыНаборСтандартныйКМ + + + ru + Отопительные приборы набор стандартный КМ + + + + auto + + + + + БакалеяНабор + + + ru + Бакалея набор + + + + auto + + + + + БакалеяНаборСтандартныйКМ + + + ru + Бакалея набор стандартный КМ + + + + auto + + + + + АлкогольнаяПродукцияДо9ПроцентовНабор + + + ru + Алкогольная продукция до9 процентов набор + + + + auto + + + + + АлкогольнаяПродукцияДо9ПроцентовНаборСтандартныйКМ + + + ru + Алкогольная продукция до9 процентов набор стандартный КМ + + + + auto + + + + + СладостиИКондитерскиеИзделияНабор + + + ru + Сладости и кондитерские изделия набор + + + + auto + + + + + СладостиИКондитерскиеИзделияНаборСтандартныйКМ + + + ru + Сладости и кондитерские изделия набор стандартный КМ + + + + auto + + + + + КабельнаяПродукция + + + ru + Кабельная продукция + + + + auto + + + + + КабельнаяПродукцияСтандартныйКМ + + + ru + Кабельная продукция стандартный КМ + + + + auto + + + + + КабельнаяПродукцияГрупповаяУпаковка + + + ru + Кабельная продукция групповая упаковка + + + + auto + + + + + КабельнаяПродукцияГрупповаяУпаковкаСтандартныйКМ + + + ru + Кабельная продукция групповая упаковка стандартный КМ + + + + auto + + + + + КабельнаяПродукцияНабор + + + ru + Кабельная продукция набор + + + + auto + + + + + КабельнаяПродукцияНаборСтандартныйКМ + + + ru + Кабельная продукция набор стандартный КМ + + + + auto + + + + + МоторныеМасла + + + ru + Моторные масла + + + + auto + + + + + МоторныеМаслаСтандартныйКМ + + + ru + Моторные масла стандартный КМ + + + + auto + + + + + МоторныеМаслаГрупповаяУпаковка + + + ru + Моторные масла групповая упаковка + + + + auto + + + + + МоторныеМаслаГрупповаяУпаковкаСтандартныйКМ + + + ru + Моторные масла групповая упаковка стандартный КМ + + + + auto + + + + + МоторныеМаслаНабор + + + ru + Моторные масла набор + + + + auto + + + + + МоторныеМаслаНаборСтандартныйКМ + + + ru + Моторные масла набор стандартный КМ + + + + auto + + + + + ИгрыИИгрушкиДляДетейСтандартныйКМ + + + ru + Игры и игрушки для детей стандартный КМ + + + + auto + + + + + КормаДляЖивотныхГрупповаяУпаковка + + + ru + Корма для животных групповая упаковка + + + + auto + + + + + КормаДляЖивотныхГрупповаяУпаковкаСтандартныйКМ + + + ru + Корма для животных групповая упаковка стандартный КМ + + + + auto + + + + + КормаДляЖивотныхНабор + + + ru + Корма для животных набор + + + + auto + + + + + КормаДляЖивотныхНаборСтандартныйКМ + + + ru + Корма для животных набор стандартный КМ + + + + auto + + + + + КормаДляЖивотныхБезВЕТИСГрупповаяУпаковка + + + ru + Корма для животных без ВЕТИСГрупповая упаковка + + + + auto + + + + + КормаДляЖивотныхБезВЕТИСГрупповаяУпаковкаСтандартныйКМ + + + ru + Корма для животных без ВЕТИСГрупповая упаковка стандартный КМ + + + + auto + + + + + КормаДляЖивотныхБезВЕТИСНабор + + + ru + Корма для животных без ВЕТИСНабор + + + + auto + + + + + КормаДляЖивотныхБезВЕТИСНаборСтандартныйКМ + + + ru + Корма для животных без ВЕТИСНабор стандартный КМ + + + + auto + + + + + МясоСтандартныйКМ + + + ru + Мясо стандартный КМ + + + + auto + + + + + МясоГрупповаяУпаковка + + + ru + Мясо групповая упаковка + + + + auto + + + + + МясоГрупповаяУпаковкаСтандартныйКМ + + + ru + Мясо групповая упаковка стандартный КМ + + + + auto + + + + + МясоНабор + + + ru + Мясо набор + + + + auto + + + + + МясоНаборСтандартныйКМ + + + ru + Мясо набор стандартный КМ + + + + auto + + + + + ВетеринарныеПрепаратыСтандартныйКМ + + + ru + Ветеринарные препараты стандартный КМ + + + + auto + + + + + ВетеринарныеПрепаратыГрупповаяУпаковка + + + ru + Ветеринарные препараты групповая упаковка + + + + auto + + + + + ВетеринарныеПрепаратыГрупповаяУпаковкаСтандартныйКМ + + + ru + Ветеринарные препараты групповая упаковка стандартный КМ + + + + auto + + + + + ВетеринарныеПрепаратыНабор + + + ru + Ветеринарные препараты набор + + + + auto + + + + + ВетеринарныеПрепаратыНаборСтандартныйКМ + + + ru + Ветеринарные препараты набор стандартный КМ + + + + auto + + + + + ИгрыИИгрушкиДляДетейГрупповаяУпаковка + + + ru + Игры и игрушки для детей групповая упаковка + + + + auto + + + + + ИгрыИИгрушкиДляДетейГрупповаяУпаковкаСтандартныйКМ + + + ru + Игры и игрушки для детей групповая упаковка стандартный КМ + + + + auto + + + + + ИгрыИИгрушкиДляДетейНабор + + + ru + Игры и игрушки для детей набор + + + + auto + + + + + ИгрыИИгрушкиДляДетейНаборСтандартныйКМ + + + ru + Игры и игрушки для детей набор стандартный КМ + + + + auto + + + + + РадиоэлектроннаяПродукцияНабор + + + ru + Радиоэлектронная продукция набор + + + + auto + + + + + РадиоэлектроннаяПродукцияНаборСтандартныйКМ + + + ru + Радиоэлектронная продукция набор стандартный КМ + + + + auto + + + + + ТитановаяМеталлопродукцияСтандартныйКМ + + + ru + Титановая металлопродукция стандартный КМ + + + + auto + + + + + ТитановаяМеталлопродукцияГрупповаяУпаковка + + + ru + Титановая металлопродукция групповая упаковка + + + + auto + + + + + ТитановаяМеталлопродукцияГрупповаяУпаковкаСтандартныйКМ + + + ru + Титановая металлопродукция групповая упаковка стандартный КМ + + + + auto + + + + + ТитановаяМеталлопродукцияНабор + + + ru + Титановая металлопродукция набор + + + + auto + + + + + ТитановаяМеталлопродукцияНаборСтандартныйКМ + + + ru + Титановая металлопродукция набор стандартный КМ + + + + auto + + + + + КонсервированнаяПродукцияГрупповаяУпаковка + + + ru + Консервированная продукция групповая упаковка + + + + auto + + + + + КонсервированнаяПродукцияГрупповаяУпаковкаСтандартныйКМ + + + ru + Консервированная продукция групповая упаковка стандартный КМ + + + + auto + + + + + КонсервированнаяПродукцияНабор + + + ru + Консервированная продукция набор + + + + auto + + + + + КонсервированнаяПродукцияНаборСтандартныйКМ + + + ru + Консервированная продукция набор стандартный КМ + + + + auto + + + + + КонсервированнаяПродукцияБезВЕТИСГрупповаяУпаковка + + + ru + Консервированная продукция без ВЕТИСГрупповая упаковка + + + + auto + + + + + КонсервированнаяПродукцияБезВЕТИСГрупповаяУпаковкаСтандартныйКМ + + + ru + Консервированная продукция без ВЕТИСГрупповая упаковка стандартный КМ + + + + auto + + + + + КонсервированнаяПродукцияБезВЕТИСНабор + + + ru + Консервированная продукция без ВЕТИСНабор + + + + auto + + + + + КонсервированнаяПродукцияБезВЕТИСНаборСтандартныйКМ + + + ru + Консервированная продукция без ВЕТИСНабор стандартный КМ + + + + auto + + + + + РастительныеМаслаГрупповаяУпаковка + + + ru + Растительные масла групповая упаковка + + + + auto + + + + + РастительныеМаслаГрупповаяУпаковкаСтандартныйКМ + + + ru + Растительные масла групповая упаковка стандартный КМ + + + + auto + + + + + РастительныеМаслаНабор + + + ru + Растительные масла набор + + + + auto + + + + + РастительныеМаслаНаборСтандартныйКМ + + + ru + Растительные масла набор стандартный КМ + + + + auto + + + + + ОптоволокноИОптоволоконнаяПродукцияНабор + + + ru + Оптоволокно и оптоволоконная продукция набор + + + + auto + + + + + ОптоволокноИОптоволоконнаяПродукцияНаборСтандартныйКМ + + + ru + Оптоволокно и оптоволоконная продукция набор стандартный КМ + + + + auto + + + + + ПарфюмерныеИКосметическиеСредстваИБытоваяХимияГрупповаяУпаковка + + + ru + Парфюмерные и косметические средства и бытовая химия групповая упаковка + + + + auto + + + + + ПарфюмерныеИКосметическиеСредстваИБытоваяХимияГрупповаяУпаковкаСтандартныйКМ + + + ru + Парфюмерные и косметические средства и бытовая химия групповая упаковка стандартный КМ + + + + auto + + + + + ПарфюмерныеИКосметическиеСредстваИБытоваяХимияНабор + + + ru + Парфюмерные и косметические средства и бытовая химия набор + + + + auto + + + + + ПарфюмерныеИКосметическиеСредстваИБытоваяХимияНаборСтандартныйКМ + + + ru + Парфюмерные и косметические средства и бытовая химия набор стандартный КМ + + + + auto + + + + + ПолимерныеТрубы + + + ru + Полимерные трубы + + + + auto + + + + + ПолимерныеТрубыСтандартныйКМ + + + ru + Полимерные трубы стандартный КМ + + + + auto + + + + + ПолимерныеТрубыГрупповаяУпаковка + + + ru + Полимерные трубы групповая упаковка + + + + auto + + + + + ПолимерныеТрубыГрупповаяУпаковкаСтандартныйКМ + + + ru + Полимерные трубы групповая упаковка стандартный КМ + + + + auto + + + + + ПолимерныеТрубыНабор + + + ru + Полимерные трубы набор + + + + auto + + + + + ПолимерныеТрубыНаборСтандартныйКМ + + + ru + Полимерные трубы набор стандартный КМ + + + + auto + + + + + МорепродуктыНабор + + + ru + Морепродукты набор + + + + auto + + + + + МорепродуктыНаборСтандартныйКМ + + + ru + Морепродукты набор стандартный КМ + + + + auto + + + + + БезалкогольноеПивоНабор + + + ru + Безалкогольное пиво набор + + + + auto + + + + + БезалкогольноеПивоГрупповаяУпаковка + + + ru + Безалкогольное пиво групповая упаковка + + + + auto + + + + + \ No newline at end of file diff --git a/Ext/ClientApplicationInterface.xml b/Ext/ClientApplicationInterface.xml new file mode 100644 index 0000000..f7f63e9 --- /dev/null +++ b/Ext/ClientApplicationInterface.xml @@ -0,0 +1,27 @@ + + + + + + + b553047f-c9aa-4157-978d-448ecad24248 + + + + + b2735bd3-d822-4430-ba59-c9e869693b24 + + + + + 13322b22-3960-4d68-93a6-fe2dd7f28ca3 + + + + + + + + + + \ No newline at end of file diff --git a/Ext/HomePageWorkArea.xml b/Ext/HomePageWorkArea.xml new file mode 100644 index 0000000..520643a --- /dev/null +++ b/Ext/HomePageWorkArea.xml @@ -0,0 +1,13 @@ + + + OneColumn + + +
Document.ПоставкаМП.Form.ФормаСписка
+ 10 + + true + +
+
+
\ No newline at end of file diff --git a/Ext/MainSectionCommandInterface.xml b/Ext/MainSectionCommandInterface.xml new file mode 100644 index 0000000..b3eae76 --- /dev/null +++ b/Ext/MainSectionCommandInterface.xml @@ -0,0 +1,110 @@ + + + + + + true + + + + + true + + + + + false + + + + + false + + + + + false + + + + + false + + + + + true + + + + + true + + + + + + NavigationPanelImportant + Manual + + + NavigationPanelImportant + Manual + + + NavigationPanelImportant + Manual + + + NavigationPanelImportant + Manual + + + NavigationPanelOrdinary + Manual + + + NavigationPanelOrdinary + Manual + + + ActionsPanelTools + Manual + + + ActionsPanelTools + Manual + + + + + NavigationPanelImportant + + + NavigationPanelImportant + + + NavigationPanelImportant + + + NavigationPanelImportant + + + NavigationPanelOrdinary + + + NavigationPanelOrdinary + + + ActionsPanelTools + + + ActionsPanelTools + + + + NavigationPanelImportant + NavigationPanelOrdinary + ActionsPanelTools + + \ No newline at end of file diff --git a/Ext/ManagedApplicationModule.bsl b/Ext/ManagedApplicationModule.bsl new file mode 100644 index 0000000..1142c4e --- /dev/null +++ b/Ext/ManagedApplicationModule.bsl @@ -0,0 +1,44 @@ + +#Область ОписаниеПеременных + +// ПодключаемоеОборудование +Перем ПараметрыПриложения Экспорт; +// Конец ПодключаемоеОборудование + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередНачаломРаботыСистемы(Отказ) + + // ПодключаемоеОборудование + ИнтеграцияПодсистемБПОКлиент.ПередНачаломРаботыСистемы(); + // Конец ПодключаемоеОборудование + +КонецПроцедуры + +Процедура ПриНачалеРаботыСистемы() + + // ПодключаемоеОборудование + ОткрытьФорму("ОбщаяФорма.ФормаАвторизации",,,,,,,РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + ИнтеграцияПодсистемБПОКлиент.ПриНачалеРаботыСистемы(); + // Конец ПодключаемоеОборудование + +КонецПроцедуры + +Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) + + // ПодключаемоеОборудование + ИнтеграцияПодсистемБПОКлиент.ОбработкаВнешнегоСобытия(Источник, Событие, Данные); + // Конец ПодключаемоеОборудование + +КонецПроцедуры + +Процедура ПередЗавершениемРаботыСистемы(Отказ, ТекстПредупреждения) + + ИнтеграцияПодсистемБПОКлиент.ПередЗавершениемРаботыСистемы(Отказ, ТекстПредупреждения); + +КонецПроцедуры + + +#КонецОбласти \ No newline at end of file diff --git a/Ext/OrdinaryApplicationModule.bsl b/Ext/OrdinaryApplicationModule.bsl new file mode 100644 index 0000000..25fd658 --- /dev/null +++ b/Ext/OrdinaryApplicationModule.bsl @@ -0,0 +1,36 @@ +#Область ОписаниеПеременных + +// ПодключаемоеОборудование +Перем ПараметрыПриложения Экспорт; +// Конец ПодключаемоеОборудование + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередНачаломРаботыСистемы(Отказ) + + // ПодключаемоеОборудование + ИнтеграцияПодсистемБПОКлиент.ПередНачаломРаботыСистемы(); + // Конец ПодключаемоеОборудование + +КонецПроцедуры + +Процедура ПриНачалеРаботыСистемы() + + // ПодключаемоеОборудование + ИнтеграцияПодсистемБПОКлиент.ПриНачалеРаботыСистемы(); + // Конец ПодключаемоеОборудование + +КонецПроцедуры + +Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) + + // ПодключаемоеОборудование + ИнтеграцияПодсистемБПОКлиент.ОбработкаВнешнегоСобытия(Источник, Событие, Данные); + // Конец ПодключаемоеОборудование + +КонецПроцедуры + + +#КонецОбласти \ No newline at end of file diff --git a/Ext/ParentConfigurations.bin b/Ext/ParentConfigurations.bin new file mode 100644 index 0000000..5208bc9 --- /dev/null +++ b/Ext/ParentConfigurations.bin @@ -0,0 +1 @@ +{6,0,1,f65ede3b-20a8-4436-a994-f90ba554f8cd,0,d8be4fed-7409-45ef-aa49-cef009412854,"3.2.620","Фирма ""1С""","БиблиотекаПодключаемогоОборудования",731,1,0,1b445006-7563-481d-958b-5820443930d6,1b445006-7563-481d-958b-5820443930d6,0,0,4292e345-8dde-43a7-a2d4-557fc5ba3369,4292e345-8dde-43a7-a2d4-557fc5ba3369,0,0,c7e08cdf-ff48-4587-81e5-38991973c58b,c7e08cdf-ff48-4587-81e5-38991973c58b,0,0,e62be839-d3c0-4ee9-b370-54d77665643e,e62be839-d3c0-4ee9-b370-54d77665643e,0,0,a44321d9-a2f8-4fb9-8724-a1840ac2396f,a44321d9-a2f8-4fb9-8724-a1840ac2396f,0,0,b7842f18-fb5b-4517-8353-f8b623000091,b7842f18-fb5b-4517-8353-f8b623000091,0,0,8d06de65-3ebc-4c66-a3b6-c732a624760d,8d06de65-3ebc-4c66-a3b6-c732a624760d,0,0,d95cf8ff-0d39-4819-ad92-890bf01a4e13,d95cf8ff-0d39-4819-ad92-890bf01a4e13,0,0,98356598-c609-4f90-8d12-e8e266df6e65,98356598-c609-4f90-8d12-e8e266df6e65,0,0,329daa13-ab41-4f3f-a499-6196225fb0ee,329daa13-ab41-4f3f-a499-6196225fb0ee,0,0,756ae85b-eecd-4f7d-ac35-d1e96a561cc4,756ae85b-eecd-4f7d-ac35-d1e96a561cc4,0,0,a45c80de-2daa-4534-a1e9-8c9abdf8e542,a45c80de-2daa-4534-a1e9-8c9abdf8e542,0,0,b7d1b5e6-5ed5-488f-8859-3926c275b369,b7d1b5e6-5ed5-488f-8859-3926c275b369,0,0,70137e91-c9f7-47c3-a0a6-1ccfecec5e02,70137e91-c9f7-47c3-a0a6-1ccfecec5e02,0,0,a2acb9f1-1b73-44db-8209-a44e60ce3791,a2acb9f1-1b73-44db-8209-a44e60ce3791,0,0,9cdbe74b-bd42-4a2f-b8df-50cf9c049242,9cdbe74b-bd42-4a2f-b8df-50cf9c049242,0,0,e1be857b-8c41-488b-8d61-db2ab8e20eb2,e1be857b-8c41-488b-8d61-db2ab8e20eb2,0,0,7468729d-c502-4950-952c-4fd8f3f82979,7468729d-c502-4950-952c-4fd8f3f82979,0,0,1b606230-41a0-4c40-8548-cd29dd00b636,1b606230-41a0-4c40-8548-cd29dd00b636,0,0,50ed3573-da4f-455a-a034-d2ea5afda3de,50ed3573-da4f-455a-a034-d2ea5afda3de,0,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,0,0,0349b290-2ea7-4d82-96d7-84b9b23ad0a3,0349b290-2ea7-4d82-96d7-84b9b23ad0a3,0,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,0,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,0,0,01417e32-3897-43d5-aea7-9d138159cf74,01417e32-3897-43d5-aea7-9d138159cf74,0,0,4d411e77-b001-497e-ba6a-0dfefac52e9d,4d411e77-b001-497e-ba6a-0dfefac52e9d,0,0,151fb808-2c83-4970-b4b4-90343e45171a,151fb808-2c83-4970-b4b4-90343e45171a,0,0,e635d288-bd5e-495a-9617-b30e33fae921,e635d288-bd5e-495a-9617-b30e33fae921,0,0,4c6075a0-40c7-4cd6-be25-931940ddbd34,4c6075a0-40c7-4cd6-be25-931940ddbd34,0,0,a3e0068e-95cd-4e7c-8950-6aed9ede5617,a3e0068e-95cd-4e7c-8950-6aed9ede5617,0,0,ecb819d2-ff11-41a5-8e9e-fe07839157da,ecb819d2-ff11-41a5-8e9e-fe07839157da,0,0,2a1477c5-6a2f-41f1-828b-9db31b1c739b,2a1477c5-6a2f-41f1-828b-9db31b1c739b,0,0,2d62131c-a779-469f-b613-d8ab6df1735e,2d62131c-a779-469f-b613-d8ab6df1735e,0,0,aaed7ad5-b12e-4513-9c78-34aa7976f49b,aaed7ad5-b12e-4513-9c78-34aa7976f49b,0,0,b4758cbf-e5a9-4abf-8196-07791f204a00,b4758cbf-e5a9-4abf-8196-07791f204a00,0,0,106e34e5-6a4e-46e2-8821-31fb4adafbf3,106e34e5-6a4e-46e2-8821-31fb4adafbf3,0,0,5da3f45b-71d0-4185-a4a7-b891d44989f0,5da3f45b-71d0-4185-a4a7-b891d44989f0,0,0,f6fc6c71-0629-4c3f-8569-5779cd2bb0b3,f6fc6c71-0629-4c3f-8569-5779cd2bb0b3,0,0,56ca17b1-363b-4189-b979-8247a2b15795,56ca17b1-363b-4189-b979-8247a2b15795,0,0,d4b287e9-b047-4dce-bdaf-9322a88f2879,d4b287e9-b047-4dce-bdaf-9322a88f2879,0,0,de7167de-3cb6-4ace-9c61-157d596b3795,de7167de-3cb6-4ace-9c61-157d596b3795,0,0,e868c120-e192-4f66-8ccc-ce8bde010395,e868c120-e192-4f66-8ccc-ce8bde010395,0,0,4fbc198f-efad-462c-bf8b-2b9b5a414e9b,4fbc198f-efad-462c-bf8b-2b9b5a414e9b,0,0,63a3566e-badd-4bce-869e-6b9592221494,63a3566e-badd-4bce-869e-6b9592221494,0,0,f27da1e0-469f-43ab-a099-2d5cc9622995,f27da1e0-469f-43ab-a099-2d5cc9622995,0,0,ebad8398-5b15-4625-99e6-fb59229115f1,ebad8398-5b15-4625-99e6-fb59229115f1,0,0,94eca0f3-d3c8-4a68-9167-558005a9e56c,94eca0f3-d3c8-4a68-9167-558005a9e56c,0,0,c78dcdf6-36eb-43ea-a61e-1eb252d7f94a,c78dcdf6-36eb-43ea-a61e-1eb252d7f94a,0,0,2ce40909-4b5f-40f2-883c-b4022bd56ecb,2ce40909-4b5f-40f2-883c-b4022bd56ecb,0,0,ae1860de-2dee-4d38-a86e-ad5be06b813d,ae1860de-2dee-4d38-a86e-ad5be06b813d,0,0,02faccf7-3678-47d5-9272-cf675bd1830d,02faccf7-3678-47d5-9272-cf675bd1830d,0,0,336b874f-2029-4ffc-98d7-fae8e48d3e07,336b874f-2029-4ffc-98d7-fae8e48d3e07,0,0,9aa0a0cb-9547-4868-9495-b00f3ecd2b3a,9aa0a0cb-9547-4868-9495-b00f3ecd2b3a,0,0,a9e31d90-fe65-47c3-8109-6e1eae862f53,a9e31d90-fe65-47c3-8109-6e1eae862f53,0,0,4edafa7b-a2d2-45bc-ad5a-89ddb0f74d48,4edafa7b-a2d2-45bc-ad5a-89ddb0f74d48,0,0,cf672c10-3e81-4a91-b73d-059784f95956,cf672c10-3e81-4a91-b73d-059784f95956,0,0,d4cf1dfc-e86d-4ce6-8704-12b79f2ae3f9,d4cf1dfc-e86d-4ce6-8704-12b79f2ae3f9,0,0,9d4e0c08-2083-44f4-a2d1-cb9435506b1d,9d4e0c08-2083-44f4-a2d1-cb9435506b1d,0,0,a22f05a1-e4f5-48f3-a408-7188ca9fcbfa,a22f05a1-e4f5-48f3-a408-7188ca9fcbfa,0,0,29417d6c-496e-4ec4-bbc4-5c2177ced209,29417d6c-496e-4ec4-bbc4-5c2177ced209,0,0,096b38f7-8861-4442-8c9c-4e8cacf1a550,096b38f7-8861-4442-8c9c-4e8cacf1a550,0,0,7c45e8ff-4b67-4d7e-abce-fa40bbdff30e,7c45e8ff-4b67-4d7e-abce-fa40bbdff30e,0,0,c3086f25-efb9-4587-b79c-0e0df68e11c9,c3086f25-efb9-4587-b79c-0e0df68e11c9,0,0,fab4d01f-1b8a-4dc4-ac72-c4a02fa3271e,fab4d01f-1b8a-4dc4-ac72-c4a02fa3271e,0,0,05d3a5d4-9d84-43b6-8525-b615a5283cfa,05d3a5d4-9d84-43b6-8525-b615a5283cfa,0,0,0649d8c7-13df-4fe8-9cde-618fd7af637d,0649d8c7-13df-4fe8-9cde-618fd7af637d,0,0,013db9cd-9bc9-46ea-9bf9-e9275603d6d9,013db9cd-9bc9-46ea-9bf9-e9275603d6d9,0,0,c04cb836-c637-4591-aac3-ba3f9d4032e0,c04cb836-c637-4591-aac3-ba3f9d4032e0,0,0,1898d146-b1b2-45a3-b4a7-08a6a795babc,1898d146-b1b2-45a3-b4a7-08a6a795babc,0,0,c1aa46f4-737b-4fce-ac89-5dd1ffe29310,c1aa46f4-737b-4fce-ac89-5dd1ffe29310,0,0,cb38b6e8-4470-4d4d-833a-6b92a9c2c5f3,cb38b6e8-4470-4d4d-833a-6b92a9c2c5f3,0,0,613a4e9a-d65b-441d-a910-ef5ce33e41c0,613a4e9a-d65b-441d-a910-ef5ce33e41c0,0,0,f7c3e6f2-2b42-4558-8719-ad305dcc7447,f7c3e6f2-2b42-4558-8719-ad305dcc7447,0,0,5fd64c24-d247-432e-94ff-6d9abd69c8c4,5fd64c24-d247-432e-94ff-6d9abd69c8c4,0,0,d9a961d2-4aff-4693-9812-3bcc51b0b95b,d9a961d2-4aff-4693-9812-3bcc51b0b95b,0,0,3031b1b8-e2c9-4b8f-9a5d-b67dff49dc01,3031b1b8-e2c9-4b8f-9a5d-b67dff49dc01,0,0,351c4552-b8a2-4f2b-9f45-09cf7fc68aff,351c4552-b8a2-4f2b-9f45-09cf7fc68aff,0,0,549d3c98-1596-412e-8256-0ff297b3076f,549d3c98-1596-412e-8256-0ff297b3076f,0,0,124d55fc-75e6-4007-b0e5-390a2481b0b0,124d55fc-75e6-4007-b0e5-390a2481b0b0,0,0,e5742da4-f655-4e67-941d-99236d972a99,e5742da4-f655-4e67-941d-99236d972a99,0,0,2c54e561-3748-457f-b54e-a83074af43c1,2c54e561-3748-457f-b54e-a83074af43c1,0,0,bd83a037-5950-46d3-8ffe-00010adbdc3f,bd83a037-5950-46d3-8ffe-00010adbdc3f,0,0,85fe799b-d290-4e76-8b98-9a12ae6a0b4a,85fe799b-d290-4e76-8b98-9a12ae6a0b4a,0,0,863a0aab-a806-43a9-9103-ec3603b97d2d,863a0aab-a806-43a9-9103-ec3603b97d2d,0,0,8f0e3c3f-8bc2-44ed-ac06-493ef2692493,8f0e3c3f-8bc2-44ed-ac06-493ef2692493,0,0,d0ea1487-f3ed-4c92-b723-98aa1135504e,d0ea1487-f3ed-4c92-b723-98aa1135504e,0,0,3c152f4a-ce70-4e82-961a-08dec4b865ee,3c152f4a-ce70-4e82-961a-08dec4b865ee,0,0,56c5c9ca-7b91-468d-aa8a-d0507e178653,56c5c9ca-7b91-468d-aa8a-d0507e178653,0,0,01042cbf-90f3-45ad-b4d2-2836f1e9e74f,01042cbf-90f3-45ad-b4d2-2836f1e9e74f,0,0,645cf9a2-4eed-4886-8daf-069a18e26e10,645cf9a2-4eed-4886-8daf-069a18e26e10,0,0,49b2f814-a917-49fb-89ab-718924869071,49b2f814-a917-49fb-89ab-718924869071,0,0,7645e68f-bac6-422b-9769-da2312c9fd4f,7645e68f-bac6-422b-9769-da2312c9fd4f,0,0,d9bc3673-272b-4c37-8066-35bf5243e5fe,d9bc3673-272b-4c37-8066-35bf5243e5fe,0,0,ae18cae4-23f5-4441-b828-b497fb09c76a,ae18cae4-23f5-4441-b828-b497fb09c76a,0,0,f288bae3-8282-4cd4-b634-de6207c9ee83,f288bae3-8282-4cd4-b634-de6207c9ee83,0,0,7270ae27-b4ce-4fd8-9ceb-a4c23814bd4a,7270ae27-b4ce-4fd8-9ceb-a4c23814bd4a,0,0,a81fcb4f-515d-41ef-bac9-a6a5b1952620,a81fcb4f-515d-41ef-bac9-a6a5b1952620,0,0,c0fd5fac-255b-4963-ba2a-a718254e5962,c0fd5fac-255b-4963-ba2a-a718254e5962,0,0,1c48b7da-7f87-454d-a509-a74346e44ad7,1c48b7da-7f87-454d-a509-a74346e44ad7,0,0,98e10a49-4e0e-4987-afba-1fd5763c55f0,98e10a49-4e0e-4987-afba-1fd5763c55f0,0,0,608ff83f-dd66-43ca-9e3c-cf42014ba36b,608ff83f-dd66-43ca-9e3c-cf42014ba36b,0,0,8c38949c-232c-4f53-bc46-2b8483b5d160,8c38949c-232c-4f53-bc46-2b8483b5d160,0,0,15990b09-f5e7-42a8-869a-a75e9430f8a7,15990b09-f5e7-42a8-869a-a75e9430f8a7,0,0,ebd10200-f524-4577-bed5-c809c83238b3,ebd10200-f524-4577-bed5-c809c83238b3,0,0,f85deb41-4067-4c76-96cb-0214892e9879,f85deb41-4067-4c76-96cb-0214892e9879,0,0,eb775223-3427-4ce9-8064-cb70467a85f7,eb775223-3427-4ce9-8064-cb70467a85f7,0,0,697918d3-fc59-43ef-8f45-9158bcc2fabc,697918d3-fc59-43ef-8f45-9158bcc2fabc,0,0,46cd0c04-9eed-4860-9f04-d1ddbb29327e,46cd0c04-9eed-4860-9f04-d1ddbb29327e,0,0,8ce03692-7b05-40a7-b4b9-252e4473d08a,8ce03692-7b05-40a7-b4b9-252e4473d08a,0,0,10803d01-cde3-4f46-8ad9-9dae8cd02ece,10803d01-cde3-4f46-8ad9-9dae8cd02ece,0,0,9307c909-7ce3-4bc3-987c-18e621b2d2e6,9307c909-7ce3-4bc3-987c-18e621b2d2e6,0,0,12f8ab18-cd2e-4542-a81d-83c9b8916ebc,12f8ab18-cd2e-4542-a81d-83c9b8916ebc,0,0,c0bfb1e4-29bb-4ff2-87a1-168b1688bc8c,c0bfb1e4-29bb-4ff2-87a1-168b1688bc8c,0,0,8231f054-d1ef-4724-9365-bbd743df68e9,8231f054-d1ef-4724-9365-bbd743df68e9,0,0,acf558ef-def5-4a50-8c88-034621dd719d,acf558ef-def5-4a50-8c88-034621dd719d,0,0,31b93291-a58f-4176-8318-58200e8bc56e,31b93291-a58f-4176-8318-58200e8bc56e,0,0,293be1bc-49cb-4a99-add8-2a3a46829718,293be1bc-49cb-4a99-add8-2a3a46829718,0,0,5ead20ed-6c78-40fb-b885-3d4531b42d7d,5ead20ed-6c78-40fb-b885-3d4531b42d7d,0,0,4e20e7bb-9585-422c-9ccf-8f17adff0487,4e20e7bb-9585-422c-9ccf-8f17adff0487,0,0,484eb10d-1598-424e-b6d1-4688539f5ca1,484eb10d-1598-424e-b6d1-4688539f5ca1,0,0,0f217e13-2172-42d8-beab-3247e84202ab,0f217e13-2172-42d8-beab-3247e84202ab,0,0,73e0e5a0-869e-45d8-b028-52c101734c14,73e0e5a0-869e-45d8-b028-52c101734c14,0,0,cb583506-721d-43bf-b3c0-85343ef5784a,cb583506-721d-43bf-b3c0-85343ef5784a,0,0,9bd689a7-e963-49b3-be3d-7d7268dff61d,9bd689a7-e963-49b3-be3d-7d7268dff61d,0,0,02c99164-4aee-4e5b-babf-dd0fef6b9211,02c99164-4aee-4e5b-babf-dd0fef6b9211,0,0,3177a598-c693-4f5e-880e-15d687643cd0,3177a598-c693-4f5e-880e-15d687643cd0,0,0,7e0ebc5f-f8c9-47f9-91f9-fc1976f1d22d,7e0ebc5f-f8c9-47f9-91f9-fc1976f1d22d,0,0,38aec696-418a-4ad0-9456-bb7e446f6427,38aec696-418a-4ad0-9456-bb7e446f6427,0,0,04d2b6e3-46e0-401a-8a4a-6001859a21fd,04d2b6e3-46e0-401a-8a4a-6001859a21fd,0,0,fd5d9d82-290e-4b1d-9dd3-8de77341f12a,fd5d9d82-290e-4b1d-9dd3-8de77341f12a,0,0,e2d11b39-68a9-4572-88a1-dc2e8aae184c,e2d11b39-68a9-4572-88a1-dc2e8aae184c,0,0,4a186a10-d964-4cb5-9985-f9376213443e,4a186a10-d964-4cb5-9985-f9376213443e,0,0,d0e170e2-7bfe-4aba-83d3-983927e48574,d0e170e2-7bfe-4aba-83d3-983927e48574,0,0,3a86fec4-2a21-46fc-ba2c-7425afc979ed,3a86fec4-2a21-46fc-ba2c-7425afc979ed,0,0,60df9bf6-5bb6-41f7-8515-35fade226ddf,60df9bf6-5bb6-41f7-8515-35fade226ddf,0,0,e7e86c26-282d-438d-81c9-5e327e9d0609,e7e86c26-282d-438d-81c9-5e327e9d0609,0,0,91147d24-94d1-44d6-8a4b-d00f9377b3bc,91147d24-94d1-44d6-8a4b-d00f9377b3bc,0,0,e7c6ae50-116e-48c0-9fd0-034af6773d10,e7c6ae50-116e-48c0-9fd0-034af6773d10,0,0,dff8b4a3-f85f-41e3-8891-8105e9274b0a,dff8b4a3-f85f-41e3-8891-8105e9274b0a,0,0,fcb34768-286f-444a-9a96-25128b07470d,fcb34768-286f-444a-9a96-25128b07470d,0,0,36c31338-088f-4efd-a8f4-629e6b29b605,36c31338-088f-4efd-a8f4-629e6b29b605,0,0,76a5242c-f19a-437f-81f4-024d3b6c709f,76a5242c-f19a-437f-81f4-024d3b6c709f,0,0,d4f77ac9-1ba2-40cf-8e2a-b6cd2a753ef0,d4f77ac9-1ba2-40cf-8e2a-b6cd2a753ef0,0,0,22cc42ac-80a9-4420-8f8f-9b4a887354d1,22cc42ac-80a9-4420-8f8f-9b4a887354d1,0,0,9323e1ef-0efd-4817-b3a1-e36af26dffe1,9323e1ef-0efd-4817-b3a1-e36af26dffe1,0,0,c5f0e803-c86a-497c-aee6-a4a3ee1ab326,c5f0e803-c86a-497c-aee6-a4a3ee1ab326,0,0,7521779c-5476-4e2e-8c6a-a2407b884aab,7521779c-5476-4e2e-8c6a-a2407b884aab,0,0,454209eb-c146-4b3e-b58c-1092cdcdc59c,454209eb-c146-4b3e-b58c-1092cdcdc59c,0,0,d286de9c-2f30-4cf3-8732-c908cb5adf76,d286de9c-2f30-4cf3-8732-c908cb5adf76,0,0,f814dcf5-c4fd-4cb7-ada8-cfab4532e634,f814dcf5-c4fd-4cb7-ada8-cfab4532e634,0,0,1fd324a0-6c0c-4bcb-99d9-e06d0a1bfc34,1fd324a0-6c0c-4bcb-99d9-e06d0a1bfc34,0,0,83e6a138-c014-40bc-a244-2eda3dadf8f7,83e6a138-c014-40bc-a244-2eda3dadf8f7,0,0,ccf9844e-b8ce-42c7-a651-2c5a6f71b8ca,ccf9844e-b8ce-42c7-a651-2c5a6f71b8ca,0,0,be7d6af6-dd09-4fdf-9a4e-595331854f78,be7d6af6-dd09-4fdf-9a4e-595331854f78,0,0,23fbe4c8-8e00-4de3-ae17-fc93f21afafd,23fbe4c8-8e00-4de3-ae17-fc93f21afafd,0,0,1a585d77-b97c-409a-a42e-537812032109,1a585d77-b97c-409a-a42e-537812032109,0,0,7765357b-70c8-41ad-b3d4-699d212bc974,7765357b-70c8-41ad-b3d4-699d212bc974,0,0,584d4496-f9ca-4f8c-a670-11d9a37dd3e8,584d4496-f9ca-4f8c-a670-11d9a37dd3e8,0,0,45f36b43-2452-4e58-9413-2c6340330c84,45f36b43-2452-4e58-9413-2c6340330c84,0,0,36c0c0fd-6ad6-4a27-90fc-5ad07c76b9d3,36c0c0fd-6ad6-4a27-90fc-5ad07c76b9d3,0,0,bc7d78cc-c06e-43f2-8a3a-cedc584d8a72,bc7d78cc-c06e-43f2-8a3a-cedc584d8a72,0,0,093e5e94-4962-4070-ae96-a7e5c8795a41,093e5e94-4962-4070-ae96-a7e5c8795a41,0,0,77f938c4-c2d8-4e15-bf1d-0cb679020857,77f938c4-c2d8-4e15-bf1d-0cb679020857,0,0,5321c500-397b-4dbe-8094-959d59a59365,5321c500-397b-4dbe-8094-959d59a59365,0,0,84ddcff7-f498-4eeb-91fd-79d72f75d79d,84ddcff7-f498-4eeb-91fd-79d72f75d79d,0,0,ea418f46-ab4a-48d9-b87e-aa1c96d66f1d,ea418f46-ab4a-48d9-b87e-aa1c96d66f1d,0,0,187fdb1c-f18b-4f7c-a75d-85de2a60ac99,187fdb1c-f18b-4f7c-a75d-85de2a60ac99,0,0,9e49ce31-2e18-4175-83bf-3bf779f49187,9e49ce31-2e18-4175-83bf-3bf779f49187,0,0,70707e18-c144-495b-848d-b1e0b34e11c6,70707e18-c144-495b-848d-b1e0b34e11c6,0,0,38991eb0-5563-4a9a-b502-2e2800c0fb8d,38991eb0-5563-4a9a-b502-2e2800c0fb8d,0,0,5bb7ba5a-de47-4cf7-9647-c7224fad283f,5bb7ba5a-de47-4cf7-9647-c7224fad283f,0,0,450ea121-a9e8-440c-98b4-def488064ecc,450ea121-a9e8-440c-98b4-def488064ecc,0,0,ee532196-d5d1-4998-84c4-0bbe2ab74a96,ee532196-d5d1-4998-84c4-0bbe2ab74a96,0,0,7e50e54e-fc96-46f9-98ef-e672a12e7e14,7e50e54e-fc96-46f9-98ef-e672a12e7e14,0,0,d897ad1c-91d7-4d10-a0d9-b63c0ebbd91b,d897ad1c-91d7-4d10-a0d9-b63c0ebbd91b,0,0,f31862f2-9e12-492c-bb00-1bb25119d33c,f31862f2-9e12-492c-bb00-1bb25119d33c,0,0,2186a8b7-967a-4302-b817-8b2a9ed6774b,2186a8b7-967a-4302-b817-8b2a9ed6774b,0,0,58db0e29-2228-4e7d-8621-04e094535433,58db0e29-2228-4e7d-8621-04e094535433,0,0,df752808-b56b-4f3c-9a90-9e69ef135cd8,df752808-b56b-4f3c-9a90-9e69ef135cd8,0,0,d2447ec9-9bb4-4f4f-8356-2386a9eae779,d2447ec9-9bb4-4f4f-8356-2386a9eae779,0,0,02fa8b71-2c04-44ad-bcee-33a1cce5bfd1,02fa8b71-2c04-44ad-bcee-33a1cce5bfd1,0,0,616983be-4432-4929-82ef-c87f51bd3eb4,616983be-4432-4929-82ef-c87f51bd3eb4,0,0,722591b6-f18d-4618-95ec-284bf321eea6,722591b6-f18d-4618-95ec-284bf321eea6,0,0,e08fdde8-12e4-4644-b38a-82415c2780f9,e08fdde8-12e4-4644-b38a-82415c2780f9,0,0,fe1a67f4-234e-4301-9651-794b1074a16e,fe1a67f4-234e-4301-9651-794b1074a16e,0,0,e7cf60ec-1f44-4cf7-9bfb-90863fb079b8,e7cf60ec-1f44-4cf7-9bfb-90863fb079b8,0,0,7e0874a3-f5f5-48ca-9efb-31ce9679530e,7e0874a3-f5f5-48ca-9efb-31ce9679530e,0,0,1308c5bc-0750-43ee-9fa2-59e1c8b9f923,1308c5bc-0750-43ee-9fa2-59e1c8b9f923,0,0,02deb1bb-06fe-417c-aa08-b52b1f72f4a6,02deb1bb-06fe-417c-aa08-b52b1f72f4a6,0,0,74618dab-b5cb-4c8b-9a6c-461b902c92e7,74618dab-b5cb-4c8b-9a6c-461b902c92e7,0,0,c711f573-98cf-429f-b4ab-4e594838f669,c711f573-98cf-429f-b4ab-4e594838f669,0,0,e186921e-237a-4fe0-bd88-ed8a5760bbe8,e186921e-237a-4fe0-bd88-ed8a5760bbe8,0,0,5aef42c3-79c7-4616-933e-029de7cac161,5aef42c3-79c7-4616-933e-029de7cac161,0,0,bbcfaf8c-ad66-40e6-a1b7-488ea0563d15,bbcfaf8c-ad66-40e6-a1b7-488ea0563d15,0,0,4255308d-3cbf-4f4d-a730-edc2038c9b6c,4255308d-3cbf-4f4d-a730-edc2038c9b6c,0,0,8d3bdabd-7524-4c9c-8953-96a7d23b1dc2,8d3bdabd-7524-4c9c-8953-96a7d23b1dc2,0,0,e4615ddb-aee0-499d-a847-86fa4923b6f1,e4615ddb-aee0-499d-a847-86fa4923b6f1,0,0,e2c2662d-ad36-403e-b266-ca1df45df39a,e2c2662d-ad36-403e-b266-ca1df45df39a,0,0,bad23883-ec1d-4a56-89fa-49961aed6ffe,bad23883-ec1d-4a56-89fa-49961aed6ffe,0,0,5a0e0d95-5439-4909-980c-4655d41dddee,5a0e0d95-5439-4909-980c-4655d41dddee,0,0,8bff6955-f58c-4645-971f-7c86a4af7fee,8bff6955-f58c-4645-971f-7c86a4af7fee,0,0,155d9ab0-5e8a-4faf-bbaa-692a099113d5,155d9ab0-5e8a-4faf-bbaa-692a099113d5,0,0,39074181-57b2-4618-bc3f-d71d51616fda,39074181-57b2-4618-bc3f-d71d51616fda,0,0,9c6f75ea-8d97-46a6-b244-a7cb5fcdf99e,9c6f75ea-8d97-46a6-b244-a7cb5fcdf99e,0,0,35f0ce14-0c4c-49c7-8fba-f3c111d5bedc,35f0ce14-0c4c-49c7-8fba-f3c111d5bedc,0,0,b023f7db-5278-4d5a-aba6-bbe35052cc48,b023f7db-5278-4d5a-aba6-bbe35052cc48,0,0,a61d0303-3809-47ba-8af6-379fbc7535e4,a61d0303-3809-47ba-8af6-379fbc7535e4,0,0,38c2cbd6-771c-4d70-b2b0-36c13203ec9a,38c2cbd6-771c-4d70-b2b0-36c13203ec9a,0,0,481a9e74-45f6-4127-81dd-f6c44a45fd9b,481a9e74-45f6-4127-81dd-f6c44a45fd9b,0,0,b523c300-895d-4713-b101-7bba8fe8a371,b523c300-895d-4713-b101-7bba8fe8a371,0,0,3e407308-bc51-4b8c-b52e-221249280af4,3e407308-bc51-4b8c-b52e-221249280af4,0,0,f7fad79a-c439-4b9f-ad4d-fe7211cbb96c,f7fad79a-c439-4b9f-ad4d-fe7211cbb96c,0,0,b0c9c7d7-c203-4927-8ba1-714e956697f8,b0c9c7d7-c203-4927-8ba1-714e956697f8,0,0,f97feb92-48e1-4da4-972a-06fb3e884a75,f97feb92-48e1-4da4-972a-06fb3e884a75,0,0,c486bcab-1359-4da0-b61d-57fa817949e9,c486bcab-1359-4da0-b61d-57fa817949e9,0,0,513c0510-3b85-4dda-b46f-2d9b820da444,513c0510-3b85-4dda-b46f-2d9b820da444,0,0,0843bb39-1eb0-48cb-ba92-efa562a2ccca,0843bb39-1eb0-48cb-ba92-efa562a2ccca,0,0,fead1ba7-910d-4f83-9e59-8c9c0bb77a73,fead1ba7-910d-4f83-9e59-8c9c0bb77a73,0,0,17081af5-ef21-4df2-a380-cd7d00553088,17081af5-ef21-4df2-a380-cd7d00553088,0,0,cd38b0cb-612c-4d6b-b5ca-bd1fdcf526f9,cd38b0cb-612c-4d6b-b5ca-bd1fdcf526f9,0,0,294e235b-796e-4656-af40-29046834eca9,294e235b-796e-4656-af40-29046834eca9,0,0,6e26d99f-e2c3-44f0-978a-6b7ab55526fc,6e26d99f-e2c3-44f0-978a-6b7ab55526fc,0,0,230262f9-bcaa-45fb-8b7c-48194a4199d2,230262f9-bcaa-45fb-8b7c-48194a4199d2,0,0,80cab634-4949-46a2-b9be-44d1a4062efa,80cab634-4949-46a2-b9be-44d1a4062efa,0,0,edfd93f1-9bdf-4285-a3fb-fac870921560,edfd93f1-9bdf-4285-a3fb-fac870921560,0,0,274c18a1-dd5c-4ac6-bab2-3075e9a020a3,274c18a1-dd5c-4ac6-bab2-3075e9a020a3,0,0,8d7595d0-bf98-4142-a29f-c7a0b2c6bff4,8d7595d0-bf98-4142-a29f-c7a0b2c6bff4,0,0,7eb42457-3967-4d49-bbe3-7f988db4560e,7eb42457-3967-4d49-bbe3-7f988db4560e,0,0,60f27726-8d8a-4423-968e-a5fe308447e3,60f27726-8d8a-4423-968e-a5fe308447e3,0,0,2d89cbfd-3748-4b86-adff-9c0c9d4f3ec4,2d89cbfd-3748-4b86-adff-9c0c9d4f3ec4,0,0,95369f3e-cb68-4e75-bc14-3269e13bb43e,95369f3e-cb68-4e75-bc14-3269e13bb43e,0,0,f7eb7e7a-71da-4957-888f-49c2e39d1d6e,f7eb7e7a-71da-4957-888f-49c2e39d1d6e,0,0,ebd9ed53-a8e8-46da-bea9-65c69fadd23f,ebd9ed53-a8e8-46da-bea9-65c69fadd23f,0,0,90e38233-1944-488c-b727-81d5f6590328,90e38233-1944-488c-b727-81d5f6590328,0,0,62f1a1f2-69a3-4275-85ea-cfeaa436d567,62f1a1f2-69a3-4275-85ea-cfeaa436d567,0,0,74434289-9098-4843-be41-c059ca33395b,74434289-9098-4843-be41-c059ca33395b,0,0,69aed3fc-ab27-4f07-a858-0a121748a6be,69aed3fc-ab27-4f07-a858-0a121748a6be,0,0,d0e3c716-5dc4-499c-9b38-abb1bf7b49e9,d0e3c716-5dc4-499c-9b38-abb1bf7b49e9,0,0,7dbd734a-a0ab-4409-8cde-2d6e56484ec9,7dbd734a-a0ab-4409-8cde-2d6e56484ec9,0,0,42c92878-ff8d-4a26-bd37-5103a8911b8f,42c92878-ff8d-4a26-bd37-5103a8911b8f,0,0,d44e294b-5d71-491a-8d83-e41ac7f13eba,d44e294b-5d71-491a-8d83-e41ac7f13eba,0,0,eaad1351-7371-4d08-9c05-42eacbba32a6,eaad1351-7371-4d08-9c05-42eacbba32a6,0,0,8b890ba6-cb68-41c0-b0ae-6bd5a3a162f7,8b890ba6-cb68-41c0-b0ae-6bd5a3a162f7,0,0,9f124528-b10c-4d25-a794-e02bc1475dec,9f124528-b10c-4d25-a794-e02bc1475dec,0,0,1b08002b-1c04-44f2-a991-247df754e29e,1b08002b-1c04-44f2-a991-247df754e29e,0,0,c5acb88e-c18c-4ea5-939a-617854a4a55a,c5acb88e-c18c-4ea5-939a-617854a4a55a,0,0,ba6f643e-f390-41a1-b172-fd901e50d2bd,ba6f643e-f390-41a1-b172-fd901e50d2bd,0,0,ddf99e9a-235a-43f0-a4d5-7e60b2177490,ddf99e9a-235a-43f0-a4d5-7e60b2177490,0,0,021fae59-32c2-4964-88b1-7be738da9983,021fae59-32c2-4964-88b1-7be738da9983,0,0,6417f7f2-61d0-4f44-8b09-56cf7dff5293,6417f7f2-61d0-4f44-8b09-56cf7dff5293,0,0,9ad49bc9-d163-42a0-b19f-c40b4e7dc6f8,9ad49bc9-d163-42a0-b19f-c40b4e7dc6f8,0,0,f2a45662-73b4-4ba8-ac68-66642485779e,f2a45662-73b4-4ba8-ac68-66642485779e,0,0,46deeda2-47c3-4089-a1d5-2cf18374f4f4,46deeda2-47c3-4089-a1d5-2cf18374f4f4,0,0,bc0934a0-c169-4ab5-b306-f4338c13182c,bc0934a0-c169-4ab5-b306-f4338c13182c,0,0,8acbfd4e-b61c-464d-97ed-df7cfebc3acf,8acbfd4e-b61c-464d-97ed-df7cfebc3acf,0,0,dea9eddc-62e9-4d8e-8e41-867400f2cb61,dea9eddc-62e9-4d8e-8e41-867400f2cb61,0,0,d5f7db0d-4309-405f-8675-d5bc456d048f,d5f7db0d-4309-405f-8675-d5bc456d048f,0,0,92e3a689-94a6-4301-9ef2-e89bb16b0c7c,92e3a689-94a6-4301-9ef2-e89bb16b0c7c,0,0,f8bcab85-26a3-4aad-9bd0-9a32860b91eb,f8bcab85-26a3-4aad-9bd0-9a32860b91eb,0,0,9c4d7618-de08-4bae-85a3-b434184f9e66,9c4d7618-de08-4bae-85a3-b434184f9e66,0,0,2acc0aec-ba7a-4fc0-91e8-6a8d02561378,2acc0aec-ba7a-4fc0-91e8-6a8d02561378,0,0,5ff105eb-4a82-48ed-997a-4eb775811043,5ff105eb-4a82-48ed-997a-4eb775811043,0,0,607ef49d-f1fc-485c-a315-af2d1bb3b68c,607ef49d-f1fc-485c-a315-af2d1bb3b68c,0,0,30a19b83-24ea-4024-bf3d-2995ba003f95,30a19b83-24ea-4024-bf3d-2995ba003f95,0,0,d00ca7f4-d265-48f1-82e5-837b35cecaee,d00ca7f4-d265-48f1-82e5-837b35cecaee,0,0,2d963a12-7d6f-48fe-8f57-14aa47c10c9c,2d963a12-7d6f-48fe-8f57-14aa47c10c9c,0,0,fe2eb4ea-b2a4-4e4c-969b-5f97499325d3,fe2eb4ea-b2a4-4e4c-969b-5f97499325d3,0,0,f480a1b7-0012-4556-ad25-6ae671a448ce,f480a1b7-0012-4556-ad25-6ae671a448ce,0,0,2ddb0973-4e24-4538-a0b7-501f8609659d,2ddb0973-4e24-4538-a0b7-501f8609659d,0,0,1fe74dc3-378d-49bf-8fd1-924e220b8ea5,1fe74dc3-378d-49bf-8fd1-924e220b8ea5,0,0,f0c0e24a-d414-4d28-aaae-f314bbd0beb8,f0c0e24a-d414-4d28-aaae-f314bbd0beb8,0,0,59c33da7-0a63-41ab-9a3d-3b9d80df94fa,59c33da7-0a63-41ab-9a3d-3b9d80df94fa,0,0,cfa8d6fc-4005-4c66-9e42-56be78108911,cfa8d6fc-4005-4c66-9e42-56be78108911,0,0,cda478d0-5726-4be3-9da2-3c8d62f91cd9,cda478d0-5726-4be3-9da2-3c8d62f91cd9,0,0,1fec562f-77d8-4445-adf8-7f512db477f7,1fec562f-77d8-4445-adf8-7f512db477f7,0,0,48f107ea-60f5-4e60-b1c4-92264a6d32e4,48f107ea-60f5-4e60-b1c4-92264a6d32e4,0,0,d1fae748-38cf-4f17-b438-e4a0e5cb0765,d1fae748-38cf-4f17-b438-e4a0e5cb0765,0,0,840deffa-22c3-4135-bac2-97452a9211d8,840deffa-22c3-4135-bac2-97452a9211d8,0,0,f791be60-ace4-4ab1-9333-87e2320ff957,f791be60-ace4-4ab1-9333-87e2320ff957,0,0,daf6af01-3635-4d86-88e6-1eb0e2a21d23,daf6af01-3635-4d86-88e6-1eb0e2a21d23,0,0,68361d2a-56cc-4ee5-bbe3-a3a99f6dfcac,68361d2a-56cc-4ee5-bbe3-a3a99f6dfcac,0,0,e558d782-4f69-4a60-9283-dbd08184a93e,e558d782-4f69-4a60-9283-dbd08184a93e,0,0,a332ead0-386e-4cfa-ba70-a56a66e9d098,a332ead0-386e-4cfa-ba70-a56a66e9d098,0,0,9c843808-2c1a-447b-bfd9-303c01311769,9c843808-2c1a-447b-bfd9-303c01311769,0,0,640cda29-5303-45da-be8e-dd1a11bed532,640cda29-5303-45da-be8e-dd1a11bed532,0,0,9165f8be-f961-4042-b11f-7b4efc228c7c,9165f8be-f961-4042-b11f-7b4efc228c7c,0,0,af9fce50-1ffc-44b7-b1e5-8593f7fa41f2,af9fce50-1ffc-44b7-b1e5-8593f7fa41f2,0,0,f1296cd5-9063-4eaa-9ea5-9e6a2c25547e,f1296cd5-9063-4eaa-9ea5-9e6a2c25547e,0,0,0a677e6b-626b-40b4-9fbe-104124a3a787,0a677e6b-626b-40b4-9fbe-104124a3a787,0,0,c353c92b-da91-4880-a1cb-829502dff4bb,c353c92b-da91-4880-a1cb-829502dff4bb,0,0,46d7490e-9f9f-4a1c-a993-93daf6b4f9d9,46d7490e-9f9f-4a1c-a993-93daf6b4f9d9,0,0,d706ac34-3097-4e1a-a090-d0ed690a910b,d706ac34-3097-4e1a-a090-d0ed690a910b,0,0,6091611a-965a-4403-a6ac-4786a63930a5,6091611a-965a-4403-a6ac-4786a63930a5,0,0,5d298dc5-efa9-45f0-9665-9b6b0252c76a,5d298dc5-efa9-45f0-9665-9b6b0252c76a,0,0,d16cba57-1dde-45ce-b8e1-75f08b9933de,d16cba57-1dde-45ce-b8e1-75f08b9933de,0,0,6f76c28f-3f40-4b5c-b505-624ef6ec5a4f,6f76c28f-3f40-4b5c-b505-624ef6ec5a4f,0,0,d0a6a700-d56f-492e-b936-bd915bf64b82,d0a6a700-d56f-492e-b936-bd915bf64b82,0,0,8dd6e67f-c1b0-435a-ae1a-3e3ea88fb5ad,8dd6e67f-c1b0-435a-ae1a-3e3ea88fb5ad,0,0,e55aa354-7149-4fde-b18a-5b25c2f3f419,e55aa354-7149-4fde-b18a-5b25c2f3f419,0,0,4389a400-bbb2-47e8-ab8d-321e6acaf951,4389a400-bbb2-47e8-ab8d-321e6acaf951,0,0,d9721a2b-f955-4248-9d0e-e006d3b7433a,d9721a2b-f955-4248-9d0e-e006d3b7433a,0,0,8ed0fcc0-ed75-45fe-93db-e50e2cd0f93c,8ed0fcc0-ed75-45fe-93db-e50e2cd0f93c,0,0,bda4f526-c510-440d-bd93-090cc49ae143,bda4f526-c510-440d-bd93-090cc49ae143,0,0,bfb711e4-006f-4a18-a8a1-48869f52cf64,bfb711e4-006f-4a18-a8a1-48869f52cf64,0,0,8fccbf91-d95e-4116-ae2b-2bde65f37a3f,8fccbf91-d95e-4116-ae2b-2bde65f37a3f,0,0,eeb30c47-1eeb-46a2-a327-a1bba111f058,eeb30c47-1eeb-46a2-a327-a1bba111f058,0,0,30311453-3a66-4586-8227-fc5b7c84734d,30311453-3a66-4586-8227-fc5b7c84734d,0,0,f3af3404-9a2b-4df5-abe9-7bb5f4137355,f3af3404-9a2b-4df5-abe9-7bb5f4137355,0,0,61c468e7-9371-4a56-9d65-3d5bb41f4968,61c468e7-9371-4a56-9d65-3d5bb41f4968,0,0,74935747-9554-4538-98fe-a283a8a850a4,74935747-9554-4538-98fe-a283a8a850a4,0,0,984f3303-eae7-45c4-859c-995c865811c4,984f3303-eae7-45c4-859c-995c865811c4,0,0,2d5eaffb-f030-45c4-936e-6857da52ab36,2d5eaffb-f030-45c4-936e-6857da52ab36,0,0,6641da22-aa42-446a-93fa-d0e2249d7a49,6641da22-aa42-446a-93fa-d0e2249d7a49,0,0,41fdb501-d513-497b-a462-9925fa8ce0eb,41fdb501-d513-497b-a462-9925fa8ce0eb,0,0,e4c435ca-d90b-4943-91be-ecdd12f83c61,e4c435ca-d90b-4943-91be-ecdd12f83c61,0,0,9cd72b2a-d59e-438b-837c-f7adbc5b9f19,9cd72b2a-d59e-438b-837c-f7adbc5b9f19,0,0,9f9d7b6a-0c95-4f90-8a6e-4363ee413329,9f9d7b6a-0c95-4f90-8a6e-4363ee413329,0,0,331de91d-f5b5-4645-a3b2-785cb815643a,331de91d-f5b5-4645-a3b2-785cb815643a,0,0,235d2316-634a-42f6-8c7c-6a546feca7f7,235d2316-634a-42f6-8c7c-6a546feca7f7,0,0,809142ae-57bb-424f-a90d-44ebaafa7db5,809142ae-57bb-424f-a90d-44ebaafa7db5,0,0,f2076c19-cefb-415a-aaa3-6dac2884cf12,f2076c19-cefb-415a-aaa3-6dac2884cf12,0,0,575883be-20fd-4a0c-81bc-69227e0463f1,575883be-20fd-4a0c-81bc-69227e0463f1,0,0,f6857ff3-9218-4cff-9f16-4a9194777c49,f6857ff3-9218-4cff-9f16-4a9194777c49,0,0,7fb6dd39-05ea-4a54-a0e0-d97a7072d098,7fb6dd39-05ea-4a54-a0e0-d97a7072d098,0,0,02235eb2-fc28-4809-b715-ab91063772da,02235eb2-fc28-4809-b715-ab91063772da,0,0,ab796095-2eba-4e17-825a-132aba06a50d,ab796095-2eba-4e17-825a-132aba06a50d,0,0,6d612c75-cdac-45f2-9810-3f94401534b5,6d612c75-cdac-45f2-9810-3f94401534b5,0,0,5668c91f-78e6-446d-b1d9-43270e96f7d9,5668c91f-78e6-446d-b1d9-43270e96f7d9,0,0,98b241b6-8d9d-4dae-a8ac-7ffceba6b618,98b241b6-8d9d-4dae-a8ac-7ffceba6b618,0,0,bd2a7c39-fb6c-494b-a947-d851e90d1e7a,bd2a7c39-fb6c-494b-a947-d851e90d1e7a,0,0,0bb546e4-8db5-41b2-a5b6-fb4d8fd6388a,0bb546e4-8db5-41b2-a5b6-fb4d8fd6388a,0,0,3fe785f5-f5d8-4648-9cec-91bc30cb3f9f,3fe785f5-f5d8-4648-9cec-91bc30cb3f9f,0,0,d5af826b-3a92-4681-bb5e-dae5e1516375,d5af826b-3a92-4681-bb5e-dae5e1516375,0,0,26b43144-e17e-4556-8eb7-e0eb25249b21,26b43144-e17e-4556-8eb7-e0eb25249b21,0,0,972ed56f-fa36-4d01-b73f-1f74abf5037b,972ed56f-fa36-4d01-b73f-1f74abf5037b,0,0,defdccf0-3e72-4de0-923b-84ce574cd445,defdccf0-3e72-4de0-923b-84ce574cd445,0,0,cb572206-30fc-4702-a2f5-711397e11c1c,cb572206-30fc-4702-a2f5-711397e11c1c,0,0,bfd1039b-4767-442c-93eb-e8d8ba200c84,bfd1039b-4767-442c-93eb-e8d8ba200c84,0,0,c0f47771-4ca9-46c9-865e-ef39cd4e73a2,c0f47771-4ca9-46c9-865e-ef39cd4e73a2,0,0,16d24854-926b-4187-86e1-b24a7f93c4e6,16d24854-926b-4187-86e1-b24a7f93c4e6,0,0,4533145d-7dbf-4ac7-87d8-744a70ec4ad4,4533145d-7dbf-4ac7-87d8-744a70ec4ad4,0,0,a0edd2c5-0d9d-4669-a373-0ee6074df4e6,a0edd2c5-0d9d-4669-a373-0ee6074df4e6,0,0,91f5da46-00f1-494a-afe0-53d550b0ffdc,91f5da46-00f1-494a-afe0-53d550b0ffdc,0,0,ef30c08a-b2ab-4649-bdd8-34b92f6f5801,ef30c08a-b2ab-4649-bdd8-34b92f6f5801,0,0,f0466427-6483-4a70-aa4c-e3fe34c3ffbe,f0466427-6483-4a70-aa4c-e3fe34c3ffbe,0,0,538fc5bc-0d07-4a86-8e6b-2ba83af02cf9,538fc5bc-0d07-4a86-8e6b-2ba83af02cf9,0,0,8ea16cd9-a62e-4598-8f6c-6bd55d4a7480,8ea16cd9-a62e-4598-8f6c-6bd55d4a7480,0,0,3fb0f944-27d7-496e-b454-9d3b880f912d,3fb0f944-27d7-496e-b454-9d3b880f912d,0,0,66a698a8-d1b6-4306-8b2c-e513250c7293,66a698a8-d1b6-4306-8b2c-e513250c7293,0,0,97164bf4-4fdd-4e5a-8456-e0c23d75b8eb,97164bf4-4fdd-4e5a-8456-e0c23d75b8eb,0,0,6cf603ed-8bca-47de-8435-4e0117ff034f,6cf603ed-8bca-47de-8435-4e0117ff034f,0,0,f5316ac8-45b2-4033-a6b0-c14324d14ae4,f5316ac8-45b2-4033-a6b0-c14324d14ae4,0,0,aea86c55-2a8a-425d-8379-95ca46ff88f2,aea86c55-2a8a-425d-8379-95ca46ff88f2,0,0,900a591d-8388-45a1-973c-8630ee0ff9b4,900a591d-8388-45a1-973c-8630ee0ff9b4,0,0,5c000000-78cf-4704-9ae6-28aa68d773b0,5c000000-78cf-4704-9ae6-28aa68d773b0,0,0,03eacfee-75e5-4b7a-93ec-b5f6234ed04d,03eacfee-75e5-4b7a-93ec-b5f6234ed04d,0,0,a91e677f-4727-44f0-a0a1-7835e3f173be,a91e677f-4727-44f0-a0a1-7835e3f173be,0,0,5309a6dc-7a2f-4db1-8eab-5bdca58a5cae,5309a6dc-7a2f-4db1-8eab-5bdca58a5cae,0,0,8f257dfb-7980-4324-b5c6-db74344e5439,8f257dfb-7980-4324-b5c6-db74344e5439,0,0,9dda0853-53b6-4531-adc5-a29653d373e0,9dda0853-53b6-4531-adc5-a29653d373e0,0,0,8fea1445-7ac7-4fc8-8bbb-c2781213b2c6,8fea1445-7ac7-4fc8-8bbb-c2781213b2c6,0,0,c4d60f8f-9ea2-4229-872e-a5d420436dd9,c4d60f8f-9ea2-4229-872e-a5d420436dd9,0,0,fbedc08f-6d24-483b-8133-0ed6f6171ddb,fbedc08f-6d24-483b-8133-0ed6f6171ddb,0,0,f844b4e0-f43f-471a-93a1-dea9d889c529,f844b4e0-f43f-471a-93a1-dea9d889c529,0,0,9973226e-8f79-41ff-b62b-1519341c11e7,9973226e-8f79-41ff-b62b-1519341c11e7,0,0,dcf8e756-a15a-4f27-8cda-d167dc46957e,dcf8e756-a15a-4f27-8cda-d167dc46957e,0,0,a6ee22d2-96f3-4a29-ace7-9ae2480424e0,a6ee22d2-96f3-4a29-ace7-9ae2480424e0,0,0,520a0368-b13d-415b-b5c7-f3b002c55e73,520a0368-b13d-415b-b5c7-f3b002c55e73,0,0,68389e16-75ce-40c1-97e0-a0c1283a91fa,68389e16-75ce-40c1-97e0-a0c1283a91fa,0,0,4faa8e43-5ce7-4e07-a333-2a9038a08476,4faa8e43-5ce7-4e07-a333-2a9038a08476,0,0,77bc21e8-7160-4199-b9a4-f706dc6f9b95,77bc21e8-7160-4199-b9a4-f706dc6f9b95,0,0,d1a3f795-baf1-4a3b-952d-0891544af68b,d1a3f795-baf1-4a3b-952d-0891544af68b,0,0,917240b1-0ba9-41dd-9c98-a0d095c0688c,917240b1-0ba9-41dd-9c98-a0d095c0688c,0,0,ac601922-7ec2-474a-83fe-538fb663c37a,ac601922-7ec2-474a-83fe-538fb663c37a,0,0,01ac9728-c35d-41cc-a459-cf3ae8ee813c,01ac9728-c35d-41cc-a459-cf3ae8ee813c,0,0,98012e7d-d864-489e-867f-8c396a8fed21,98012e7d-d864-489e-867f-8c396a8fed21,0,0,c526b3f2-f8c8-45ad-94f8-e12f27802a11,c526b3f2-f8c8-45ad-94f8-e12f27802a11,0,0,ec391a89-80f3-4eaa-81e2-c4c0fdd99c0a,ec391a89-80f3-4eaa-81e2-c4c0fdd99c0a,0,0,bfaee19a-4bcf-47d7-bbad-3946786ca669,bfaee19a-4bcf-47d7-bbad-3946786ca669,0,0,1bb1d54e-b60a-491f-ba76-ca9a973c0904,1bb1d54e-b60a-491f-ba76-ca9a973c0904,0,0,c857ac3a-68b1-42b9-9dfd-93ab2d1fba77,c857ac3a-68b1-42b9-9dfd-93ab2d1fba77,0,0,b9fcc8eb-fd2f-4780-b6a5-70bb6d30fac7,b9fcc8eb-fd2f-4780-b6a5-70bb6d30fac7,0,0,84180d74-2b80-4aad-adc0-554a0ebbbf0b,84180d74-2b80-4aad-adc0-554a0ebbbf0b,0,0,d77e5534-5b70-465f-b15e-19e3d0c6782e,d77e5534-5b70-465f-b15e-19e3d0c6782e,0,0,768e28d2-e8dd-4bc6-aff4-a587eb1d7949,768e28d2-e8dd-4bc6-aff4-a587eb1d7949,0,0,9b42453f-1de7-4aed-8330-106edc1c7cd7,9b42453f-1de7-4aed-8330-106edc1c7cd7,0,0,9f13a35f-95b8-4bde-9bad-480612fa5f32,9f13a35f-95b8-4bde-9bad-480612fa5f32,0,0,aef0484e-2a19-48ee-9c25-525d59199433,aef0484e-2a19-48ee-9c25-525d59199433,0,0,264a4c30-d115-4769-87bd-cddaa3747808,264a4c30-d115-4769-87bd-cddaa3747808,0,0,0fd2f42a-44be-4f3a-bad4-31bac6f88b64,0fd2f42a-44be-4f3a-bad4-31bac6f88b64,0,0,e2c7dbdf-6807-4974-aa9d-35331cd88f96,e2c7dbdf-6807-4974-aa9d-35331cd88f96,0,0,2fe36e1a-5dfe-414e-87ba-6afa356d44e4,2fe36e1a-5dfe-414e-87ba-6afa356d44e4,0,0,347107d3-6c4c-4c32-b910-5bbc21cf394d,347107d3-6c4c-4c32-b910-5bbc21cf394d,0,0,e9412e04-b19c-4142-b6f9-1d6575e3c282,e9412e04-b19c-4142-b6f9-1d6575e3c282,0,0,a305ed53-6d00-4e68-be4f-e2580960a7a9,a305ed53-6d00-4e68-be4f-e2580960a7a9,0,0,974336c6-63ae-4f03-aaf7-b52ce2c7f207,974336c6-63ae-4f03-aaf7-b52ce2c7f207,0,0,535cfe1f-6a7b-4830-ad69-e7b4f0335575,535cfe1f-6a7b-4830-ad69-e7b4f0335575,0,0,232ce8ef-bf96-46cc-8b1e-e67f437d8dda,232ce8ef-bf96-46cc-8b1e-e67f437d8dda,0,0,621b3433-a705-4ba9-8ffe-54e60de8fb8c,621b3433-a705-4ba9-8ffe-54e60de8fb8c,0,0,88483c3d-93b0-4eaa-85ae-491f6d279725,88483c3d-93b0-4eaa-85ae-491f6d279725,0,0,84f2105e-a1bc-44a5-80cc-2b0e1e7d7460,84f2105e-a1bc-44a5-80cc-2b0e1e7d7460,0,0,f52d8734-d18b-49b5-ba1b-952ec1dc4d34,f52d8734-d18b-49b5-ba1b-952ec1dc4d34,0,0,4218e013-5733-493c-bd2b-0d04064c3de0,4218e013-5733-493c-bd2b-0d04064c3de0,0,0,c4e56496-1731-4afa-b625-afe6f8481f73,c4e56496-1731-4afa-b625-afe6f8481f73,0,0,cb829d05-c466-4f45-ab17-513f607876b7,cb829d05-c466-4f45-ab17-513f607876b7,0,0,576f9c3e-6700-450b-b754-b56a558e8cb2,576f9c3e-6700-450b-b754-b56a558e8cb2,0,0,9cddeb15-b6b4-44d2-947e-d5f97f93bb10,9cddeb15-b6b4-44d2-947e-d5f97f93bb10,0,0,26e8e7c5-45de-4fa0-8bec-e11628f88558,26e8e7c5-45de-4fa0-8bec-e11628f88558,0,0,03a931e1-8e58-4c48-964d-da322d8c141a,03a931e1-8e58-4c48-964d-da322d8c141a,0,0,fbe52190-875e-4ddf-a9de-e194115a9049,fbe52190-875e-4ddf-a9de-e194115a9049,0,0,25eae4f2-ae39-4664-a587-2341ac8447bc,25eae4f2-ae39-4664-a587-2341ac8447bc,0,0,1a67b35c-19b1-484d-bd87-8ceb7a0df166,1a67b35c-19b1-484d-bd87-8ceb7a0df166,0,0,3449cbb3-95e8-4cbd-a393-b153d450fa5a,3449cbb3-95e8-4cbd-a393-b153d450fa5a,0,0,95ac5106-f3c9-457c-9fc9-4e4fe35d4e2b,95ac5106-f3c9-457c-9fc9-4e4fe35d4e2b,0,0,07057998-bd48-426a-8680-191c6ba802b1,07057998-bd48-426a-8680-191c6ba802b1,0,0,20118856-5e5f-437a-b97c-ae56cf608672,20118856-5e5f-437a-b97c-ae56cf608672,0,0,36e20f97-751c-4bed-bfe9-5b0bcbcd6093,36e20f97-751c-4bed-bfe9-5b0bcbcd6093,0,0,a4f58d69-f582-4517-a5e2-7e36fb43ed9f,a4f58d69-f582-4517-a5e2-7e36fb43ed9f,0,0,00e97d74-6c99-41bb-8b23-5482d04a7a50,00e97d74-6c99-41bb-8b23-5482d04a7a50,0,0,1f86e996-1de9-4fe1-ba84-3b217d2e6e05,1f86e996-1de9-4fe1-ba84-3b217d2e6e05,0,0,ec983a14-3311-4da7-bbb9-48e0a413bd19,ec983a14-3311-4da7-bbb9-48e0a413bd19,0,0,91219944-7f36-4ceb-b770-4218fc73634f,91219944-7f36-4ceb-b770-4218fc73634f,0,0,dbc4c9f1-151b-4c3c-9996-a60dbed47a5f,dbc4c9f1-151b-4c3c-9996-a60dbed47a5f,0,0,2182d9f1-ca13-488e-9613-7ccca58b94d3,2182d9f1-ca13-488e-9613-7ccca58b94d3,0,0,ab97ea88-4d37-448a-811d-69334266b56a,ab97ea88-4d37-448a-811d-69334266b56a,0,0,8a134d82-8e76-49a9-a0ae-e60aab3d90a3,8a134d82-8e76-49a9-a0ae-e60aab3d90a3,0,0,295dae1e-8e25-4f86-9f4d-e41dc1583f5e,295dae1e-8e25-4f86-9f4d-e41dc1583f5e,0,0,bdb65dc2-3bd9-43fa-a63b-276accd2304b,bdb65dc2-3bd9-43fa-a63b-276accd2304b,0,0,c536f022-c8b0-43d2-bc4a-307a90b68827,c536f022-c8b0-43d2-bc4a-307a90b68827,0,0,b997b0b6-26c6-42c8-8c11-06df0d0cb258,b997b0b6-26c6-42c8-8c11-06df0d0cb258,0,0,57cb4e1f-060b-4a9f-874b-3b6ada17c3ca,57cb4e1f-060b-4a9f-874b-3b6ada17c3ca,0,0,7117d3e4-b8b1-4a6a-b192-c630d7a2dc8b,7117d3e4-b8b1-4a6a-b192-c630d7a2dc8b,0,0,2be1bc9e-9a3d-4590-92ee-81483bff4e29,2be1bc9e-9a3d-4590-92ee-81483bff4e29,0,0,ad3698bc-fde5-45fb-9811-12269fa96b60,ad3698bc-fde5-45fb-9811-12269fa96b60,0,0,0fc3d3ad-6577-4b40-8fb9-0ca1debe591f,0fc3d3ad-6577-4b40-8fb9-0ca1debe591f,0,0,267dfc39-468c-4869-8b78-33a41bcda57b,267dfc39-468c-4869-8b78-33a41bcda57b,0,0,68cb5348-ee10-4d67-b733-947829adb2b9,68cb5348-ee10-4d67-b733-947829adb2b9,0,0,48a2be8c-8487-4193-8b16-5a15c6f2a225,48a2be8c-8487-4193-8b16-5a15c6f2a225,0,0,d8d82846-21ba-4ee0-b61f-c66d9016709f,d8d82846-21ba-4ee0-b61f-c66d9016709f,0,0,1a3abe65-fd2f-4967-ab68-0b25af0efbd0,1a3abe65-fd2f-4967-ab68-0b25af0efbd0,0,0,d2086816-3f06-49ce-a224-318364515f2d,d2086816-3f06-49ce-a224-318364515f2d,0,0,65a388b3-c5d6-4304-b8c6-f45cc7527486,65a388b3-c5d6-4304-b8c6-f45cc7527486,0,0,7b97cdde-1562-4695-89a3-fb1c0adda13e,7b97cdde-1562-4695-89a3-fb1c0adda13e,0,0,be4ca6b0-21c3-4278-9453-8fd2713c5c4e,be4ca6b0-21c3-4278-9453-8fd2713c5c4e,0,0,c361cf46-9ff6-404b-9ed2-59b563be614e,c361cf46-9ff6-404b-9ed2-59b563be614e,0,0,8f91b43e-4899-4ef2-8011-442cf57e4493,8f91b43e-4899-4ef2-8011-442cf57e4493,0,0,3516e9d8-4c31-40f7-831d-2f607b77961b,3516e9d8-4c31-40f7-831d-2f607b77961b,0,0,6c3d351f-6f3b-4d5b-8bda-57cf73acda15,6c3d351f-6f3b-4d5b-8bda-57cf73acda15,0,0,cbb7fe44-ecf7-4971-b8b2-0de6112f4e30,cbb7fe44-ecf7-4971-b8b2-0de6112f4e30,0,0,1886734d-3504-45a7-8113-4ebcc8a1218b,1886734d-3504-45a7-8113-4ebcc8a1218b,0,0,9abbeb89-b2c3-420c-a5cb-ccc356db5387,9abbeb89-b2c3-420c-a5cb-ccc356db5387,0,0,ebbb525f-e315-4f09-b240-f8d93a0d8916,ebbb525f-e315-4f09-b240-f8d93a0d8916,0,0,c10d0834-ef79-46e5-99a6-0974daa53428,c10d0834-ef79-46e5-99a6-0974daa53428,0,0,a3afcfca-adeb-462f-8bfa-e84285e8ee8a,a3afcfca-adeb-462f-8bfa-e84285e8ee8a,0,0,0ce8b040-a42a-40cb-a382-836aa4ddb740,0ce8b040-a42a-40cb-a382-836aa4ddb740,0,0,f706cf88-ae26-4492-8b5d-b4aeccec8b87,f706cf88-ae26-4492-8b5d-b4aeccec8b87,0,0,6af27d2e-6175-452f-b83e-47005c725429,6af27d2e-6175-452f-b83e-47005c725429,0,0,8d69932f-d950-4553-be3b-e5c4336f82a9,8d69932f-d950-4553-be3b-e5c4336f82a9,0,0,0db44dcb-8deb-4969-98ca-52848ec1d05f,0db44dcb-8deb-4969-98ca-52848ec1d05f,0,0,3a9b5699-5f02-4701-a8e4-50724eba1c6d,3a9b5699-5f02-4701-a8e4-50724eba1c6d,0,0,89be63e4-9bb9-43f9-9f67-741c31ff52a2,89be63e4-9bb9-43f9-9f67-741c31ff52a2,0,0,da783bd1-8b77-4f23-b0d4-e19a838a31f3,da783bd1-8b77-4f23-b0d4-e19a838a31f3,0,0,7c96c4a6-f3db-463e-b706-1b0d699feea9,7c96c4a6-f3db-463e-b706-1b0d699feea9,0,0,14d007ec-5662-4d43-aa08-b47acd61f696,14d007ec-5662-4d43-aa08-b47acd61f696,0,0,eda1b74b-9d8a-4dd3-a68c-129ff9023474,eda1b74b-9d8a-4dd3-a68c-129ff9023474,0,0,136a5a84-08e2-431d-bfe5-fe7f81ba4c96,136a5a84-08e2-431d-bfe5-fe7f81ba4c96,0,0,f5397e0b-79d6-4e3d-90dc-83af0b2cac57,f5397e0b-79d6-4e3d-90dc-83af0b2cac57,0,0,17b91ea7-b8aa-497d-b6fe-38190b8e2e9c,17b91ea7-b8aa-497d-b6fe-38190b8e2e9c,0,0,f0d62daf-4403-4971-b71d-59709409738d,f0d62daf-4403-4971-b71d-59709409738d,0,0,f44078b2-4820-4274-a41d-c4c3aa528712,f44078b2-4820-4274-a41d-c4c3aa528712,0,0,0cc5ac92-75a2-449f-a0b4-d732acd15e92,0cc5ac92-75a2-449f-a0b4-d732acd15e92,0,0,bb42bad7-207e-4432-926d-70d046682943,bb42bad7-207e-4432-926d-70d046682943,0,0,98ece7e3-9993-426c-9f12-3bb3dd82d53b,98ece7e3-9993-426c-9f12-3bb3dd82d53b,0,0,9826555a-7cfe-4fab-ad5d-6decd208fee4,9826555a-7cfe-4fab-ad5d-6decd208fee4,0,0,c63fa5e6-0656-475f-8c2a-814b3345651a,c63fa5e6-0656-475f-8c2a-814b3345651a,0,0,0da7e138-85eb-4143-9437-4d1ce8bfa604,0da7e138-85eb-4143-9437-4d1ce8bfa604,0,0,934d5cd3-7b36-4480-a2bd-7b4739f10a74,934d5cd3-7b36-4480-a2bd-7b4739f10a74,0,0,2d6051cc-ced1-4b0f-9530-7263ac198a4a,2d6051cc-ced1-4b0f-9530-7263ac198a4a,0,0,ada548af-124e-455e-8506-764e66199126,ada548af-124e-455e-8506-764e66199126,0,0,00c33565-f1ce-407d-9670-8e763c0ca6bd,00c33565-f1ce-407d-9670-8e763c0ca6bd,0,0,46743aa7-d2ec-4280-b1cb-b116e914cd3e,46743aa7-d2ec-4280-b1cb-b116e914cd3e,0,0,fa357c90-8ed0-4cb6-9eb4-dd2e25696447,fa357c90-8ed0-4cb6-9eb4-dd2e25696447,0,0,52e2e47d-f33b-4afd-820f-06e9831a1154,52e2e47d-f33b-4afd-820f-06e9831a1154,0,0,4f129e0c-e558-435f-8e75-765d72d6cea7,4f129e0c-e558-435f-8e75-765d72d6cea7,0,0,ef0047a6-8d55-4063-b339-836f29261388,ef0047a6-8d55-4063-b339-836f29261388,0,0,2f889580-107a-429a-9890-1e4cc1bcd479,2f889580-107a-429a-9890-1e4cc1bcd479,0,0,b8f3bd01-8fcb-40a7-859c-c9e1d69a987a,b8f3bd01-8fcb-40a7-859c-c9e1d69a987a,0,0,479be54f-958f-4282-937b-6790d7fd8a99,479be54f-958f-4282-937b-6790d7fd8a99,0,0,09e56293-a055-4f60-807d-0f9e2f7c2de6,09e56293-a055-4f60-807d-0f9e2f7c2de6,0,0,a53d23fe-a9ca-40e9-828d-484b687e42b9,a53d23fe-a9ca-40e9-828d-484b687e42b9,0,0,7dde962c-a5ca-49eb-9d9c-74dc0878c753,7dde962c-a5ca-49eb-9d9c-74dc0878c753,0,0,56874e5a-3a04-44aa-956e-527be57962e4,56874e5a-3a04-44aa-956e-527be57962e4,0,0,8eaa831a-5864-414e-950d-4bdbbb0bcd56,8eaa831a-5864-414e-950d-4bdbbb0bcd56,0,0,5a963618-add1-4b55-ab4e-90f89424ddd8,5a963618-add1-4b55-ab4e-90f89424ddd8,0,0,e3fdec3e-d2e7-418a-954b-9f8a7fef796b,e3fdec3e-d2e7-418a-954b-9f8a7fef796b,0,0,633f985d-14ff-4252-9b8c-62327b197684,633f985d-14ff-4252-9b8c-62327b197684,0,0,e5e1d345-1072-4485-a2e4-675a1e49d6aa,e5e1d345-1072-4485-a2e4-675a1e49d6aa,0,0,e711d013-7240-4a1c-8e46-7e8a931b6bca,e711d013-7240-4a1c-8e46-7e8a931b6bca,0,0,eb2e77ae-1306-471a-b402-e09b249b932c,eb2e77ae-1306-471a-b402-e09b249b932c,0,0,a1c53a4c-4caf-47c3-bca0-baa992e53562,a1c53a4c-4caf-47c3-bca0-baa992e53562,0,0,e55d0a9e-0c14-412a-aa21-b1f14c25fced,e55d0a9e-0c14-412a-aa21-b1f14c25fced,0,0,f3dc4594-15e7-4805-a0fa-7a9259d09cdd,f3dc4594-15e7-4805-a0fa-7a9259d09cdd,0,0,e13a1128-874b-45ad-b55f-846e8f4c2c82,e13a1128-874b-45ad-b55f-846e8f4c2c82,0,0,e2a5c57e-a632-4248-8501-9ef10f7dd633,e2a5c57e-a632-4248-8501-9ef10f7dd633,0,0,61c8c814-4879-4159-b07a-3d1742a5fc93,61c8c814-4879-4159-b07a-3d1742a5fc93,0,0,410b74f6-348a-45c9-8410-a79114f3c098,410b74f6-348a-45c9-8410-a79114f3c098,0,0,f1c77672-fc03-4798-b24a-9eb17cb839a7,f1c77672-fc03-4798-b24a-9eb17cb839a7,0,0,91a00902-1131-4799-bfc3-a10923059215,91a00902-1131-4799-bfc3-a10923059215,0,0,f5a4c843-a0b9-4438-ac44-8065391af53a,f5a4c843-a0b9-4438-ac44-8065391af53a,0,0,4cae9d48-5fd2-4680-a734-f69def8cd46f,4cae9d48-5fd2-4680-a734-f69def8cd46f,0,0,72cd2ace-c610-4f6c-b289-213c0ae75a0a,72cd2ace-c610-4f6c-b289-213c0ae75a0a,0,0,10003716-1c11-4046-8cb3-b5e13d7b6ec1,10003716-1c11-4046-8cb3-b5e13d7b6ec1,0,0,c9d93a1b-4457-4aed-af04-9897d63e9536,c9d93a1b-4457-4aed-af04-9897d63e9536,0,0,0347ddde-4a5b-4ae8-a607-85e0f8a40c50,0347ddde-4a5b-4ae8-a607-85e0f8a40c50,0,0,610e7581-2857-4dd6-82c9-94da7311197f,610e7581-2857-4dd6-82c9-94da7311197f,0,0,dabeb5bd-b213-4de8-8d52-e24ce1a77a55,dabeb5bd-b213-4de8-8d52-e24ce1a77a55,0,0,0bf50e16-60dc-4516-ad9b-0ea8c20eb965,0bf50e16-60dc-4516-ad9b-0ea8c20eb965,0,0,f4b7bb17-6828-4d85-8038-e9ab650d21ff,f4b7bb17-6828-4d85-8038-e9ab650d21ff,0,0,4b36d739-c33b-4996-b04b-fd0b49c33eef,4b36d739-c33b-4996-b04b-fd0b49c33eef,0,0,b92e2cfc-1f0b-46f2-8f04-4261846b34e0,b92e2cfc-1f0b-46f2-8f04-4261846b34e0,0,0,88cc3039-c496-4b4f-a01f-70ce6f495a8a,88cc3039-c496-4b4f-a01f-70ce6f495a8a,0,0,4e32d959-7cbb-41c3-a4e0-566cca7ebc81,4e32d959-7cbb-41c3-a4e0-566cca7ebc81,0,0,54c8aa47-6be5-4e60-8178-f82d9262784b,54c8aa47-6be5-4e60-8178-f82d9262784b,0,0,f803f41e-5a2a-4b66-94e4-86324a089356,f803f41e-5a2a-4b66-94e4-86324a089356,0,0,e8332ab8-9ef0-4715-88b2-869ee95db3e3,e8332ab8-9ef0-4715-88b2-869ee95db3e3,0,0,ca68db51-4d25-4002-8951-5a4a0303eb87,ca68db51-4d25-4002-8951-5a4a0303eb87,0,0,321991f6-0da6-474f-bdd3-0e80d91880fe,321991f6-0da6-474f-bdd3-0e80d91880fe,0,0,57b53101-397c-4653-bd98-da8b792b1c95,57b53101-397c-4653-bd98-da8b792b1c95,0,0,d65821c0-0d09-404f-bd64-319f325a16d0,d65821c0-0d09-404f-bd64-319f325a16d0,0,0,db12d878-855b-4778-869e-dad6537bcea6,db12d878-855b-4778-869e-dad6537bcea6,0,0,d90c5df3-4ab0-4f6d-b683-491c669cdf81,d90c5df3-4ab0-4f6d-b683-491c669cdf81,0,0,e5fa118a-6f4b-4aba-9a1e-3a5cbf70ba69,e5fa118a-6f4b-4aba-9a1e-3a5cbf70ba69,0,0,85873c3a-f98e-401b-8817-d55b70affbf9,85873c3a-f98e-401b-8817-d55b70affbf9,0,0,1311863a-3c81-4b5e-a033-41f7c8b5772a,1311863a-3c81-4b5e-a033-41f7c8b5772a,0,0,e9b77b66-a53b-4140-b466-bba373e05764,e9b77b66-a53b-4140-b466-bba373e05764,0,0,6640d0e4-fbbf-4373-934a-793920dd027c,6640d0e4-fbbf-4373-934a-793920dd027c,0,0,0b58ddd1-c90d-4559-a7fc-dc975019106f,0b58ddd1-c90d-4559-a7fc-dc975019106f,0,0,0ff75417-2d3e-46ed-a8a6-b06bc5fc8db1,0ff75417-2d3e-46ed-a8a6-b06bc5fc8db1,0,0,057980b7-a444-439b-804e-5f35cff3e041,057980b7-a444-439b-804e-5f35cff3e041,0,0,0e816f24-3e75-4129-98d1-b8dd21374353,0e816f24-3e75-4129-98d1-b8dd21374353,0,0,7588e7ef-0b80-4203-b4c9-d25990ed954d,7588e7ef-0b80-4203-b4c9-d25990ed954d,0,0,2c9ce12b-376d-4f76-8534-0b0f0a226b56,2c9ce12b-376d-4f76-8534-0b0f0a226b56,0,0,055d81c0-4f63-4917-955c-508afff18828,055d81c0-4f63-4917-955c-508afff18828,0,0,5d14b82f-d2f6-4027-a451-6e6bcaa4c87f,5d14b82f-d2f6-4027-a451-6e6bcaa4c87f,0,0,39c9beee-6e7a-4152-8777-5bdd68a1bb83,39c9beee-6e7a-4152-8777-5bdd68a1bb83,0,0,63230880-8ef5-469f-87d5-03f16c582d84,63230880-8ef5-469f-87d5-03f16c582d84,0,0,6a9a9474-586c-4ca7-844f-2c1df0e7fbe2,6a9a9474-586c-4ca7-844f-2c1df0e7fbe2,0,0,527ddddd-e9a5-4e4b-abfe-b48f3b46a31e,527ddddd-e9a5-4e4b-abfe-b48f3b46a31e,0,0,4c05d164-0c20-4a49-bdeb-6c3c6c6cf374,4c05d164-0c20-4a49-bdeb-6c3c6c6cf374,0,0,f22ba0a5-829b-490d-99ca-5f026e8bc65a,f22ba0a5-829b-490d-99ca-5f026e8bc65a,0,0,a38d54ac-2dc9-47d9-9721-8430c19ce255,a38d54ac-2dc9-47d9-9721-8430c19ce255,0,0,6c360f3d-6412-4fc7-bbd7-b5641592194e,6c360f3d-6412-4fc7-bbd7-b5641592194e,0,0,425ffdf0-9604-41e4-a697-15792405b5d0,425ffdf0-9604-41e4-a697-15792405b5d0,0,0,4324beac-84c6-4c20-b6fd-47b280162fb0,4324beac-84c6-4c20-b6fd-47b280162fb0,0,0,6b55dc03-4d6a-432e-8da6-1cb0cf31cdfc,6b55dc03-4d6a-432e-8da6-1cb0cf31cdfc,0,0,383dd6c1-4710-4c44-83eb-5384b43a9171,383dd6c1-4710-4c44-83eb-5384b43a9171,0,0,7fabe24c-f45d-4cc6-aad4-441d244e28e1,7fabe24c-f45d-4cc6-aad4-441d244e28e1,0,0,f960cb91-fdcc-43c2-82fe-ac93d58a4edc,f960cb91-fdcc-43c2-82fe-ac93d58a4edc,0,0,ad572ff6-6306-4a46-a1f2-eca2892ef1ab,ad572ff6-6306-4a46-a1f2-eca2892ef1ab,0,0,96a8a745-6dad-4aa5-85b7-a738c96f1d20,96a8a745-6dad-4aa5-85b7-a738c96f1d20,0,0,1673dc9b-3bbc-468c-8c43-7e19002edc5b,1673dc9b-3bbc-468c-8c43-7e19002edc5b,0,0,68aeaec4-a942-4123-a1bf-27a2e80dd2d4,68aeaec4-a942-4123-a1bf-27a2e80dd2d4,0,0,da5518ff-bcbb-4013-9f79-4814e5318bb2,da5518ff-bcbb-4013-9f79-4814e5318bb2,0,0,cc729b4b-f405-4db2-9995-efb3af2c78fc,cc729b4b-f405-4db2-9995-efb3af2c78fc,0,0,7750696c-90a1-494c-a7df-ea5616fae58b,7750696c-90a1-494c-a7df-ea5616fae58b,0,0,535663f6-580a-4312-a51c-899856990ed9,535663f6-580a-4312-a51c-899856990ed9,0,0,99b3c8ec-1b11-40c8-ba98-280b41cda3a8,99b3c8ec-1b11-40c8-ba98-280b41cda3a8,0,0,388de346-ae97-4511-982a-eb02623f49ee,388de346-ae97-4511-982a-eb02623f49ee,0,0,c2cee3ef-8a29-49ea-b754-d83d5beccf7d,c2cee3ef-8a29-49ea-b754-d83d5beccf7d,0,0,e8326735-eb8d-4a2e-a8e1-e174274fc336,e8326735-eb8d-4a2e-a8e1-e174274fc336,0,0,5332ea4d-d92a-4099-879c-9ecd84915c28,5332ea4d-d92a-4099-879c-9ecd84915c28,0,0,a69a2dba-aa58-4afe-bf26-b7ebff631acf,a69a2dba-aa58-4afe-bf26-b7ebff631acf,0,0,72b1c980-6ebf-4484-8ddd-52f8e0558132,72b1c980-6ebf-4484-8ddd-52f8e0558132,0,0,7a8a4ba5-3fbf-4815-9e86-501b8eb18ed1,7a8a4ba5-3fbf-4815-9e86-501b8eb18ed1,0,0,4c6d93b0-1133-472b-9eed-de133d11bdd1,4c6d93b0-1133-472b-9eed-de133d11bdd1,0,0,7198fde6-d341-4cfc-8d42-68240a320c0e,7198fde6-d341-4cfc-8d42-68240a320c0e,0,0,385431d7-c552-41a2-893a-7ad234fecc16,385431d7-c552-41a2-893a-7ad234fecc16,0,0,17d6d642-f9f4-4184-9494-c31448761a97,17d6d642-f9f4-4184-9494-c31448761a97,0,0,058b36d9-0f38-4998-bd16-e38c9448a1ce,058b36d9-0f38-4998-bd16-e38c9448a1ce,0,0,247d3f49-0a29-4ee2-9d67-16d2c0c3ecfc,247d3f49-0a29-4ee2-9d67-16d2c0c3ecfc,0,0,e225080a-7355-4bd6-93f0-9701a233c00a,e225080a-7355-4bd6-93f0-9701a233c00a,0,0,f6de1537-bb32-43e9-a092-665a470b1490,f6de1537-bb32-43e9-a092-665a470b1490,0,0,181ace26-885b-43a5-a3fa-d7b883e7b5f6,181ace26-885b-43a5-a3fa-d7b883e7b5f6,0,0,6567f4a2-1bb4-44cb-9089-a734e16e92af,6567f4a2-1bb4-44cb-9089-a734e16e92af,0,0,df7d3df3-da97-4903-b332-acc060171b50,df7d3df3-da97-4903-b332-acc060171b50,0,0,b689ec92-a4f9-4f59-ab26-4f9c5895030d,b689ec92-a4f9-4f59-ab26-4f9c5895030d,0,0,819f1bf7-5a77-47db-8680-513fcb4763ae,819f1bf7-5a77-47db-8680-513fcb4763ae,0,0,cd5129d9-f856-4823-80a4-73c20a4947b7,cd5129d9-f856-4823-80a4-73c20a4947b7,0,0,f4d6d5bb-55f2-4cd3-a1a2-1ed59bd9b49d,f4d6d5bb-55f2-4cd3-a1a2-1ed59bd9b49d,0,0,d23498be-181d-4b29-859b-afc2cdab9d3c,d23498be-181d-4b29-859b-afc2cdab9d3c,0,0,09489070-e698-427e-83eb-f336a48fa8df,09489070-e698-427e-83eb-f336a48fa8df,0,0,4a855592-e93b-4330-aadb-030e36f5d541,4a855592-e93b-4330-aadb-030e36f5d541,0,0,7653bfe9-22db-43b5-96f9-c9fd9a575403,7653bfe9-22db-43b5-96f9-c9fd9a575403,0,0,96cbfe33-aae3-4025-bdb7-f2ed72be7812,96cbfe33-aae3-4025-bdb7-f2ed72be7812,0,0,67634a9a-3943-447e-959d-cc421be4554a,67634a9a-3943-447e-959d-cc421be4554a,0,0,c99f70ab-a032-410b-a489-1d88a0ad2a05,c99f70ab-a032-410b-a489-1d88a0ad2a05,0,0,d1d83fc5-993b-4dbb-830e-92881b2e9caf,d1d83fc5-993b-4dbb-830e-92881b2e9caf,0,0,dfb59d64-ac47-4644-bc82-63ee49e3be65,dfb59d64-ac47-4644-bc82-63ee49e3be65,0,0,3e18aa6a-4658-419e-a01c-35728078551d,3e18aa6a-4658-419e-a01c-35728078551d,0,0,e6919888-090e-444a-b674-039f79814fe6,e6919888-090e-444a-b674-039f79814fe6,0,0,524a3884-bdce-47ae-8cd4-cdb8383f2bd4,524a3884-bdce-47ae-8cd4-cdb8383f2bd4,0,0,21fe09c9-29a9-4aed-988a-103a1f6e2573,21fe09c9-29a9-4aed-988a-103a1f6e2573,0,0,e3f0f351-c427-4f58-9978-919c68f0cbaf,e3f0f351-c427-4f58-9978-919c68f0cbaf,0,0,84507e6c-8d81-4499-a6b8-57ebb963db3d,84507e6c-8d81-4499-a6b8-57ebb963db3d,0,0,88c4a2e0-69b2-4ebc-8dc2-3da76cc00d44,88c4a2e0-69b2-4ebc-8dc2-3da76cc00d44,0,0,09a94159-004c-43ac-8e88-587d039fc535,09a94159-004c-43ac-8e88-587d039fc535,0,0,63e7904d-47c0-4764-bea0-cb5ca94d5d5a,63e7904d-47c0-4764-bea0-cb5ca94d5d5a,0,0,87f72c14-cda7-46fc-9709-68c3d3c55d23,87f72c14-cda7-46fc-9709-68c3d3c55d23,0,0,b2ca84d1-5b99-46a8-9b44-a451b74dcb45,b2ca84d1-5b99-46a8-9b44-a451b74dcb45,0,0,ac11cbd6-381e-438d-b39f-66e21e31884b,ac11cbd6-381e-438d-b39f-66e21e31884b,0,0,bc118c21-c121-4818-b33a-f9861d29bd1b,bc118c21-c121-4818-b33a-f9861d29bd1b,0,0,0baf5f34-e11b-4085-adfe-106697f21106,0baf5f34-e11b-4085-adfe-106697f21106,0,0,5255d61f-e744-405c-ba50-05c9df5ea0d7,5255d61f-e744-405c-ba50-05c9df5ea0d7,0,0,faf25fcb-0835-4e6c-baed-69603a753312,faf25fcb-0835-4e6c-baed-69603a753312,0,0,37932616-66c9-482a-83c1-1e17892ac141,37932616-66c9-482a-83c1-1e17892ac141,0,0,d9876f7d-250e-4ed5-81fb-56b81f66e462,d9876f7d-250e-4ed5-81fb-56b81f66e462,0,0,a123b008-c2a4-4175-9bea-f43f010d7a19,a123b008-c2a4-4175-9bea-f43f010d7a19,0,0,5b3af805-6df3-4692-9b22-4c54a5a6a53a,5b3af805-6df3-4692-9b22-4c54a5a6a53a,0,0,a02e6213-f2d1-4d00-ac3b-4f5de22c1008,a02e6213-f2d1-4d00-ac3b-4f5de22c1008,0,0,512a98a4-5602-4117-991e-633f06d7a155,512a98a4-5602-4117-991e-633f06d7a155,0,0,8add22bd-7279-48d4-ad05-3f6cba312f78,8add22bd-7279-48d4-ad05-3f6cba312f78,0,0,f8e98b29-e595-4949-96f2-b661907a9fd8,f8e98b29-e595-4949-96f2-b661907a9fd8,0,0,c4c7b0d4-c0cd-4db4-9447-193939626029,c4c7b0d4-c0cd-4db4-9447-193939626029,0,0,84309d6f-d877-4f04-9016-d431a9a5fc10,84309d6f-d877-4f04-9016-d431a9a5fc10,0,0,96e937f6-0a35-4b8d-9898-08d86199ff31,96e937f6-0a35-4b8d-9898-08d86199ff31,0,0,8b3445d1-bb00-4bda-b017-633730807d64,8b3445d1-bb00-4bda-b017-633730807d64,0,0,c66f9091-3abe-4593-be68-7e4bf977b291,c66f9091-3abe-4593-be68-7e4bf977b291,0,0,11d5a16c-ec7c-4d20-b4df-c27e77c353f5,11d5a16c-ec7c-4d20-b4df-c27e77c353f5,0,0,9c53f229-b139-4577-9f7c-d4b4f74aaba4,9c53f229-b139-4577-9f7c-d4b4f74aaba4,0,0,82ea6d49-3a8a-4090-ac75-92b3177059d4,82ea6d49-3a8a-4090-ac75-92b3177059d4,0,0,8f79a97a-5af6-4caf-ad7b-3273aeffb6ce,8f79a97a-5af6-4caf-ad7b-3273aeffb6ce,0,0,34100635-351b-46c9-afda-5d75ec985325,34100635-351b-46c9-afda-5d75ec985325,0,0,c2f61a9d-2643-4615-9243-ad4910e7840a,c2f61a9d-2643-4615-9243-ad4910e7840a,0,0,86860e4a-1853-485f-a6a9-a36a49e5c5f2,86860e4a-1853-485f-a6a9-a36a49e5c5f2,0,0,27e52786-1d67-4643-bd0f-0fd070926479,27e52786-1d67-4643-bd0f-0fd070926479,0,0,d2ea852b-71fe-45c0-961b-9c33e377c166,d2ea852b-71fe-45c0-961b-9c33e377c166,0,0,498cd311-d9ef-4736-bffc-a6c6d913a811,498cd311-d9ef-4736-bffc-a6c6d913a811,0,0,060f9e61-5465-48ee-9ba7-2b6260f5e620,060f9e61-5465-48ee-9ba7-2b6260f5e620,0,0,309e6151-ac46-40d7-9326-67f35caccf15,309e6151-ac46-40d7-9326-67f35caccf15,0,0,e7325328-ca6c-4aa2-a2d5-4b4e765eca04,e7325328-ca6c-4aa2-a2d5-4b4e765eca04,0,0,e34ac021-a752-41d7-bfde-1df218002d3c,e34ac021-a752-41d7-bfde-1df218002d3c,0,0,337e84b5-200e-47a4-b171-75c3cfe58fd1,337e84b5-200e-47a4-b171-75c3cfe58fd1,0,0,87785914-ab3d-40c8-9f3d-80a2067cc09e,87785914-ab3d-40c8-9f3d-80a2067cc09e,0,0,84effd54-e6fd-43e1-be7d-07261311e1a2,84effd54-e6fd-43e1-be7d-07261311e1a2,0,0,dafdf805-d9b7-4a89-a1c6-bcb0103a5a5c,dafdf805-d9b7-4a89-a1c6-bcb0103a5a5c,0,0,91f903d0-a159-4f6a-95c8-8e0347a81e3c,91f903d0-a159-4f6a-95c8-8e0347a81e3c,0,0,e058b838-0f50-4674-bef2-bc07cc916914,e058b838-0f50-4674-bef2-bc07cc916914,0,0,6541a1eb-103c-4560-a282-c8cebb876ee3,6541a1eb-103c-4560-a282-c8cebb876ee3,0,0,5031111b-bbee-4a5b-a18e-91f71b960ce0,5031111b-bbee-4a5b-a18e-91f71b960ce0,0,0,56086a2c-2c03-43df-9bfd-84917f014c3f,56086a2c-2c03-43df-9bfd-84917f014c3f,0,0,8f0de809-fd68-47bd-8bd7-9f1f472d9d17,8f0de809-fd68-47bd-8bd7-9f1f472d9d17,0,0,983af28c-fe6d-4d49-9082-88e8e05b8edc,983af28c-fe6d-4d49-9082-88e8e05b8edc,0,0,0c1fa566-26fb-42c3-8ac8-e5f37ecd3ace,0c1fa566-26fb-42c3-8ac8-e5f37ecd3ace,0,0,eb4a9767-baf0-439f-a552-958efb994ae7,eb4a9767-baf0-439f-a552-958efb994ae7,0,0,060ea808-9555-4663-98ad-e464163cc0b5,060ea808-9555-4663-98ad-e464163cc0b5,0,0,701be01b-b4e6-4042-b8b9-b9a1fbdc5f84,701be01b-b4e6-4042-b8b9-b9a1fbdc5f84,0,0,ac04ecfb-7904-4b08-bde5-4f40a051bdf7,ac04ecfb-7904-4b08-bde5-4f40a051bdf7,0,0,7b93612c-41b5-451f-ad20-a89373411018,7b93612c-41b5-451f-ad20-a89373411018,0,0,af191b56-2fd6-4ab6-8c74-d85edddfdae4,af191b56-2fd6-4ab6-8c74-d85edddfdae4,0,0,2a040a5b-658b-4a13-9463-fc2edcef7877,2a040a5b-658b-4a13-9463-fc2edcef7877,0,0,cd765452-1def-4b14-9aaa-610cae35b56d,cd765452-1def-4b14-9aaa-610cae35b56d,0,0,fd28ddd8-c6cc-40d5-9b48-225e3a37adfe,fd28ddd8-c6cc-40d5-9b48-225e3a37adfe,0,0,9375dde8-d7b9-4ad9-b501-c9806e555f08,9375dde8-d7b9-4ad9-b501-c9806e555f08,0,0,51fb98a8-3d69-4c28-a278-dda8bc997717,51fb98a8-3d69-4c28-a278-dda8bc997717,0,0,8ec66b68-dbe9-42ec-923e-5ff8109ade18,8ec66b68-dbe9-42ec-923e-5ff8109ade18,0,0,6326e57e-4603-44be-8b85-c7e72add18c6,6326e57e-4603-44be-8b85-c7e72add18c6,0,0,f061debe-ab73-45c2-a5a8-6afed0c54da9,f061debe-ab73-45c2-a5a8-6afed0c54da9,0,0,81fad1af-020b-4cbf-9906-15cc436e2a17,81fad1af-020b-4cbf-9906-15cc436e2a17,0,0,7ed50179-0033-4319-95f2-6d75267129c5,7ed50179-0033-4319-95f2-6d75267129c5,0,0,314329c5-f251-465f-8b35-748ed6314550,314329c5-f251-465f-8b35-748ed6314550,0,0,9e096737-eebf-476d-b4b7-a191a25b7584,9e096737-eebf-476d-b4b7-a191a25b7584,0,0,b20645bc-9dec-4aa8-a1c0-5dfc67f17896,b20645bc-9dec-4aa8-a1c0-5dfc67f17896,0,0,9cff98a6-3965-4dd6-a671-d4a47d69e900,9cff98a6-3965-4dd6-a671-d4a47d69e900,0,0,55b9f6f5-b53e-4993-a8fb-1544574d9973,55b9f6f5-b53e-4993-a8fb-1544574d9973,0,0,fc30ecbc-526e-4854-a74d-e636198b60a0,fc30ecbc-526e-4854-a74d-e636198b60a0,0,0,4e29ceaa-e44d-46dc-90e2-eca32541406b,4e29ceaa-e44d-46dc-90e2-eca32541406b,0,0,30db61b2-838a-4e20-825b-e32f4fa1c367,30db61b2-838a-4e20-825b-e32f4fa1c367,0,0,b04b42a9-01ae-4a44-8d10-b7e29ac2be36,b04b42a9-01ae-4a44-8d10-b7e29ac2be36,0,0,c93cf4e9-4fb9-4b35-b3d2-a00763a422e6,c93cf4e9-4fb9-4b35-b3d2-a00763a422e6,0,0,afe89775-2a84-48ad-8519-be00b68612b1,afe89775-2a84-48ad-8519-be00b68612b1,0,0,0e9b8d20-02f6-4065-b943-701489811514,0e9b8d20-02f6-4065-b943-701489811514,0,0,96a81e70-7335-47eb-8966-38ea9913e38e,96a81e70-7335-47eb-8966-38ea9913e38e,0,0,e1cb7658-fd1e-4785-8e73-59a8a51fd8ca,e1cb7658-fd1e-4785-8e73-59a8a51fd8ca,0,0,51947c53-e322-4fd4-994c-045ee93cb602,51947c53-e322-4fd4-994c-045ee93cb602,0,0,d9c0c7ba-5656-4a03-a2df-b78c429865d8,d9c0c7ba-5656-4a03-a2df-b78c429865d8,0,0,5bcee447-e907-4c62-aeba-d4acd2b99f84,5bcee447-e907-4c62-aeba-d4acd2b99f84,0,0,21a422d0-a723-4b0c-9f8a-aa6d6a3dffcb,21a422d0-a723-4b0c-9f8a-aa6d6a3dffcb,0,0,7808b201-ccde-4739-8a25-34c29f2e79f2,7808b201-ccde-4739-8a25-34c29f2e79f2,0,0,edb346e8-7a58-47a7-b0e9-f0d25a540064,edb346e8-7a58-47a7-b0e9-f0d25a540064,0,0,37664211-2c02-4bc7-8ef5-90ee8f1694c5,37664211-2c02-4bc7-8ef5-90ee8f1694c5,0,0,f0cb4bce-681c-4171-8f77-efdab5bb20ca,f0cb4bce-681c-4171-8f77-efdab5bb20ca,0,0,b82de221-510f-40d9-b92e-2bb621250f39,b82de221-510f-40d9-b92e-2bb621250f39,0,0,3e63b3e4-d774-417a-b7b2-6df9f3d3e9fb,3e63b3e4-d774-417a-b7b2-6df9f3d3e9fb,0,0,7ac9e594-5ae3-4a7f-80ef-94b61eba55a4,7ac9e594-5ae3-4a7f-80ef-94b61eba55a4,0,0,9da76b27-28f1-4c63-a1aa-6922fae422b3,9da76b27-28f1-4c63-a1aa-6922fae422b3,0,0,516ca5ab-8253-4c67-bbe0-b052bba5d821,516ca5ab-8253-4c67-bbe0-b052bba5d821,0,0,b7f62025-f560-4eeb-a691-0c1bec1046ef,b7f62025-f560-4eeb-a691-0c1bec1046ef,0,0,ee8a91e3-a12b-4fea-a4de-8d1f2db0ca19,ee8a91e3-a12b-4fea-a4de-8d1f2db0ca19,0,0,c2916f44-b905-4dcd-87a4-a4a404f1500a,c2916f44-b905-4dcd-87a4-a4a404f1500a,0,0,b4d2d7d7-a813-4533-b06b-db86cedf7c76,b4d2d7d7-a813-4533-b06b-db86cedf7c76,0,0,5d5b4007-6c47-4dd5-805c-0be223305bc4,5d5b4007-6c47-4dd5-805c-0be223305bc4,0,0,c7cf5a30-7965-4885-ab33-452feb14e7df,c7cf5a30-7965-4885-ab33-452feb14e7df,0,0,3c1c25ab-8458-4f2b-8485-6471eb235795,3c1c25ab-8458-4f2b-8485-6471eb235795,0,0,a3caeb0f-e2f9-4f6b-acc0-f3ea296568ee,a3caeb0f-e2f9-4f6b-acc0-f3ea296568ee,0,0,03c4df97-fcdb-4b67-a8b2-0f16dd8889e3,03c4df97-fcdb-4b67-a8b2-0f16dd8889e3,0,0,0eedd562-7d42-40b2-8cc0-14994a79322b,0eedd562-7d42-40b2-8cc0-14994a79322b,0,0,1c1cc187-8275-4180-a5c6-7f9a0f455259,1c1cc187-8275-4180-a5c6-7f9a0f455259,0,0,22e8c38f-f3e2-42f4-9d67-6271cfd319b2,22e8c38f-f3e2-42f4-9d67-6271cfd319b2,0,0,e21067d4-d826-4375-acba-7c91efebe502,e21067d4-d826-4375-acba-7c91efebe502,0,0,84cc7c8d-7e84-4a02-97dd-d7aa83817ebc,84cc7c8d-7e84-4a02-97dd-d7aa83817ebc,0,0,08024dfb-e166-4d0d-a97d-da967d88f819,08024dfb-e166-4d0d-a97d-da967d88f819,0,0,d8c7ed5d-426c-4a9a-a68a-d51bdff35784,d8c7ed5d-426c-4a9a-a68a-d51bdff35784,0,0,cb842da8-cc6d-4637-8951-40e68f1c5697,cb842da8-cc6d-4637-8951-40e68f1c5697,0,0,9252c5b8-e665-46c2-a4de-408adf9ff6d5,9252c5b8-e665-46c2-a4de-408adf9ff6d5,0,0,5d307033-17d4-4a4c-b5b8-cfcfff50e17e,5d307033-17d4-4a4c-b5b8-cfcfff50e17e,0,0,7e0b77f0-278b-4273-94a5-daa481f07a04,7e0b77f0-278b-4273-94a5-daa481f07a04,0,0,e6fdcd17-7b9e-4887-be18-c01bff11324e,e6fdcd17-7b9e-4887-be18-c01bff11324e,0,0,6ade91c2-1357-4cb7-8a76-a367e1de2b99,6ade91c2-1357-4cb7-8a76-a367e1de2b99,0,0,6ffef034-2cf3-4222-a352-89b4651cc518,6ffef034-2cf3-4222-a352-89b4651cc518,0,0,2d997c3a-d807-4b31-9589-062cbca23937,2d997c3a-d807-4b31-9589-062cbca23937,0,0,ad03ef28-0be0-4f8a-8912-dc9050b23247,ad03ef28-0be0-4f8a-8912-dc9050b23247,0,0,7552624b-ef10-4b6f-9342-6d675d997921,7552624b-ef10-4b6f-9342-6d675d997921,0,0,6e144419-519f-477d-9eac-13f51ab2817d,6e144419-519f-477d-9eac-13f51ab2817d,0,0,3c5450ed-7617-4e3a-9cf0-e1d74ca48fb6,3c5450ed-7617-4e3a-9cf0-e1d74ca48fb6,0,0,f338f05f-eceb-4bd6-ba9c-8552207087c0,f338f05f-eceb-4bd6-ba9c-8552207087c0,0,0,ecd14699-e942-45db-82d1-e96dc2982b85,ecd14699-e942-45db-82d1-e96dc2982b85,0,0,5dd298d4-d7dc-4b7b-9dff-023ff7a6cd80,5dd298d4-d7dc-4b7b-9dff-023ff7a6cd80,0,0,85c311f9-eaa5-4f91-8d8d-7385bfb79031,85c311f9-eaa5-4f91-8d8d-7385bfb79031,0,0,a3459d86-ce94-4244-9541-e8c0ebaf1d8c,a3459d86-ce94-4244-9541-e8c0ebaf1d8c,0,0,bec4337b-b8c0-487c-9620-c647f4aee6f4,bec4337b-b8c0-487c-9620-c647f4aee6f4,0,0,9e99b016-5dfe-400c-ba07-d8c573c69120,9e99b016-5dfe-400c-ba07-d8c573c69120,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file diff --git a/Ext/ParentConfigurations/БиблиотекаПодключаемогоОборудования.cf b/Ext/ParentConfigurations/БиблиотекаПодключаемогоОборудования.cf new file mode 100644 index 0000000..f4c2761 Binary files /dev/null and b/Ext/ParentConfigurations/БиблиотекаПодключаемогоОборудования.cf differ diff --git a/Ext/SessionModule.bsl b/Ext/SessionModule.bsl new file mode 100644 index 0000000..d572bcb --- /dev/null +++ b/Ext/SessionModule.bsl @@ -0,0 +1,15 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) + + // ПодключаемоеОборудование + МенеджерОборудованияВызовСервера.УстановкаПараметровСеанса(ИменаПараметровСеанса); + // Конец ПодключаемоеОборудование + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/InformationRegisters/ЗапасыНаСкладах.xml b/InformationRegisters/ЗапасыНаСкладах.xml new file mode 100644 index 0000000..93a89de --- /dev/null +++ b/InformationRegisters/ЗапасыНаСкладах.xml @@ -0,0 +1,285 @@ + + + + + + ddfc2928-7f31-4266-982c-7f9898aa4abb + 0484f8b1-85f5-4e90-bcbd-2ffc804d9a9a + + + 5dad5ff1-e8f4-4eda-a83e-711a06802086 + 63457d59-f338-4cb1-997b-36f1ab1741d8 + + + 04cc4fb9-1f15-478b-a3ec-ebb97998441d + 13cfff2f-d94a-433c-ae69-3f9a2729a3f8 + + + da647390-454d-4c6f-8e15-b34dce4d291a + 61785cdd-c1aa-4666-b44b-070cc463b5a5 + + + e912b71c-a8fc-41b0-afb5-3e9290d05b41 + 2f15aa61-6b8e-4870-bbd9-331879a7fcf1 + + + 20f197a7-7830-4555-853a-017d2cc84961 + 0f4fe149-ac7e-422d-9af9-a764ae5c4759 + + + 83d451b1-ca67-49d7-9368-19e32a4d6e6f + 9237d1f2-1162-46be-9cd8-77f63ce8f0a8 + + + + ЗапасыНаСкладах + + + ru + Запасы на складах + + + Снимок остатков УНФ по ячейкам + true + InDialog + + + + + Nonperiodical + Independent + false + false + Managed + DontUse + false + false + + + + + + DontUse + false + false + + + + + Количество + + + ru + Количество + + + + + xs:decimal + + 15 + 3 + Any + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + СтруктурнаяЕдиница + + + ru + Склад + + + + + cfg:CatalogRef.СтруктурныеЕдиницы + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + Use + TransformValues + + + + + Ячейка + + + ru + Ячейка + + + + + cfg:CatalogRef.Ячейки + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + Use + TransformValues + + + + + Номенклатура + + + ru + Номенклатура + + + + + cfg:CatalogRef.Номенклатура + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + Use + TransformValues + + + + + Партия + + + ru + Партия + + + + + cfg:CatalogRef.ПартииНоменклатуры + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + Use + TransformValues + + + + + \ No newline at end of file diff --git a/InformationRegisters/ЗначенияЕМРЦ.xml b/InformationRegisters/ЗначенияЕМРЦ.xml new file mode 100644 index 0000000..6abd4e2 --- /dev/null +++ b/InformationRegisters/ЗначенияЕМРЦ.xml @@ -0,0 +1,266 @@ + + + + + + c42fe904-23cd-4122-9edc-9b3ae3d09b0f + 5699c268-52ff-4b65-818b-0cb10a912e21 + + + ecb4fac7-a07a-4d12-8382-65b912fd7fa2 + a4f527c2-a769-4b5e-96de-f7f6e5311cb0 + + + 0e648c41-cbf1-4610-8651-3fe6c23acd3b + 1d3b0c60-b28f-4d48-a959-d92588e327f3 + + + 1201b2f0-5f76-474c-9823-ac17e2981730 + cdc82c4f-286c-4ba1-9ecc-9be0063d4ac4 + + + a7d6b801-0abe-4aa6-a598-caa06716f50a + 2b7335e3-b1ff-43af-ac67-68a29961a847 + + + d03568e9-fbe9-4f80-934c-572e301a577d + d45f1259-1680-4e56-a336-5912200be951 + + + 1cf505f0-0edc-43c2-9b9a-6496dd821077 + 70b777be-05d5-409c-833e-8ce7378135e1 + + + + ЗначенияЕМРЦ + + + ru + Значения ЕМРЦ + + + + true + InDialog + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + Month + Independent + true + false + Managed + DontUse + false + false + + + ru + Значение ЕМРЦ + + + + + + + DontUse + false + false + + + + + Цена + + + ru + Цена + + + + + cfg:DefinedType.ДенежнаяСуммаНеотрицательная + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ОсобенностьУчета + + + ru + Особенность учета + + + + + cfg:EnumRef.ВидыМаркированнойПродукцииБПО + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + Use + TransformValues + + + + + \ No newline at end of file diff --git a/InformationRegisters/ЗначенияЕМРЦ/Ext/ManagerModule.bsl b/InformationRegisters/ЗначенияЕМРЦ/Ext/ManagerModule.bsl new file mode 100644 index 0000000..1935d21 --- /dev/null +++ b/InformationRegisters/ЗначенияЕМРЦ/Ext/ManagerModule.bsl @@ -0,0 +1,99 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс +// Заполняет первоначальные значения ЕМРЦ для табачной продукции. +Процедура ЗаполнитьЗначенияРегистраЕМРЦ() Экспорт + + НачатьТранзакцию(); + + Попытка + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЗначенияЕМРЦ"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("ОсобенностьУчета", Перечисления.ВидыМаркированнойПродукцииБПО.Табак); + Блокировка.Заблокировать(); + + НаборЗаписей = РегистрыСведений.ЗначенияЕМРЦ.СоздатьНаборЗаписей(); + + НоваяСтрока = НаборЗаписей.Добавить(); + НоваяСтрока.ОсобенностьУчета = Перечисления.ВидыМаркированнойПродукцииБПО.Табак; + НоваяСтрока.Период = Дата('20230101'); + НоваяСтрока.Цена = 0.02*3467*(1+0.2)*1.4; + + НоваяСтрока = НаборЗаписей.Добавить(); + НоваяСтрока.ОсобенностьУчета = Перечисления.ВидыМаркированнойПродукцииБПО.Табак; + НоваяСтрока.Период = Дата('20230301'); + НоваяСтрока.Цена = 0.02*3536*(1+0.2)*1.4; + + НоваяСтрока = НаборЗаписей.Добавить(); + НоваяСтрока.ОсобенностьУчета = Перечисления.ВидыМаркированнойПродукцииБПО.Табак; + НоваяСтрока.Период = Дата('20240101'); + НоваяСтрока.Цена = 0.02*3536*(1+0.2)*1.4; + + НоваяСтрока = НаборЗаписей.Добавить(); + НоваяСтрока.ОсобенностьУчета = Перечисления.ВидыМаркированнойПродукцииБПО.Табак; + НоваяСтрока.Период = Дата('20240301'); + НоваяСтрока.Цена = 0.02*3820*(1+0.2)*1.4; + + НоваяСтрока = НаборЗаписей.Добавить(); + НоваяСтрока.ОсобенностьУчета = Перечисления.ВидыМаркированнойПродукцииБПО.Табак; + НоваяСтрока.Период = Дата('20250101'); + НоваяСтрока.Цена = 0.02*3973*(1+0.2)*1.4; + + НоваяСтрока = НаборЗаписей.Добавить(); + НоваяСтрока.ОсобенностьУчета = Перечисления.ВидыМаркированнойПродукцииБПО.Табак; + НоваяСтрока.Период = Дата('20260101'); + НоваяСтрока.Цена = 0.02*4132*(1+0.2)*1.4; + + НаборЗаписей.Записать(); + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Ошибка заполнения предопределенных элементов ЕМРЦ.'", ОбщегоНазначенияБПО.КодОсновногоЯзыка())); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +// Получает цену ЕМРЦ из данных информационной базы на дату. +// +// Параметры: +// ОсобенностьУчета - ПеречислениеСсылка.ВидыМаркированнойПродукцииБПО - тип маркированной продукции для проверки цены. +// Период - Дата - дата проверки цены. +// ЕМРЦ - Число - значение ЕМРЦ. +// +Процедура ПолучитьЦенуЕМРЦ(ОсобенностьУчета, Период = Неопределено, ЕМРЦ = 0) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ЗначениеЗаполнено(Период) Тогда + Период = ТекущаяДатаСеанса(); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЗначенияЕМРЦСрезПоследних.Цена КАК Цена + |ИЗ + | РегистрСведений.ЗначенияЕМРЦ.СрезПоследних(&Период, ОсобенностьУчета = &ОсобенностьУчета) КАК ЗначенияЕМРЦСрезПоследних"; + + Запрос.УстановитьПараметр("Период", Период); + Запрос.УстановитьПараметр("ОсобенностьУчета", ОсобенностьУчета); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + ЕМРЦ = Выборка.Цена; + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/InformationRegisters/ЗначенияЕМРЦ/Ext/RecordSetModule.bsl b/InformationRegisters/ЗначенияЕМРЦ/Ext/RecordSetModule.bsl new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/InformationRegisters/ЗначенияЕМРЦ/Ext/RecordSetModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/InformationRegisters/ОперацииПроверкиКМ.xml b/InformationRegisters/ОперацииПроверкиКМ.xml new file mode 100644 index 0000000..8a87a34 --- /dev/null +++ b/InformationRegisters/ОперацииПроверкиКМ.xml @@ -0,0 +1,1439 @@ + + + + + + b479188b-f75b-49c8-b092-835fb155960f + 8ae64d40-0d41-4896-918e-cea8c22ef635 + + + d50d0e72-9773-492c-8bc5-206af1e54138 + bd5f25fa-a07d-4169-b663-763b8cd8a51c + + + 8fab76b6-5130-4afc-a4da-8c8d40bbf8ab + 92c6ad6a-2430-4eb8-83ed-112d27613c37 + + + 26078f1b-288e-4260-bf39-b34a0c5913e9 + 44bb1f29-56d7-4746-bae1-a58cace4efb0 + + + 7a8fcda7-dabf-448c-aa8d-6c72cd1a4bcb + 97474bf8-299a-443a-a051-46451099aab1 + + + 238d3a48-e2fa-4be5-856b-0c2f49eb7c03 + 01f11e5d-c87f-4caa-a18b-8cbd1100a61c + + + 207331e4-e4ed-49cf-b58c-964541fd65dd + 306375b7-8c71-4794-a45f-a1557e0a2b5a + + + + ОперацииПроверкиКМ + + + ru + Операции проверки КМ + + + + false + InDialog + InformationRegister.ОперацииПроверкиКМ.Form.ФормаЗаписи + InformationRegister.ОперацииПроверкиКМ.Form.ФормаСписка + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + Nonperiodical + Independent + false + false + Managed + DontUse + false + false + + + ru + Операция проверки КМ + + + + + + + DontUse + false + false + + + + + ЗапросКодаМаркировки + + + ru + Запрос кода маркировки + + + + + v8:ValueStorage + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + РезультатПроверкиКМНаККТ + + + ru + Результат проверки КМ на ККТ + + + + + v8:ValueStorage + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + РезультатПроверкиКМНаСервере + + + ru + Результат проверки КМ на сервере + + + + + v8:ValueStorage + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ФлагиПроверкиОИСМ + + + ru + Флаги проверки ОИСМ + + + + + xs:string + + 8 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ПокупкаПодтверждена + + + ru + Покупка подтверждена + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Наименование + + + ru + Наименование + + + + + xs:string + + 120 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + АдресСервераЗапросаРазрешения + + + ru + Адрес сервера запроса разрешения + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ТекстЗапросаРазрешения + + + ru + Текст запроса разрешения + + + + + v8:ValueStorage + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + КодОтветаРазрешения + + + ru + Код ответа разрешения + + + + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + + РезультатЗапросаРазрешения + + + ru + Результат запроса разрешения + + + + + v8:ValueStorage + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ИдентификаторЗапросаРазрешения + + + ru + Идентификатор запроса разрешения + + + + + xs:string + + 36 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + + ВремяЗапросаРазрешения + + + ru + Время запроса разрешения + + + + + xs:dateTime + + DateTime + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ПродажаРазрешена + + + ru + Продажа разрешена + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ПричинаЗапрета + + + ru + Причина запрета + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ДополнительныеСведения + + + ru + Дополнительные сведения + + + + + v8:ValueStorage + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ИдентификаторЗапросаЕГАИС + + + ru + Идентификатор запроса ЕГАИС + + + + + xs:string + + 40 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + + ПодписьЧекаЕГАИС + + + ru + Подпись чека ЕГАИС + + + + + xs:string + + 40 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ВходящееСообщениеЕГАИС + + + ru + Входящее сообщение ЕГАИС + + + + + cfg:DefinedType.СообщениеЕГАИСвБПО + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ИсходящееСообщениеЕГАИС + + + ru + Исходящее сообщение ЕГАИС + + + + + cfg:DefinedType.СообщениеЕГАИСвБПО + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + СообщениеПереданоЕГАИС + + + ru + Сообщение передано ЕГАИС + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ТекстОшибкиЕГАИС + + + ru + Текст ошибки ЕГАИС + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Дата + + + ru + Дата + + + + + xs:dateTime + + DateTime + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Результат + + + ru + Результат + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + КодМаркировкиПредставление + + + ru + Код маркировки представление + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Штрихкод + + + ru + Штрихкод + + + + + xs:string + + 20 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ИдентификаторСессии + + + ru + Идентификатор сессии + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + ShowError + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + DontUse + Use + TransformValues + + + + + ИдентификаторЗапроса + + + ru + Идентификатор запроса + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + ShowError + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + DontUse + Use + TransformValues + + + + + ИдентификаторФискальнойОперации + + + ru + Идентификатор фискальной операции + + + + + xs:string + + 36 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + Index + DontUse + Use + TransformValues + + + + + ГодМесяц + + + ru + Год месяц + + + + + xs:decimal + + 6 + 0 + Any + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + Index + Use + Use + TransformValues + + + + + КодМаркировки + + + ru + Код маркировки + + + + + xs:string + + 210 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + Index + Use + Use + TransformValues + + +
ФормаЗаписи
+
ФормаСписка
+
+
+
\ No newline at end of file diff --git a/InformationRegisters/ОперацииПроверкиКМ/Ext/ManagerModule.bsl b/InformationRegisters/ОперацииПроверкиКМ/Ext/ManagerModule.bsl new file mode 100644 index 0000000..ca8a481 --- /dev/null +++ b/InformationRegisters/ОперацииПроверкиКМ/Ext/ManagerModule.bsl @@ -0,0 +1,776 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +// СтандартныеПодсистемы.УправлениеДоступом +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +// +// Параметры: +// Ограничение - Структура: +// * Текст - Строка - ограничение доступа для пользователей. +// Если пустая строка, значит, доступ разрешен. +// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей. +// Если пустая строка, значит, доступ запрещен. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически. +// - Булево - если Ложь, то всегда записывать ключи доступа, +// если Истина, тогда не записывать ключи доступа, +// а использовать ключи доступа владельца (требуется, +// чтобы ограничение было строго по объекту-владельцу). +// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также +// как у параметра ПоВладельцуБезЗаписиКлючейДоступа. +// +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Менеджер = "РегистрСведений.ОперацииПроверкиКМ"; + МенеджерОборудованияВызовСервераПереопределяемый.ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецЕсли + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Выполняет удаление записей регистра за прошлые месяцы, для ускорения очистки +// +// Параметры: +// ДатаОчистки - Дата - Дата в месяце до которой будет выполнена очистка, +// удаление записей будет выполнено до конца месяца переданной даты. +Процедура ОчиститьРегистрЗаПрошлыеМесяцы(ДатаОчистки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | ОперацииПроверкиКМ.ГодМесяц КАК ГодМесяц + |ИЗ + | РегистрСведений.ОперацииПроверкиКМ КАК ОперацииПроверкиКМ + |ГДЕ + | ОперацииПроверкиКМ.ГодМесяц < &ГодМесяцОчистки"; + + ГодМесяцОчистки = Год(ДатаОчистки) * 100 + Месяц(ДатаОчистки); + Запрос.УстановитьПараметр("ГодМесяцОчистки", ГодМесяцОчистки); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОперацииПроверкиКМ"); + ЭлементБлокировки.ИсточникДанных = РезультатЗапроса; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("ГодМесяц","ГодМесяц"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + + НаборЗаписей = СоздатьНаборЗаписей(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + НаборЗаписей.Очистить(); + НаборЗаписей.Отбор.ГодМесяц.Установить(Выборка.ГодМесяц); + НаборЗаписей.Записать(Истина); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Очистка операций проверки кода маркировки.'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()), + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки + +КонецПроцедуры + +// Выполняет удаление записей регистра в месяце переданной даты +// +// Параметры: +// ДатаОчистки - Дата - Дата до которой в месяце даты будет выполнена очистка +// удаление записей будет выполнено с начала месяца, по переданную дату. +Процедура ОчиститьРегистрЗаТекущийМесяц(ДатаОчистки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОперацииПроверкиКМ.ИдентификаторЗапроса КАК ИдентификаторЗапроса, + | ОперацииПроверкиКМ.ИдентификаторСессии КАК ИдентификаторСессии, + | ОперацииПроверкиКМ.ИдентификаторФискальнойОперации КАК ИдентификаторФискальнойОперации, + | ОперацииПроверкиКМ.ГодМесяц КАК ГодМесяц, + | ОперацииПроверкиКМ.КодМаркировки КАК КодМаркировки + |ИЗ + | РегистрСведений.ОперацииПроверкиКМ КАК ОперацииПроверкиКМ + |ГДЕ + | ОперацииПроверкиКМ.ГодМесяц = &ГодМесяцОчистки + | И ОперацииПроверкиКМ.Дата < &ДатаОчистки"; + + ГодМесяцОчистки = Год(ДатаОчистки) * 100 + Месяц(ДатаОчистки); + Запрос.УстановитьПараметр("ГодМесяцОчистки", ГодМесяцОчистки); + Запрос.УстановитьПараметр("ДатаОчистки", ДатаОчистки); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОперацииПроверкиКМ"); + ЭлементБлокировки.ИсточникДанных = РезультатЗапроса; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("ИдентификаторСессии","ИдентификаторСессии"); + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("ИдентификаторЗапроса","ИдентификаторЗапроса"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + НаборЗаписей = СоздатьНаборЗаписей(); + Выборка = РезультатЗапроса.Выбрать(); + Если ОбщегоНазначенияБПОПовтИсп.РежимЗамещенияДоступен() Тогда + Пока Выборка.Следующий() Цикл + ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Выборка); + КонецЦикла; + НаборЗаписей.Записать(ОбщегоНазначенияБПОПовтИсп.РежимЗамещенияУдаление()); + Иначе + Пока Выборка.Следующий() Цикл + НаборЗаписей.Очистить(); + НаборЗаписей.Отбор.ИдентификаторСессии.Установить(Выборка.ИдентификаторСессии); + НаборЗаписей.Отбор.ИдентификаторЗапроса.Установить(Выборка.ИдентификаторЗапроса); + НаборЗаписей.Записать(Истина); + КонецЦикла; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Очистка операций проверки кода маркировки.'", ОбщегоНазначенияБПО.КодОсновногоЯзыка())); + КонецПопытки + +КонецПроцедуры + +// Устанавливает значение реквизита у всех записей переданной сессии. +// +// Параметры: +// ИдентификаторСессии - Строка - Идентификатор сессии +// Имя - Строка - Имя реквизита записи значение которого нужно установить +// Значение - Произвольный - значение реквизита записи которое нужно установить +Процедура УстановитьРеквизитСессииПроверкиКМ(ИдентификаторСессии, Имя, Значение) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ЗначениеЗаполнено(ИдентификаторСессии) Тогда + + УникальныйИдентификаторСессии = Новый УникальныйИдентификатор(ИдентификаторСессии); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОперацииПроверкиКМ"); + ЭлементБлокировки.УстановитьЗначение("ИдентификаторСессии", УникальныйИдентификаторСессии); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + НаборЗаписей = СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИдентификаторСессии.Установить(УникальныйИдентификаторСессии); + НаборЗаписей.Прочитать(); + Для Каждого Запись Из НаборЗаписей Цикл + Запись[Имя] = Значение; + КонецЦикла; + НаборЗаписей.Записать(Истина); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ТекстСообщения = СтрШаблон( + НСтр("ru = 'Ошибка записи в журнал логирования операций проверки кода маркировки: %1'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()), + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Операции проверки кода маркировки.'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()), + ТекстСообщения); + КонецПопытки; + КонецЕсли; + +КонецПроцедуры + +// Возвращает структуру для обновления записи по идентификаторам сессии и запроса +// +// Возвращаемое значение: +// Структура: +// * Ключ - Структура -содержит ключ записи, идентификаторы сессии и запроса: +// ** ИдентификаторСессии - Строка +// ** ИдентификаторЗапроса - Строка +// * Результат - Булево, Неопределено - общий результат операции +// * ЗапросКМ - Структура, Неопределено - структура запроса КМ +// * ФлагиПроверкиОИСМ - Строка, Неопределено - флаги ответа от сервера ОИСМ +// * ЛокальныйОтветXML - Строка - Строка XML ответ от драйвера +// * УдаленныйОтветXML - Строка - Строка XML ответ от драйвера с сервера ОИСМ +// * ПокупкаПодтверждена - Булево, Неопределено - флаг подтверждения покупки +// +Функция ПараметрыЗаписиРезультатаПроверкиКМ() Экспорт + + Ключ = Новый Структура(); + Ключ.Вставить("ИдентификаторСессии", ""); + Ключ.Вставить("ИдентификаторЗапроса", ""); + Результат = Новый Структура(); + Результат.Вставить("Ключ", Ключ); + Результат.Вставить("Результат", Истина); + Результат.Вставить("ЗапросКМ", Неопределено); + Результат.Вставить("ФлагиПроверкиОИСМ", ""); + Результат.Вставить("ЛокальныйОтветXML", ""); + Результат.Вставить("УдаленныйОтветXML", ""); + Результат.Вставить("ПокупкаПодтверждена", Неопределено); + Возврат Результат; + +КонецФункции + +// Выполняет обновление записи по переданным параметрам +// +// Параметры: +// ПараметрыЗаписи - см. ПараметрыЗаписиРезультатаПроверкиКМ +// +Процедура ОбновитьРезультатыПроверкиКодаМаркировкиВРегистре(ПараметрыЗаписи) Экспорт + + Если ПустаяСтрока(ПараметрыЗаписи.Ключ.ИдентификаторСессии) Или ПустаяСтрока(ПараметрыЗаписи.Ключ.ИдентификаторЗапроса) Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + НаборЗаписей = СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИдентификаторСессии.Установить(Новый УникальныйИдентификатор(ПараметрыЗаписи.Ключ.ИдентификаторСессии)); + НаборЗаписей.Отбор.ИдентификаторЗапроса.Установить(Новый УникальныйИдентификатор(ПараметрыЗаписи.Ключ.ИдентификаторЗапроса)); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество()=0 Тогда + Возврат; + КонецЕсли; + Запись = НаборЗаписей.Получить(0); + Если ЗначениеЗаполнено(ПараметрыЗаписи.ЗапросКМ) Тогда + ЗапросКМ = ПараметрыЗаписи.ЗапросКМ; + КодМаркировки = ЗапросКМ.КонтрольнаяМарка; + Если Запись.КодМаркировки <> КодМаркировки Тогда + Штрихкод = ОбщегоНазначенияБПОКлиентСервер.Base64ВШтрихкод(КодМаркировки); + Запись.КодМаркировки = КодМаркировки; + КонецЕсли; + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON, ЗапросКМ.ПараметрыXML, ,"ЗаписатьРезультатыПроверкиКодаМаркировкиВРегистр_ПреобразованиеВJSON", РегистрыСведений.ОперацииПроверкиКМ); + ТекстJSON = ЗаписьJSON.Закрыть(); + Запись.ЗапросКодаМаркировки = Новый ХранилищеЗначения(ТекстJSON); + КонецЕсли; + Если ЗначениеЗаполнено(ПараметрыЗаписи.ФлагиПроверкиОИСМ) Тогда + Запись.ФлагиПроверкиОИСМ = ПараметрыЗаписи.ФлагиПроверкиОИСМ; + КонецЕсли; + Если ПараметрыЗаписи.Результат <> Неопределено Тогда + Запись.Результат = ПараметрыЗаписи.Результат; + КонецЕсли; + Если ПараметрыЗаписи.ПокупкаПодтверждена <> Неопределено Тогда + Запись.ПокупкаПодтверждена = ПараметрыЗаписи.ПокупкаПодтверждена; + КонецЕсли; + Если ЗначениеЗаполнено(ПараметрыЗаписи.ЛокальныйОтветXML) Тогда + Запись.РезультатПроверкиКМНаККТ = Новый ХранилищеЗначения(ПараметрыЗаписи.ЛокальныйОтветXML); + КонецЕсли; + Если ЗначениеЗаполнено(ПараметрыЗаписи.УдаленныйОтветXML) Тогда + Запись.РезультатПроверкиКМНаСервере = Новый ХранилищеЗначения(ПараметрыЗаписи.УдаленныйОтветXML); + КонецЕсли; + + НаборЗаписей.Записать(Истина); + +КонецПроцедуры + +// Добавляет в регистр записи по переданным параметрам +// +// Параметры: +// РезультатыПроверки - Массив из см. ПараметрыЗаписиРезультатаПроверкиКМ +// +Процедура ДобавитьРезультатыПроверкиКодаМаркировкиВРегистр(РезультатыПроверки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ДанныеПолученныеРанее = Новый Соответствие(); + Для Каждого РезультатПроверки Из РезультатыПроверки Цикл + ЗапросКМ = РезультатПроверки.ЗапросКМ; + Если ИнформацияПоРазрешительномуЗапросуПолученаРанее(ЗапросКМ) Тогда + Данные = Новый Структура(); + Данные.Вставить("КодОтветаРазрешения", ""); + Данные.Вставить("АдресСервераЗапросаРазрешения", ""); + Данные.Вставить("ТекстЗапросаРазрешения", Неопределено); + Данные.Вставить("РезультатЗапросаРазрешения", Неопределено); + ДанныеПолученныеРанее.Вставить(ЗапросКМ.ИдентификаторЗапросаРазрешения, Данные); + КонецЕсли; + КонецЦикла; + + Если ДанныеПолученныеРанее.Количество()>0 Тогда + ПолучитьИнформациюПоРазрешительномуЗапросуПолученнуюРанее(ДанныеПолученныеРанее); + КонецЕсли; + + ХранитьУспешныеОперации = МенеджерОборудованияМаркировка.ХранитьУспешныеОперацииРазрешения(); + НаборЗаписей = СоздатьНаборЗаписей(); + ДатаЗаписи = ОбщегоНазначенияБПО.ДатаСеанса(); + ГодМесяц = Год(ДатаЗаписи)*100+Месяц(ДатаЗаписи); + Для Каждого РезультатПроверки Из РезультатыПроверки Цикл + + Если РезультатПроверки.Ключ.ИдентификаторСессии = Неопределено + Или РезультатПроверки.Ключ.ИдентификаторЗапроса = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если Не СохранятьРезультатПроверки(ХранитьУспешныеОперации, РезультатПроверки) Тогда + Продолжить; + КонецЕсли; + + ЗапросКМ = РезультатПроверки.ЗапросКМ; + Запись = НаборЗаписей.Добавить(); + Запись.ИдентификаторСессии = Новый УникальныйИдентификатор(РезультатПроверки.Ключ.ИдентификаторСессии); + Запись.ИдентификаторЗапроса = Новый УникальныйИдентификатор(РезультатПроверки.Ключ.ИдентификаторЗапроса); + + КодМаркировки = ЗапросКМ.КонтрольнаяМарка; + + Запись.ГодМесяц = ГодМесяц; + Запись.Результат = ?(РезультатПроверки.Результат = Неопределено, Ложь, РезультатПроверки.Результат); + Запись.КодМаркировки = КодМаркировки; + Запись.ФлагиПроверкиОИСМ = РезультатПроверки.ФлагиПроверкиОИСМ; + Запись.ПокупкаПодтверждена = ?(РезультатПроверки.ПокупкаПодтверждена = Неопределено, Ложь, РезультатПроверки.ПокупкаПодтверждена); + + Результат = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(КодМаркировки, Истина); + Если Результат.Разобран Тогда + Запись.КодМаркировкиПредставление = Результат.ПредставлениеШтрихкода; + Запись.Штрихкод = Результат.GTIN; + Если Результат.ЕстьКриптоХвост Тогда + Запись.КодМаркировки = Результат.ШтрихкодBase64БезКриптоХвоста; + Запись.КодМаркировкиПредставление = Результат.ПредставлениеШтрихкодаБезКриптоХвоста; + КонецЕсли; + Иначе + КодМаркировкиСимволы = ОбщегоНазначенияБПОКлиентСервер.Base64ВШтрихкод(КодМаркировки); + КодМаркировкиСимволы = СтрЗаменить(КодМаркировкиСимволы, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), ""); + Запись.КодМаркировкиПредставление = КодМаркировкиСимволы; + Запись.Штрихкод = Результат.GTIN; + КонецЕсли; + + ЛокальныйОтветXML = РезультатПроверки.ЛокальныйОтветXML; + Если ЗначениеЗаполнено(ЛокальныйОтветXML) Тогда + Запись.РезультатПроверкиКМНаККТ = Новый ХранилищеЗначения(ЛокальныйОтветXML); + КонецЕсли; + УдаленныйОтветXML = РезультатПроверки.УдаленныйОтветXML; + Если ЗначениеЗаполнено(РезультатПроверки.УдаленныйОтветXML) Тогда + Запись.РезультатПроверкиКМНаСервере = Новый ХранилищеЗначения(УдаленныйОтветXML); + КонецЕсли; + Запись.Дата = ДатаЗаписи; + Запись.Наименование = ЗапросКМ.Наименование; + + Если ЗапросКМ.ЗапросРазрешенияПродажиКМ Тогда + + // ответ с разрешительной площадки + Запись.АдресСервераЗапросаРазрешения = ЗапросКМ.АдресСервераЗапросаРазрешения; + + ТекстЗапросаРазрешения = ЗапросКМ.ТекстЗапросаРазрешения; + Если Результат.ЕстьКриптоХвост Тогда + КодМаркировкиВЛоге = ОбщегоНазначенияБПОКлиентСервер.Base64ВШтрихкод(КодМаркировки); + Если Не ПустаяСтрока(КодМаркировкиВЛоге) Тогда + КодМаркировкиВЛоге = СтрЗаменить(КодМаркировкиВЛоге, + ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), + ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1()); + КодМаркировкиДляЗамены = Результат.ШтрихкодБезКриптоХвоста; + КодМаркировкиДляЗамены = СтрЗаменить(КодМаркировкиДляЗамены, + ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), + ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1()); + ТекстЗапросаРазрешения = СтрЗаменить(ТекстЗапросаРазрешения, + КодМаркировкиВЛоге, + КодМаркировкиДляЗамены); + КонецЕсли; + КонецЕсли; + Запись.ТекстЗапросаРазрешения = Новый ХранилищеЗначения(ТекстЗапросаРазрешения); + + РезультатЗапросаРазрешения = ЗапросКМ.РезультатЗапросаРазрешения; + Если Результат.ЕстьКриптоХвост Тогда + КодМаркировкиВЛоге = ОбщегоНазначенияБПОКлиентСервер.Base64ВШтрихкод(КодМаркировки); + Если Не ПустаяСтрока(КодМаркировкиВЛоге) Тогда + КодМаркировкиВЛоге = СтрЗаменить(КодМаркировкиВЛоге, + ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), + ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1()); + КодМаркировкиДляЗамены = Результат.ШтрихкодБезКриптоХвоста; + КодМаркировкиДляЗамены = СтрЗаменить(КодМаркировкиДляЗамены, + ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), + ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1()); + РезультатЗапросаРазрешения = СтрЗаменить( + РезультатЗапросаРазрешения, + КодМаркировкиВЛоге, + КодМаркировкиДляЗамены); + КонецЕсли; + КонецЕсли; + Запись.РезультатЗапросаРазрешения = Новый ХранилищеЗначения(РезультатЗапросаРазрешения); + Запись.ПродажаРазрешена = ЗапросКМ.ПродажаРазрешена; + Запись.ПричинаЗапрета = ЗапросКМ.ПричинаЗапрета; + Запись.ДополнительныеСведения = Новый ХранилищеЗначения(ЗапросКМ.ДополнительныеСведения); + + Если ИнформацияПоРазрешительномуЗапросуПолученаРанее(ЗапросКМ) Тогда + Данные = ДанныеПолученныеРанее.Получить(ЗапросКМ.ИдентификаторЗапросаРазрешения); + Если ЗначениеЗаполнено(Данные) Тогда + ЗаполнитьЗначенияСвойств(Запись, Данные); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ЗапросКМ.КодОтветаРазрешения) Или ЗначениеЗаполнено(ЗапросКМ.ИдентификаторЗапросаРазрешения) Тогда + Если ЗначениеЗаполнено(ЗапросКМ.КодОтветаРазрешения) Тогда + Запись.КодОтветаРазрешения = ЗапросКМ.КодОтветаРазрешения; + КонецЕсли; + Запись.ИдентификаторЗапросаРазрешения = ЗапросКМ.ИдентификаторЗапросаРазрешения; + + Если ТипЗнч(ЗапросКМ.ВремяЗапросаРазрешения) = Тип("Строка") Тогда + Если СтрНайти(ЗапросКМ.ВремяЗапросаРазрешения, ".") > 0 Тогда + Запись.ВремяЗапросаРазрешения = Дата(ЗапросКМ.ВремяЗапросаРазрешения); + Иначе + Запись.ВремяЗапросаРазрешения = ОбщегоНазначенияБПОКлиентСервер.TimestampВДату(ЗапросКМ.ВремяЗапросаРазрешения); + КонецЕсли; + Иначе + Запись.ВремяЗапросаРазрешения = ЗапросКМ.ВремяЗапросаРазрешения; + КонецЕсли; + + Иначе + Запись.КодОтветаРазрешения = НСтр("ru = 'Таймаут'"); + Запись.ВремяЗапросаРазрешения = УниверсальноеВремя(ТекущаяДатаСеанса()); + КонецЕсли; + + + КонецЕсли; + + Если ЗапросКМ.Свойство("ПараметрыXML") Тогда + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON, ЗапросКМ.ПараметрыXML, ,"ЗаписатьРезультатыПроверкиКодаМаркировкиВРегистр_ПреобразованиеВJSON", РегистрыСведений.ОперацииПроверкиКМ); + ТекстJSON = ЗаписьJSON.Закрыть(); + Запись.ЗапросКодаМаркировки = Новый ХранилищеЗначения(ТекстJSON); + КонецЕсли; + + КонецЦикла; + + Если НаборЗаписей.Количество()>0 Тогда + НаборЗаписей.Записать(Ложь); + КонецЕсли; + +КонецПроцедуры + +// Привязывает идентификатор фискальной операции к указанной сессии проверки кода маркировки +// +// Параметры: +// ИдентификаторСессии - Строка - идентификатор сессии проверки кода маркировки +// ИдентификаторФискальнойОперации - Строка - идентификатор фискальной записи +Процедура ОбновитьИдентификаторФискальнойОперацииРезультатаПроверкиКодаМаркировки(ИдентификаторСессии, ИдентификаторФискальнойОперации) Экспорт + + Если Не ЗначениеЗаполнено(ИдентификаторСессии) Тогда + Возврат; + КонецЕсли; + Если Не ЗначениеЗаполнено(ИдентификаторФискальнойОперации) Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос(); + Запрос.Текст = + "ВЫБРАТЬ + | ОперацииПроверкиКМ.КодМаркировки КАК КодМаркировки + |ПОМЕСТИТЬ КодыМаркировкиСессии + |ИЗ + | РегистрСведений.ОперацииПроверкиКМ КАК ОперацииПроверкиКМ + |ГДЕ + | ОперацииПроверкиКМ.ИдентификаторСессии = &ИдентификаторСессии + | И НАЧАЛОПЕРИОДА(ОперацииПроверкиКМ.Дата, ДЕНЬ) = &Дата + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ОперацииПроверкиКМ.ИдентификаторСессии КАК ИдентификаторСессии, + | ОперацииПроверкиКМ.ИдентификаторЗапроса КАК ИдентификаторЗапроса, + | ОперацииПроверкиКМ.ИдентификаторФискальнойОперации КАК ИдентификаторФискальнойОперации, + | ОперацииПроверкиКМ.ГодМесяц КАК ГодМесяц, + | ОперацииПроверкиКМ.КодМаркировки КАК КодМаркировки + |ИЗ + | РегистрСведений.ОперацииПроверкиКМ КАК ОперацииПроверкиКМ + |ГДЕ + | ОперацииПроверкиКМ.ИдентификаторФискальнойОперации = """" + | И НАЧАЛОПЕРИОДА(ОперацииПроверкиКМ.Дата, ДЕНЬ) = &Дата + | И ОперацииПроверкиКМ.КодМаркировки В + | (ВЫБРАТЬ + | КодыМаркировкиСессии.КодМаркировки + | ИЗ + | КодыМаркировкиСессии)"; + + Запрос.УстановитьПараметр("Дата", НачалоДня(ОбщегоНазначенияБПО.ДатаСеанса())); + Запрос.УстановитьПараметр("ИдентификаторСессии", Новый УникальныйИдентификатор(ИдентификаторСессии)); + + РезультатЗапроса = Запрос.Выполнить(); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОперацииПроверкиКМ"); + ЭлементБлокировки.ИсточникДанных = РезультатЗапроса; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("КодМаркировки", "КодМаркировки"); + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("ИдентификаторСессии", "ИдентификаторСессии"); + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("ИдентификаторЗапроса", "ИдентификаторЗапроса"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + + Запись = РегистрыСведений.ОперацииПроверкиКМ.СоздатьМенеджерЗаписи(); + Запись.ИдентификаторСессии = Выборка.ИдентификаторСессии; + Запись.ИдентификаторЗапроса = Выборка.ИдентификаторЗапроса; + Запись.ИдентификаторФискальнойОперации = Выборка.ИдентификаторФискальнойОперации; + Запись.ГодМесяц = Выборка.ГодМесяц; + Запись.КодМаркировки = Выборка.КодМаркировки; + Запись.Прочитать(); + Запись.ИдентификаторФискальнойОперации = ИдентификаторФискальнойОперации; + Запись.Записать(Истина); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ТекстСообщения = СтрШаблон( + НСтр("ru = 'Ошибка записи в журнал логирования операций проверки кода маркировки: %1'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()), + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Операции проверки кода маркировки.'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()), + ТекстСообщения); + КонецПопытки; + + + +КонецПроцедуры + +Функция ЗаписатьРезультатыПроверкиКодаМаркировкиВРегистр_ПреобразованиеВJSON(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт + + Возврат Строка(Значение); + +КонецФункции + +// Параметры записи результата проверки ЕГАИС. +// +// Возвращаемое значение: +// Структура : +// * ИдентификаторФискальнойОперации - Строка +// * Выполнено - Булево - +// * ШтрихкодыПродукции - Соответствие из КлючИЗначение: +// ** Ключ - Строка - ШтрихКодBase64 +// ** Значение - Структура: +// *** Наименование - Строка - +// * ИдентификаторЗапроса - Строка - +// * ВходящееСообщение - ОпределяемыйТип.СообщениеЕГАИСвБПО +// * ИсходящееСообщение - ОпределяемыйТип.СообщениеЕГАИСвБПО +// * СообщениеПередано - Булево - +// * ТекстОшибки - Строка - +// * ПодписьЧека - Строка - +// +Функция ПараметрыЗаписиРезультатаПроверкиЕГАИС() Экспорт + + Результат = Новый Структура; + Результат.Вставить("ИдентификаторФискальнойОперации"); + Результат.Вставить("Выполнено", Ложь); + Результат.Вставить("ШтрихкодыПродукции", Новый Соответствие); + Результат.Вставить("ИдентификаторЗапроса", ""); + Результат.Вставить("ВходящееСообщение"); + Результат.Вставить("ИсходящееСообщение"); + Результат.Вставить("СообщениеПередано", Ложь); + Результат.Вставить("ТекстОшибки", ""); + Результат.Вставить("ПодписьЧека", ""); + Возврат Результат; + +КонецФункции + +// Добавить результаты отправки ЕГАИС. +// +// Параметры: +// ПараметрыЗаписи - см. ПараметрыЗаписиРезультатаПроверкиЕГАИС +Процедура ДобавитьРезультатыОтправкиЕГАИС(ПараметрыЗаписи) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ХранитьУспешныеОперации = МенеджерОборудованияМаркировка.ХранитьУспешныеОперацииРазрешения(); + Если ПараметрыЗаписи.Выполнено И Не ХранитьУспешныеОперации Тогда + Возврат; + КонецЕсли; + + НаборЗаписей = СоздатьНаборЗаписей(); + ДатаЗаписи = ОбщегоНазначенияБПО.ДатаСеанса(); + ГодМесяц = Год(ДатаЗаписи)*100+Месяц(ДатаЗаписи); + ИдентификаторСессии = Новый УникальныйИдентификатор(); + Для Каждого ШтрихкодыПродукции Из ПараметрыЗаписи.ШтрихкодыПродукции Цикл + + КодМаркировкиBase64 = ШтрихкодыПродукции.Ключ; + РазобранныйШтрхкод = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(КодМаркировкиBase64, Истина); + + ЭтоПродукцияЕГАИС = РазобранныйШтрхкод.ТипИдентификатораТовара = Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС2 + Или РазобранныйШтрхкод.ТипИдентификатораТовара = Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС3; + + Если Не ЭтоПродукцияЕГАИС Тогда + Продолжить; + КонецЕсли; + + Запись = НаборЗаписей.Добавить(); + Запись.ИдентификаторСессии = ИдентификаторСессии; + Запись.ИдентификаторЗапроса = Новый УникальныйИдентификатор(); + Запись.ИдентификаторФискальнойОперации = ПараметрыЗаписи.ИдентификаторФискальнойОперации; + + Запись.ГодМесяц = ГодМесяц; + Запись.Результат = ПараметрыЗаписи.Выполнено; + Запись.КодМаркировки = КодМаркировкиBase64; + Запись.ПодписьЧекаЕГАИС = ПараметрыЗаписи.ПодписьЧека; + Запись.ИдентификаторЗапросаЕГАИС = ПараметрыЗаписи.ИдентификаторЗапроса; + Запись.ВходящееСообщениеЕГАИС = ПараметрыЗаписи.ВходящееСообщение; + Запись.ИсходящееСообщениеЕГАИС = ПараметрыЗаписи.ИсходящееСообщение; + Запись.СообщениеПереданоЕГАИС = ПараметрыЗаписи.СообщениеПередано; + Запись.ТекстОшибкиЕГАИС = ПараметрыЗаписи.ТекстОшибки; + Запись.ПокупкаПодтверждена = Истина; + + КодМаркировки = ОбщегоНазначенияБПОКлиентСервер.Base64ВШтрихкод(КодМаркировкиBase64); + КодМаркировки = ОбработкаСтрокиXML.УдалитьНедопустимыеСимволыXML(КодМаркировки); + Штрихкод = Лев(КодМаркировки, 14); + Запись.КодМаркировкиПредставление = КодМаркировки; + Запись.Штрихкод = Штрихкод; + + Запись.Дата = ДатаЗаписи; + Запись.Наименование = ШтрихкодыПродукции.Значение.Наименование; + + КонецЦикла; + + Если НаборЗаписей.Количество()>0 Тогда + НаборЗаписей.Записать(Ложь); + КонецЕсли; +КонецПроцедуры + + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПоложительныйОтветРазрешительногоРежима(КодОтвета) + + Если СокрЛП(КодОтвета) = "200" Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ПоложительныйОтветУведомительногоРежима(ФлагиПроверки) + + Если Прав(ФлагиПроверки, 4) = "1111" Тогда + Возврат Истина; + КонецЕсли; + Возврат Ложь; +КонецФункции + +Функция СохранятьРезультатПроверки(ХранитьУспешныеОперации, РезультатПроверки) + + Если ХранитьУспешныеОперации Тогда + Возврат Истина; + КонецЕсли; + + Если Не РезультатПроверки.Результат Тогда + Возврат Истина; + КонецЕсли; + + ЗапросКМ = РезультатПроверки.ЗапросКМ; + + Если ЗапросКМ.Свойство("ПараметрыXML") Тогда + ОтсутствуетЗапросКККТ = ПустаяСтрока(ЗапросКМ.ПараметрыXML); + Иначе + ОтсутствуетЗапросКККТ = Истина; + КонецЕсли; + + Если ОтсутствуетЗапросКККТ Тогда + ПоложительнаяПроверкаУведомительныйРежим = Истина; + Иначе + ПоложительнаяПроверкаУведомительныйРежим = ПоложительныйОтветУведомительногоРежима(РезультатПроверки.ФлагиПроверкиОИСМ); + КонецЕсли; + + Если ЗапросКМ.ЗапросРазрешенияПродажиКМ Тогда + ПоложительнаяПроверкаРазрешительныйРежим = ПоложительныйОтветРазрешительногоРежима(ЗапросКМ.КодОтветаРазрешения); + Иначе + ПоложительнаяПроверкаРазрешительныйРежим = Истина; + КонецЕсли; + + Если ЗапросКМ.ОжидатьПолучениеОтветаОИСМ Тогда + Возврат Не ПоложительнаяПроверкаРазрешительныйРежим Или Не ПоложительнаяПроверкаУведомительныйРежим; + Иначе + Возврат Не ПоложительнаяПроверкаРазрешительныйРежим; + КонецЕсли; + + Возврат Ложь; + + +КонецФункции + +Функция ИнформацияПоРазрешительномуЗапросуПолученаРанее(ЗапросКМ) + + Если ЗначениеЗаполнено(ЗапросКМ.ИдентификаторЗапросаРазрешения) + И ЗначениеЗаполнено(ЗапросКМ.ВремяЗапросаРазрешения) + И ПустаяСтрока(ЗапросКМ.АдресСервераЗапросаРазрешения) + И ПустаяСтрока(ЗапросКМ.ТекстЗапросаРазрешения) + И ПустаяСтрока(ЗапросКМ.РезультатЗапросаРазрешения) Тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; +КонецФункции + +Процедура ПолучитьИнформациюПоРазрешительномуЗапросуПолученнуюРанее(ДанныеПолученныеРанее) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | МАКСИМУМ(ОперацииПроверкиКМ.Дата) КАК Дата, + | ОперацииПроверкиКМ.ИдентификаторЗапросаРазрешения КАК ИдентификаторЗапросаРазрешения + |ПОМЕСТИТЬ ДатыЗапросовРазрешений + |ИЗ + | РегистрСведений.ОперацииПроверкиКМ КАК ОперацииПроверкиКМ + |ГДЕ + | ОперацииПроверкиКМ.ИдентификаторЗапросаРазрешения В(&ИдентификаторыЗапросаРазрешения) + | + |СГРУППИРОВАТЬ ПО + | ОперацииПроверкиКМ.ИдентификаторЗапросаРазрешения + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ОперацииПроверкиКМ.ИдентификаторЗапросаРазрешения КАК ИдентификаторЗапросаРазрешения, + | ОперацииПроверкиКМ.АдресСервераЗапросаРазрешения КАК АдресСервераЗапросаРазрешения, + | ОперацииПроверкиКМ.РезультатЗапросаРазрешения КАК РезультатЗапросаРазрешения, + | ОперацииПроверкиКМ.ТекстЗапросаРазрешения КАК ТекстЗапросаРазрешения, + | ОперацииПроверкиКМ.КодОтветаРазрешения КАК КодОтветаРазрешения + |ИЗ + | РегистрСведений.ОперацииПроверкиКМ КАК ОперацииПроверкиКМ + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатыЗапросовРазрешений КАК ДатыЗапросовРазрешений + | ПО (ДатыЗапросовРазрешений.ИдентификаторЗапросаРазрешения = ОперацииПроверкиКМ.ИдентификаторЗапросаРазрешения) + | И (ДатыЗапросовРазрешений.Дата = ОперацииПроверкиКМ.Дата)"; + + ИдентификаторыЗапросаРазрешения = Новый Массив(); + Для Каждого КлючЗначение Из ДанныеПолученныеРанее Цикл + ИдентификаторыЗапросаРазрешения.Добавить(КлючЗначение.Ключ); + КонецЦикла; + Запрос.УстановитьПараметр("ИдентификаторыЗапросаРазрешения", ИдентификаторыЗапросаРазрешения); + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + Данные = ДанныеПолученныеРанее.Получить(Выборка.ИдентификаторЗапросаРазрешения); + Данные.АдресСервераЗапросаРазрешения = Выборка.АдресСервераЗапросаРазрешения; + Данные.ТекстЗапросаРазрешения = Новый ХранилищеЗначения(Выборка.ТекстЗапросаРазрешения.Получить()); + Данные.РезультатЗапросаРазрешения = Новый ХранилищеЗначения(Выборка.РезультатЗапросаРазрешения.Получить()); + Данные.КодОтветаРазрешения = Выборка.КодОтветаРазрешения; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + + +#КонецЕсли \ No newline at end of file diff --git a/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаЗаписи.xml b/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаЗаписи.xml new file mode 100644 index 0000000..7c3e688 --- /dev/null +++ b/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаЗаписи.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаЗаписи + + + ru + Форма записи + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаЗаписи/Ext/Form.xml b/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаЗаписи/Ext/Form.xml new file mode 100644 index 0000000..9f7e8ce --- /dev/null +++ b/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаЗаписи/Ext/Form.xml @@ -0,0 +1,837 @@ + +
+ LockOwner + Vertical + false + + ChangeHistory + Copy + Delete + Write + WriteAndClose + + + false + + + + + + + ПриОткрытии + ПриСозданииНаСервере + + + + ДокументОснование + true + + + + + ФискальнаяОперацияПредставление + true + + + + ФискальнаяОперацияПредставлениеНажатие + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа страницы</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основное</v8:content> + </v8:item> + + Vertical + false + + + + HorizontalIfPossible + None + false + + + + Запись.Дата + + + + + style:SpecialTextColor + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Зафиксирован отказ от покупки</v8:content> + </v8:item> + + + + + + + + ТипКода + + + + + Запись.КодМаркировкиПредставление + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код маркировки</v8:content> + </v8:item> + + 35 + + + + + Штрихкод + + + + + Запись.Наименование + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уведомительный режим</v8:content> + </v8:item> + + Vertical + Usual + WeakSeparation + + + + РезультатПроверки + + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Разрешительный режим</v8:content> + </v8:item> + + Vertical + Usual + WeakSeparation + + + + РезультатПроверкиРР + + + + + Запись.ПричинаЗапрета + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЕГАИС</v8:content> + </v8:item> + + + + ru + Группа ЕГАИС + + + HorizontalIfPossible + Usual + WeakSeparation + + + + РезультатПроверкиЕГАИС + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уведомительный режим</v8:content> + </v8:item> + + Vertical + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запрос</v8:content> + </v8:item> + + HorizontalIfPossible + Collapsible + Button + WeakSeparation + + + + ЗапросКМ + true + None + false + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ККТ</v8:content> + </v8:item> + + Vertical + Collapsible + Button + WeakSeparation + + + + РезультатПроверкиНаККТ + true + None + false + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Удаленная проверка</v8:content> + </v8:item> + + Vertical + Collapsible + Button + WeakSeparation + + + + РезультатПроверкиНаСервере + true + None + false + 3 + true + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Разрешительный режим</v8:content> + </v8:item> + + Vertical + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запрос разрешения</v8:content> + </v8:item> + + Vertical + Collapsible + Button + WeakSeparation + + + + Запись.АдресСервераЗапросаРазрешения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Адрес сервера</v8:content> + </v8:item> + + + + + + ТекстЗапросаРазрешения + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текст запроса</v8:content> + </v8:item> + + false + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ответ разрешения</v8:content> + </v8:item> + + Vertical + Collapsible + Button + WeakSeparation + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа код ответа</v8:content> + </v8:item> + + HorizontalIfPossible + None + false + + + + Запись.КодОтветаРазрешения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код ответа</v8:content> + </v8:item> + + + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Разрешение</v8:content> + </v8:item> + + Vertical + WeakSeparation + false + + + + Запись.ВремяЗапросаРазрешения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Время запроса (UTC)</v8:content> + </v8:item> + + + + + + Запись.ИдентификаторЗапросаРазрешения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор запроса</v8:content> + </v8:item> + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа2</v8:content> + </v8:item> + + HorizontalIfPossible + None + false + + + + РезультатЗапросаРазрешения + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текст ответа</v8:content> + </v8:item> + + false + 5 + true + + + + + + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЕГАИС</v8:content> + </v8:item> + + Vertical + false + + + + Запись.СообщениеПереданоЕГАИС + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сообщение передано</v8:content> + </v8:item> + + + + + + Запись.ИдентификаторЗапросаЕГАИС + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор сообщения</v8:content> + </v8:item> + + + + + + Запись.ПодписьЧекаЕГАИС + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Подпись</v8:content> + </v8:item> + + + + + + ТекстВходящегоСообщенияЕГАИС + true + false + true + true + + + + + ТекстИсходящегоСообщенияЕГАИС + true + false + true + true + + + + + Запись.ТекстОшибкиЕГАИС + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текст ошибки</v8:content> + </v8:item> + + false + true + true + + + + + + + + + + + + cfg:InformationRegisterRecordManager.ОперацииПроверкиКМ + + true + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текст запроса проверки КМ</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат проверки на сервере</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Штрихкод</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номенклатура</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип кода</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код маркировки представление</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат проверки</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат проверки описание</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат проверки на ККТ</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запрос КМ</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Документ основание</v8:content> + </v8:item> + + + cfg:DefinedType.ОснованиеФискальнойОперацииБПО + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Фискальная операция</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Фискальная операция</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат запроса разрешения</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текст запроса разрешения</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат проверки</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текст исходящего сообщения</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текст входящего сообщения</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат проверки</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сообщение в тех. поддержку</v8:content> + </v8:item> + + + + ru + Сообщение в тех поддержку + + + СообщениеВТехПоддержку + + +
\ No newline at end of file diff --git a/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаЗаписи/Ext/Form/Module.bsl b/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаЗаписи/Ext/Form/Module.bsl new file mode 100644 index 0000000..6f23cdc --- /dev/null +++ b/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаЗаписи/Ext/Form/Module.bsl @@ -0,0 +1,369 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТаблицаПроверкиСведенийОТовареПФ = МенеджерОборудованияМаркировка.ТаблицаПроверкиСведенийОТовареПФ(); + ТаблицаПроверкиСведенийОТоваре = МенеджерОборудованияМаркировка.ТаблицаПроверкиСведенийОТоваре(); + МассивШтрихкодов = Новый Массив(); + Если Не ПустаяСтрока(Запись.ФлагиПроверкиОИСМ) Тогда + РезультатПроверки = ТаблицаПроверкиСведенийОТовареПФ[Запись.ФлагиПроверкиОИСМ]; + Элементы.РезультатПроверкиОписание.Заголовок = ТаблицаПроверкиСведенийОТоваре[Запись.ФлагиПроверкиОИСМ]; + Иначе + Элементы.РезультатПроверки.Видимость = Ложь; + Элементы.РезультатПроверкиОписание.Видимость = Ложь; + КонецЕсли; + + Результат = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Запись.КодМаркировки, Истина); + Если Результат.Разобран Тогда + ТипКода = Результат.ТипИдентификатораТовара; + КодМаркировкиПредставление = Результат.ПредставлениеШтрихкода; + Штрихкод = Результат.GTIN; + Иначе + ТипКода = Результат.ТипИдентификатораТовара; + КодМаркировкиПредставление = Запись.КодМаркировки; + Штрихкод = Запись.КодМаркировки; + КонецЕсли; + + МассивШтрихкодов.Добавить(Штрихкод); + + Элементы.РезультатПодтверждениеПокупки.Видимость = Не Запись.ПокупкаПодтверждена; + + УстановитьДанныеИзХранилищаЗначений(); + + Элементы.ФормаСообщениеВТехПоддержку.Видимость = ОбщегоНазначенияБПО.ИспользуетсяСообщенияВСлужбуТехническойПоддержки() + И ОбщегоНазначенияБПОСлужебныйВызовСервера.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); + + Элементы.КодОтветаПредставление.Заголовок = КодОтветаГИСМТПредставление(Запись.КодОтветаРазрешения); + + РезультатПроверкиРР = РезультатПроверкиРазрешительногоРежима(Запись.КодОтветаРазрешения, Запись.ПродажаРазрешена); + РезультатПроверкиЕГАИС = РезультатПроверкиЕГАИС(Запись.Результат, Запись.СообщениеПереданоЕГАИС); + + Если КодОтветаАварийнаяСитуация(Запись.КодОтветаРазрешения) Тогда + Элементы.ГруппаЗапросРазрешения.Видимость = Ложь; + Элементы.ГруппаИдентификатор.Видимость = Ложь; + Элементы.ГруппаРезультатЗапросаРазрешения.Видимость = Ложь; + Элементы.ДекорацияИнформация.Видимость = Истина; + Элементы.ДекорацияИнформация.Заголовок = НСтр("ru = 'Продажа разрешена в рамках аварийного режима.'"); + Иначе + Элементы.ГруппаЗапросРазрешения.Видимость = Истина; + Элементы.ГруппаИдентификатор.Видимость = Истина; + Элементы.ГруппаРезультатЗапросаРазрешения.Видимость = Истина; + Элементы.ДекорацияИнформация.Видимость = Ложь; + КонецЕсли; + + Если Запись.ПродажаРазрешена Или ПустаяСтрока(Запись.ПричинаЗапрета) Тогда + Элементы.ПричинаЗапрета.Видимость = Ложь; + КонецЕсли; + + УстановитьВидимостьСтраницИГрупп(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяСообщенияВСлужбуТехническойПоддержки() Тогда + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиБПОКлиент"); + Элементы.ФормаСообщениеВТехПоддержку.Видимость + = МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ОтправлятьСообщенияВТехПоддержку(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура СообщениеВТехПоддержку(Команда) + + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиБПОКлиент"); + ПараметрыСообщения = МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ПараметрыОтправкиСообщенияОбОшибке(); + ПараметрыСообщения.ДополнительныеДанные = СведенияДляТехподдержки(); + + + ПараметрыСообщения.ТекстОшибки = НСтр("ru = 'Информация о проверке контрольной марки для тех.поддержки'"); + ОписаниеОповещения = Новый ОписаниеОповещения("СообщениеВТехническуюПоддержкуЗавершение", ЭтотОбъект); + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.НачатьОтправкуСообщенияОбОшибке(ОписаниеОповещения, ПараметрыСообщения); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция СведенияДляТехподдержки() + + УстановитьПривилегированныйРежим(Истина); + + Результат = Новый Структура(); + Для каждого Измерение Из Метаданные.РегистрыСведений.ОперацииПроверкиКМ.Измерения Цикл + Значение = Запись[Измерение.Имя]; + Результат.Вставить(Измерение.Имя, Значение); + КонецЦикла; + Для каждого Ресурс Из Метаданные.РегистрыСведений.ОперацииПроверкиКМ.Ресурсы Цикл + Если Ресурс.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда + Продолжить; + КонецЕсли; + Значение = Запись[Ресурс.Имя]; + Результат.Вставить(Ресурс.Имя, Значение); + КонецЦикла; + Для каждого Реквизит Из Метаданные.РегистрыСведений.ОперацииПроверкиКМ.Реквизиты Цикл + Если Реквизит.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда + Продолжить; + КонецЕсли; + Значение = Запись[Реквизит.Имя]; + Результат.Вставить(Измерение.Имя, Значение); + КонецЦикла; + Результат.Вставить("ЗапросКодаМаркировки", ЗапросКМ); + Результат.Вставить("РезультатПроверкиКМНаККТ", РезультатПроверкиНаККТ); + Результат.Вставить("РезультатПроверкиКМНаСервере", РезультатПроверкиНаСервере); + Результат.Вставить("РезультатЗапросаРазрешения", РезультатЗапросаРазрешения); + Результат.Вставить("ВходящееСообщениеЕГАИС", ТекстВходящегоСообщенияЕГАИС); + Результат.Вставить("ИсходящееСообщениеЕГАИС", ТекстИсходящегоСообщенияЕГАИС); + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура УстановитьДанныеИзХранилищаЗначений() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОперацииПроверкиКМ.ЗапросКодаМаркировки КАК ЗапросКодаМаркировки, + | ОперацииПроверкиКМ.РезультатПроверкиКМНаККТ КАК РезультатПроверкиКМНаККТ, + | ОперацииПроверкиКМ.РезультатПроверкиКМНаСервере КАК РезультатПроверкиКМНаСервере, + | ФискальныеОперации.ДокументОснование КАК ДокументОснование, + | ФискальныеОперации.Дата КАК Дата, + | ФискальныеОперации.НомерЧекаККМ КАК НомерЧекаККМ, + | ОперацииПроверкиКМ.РезультатЗапросаРазрешения КАК РезультатЗапросаРазрешения, + | ОперацииПроверкиКМ.ТекстЗапросаРазрешения КАК ТекстЗапросаРазрешения, + | ОперацииПроверкиКМ.ВходящееСообщениеЕГАИС КАК ВходящееСообщениеЕГАИС, + | ОперацииПроверкиКМ.ИсходящееСообщениеЕГАИС КАК ИсходящееСообщениеЕГАИС, + | ОперацииПроверкиКМ.ДополнительныеСведения + |ИЗ + | РегистрСведений.ОперацииПроверкиКМ КАК ОперацииПроверкиКМ + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФискальныеОперации КАК ФискальныеОперации + | ПО ОперацииПроверкиКМ.ИдентификаторФискальнойОперации = ФискальныеОперации.ИдентификаторЗаписи + |ГДЕ + | ОперацииПроверкиКМ.ИдентификаторСессии = &ИдентификаторСессии + | И ОперацииПроверкиКМ.ИдентификаторЗапроса = &ИдентификаторЗапроса"; + + Запрос.УстановитьПараметр("ИдентификаторЗапроса", Запись.ИдентификаторЗапроса); + Запрос.УстановитьПараметр("ИдентификаторСессии", Запись.ИдентификаторСессии); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат; + КонецЕсли; + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + ЗапросКМ = Выборка.ЗапросКодаМаркировки.Получить(); + РезультатПроверкиНаККТ = Выборка.РезультатПроверкиКМНаККТ.Получить(); + РезультатПроверкиНаСервере = Выборка.РезультатПроверкиКМНаСервере.Получить(); + РезультатЗапросаРазрешения = Выборка.РезультатЗапросаРазрешения.Получить(); + ТекстЗапросаРазрешения = Выборка.ТекстЗапросаРазрешения.Получить(); + + ДополнительныеСведения = Выборка.ДополнительныеСведения.Получить(); + ВывестиДополнительныеСведения(ДополнительныеСведения); + + ДокументОснование = Выборка.ДокументОснование; + Если Не ЗначениеЗаполнено(ДокументОснование) Тогда + Элементы.ДокументОснование.Видимость = Ложь; + КонецЕсли; + ФискальнаяОперация = Запись.ИдентификаторФискальнойОперации; + Если ЗначениеЗаполнено(Выборка.Дата) Тогда + ФискальнаяОперацияПредставление = + СтрШаблон(НСтр("ru = '%1 от %2'"), Выборка.НомерЧекаККМ, Формат(Выборка.Дата, НСтр("ru = 'ДЛФ=DT'"))); + Иначе + Элементы.ФискальнаяОперацияПредставление.Видимость = Ложь; + КонецЕсли; + + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайлами = ОбщегоНазначенияБПО.ОбщийМодуль("РаботаСФайлами"); + Если ЗначениеЗаполнено(Выборка.ВходящееСообщениеЕГАИС) Тогда + ВходящееСообщениеЕГАИС = МодульРаботаСФайлами.ДанныеФайла(Выборка.ВходящееСообщениеЕГАИС); + ВходящиеДвоичныеДанные = ПолучитьИзВременногоХранилища(ВходящееСообщениеЕГАИС.СсылкаНаДвоичныеДанныеФайла); + ТекстВходящегоСообщенияЕГАИС = ПолучитьСтрокуИзДвоичныхДанных(ВходящиеДвоичныеДанные); + КонецЕсли; + + Если ЗначениеЗаполнено(Выборка.ИсходящееСообщениеЕГАИС) Тогда + ИсходящееСообщениеЕГАИС = МодульРаботаСФайлами.ДанныеФайла(Выборка.ИсходящееСообщениеЕГАИС); + ИсходящиеДвоичныеДанные = ПолучитьИзВременногоХранилища(ИсходящееСообщениеЕГАИС.СсылкаНаДвоичныеДанныеФайла); + ТекстИсходящегоСообщенияЕГАИС = ПолучитьСтрокуИзДвоичныхДанных(ИсходящиеДвоичныеДанные); + КонецЕсли; + КонецЕсли; + + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция КлючФискальнойОперации(ИдентификаторЗаписи) + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | ФискальныеОперации.ДокументОснование КАК ДокументОснование + |ИЗ + | РегистрСведений.ФискальныеОперации КАК ФискальныеОперации + |ГДЕ + | ФискальныеОперации.ИдентификаторЗаписи = &ИдентификаторЗаписи"; + + Запрос.УстановитьПараметр("ИдентификаторЗаписи", ИдентификаторЗаписи); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат Неопределено; + КонецЕсли; + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + Ключ = Новый Структура(); + Ключ.Вставить("ДокументОснование", Выборка.ДокументОснование); + Ключ.Вставить("ИдентификаторЗаписи", ИдентификаторЗаписи); + Возврат РегистрыСведений.ФискальныеОперации.СоздатьКлючЗаписи(Ключ); + +КонецФункции + +&НаКлиенте +Процедура ФискальнаяОперацияПредставлениеНажатие(Элемент, СтандартнаяОбработка) + Ключ = КлючФискальнойОперации(Запись.ИдентификаторФискальнойОперации); + СтандартнаяОбработка = Ложь; + Если ЗначениеЗаполнено(Ключ) Тогда + ОткрытьФорму("РегистрСведений.ФискальныеОперации.ФормаЗаписи", Новый Структура("Ключ", Ключ)); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СообщениеВТехническуюПоддержкуЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Не ПустаяСтрока(Результат.КодОшибки) Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(Результат.СообщениеОбОшибке); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция КодОтветаГИСМТПредставление(КодОтвета) + + ТаблицаРезультатов = Новый Соответствие(); + ТаблицаРезультатов.Вставить(Неопределено, ""); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("", ""); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить(НСтр("ru = 'Таймаут'"), НСтр("ru = 'Вышло время ожидания запроса на сервере Честного знака'")); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("200", НСтр("ru = 'Успешно'")); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("401", НСтр("ru = 'Ошибка авторизации'")); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("203", НСтр("ru = 'Аварийная ситуация'")); //@NON-NLS-1 @NON-NLS-2 + ТаблицаРезультатов.Вставить("429", НСтр("ru = 'Не доступна'")); //@NON-NLS-1 @NON-NLS-2 + КодОтветаПредставление = ТаблицаРезультатов[КодОтвета]; + Если КодОтветаПредставление = Неопределено Тогда + КодОтветаПредставление = НСтр("ru = 'Ошибка'") + КонецЕсли; + Возврат КодОтветаПредставление; + +КонецФункции + +&НаСервереБезКонтекста +Функция КодОтветаАварийнаяСитуация(КодОтвета) + Возврат КодОтвета = "203"; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция РезультатПроверкиРазрешительногоРежима(КодОтвета, ПродажаРазрешена) + + Результат = ""; + + Если КодОтвета = Неопределено + Или ВРег(КодОтвета) = ВРег(НСтр("ru = 'Таймаут'")) + Или КодОтветаАварийнаяСитуация(КодОтвета) Тогда + Результат = НСтр("ru = 'Проверка не выполнена.'"); + ИначеЕсли СтрНачинаетсяС(КодОтвета, "2") Тогда + Результат = НСтр("ru = 'Проверка выполнена.'"); + ИначеЕсли ПустаяСтрока(КодОтвета) Тогда + Результат = НСтр("ru = 'Не выполнялось.'"); + Иначе + Результат = НСтр("ru = 'Проверка не выполнена.'"); + КонецЕсли; + + Если ПродажаРазрешена Тогда + Результат = Результат + " " + НСтр("ru = 'Продажа разрешена.'") + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция РезультатПроверкиЕГАИС(Результат, СообщениеПередано) + + Если Результат Тогда + Если СообщениеПередано Тогда + Возврат НСтр("ru = 'Сообщение передано.'"); + Иначе + Возврат НСтр("ru = 'Сообщение не передано.'"); + КонецЕсли; + Иначе + Возврат НСтр("ru = 'Ошибка отправки.'"); + КонецЕсли; + +КонецФункции + +&НаСервере +Процедура УстановитьВидимостьСтраницИГрупп() + + ЕстьЕГАИС = ЗначениеЗаполнено(Запись.ИдентификаторЗапросаЕГАИС); + ЕстьУведомительныйРежим = ЗначениеЗаполнено(ЗапросКМ); + ЕстьРазрешительныйРежим = ЕстьУведомительныйРежим Или ЗначениеЗаполнено(Запись.ВремяЗапросаРазрешения); + + Элементы.СтраницаУведомительныйРежим.Видимость = ЕстьУведомительныйРежим; + Элементы.СтраницаРазрешительныйРежим.Видимость = ЕстьРазрешительныйРежим; + Элементы.СтраницаЕГАИС.Видимость = ЕстьЕГАИС; + Элементы.ГруппаЕГАИС.Видимость = ЕстьЕГАИС; + + Элементы.ГруппаУведомительныйРежим.Видимость = ЕстьУведомительныйРежим; + +КонецПроцедуры + +&НаСервере +Процедура ВывестиДополнительныеСведения(ДополнительныеСведения) + + Если ТипЗнч(ДополнительныеСведения) <> Тип("Массив") Тогда + Возврат; + КонецЕсли; + + РеквизитыДляДобавления = Новый Массив; + ЗначенияДляОбработки = Новый Массив; + Для Каждого Сведение Из ДополнительныеСведения Цикл + Идентификатор = СтрЗаменить(Новый УникальныйИдентификатор(),"-",""); + ИмяРеквизита = "Сведение" + Идентификатор; + ИмяЭлемента = "Элемент"+Идентификатор; + Реквизит = Новый РеквизитФормы( + ИмяРеквизита, Новый ОписаниеТипов("Строка"), , Сведение.Заголовок); + РеквизитыДляДобавления.Добавить(Реквизит); + Значение = Новый Структура; + Значение.Вставить("ИмяРеквизита", ИмяРеквизита); + Значение.Вставить("ИмяЭлемента", ИмяЭлемента); + Значение.Вставить("Заголовок", Сведение.Заголовок); + Значение.Вставить("Значение", Сведение.Значение); + ЗначенияДляОбработки.Добавить(Значение); + КонецЦикла; + ИзменитьРеквизиты(РеквизитыДляДобавления); + + Для Каждого Значение Из ЗначенияДляОбработки Цикл + ЭтотОбъект[Значение.ИмяРеквизита] = Значение.Значение; + + Элемент = Элементы.Добавить(Значение.ИмяЭлемента, Тип("ПолеФормы"), Элементы.ГруппаРазрешительныйРежим); + Элемент.Вид = ВидПоляФормы.ПолеНадписи; + Элемент.Заголовок = Значение.Заголовок; + Элемент.ПутьКДанным = Значение.ИмяРеквизита; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git a/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаСписка.xml b/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаСписка.xml new file mode 100644 index 0000000..8e1b29d --- /dev/null +++ b/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаСписка/Ext/Form.xml b/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..d8a0db1 --- /dev/null +++ b/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,379 @@ + +
+ DontBlock + Vertical + + + ОбработкаОповещения + ПриОткрытии + ПередЗакрытием + ПриСозданииНаСервере + + + + ПоказыватьТолькоФискализированные + Right + Right + + + + ПоказыватьФискализированныеПриИзменении + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + WeakSeparation + false + + + + false + Cell + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + СписокПриПолученииДанныхНаСервере + + + + Список.ДокументОснование + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основание</v8:content> + </v8:item> + + + + + + Список.Дата + + + + + Список.Штрихкод + + + + + Список.Номенклатура + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номенклатура</v8:content> + </v8:item> + + + + + + Список.РезультатПроверкиОИСМ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат</v8:content> + </v8:item> + + + + + + Список.ТипКода + + + + + Список.КодМаркировкиПредставление + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код маркировки</v8:content> + </v8:item> + + + + + + Список.Результат + false + + + + + Список.ОтказОтПокупки + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отказ от покупки</v8:content> + </v8:item> + + + + + + Список.ВремяЗапросаРазрешения + + + + + Список.КодОтветаРазрешения + + + + +
+
+ + + + cfg:DynamicList + + true + + Список.КодМаркировки + Список.ФлагиПроверкиОИСМ + + + true + false + ВЫБРАТЬ + РегистрСведенийОперацииПроверкиКМ.ИдентификаторСессии КАК ИдентификаторСессии, + РегистрСведенийОперацииПроверкиКМ.ИдентификаторЗапроса КАК ИдентификаторЗапроса, + РегистрСведенийОперацииПроверкиКМ.ИдентификаторФискальнойОперации КАК ИдентификаторФискальнойОперации, + РегистрСведенийОперацииПроверкиКМ.ГодМесяц КАК ГодМесяц, + РегистрСведенийОперацииПроверкиКМ.ЗапросКодаМаркировки КАК ЗапросКодаМаркировки, + РегистрСведенийОперацииПроверкиКМ.РезультатПроверкиКМНаККТ КАК РезультатПроверкиКМНаККТ, + РегистрСведенийОперацииПроверкиКМ.РезультатПроверкиКМНаСервере КАК РезультатПроверкиКМНаСервере, + РегистрСведенийОперацииПроверкиКМ.ФлагиПроверкиОИСМ КАК ФлагиПроверкиОИСМ, + РегистрСведенийОперацииПроверкиКМ.Дата КАК Дата, + РегистрСведенийОперацииПроверкиКМ.Результат КАК Результат, + РегистрСведенийОперацииПроверкиКМ.КодМаркировки КАК КодМаркировки, + НЕ РегистрСведенийОперацииПроверкиКМ.ПокупкаПодтверждена КАК ОтказОтПокупки, + РегистрСведенийОперацииПроверкиКМ.Наименование КАК Номенклатура, + ВЫРАЗИТЬ("" КАК СТРОКА(4)) КАК РезультатПроверкиОИСМ, + РегистрСведенийОперацииПроверкиКМ.Штрихкод КАК Штрихкод, + РегистрСведенийОперацииПроверкиКМ.КодМаркировкиПредставление КАК КодМаркировкиПредставление, + ВЫРАЗИТЬ(NULL КАК Перечисление.ТипыИдентификаторовТовараККТ) КАК ТипКода, + ФискальныеОперации.ДокументОснование КАК ДокументОснование, + РегистрСведенийОперацииПроверкиКМ.КодОтветаРазрешения КАК КодОтветаРазрешения, + РегистрСведенийОперацииПроверкиКМ.ВремяЗапросаРазрешения КАК ВремяЗапросаРазрешения +ИЗ + РегистрСведений.ОперацииПроверкиКМ КАК РегистрСведенийОперацииПроверкиКМ + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФискальныеОперации КАК ФискальныеОперации + ПО РегистрСведенийОперацииПроверкиКМ.ИдентификаторФискальнойОперации = ФискальныеОперации.ИдентификаторЗаписи + + ТипКода + ТипКода + + + ru + Тип кода + + + + + ПокупкаПодтверждена + ПокупкаПодтверждена + + + ИдентификаторСессии + ИдентификаторСессии + + + ИдентификаторЗапроса + ИдентификаторЗапроса + + + ИдентификаторФискальнойОперации + ИдентификаторФискальнойОперации + + + ГодМесяц + ГодМесяц + + + РезультатПроверкиКМНаСервере + РезультатПроверкиКМНаСервере + + + РезультатПроверкиКМНаККТ + РезультатПроверкиКМНаККТ + + + ДокументОснование + ДокументОснование + + + ЗапросКодаМаркировки + ЗапросКодаМаркировки + + + ФлагиПроверкиОИСМ + ФлагиПроверкиОИСМ + + + Дата + Дата + + + Результат + Результат + + + КодМаркировки + КодМаркировки + + + ОтказОтПокупки + ОтказОтПокупки + + + ru + Отказ от покупки + + + + + Номенклатура + Номенклатура + + + ru + Номенклатура + + + + + РезультатПроверкиОИСМ + РезультатПроверкиОИСМ + + + ru + Результат проверки ОИСМ + + + + + КодМаркировкиПредставление + КодМаркировкиПредставление + + + ru + Код маркировки представление + + + + + Штрихкод + Штрихкод + + + ru + Штрихкод + + + + + Наименование + Наименование + + + ВремяЗапросаРазрешения + ВремяЗапросаРазрешения + + + ИдентификаторЗапросаРазрешения + ИдентификаторЗапросаРазрешения + + + РезультатЗапросаРазрешения + РезультатЗапросаРазрешения + + + КодОтветаРазрешения + КодОтветаРазрешения + + InformationRegister.ОперацииПроверкиКМ + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Показывать только фискализированные</v8:content> + </v8:item> + + + xs:boolean + + + + \ No newline at end of file diff --git a/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаСписка/Ext/Form/Module.bsl b/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаСписка/Ext/Form/Module.bsl new file mode 100644 index 0000000..6a2da5b --- /dev/null +++ b/InformationRegisters/ОперацииПроверкиКМ/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,134 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ВиртуальныеПоля = Новый Массив(); + ВиртуальныеПоля.Добавить("РезультатПроверкиОИСМ"); + ВиртуальныеПоля.Добавить("ТипКода"); + Список.УстановитьОграниченияИспользованияВГруппировке(ВиртуальныеПоля); + Список.УстановитьОграниченияИспользованияВОтборе(ВиртуальныеПоля); + Список.УстановитьОграниченияИспользованияВПорядке(ВиртуальныеПоля); + + ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИдентификаторФискальнойОперации"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + ЭлементОтбора.ПравоеЗначение = ""; + ЭлементОтбора.Использование = Ложь; + + ТипыОборудований = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ТипыОборудований.СканерШтрихкода = Истина; + МенеджерОборудования.ПриСозданииНаСервере(ЭтотОбъект, ТипыОборудований); + + ТипыОборудования = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ТипыОборудования.СканерШтрихкода = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда + Если ТипЗнч(Параметр) = Тип("Массив") И Параметр.Количество()>0 Тогда + Если ИмяСобытия = "ScanDataBase64" Тогда + КодМаркировкиBase64 = Параметр[0]; + ИначеЕсли ИмяСобытия = "ScanData" Тогда + КодМаркировкиBase64 = ОбщегоНазначенияБПОКлиентСервер.ШтрихкодВBase64(Параметр[0]); + Иначе + Возврат; + КонецЕсли; + ИначеЕсли ТипЗнч(Параметр) = Тип("Структура") Тогда + Если ИмяСобытия = "ScanDataBase64" Тогда + КодМаркировкиBase64 = Параметр.Штрихкод; + ИначеЕсли ИмяСобытия = "ScanData" Тогда + КодМаркировкиBase64 = ОбщегоНазначенияБПОКлиентСервер.ШтрихкодВBase64(Параметр.Штрихкод); + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + + КлючЗаписи = НайтиПоКодуМаркировки(КодМаркировкиBase64); + Если КлючЗаписи <> Неопределено Тогда + ОткрытьФорму("РегистрСведений.ОперацииПроверкиКМ.ФормаЗаписи", Новый Структура("Ключ", КлючЗаписи)); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(, ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(, ЭтотОбъект); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ПоказыватьФискализированныеПриИзменении(Элемент) + + Список.Отбор.Элементы[0].Использование = ПоказыватьТолькоФискализированные; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок + +&НаСервереБезКонтекста +Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) + + МенеджерОборудованияМаркировка.ПриПолученииДанныхСпискаОперацийПроверкиКМ(ИмяЭлемента, Настройки, Строки); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервереБезКонтекста +Функция НайтиПоКодуМаркировки(КодМаркировки) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ОперацииПроверкиКМ.ИдентификаторСессии КАК ИдентификаторСессии, + | ОперацииПроверкиКМ.ИдентификаторЗапроса КАК ИдентификаторЗапроса, + | ОперацииПроверкиКМ.ИдентификаторФискальнойОперации КАК ИдентификаторФискальнойОперации, + | ОперацииПроверкиКМ.ГодМесяц КАК ГодМесяц, + | ОперацииПроверкиКМ.КодМаркировки КАК КодМаркировки + |ИЗ + | РегистрСведений.ОперацииПроверкиКМ КАК ОперацииПроверкиКМ + |ГДЕ + | ОперацииПроверкиКМ.КодМаркировки = &КодМаркировки"; + + Запрос.УстановитьПараметр("КодМаркировки", КодМаркировки); + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат Неопределено; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + ОтборПоКодуМаркировки = Новый Структура(); + ОтборПоКодуМаркировки.Вставить("ИдентификаторСессии", Выборка.ИдентификаторСессии); + ОтборПоКодуМаркировки.Вставить("ИдентификаторЗапроса", Выборка.ИдентификаторЗапроса); + ОтборПоКодуМаркировки.Вставить("ИдентификаторФискальнойОперации", Выборка.ИдентификаторФискальнойОперации); + ОтборПоКодуМаркировки.Вставить("ГодМесяц", Выборка.ГодМесяц); + ОтборПоКодуМаркировки.Вставить("КодМаркировки", Выборка.КодМаркировки); + + Возврат РегистрыСведений.ОперацииПроверкиКМ.СоздатьКлючЗаписи(ОтборПоКодуМаркировки); +КонецФункции + +#КонецОбласти + + + + diff --git a/InformationRegisters/ОсобенностиУчета.xml b/InformationRegisters/ОсобенностиУчета.xml new file mode 100644 index 0000000..d9b9754 --- /dev/null +++ b/InformationRegisters/ОсобенностиУчета.xml @@ -0,0 +1,117 @@ + + + + + + 261f4673-1a70-4d62-909c-eebd21335568 + bd5ddb87-b133-40f8-bd2a-43c0e8e61f46 + + + 4895ab6d-0934-4a49-a45d-3612be6ec99b + b11eff9f-6f87-4d6b-be94-e81d25b20038 + + + 1aa53128-e847-4703-b5a4-6ccb42389da3 + e59ae6ee-4e4a-4f6d-b0c7-9b03f03b176f + + + 704c8267-a7d9-4913-bc67-0559bd01e46a + 4db0592f-7e6c-4475-88e1-f996c7a1fe21 + + + f436d08d-21cd-4f29-bd74-a233503728eb + c6f810fb-0e0c-4b7d-9c6d-0430d7193bf5 + + + f407cc5a-02f5-4c6d-bf72-fdde157abf75 + a15caff6-3006-414e-bf8f-5399b81c5ba3 + + + 62a4334e-6fd5-4bc8-baca-b09c89efdfe8 + e44deead-ecb1-4784-9160-e11883503a5c + + + + ОсобенностиУчета + + + ru + Особенности учета + + + + true + InDialog + + InformationRegister.ОсобенностиУчета.Form.ФормаСписка + + + Nonperiodical + Independent + false + false + Managed + DontUse + false + false + + + + + + DontUse + false + false + + + + + Наименование + + + ru + Наименование + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + Use + TransformValues + + +
ФормаСписка
+
+
+
\ No newline at end of file diff --git a/InformationRegisters/ОсобенностиУчета/Forms/ФормаСписка.xml b/InformationRegisters/ОсобенностиУчета/Forms/ФормаСписка.xml new file mode 100644 index 0000000..81281c6 --- /dev/null +++ b/InformationRegisters/ОсобенностиУчета/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/InformationRegisters/ОсобенностиУчета/Forms/ФормаСписка/Ext/Form.xml b/InformationRegisters/ОсобенностиУчета/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..9852dad --- /dev/null +++ b/InformationRegisters/ОсобенностиУчета/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,347 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Настройки используемых типов маркируемой продукции</v8:content> + </v8:item> + + DontBlock + Vertical + + false + + + ПриСозданииНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + WeakSeparation + false + + + + HorizontalIfPossible + WeakSeparation + + + + List + None + true + Cell + ExpandTopLevel + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + СписокВыбор + + + + Список.Наименование + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выбранные для обработки марок</v8:content> + </v8:item> + + + + + +
+ + false + Center + Vertical + WeakSeparation + + + + + + + + Cell + true + Доступные + ~Доступные.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + false + + + + None + + Доступные + SearchStringRepresentation + + + + + + + Доступные + ViewStatusRepresentation + + + + + + + Доступные + SearchControl + + + + + + ДоступныеВыбор + + + + Доступные.ОсобенностьУчета + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Список особенностей учета</v8:content> + </v8:item> + + + + + +
+
+
+
+ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выбранные</v8:content> + </v8:item> + + + cfg:DynamicList + + true + + false + true + InformationRegister.ОсобенностиУчета + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доступные</v8:content> + </v8:item> + + + cfg:DynamicList + + + true + false + ВЫБРАТЬ + Номенклатура.ОсобенностьУчета КАК ОсобенностьУчета +ИЗ + Справочник.Номенклатура КАК Номенклатура +ГДЕ + НЕ Номенклатура.ОсобенностьУчета В (&ОсобенностьУчета) + +СГРУППИРОВАТЬ ПО + Номенклатура.ОсобенностьУчета + + ОсобенностьУчета + ОсобенностьУчета + + + ОсобенностьУчета + + + ru + Особенность учета + + + + xs:string + + 100 + Variable + + + + true + true + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добавить ОУ</v8:content> + </v8:item> + + + + ru + Добавить ОУ + + + ДобавитьОУ + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Удалить ОУ</v8:content> + </v8:item> + + + + ru + Удалить ОУ + + + УдалитьОУ + + +
\ No newline at end of file diff --git a/InformationRegisters/ОсобенностиУчета/Forms/ФормаСписка/Ext/Form/Module.bsl b/InformationRegisters/ОсобенностиУчета/Forms/ФормаСписка/Ext/Form/Module.bsl new file mode 100644 index 0000000..ba32334 --- /dev/null +++ b/InformationRegisters/ОсобенностиУчета/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,69 @@ + +&НаКлиенте +Процедура ДобавитьОУ(Команда) + Если значениеЗаполнено(Элементы.Доступные.ТекущиеДанные.ОсобенностьУчета) Тогда + ДобавитьОУНаСервере(Элементы.Доступные.ТекущиеДанные.ОсобенностьУчета); + ПриСозданииНаСервере(Ложь, Истина); + Элементы.Список.Обновить(); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ДобавитьОУНаСервере(Особ) + Набор=РегистрыСведений.ОсобенностиУчета.СоздатьНаборЗаписей(); + Набор.Отбор.Наименование.Установить(Особ); + Набор.Прочитать(); + Запись=Набор.Добавить(); + Запись.Наименование=Особ; + Набор.Записать(); +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Особ=Новый Массив(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОсобенностиУчета.Наименование КАК Наименование + |ИЗ + | РегистрСведений.ОсобенностиУчета КАК ОсобенностиУчета"; + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Особ.Добавить(ВыборкаДетальныеЗаписи.Наименование); + КонецЦикла; + + Доступные.Параметры.УстановитьЗначениеПараметра("ОсобенностьУчета",Особ); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьОУ(Команда) + Если значениеЗаполнено(Элементы.Список.ТекущиеДанные.Наименование) Тогда + УдалитьОУНаСервере(Элементы.Список.ТекущиеДанные.Наименование); + ПриСозданииНаСервере(Ложь, Истина); + Элементы.Список.Обновить(); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура УдалитьОУНаСервере(Особ) + Набор=РегистрыСведений.ОсобенностиУчета.СоздатьНаборЗаписей(); + Набор.Отбор.Наименование.Установить(Особ); + Набор.Прочитать(); + Набор.Очистить(); + Набор.Записать(); +КонецПроцедуры + +&НаКлиенте +Процедура ДоступныеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ДобавитьОУ(неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + УдалитьОУ(неопределено); +КонецПроцедуры diff --git a/InformationRegisters/ОшибкиПодтвержденияНСПК.xml b/InformationRegisters/ОшибкиПодтвержденияНСПК.xml new file mode 100644 index 0000000..6d26150 --- /dev/null +++ b/InformationRegisters/ОшибкиПодтвержденияНСПК.xml @@ -0,0 +1,315 @@ + + + + + + 3d72950c-5a78-494d-b552-ec32422b9522 + 632c6987-f1b9-4c2b-a1e7-95db39bb9810 + + + 9da62cf9-bd5a-4d74-a6a2-2aa275b7a20d + 7034fc52-1fd9-4411-817e-bcf5cab295ac + + + 62ccfc6c-ad9d-4e18-9fd7-f6a40310ef11 + aaf6f550-ba92-4d20-8ac5-024f9761740a + + + b23c8e31-9be5-4ed4-903f-6176272611d0 + 3fe4423c-a7f2-4285-b302-ac55640c640f + + + 8dce54cc-791c-4050-bc35-a5d0a316048b + 21cb4888-7b4a-4bf7-aedf-98ddd42627dc + + + 61cad459-ce00-4756-af64-428561dacdba + 8a3fdba6-0c0c-47c2-a7fb-8efeab8ae9c2 + + + 62c60a02-5ca2-482a-97e3-942da9dbb419 + 9f1c5dee-5a1e-4f81-a67a-62e147c8765d + + + + ОшибкиПодтвержденияНСПК + + + ru + Ошибки подтверждения НСПК + + + + true + InDialog + + InformationRegister.ОшибкиПодтвержденияНСПК.Form.ФормаСписка + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + Nonperiodical + Independent + false + false + Managed + DontUse + false + false + + + ru + Ошибка НСПК + + + + + + + DontUse + false + false + + + + + КодРезультата + + + ru + Код результата + + + + + xs:decimal + + 10 + 0 + Any + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ОписаниеОшибки + + + ru + Описание ошибки + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ОснованиеФискальнойОперации + + + ru + Основание фискальной операции + + + + + cfg:DefinedType.ОснованиеФискальнойОперацииБПО + + false + + + + false + + false + false + + + false + + ShowError + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + Use + TransformValues + + +
ФормаСписка
+
+
+
\ No newline at end of file diff --git a/InformationRegisters/ОшибкиПодтвержденияНСПК/Forms/ФормаСписка.xml b/InformationRegisters/ОшибкиПодтвержденияНСПК/Forms/ФормаСписка.xml new file mode 100644 index 0000000..34c0175 --- /dev/null +++ b/InformationRegisters/ОшибкиПодтвержденияНСПК/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/InformationRegisters/ОшибкиПодтвержденияНСПК/Forms/ФормаСписка/Ext/Form.xml b/InformationRegisters/ОшибкиПодтвержденияНСПК/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..0cea02d --- /dev/null +++ b/InformationRegisters/ОшибкиПодтвержденияНСПК/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,128 @@ + +
+ DontBlock + Vertical + + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + Usual + WeakSeparation + false + + + + List + None + true + true + Cell + ExpandTopLevel + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.ОснованиеФискальнойОперации + true + + + + + Список.КодРезультата + true + + + + + Список.ОписаниеОшибки + true + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + InformationRegister.ОшибкиПодтвержденияНСПК + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + +
\ No newline at end of file diff --git a/InformationRegisters/ПлатежныеОперации.xml b/InformationRegisters/ПлатежныеОперации.xml new file mode 100644 index 0000000..f38b050 --- /dev/null +++ b/InformationRegisters/ПлатежныеОперации.xml @@ -0,0 +1,994 @@ + + + + + + 6e147e4e-cd1a-42a0-b4ec-7209aa5bbc6a + 9de78c3d-8e02-4cc7-887b-519f33d19fd8 + + + 4b54e544-a81c-45e9-ad56-38d368e4146e + fb4e101e-5e07-405d-9fe1-7a3087c1b308 + + + 2282248b-813d-4550-a187-1cd8caf558f9 + 4d9309ec-57c6-4e92-811b-b091f67f7d42 + + + 4f6cd890-a911-4ae9-b119-7c24fffc0e67 + 6d8d7da9-905b-4709-b9ab-c48dc44dff25 + + + a092d83e-1e45-4428-a7dc-43768540363c + 677ad92f-7a66-49cc-83db-921f4b2b7c9a + + + f8bc9a1c-5677-4130-b761-021dbc7d3a7b + e983db71-56a0-46a0-8fd9-f0ec7f2fbe45 + + + db92ab89-1278-4a49-86b5-caf9342d9c21 + 5e00f293-26b8-41ab-b817-b780e34b948b + + + + ПлатежныеОперации + + + ru + Платежные операции + + + + false + InDialog + InformationRegister.ПлатежныеОперации.Form.ФормаЗаписи + InformationRegister.ПлатежныеОперации.Form.ФормаСписка + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + Nonperiodical + Independent + false + false + Managed + DontUse + false + false + + + ru + Платежная операция + + + + + + + DontUse + false + false + + + + + ДатаЗапроса + + + ru + Дата запроса + + + + + xs:dateTime + + DateTime + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ТипОперации + + + ru + Тип операции + + + + + cfg:EnumRef.ТипыПлатежныхОпераций + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + СуммаОперации + + + ru + Сумма операции + + + + + cfg:DefinedType.ДенежнаяСуммаЛюбогоЗнака + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ОперацияВыполнена + + + ru + Операция выполнена + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ДанныеЗапроса + + + ru + Данные запроса + + + + + v8:ValueStorage + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ДанныеОтвета + + + ru + Данные ответа + + + + + v8:ValueStorage + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + СсылочныйНомер + + + ru + Ссылочный номер + + + + + xs:string + + 20 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + КодАвторизации + + + ru + Код авторизации + + + + + xs:string + + 11 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ВидОплатыНаТерминале + + + ru + Вид оплаты на терминале + + + + + cfg:EnumRef.ВидОплатыНаТерминале + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + + ИдентификаторТерминала + + + ru + Идентификатор терминала + + + + + xs:string + + 20 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ИдентификаторБанкаЭквайера + + + ru + Идентификатор банка эквайера + + + + + xs:string + + 36 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ИдентификаторПлатежнойСистемы + + + ru + Идентификатор платежной системы + + + + + xs:string + + 36 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ИдентификаторБанковскойТранзакции + + + ru + Идентификатор банковской транзакции + + + + + xs:string + + 36 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ДатаВремяТранзакции + + + ru + Дата время транзакции + + + + + xs:dateTime + + DateTime + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ДокументОснование + + + ru + Документ основание + + + + + cfg:DefinedType.ОснованиеФискальнойОперацииБПО + + false + + + + false + + false + false + + + true + + DontCheck + Items + + + Auto + Auto + + + Auto + true + true + false + DontIndex + Use + Use + TransformValues + + + + + ИдентификаторОперации + + + ru + Идентификатор операции + + + + + xs:string + + 36 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + Use + TransformValues + + + + + ИдентификаторЗапроса + + + ru + Идентификатор запроса + + + + + xs:string + + 36 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + Index + Use + Use + TransformValues + + + + + ИдентификаторФискальнойОперации + + + ru + Идентификатор фискальной операции + + + + + xs:string + + 36 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + Use + TransformValues + + + + + ГодМесяц + + + ru + Год месяц + + + + + xs:decimal + + 6 + 0 + Any + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + Index + Use + Use + TransformValues + + +
ФормаСписка
+
ФормаЗаписи
+
+
+
\ No newline at end of file diff --git a/InformationRegisters/ПлатежныеОперации/Ext/ManagerModule.bsl b/InformationRegisters/ПлатежныеОперации/Ext/ManagerModule.bsl new file mode 100644 index 0000000..c8390cc --- /dev/null +++ b/InformationRegisters/ПлатежныеОперации/Ext/ManagerModule.bsl @@ -0,0 +1,181 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +// СтандартныеПодсистемы.УправлениеДоступом +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +// +// Параметры: +// Ограничение - Структура: +// * Текст - Строка - ограничение доступа для пользователей. +// Если пустая строка, значит, доступ разрешен. +// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей. +// Если пустая строка, значит, доступ запрещен. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически. +// - Булево - если Ложь, то всегда записывать ключи доступа, +// если Истина, тогда не записывать ключи доступа, +// а использовать ключи доступа владельца (требуется, +// чтобы ограничение было строго по объекту-владельцу). +// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также +// как у параметра ПоВладельцуБезЗаписиКлючейДоступа. +// +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Менеджер = "РегистрСведений.ПлатежныеОперации"; + МенеджерОборудованияВызовСервераПереопределяемый.ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецЕсли + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ОчиститьРегистрЗаПрошлыеМесяцы(ДатаОчистки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | ПлатежныеОперации.ГодМесяц КАК ГодМесяц + |ИЗ + | РегистрСведений.ПлатежныеОперации КАК ПлатежныеОперации + |ГДЕ + | ПлатежныеОперации.ГодМесяц < &ГодМесяцОчистки"; + + ГодМесяцОчистки = Год(ДатаОчистки) * 100 + Месяц(ДатаОчистки); + Запрос.УстановитьПараметр("ГодМесяцОчистки", ГодМесяцОчистки); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПлатежныеОперации"); + ЭлементБлокировки.ИсточникДанных = РезультатЗапроса; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("ГодМесяц","ГодМесяц"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + НаборЗаписей = РегистрыСведений.ПлатежныеОперации.СоздатьНаборЗаписей(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + НаборЗаписей.Очистить(); + НаборЗаписей.Отбор.ГодМесяц.Установить(Выборка.ГодМесяц); + НаборЗаписей.Записать(Истина); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Очистка платежных операций'", ОбщегоНазначенияБПО.КодОсновногоЯзыка())); + КонецПопытки + +КонецПроцедуры + +Процедура ОчиститьРегистрЗаТекущийМесяц(ДатаОчистки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПлатежныеОперации.ИдентификаторЗапроса КАК ИдентификаторЗапроса, + | ПлатежныеОперации.ДокументОснование КАК ДокументОснование, + | ПлатежныеОперации.ИдентификаторОперации КАК ИдентификаторОперации, + | ПлатежныеОперации.ИдентификаторФискальнойОперации КАК ИдентификаторФискальнойОперации, + | ПлатежныеОперации.ГодМесяц КАК ГодМесяц + |ИЗ + | РегистрСведений.ПлатежныеОперации КАК ПлатежныеОперации + |ГДЕ + | ПлатежныеОперации.ГодМесяц = &ГодМесяцОчистки + | И ПлатежныеОперации.ДатаЗапроса < &ДатаОчистки"; + + ГодМесяцОчистки = Год(ДатаОчистки) * 100 + Месяц(ДатаОчистки); + Запрос.УстановитьПараметр("ГодМесяцОчистки", ГодМесяцОчистки); + Запрос.УстановитьПараметр("ДатаОчистки", ДатаОчистки); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПлатежныеОперации"); + ЭлементБлокировки.ИсточникДанных = РезультатЗапроса; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("ИдентификаторЗапроса","ИдентификаторЗапроса"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + НаборЗаписей = РегистрыСведений.ПлатежныеОперации.СоздатьНаборЗаписей(); + Выборка = РезультатЗапроса.Выбрать(); + Если ОбщегоНазначенияБПОПовтИсп.РежимЗамещенияДоступен() Тогда + Пока Выборка.Следующий() Цикл + ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Выборка); + КонецЦикла; + НаборЗаписей.Записать(ОбщегоНазначенияБПОПовтИсп.РежимЗамещенияУдаление()); + Иначе + Пока Выборка.Следующий() Цикл + НаборЗаписей.Очистить(); + НаборЗаписей.Отбор.ИдентификаторЗапроса.Установить(Выборка.ИдентификаторЗапроса); + НаборЗаписей.Записать(Истина); + КонецЦикла; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Очистка платежных операций'", ОбщегоНазначенияБПО.КодОсновногоЯзыка())); + КонецПопытки + +КонецПроцедуры + +Процедура УстановитьРеквизитПлатежнойОперации(ИдентификаторЗапроса, Имя, Значение) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ИдентификаторЗапросаСтрока = Строка(ИдентификаторЗапроса); + + Если ЗначениеЗаполнено(ИдентификаторЗапросаСтрока) Тогда + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПлатежныеОперации"); + ЭлементБлокировки.УстановитьЗначение("ИдентификаторЗапроса", ИдентификаторЗапросаСтрока); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + НаборЗаписей = РегистрыСведений.ПлатежныеОперации.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИдентификаторЗапроса.Установить(ИдентификаторЗапросаСтрока); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество()>0 Тогда + Запись = НаборЗаписей[0]; + Запись[Имя] = Значение; + НаборЗаписей.Записать(Истина); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ТекстСообщения = СтрШаблон( + НСтр("ru = 'Ошибка записи в журнал логирования платежных операций: %1'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Платежные операции'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()), + ТекстСообщения); + КонецПопытки; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/InformationRegisters/ПлатежныеОперации/Forms/ФормаЗаписи.xml b/InformationRegisters/ПлатежныеОперации/Forms/ФормаЗаписи.xml new file mode 100644 index 0000000..2db38fb --- /dev/null +++ b/InformationRegisters/ПлатежныеОперации/Forms/ФормаЗаписи.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаЗаписи + + + ru + Форма записи + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/InformationRegisters/ПлатежныеОперации/Forms/ФормаЗаписи/Ext/Form.xml b/InformationRegisters/ПлатежныеОперации/Forms/ФормаЗаписи/Ext/Form.xml new file mode 100644 index 0000000..2f3e918 --- /dev/null +++ b/InformationRegisters/ПлатежныеОперации/Forms/ФормаЗаписи/Ext/Form.xml @@ -0,0 +1,333 @@ + +
+ LockOwner + Vertical + + Abort + Cancel + ChangeHistory + Copy + CustomizeForm + Delete + Help + Ignore + No + OK + OpenFromMainServer + OpenFromStandaloneServer + Reread + RestoreValues + Retry + SaveValues + Write + WriteAndClose + Yes + + + + ПослеЗаписиНаСервере + ПриЧтенииНаСервере + ПриСозданииНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + HorizontalIfPossible + Usual + None + false + + + + Запись.ДокументОснование + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Страницы</v8:content> + </v8:item> + + TabsOnTop + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основное</v8:content> + </v8:item> + + Vertical + false + + + + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Параметры</v8:content> + </v8:item> + + + + ru + Параметры + + + true + Vertical + WeakSeparation + false + + + + Запись.ТипОперации + true + + + + + Запись.СуммаОперации + true + + + + + Запись.ИдентификаторОперации + true + + + + + Запись.ИдентификаторЗапроса + true + + + + + Запись.ИдентификаторФискальнойОперации + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Фискальная операция</v8:content> + </v8:item> + + true + + + + + Запись.ДатаЗапроса + true + + + + + Запись.ВидОплатыНаТерминале + true + true + + + + + Запись.СсылочныйНомер + true + true + + + + + Запись.КодАвторизации + true + true + + + + + + + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительные идентификаторы</v8:content> + </v8:item> + + + + ru + Идентификаторы + + + Vertical + NormalSeparation + + + + Запись.ИдентификаторТерминала + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Терминал</v8:content> + </v8:item> + + true + true + + + + + Запись.ИдентификаторБанкаЭквайера + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Банк эквайер</v8:content> + </v8:item> + + true + true + + + + + Запись.ИдентификаторПлатежнойСистемы + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Платежная система</v8:content> + </v8:item> + + true + true + + + + + Запись.ИдентификаторБанковскойТранзакции + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Банковская транзакция</v8:content> + </v8:item> + + true + true + + + + + Запись.ДатаВремяТранзакции + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата транзакции</v8:content> + </v8:item> + + true + true + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запрос</v8:content> + </v8:item> + + Vertical + false + + + + ТекстЗапроса + None + false + true + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ответ</v8:content> + </v8:item> + + true + Vertical + false + + + + ТекстОтвета + None + false + true + + + + + + + + + + + + cfg:InformationRegisterRecordManager.ПлатежныеОперации + + true + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текст запроса</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текст ответа</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + \ No newline at end of file diff --git a/InformationRegisters/ПлатежныеОперации/Forms/ФормаЗаписи/Ext/Form/Module.bsl b/InformationRegisters/ПлатежныеОперации/Forms/ФормаЗаписи/Ext/Form/Module.bsl new file mode 100644 index 0000000..8d2c657 --- /dev/null +++ b/InformationRegisters/ПлатежныеОперации/Forms/ФормаЗаписи/Ext/Form/Module.bsl @@ -0,0 +1,69 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ПлатежныеОперации = ОборудованиеПлатежныеСистемы.ДанныеПлатежныхОпераций(Запись.ИдентификаторЗапроса, Неопределено, Истина); + Если ПлатежныеОперации.Количество() > 0 Тогда + ТекстЗапроса = ПлатежныеОперации[0].ДанныеЗапроса; + ТекстОтвета = ПлатежныеОперации[0].ДанныеОтвета; + КонецЕсли; + + Элементы.ГруппаШапка.Видимость = ЗначениеЗаполнено(Запись.ДокументОснование); + ЭтаФорма.ТолькоПросмотр = Истина; + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярПлатежныеОперацииПриСозданииНаСервере(Запись, ЭтаФорма, Отказ, СтандартнаяОбработка); + + Если ОбщегоНазначенияБПО.ЭтоМобильнаяПлатформа() Тогда + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.СуммаОперации); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ИдентификаторОперации); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ИдентификаторЗапроса); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ИдентификаторФискальнойОперации); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ДатаЗапроса); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ВидОплатыНаТерминале); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.СсылочныйНомер); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.КодАвторизации); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ТипОперации); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ИдентификаторБанкаЭквайера); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ИдентификаторПлатежнойСистемы); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ИдентификаторБанковскойТранзакции); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ДатаВремяТранзакции); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ИдентификаторТерминала); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // Вызов БСП + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначенияБПО.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + // Конец Вызов БСП + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + // Вызов БСП + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначенияБПО.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + // Конец Вызов БСП + +КонецПроцедуры + +#КонецОбласти + diff --git a/InformationRegisters/ПлатежныеОперации/Forms/ФормаСписка.xml b/InformationRegisters/ПлатежныеОперации/Forms/ФормаСписка.xml new file mode 100644 index 0000000..122a95c --- /dev/null +++ b/InformationRegisters/ПлатежныеОперации/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/InformationRegisters/ПлатежныеОперации/Forms/ФормаСписка/Ext/Form.xml b/InformationRegisters/ПлатежныеОперации/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..5deb24b --- /dev/null +++ b/InformationRegisters/ПлатежныеОперации/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,151 @@ + +
+ DontBlock + Vertical + + false + + + ПриСозданииНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + Usual + WeakSeparation + false + + + + List + None + true + false + SingleRow + Cell + ExpandTopLevel + true + Список + Список.DefaultPicture + + Copy + Create + + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.ДокументОснование + true + + + + + Список.ДатаЗапроса + true + + + + + Список.ТипОперации + true + + + + + Список.СуммаОперации + true + + + + + Список.ОперацияВыполнена + true + + + + + Список.ИдентификаторОперации + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + InformationRegister.ПлатежныеОперации + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + +
\ No newline at end of file diff --git a/InformationRegisters/ПлатежныеОперации/Forms/ФормаСписка/Ext/Form/Module.bsl b/InformationRegisters/ПлатежныеОперации/Forms/ФормаСписка/Ext/Form/Module.bsl new file mode 100644 index 0000000..c5c2980 --- /dev/null +++ b/InformationRegisters/ПлатежныеОперации/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,15 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + МенеджерОборудованияВызовСервераПереопределяемый.СписокПлатежныеОперацииПриСозданииНаСервере(ЭтаФорма, Отказ, Параметры, СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти diff --git a/InformationRegisters/ФискальныеОперации.xml b/InformationRegisters/ФискальныеОперации.xml new file mode 100644 index 0000000..7ae377b --- /dev/null +++ b/InformationRegisters/ФискальныеОперации.xml @@ -0,0 +1,1284 @@ + + + + + + 80c358af-1263-4030-abb5-1ec5ff096074 + 27e1ee52-9dce-472d-bf07-70e2c174f941 + + + 3e85e743-a75f-49e3-9a9e-69539ea79f77 + bc7bd5dc-91b7-4f46-947c-6aa2d4823985 + + + d7f1b321-9e89-4789-b303-a0432ac18fd5 + 302a0992-a387-49f3-885b-3837eae9476e + + + a4738196-e1bd-4843-966d-ac7fe3a281c8 + 1093f476-239b-4ce9-9590-be62a2d53ef9 + + + a78541f9-0a6f-45cd-b74e-059bf48d2838 + 987b41e4-f1cd-40d4-9542-52c6c77de25b + + + 4356cb6a-f77c-4ad0-acda-b8e7ab93959a + 083f5d34-3e5a-4859-8a12-d1c5b8cfcfc4 + + + a3281c3d-3bee-44e5-bc86-1fe6687ebeed + 363fbb7a-3465-47fb-a9fc-7acf4d6a1ddd + + + + ФискальныеОперации + + + ru + Фискальные операции + + + + false + InDialog + InformationRegister.ФискальныеОперации.Form.ФормаЗаписи + InformationRegister.ФискальныеОперации.Form.ФормаСписка + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + Nonperiodical + Independent + false + false + Managed + DontUse + false + false + + + ru + Фискальная операция + + + + + + + DontUse + false + false + + + + + Дата + + + ru + Дата + + + + + xs:dateTime + + DateTime + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Организация + + + ru + Организация + + + + + cfg:DefinedType.ОрганизацияБПО + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ТорговыйОбъект + + + ru + Торговый объект + + + + + cfg:DefinedType.ТорговыйОбъектБПО + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ТипДокумента + + + ru + Тип документа + + + + + cfg:EnumRef.ТипыФискальныхДокументовККТ + + false + + + + false + + false + false + + + false + Enum.ТипыФискальныхДокументовККТ.EnumValue.КассовыйЧек + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ТипРасчета + + + ru + Тип расчета + + + + + cfg:EnumRef.ТипыРасчетаДенежнымиСредствами + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + НомерЧекаККМ + + + ru + Номер чека ККМ + + + + + xs:decimal + + 8 + 0 + Any + + + false + + + ru + ЧЦ=8; ЧН=0; ЧВН=; ЧГ= + + + + + ru + ЧЦ=8; ЧН=0; ЧВН=; ЧГ= + + + + + ru + Фискальный номер чека + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + + НомерСменыККМ + + + ru + Номер смены ККМ + + + + + xs:decimal + + 10 + 0 + Any + + + false + + + ru + ЧЦ=8; ЧН=0; ЧВН=; ЧГ= + + + + + ru + ЧЦ=8; ЧН=0; ЧВН=; ЧГ= + + + + + ru + Номер смены ККТ + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ФискальныйПризнак + + + ru + Фискальный признак + + + + + xs:string + + 20 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Сумма + + + ru + Сумма + + + + + cfg:DefinedType.ДенежнаяСуммаНеотрицательная + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ОплатаНаличные + + + ru + Оплата наличные + + + + + cfg:DefinedType.ДенежнаяСуммаНеотрицательная + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ОплатаЭлектронно + + + ru + Оплата электронно + + + + + cfg:DefinedType.ДенежнаяСуммаНеотрицательная + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ОплатаПостоплата + + + ru + Оплата постоплата + + + + + cfg:DefinedType.ДенежнаяСуммаНеотрицательная + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ОплатаПредоплата + + + ru + Оплата предоплата + + + + + cfg:DefinedType.ДенежнаяСуммаНеотрицательная + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ОплатаВстречноеПредоставление + + + ru + Оплата встречное предоставление + + + + + cfg:DefinedType.ДенежнаяСуммаНеотрицательная + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + АдресСайтаПроверки + + + ru + Адрес сайта проверки + + + + + xs:string + + 250 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ЗаводскойНомерФН + + + ru + Заводской номер ФН + + + + + xs:string + + 20 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + + РегистрационныйНомерККТ + + + ru + Регистрационный номер ККТ + + + + + xs:string + + 20 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + + ДополнительныйРеквизит + + + ru + Дополнительный реквизит + + + + + xs:string + + 20 + Variable + + + false + + + + + ru + Дополнительный реквизит-фискальный признак документа основания + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + КорректируемыйДокумент + + + ru + Корректируемый документ + + + + + cfg:DefinedType.ОснованиеФискальнойОперацииБПО + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ДанныеXML + + + ru + Данные XML + + + + + v8:ValueStorage + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + СубъектПерсональныхДанных + + + ru + Субъект персональных данных + + + + + cfg:DefinedType.СубъектПерсональныхДанныхБПО + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ЕдиныйЧек + + + ru + Единый чек + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ИдентификаторОплатыПлатежнойСистемы + + + ru + Идентификатор оплаты платежной системы + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + Index + Use + Use + + + + + ТипПлатежнойСистемы + + + ru + Тип платежной системы + + + + + cfg:EnumRef.ТипыПлатежнойСистемыККТ + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ДокументОснование + + + ru + Документ основание + + + + + cfg:DefinedType.ОснованиеФискальнойОперацииБПО + + false + + + + false + + false + false + + + true + + DontCheck + Items + + + Auto + Auto + + + Auto + true + true + false + DontIndex + Use + Use + TransformValues + + + + + ИдентификаторЗаписи + + + ru + Идентификатор записи + + + + + xs:string + + 36 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + Index + DontUse + Use + TransformValues + + +
ФормаСписка
+
ФормаЗаписи
+
+
+
\ No newline at end of file diff --git a/InformationRegisters/ФискальныеОперации/Ext/ManagerModule.bsl b/InformationRegisters/ФискальныеОперации/Ext/ManagerModule.bsl new file mode 100644 index 0000000..dda0a9e --- /dev/null +++ b/InformationRegisters/ФискальныеОперации/Ext/ManagerModule.bsl @@ -0,0 +1,164 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// СтандартныеПодсистемы.УправлениеДоступом +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +// +// Параметры: +// Ограничение - Структура: +// * Текст - Строка - ограничение доступа для пользователей. +// Если пустая строка, значит, доступ разрешен. +// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей. +// Если пустая строка, значит, доступ запрещен. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически. +// - Булево - если Ложь, то всегда записывать ключи доступа, +// если Истина, тогда не записывать ключи доступа, +// а использовать ключи доступа владельца (требуется, +// чтобы ограничение было строго по объекту-владельцу). +// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также +// как у параметра ПоВладельцуБезЗаписиКлючейДоступа. +// +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Менеджер = "РегистрСведений.ФискальныеОперации"; + МенеджерОборудованияВызовСервераПереопределяемый.ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ОчиститьРегистрДоДаты(ДатаОчистки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // АПК: 1328-выкл + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ФискальныеОперации.ИдентификаторЗаписи КАК ИдентификаторЗаписи + |ИЗ + | РегистрСведений.ФискальныеОперации КАК ФискальныеОперации + |ГДЕ + | ФискальныеОперации.Дата < &ДатаОчистки"; + + Запрос.УстановитьПараметр("ДатаОчистки", ДатаОчистки); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.ФискальныеОперации.СоздатьНаборЗаписей(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + НаборЗаписей.Очистить(); + НаборЗаписей.Отбор.ИдентификаторЗаписи.Установить(Выборка.ИдентификаторЗаписи); + НаборЗаписей.Записать(Истина); + КонецЦикла; + // АПК: 1328-вкл + +КонецПроцедуры + +Функция ДанныеЗаписиДляТехПоддержки(ИдентификаторФискальнойЗаписи) Экспорт + + // ++ Локализация + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ФискальныеОперации.ДокументОснование КАК ДокументОснование, + | ФискальныеОперации.ИдентификаторЗаписи КАК ИдентификаторЗаписи, + | ФискальныеОперации.Дата КАК Дата, + | ФискальныеОперации.Организация КАК Организация, + | ФискальныеОперации.ТорговыйОбъект КАК ТорговыйОбъект, + | ФискальныеОперации.ТипДокумента КАК ТипДокумента, + | ФискальныеОперации.ТипРасчета КАК ТипРасчета, + | ФискальныеОперации.НомерЧекаККМ КАК НомерЧекаККМ, + | ФискальныеОперации.НомерСменыККМ КАК НомерСменыККМ, + | ФискальныеОперации.ФискальныйПризнак КАК ФискальныйПризнак, + | ФискальныеОперации.Сумма КАК Сумма, + | ФискальныеОперации.ОплатаНаличные КАК ОплатаНаличные, + | ФискальныеОперации.ОплатаЭлектронно КАК ОплатаЭлектронно, + | ФискальныеОперации.ОплатаПостоплата КАК ОплатаПостоплата, + | ФискальныеОперации.ОплатаПредоплата КАК ОплатаПредоплата, + | ФискальныеОперации.ОплатаВстречноеПредоставление КАК ОплатаВстречноеПредоставление, + | ФискальныеОперации.АдресСайтаПроверки КАК АдресСайтаПроверки, + | ФискальныеОперации.ЗаводскойНомерФН КАК ЗаводскойНомерФН, + | ФискальныеОперации.РегистрационныйНомерККТ КАК РегистрационныйНомерККТ, + | ФискальныеОперации.ДополнительныйРеквизит КАК ДополнительныйРеквизит, + | ФискальныеОперации.КорректируемыйДокумент КАК КорректируемыйДокумент, + | ФискальныеОперации.ДанныеXML КАК ДанныеXML, + | ФискальныеОперации.СубъектПерсональныхДанных КАК СубъектПерсональныхДанных, + | ФискальныеОперации.ЕдиныйЧек КАК ЕдиныйЧек, + | ФискальныеОперации.ИдентификаторОплатыПлатежнойСистемы КАК ИдентификаторОплатыПлатежнойСистемы, + | ФискальныеОперации.ТипПлатежнойСистемы КАК ТипПлатежнойСистемы, + | ОперацииПроверкиКМ.ИдентификаторСессии КАК ИдентификаторСессии, + | ОперацииПроверкиКМ.ИдентификаторЗапроса КАК ИдентификаторЗапроса, + | ОперацииПроверкиКМ.ИдентификаторФискальнойОперации КАК ИдентификаторФискальнойОперации, + | ОперацииПроверкиКМ.ГодМесяц КАК ГодМесяц, + | ОперацииПроверкиКМ.ЗапросКодаМаркировки КАК ЗапросКодаМаркировки, + | ОперацииПроверкиКМ.РезультатПроверкиКМНаККТ КАК РезультатПроверкиКМНаККТ, + | ОперацииПроверкиКМ.РезультатПроверкиКМНаСервере КАК РезультатПроверкиКМНаСервере, + | ОперацииПроверкиКМ.РезультатЗапросаРазрешения КАК РезультатЗапросаРазрешения, + | ОперацииПроверкиКМ.ФлагиПроверкиОИСМ КАК ФлагиПроверкиОИСМ, + | ОперацииПроверкиКМ.ПокупкаПодтверждена КАК ПокупкаПодтверждена, + | ОперацииПроверкиКМ.Наименование КАК Наименование, + | ОперацииПроверкиКМ.ИдентификаторЗапросаРазрешения КАК ИдентификаторЗапросаРазрешения, + | ОперацииПроверкиКМ.ВремяЗапросаРазрешения КАК ВремяЗапросаРазрешения, + | ОперацииПроверкиКМ.КодОтветаРазрешения КАК КодОтветаРазрешения, + | ОперацииПроверкиКМ.Дата КАК Дата1, + | ОперацииПроверкиКМ.Результат КАК Результат, + | ОперацииПроверкиКМ.КодМаркировки КАК КодМаркировки, + | ОперацииПроверкиКМ.КодМаркировкиПредставление КАК КодМаркировкиПредставление, + | ОперацииПроверкиКМ.Штрихкод КАК Штрихкод, + | ОперацииПроверкиКМ.ТекстЗапросаРазрешения КАК ТекстЗапросаРазрешения + |ИЗ + | РегистрСведений.ФискальныеОперации КАК ФискальныеОперации + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОперацииПроверкиКМ КАК ОперацииПроверкиКМ + | ПО ФискальныеОперации.ИдентификаторЗаписи = ОперацииПроверкиКМ.ИдентификаторФискальнойОперации + |ГДЕ + | ФискальныеОперации.ИдентификаторЗаписи = &ИдентификаторЗаписи"; + + Запрос.УстановитьПараметр("ИдентификаторЗаписи", ИдентификаторФискальнойЗаписи); + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + + МассивХранилищФискальныеЗаписи = Новый Массив(); + РезультатФискальнаяЗапись = ОбщегоНазначенияБПО.СтруктураИзМетаданныхРегистраСведений( + Метаданные.РегистрыСведений.ФискальныеОперации, МассивХранилищФискальныеЗаписи); + МассивХранилищОперацииПроверкиКМ = Новый Массив(); + РезультатПроверкаКМ = ОбщегоНазначенияБПО.СтруктураИзМетаданныхРегистраСведений( + Метаданные.РегистрыСведений.ОперацииПроверкиКМ, МассивХранилищОперацииПроверкиКМ); + ПерваяСтрока = Истина; + Пока Выборка.Следующий() Цикл + Если ПерваяСтрока Тогда + ЗаполнитьЗначенияСвойств(РезультатФискальнаяЗапись, Выборка); + Для Каждого Имя Из МассивХранилищФискальныеЗаписи Цикл + РезультатФискальнаяЗапись.Вставить(Имя, Выборка[Имя].Получить()); + КонецЦикла; + РезультатФискальнаяЗапись.Вставить("ОперацииПроверкиКМ", Новый Массив()); + ПерваяСтрока = Ложь; + КонецЕсли; + Если ЗначениеЗаполнено(Выборка.ИдентификаторЗапроса) Тогда + ЗаполнитьЗначенияСвойств(РезультатПроверкаКМ, Выборка); + Для Каждого Имя Из МассивХранилищОперацииПроверкиКМ Цикл + РезультатПроверкаКМ.Вставить(Имя, Выборка[Имя].Получить()); + КонецЦикла; + РезультатФискальнаяЗапись.ОперацииПроверкиКМ.Добавить(РезультатПроверкаКМ); + КонецЕсли; + КонецЦикла; + + Возврат РезультатФискальнаяЗапись; + // -- Локализация + +КонецФункции + + +#КонецОбласти + +#КонецЕсли + diff --git a/InformationRegisters/ФискальныеОперации/Forms/ФормаЗаписи.xml b/InformationRegisters/ФискальныеОперации/Forms/ФормаЗаписи.xml new file mode 100644 index 0000000..c136fc7 --- /dev/null +++ b/InformationRegisters/ФискальныеОперации/Forms/ФормаЗаписи.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаЗаписи + + + ru + Форма записи + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/InformationRegisters/ФискальныеОперации/Forms/ФормаЗаписи/Ext/Form.xml b/InformationRegisters/ФискальныеОперации/Forms/ФормаЗаписи/Ext/Form.xml new file mode 100644 index 0000000..896483a --- /dev/null +++ b/InformationRegisters/ФискальныеОперации/Forms/ФормаЗаписи/Ext/Form.xml @@ -0,0 +1,871 @@ + +
+ LockOwner + Vertical + + Abort + Cancel + ChangeHistory + Copy + CustomizeForm + Delete + Help + No + OK + Reread + RestoreValues + Retry + SaveValues + Write + WriteAndClose + Yes + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительно</v8:content> + </v8:item> + + + + ru + Дополнительно + + + + + + + + + + + + + + ПослеЗаписиНаСервере + ПриЧтенииНаСервере + ПриОткрытии + ПриСозданииНаСервере + ОбработкаНавигационнойСсылки + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + HorizontalIfPossible + Usual + None + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа документы</v8:content> + </v8:item> + + Vertical + Usual + None + false + + + + Запись.КорректируемыйДокумент + true + + + + + Запись.ДокументОснование + true + true + + + + + ЭлектроннаяПочта + false + true + + + + АдресПочтыНажатие + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Страницы</v8:content> + </v8:item> + + TabsOnTop + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основное</v8:content> + </v8:item> + + Vertical + false + + + + Запись.Дата + true + false + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа документ</v8:content> + </v8:item> + + AlwaysHorizontal + Usual + None + false + Use + + + + Запись.ТипДокумента + true + true + + + + + Запись.ТипРасчета + true + false + true + + + + + + + Запись.ФискальныйПризнак + true + false + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа ККТ</v8:content> + </v8:item> + + HorizontalIfPossible + Usual + None + false + Use + + + + Запись.НомерСменыККМ + true + false + true + + + + + Запись.НомерЧекаККМ + true + false + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа ФН</v8:content> + </v8:item> + + AlwaysHorizontal + Usual + None + false + + + + Запись.ЗаводскойНомерФН + true + false + + + + + Запись.РегистрационныйНомерККТ + true + false + + + + + + + Запись.Организация + true + false + + + + + Запись.ТорговыйОбъект + true + false + + + + + Запись.АдресСайтаПроверки + true + false + + + + + Запись.ДополнительныйРеквизит + true + false + + + + + Запись.Сумма + true + false + + + + + Запись.ОплатаНаличные + true + + + + + Запись.ОплатаЭлектронно + true + + + + + Запись.ОплатаПостоплата + true + + + + + Запись.ОплатаПредоплата + true + + + + + Запись.ОплатаВстречноеПредоставление + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Представление</v8:content> + </v8:item> + + Vertical + false + + + + ТабличныйДокумент + None + + + + + + + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>XML</v8:content> + </v8:item> + + AlwaysHorizontal + false + + + + ТекстXML + None + + + + + + + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проверка КМ</v8:content> + </v8:item> + + AlwaysHorizontal + true + + + + Cell + true + СписокПроверкиКМ + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + + + + СписокПроверкиКМ + SearchStringRepresentation + + + + + + + СписокПроверкиКМ + ViewStatusRepresentation + + + + + + + СписокПроверкиКМ + SearchControl + + + + + + СписокПроверкиКМПриПолученииДанныхНаСервере + + + + СписокПроверкиКМ.Дата + + + + + СписокПроверкиКМ.Штрихкод + + + + + СписокПроверкиКМ.Номенклатура + + + + + СписокПроверкиКМ.РезультатПроверкиОИСМ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат</v8:content> + </v8:item> + + + + + + СписокПроверкиКМ.ТипКода + + + + + СписокПроверкиКМ.КодМаркировкиПредставление + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код маркировки</v8:content> + </v8:item> + + + + + + СписокПроверкиКМ.Результат + false + + + + + СписокПроверкиКМ.ОтказОтПокупки + + + + + СписокПроверкиКМ.КодМаркировки + false + + + + + СписокПроверкиКМ.ВремяЗапросаРазрешения + + + + + СписокПроверкиКМ.КодОтветаРазрешения + + + + +
+
+
+
+
+
+ + + + cfg:InformationRegisterRecordManager.ФискальныеОперации + + true + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текст XML</v8:content> + </v8:item> + + + d5p1:TextDocument + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текст</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Табличный документ</v8:content> + </v8:item> + + + mxl:SpreadsheetDocument + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Электронная почта</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Список проверки КМ</v8:content> + </v8:item> + + + cfg:DynamicList + + + СписокПроверкиКМ.КодМаркировки + СписокПроверкиКМ.ФлагиПроверкиОИСМ + + + true + false + ВЫБРАТЬ + "" КАК ИдентификаторСессии, + "" КАК ИдентификаторЗапроса, + "" КАК ИдентификаторФискальнойОперации, + "" КАК ГодМесяц, + "" КАК ЗапросКодаМаркировки, + "" КАК РезультатПроверкиКМНаККТ, + "" КАК РезультатПроверкиКМНаСервере, + "" КАК ФлагиПроверкиОИСМ, + "" КАК Дата, + "" КАК Результат, + "" КАК КодМаркировки, + "" КАК ОтказОтПокупки, + "" КАК Номенклатура, + "" КАК РезультатПроверкиОИСМ, + "" КАК Штрихкод, + "" КАК КодМаркировкиПредставление, + "" КАК ТипКода, + "" КАК КодОтветаРазрешения, + "" КАК ВремяЗапросаРазрешения + + + ИдентификаторСессии + ИдентификаторСессии + + + ru + Идентификатор сессии + + + + + ИдентификаторЗапроса + ИдентификаторЗапроса + + + ru + Идентификатор запроса + + + + + ИдентификаторФискальнойОперации + ИдентификаторФискальнойОперации + + + ru + Идентификатор фискальной операции + + + + + ГодМесяц + ГодМесяц + + + ru + Год месяц + + + + + РезультатПроверкиКМНаСервере + РезультатПроверкиКМНаСервере + + + ru + Результат проверки КМНа сервере + + + + + РезультатПроверкиКМНаККТ + РезультатПроверкиКМНаККТ + + + ru + Результат проверки КМНа ККТ + + + + + ЗапросКодаМаркировки + ЗапросКодаМаркировки + + + ru + Запрос кода маркировки + + + + + ФлагиПроверкиОИСМ + ФлагиПроверкиОИСМ + + + ru + Флаги проверки ОИСМ + + + + + КодОтветаРазрешения + КодОтветаРазрешения + + + ru + Код ответа разрешения + + + + + Дата + Дата + + + ru + Дата + + + + + Результат + Результат + + + ru + Результат + + + + + КодМаркировки + КодМаркировки + + + ru + Код маркировки + + + + + ВремяЗапросаРазрешения + ВремяЗапросаРазрешения + + + ru + Время запроса разрешения + + + + + ОтказОтПокупки + ОтказОтПокупки + + + ru + Отказ от покупки + + + + + Номенклатура + Номенклатура + + + ru + Номенклатура + + + + + РезультатПроверкиОИСМ + РезультатПроверкиОИСМ + + + ru + Результат проверки ОИСМ + + + + + КодМаркировкиПредставление + КодМаркировкиПредставление + + + ru + Код маркировки представление + + + + + Штрихкод + Штрихкод + + + ru + Штрихкод + + + + + ТипКода + ТипКода + + + ru + Тип кода + + + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сохранить в файл PDF</v8:content> + </v8:item> + + + + ru + Сохранить PDF + + + СохранитьPDF + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отправить на электронную почту</v8:content> + </v8:item> + + + + ru + Отправить на почту + + + ОтправитьНаПочту + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Печать копии чека</v8:content> + </v8:item> + + + + ru + Печать копии чека + + + ПечатьКопииЧека + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сообщение в тех.поддержку</v8:content> + </v8:item> + + + + ru + Сообщение в тех поддержку + + + СообщениеВТехПоддержку + + +
\ No newline at end of file diff --git a/InformationRegisters/ФискальныеОперации/Forms/ФормаЗаписи/Ext/Form/Module.bsl b/InformationRegisters/ФискальныеОперации/Forms/ФормаЗаписи/Ext/Form/Module.bsl new file mode 100644 index 0000000..a027c0f --- /dev/null +++ b/InformationRegisters/ФискальныеОперации/Forms/ФормаЗаписи/Ext/Form/Module.bsl @@ -0,0 +1,358 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Реквизиты = ОборудованиеЧекопечатающиеУстройства.ДанныеФискальнойОперации(Запись.ДокументОснование, Запись.ИдентификаторЗаписи); + Если Реквизиты <> Неопределено Тогда + ТекстСообщенияXML = Реквизиты.ДанныеXML.Получить(); + КонецЕсли; + + Элементы.КорректируемыйДокумент.Видимость = Не ПустаяСтрока(Запись.КорректируемыйДокумент); + + Если ЗначениеЗаполнено(ТекстСообщенияXML) + И (Реквизиты.ТипДокумента = Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧек + Или Реквизиты.ТипДокумента = Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧекКоррекции) + Тогда + Элементы.Страницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + Элементы.Дополнительно.Видимость = Истина; + + ПараметрыФорматирования = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Истина, Истина, " "); + Попытка + ТекстXML.УстановитьТекст(ФорматироватьXMLСПараметрами(ТекстСообщенияXML, ПараметрыФорматирования)); + ОбщиеПараметры = ОборудованиеЧекопечатающиеУстройства.ЗагрузитьДанныеФискализацииИзXML(ТекстСообщенияXML); + Исключение + ОбщегоНазначенияБПО.СообщитьПользователю(НСтр("ru = 'Ошибка загрузки данных.'")); + Возврат; + КонецПопытки; + + ОбщиеПараметры.ДатаВремя = Реквизиты.Дата; + Если ЗначениеЗаполнено(ОбщиеПараметры.ПокупательEmail) Тогда + ЭлектроннаяПочта = ОбщиеПараметры.ПокупательEmail; + Иначе + ЭлектроннаяПочта = ПустаяСтрокаПочты(); + КонецЕсли; + + ШиринаЧека = 42; + Шаблон = ШаблоныФискальныхДокументов.ШаблонКассовыйЧек(ШиринаЧека, ОбщиеПараметры, Реквизиты); + ШаблоныФискальныхДокументов.СформироватьДокументПоШаблону(Шаблон); + ТабличныйДокумент = ШаблоныФискальныхДокументов.ВывестиКакТабличныйДокумент(Шаблон); + + Иначе + Элементы.Представление2.Видимость = Ложь; + Элементы.XML.Видимость = Ложь; + Элементы.Дополнительно.Видимость = Ложь; + КонецЕсли; + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + // ++ Локализация + СписокПроверкиКМ.ТекстЗапроса = ТекстЗапросаСписокОперацийКМ(); + СписокПроверкиКМ.ОсновнаяТаблица = "РегистрСведений.ОперацииПроверкиКМ"; + СписокПроверкиКМ.ДинамическоеСчитываниеДанных = Истина; + СписокПроверкиКМ.Параметры.УстановитьЗначениеПараметра("ИдентификаторФискальнойОперации", Запись.ИдентификаторЗаписи); + ВиртуальныеПоля = Новый Массив(); + ВиртуальныеПоля.Добавить("РезультатПроверкиОИСМ"); + ВиртуальныеПоля.Добавить("ТипКода"); + СписокПроверкиКМ.УстановитьОграниченияИспользованияВГруппировке(ВиртуальныеПоля); + СписокПроверкиКМ.УстановитьОграниченияИспользованияВОтборе(ВиртуальныеПоля); + СписокПроверкиКМ.УстановитьОграниченияИспользованияВПорядке(ВиртуальныеПоля); + // -- Локализация + Иначе + Элементы.ПроверкаКМ.Видимость = Ложь; + КонецЕсли; + + Элементы.ФормаСообщениеВТехПоддержку.Видимость = ОбщегоНазначенияБПО.ИспользуетсяСообщенияВСлужбуТехническойПоддержки() + И ОбщегоНазначенияБПОСлужебныйВызовСервера.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярФискальныеОперацииПриСозданииНаСервере(Запись, ЭтаФорма, Отказ, Параметры, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяСообщенияВСлужбуТехническойПоддержки() Тогда + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиБПОКлиент"); + Элементы.ФормаСообщениеВТехПоддержку.Видимость + = МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ОтправлятьСообщенияВТехПоддержку(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // Вызов БСП + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначенияБПО.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + // Конец Вызов БСП + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + // Вызов БСП + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначенияБПО.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + // Конец Вызов БСП + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаНавигационнойСсылки(НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + МенеджерОборудованияКлиентПереопределяемый.ФормаЗаписиФискальныеОперацииОбработкаНавигационнойСсылки( + Запись, ЭтаФорма, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаСервереБезКонтекста +Процедура ОтправитьЭлектронныйЧекНаСервере(ПараметрыЧека, ТекстСообщения, ПокупательEmail, ПокупательНомер) + + МодульРассылкаЭлектронныхЧеков = ОбщегоНазначенияБПО.ОбщийМодуль("РассылкаЭлектронныхЧеков"); + МодульРассылкаЭлектронныхЧеков.ОтправитьЭлектронныйЧек( + ПараметрыЧека, + ТекстСообщения, + ПокупательEmail, + ПокупательНомер); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьНаПочту(Команда) + + Если ЭлектроннаяПочта = ПустаяСтрокаПочты() Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru = 'Электронная почта не указана.'")); + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРассылкаЭлектронныхЧеков() Тогда + ПараметрыЧека = Новый Структура(); + ПараметрыЧека.Вставить("НомерЧекаККТ", Запись.НомерЧекаККМ); + ПараметрыЧека.Вставить("ИдентификаторФискальнойЗаписи", Запись.ИдентификаторЗаписи); + ТекстСообщения = ""; + ОтправитьЭлектронныйЧекНаСервере( + ПараметрыЧека, + ТекстСообщения, + ЭлектроннаяПочта, + ""); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru = 'Электронный чек отправлен.'")); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьPDF(Команда) + + // АПК: 1348-выкл БСП может не использоваться + Оповещение = Новый ОписаниеОповещения("СохранитьPDF_ДиалогВыбораФайла", ЭтотОбъект); + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + Диалог.Расширение = "pdf"; + Диалог.Фильтр = "Файлы PDF (*.pdf)|*.pdf|Все файлы|*.*"; + Диалог.Показать(Оповещение); + // АПК: 1348-вкл + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьPDF_ДиалогВыбораФайла(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ИмяФайла = Результат[0]; + ТабличныйДокумент.НачатьЗапись(Новый ОписаниеОповещения("СохранитьPDF_Завершение", ЭтотОбъект), ИмяФайла, ТипФайлаТабличногоДокумента.PDF); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьPDF_Завершение(Результат, ДополнительныеПараметры) Экспорт + + Если Не Результат Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru = 'Не удалось записать файл.'")); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПечатьКопииЧека(Команда) + + ПараметрыОперации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПечатьКопииЧека(); + ПараметрыОперации.ФискальныйПризнак = Запись.ФискальныйПризнак; + ПараметрыОперации.Аппаратно = Ложь; + ПараметрыОперации.НомерЧека = Запись.НомерЧекаККМ; + + Доступность = Ложь; + + ОповещениеПриЗавершении = Новый ОписаниеОповещения("ПечатьКопииЧека_Завершение", ЭтотОбъект); + ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьПечатьКопииЧека(ОповещениеПриЗавершении, УникальныйИдентификатор, Неопределено, ПараметрыОперации); + +КонецПроцедуры + +&НаКлиенте +Процедура ПечатьКопииЧека_Завершение(РезультатВыполнения, Параметры) Экспорт + + Доступность = Истина; + + ОчиститьСообщения(); + + Если НЕ РезультатВыполнения.Результат Тогда + ТекстСообщения = РезультатВыполнения.ОписаниеОшибки; + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +&НаКлиенте +Процедура АдресПочтыНажатие(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Строка = ?(ЭлектроннаяПочта = ПустаяСтрокаПочты(), "", ЭлектроннаяПочта);; + Оповещение = Новый ОписаниеОповещения("АдресПочтыНажатиеЗавершение", ЭтотОбъект); + ПоказатьВводСтроки(Оповещение, Строка, НСтр("ru = 'Электронная почта для отправки'")); + +КонецПроцедуры + +&НаКлиенте +Процедура АдресПочтыНажатиеЗавершение(Строка, ДополнительныеПараметры) Экспорт + + Если Строка = Неопределено Тогда + ЭлектроннаяПочта = ЭлектроннаяПочта; + Иначе + Если ПустаяСтрока(Строка) Тогда + ЭлектроннаяПочта = ПустаяСтрокаПочты(); + Иначе + ЭлектроннаяПочта = Строка; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Форматирует текст сообщения в формате XML +// +&НаСервере +Функция ФорматироватьXMLСПараметрами(ТекстСообщенияXML, ПараметрыФорматирования) + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ТекстСообщенияXML); + + ПостроительDOM = Новый ПостроительDOM; + ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(ПараметрыФорматирования); + + ЗаписьDOM = Новый ЗаписьDOM; + ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML); + + Возврат ЗаписьXML.Закрыть(); + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПустаяСтрокаПочты() + + Возврат НСтр("ru = '<не задано>'"); + +КонецФункции + +&НаСервереБезКонтекста +Процедура СписокПроверкиКМПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) + + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + МодульМенеджерОборудованияМаркировка.ПриПолученииДанныхСпискаОперацийПроверкиКМ(ИмяЭлемента, Настройки, Строки); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СведенияДляТехподдержки(ИдентификаторФискальнойЗаписи) + + Возврат РегистрыСведений.ФискальныеОперации.ДанныеЗаписиДляТехПоддержки(ИдентификаторФискальнойЗаписи); + +КонецФункции + +&НаКлиенте +Процедура СообщениеВТехПоддержку(Команда) + + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиБПОКлиент"); + ПараметрыСообщения = МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ПараметрыОтправкиСообщенияОбОшибке(); + ПараметрыСообщения.ДополнительныеДанные = СведенияДляТехподдержки(Запись.ИдентификаторЗаписи); + + ПараметрыСообщения.ТекстОшибки = НСтр("ru = 'Информация о фискальной операции для тех.поддержки'"); + ОписаниеОповещения = Новый ОписаниеОповещения("СообщениеВТехническуюПоддержкуЗавершение", ЭтотОбъект); + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.НачатьОтправкуСообщенияОбОшибке(ОписаниеОповещения, ПараметрыСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура СообщениеВТехническуюПоддержкуЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Не ПустаяСтрока(Результат.КодОшибки) Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(Результат.СообщениеОбОшибке); + КонецЕсли; + +КонецПроцедуры + +// ++ Локализация + +&НаСервере +Функция ТекстЗапросаСписокОперацийКМ() + + ТекстЗапроса = "ВЫБРАТЬ + | РегистрСведенийОперацииПроверкиКМ.ИдентификаторСессии КАК ИдентификаторСессии, + | РегистрСведенийОперацииПроверкиКМ.ИдентификаторЗапроса КАК ИдентификаторЗапроса, + | РегистрСведенийОперацииПроверкиКМ.ИдентификаторФискальнойОперации КАК ИдентификаторФискальнойОперации, + | РегистрСведенийОперацииПроверкиКМ.ГодМесяц КАК ГодМесяц, + | РегистрСведенийОперацииПроверкиКМ.ЗапросКодаМаркировки КАК ЗапросКодаМаркировки, + | РегистрСведенийОперацииПроверкиКМ.РезультатПроверкиКМНаККТ КАК РезультатПроверкиКМНаККТ, + | РегистрСведенийОперацииПроверкиКМ.РезультатПроверкиКМНаСервере КАК РезультатПроверкиКМНаСервере, + | РегистрСведенийОперацииПроверкиКМ.ФлагиПроверкиОИСМ КАК ФлагиПроверкиОИСМ, + | РегистрСведенийОперацииПроверкиКМ.Дата КАК Дата, + | РегистрСведенийОперацииПроверкиКМ.Результат КАК Результат, + | РегистрСведенийОперацииПроверкиКМ.КодМаркировки КАК КодМаркировки, + | НЕ РегистрСведенийОперацииПроверкиКМ.ПокупкаПодтверждена КАК ОтказОтПокупки, + | РегистрСведенийОперацииПроверкиКМ.Наименование КАК Номенклатура, + | ВЫРАЗИТЬ("""" КАК СТРОКА(4)) КАК РезультатПроверкиОИСМ, + | РегистрСведенийОперацииПроверкиКМ.Штрихкод КАК Штрихкод, + | РегистрСведенийОперацииПроверкиКМ.КодМаркировкиПредставление КАК КодМаркировкиПредставление, + | ВЫРАЗИТЬ(NULL КАК Перечисление.ТипыИдентификаторовТовараККТ) КАК ТипКода, + | РегистрСведенийОперацииПроверкиКМ.КодОтветаРазрешения КАК КодОтветаРазрешения, + | РегистрСведенийОперацииПроверкиКМ.ВремяЗапросаРазрешения КАК ВремяЗапросаРазрешения + |ИЗ + | РегистрСведений.ОперацииПроверкиКМ КАК РегистрСведенийОперацииПроверкиКМ + |ГДЕ + | РегистрСведенийОперацииПроверкиКМ.ИдентификаторФискальнойОперации = &ИдентификаторФискальнойОперации"; + Возврат ТекстЗапроса; + +КонецФункции // ТекстЗапросаСписокОперацийКМ() + +// -- Локализация + + +#КонецОбласти \ No newline at end of file diff --git a/InformationRegisters/ФискальныеОперации/Forms/ФормаСписка.xml b/InformationRegisters/ФискальныеОперации/Forms/ФормаСписка.xml new file mode 100644 index 0000000..264d410 --- /dev/null +++ b/InformationRegisters/ФискальныеОперации/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/InformationRegisters/ФискальныеОперации/Forms/ФормаСписка/Ext/Form.xml b/InformationRegisters/ФискальныеОперации/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..975fd21 --- /dev/null +++ b/InformationRegisters/ФискальныеОперации/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,187 @@ + +
+ DontBlock + Vertical + + false + + + ПриСозданииНаСервере + + + + List + None + true + false + SingleRow + Cell + ExpandTopLevel + true + AsFile + Список + Список.DefaultPicture + + Copy + Create + + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + true + + + + + false + + Список + SearchStringRepresentation + + + + + + false + + Список + ViewStatusRepresentation + + + + + + false + + Список + SearchControl + + + + + + + Список.ДокументОснование + + + + + Список.Дата + true + true + + + + + Список.ТипДокумента + true + 25 + false + + + + + Список.ТипРасчета + true + true + 35 + false + + + + + Список.НомерЧекаККМ + true + true + 10 + false + 10 + + + + + Список.НомерСменыККМ + true + true + 10 + false + 10 + + + + + Список.Сумма + true + true + 15 + false + + + + + Список.ФискальныйПризнак + true + true + + + + + Список.ДополнительныйРеквизит + true + + + + +
+
+ + + + cfg:DynamicList + + true + + Список.ДокументОснование + + + false + true + InformationRegister.ФискальныеОперации + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + + Дата + Asc + + + НомерЧекаККМ + Asc + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + +
\ No newline at end of file diff --git a/InformationRegisters/ФискальныеОперации/Forms/ФормаСписка/Ext/Form/Module.bsl b/InformationRegisters/ФискальныеОперации/Forms/ФормаСписка/Ext/Form/Module.bsl new file mode 100644 index 0000000..f42b7c6 --- /dev/null +++ b/InformationRegisters/ФискальныеОперации/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,15 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + МенеджерОборудованияВызовСервераПереопределяемый.СписокФискальныеОперацииПриСозданииНаСервере(ЭтаФорма, Отказ, Параметры, СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти diff --git a/InformationRegisters/ЦеныНоменклатуры.xml b/InformationRegisters/ЦеныНоменклатуры.xml new file mode 100644 index 0000000..91c74f9 --- /dev/null +++ b/InformationRegisters/ЦеныНоменклатуры.xml @@ -0,0 +1,156 @@ + + + + + + 7e3d86e0-eac7-42fd-8375-84e3633d5e1e + dfbdaf5a-0ac0-4cc5-b239-21695b9158ff + + + d70af85f-8c1d-46cf-813c-85b3a4162138 + 793f2ba5-df98-48f4-a3cf-c0165c91b896 + + + e74375a2-d5f3-4a57-a274-1b05f085a684 + 4db2f787-db48-4e8a-9167-26b4b55de3b6 + + + 2e8e3839-c540-4f27-ba18-3092af99a86d + 02a1c225-e59f-4a7e-b92a-4b47bb2e4a64 + + + 389bcfa1-a1fb-4555-8cfe-f2ab3ad856c2 + 8220065f-d025-4bf3-8bf3-41ca638dbea8 + + + ea64034c-8b8b-4d10-a09d-9e6f3060c882 + 85cf4426-806e-4bd6-8a24-096dab00eb17 + + + 7c6395ef-9315-47af-a08d-4d9ca83e89c8 + 7e03c784-64aa-4496-8924-93fc23e69a80 + + + + ЦеныНоменклатуры + + + ru + Цены номенклатуры + + + + true + InDialog + + + + + Nonperiodical + Independent + false + false + Managed + DontUse + false + false + + + + + + DontUse + false + false + + + + + Цена + + + ru + Цена + + + + + xs:decimal + + 10 + 0 + Any + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ном + + + ru + Ном + + + + + cfg:CatalogRef.КарточкиМП + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + Use + TransformValues + + + + + \ No newline at end of file diff --git a/InformationRegisters/ШтрихкодыУпаковок.xml b/InformationRegisters/ШтрихкодыУпаковок.xml new file mode 100644 index 0000000..c9e187c --- /dev/null +++ b/InformationRegisters/ШтрихкодыУпаковок.xml @@ -0,0 +1,205 @@ + + + + + + c615245d-720b-4106-935f-38350b637200 + a4822ca1-43be-4377-926c-268878633c11 + + + 36914b19-2d80-4ab3-905a-f80da35223b9 + 0cf7571b-05e1-4753-8458-366a17f5273a + + + 9b697eb2-2b1b-4ac8-884e-ece953f08438 + 1db61c6c-636e-4dc0-a61e-2418a6dc1095 + + + 7b47c284-4ad7-4fe9-9bf6-47d0138aed8e + 88e2ed59-4977-422d-bc5f-5e35040c8416 + + + 78792aa9-86db-45c3-b8bf-4aa522a8d607 + 1a23f201-bf8f-424b-b9e8-bc7e261418d6 + + + 72442d90-460b-4b5a-b09a-af01d724c494 + 96e441ac-394e-44a7-9369-ddf7dfc893bd + + + 83ef8fdf-088a-4edc-b540-2d777c5c226e + 05c18988-a566-4b93-a0c3-e01fc515a624 + + + + ШтрихкодыУпаковок + + + ru + Штрихкоды упаковок + + + + true + InDialog + InformationRegister.ШтрихкодыУпаковок.Form.ФормаЗаписи + InformationRegister.ШтрихкодыУпаковок.Form.ФормаСписка + + + Nonperiodical + Independent + false + false + Managed + DontUse + false + false + + + + + + DontUse + false + false + + + + + Количество + + + ru + Количество + + + + + xs:decimal + + 10 + 0 + Any + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Номенклатура + + + ru + Номенклатура + + + + + cfg:AnyIBRef + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + Use + TransformValues + + + + + Штрихкод + + + ru + Штрихкод + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + Index + Use + Use + TransformValues + + +
ФормаЗаписи
+
ФормаСписка
+
+
+
\ No newline at end of file diff --git a/InformationRegisters/ШтрихкодыУпаковок/Forms/ФормаЗаписи.xml b/InformationRegisters/ШтрихкодыУпаковок/Forms/ФормаЗаписи.xml new file mode 100644 index 0000000..30dd113 --- /dev/null +++ b/InformationRegisters/ШтрихкодыУпаковок/Forms/ФормаЗаписи.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаЗаписи + + + ru + Форма записи + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/InformationRegisters/ШтрихкодыУпаковок/Forms/ФормаЗаписи/Ext/Form.xml b/InformationRegisters/ШтрихкодыУпаковок/Forms/ФормаЗаписи/Ext/Form.xml new file mode 100644 index 0000000..1c81182 --- /dev/null +++ b/InformationRegisters/ШтрихкодыУпаковок/Forms/ФормаЗаписи/Ext/Form.xml @@ -0,0 +1,41 @@ + +
+ LockOwner + Vertical + + + + Запись.Номенклатура + true + + + + + 1/0:3bfceead-25ee-4e6a-8532-748e421263c4 + true + + + + + Запись.Количество + true + + + + + Запись.Штрихкод + true + + + + + + + + cfg:InformationRegisterRecordManager.ШтрихкодыУпаковок + + true + true + + + \ No newline at end of file diff --git a/InformationRegisters/ШтрихкодыУпаковок/Forms/ФормаСписка.xml b/InformationRegisters/ШтрихкодыУпаковок/Forms/ФормаСписка.xml new file mode 100644 index 0000000..6a04066 --- /dev/null +++ b/InformationRegisters/ШтрихкодыУпаковок/Forms/ФормаСписка.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + +
+
\ No newline at end of file diff --git a/InformationRegisters/ШтрихкодыУпаковок/Forms/ФормаСписка/Ext/Form.xml b/InformationRegisters/ШтрихкодыУпаковок/Forms/ФормаСписка/Ext/Form.xml new file mode 100644 index 0000000..e007849 --- /dev/null +++ b/InformationRegisters/ШтрихкодыУпаковок/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,129 @@ + +
+ DontBlock + Vertical + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + WeakSeparation + false + + + + List + None + true + Cell + ExpandTopLevel + true + Список + Список.DefaultPicture + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + + + + Список.Номенклатура + true + + + + + Список.Штрихкод + true + + + + + + + Список.Количество + true + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + InformationRegister.ШтрихкодыУпаковок + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git a/Languages/Номенклатура.xml b/Languages/Номенклатура.xml new file mode 100644 index 0000000..dec4201 --- /dev/null +++ b/Languages/Номенклатура.xml @@ -0,0 +1,16 @@ + + + + + Номенклатура + + + ru + Номенклатура + + + + ru1 + + + \ No newline at end of file diff --git a/Languages/Русский.xml b/Languages/Русский.xml new file mode 100644 index 0000000..7831c39 --- /dev/null +++ b/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/Roles/АдминистраторСистемы.xml b/Roles/АдминистраторСистемы.xml new file mode 100644 index 0000000..53f6c08 --- /dev/null +++ b/Roles/АдминистраторСистемы.xml @@ -0,0 +1,15 @@ + + + + + АдминистраторСистемы + + + ru + Администратор системы + + + + + + \ No newline at end of file diff --git a/Roles/АдминистраторСистемы/Ext/Rights.xml b/Roles/АдминистраторСистемы/Ext/Rights.xml new file mode 100644 index 0000000..5cdb5a9 --- /dev/null +++ b/Roles/АдминистраторСистемы/Ext/Rights.xml @@ -0,0 +1,734 @@ + + + false + true + false + + Catalog.ПодключаемоеОборудование.Attribute.СерийныйНомер + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.АвтоматическаяФискализация + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.ТипПодключения + + View + false + + + Edit + false + + + + Configuration.МобильныйТСД + + Administration + true + + + DataAdministration + true + + + UpdateDataBaseConfiguration + true + + + ExclusiveMode + true + + + ActiveUsers + true + + + EventLog + true + + + ThinClient + true + + + WebClient + true + + + ThickClient + true + + + ExternalConnection + true + + + Automation + true + + + TechnicalSpecialistMode + true + + + CollaborationSystemInfoBaseRegistration + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + SaveUserData + true + + + ConfigurationExtensionsAdministration + true + + + Output + true + + + + Catalog.ДрайверыОборудования.Attribute.ИмяМакетаДрайвера + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.УстройствоИспользуется + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.Параметры + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.Attribute.ИдентификаторОбъекта + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.TabularSection.ОграничениеДоступа + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.TabularSection.ПараметрыРегистрации + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.Attribute.СнятСПоддержки + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.Организация + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.ДопустимоеРасхождениеФорматноЛогическогоКонтроля + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.ДрайверОборудования + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.TabularSection.ОграничениеДоступа.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.РабочиеМеста + + UpdateDataHistorySettings + true + + + + Catalog.РабочиеМеста.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.РабочиеМеста.Attribute.ИмяКомпьютера + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.Attribute.СерверныйРежим + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.Attribute.ВерсияДрайвера + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.ТипОборудования + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.СпособФорматноЛогическогоКонтроля + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.TabularSection.ПараметрыРегистрации.Attribute.ЗначениеПараметра + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.ТребуетсяПереустановка + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.Attribute.ЛокальныйРежим + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.ИспользуетсяФН36 + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.РабочееМесто + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование + + UpdateDataHistorySettings + true + + + + Catalog.ПодключаемоеОборудование.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.Attribute.СетевойРежим + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.Attribute.СпособПодключения + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования + + UpdateDataHistorySettings + true + + + + Catalog.ДрайверыОборудования.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.Attribute.ТребуетсяУстановка + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.TabularSection.ПараметрыРегистрации.Attribute.НаименованиеПараметра + + View + false + + + Edit + false + + + + Catalog.ДрайверыОборудования.Attribute.ТипОборудования + + View + false + + + Edit + false + + + \ No newline at end of file diff --git a/Roles/БазовыеПраваБПО.xml b/Roles/БазовыеПраваБПО.xml new file mode 100644 index 0000000..b296177 --- /dev/null +++ b/Roles/БазовыеПраваБПО.xml @@ -0,0 +1,15 @@ + + + + + БазовыеПраваБПО + + + ru + Базовые права БПО + + + + + + \ No newline at end of file diff --git a/Roles/БазовыеПраваБПО/Ext/Rights.xml b/Roles/БазовыеПраваБПО/Ext/Rights.xml new file mode 100644 index 0000000..fdff33b --- /dev/null +++ b/Roles/БазовыеПраваБПО/Ext/Rights.xml @@ -0,0 +1,283 @@ + + + false + true + false + + Catalog.ПодключаемоеОборудование.Command.ОткрытьПодключаемоеОборудование + + View + true + + + + CommonCommand.УправлениеФискальнымУстройством + + View + true + + + + Configuration.МобильныйТСД + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + + CommonCommand.ВыбратьРМТекущегоСеанса + + View + true + + + + CommonCommand.СверкаИтоговПоКартам + + View + true + + + + CommonForm.КодВидаНоменклатурнойКлассификации + + View + true + + + + Constant.ХранитьУспешныеОперацииРазрешения + + Read + true + + + View + true + + + + InformationRegister.ОшибкиПодтвержденияНСПК + + Read + true + + + View + true + + + + CommonForm.НастройкаРегистрацииККТ + + View + true + + + + Catalog.РабочиеМеста + + Read + true + + + View + true + + + InputByString + true + + + + Catalog.РабочиеМеста.StandardAttribute.PredefinedDataName + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.Predefined + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.Ref + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.Owner + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.Parent + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.Description + + Edit + false + + + + Catalog.РабочиеМеста.StandardAttribute.Code + + Edit + false + + + + Catalog.РабочиеМеста.Attribute.ИмяКомпьютера + + Edit + false + + + + SessionParameter.РабочееМестоКлиента + + Get + true + + + + CommonCommand.РегистрФискальныхОпераций + + View + true + + + + CommonForm.УправлениеФискальнымУстройством + + View + true + + + + Catalog.ПодключаемоеОборудование + + Read + true + + + View + true + + + InputByString + true + + + + CommonForm.ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО + + View + true + + + + Catalog.ДрайверыОборудования + + Read + true + + + View + true + + + InputByString + true + + + + Constant.СрокХраненияОперацийПроверкиКМ + + Read + true + + + View + true + + + + InformationRegister.ЗначенияЕМРЦ + + Read + true + + + View + true + + + + CommonForm.УправлениеЭквайринговымТерминалом + + View + true + + + + CommonForm.ПроверкаКонтрольнойМаркиБПО + + View + true + + + + CommonCommand.УправлениеЭквайринговымТерминалом + + View + true + + + \ No newline at end of file diff --git a/Roles/ВыполнениеСинхронизацииДанных.xml b/Roles/ВыполнениеСинхронизацииДанных.xml new file mode 100644 index 0000000..9c018be --- /dev/null +++ b/Roles/ВыполнениеСинхронизацииДанных.xml @@ -0,0 +1,15 @@ + + + + + ВыполнениеСинхронизацииДанных + + + ru + Выполнение синхронизации данных + + + + + + \ No newline at end of file diff --git a/Roles/ВыполнениеСинхронизацииДанных/Ext/Rights.xml b/Roles/ВыполнениеСинхронизацииДанных/Ext/Rights.xml new file mode 100644 index 0000000..d95b138 --- /dev/null +++ b/Roles/ВыполнениеСинхронизацииДанных/Ext/Rights.xml @@ -0,0 +1,33 @@ + + + false + true + false + + Configuration.МобильныйТСД + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + \ No newline at end of file diff --git a/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок.xml b/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок.xml new file mode 100644 index 0000000..4233a39 --- /dev/null +++ b/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок.xml @@ -0,0 +1,15 @@ + + + + + ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок + + + ru + Интерактивное открытие внешних отчетов и обработок + + + + + + \ No newline at end of file diff --git a/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Ext/Rights.xml b/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Ext/Rights.xml new file mode 100644 index 0000000..610b2ba --- /dev/null +++ b/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Ext/Rights.xml @@ -0,0 +1,37 @@ + + + false + true + false + + Configuration.МобильныйТСД + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + InteractiveOpenExtDataProcessors + true + + + InteractiveOpenExtReports + true + + + \ No newline at end of file diff --git a/Roles/ПолныеПрава.xml b/Roles/ПолныеПрава.xml new file mode 100644 index 0000000..54f351f --- /dev/null +++ b/Roles/ПолныеПрава.xml @@ -0,0 +1,15 @@ + + + + + ПолныеПрава + + + ru + Полные права + + + + + + \ No newline at end of file diff --git a/Roles/ПолныеПрава/Ext/Rights.xml b/Roles/ПолныеПрава/Ext/Rights.xml new file mode 100644 index 0000000..8032e74 --- /dev/null +++ b/Roles/ПолныеПрава/Ext/Rights.xml @@ -0,0 +1,122 @@ + + + true + true + true + + Configuration.МобильныйТСД + + Administration + false + + + UpdateDataBaseConfiguration + false + + + ThickClient + false + + + ExternalConnection + false + + + Automation + false + + + ConfigurationExtensionsAdministration + false + + + InteractiveOpenExtDataProcessors + false + + + InteractiveOpenExtReports + false + + + + Catalog.РабочиеМеста + + InteractiveDelete + false + + + InteractiveDeleteMarked + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + Catalog.ПодключаемоеОборудование + + InteractiveDelete + false + + + InteractiveDeleteMarked + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + Catalog.ДрайверыОборудования + + InteractiveDelete + false + + + InteractiveDeleteMarked + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + \ No newline at end of file diff --git a/Roles/СохранениеДанныхПользователя.xml b/Roles/СохранениеДанныхПользователя.xml new file mode 100644 index 0000000..1be27c4 --- /dev/null +++ b/Roles/СохранениеДанныхПользователя.xml @@ -0,0 +1,15 @@ + + + + + СохранениеДанныхПользователя + + + ru + Сохранение данных пользователя + + + + + + \ No newline at end of file diff --git a/Roles/СохранениеДанныхПользователя/Ext/Rights.xml b/Roles/СохранениеДанныхПользователя/Ext/Rights.xml new file mode 100644 index 0000000..c3a6a2c --- /dev/null +++ b/Roles/СохранениеДанныхПользователя/Ext/Rights.xml @@ -0,0 +1,83 @@ + + + false + true + false + + Configuration.МобильныйТСД + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + SaveUserData + true + + + + Catalog.РабочиеМеста + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + Subsystem.ПоддержкаОборудования + + View + true + + + \ No newline at end of file diff --git a/SessionParameters/РабочееМестоКлиента.xml b/SessionParameters/РабочееМестоКлиента.xml new file mode 100644 index 0000000..2e95a0a --- /dev/null +++ b/SessionParameters/РабочееМестоКлиента.xml @@ -0,0 +1,18 @@ + + + + + РабочееМестоКлиента + + + ru + Рабочее место клиента + + + + + cfg:CatalogRef.РабочиеМеста + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования.xml b/Subsystems/ПоддержкаОборудования.xml new file mode 100644 index 0000000..c2c6613 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования.xml @@ -0,0 +1,81 @@ + + + + + ПоддержкаОборудования + + + ru + Поддержка оборудования + + + + true + false + false + + + ru + Подсистема поддержки оборудования + + + + + Role.СохранениеДанныхПользователя + Enum.ТипыПлатежныхОпераций + Catalog.РабочиеМеста + DefinedType.ТорговыйОбъектБПО + DefinedType.ОрганизацияБПО + CommonModule.ИнтеграцияПодсистемБПО + DefinedType.ПользовательБПО + Role.АдминистраторСистемы + CommonModule.ОбновлениеИнформационнойБазыБПО + CommonCommand.ВыбратьРМТекущегоСеанса + SessionParameter.РабочееМестоКлиента + Role.ВыполнениеСинхронизацииДанных + CommonForm.ВопросОбУстановкеРасширенияРаботыСКомпьютеромБПО + Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок + CommonModule.ГенерацияШтрихкодаСерверПовтИсп + CommonModule.ИнтеграцияПодсистемБПОКлиент + InformationRegister.ЗначенияЕМРЦ + DefinedType.ДенежнаяСуммаНеотрицательная + CommonModule.ИнтеграцияПодсистемБПОКлиентПовтИсп + DefinedType.ДенежнаяСуммаЛюбогоЗнака + Enum.ПериодХраненияИсторииОпераций + Role.БазовыеПраваБПО + Role.ПолныеПрава + CommonModule.ОбщегоНазначенияБПОКлиентСервер + CommonModule.ОбщегоНазначенияБПОСлужебныйВызовСервера + CommonModule.ГенерацияШтрихкода + CommonModule.МенеджерОборудованияВызовСервераПереопределяемый + CommonModule.ВнешниеКомпонентыБПО + CommonModule.ВнешниеКомпонентыБПОКлиент + CommonModule.ВнешниеКомпонентыБПОПереопределяемый + CommonModule.ИнтеграцияПодсистемБПОСлужебныйВызовСервера + CommonModule.ОбщегоНазначенияБПО + CommonModule.ОбщегоНазначенияБПОКлиент + Enum.ВидыМаркированнойПродукцииБПО + CommonModule.ОбщегоНазначенияБПОПереопределяемый + CommonModule.МенеджерОборудования + CommonModule.ОбщегоНазначенияБПОПовтИсп + CommonModule.МенеджерОборудованияВызовСервера + CommonModule.МенеджерОборудованияКлиент + CommonModule.МенеджерОборудованияКлиентПереопределяемый + CommonModule.МенеджерОборудованияКлиентПовтИсп + CommonModule.МенеджерОборудованияКлиентСервер + CommonModule.МенеджерОборудованияКлиентСерверПереопределяемый + CommonModule.МенеджерОборудованияПовтИсп + CommonModule.ПодключаемоеОборудованиеДрайверКлиент + CommonModule.МенеджерОборудованияГлобальный + CommonModule.ЛогированиеОперацийБПО + CommonModule.ЛогированиеОперацийБПОПереопределяемый + CommonModule.ЛогированиеОперацийБПОСлужебныйВызовСервера + + + + ПодключаемоеОборудование + ЭлектронныеСертификаты + HttpBridge + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Ext/CommandInterface.xml b/Subsystems/ПоддержкаОборудования/Ext/CommandInterface.xml new file mode 100644 index 0000000..b86a7e6 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Ext/CommandInterface.xml @@ -0,0 +1,10 @@ + + + + + + false + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/HttpBridge.xml b/Subsystems/ПоддержкаОборудования/Subsystems/HttpBridge.xml new file mode 100644 index 0000000..40d7bb0 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/HttpBridge.xml @@ -0,0 +1,27 @@ + + + + + HttpBridge + + + ru + Http bridge + + + + true + false + false + + + ru + Применяется для доступа к ресурсам в локальной сети, поддерживающим только http-соединение, при работе с помощью web-клиента. Например, для установки соединения с локальным модулем "Честный знак". + + + + + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование.xml new file mode 100644 index 0000000..6dd6141 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование.xml @@ -0,0 +1,45 @@ + + + + + ПодключаемоеОборудование + + + ru + Подключаемое оборудование + + + + true + false + false + + + + Enum.ОбработчикиДрайверовПодключаемогоОборудования + Catalog.ДрайверыОборудования + Enum.СпособыФорматноЛогическогоКонтроля + Catalog.ПодключаемоеОборудование + CommonTemplate.КодВидаНоменклатурнойКлассификации + DefinedType.СубъектПерсональныхДанныхБПО + DefinedType.ОснованиеФискальнойОперацииБПО + Enum.ТипыПодключенияОборудования + Enum.ТипыПодключаемогоОборудования + Enum.СпособПодключенияДрайвера + CommonForm.КодВидаНоменклатурнойКлассификации + CommonPicture.ВнешняяКомпонентаНеДоступна + CommonPicture.ВнешняяКомпонентаДоступна + DefinedType.ТипыПодключаемогоОборудования + + + + УстройстваВвода + ЧекопечатающиеУстройства + ДисплеиПокупателя + ПлатежныеСистемы + ВесовоеОборудование + УстройствоРаспознавания + ОблачныеККТ + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Ext/CommandInterface.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Ext/CommandInterface.xml new file mode 100644 index 0000000..14f871a --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Ext/CommandInterface.xml @@ -0,0 +1,25 @@ + + + + + + false + + + + + false + + + + + false + + + + + false + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ВесовоеОборудование.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ВесовоеОборудование.xml new file mode 100644 index 0000000..1e9b11c --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ВесовоеОборудование.xml @@ -0,0 +1,35 @@ + + + + + ВесовоеОборудование + + + ru + Весовое оборудование + + + + true + false + false + + + + CommonModule.ОборудованиеВесовоеОборудованиеКлиент + CommonModule.ОборудованиеВесовоеОборудованиеКлиентСервер + CommonTemplate.Драйвер1СЭлектронныеВесы + Catalog.ДрайверыОборудования + Catalog.РабочиеМеста + Catalog.ПодключаемоеОборудование + Enum.ТипыПодключенияОборудования + Enum.ТипыПодключаемогоОборудования + Enum.СпособПодключенияДрайвера + Enum.СпособыФорматноЛогическогоКонтроля + CommonModule.ОборудованиеВесовоеОборудование + CommonTemplate.ДрайверПОСЦентрЭлектронныеВесыNG_ru + + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ДисплеиПокупателя.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ДисплеиПокупателя.xml new file mode 100644 index 0000000..3de1275 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ДисплеиПокупателя.xml @@ -0,0 +1,35 @@ + + + + + ДисплеиПокупателя + + + ru + Дисплеи покупателя + + + + true + false + false + + + + CommonTemplate.Драйвер1СДисплейПокупателя + CommonModule.ОборудованиеДисплеиПокупателяКлиент + Catalog.ДрайверыОборудования + Catalog.РабочиеМеста + Catalog.ПодключаемоеОборудование + Enum.ТипыПодключенияОборудования + Enum.ТипыПодключаемогоОборудования + Enum.СпособПодключенияДрайвера + Enum.СпособыФорматноЛогическогоКонтроля + CommonModule.ОборудованиеДисплеиПокупателя + Enum.СтатусОперацииНаДисплее + Enum.СтатусРабочегоМестаНаДисплее + + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ОблачныеККТ.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ОблачныеККТ.xml new file mode 100644 index 0000000..f14c6d6 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ОблачныеККТ.xml @@ -0,0 +1,22 @@ + + + + + ОблачныеККТ + + + ru + Облачные ККТ + + + + true + false + false + + + + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ПлатежныеСистемы.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ПлатежныеСистемы.xml new file mode 100644 index 0000000..84d15ac --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ПлатежныеСистемы.xml @@ -0,0 +1,43 @@ + + + + + ПлатежныеСистемы + + + ru + Платежные системы + + + + true + false + false + + + + CommonModule.ОборудованиеПлатежныеСистемыКлиент + CommonModule.ОборудованиеПлатежныеСистемыКлиентСервер + CommonCommand.СверкаИтоговПоКартам + CommonTemplate.ДрайверUCSEFTPOSЭквайринговыеТерминалы_ru + CommonCommand.УправлениеЭквайринговымТерминалом + CommonForm.УправлениеЭквайринговымТерминалом + CommonTemplate.Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru + Catalog.ДрайверыОборудования + Catalog.РабочиеМеста + Catalog.ПодключаемоеОборудование + Enum.ТипыПодключенияОборудования + Enum.ТипыПодключаемогоОборудования + Enum.СпособПодключенияДрайвера + Enum.СпособыФорматноЛогическогоКонтроля + Enum.ТипыПлатежнойСистемыККТ + CommonModule.ОборудованиеПлатежныеСистемы + CommonTemplate.ДрайверАЗУРПлатежнаяСистема_ru + CommonTemplate.ДрайверАТОЛДрайверПлатежногоЯдраПэй_ru + Enum.ВидОплатыНаТерминале + InformationRegister.ПлатежныеОперации + + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ПлатежныеСистемы/Ext/CommandInterface.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ПлатежныеСистемы/Ext/CommandInterface.xml new file mode 100644 index 0000000..f1d05aa --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ПлатежныеСистемы/Ext/CommandInterface.xml @@ -0,0 +1,20 @@ + + + + + + false + + + + + false + + + + + false + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/УстройстваВвода.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/УстройстваВвода.xml new file mode 100644 index 0000000..9a06f3d --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/УстройстваВвода.xml @@ -0,0 +1,42 @@ + + + + + УстройстваВвода + + + ru + Устройства ввода + + + + true + false + false + + + + CommonModule.ОборудованиеУстройстваВводаКлиент + CommonModule.ОборудованиеУстройстваВвода + CommonTemplate.Драйвер1СУстройстваВводаNative + Enum.ПоляШаблоновМагнитныхКарт + CommonModule.ОборудованиеУстройстваВводаВызовСервера + Catalog.ДрайверыОборудования + Catalog.РабочиеМеста + Catalog.ПодключаемоеОборудование + Enum.ТипыПодключенияОборудования + Enum.ТипыПодключаемогоОборудования + Enum.СпособПодключенияДрайвера + Enum.СпособыФорматноЛогическогоКонтроля + CommonTemplate.ДрайверRightScanУстройстваВвода_ru + CommonTemplate.ДрайверMERTECHСканерШтрихкода_ru + CommonTemplate.ДрайверScanPortУстройстваВвода_ru + CommonTemplate.ДрайверАТОЛСканерШтрихкода_ru + CommonTemplate.ДрайверКлеверенсСканерШтрихкода_ru + CommonTemplate.ДрайверСканкодСканерШтрихкода_ru + CommonTemplate.ДрайверСканситиУстройстваВвода_ru + + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/УстройствоРаспознавания.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/УстройствоРаспознавания.xml new file mode 100644 index 0000000..bcc8083 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/УстройствоРаспознавания.xml @@ -0,0 +1,22 @@ + + + + + УстройствоРаспознавания + + + ru + Устройство распознавания + + + + true + false + false + + + + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства.xml new file mode 100644 index 0000000..623940a --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства.xml @@ -0,0 +1,78 @@ + + + + + ЧекопечатающиеУстройства + + + ru + Чекопечатающие устройства + + + + true + false + false + + + + CommonModule.ОборудованиеЧекопечатающиеУстройстваКлиент + CommonModule.ОборудованиеЧекопечатающиеУстройстваКлиентСервер + CommonModule.ОборудованиеЧекопечатающиеУстройстваВызовСервера + Enum.СпособыФорматноЛогическогоКонтроля + Enum.ВидыОперацийИзмененияСостоянияФН + Enum.ТипыФискальныхДокументовККТ + Enum.ТипыСистемНалогообложенияККТ + Enum.ТипыРасчетаДенежнымиСредствами + Enum.ТипыОплатыККТ + Enum.ПричиныПеререгистрацииФН + Enum.ПризнакиСпособаРасчета + Enum.ПризнакиПредметаРасчета + Enum.ПризнакиАгента + CommonTemplate.Драйвер1СПринтерЧеков + InformationRegister.ФискальныеОперации + Enum.СтатусыКассовойСмены + DefinedType.КассаБПО + CommonCommand.УправлениеФискальнымУстройством + Enum.ПричиныИзмененияСведенийККТ + Enum.СтатусЧекаККТВОчереди + Enum.ТипыЧековКоррекции + Enum.ПланируемыйСтатусМаркируемогоТовара + Enum.ВидДокументаУдостоверяющегоЛичностьККТ + Enum.МераКоличестваПредметаРасчетаККТ + CommonForm.УправлениеФискальнымУстройством + Enum.ТипыМаркировкиККТ + CommonCommand.РегистрФискальныхОпераций + Enum.ТипыПерсональныхДанныхККТ + Catalog.ДрайверыОборудования + Catalog.РабочиеМеста + Catalog.ПодключаемоеОборудование + Enum.ТипыПодключенияОборудования + Enum.ТипыПодключаемогоОборудования + Enum.СпособПодключенияДрайвера + CommonTemplate.ДрайверАТОЛККТ54ФЗ10XФФД12_ru + Enum.ТипыПлатежнойСистемыККТ + Enum.ТипыПакетнойОперацииВОчередиЧеков + CommonModule.ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация + CommonForm.НастройкаРегистрацииККТ + CommonModule.ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация + CommonModule.ОборудованиеЧекопечатающиеУстройстваЛокализация + CommonModule.ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер + CommonModule.ШаблоныФискальныхДокументов + CommonModule.ШаблоныФискальныхДокументовЛокализация + CommonModule.ШаблоныФискальныхДокументовСлужебный + CommonModule.ОборудованиеЧекопечатающиеУстройства + CommonTemplate.ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru + CommonTemplate.ДрайверRightScanУстройствоПечати_ru + CommonTemplate.ДрайверRightScanККТ54ФЗ_ru + CommonTemplate.ДрайверАЗУРККТ54ФЗФФД12_ru + CommonTemplate.ДрайверВерсияТККТ54ФЗ_ru + CommonTemplate.ДрайверАТОЛККТ54ФЗ10XФФД12X_ru + + + + ФорматноЛогическийКонтроль + Маркировка + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства/Ext/CommandInterface.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства/Ext/CommandInterface.xml new file mode 100644 index 0000000..0c968ae --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства/Ext/CommandInterface.xml @@ -0,0 +1,20 @@ + + + + + + false + + + + + false + + + + + false + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства/Subsystems/Маркировка.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства/Subsystems/Маркировка.xml new file mode 100644 index 0000000..669959f --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства/Subsystems/Маркировка.xml @@ -0,0 +1,39 @@ + + + + + Маркировка + + + ru + Маркировка + + + + true + false + false + + + + CommonModule.МенеджерОборудованияМаркировка + CommonModule.МенеджерОборудованияМаркировкаКлиент + CommonModule.МенеджерОборудованияМаркировкаКлиентСервер + CommonModule.МенеджерОборудованияМаркировкаВызовСервера + Enum.ТипыИдентификаторовТовараККТ + Enum.ОтветОИСМОСтатусеТовара + Enum.СтатусРезультатаЗапросаКМ + Constant.СрокХраненияОперацийПроверкиКМ + Enum.СтатусОбработкиЗапросаКМ + CommonModule.МенеджерОборудованияГлобальный + InformationRegister.ОперацииПроверкиКМ + CommonForm.ПроверкаКонтрольнойМаркиБПО + Constant.ХранитьУспешныеОперацииРазрешения + CommonModule.МенеджерОборудованияМаркировкаПовтИсп + CommonModule.МенеджерОборудованияМаркировкаКлиентПовтИсп + DefinedType.СообщениеЕГАИСвБПО + + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства/Subsystems/ФорматноЛогическийКонтроль.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства/Subsystems/ФорматноЛогическийКонтроль.xml new file mode 100644 index 0000000..641f12c --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства/Subsystems/ФорматноЛогическийКонтроль.xml @@ -0,0 +1,28 @@ + + + + + ФорматноЛогическийКонтроль + + + ru + Форматно логический контроль + + + + true + false + false + + + + Enum.СпособыФорматноЛогическогоКонтроля + CommonModule.ФорматноЛогическийКонтрольВызовСервера + CommonModule.ФорматноЛогическийКонтрольКлиентСервер + CommonModule.ФорматноЛогическийКонтроль + CommonModule.ФорматноЛогическийКонтрольПереопределяемый + + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ЭлектронныеСертификаты.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ЭлектронныеСертификаты.xml new file mode 100644 index 0000000..a0a920e --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ЭлектронныеСертификаты.xml @@ -0,0 +1,31 @@ + + + + + ЭлектронныеСертификаты + + + ru + Электронные сертификаты + + + + true + false + false + + + + CommonModule.ЭлектронныеСертификатыНСПК + CommonTemplate.КомпонентаИнтеграцииНСПК + CommonModule.ЭлектронныеСертификатыНСПКВызовСервера + CommonModule.ЭлектронныеСертификатыНСПККлиент + CommonModule.ЭлектронныеСертификатыНСПККлиентСервер + InformationRegister.ОшибкиПодтвержденияНСПК + Enum.ПротоколОбменаФЭСНСПК + InformationRegister.ПлатежныеОперации + + + + + \ No newline at end of file diff --git a/Subsystems/ТСД.xml b/Subsystems/ТСД.xml new file mode 100644 index 0000000..e2386a1 --- /dev/null +++ b/Subsystems/ТСД.xml @@ -0,0 +1,57 @@ + + + + + ТСД + + + ru + ТСД + + + + true + true + false + + + ru + Подсистема мобильного ТСД + + + + + Document.ПоставкаМП + Document.СборкаЗаказа + Document.СтикеровкаМП + Document.ИнвентаризацияЗапасов + Document.ПулШтрихкодов + Document.ПеремещениеПоЯчейкам + Catalog.Номенклатура + Catalog.КарточкиМП + Catalog.Партнеры + Catalog.СтруктурныеЕдиницы + Catalog.Организации + Catalog.Пользователи + Catalog.ЕдиницыИзмерения + Catalog.ПринтерыДляПечати + Catalog.Ячейки + Catalog.ПартииНоменклатуры + InformationRegister.ЗапасыНаСкладах + InformationRegister.ШтрихкодыУпаковок + Enum.Статус + Enum.ВидыОперацийПеремещенияПоЯчейкам + CommonModule.СинхронизацияУТ + CommonModule.СинхронизацияУТКлиент + CommonForm.ФормаАвторизации + CommonForm.ПодборПоставкиТовара + Constant.АвторизированныйПользователь + Constant.ПринтерПоУмолчанию + Constant.КлючQRАвторизацииТСД + Constant.ДатаПоследнейЗагрузкиДанныхУНФ + Constant.ПодключатьОборудованиеПриЗапуске + + + + + \ No newline at end of file