commit 5fe05cf98a9ec3ffe93b245a446dcbf3a243b6af Author: kykaevv Date: Tue Sep 1 13:52:52 2026 +0300 Initial commit: mobile TSD config VasyaVasilek diff --git a/Catalogs/ДрайверыОборудования.xml b/Catalogs/ДрайверыОборудования.xml new file mode 100644 index 0000000..0196b58 --- /dev/null +++ b/Catalogs/ДрайверыОборудования.xml @@ -0,0 +1,740 @@ + + + + + + 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:EnumRef.ТипыПодключаемогоОборудования + + 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 + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + Index + 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..46c07c7 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Ext/ManagerModule.bsl @@ -0,0 +1,347 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Определяет настройки начального заполнения элементов +// +// Параметры: +// ПолноеИмяОбъекта - Строка - имя объекта, для которого вызывается заполнение. +// Настройки - Структура: +// * ПриНачальномЗаполненииЭлемента - Булево - если Истина, то для каждого элемента будет +// вызвана процедура индивидуального заполнения ПриНачальномЗаполненииЭлемента. +// * ПредопределенныеДанные - ТаблицаЗначений - данные заполненные в процедуре ПриНачальномЗаполненииЭлементов. +// +Процедура ПриНастройкеНачальногоЗаполненияЭлементов(ПолноеИмяОбъекта, Настройки) Экспорт + + Настройки.ПриНачальномЗаполненииЭлемента = Ложь; + +КонецПроцедуры + +// Процедура заполняет предопределенные элементы в справочнике драйверов оборудования. +// +// Параметры: +// ДрайверыОборудования - ТаблицаЗначений +// +Процедура ПриНачальномЗаполненииЭлементов(ДрайверыОборудования) Экспорт + + ТекущийЯзык = ТекущийЯзык(); + КодЯзыка = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка); + + ТаблицаДрайверов = Новый ТаблицаЗначений(); + ТаблицаДрайверов.Колонки.Добавить("Ссылка"); + ТаблицаДрайверов.Колонки.Добавить("ИмяПредопределенныхДанных"); + ТаблицаДрайверов.Колонки.Добавить("ВРегИмяПредопределенныхДанных"); + ТаблицаДрайверов.Индексы.Добавить("ВРегИмяПредопределенныхДанных"); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ДрайверыОборудования.Ссылка КАК Ссылка, + | ДрайверыОборудования.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + |ИЗ + | Справочник.ДрайверыОборудования КАК ДрайверыОборудования + |ГДЕ + | ДрайверыОборудования.ИмяПредопределенныхДанных В(&СписокИмена)"; + + Запрос.УстановитьПараметр("СписокИмена", ДрайверыОборудования.ВыгрузитьКолонку("ИмяДрайвера")); + РезультатЗапроса = Запрос.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + НоваяСтрока = ТаблицаДрайверов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка); + НоваяСтрока.ВРегИмяПредопределенныхДанных = ВРег(НоваяСтрока.ИмяПредопределенныхДанных); + КонецЦикла; + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить("Справочник.ДрайверыОборудования"); + ЭлементБлокировки.ИсточникДанных = ТаблицаДрайверов; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Ссылка"); + Блокировка.Заблокировать(); + + Для Каждого ДрайверОборудования Из ДрайверыОборудования Цикл + + ПараметрыДрайвера = МенеджерОборудованияКлиентСервер.ПараметрыСозданияНовогоДрайвера(); + ЗаполнитьЗначенияСвойств(ПараметрыДрайвера, ДрайверОборудования); + + ПараметрыДрайвера.Предопределенный = Истина; + + Если ТипЗнч(ПараметрыДрайвера.ТипОборудования) = Тип("Строка") Тогда + ПараметрыДрайвера.ТипОборудования = МенеджерОборудования.ПолучитьТипОборудования(ПараметрыДрайвера.ТипОборудования); + КонецЕсли; + + СтрокаТаблицы = ТаблицаДрайверов.Найти(ВРег(ПараметрыДрайвера.ИмяДрайвера),"ВРегИмяПредопределенныхДанных"); + Если СтрокаТаблицы <> Неопределено Тогда + Драйвер = СтрокаТаблицы.Ссылка.ПолучитьОбъект(); + Иначе + Драйвер = Справочники.ДрайверыОборудования.СоздатьЭлемент(); + Драйвер.ИмяПредопределенныхДанных = ПараметрыДрайвера.ИмяДрайвера; + КонецЕсли; + + МакетДоступен = Ложь; + ИмяМакетаДрайвера = ПараметрыДрайвера.ИмяМакетаДрайвера; + МенеджерОборудования.ЗаполнитьДанныеМакетов(ПараметрыДрайвера.ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, Неопределено, КодЯзыка); + Если НЕ ЗначениеЗаполнено(ПараметрыДрайвера.СпособПодключения) Тогда + Если МакетДоступен Тогда + ПараметрыДрайвера.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзМакета; + Иначе + ПараметрыДрайвера.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы; + КонецЕсли; + КонецЕсли; + + Если (Драйвер.Наименование <> ПараметрыДрайвера.Наименование) + Или (Драйвер.ИдентификаторОбъекта <> Строка(ПараметрыДрайвера.ИдентификаторОбъекта)) + Или (Драйвер.ВерсияДрайвера <> Строка(ПараметрыДрайвера.ВерсияДрайвера)) + Или (Драйвер.ИмяМакетаДрайвера <> Строка(ПараметрыДрайвера.ИмяМакетаДрайвера)) + Или (Драйвер.ТипОборудования <> ПараметрыДрайвера.ТипОборудования) + Или (Драйвер.СпособПодключения <> ПараметрыДрайвера.СпособПодключения) + Или (Драйвер.СнятСПоддержки <> ПараметрыДрайвера.СнятСПоддержки) Тогда + Драйвер.Наименование = ПараметрыДрайвера.Наименование; + Драйвер.ИдентификаторОбъекта = ПараметрыДрайвера.ИдентификаторОбъекта; + Драйвер.ВерсияДрайвера = ПараметрыДрайвера.ВерсияДрайвера; + Драйвер.ИмяМакетаДрайвера = ПараметрыДрайвера.ИмяМакетаДрайвера; + Драйвер.ТипОборудования = ПараметрыДрайвера.ТипОборудования; + Драйвер.СпособПодключения = ПараметрыДрайвера.СпособПодключения; + Драйвер.СнятСПоддержки = ПараметрыДрайвера.СнятСПоддержки; + Драйвер.Записать(); + КонецЕсли; + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Заполнение предопределенных элементов драйвера'", ОбщегоНазначенияБПО.КодОсновногоЯзыка())); + КонецПопытки; + +КонецПроцедуры + +// Процедура заполняет элемент в справочнике драйверов оборудования. +// +// Параметры: +// ПараметрыСоздания - Структура - параметры создания оборудования. +// +// Возвращаемое значение: +// СправочникСсылка.ДрайверыОборудования - +// +Функция СоздатьНовыйЭлемент(ПараметрыСоздания) Экспорт + + НовыйЭлемент = Справочники.ДрайверыОборудования.СоздатьЭлемент(); + + Если ТипЗнч(ПараметрыСоздания.ТипОборудования) = Тип("Строка") Тогда + ПараметрыСоздания.ТипОборудования = МенеджерОборудования.ПолучитьТипОборудования(ПараметрыСоздания.ТипОборудования); + КонецЕсли; + + НовыйЭлемент.ТипОборудования = ПараметрыСоздания.ТипОборудования; + НовыйЭлемент.ИдентификаторОбъекта = ПараметрыСоздания.ИдентификаторОбъекта; + НовыйЭлемент.Наименование = ПараметрыСоздания.Наименование; + НовыйЭлемент.ИмяМакетаДрайвера = ПараметрыСоздания.ИмяМакетаДрайвера; + НовыйЭлемент.ВерсияДрайвера = ПараметрыСоздания.ВерсияДрайвера; + НовыйЭлемент.СнятСПоддержки = ПараметрыСоздания.СнятСПоддержки; + НовыйЭлемент.СпособПодключения = ПараметрыСоздания.СпособПодключения; + Если ПараметрыСоздания.Предопределенный Тогда + НовыйЭлемент.ИмяПредопределенныхДанных = ПараметрыСоздания.ИмяДрайвера; + КонецЕсли; + + НовыйЭлемент.Записать(); + + Возврат НовыйЭлемент.Ссылка; + +КонецФункции + +// Получает ссылку предопределенного элемента по его полному имени. +// +// Параметры: +// ПолноеИмяПредопределенного - Строка - имя предопределенного элемента. +// +// Возвращаемое значение: +// СправочникСсылка.ПодключаемоеОборудование, +// Неопределено. +// +Функция ПредопределенныйЭлемент(Знач ПолноеИмяПредопределенного) Экспорт + + ИмяПредопределенного = ВРег(ПолноеИмяПредопределенного); + + Точка = Найти(ИмяПредопределенного, "."); + ИмяКоллекции = Лев(ИмяПредопределенного, Точка - 1); + ИмяПредопределенного = Сред(ИмяПредопределенного, Точка + 1); + + Точка = Найти(ИмяПредопределенного, "."); + ИмяТаблицы = Лев(ИмяПредопределенного, Точка - 1); + ИмяПредопределенного = Сред(ИмяПредопределенного, Точка + 1); + + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 Ссылка ИЗ &ПолноеИмяТаблицы ГДЕ ИмяПредопределенныхДанных = &ИмяПредопределенного"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяТаблицы", ИмяКоллекции + "." + ИмяТаблицы); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ИмяПредопределенного", ИмяПредопределенного); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат Неопределено; + Иначе + Возврат Результат.Выгрузить()[0].Ссылка; + КонецЕсли; + +КонецФункции + +// Функция возвращает структуру с данными драйвера оборудования +// (со значениями реквизитов элемента справочника). +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// +// Возвращаемое значение: +// Структура. +// +Функция ДанныеДрайвераОборудования(Идентификатор) Экспорт + + ТекущийЯзык = ТекущийЯзык(); + КодЯзыка = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка); + + ДанныеДрайвера = Новый Структура(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДрайверыОборудованияПереопределяемый.Ссылка КАК Ссылка, + | ДрайверыОборудованияПереопределяемый.Наименование КАК Наименование, + | ДрайверыОборудованияПереопределяемый.ИдентификаторОбъекта КАК ИдентификаторОбъекта, + | ДрайверыОборудованияПереопределяемый.ВерсияДрайвера КАК ВерсияДрайвера, + | ДрайверыОборудованияПереопределяемый.ИмяМакетаДрайвера КАК ИмяМакетаДрайвера, + | ДрайверыОборудованияПереопределяемый.СнятСПоддержки КАК СнятСПоддержки, + | ДрайверыОборудованияПереопределяемый.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + | ДрайверыОборудованияПереопределяемый.ТипОборудования КАК ТипОборудования, + | ДрайверыОборудованияПереопределяемый.Предопределенный КАК Предопределенный, + | ДрайверыОборудованияПереопределяемый.СпособПодключения КАК СпособПодключения + |ИЗ + | Справочник.ДрайверыОборудования КАК ДрайверыОборудованияПереопределяемый + |ГДЕ + | ДрайверыОборудованияПереопределяемый.Ссылка = &Идентификатор"; + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + РезультатЗапроса = Запрос.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + + // Заполним структуру данных устройства. + ДанныеДрайвера.Вставить("Ссылка" , Выборка.Ссылка); + ДанныеДрайвера.Вставить("Наименование" , Выборка.Наименование); + ДанныеДрайвера.Вставить("ИдентификаторОбъекта" , Выборка.ИдентификаторОбъекта); + ДанныеДрайвера.Вставить("ВерсияДрайвера" , Выборка.ВерсияДрайвера); + ДанныеДрайвера.Вставить("СнятСПоддержки" , Выборка.СнятСПоддержки); + ДанныеДрайвера.Вставить("ИмяПредопределенныхДанных", Выборка.ИмяПредопределенныхДанных); + ДанныеДрайвера.Вставить("ТипыОборудования" , МенеджерОборудования.ПараметрыТипыОборудования(Выборка.ТипОборудования)); + ДанныеДрайвера.Вставить("ТипОборудования" , Выборка.ТипОборудования); + ДанныеДрайвера.Вставить("ТипОборудованияИмя" , XMLСтрока(Выборка.ТипОборудования)); + + СпособПодключения = Выборка.СпособПодключения; + ПодключениеИзМакета = СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзМакета; + ПодключениеЛокальноПоИдентификатору = СпособПодключения = Перечисления.СпособПодключенияДрайвера.ЛокальноПоИдентификатору; + + ШаблонЛокализации = Неопределено; + МакетДоступен = Ложь; + ИмяМакетаДрайвера = ""; + + Если ПодключениеИзМакета Тогда + ИмяДрайвера = Выборка.ИмяПредопределенныхДанных; + ИмяМакетаДрайвера = Выборка.ИмяМакетаДрайвера; + МенеджерОборудования.ЗаполнитьДанныеМакетов(ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, ШаблонЛокализации, КодЯзыка); + КонецЕсли; + ДанныеДрайвера.Вставить("СпособПодключения" , СпособПодключения); + ДанныеДрайвера.Вставить("ПодключениеИзМакета" , ПодключениеИзМакета); + ДанныеДрайвера.Вставить("ПодключениеЛокальноПоИдентификатору", ПодключениеЛокальноПоИдентификатору); + ДанныеДрайвера.Вставить("ИмяМакетаДрайвера" , ИмяМакетаДрайвера); + ДанныеДрайвера.Вставить("МакетДоступен" , МакетДоступен); + ДанныеДрайвера.Вставить("ШаблонЛокализации" , ШаблонЛокализации); + + КонецЦикла; + + Возврат ДанныеДрайвера; + +КонецФункции + +// Функция возвращает драйвера по типу оборудования +// +// Параметры: +// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - типы подключаемого оборудования. +// ТолькоДоступные - Булево - признак только доступных драйверов. +// СнятыеСПоддержкиДрайвера - Булево - признак отображения снятых с поддержки драйверов. +// +// Возвращаемое значение: +// Массив Из СправочникСсылка.ДрайверыОборудования +// +Функция ДрайвераПоТипуОборудования(ТипОборудования, ТолькоДоступные = Истина, СнятыеСПоддержкиДрайвера = Ложь) Экспорт + + СписокДрайверов = Новый СписокЗначений(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДрайверыОборудованияПереопределяемый.Ссылка КАК Ссылка, + | ДрайверыОборудованияПереопределяемый.Наименование КАК Наименование, + | ДрайверыОборудованияПереопределяемый.ТипОборудования КАК ТипОборудования, + | ДрайверыОборудованияПереопределяемый.Предопределенный КАК Предопределенный + |ИЗ + | Справочник.ДрайверыОборудования КАК ДрайверыОборудованияПереопределяемый + |ГДЕ + | ДрайверыОборудованияПереопределяемый.ТипОборудования = &ТипОборудования + | И (НЕ &ТолькоДоступные + | ИЛИ НЕ ДрайверыОборудованияПереопределяемый.ПометкаУдаления) + | И (&СнятыеСПоддержки + | ИЛИ НЕ ДрайверыОборудованияПереопределяемый.СнятСПоддержки) + | + |УПОРЯДОЧИТЬ ПО + | ДрайверыОборудованияПереопределяемый.Наименование"; + + Запрос.УстановитьПараметр("ТолькоДоступные" , ТолькоДоступные); + Запрос.УстановитьПараметр("СнятыеСПоддержки", СнятыеСПоддержкиДрайвера); + Запрос.УстановитьПараметр("ТипОборудования" , ТипОборудования); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + СписокДрайверов.Добавить(ВыборкаДетальныеЗаписи.Ссылка, ВыборкаДетальныеЗаписи.Наименование); + КонецЦикла; + + Возврат СписокДрайверов; + +КонецФункции + +// СтандартныеПодсистемы.УправлениеДоступом +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +// +// Параметры: +// Ограничение - Структура: +// * Текст - Строка - ограничение доступа для пользователей. +// Если пустая строка, значит, доступ разрешен. +// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей. +// Если пустая строка, значит, доступ запрещен. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически. +// - Булево - если Ложь, то всегда записывать ключи доступа, +// если Истина, тогда не записывать ключи доступа, +// а использовать ключи доступа владельца (требуется, +// чтобы ограничение было строго по объекту-владельцу). +// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также +// как у параметра ПоВладельцуБезЗаписиКлючейДоступа. +// +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Менеджер = "Справочник.ДрайверыОборудования"; + МенеджерОборудованияВызовСервераПереопределяемый.ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/Catalogs/ДрайверыОборудования/Ext/Predefined.xml b/Catalogs/ДрайверыОборудования/Ext/Predefined.xml new file mode 100644 index 0000000..62fdd1c --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Ext/Predefined.xml @@ -0,0 +1,891 @@ + + + + Драйвер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 + + + Драйвер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 + + + ДрайверIronLogicСчитывателиБесконтактныхКарт + 0 + IronLogic:Считыватели бесконтактных карт Z-2 + false + + + ДрайверISBCСчитывательRFID + 0 + ISBC:Считыватель RFID + false + + + ДрайверMERTECHСканерШтрихкода + 0 + MERTECH:Сканер штрихкода ТСД + false + + + ДрайверMPos2canЭквайринг + 0 + mPos2can:Поддержка 2can эквайринга + false + + + ДрайверMSTARККТ54ФЗ + 0 + MSTAR:ККТ с передачей данных в ОФД (ФФД 1.2) + false + + + ДрайверNEWTONККТ54ФЗ + 0 + NEWTON:ККТ с передачей данных в ОФД (54-ФЗ) + 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 + + + Драйвер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 + + + ДрайверАтолККТ54ФЗ + 0 + АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверАтолККТ54ФЗ10X + 0 + АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) 10.x + false + + + ДрайверАтолККТ54ФЗ9X + 0 + АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) 9.x + 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ФЗ + 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 + ККС:ККТ с передачей данных в ОФД (54-ФЗ) 2.х + false + + + ДрайверККСФискальныеРегистраторы + 0 + ККС:Фискальные регистраторы Спарк + false + + + ДрайверКлеверенсСканерШтрихкода + 0 + Клеверенс:Драйвер ТСД для мобильной платформы 1С + false + + + ДрайверКлеверенсСчитывателиRFID + 0 + Клеверенс:Считыватели RFID + false + + + ДрайверКлеверенсТерминалыСбораДанных + 0 + Клеверенс:Терминалы сбора данных + false + + + ДрайверКристаллСервисДисплеиПокупателяVikiVision + 0 + Кристалл Сервис:Дисплей покупателя VikiVision + false + + + ДрайверКристаллСервисФискальныеРегистраторыPirit + 0 + Кристалл Сервис:Фискальные регистраторы Pirit + false + + + ДрайверМАСЭлектронныеВесы + 0 + МАС:Электронные весы + false + + + ДрайверМассаКВесыСПечатьюЭтикеток + 0 + Масса-К:Весы с печатью этикеток + false + + + ДрайверМассаКЭлектронныеВесы + 0 + Масса-К:Электронные весы + false + + + ДрайверМЕБИУСККТ54ФЗ + 0 + МЕБИУС:ККТ с передачей данных в ОФД (54-ФЗ) + false + + + ДрайверМертехВесыСПечатьюЭтикеток + 0 + Мертех:Весы с печатью этикеток + false + + + ДрайверМертехЭлектронныеВесы + 0 + Мертех:Электронные весы + false + + + ДрайверОРИОНФискальныеРегистраторы + 0 + ОРИОН:Фискальный регистратор ФР01К + false + + + ДрайверПБФЭквайринговыеТерминалы + 0 + ПБФ:Эквайринговые терминалы + false + + + ДрайверРБСВесыCПечатьюЭтикеток + 0 + РБС:Весы c печатью этикеток KS + false + + + ДрайверРБСВесыCПечатьюЭтикетокVenus + 0 + РБС:Весы c печатью этикеток Venus + 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 + + + ДрайверШтрихМККТ54ФЗ4ФФД12NG + 0 + ШТРИХ-М:ККТ с передачей данных в ОФД (ФФД 1.2) NG + 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..81a2d11 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,309 @@ + +
+ + 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 + false + 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> + + + + 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..d13f993 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,145 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // АПК: 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..bf08d87 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Forms/ФормаЭлемента/Ext/Form.xml @@ -0,0 +1,509 @@ + +
+ LockOwner + Items + + false + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительно</v8:content> + </v8:item> + + + + + + + + + + ПриОткрытии + ПриСозданииНаСервере + ПередЗаписьюНаСервере + + + + false + false + true + #FF3B30 + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Внимание! Данный драйвер снят с поддержки производителем. +Использование данного драйвера не рекомендуется.</v8:content> + </v8:item> + + #FFF2F1 + + + + + false + false + true + #FF3B30 + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Макет для данного драйвера не найден.</v8:content> + </v8:item> + + #FFF2F1 + + + + + false + false + true + #FF3B30 + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Внимание! Данный драйвер является эмулятором, и предназначен только для +целей тестирования разрабатываемых программных продуктов и обучения.</v8:content> + </v8:item> + + #FFF2F1 + + + + + Объект.ТипОборудования + false + + + + + Объект.Description + Left + EnterOnInput + true + false + + + + + РежимРаботы + false + true + false + + + + + Объект.ИдентификаторОбъекта + Left + ShowBottom + EnterOnInput + true + false + + + false + + + + Объект.СпособПодключения + true + false + + + + + false + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа</v8:content> + </v8:item> + + true + Usual + 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 + 2 + false + true + + + + + УстановленнаяВерсия + true + 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> + + + + 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..d325b21 --- /dev/null +++ b/Catalogs/ДрайверыОборудования/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -0,0 +1,356 @@ +#Область ОбработчикиСобытийФорм + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + СозданиеНового = НЕ ЗначениеЗаполнено(Объект.Ссылка); + + Если СозданиеНового Тогда + Объект.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ЛокальноПоИдентификатору; + Элементы.ИдентификаторОбъекта.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; + Иначе + + ДанныеДрайвера = МенеджерОборудования.ДанныеДрайвераОборудования(Объект.Ссылка); + + ПоставляемыйВСоставеКонфигурации = Объект.Предопределенный; + ПодключениеЛокальноПоИдентификатору = Объект.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ЛокальноПоИдентификатору; + ПодключениеИзИнформационнойБазы = Объект.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы; + ПодключениеИзМакета = Объект.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзМакета; + + Элементы.ФормаОбновитьДрайверИзФайла.Видимость = ПодключениеИзИнформационнойБазы; + Элементы.СнятСПоддержки.Видимость = Объект.СнятСПоддержки; + Элементы.МакетНеДоступен.Видимость = ПодключениеИзМакета И НЕ ДанныеДрайвера.МакетДоступен И НЕ ПустаяСтрока(Объект.ИдентификаторОбъекта); + + Если ПоставляемыйВСоставеКонфигурации Тогда + РежимРаботы = РежимРаботы + НСтр("ru = 'Локальный'"); + КонецЕсли; + Элементы.ИдентификаторОбъекта.ОтображениеПодсказки = ОтображениеПодсказки.Всплывающая; + + СвойстваТолькоПросмотр = ПоставляемыйВСоставеКонфигурации И Не ПодключениеЛокальноПоИдентификатору; + Элементы.ТипОборудования.ТолькоПросмотр = СвойстваТолькоПросмотр; + Элементы.Наименование.ТолькоПросмотр = СвойстваТолькоПросмотр; + Элементы.ИдентификаторОбъекта.ТолькоПросмотр = СвойстваТолькоПросмотр; + Элементы.ФормаЗаписатьИЗакрыть.Видимость = Не СвойстваТолькоПросмотр; + КонецЕсли; + + Если Элементы.МакетНеДоступен.Видимость Тогда + Элементы.МакетНеДоступен.Заголовок = Элементы.МакетНеДоступен.Заголовок + Символы.НПП + ДанныеДрайвера.ИмяМакетаДрайвера; + КонецЕсли; + + Элементы.ВерсияДрайвера.Видимость = Не ПустаяСтрока(Объект.ВерсияДрайвера); + Элементы.УстановленнаяВерсия.Видимость = Ложь; + Элементы.ГруппаЛог.Видимость = Ложь; + + Элементы.ФормаЗакрыть.КнопкаПоУмолчанию = Не Элементы.ФормаЗаписатьИЗакрыть.Видимость; + + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.Наименование); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ТипОборудования); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.СпособПодключения); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.РежимРаботы); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ИдентификаторОбъекта); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ВерсияДрайвера); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ТекущийСтатус); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.УстановленнаяВерсия); + + ОбновитьИнформациюДрайвера(); + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Если Лев(ТекущийОбъект.ИдентификаторОбъекта, 6) = "AddIn." Тогда + ТекущийОбъект.ИдентификаторОбъекта = Прав(ТекущийОбъект.ИдентификаторОбъекта, СтрДлина(ТекущийОбъект.ИдентификаторОбъекта) - 6); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + ОбновитьИнформациюДрайвераОборудования() + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДрайвер_Завершение(РезультатВыполнения, Параметры) Экспорт + + Если РезультатВыполнения.Результат Тогда + ТекстСообщения = НСтр("ru = 'Установка драйвера оборудования завершена.'"); + ОбновитьИнформациюДрайвераОборудования(); + ПоказатьОповещениеПользователя(НСтр("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='(Версия требований к разработке драйверов %Версия%)'"); + + Если РевизияИнтерфейса >= 4000 Тогда + Результат = Символы.НПП + СообщениеНаЭкране; + Результат = СтрЗаменить(Результат, "%Версия%", "4." + Строка(РевизияИнтерфейса - 4000)); + ИначеЕсли РевизияИнтерфейса >= 3000 Тогда + Результат = Символы.НПП + СообщениеНаЭкране; + Результат = СтрЗаменить(Результат, "%Версия%", "3." + Строка(РевизияИнтерфейса - 3000)); + ИначеЕсли РевизияИнтерфейса >= 2000 Тогда + Результат = Символы.НПП + СообщениеНаЭкране; + Результат = СтрЗаменить(Результат, "%Версия%", "2." + Строка(РевизияИнтерфейса - 2000)); + ИначеЕсли РевизияИнтерфейса > 1000 Тогда + Результат = Символы.НПП + СообщениеНаЭкране; + Результат = СтрЗаменить(Результат, "%Версия%", "1." + Строка(РевизияИнтерфейса - 1000)); + Иначе + Результат = ""; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура ОбновитьИнформациюДрайвераОборудования_Завершение(РезультатВыполнения, Параметры) Экспорт + + Если РезультатВыполнения.Результат Тогда + + ОписаниеДрайвера = РезультатВыполнения.ОписаниеДрайвера; + Если ОписаниеДрайвера.ИнтеграционныйКомпонент Тогда + ТекущийСтатус = НСтр("ru='Установлен интеграционный компонент.'") + Символы.ПС; + ТекущийСтатус = ТекущийСтатус + ?(ОписаниеДрайвера.ОсновнойДрайверУстановлен, + НСтр("ru='Установлена основная поставка драйвера.'"), + НСтр("ru='Основная поставка драйвера не установлена.'")); + Иначе + ТекущийСтатус = НСтр("ru='Установлен на текущем компьютере.'"); + КонецЕсли; + + Если Не ПустаяСтрока(ОписаниеДрайвера.ВерсияДрайвера) Тогда + УстановленнаяВерсия = ОписаниеДрайвера.ВерсияДрайвера; + Если Не ПустаяСтрока(ОписаниеДрайвера.ВерсияИнтеграционногоКомпонента) Тогда + УстановленнаяВерсия = УстановленнаяВерсия + "/" + ОписаниеДрайвера.ВерсияИнтеграционногоКомпонента; + КонецЕсли; + УстановленнаяВерсия = УстановленнаяВерсия + ОписаниеРевизииИнтерфейса(ОписаниеДрайвера.РевизияИнтерфейса); + Элементы.УстановленнаяВерсия.Видимость = Истина; + Иначе + Элементы.УстановленнаяВерсия.Видимость = Ложь; + КонецЕсли; + + Если ОписаниеДрайвера.ЭтоЭмулятор Тогда + Элементы.ЭтоЭмулятор.Видимость = Истина; + КонецЕсли; + + Если Не ПустаяСтрока(ОписаниеДрайвера.ЛогДрайвераПутьКФайлу) Тогда + ЛогДрайвераПутьКФайлу = ОписаниеДрайвера.ЛогДрайвераПутьКФайлу; + Элементы.ГруппаЛог.Видимость = Истина; + Элементы.ЛогДрайвераПутьКФайлу.Подсказка = ?(ОписаниеДрайвера.ЛогДрайвераВключен, + НСтр("ru='Логирование операций драйвера включено'"), + НСтр("ru='Логирование операций драйвера отключено'")); + #Если ТонкийКлиент ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + Элементы.СохранитьЛогДрайвера.Видимость = ОписаниеДрайвера.ЛогДрайвераВключен; + Элементы.ПерейтиКФайлуЛогаДрайвера.Видимость = ОписаниеДрайвера.ЛогДрайвераВключен; + #Иначе + Элементы.СохранитьЛогДрайвера.Видимость = Ложь; + Элементы.ПерейтиКФайлуЛогаДрайвера.Видимость = Ложь; + #КонецЕсли + Иначе + Элементы.ГруппаЛог.Видимость = Ложь; + КонецЕсли; + + ШаблонЛокализации = ОписаниеДрайвера.ШаблонЛокализации; + #Если ТонкийКлиент ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + Элементы.ФормаПолучитьШаблонЛокализации.Видимость = Не ПустаяСтрока(ШаблонЛокализации); + #Иначе + Элементы.ФормаПолучитьШаблонЛокализации.Видимость = Ложь; + #КонецЕсли + + Элементы.ФормаУстановитьДрайвер.Видимость = Ложь; + + Иначе + ТекущийСтатус = СтрШаблон(НСтр("ru = 'Драйвер не установлен." + "%1'"), РезультатВыполнения.ОписаниеОшибки);; + Элементы.ТекущийСтатус.Подсказка = РезультатВыполнения.ОписаниеОшибки; + Элементы.ФормаУстановитьДрайвер.Видимость = Не ПодключениеЛокальноПоИдентификатору; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИнформациюДрайвераОборудования() + + Оповещение = Новый ОписаниеОповещения("ОбновитьИнформациюДрайвераОборудования_Завершение", ЭтотОбъект); + МенеджерОборудованияКлиент.НачатьПолучениеОписанияДрайвера(Оповещение, Неопределено, ДанныеДрайвера); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьИнформациюДрайвера() + + Если ПодключениеИзИнформационнойБазы Тогда + РезультатИнформация = ВнешниеКомпонентыБПО.ИнформацияОКомпоненте(Объект.ИдентификаторОбъекта, Объект.ВерсияДрайвера); + Если Не ПустаяСтрока(РезультатИнформация.ОписаниеОшибки) Тогда + Элементы.ИдентификаторОбъекта.Подсказка = РезультатИнформация.ОписаниеОшибки; + Элементы.ИдентификаторОбъекта.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; + Иначе + Элементы.ИдентификаторОбъекта.ОтображениеПодсказки = ОтображениеПодсказки.Всплывающая; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Catalogs/Номенклатура.xml b/Catalogs/Номенклатура.xml new file mode 100644 index 0000000..e66faa5 --- /dev/null +++ b/Catalogs/Номенклатура.xml @@ -0,0 +1,138 @@ + + + + + + dd5fb08c-b85f-4203-87f8-23c6a3a5bfb4 + a50f9c53-1966-4dad-91f9-a64396113314 + + + 27d576ef-e46f-4a07-9d8e-35b49a56c36b + 6bc679f7-9ba4-4f37-8768-14bb85bfc85a + + + a09e1629-a217-42b1-8f33-178f51b7859f + 0035a2c8-6ef3-46c2-a2ab-b1d844299b81 + + + 35ecc55f-fb63-48cf-abfd-39c35f32bdce + 4c0109a6-fc52-4791-a46f-0c94f77fbc62 + + + dd52c4f1-750b-495d-af9e-3aab43dcf23a + 6f428f3b-1422-4eee-8cd4-72a462637af4 + + + + Номенклатура + + + 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.ФормаЭлемента + + Catalog.Номенклатура.Form.ФормаСписка + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + + Barcode + + + ru + Barcode + + + + + xs:string + + 30 + 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..5fbf869 --- /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..c077c73 --- /dev/null +++ b/Catalogs/Номенклатура/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,152 @@ + +
+ None + false + + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + false + + + + true + + + + List + None + true + true + true + false + false + ExpandTopLevel + true + Список + Список.DefaultPicture + #FFFFFF + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + + + + Список.Description + true + + + + + Horizontal + + + + Список.Barcode + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Штрихкод</v8:content> + </v8:item> + + Left + Center + + + + + Список.Code + Center + Center + + + + + + + + +
+
+
+
+ + + + 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..1803324 --- /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..6ade164 --- /dev/null +++ b/Catalogs/Номенклатура/Forms/ФормаЭлемента/Ext/Form.xml @@ -0,0 +1,67 @@ + +
+ LockOwner + None + false + Items + + false + + + + Объект.Code + true + Top + EnterOnInput + true + false + true + true + #FFFFFF + + + + + Объект.Description + true + Top + EnterOnInput + true + false + true + true + true + #FFFFFF + + + + + Объект.Barcode + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Штрихкод</v8:content> + </v8:item> + + Top + EnterOnInput + true + false + true + true + #FFFFFF + + + + + + + + cfg:CatalogObject.Номенклатура + + true + true + + +
\ No newline at end of file diff --git a/Catalogs/ПодключаемоеОборудование.xml b/Catalogs/ПодключаемоеОборудование.xml new file mode 100644 index 0000000..583a2be --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование.xml @@ -0,0 +1,1417 @@ + + + + + + 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:EnumRef.ТипыПодключаемогоОборудования + + false + + + + + ru + Тип оборудования подключаемого экземпляра устройства. + + + false + + false + false + + + true + Enum.ТипыПодключаемогоОборудования.EmptyRef + ShowError + Items + + + 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 + + + + + УдалитьВерсияФорматаОбмена + + + ru + (Не используется) Версия формата обмена + + + + + xs:decimal + + 5 + 0 + Any + + + false + + + + + ru + Версия формата обмена для XML обменов (Не используется) + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + УдалитьОбработчикДрайвера + + + ru + (Не используется) Обработчик драйвера + + + + + cfg:EnumRef.ОбработчикиДрайверовПодключаемогоОборудования + + false + + + + + ru + Определяет обработчика драйвера (Не используется). + + + false + + false + false + + + false + Enum.ОбработчикиДрайверовПодключаемогоОборудования.EmptyRef + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + УдалитьИдентификаторWebСервисОборудования + + + ru + (Не используется) Идентификатор Web-сервис оборудования + + + + + xs:string + + 36 + Variable + + + false + + + + false + + false + false + + + false + + 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..eb1755f --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Ext/ManagerModule.bsl @@ -0,0 +1,331 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Возвращает список подключенного в справочнике ПО по установленному отбору +// +// Параметры: +// Отбор - см. МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор. +// +// Возвращаемое значение: +// Массив из Структура. +// +Функция СписокОборудования(Отбор) Экспорт + + Идентификатор = Отбор.Идентификатор; + ТипыПО = Отбор.ТипыПО; + РабочееМесто = Отбор.РабочееМесто; + Организация = Отбор.Организация; + + МассивТиповПО = МенеджерОборудования.ПолучитьТипыОборудования(ТипыПО); + + СетевоеОборудование = Отбор.СетевоеОборудование; + ТекущийПользовательИБ = Строка(ПользователиИнформационнойБазы.ТекущийПользователь()); + КодЯзыка = Отбор.КодЯзыка; + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ЗначениеЗаполнено(РабочееМесто) Тогда + // Если РМ не задано в параметрах, то всегда текущее из параметров сеанса. + РабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + КонецЕсли; + + Запрос = Новый Запрос(); + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ПодключаемоеОборудование.Ссылка КАК Ссылка, + | ПодключаемоеОборудование.Наименование КАК Наименование, + | ПодключаемоеОборудование.ТипОборудования КАК ТипОборудования, + | ПодключаемоеОборудование.ДрайверОборудования КАК ДрайверОборудования, + | ПодключаемоеОборудование.ДрайверОборудования.ИмяПредопределенныхДанных КАК ДрайверОборудованияИмя, + | ПодключаемоеОборудование.ДрайверОборудования.Предопределенный КАК ВСоставеКонфигурации, + | ПодключаемоеОборудование.ДрайверОборудования.ИдентификаторОбъекта КАК ИдентификаторОбъекта, + | ПодключаемоеОборудование.ДрайверОборудования.СнятСПоддержки КАК СнятСПоддержки, + | ПодключаемоеОборудование.ДрайверОборудования.ВерсияДрайвера КАК ВерсияДрайвера, + | ПодключаемоеОборудование.ДрайверОборудования.ИмяМакетаДрайвера КАК ИмяМакетаДрайвера, + | ПодключаемоеОборудование.ДрайверОборудования.СпособПодключения КАК СпособПодключения, + | ПодключаемоеОборудование.ДрайверОборудования.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + | ПодключаемоеОборудование.ТипПодключения КАК ТипПодключения, + | ПодключаемоеОборудование.РабочееМесто КАК РабочееМесто, + | ПодключаемоеОборудование.АвтоматическаяФискализация КАК АвтоматическаяФискализация, + | ПодключаемоеОборудование.ТребуетсяПереустановка КАК ТребуетсяПереустановка, + | ПодключаемоеОборудование.ТребуетсяУстановка КАК ТребуетсяУстановка, + | ПодключаемоеОборудование.ИспользуетсяФН36 КАК ИспользуетсяФН36, + | ПодключаемоеОборудование.Организация КАК Организация, + | ПодключаемоеОборудование.ОграничениеДоступа.( + | Пользователь КАК Пользователь, + | Ссылка КАК Ссылка + | ) КАК ОграничениеДоступа, + | ПодключаемоеОборудование.Параметры КАК Параметры + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | &Условие + | + |УПОРЯДОЧИТЬ ПО + | Наименование"; + + Если Идентификатор <> Неопределено Тогда + ТекстУсловия = "(ПодключаемоеОборудование.Ссылка = &Идентификатор)"; + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Иначе + ТекстУсловия = "(НЕ ПодключаемоеОборудование.ПометкаУдаления И ПодключаемоеОборудование.УстройствоИспользуется)" + + " И (ПодключаемоеОборудование.РабочееМесто = &РабочееМесто"; + Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто); + Если СетевоеОборудование Тогда + // Оборудование, подключенное к конкретному рабочему месту и сетевое оборудование. + ТекстУсловия = ТекстУсловия + + " ИЛИ ПодключаемоеОборудование.ТипПодключения = ЗНАЧЕНИЕ(Перечисление.ТипыПодключенияОборудования.ОбщийДоступ))"; + Иначе + ТекстУсловия = ТекстУсловия + ")"; + КонецЕсли; + Если МассивТиповПО.Количество()>0 Тогда + ТекстУсловия = ТекстУсловия + " И (ПодключаемоеОборудование.ТипОборудования В (&ТипОборудования))"; + Запрос.УстановитьПараметр("ТипОборудования", МассивТиповПО); + КонецЕсли; + Если Организация <> Неопределено Тогда + ТекстУсловия = ТекстУсловия + " И (ПодключаемоеОборудование.Организация = &Организация)"; + Запрос.УстановитьПараметр("Организация", Организация); + КонецЕсли; + КонецЕсли; + + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&Условие", ТекстУсловия); + Выборка = Запрос.Выполнить().Выбрать(); + + // Перебирая выборку составляем список устройств + СписокОборудования = Новый Массив(); + Пока Выборка.Следующий() Цикл + ДанныеУстройства = ЗаполнитьДанныеУстройства(Выборка, ТекущийПользовательИБ, КодЯзыка); + СписокОборудования.Добавить(ДанныеУстройства); + КонецЦикла; + + // Возвращаем полученный список с данными всех найденных устройств + Возврат СписокОборудования; + +КонецФункции + +// Функция возвращает по идентификатору устройства его параметры +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыУстройства(Идентификатор) Экспорт + + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | ПодключаемоеОборудование.Параметры + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.Ссылка = &Идентификатор"); + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + ПараметрыОборудования = Выборка.Параметры; // ХранилищеЗначения + Результат = ПараметрыОборудования.Получить(); + Возврат Результат; + +КонецФункции + +// Процедура предназначена для сохранения параметров устройства +// в реквизит Параметры типа хранилище значения в элементе справочника. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// Параметры - Структура - параметры устройства. +// +// Возвращаемое значение: +// Булево. +// +Функция СохранитьПараметрыУстройства(Идентификатор, Параметры) Экспорт + + Запрос = Новый Запрос(); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ПодключаемоеОборудование.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.Ссылка = &Идентификатор"; + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат Ложь; + КонецЕсли; + + Попытка + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + ОбъектСправочника = Выборка.Ссылка.ПолучитьОбъект(); // СправочникОбъект.ПодключаемоеОборудование + ОбъектСправочника.Заблокировать(); + ОбъектСправочника.Параметры = Новый ХранилищеЗначения(Параметры); + ОбъектСправочника.Записать(); + Результат = Истина; + Исключение + Результат = Ложь; + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// Функция возвращает структуру с данными устройства +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// КодЯзыка - Строка +// +// Возвращаемое значение: +// Структура: +// * Ссылка - СправочникСсылка.ПодключаемоеОборудование +// * ТипОборудования - Структура +// * Наименование - Строка +// * Параметры - Структура +// * ДрайверОборудования - СправочникСсылка.ДрайверыОборудования +// * ВСоставеКонфигурации - Булево +// * ИдентификаторОбъекта - Строка +// * СнятСПоддержки - Булево +// * ВерсияДрайвера - Строка +// * СетевоеОборудование - Булево +// * СпособПодключения - ПеречислениеСсылка.СпособПодключенияДрайвера +// * ПодключениеИзМакета - Булево +// * ПодключениеЛокальноПоИдентификатору - Булево +// * ИмяМакетаДрайвера - Строка +// * МакетДоступен - Булево +// * АвтоматическаяФискализация - Булево +// * ИспользуетсяФН36 - Булево +// * ТребуетсяПереустановка - Булево +// * ТребуетсяУстановка - Булево +// * ОграничениеДоступа - Массив из Строка +// * ДоступноТекущемуПользователю - Булево +// * ПараметрыРегистрации - Структура +// +Функция ДанныеУстройства(Идентификатор, КодЯзыка = Неопределено) Экспорт + + СписокОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + СписокОтбор.Идентификатор = Идентификатор; + СписокОтбор.КодЯзыка = КодЯзыка; + + СписокОборудования = СписокОборудования(СписокОтбор); + Если СписокОборудования.Количество() > 0 Тогда + Результат = СписокОборудования[0] + Иначе + Результат = Неопределено; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// СтандартныеПодсистемы.УправлениеДоступом +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +// +// Параметры: +// Ограничение - Структура: +// * Текст - Строка - ограничение доступа для пользователей. +// Если пустая строка, значит, доступ разрешен. +// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей. +// Если пустая строка, значит, доступ запрещен. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически. +// - Булево - если Ложь, то всегда записывать ключи доступа, +// если Истина, тогда не записывать ключи доступа, +// а использовать ключи доступа владельца (требуется, +// чтобы ограничение было строго по объекту-владельцу). +// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также +// как у параметра ПоВладельцуБезЗаписиКлючейДоступа. +// +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Менеджер = "Справочник.ПодключаемоеОборудование"; + МенеджерОборудованияВызовСервераПереопределяемый.ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Заполнить структуру данных устройства +// +Функция ЗаполнитьДанныеУстройства(Выборка, ТекущийПользовательИБ, КодЯзыка) + + ДанныеУстройства = Новый Структура(); + ПараметрыОборудования = Выборка.Параметры; // ХранилищеЗначения + + ДанныеУстройства.Вставить("Ссылка" , Выборка.Ссылка); + ДанныеУстройства.Вставить("ТипыОборудования" , МенеджерОборудования.ПараметрыТипыОборудования(Выборка.ТипОборудования)); + ДанныеУстройства.Вставить("ТипОборудования" , Выборка.ТипОборудования); + ДанныеУстройства.Вставить("ТипОборудованияИмя" , 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..f649ffd --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаАвторизацииЭТ/Ext/Form.xml @@ -0,0 +1,251 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Авторизация операции</v8:content> + </v8:item> + + false + useIfNecessary + + false + + + + + + + ПриСозданииНаСервере + + + + Сумма + true + false + false + true + true + + + + СуммаОкончаниеВводаТекста + + + + ТипКарты + Left + Auto + 1 + + + + + НомерКарты + true + true + false + 9999 9999 9999 9999 9999 + true + false + + + + + УказатьДополнительныеДанные + true + Right + + + + УказатьДополнительныеДанныеПриИзменении + + + + false + + <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> + + + + + + + + + + + <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..607f19d --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаАвторизацииЭТ/Ext/Form/Module.bsl @@ -0,0 +1,159 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + СписокТиповКарт = Неопределено; + + СуммаВременная = 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..e18bc2f --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Form.xml @@ -0,0 +1,126 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рабочее место подключаемого оборудования текущего сеанса</v8:content> + </v8:item> + + Use + false + 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..3512017 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаВыбораРабочегоМеста/Ext/Form/Module.bsl @@ -0,0 +1,48 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + РабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + + ИдентификаторКлиента = Параметры.ИдентификаторКлиента; + + Если Не ПустаяСтрока(ИдентификаторКлиента) Тогда + НовыйМассив = Новый Массив(); + НовыйМассив.Добавить(Новый ПараметрВыбора("Отбор.ПометкаУдаления", Ложь)); + НовыйМассив.Добавить(Новый ПараметрВыбора("Отбор.Код", ИдентификаторКлиента)); + НовыйФиксированныйМассив = Новый ФиксированныйМассив(НовыйМассив); + Элементы.РабочееМесто.ПараметрыВыбора = НовыйФиксированныйМассив; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыбратьИЗакрыть(Команда) + + ОчиститьСообщения(); + + Если ЗначениеЗаполнено(РабочееМесто) Тогда + Параметры.РабочееМесто = РабочееМесто; + ОчиститьСообщения(); + СтруктураВозврата = Новый Структура("РабочееМесто", РабочееМесто); + Закрыть(СтруктураВозврата); + Иначе + + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("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..ef37f5f --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Form.xml @@ -0,0 +1,861 @@ + +
+ false + 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 + 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> + + + + + 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 + + + + 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> + + + + + + <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> + + + + + false + style:SpecialTextColor + + <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> + + + + + + 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> + + + + + 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 + false + 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 + + 3 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Суффикс</v8:content> + </v8:item> + + + xs:decimal + + 3 + 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> + + + + 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 + + +
\ 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..d5e7915 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаНастройки/Ext/Form/Module.bsl @@ -0,0 +1,571 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Параметры.Свойство("Идентификатор", Идентификатор); + КодЯзыка = ?(Параметры.Свойство("КодЯзыка"), Параметры.КодЯзыка, ""); + ДанныеУстройстваСтруктура = МенеджерОборудования.ДанныеУстройства(Идентификатор, КодЯзыка); // Структура + ДрайверОборудования = ДанныеУстройстваСтруктура.ДрайверОборудования; + ЗначениеПараметров = ДанныеУстройстваСтруктура.Параметры; + ДанныеУстройства = ДанныеУстройстваСтруктура; + Если Не ЗначениеЗаполнено(ЗначениеПараметров) Тогда + ЗначениеПараметров = Новый Структура(); + КонецЕсли; + + Заголовок = НСтр("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'"), РезультатВыполнения.ОписаниеОшибки); + КонецЕсли; + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура ТестПодключения(Команда) + + ОчиститьСообщения(); + ТолькоПросмотр = Истина; + КоманднаяПанель.Доступность = Ложь; + + ДемонстрационныйРежим = ""; + + ПараметрыУстройства = ПолучитьНастройки().ПараметрыОборудования; + Оповещение = Новый ОписаниеОповещения("ТестУстройстваЗавершение", ЭтотОбъект); + МенеджерОборудованияКлиент.НачатьТестУстройства(Оповещение, Идентификатор, ПараметрыУстройства); + +КонецПроцедуры + +&НаКлиенте +Процедура ДополнительноеДействиеЗавершение(РезультатВыполнения, Параметры) Экспорт + + ТекстСообщения = ?(РезультатВыполнения.Результат, + НСтр("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='Установлен'"); + ДрайверГотовКРаботе = Истина; + КонецЕсли; + + Если ДрайверГотовКРаботе И НЕ ПустаяСтрока(ПараметрыДрайвера) Тогда + ОбновитьНастраиваемыйИнтерфейс(ПараметрыДрайвера, ДополнительныеДействия, ПервыйЗапуск); + КонецЕсли; + + Иначе + Элементы.СтатусКомпоненты.ТекущаяСтраница = Элементы.КомпонентаНеУстановлена; + ДрайверГотовКРаботе = Ложь; + ДрайверУстановлен = НСтр("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..11256e7 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,513 @@ + +
+ + 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 + 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> + + + + + + + + + + + + + List + true + false + SingleRow + false + 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:EnumRef.ТипыПодключаемогоОборудования + + + + + <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..e3bf945 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,299 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + +#Если МобильноеПриложениеСервер Тогда + ОтображатьДопЭлементы = Ложь; +#Иначе + ОтображатьДопЭлементы = Истина; +#КонецЕсли + + ТипПодключенияОборудования = Перечисления.ТипыПодключенияОборудования.ЛокальноеПодключение; + + ОбновитьСписокТиповОборудования(); + ОбновитьПользовательскийИнтерфейс(); + УстановитьУсловноеОформление(); + + Элементы.СписокУстройствСообщениеВТехническуюПоддержку.Видимость = ОбщегоНазначенияБПО.ИспользуетсяСообщенияВСлужбуТехническойПоддержки() + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + МенеджерОборудованияКлиент.ОбновитьРабочееМестоКлиента(); + ОбновитьОтображение() + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ТипПодключенияОборудованияПриИзменении(Элемент) + + ОбновитьОтображение(); + +КонецПроцедуры + +&НаКлиенте +Процедура РабочееМестоПриИзменении(Элемент) + + ОбновитьОтображение(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТипОборудованияПриИзменении(Элемент) + + ОбновитьОтображение(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыборРабочегоМестаЗавершение(Результат, Параметры) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("РабочееМесто") Тогда + МенеджерОборудованияКлиент.УстановитьРабочееМесто(Результат.РабочееМесто); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыборРабочегоМеста(Команда) + + Оповещение = Новый ОписаниеОповещения("ВыборРабочегоМестаЗавершение", ЭтотОбъект); + МенеджерОборудованияКлиент.ПредложитьВыборРабочегоМеста(Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокРабочихМест(Команда) + + Режим = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс; + ОткрытьФорму("Справочник.РабочиеМеста.ФормаСписка",,,,,,, Режим); + +КонецПроцедуры + +&НаКлиенте +Процедура ДрайверыОборудования(Команда) + + ОткрытьФорму("Справочник.ДрайверыОборудования.ФормаСписка"); + +КонецПроцедуры + +&НаКлиенте +Процедура СообщениеВТехническуюПоддержку(Команда) + + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиБПОКлиент"); + Параметры = МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ПараметрыОтправкиСообщенияОбОшибке(); + Параметры.ИдентификаторОборудования = Элементы.СписокУстройств.ТекущаяСтрока; + Параметры.ТекстОшибки = НСтр("ru = 'Информация для тех.поддержки'"); + ОписаниеОповещения = Новый ОписаниеОповещения("СообщениеВТехническуюПоддержкуЗавершение", ЭтотОбъект); + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.НачатьОтправкуСообщенияОбОшибке(ОписаниеОповещения, Параметры); + +КонецПроцедуры + +&НаКлиенте +Процедура СообщениеВТехническуюПоддержкуЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Не ПустаяСтрока(Результат.КодОшибки) Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(Результат.СообщениеОбОшибке); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + СписокУстройств.УсловноеОформление.Элементы.Очистить(); + + ЭлементУсловногоОформления = СписокУстройств.УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("УстройствоИспользуется"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("TextColor", ЦветаСтиля.ЦветРамки); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьПользовательскийИнтерфейс() + + ОбновитьСписокРабочихМест(); + + Если ТекущееРабочееМесто = Справочники.РабочиеМеста.ПустаяСсылка() + Или ТекущееРабочееМесто <> ПараметрыСеанса.РабочееМестоКлиента Тогда + ТекущееРабочееМесто = ПараметрыСеанса.РабочееМестоКлиента; + РабочееМесто = ТекущееРабочееМесто.Код; + КонецЕсли; + + СписокУстройств.Отбор.Элементы.Очистить(); + Если ОтображатьДопЭлементы Тогда + // 0 - ТипПодключения + ЭлементОтбора = СписокУстройств.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипПодключения"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Перечисления.ТипыПодключенияОборудования.ЛокальноеПодключение; + ЭлементОтбора.Использование = Истина; + // 1 - ТипОборудования + ЭлементОтбора = СписокУстройств.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипОборудования"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Неопределено; + ЭлементОтбора.Использование = Ложь; + // 2 - РабочееМесто + ЭлементОтбора = СписокУстройств.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РабочееМестоКод"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Строка(РабочееМесто); + ЭлементОтбора.Использование = Ложь; + + КонецЕсли; + + СписокУстройств.Группировка.Элементы.Очистить(); + ЭлементГруппировки = СписокУстройств.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ЭлементГруппировки.Поле = Новый ПолеКомпоновкиДанных("ТипОборудования"); + ЭлементГруппировки.Использование = Истина; + + Элементы.СписокУстройств.Шапка = ОтображатьДопЭлементы; + Элементы.Управление.Видимость = ОтображатьДопЭлементы; + + СетевоеОборудование = МенеджерОборудования.ДоступноСетевоеОборудование(); + Элементы.ТипПодключенияОборудования.Видимость = СетевоеОборудование; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьПараметрыРабочегоМеста() + + Если ТекущееРабочееМесто = Справочники.РабочиеМеста.ПустаяСсылка() + Или ТекущееРабочееМесто <> МенеджерОборудованияВызовСервера.РабочееМестоКлиента() Тогда + ТекущееРабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + КонецЕсли; + + Если СписокУстройств.Отбор.Элементы.Количество() > 0 Тогда + СписокУстройств.Отбор.Элементы[1].ПравоеЗначение = ТекущееРабочееМесто; + КонецЕсли; + + ОбновитьПользовательскийИнтерфейс(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьОтображение() + + Если ОтображатьДопЭлементы Тогда + + ЛокальноеПодключение = ТипПодключенияОборудования = ПредопределенноеЗначение("Перечисление.ТипыПодключенияОборудования.ЛокальноеПодключение"); + + СписокУстройств.Отбор.Элементы[0].ПравоеЗначение = ТипПодключенияОборудования; + Элементы.РабочееМесто.Видимость = ЛокальноеПодключение; + Элементы.ТипОборудования.Видимость = ЛокальноеПодключение; + + Если ЛокальноеПодключение Тогда + + Если РабочееМесто = "0" Тогда // ВСЕ + СписокУстройств.Отбор.Элементы[2].Использование = Ложь; + Элементы.СписокУстройствРабочееМесто.Видимость = Истина; + Иначе + СписокУстройств.Отбор.Элементы[2].ПравоеЗначение = Строка(РабочееМесто); + СписокУстройств.Отбор.Элементы[2].Использование = Истина; + Элементы.СписокУстройствРабочееМесто.Видимость = Ложь; + КонецЕсли; + + Иначе + СписокУстройств.Отбор.Элементы[2].Использование = Ложь; + Элементы.СписокУстройствРабочееМесто.Видимость = Ложь; + КонецЕсли; + + Если ПустаяСтрока(ТипОборудования) Или Не ЛокальноеПодключение Тогда + СписокУстройств.Группировка.Элементы[0].Использование = Истина; + СписокУстройств.Отбор.Элементы[1].Использование = Ложь; // ТипОборудования + Иначе + СписокУстройств.Группировка.Элементы[0].Использование = Ложь; + СписокУстройств.Отбор.Элементы[1].ПравоеЗначение = ТипОборудования; + СписокУстройств.Отбор.Элементы[1].Использование = Истина; // ТипОборудования + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСписокТиповОборудования(); + + СписокОборудования = МенеджерОборудования.ДоступныеТипыОборудования(); + + Для Каждого ТипПО Из СписокОборудования Цикл + Элементы.ТипОборудования.СписокВыбора.Добавить(ТипПО); + КонецЦикла; + ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПустаяСсылка(); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСписокРабочихМест(); + + Элементы.РабочееМесто.СписокВыбора.Очистить(); + Элементы.РабочееМесто.СписокВыбора.Добавить("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..43d34f7 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаЭлемента/Ext/Form.xml @@ -0,0 +1,666 @@ + +
+ LockOwner + + 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 + DontUse + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основное</v8:content> + </v8:item> + + + + + Usual + None + false + + + + Объект.УстройствоИспользуется + Right + + + + + + + Объект.ТипПодключения + true + false + + + + + Объект.ТипОборудования + 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> + + + + + + <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 + 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 + false + + + + Объект.АвтоматическаяФискализация + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Автоматическая фискализация чеков из очереди чеков</v8:content> + </v8:item> + + Right + Left + + + + + Объект.ИспользуетсяФН36 + Right + + + + + false + false + + <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 + + + + Объект.СпособФорматноЛогическогоКонтроля + + + + + Объект.ДопустимоеРасхождениеФорматноЛогическогоКонтроля + + + + + +
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ограничение доступа</v8:content> + </v8:item> + + + + +
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> + + + + 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 + Сообщение в техническую поддержку + + + СообщениеВТехническуюПоддержку + + + + + + 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..cee92f2 --- /dev/null +++ b/Catalogs/ПодключаемоеОборудование/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -0,0 +1,481 @@ +#Область ОбработчикиСобытийФорм + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ПравоДоступаСохранениеДанныхПользователя = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); + + СозданиеНовогоЭлемента = Объект.Ссылка = Справочники.ПодключаемоеОборудование.ПустаяСсылка(); + + // Защита от изменения уже созданного экземпляра устройства. + Элементы.ДрайверОборудования.ТолькоПросмотр = НЕ СозданиеНовогоЭлемента; + Элементы.ДрайверОборудования.КнопкаОткрытия = Не СозданиеНовогоЭлемента; + Элементы.ТипОборудования.ТолькоПросмотр = НЕ СозданиеНовогоЭлемента; + + Если СозданиеНовогоЭлемента Тогда + Если ПустаяСтрока(Объект.РабочееМесто) + И Объект.ТипПодключения = Перечисления.ТипыПодключенияОборудования.ЛокальноеПодключение Тогда + Объект.РабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + КонецЕсли; + Объект.УстройствоИспользуется = Истина; + КонецЕсли; + + ПроверкаПараметров = СозданиеНовогоЭлемента; + +#Если МобильноеПриложениеСервер Тогда + Элементы.РабочееМесто.Видимость = Ложь; + Элементы.ПараметрыПодключения.Видимость = Ложь; + Элементы.ТипПодключения.Видимость = Ложь; + Элементы.ОграничениеДоступа.Видимость = Ложь; +#Иначе + Элементы.РабочееМесто.Видимость = Объект.ТипПодключения = Перечисления.ТипыПодключенияОборудования.ЛокальноеПодключение; + Элементы.ОграничениеДоступа.Видимость = Объект.ТипПодключения = Перечисления.ТипыПодключенияОборудования.ОбщийДоступ; +#КонецЕсли + + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ТипПодключения); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ТипОборудования); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ДрайверОборудования); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.Организация); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.Наименование); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.РабочееМесто); + ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.СерийныйНомер); + + Если СозданиеНовогоЭлемента Тогда + Если Объект.ТипПодключения = Перечисления.ТипыПодключенияОборудования.ОбщийДоступ Тогда + Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Элементы.ТипОборудования.ТолькоПросмотр = Истина; + КонецЕсли; + Элементы.ДрайверОборудования.РежимВыбораИзСписка = Истина; + ЗаполнитьСписокДрайверов(); + КонецЕсли; + + ОбновитьИнтерфейсФормы(); + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярОборудованияПриСозданииНаСервере(Объект, ЭтотОбъект, Отказ, Параметры, СтандартнаяОбработка); + УстановитьВидимостьОрганизацииНаСервере(); + + Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройства = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройства"); + МодульОборудованиеЧекопечатающиеУстройства.ОбновитьПараметрыРегистрацииККТ(ПараметрыРегистрацииККТ, Объект.ПараметрыРегистрации); + КонецЕсли; + + Если СозданиеНовогоЭлемента Тогда + Элементы.ФормаЗагрузитьССайтаИТС.Видимость = Ложь; + Иначе + ДоступнаЗагрузкаССайтаИТС = Объект.ДрайверОборудования.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы И НЕ Объект.ДрайверОборудования.СнятСПоддержки; + Элементы.ФормаЗагрузитьССайтаИТС.Видимость = ДоступнаЗагрузкаССайтаИТС И ОбщегоНазначенияБПО.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент"); + КонецЕсли; + + Элементы.ФормаСообщениеВТехническуюПоддержку.Видимость = ОбщегоНазначенияБПО.ИспользуетсяСообщенияВСлужбуТехническойПоддержки() + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярОборудованияПриЧтенииНаСервере(ТекущийОбъект, ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Элементы.ФормаЗагрузитьССайтаИТС.Доступность = + ЗначениеЗаполнено(Объект.ТипОборудования) И ЗначениеЗаполнено(Объект.ДрайверОборудования); + + МенеджерОборудованияКлиентПереопределяемый.ЭкземплярОборудованияПриОткрытии(Объект, ЭтаФорма, Отказ); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + + Если Не Отказ И Модифицированность Тогда + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; + + МенеджерОборудованияКлиентПереопределяемый.ЭкземплярОборудованияПередЗаписью(Объект, ЭтотОбъект, Отказ, ПараметрыЗаписи); + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярОборудованияПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярОборудованияПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи); + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + ПараметрыУстройства = МенеджерОборудования.ПараметрыУстройства(Объект.Ссылка); + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярОборудованияПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи); + + ДоступнаЗагрузкаССайтаИТС = Объект.ДрайверОборудования.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы И НЕ Объект.ДрайверОборудования.СнятСПоддержки; + Элементы.ФормаЗагрузитьССайтаИТС.Видимость = ДоступнаЗагрузкаССайтаИТС И ОбщегоНазначенияБПО.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + + СозданиеНовогоЭлемента = Ложь; + + Элементы.ПараметрыПодключения.Видимость = НЕ СозданиеНовогоЭлемента; + + ОбновитьИнтерфейсФормы(); + + МенеджерОборудованияКлиентПереопределяемый.ЭкземплярОборудованияПослеЗаписи(Объект, ЭтотОбъект, ПараметрыЗаписи); + +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярОборудованияОбработкаПроверкиЗаполненияНаСервере(Объект, ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытиемЗавершение(Результат, Параметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + Если Модифицированность Или СозданиеНовогоЭлемента Тогда + Если Записать() Тогда + ПроверкаПараметров = Ложь; + Закрыть(); + Иначе + Возврат; + КонецЕсли; + Иначе + ПроверкаПараметров = Ложь; + Закрыть(); + КонецЕсли; + МенеджерОборудованияКлиент.ВыполнитьНастройкуОборудования(Объект.Ссылка); + Иначе + ПроверкаПараметров = Ложь; + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если Не Объект.Ссылка.Пустая() Тогда + Если ПроверкаПараметров Тогда + Отказ = Истина; + Текст = НСтр("ru = 'Для использования устройства необходимо настроить параметры подключения. + |Перейти к настройке параметров подключения?'"); + Оповещение = Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект); + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет); + КонецЕсли; + + МенеджерОборудованияКлиентПереопределяемый.ЭкземплярОборудованияПередЗакрытием(Объект, ЭтотОбъект, Отказ, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаНавигационнойСсылки(НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + МенеджерОборудованияКлиентПереопределяемый.ЭкземплярОборудованияОбработкаНавигационнойСсылки(Объект, ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементов + +&НаКлиенте +Процедура ТипОборудованияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Если Объект.ТипОборудования <> ВыбранноеЗначение Тогда + Объект.ТипОборудования = ВыбранноеЗначение; + Модифицированность = Истина; + ЗаполнитьСписокДрайверов(); + Элементы.ФормаЗагрузитьССайтаИТС.Доступность = Ложь; + Иначе + Элементы.ФормаЗагрузитьССайтаИТС.Доступность = ЗначениеЗаполнено(Объект.ДрайверОборудования); + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + ОбновитьИнтерфейсФормы(); + + Если НЕ ОрганизацияВидимость Тогда + Объект.Организация = Неопределено; + КонецЕсли; + + МенеджерОборудованияКлиентПереопределяемый.ЭкземплярОборудованияТипОборудованияВыбор(Объект, ЭтотОбъект, ЭтотОбъект, Элемент, ВыбранноеЗначение); + + УстановитьВидимостьОрганизацииНаКлиенте(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДрайверОборудованияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Если ВыбранноеЗначение <> Объект.ДрайверОборудования Тогда + Объект.Наименование = "'" + Строка(ВыбранноеЗначение) + "'" + + ?(ПустаяСтрока(Строка(Объект.РабочееМесто)), + "", + " " + НСтр("ru='на'") + " " + Строка(Объект.РабочееМесто)); + КонецЕсли; + Элементы.ФормаЗагрузитьССайтаИТС.Доступность = ЗначениеЗаполнено(ВыбранноеЗначение); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПараметрыПодключения(Команда) + + Если СозданиеНовогоЭлемента Или Модифицированность Тогда + Если Записать() Тогда + ПроверкаПараметров = Ложь; + Закрыть(); + Иначе + Возврат; + КонецЕсли; + Иначе + ПроверкаПараметров = Ложь; + Закрыть(); + КонецЕсли; + + МенеджерОборудованияКлиент.ВыполнитьНастройкуОборудования(Объект.Ссылка); + +КонецПроцедуры + +&НаКлиенте +Процедура РегистрацияФискальногоНакопителя(Команда) + + ОперацияФискальногоНакопителя(1); + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменениеПараметровРегистрацииФискальногоНакопителя(Команда) + + ОперацияФискальногоНакопителя(2); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытиеФискальногоНакопителя(Команда) + + ОперацияФискальногоНакопителя(3); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиНаСайтИнструкцииНажатие(Элемент) + + АдресЗагрузки = "https://its.1c.ru/db/metod81#browse:13:-1:2115:2511"; + ОткрытьНавигационнуюСсылку(АдресЗагрузки); + +КонецПроцедуры + +&НаКлиенте +Процедура СообщениеИнфоПисьмоОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + АдресЗагрузки = "https://its.1c.ru/bmk/envd_kkt"; + ОткрытьНавигационнуюСсылку(АдресЗагрузки); + +КонецПроцедуры + +&НаКлиенте +Процедура СообщениеВТехническуюПоддержку(Команда) + + Если СозданиеНовогоЭлемента Или Модифицированность Тогда + Записать(); + КонецЕсли; + + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиБПОКлиент"); + Параметры = МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ПараметрыОтправкиСообщенияОбОшибке(); + Параметры.ИдентификаторОборудования = Объект.Ссылка; + Параметры.ТекстОшибки = НСтр("ru = 'Информация для тех.поддержки'"); + ОписаниеОповещения = Новый ОписаниеОповещения("СообщениеВТехническуюПоддержкуЗавершение", ЭтотОбъект); + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.НачатьОтправкуСообщенияОбОшибке(ОписаниеОповещения, Параметры); + +КонецПроцедуры + +&НаКлиенте +Процедура СообщениеВТехническуюПоддержкуЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Не ПустаяСтрока(Результат.КодОшибки) Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(Результат.СообщениеОбОшибке); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОбновитьИнтерфейсФормы(); + + ТипОборудованияККТ = Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + ТипОборудованияФР = Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ФискальныйРегистратор; + ТипОборудованияПЧ = Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков; + + ОрганизацияВидимость = ТипОборудованияККТ Или ТипОборудованияФР Или ТипОборудованияПЧ; + + Элементы.ФискальныеДанные.Видимость = ТипОборудованияККТ И НЕ СозданиеНовогоЭлемента; + + Если Элементы.ФискальныеДанные.Видимость Или Элементы.ОграничениеДоступа.Видимость Тогда + Элементы.Закладки.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху + Иначе + Элементы.Закладки.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + КонецЕсли; + + Элементы.Организация.Видимость = ОрганизацияВидимость; + +КонецПроцедуры + +&НаКлиенте +Процедура ОперацияФискальногоНакопителя_Завершение(РезультатВыполнения, Параметры) Экспорт + + ОчиститьСообщения(); + + Если РезультатВыполнения.Результат Тогда + ТекстСообщения = НСтр("ru='Операция завершена.'"); + Иначе + ТекстСообщения = РезультатВыполнения.ОписаниеОшибки; + КонецЕсли; + + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура ОперацияФискальногоНакопителя_Продолжить(РезультатВыполнения, Параметры) Экспорт + + Если РезультатВыполнения <> Неопределено + И ТипЗнч(РезультатВыполнения) = Тип("Структура") + И ОбщегоНазначенияБПОКлиент.ИспользуетсяЧекопечатающиеУстройства() Тогда + + ФискальноеУстройство = Объект.Ссылка; + ОповещениеПриЗавершении = Новый ОписаниеОповещения("ОперацияФискальногоНакопителя_Завершение", ЭтотОбъект); + МодульОборудованиеЧекопечатающиеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеУстройстваКлиент.НачатьОперациюФНДляФискальногоУстройства(ОповещениеПриЗавершении, + УникальныйИдентификатор, ФискальноеУстройство, РезультатВыполнения); + + КонецЕсли; + + ЭтотОбъект.Прочитать(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОперацияФискальногоНакопителя(ТипОперации) + +#Если ВебКлиент Тогда + ПоказатьПредупреждение(, НСтр("ru='Данный функционал доступен только в режиме тонкого и толстого клиента.'")); + Возврат; +#КонецЕсли + + ФискальноеУстройство = Объект.Ссылка; + Если Не ЗначениеЗаполнено(ФискальноеУстройство) Тогда + Возврат; + КонецЕсли; + + ПараметрыОткрытия = ОборудованиеЧекопечатающиеУстройстваКлиент.ПараметрыФормаНастройкиРегистрацииККТ(); + ПараметрыОткрытия.ФискальноеУстройство = ФискальноеУстройство; + ПараметрыОткрытия.Организация = Объект.Организация; + ПараметрыОткрытия.ТипОперации = ТипОперации; + + ОповещениеПриЗавершении = Новый ОписаниеОповещения("ОперацияФискальногоНакопителя_Продолжить", ЭтотОбъект); + ОборудованиеЧекопечатающиеУстройстваКлиент.ОткрытьФормуНастройкиРегистрацииККТ(ОповещениеПриЗавершении, ПараметрыОткрытия); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокДрайверов() + + Элементы.ДрайверОборудования.СписокВыбора.Очистить(); + + ДрайвераОборудования = МенеджерОборудования.ДрайвераПоТипуОборудования(Объект.ТипОборудования); + Для Каждого ДрайверОборудования Из ДрайвераОборудования Цикл + Элементы.ДрайверОборудования.СписокВыбора.Добавить(ДрайверОборудования.Значение, ДрайверОборудования.Представление); + КонецЦикла; + + Объект.ДрайверОборудования = ПредопределенноеЗначение("Справочник.ДрайверыОборудования.ПустаяСсылка"); + Объект.Наименование = ""; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьНавигационнуюСсылку(НавигационнаяСсылка, Знач Оповещение = Неопределено) + + #Если ТолстыйКлиентОбычноеПриложение Тогда + // Особенность платформы: ПерейтиПоНавигационнойСсылке не доступен в толстом клиенте обычного приложения. + ОповещениеПриЗавершении = Новый ОписаниеОповещения(); + НачатьЗапускПриложения(ОповещениеПриЗавершении, НавигационнаяСсылка); // АПК:534 передаются фиксированные строки + #Иначе + ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка); // АПК:534 передаются фиксированные строки + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВидимостьОрганизацииНаКлиенте() + + Элементы.Организация.Видимость = ОрганизацияВидимость; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьОрганизацииНаСервере() + + Элементы.Организация.Видимость = ОрганизацияВидимость; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьССайтаИТС(Команда) + + // Вставить содержимое обработчика. + Если СозданиеНовогоЭлемента Или Модифицированность Тогда + Записать(); + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ЗагрузитьССайтаИТСЗавершение", ЭтотОбъект); + МенеджерОборудованияКлиент.УстановитьДрайверОборудования(Оповещение, Объект.ДрайверОборудования); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьССайтаИТСЗавершение(РезультатВыполнения, ДополнительныеПараметры) Экспорт + + Если РезультатВыполнения.Результат Тогда + Заголовок = НСтр("ru = 'Компонента загружена.'"); + Текст = СтрШаблон(НСтр("ru = 'Компонента %1 успешно загружена и установлена.'"), + РезультатВыполнения.ИдентификаторУстройства); + Иначе + Заголовок = НСтр("ru = 'Ошибка загрузки компоненты.'"); + Текст = СтрШаблон(НСтр("ru = 'Компонента %1 не загружена, по причине: + |%2.'"), + РезультатВыполнения.ИдентификаторУстройства, + РезультатВыполнения.ОписаниеОшибки); + КонецЕсли; + ПоказатьПредупреждение(,Текст,,Заголовок); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file 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..75e8903 --- /dev/null +++ b/Catalogs/РабочиеМеста.xml @@ -0,0 +1,547 @@ + + + + + + 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 + DontIndex + Use + Use + + + + + ЛокальноеУстройство + + + ru + Локальное устройство + + + + + xs:boolean + + false + + + + false + + false + false + + + true + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + 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 + + + + +
ФормаЭлемента
+
ФормаСписка
+
ФормаВыбора
+
+
+
\ 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..e78fcdb --- /dev/null +++ b/Catalogs/РабочиеМеста/Ext/ObjectModule.bsl @@ -0,0 +1,29 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если ПометкаУдаления Тогда + Если МенеджерОборудованияВызовСервера.РабочееМестоКлиента() = Ссылка Тогда + МенеджерОборудованияВызовСервера.УстановитьРабочееМестоКлиента(Справочники.РабочиеМеста.ПустаяСсылка()); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ 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..ca10333 --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаВыбора/Ext/Form.xml @@ -0,0 +1,185 @@ + +
+ LockOwner + + 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 + false + 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..ef13935 --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаВыбора/Ext/Form/Module.bsl @@ -0,0 +1,70 @@ + +#Область ОбработчикиСобытийФормы + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ТекущееРабочееМесто = МенеджерОборудованияКлиентПовтИсп.РабочееМестоКлиента(); + Список.Параметры.УстановитьЗначениеПараметра("ТекущееРабочееМесто", ТекущееРабочееМесто); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + ИдентификаторКлиента = МенеджерОборудованияКлиент.ИдентификаторКлиентаДляРабочегоМеста(); + РабочееМесто = ПолучитьРабочееМестоПоИдентификаторуКлиента(ИдентификаторКлиента); + + Если НЕ РабочееМесто = Неопределено Тогда + + Отказ = Истина; + + Текст = НСтр("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..8b5f1ab --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,254 @@ + +
+ 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 + false + 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..fd47d32 --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,70 @@ + +#Область ОбработчикиСобытийФормы + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ТекущееРабочееМесто = МенеджерОборудованияКлиентПовтИсп.РабочееМестоКлиента(); + Список.Параметры.УстановитьЗначениеПараметра("ТекущееРабочееМесто", ТекущееРабочееМесто); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + ИдентификаторКлиента = МенеджерОборудованияКлиент.ИдентификаторКлиентаДляРабочегоМеста(); + РабочееМесто = ПолучитьРабочееМестоПоИдентификаторуКлиента(ИдентификаторКлиента); + + Если НЕ РабочееМесто = Неопределено Тогда + + Отказ = Истина; + + Текст = НСтр("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..ed35f7b --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаЭлемента/Ext/Form.xml @@ -0,0 +1,114 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рабочее место</v8:content> + </v8:item> + + LockOwner + useIfNecessary + Items + + false + + + + + + ПослеЗаписи + ПриОткрытии + ПередЗаписью + ПриСозданииНаСервере + + + + Объект.Description + true + Top + EnterOnInput + true + false + false + + + + НаименованиеПриИзменении + + + + Объект.Code + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор клиента</v8:content> + </v8:item> + + Top + false + false + false + + + + + Объект.ИмяКомпьютера + true + Top + false + 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 + + + + 3 + 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..b4dd7c3 --- /dev/null +++ b/Catalogs/РабочиеМеста/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -0,0 +1,140 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем ОтветПередЗаписью; + +#КонецОбласти + +#Область ОбработчикиСобытийФорм + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ПустаяСтрока(Объект.Код) Тогда + Объект.Код = МенеджерОборудованияКлиент.ИдентификаторКлиентаДляРабочегоМеста(); + КонецЕсли; + + МенеджерОборудованияКлиентСервер.ЗаполнитьНаименованиеРабочегоМеста(Объект, ТекущийПользователь); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + + Если Не ПроверкаУникальностиПоИдентификаторуКлиента(Объект.Ссылка, Объект.Код) Тогда + Отказ = Истина; + Текст = НСтр("ru='Ошибка сохранение рабочего места. + |Рабочее место с таким идентификатором клиента уже существует.'"); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(Текст); + Возврат; + КонецЕсли; + + Если Не ПроверкаУникальностиПоНаименованию(Объект.Ссылка, Объект.Наименование)Тогда + Если ОтветПередЗаписью <> Истина Тогда + Отказ = Истина; + Текст = НСтр("ru='Указано неуникальное наименование рабочего места. + |Возможно в дальнейшем это затруднит идентификацию и выбор рабочего места. + |Рекомендуется указывать уникальное наименование рабочих мест. + |Продолжить сохранение с указанным наименованием?'"); + Оповещение = Новый ОписаниеОповещения("ПередЗаписьюЗавершение", ЭтотОбъект); + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписьюЗавершение(Результат, Параметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + ОтветПередЗаписью = Истина; + Записать(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + + Если Объект.Код = МенеджерОборудованияКлиент.ИдентификаторКлиентаДляРабочегоМеста() Тогда + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура НаименованиеПриИзменении(Элемент) + + МенеджерОборудованияКлиентСервер.ЗаполнитьНаименованиеРабочегоМеста(Объект, ТекущийПользователь); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервереБезКонтекста +Функция ПроверкаУникальностиПоНаименованию(Ссылка, Наименование) + + Результат = Истина; + + Если Не ПустаяСтрока(Наименование) Тогда + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | 1 + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.Наименование = &Наименование + | И РабочиеМеста.Ссылка <> &Ссылка + |"); + Запрос.УстановитьПараметр("Наименование", Наименование); + Запрос.УстановитьПараметр("Ссылка" , Ссылка); + Результат = Запрос.Выполнить().Пустой(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Функция ПроверкаУникальностиПоИдентификаторуКлиента(Ссылка, ИдентификаторКлиента) + + Результат = Истина; + + Если Не ПустаяСтрока(ИдентификаторКлиента) Тогда + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | 1 + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.Код = &Код + | И РабочиеМеста.Ссылка <> &Ссылка + |"); + Запрос.УстановитьПараметр("Код" , ИдентификаторКлиента); + Запрос.УстановитьПараметр("Ссылка" , Ссылка); + Результат = Запрос.Выполнить().Пустой(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти \ 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..b7129e0 --- /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/РегистрФискальныхОпераций.xml b/CommonCommands/РегистрФискальныхОпераций.xml new file mode 100644 index 0000000..7ab09ee --- /dev/null +++ b/CommonCommands/РегистрФискальныхОпераций.xml @@ -0,0 +1,29 @@ + + + + + РегистрФискальныхОпераций + + + ru + Регистр фискальных операций + + + + ActionsPanelTools + PictureAndText + + + 0 + true + + + + 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..fe6c424 --- /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..681780f --- /dev/null +++ b/CommonCommands/Синхронизация/Ext/CommandModule.bsl @@ -0,0 +1,13 @@ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ТекстСообщения = Синхронизация.ЗапускСинхронизации(); + Если ПустаяСтрока(ТекстСообщения) Тогда + ТекстСообщения = "Синхронизация выполнена."; + КонецЕсли; + + ПараметрыФормы = Новый Структура("ТекстСообщения", ТекстСообщения); + ОткрытьФорму("ОбщаяФорма.СообщенияОбмена", ПараметрыФормы); + +КонецПроцедуры diff --git a/CommonCommands/УправлениеФискальнымУстройством.xml b/CommonCommands/УправлениеФискальнымУстройством.xml new file mode 100644 index 0000000..67b3764 --- /dev/null +++ b/CommonCommands/УправлениеФискальнымУстройством.xml @@ -0,0 +1,29 @@ + + + + + УправлениеФискальнымУстройством + + + ru + Управление фискальным устройством + + + + ActionsPanelTools + PictureAndText + + + 0 + true + + + + 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..1f5780e --- /dev/null +++ b/CommonCommands/УправлениеЭквайринговымТерминалом.xml @@ -0,0 +1,29 @@ + + + + + УправлениеЭквайринговымТерминалом + + + ru + Управление эквайринговым терминалом + + + + ActionsPanelTools + PictureAndText + + + 0 + true + + + + 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..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..7e3e629 --- /dev/null +++ b/CommonForms/КодВидаНоменклатурнойКлассификации/Ext/Form.xml @@ -0,0 +1,149 @@ + +
+ + false + + + + + + + ПриСозданииНаСервере + + + + true + false + false + true + SingleRow + 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..bb82ae5 --- /dev/null +++ b/CommonForms/НастройкаРегистрацииККТ/Ext/Form.xml @@ -0,0 +1,1322 @@ + +
+ + <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> + + Usual + DontUse + + + + ФискальноеУстройство + true + false + false + false + false + false + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа операция</v8:content> + </v8:item> + + true + Vertical + Usual + false + DontUse + + + + ТипОперации + false + true + true + + + + 0 + + + + ru + Регистрация фискального накопителя + + + 1 + + + + + 0 + + + + ru + Изменение параметров регистрации фискального накопителя + + + 2 + + + + + 0 + + + + ru + Закрытие фискального накопителя + + + 3 + + + + + + + ТипОперацииПриИзменении + + + + РегистрационныйНомерККТ + 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 + DontUse + + + + ОрганизацияНазвание + 40 + false + true + true + + + + + ОрганизацияИНН + false + 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 + DontUse + + + + true + Vertical + Usual + false + DontUse + + + + КодыСистемыНалогообложения0 + Right + + + + + КодыСистемыНалогообложения1 + Right + + + + + + + true + Vertical + Usual + false + DontUse + + + + КодыСистемыНалогообложения2 + Right + + + + + КодыСистемыНалогообложения3 + Right + + + + + + + true + Vertical + Usual + false + DontUse + + + + КодыСистемыНалогообложения4 + Right + + + + + КодыСистемыНалогообложения5 + Right + + + + + + + + + + + Vertical + Usual + false + DontUse + + + + Horizontal + Usual + false + DontUse + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Настройки ККТ</v8:content> + </v8:item> + + Vertical + Usual + DontUse + + + + ПризнакАвтономногоРежима + 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 + DontUse + + + + ПродажаПодакцизногоТовара + Right + + + + + ПроведенияАзартныхИгр + Right + + + + + ПроведенияЛотерей + Right + + + + + УстановкаПринтераВАвтомате + Right + + + + + ПризнакАвтоматическогоТорговогоАвтомата + Right + + + + + ПризнакОказанииУслугОбщественногоПитания + Right + + + + + ПризнакОптовойТорговлиСОрганизациями + Right + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Признаки агента</v8:content> + </v8:item> + + Vertical + Usual + DontUse + + + + ПА_БанковскийПлатежныйАгент + Right + + + ru + Оказание услуг покупателю (клиенту) пользователем, являющимся банковским платежным агентом + + + + + + + ПА_БанковскийПлатежныйСубагент + Right + + + ru + Оказание услуг покупателю (клиенту) пользователем, являющимся банковским платежным субагентом + + + + + + + ПА_ПлатежныйАгент + Right + + + ru + Оказание услуг покупателю (клиенту) пользователем, являющимся платежным агентом + + + + + + + ПА_ПлатежныйСубагент + Right + + + ru + Оказание услуг покупателю (клиенту) пользователем, являющимся платежным субагентом + + + + + + + ПА_Поверенный + Right + + + ru + Осуществление расчета с покупателем (клиентом) пользователем, являющимся поверенным + + + + + + + ПА_Комиссионер + Right + + + ru + Осуществление расчета с покупателем (клиентом) пользователем, являющимся комиссионером + + + + + + + ПА_Агент + Right + + + ru + Осуществление расчета с покупателем (клиентом) пользователем, являющимся агентом и не являющимся банковским платежным агентом (субагентом), платежным агентом (субагентом), поверенным, комиссионером + + + + + + + + + + + Horizontal + Usual + false + DontUse + + + + АдресСайтаФНС + + + + + ОтправительEmail + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Причины изменения сведений о ККТ</v8:content> + </v8:item> + + Usual + DontUse + + + + List + 2 + Row +
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> + + Usual + DontUse + + + + ОрганизацияОФДИНН + false + true + true + + + + + ОрганизацияОФДНазвание + false + true + + + + + + + true + Bottom + Horizontal + Right + Usual + None + DontUse + + + + 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> + + + + 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..b22b1fc --- /dev/null +++ b/CommonForms/НастройкаРегистрацииККТ/Ext/Form/Module.bsl @@ -0,0 +1,282 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем ВыполняетсяОперация; + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ФискальноеУстройство = Параметры.ФискальноеУстройство; + + Если Параметры.Свойство("Организация") Тогда + Организация = Параметры.Организация; + КонецЕсли; + + Если Параметры.ТипОперации <> 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); + Элементы.РегистрационныйНомерККТ.ТолькоПросмотр = НЕ (ТипОперации = 1); + +КонецПроцедуры + +&НаКлиенте +Процедура ПризнакАвтоматическогоРежимаПриИзменении(Элемент) + + ОбновитьСостояниеФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура КодПричиныПеререгистрацииПриИзменении(Элемент) + + ОбновитьСостояниеФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТипОперацииПриИзменении(Элемент) + + ОбновитьСостояниеФормы(); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/CommonForms/СообщенияОбмена.xml b/CommonForms/СообщенияОбмена.xml new file mode 100644 index 0000000..b260bcd --- /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..803f08b --- /dev/null +++ b/CommonForms/СообщенияОбмена/Ext/Form.xml @@ -0,0 +1,452 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Информация</v8:content> + </v8:item> + + DontBlock + false + None + Compact + + Abort + Cancel + Close + CustomizeForm + Help + Ignore + No + OK + OpenFromMainServer + OpenFromStandaloneServer + RestoreValues + Retry + SaveValues + Yes + + false + false + + false + + + ПриОткрытии + ПриСозданииНаСервере + ПриЗакрытии + + + + false + true + Vertical + None + false + #F2F2F7 + + + + false + true + #1C1C1E + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обнаружена новая версия приложения</v8:content> + </v8:item> + + Center + + + + + false + true + #8E8E93 + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Шаг 1 из 7</v8:content> + </v8:item> + + Center + + + + + true + Vertical + None + false + #FFFFFF + + + + false + 2 + true + #1C1C1E + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Документы</v8:content> + </v8:item> + + Center + + + + + false + 2 + true + #007AFF + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>№ 14 Отправлен</v8:content> + </v8:item> + + Center + + + + + false + false + true + #FFFFFF + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обновить</v8:content> + </v8:item> + + Center + #007AFF + + + + + + + false + 3 + true + #1C1C1E + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Приложение открыто. Чтобы обновить конфигурацию, откройте список приложений платформы.</v8:content> + </v8:item> + + Center + + + + + false + true + #007AFF + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>● ○ ○ ○ ○ ○ ○</v8:content> + </v8:item> + + Center + + + + + + + List + None + true + true + false + false +
false
+ true + false + false + СписокСообщений + #F2F2F7 + + + false + + + false + + + + + СписокСообщений + SearchStringRepresentation + + + + + + + СписокСообщений + ViewStatusRepresentation + + + + + + + СписокСообщений + SearchControl + + + + + + + СписокСообщений.Текст + true + None + EnterOnInput + false + 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: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> + + + v8:ValueTable + + + + + <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 + + 20 + 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:decimal + + 2 + 0 + Nonnegative + + + + + + + + <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 + + + + + + xs:string + + 0 + Variable + + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + + + + xs:boolean + + + + + xs:string + + 0 + Variable + + + + + + xs:boolean + + + + \ 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..9856b7b --- /dev/null +++ b/CommonForms/СообщенияОбмена/Ext/Form/Module.bsl @@ -0,0 +1,260 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("ТекстСообщения") Тогда + ТекстСообщения = Параметры.ТекстСообщения; + КонецЕсли; + + Если ПустаяСтрока(ТекстСообщения) Тогда + ТекстСообщения = "Нет сообщений."; + КонецЕсли; + + Если Параметры.Свойство("ПредложитьОбновление") Тогда + ПредложитьОбновление = Параметры.ПредложитьОбновление; + КонецЕсли; + + Если Параметры.Свойство("ИдентификаторПубликации") Тогда + ИдентификаторПубликации = Параметры.ИдентификаторПубликации; + КонецЕсли; + + Элементы.ЗагрузитьОбновление.Видимость = ПредложитьОбновление; + Элементы.Закрыть.Видимость = ПредложитьОбновление; + + ЭтоАнимацияОбновления = Параметры.Свойство("ПоказатьАнимациюОбновления") + И Параметры.ПоказатьАнимациюОбновления = Истина; + + Если Не ЭтоАнимацияОбновления Тогда + ЭтоАнимацияОбновления = СтрНайти(НРег(ТекстСообщения), "обнаружена новая версия") > 0; + КонецЕсли; + + Если ЭтоАнимацияОбновления Тогда + Элементы.ГруппаАнимацияОбновления.Видимость = Истина; + Элементы.СписокСообщений.Видимость = Ложь; + Элементы.ЗагрузитьОбновление.Видимость = Ложь; + Элементы.Закрыть.Видимость = Истина; + Элементы.Закрыть.Заголовок = "Понятно"; + + Если Не ПустаяСтрока(ТекстСообщения) Тогда + Элементы.ЗаголовокОбновления.Заголовок = ТекстСообщения; + КонецЕсли; + КонецЕсли; + + ЗаполнитьСписокСообщений(); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокСообщений() + + СписокСообщений.Очистить(); + + СтрокиТекста = СтрРазделить(ТекстСообщения, Символы.ПС); + Для Каждого СтрокаТекста Из СтрокиТекста Цикл + Если ПустаяСтрока(СтрокаТекста) Тогда + Продолжить; + КонецЕсли; + НоваяСтрока = СписокСообщений.Добавить(); + НоваяСтрока.Текст = СтрокаТекста; + НоваяСтрока.Вид = ВидСообщенияПоТексту(СтрокаТекста); + КонецЦикла; + + Если СписокСообщений.Количество() = 0 Тогда + НоваяСтрока = СписокСообщений.Добавить(); + НоваяСтрока.Текст = "Нет сообщений."; + НоваяСтрока.Вид = "Инфо"; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ВидСообщенияПоТексту(Текст) + + СтрокаПоиска = НРег(Текст); + + Если СтрНайти(СтрокаПоиска, "ошибка") > 0 + Или СтрНайти(СтрокаПоиска, "не удалось") > 0 + Или СтрНайти(СтрокаПоиска, "не вернула") > 0 + Или СтрНайти(СтрокаПоиска, "не записаны") > 0 + Или СтрНайти(СтрокаПоиска, "не найден") > 0 Тогда + Возврат "Ошибка"; + КонецЕсли; + + Если СтрНайти(СтрокаПоиска, "напоминание") > 0 + Или СтрНайти(СтрокаПоиска, "обновление") > 0 + Или СтрНайти(СтрокаПоиска, "опубликована") > 0 + Или СтрНайти(СтрокаПоиска, "обнаружена новая версия") > 0 + Или СтрНайти(СтрокаПоиска, "загрузить обновление") > 0 Тогда + Возврат "Обновление"; + КонецЕсли; + + Если СтрНайти(СтрокаПоиска, "загружена") > 0 + Или СтрНайти(СтрокаПоиска, "отправлено") > 0 + Или СтрНайти(СтрокаПоиска, "обновлены") > 0 + Или СтрНайти(СтрокаПоиска, "обновлена") > 0 + Или СтрНайти(СтрокаПоиска, "изменений нет") > 0 + Или СтрНайти(СтрокаПоиска, "синхронизация выполнена") > 0 Тогда + Возврат "Успех"; + КонецЕсли; + + Возврат "Инфо"; + +КонецФункции + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + // Анимация обновления: без автозакрытия, закрытие только по кнопке «Понятно». + Если ЭтоАнимацияОбновления Тогда + ОтключитьОбработчикОжидания("ЗакрытьФормуПоТаймеру"); + НомерКадра = 0; + ПоказатьКадрАнимации(); + ПодключитьОбработчикОжидания("СледующийКадрАнимации", 2); + Возврат; + КонецЕсли; + + Если ПредложитьОбновление Тогда + Возврат; + КонецЕсли; + + Таймаут = 4; + Если Параметры.Свойство("ТаймаутЗакрытия") Тогда + Если Параметры.ТаймаутЗакрытия = 0 Тогда + Возврат; + КонецЕсли; + Таймаут = Параметры.ТаймаутЗакрытия; + КонецЕсли; + + ПодключитьОбработчикОжидания("ЗакрытьФормуПоТаймеру", Таймаут); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии(ЗавершениеРаботы) + + ОтключитьОбработчикОжидания("СледующийКадрАнимации"); + ОтключитьОбработчикОжидания("ЗакрытьФормуПоТаймеру"); + +КонецПроцедуры + +&НаКлиенте +Процедура СледующийКадрАнимации() + + Если Не Открыта() Тогда + ОтключитьОбработчикОжидания("СледующийКадрАнимации"); + Возврат; + КонецЕсли; + + НомерКадра = НомерКадра + 1; + Если НомерКадра > 6 Тогда + НомерКадра = 0; + КонецЕсли; + ПоказатьКадрАнимации(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьКадрАнимации() + + Элементы.НомерШага.Заголовок = "Шаг " + XMLСтрока(НомерКадра + 1) + " из 7"; + Элементы.ЭкранКнопка.Видимость = Ложь; + + Если НомерКадра = 0 Тогда + Элементы.ЭкранСтрока1.Заголовок = "Документы"; + Элементы.ЭкранСтрока2.Заголовок = "№ 14 Отправлен"; + Элементы.ПодсказкаКадра.Заголовок = "Приложение открыто. Чтобы обновить конфигурацию, откройте список приложений платформы."; + Элементы.ИндикаторКадра.Заголовок = "● ○ ○ ○ ○ ○ ○"; + ИначеЕсли НомерКадра = 1 Тогда + Элементы.ЭкранСтрока1.Заголовок = "Приложения"; + Элементы.ЭкранСтрока2.Заголовок = "ВасяВасилек"; + Элементы.ПодсказкаКадра.Заголовок = "Откройте список запущенных приложений (свайп вверх или кнопка приложений)."; + Элементы.ИндикаторКадра.Заголовок = "○ ● ○ ○ ○ ○ ○"; + ИначеЕсли НомерКадра = 2 Тогда + Элементы.ЭкранСтрока1.Заголовок = "Удерживайте"; + Элементы.ЭкранСтрока2.Заголовок = "карточку базы"; + Элементы.ПодсказкаКадра.Заголовок = "Нажмите и удерживайте карточку нужной базы, пока не появятся действия."; + Элементы.ИндикаторКадра.Заголовок = "○ ○ ● ○ ○ ○ ○"; + ИначеЕсли НомерКадра = 3 Тогда + Элементы.ЭкранСтрока1.Заголовок = "Действия"; + Элементы.ЭкранСтрока2.Заголовок = ""; + Элементы.ЭкранКнопка.Видимость = Истина; + Элементы.ПодсказкаКадра.Заголовок = "Нажмите «Обновить». Это штатная команда мобильной платформы 1С."; + Элементы.ИндикаторКадра.Заголовок = "○ ○ ○ ● ○ ○ ○"; + ИначеЕсли НомерКадра = 4 Тогда + Элементы.ЭкранСтрока1.Заголовок = "Информация"; + Элементы.ЭкранСтрока2.Заголовок = "Обнаружена новая версия приложения"; + Элементы.ПодсказкаКадра.Заголовок = "Платформа сравнивает публикацию с установленной конфигурацией."; + Элементы.ИндикаторКадра.Заголовок = "○ ○ ○ ○ ● ○ ○"; + ИначеЕсли НомерКадра = 5 Тогда + Элементы.ЭкранСтрока1.Заголовок = "Загрузка"; + Элементы.ЭкранСтрока2.Заголовок = "████████░░"; + Элементы.ПодсказкаКадра.Заголовок = "Конфигурация скачивается с публикации. Не закрывайте приложение до конца загрузки."; + Элементы.ИндикаторКадра.Заголовок = "○ ○ ○ ○ ○ ● ○"; + Иначе + Элементы.ЭкранСтрока1.Заголовок = "Готово"; + Элементы.ЭкранСтрока2.Заголовок = "Версия обновлена"; + Элементы.ПодсказкаКадра.Заголовок = "Приложение перезапускается уже на новой версии."; + Элементы.ИндикаторКадра.Заголовок = "○ ○ ○ ○ ○ ○ ●"; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьФормуПоТаймеру() + + ОтключитьОбработчикОжидания("ЗакрытьФормуПоТаймеру"); + Если Открыта() Тогда + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьФорму(Команда) + + ОтключитьОбработчикОжидания("ЗакрытьФормуПоТаймеру"); + ОтключитьОбработчикОжидания("СледующийКадрАнимации"); + Если Открыта() Тогда + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьОбновление(Команда) + + ОтключитьОбработчикОжидания("ЗакрытьФормуПоТаймеру"); + Элементы.ЗагрузитьОбновление.Доступность = Ложь; + Элементы.Закрыть.Доступность = Ложь; + ТекстСообщения = "Загрузка обновления..." + + Символы.ПС + "Приложение будет перезапущено."; + ЗаполнитьСписокСообщений(); + + ПодготовитьЗагрузкуОбновленияНаСервере(); + ЗафиксироватьОбновлениеНаСервере(); + Оповестить("ЗагрузитьОбновлениеТСД"); + ПодключитьОбработчикОжидания("ПерезапуститьДляОбновления", 1); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерезапуститьДляОбновления() + + ОтключитьОбработчикОжидания("ПерезапуститьДляОбновления"); + ЗавершитьРаботуСистемы(Ложь, Истина); + +КонецПроцедуры + +&НаСервере +Процедура ПодготовитьЗагрузкуОбновленияНаСервере() + + Синхронизация.ПодготовитьЗагрузкуОбновления(); + +КонецПроцедуры + +&НаСервере +Процедура ЗафиксироватьОбновлениеНаСервере() + + Синхронизация.ЗафиксироватьИдентификаторПубликации(ИдентификаторПубликации); + +КонецПроцедуры 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..618626c --- /dev/null +++ b/CommonForms/УправлениеФискальнымУстройством/Ext/Form.xml @@ -0,0 +1,219 @@ + +
+ 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..d7326e4 --- /dev/null +++ b/CommonForms/УправлениеЭквайринговымТерминалом/Ext/Form.xml @@ -0,0 +1,277 @@ + +
+ 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/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..8ce6da3 --- /dev/null +++ b/CommonModules/ВнешниеКомпонентыБПО/Ext/Module.bsl @@ -0,0 +1,313 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2022, ООО 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..f4b9376 --- /dev/null +++ b/CommonModules/ВнешниеКомпонентыБПОКлиент/Ext/Module.bsl @@ -0,0 +1,871 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2023, ООО 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); + Исключение + РезультатПодключения.Подключено = Ложь; + КонецПопытки; + КонецЕсли; + + Если Не РезультатПодключения.Подключено Тогда + РезультатПодключения.ОписаниеОшибки = СтрШаблон( + НСтр("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 Тогда + Возврат; + КонецЕсли; + ПоследнийИндекс = МакетыДляПереустановки.ВГраница(); + ТекущийМакет = МакетыДляПереустановки[ПоследнийИндекс]; + МакетыДляПереустановки.Удалить(ПоследнийИндекс); + + ОповещениеУстановки = Новый ОписаниеОповещения("УстановитьКомпонентуИзМакетаРекурсивно", ЭтотОбъект, Контекст); + УстановитьКомпонентуИзМакета(ОповещениеУстановки, ТекущийМакет); + +КонецПроцедуры + +#КонецЕсли + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Параметры для вызова процедуры ВнешниеКомпонентыКлиент.ПодключитьКомпоненту. +// +// Возвращаемое значение: +// Структура: +// * Кэшировать - Булево - (по умолчанию Истина) использовать механизм кэширования компонент на клиенте. +// * ПредложитьУстановить - Булево - (по умолчанию Истина) предлагать устанавливать компоненту. +// * ПредложитьЗагрузить - Булево - (по умолчанию Истина) предлагать загрузить компоненту с сайта ИТС. +// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. +// * ИдентификаторыСозданияОбъектов - Массив из Строка - массив строк идентификаторов создания экземпляров модуля объекта, +// используется только для компонент, у которых есть несколько идентификаторов создания объектов, +// при задании параметр Идентификатор будет использоваться только для определения компоненты. +// * Изолированно - Булево, Неопределено - (по умолчанию Неопределено) если Истина, компонента будет подключена +// изолированно, в этом случае внешняя компонента загружается в отдельный процесс операционной системы; +// Ложь - в этом случае внешняя компонента будет выполняться в том же процессе операционной системы, +// который выполняет код встроенного языка; Неопределено - поддерживается поведение платформы по умолчанию: +// изолированно - если компонентой поддерживается только этот режим, не изолированно - в остальных случаях. +// См. 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..b02150d --- /dev/null +++ b/CommonModules/ВнешниеКомпонентыБПОПереопределяемый/Ext/Module.bsl @@ -0,0 +1,35 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2022, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Переопределяемая процедура для определения режима вызова подключения внешних компонент +// +// Параметры: +// Изолированно - Булево - Изолированно +// СтандартнаяОбработка - Булево - признак стандартной обработки. +// +Процедура ИзолированноеПодключенияВнешнихКомпонентНаСервере(Изолированно, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +// Переопределяемая процедура для определения режима вызова подключения внешних компонент +// +// Параметры: +// Изолированно - Булево - Изолированно +// СтандартнаяОбработка - Булево - признак стандартной обработки. +// +Процедура ИзолированноеПодключенияВнешнихКомпонентНаКлиенте(Изолированно, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file 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..d1e7cda --- /dev/null +++ b/CommonModules/ГенерацияШтрихкода/Ext/Module.bsl @@ -0,0 +1,556 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2022, ООО 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: +// * ОтображатьТекст - Булево - отображать 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 = 'Ошибка генерации штрихкода'", + МодульОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + #КонецЕсли + КонецПопытки; + + Возврат ДвоичныеДанныеКартинки; + +КонецФункции + +// Описание подключения внешней компоненты (Barcode). +// +// Возвращаемое значение: +// Структура: +// * ПолноеИмяМакета - Строка +// * ИмяОбъекта - Строка +// +Функция ОписаниеКомпоненты() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("ИмяОбъекта", "Barcode"); + Параметры.Вставить("ПолноеИмяМакета", "ОбщийМакет.КомпонентаПечатиШтрихкодов"); + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Выполняет подключение внешней компоненты. +// +// Возвращаемое значение: +// ОбъектВнешнейКомпоненты +// Неопределено - если компоненту не удалось загрузить. +// +Функция ПодключитьКомпонентуГенерацииИзображенияШтрихкода() Экспорт + + ВнешняяКомпонента = Неопределено; + ИмяОбъекта = ОписаниеКомпоненты().ИмяОбъекта; + ПолноеИмяМакета = ОписаниеКомпоненты().ПолноеИмяМакета; + + МодульОбщегоНазначения = МодульОбщегоНазначения(); + Если МодульОбщегоНазначения.ПодсистемаСуществует("ПоддержкаОборудования") Тогда + // подключение компоненты через БПО + МодульВнешниеКомпонентыБПО = МодульОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыБПО"); + ВнешняяКомпонента = МодульВнешниеКомпонентыБПО.ПодключитьКомпоненту(ИмяОбъекта, ПолноеИмяМакета); + Иначе + // подключение компоненты через БСП + // Вызов БСП +#Если НЕ МобильноеПриложениеСервер Тогда + УстановитьОтключениеБезопасногоРежима(Истина); + Если МодульОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Если МодульОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеКомпоненты") Тогда + МодульВнешниеКомпонентыСервер = МодульОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыСервер"); + ПараметрыПодключения = МодульВнешниеКомпонентыСервер.ПараметрыПодключения(); + РезультатПодключения = МодульВнешниеКомпонентыСервер.ПодключитьКомпоненту(ИмяОбъекта); + Если РезультатПодключения.Подключено Тогда + ВнешняяКомпонента = РезультатПодключения.ПодключаемыйМодуль; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ВнешняяКомпонента = Неопределено Тогда + ВнешняяКомпонента = МодульОбщегоНазначения.ПодключитьКомпонентуИзМакета(ИмяОбъекта, ПолноеИмяМакета); + КонецЕсли; +#КонецЕсли + // Конец Вызов БСП + КонецЕсли; + + Если ВнешняяКомпонента = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + // Установим основные параметры компоненты. + // Если в системе установлен шрифт Tahoma. + Если ВнешняяКомпонента.НайтиШрифт("Tahoma") Тогда + // Выбираем его как шрифт для формирования картинки. + ВнешняяКомпонента.Шрифт = "Tahoma"; + Иначе + // Шрифт Tahoma в системе отсутствует. + // Обойдем все доступные компоненте шрифты. + Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл + // Получим очередной шрифт, доступный компоненте. + ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч); + // Если шрифт доступен + Если ТекущийШрифт <> Неопределено Тогда + // Они и будет шрифтом для формирования штрихкода. + ВнешняяКомпонента.Шрифт = ТекущийШрифт; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + // Установим размер шрифта + ВнешняяКомпонента.РазмерШрифта = 12; + + Возврат ВнешняяКомпонента; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Подготовить изображения штрихкода. +// +// Параметры: +// ВнешняяКомпонента - см. ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода +// ПараметрыШтрихкода - см. ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода +// +// Возвращаемое значение: +// Структура: +// Результат - Булево - результат генерации штрихкода. +// ДвоичныеДанные - ДвоичныеДанные - двоичные данные изображения штрихкода. +// Картинка - Картинка - картинка с сформированным штрихкодом или НЕОПРЕДЕЛЕНО. +// +Функция ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода) + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("MakeBarcode"); + ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters"); + + // Ширина генерируемого изображения в пикселах + ШиринаШтрихкода = ?(ПараметрыШтрихкода.Ширина <= 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.ЗаписатьКонецЭлемента(); + // Тип штрихкода - QR + Если ПараметрыШтрихкода.ТипКода = 16 Тогда + Если ЗначениеЗаполнено(ПараметрыШтрихкода.ЛоготипКартинка) Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("LogoImageBase64"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(ПараметрыШтрихкода.ЛоготипКартинка)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + Если Не ПустаяСтрока(ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК) Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("LogoSizePercentFromBarcode"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(Число(ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК))); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + КонецЕсли; + // Определение типа штрихкода. + ШтрихкодАвтоТип = (ПараметрыШтрихкода.ТипКода = 99); + ЗаписьXML.ЗаписатьНачалоЭлемента("CodeAuto"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(ШтрихкодАвтоТип)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + Если НЕ ШтрихкодАвтоТип Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("CodeType"); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(Число(ПараметрыШтрихкода.ТипКода))); + Запись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КоличествоСтрок; + КонецЕсли; + + Если ПараметрыШтрихкода.Свойство("УбратьЛишнийФон") Тогда + ВнешняяКомпонента.УбратьЛишнийФон = ПараметрыШтрихкода.УбратьЛишнийФон; + КонецЕсли; + + ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст; + // Формируем картинку штрихкода. + ВнешняяКомпонента.ЗначениеКода = ШтрихкодВрем; + // Угол поворота штрихкода. + ВнешняяКомпонента.УголПоворота = ?(ПараметрыШтрихкода.Свойство("УголПоворота"), ПараметрыШтрихкода.УголПоворота, 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..be97b33 --- /dev/null +++ b/CommonModules/ГенерацияШтрихкодаСерверПовтИсп/Ext/Module.bsl @@ -0,0 +1,71 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2022, ООО 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..871f09a --- /dev/null +++ b/CommonModules/ИнтеграцияПодсистемБПО/Ext/Module.bsl @@ -0,0 +1,174 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2022, ООО 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..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..a763c89 --- /dev/null +++ b/CommonModules/ИнтеграцияПодсистемБПОКлиент/Ext/Module.bsl @@ -0,0 +1,128 @@ +#Область ПрограммныйИнтерфейс + +#Область ОбработчикиСобытийБСП +// Обработка программных событий, возникающих в подсистемах БСП. +// Только для вызовов из библиотеки БСП в БТС. + +// Определяет события, на которые подписана эта библиотека. +// +// Параметры: +// Подписки - Структура - Ключами свойств структуры являются имена событий, на которые +// подписана эта библиотека. +// +Процедура ПриОпределенииПодписокНаСобытияБСП(Подписки) Экспорт + + // БазоваяФункциональность + Подписки.ПередНачаломРаботыСистемы = Истина; + Подписки.ПриНачалеРаботыСистемы = Истина; + Подписки.ПередЗавершениемРаботыСистемы = Истина; + +КонецПроцедуры + +// Функция, вызываемая перед началом работы системы. +// +Процедура ПередНачаломРаботыСистемы() Экспорт + +КонецПроцедуры + +// Функция, вызываемая при начале работы системы. +// +Процедура ПриНачалеРаботыСистемы() Экспорт + + ПараметрыРаботыКлиента = ПараметрыРаботыКлиентаПриЗапуске(); + ПодготовитьПараметрыПриложения(ПараметрыРаботыКлиента); + +КонецПроцедуры + +// Процедура, вызываемая при начале работы системы, выполняет подготовку данных механизма. +// +Процедура ПередЗавершениемРаботыСистемы() Экспорт + +КонецПроцедуры + +#КонецОбласти + +// Выполняет обработку внешнего события, вызывается из глобального модуля +// +// Параметры: +// Источник - Строка. +// Событие - Строка. +// Данные - Строка. +Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) Экспорт + + ОписаниеОшибки = ""; + // Подготовить данные + ОписаниеСобытия = Новый Структура(); + ОписаниеСобытия.Вставить("Источник", Источник); + ОписаниеСобытия.Вставить("Событие", Событие); + ОписаниеСобытия.Вставить("Данные", Данные); + // Передать на обработку данные. + Результат = МенеджерОборудованияКлиент.ОбработатьСобытиеОтУстройства(ОписаниеСобытия, ОписаниеОшибки); + Если Не Результат Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='При обработке внешнего события от устройства произошла ошибка.'") + Символы.ПС + ОписаниеОшибки); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает значения параметров, необходимых для работы клиентского кода конфигурации +// без дополнительных серверных вызовов. +// +// Возвращаемое значение: +// Структура: +// * ТекущаяДатаНаКлиенте - Дата +Функция ПараметрыРаботыКлиентаПриЗапуске() Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + ПараметрыРаботыКлиента = ОбщегоНазначенияБПОКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыРаботыКлиента.Свойство("ИменаМакетовДляПереустановки") Тогда + ПараметрыКлиента = Новый Структура(); + ПодготовитьПараметрыКлиентаНаСервере(ПараметрыКлиента); + Возврат ПараметрыРаботыКлиента; + КонецЕсли; + КонецЕсли; + + Возврат ИнтеграцияПодсистемБПОКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + +КонецФункции + +Процедура ПодготовитьПараметрыКлиентаНаСервере(ПараметрыКлиента) Экспорт + + ПараметрыКлиента.Вставить("ИдентификаторКлиента", МенеджерОборудованияКлиент.ИдентификаторКлиентаДляРабочегоМеста()); + #Если ВебКлиент Тогда + ПараметрыКлиента.Вставить("ИмяКомпьютера", ""); + #Иначе + ПараметрыКлиента.Вставить("ИмяКомпьютера", ИмяКомпьютера()); + #КонецЕсли + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПодготовитьПараметрыПриложения(ПараметрыРаботыКлиента) + + Если ПараметрыПриложения = Неопределено Тогда + ПараметрыПриложения = Новый Соответствие(); + КонецЕсли; + + Если Не ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + ИмяПараметра = "БПО.ПодсистемыКонфигурации"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, ПараметрыРаботыКлиента.ИменаПодсистем); + КонецЕсли; + КонецЕсли; + + ИмяПараметра = "БПО.ВерсияБСП"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, ПараметрыРаботыКлиента.ВерсияБСП); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + 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..a2bd11a --- /dev/null +++ b/CommonModules/ИнтеграцияПодсистемБПОКлиентПовтИсп/Ext/Module.bsl @@ -0,0 +1,23 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Создает структуру и заполняет параметры работы клиента на сервере +// Стандарт Минимизация количества серверных вызовов и трафика. +// +// Возвращаемое значение: +// Структура: +// * ТекущаяДатаНаКлиенте - Дата +Функция ПараметрыРаботыКлиентаПриЗапуске() Экспорт + + ПараметрыКлиента = Новый Структура(); + ИнтеграцияПодсистемБПОКлиент.ПодготовитьПараметрыКлиентаНаСервере(ПараметрыКлиента); + + Параметры = Новый Структура(); + Параметры.Вставить("ПараметрыКлиентаНаСервереБПО", ПараметрыКлиента); + ИнтеграцияПодсистемБПОСлужебныйВызовСервера.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + 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..284a5a9 --- /dev/null +++ b/CommonModules/ИнтеграцияПодсистемБПОСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1,31 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Заполняет параметры работы клиента на сервере +// При использовании БСП процедуру требуется вызвать из процедуры +// ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента() +// +// Параметры: +// Параметры - Структура: +// * ИдентификаторКлиента - Строка - (входящий) идентификатор рабочего места клиента +// * ИменаМакетовДляПереустановки - Массив из Структура - имена макетов для переустановки внешних компонент +// * ИдентификаторОбсужденияРаспределеннойФискализации - ИдентификаторОбсужденияСистемыВзаимодействия - +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт + + ИнтеграцияПодсистемБПО.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); + +КонецПроцедуры + +Процедура ЗаполнитьПараметрыПоПараметрамКлиентаНаСервере(Параметры, ПараметрыКлиентаНаСервере) Экспорт + + ПараметрыСеанса.ПараметрыКлиентаНаСервереБПО = Новый ФиксированнаяСтруктура(ПараметрыКлиентаНаСервере); + + ИмяКомпьютера = ?(ПараметрыКлиентаНаСервере.Свойство("ИмяКомпьютера"), ПараметрыКлиентаНаСервере.ИмяКомпьютера, ""); + ИдентификаторКлиента = ?(ПараметрыКлиентаНаСервере.Свойство("ИдентификаторКлиента"), ПараметрыКлиентаНаСервере.ИдентификаторКлиента, ""); + Если НЕ ПустаяСтрока(ИмяКомпьютера) Тогда + ИменаМакетовДляПереустановки = МенеджерОборудования.МакетыДляПереустановкиДрайверов(ИдентификаторКлиента, ИмяКомпьютера); + Параметры.Вставить("ИменаМакетовДляПереустановки", ИменаМакетовДляПереустановки); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти 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..7c43195 --- /dev/null +++ b/CommonModules/МенеджерОборудования/Ext/Module.bsl @@ -0,0 +1,822 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область Системные + +// Возвращает номер версии библиотеки подключаемого оборудования. +// +// Возвращаемое значение: +// Строка. +// +Функция ВерсияБиблиотеки() Экспорт + + ВерсияБиблиотекиБПО = "3.2.130"; + Возврат ВерсияБиблиотекиБПО; + +КонецФункции + +// Возвращает список доступных типов оборудования. +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования - Массив доступных типов подключаемого оборудования в конфигурации. +// +Функция ДоступныеТипыОборудования() Экспорт + + СписокТиповОборудования = Новый Массив; + СтандартнаяОбработка = Истина; + + МенеджерОборудованияВызовСервераПереопределяемый.ДоступныеТипыОборудования(СписокТиповОборудования, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + СписокТиповОборудования.Очистить(); + Если ОбщегоНазначенияБПО.ИспользуетсяУстройстваВвода() Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ККТ); + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяДисплеиПокупателя() Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ДисплейПокупателя); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы() Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяВесовоеОборудование() Тогда + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ЭлектронныеВесы); + СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ВесыСПечатьюЭтикеток); + КонецЕсли; + КонецЕсли; + + Возврат СписокТиповОборудования; + +КонецФункции + +// Возвращает доступность добавление новых драйверов. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноДобавлениеНовыхДрайверов() Экспорт + +#Если МобильноеПриложениеСервер Тогда + Результат = Ложь; +#Иначе + Результат = Истина; + ДобавлениеНовыхДрайверовДоступно = Результат; + СтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.ДоступноДобавлениеНовыхДрайверов(ДобавлениеНовыхДрайверовДоступно, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Результат, ДобавлениеНовыхДрайверовДоступно); +#КонецЕсли + Возврат Результат; + +КонецФункции + +// Возвращает доступность сетевого оборудования. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноСетевоеОборудование() Экспорт + +#Если МобильноеПриложениеСервер Тогда + Результат = Ложь; +#Иначе + Результат = Истина; + СетевоеОборудованиеДоступно = Результат; + СтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.ДоступноСетевоеОборудование(СетевоеОборудованиеДоступно, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Результат, СетевоеОборудованиеДоступно); +#КонецЕсли + Возврат Результат; + +КонецФункции + +// Возвращает доступность инкассации в форме управление фискальным устройством. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноИнкассацияВУправлениеФискальнымУстройством() Экспорт + + Результат = Ложь; + ИнкассацияДоступна = Результат; + СтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.ДоступноИнкассацияВУправлениеФискальнымУстройством(ИнкассацияДоступна, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Результат, ИнкассацияДоступна); + Возврат Результат; + +КонецФункции + +// Ведется учет ИСМП в конфигурации +// +// Возвращаемое значение: +// Булево - Ведется учет ИСМП в конфигурации +// +Функция ВедетсяУчетПродукцииИСМП() Экспорт + + СтандартнаяОбработка = Истина; + УчетПродукцииИСМП = Ложь; + МенеджерОборудованияВызовСервераПереопределяемый.ВедетсяУчетПродукцииИСМП(УчетПродукцииИСМП, СтандартнаяОбработка); + Результат = ?(Не СтандартнаяОбработка, УчетПродукцииИСМП, Ложь); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ОбновлениеДрайверов + +// Обновить поставляемые драйвера БПО. +// +Процедура ОбновитьПоставляемыеДрайвера() Экспорт + + МодулиОбновления = Новый Массив(); + Если ОбщегоНазначенияБПО.ИспользуетсяУстройстваВвода() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеУстройстваВвода")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройства")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеПлатежныеСистемы")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяДисплеиПокупателя() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеДисплеиПокупателя")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяВесовоеОборудование() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеВесовоеОборудование")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяТерминалыСбораДанных() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеТерминалыСбораДанных")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяПринтерыЭтикеток() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеПринтерыЭтикеток")); + КонецЕсли; + Если ОбщегоНазначенияБПО.ИспользуетсяСчитывательRFID() Тогда + МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеСчитывательRFID")); + КонецЕсли; + + ДрайвераОборудования = НоваяТаблицаПоставляемыхДрайверовОборудования(); + Для Каждого МодульОбновления Из МодулиОбновления Цикл + МодульОбновления.ОбновитьПоставляемыеДрайвера(ДрайвераОборудования); + КонецЦикла; + + Справочники.ДрайверыОборудования.ПриНачальномЗаполненииЭлементов(ДрайвераОборудования); + + УдалитьУстаревшиеДрайвера(); + +КонецПроцедуры + +// Обновить установленные драйвера. +// +Процедура ОбновитьУстановленныеДрайвера() Экспорт + + // ККТ с передачей данных ОФД + ОбновитьУстановленныеДрайвераПоТипу(Перечисления.ТипыПодключаемогоОборудования.ККТ); + // Конец ККТ с передачей данных ОФД. + + // Принтеры чеков + ОбновитьУстановленныеДрайвераПоТипу(Перечисления.ТипыПодключаемогоОборудования.ПринтерЭтикеток); + // Конец Принтеры чеков. + + // Сканеры штрихкода + ОбновитьУстановленныеДрайвераПоТипу(Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода); + // Конец Сканеры штрихкода + +КонецПроцедуры + +// Записывает изменения в переданном объекте. +// Для использования в обработчиках обновления. +// +// Параметры: +// Данные - Произвольный - объект, набор записей или менеджер константы, который +// необходимо записать. +// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. +// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. +// +Процедура ЗаписатьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, Знач ВключитьБизнесЛогику = Ложь) Экспорт + + Данные.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; + Если Не РегистрироватьНаУзлахПлановОбмена Тогда + Данные.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + Данные.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + КонецЕсли; + + Данные.Записать(); + +КонецПроцедуры + +// Устанавливает признак необходимости переустановки оборудования для подключаемого оборудования на рабочем месте. +// +// Параметры: +// РабочееМесто - СправочникСсылка.РабочиеМеста. +// ДрайверОборудования - СправочникСсылка.ДрайверыОборудования. +// Признак - Булево - требуется переустановить драйвер +// +Процедура УстановитьПризнакПереустановкиДрайвера(РабочееМесто, ДрайверОборудования, Признак) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПодключаемоеОборудование.Ссылка + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.РабочееМесто = &РабочееМесто + | И ПодключаемоеОборудование.ДрайверОборудования = &ДрайверОборудования + | И НЕ ПодключаемоеОборудование.ТребуетсяПереустановка = &ТребуетсяПереустановка"); + + Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто); + Запрос.УстановитьПараметр("ДрайверОборудования", ДрайверОборудования); + Запрос.УстановитьПараметр("ТребуетсяПереустановка", Признак); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); + СправочникОбъект.ТребуетсяПереустановка = Признак; + ЗаписатьДанные(СправочникОбъект) + КонецЦикла; + +КонецПроцедуры + +// Обновить установленные драйвера по справочнику подключаемого оборудования. +// +// Параметры: +// ТипОборудования - ПеречисленияСсылка.ТипыПодключаемогоОборудования +Процедура ОбновитьУстановленныеДрайвераПоТипу(ТипОборудования) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос("ВЫБРАТЬ + | ПодключаемоеОборудование.Ссылка + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | (ПодключаемоеОборудование.ТипОборудования = &ТипОборудования)"); + + Запрос.УстановитьПараметр("ТипОборудования", ТипОборудования); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); + СправочникОбъект.ТребуетсяПереустановка = Истина; + ЗаписатьДанные(СправочникОбъект) + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСОборудованием + +// Возвращает список подключенного в справочнике ПО по установленному отбору +// +// Параметры: +// Отбор - см. МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор. +// +// Возвращаемое значение: +// Массив из Структура. +// +Функция СписокОборудования(Отбор) Экспорт + + Возврат Справочники.ПодключаемоеОборудование.СписокОборудования(Отбор); + +КонецФункции + +// Функция возвращает структуру с данными устройства. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// КодЯзыка - Строка +// +// Возвращаемое значение: +// Структура - см. Справочники.ПодключаемоеОборудование.ДанныеУстройства +// +Функция ДанныеУстройства(Идентификатор, КодЯзыка = Неопределено) Экспорт + + Возврат Справочники.ПодключаемоеОборудование.ДанныеУстройства(Идентификатор, КодЯзыка); + +КонецФункции + +// Функция возвращает по идентификатору устройства его параметры +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыУстройства(Идентификатор) Экспорт + + Возврат Справочники.ПодключаемоеОборудование.ПараметрыУстройства(Идентификатор); + +КонецФункции + +// Процедура предназначена для сохранения параметров устройства +// в реквизит Параметры типа хранилище значения в элементе справочника. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// Параметры - Структура - параметры устройства. +// +// Возвращаемое значение: +// Булево. +// +Функция СохранитьПараметрыУстройства(Идентификатор, Параметры) Экспорт + + Возврат Справочники.ПодключаемоеОборудование.СохранитьПараметрыУстройства(Идентификатор, Параметры); + +КонецФункции + +// Функция возвращает структуру с данными драйвера. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// +// Возвращаемое значение: +// Структура. +// +Функция ДанныеДрайвераОборудования(Идентификатор) Экспорт + + Возврат Справочники.ДрайверыОборудования.ДанныеДрайвераОборудования(Идентификатор); + +КонецФункции + +// Функция возвращает драйвера по типу оборудования +// +// Параметры: +// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - типы подключаемого оборудования. +// ТолькоДоступные - Булево - признак только доступных драйверов. +// СнятыеСПоддержкиДрайвера - Булево - признак отображения снятых с поддержки драйверов. +// +// Возвращаемое значение: +// СписокЗначений. +// +Функция ДрайвераПоТипуОборудования(ТипОборудования, ТолькоДоступные = Истина, СнятыеСПоддержкиДрайвера = Ложь) Экспорт + + Возврат Справочники.ДрайверыОборудования.ДрайвераПоТипуОборудования(ТипОборудования, ТолькоДоступные, СнятыеСПоддержкиДрайвера); + +КонецФункции + +// Функция создает запись в справочнике о новом драйвере. +// +// Параметры: +// ПараметрыСоздания - Структура - параметры создания оборудования. +// +// Возвращаемое значение: +// СправочникСсылка.ПодключаемоеОборудование. +// +Функция НовыйДрайверОборудования(ПараметрыСоздания) Экспорт + + Возврат Справочники.ДрайверыОборудования.СоздатьНовыйЭлемент(ПараметрыСоздания); + +КонецФункции + +#КонецОбласти + +#Область ЕМРЦ + +// Получает цену ЕМРЦ из данных информационной базы на дату. +// +// Параметры: +// ОсобенностьУчета - Перечисления.ВидыМаркированнойПродукцииБПО - тип маркированной продукции для проверки цены. +// Период - Дата - дата проверки цены. +// ЕМРЦ - Число - значение ЕМРЦ. +// +Процедура ПолучитьЦенуЕМРЦ(ОсобенностьУчета, Период = Неопределено, ЕМРЦ = 0) Экспорт + // ++ Локализация + РегистрыСведений.ЗначенияЕМРЦ.ПолучитьЦенуЕМРЦ(Перечисления.ВидыМаркированнойПродукцииБПО.Табак, Период, ЕМРЦ); + // -- Локализация +КонецПроцедуры + +#КонецОбласти + +#Область ПодключениеОборудования + +// Добавить на форму список подключаемого оборудования +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// СписокОборудования - см. МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования +Процедура ПриСозданииНаСервере(Форма, СписокОборудования) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудованиеНаФорме(Форма); + Отбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + Отбор.ТипыПО = СписокОборудования; + ПодключаемоеОборудование.СписокОборудования = СписокОборудования(Отбор); + +КонецПроцедуры + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +#Область Интеграция + +// Устарела: следует использовать ИнтеграцияПодсистемБПО.ПриОпределенииНастроекРегламентныхЗаданий. +// Вызывается из процедуры РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий +// для установки доступности регламентного задания, определяет зависимость от функциональных опций. +// +// Параметры: +// Настройки - ТаблицаЗначений +// ФункциональнаяОпция - ОбъектМетаданныхФункциональнаяОпция +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки, ФункциональнаяОпция) Экспорт + + ИнтеграцияПодсистемБПО.ПриОпределенииНастроекРегламентныхЗаданий(Настройки, ФункциональнаяОпция); + +КонецПроцедуры + +// Устарела: следует использовать ИнтеграцияПодсистемБПО.ПриПолученииСпискаШаблонов. +// См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов +Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт + + ИнтеграцияПодсистемБПО.ПриПолученииСпискаШаблонов(ШаблоныЗаданий); + +КонецПроцедуры + +// Устарела: следует использовать ИнтеграцияПодсистемБПО.ПриОпределенииПсевдонимовОбработчиков. +// См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков +Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт + + ИнтеграцияПодсистемБПО.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Структура типа оборудования +// +// Параметры: +// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - +// Возвращаемое значение: +// Структура +// +Функция ПараметрыТипыОборудования(ТипОборудования) Экспорт + + ТипыОборудования = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + + ТипыОборудования.СканерШтрихкода = ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + ТипыОборудования.СчитывательМагнитныхКарт = ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СчитывательМагнитныхКарт; + ТипыОборудования.ККТ = ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + ТипыОборудования.ФискальныйРегистратор = ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ФискальныйРегистратор; + ТипыОборудования.ПринтерЧеков = ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков; + ТипыОборудования.ДисплейПокупателя = ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ДисплейПокупателя; + ТипыОборудования.ТерминалСбораДанных = ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ТерминалСбораДанных; + ТипыОборудования.ЭквайринговыйТерминал = ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал; + ТипыОборудования.ЭлектронныеВесы = ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭлектронныеВесы; + ТипыОборудования.ВесыСПечатьюЭтикеток = ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ВесыСПечатьюЭтикеток; + ТипыОборудования.ПринтерЭтикеток = ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПринтерЭтикеток; + ТипыОборудования.СчитывательRFID = ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СчитывательRFID; + + Возврат ТипыОборудования; + +КонецФункции + +// Формирования массива типов оборудования +// +// Параметры: +// ТипыОборудования - Структура, Массив, Строка - тип оборудования. +// Возвращаемое значение: +// Массив - ПеречислениеСсылка.ТипыПодключаемогоОборудования - +// +Функция ПолучитьТипыОборудования(ТипыОборудования) Экспорт + + МассивТипов = Новый Массив(); + + Если ТипЗнч(ТипыОборудования) = Тип("Строка") Тогда + ТипыВМассиве = СтрРазделить(ТипыОборудования, ",", Ложь); + Для Каждого ТипОборудования Из ТипыВМассиве Цикл + МассивТипов.Добавить(ПолучитьТипОборудования(ТипыОборудования)); + КонецЦикла; + ИначеЕсли ТипЗнч(ТипыОборудования) = Тип("Массив") Тогда + Для Каждого ТипОборудования Из ТипыОборудования Цикл + Если ТипЗнч(ТипОборудования) = Тип("Строка") Тогда + МассивТипов.Добавить(ПолучитьТипОборудования(ТипОборудования)); + КонецЕсли; + КонецЦикла; + ИначеЕсли ТипЗнч(ТипыОборудования) = Тип("Структура") Тогда + Если ТипыОборудования.Свойство("СканерШтрихкода") И ТипыОборудования.СканерШтрихкода Тогда + МассивТипов.Добавить(Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода); + КонецЕсли; + Если ТипыОборудования.Свойство("СчитывательМагнитныхКарт") И ТипыОборудования.СчитывательМагнитныхКарт Тогда + МассивТипов.Добавить(Перечисления.ТипыПодключаемогоОборудования.СчитывательМагнитныхКарт); + КонецЕсли; + Если ТипыОборудования.Свойство("ККТ") И ТипыОборудования.ККТ Тогда + МассивТипов.Добавить(Перечисления.ТипыПодключаемогоОборудования.ККТ); + КонецЕсли; + Если ТипыОборудования.Свойство("ФискальныйРегистратор") И ТипыОборудования.ФискальныйРегистратор Тогда + МассивТипов.Добавить(Перечисления.ТипыПодключаемогоОборудования.ФискальныйРегистратор); + КонецЕсли; + Если ТипыОборудования.Свойство("ПринтерЧеков") И ТипыОборудования.ПринтерЧеков Тогда + МассивТипов.Добавить(Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков); + КонецЕсли; + Если ТипыОборудования.Свойство("ДисплейПокупателя") И ТипыОборудования.ДисплейПокупателя Тогда + МассивТипов.Добавить(Перечисления.ТипыПодключаемогоОборудования.ДисплейПокупателя); + КонецЕсли; + Если ТипыОборудования.Свойство("ТерминалСбораДанных") И ТипыОборудования.ТерминалСбораДанных Тогда + МассивТипов.Добавить(Перечисления.ТипыПодключаемогоОборудования.ТерминалСбораДанных); + КонецЕсли; + Если ТипыОборудования.Свойство("ЭквайринговыйТерминал") И ТипыОборудования.ЭквайринговыйТерминал Тогда + МассивТипов.Добавить(Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал); + КонецЕсли; + Если ТипыОборудования.Свойство("ЭлектронныеВесы") И ТипыОборудования.ЭлектронныеВесы Тогда + МассивТипов.Добавить(Перечисления.ТипыПодключаемогоОборудования.ЭлектронныеВесы); + КонецЕсли; + Если ТипыОборудования.Свойство("ВесыСПечатьюЭтикеток") И ТипыОборудования.ВесыСПечатьюЭтикеток Тогда + МассивТипов.Добавить(Перечисления.ТипыПодключаемогоОборудования.ВесыСПечатьюЭтикеток); + КонецЕсли; + Если ТипыОборудования.Свойство("ПринтерЭтикеток") И ТипыОборудования.ПринтерЭтикеток Тогда + МассивТипов.Добавить(Перечисления.ТипыПодключаемогоОборудования.ПринтерЭтикеток); + КонецЕсли; + Если ТипыОборудования.Свойство("СчитывательRFID") И ТипыОборудования.СчитывательRFID Тогда + МассивТипов.Добавить(Перечисления.ТипыПодключаемогоОборудования.СчитывательRFID); + КонецЕсли; + КонецЕсли; + + Возврат МассивТипов; + +КонецФункции + +// Получить соответствие типов оборудования +// +// Возвращаемое значение: +// Соответствие - +// +Функция ПолучитьСоответствиеТиповОборудования() Экспорт + + Соответствие = Новый Соответствие(); + // Russian alphabet. Не локализовывать + Соответствие.Вставить("СканерШтрихкода" , Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("УстройствоВвода" , Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("СчитывательМагнитныхКарт", Перечисления.ТипыПодключаемогоОборудования.СчитывательМагнитныхКарт); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("ККТ" , Перечисления.ТипыПодключаемогоОборудования.ККТ); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("ФискальныйРегистратор" , Перечисления.ТипыПодключаемогоОборудования.ФискальныйРегистратор); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("ПринтерЧеков" , Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("ДисплейПокупателя" , Перечисления.ТипыПодключаемогоОборудования.ДисплейПокупателя); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("ТерминалСбораДанных" , Перечисления.ТипыПодключаемогоОборудования.ТерминалСбораДанных); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("ЭквайринговыйТерминал" , Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("ЭлектронныеВесы" , Перечисления.ТипыПодключаемогоОборудования.ЭлектронныеВесы); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("ВесыСПечатьюЭтикеток" , Перечисления.ТипыПодключаемогоОборудования.ВесыСПечатьюЭтикеток); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("ПринтерЭтикеток" , Перечисления.ТипыПодключаемогоОборудования.ПринтерЭтикеток); //@NON-NLS-1 @NON-NLS-2 + Соответствие.Вставить("СчитывательRFID" , Перечисления.ТипыПодключаемогоОборудования.СчитывательRFID); //@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 + + Возврат Соответствие; + +КонецФункции + +// Получить тип оборудования по строке +// +// Параметры: +// ТипОборудования - Строка - тип оборудования. +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыПодключаемогоОборудования - +// +Функция ПолучитьТипОборудования(ТипОборудования) Экспорт + + Соответствие = ПолучитьСоответствиеТиповОборудования(); + Возврат Соответствие.Получить(ТипОборудования); + +КонецФункции + +// Заполняет данные о макетах +// +// Параметры: +// ИмяДрайвера - Строка- +// ИмяМакетаДрайвера - Строка- +// МакетДоступен - Булево- +// ШаблонЛокализации - Строка- +// КодЯзыка - Строка- +// +Процедура ЗаполнитьДанныеМакетов(ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, ШаблонЛокализации, КодЯзыка) Экспорт + + ИмяМакетаДрайвера = ?(ПустаяСтрока(ИмяМакетаДрайвера), ИмяДрайвера, ИмяМакетаДрайвера); + МакетДрайвера = Метаданные.ОбщиеМакеты.Найти(ИмяМакетаДрайвера); + + Если МакетДрайвера <> Неопределено И МакетДрайвера.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ВнешняяКомпонента Тогда + МакетДоступен = Истина; + Если Не ПустаяСтрока(КодЯзыка) Тогда // Проверяем файл с наличием локализации + МакетШаблонЛокализации = ИмяМакетаДрайвера + "_" + КодЯзыка; + МакетШаблон = Метаданные.ОбщиеМакеты.Найти(МакетШаблонЛокализации); + Если МакетШаблон <> Неопределено И МакетШаблон.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ТекстовыйДокумент Тогда + ШаблонЛокализации = ПолучитьОбщийМакет(МакетШаблонЛокализации).ПолучитьТекст(); + КонецЕсли; + КонецЕсли; + Иначе // Проверяем наличие драйвера по маске типа "*_ru" + Если Не ПустаяСтрока(КодЯзыка) Тогда + ИмяМакетаДрайвера = ИмяМакетаДрайвера + "_" + КодЯзыка; + МакетШаблон = Метаданные.ОбщиеМакеты.Найти(ИмяМакетаДрайвера); + МакетДоступен = МакетШаблон <> Неопределено И МакетШаблон.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ВнешняяКомпонента; + КонецЕсли; + КонецЕсли; + ИмяМакетаДрайвера = "ОбщийМакет." + ИмяМакетаДрайвера; + +КонецПроцедуры + +// Заполняет данные об используемых внешних компонентах +// +// Параметры: +// +Процедура ЗаполнитьИспользуемыеВнешниеКомпоненты(Компоненты) Экспорт + + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ГенерацияШтрихкода") Тогда + МодульГенерацияШтрихкода = ОбщегоНазначенияБПО.ОбщийМодуль("ГенерацияШтрихкода"); + ОписаниеКомпоненты = МодульГенерацияШтрихкода.ОписаниеКомпоненты(); + НоваяСтрока = Компоненты.Добавить(); + НоваяСтрока.Идентификатор = ОписаниеКомпоненты.ИмяОбъекта; + НоваяСтрока.ОбновлятьАвтоматически = Истина; + КонецЕсли; + + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("ПоддержкаОборудования.ЭлектронныеСертификаты") Тогда + МодульЭлектронныеСертификатыНСПККлиентСервер = ОбщегоНазначенияБПО.ОбщийМодуль("ЭлектронныеСертификатыНСПККлиентСервер"); + ОписаниеКомпоненты = МодульЭлектронныеСертификатыНСПККлиентСервер.ОписаниеКомпоненты(); + НоваяСтрока = Компоненты.Добавить(); + НоваяСтрока.Идентификатор = ОписаниеКомпоненты.ИмяОбъекта; + НоваяСтрока.ОбновлятьАвтоматически = Истина; + КонецЕсли; + + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("ПоддержкаОборудования") Тогда + УстановитьПривилегированныйРежим(Истина); + Запрос = Новый Запрос(); + Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ ВЫРАЗИТЬ(ПодключаемоеОборудование.ДрайверОборудования.ИдентификаторОбъекта КАК СТРОКА(100)) КАК ИдентификаторОбъекта + |ИЗ Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование"; + Выборка = Запрос.Выполнить().Выбрать(); + СписокОборудования = Новый Массив(); + Пока Выборка.Следующий() Цикл + НоваяСтрока = Компоненты.Добавить(); + НоваяСтрока.Идентификатор = Выборка.ИдентификаторОбъекта; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Возвращает пустую таблицу поставляемых драйверов оборудования. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - тип оборудования +// * Наименование - Строка - наименование оборудования +// * ИдентификаторОбъекта - Строка - уникальный идентификатор объекта +// * ИмяДрайвера - Строка - внутреннее имя драйвера +// * ИмяМакетаДрайвера - Строка - имя макета драйвера, если оно отличается от имени драйвера +// * ВерсияДрайвера - Строка +// * СнятСПоддержки - Булево - признак того, что драйвер снят с поддержки +// * СпособПодключения - ПеречислениеСсылка.СпособПодключенияДрайвера +// * ЛокальныйРежим - Булево - признак локальности драйвера +// * СетевойРежим - Булево - признак работы в сетевом режиме +// * СерверныйРежим - Булево +// +Функция НоваяТаблицаПоставляемыхДрайверовОборудования() Экспорт + + ДрайвераОборудования = Новый ТаблицаЗначений; + // Общие свойства. + ДрайвераОборудования.Колонки.Добавить("ТипОборудования" , Новый ОписаниеТипов("ПеречислениеСсылка.ТипыПодключаемогоОборудования")); + ДрайвераОборудования.Колонки.Добавить("Наименование" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0))); + ДрайвераОборудования.Колонки.Добавить("ИдентификаторОбъекта", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0))); + ДрайвераОборудования.Колонки.Добавить("ИмяДрайвера" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0))); + ДрайвераОборудования.Колонки.Добавить("ИмяМакетаДрайвера" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0))); + ДрайвераОборудования.Колонки.Добавить("ВерсияДрайвера" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0))); + ДрайвераОборудования.Колонки.Добавить("СнятСПоддержки" , Новый ОписаниеТипов("Булево")); + ДрайвераОборудования.Колонки.Добавить("СпособПодключения" , Новый ОписаниеТипов("ПеречислениеСсылка.СпособПодключенияДрайвера")); + // Параметры работы + ДрайвераОборудования.Колонки.Добавить("ЛокальныйРежим", Новый ОписаниеТипов("Булево")); + ДрайвераОборудования.Колонки.Добавить("СетевойРежим" , Новый ОписаниеТипов("Булево")); + ДрайвераОборудования.Колонки.Добавить("СерверныйРежим", Новый ОписаниеТипов("Булево")); + Возврат ДрайвераОборудования; + +КонецФункции + +// Возвращает массив содержащий имена макетов для переустановки драйверов, для которых требуется переустановка, +// а так же снимает флаг признака переустановки у найденных элементов. +// +// Параметры: +// ИдентификаторКлиента - Строка - идентификатор клиента для рабочего места +// ИмяКомпьютера - Строка - Имя компьютера +// +// Возвращаемое значение: +// Массив из строк - имена макетов внешних компонент, которые требуется переустановить +Функция МакетыДляПереустановкиДрайверов(ИдентификаторКлиента, ИмяКомпьютера) Экспорт + + МассивРабочихМест = МенеджерОборудованияВызовСервера.НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, Ложь); + МассивИменаМакетов = Новый Массив(); + + Если МассивРабочихМест.Количество() = 0 Тогда + РабочееМесто = Неопределено; + Иначе + РабочееМесто = МассивРабочихМест[0]; + КонецЕсли; + + // Переустановить драйверы помеченные флагом для переустановки. + Если ЗначениеЗаполнено(РабочееМесто) Тогда + СписокОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + СписокОтбор.РабочееМесто = РабочееМесто; + СписокОборудования = СписокОборудования(СписокОтбор); + Для Каждого Оборудование Из СписокОборудования Цикл + Если Оборудование.ПодключениеИзМакета И Оборудование.МакетДоступен И Оборудование.ТребуетсяПереустановка Тогда + ОборудованиеДрайверОборудования = Оборудование.ДрайверОборудования; // Структура + МакетСтрока = Новый Структура(); + МакетСтрока.Вставить("ИмяМакетаДрайвера", Оборудование.ИмяМакетаДрайвера); + МакетСтрока.Вставить("НаименованиеДрайвера", ОборудованиеДрайверОборудования.Наименование); + МассивИменаМакетов.Добавить(Оборудование.ИмяМакетаДрайвера); + КонецЕсли; + УстановитьПризнакПереустановкиДрайвера( + РабочееМесто, + Оборудование.ДрайверОборудования, + Ложь); + КонецЦикла; + КонецЕсли; + + Возврат МассивИменаМакетов; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура УдалитьУстаревшиеДрайвера() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДрайверыОборудования.Ссылка КАК Ссылка, + | ДрайверыОборудования.Представление КАК Представление + |ИЗ + | Справочник.ДрайверыОборудования КАК ДрайверыОборудования + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + | ПО ДрайверыОборудования.Ссылка = ПодключаемоеОборудование.ДрайверОборудования + |ГДЕ + | ДрайверыОборудования.ТипОборудования = ЗНАЧЕНИЕ(Перечисление.ТипыПодключаемогоОборудования.ПустаяСсылка) + | И ПодключаемоеОборудование.Ссылка ЕСТЬ 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..9859851 --- /dev/null +++ b/CommonModules/МенеджерОборудованияВызовСервера/Ext/Module.bsl @@ -0,0 +1,1050 @@ + +#Область ПрограммныйИнтерфейс + +#Область Системные + +// Доступны возвраты без карты. +// +// Возвращаемое значение: +// ВозвратыБезКарты - Структура - Доступны возвраты без карты +// * ВозвратПоПлатежнойКарте - Булево +// * ВозвратЭлектроннымСертификатом - Булево +// +Функция ДоступноВозвратыБезКарты() Экспорт + + ВозвратыБезКарты = Новый Структура(); + ВозвратыБезКарты.Вставить("ВозвратПоПлатежнойКарте" , Истина); + ВозвратыБезКарты.Вставить("ВозвратЭлектроннымСертификатом", Истина); + МенеджерОборудованияВызовСервераПереопределяемый.ДоступноВозвратыБезКарты(ВозвратыБезКарты); + Возврат ВозвратыБезКарты; + +КонецФункции + +// Изолированное подключения внешних компонент на клиенте +// Возвращаемое значение: +// Булево - Изолированно +// +Функция ИзолированноеПодключенияВнешнихКомпонентНаКлиенте() Экспорт + + Возврат ВнешниеКомпонентыБПО.ИзолированноеПодключенияВнешнихКомпонентНаКлиенте(); + +КонецФункции + +// Получить соответствие типов оборудования +// +// Возвращаемое значение: +// Соответствие - +// +Функция ПолучитьСоответствиеТиповОборудования() Экспорт + + Возврат МенеджерОборудования.ПолучитьСоответствиеТиповОборудования(); + +КонецФункции + +#КонецОбласти + +#Область РабочееМесто + +// Функция возвращает из переменной сеанса имя компьютера клиента. +// +// Возвращаемое значение: +// СправочникСсылка.РабочиеМеста. +// +Функция РабочееМестоКлиента() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Возврат ПараметрыСеанса.РабочееМестоКлиента; + +КонецФункции + +Функция ДоступныеКомпьютерыДляРабочегоМеста() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос(" + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | РабочиеМеста.ИмяКомпьютера + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | НЕ РабочиеМеста.ИмяКомпьютера = """" + | И НЕ РабочиеМеста.ПометкаУдаления"); + + ДоступныеКомпьютеры = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ИмяКомпьютера"); + Возврат ДоступныеКомпьютеры; + +КонецФункции + +// Функция возвращает список рабочих мест, соответствующих указанному имени компьютера. +// +// Параметры: +// ИдентификаторКлиента - Строка - идентификатор клиента для рабочего места +// ИмяКомпьютера - Строка - Имя компьютера +// WEBКлиент - Булево - Признак WEB клиенте +// +// Возвращаемое значение: +// Массив из СправочникСсылка.РабочиеМеста. +// +Функция НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, WEBКлиент) Экспорт + + Если Не ОбщегоНазначенияБПО.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Новый Массив(); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если WEBКлиент Тогда + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | РабочиеМеста.Ссылка + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.ИдентификаторыКлиентов.ИдентификаторКлиента = &Код + | И НЕ РабочиеМеста.ПометкаУдаления"); + Запрос.УстановитьПараметр("Код", ИдентификаторКлиента); + СписокРабочиеМеста = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Иначе + // Ищем по имени ПК ("ТекущееИмяПК = ИмяКомпьютера" и "ЛокальноеУстройство = Истина") + // Новый способ идентификации рабочего места по имени ПК + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | РабочиеМеста.Ссылка + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.ИмяКомпьютера = &ИмяКомпьютера + | И РабочиеМеста.ЛокальноеУстройство + | И НЕ РабочиеМеста.ПометкаУдаления"); + Запрос.УстановитьПараметр("ИмяКомпьютера", ИмяКомпьютера); + СписокРабочиеМеста = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + // По имени ПК рабочее место не нашли, смотрим было ли такое по ИдентификаторКлиента + Если СписокРабочиеМеста.Количество() = 0 Тогда + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | РабочиеМеста.Ссылка + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.Код = &Код + | И НЕ РабочиеМеста.ПометкаУдаления"); + Запрос.УстановитьПараметр("Код", ИдентификаторКлиента); + СписокРабочиеМеста = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + // Если рабочее место на этом ПК было ранее создано, помечаем его как "ЛокальноеУстройство = Истина" + Если СписокРабочиеМеста.Количество() > 0 Тогда + ТекущееРабочееМесто = СписокРабочиеМеста[0].ПолучитьОбъект(); + ТекущееРабочееМесто.ЛокальноеУстройство = Истина; + ТекущееРабочееМесто.Записать(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат СписокРабочиеМеста; + +КонецФункции + +Функция ПривязатьРабочееМесто(ИдентификаторКлиента, ИмяКомпьютера) Экспорт + + Если Не ОбщегоНазначенияБПО.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Новый Массив(); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | РабочиеМеста.Ссылка + |ИЗ + | Справочник.РабочиеМеста КАК РабочиеМеста + |ГДЕ + | РабочиеМеста.ИмяКомпьютера = &ИмяКомпьютера + | И НЕ РабочиеМеста.ПометкаУдаления"); + Запрос.УстановитьПараметр("ИмяКомпьютера", ИмяКомпьютера); + СписокРабочиеМеста = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Если СписокРабочиеМеста.Количество() > 0 Тогда + ТекущееРабочееМесто = СписокРабочиеМеста[0].ПолучитьОбъект(); + ИдентификаторыКлиентов = ТекущееРабочееМесто.ИдентификаторыКлиентов.Добавить(); + ИдентификаторыКлиентов.ИдентификаторКлиента = ИдентификаторКлиента; + ТекущееРабочееМесто.ЛокальноеУстройство = Истина; + ТекущееРабочееМесто.Записать(); + КонецЕсли; + + Возврат СписокРабочиеМеста; + +КонецФункции + + +// Функция устанавливает в переменную сеанса имя компьютера клиента. +// +// Параметры: +// РабочееМестоКлиента - СправочникСсылка.РабочиеМеста +// +Процедура УстановитьРабочееМестоКлиента(РабочееМестоКлиента) Экспорт + + УстановитьПривилегированныйРежим(Истина); + ПараметрыСеанса.РабочееМестоКлиента = РабочееМестоКлиента; + ОбновитьПовторноИспользуемыеЗначения(); + +КонецПроцедуры + +// Функция возвращает созданное рабочее место клиента. +// +// Параметры: +// Параметры - Структура: +// * ИдентификаторКлиента - УникальныйИдентификатор. +// * ИмяКомпьютера - Строка. +// +// Возвращаемое значение: +// СправочникСсылка.РабочиеМеста. +// +Функция СоздатьРабочееМестоКлиента(Параметры) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + РабочееМесто = Справочники.РабочиеМеста.СоздатьЭлемент(); + РабочееМесто.Код = Параметры.ИдентификаторКлиента; + РабочееМесто.ИмяКомпьютера = Параметры.ИмяКомпьютера; + МенеджерОборудованияКлиентСервер.ЗаполнитьНаименованиеРабочегоМеста(РабочееМесто, ПользователиИнформационнойБазы.ТекущийПользователь()); + РабочееМесто.Записать(); + + УстановитьПривилегированныйРежим(Ложь); + + Возврат РабочееМесто.Ссылка; + +КонецФункции + +// Процедура устанавливает значения параметров сеанса, относящихся к подключаемому оборудованию. +// +// Параметры: +// ИмяПараметра - Строка - имя параметра сеанса. +// УстановленныеПараметры - Массив +// +Процедура УстановитьПараметрыСеансаПодключаемогоОборудования(ИмяПараметра, УстановленныеПараметры) Экспорт + + Если ИмяПараметра = "РабочееМестоКлиента" Тогда + + ИмяКомпьютера = ?(ПараметрыСеанса.ПараметрыКлиентаНаСервереБПО.Свойство("ИмяКомпьютера"), ПараметрыСеанса.ПараметрыКлиентаНаСервереБПО.ИмяКомпьютера, ""); + ИдентификаторКлиента = ?(ПараметрыСеанса.ПараметрыКлиентаНаСервереБПО.Свойство("ИдентификаторКлиента"), ПараметрыСеанса.ПараметрыКлиентаНаСервереБПО.ИдентификаторКлиента, ""); + + ТекущееРМ = Справочники.РабочиеМеста.ПустаяСсылка(); + Если Не ПустаяСтрока(ИмяКомпьютера) Тогда + СписокРМ = НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, Ложь); + Если СписокРМ.Количество() = 0 Тогда + // Будет создано с клиента. + Иначе + ТекущееРМ = СписокРМ[0]; + КонецЕсли; + КонецЕсли; + + УстановитьРабочееМестоКлиента(ТекущееРМ); + КонецЕсли; + +КонецПроцедуры + +// Функция возвращает типы используемого оборудования для текущего рабочего места. +// +// Возвращаемое значение: +// Массив. +// +Функция ТипыИспользуемогоОборудованияТекущегоРабочегоМеста() Экспорт + + УстановитьПривилегированныйРежим(Истина); + РабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + + Если ЗначениеЗаполнено(РабочееМесто) Тогда + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПодключаемоеОборудование.ТипОборудования КАК ТипОборудования + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + |ГДЕ + | ПодключаемоеОборудование.УстройствоИспользуется + | И ПодключаемоеОборудование.РабочееМесто = &РабочееМесто"); + + Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто); + + Результат = Запрос.Выполнить(); + Возврат Результат.Выгрузить().ВыгрузитьКолонку("ТипОборудования"); + + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область РаботаСОборудованием + +// Возвращает список подключенного в справочнике ПО по установленному отбору +// +// Параметры: +// Отбор - см. МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор. +// +// Возвращаемое значение: +// Массив из Структура. +// +Функция СписокОборудования(Отбор) Экспорт + + Возврат МенеджерОборудования.СписокОборудования(Отбор); + +КонецФункции + +// Функция возвращает структуру с данными устройства. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// КодЯзыка - Строка +// +// Возвращаемое значение: +// Структура - см. Справочники.ПодключаемоеОборудование.ДанныеУстройства +// +Функция ДанныеУстройства(Идентификатор, КодЯзыка = Неопределено) Экспорт + + Возврат МенеджерОборудования.ДанныеУстройства(Идентификатор, КодЯзыка); + +КонецФункции + +// Функция возвращает по идентификатору устройства его параметры +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыУстройства(Идентификатор) Экспорт + + Возврат МенеджерОборудования.ПараметрыУстройства(Идентификатор); + +КонецФункции + +// Процедура предназначена для сохранения параметров устройства +// в реквизит Параметры типа хранилище значения в элементе справочника. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// Параметры - Структура - параметры устройства. +// +// Возвращаемое значение: +// Булево. +// +Функция СохранитьПараметрыУстройства(Идентификатор, Параметры) Экспорт + + Возврат МенеджерОборудования.СохранитьПараметрыУстройства(Идентификатор, Параметры); + +КонецФункции + +// Функция возвращает структуру с данными драйвера. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// +// Возвращаемое значение: +// Структура. +// +Функция ДанныеДрайвераОборудования(Идентификатор) Экспорт + + Возврат МенеджерОборудования.ДанныеДрайвераОборудования(Идентификатор); + +КонецФункции + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: следует использовать СписокОборудования. +// Функция возвращает список подключенного в справочнике ПО +// +// Параметры: +// ТипыПО - Структура, Массив, Строка - тип оборудования для выбора устройства. +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// РабочееМесто - СправочникСсылка.РабочиеМеста. +// СетевоеОборудование - Булево - использовать сетевое оборудование при подключении. +// СерверноеОборудование - Булево. +// ТолькоАвтоматическаяФискализация - Булево. +// +// Возвращаемое значение: +// Массив из Структура. +// +Функция ОборудованиеПоПараметрам(ТипыПО = Неопределено, Идентификатор = Неопределено, РабочееМесто = Неопределено, + СетевоеОборудование = Истина, СерверноеОборудование = Ложь, ТолькоАвтоматическаяФискализация = Ложь) Экспорт + + СписокОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + СписокОтбор.ТипыПО = ТипыПО; + СписокОтбор.Идентификатор = Идентификатор; + СписокОтбор.РабочееМесто = РабочееМесто; + СписокОтбор.СетевоеОборудование = СетевоеОборудование; + СписокОтбор.СерверноеОборудование = СерверноеОборудование; + СписокОтбор.РазрешенаАвтоматическаяФискализация = ТолькоАвтоматическаяФискализация; + + Возврат МенеджерОборудования.СписокОборудования(СписокОтбор); + +КонецФункции + +#Область Системные + +// Устарела: следует использовать МенеджерОборудования.ВерсияБиблиотеки. +// Возвращает номер версии библиотеки подключаемого оборудования. +// +// Возвращаемое значение: +// Строка. +// +Функция ВерсияБиблиотеки() Экспорт + + Возврат МенеджерОборудования.ВерсияБиблиотеки(); + +КонецФункции + +// Устарела: следует использовать ОбщегоНазначенияБПО.ДатаСеанса. +// Получает текущую дату сервера, приведенную к часовому поясу сеанса. +// Предназначена для использования вместо функции ТекущаяДатаСеанса. +// +// Возвращаемое значение: +// Дата - текущая дата сеанса. +// +Функция ДатаСеанса() Экспорт + + Возврат ОбщегоНазначенияБПО.ДатаСеанса(); + +КонецФункции + +// Устарела: следует использовать МенеджерОборудования.ДоступныеТипыОборудования. +// Возвращает список доступных типов оборудования. +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования - Массив доступных типов подключаемого оборудования в конфигурации. +// +Функция ДоступныеТипыОборудования() Экспорт + + Возврат МенеджерОборудования.ДоступныеТипыОборудования(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если функциональная подсистема существует в конфигурации. +// +// Параметры: +// ПолноеИмяПодсистемы - Строка - полное имя объекта метаданных подсистема +// без слов "Подсистема." и с учетом регистра символов. +// Например: "СтандартныеПодсистемы.ВариантыОтчетов". +// Возвращаемое значение: +// Булево - Истина, если существует. +// +Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт + + Возврат ОбщегоНазначенияБПО.ПодсистемаСуществует(ПолноеИмяПодсистемы); + +КонецФункции + +// Устарела: следует использовать ИнтеграцияПодсистемБПО.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. +// Заполняет параметры работы клиента на сервере +// При использовании БСП процедуру требуется вызвать из процедуры +// ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске() +// +// Параметры: +// Параметры - Структура: +// * ИдентификаторКлиента - Строка - (входящий) идентификатор рабочего места клиента +// * ИменаМакетовДляПереустановки - Массив из Структура - имена макетов для переустановки внешних компонент +// * ИдентификаторОбсужденияРаспределеннойФискализации - ИдентификаторОбсужденияСистемыВзаимодействия - +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт + + ИнтеграцияПодсистемБПО.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); + +КонецПроцедуры + +// Устарела: следует использовать ИнтеграцияПодсистемБПО.УстановкаПараметровСеанса. +// Процедура устанавливает значения параметров сеанса, относящихся к подключаемому оборудованию. +// +// Параметры: +// ИменаПараметровСеанса - Массив - устанавливаемые идентификаторы параметров сеанса +// +Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) Экспорт + + ИнтеграцияПодсистемБПО.УстановкаПараметровСеанса(ИменаПараметровСеанса); + +КонецПроцедуры + +// Устарела: следует использовать МенеджерОборудования.ДоступноДобавлениеНовыхДрайверов. +// Возвращает доступность добавление новых драйверов. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноДобавлениеНовыхДрайверов() Экспорт + + Возврат МенеджерОборудования.ДоступноДобавлениеНовыхДрайверов(); + +КонецФункции + +// Устарела: следует использовать МенеджерОборудования.ДоступноСетевоеОборудование. +// Возвращает доступность сетевого оборудования. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноСетевоеОборудование() Экспорт + + Возврат МенеджерОборудования.ДоступноСетевоеОборудование(); + +КонецФункции + +// Устарела: следует использовать РаспределеннаяФискализация.ДоступноРаспределеннаяФискализация. +// Возвращает признак доступности распределенной фискализации. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноРаспределеннаяФискализация() Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ДоступноРаспределеннаяФискализация(); + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудования.ДоступноСетевоеОборудование. +// Возвращает доступность инкассации в форме управление фискальным устройством. +// +// Возвращаемое значение: +// Булево. +// +Функция ДоступноИнкассацияВУправлениеФискальнымУстройством() Экспорт + + Возврат МенеджерОборудования.ДоступноСетевоеОборудование(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется устройства ввода и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяУстройстваВвода() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяУстройстваВвода(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется устройства "Шаблоны магнитных карт" и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяШаблоныМагнитныхКарт() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяШаблоныМагнитныхКарт(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистемы фискальных устройств и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяЧекопечатающиеУстройства() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется "Кассовая смена" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяКассоваяСмена() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяКассоваяСмена(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется "ФорматноЛогическийКонтроль" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяФорматноЛогическийКонтроль() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяФорматноЛогическийКонтроль(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Платежные системы" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПлатежныеСистемы() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Дисплеи покупателя" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяДисплеиПокупателя() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяДисплеиПокупателя(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Весовое оборудование" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяВесовоеОборудование() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяВесовоеОборудование(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Терминалы сбора данных" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяТерминалыСбораДанных() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяТерминалыСбораДанных(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Принтеры этикеток" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПринтерыЭтикеток() Экспорт + + Возврат ОбщегоНазначенияБПО.ИспользуетсяПринтерыЭтикеток(); + +КонецФункции + +// Устарела: больше не используется. +// Возвращает Истина, если используется подсистема "Считыватель 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(ДанныеМеток); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + 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..b2df07d --- /dev/null +++ b/CommonModules/МенеджерОборудованияВызовСервераПереопределяемый/Ext/Module.bsl @@ -0,0 +1,382 @@ +#Область ПрограммныйИнтерфейс + +// Возвращает список доступных типов оборудования. +// +// Параметры: +// СписокТиповОборудования - Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования - +// доступные типы подключаемого оборудования в конфигурации. +// СтандартнаяОбработка - Булево - признак выполнения стандартной обработки. +// Пример: +// СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ККТ). +// +Процедура ДоступныеТипыОборудования(СписокТиповОборудования, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Возвращает флаг возможности добавления новых драйверов оборудования в справочник. +// Параметры: +// ДобавлениеНовыхДрайверовДоступно - Булево - Флаг возможности добавления новых компонент подключения оборудования. +// СтандартнаяОбработка - Булево - Признак выполнения стандартной обработки. +// Пример: +// ДобавлениеНовыхДрайверовДоступно = Ложь; +// СтандартнаяОбработка = Ложь. +// +Процедура ДоступноДобавлениеНовыхДрайверов(ДобавлениеНовыхДрайверовДоступно, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Возвращает доступность сетевого оборудования. +// +// Параметры: +// СетевоеОборудованиеДоступно - Булево - Сетевое оборудование доступно. +// СтандартнаяОбработка - Булево - Стандартная обработка. +// +Процедура ДоступноСетевоеОборудование(СетевоеОборудованиеДоступно, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Возвращает доступность инкассации в форме управление фискальным устройством. +// +// Параметры: +// ИнкассацияДоступна - Булево - Доступность инкассации. +// СтандартнаяОбработка - Булево - Стандартная обработка. +// +Процедура ДоступноИнкассацияВУправлениеФискальнымУстройством(ИнкассацияДоступна, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Доступны возвраты без карты. +// +// Параметры: +// ВозвратыБезКарты - Структура - Доступны возвраты без карты: +// * ВозвратПоПлатежнойКарте - Булево +// * ВозвратЭлектроннымСертификатом - Булево +// +Процедура ДоступноВозвратыБезКарты(ВозвратыБезКарты) Экспорт + +КонецПроцедуры + +// Переопределяемая процедура для подсистемы управление доступом СтандартныеПодсистемы +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +// +// Параметры: +// Менеджер - Строка +// Ограничение - Структура: +// * Текст - Строка - ограничение доступа для пользователей. +// Если пустая строка, значит, доступ разрешен. +// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей. +// Если пустая строка, значит, доступ запрещен. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически. +// - Булево - если Ложь, то всегда записывать ключи доступа, +// если Истина, тогда не записывать ключи доступа, +// а использовать ключи доступа владельца (требуется, +// чтобы ограничение было строго по объекту-владельцу). +// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также +// как у параметра ПоВладельцуБезЗаписиКлючейДоступа. +// +Процедура ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение) Экспорт + +КонецПроцедуры + +#Область Обновление + +// Переопределяемая часть процедуры обновления с БПО 3 +// +// Параметры: +// СсылкаПодключаемоеОборудование - СправочникСсылка.ПодключаемоеОборудование - оборудование для обновления перехода с БПО 3 +// +Процедура ОбновитьСправочникПодключаемогоОборудования(СсылкаПодключаемоеОборудование) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область ОборудованиеККТ + +// Процедура заполняет реквизиты организации для регистрации ФН. +// +// Параметры: +// Организация - ОпределяемыйТип.ОрганизацияБПО - организация для заполнения реквизитов. +// ПараметрыРегистрации - Структура - параметры регистрации ФН. +// +Процедура ЗаполнитьРеквизитыОрганизацииДляРегистрацииФН(Организация, ПараметрыРегистрации) Экспорт + +КонецПроцедуры + +// Переопределяет формируемый шаблон чека. +// +// Параметры: +// ШаблонЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ОбщиеПараметры - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ДополнительныйТекст - Строка - Дополнительный текст шаблона чека. +// СтандартнаяОбработка - Булево - Признак стандартной обработки. +// ТипОборудования - Строка - Типы оборудования строкой. +// +Процедура СформироватьШаблонЧека(ШаблонЧека, ОбщиеПараметры, ДополнительныйТекст, СтандартнаяОбработка, ТипОборудования = "") Экспорт + +КонецПроцедуры + +// Возвращает для каких типов идентификаторов будет заполняться тег 1162 (код товара). +// +// Параметры: +// ТипыИдентификаторов - Массив из ПеречислениеСсылка.ТипыИдентификаторовТовараККТ +// СтандартнаяОбработка - Булево - Стандартная обработка +// +Процедура КодТовараЗаполняетсяДляТиповИдентификаторов(ТипыИдентификаторов, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Возвращает, для каких типов товаров будет заполняться отраслевой реквизит. +// +// Параметры: +// ТипыТоваров - Структура: +// * ИзделияИзНатуральногоМеха - Булево - Заполнения для изделия из натурального меха. +// * ОбъемноСортовойУчет - Булево - Заполнения для товаров объемно сортового учета. +// +Процедура ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(ТипыТоваров) Экспорт + + + +КонецПроцедуры + + // Ведется учет ИСМП в конфигурации +// Параметры: +// УчетПродукцииИСМП - Булево - Ведется учет ИСМП в конфигурации +// СтандартнаяОбработка - Булево - Выполнение стандартной обработки +// +Процедура ВедетсяУчетПродукцииИСМП(УчетПродукцииИСМП, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Ведется объемно сортовой учет в конфигурации +// Параметры: +// ОбъемноСортовойУчет - Булево - Ведется объемно сортовой учет в конфигурации +// СтандартнаяОбработка - Булево - Выполнение стандартной обработки +// +Процедура ВедетсяОбъемноСортовойУчет(ОбъемноСортовойУчет, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +// Процедура где можно добавить любой текст при формировании чека в формате PDF. +// +// Параметры: +// ТекстЗаголовка - Строка - Текст который будет выведен при формировании кассового чека в формате PDF +// ТекстПодвала - Строка - Текст который будет выведен при формировании кассового чека в формате PDF +Процедура ДополнительныйТекстПриФормированииЧекаPDF(ТекстЗаголовка, ТекстПодвала) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСФормойЭкземпляра + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПриСозданииНаСервере". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - Объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// Отказ - Булево - Отказ создания +// Параметры - Структура - Параметры операции +// СтандартнаяОбработка - Булево - Стандартная обработка +// +Процедура ЭкземплярОборудованияПриСозданииНаСервере(Объект, ЭтаФорма, Отказ, Параметры, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПриЧтенииНаСервере". +// +// Параметры: +// ТекущийОбъект - СправочникОбъект.ПодключаемоеОборудование - Объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// +Процедура ЭкземплярОборудованияПриЧтенииНаСервере(ТекущийОбъект, ЭтаФорма) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПередЗаписьюНаСервере". +// +// Параметры: +// Отказ - Булево - Отказ операции +// ТекущийОбъект - СправочникОбъект.ПодключаемоеОборудование - Объект подключаемого оборудования. +// ПараметрыЗаписи - Структура - Параметры операции +// +Процедура ЭкземплярОборудованияПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПриЗаписиНаСервере". +// +// Параметры: +// Отказ - Булево - Отказ операции +// ТекущийОбъект - СправочникОбъект.ПодключаемоеОборудование - Объект подключаемого оборудования. +// ПараметрыЗаписи - Структура - Параметры операции +// +Процедура ЭкземплярОборудованияПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПослеЗаписиНаСервере". +// +// Параметры: +// ТекущийОбъект - СправочникОбъект.ПодключаемоеОборудование - Объект подключаемого оборудования. +// ПараметрыЗаписи - Структура - Параметры операции +// +Процедура ЭкземплярОборудованияПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ОбработкаПроверкиЗаполненияНаСервере". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - Объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// Отказ - Булево - Отказ создания +// ПроверяемыеРеквизиты - Структура - Проверяемые реквизиты +// +Процедура ЭкземплярОборудованияОбработкаПроверкиЗаполненияНаСервере(Объект, ЭтаФорма, Отказ, ПроверяемыеРеквизиты) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре Фискальные операции +// при событии "ПриСозданииНаСервере". +// +// Параметры: +// Запись - РегистрСведенийЗапись.ФискальныеОперации - Запись фискальные операции. +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// Отказ - Булево - Отказ создания +// Параметры - Структура - Параметры операции +// СтандартнаяОбработка - Булево - Стандартная обработка +// +Процедура ЭкземплярФискальныеОперацииПриСозданииНаСервере(Запись, ЭтаФорма, Отказ, Параметры, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре Фискальные операции +// при событии "ПриСозданииНаСервере". +// +// Параметры: +// Запись - РегистрСведенийЗапись.ФискальныеОперации - Запись фискальные операции. +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// Отказ - Булево - Отказ создания +// СтандартнаяОбработка - Булево - Стандартная обработка +// +Процедура ЭкземплярПлатежныеОперацииПриСозданииНаСервере(Запись, ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСФормойСписка + +// Дополнительные переопределяемые действия с управляемой формой в Список Фискальные операции +// при событии "ПриСозданииНаСервере". +// +// Параметры: +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// Отказ - Булево - Отказ создания +// Параметры - Структура - Параметры операции +// СтандартнаяОбработка - Булево - Стандартная обработка +// +Процедура СписокФискальныеОперацииПриСозданииНаСервере(ЭтаФорма, Отказ, Параметры, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Список платежные операции +// при событии "ПриСозданииНаСервере". +// +// Параметры: +// ЭтаФорма - ФормаКлиентскогоПриложения - Форма настройки оборудования +// Параметры - Структура - Параметры операции +// Отказ - Булево - Отказ создания. +// СтандартнаяОбработка - Булево - Стандартная обработка. +// +Процедура СписокПлатежныеОперацииПриСозданииНаСервере(ЭтаФорма, Отказ, Параметры, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + +// Обработчик события заполнения персональных данных. +// +// Параметры: +// ПерсональныеДанные - Структура - Возвращаемый параметр, персональные данные. +// СубъектПерсональныхДанных - ОпределяемыйТип.СубъектПерсональныхДанныхБПО - субъект персональных данных. +// ТипПерсональныхДанных - ПеречислениеСсылка.ТипыПерсональныхДанныхККТ - Тип персональных данных +// НаДату - Дата - Дата, на которую необходимо получать персональные данные +// +Процедура ОбработкаЗаполненияПерсональныхДанных(ПерсональныеДанные, СубъектПерсональныхДанных, ТипПерсональныхДанных, НаДату) Экспорт + +КонецПроцедуры + +#Область ПродажаСВыдачейНаличных + +// Процедура где требуется проверить достаточность наличных денежных средств в кассовом аппарате +// +// Параметры: +// ИдентификаторККТ - СправочникСсылка.ПодключаемоеОборудование - ссылка на элемент КТТ +// Сумма - Число - требуемая сумма для выдачи наличных +// Отказ - Булево - если установить в Истина, тогда выдача наличных осуществляться не будет +Процедура ПроверитьДостаточностьНаличныхСредств(ИдентификаторККТ, Сумма, Отказ) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСФормойТоваровНСПК + +// Процедура, где требуется заполнить дерево товаров по кодам ТРУ. +// +// Параметры: +// ДеревоСертификатовЗначение - ДеревоЗначений - дерево значений для заполнения +// КодыТоваровТРУ - ТаблицаЗначений - таблица значений с товарами и кодами ТРУ для поиска сопоставлений +Процедура ЗаполнитьДеревоТоваровПоКодамТРУ(ДеревоСертификатовЗначение, КодыТоваровТРУ) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +#Область ОборудованиеККТ + +// Устарела: следует использовать МенеджерОборудованияКлиентПереопределяемый.ДоступноеККТДляФискализации. +// Переопределяет доступное ККТ для фискализации чека. +// +// Параметры: +// РеквизитыЧека - Структура - реквизиты фискального чека +// СписокУстройств - Массив - Список доступных ККТ для фискализации +// ИдентификаторУстройстваККТ - СправочникСсылка.ПодключаемоеОборудование - выбранное ККТ для фискализации +// +Процедура ДоступноеККТДляФискализации(РеквизитыЧека, СписокУстройств, ИдентификаторУстройстваККТ) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСЭлементомФормы + +// Устарела: больше не используется. +// Дополнительные переопределяемые действия с элементом формы +// служит для учета специфики визуального отображения в зависимости от типа клиента. +// +// Параметры: +// ЭлементУправления - ЭлементУправленияИнтерфейсом - элемент управления. +// СтандартнаяОбработка - Булево - Стандартная обработка. +// +Процедура ПодготовитьЭлементУправления(ЭлементУправления, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецОбласти \ 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..97deae0 --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиент/Ext/Module.bsl @@ -0,0 +1,4074 @@ +#Область ПрограммныйИнтерфейс + +#Область Системные + +// Производит получение события от устройства. +// +// Параметры: +// ОписаниеСобытия - Структура: +// * Источник - Строка - Источник внешнего события. +// * Событие - Строка - Наименование события. +// * Данные - Строка - Данные для события. +// ОписаниеОшибки - Строка - описание ошибки +// +// Возвращаемое значение: +// Структура. +// Неопределено. +// +Функция ПолучитьСобытиеОтУстройства(ОписаниеСобытия, ОписаниеОшибки = "") Экспорт + + Результат = Неопределено; + + // Поиск обработчика события + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Для Каждого Подключение Из ПодключаемоеОборудование.ПараметрыПодключенияПО Цикл + Если Подключение.ИДУстройства = ОписаниеСобытия.Источник + Или (ПустаяСтрока(Подключение.ИДУстройства) И Подключение.ИменаСобытий.Количество() > 0) Тогда + // Ищем среди подключенного оборудования устройство с полученным событием. + Событие = Подключение.ИменаСобытий.Найти(ОписаниеСобытия.Событие); + Если Событие <> Неопределено Тогда + ОбъектДрайвера = Подключение.ОбъектДрайвера; + // Обрабатываем сообщение + РезультатОбработки = Подключение.ОбработчикДрайвера.ОбработатьСобытие(ОбъектДрайвера, Подключение, ОписаниеСобытия.Событие, ОписаниеСобытия.Данные); + // Оповещаем + Если РезультатОбработки.Результат Тогда + Результат = Новый Структура(); + Результат.Вставить("ИмяСобытия", РезультатОбработки.Событие); + Результат.Вставить("Параметр", РезультатОбработки.Данные); + Результат.Вставить("Источник", "ПодключаемоеОборудование"); + Возврат Результат; + Иначе + ОписаниеОшибки = ОписаниеСобытия.Событие; + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Производит обработку данных события, полученных от клиента. +// +// Параметры: +// ОписаниеСобытия - Структура: +// * Источник - Строка - Источник внешнего события. +// * Событие - Строка - Наименование события. +// * Данные - Строка - Данные для события. +// ОписаниеОшибки - Строка - описание ошибки +// +// Возвращаемое значение: +// Булево. +// +Функция ОбработатьСобытиеОтУстройства(ОписаниеСобытия, ОписаниеОшибки = "") Экспорт + + Результат = Истина; + // Поиск обработчика события + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Для Каждого Подключение Из ПодключаемоеОборудование.ПараметрыПодключенияПО Цикл + Если Подключение.ИДУстройства = ОписаниеСобытия.Источник + Или (ПустаяСтрока(Подключение.ИДУстройства) И Подключение.ИменаСобытий.Количество() > 0) Тогда + // Ищем среди подключенного оборудования устройство с полученным событием. + Событие = Подключение.ИменаСобытий.Найти(ОписаниеСобытия.Событие); + Если Событие <> Неопределено Тогда + ОбъектДрайвера = Подключение.ОбъектДрайвера; + // Обрабатываем сообщение + РезультатОбработки = Подключение.ОбработчикДрайвера.ОбработатьСобытие(ОбъектДрайвера, Подключение, ОписаниеСобытия.Событие, ОписаниеСобытия.Данные); + // Оповещаем + Если РезультатОбработки.Результат Тогда + Оповестить(РезультатОбработки.Событие, РезультатОбработки.Данные, "ПодключаемоеОборудование"); + Иначе + Результат = Ложь; + ОписаниеОшибки = ОписаниеСобытия.Событие; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Параметры подключения драйвера. +// +// Параметры: +// ДанныеДрайвера - Структура - Данные драйвера. +// +// Возвращаемое значение: +// Структура - Параметры подключения: +// *Наименование - Строка. +// *ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования. +// *ПодключениеИзМакета - Булево. +// *ПодключениеЛокальноПоИдентификатору - Булево. +// *ИдентификаторОбъекта - СправочникСсылка.ПодключаемоеОборудование. +// *ВерсияДрайвера - Строка. +// *ИмяМакетаДрайвера - Строка. +// *РевизияИнтерфейса - Строка. +// *ШиринаСтроки - Строка. +// *ПечатьКвитанцийНаТерминале - Булево. +// *КороткиеСлипЧеки - Булево. +// *ВыдачиНаличныхДенежныхСредств - Булево. +// *ОплатаЭлектроннымиСертификатами - Булево. +// *СтолбцовНаДисплее - Число. +// *СтрокНаДисплее - Число. +// *ДисплейОтображаетТекст - Булево. +// *ДисплейОтображаетГрафику - Булево. +// *ДисплейОтображаетQRКод - Булево. +// *ДисплейОтображаетHTML - Булево. +// *ДисплейОтображаетСтатус - Булево. +// *ИдентификаторУстройства - УникальныйИдентификатор. +// *ОбъектДрайвера - Неопределено - +// *Параметры - Неопределено - +// *ОбработчикДрайвера - Неопределено - +// +Функция ПараметрыПодключенияДрайвера(ДанныеДрайвера) Экспорт + + Подключение = МенеджерОборудованияКлиентСервер.ПараметрыПодключения(ДанныеДрайвера); + Подключение.Вставить("ОбъектДрайвера" , Неопределено); + Подключение.Вставить("Параметры" , Неопределено); + Если ОбщегоНазначенияБПОКлиент.ЭтоВебКлиент() Тогда + Иначе + ОбработчикДрайвера = ПодключаемоеОборудованиеДрайверКлиент; + КонецЕсли; + Подключение.Вставить("ОбработчикДрайвера", ОбработчикДрайвера); + Возврат Подключение; + +КонецФункции + +// Параметры подключения устройства. +// +// Параметры: +// ДанныеУстройства - Неопределено, Произвольный, Структура - Данные устройства +// +// Возвращаемое значение: +// Структура - Параметры подключения: +// * Наименование - Строка. +// * ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования. +// * ПодключениеИзМакета - Булево. +// * ПодключениеЛокальноПоИдентификатору - Булево. +// * ИдентификаторОбъекта - СправочникСсылка.ПодключаемоеОборудование. +// * ВерсияДрайвера - Строка. +// * ИмяМакетаДрайвера - Строка. +// * РевизияИнтерфейса - Строка. +// * ШиринаСтроки - Строка. +// * ПечатьКвитанцийНаТерминале - Булево. +// * КороткиеСлипЧеки - Булево. +// * ВыдачиНаличныхДенежныхСредств - Булево. +// * ОплатаЭлектроннымиСертификатами - Булево. +// * КороткиеСлипЧеки - Булево. +// * ВыдачиНаличныхДенежныхСредств - Булево. +// * ОплатаЭлектроннымиСертификатами - Булево. +// * ЧастичнаяОтмена - Булево. +// * СписокОперацийПоКартам - Булево. +// * ConsumerPresentedQR - Булево. +// * СтолбцовНаДисплее - Число. +// * СтрокНаДисплее - Число. +// * ДисплейОтображаетТекст - Булево. +// * ДисплейОтображаетГрафику - Булево. +// * ДисплейОтображаетQRКод - Булево. +// * ИдентификаторУстройства - УникальныйИдентификатор. +// * ОбъектДрайвера - Неопределено - +// * Параметры - Неопределено - +// * ОбработчикДрайвера - Неопределено - +// * Клиенты - Массив из СправочникСсылка.РабочиеМеста - +// * Ссылка - СправочникСсылка.ПодключаемоеОборудование. +// * СетевоеОборудование - Булево. +// * КоличествоПодключенных - Число - +// * ИменаСобытий - Массив Из Строка - +// * ИДУстройства - Строка. +// +Функция ПараметрыПодключенияУстройства(ДанныеУстройства) Экспорт + + Подключение = ПараметрыПодключенияДрайвера(ДанныеУстройства); + Подключение.Вставить("Клиенты", Новый Массив()); + Подключение.Вставить("Ссылка" , ДанныеУстройства.Ссылка); + Подключение.Вставить("Параметры" , ДанныеУстройства.Параметры); + Подключение.Вставить("СетевоеОборудование" , ДанныеУстройства.СетевоеОборудование); + Подключение.Вставить("КоличествоПодключенных" , 0); + Подключение.Вставить("ИменаСобытий" , Новый Массив()); + Подключение.Вставить("ИДУстройства" , ""); + Возврат Подключение; + +КонецФункции + +// Событие устройств ввода новый формат. +// +// Возвращаемое значение: +// Булево - Событие устройств ввода новый формат +// +Функция СобытиеУстройствВводаНовыйФормат() Экспорт + + СтандартнаяОбработка = Истина; + НовыйФормат = Ложь; + МенеджерОборудованияКлиентПереопределяемый.СобытиеУстройствВводаНовыйФормат(НовыйФормат, СтандартнаяОбработка); + Результат = ?(Не СтандартнаяОбработка, НовыйФормат, Ложь); + + Возврат Результат; + +КонецФункции + +// Возвращает необходимость печати слип чека алкогольной продукции. +// +// Возвращаемое значение: +// Булево. +// +Функция ПечатьСлипЧекаАлкогольнойПродукции() Экспорт + + Результат = Ложь; + ПечатьСлипЧека = Результат; + СтандартнаяОбработка = Истина; + МенеджерОборудованияКлиентПереопределяемый.ПечатьСлипЧекаАлкогольнойПродукции(ПечатьСлипЧека, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Результат, ПечатьСлипЧека); + Возврат Результат; + +КонецФункции + +// Возвращает необходимость печати слип чека эквайринговой операции. +// +// Возвращаемое значение: +// Булево. +// +Функция ПечатьСлипЧекаЭквайринговойОперации() Экспорт + + ПечатьСлипЧека = Истина; + ПолныйСлипЧек = Истина; + СтандартнаяОбработка = Истина; + МенеджерОборудованияКлиентПереопределяемый.ПечатьСлипЧекаЭквайринговойОперации(ПечатьСлипЧека, ПолныйСлипЧек, СтандартнаяОбработка); + + Результат = Новый Структура(); + Результат.Вставить("ПечатьСлипЧека", ?(СтандартнаяОбработка, Истина, ПечатьСлипЧека)); + Результат.Вставить("ПолныйСлипЧек" , ?(СтандартнаяОбработка, Истина, ПолныйСлипЧек)); + + Возврат Результат; + +КонецФункции + +// Возвращает необходимость вывода QR-кода чека на дисплей покупателя после фискализации. +// +// Возвращаемое значение: +// Булево. +// +Функция ВыводQRКодаЧекаНаДисплейПокупателяПослеФискализации() Экспорт + + Результат = Истина; + ВыводQRКодаЧека = Результат; + СтандартнаяОбработка = Истина; + МенеджерОборудованияКлиентПереопределяемый.ВыводQRКодаЧекаНаДисплейПокупателяПослеФискализации(ВыводQRКодаЧека, СтандартнаяОбработка); + Результат = ?(СтандартнаяОбработка, Результат, ВыводQRКодаЧека); + Возврат Результат; + +КонецФункции + +// Возвращает глобальные переменные подключаемого оборудования +// +// Возвращаемое значение: +// Структура: +// * ПараметрыПодключенияПО - Массив из Структура +// * ДрайверыОборудования - Соответствие +// * ПоследнийСлипЧек - Строка +// * ЗавершениеРаботыСистемы - Булево +// * ДанныеОчереди - Неопределено +// * ФискальныеУстройства - Массив из Структура +// * ПроверкиКодаМаркировки - Массив из Структура +// +Функция ПодключаемоеОборудование() Экспорт + + Если ПараметрыПриложения = Неопределено Тогда + ПараметрыПриложения = Новый Соответствие(); + КонецЕсли; + + ПодключаемоеОборудование = ПараметрыПриложения.Получить("БПО.ПодключаемоеОборудование"); + + Если ПодключаемоеОборудование = Неопределено Тогда + ПодключаемоеОборудование = Новый Структура(); + ПодключаемоеОборудование.Вставить("ПараметрыПодключенияПО" , Новый Массив()); + ПодключаемоеОборудование.Вставить("ДрайверыОборудования" , Новый Соответствие()); + ПодключаемоеОборудование.Вставить("ПоследнийСлипЧек" , ""); + ПодключаемоеОборудование.Вставить("ЗавершениеРаботыСистемы", Ложь); + ПодключаемоеОборудование.Вставить("ДанныеОчереди" , Неопределено); + ПодключаемоеОборудование.Вставить("ФискальныеУстройства" , Новый Массив()); + ПодключаемоеОборудование.Вставить("ПроверкиКодаМаркировки" , Новый Массив()); + ПараметрыПриложения.Вставить("БПО.ПодключаемоеОборудование", ПодключаемоеОборудование); + КонецЕсли; + + Возврат ПодключаемоеОборудование; + +КонецФункции + +// Получить описание драйвера. +// +// Параметры: +// Данные - Строка. +// +// Возвращаемое значение: +// Структура. +// +Функция ПолучитьОписаниеДрайвера(Строка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"; + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область РабочееМесто + +Процедура ПривязатьРабочееМесто(РабочееМестоИдентификаторКлиента) Экспорт + + ДоступныеКомпьютеры = МенеджерОборудованияВызовСервера.ДоступныеКомпьютерыДляРабочегоМеста(); + СписокУстройств = Новый СписокЗначений(); + Для Каждого Элемент Из ДоступныеКомпьютеры Цикл + СписокУстройств.Добавить(Элемент); + КонецЦикла; + + Контекст = Новый Структура; + Контекст.Вставить("РабочееМестоИдентификаторКлиента", РабочееМестоИдентификаторКлиента); + ОписаниеОповещения = Новый ОписаниеОповещения("ПривязатьРабочееМестоЗавершение", ЭтотОбъект, Контекст); + + ТекстЗаголовкаВыбора = НСтр("ru='Выберите рабочее место, на котором запускается WEB клиент'"); + СписокУстройств.ПоказатьВыборЭлемента(ОписаниеОповещения, ТекстЗаголовкаВыбора); + +КонецПроцедуры + +Процедура ПривязатьРабочееМестоЗавершение(Результат, Параметры) Экспорт + + Если НЕ Результат = Неопределено Тогда + РабочееМестоИмяКомпьютера = Результат.Значение; + МенеджерОборудованияВызовСервера.ПривязатьРабочееМесто(Параметры.РабочееМестоИдентификаторКлиента, РабочееМестоИмяКомпьютера); + + ОписаниеОповещения = Новый ОписаниеОповещения("ПривязатьРабочееМестоПослеПредупреждения", ЭтотОбъект); + ТекстЗаголовка = НСтр("ru='Пожалуйста перезапустите WEB клиент для продолжения работы.'"); + ПоказатьПредупреждение(ОписаниеОповещения, ТекстЗаголовка); + КонецЕсли; + +КонецПроцедуры + +Процедура ПривязатьРабочееМестоПослеПредупреждения(Параметры) Экспорт + + ЗавершитьРаботуСистемы(Истина, Истина); + +КонецПроцедуры + +// Выполняет обновление имени компьютера в параметре сеанса "РабочееМестоКлиента". +// +// Возвращаемое значение: +// Булево. +// +Функция ОбновитьРабочееМестоКлиента() Экспорт + + Результат = Истина; + + РабочееМесто = РабочееМестоКлиента(); + + Если Не ЗначениеЗаполнено(РабочееМесто) Тогда + + РабочееМестоИдентификаторКлиента = МенеджерОборудованияКлиент.ИдентификаторКлиентаДляРабочегоМеста(); + #Если Не ВебКлиент Тогда + РабочееМестоИмяКомпьютера = ИмяКомпьютера(); + #Иначе + РабочееМестоИмяКомпьютера = ""; + #КонецЕсли + МассивРабочихМест = НайтиРабочиеМестаПоИдентификатору(РабочееМестоИдентификаторКлиента, РабочееМестоИмяКомпьютера, ОбщегоНазначенияБПОКлиент.ЭтоВебКлиент()); + Если МассивРабочихМест.Количество() = 0 Тогда + Если ОбщегоНазначенияБПОКлиент.ЭтоВебКлиент() Тогда + ПривязатьРабочееМесто(РабочееМестоИдентификаторКлиента); + Результат = Ложь; + Иначе + Параметры = Новый Структура; + Параметры.Вставить("ИдентификаторКлиента", РабочееМестоИдентификаторКлиента); + Параметры.Вставить("ИмяКомпьютера" , РабочееМестоИмяКомпьютера); + РабочееМесто = МенеджерОборудованияВызовСервера.СоздатьРабочееМестоКлиента(Параметры); + Результат = Истина; + КонецЕсли; + Иначе + РабочееМесто = МассивРабочихМест[0]; + Результат = Истина; + КонецЕсли; + + КонецЕсли; + + Если Результат И (РабочееМесто <> РабочееМестоКлиента()) Тогда + МенеджерОборудованияВызовСервера.УстановитьРабочееМестоКлиента(РабочееМесто); + Оповестить("ИзмененоРабочееМестоТекущегоСеанса", РабочееМесто); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Процедура для выбора рабочего места текущего сеанса. +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ВыбратьРМТекущегоСеанса(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + + Оповещение = Новый ОписаниеОповещения("ПредложитьВыборРабочегоМестаЗавершение", ЭтотОбъект); + ПредложитьВыборРабочегоМеста(Оповещение); + +КонецПроцедуры + +// Функция предоставляет диалог выбора рабочего места. +// +// Параметры: +// ОбработкаОповещения - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - Строка - идентификатор клиента +// +Процедура ПредложитьВыборРабочегоМеста(ОбработкаОповещения, ИдентификаторКлиента = "") Экспорт + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("ИдентификаторКлиента", ИдентификаторКлиента); + + ОткрытьФорму("Справочник.ПодключаемоеОборудование.Форма.ФормаВыбораРабочегоМеста", ПараметрыФормы,,, ,, ОбработкаОповещения, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + +КонецПроцедуры + +// Завершение выбора рабочего места. +// +// Параметры: +// Результат - Структура - результат выполнения операции. +// Параметры - Структура - параметры операции. +// +Процедура ПредложитьВыборРабочегоМестаЗавершение(Результат, Параметры) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("РабочееМесто") Тогда + УстановитьРабочееМесто(Результат.РабочееМесто); + КонецЕсли; + +КонецПроцедуры + +// Функция устанавливает рабочее место. +// +// Параметры: +// РабочееМесто - СправочникСсылка.РабочиеМеста - рабочее место клиента. +// +Процедура УстановитьРабочееМесто(РабочееМесто) Экспорт + + МенеджерОборудованияВызовСервера.УстановитьРабочееМестоКлиента(РабочееМесто); + Оповестить("ИзмененоРабочееМестоТекущегоСеанса", РабочееМесто); + +КонецПроцедуры + +// Возвращает имя компьютера клиента. +// При первом обращении получает имя компьютера из переменной сеанса. +// +// Возвращаемое значение: +// СправочникСсылка.РабочиеМеста +// +Функция РабочееМестоКлиента() Экспорт + + Возврат МенеджерОборудованияКлиентПовтИсп.РабочееМестоКлиента(); + +КонецФункции + +// Возвращает имя компьютера клиента. +// При первом обращении получает имя компьютера из переменной сеанса. +// +// Параметры: +// ИдентификаторКлиента - Строка - идентификатор клиента для рабочего места +// ИмяКомпьютера - Строка - Имя компьютера +// +// Возвращаемое значение: +// Массив. +Функция НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, WEBКлиент) Экспорт + + Возврат МенеджерОборудованияКлиентПовтИсп.НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, WEBКлиент); + +КонецФункции + +// Открытие формы списка рабочих мест. +// +// Параметры: +// ПараметрКоманды - Структура - параметры команды. +// ПараметрыВыполненияКоманды - Структура: +// *Источник - ФормаКлиентскогоПриложения - форма родитель. +// *Уникальность - УникальныйИдентификатор - уникальный идентификатор формы. +// *Окно - ОкноКлиентскогоПриложения - окно приложения. +// +Процедура ОткрытьРабочиеМеста(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + + ОбновитьРабочееМестоКлиента(); + ПараметрыФормы = Новый Структура(); + ОткрытьФорму("Справочник.РабочиеМеста.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры + +// Идентификатор клиента для рабочего места. +// +// Возвращаемое значение: +// Строка - Идентификатор клиента для рабочего места +Функция ИдентификаторКлиентаДляРабочегоМеста() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация(); + ИдентификаторКлиента = ВРег(СистемнаяИнформация.ИдентификаторКлиента); + + ИдентификаторКлиентаНовый = ИдентификаторКлиента; + ВыполненаСтандартнаяОбработка = Истина; + МенеджерОборудованияКлиентПереопределяемый.ИдентификаторКлиентаДляРабочегоМеста(ИдентификаторКлиентаНовый, ВыполненаСтандартнаяОбработка); + ИдентификаторКлиента = ?(Не ВыполненаСтандартнаяОбработка, ВРег(ИдентификаторКлиентаНовый), ИдентификаторКлиента); + + Возврат ИдентификаторКлиента; + +КонецФункции + +#КонецОбласти + +#Область ОбщиеМетодыДрайвера + +// Функция возвращает структуру с данными драйвера. +// +// Параметры: +// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера. +// +// Возвращаемое значение: +// Структура. +Функция ДанныеДрайвераОборудования(ИдентификаторДрайвера) Экспорт + + Возврат МенеджерОборудованияКлиентПовтИсп.ДанныеДрайвераОборудования(ИдентификаторДрайвера); + +КонецФункции + +// Поиск по идентификатору подключенного ранее устройства. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - экземпляр подключаемого оборудования. +// +// Возвращаемое значение: +// СправочникСсылка.ПодключаемоеОборудование +// +Функция ПолучитьПодключенноеУстройство(ИдентификаторУстройства) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + СписокПодключений = ПодключаемоеОборудование.ПараметрыПодключенияПО; + + ПодключенноеУстройство = Неопределено; + + Если СписокПодключений <> Неопределено Тогда + Для Каждого Подключение Из СписокПодключений Цикл + Если Подключение.Ссылка = ИдентификаторУстройства Тогда + ПодключенноеУстройство = Подключение; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат ПодключенноеУстройство; + +КонецФункции + +// Формирования массива типов оборудования +// +// Параметры: +// ТипыПО - Массив, Строка - тип оборудования. +// Возвращаемое значение: +// Массив - ПеречислениеСсылка.ТипыПодключаемогоОборудования - +// +Функция ПолучитьТипыОборудования(ТипыПО) Экспорт + + Соответствие = МенеджерОборудованияКлиентПовтИсп.ПолучитьСоответствиеТиповОборудования(); + МассивТипов = Новый Массив(); + Если ТипЗнч(ТипыПО) = Тип("Строка") Тогда + ТипыВМассиве = СтрРазделить(ТипыПО, ",", Ложь); + Для Каждого ТипОборудования Из ТипыВМассиве Цикл + МассивТипов.Добавить(Соответствие.Получить(ТипОборудования)); + КонецЦикла; + ИначеЕсли ТипЗнч(ТипыПО) = Тип("Массив") Тогда + Для Каждого ТипОборудования Из ТипыПО Цикл + Если ТипЗнч(ТипОборудования) = Тип("Строка") Тогда + МассивТипов.Добавить(Соответствие.Получить(ТипОборудования)); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат МассивТипов; + +КонецФункции + +// Поиск по типу подключенные ранее устройства. +// +// Параметры: +// ТипыПодключаемогоОборудования - Структура, Массив, Строка - тип оборудования. +// +// Возвращаемое значение: +// Массив из СправочникСсылка.ПодключаемоеОборудование +// +Функция ПолучитьПодключенныеУстройства(ТипыПодключаемогоОборудования) Экспорт + + ПодключенныеУстройства = Новый Массив(); + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + СписокПодключений = ПодключаемоеОборудование.ПараметрыПодключенияПО; + + Если СписокПодключений = Неопределено Тогда + Возврат ПодключенныеУстройства; + КонецЕсли; + + Если ТипЗнч(ТипыПодключаемогоОборудования) = Тип("Структура") Тогда + Для Каждого Подключение Из СписокПодключений Цикл + Для Каждого КлючИЗначение Из ТипыПодключаемогоОборудования Цикл + // Находим устройство по одному подходящему типу. + Если КлючИЗначение.Значение Тогда + ЗначениеКлюча = Ложь; + Если Подключение.ТипыОборудования.Свойство(КлючИЗначение.Ключ, ЗначениеКлюча) И ЗначениеКлюча Тогда + ПодключенныеУстройства.Добавить(Подключение); + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + Иначе + ТипыОборудования = ПолучитьТипыОборудования(ТипыПодключаемогоОборудования); + Для Каждого Подключение Из СписокПодключений Цикл + Если ТипыОборудования.Найти(Подключение.ТипОборудования) <> Неопределено Тогда + ПодключенныеУстройства.Добавить(Подключение); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат ПодключенныеУстройства; + +КонецФункции + +// Поиск по типу подключенные ранее устройства. +// +// Параметры: +// ИдентификаторОбъекта - СправочникСсылка.ПодключаемоеОборудование - экземпляр подключаемого оборудования. +// +// Возвращаемое значение: +// Массив. +// +Функция ПодключенныеУстройстваПоИдентификаторуОбъекта(ИдентификаторОбъекта) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + СписокПодключений = ПодключаемоеОборудование.ПараметрыПодключенияПО; + + ПодключенныеУстройства = Новый Массив(); + Для Каждого Подключение Из СписокПодключений Цикл + Если Подключение.ИдентификаторОбъекта = ИдентификаторОбъекта Тогда + ПодключенныеУстройства.Добавить(Подключение); + КонецЕсли; + КонецЦикла; + + Возврат ПодключенныеУстройства; + +КонецФункции + +// Получает описание драйвера. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера. +// ДанныеДрайвера - см. Справочники.ДрайверыОборудования.ДанныеДрайвераОборудования - данные драйвера оборудования. +// +Процедура НачатьПолучениеОписанияДрайвера(ОповещениеПриЗавершении, ИдентификаторДрайвера = Неопределено, ДанныеДрайвера = Неопределено) Экспорт + + Если ИдентификаторДрайвера <> Неопределено Тогда + ДанныеДрайвера = МенеджерОборудованияВызовСервера.ДанныеДрайвераОборудования(ИдентификаторДрайвера); + КонецЕсли; + + НовоеПодключение = МенеджерОборудованияКлиент.ПараметрыПодключенияДрайвера(ДанныеДрайвера); + + ОбработчикДрайвера = НовоеПодключение.ОбработчикДрайвера; + ОбработчикДрайвера.НачатьПолучениеОписанияДрайвера(ОповещениеПриЗавершении, НовоеПодключение); + +КонецПроцедуры + +// Получает описание оборудования. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторОборудования - СправочникСсылка.ПодключаемоеОборудование - идентификатор драйвера. +// ДанныеОборудования - см. МенеджерОборудованияВызовСервера.ДанныеУстройства - данные драйвера оборудования. +// +Процедура НачатьПолучениеОписанияОборудования(ОповещениеПриЗавершении, ИдентификаторОборудования = Неопределено, ДанныеОборудования = Неопределено) Экспорт + + Если ИдентификаторОборудования <> Неопределено Тогда + ДанныеОборудования = МенеджерОборудованияВызовСервера.ДанныеУстройства(ИдентификаторОборудования); + КонецЕсли; + + НовоеПодключение = МенеджерОборудованияКлиент.ПараметрыПодключенияУстройства(ДанныеОборудования); + Если Не ПустаяСтрока(ДанныеОборудования.ИдентификаторОбъекта) Тогда + СписокПодключений = ПодключенныеУстройстваПоИдентификаторуОбъекта(ДанныеОборудования.ИдентификаторОбъекта); + НовоеПодключение.КоличествоПодключенных = СписокПодключений.Количество(); + КонецЕсли; + + ОбработчикДрайвера = НовоеПодключение.ОбработчикДрайвера; + ОбработчикДрайвера.НачатьПолучениеОписанияДрайвера(ОповещениеПриЗавершении, НовоеПодключение); + +КонецПроцедуры + +// Начать выполнение дополнительной команды к драйверу, не требующую предварительного подключения устройства в системе. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор драйвера. +// ПараметрыУстройства - Структура - параметры устройства. +// +Процедура НачатьТестУстройства(ОповещениеПриЗавершении, ИдентификаторУстройства, ПараметрыУстройства = Неопределено) Экспорт + + // Поиск подключенного устройства. + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(ИдентификаторУстройства); + Если ПодключенноеУстройство = Неопределено Тогда + ДанныеОборудования = МенеджерОборудованияВызовСервера.ДанныеУстройства(ИдентификаторУстройства); + НовоеПодключение = МенеджерОборудованияКлиент.ПараметрыПодключенияУстройства(ДанныеОборудования); + НовоеПодключение.Параметры = ?(ПараметрыУстройства = Неопределено, ДанныеОборудования.Параметры, ПараметрыУстройства); + + ОбработчикДрайвера = НовоеПодключение.ОбработчикДрайвера; + ОбработчикДрайвера.НачатьТестУстройства(ОповещениеПриЗавершении, НовоеПодключение, Неопределено); + Иначе + // Сообщить об ошибке, что устройство подключено. + ОписаниеОшибки = НСтр("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'"), РезультатВыполнения.ОписаниеОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +// Функция возвращает подключено ли оборудование. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - ИдентификаторУстройства. +// +// Возвращаемое значение: +// Булево - Устройство подключено +// +Функция УстройствоПодключено(ИдентификаторУстройства) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Для Каждого Подключение Из ПодключаемоеОборудование.ПараметрыПодключенияПО Цикл + Если Подключение.Ссылка = ИдентификаторУстройства Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +#КонецОбласти + +#Область ПроцедурыИФункцииПодключенияОтключенияОборудованияВФорме + +// Начать подключение необходимых типов оборудования при открытии формы. +// +// Параметры: +// ОповещениеПриПодключении - ОписаниеОповещения - оповещение при подключении. +// Форма - ФормаКлиентскогоПриложения - открываемая форма. +// ПоддерживаемыеТипыПодключаемогоОборудования - Строка - содержит перечень типов подключаемого оборудования, разделенных запятыми. +// +Процедура НачатьПодключениеОборудованиеПриОткрытииФормы(ОповещениеПриПодключении, Форма, ПоддерживаемыеТипыПодключаемогоОборудования = Неопределено) Экспорт + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ПодключениеОборудованиеПриОткрытииФормы"; + УИДЗамера = ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, ОповещениеПриПодключении); + + Если ОповещениеПриПодключении = Неопределено Тогда + ОповещениеПриПодключении = Новый ОписаниеОповещения("ПодключитьОборудованиеЗавершениеПоУмолчанию", МенеджерОборудованияКлиент); + КонецЕсли; + + ПодключаемоеОборудование = ПодключаемоеОборудованиеНаФорме(Форма); + Если ПодключаемоеОборудование <> Неопределено Тогда + + Контекст = Новый Структура(); + Контекст.Вставить("Форма", Форма); + Контекст.Вставить("ОповещениеПриПодключении", ОповещениеПриПодключении); + Оповещение = Новый ОписаниеОповещения("НачатьПодключениеОборудованиеПриОткрытииФормыЗавершение", ЭтотОбъект, Контекст); + Форма.ПодключаемоеОборудованиеБПО.СписокОборудования.Очистить(); + НачатьПодключениеОборудования( + Оповещение, Форма.УникальныйИдентификатор, ПодключаемоеОборудование.СписокОборудования); + + Иначе + Если СуществуютРеквизитыНаФорме(Форма, "ИспользоватьПодключаемоеОборудование, ПоддерживаемыеТипыПодключаемогоОборудования") Тогда + Если ПоддерживаемыеТипыПодключаемогоОборудования = Неопределено Тогда + ПоддерживаемыеТипыПодключаемогоОборудования = ""; + КонецЕсли; + Форма.ПоддерживаемыеТипыПодключаемогоОборудования = ПоддерживаемыеТипыПодключаемогоОборудования; + Если Форма.ИспользоватьПодключаемоеОборудование Тогда + НачатьПодключениеОборудованиеПоТипу( + ОповещениеПриПодключении, + Форма.УникальныйИдентификатор, + ПреобразоватьСписокСтрокойВМассив(Форма.ПоддерживаемыеТипыПодключаемогоОборудования)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Начать подключение необходимых типов оборудования при открытии формы. +// +// Параметры: +// ОповещениеПриПодключении - ОписаниеОповещения - оповещение при подключении. +// Форма - ФормаКлиентскогоПриложения - открываемая форма. +// ПоддерживаемыеТипыПодключаемогоОборудования - Строка - содержит перечень типов подключаемого оборудования, разделенных запятыми. +// +Процедура НачатьПодключениеОборудованиеПриОткрытииФормыЗавершение(Результат, Контекст) Экспорт + + Если Результат.Результат Тогда + Контекст.Форма.ПодключаемоеОборудованиеБПО.СписокОборудования.Добавить(Результат.ПодключенноеУстройство); + КонецЕсли; + + Если Контекст.ОповещениеПриПодключении <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.ОповещениеПриПодключении, Результат); + КонецЕсли; + +КонецПроцедуры + +// Обработчик оповещения по умолчанию +// +// Параметры: +// РезультатВыполнения - Структура - результат выполнения операции. +// Параметры - Произвольный - дополнительный параметр переданный в оповещение. +// +Процедура ПодключитьОборудованиеЗавершениеПоУмолчанию(РезультатВыполнения, Параметры) Экспорт + + Если НЕ РезультатВыполнения.Результат Тогда + ТекстСообщения = СтрШаблон(НСтр("ru='При подключении оборудования произошла ошибка:""%1"".'"), РезультатВыполнения.ОписаниеОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +// Начать отключать оборудование по типу при закрытии формы. +// +// Параметры: +// ОповещениеПриОтключении - ОписаниеОповещения - оповещение при отключении. +// Форма - ФормаКлиентскогоПриложения - закрываемая форма. +// +Процедура НачатьОтключениеОборудованиеПриЗакрытииФормы(ОповещениеПриОтключении, Форма) Экспорт + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ОтключениеОборудованиеПриЗакрытииФормы"; + УИДЗамера = ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, ОповещениеПриОтключении); + + Если ОповещениеПриОтключении = Неопределено Тогда + ОповещениеПриОтключении = Новый ОписаниеОповещения("ОтключитьОборудованиеЗавершениеПоУмолчанию", МенеджерОборудованияКлиент); + КонецЕсли; + + ПодключаемоеОборудование = ПодключаемоеОборудованиеНаФорме(Форма); + Если ПодключаемоеОборудование <> Неопределено Тогда + НачатьОтключениеОборудования(ОповещениеПриОтключении, Форма.УникальныйИдентификатор); + Иначе + Если СуществуютРеквизитыНаФорме(Форма, "ПоддерживаемыеТипыПодключаемогоОборудования") Тогда + НачатьОтключениеОборудованияПоТипу( + ОповещениеПриОтключении, + Форма.УникальныйИдентификатор, + ПреобразоватьСписокСтрокойВМассив(Форма.ПоддерживаемыеТипыПодключаемогоОборудования)); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Обработчик оповещения отключения оборудования при закрытии формы по умолчанию +// +// Параметры: +// РезультатВыполнения - Структура +// Параметры - Структура +// +Процедура ОтключитьОборудованиеЗавершениеПоУмолчанию(РезультатВыполнения, Параметры) Экспорт + + Если НЕ РезультатВыполнения.Результат Тогда + ТекстСообщения = СтрШаблон(НСтр("ru='При отключении оборудования произошла ошибка: %1'"), РезультатВыполнения.ОписаниеОшибки); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +// Подключение необходимых типов оборудования при открытии формы. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - открываемая форма. +// +// Возвращаемое значение: +// Массив из см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании. +// +Асинх Функция ПодключитьОборудованиеПриОткрытииФормыАсинх(Форма) Экспорт + + РезультатыПодключения = Новый Массив(); + + ПодключаемоеОборудование = ПодключаемоеОборудованиеНаФорме(Форма); + Если ПодключаемоеОборудование <> Неопределено Тогда + + РезультатыПодключения = Ждать ПодключениеОборудованияАсинх( + Форма.УникальныйИдентификатор, + ПодключаемоеОборудование.СписокОборудования); + + Форма.ПодключаемоеОборудованиеБПО.СписокОборудования = Неопределено; + СписокОборудования = Новый Массив(); + Для Каждого Результат Из РезультатыПодключения Цикл + Если Результат.Результат Тогда + ПараметрыПодключения = МенеджерОборудованияКлиентСервер.ПараметрыПодключения(Результат.ПодключенноеУстройство); + ПараметрыПодключения.Удалить("ШаблонЛокализации"); + СписокОборудования.Добавить(Новый ФиксированнаяСтруктура(ПараметрыПодключения)); + КонецЕсли; + КонецЦикла; + Форма.ПодключаемоеОборудованиеБПО.СписокОборудования = Новый ФиксированныйМассив(СписокОборудования); + + КонецЕсли; + + Возврат РезультатыПодключения; + + +КонецФункции + +// Отключение оборудования при закрытии формы. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - закрываемая форма. +// +// Возвращаемое значение: +// Массив из см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании. +// +Асинх Функция ОтключитьОборудованиеПриЗакрытииФормыАсинх(Форма) Экспорт + + // Замер производительности + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ОтключениеОборудованиеПриЗакрытииФормы"; + УИДЗамера = ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация); + + Результат = Новый Массив(); + ПодключаемоеОборудование = ПодключаемоеОборудованиеНаФорме(Форма); + Если ПодключаемоеОборудование <> Неопределено Тогда + Результат = Ждать ОтключениеОборудованияАсинх(Форма.УникальныйИдентификатор); + КонецЕсли; + + #Если Не МобильноеПриложениеКлиент Тогда + ОбщегоНазначенияБПОКлиент.ЗавершитьЗамерВремениБПО(УИДЗамера); + #КонецЕсли + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ПечатающееУстройство + +// Начать подключение печатающего устройства +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор - уникальный идентификатор клиента. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// +Процедура НачатьПодключениеПечатающегоУстройства(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено) Экспорт + + ПараметрыВыполнение = Новый Структура(); + ПараметрыВыполнение.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + ПараметрыВыполнение.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + ПараметрыВыполнение.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ПринтерЧеков = Истина; + ПоддерживаемыеТипы.ККТ = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьПодключениеПечатающегоУстройства_ВыборЗавершение", ЭтотОбъект, ПараметрыВыполнение); + ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите устройство для печати'"), + НСтр("ru='Для данного рабочего места нет доступных устройств для печати.'"), + НСтр("ru='Устройство для печати не выбрано.'")); + Иначе + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, Неопределено, ИдентификаторУстройства); + НачатьПодключениеПечатающегоУстройства_ВыборЗавершение(РезультатВыполнения, ПараметрыВыполнение); + КонецЕсли; + +КонецПроцедуры + +// Завершение подключения печатающего устройства. +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнение - Структура +// +Процедура НачатьПодключениеПечатающегоУстройства_ВыборЗавершение(РезультатВыполнения, ПараметрыВыполнение) Экспорт + + Если РезультатВыполнения.Результат Тогда + ПараметрыВыполнение.ИдентификаторУстройства = РезультатВыполнения.ИдентификаторУстройства; + // Поиск подключенного устройства. + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(ПараметрыВыполнение.ИдентификаторУстройства); + Если ПодключенноеУстройство = Неопределено Тогда + НачатьПодключениеОборудованиеПоИдентификатору(ПараметрыВыполнение.ОповещениеПриЗавершении, ПараметрыВыполнение.ИдентификаторКлиента, ПараметрыВыполнение.ИдентификаторУстройства); + Иначе + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, Неопределено, ПараметрыВыполнение.ИдентификаторУстройства); + РезультатВыполнения.Вставить("ПечатающееУстройствоБылоПодключенное", Истина); + ВыполнитьОбработкуОповещения(ПараметрыВыполнение.ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + Иначе + ВыполнитьОбработкуОповещения(ПараметрыВыполнение.ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ВыполнениеКоманды + +// Выполнение команды обработчика для подключенного устройства. +// +// Параметры: +// ПодключенноеУстройство - СправочникСсылка.ПодключаемоеОборудование +// ПараметрыВыполнениеКоманды - Структура +// +Процедура ВыполнениеКомандыОбработчика(ПодключенноеУстройство, ПараметрыВыполнениеКоманды) Экспорт + + Команда = ПараметрыВыполнениеКоманды.Команда; + + // Вызываем модуль "Процессор данных" отвечающий за подготовку данных для выполнение команды на оборудовании. + Если ПараметрыВыполнениеКоманды.ПодготовитьДанные Тогда + + ПараметрыПодключенияСервер = МенеджерОборудованияКлиентСервер.ПараметрыПодключения(ПодключенноеУстройство); + ПроцессорДанных = ПараметрыВыполнениеКоманды.ПроцессорДанных; + // Подготовка данных для проведения операции на сервере. + ДанныеОперации = МенеджерОборудованияВызовСервера.ПодготовитьДанныеОперации(ПараметрыПодключенияСервер, ПроцессорДанных, Команда, ПараметрыВыполнениеКоманды.ПараметрыОперации); + + Если ДанныеОперации = Неопределено Тогда + ТекстОшибки = НСтр("ru='Ошибка подготовки данных для операции.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстОшибки, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + // Завершение команды. + ЗавершениеВыполнениеКоманды(РезультатВыполнения, ПараметрыВыполнениеКоманды); + Возврат; + ИначеЕсли НЕ ДанныеОперации.Результат Тогда + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ДанныеОперации.ТекстОшибки, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + // Завершение команды. + ЗавершениеВыполнениеКоманды(РезультатВыполнения, ПараметрыВыполнениеКоманды); + Возврат; + КонецЕсли; + Иначе + ДанныеОперации = ПараметрыВыполнениеКоманды.ПараметрыОперации; + Если ДанныеОперации = Неопределено Тогда + ДанныеОперации = Новый Структура(); + КонецЕсли; + КонецЕсли; + + ОбработчикДрайвера = ПодключенноеУстройство.ОбработчикДрайвера; + Если ОбработчикДрайвера = Неопределено Тогда + // Сообщить об ошибке, что не удалось загрузить драйвер. + ТекстОшибки = НСтр("ru='Не удалось подключить обработчик драйвера.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстОшибки, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатВыполнения); + Иначе + ПараметрыВыполнениеКоманды.Вставить("ДанныеОперации", ДанныеОперации); + ПараметрыВыполнениеКоманды.Вставить("ПодключенноеУстройство", ПодключенноеУстройство); + + Если Команда = "CheckFiscalization" + И ПараметрыВыполнениеКоманды.Свойство("ОповещениеПослеОткрытииЧека") + И ПараметрыВыполнениеКоманды.ОповещениеПослеОткрытииЧека <> Неопределено Тогда + + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПослеОткрытииЧека", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, ПодключенноеУстройство, "GetCurrentStatus", ДанныеОперации.ТекущееСостояние); + Иначе + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_Завершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, ПодключенноеУстройство, Команда, ДанныеОперации); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Обработчик оповещения "После открытия чека", вызывается во время команды "CheckFiscalization". +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьВыполнениеКоманды_ПослеОткрытииЧека(РезультатВыполнения, ПараметрыВыполнениеКоманды) Экспорт + + ДанныеОперации = ПараметрыВыполнениеКоманды.ДанныеОперации; + ПодключенноеУстройство = ПараметрыВыполнениеКоманды.ПодключенноеУстройство; + + ПараметрыВыполнения = Новый Структура(); + ПараметрыВыполнения.Вставить("ВходныеПараметры", ПараметрыВыполнениеКоманды.ДанныеОперации); + ПараметрыВыполнения.Вставить("ОписаниеОшибки" , Неопределено); + ПараметрыВыполнения.Вставить("ПродолжитьПечать", Истина); + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяЧекопечатающиеУстройства() Тогда + МодульОборудованиеЧекопечатающиеУстройстваВызовСервера = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваВызовСервера"); + ТекущееСостояние = ДанныеОперации.ТекущееСостояние; + ФискальныеДанныеСтруктура = МодульОборудованиеЧекопечатающиеУстройстваВызовСервера.ПолучитьПараметрыСменыИзXMLПакета( + ТекущееСостояние.РезультатXML, ПодключенноеУстройство.РевизияИнтерфейса, ТекущееСостояние.НомерСменыККТ, ТекущееСостояние.НомерЧекаККТ); + ЗаполнитьПараметрыОперацииПодписиЧека(ПараметрыВыполнения, ФискальныеДанныеСтруктура.НомерСменыККТ, Число(ФискальныеДанныеСтруктура.НомерЧекаККТ) + 1, ДанныеОперации.ЗаводскойНомерФН); + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ЗавершениеПечати", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ПараметрыВыполнения.Вставить("ОповещениеПродолжения", Оповещение); + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПослеОткрытииЧека, ПараметрыВыполнения); + +КонецПроцедуры + +// Обработчик оповещения "Завершение печати", вызывается после открытия чека. +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьВыполнениеКоманды_ЗавершениеПечати(РезультатВыполнения, ПараметрыВыполнениеКоманды) Экспорт + + Если РезультатВыполнения.ПродолжитьПечать Тогда + + ДанныеОперации = ПараметрыВыполнениеКоманды.ДанныеОперации; + ПараметрыОперации = ПараметрыВыполнениеКоманды.ПараметрыОперации; + ПодключенноеУстройство = ПараметрыВыполнениеКоманды.ПодключенноеУстройство; + + ДополнительныеПараметры = Новый Структура(); + ЗаполнитьПараметрыОперацииПодписиЧека(ДополнительныеПараметры); + ЗаполнитьЗначенияСвойств(ДополнительныеПараметры, РезультатВыполнения); + ДополнительныеПараметры.Вставить("АдресЧека" , ?(РезультатВыполнения.Свойство("АдресЧека"), РезультатВыполнения.АдресЧека, Неопределено)); + ДополнительныеПараметры.Вставить("ПодписьЧека", ?(РезультатВыполнения.Свойство("ПодписьЧека"), РезультатВыполнения.ПодписьЧека, Неопределено)); + ДанныеОперации.Вставить("ПодписьЧека", ДополнительныеПараметры); + ПараметрыОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + + Если НЕ ПустаяСтрока(ДополнительныеПараметры.АдресЧека) Тогда // Необходима печать слип-чека алко-продукции. + ПечатьСлипЧека = ПечатьСлипЧекаАлкогольнойПродукции(); + Если ПечатьСлипЧека И ОбщегоНазначенияБПОКлиент.ИспользуетсяЧекопечатающиеУстройства() Тогда + ШиринаСтроки = ?(ПодключенноеУстройство.Свойство("ШиринаСтроки"), ПодключенноеУстройство.ШиринаСтроки, 36); + + МодульОборудованиеЧекопечатающиеУстройстваКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиентСервер"); + МодульОборудованиеЧекопечатающиеУстройстваВызовСервера = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваВызовСервера"); + + ДанныеОперации.ТестовыеЧеки = МодульОборудованиеЧекопечатающиеУстройстваВызовСервера.XMLПакетИнфоКвитанции( + ДополнительныеПараметры, ШиринаСтроки, ПодключенноеУстройство.РевизияИнтерфейса); + КонецЕсли; + КонецЕсли; + + ОбработчикДрайвера = ПараметрыВыполнениеКоманды.ПодключенноеУстройство.ОбработчикДрайвера; + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_Завершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, ПодключенноеУстройство, ПараметрыВыполнениеКоманды.Команда, ПараметрыВыполнениеКоманды.ДанныеОперации); + + Иначе + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, РезультатВыполнения.ОписаниеОшибки, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +// Заполнить параметры операции подписи чека. +// +// Параметры: +// ПараметрыОперации - Структура +// НомерСмены - Число - номер открытой/закрытой смены. +// НомерЧека - Число - номер фискального чека. +// ЗаводскойНомерФН - Число - заводской номер фискального накопителя +// +Процедура ЗаполнитьПараметрыОперацииПодписиЧека(ПараметрыОперации, НомерСмены = Неопределено, + НомерЧека = Неопределено, ЗаводскойНомерФН = Неопределено) Экспорт; + + ПараметрыОперации.Вставить("ИНН" , Неопределено); + ПараметрыОперации.Вставить("КПП" , Неопределено); + + ПараметрыОперации.Вставить("НомерСмены", НомерСмены); + ПараметрыОперации.Вставить("НомерЧека" , НомерЧека); + ПараметрыОперации.Вставить("НомерКассы" , Неопределено); + ПараметрыОперации.Вставить("ЗаводскойНомерФН", ЗаводскойНомерФН); + ПараметрыОперации.Вставить("НаименованиеОрганизации", Неопределено); + +КонецПроцедуры + +// Начать выполнение команды ответственному обработчику драйвера +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор - уникальный идентификатор клиента. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// ПараметрыОперации - Структура +// ПараметрыВыполнениеКоманды - Структура +// ПечатающееУстройство - СправочникСсылка.ПодключаемоеОборудование - идентификатор печатающего устройства. +// +Процедура НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ПараметрыВыполнениеКоманды, ПечатающееУстройство = Неопределено) Экспорт + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + Если ОповещениеПриЗавершении <> Неопределено Тогда + ОписаниеОшибки = НСтр("ru='Устройство не выбрано или не подключено.'"); + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + Возврат; + КонецЕсли; + +#Если Не МобильноеПриложениеКлиент Тогда + // Замер производительности. + КлючеваяОперация = СтрШаблон("ОбщийМодуль.МенеджерОборудованияКлиент.НачатьВыполнениеКоманды.%1", ПараметрыВыполнениеКоманды.Команда); + ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, ОповещениеПриЗавершении); +#КонецЕсли + + ПараметрыВыполнениеКоманды.Вставить("ОповещениеПриЗавершении" , ОповещениеПриЗавершении); + ПараметрыВыполнениеКоманды.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + ПараметрыВыполнениеКоманды.Вставить("ИдентификаторУстройства" , ИдентификаторУстройства); + ПараметрыВыполнениеКоманды.Вставить("ПараметрыОперации" , ПараметрыОперации); + ПараметрыВыполнениеКоманды.Вставить("Подключено" , Ложь); + ПараметрыВыполнениеКоманды.Вставить("ПодключенноеУстройство" , Неопределено); + ПараметрыВыполнениеКоманды.Вставить("ПечатающееУстройство" , ПечатающееУстройство); + ПараметрыВыполнениеКоманды.Вставить("ПечатающееУстройствоПодключено" , Ложь); + ПараметрыВыполнениеКоманды.Вставить("ПечатающееУстройствоБылоПодключенное", Ложь); + ПараметрыВыполнениеКоманды.Вставить("СетевоеОборудование"); + + // Поиск подключенного устройства. + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(ИдентификаторУстройства); + Если ПодключенноеУстройство = Неопределено Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПодключениеЗавершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + НачатьПодключениеОборудованиеПоИдентификатору(ОписаниеОповещения, ИдентификаторКлиента, ИдентификаторУстройства); + Иначе + ПараметрыВыполнениеКоманды.ПодключенноеУстройство = ПодключенноеУстройство; + // Нужно ли использовать печатающее устройство. + Если ПараметрыВыполнениеКоманды.ИспользоватьПечатающееУстройство И ПараметрыВыполнениеКоманды.ПечатьСлипЧека + И НЕ ПодключенноеУстройство.ПечатьКвитанцийНаТерминале Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПечатающегоУстройстваЗавершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + НачатьПодключениеПечатающегоУстройства(ОписаниеОповещения, ПараметрыВыполнениеКоманды.ИдентификаторКлиента, ПечатающееУстройство); + Иначе + ВыполнениеКомандыОбработчика(ПодключенноеУстройство, ПараметрыВыполнениеКоманды); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Завершение подключения оборудования +// +// Параметры: +// РезультатПодключения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьВыполнениеКоманды_ПодключениеЗавершение(РезультатПодключения, ПараметрыВыполнениеКоманды) Экспорт + + Если РезультатПодключения.Результат Тогда + + ПодключенноеУстройство = РезультатПодключения.ПодключенноеУстройство; + ПараметрыВыполнениеКоманды.ПодключенноеУстройство = ПодключенноеУстройство; + ПараметрыВыполнениеКоманды.Подключено = Истина; + + // Нужно ли использовать печатающее устройство. + Если ПараметрыВыполнениеКоманды.ИспользоватьПечатающееУстройство И ПараметрыВыполнениеКоманды.ПечатьСлипЧека + И НЕ ПодключенноеУстройство.ПечатьКвитанцийНаТерминале Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПечатающегоУстройстваЗавершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + НачатьПодключениеПечатающегоУстройства(ОписаниеОповещения, ПараметрыВыполнениеКоманды.ИдентификаторКлиента, ПараметрыВыполнениеКоманды.ПечатающееУстройство); + Иначе + ВыполнениеКомандыОбработчика(ПодключенноеУстройство, ПараметрыВыполнениеКоманды); + КонецЕсли; + + Иначе + ТекстСообщения = СтрШаблон(НСтр("ru='При подключении оборудования произошла ошибка: %1'"), РезультатПодключения.ОписаниеОшибки); + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстСообщения); + РезультатОперации.ИдентификаторУстройства = ПараметрыВыполнениеКоманды.ИдентификаторУстройства; + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +// Завершение подключения печатающего устройства +// +// Параметры: +// РезультатПодключения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьВыполнениеКоманды_ПечатающегоУстройстваЗавершение(РезультатПодключения, ПараметрыВыполнениеКоманды) Экспорт + + Если РезультатПодключения.Результат Тогда + ПараметрыВыполнениеКоманды.ПечатающееУстройство = РезультатПодключения.ИдентификаторУстройства; + ПараметрыВыполнениеКоманды.ПечатающееУстройствоПодключено = Истина; + + Если РезультатПодключения.Свойство("ПечатающееУстройствоБылоПодключенное") И РезультатПодключения.ПечатающееУстройствоБылоПодключенное Тогда + ПараметрыВыполнениеКоманды.ПечатающееУстройствоБылоПодключенное = Истина; + КонецЕсли; + ВыполнениеКомандыОбработчика(ПараметрыВыполнениеКоманды.ПодключенноеУстройство, ПараметрыВыполнениеКоманды); + Иначе + // Отключение оборудования при завершение + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды); + // Завершение с ошибкой + ТекстСообщения = СтрШаблон(НСтр("ru='При подключении печатающего устройства произошла ошибка: %1'"), РезультатПодключения.ОписаниеОшибки); + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстСообщения); + РезультатОперации.ИдентификаторУстройства = РезультатПодключения.ИдентификаторУстройства; + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +// Завершение выполнения команды +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнениеКоманды - Структура: +// * ПараметрыОперации - Структура: +// ** ОбработатьДанные - Булево +// ** ОбработатьДанныеПриОшибке - Булево +// ** ИспользоватьПечатающееУстройство - Булево +// ** ДополнительныеПараметры - Структура +// +Процедура НачатьВыполнениеКоманды_Завершение(РезультатВыполнения, ПараметрыВыполнениеКоманды) Экспорт + + // Обработка данный на сервере после выполнение команды + Если (РезультатВыполнения.Результат И ПараметрыВыполнениеКоманды.ОбработатьДанные) + Или (ПараметрыВыполнениеКоманды.Свойство("ОбработатьДанныеПриОшибке") И ПараметрыВыполнениеКоманды.ОбработатьДанныеПриОшибке) Тогда + + ПараметрыПодключенияСервер = МенеджерОборудованияКлиентСервер.ПараметрыПодключения(ПараметрыВыполнениеКоманды.ПодключенноеУстройство); + ПараметрыПодключенияСервер.Вставить("ИдентификаторУстройства", ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + ПроцессорДанных = ПараметрыВыполнениеКоманды.ПроцессорДанных; + Команда = ПараметрыВыполнениеКоманды.Команда; + // Вызываем модуль отвечающий за обработку данных после выполнение команды на оборудовании. + МенеджерОборудованияВызовСервера.ОбработатьДанныеОперации(ПараметрыПодключенияСервер, ПроцессорДанных, Команда, РезультатВыполнения, ПараметрыВыполнениеКоманды.ДанныеОперации); + КонецЕсли; + + Если РезультатВыполнения.Результат Тогда + Если ПараметрыВыполнениеКоманды.Свойство("ПараметрыОперации") + И ПараметрыВыполнениеКоманды.ПараметрыОперации <> Неопределено + И ПараметрыВыполнениеКоманды.ПараметрыОперации.Свойство("ДополнительныеПараметры") Тогда + РезультатВыполнения.Вставить("ДополнительныеПараметры", ПараметрыВыполнениеКоманды.ПараметрыОперации.ДополнительныеПараметры); + КонецЕсли; + Если ПараметрыВыполнениеКоманды.Команда = "CheckFiscalization" + И ОбщегоНазначенияБПОКлиент.ИспользуетсяДисплеиПокупателя() + И ВыводQRКодаЧекаНаДисплейПокупателяПослеФискализации() Тогда + СообщениеНаДисплее = СтрШаблон(НСтр("ru = 'Электронный чек%1Проверьте чек в ФНС'"), Символы.ПС); + МодульОборудованиеДисплеиПокупателяКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеДисплеиПокупателяКлиент"); + ПараметрыОперацииQR = МодульОборудованиеДисплеиПокупателяКлиент.ПараметрыОперацииДисплейПокупателя(СообщениеНаДисплее, РезультатВыполнения.QRКодЧекаККТ); + МодульОборудованиеДисплеиПокупателяКлиент.НачатьВыводQRКодаНаДисплейПокупателя(Неопределено, Неопределено, Неопределено, ПараметрыОперацииQR); + КонецЕсли; + Иначе + Если ПараметрыВыполнениеКоманды.Команда = "CheckFiscalization" + И ПараметрыВыполнениеКоманды.Свойство("ОповещениеПриОшибкеПечатиЧека") + И ПараметрыВыполнениеКоманды.ОповещениеПриОшибкеПечатиЧека <> Неопределено Тогда + ДанныеОперации = ПараметрыВыполнениеКоманды.ДанныеОперации; + ПараметрыВыполнения = Новый Структура(); + ПараметрыВыполнения.Вставить("ВходныеПараметры", ПараметрыВыполнениеКоманды.ДанныеОперации); + ПараметрыВыполнения.Вставить("ОписаниеОшибки" , Неопределено); + ПараметрыВыполнения.Вставить("ПродолжитьПечать", Истина); + ПараметрыВыполнения.Вставить("ОповещениеПродолжения", Неопределено); + ЗаполнитьПараметрыОперацииПодписиЧека(ПараметрыВыполнения, ДанныеОперации.НомерСменыККТ, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.ЗаводскойНомерФН); + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриОшибкеПечатиЧека, ПараметрыВыполнения); + КонецЕсли; + КонецЕсли; + + Если ПараметрыВыполнениеКоманды.ИспользоватьПечатающееУстройство + И ПараметрыВыполнениеКоманды.ПечатающееУстройствоПодключено И РезультатВыполнения.Свойство("ТестовыеЧеки") Тогда + // Поиск подключенного устройства. + ПечатающееУстройство = ПолучитьПодключенноеУстройство(ПараметрыВыполнениеКоманды.ПечатающееУстройство); + Если ПечатающееУстройство = Неопределено Тогда + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды); + ТекстОшибки = НСтр("ru='Ошибка печати слип чека. Операция отменена.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстОшибки, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + // Завершение команды. + ЗавершениеВыполнениеКоманды(РезультатВыполнения, ПараметрыВыполнениеКоманды) + Иначе + Если РезультатВыполнения.Свойство("ТекстСлипЧека") И Не ПустаяСтрока(РезультатВыполнения.ТекстСлипЧека) Тогда + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ПодключаемоеОборудование.Вставить("ПоследнийСлипЧек", РезультатВыполнения.ТекстСлипЧека); + КонецЕсли; + // Результат выполнения исходной операции + ПараметрыВыполнениеКоманды.Вставить("РезультатВыполнения", РезультатВыполнения); + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ПечатьЗавершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ПечатающееУстройство.ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, ПечатающееУстройство, "PrintText", РезультатВыполнения); + КонецЕсли; + Иначе + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды); + // Завершение команды. + ЗавершениеВыполнениеКоманды(РезультатВыполнения, ПараметрыВыполнениеКоманды) + КонецЕсли; + +КонецПроцедуры + +// Завершение печати +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьВыполнениеКоманды_ПечатьЗавершение(РезультатВыполнения, ПараметрыВыполнениеКоманды) Экспорт + + Если РезультатВыполнения.Результат Тогда + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды); + // Завершение команды. + ЗавершениеВыполнениеКоманды(ПараметрыВыполнениеКоманды.РезультатВыполнения, ПараметрыВыполнениеКоманды) + Иначе + // при команде "Settlement" нельзя выполнить аварийную отмену последней операции + Если ПараметрыВыполнениеКоманды.Команда = "Settlement" Тогда + + ТекстСообщения = СтрШаблон( + НСтр("ru='При получении итогов дня по картам, произошла ошибка печати слип чека. + |На печатающем устройстве не поддерживается печать текстовых документов. + |Терминал: %1 + |Печатающее устройство: %2'"), + ПараметрыВыполнениеКоманды.ИдентификаторУстройства, + ПараметрыВыполнениеКоманды.ПечатающееУстройство); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(ТекстСообщения); + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБазоваяФункциональность() Тогда + + Если РезультатВыполнения.Свойство("ОписаниеОшибки") Тогда + ТекстСообщения = ТекстСообщения + Символы.ПС + РезультатВыполнения.ОписаниеОшибки; + КонецЕсли; + + Попытка + ОбщегоНазначенияБПОКлиент.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Подключаемое оборудование.'"), + ТекстСообщения); + Исключение + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(РезультатВыполнения.ОписаниеОшибки); + КонецПопытки; + КонецЕсли; + + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды); + + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, ТекстСообщения, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + // Завершение команды. + ЗавершениеВыполнениеКоманды(РезультатВыполнения, ПараметрыВыполнениеКоманды) + Иначе + ПодключенноеУстройство = ПараметрыВыполнениеКоманды.ПодключенноеУстройство; + ПараметрыВыполнениеКоманды.Вставить("ОписаниеОшибки", РезультатВыполнения.ОписаниеОшибки); + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ОтменаОперацииИЗавершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + ПодключенноеУстройство.ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, ПодключенноеУстройство, "EmergencyVoid", РезультатВыполнения); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Завершение отмены операции +// +// Параметры: +// РезультатВыполнения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьВыполнениеКоманды_ОтменаОперацииИЗавершение(РезультатВыполнения, ПараметрыВыполнениеКоманды) Экспорт + + + Если РезультатВыполнения.Результат Тогда + ТекстСообщения = НСтр("ru='Эквайринговая операция отменена - ошибка печати слип чека возникла ошибка.'"); + Иначе + ТекстСообщения = НСтр("ru='Ошибка отмены операции транзакции. Обратитесь в банк.'"); + КонецЕсли; + + Если ПараметрыВыполнениеКоманды.Свойство("ОписаниеОшибки") Тогда + ТекстСообщения = ТекстСообщения + Символы.ПС + ПараметрыВыполнениеКоманды.ОписаниеОшибки; + КонецЕсли; + // Отключение оборудования. + ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды); + + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ТекстСообщения, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + // Завершение команды. + ЗавершениеВыполнениеКоманды(РезультатВыполнения, ПараметрыВыполнениеКоманды) + +КонецПроцедуры + +// Отключение оборудования +// +// Параметры: +// ПараметрыВыполнениеКоманды - Структура +// +Процедура ОтключитьОборудованиеПослеВыполнениеКоманды(ПараметрыВыполнениеКоманды) Экспорт + + СетевоеОборудование = ПараметрыВыполнениеКоманды.ПодключенноеУстройство.СетевоеОборудование; + ОтключениеОборудования = ПараметрыВыполнениеКоманды.Подключено; + + Если ПараметрыВыполнениеКоманды.Свойство("ОставитьПодключенным") И ПараметрыВыполнениеКоманды.ОставитьПодключенным Тогда + ОтключениеОборудования = Ложь; + КонецЕсли; + + Если ОтключениеОборудования Или СетевоеОборудование Тогда + НачатьОтключениеОборудованиеПоИдентификатору(Неопределено, ПараметрыВыполнениеКоманды.ИдентификаторКлиента, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + Если ПараметрыВыполнениеКоманды.ПечатающееУстройствоПодключено И НЕ ПараметрыВыполнениеКоманды.ПечатающееУстройствоБылоПодключенное Тогда + НачатьОтключениеОборудованиеПоИдентификатору(Неопределено, ПараметрыВыполнениеКоманды.ИдентификаторКлиента, ПараметрыВыполнениеКоманды.ПечатающееУстройство); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Начать получение параметров устройства +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ИдентификаторКлиента - УникальныйИдентификатор - уникальный идентификатор клиента. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// +Процедура НачатьПолучениеПараметровУстройства(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства) Экспорт + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + Если ОповещениеПриЗавершении <> Неопределено Тогда + ОписаниеОшибки = НСтр("ru='Устройство не выбрано или не подключено.'"); + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + Возврат; + КонецЕсли; + + // Поиск подключенного устройства. + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(ИдентификаторУстройства); + Если ПодключенноеУстройство = Неопределено Тогда + ПараметрыВыполнениеКоманды = Новый Структура(); + ПараметрыВыполнениеКоманды.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + ПараметрыВыполнениеКоманды.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + ПараметрыВыполнениеКоманды.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + ОписаниеОповещения = Новый ОписаниеОповещения("НачатьПолучениеПараметровУстройства_ПодключениеЗавершение", ЭтотОбъект, ПараметрыВыполнениеКоманды); + НачатьПодключениеОборудованиеПоИдентификатору(ОписаниеОповещения, ИдентификаторКлиента, ИдентификаторУстройства); + Иначе + ПараметровУстройства = МенеджерОборудованияКлиентСервер.ПараметрыПодключения(ПодключенноеУстройство); + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, Неопределено, ИдентификаторУстройства); + РезультатОперации.ПодключенноеУстройство = ПодключенноеУстройство; + РезультатОперации.Вставить("ПараметровУстройства", ПараметровУстройства); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + КонецЕсли; + +КонецПроцедуры + +// Завершение подключения оборудования +// +// Параметры: +// РезультатПодключения - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура НачатьПолучениеПараметровУстройства_ПодключениеЗавершение(РезультатПодключения, ПараметрыВыполнениеКоманды) Экспорт + + Если РезультатПодключения.Результат Тогда + ПодключенноеУстройство = РезультатПодключения.ПодключенноеУстройство; + ПараметровУстройства = МенеджерОборудованияКлиентСервер.ПараметрыПодключения(ПодключенноеУстройство); + РезультатПодключения.Вставить("ПараметровУстройства", ПараметровУстройства); + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатПодключения); + НачатьОтключениеОборудованиеПоИдентификатору(Неопределено, ПараметрыВыполнениеКоманды.ИдентификаторКлиента, ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + Иначе + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатПодключения); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область Интерфейсные + +// Выполнить настройку оборудования. +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование. +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// +Процедура ВыполнитьНастройкуОборудования(Идентификатор, ОповещениеПриЗавершении = Неопределено) Экспорт + +#Если Не МобильноеПриложениеКлиент Тогда + // Замер производительности. + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ВыполнитьНастройкуОборудования"; + ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, Неопределено, Ложь, Истина); +#КонецЕсли + + ФормаНастройки = "Справочник.ПодключаемоеОборудование.Форма.ФормаНастройки"; + ТекущийЯзык = ТекущийЯзык(); + Если ТипЗнч(ТекущийЯзык) = Тип("Строка") Тогда + КодЯзыка = ТекущийЯзык; + Иначе + КодЯзыка = ТекущийЯзык.КодЯзыка; + КонецЕсли; + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("Идентификатор", Идентификатор); + ПараметрыФормы.Вставить("КодЯзыка", КодЯзыка); + + ПараметрыКоманды = Новый Структура("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + Обработчик = Новый ОписаниеОповещения("ВыполнитьНастройкуОборудования_Завершение", ЭтотОбъект, ПараметрыКоманды); + + ОткрытьФорму(ФормаНастройки, ПараметрыФормы,,, ,, Обработчик, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + +КонецПроцедуры + +// Завершение настройки оборудования. +// +// Параметры: +// Результат - Структура - результат возвращаемый формой при закрытии. +// Параметры - Структура - параметры команды. +// +Процедура ВыполнитьНастройкуОборудования_Завершение(Результат, Параметры) Экспорт + + РезультатЗавершения = Ложь; + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + + Если Результат.Свойство("Идентификатор") И Результат.Свойство("ПараметрыОборудования") Тогда + РезультатЗавершения = МенеджерОборудованияВызовСервера.СохранитьПараметрыУстройства(Результат.Идентификатор, Результат.ПараметрыОборудования); + КонецЕсли; + + Если РезультатЗавершения Тогда + ОбновитьПовторноИспользуемыеЗначения(); + Иначе + СообщениеОбОшибке = НСтр("ru='Не удалось сохранить параметры устройства.'"); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(СообщениеОбОшибке); + КонецЕсли; + + КонецЕсли; + + Если Параметры.ОповещениеПриЗавершении <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Параметры.ОповещениеПриЗавершении, РезультатЗавершения); + КонецЕсли; + +КонецПроцедуры + +// Открытие формы подключаемого Оборудования. +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ОткрытьПодключаемоеОборудование(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + +#Если Не МобильноеПриложениеКлиент Тогда + // Замер производительности. + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ОткрытьПодключаемоеОборудование"; + ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, Неопределено, Ложь, Истина); +#КонецЕсли + + ОбновитьРабочееМестоКлиента(); + + ПараметрыФормы = Новый Структура(); + ОткрытьФорму("Справочник.ПодключаемоеОборудование.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры + +// Открытие формы драйверов оборудования. +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ОткрытьДрайверыОборудования(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + +#Если Не МобильноеПриложениеКлиент Тогда + // Замер производительности. + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ОткрытьДрайверыОборудования"; + ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, Неопределено, Ложь, Истина); +#КонецЕсли + + ОбновитьРабочееМестоКлиента(); + + ПараметрыФормы = Новый Структура(); + ОткрытьФорму("Справочник.ДрайверыОборудования.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры + +// Открытие формы списка платежных операций +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ОткрытьПлатежныеОперации(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + + +КонецПроцедуры + +// Открытие формы списка фискальных операций +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ОткрытьФискальныеОперации(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + +#Если Не МобильноеПриложениеКлиент Тогда + // Замер производительности. + КлючеваяОперация = "ОбщийМодуль.МенеджерОборудованияКлиент.ОткрытьФискальныеОперации"; + ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, Неопределено, Ложь, Истина); +#КонецЕсли + + ПараметрыФормы = Новый Структура(); + ОткрытьФорму("РегистрСведений.ФискальныеОперации.ФормаСписка", + ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры + +// Открытие формы списка операций очереди чеков +// +// Параметры: +// ПараметрКоманды - Произвольный - источник, в котором реализована команда +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды +// +Процедура ОткрытьОчередьЧеков(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализацияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("РаспределеннаяФискализацияКлиент"); + МодульРаспределеннаяФискализацияКлиент.ОткрытьОчередьЧеков(ПараметрКоманды, ПараметрыВыполненияКоманды); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область Прочее + +// Преобразовать данные со сканера в массив. +// +// Параметры: +// Параметр - Структура: +// * Штрихкод - Строка - штрихкод. +// * Количество - Число - количество. +// +// Возвращаемое значение: +// Массив из Структура. +// +Функция ПреобразоватьДанныеСоСканераВМассив(Параметр) Экспорт + + МенеджерОборудованияКлиентПереопределяемый.ОбработатьСобытие(); // АПК:222 - Для обратной совместимости + + Данные = Новый Массив; + Данные.Добавить(ПреобразоватьДанныеСоСканераВСтруктуру(Параметр)); + + Возврат Данные; + +КонецФункции + +// Преобразовать данные со сканера в структуру. +// +// Параметры: +// Параметр - Структура - Параметр: +// * Штрихкод - Строка - штрихкод. +// * Количество - Число - количество. +// +// Возвращаемое значение: +// Структура - Преобразовать данные со сканера в структуру: +// * Штрихкод - Строка - штрихкод со сканера. +// * Количество - Число - количество товаров. +// +Функция ПреобразоватьДанныеСоСканераВСтруктуру(Параметр) Экспорт + + МенеджерОборудованияКлиентПереопределяемый.ОбработатьСобытие(); // АПК:222 - Для обратной совместимости + + Если Параметр[1] = Неопределено Тогда + Данные = Новый Структура("Штрихкод, Количество", Параметр[0], 1); // Достаем штрихкод из основных данных + Иначе + Данные = Новый Структура("Штрихкод, Количество", Параметр[1][1], 1); // Достаем штрихкод из дополнительных данных + КонецЕсли; + + Возврат Данные; + +КонецФункции + +#КонецОбласти + +#Область УпрощениеНастройкиПараметров + +// Начинает асинхронное заполнение ключевых параметров оборудования по идентификатору +// +// Параметры: +// ОповещениеЗавершения - ОписаниеОповещения - оповещение которое будет вызвано по результатам заполнения параметров +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - идентификатор оборудования +Процедура НачатьПолучениеКлючевыхПараметров(ОповещениеЗавершения, Идентификатор) Экспорт + + Контекст = Новый Структура(); + Контекст.Вставить("КлючевыеПараметры", Новый Структура()); + Контекст.Вставить("ОповещениеЗавершения", ОповещениеЗавершения); + Контекст.Вставить("Идентификатор", Идентификатор); + + Оповещение = Новый ОписаниеОповещения("НачатьПолучениеКлючевыхПараметровЗавершение", ЭтотОбъект, Контекст); + МенеджерОборудованияКлиент.НачатьПолучениеОписанияОборудования(Оповещение, Идентификатор); + +КонецПроцедуры + +// Завершает асинхронное заполнение ключевых параметров оборудования по идентификатору +// +// Параметры: +// Результат - Структура +// Контекст - Структура +Процедура НачатьПолучениеКлючевыхПараметровЗавершение(Результат, Контекст) Экспорт + + ОповещениеЗавершения = Контекст.ОповещениеЗавершения; + + Если Результат.Результат Тогда + + Идентификатор = Контекст.Идентификатор; + КлючевыеПараметры = Контекст.КлючевыеПараметры; + ОписаниеИнтерфейса = Результат.ОписаниеДрайвера.ПараметрыДрайвера; + + ПрочитатьАтрибутыКлючевыхПараметров(ОписаниеИнтерфейса, КлючевыеПараметры); + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Если Не ПодключаемоеОборудование.Свойство("СобственныеПараметрыОборудования") Тогда + ПодключаемоеОборудование.Вставить("СобственныеПараметрыОборудования", Новый Соответствие()); + КонецЕсли; + ПодключаемоеОборудование.СобственныеПараметрыОборудования.Вставить(Идентификатор, КлючевыеПараметры); + + // добавить общие параметры + Если Не КлючевыеПараметры.Свойство("LogEnabled") Тогда + ДобавитьПараметрЛогДрайвераВключен(КлючевыеПараметры, Результат.ОписаниеДрайвера.ЛогДрайвераВключен); + КонецЕсли; + Если Не КлючевыеПараметры.Свойство("LogPath") Тогда + ДобавитьПараметрЛогДрайвераПутьКФайлу(КлючевыеПараметры, Результат.ОписаниеДрайвера.ЛогДрайвераПутьКФайлу); + КонецЕсли; + + + ВыполнитьОбработкуОповещения(ОповещениеЗавершения, Истина); + Иначе + ВыполнитьОбработкуОповещения(ОповещениеЗавершения, Ложь); + КонецЕсли; + +КонецПроцедуры + +// Возвращает атрибуты параметра оборудования по стандартному имени параметра, имя проверяется по словарю возможных вариантов +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - идентификатор оборудования +// ИмяПараметра - Строка - стандартное имя параметра оборудования +// +// Возвращаемое значение: +// Структура - см. НовыйАтрибутыПараметра +// +Функция АтрибутыПараметра(Идентификатор, ИмяПараметра) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + Если Не ПодключаемоеОборудование.Свойство("СобственныеПараметрыОборудования") Тогда + Возврат Неопределено; + КонецЕсли; + + КлючевыеПараметры = ПодключаемоеОборудование.СобственныеПараметрыОборудования.Получить(Идентификатор); + Если КлючевыеПараметры = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + АтрибутыПараметра = Неопределено; + Если Не КлючевыеПараметры.Свойство(ИмяПараметра, АтрибутыПараметра) Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат АтрибутыПараметра; + +КонецФункции + +// Возвращает Истина если параметр с именем ИмяПараметра существует, имя проверяется по словарю возможных вариантов +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - идентификатор оборудования +// ИмяПараметра - Строка - стандартное имя параметра оборудования +// +// Возвращаемое значение: +// Булево - +Функция ПараметрСуществует(Идентификатор, ИмяПараметра) Экспорт + + АтрибутыПараметра = АтрибутыПараметра(Идентификатор, ИмяПараметра); + Возврат АтрибутыПараметра <> Неопределено; + +КонецФункции + +// Возвращает тип параметра оборудования по стандартному имени параметра, имя проверяется по словарю возможных вариантов +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - идентификатор оборудования +// ИмяПараметра - Строка - стандартное имя параметра оборудования +// +// Возвращаемое значение: +// Тип - Тип - Тип значения параметра (Число, Строка, Булево) +Функция ТипПараметра(Идентификатор, ИмяПараметра) Экспорт + + АтрибутыПараметра = АтрибутыПараметра(Идентификатор, ИмяПараметра); + Если АтрибутыПараметра = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат АтрибутыПараметра.Тип; + +КонецФункции + +// Возвращает значение параметра оборудования по стандартному имени параметра, имя проверяется по словарю возможных вариантов +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - идентификатор оборудования +// ИмяПараметра - Строка - стандартное имя параметра оборудования +// +// Возвращаемое значение: +// Число, Строка, Булево, Неопределено - установленное значение параметра +Функция ЗначениеПараметра(Идентификатор, ИмяПараметра) Экспорт + + АтрибутыПараметра = АтрибутыПараметра(Идентификатор, ИмяПараметра); + Если АтрибутыПараметра = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если АтрибутыПараметра.Стандартный Тогда + Возврат АтрибутыПараметра.ЗначениеСтандартного; + КонецЕсли; + + ПараметрыУстройства = МенеджерОборудованияВызовСервера.ПараметрыУстройства(Идентификатор); + ИмяРеквизита = АтрибутыПараметра.ИмяРеквизита; + ЗначениеПараметра = Неопределено; + Если Не ПараметрыУстройства.Свойство(ИмяРеквизита, ЗначениеПараметра) Тогда + Возврат Неопределено; + КонецЕсли; + + Если АтрибутыПараметра.Преобразование = "Инвертировать" И АтрибутыПараметра.Тип = Тип("Булево") Тогда + ЗначениеПараметра = Не ЗначениеПараметра; + КонецЕсли; + + Возврат ЗначениеПараметра; + +КонецФункции + +// Устанавливает значение параметра оборудования по стандартному имени параметра, имя проверяется по словарю возможных вариантов +// +// Параметры: +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - идентификатор оборудования +// ИмяПараметра - Строка - стандартное имя параметра оборудования +// НовоеЗначение - Число, Строка, Булево, Неопределено - новое значение параметра которое требуется установить +// +// Возвращаемое значение: +// Булево - результат выполнения +Функция УстановитьЗначениеПараметра(Идентификатор, ИмяПараметра, НовоеЗначение) Экспорт + + АтрибутыПараметра = АтрибутыПараметра(Идентификатор, ИмяПараметра); + Если АтрибутыПараметра = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Если АтрибутыПараметра.ТолькоЧтение Тогда + Возврат Ложь; + КонецЕсли; + + ПараметрыУстройства = МенеджерОборудованияВызовСервера.ПараметрыУстройства(Идентификатор); + ИмяРеквизита = АтрибутыПараметра.ИмяРеквизита; + Если АтрибутыПараметра.Преобразование = "Инвертировать" И АтрибутыПараметра.Тип = Тип("Булево") Тогда + НовоеЗначение = Не НовоеЗначение; + КонецЕсли; + ПараметрыУстройства.Вставить(ИмяРеквизита, НовоеЗначение); + + + Возврат МенеджерОборудованияВызовСервера.СохранитьПараметрыУстройства(Идентификатор, ПараметрыУстройства); + +КонецФункции + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +#Область Системные + +// Устарела: следует использовать ИнтеграцияПодсистемБПОКлиент.ПередНачаломРаботыСистемы. +// Вызываемая перед началом работы системы. +// +Процедура ПередНачаломРаботыСистемы() Экспорт + + ИнтеграцияПодсистемБПОКлиент.ПередНачаломРаботыСистемы(); + +КонецПроцедуры + +// Устарела: следует использовать ИнтеграцияПодсистемБПОКлиент.ПриНачалеРаботыСистемы. +// Функция, вызываемая при начале работы системы. +// +Процедура ПриНачалеРаботыСистемы() Экспорт + + ИнтеграцияПодсистемБПОКлиент.ПриНачалеРаботыСистемы(); + +КонецПроцедуры + +// Устарела: следует использовать ИнтеграцияПодсистемБПОКлиент.ПередЗавершениемРаботыСистемы. +// +Процедура ПередЗавершениемРаботыСистемы() Экспорт + + ИнтеграцияПодсистемБПОКлиент.ПередЗавершениемРаботыСистемы(); + +КонецПроцедуры + +// Устарела: следует использовать ОбщегоНазначенияБПОКлиент.ДатаСеанса. +// Возвращает текущую дату, приведенную к часовому поясу сеанса. +// Предназначена для использования вместо функции ТекущаяДата(). +// +// Возвращаемое значение: +// Дата. +// +Функция ДатаСеанса() Экспорт + + Возврат ОбщегоНазначенияБПОКлиент.ДатаСеанса(); + +КонецФункции + +#Если Не ВебКлиент Тогда + +// Устарела: больше не используется. +// Установить или переустановить драйверы помеченные флагами. +// +Процедура ПереустановитьПомеченныеПоставляемыеДрайверы() Экспорт + + ПараметрыРаботыКлиента = ИнтеграцияПодсистемБПОКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + + ИменаМакетовДляПереустановки = Новый Массив; + Для Каждого ИмяМакетаДрайвера Из ПараметрыРаботыКлиента.ИменаМакетовДляПереустановки Цикл + ИменаМакетовДляПереустановки.Добавить(ИмяМакетаДрайвера); + КонецЦикла; + + ВнешниеКомпонентыБПОКлиент.ПереустановитьКомпоненты(ИменаМакетовДляПереустановки); + +КонецПроцедуры + +// Устарела: следует использовать ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML. +// Читает корневой элемент 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 Тогда + Оповещение = Новый ОписаниеОповещения("НачатьПодключениеОборудованияРекурсивно", ЭтотОбъект, Контекст); + Устройство = ОборудованиеДляПодключения[ОборудованиеДляПодключения.ВГраница()]; + НовоеПодключение = ПараметрыПодключенияУстройства(Устройство); + Контекст.ПараметрыПодключения = НовоеПодключение; + НовоеПодключение.ОбработчикДрайвера.НачатьПодключениеУстройства(Оповещение, НовоеПодключение); + КонецЕсли; + +КонецПроцедуры + +// Возвращает объект драйвера из локального кеша клиентского приложения +// +// Параметры: +// ИдентификаторОбъекта - Строка - +// +// Возвращаемое значение: +// ОбъектВнешнейКомпоненты +// +Функция ОбъектДрайвераИзКэша(ИдентификаторОбъекта) Экспорт + + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + Для Каждого ДрайверОборудования Из ПодключаемоеОборудование.ДрайверыОборудования Цикл + Если ДрайверОборудования.Ключ = ИдентификаторОбъекта Тогда + ОбъектДрайвера = ДрайверОборудования.Значение; + Возврат ОбъектДрайвера; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +Функция ДопустимаУстановкаКомпоненты(ИмяМакета) Экспорт + +#Если ВебКлиент Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда + Реквизиты = МенеджерОборудованияВызовСервера.СовместимостьВнешнейКомпонентыИзФайла(ИмяМакета); + Если ЗначениеЗаполнено(Реквизиты) Тогда + Результат = ТекущийКлиентПоддерживаетсяКомпонентой(Реквизиты); + Возврат Результат = Истина; // Результат может содержать Неопределено + Иначе + Возврат Ложь; + КонецЕсли; + Иначе + Возврат Истина; + КонецЕсли; +#Иначе + Возврат Истина; +#КонецЕсли + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ПодключениеОборудования + +// Начать подключения устройств. +// +// Параметры: +// ИдентификаторКлиента - УникальныйИдентификатор - уникальный идентификатор клиента. +// ТипыПО - Структура, Массив, Строка - тип оборудования для выбора устройства. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - подключаемое устройство. +// СетевоеОборудование - Булево - использовать сетевое оборудование при подключении. +// +// Возвращаемое значение: +// Массив - Результаты подключения устройств. +// +Функция УстройстваДляПодключения(ИдентификаторКлиента, ТипыПО = Неопределено, ИдентификаторУстройства = Неопределено, СетевоеОборудование = Истина) + + ПодключенноеОборудование = Новый Массив(); // Результаты подключения устройств + ОборудованиеДляПодключения = Новый Массив(); + + ТекущийЯзык = ТекущийЯзык(); + КодЯзыкаПользователя = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка); + + ОборудованияОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор(); + ОборудованияОтбор.ТипыПО = ТипыПО; + ОборудованияОтбор.Идентификатор = ИдентификаторУстройства; + ОборудованияОтбор.СетевоеОборудование = СетевоеОборудование; + ОборудованияОтбор.КодЯзыка = КодЯзыкаПользователя; + СписокОборудования = МенеджерОборудованияВызовСервера.СписокОборудования(ОборудованияОтбор); + + Если СписокОборудования.Количество() > 0 Тогда + Для Каждого Устройство Из СписокОборудования Цикл + // Проверим, не подключено ли устройство ранее. + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(Устройство.Ссылка); + Если ПодключенноеУстройство = Неопределено Тогда // Если устройство не было подключено ранее. + + Если Устройство.СетевоеОборудование И НЕ Устройство.ДоступноТекущемуПользователю Тогда + ОписаниеОшибки = НСтр("ru='Нет прав на использование для текущего пользователя.'"); + Результат = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Результат.ИдентификаторОбъекта = Устройство.ИдентификаторОбъекта; + ПодключенноеОборудование.Добавить(Результат); + Продолжить; + КонецЕсли; + + ОборудованиеДляПодключения.Добавить(Устройство); + + Иначе // Устройство было подключено ранее. + // Увеличим количество пользователей данного соединения. + ПодключенноеУстройство.Клиенты.Добавить(ИдентификаторКлиента); + ПодключенноеУстройство.КоличествоПодключенных = ПодключенноеУстройство.КоличествоПодключенных + 1; + Результат = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина, Неопределено, Устройство.Ссылка); + Результат.ПодключенноеУстройство = ПодключенноеУстройство; + Результат.ИдентификаторОбъекта = Устройство.ИдентификаторОбъекта; + ПодключенноеОборудование.Добавить(Результат); + КонецЕсли; + КонецЦикла; + + ИначеЕсли ИдентификаторУстройства <> Неопределено Тогда + ОписаниеОшибки = + НСтр("ru='Устройство отсутствует на текущем рабочем месте и не может использоваться для подключения. Укажите другое устройство.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ПодключенноеОборудование.Добавить(РезультатВыполнения); + ИначеЕсли ТипыПО = Неопределено И ИдентификаторУстройства = Неопределено Тогда + ОписаниеОшибки = НСтр("ru='Нет доступного оборудования для подключения.'"); + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Ложь, ОписаниеОшибки); + ПодключенноеОборудование.Добавить(РезультатВыполнения); + КонецЕсли; + + Результат = Новый Структура(); + Результат.Вставить("ПодключенноеОборудование", ПодключенноеОборудование); + Результат.Вставить("ОборудованиеДляПодключения", ОборудованиеДляПодключения); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ОтключениеОборудования + +// Функция отключает устройства +// +// Параметры: +// ИдентификаторКлиента - УникальныйИдентификатор +// ТипыПО - Структура, Массив, Строка - тип оборудования для отключения устройств. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - отключаемое устройство. +// +// Возвращаемое значение: +// Массив - Результаты отключения устройств. +// +Функция УстройстваДляОтключения(ТипыПО = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт + + ОтключенноеОборудование = Новый Массив(); // Результаты отключения устройств + ПодключаемоеОборудование = ПодключаемоеОборудование(); + + Если ТипыПО <> Неопределено Тогда + ПодключенныеУстройства = ПолучитьПодключенныеУстройства(ТипыПО); + ИначеЕсли ИдентификаторУстройства <> Неопределено Тогда + ПодключенноеУстройство = ПолучитьПодключенноеУстройство(ИдентификаторУстройства); + Если ПодключенноеУстройство <> Неопределено Тогда + ПодключенныеУстройства = Новый Массив(); + ПодключенныеУстройства.Добавить(ПодключенноеУстройство); + Иначе + Возврат ОтключенноеОборудование; + КонецЕсли; + Иначе + Возврат ОтключенноеОборудование; + КонецЕсли; + + Возврат ПодключенныеУстройства; + +КонецФункции + +#КонецОбласти + +#Область ККТ + +// Функция возвращает идентификатор открытой сессии для фискального устройства. +// +// Параметры: +// ИдентификаторУстройства - УникальныйИдентификатор - Идентификатор устройства +// +// Возвращаемое значение: +// Неопределено - Сессия проверки кодов маркировки +Функция СессияПроверкиКодовМаркировки(ИдентификаторУстройства) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ФискальныеУстройства = ПодключаемоеОборудование.ФискальныеУстройства; + + ИдентификаторСессии = Неопределено; + Для Каждого ФискальноеУстройство Из ФискальныеУстройства Цикл + Если ФискальноеУстройство.ИдентификаторУстройства = ИдентификаторУстройства Тогда + ИдентификаторСессии = ФискальноеУстройство.ИдентификаторСессии; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ИдентификаторСессии; + +КонецФункции + +// Процедура сохраняет идентификатор открытой сессии для фискального устройства. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Устройство. +// ИдентификаторСессии - Строка +// ИдентификаторЗапроса - Строка +// +Процедура УстановитьСессиюПроверкиКодовМаркировки(ИдентификаторУстройства, ИдентификаторСессии = Неопределено, ИдентификаторЗапроса = Неопределено) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ФискальныеУстройства = ПодключаемоеОборудование.ФискальныеУстройства; + + Для Каждого ФискальноеУстройство Из ФискальныеУстройства Цикл + Если ФискальноеУстройство.ИдентификаторУстройства = ИдентификаторУстройства Тогда + ФискальноеУстройство.ИдентификаторСессии = ИдентификаторСессии; + Возврат; + КонецЕсли; + КонецЦикла; + + ФискальноеУстройство = Новый Структура(); + ФискальноеУстройство.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + ФискальноеУстройство.Вставить("ИдентификаторСессии" , ИдентификаторСессии); + ФискальноеУстройство.Вставить("ИдентификаторЗапроса", ИдентификаторЗапроса); + ФискальныеУстройства.Добавить(ФискальноеУстройство); + +КонецПроцедуры + +// Функция возвращает проверяет ли устройство код маркировки. +// +// Параметры: +// ИдентификаторУстройства - УникальныйИдентификатор -Идентификатор устройства +// +// Возвращаемое значение: +// Структура - Проверка кода маркировки: +// * ИдентификаторСессии - УникальныйИдентификатор. +// * ИдентификаторЗапроса - УникальныйИдентификатор. +// +Функция ПроверкаКодаМаркировки(ИдентификаторУстройства) Экспорт + + Результат = Новый Структура(); + Результат.Вставить("ИдентификаторСессии"); + Результат.Вставить("ИдентификаторЗапроса"); + Результат.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ФискальныеУстройства = ПодключаемоеОборудование.ФискальныеУстройства; + + Для Каждого ФискальноеУстройство Из ФискальныеУстройства Цикл + Если ФискальноеУстройство.ИдентификаторУстройства = ИдентификаторУстройства Тогда + Результат.ИдентификаторСессии = ФискальноеУстройство.ИдентификаторСессии; + Результат.ИдентификаторЗапроса = ФискальноеУстройство.ИдентификаторЗапроса; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Процедура сохраняет статус проверки кода маркировки. +// +// Параметры: +// ИдентификаторУстройства - УникальныйИдентификатор - Идентификатор устройства. +// ИдентификаторЗапроса - Неопределено - Идентификатор запроса +// +Процедура УстановитьПроверкуКодаМаркировки(ИдентификаторУстройства, ИдентификаторЗапроса = Неопределено) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ФискальныеУстройства = ПодключаемоеОборудование.ФискальныеУстройства; + + Для Каждого ФискальноеУстройство Из ФискальныеУстройства Цикл + Если ФискальноеУстройство.ИдентификаторУстройства = ИдентификаторУстройства Тогда + ФискальноеУстройство.ИдентификаторЗапроса = ИдентификаторЗапроса; + Возврат; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Результат проверки кода маркировки. +// +// Параметры: +// ИдентификаторУстройства - УникальныйИдентификатор - Идентификатор устройства +// ИдентификаторСессии - УникальныйИдентификатор - Идентификатор сессии +// ПараметрыЗапросаКМ -Структура - Параметры запроса КМ. +// +// Возвращаемое значение: +// Неопределено - Результат проверки кода маркировки +Функция РезультатПроверкиКодаМаркировки(ИдентификаторУстройства, ИдентификаторСессии, ПараметрыЗапросаКМ) Экспорт + + РезультатПроверки = Неопределено; + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ПроверкиКодаМаркировки = ПодключаемоеОборудование.ПроверкиКодаМаркировки; + + Для Каждого ПроверкаКодаМаркировки Из ПроверкиКодаМаркировки Цикл + Если ПроверкаКодаМаркировки.ИдентификаторУстройства = ИдентификаторУстройства + И ПроверкаКодаМаркировки.ИдентификаторСессии = ИдентификаторСессии + И ПроверкаКодаМаркировки.ПараметрыЗапросаКМ.КонтрольнаяМарка = ПараметрыЗапросаКМ.КонтрольнаяМарка + И ПроверкаКодаМаркировки.ПараметрыЗапросаКМ.Количество = ПараметрыЗапросаКМ.Количество + И ПроверкаКодаМаркировки.ПараметрыЗапросаКМ.ПланируемыйСтатусТовара = ПараметрыЗапросаКМ.ПланируемыйСтатусТовара Тогда + РезультатПроверки = ПроверкаКодаМаркировки.РезультатПроверки; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат РезультатПроверки; + +КонецФункции + +// Процедура устанавливает результат проверки кода маркировки. +// +// Параметры: +// ИдентификаторУстройства - УникальныйИдентификатор - Идентификатор устройства. +// ИдентификаторСессии - УникальныйИдентификатор +// ПараметрыЗапросаКМ - Структура +// РезультатПроверки - Структура +// ИдентификаторЗапроса - УникальныйИдентификатор +// +Процедура УстановитьРезультатПроверкиКодаМаркировки(ИдентификаторУстройства, ИдентификаторСессии, ПараметрыЗапросаКМ, РезультатПроверки, ИдентификаторЗапроса = Неопределено) Экспорт + + ПодключаемоеОборудование = ПодключаемоеОборудование(); + ФискальныеУстройства = ПодключаемоеОборудование.ФискальныеУстройства; + Для Каждого ФискальноеУстройство Из ФискальныеУстройства Цикл + Если ФискальноеУстройство.ИдентификаторУстройства = ИдентификаторУстройства Тогда + ФискальноеУстройство.ИдентификаторЗапроса = ИдентификаторЗапроса; + Прервать; + КонецЕсли; + КонецЦикла; + + ПроверкиКодаМаркировки = ПодключаемоеОборудование.ПроверкиКодаМаркировки; + Для Каждого ПроверкаКодаМаркировки Из ПроверкиКодаМаркировки Цикл + Если ПроверкаКодаМаркировки.ИдентификаторУстройства = ИдентификаторУстройства + И ПроверкаКодаМаркировки.ИдентификаторСессии = ИдентификаторСессии + И ПроверкаКодаМаркировки.ПараметрыЗапросаКМ.КонтрольнаяМарка = ПараметрыЗапросаКМ.КонтрольнаяМарка + И ПроверкаКодаМаркировки.ПараметрыЗапросаКМ.Количество = ПараметрыЗапросаКМ.Количество + И ПроверкаКодаМаркировки.ПараметрыЗапросаКМ.ПланируемыйСтатусТовара = ПараметрыЗапросаКМ.ПланируемыйСтатусТовара Тогда + ПроверкаКодаМаркировки.РезультатПроверки = РезультатПроверки; + Возврат; + КонецЕсли; + КонецЦикла; + + ПроверкаКодаМаркировки = Новый Структура(); + ПроверкаКодаМаркировки.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + ПроверкаКодаМаркировки.Вставить("ИдентификаторСессии", ИдентификаторСессии); + ПроверкаКодаМаркировки.Вставить("ПараметрыЗапросаКМ" , ПараметрыЗапросаКМ); + ПроверкаКодаМаркировки.Вставить("РезультатПроверки" , РезультатПроверки); + + ПроверкиКодаМаркировки.Добавить(ПроверкаКодаМаркировки); + +КонецПроцедуры + +#КонецОбласти + +// Преобразовать список строкой в массив. +// +// Параметры: +// Строка - список полей через запятую +// +// Возвращаемое значение: +// Массив из Строка. +// +Функция ПреобразоватьСписокСтрокойВМассив(Источник) + + ПромежуточнаяСтруктура = Новый Структура(Источник); + Приемник = Новый Массив; + + Для Каждого КлючИЗначение Из ПромежуточнаяСтруктура Цикл + Приемник.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + + Возврат Приемник; + +КонецФункции + +#Область ВыполнениеКоманды + +// Завершение выполнение команды +// +// Параметры: +// РезультатОперации - Структура +// ПараметрыВыполнениеКоманды - Структура +// +Процедура ЗавершениеВыполнениеКоманды(РезультатОперации, ПараметрыВыполнениеКоманды); + + Если ПараметрыВыполнениеКоманды.СообщенияВСлужбуТехническойПоддержки + И ОбщегоНазначенияБПОКлиент.ИспользуетсяСообщенияВСлужбуТехническойПоддержки() Тогда + + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиБПОКлиент"); + Если Не РезультатОперации.Результат Тогда + + ПараметрыВыполнениеКоманды.Вставить("РезультатВыполненияОперации", РезультатОперации); + ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершениеВыполнениеКоманды_ПроверкаРезультата", ЭтотОбъект, ПараметрыВыполнениеКоманды); + + ДополнительныеДанные = Новый Структура(); + ДополнительныеДанные.Вставить("Операция", ПараметрыВыполнениеКоманды.Команда); + ДополнительныеДанные.Вставить("ОписаниеОшибки", РезультатОперации.ОписаниеОшибки); + ДополнительныеДанные.Вставить("ПараметрыОперации", ПараметрыВыполнениеКоманды.ПараметрыОперации); + + ТекстВопроса = СтрШаблон(НСтр("ru = '%1 + | + |Подготовить сообщение об ошибке разработчику?'"), РезультатОперации.ОписаниеОшибки); + + Параметры = МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ПараметрыОтправкиСообщенияОбОшибке(); + Параметры.Вставить("ИдентификаторОборудования", ПараметрыВыполнениеКоманды.ИдентификаторУстройства); + Параметры.Вставить("ТекстОшибки", РезультатОперации.ОписаниеОшибки); + Параметры.Вставить("ДополнительныеДанные", ДополнительныеДанные); + Параметры.Вставить("ТекстВопроса", ТекстВопроса); + + МодульСообщенияВСлужбуТехническойПоддержкиБПОКлиент.ПоказатьВопросОправкиСообщенияОбОшибке(ОписаниеОповещения, Параметры); + + Возврат; // Вызов оповещения будет выполнен в процедуре ОперацияНаУстройствеПроверкаРезультатаЗавершение + + КонецЕсли; + КонецЕсли; + + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, РезультатОперации); + +КонецПроцедуры + +// Завершает проверку результата операции +// +// Параметры: +// Результат - см. СообщенияВСлужбуТехническойПоддержкиБПОКлиент.РезультатОперации +// ПараметрыВыполнениеКоманды - см. ПараметрыПроверкиРезультатаОперации +// +Процедура ЗавершениеВыполнениеКоманды_ПроверкаРезультата(Результат, ПараметрыВыполнениеКоманды) Экспорт + + Если ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ПараметрыВыполнениеКоманды.ОповещениеПриЗавершении, ПараметрыВыполнениеКоманды.РезультатВыполненияОперации); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область УпрощениеНастройкиПараметров + +// Возвращает словарь реквизитов и возможных вариантов имен параметров производителя драйверов +// +// Возвращаемое значение: +// см. МенеджерОборудованияКлиентПовтИсп.СловарьКлючевыхСвойств +Функция СловарьКлючевыхСвойств() + + Возврат МенеджерОборудованияКлиентПовтИсп.СловарьКлючевыхСвойств(); + +КонецФункции + +// Возвращает имя параметра по имени параметра указанного в файле 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); + ЗаполнитьЗначенияСвойств(ЗначенияСвойств, Форма); + + Результат = ЗначенияСвойств.ПодключаемоеОборудованиеБПО; + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Проверка существуют ли реквизиты на форме +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// ИменаРеквизитов - Строка - Имена реквизитов формы через запятую +// +Функция СуществуютРеквизитыНаФорме(Форма, ИменаРеквизитов) + + МассивРеквизитов = СтрРазделить(ИменаРеквизитов,",", Ложь); + + ЗначенияСвойств = Новый Структура(ИменаРеквизитов); + Для Каждого ИмяРеквизита Из МассивРеквизитов Цикл + ЗначенияСвойств.Вставить(ИмяРеквизита, 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..1702656 --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиентПереопределяемый/Ext/Module.bsl @@ -0,0 +1,267 @@ + +#Область ПрограммныйИнтерфейс + +// Возвращает текущую дату, приведенную к часовому поясу сеанса. +// Предназначена для использования вместо функции ТекущаяДата(). +// +// Возвращаемое значение: +// Результат - текущая дата. +// +Функция ДатаСеанса() Экспорт + +КонецФункции + +// Обработчик события получения идентификатора клиента для рабочегоМеста. +// +// Параметры: +// ИдентификаторКлиента - Строка, Неопределено - Идентификатор клиента +// СтандартнаяОбработка - Булево +// +Процедура ИдентификаторКлиентаДляРабочегоМеста(ИдентификаторКлиента, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#Область ОборудованиеККТ + +// Переопределяет доступное ККТ для фискализации чека +// Параметры: +// РеквизитыЧека - Структура - реквизиты фискального чека +// СписокУстройств - Массив - список доступных ККТ для фискализации +// ИдентификаторУстройстваККТ - СправочникСсылка.ПодключаемоеОборудование - выбранное ККТ для фискализации +// СтандартнаяОбработка - Булево - выполнение стандартной обработки +// +Процедура ДоступноеККТДляФискализации(РеквизитыЧека, СписокУстройств, ИдентификаторУстройстваККТ, СтандартнаяОбработка = Истина) Экспорт + +КонецПроцедуры + +// Переопределяет печать слип чека алкогольной продукции. +// Параметры: +// ПечатьСлипЧека - Булево - Печатается слип чек алкогольной продукции +// СтандартнаяОбработка - Булево - выполнение стандартной обработки +// +Процедура ПечатьСлипЧекаАлкогольнойПродукции(ПечатьСлипЧека, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Переопределяет печать слип чека эквайринговой операции. +// Параметры: +// ПечатьСлипЧека - Булево - Определяет будет ли распечатан слип-чек, по умолчанию Истина. +// ПолныйСлипЧек - Булево - Определяет какой слип-чек будет распечатан полный или короткий, по умолчанию Истина. +// СтандартнаяОбработка - Булево - выполнение стандартной обработки. +// +Процедура ПечатьСлипЧекаЭквайринговойОперации(ПечатьСлипЧека, ПолныйСлипЧек, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Событие при открытии смены на ККТ +// Параметры: +// ИдентификаторУстройстваККТ - СправочникСсылка.ПодключаемоеОборудование - выбранное ККТ +// ПараметрыРегистрации - Структура - Параметры регистрации ФН +// +Процедура ПриОткрытииСменыНаККТ(ИдентификаторУстройстваККТ, ПараметрыРегистрации) Экспорт + +КонецПроцедуры + +#КонецОбласти + +// Переопределяет вывод QR-кода чека на дисплей покупателя после фискализации. +// Параметры: +// ВыводQRКодаЧека - Булево - Вывод QR-кода чека на дисплей покупателя +// СтандартнаяОбработка - Булево - выполнение стандартной обработки +// +Процедура ВыводQRКодаЧекаНаДисплейПокупателяПослеФискализации(ВыводQRКодаЧека, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Переопределяет формат события от устройств ввода. +// Параметры: +// НовыйФормат - Булево - Событие от устройств ввода работают в новом формате +// СтандартнаяОбработка - Булево - выполнение стандартной обработки +// +Процедура СобытиеУстройствВводаНовыйФормат(НовыйФормат, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#Область РаботаСФормойЭкземпляраОборудования + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПриОткрытии". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - форма владелец. +// Отказ - Булево - признак отказа. +// +Процедура ЭкземплярОборудованияПриОткрытии(Объект, ЭтаФорма, Отказ) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПередЗакрытием". +// +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - форма владелец. +// Отказ - Булево - признак отказа. +// СтандартнаяОбработка - Булево - признак стандартной обработки. +// +Процедура ЭкземплярОборудованияПередЗакрытием(Объект, ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПередЗаписью". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - форма владелец. +// Отказ - Булево - признак отказа. +// ПараметрыЗаписи - Структура - параметры записи оборудования. +// +Процедура ЭкземплярОборудованияПередЗаписью(Объект, ЭтаФорма, Отказ, ПараметрыЗаписи) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ПослеЗаписи". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - форма владелец. +// ПараметрыЗаписи - Структура - параметры записи оборудования. +// +Процедура ЭкземплярОборудованияПослеЗаписи(Объект, ЭтаФорма, ПараметрыЗаписи) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ОбработкаНавигационнойСсылки". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - форма владелец. +// НавигационнаяСсылкаФорматированнойСтроки - Строка - навигационная ссылка. +// СтандартнаяОбработка - Булево - признак стандартной обработки. +// +Процедура ЭкземплярОборудованияОбработкаНавигационнойСсылки(Объект, ЭтаФорма, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Дополнительные переопределяемые действия с управляемой формой в Экземпляре оборудования +// при событии "ТипОборудованияОбработкаВыбора". +// +// Параметры: +// Объект - СправочникОбъект.ПодключаемоеОборудование - объект подключаемого оборудования. +// ЭтаФорма - ФормаКлиентскогоПриложения - форма владелец. +// ЭтотОбъект - СправочникОбъект.ПодключаемоеОборудование - текущий объект подключаемого оборудования. +// Элемент - Элемент - изменяемый элемент. +// ВыбранноеЗначение - ПеречислениеСсылка.ТипыПодключаемогоОборудования - выбранное значение. +// +Процедура ЭкземплярОборудованияТипОборудованияВыбор(Объект, ЭтаФорма, ЭтотОбъект, Элемент, ВыбранноеЗначение) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область РаспределеннаяФискализации + +// Переопределяемые действия после открытия чека в очереди чеков. +// +// Параметры: +// ПараметрыВыполнения - Структура - Параметры выполнения команды +// ДополнительныеПараметры - Произвольный +// +Процедура ФискализацияЧековВОчередиПослеОткрытияЧека(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + +КонецПроцедуры + +// Переопределяемые действия после ошибки печати чека в очереди чеков. +// +// Параметры: +// ПараметрыВыполнения - Структура - Параметры выполнения команды +// ДополнительныеПараметры - Произвольный +// +Процедура ФискализацияЧековВОчередиПослеОшибкиПечатиЧека(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СообщениеВТехническуюПоддержку + +// В процедуре можно разрешить, либо запретить отправку сообщений БПО в тех. поддержку +// +// Параметры: +// Отправлять - Булево - при стандартной обработке Истина +// СтандартнаяОбработка - Булево - признак стандартной обработки. +// +Процедура ОтправлятьСообщенияВТехПоддержку(Отправлять, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Подготовка текста сообщения в службу технической поддержки +// +// Параметры: +// ТекстСообщения - Строка - текст сообщения который будет вставлен в поле "Шаблон сообщения" на сайте. +// ТекстОшибки - Строка - текст ошибки, переданный в процедуру отправки сообщения. +// +Процедура ПодготовитьТекстСообщенияВТехПоддержку(ТекстСообщения, ТекстОшибки) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область ПакетнаяОбработка + +// Процедура в которой можно сформировать текстовое содержание слип-чека +// +// Параметры: +// Тип - Строка - Тип слип-чека: +// "Обычный" - обычный слип-чек, печатаемый в теле фискального чека; +// "Электронный" - слип-чек, печатаемый в случае электронного фискального чека; +// "Отказ" - слип-чек, печатаемый в случае отказа выполнения эквайринговой операции, +// или же выполнения аварийной отмены эквайринговой операции. +// ДанныеДляШаблона - Структура - данные для формирования слип-чека: +// * ПараметрыФискализацииЧека - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - См. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * РезультатВыполненияЭквайринговойОперации - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * ДополнительныеПараметры - Структура - Дополнительные параметры переданные ранее в процедуру +// "НачатьФискализациюЧекаСОплатойКартой". +// Текст - Строка - Текст слип чека который будет выведен в теле фискального чека, может быть переопределен +// СтандартнаяОбработка - Булево - Если передано Ложь, тогда слип-чек нужно сформировать самостоятельно +// заполнив массив "ПараметрыФискализацииЧека.ПозицииЧека". +Процедура СформироватьШаблонСлипЧека(Тип, ДанныеДляШаблона, Текст, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +#Область РаботаСФормойЭкземпляраФискальныеОперации + +// Устарела: больше не используется. +// Дополнительные переопределяемые действия с управляемой формой в Фискальные операции +// при событии "ОбработкаНавигационнойСсылки". +// +// Параметры: +// Запись - РегистрСведенийМенеджерЗаписи.ФискальныеОперации +// ЭтаФорма - Форма +// НавигационнаяСсылкаФорматированнойСтроки - Строка +// СтандартнаяОбработка - Булево - признак стандартной обработки. +// +Процедура ФормаЗаписиФискальныеОперацииОбработкаНавигационнойСсылки(Запись, ЭтаФорма, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + +// Устарела: для обратной совместимости. +Процедура ОбработатьСобытие() Экспорт + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ 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..e53971d --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиентПовтИсп/Ext/Module.bsl @@ -0,0 +1,140 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает имя компьютера клиента. +// При первом обращении получает имя компьютера из переменной сеанса. +// +// Возвращаемое значение: +// СправочникСсылка.РабочиеМеста +// +Функция РабочееМестоКлиента() Экспорт + + Возврат МенеджерОборудованияВызовСервера.РабочееМестоКлиента(); + +КонецФункции + +// Возвращает имя компьютера клиента. +// При первом обращении получает имя компьютера из переменной сеанса. +// +// Параметры: +// ИдентификаторКлиента - Строка - идентификатор клиента для рабочего места +// ИмяКомпьютера - Строка - Имя компьютера +// +// Возвращаемое значение: +// Массив. +Функция НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, WEBКлиент) Экспорт + + Возврат МенеджерОборудованияВызовСервера.НайтиРабочиеМестаПоИдентификатору(ИдентификаторКлиента, ИмяКомпьютера, WEBКлиент); + +КонецФункции + +// Функция возвращает структуру с данными драйвера. +// +// Параметры: +// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера. +// +// Возвращаемое значение: +// Структура. +Функция ДанныеДрайвераОборудования(ИдентификаторДрайвера) Экспорт + + Возврат МенеджерОборудованияВызовСервера.ДанныеДрайвераОборудования(ИдентификаторДрайвера); + +КонецФункции + +// Изолированное подключения внешних компонент на клиенте +// Возвращаемое значение: +// Булево - Изолированно +// +Функция ИзолированноеПодключенияВнешнихКомпонентНаКлиенте() Экспорт + + Возврат МенеджерОборудованияВызовСервера.ИзолированноеПодключенияВнешнихКомпонентНаКлиенте(); + +КонецФункции + +// Получить соответствие типов оборудования +// +// Возвращаемое значение: +// Соответствие - +// +Функция ПолучитьСоответствиеТиповОборудования() Экспорт + + Возврат МенеджерОборудованияВызовСервера.ПолучитьСоответствиеТиповОборудования(); + +КонецФункции + +// Возвращает словарь реквизитов и возможных вариантов имен параметров производителя драйверов +// +// Возвращаемое значение: +// Структура - возможные варианты определенных значений параметров оборудования: +// * 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..f6af0ac --- /dev/null +++ b/CommonModules/МенеджерОборудованияКлиентСервер/Ext/Module.bsl @@ -0,0 +1,1456 @@ + +#Область ПрограммныйИнтерфейс + +#Область Системные + +// Получает ревизию требований для драйверов подключаемого оборудования. +// +// Возвращаемое значение: +// Число - +// +Функция РевизияИнтерфейсаДрайверов() Экспорт + + РевизияИнтерфейса = 4000; + Возврат РевизияИнтерфейса; + +КонецФункции + +// Функция заполняет наименование рабочего места клиента по имени пользователя. +// +// Параметры: +// Объект - СправочникОбъект.РабочиеМеста - рабочее место текущего сеанса. +// ИмяПользователя - Строка - ИмяПользователя +// +Процедура ЗаполнитьНаименованиеРабочегоМеста(Объект, ИмяПользователя) Экспорт + + ИмяПустойПользователь = НСтр("ru='<Пользователь>'"); + + Если ПустаяСтрока(Объект.Наименование) Тогда + + Наименование = СтрШаблон(НСтр("ru = '%1(%2)'"), + ?(ПустаяСтрока(ИмяПользователя), ИмяПустойПользователь, Строка(ИмяПользователя)), + ?(ПустаяСтрока(Объект.ИмяКомпьютера), Объект.Код, Объект.ИмяКомпьютера)); + НаименованиеНовое = Наименование; + ВыполненаСтандартнаяОбработка = Истина; + МенеджерОборудованияКлиентСерверПереопределяемый.ОбработкаЗаполненияНаименованияРабочегоМеста(НаименованиеНовое, ИмяПользователя, ВыполненаСтандартнаяОбработка); + Объект.Наименование = ?(Не ВыполненаСтандартнаяОбработка, НаименованиеНовое, Наименование); + + ИначеЕсли Не ПустаяСтрока(Строка(ИмяПользователя)) И Найти(Объект.Наименование, ИмяПустойПользователь) > 0 Тогда + Объект.Наименование = СтрЗаменить(Объект.Наименование, ИмяПустойПользователь, Строка(ИмяПользователя)); + КонецЕсли; + +КонецПроцедуры + +// Вызывается при получении имени кассира и его ИНН. +// +// Возвращаемое значение: +// Структура. +// *ИмяКассира - Строка, Неопределено - Текст, используемый для заполнения документа +// *ИННКассира - Строка, Неопределено - Текст, используемый для заполнения документа +// +Функция ТекущийКассирДляФискальныхОпераций() Экспорт + + Кассир = ""; + ВыполненаСтандартнаяОбработка = Истина; + МенеджерОборудованияКлиентСерверПереопределяемый.ОбработкаЗаполненияИмяКассира(Кассир, ВыполненаСтандартнаяОбработка); + Кассир = ?(Не ВыполненаСтандартнаяОбработка, Кассир, НСтр("ru='Администратор'")); + + КассирИНН = ""; + ВыполненаСтандартнаяОбработка = Истина; + МенеджерОборудованияКлиентСерверПереопределяемый.ОбработкаЗаполненияИННКассира(КассирИНН, ВыполненаСтандартнаяОбработка); + КассирИНН = ?(Не ВыполненаСтандартнаяОбработка, КассирИНН, ""); + + РезультатОперации = Новый Структура(); + РезультатОперации.Вставить("Кассир" , Кассир); + РезультатОперации.Вставить("КассирИНН", КассирИНН); + Возврат РезультатОперации; + +КонецФункции + +// Возвращает структуру отбора для получения списка оборудования +// +// Возвращаемое значение: +// Структура: +// * Идентификатор - СправочникСсылка.ПодключаемоеОборудование +// * ТипыПО - Строка, Структура, Массив +// * РабочееМесто - СправочникСсылка.РабочиеМеста +// * Организация - ОпределяемыйТип.Организация +// * СетевоеОборудование - Булево - отобрать только сетевое оборудование, по умолчанию Ложь +// * КодЯзыка - Строка - Код языка драйвера +// +Функция СписокОборудованияОтбор() Экспорт + + Отбор = Новый Структура(); + Отбор.Вставить("Идентификатор", Неопределено); + Отбор.Вставить("ТипыПО", Неопределено); + Отбор.Вставить("РабочееМесто", Неопределено); + Отбор.Вставить("Организация", Неопределено); + Отбор.Вставить("СетевоеОборудование" , Истина); + Отбор.Вставить("СерверноеОборудование", Ложь); + Отбор.Вставить("КодЯзыка", Неопределено); + Отбор.Вставить("РазрешенаАвтоматическаяФискализация", Ложь); + Возврат Отбор; + +КонецФункции + +// Структура типы оборудования +// +// Возвращаемое значение: +// Структура +// +Функция ПараметрыТипыОборудования() Экспорт + + ТипыОборудования = Новый Структура(); + ТипыОборудования.Вставить("СканерШтрихкода" , Ложь); + ТипыОборудования.Вставить("СчитывательМагнитныхКарт", Ложь); + ТипыОборудования.Вставить("ККТ" , Ложь); + ТипыОборудования.Вставить("ФискальныйРегистратор" , Ложь); + ТипыОборудования.Вставить("ПринтерЧеков" , Ложь); + ТипыОборудования.Вставить("ДисплейПокупателя" , Ложь); + ТипыОборудования.Вставить("ТерминалСбораДанных" , Ложь); + ТипыОборудования.Вставить("ЭквайринговыйТерминал" , Ложь); + ТипыОборудования.Вставить("ЭлектронныеВесы" , Ложь); + ТипыОборудования.Вставить("ВесыСПечатьюЭтикеток" , Ложь); + ТипыОборудования.Вставить("ПринтерЭтикеток" , Ложь); + ТипыОборудования.Вставить("СчитывательRFID" , Ложь); + ТипыОборудования.Вставить("УстройствоРаспознавания" , Ложь); + Возврат ТипыОборудования; + +КонецФункции + +#КонецОбласти + +#Область Конструкторы + +// Заполняет структуру выполнения операции на Оборудовании. +// +// Параметры: +// Результат - Булево - результат операции. +// ОписаниеОшибки - ИнформацияОбОшибке - информация об ошибке. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - подключаемое оборудование. +// +// Возвращаемое значение: +// Структура: +// * Результат - Булево +// * ОписаниеОшибки - Строка +// * ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование +// * ПодключенноеУстройство - Неопределено, см. МенеджерОборудованияКлиент.ПараметрыПодключенияУстройства. +// * ОшибкаЗагрузки - Булево +// * ИдентификаторОбъекта - Строка +// +Функция ПараметрыВыполненияОперацииНаОборудовании(Результат = Ложь, ОписаниеОшибки = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт; + + РезультатВыполнения = Новый Структура(); + РезультатВыполнения.Вставить("Результат" , Результат); + РезультатВыполнения.Вставить("ОписаниеОшибки" , ОписаниеОшибки); + РезультатВыполнения.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + РезультатВыполнения.Вставить("ПодключенноеУстройство" , Неопределено); + РезультатВыполнения.Вставить("ОшибкаЗагрузки" , Ложь); + РезультатВыполнения.Вставить("ИдентификаторОбъекта" , ""); + Возврат РезультатВыполнения; + +КонецФункции + +// Параметры создания нового драйвера. +// +// Возвращаемое значение: +// Структура - Параметры создания нового драйвера: +// *ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - . +// *ИдентификаторОбъекта - УникальныйИдентификатор. +// *ИмяДрайвера - Строка - . +// *Наименование - Строка - . +// *ВерсияДрайвера - Строка - . +// *СпособПодключения - ПеречислениеСсылка.СпособПодключенияДрайвера - . +// *ИмяМакетаДрайвера - Строка - +// *СнятСПоддержки - Булево - +// *Предопределенный - Булево - +// *ЛокальныйРежим - Булево - +// *СетевойРежим - Булево - +// *СерверныйРежим - Булево - +// +Функция ПараметрыСозданияНовогоДрайвера() Экспорт + + ПараметрыСоздания = Новый Структура(); + ПараметрыСоздания.Вставить("ТипОборудования"); + ПараметрыСоздания.Вставить("ИдентификаторОбъекта"); + ПараметрыСоздания.Вставить("ИмяДрайвера"); + ПараметрыСоздания.Вставить("Наименование"); + ПараметрыСоздания.Вставить("ВерсияДрайвера"); + ПараметрыСоздания.Вставить("СпособПодключения"); + ПараметрыСоздания.Вставить("ИмяМакетаДрайвера"); + ПараметрыСоздания.Вставить("СнятСПоддержки" , Ложь); + ПараметрыСоздания.Вставить("Предопределенный", Ложь); + ПараметрыСоздания.Вставить("ЛокальныйРежим" , Истина); + ПараметрыСоздания.Вставить("СетевойРежим" , Ложь); + ПараметрыСоздания.Вставить("СерверныйРежим" , Ложь); + Возврат ПараметрыСоздания; + +КонецФункции + +// Параметры описания драйвера. +// +// Возвращаемое значение: +// Структура - Параметры описания драйвера: +// *Установлен - Булево - +// *ВерсияДрайвера - Строка - +// *ВерсияИнтеграционногоКомпонента - Строка - +// *НаименованиеДрайвера - Строка - +// *ОписаниеДрайвера - Строка - +// *ТипОборудования - Строка - +// *ИнтеграционныйКомпонент - Булево - +// *ОсновнойДрайверУстановлен - Булево - +// *РевизияИнтерфейса - Число - +// *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 Или СтрНайти(Штрихкод, КодСимвола(29)) > 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); + Иначе + НомерФорматФФД = "+" + НомерФорматФФД; + КонецЕсли; + + Возврат НомерФорматФФД; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ДобавитьЛидирующиеНули(Знач Строка, Знач ДлиннаСтроки) + + ТекстПолный = Строка; + Пока СтрДлина(ТекстПолный) < ДлиннаСтроки Цикл + ТекстПолный = "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..ba97960 --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировка/Ext/Module.bsl @@ -0,0 +1,603 @@ +#Область ПрограммныйИнтерфейс + +// Возвращает код планируемого статус маркируемого товара +// +// Параметры: +// ПланируемыйСтатусМаркируемогоТовара - ПеречислениеСсылка.ПланируемыйСтатусМаркируемогоТовара - Планируемый статус маркируемого товара. +// +// Возвращаемое значение: +// Число - Код планируемого статус маркируемого товара по ОФД +// +Функция КодПланируемыйСтатусМаркируемогоТовара(ПланируемыйСтатусМаркируемогоТовара) Экспорт + + Соответствие = Новый Соответствие(); + + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ШтучныйТоварРеализован") , 1); + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.МерныйТоварВСтадииРеализации"), 2); + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ШтучныйТоварВозвращен") , 3); + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ЧастьТовараВозвращена") , 4); + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.СтатусТовараНеИзменился") , 255); + + Возврат Соответствие.Получить(ПланируемыйСтатусМаркируемогоТовара); + +КонецФункции + +// Возвращает код ответа ОИСМ о статусе товара +// +// Параметры: +// ОтветОИСМОСтатусеТовара - ПеречислениеСсылка.ОтветОИСМОСтатусеТовара - Ответ от ИСМО. +// +// Возвращаемое значение: +// Число - Ответ ОИСМ о статусе товара по ОФД +// +Функция КодОтветаОИСМОСтатусеТовара(ОтветОИСМОСтатусеТовара) Экспорт + + Соответствие = Новый Соответствие(); + + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПланируемыйСтатусТовараКорректен") , 1); + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПланируемыйСтатусТовараНекорректен"), 2); + Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ОборотТовараПриостановлен") , 3); + + Возврат Соответствие.Получить(ОтветОИСМОСтатусеТовара); + +КонецФункции + +// Возвращает ответ ОИСМ о статусе товара по коду. +// +// Параметры: +// ОтветОИСМОСтатусеТовара - Число - Ответ от ИСМО. +// +// Возвращаемое значение: +// ПеречислениеСсылка.ОтветОИСМОСтатусеТовара - Ответ ОИСМ. +// +Функция ОтветОИСМОСтатусеТовараПоКоду(ОтветОИСМОСтатусеТовара) Экспорт + + Соответствие = Новый Соответствие(); + + Соответствие.Вставить(1, ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПланируемыйСтатусТовараКорректен")); + Соответствие.Вставить(2, ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПланируемыйСтатусТовараНекорректен")); + Соответствие.Вставить(3, ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ОборотТовараПриостановлен")); + + Возврат Соответствие.Получить(ОтветОИСМОСтатусеТовара); + +КонецФункции + +// Возвращает код типа маркировки ККТ по коду. +// +// Параметры: +// ТипМаркировкиККТ - ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТ. +// +// Возвращаемое значение: +// Строка, Произвольный - Код типа маркировки ККТ +Функция КодТипаМаркировкиККТ(ТипМаркировкиККТ) Экспорт + + ТипыМаркировкиККТ = Новый Соответствие(); + + ТипыМаркировкиККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ИзделияИзМеха") , "02"); + ТипыМаркировкиККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ЛекарственныеПрепараты"), "03"); + ТипыМаркировкиККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ТабачнаяПродукция") , "05"); + ТипыМаркировкиККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ОбувныеТовары") , "1520"); + + Возврат ТипыМаркировкиККТ.Получить(ТипМаркировкиККТ); + +КонецФункции + +// Возвращает код типа маркировки ККТ. +// +// Параметры: +// КодТипМаркировкиККТ - Число - Код тип маркировки ККТ +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТПо коду +Функция ТипМаркировкиККТПоКоду(КодТипМаркировкиККТ) Экспорт + + ТипыМаркировкиККТ = Новый Соответствие(); + + ТипыМаркировкиККТ.Вставить("02" , ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ИзделияИзМеха")); + ТипыМаркировкиККТ.Вставить("03" , ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ЛекарственныеПрепараты")); + ТипыМаркировкиККТ.Вставить("05" , ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ТабачнаяПродукция")); + ТипыМаркировкиККТ.Вставить("1520", ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ОбувныеТовары")); + + Возврат ТипыМаркировкиККТ.Получить(КодТипМаркировкиККТ); + +КонецФункции + +// Возвращает статус результата запроса КМ по коду. +// +// Параметры: +// КодСтатуса - Число - Код статуса. +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.СтатусРезультатаЗапросаКМ - Статус результата запроса КМПо коду +Функция СтатусРезультатаЗапросаКМПоКоду(КодСтатуса) Экспорт + + РезультатЗапроса = Новый Соответствие(); + + РезультатЗапроса.Вставить(0, ПредопределенноеЗначение("Перечисление.СтатусРезультатаЗапросаКМ.Получен")); + РезультатЗапроса.Вставить(1, ПредопределенноеЗначение("Перечисление.СтатусРезультатаЗапросаКМ.Ожидается")); + РезультатЗапроса.Вставить(2, ПредопределенноеЗначение("Перечисление.СтатусРезультатаЗапросаКМ.НеМожетБытьПолучен")); + + Возврат РезультатЗапроса.Получить(Число(КодСтатуса)); + +КонецФункции + +// Возвращает, для каких типов идентификаторов будет заполняться код товара. +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыИдентификаторовТовараККТ +// +Функция КодТовараЗаполняетсяДляТиповИдентификаторов() Экспорт; + + ТипыИдентификаторов = Новый Массив(); + ТипыИдентификаторов.Добавить(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1); + ТипыИдентификаторов.Добавить(Перечисления.ТипыИдентификаторовТовараККТ.ИзделияИзНатуральногоМеха); + ТипыИдентификаторов.Добавить(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеEAN13); + ТипыИдентификаторов.Добавить(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеEAN8); + ТипыИдентификаторовОбработка = ТипыИдентификаторов; + ВыполненаСтандартнаяОбработка = Истина; + МенеджерОборудованияВызовСервераПереопределяемый.КодТовараЗаполняетсяДляТиповИдентификаторов(ТипыИдентификаторовОбработка, ВыполненаСтандартнаяОбработка); + Если ВыполненаСтандартнаяОбработка Тогда + Результат = ТипыИдентификаторов + Иначе + Результат = ТипыИдентификаторовОбработка + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Идентифицирует ли код товара (значение тега 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ДляЗапросаКМ(ПараметрыОперации) Экспорт + + Запись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 Тогда + ДробноеКоличествоУказано = Истина; + КонецЕсли; + КонецЕсли; + + // Реквизиты "количество предмета расчета" (тег 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"); + Если Не ПустаяСтрока(КодОбработкиЗапроса) Тогда + Параметры.КодОбработкиЗапроса = Число(КодОбработкиЗапроса); + Параметры.СтатусОбработкиЗапроса = СтатусОбработкиЗапросаКМПоКоду(Параметры.КодОбработкиЗапроса); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Параметры.РезультатПроверкиСведенийОТоваре = РезультатПроверкиСведенийОТоваре(Параметры.РезультатПроверкиОИСМПредставление); + Параметры.РезультатПроверкиСведенийОТовареПФ = РезультатПроверкиСведенийОТовареПФ(Параметры.РезультатПроверкиОИСМПредставление); + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ФормированиеДанныхККТ + +// Выполняет запись о маркировке в 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.ЗаписатьКонецЭлемента(); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗаполнитьОтраслевойРеквизитИзделияИзНатуральногоМеха(Позиция) + + ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(); + ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит; + Если ТипыТоваров.ИзделияИзНатуральногоМеха Тогда + // Передача сведений о выбытии меховых изделий через ККТ. + ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262 + ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20160811"); // 1263 + ОтраслевойРеквизит.НомерДокументаОснования = "787"; // 1264 + ОтраслевойРеквизит.ЗначениеРеквизита = "crpt=mrk"; // 1265 + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьОтраслевойРеквизитМолочнаяПродукцияСНечитаемымиКМ(Позиция) + + ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(); + ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит; + Если ТипыТоваров.МолочнаяПродукцияСНечитаемымиКМ Тогда + ДатаПроизводства = ?(Позиция.ДатаПроизводства <> Неопределено, Формат(Позиция.ДатаПроизводства, "ДФ=""ггММдд"""), ""); + ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262 + ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20201215"); // 1263 + ОтраслевойРеквизит.НомерДокументаОснования = "2099"; // 1264 + ОтраслевойРеквизит.ЗначениеРеквизита = "pd=" + ДатаПроизводства + "&km=tech"; // 1265 - ГГММДД – дата производства товара + КонецЕсли; + +КонецПроцедуры + +Функция ШтрихкодДляТега1163Base64(ДанныеКодаТовара) + + Если ДанныеКодаТовара.НаименованиеРеквизита = "GS1.0" + Или ДанныеКодаТовара.НаименованиеРеквизита = "GS1.M" Тогда + + Штрихкод = ""; + ДанныеШтрихкода = ДанныеКодаТовара.ДанныеШтрихкода; + + ЗначениеПоля = ДанныеШтрихкода.Получить("01"); + Если ЗначениеПоля<>Неопределено Тогда + Штрихкод = Штрихкод + "01" + ЗначениеПоля.Значение; + КонецЕсли; + ЗначениеПоля = ДанныеШтрихкода.Получить("21"); + Если ЗначениеПоля<>Неопределено Тогда + Штрихкод = Штрихкод + "21" + ЗначениеПоля.Значение; + КонецЕсли; + Результат = МенеджерОборудованияКлиентСервер.ШтрихкодВBase64(Штрихкод); + + Иначе + Результат = ДанныеКодаТовара.ШтрихкодBase64; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Получить обработки запроса КМ по коду. +// +Функция СтатусОбработкиЗапросаКМПоКоду(КодОбработкиЗапроса) + + СтатусОбработки = Новый Соответствие(); + + СтатусОбработки.Вставить(0, ПредопределенноеЗначение("Перечисление.СтатусОбработкиЗапросаКМ.КорректныйФормат")); + СтатусОбработки.Вставить(1, ПредопределенноеЗначение("Перечисление.СтатусОбработкиЗапросаКМ.НекорректныйФормат")); + СтатусОбработки.Вставить(2, ПредопределенноеЗначение("Перечисление.СтатусОбработкиЗапросаКМ.НекорректныйФорматКМ")); + + Возврат СтатусОбработки.Получить(Число(КодОбработкиЗапроса)); + +КонецФункции + +// Получить результат проверки сведений о товаре. +// +Функция РезультатПроверкиСведенийОТоваре(РезультатПроверки) + + РезультатыПроверки = Новый Соответствие(); + + РезультатыПроверки.Вставить("00000000", НСтр("ru='Проверка КП КМ не выполнена, статус товара ОИСМ не проверен'")); + РезультатыПроверки.Вставить("00000001", НСтр("ru='Проверка КП КМ выполнена в ФН с отрицательным результатом, статус товара ОИСМ не проверен'")); + РезультатыПроверки.Вставить("00000011", НСтр("ru='Проверка КП КМ выполнена с положительным результатом, статус товара ОИСМ не проверен'")); + РезультатыПроверки.Вставить("00010000", НСтр("ru='Проверка КП КМ не выполнена, статус товара ОИСМ не проверен (ККТ функционирует в автономном режиме)'")); + РезультатыПроверки.Вставить("00010001", НСтр("ru='Проверка КП КМ выполнена в ФН с отрицательным результатом, статус товара ОИСМ не проверен (ККТ функционирует в автономном режиме)'")); + РезультатыПроверки.Вставить("00010011", НСтр("ru='Проверка КП КМ выполнена в ФН с положительным результатом, статус товара ОИСМ не проверен (ККТ функционирует в автономном режиме)'")); + РезультатыПроверки.Вставить("00000101", НСтр("ru='Проверка КП КМ выполнена с отрицательным результатом, статус товара у ОИСМ некорректен'")); + РезультатыПроверки.Вставить("00000111", НСтр("ru='Проверка КП КМ выполнена с положительным результатом, статус товара у ОИСМ некорректен'")); + РезультатыПроверки.Вставить("00001111", НСтр("ru='Проверка КП КМ выполнена с положительным результатом, статус товара у ОИСМ корректен'")); + + Возврат РезультатыПроверки.Получить(РезультатПроверки); + +КонецФункции + +// Получить результат проверки сведений о товаре. +// +Функция РезультатПроверкиСведенийОТовареПФ(РезультатПроверки) + + РезультатыПроверки = Новый Соответствие(); + + РезультатыПроверки.Вставить("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 + + Возврат РезультатыПроверки.Получить(РезультатПроверки); + +КонецФункции + +#КонецОбласти + + 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..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..ca62bab --- /dev/null +++ b/CommonModules/МенеджерОборудованияМаркировкаКлиентСервер/Ext/Module.bsl @@ -0,0 +1,1274 @@ +#Область ПрограммныйИнтерфейс + +#Область ФункцииРаботыGS1 + +// Разобрать строку штрихкода в соответствии со стандартом GS1. +// +// Параметры: +// Штрихкод - Строка - значение штрихкода. +// +// Возвращаемое значение: +// Структура. +Функция РазобратьСтрокуШтрихкодаGS1(Знач Штрихкод) Экспорт; + + РезультатРазбора = Новый Структура; + РезультатРазбора.Вставить("Разобран" , Ложь); + РезультатРазбора.Вставить("ОписаниеОшибки"); + РезультатРазбора.Вставить("ПредставлениеШтрихкода", ""); + РезультатРазбора.Вставить("ДанныеШтрихкода", Новый Соответствие); + + КодыGS1 = КодыGS1Служебный(); + + Если СтрНачинаетсяС(Штрихкод, "(") Тогда + РазобратьСтрокуШтрихкодаGS1СоСкобками(Штрихкод, РезультатРазбора, КодыGS1); + Иначе + Разделитель = ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(); + ЧастиШтрихкода = СтрРазделить(Штрихкод, Разделитель, Ложь); + Для Каждого ЧастьБезРазделителей Из ЧастиШтрихкода Цикл + РазобратьСтрокуШтрихкодаGS1Служебный(ЧастьБезРазделителей, РезультатРазбора, КодыGS1); + КонецЦикла; + КонецЕсли; + + Возврат РезультатРазбора; + +КонецФункции + +#КонецОбласти + +#Область ФункцииМаркировкиПродукции + +// Сформировать реквизита кода товар для DataMatrixGS1 на основе GTIN & SerialNumber. +// +// Параметры: +// GTIN - Строка - Глобальный идентификатор торговой единицы. +// СерийныйНомер - Строка - Серийный номер. +// +// Возвращаемое значение: +// Строка - Значение реквизита кода товара в BASE64 +// +Функция СформироватьКодТовараДляDataMatrixGS1(Знач GTIN, Знач СерийныйНомер) Экспорт + + // Определяем структуру результата. + ДанныеКодаТовара = ЗаполнитьИменаРеквизитовКодаТовара(Истина); + ДанныеКодаТовара.ТипИдентификатораТовара = ПредопределенноеЗначение("Перечисление.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1"); + ДанныеКодаТовара.СерийныйНомер = СерийныйНомер; + СформироватьEAN(ДанныеКодаТовара, GTIN); + // Последующие 11 символов считанной последовательности формируются по правилам интерпретации ASCII в hex + ЗначениеСтроки = СерийныйНомер; + Пока СтрДлина(ЗначениеСтроки) < 13 Цикл + ЗначениеСтроки = ЗначениеСтроки + Символ(32); // Дополняем знаками «20h» в конце (пробелами справа) до 13 байт + КонецЦикла; + СформироватьДвоичныеДанныеДляЧисла(ДанныеКодаТовара, GTIN, ЗначениеСтроки); + Возврат ДанныеКодаТовара; + +КонецФункции + +// Разобрать штриховой код товара. +// +// Параметры: +// Штрихкод - Строка - Штрихкод +// ШтрихкодВBase64 - Булево - Штрихкод в base64 +// +// Возвращаемое значение: +// Структура - Разобрать штриховой код товара: +// * Разобран - Булево - +// * ОписаниеОшибки - СТрока +// * ПредставлениеШтрихкода - Строка - +// * ДанныеШтрихкода - Строка - +// * ТипИдентификатораТовара - ПеречислениеСсылка.ТипыИдентификаторовТовараККТ - +// * GTIN - Строка - +// * СерийныйНомер - Строка - +// * EAN - Строка - +// * РеквизитКодаТовараHEX - Строка - +// * РеквизитКодаТовара - Строка - +// * ИдентифицируетЭкземпляр - Булево - +// * ПотребительскаяУпаковкаТабачнойПродукции - Булево - +// * ШтрихкодBase64 - Булево - +// * НаименованиеРеквизита - Строка - +// +Функция РазобратьШтриховойКодТовара(Знач Штрихкод, Знач ШтрихкодВBase64 = Ложь) Экспорт; + Возврат РазобратьШтриховойКодТовараСлужебная(Штрихкод, ШтрихкодВBase64); +КонецФункции + +// Разобрать штриховой код товара служебная. +// +// Параметры: +// Штрихкод - Строка - Штрихкод +// ШтрихкодВBase64 - Булево - Штрихкод в base64 +// +// Возвращаемое значение: +// Структура - Разобрать штриховой код товара: +// * Разобран - Булево - +// * ОписаниеОшибки - СТрока +// * ПредставлениеШтрихкода - Строка - +// * ДанныеШтрихкода - Строка - +// * ТипИдентификатораТовара - ПеречислениеСсылка.ТипыИдентификаторовТовараККТ - +// * GTIN - Строка - +// * СерийныйНомер - Строка - +// * EAN - Строка - +// * РеквизитКодаТовараHEX - Строка - +// * РеквизитКодаТовара - Строка - +// * ИдентифицируетЭкземпляр - Булево - +// * ПотребительскаяУпаковкаТабачнойПродукции - Булево - +// * ШтрихкодBase64 - Булево - +// * НаименованиеРеквизита - Строка - +// +Функция РазобратьШтриховойКодТовараСлужебная(Знач Штрихкод, Знач ШтрихкодВBase64 = Ложь) Экспорт; + + Идентификаторы = Идентификаторы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"; + Возврат ДанныеКодаТовара; + + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Коды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 + Если ДанныеКодаТовара.Разобран Тогда + ЗначениеЭлемента = ДанныеКодаТовара.ДанныеШтрихкода.Получить(Идентификаторы.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)); + + Возврат ДанныеКодаТовара; + +КонецФункции + +// Сформировать технический код для нечитаемого DataMatrix на основе GTIN & SerialNumber. +// +// Параметры: +// GTIN - Строка - Глобальный идентификатор торговой единицы. +// СерийныйНомер - Строка - Серийный номер. +// КриптоЧасть - Строка - Крипто часть КМ. +// +// Возвращаемое значение: +// Строка - Технический код в Base64. +// +Функция СформироватьТехническийКодДляНечитаемогоDataMatrixВBase64(GTIN, СерийныйНомер, КриптоЧасть = "0000") Экспорт + + ТехническийКод = "01 %1 21 %2 93 %3 98crpt"; + ТехническийКод = СтрШаблон(ТехническийКод, GTIN, СерийныйНомер, КриптоЧасть); + ТехническийКод = СтрЗаменить(ТехническийКод, "", ОбщегоНазначенияБПОКлиентСервер.РазделительGS1()); + ТехническийКод = СтрЗаменить(ТехническийКод, " ", ""); + + ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(ТехническийКод); + ШтрихкодBase64 = Base64Строка(ДвоичныеДанныеСтроки); + + Возврат ШтрихкодBase64; + +КонецФункции + +// Коды g s1. +// +// Возвращаемое значение: +// Соответствие из Строка - Коды gs1 +Функция КодыGS1() Экспорт + + Возврат КодыGS1Служебный(); + +КонецФункции + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: следует использовать ОбщегоНазначенияБПОКлиентСервер.Разделитель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(Коды, "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Строка()); + + Возврат Коды + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЗаполнитьИменаРеквизитовКодаТовара(КодРазобран = Ложь) + + // Определяем структуру результата. + ДанныеКодаТовара = Новый Структура(); + ДанныеКодаТовара.Вставить("Разобран", КодРазобран); + ДанныеКодаТовара.Вставить("ОписаниеОшибки"); + ДанныеКодаТовара.Вставить("ПредставлениеШтрихкода" , ""); + ДанныеКодаТовара.Вставить("ДанныеШтрихкода", Новый Соответствие); + ДанныеКодаТовара.Вставить("ТипИдентификатораТовара"); // Тип идентификатора товара, Перечисление.ТипыИдентификаторовТовараККТ. + ДанныеКодаТовара.Вставить("GTIN"); // GTIN + ДанныеКодаТовара.Вставить("СерийныйНомер"); // Серийный номер с потребительской или групповой обработки. + ДанныеКодаТовара.Вставить("EAN"); // Штрихкод товара преобразованный из GTIN + ДанныеКодаТовара.Вставить("РеквизитКодаТовараHEX"); // Значение реквизита "код товара" , тег 1162 в бинарном виде. + ДанныеКодаТовара.Вставить("РеквизитКодаТовара"); // Значение реквизита "код товара", тег 1162 в BASE64. + ДанныеКодаТовара.Вставить("ИдентифицируетЭкземпляр", Ложь); // Идентификатора товара идентифицирует экземпляр товара. + ДанныеКодаТовара.Вставить("ПотребительскаяУпаковкаТабачнойПродукции", Ложь); // Код идентифицирует единичную упаковку табачной продукции. + ДанныеКодаТовара.Вставить("ШтрихкодBase64"); // Штрихкод в BASE64 для тега 1163 + ДанныеКодаТовара.Вставить("НаименованиеРеквизита"); // Наименование реквизита для тега 1163 + ДанныеКодаТовара.Вставить("ТехническийКод", Ложь); // Признак технический кода GS1.M + + Возврат ДанныеКодаТовара; + +КонецФункции + +Процедура РазобратьСтрокуШтрихкода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" + Значение; + КонецЦикла; + Значение = Лев(Значение, СтрДлина(Значение) - ПоложениеДесятичнойТочки) + "." + Прав(Значение, ПоложениеДесятичнойТочки); + КонецЕсли; + КонецЕсли; + + ОписаниеДанных = Новый Структура; + ОписаниеДанных.Вставить("ПоложениеДесятичнойТочки", ПоложениеДесятичнойТочки); + ОписаниеДанных.Вставить("Значение", Значение); + РезультатРазбора.ДанныеШтрихкода.Вставить(ОписаниеКода.Код, ОписаниеДанных); + + КонецЦикла; + + РезультатРазбора.Разобран = Истина; + +КонецПроцедуры + +Процедура РазобратьСтрокуШтрихкода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"" должно содержать только цифры'"), + ИдентификаторПрименения, ОписаниеКода.Имя, СтрДлина(ЗначениеПеременное)); + Возврат; + КонецЕсли; + КонецЕсли; + НомерСимвола = НомерСимвола + СтрДлина(ЗначениеПеременное); + Значение = Значение + ЗначениеПеременное; + КонецЕсли; + + ПредставлениеШтрихкода = ПредставлениеШтрихкода + "(" + ИдентификаторПрименения + ПоложениеДесятичнойТочкиСтрокой + ")" + Значение; + + ПоложениеДесятичнойТочки = 0; + Если Не ПустаяСтрока(ПоложениеДесятичнойТочкиСтрокой) Тогда + ПоложениеДесятичнойТочки = Число(ПоложениеДесятичнойТочкиСтрокой); + Если ПоложениеДесятичнойТочки > 0 Тогда + Для Индекс = 0 По ПоложениеДесятичнойТочки - СтрДлина(Значение) Цикл + Значение = "0" + Значение; + КонецЦикла; + Значение = Лев(Значение, СтрДлина(Значение) - ПоложениеДесятичнойТочки) + "." + Прав(Значение, ПоложениеДесятичнойТочки); + КонецЕсли; + КонецЕсли; + + ОписаниеДанных = Новый Структура; + ОписаниеДанных.Вставить("ПоложениеДесятичнойТочки", ПоложениеДесятичнойТочки); + ОписаниеДанных.Вставить("Значение", Значение); + РезультатРазбора.ДанныеШтрихкода.Вставить(ОписаниеКода.Код, ОписаниеДанных); + + КонецЦикла; + + РезультатРазбора.ПредставлениеШтрихкода = РезультатРазбора.ПредставлениеШтрихкода + ПредставлениеШтрихкода; + РезультатРазбора.Разобран = Истина; + +КонецПроцедуры + +Функция Тип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, 1) = "0" И СтрДлина(ВремGTIN) > 8 Цикл + ВремGTIN = Сред(ВремGTIN, 2); + КонецЦикла; + ДанныеМаркировки.EAN = ВремGTIN; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file 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..3785a89 --- /dev/null +++ b/CommonModules/МенеджерОборудованияПовтИсп/Ext/Module.bsl @@ -0,0 +1,30 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +Функция СодержимоеОбщегоМакета(Знач ИмяМакета) Экспорт + + СодержимоеМакета = ПолучитьОбщийМакет(ИмяМакета).ПолучитьТекст(); + Возврат СодержимоеМакета; + +КонецФункции + +Функция СовместимостьВнешнейКомпонентыИзФайла(Знач ИмяМакета) Экспорт + + ВремИмяМакета = СтрРазделить(ИмяМакета,".", Ложь); + ВремИмяМакета = ВремИмяМакета[ВремИмяМакета.ВГраница()]; + ДвоичныеДанные = ПолучитьОбщийМакет(ВремИмяМакета); + + Результат = ВнешниеКомпонентыБПО.ИнформацияОКомпонентеИзФайла(ДвоичныеДанные, Ложь); + Если Результат.Разобрано Тогда + Возврат Результат.Реквизиты; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#КонецЕсли + 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..d217d09 --- /dev/null +++ b/CommonModules/ОбновлениеИнформационнойБазыБПО/Ext/Module.bsl @@ -0,0 +1,422 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2022, ООО 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.1.8.6"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "РегистрыСведений.ЗначенияЕМРЦ.ЗаполнитьЗначенияРегистраЕМРЦ"; + Обработчик.Комментарий = НСтр("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..bb2c44a --- /dev/null +++ b/CommonModules/ОборудованиеВесовоеОборудование/Ext/Module.bsl @@ -0,0 +1,291 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Добавляет в список поставляемые драйверы в составе конфигурации. +// +// Параметры: +// ДрайвераОборудования - см. МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования +// +Процедура ОбновитьПоставляемыеДрайвера(ДрайвераОборудования) Экспорт + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭлектронныеВесы; + Драйвер.ИмяДрайвера = "Драйвер1СЭлектронныеВесы"; + Драйвер.Наименование = НСтр("ru = '1С:Электронные весы (Native Api)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "CheckoutScales"; + Драйвер.ВерсияДрайвера = "1.1.3.4"; + + +КонецПроцедуры + +// Подготовить данные операции перед выполнением команды. +// +// Параметры: +// ПараметрыПодключения - Структура - Параметры подключения. +// Команда - Строка - Выполняемая команда. +// ПараметрыОперации - Структура - Параметры операции. +// +// Возвращаемое значение: +// Структура. +Функция ПодготовитьДанныеОперации(ПараметрыПодключения, Команда, ПараметрыОперации) Экспорт + + Если Команда = "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); + ОписаниеТовара = ?(Позиция.Свойство("ОписаниеТовара"), Позиция.ОписаниеТовара, ""); + СрокХранения = ?(Позиция.Свойство("СрокХранения"), Позиция.СрокХранения, 0); + ВесовойТовар = ?(Позиция.Свойство("ВесовойТовар"), Позиция.ВесовойТовар, Истина); + + ЗаписьXML.ЗаписатьАтрибут("PLU" , XMLСтрока(Число(Позиция.PLU))); + ЗаписьXML.ЗаписатьАтрибут("Code" , XMLСтрока(Число(Позиция.Код))); + ЗаписьXML.ЗаписатьАтрибут("Name" , ВремНаименование); + Запись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..49eeaaf --- /dev/null +++ b/CommonModules/ОборудованиеВесовоеОборудованиеКлиент/Ext/Module.bsl @@ -0,0 +1,219 @@ + +#Область ПрограммныйИнтерфейс + +#Область ЭлектронныеВесы + +// Получает вес с электронных весов. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолученияВесаСЭлектронныхВесов(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "GetWeight"); + КонтекстОперации.Вставить("Результат", Истина); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ЭлектронныеВесы = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьОперациюНаЭлектронныхВесахЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите электронные весы'"), + НСтр("ru='Электронные весы не подключены.'"), + НСтр("ru='Электронные весы не выбраны.'")); + Иначе + НачатьОперациюНаЭлектронныхВесахЗавершение(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +// Начать установку веса тары электронных весов. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьУстановкуВесаТарыЭлектронныхВесов(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "Calibrate"); + КонтекстОперации.Вставить("Результат", Истина); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ЭлектронныеВесы = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьОперациюНаЭлектронныхВесахЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите электронные весы'"), + НСтр("ru='Электронные весы не подключены.'"), + НСтр("ru='Электронные весы не выбраны.'")); + Иначе + НачатьОперациюНаЭлектронныхВесахЗавершение(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +#КонецОбласти + +#Область ВесыСПечатьюЭтикеток + +// Начать выгрузку данных в весы с печатью этикеток. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыгрузкуДанныеВВесыСПечатьюЭтикеток(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Истина); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "UploadGoods"); + КонтекстОперации.Вставить("Результат", Истина); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ВесыСПечатьюЭтикеток = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьОперациюНаЭлектронныхВесахЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите весы с печатью этикеток'"), + НСтр("ru='Весы с печатью этикеток не подключены.'"), + НСтр("ru='Весы с печатью этикеток не выбраны.'")); + Иначе + НачатьОперациюНаЭлектронныхВесахЗавершение(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +// Начать очистку данных в весах с печатью этикеток. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОчисткуТоваровВВесахСПечатьюЭтикеток(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "ClearBase"); + КонтекстОперации.Вставить("Результат", Истина); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ВесыСПечатьюЭтикеток = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьОперациюНаЭлектронныхВесахЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите весы с печатью этикеток'"), + НСтр("ru='Весы с печатью этикеток не подключены.'"), + НСтр("ru='Весы с печатью этикеток не выбраны.'")); + Иначе + НачатьОперациюНаЭлектронныхВесахЗавершение(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +// Начать выгрузку изображений товаров в весы с печатью этикеток. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыгрузкуИзображенийТоваровВВесыСПечатьюЭтикеток(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Истина); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "UploadProductImages"); + КонтекстОперации.Вставить("Результат", Истина); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ВесыСПечатьюЭтикеток = Истина; + + Оповещение = Новый ОписаниеОповещения("НачатьОперациюНаЭлектронныхВесахЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("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..bd00c0b --- /dev/null +++ b/CommonModules/ОборудованиеВесовоеОборудованиеКлиентСервер/Ext/Module.bsl @@ -0,0 +1,96 @@ + +#Область ПрограммныйИнтерфейс + +// Заполняет структуру параметров операции на Оборудовании. +// +// Параметры: +// ВесТары - Число +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОперацииЭлектронныеВесы(ВесТары = 0) Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ВесТары", ВесТары); + Возврат Параметры; + +КонецФункции + +// Заполняет структуру параметров операции на Оборудовании. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОперацииВесыСПечатьюЭтикеток() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ТаблицаТоваров", Новый Массив()); // Массив Структур, см. ПараметрыСтрокиВыгрузкиВВесыСПечатьюЭтикеток() + Параметры.Вставить("ЧастичнаяВыгрузка", Ложь); + Возврат Параметры; + +КонецФункции + +// Заполняет структуру выгрузки товарной позиции на весы с печатью этикеток. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыСтрокиВыгрузкиВВесыСПечатьюЭтикеток() Экспорт + + ДополнительныеЦены = Новый Структура(); // Дополнительные цены + ДополнительныеЦены.Вставить("Цена1"); + ДополнительныеЦены.Вставить("Цена2"); + ДополнительныеЦены.Вставить("Цена3"); + ДополнительныеЦены.Вставить("Цена4"); + + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("PLU"); // Число,Обязательно - Индекс товара на весах. + ПараметрыСтроки.Вставить("Код"); // Число,Обязательно - Код товара который печатается на штрихкоде этикетки. + ПараметрыСтроки.Вставить("Штрихкод"); + ПараметрыСтроки.Вставить("Наименование"); // Строка,Необязательно + ПараметрыСтроки.Вставить("НаименованиеПолное"); // Строка,Необязательно + ПараметрыСтроки.Вставить("ВесовойТовар", Истина); + ПараметрыСтроки.Вставить("Цена", 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..fecfd74 --- /dev/null +++ b/CommonModules/ОборудованиеДисплеиПокупателя/Ext/Module.bsl @@ -0,0 +1,101 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Добавляет в список поставляемые драйверы в составе конфигурации. +// +// Параметры: +// ДрайвераОборудования - см. МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования +// +Процедура ОбновитьПоставляемыеДрайвера(ДрайвераОборудования) Экспорт + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ДисплейПокупателя; + Драйвер.ИмяДрайвера = "Драйвер1СДисплейПокупателя"; + Драйвер.Наименование = НСтр("ru = '1С:Дисплей покупателя'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "CustomerDisplayEx"; + Драйвер.ВерсияДрайвера = "4.2.2.8"; + + +КонецПроцедуры + +// Подготовить данные операции. +// +// Параметры: +// ПараметрыПодключения - Структура -Параметры подключения +// Команда - Строка - Команда +// ПараметрыОперации - Структура -Параметры операции +// +// Возвращаемое значение: +// Неопределено. +Функция ПодготовитьДанныеОперации(ПараметрыПодключения, Команда, ПараметрыОперации) Экспорт + + ДанныеОперации = ПараметрыОперацииДисплеиПокупателя(); + ДанныеОперации.ТекстHTML = "

No information

"; + ФорматЧисла = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0"; + + + Возврат ДанныеОперации; + +КонецФункции + +Процедура ОбработатьДанныеОперации(ПараметрыПодключения, Команда, РезультатВыполнения, ДанныеОперации) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Заполнить структуру операции +// +// Возвращаемое значение: +// Структура - Параметры операции: +// * Результат - Булево. +// * ТекстОшибки - Строка. +Функция ПараметрыОперацииДисплеиПокупателя() + + ПараметрыОперации = Новый Структура(); + ПараметрыОперации.Вставить("Результат", Истина); + ПараметрыОперации.Вставить("СтрокиТекста"); + ПараметрыОперации.Вставить("ЗначениеQRКода"); // Строка - значение QR кода + ПараметрыОперации.Вставить("КартинкаQRКода"); // Строка - строка с base64 представлением png картинки логотипа. + ПараметрыОперации.Вставить("СтатусОперации", 0); // Число - Статус: 0-Не установлены, 1-Выполнено успешно, 2-Операция не выполнена + ПараметрыОперации.Вставить("ТекстОшибки"); + ПараметрыОперации.Вставить("ТекстHTML"); + Возврат ПараметрыОперации; + +КонецФункции + +Процедура ОбновитьСтатус(ШаблонДисплеиПокупателя, СтатусОперации) + + Если СтатусОперации = 1 Тогда + ШаблонДисплеиПокупателя = СтрЗаменить(ШаблонДисплеиПокупателя, "", ""); + ИначеЕсли СтатусОперации = 2 Тогда + ШаблонДисплеиПокупателя = СтрЗаменить(ШаблонДисплеиПокупателя, "", ""); + ИначеЕсли СтатусОперации = 3 Тогда + ШаблонДисплеиПокупателя = СтрЗаменить(ШаблонДисплеиПокупателя, "", ""); + ИначеЕсли СтатусОперации = 4 Тогда + ШаблонДисплеиПокупателя = СтрЗаменить(ШаблонДисплеиПокупателя, "", ""); + КонецЕсли; + +КонецПроцедуры + +Функция СтрокаВыравнивания(Выравнивание) + + Если Выравнивание = ГоризонтальноеПоложение.Лево Тогда + Результат = "align=""left"""; + ИначеЕсли Выравнивание = ГоризонтальноеПоложение.Право Тогда + Результат = "align=""right"""; + Иначе + Результат = "align=""center"""; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти 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..82f9c31 --- /dev/null +++ b/CommonModules/ОборудованиеДисплеиПокупателяКлиент/Ext/Module.bsl @@ -0,0 +1,302 @@ + +#Область ПрограммныйИнтерфейс + +// Заполняет структуру дополнительных параметров операции на Оборудовании. +// +// Параметры: +// СтрокиТекста - Строка - строки текста для отображения. +// ЗначениеQRКода - Неопределено - Значение QRКода +// +// Возвращаемое значение: +// Структура - Параметры операции дисплей покупателя +// +Функция ПараметрыОперацииДисплейПокупателя(СтрокиТекста = "", ЗначениеQRКода = Неопределено) Экспорт + + Результат = Новый Структура(); + Результат.Вставить("СтрокиТекста", СтрокиТекста); // Строка - Текстовая строка + Результат.Вставить("ЗначениеQRКода", ЗначениеQRКода); // Строка - значение QR кода + Результат.Вставить("КартинкаQRКода"); // Строка - строка с base64 представлением png картинки логотипа. + Результат.Вставить("Сумма", 0); // Число - Сумма операции. + Результат.Вставить("СтатусОперации", 0); // Число - Статус: 0-Не установлены, 1-Выполнено успешно, 2-Операция не выполнена + Результат.Вставить("ТекстHTML"); // Строка - строка с base64 представлением png картинки логотипа. + + Результат.Вставить("НазваниеОрганизации"); // Строка - Название организации + Результат.Вставить("Операция"); // Строка - выполняемая операция. + Результат.Вставить("ТипПлатежнойСистемы"); // Перечисление 0 + Результат.Вставить("НаличнаяОплата", Ложь); // Булево - Наличная оплата. + Результат.Вставить("ДополнительныйТекст"); // Строка - Дополнительный текст. + Результат.Вставить("Сдача", 0); // Число - Сдача по операции. + Результат.Вставить("ГотовностьКРаботе"); // Булево - Готовность кассы к работе. + Результат.Вставить("КартинкаBase64"); // Строка - строка с base64 представлением png картинки логотипа. + + Результат.Вставить("КолонкиТабличнойЧасти", Новый Массив()); // - Массив + Результат.Вставить("ТабличнаяЧасть", Новый Массив()); // - Массив, Соответствие + Результат.Вставить("ПодвалСумма", 0); // Число - Сумма табличной части + Возврат Результат; + +КонецФункции + +// Заполняет структуру параметров колонки табличной части дисплея покупателя. +// +// Параметры: +// Имя - Строка +// Заголовок - Строка +// Ширина - Число +// Выравнивание - ГоризонтальноеПоложение +// Возвращаемое значение: +// Структура -Параметры операции дисплей покупателя +// +Функция ПараметрыКолонкиТабличнойЧастиДисплеяПокупателя(Имя, Заголовок = "", Ширина = 0, Выравнивание = Неопределено) Экспорт + + Результат = Новый Структура(); + Результат.Вставить("Имя", Имя); // Строка,Обязательно - Идентификатор колонки + Результат.Вставить("Заголовок", Заголовок); // Строка,Обязательно - Представление колонки + Результат.Вставить("Ширина", Ширина); // Число,Обязательно - Ширина колонки в процентах + Результат.Вставить("Выравнивание", Выравнивание); // ГоризонтальноеПоложение + Возврат Результат; + +КонецФункции + +// Подключенные дисплеи покупателя выводят QR код. +// +// Возвращаемое значение: +// Булево +// +Функция ПодключенныеДисплеиПокупателяВыводятQRКод() Экспорт + + Результат = Ложь; + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + Если Устройство.ДисплейОтображаетQRКод Или Устройство.ДисплейОтображаетГрафику Тогда + Результат = Истина; + Прервать; + КонецЕсли; + КонецЦикла + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Подключенные дисплеи покупателя выводят HTML. +// +// Возвращаемое значение: +// Булево +// +Функция ПодключенныеДисплеиПокупателяВыводятHTML() Экспорт + + Результат = Ложь; + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + Если Устройство.ДисплейОтображаетHTML Тогда + Результат = Истина; + Прервать; + КонецЕсли; + КонецЦикла + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Начать вывод тестовых строк на подключенные дисплеи покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет выведено на все. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыводИнформацииНаДисплейПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("DisplayText", Неопределено, ДополнительныеПараметры, Ложь, Ложь); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, Устройство.Ссылка, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЦикла + КонецЕсли; + + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Начать вывод тестовых строк на подключенные дисплеи покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет выведено на все. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОтображениеИнформацииНаДисплейПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("DisplayInfo", "ОборудованиеДисплеиПокупателя", ДополнительныеПараметры, Истина, Ложь); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, Устройство.Ссылка, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЦикла + КонецЕсли; + + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + + // Начать вывод QR-кода на подключенные дисплеи покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет выведено на все +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыводQRКодаНаДисплейПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("DisplayQRCode", Неопределено, ДополнительныеПараметры, Ложь, Ложь); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, Устройство.Ссылка, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЦикла + КонецЕсли; + + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Начать вывод HTML на подключенные дисплеи покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет выведено на все +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыводHTMLНаДисплейПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("OutputHTML", Неопределено, ДополнительныеПараметры, Ложь, Ложь); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, Устройство.Ссылка, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЦикла + КонецЕсли; + + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Начать очистку подключенных дисплеев покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОчисткуДисплеяПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("ClearText", Неопределено, ДополнительныеПараметры, Ложь, Ложь); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 0 Тогда + Для Каждого Устройство Из ПодключенныеУстройства Цикл + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, Устройство.Ссылка, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЦикла + КонецЕсли; + + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Начать отображение статус операции на подключенные дисплеи покупателя. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет выведено на все +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыводСтатусаОперацииНаДисплейПокупателя(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("DisplayStatus", Неопределено, ДополнительныеПараметры, Ложь, Ложь); + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ДисплейПокупателя = Истина; + ПодключенныеУстройства = МенеджерОборудованияКлиент.ПолучитьПодключенныеУстройства(ПоддерживаемыеТипы); + Если ПодключенныеУстройства.Количество() > 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..3401963 --- /dev/null +++ b/CommonModules/ОборудованиеПлатежныеСистемы/Ext/Module.bsl @@ -0,0 +1,143 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Добавляет в список поставляемые драйверы в составе конфигурации. +// +// Параметры: +// ДрайвераОборудования - см. МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования +// +Процедура ОбновитьПоставляемыеДрайвера(ДрайвераОборудования) Экспорт + + // ++ Локализация + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал; + Драйвер.ИмяДрайвера = "Драйвер1СЭквайринговыеТерминалыСбербанк"; + Драйвер.Наименование = НСтр("ru = '1С:Эквайринговые терминалы Сбербанк'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "SberAcquiringTerminal"; + Драйвер.СнятСПоддержки = Истина; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал; + Драйвер.ИмяДрайвера = "Драйвер1СЭквайринговыеТерминалыСбербанк2х"; + Драйвер.Наименование = НСтр("ru = '1С:Эквайринговые терминалы Сбербанк 2.Х'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "SberAcquiringTerminal2"; + Драйвер.ВерсияДрайвера = "2.6.2.7"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал; + Драйвер.ИмяДрайвера = "ДрайверUCSEFTPOSЭквайринговыеТерминалы"; + Драйвер.Наименование = НСтр("ru = 'UCS-AT:Эквайринговые терминалы'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "UcsAT"; + Драйвер.ВерсияДрайвера = "1.3.2"; + +#Если МобильноеПриложениеСервер Тогда + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ЭквайринговыйТерминал; + Драйвер.ИмяДрайвера = "ДрайверАЗУРПлатежнаяСистема"; + Драйвер.Наименование = НСтр("ru = 'АЗУР:Платежная система'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "com_azurpos_payment_AzurPosPayment"; + Драйвер.ВерсияДрайвера = "1.0.2.1"; +#КонецЕсли + + // -- Локализация + +КонецПроцедуры + +// Подготовить данные операции. +// +// Параметры: +// ПараметрыПодключения - Структура -Параметры подключения +// Команда - Строка - Команда +// ПараметрыОперации - Структура -Параметры операции +// +// Возвращаемое значение: +// Неопределено. +Функция ПодготовитьДанныеОперации(ПараметрыПодключения, Команда, ПараметрыОперации) Экспорт + +КонецФункции + +Процедура ОбработатьДанныеОперации(ПараметрыПодключения, Команда, РезультатВыполнения, ДанныеОперации) Экспорт + + Если Команда = "GetOperationByCards" Тогда + Если РезультатВыполнения.Свойство("РезультатОперацииXML") Тогда + Операции = ОперацииПоКартам(РезультатВыполнения.РезультатОперацииXML); + РезультатВыполнения.Вставить("Операции", Операции); + КонецЕсли; + Иначе + Если РезультатВыполнения.Свойство("ТекстСлипЧека") + И Не ПустаяСтрока(РезультатВыполнения.ТекстСлипЧека) Тогда + + Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда + + МодульОборудованиеЧекопечатающиеУстройства = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройства"); + Если ДанныеОперации.Свойство("ПолныйСлипЧек") И НЕ ДанныеОперации.ПолныйСлипЧек Тогда + ТекстСлипЧека = ОборудованиеПлатежныеСистемыКлиентСервер.ТекстСлипЧекаПоУмолчанию(РезультатВыполнения); + Иначе + ТекстСлипЧека = РезультатВыполнения.ТекстСлипЧека; + КонецЕсли; + ТестовыеЧеки = МодульОборудованиеЧекопечатающиеУстройства.Получить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"); + Результат.Добавить(Операция); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти 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..1eafb55 --- /dev/null +++ b/CommonModules/ОборудованиеПлатежныеСистемыКлиент/Ext/Module.bsl @@ -0,0 +1,253 @@ + +#Область ПрограммныйИнтерфейс + +// АПК: 142-выкл обратная совместимость + +// Выполнить операции на эквайринговом терминале. +// Если эквайринговый терминал не поддерживает печать квитанций на терминале, для печати подключается печатающее устройство. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// ПечатающееУстройство - Неопределено - Печатающее устройство. +// +Процедура НачатьВыполнениеОперацииНаЭквайринговомТерминале(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено, ПечатающееУстройство = Неопределено) Экспорт + + ДанныеДляДополнения = МенеджерОборудованияКлиент.ПечатьСлипЧекаЭквайринговойОперации(); + + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + Для Каждого Элемент Из ДополнительныеПараметры Цикл + ДанныеДляДополнения.Вставить(Элемент.Ключ, Элемент.Значение); + КонецЦикла; + КонецЕсли; + + КонтекстОперации = КонтекстОперацииНаЭквайринговомТерминале(); + КонтекстОперации.ОповещениеПриЗавершении = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторУстройства = ИдентификаторУстройства; + КонтекстОперации.ПечатающееУстройство = ПечатающееУстройство; + КонтекстОперации.ПараметрыОперации = ПараметрыОперации; + КонтекстОперации.ДополнительныеПараметры = ДополнительныеПараметры; + КонтекстОперации.ТипТранзакции = ПараметрыОперации.ТипТранзакции; + КонтекстОперации.ПодготовитьДанные = Ложь; + КонтекстОперации.ОбработатьДанные = Истина; + КонтекстОперации.ОбработатьДанныеПриОшибке = Истина; + КонтекстОперации.ИспользоватьПечатающееУстройство = Истина; + КонтекстОперации.ДополнительныеПараметры = ДанныеДляДополнения; + ПараметрыОперации.Вставить("ПолныйСлипЧек", КонтекстОперации.ДополнительныеПараметры.ПолныйСлипЧек); + + ВыполнениеОперацииНаЭквайринговомТерминале(ИдентификаторУстройства, КонтекстОперации); + +КонецПроцедуры + +// Выполнить сверку итогов на эквайринговом терминале. +// Если эквайринговый терминал не поддерживает печать квитанций на терминале, для печати подключается печатающее устройство. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// ПечатающееУстройство - Неопределено - Печатающее устройство. +// +Процедура НачатьВыполнениеСверкиИтоговНаЭквайринговомТерминале(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено, ПечатающееУстройство = Неопределено) Экспорт + + КонтекстОперации = КонтекстОперацииНаЭквайринговомТерминале(); + КонтекстОперации.ОповещениеПриЗавершении = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторУстройства = ИдентификаторУстройства; + КонтекстОперации.ПечатающееУстройство = ПечатающееУстройство; + КонтекстОперации.ПараметрыОперации = ПараметрыОперации; + КонтекстОперации.ДополнительныеПараметры = ДополнительныеПараметры; + КонтекстОперации.ТипТранзакции = "Settlement"; + КонтекстОперации.ПодготовитьДанные = Ложь; + КонтекстОперации.ОбработатьДанные = Истина; + КонтекстОперации.ИспользоватьПечатающееУстройство = Истина; + + ВыполнениеОперацииНаЭквайринговомТерминале(ИдентификаторУстройства, КонтекстОперации); + +КонецПроцедуры + +// Начать получение операции по картам. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолучениеОперацииПоКартам(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = КонтекстОперацииНаЭквайринговомТерминале(); + КонтекстОперации.ОповещениеПриЗавершении = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторУстройства = ИдентификаторУстройства; + КонтекстОперации.ПараметрыОперации = ПараметрыОперации; + КонтекстОперации.ДополнительныеПараметры = ДополнительныеПараметры; + КонтекстОперации.ТипТранзакции = "GetOperationByCards"; + КонтекстОперации.ПодготовитьДанные = Ложь; + КонтекстОперации.ОбработатьДанные = Истина; + + ВыполнениеОперацииНаЭквайринговомТерминале(ИдентификаторУстройства, КонтекстОперации); + +КонецПроцедуры + +// АПК: 142-вкл + +// Начать получение параметров карты. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолучениеПараметровКарты(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = КонтекстОперацииНаЭквайринговомТерминале(); + КонтекстОперации.ОповещениеПриЗавершении = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторУстройства = ИдентификаторУстройства; + КонтекстОперации.ПечатающееУстройство = Неопределено; + КонтекстОперации.ПараметрыОперации = ПараметрыОперации; + КонтекстОперации.ДополнительныеПараметры = ДополнительныеПараметры; + КонтекстОперации.ТипТранзакции = "GetCardParametrs"; + КонтекстОперации.ПодготовитьДанные = Ложь; + КонтекстОперации.ОбработатьДанные = Ложь; + КонтекстОперации.ИспользоватьПечатающееУстройство = Ложь; + + ВыполнениеОперацииНаЭквайринговомТерминале(ИдентификаторУстройства, КонтекстОперации); + +КонецПроцедуры + +// Начать выполнение аварийной отмена операции. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьВыполнениеАварийнойОтменыОперации(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = КонтекстОперацииНаЭквайринговомТерминале(); + КонтекстОперации.ОповещениеПриЗавершении = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторУстройства = ИдентификаторУстройства; + КонтекстОперации.ПечатающееУстройство = Неопределено; + КонтекстОперации.ПараметрыОперации = ПараметрыОперации; + КонтекстОперации.ДополнительныеПараметры = ДополнительныеПараметры; + КонтекстОперации.ТипТранзакции = "EmergencyVoid"; + КонтекстОперации.ПодготовитьДанные = Ложь; + КонтекстОперации.ОбработатьДанные = Ложь; + КонтекстОперации.ОбработатьДанныеПриОшибке = Ложь; + КонтекстОперации.ИспользоватьПечатающееУстройство = Ложь; + + ВыполнениеОперацииНаЭквайринговомТерминале(ИдентификаторУстройства, КонтекстОперации); + +КонецПроцедуры + +// Возвращает строку последнего слип-чека +// +// Возвращаемое значение: +// Строка +Функция ПоследнийСлипЧек() Экспорт + + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + Возврат ПодключаемоеОборудование.ПоследнийСлипЧек; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Устанавливает строку последнего слип-чека +// +// Параметры: +// ТекстСлипЧека - Строка +Процедура УстановитьПоследнийСлипЧек(ТекстСлипЧека) Экспорт + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + ПодключаемоеОборудование.ПоследнийСлипЧек = ТекстСлипЧека; +КонецПроцедуры + +#КонецОбласти + + +#Область СлужебныеПроцедурыИФункции + +Функция КонтекстОперацииНаЭквайринговомТерминале() + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", Неопределено); + КонтекстОперации.Вставить("ИдентификаторКлиента" , Неопределено); + КонтекстОперации.Вставить("ИдентификаторУстройства", Неопределено); + КонтекстОперации.Вставить("ПечатающееУстройство" , Неопределено); + КонтекстОперации.Вставить("ПараметрыОперации" , Неопределено); + КонтекстОперации.Вставить("ДополнительныеПараметры", Неопределено); + КонтекстОперации.Вставить("ТипТранзакции" , Неопределено); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанныеПриОшибке", Ложь); + КонтекстОперации.Вставить("ИспользоватьПечатающееУстройство", Ложь); + КонтекстОперации.Вставить("Результат" , Истина); + Возврат КонтекстОперации; + +КонецФункции + +Процедура ВыполнениеОперацииНаЭквайринговомТерминале(ИдентификаторУстройства, КонтекстОперации) + + Если ИдентификаторУстройства = Неопределено Или ПустаяСтрока(ИдентификаторУстройства) Тогда + + ПоддерживаемыеТипы = МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования(); + ПоддерживаемыеТипы.ЭквайринговыйТерминал = Истина; + + Оповещение = Новый ОписаниеОповещения("ВыполнениеОперацииНаЭквайринговомТерминалеЗавершение", ЭтотОбъект, КонтекстОперации); + МенеджерОборудованияКлиент.ВыбратьУстройство(Оповещение, ПоддерживаемыеТипы, + НСтр("ru='Выберите эквайринговый терминал'"), + НСтр("ru='Эквайринговый терминал не подключен.'"), + НСтр("ru='Эквайринговый терминал не выбран.'")); + Иначе + ВыполнениеОперацииНаЭквайринговомТерминалеЗавершение(КонтекстОперации, КонтекстОперации); + КонецЕсли + +КонецПроцедуры + +Процедура ВыполнениеОперацииНаЭквайринговомТерминалеЗавершение(РезультатВыбора, КонтекстОперации) Экспорт + + Если РезультатВыбора.Результат Тогда + + Если КонтекстОперации.ПараметрыОперации <> Неопределено Тогда + Если КонтекстОперации.ПараметрыОперации.Свойство("РеквизитыКарты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..a38a5b7 --- /dev/null +++ b/CommonModules/ОборудованиеПлатежныеСистемыКлиентСервер/Ext/Module.bsl @@ -0,0 +1,143 @@ + +#Область ПрограммныйИнтерфейс + +// Заполняет структуру параметров карты. +// +// Возвращаемое значение: +// Структура. +Функция ПараметрыКарты() Экспорт; + + Результат = Новый Структура(); + + Результат.Вставить("ОтПоследнейОперации"); + Результат.Вставить("НомерКарты"); // Строка - Маскированный номер карты. + Результат.Вставить("ХешНомерКарты"); // Строка - PAN карты хешированном по алгоритму SHA256 виде. + Результат.Вставить("ТипКарты"); // Строка - Тип карты (VISA,MasterCard). + Результат.Вставить("СвояКарта"); // Булево - Карта банка которые предоставляет услуги эквайринга. + + Возврат Результат; + +КонецФункции + +// Заполняет структуру получение параметров карты. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыПолучениеПараметровКарты() Экспорт; + + Результат = Новый Структура(); + Результат.Вставить("ОтПоследнейОперации", Ложь); + Результат.Вставить("РеквизитыКартыQR"); // Строка,Необязательно - Отсканированный QR-код с мобильном устройства держателя карты, в котором содержатся EMV-реквизиты карты или токена. + Возврат Результат; + +КонецФункции + +// Заполняет структуру параметров выполнения эквайринговой операции. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыВыполненияЭквайринговойОперации() Экспорт; + + Результат = Новый Структура(); + Результат.Вставить("ТипТранзакции"); // Строка,Обязательно - Тип транзакции. + Результат.Вставить("РеквизитыКартыQR"); // Строка,Необязательно - Отсканированный QR-код с мобильном устройства держателя карты, в котором содержатся EMV-реквизиты карты или токена. + Результат.Вставить("СуммаОперации", 0); // Число,Обязательно - Сумма операции. + Результат.Вставить("СуммаОригинальнойОперации", 0); // Число,Необязательно - Сумма оригинальной операции. + Результат.Вставить("СуммаНаличных", 0); // Число,Необязательно - Сумма выдаваемых наличных. + Результат.Вставить("НомерМерчанта"); // Целое,Необязательно - Номер мерчанта доступного для данного эквайрингового терминала. + Результат.Вставить("НомерКарты"); // Строка,Необязательно - Маскированный номер карты. + Результат.Вставить("НомерЧека"); // Строка,Необязательно - Номер чека. + Результат.Вставить("НомерЧекаЭТ"); // Строка,Необязательно - Номер чека эквайрингового терминала. + Результат.Вставить("СсылочныйНомер"); // Строка,Необязательно - Уникальный код транзакции RRN. + Результат.Вставить("КодАвторизации"); // Строка,Необязательно - Код авторизации транзакции. + Результат.Вставить("ТекстСлипЧека"); // Строка,Необязательно - Текст квитанции, сформированный Эквайринговым ПО. + // Параметры выполнения эквайринговой операции 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..7c83106 --- /dev/null +++ b/CommonModules/ОборудованиеУстройстваВвода/Ext/Module.bsl @@ -0,0 +1,74 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Добавляет в список поставляемые драйверы в составе конфигурации. +// +// Параметры: +// ДрайвераОборудования - см. МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования +// +Процедура ОбновитьПоставляемыеДрайвера(ДрайвераОборудования) Экспорт + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "Драйвер1ССканерыШтрихкодаNative"; + Драйвер.Наименование = НСтр("ru = '1С:Сканеры штрихкода (Native Api)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "InputDevice"; + Драйвер.ВерсияДрайвера = "10.4.2.5"; + Драйвер.ИмяМакетаДрайвера = "Драйвер1СУстройстваВводаNative"; + + // ++ Локализация +#Если МобильноеПриложениеСервер Тогда + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверRightScanУстройстваВвода"; + Драйвер.Наименование = НСтр("ru = 'RightScan:Устройства ввода данных ТСД Urovo'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "RSDriver"; + Драйвер.ВерсияДрайвера = "1.20"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверСканкодСканерШтрихкода"; + Драйвер.Наименование = НСтр("ru = 'Сканкод:Cканер штрихкода Chipherlab ТСД'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ScancodeBarcodeScannerCPT"; + Драйвер.ВерсияДрайвера = "1.2.1.1"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверScanPortУстройстваВвода"; + Драйвер.Наименование = НСтр("ru = 'ScanPort:Устройства ввода данных ТСД'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ScanportScanner"; + Драйвер.ВерсияДрайвера = "5.0.0.0"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверСканситиУстройстваВвода"; + Драйвер.Наименование = НСтр("ru = 'Скансити:Устройства ввода данных ТСД'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ScanCityNewlandBarcode"; + Драйвер.ВерсияДрайвера = "1.0.1.3"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверКлеверенсСканерШтрихкода"; + Драйвер.Наименование = НСтр("ru = 'Клеверенс:Драйвер ТСД для мобильной платформы 1С'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "CleverenceBarcodeScanner"; + Драйвер.ВерсияДрайвера = "1.1.0.6"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверАТОЛСканерШтрихкода"; + Драйвер.Наименование = НСтр("ru = 'АТОЛ:Устройства ввода данных ТСД'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ru_atol_BarcodeServiceExtension"; + Драйвер.ВерсияДрайвера = "1.0.6.0"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода; + Драйвер.ИмяДрайвера = "ДрайверMERTECHСканерШтрихкода"; + Драйвер.Наименование = НСтр("ru = 'MERTECH:Сканер штрихкода ТСД'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ru_mertech_AndroidScannerExtension"; + Драйвер.ВерсияДрайвера = "1.1.0.0"; +#КонецЕсли + // -- Локализация + +КонецПроцедуры + +#КонецОбласти 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..baa6ca6 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройства/Ext/Module.bsl @@ -0,0 +1,4948 @@ + +#Область ПрограммныйИнтерфейс + +// Заполнить структуру фискализации чека +// +// Возвращаемое значение: +// Структура. +Функция ПараметрыФискализацииЧека() Экспорт + + ПараметрыФискализации = Новый Структура(); + + ПараметрыФискализации.Вставить("Кассир"); + ПараметрыФискализации.Вставить("КассирИНН"); + + ПараметрыФискализации.Вставить("ДокументОснование"); + ПараметрыФискализации.Вставить("ИдентификаторФискальнойЗаписи"); + + ПараметрыФискализации.Вставить("Организация"); + ПараметрыФискализации.Вставить("ТорговыйОбъект"); + ПараметрыФискализации.Вставить("КорректируемыйДокумент"); + ПараметрыФискализации.Вставить("ЕстьПерсональныеДанные", Ложь); + ПараметрыФискализации.Вставить("СубъектПерсональныхДанных"); + ПараметрыФискализации.Вставить("ТипПерсональныхДанных"); + + ПараметрыФискализации.Вставить("ТипРасчета"); + ПараметрыФискализации.Вставить("ТипДокумента"); + ПараметрыФискализации.Вставить("ТипИнкассации"); + + ПараметрыФискализации.Вставить("РевизияИнтерфейса"); + ПараметрыФискализации.Вставить("ШиринаСтроки"); + ПараметрыФискализации.Вставить("РегистрационныйНомерККТ"); + ПараметрыФискализации.Вставить("ЗаводскойНомерФН"); + ПараметрыФискализации.Вставить("ДополнительныйРеквизит"); + + ПараметрыФискализации.Вставить("НомерСменыККТ" , 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Строка(СтруктураПараметров.КассирИНН), ""))); + // Код причины перерегистрации. + ЗаписьXML.ЗаписатьАтрибут("RegistrationReasonCode", XMLСтрока(СтруктураПараметров.КодПричиныПеререгистрации)); + // Коды причин изменения сведений о ККТ. + Если Не ПустаяСтрока(СтруктураПараметров.КодыПричинИзмененияСведений) Тогда + ЗаписьXML.ЗаписатьАтрибут("RegistrationLabelCodes", 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Строка(ТекущаяПозиция.НомерСекции)); // Отдел, по которому ведется продажа + + Если НЕ ПустаяСтрока(ТекущаяПозиция.СтавкаНДС) Тогда + Если ТекущаяПозиция.СтавкаНДС = 118 Тогда + ЗначениеСтавкаНДС = "18/118"; + ИначеЕсли ТекущаяПозиция.СтавкаНДС = 110 Тогда + ЗначениеСтавкаНДС = "10/110"; + ИначеЕсли ТекущаяПозиция.СтавкаНДС = 120 Тогда + ЗначениеСтавкаНДС = "20/120"; + Иначе + ЗначениеСтавкаНДС = ТекущаяПозиция.СтавкаНДС; + КонецЕсли; + Иначе + ЗначениеСтавкаНДС = "none"; + КонецЕсли; + + ЗаписьXML.ЗаписатьАтрибут("VATRate", XMLСтрока(ЗначениеСтавкаНДС)); // Ставка НДС + Если ТекущаяПозиция.Свойство("СуммаНДС") Тогда + Запись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.ЗаписатьКонецЭлемента(); + КонецЕсли; + + ИначеЕсли ПараметрыФискализации.РевизияИнтерфейса > 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Строка(ТекущаяПозиция.НомерСекции)); + + Если НЕ ПустаяСтрока(ТекущаяПозиция.СтавкаНДС) Тогда + Если ТекущаяПозиция.СтавкаНДС = 118 Тогда + ЗначениеСтавкаНДС = "18/118"; + ИначеЕсли ТекущаяПозиция.СтавкаНДС = 110 Тогда + ЗначениеСтавкаНДС = "10/110"; + ИначеЕсли ТекущаяПозиция.СтавкаНДС = 120 Тогда + ЗначениеСтавкаНДС = "20/120"; + Иначе + ЗначениеСтавкаНДС = ТекущаяПозиция.СтавкаНДС; + КонецЕсли; + Иначе + ЗначениеСтавкаНДС = "none"; + КонецЕсли; + ЗаписьXML.ЗаписатьАтрибут("Tax", XMLСтрока(ЗначениеСтавкаНДС)); + + Если ТекущаяПозиция.Свойство("ПризнакСпособаРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакСпособаРасчета) Тогда + ПризнакСпособаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаСпособаРасчета(ТекущаяПозиция.ПризнакСпособаРасчета); + ЗаписьXML.ЗаписатьАтрибут("SignMethodCalculation", XMLСтрока(ПризнакСпособаРасчета)); + КонецЕсли; + Если ТекущаяПозиция.Свойство("ПризнакПредметаРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакПредметаРасчета) Тогда + ПризнакПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаПредметаРасчета(ТекущаяПозиция.ПризнакПредметаРасчета); + Если ПризнакПредметаРасчета <> Неопределено Тогда + ЗаписьXML.ЗаписатьАтрибут("SignCalculationObject", XMLСтрока(ПризнакПредметаРасчета)); + КонецЕсли; + КонецЕсли; + + Если ТекущаяПозиция.Свойство("СуммаНДС") И НЕ ПустаяСтрока(ТекущаяПозиция.СуммаНДС) Тогда + ЗаписьXML.ЗаписатьАтрибут("TaxSum", 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ПакетДляЧекаКоррекции(ОбщиеПараметры, ПараметрыФискализации) Экспорт + + Если ПараметрыФискализации.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + + СформироватьXMLПакетДляФискализацияЧека(ОбщиеПараметры, ПараметрыФискализации); + + Иначе + ТипРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодРасчетаДенежнымиСредствами(ОбщиеПараметры.ТипРасчета); + СистемаНалогообложения = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодСистемыНалогообложенияККТ(ОбщиеПараметры.СистемаНалогообложения); + + ЗаписьXML = Новый ЗаписьXML(); + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("CheckCorrectionPackage"); + ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters"); + ЗаписьXML.ЗаписатьАтрибут("PaymentType", XMLСтрока(ТипРасчета)); + ЗаписьXML.ЗаписатьАтрибут("TaxVariant" , XMLСтрока(СистемаНалогообложения)); + ЗаписьXML.ЗаписатьАтрибут("CashierName", XMLСтрока(ОбщиеПараметры.Кассир)); + ЗаписьXML.ЗаписатьАтрибут("CashierVATIN", ?(ОбщиеПараметры.Свойство("КассирИНН"), XMLСтрока(ОбщиеПараметры.КассирИНН), "")); + + Если ОбщиеПараметры.Свойство("ДанныеКоррекции") Тогда + ДанныеКоррекции = ОбщиеПараметры.ДанныеКоррекции; + ТипКоррекции = ?(ПустаяСтрока(ДанныеКоррекции.ТипКоррекции), 0, ДанныеКоррекции.ТипКоррекции); + ЗаписьXML.ЗаписатьАтрибут("CorrectionType", XMLСтрока(ТипКоррекции)); + Если Не ПустаяСтрока(ДанныеКоррекции.ДатаКоррекции) Тогда + ЗаписьXML.ЗаписатьАтрибут("CorrectionBaseDate", XMLСтрока(НачалоДня(ДанныеКоррекции.ДатаКоррекции))); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеКоррекции.НомерПредписания) Тогда + ЗаписьXML.ЗаписатьАтрибут("CorrectionBaseNumber", XMLСтрока(ДанныеКоррекции.НомерПредписания)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеКоррекции.ОписаниеКоррекции) Тогда + ЗаписьXML.ЗаписатьАтрибут("CorrectionBaseName", XMLСтрока(ДанныеКоррекции.ОписаниеКоррекции)); + КонецЕсли; + КонецЕсли; + + Если ОбщиеПараметры.Свойство("ДополнительныйРеквизит") И НЕ ПустаяСтрока(ОбщиеПараметры.ДополнительныйРеквизит) Тогда + ЗаписьXML.ЗаписатьАтрибут("AdditionalAttribute", XMLСтрока(ОбщиеПараметры.ДополнительныйРеквизит)); + КонецЕсли; + + СуммаЧека = 0; + СуммаНДС10 = 0; + СуммаНДС18 = 0; + СуммаНДС20 = 0; + СуммаНДС110 = 0; + СуммаНДС118 = 0; + СуммаНДС120 = 0; + СуммаНДС0 = 0; + СуммаБезНДС = 0; + + Если ОбщиеПараметры.ПозицииЧека <> Неопределено Тогда + Для ИндексМассива = 0 По ОбщиеПараметры.ПозицииЧека.Количество() - 1 Цикл + ПозицияЧека = ОбщиеПараметры.ПозицииЧека[ИндексМассива]; + Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда + + СуммаЧека = СуммаЧека + ПозицияЧека.Сумма; // Сумма позиции + СтавкаНДС = ПозицияЧека.СтавкаНДС; // Ставка НДС + СуммаНДС = ?(ПустаяСтрока(ПозицияЧека.СуммаНДС), 0, ПозицияЧека.СуммаНДС); // Сумма НДС + Если СтавкаНДС = 10 Тогда + СуммаНДС10 = СуммаНДС10 + ?(СуммаНДС > 0, СуммаНДС, ПозицияЧека.Сумма / 110 * 10); + ИначеЕсли СтавкаНДС = 18 Тогда + СуммаНДС18 = СуммаНДС18 + ?(СуммаНДС > 0, СуммаНДС, ПозицияЧека.Сумма / 118 * 18); + ИначеЕсли СтавкаНДС = 20 Тогда + СуммаНДС20 = СуммаНДС20 + ?(СуммаНДС > 0, СуммаНДС, ПозицияЧека.Сумма / 120 * 20); + ИначеЕсли СтавкаНДС = 0 Тогда + СуммаНДС0 = СуммаНДС0 + ПозицияЧека.Сумма; + ИначеЕсли СтавкаНДС = 110 Тогда + СуммаНДС110 = СуммаНДС110 + ?(СуммаНДС > 0, СуммаНДС, ПозицияЧека.Сумма / 110 * 10); + ИначеЕсли СтавкаНДС = 118 Тогда + СуммаНДС118 = СуммаНДС118 + ?(СуммаНДС > 0, СуммаНДС, ПозицияЧека.Сумма / 118 * 18); + ИначеЕсли СтавкаНДС = 120 Тогда + СуммаНДС120 = СуммаНДС120 + ?(СуммаНДС > 0, СуммаНДС, ПозицияЧека.Сумма / 120 * 20); + Иначе + СуммаБезНДС = СуммаБезНДС + ПозицияЧека.Сумма; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + СуммаНаличные = 0; + СуммаЭлектронно = 0; + СуммаПостоплата = 0; + СуммаПредоплата = 0; + СуммаПредоставление = 0; + ТаблицаОплат = ОбщиеПараметры.ТаблицаОплат; + Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл + Если ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно") Тогда + СуммаЭлектронно = СуммаЭлектронно + ТаблицаОплат[ИндексОплаты].Сумма; + ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Предоплата") Тогда + СуммаПредоплата = СуммаПредоплата + ТаблицаОплат[ИндексОплаты].Сумма; + ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Постоплата") Тогда + СуммаПостоплата = СуммаПостоплата + ТаблицаОплат[ИндексОплаты].Сумма; + ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.ВстречноеПредоставление") Тогда + СуммаПредоставление = СуммаПредоставление + ТаблицаОплат[ИндексОплаты].Сумма; + Иначе + СуммаНаличные = СуммаНаличные + ТаблицаОплат[ИндексОплаты].Сумма; + КонецЕсли; + КонецЦикла; + + ЗаписьXML.ЗаписатьАтрибут("Sum" , XMLСтрока(СуммаЧека)); + ЗаписьXML.ЗаписатьАтрибут("SumTAXNone", XMLСтрока(СуммаБезНДС)); + ЗаписьXML.ЗаписатьАтрибут("SumTAX0" , XMLСтрока(Окр(СуммаНДС0, 2))); + ЗаписьXML.ЗаписатьАтрибут("SumTAX10" , XMLСтрока(Окр(СуммаНДС10, 2))); + ЗаписьXML.ЗаписатьАтрибут("SumTAX18" , XMLСтрока(Окр(СуммаНДС18, 2))); + ЗаписьXML.ЗаписатьАтрибут("SumTAX20" , XMLСтрока(Окр(СуммаНДС20, 2))); + ЗаписьXML.ЗаписатьАтрибут("SumTAX110" , XMLСтрока(Окр(СуммаНДС110, 2))); + ЗаписьXML.ЗаписатьАтрибут("SumTAX118" , XMLСтрока(Окр(СуммаНДС118, 2))); + ЗаписьXML.ЗаписатьАтрибут("SumTAX120" , XMLСтрока(Окр(СуммаНДС120, 2))); + Запись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ПакетДляОперации(ОбщиеПараметры, РевизияИнтерфейса = 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.ЗначениеАтрибута("FNError")) = "TRUE"; + Параметры.ПамятьФНПереполнена = ВРег(ЧтениеXML.ЗначениеАтрибута("FNOverflow")) = "TRUE"; + Параметры.РесурсФНИсчерпан = ВРег(ЧтениеXML.ЗначениеАтрибута("FNFail")) = "TRUE"; + КоличествоНепереданныхФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentsCounter"); + Параметры.КоличествоНепереданныхФД = ?(ПустаяСтрока(КоличествоНепереданныхФД), 0, Число(КоличествоНепереданныхФД)); + Параметры.НомерПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstNumber"); + ДатаПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstDateTime"); + Если НЕ ПустаяСтрока(ДатаПервогоНепереданногоФД) Тогда + Параметры.ДатаПервогоНепереданногоФД = 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) Экспорт + + ОбщиеПараметры = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииЧекаКоррекции(); + + СтавкиНДС = Новый Соответствие(); + СтавкиНДС.Вставить("10", 10); + СтавкиНДС.Вставить("18", 18); + СтавкиНДС.Вставить("20", 20); + СтавкиНДС.Вставить("0", 0); + СтавкиНДС.Вставить("10/110", 110); + СтавкиНДС.Вставить("18/118", 118); + СтавкиНДС.Вставить("20/120", 120); + СтавкиНДС.Вставить("none", Неопределено); + ФискальнаяСтрока = Неопределено; + СуммаЧека = 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Атрибута(Чтение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.Имя = "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.Имя = "CheckCorrectionPackage" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + ТипРасчета = ЧтениеXML.ЗначениеАтрибута("PaymentType"); + ОбщиеПараметры.ТипРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.РасчетДенежнымиСредствамиПоКоду(Число(ТипРасчета)); + + ОбщиеПараметры.Кассир = ЧтениеXML.ЗначениеАтрибута("CashierName"); + ОбщиеПараметры.КассирИНН = ЧтениеXML.ЗначениеАтрибута("CashierVATIN"); + + СистемаНалогообложения = ЧтениеXML.ЗначениеАтрибута("TaxVariant"); + ОбщиеПараметры.СистемаНалогообложения = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СистемаНалогообложенияККТПоКоду(Число(СистемаНалогообложения)); + + СуммаДокумента = Число(ЗначениеXMLАтрибута(ЧтениеXML, "Sum" , , 0)); + СуммаБезНДС = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SumTAXNone", , 0)); + СуммаНДС0 = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SumTAX0" , , 0)); + + СуммаНДС10 = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SumTAX10" , , 0)); + СуммаНДС18 = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SumTAX18" , , 0)); + СуммаНДС20 = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SumTAX20" , , 0)); + СуммаНДС110 = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SumTAX110" , , 0)); + СуммаНДС118 = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SumTAX118" , , 0)); + СуммаНДС120 = Число(ЗначениеXMLАтрибута(ЧтениеXML, "SumTAX120" , , 0)); + + Если СуммаБезНДС > 0 Тогда + ФискальнаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека(); + ФискальнаяСтрока.Наименование = НСтр("ru='Фискальная позиция без НДС'"); + ФискальнаяСтрока.Количество = 1; + ФискальнаяСтрока.ЦенаСоСкидками = СуммаБезНДС; + ФискальнаяСтрока.Сумма = ФискальнаяСтрока.ЦенаСоСкидками; + ФискальнаяСтрока.СтавкаНДС = Неопределено; + ОбщиеПараметры.ПозицииЧека.Добавить(ФискальнаяСтрока); + КонецЕсли; + + Если СуммаНДС0 > 0 Тогда + ФискальнаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека(); + ФискальнаяСтрока.Наименование = НСтр("ru='Фискальная позиция НДС 0%'"); + ФискальнаяСтрока.Количество = 1; + ФискальнаяСтрока.ЦенаСоСкидками = СуммаНДС0; + ФискальнаяСтрока.Сумма = ФискальнаяСтрока.ЦенаСоСкидками; + ФискальнаяСтрока.СтавкаНДС = 0; + ОбщиеПараметры.ПозицииЧека.Добавить(ФискальнаяСтрока); + КонецЕсли; + + Если СуммаНДС10 > 0 Тогда + ФискальнаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека(); + ФискальнаяСтрока.Наименование = НСтр("ru='Фискальная позиция НДС 10%'"); + ФискальнаяСтрока.Количество = 1; + ФискальнаяСтрока.ЦенаСоСкидками = Мин(СуммаНДС10 * 110 / 10, СуммаДокумента); + ФискальнаяСтрока.Сумма = ФискальнаяСтрока.ЦенаСоСкидками; + ФискальнаяСтрока.СтавкаНДС = 10; + ОбщиеПараметры.ПозицииЧека.Добавить(ФискальнаяСтрока); + КонецЕсли; + + Если СуммаНДС20 > 0 Тогда + ФискальнаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека(); + ФискальнаяСтрока.Наименование = НСтр("ru='Фискальная позиция НДС 20%'"); + ФискальнаяСтрока.Количество = 1; + ФискальнаяСтрока.ЦенаСоСкидками = Мин(СуммаНДС20 * 120 / 20, СуммаДокумента); + ФискальнаяСтрока.Сумма = ФискальнаяСтрока.ЦенаСоСкидками; + ФискальнаяСтрока.СтавкаНДС = 20; + ОбщиеПараметры.ПозицииЧека.Добавить(ФискальнаяСтрока); + КонецЕсли; + + Если СуммаНДС18 > 0 Тогда + ФискальнаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека(); + ФискальнаяСтрока.Наименование = НСтр("ru='Фискальная позиция НДС 18%'"); + ФискальнаяСтрока.Количество = 1; + ФискальнаяСтрока.ЦенаСоСкидками = Мин(СуммаНДС18 * 118 / 18, СуммаДокумента); + ФискальнаяСтрока.Сумма = ФискальнаяСтрока.ЦенаСоСкидками; + ФискальнаяСтрока.СтавкаНДС = 18; + ОбщиеПараметры.ПозицииЧека.Добавить(ФискальнаяСтрока); + КонецЕсли; + + Если СуммаНДС110 > 0 Тогда + ФискальнаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека(); + ФискальнаяСтрока.Наименование = НСтр("ru='Фискальная позиция НДС 10/110'"); + ФискальнаяСтрока.Количество = 1; + ФискальнаяСтрока.ЦенаСоСкидками = Мин(СуммаНДС110 * 110 / 10, СуммаДокумента); + ФискальнаяСтрока.Сумма = ФискальнаяСтрока.ЦенаСоСкидками; + ФискальнаяСтрока.СтавкаНДС = 110; + ОбщиеПараметры.ПозицииЧека.Добавить(ФискальнаяСтрока); + КонецЕсли; + + Если СуммаНДС120 > 0 Тогда + ФискальнаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека(); + ФискальнаяСтрока.Наименование = НСтр("ru='Фискальная позиция НДС 20/120'"); + ФискальнаяСтрока.Количество = 1; + ФискальнаяСтрока.ЦенаСоСкидками = Мин(СуммаНДС120 * 120 / 20, СуммаДокумента); + ФискальнаяСтрока.Сумма = ФискальнаяСтрока.ЦенаСоСкидками; + ФискальнаяСтрока.СтавкаНДС = 120; + ОбщиеПараметры.ПозицииЧека.Добавить(ФискальнаяСтрока); + КонецЕсли; + + Если СуммаНДС118 > 0 Тогда + ФискальнаяСтрока = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека(); + ФискальнаяСтрока.Наименование = НСтр("ru='Фискальная позиция НДС 18/118'"); + ФискальнаяСтрока.Количество = 1; + ФискальнаяСтрока.ЦенаСоСкидками = Мин(СуммаНДС118 * 118 / 18, СуммаДокумента); + ФискальнаяСтрока.Сумма = ФискальнаяСтрока.ЦенаСоСкидками; + ФискальнаяСтрока.СтавкаНДС = 118; + ОбщиеПараметры.ПозицииЧека.Добавить(ФискальнаяСтрока); + КонецЕсли; + + СуммаПозиций = 0; + Для Каждого ПозицияЧека Из ОбщиеПараметры.ПозицииЧека Цикл + СуммаПозиций = СуммаПозиций + ПозицияЧека.Сумма; + КонецЦикла; + + Если СуммаПозиций > СуммаДокумента Тогда + Пока СуммаПозиций > СуммаДокумента Цикл + Для Каждого ПозицияЧека Из ОбщиеПараметры.ПозицииЧека Цикл + Если ПозицияЧека.СтавкаНДС <> 0 И ПозицияЧека.СтавкаНДС <> Неопределено Тогда + ПозицияЧека.Сумма = ПозицияЧека.Сумма - 0.01; + ПозицияЧека.ЦенаСоСкидками = ПозицияЧека.Сумма; + СуммаПозиций = 0; + Для Каждого ПозицияЧека Из ОбщиеПараметры.ПозицииЧека Цикл + СуммаПозиций = СуммаПозиций + ПозицияЧека.Сумма; + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецЦикла; + Иначе + Пока СуммаДокумента > СуммаПозиций Цикл + Для Каждого ПозицияЧека Из ОбщиеПараметры.ПозицииЧека Цикл + Если ПозицияЧека.СтавкаНДС <> 0 И ПозицияЧека.СтавкаНДС <> Неопределено Тогда + ПозицияЧека.Сумма = ПозицияЧека.Сумма + 0.01; + ПозицияЧека.ЦенаСоСкидками = ПозицияЧека.Сумма; + СуммаПозиций = 0; + Для Каждого ПозицияЧека Из ОбщиеПараметры.ПозицииЧека Цикл + СуммаПозиций = СуммаПозиций + ПозицияЧека.Сумма; + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Если Чтение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 +// см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// РеквизитыЧека - Структура - параметры фискального документа из регистра сведений фискальные документы +// см. ДанныеФискальнойОперации() +// ФорматФФД - Строка - формат фискальных данных, влияет на вывод таблицы оплаты при "1.0" +// используются только виды оплат "НАЛИЧНЫМИ", "ЭЛЕКТРОННО" +// +// Возвращаемое значение: +// ТабличныйДокумент - табличный документ со сформированным фискальным документом, может быть сохранен в любой формат. +// +Функция СформироватьФискальныйДокумент(ТипДокумента, ОбщиеПараметры, РеквизитыЧека, ФорматФФД = "1.1") Экспорт + + Контекст = ПараметрыВыводЧека(); + Контекст.ФорматФФД = ФорматФФД; + + ВывестиДополнительнуюСтроку(Контекст, Контекст.ДополнительнаяСтрокаШапка); + + ВывестиРазделитель(Контекст, "НетЛинии"); + ВывестиРазделитель(Контекст, "Двойная"); + + ВывестиШапкуЧека(Контекст, ОбщиеПараметры, ТипДокумента); + ВывестиПозицииЧека(Контекст, ОбщиеПараметры); + ВывестиТаблицуОплат(Контекст, ОбщиеПараметры); + + ВывестиРазделитель(Контекст, "Двойная"); + ВывестиРазделитель(Контекст, "НетЛинии"); + + ВывестиРеквизитыЧека(Контекст, ОбщиеПараметры, РеквизитыЧека); + ВывестиСтрокуПоЦентру(Контекст, ОбщиеПараметры.ТекстПодвала); + + ВывестиРазделитель(Контекст, "Двойная"); + ВывестиРазделитель(Контекст, "НетЛинии"); + + ВывестиДополнительнуюСтроку(Контекст, Контекст.ДополнительнаяСтрокаПодвал); + + Возврат Контекст.ТабличныйДокумент; + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодТовараИдентифицируетЭкземпляр. +// Идентифицирует ли код товара (значение тега 1162) экземпляр товара. +// +// Параметры: +// РеквизитКодаТовара - Строка - Значение реквизита кода товара в BASE64. +// ШтриховойКодТовара - Строка - Штриховой код товара. +// +// Возвращаемое значение: +// Булево - Истина - Если код товара идентифицирует экземпляр товара. +// +Функция КодТовараИдентифицируетЭкземпляр(Знач РеквизитКодаТовара = Неопределено, Знач ШтриховойКодТовара = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.КодТовараИдентифицируетЭкземпляр(РеквизитКодаТовара, ШтриховойКодТовара); + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать ШаблонЧека. +// Функция формирует шаблон чека. +// +// Параметры: +// ОбщиеПараметры - Структура - см.ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека(). +// ТипОборудования - Строка - типы оборудования строкой. +// ДополнительныйТекст - Строка - дополнительный текст шаблона чека. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование +// +// Возвращаемое значение: +// Структура. +Функция СформироватьШаблонЧека(ОбщиеПараметры, ТипОборудования, ДополнительныйТекст = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт + + Возврат ШаблонЧека(ОбщиеПараметры, ТипОборудования, ДополнительныйТекст, ИдентификаторУстройства); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Добавляет в список поставляемые драйверы в составе конфигурации. +// +// Параметры: +// ДрайвераОборудования - см. МенеджерОборудования.НоваяТаблицаПоставляемыхДрайверовОборудования +// +Процедура ОбновитьПоставляемыеДрайвера(ДрайвераОборудования) Экспорт + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков; + Драйвер.ИмяДрайвера = "Драйвер1СПринтерЧеков"; + Драйвер.Наименование = НСтр("ru = '1С:Принтер чеков'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ReceiptPrinterNative"; + Драйвер.ВерсияДрайвера = "3.1.4.6"; + + // ++ Локализация +#Если МобильноеПриложениеСервер Тогда + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков; + Драйвер.ИмяДрайвера = "ДрайверRightScanУстройствоПечати"; + Драйвер.Наименование = НСтр("ru = 'RightScan:Устройство печати ТСД Urovo'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "RSPrinter"; + Драйвер.ВерсияДрайвера = "1.15"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверRightScanККТ54ФЗ"; + Драйвер.Наименование = НСтр("ru = 'RightScan:ККТ с передачей данных в ОФД (54-ФЗ)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "FNCore"; + Драйвер.ВерсияДрайвера = "1.23"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверАЗУРККТ54ФЗФФД12"; + Драйвер.Наименование = НСтр("ru = 'АЗУР:ККТ с передачей данных в ОФД (ФФД 1.2)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "com_azurpos_fz54_AzurPos"; + Драйвер.ВерсияДрайвера = "1.1.1.0"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверВерсияТККТ54ФЗ"; + Драйвер.Наименование = НСтр("ru = 'Версия-Т:ККТ с передачей данных в ОФД (54-ФЗ)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "VT_KKT_1CInt"; + Драйвер.ВерсияДрайвера = "1.0.3"; +#КонецЕсли + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверАТОЛККТ54ФЗ10XФФД12"; + Драйвер.Наименование = НСтр("ru = 'АТОЛ:ККТ с передачей данных в ОФД 10.Х (ФФД 1.2)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ATOL_KKT_1C_V10"; + Драйвер.ВерсияДрайвера = "10.9.3.1"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверАтолККТ54ФЗ10X"; + Драйвер.Наименование = НСтр("ru = 'АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) 10.x'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ATOL_KKT_1C83_V10"; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверШтрихМККТ54ФЗ4ФФД12NG"; + Драйвер.Наименование = НСтр("ru = 'ШТРИХ-М:ККТ с передачей данных в ОФД (ФФД 1.2) NG'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "ShtrihM_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='Кассовая смена не открыта или истекла.'"); + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + Иначе + // Форматно логический контроль + ОписаниеОшибки = ""; + Если ОбщегоНазначенияБПО.ИспользуетсяФорматноЛогическийКонтроль() Тогда + МодульФорматноЛогическийКонтроль = ОбщегоНазначенияБПО.ОбщийМодуль("ФорматноЛогическийКонтроль"); + Если НЕ МодульФорматноЛогическийКонтроль.ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов( + ПараметрыОперации, + ПараметрыПодключения.ИдентификаторУстройства, + ОписаниеОшибки) Тогда + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + Отказ = Ложь; + МодульФорматноЛогическийКонтроль.ПривестиДанныеКТребуемомуФормату( + ПараметрыОперации, + Отказ); + Если Отказ Тогда + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = ОписаниеОшибки; + Возврат ДанныеОперации; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Параметры фискализации чека + ПараметрыФискализации = ПараметрыФискализацииЧека(); + ПараметрыФискализации.ТекущаяСмена = СтатусПоследнейСмены.КассоваяСмена; + + Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + // Параметры регистрации ККТ + ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства); + ВерсияФФДККТ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ПакетДляТекста(ТекстЧека, ПараметрыПодключения.РевизияИнтерфейса); + ПараметрыФискализации.ТекстЧека = ТекстЧека; + + КонецЕсли; + + Если ПараметрыОперации.НефискальныеДокументы <> Неопределено И ПараметрыОперации.НефискальныеДокументы.Количество() > 0 Тогда + Если ПараметрыФискализации.ТестовыеЧеки = Неопределено Тогда + ПараметрыФискализации.ТестовыеЧеки = Новый Массив(); + КонецЕсли; + ЗаполнитьXMLПакетыДляТекстовогоДокумента( + ПараметрыФискализации.ТестовыеЧеки, + ПараметрыОперации.НефискальныеДокументы, + ПараметрыПодключения, + ШиринаСтроки); + КонецЕсли; + + Возврат ПараметрыФискализации; + + ИначеЕсли Команда = "PrintReceiptCorrection" Тогда + + ПараметрыФискализации = ПараметрыФискализацииЧека(); + // Параметры регистрации ККТ + ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства); + ВерсияФФДККТ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" Тогда + + ДанныеОперации = ПараметрыФискальнойОперации(); + Если ПараметрыОперации.Свойство("ДополнительныеПараметры") Тогда + ДанныеОперации.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры; + КонецЕсли; + + Если Не ПередОткрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Тогда + Возврат ДанныеОперации; + КонецЕсли; + + Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда + ДанныеОперации.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса); + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОбОткрытииСмены(ПараметрыПодключения.ШиринаСтроки, ПараметрыОперации); + ТекстЧека = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон); + + ДанныеОперации.ТестовыеЧеки = ПолучитьXMLПакетДляТекста(ТекстЧека, ПараметрыПодключения.РевизияИнтерфейса); + ДанныеОперации.ТекстЧека = ТекстЧека; + КонецЕсли; + + Возврат ДанныеОперации; + + ИначеЕсли Команда = "CloseShift" Тогда + + ДанныеОперации = ПараметрыФискальнойОперации(); + Если ПараметрыОперации.Свойство("ДополнительныеПараметры") Тогда + ДанныеОперации.ДополнительныеПараметры = ПараметрыОперации.ДополнительныеПараметры; + КонецЕсли; + + Если Не ПередЗакрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Тогда + Возврат ДанныеОперации; + КонецЕсли; + + Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда + ДанныеОперации.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса); + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОЗакрытииСмены(ПараметрыПодключения.ШиринаСтроки, ПараметрыОперации); + ТекстЧека = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон); + + ДанныеОперации.ТестовыеЧеки = ПолучитьXMLПакетДляТекста(ТекстЧека, ПараметрыПодключения.РевизияИнтерфейса); + ДанныеОперации.ТекстЧека = ТекстЧека; + КонецЕсли; + + Возврат ДанныеОперации; + + ИначеЕсли Команда = "ReportCurrentStatusOfSettlements" Или Команда = "GetCurrentStatus" Тогда + + Если ПараметрыОперации = Неопределено Тогда + ПараметрыОперации = Новый Структура(); + КонецЕсли; + + ДанныеОперации = ПараметрыФискальнойОперации(); + ДанныеОперации.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса); + Возврат ДанныеОперации; + + ИначеЕсли Команда = "PrintXReport" Тогда + + Если ПараметрыОперации = Неопределено Тогда + ПараметрыОперации = Новый Структура(); + КонецЕсли; + + ДанныеОперации = ПараметрыФискальнойОперации(); + + Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + ДанныеОперации.ПараметрыXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса); + + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + Шаблон = ШаблоныФискальныхДокументов.ШаблонОтчетОТекущемСостоянии(ПараметрыПодключения.ШиринаСтроки, ПараметрыОперации); + ТекстЧека = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон); + + ДанныеОперации.ТестовыеЧеки = ПолучитьXMLПакетДляТекста(ТекстЧека, ПараметрыПодключения.РевизияИнтерфейса); + ДанныеОперации.ТекстЧека = ТекстЧека; + КонецЕсли; + + Возврат ДанныеОперации; + + ИначеЕсли Команда = "Encash" Тогда + + ПараметрыФискализации = ПараметрыФискализацииЧека(); + Если ПараметрыОперации.ТипИнкассации = 0 Тогда + ПараметрыФискализации.ТипДокумента = Перечисления.ТипыФискальныхДокументовККТ.Выемка + Иначе + ПараметрыФискализации.ТипДокумента = Перечисления.ТипыФискальныхДокументовККТ.Внесение + КонецЕсли; + ПараметрыФискализации.ТипИнкассации = ПараметрыОперации.ТипИнкассации; + ПараметрыФискализации.ДатаВремяЧека = ОбщегоНазначенияБПО.ДатаСеанса(); + + Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + ПараметрыРегистрации = ПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства); + + ПараметрыФискализации.РегистрационныйНомерККТ = ?(ПараметрыРегистрации.Свойство("РегистрационныйНомерККТ"), ПараметрыРегистрации.РегистрационныйНомерККТ, ""); + ПараметрыФискализации.ЗаводскойНомерФН = ?(ПараметрыРегистрации.Свойство("ЗаводскойНомерФН"), ПараметрыРегистрации.ЗаводскойНомерФН, ""); + ПараметрыФискализации.ШиринаСтроки = ?(ПараметрыПодключения.Свойство("ШиринаСтроки"), ПараметрыПодключения.ШиринаСтроки, 32); + ПараметрыФискализации.РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + + Если ПараметрыОперации.Свойство("ДокументОснование") Тогда + ПараметрыФискализации.ДокументОснование = ПараметрыОперации.ДокументОснование; + КонецЕсли; + Если ПараметрыОперации.Свойство("Кассир") Тогда + ПараметрыФискализации.Кассир = ПараметрыОперации.Кассир; + КонецЕсли; + Если ПараметрыОперации.Свойство("Организация") Тогда + ПараметрыФискализации.Организация = ПараметрыОперации.Организация; + КонецЕсли; + Если ПараметрыОперации.Свойство("ТорговыйОбъект") Тогда + ПараметрыФискализации.ТорговыйОбъект = ПараметрыОперации.ТорговыйОбъект; + КонецЕсли; + ПараметрыФискализации.СуммаЧека = ПараметрыОперации.Сумма; + ПараметрыФискализации.ОплатаНаличные = ПараметрыОперации.Сумма; + ПараметрыФискализации.ДанныеЧекаXML = ПолучитьXMLПакетДляОперации(ПараметрыОперации, ПараметрыПодключения.РевизияИнтерфейса); + + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + Если ПараметрыОперации.ТипИнкассации = 1 Тогда + Шаблон = ШаблоныФискальныхДокументов.ШаблонВнесениеНаличных(ПараметрыПодключения.ШиринаСтроки, ПараметрыОперации); + Иначе + Шаблон = ШаблоныФискальныхДокументов.ШаблонСнятиеНаличных(ПараметрыПодключения.ШиринаСтроки, ПараметрыОперации); + КонецЕсли; + ТекстЧека = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон); + + ПараметрыФискализации.ТестовыеЧеки = ПолучитьXMLПакетДляТекста(ТекстЧека, ПараметрыПодключения.РевизияИнтерфейса); + ПараметрыФискализации.ТекстЧека = ТекстЧека; + + КонецЕсли; + + Возврат ПараметрыФискализации; + + ИначеЕсли Команда = "OperationFN" Тогда + + ДанныеОперации = ПараметрыФискальнойОперации(); + ДанныеОперации.Вставить("ТипОперации", ПараметрыОперации.ТипОперации); + РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + ДанныеОперации.ПараметрыXML = СформироватьТаблицуПараметровДляОперацииФН(ПараметрыОперации, РевизияИнтерфейса); + Возврат ДанныеОперации; + + ИначеЕсли Команда = "RequestKM" Тогда + + ДанныеОперации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыЗапросКМ(); + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + Если ПустаяСтрока(ПараметрыОперации.ИдентификаторЗапроса) Тогда + ПараметрыОперации.ИдентификаторЗапроса = Новый УникальныйИдентификатор; + КонецЕсли; + + Если Не ПустаяСтрока(ПараметрыОперации.КонтрольнаяМарка) Тогда + ДанныеОперации.Вставить("Результат", Истина); + ДанныеОперации.Вставить("ТекстОшибки"); + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + ДанныеОперации.Вставить("ПараметрыXML", МодульМенеджерОборудованияМаркировка.СформироватьXMLДляЗапросаКМ(ПараметрыОперации)); + ЗаполнитьЗначенияСвойств(ДанныеОперации, ПараметрыОперации); + Иначе + ТекстОшибки = НСтр("ru = 'Контрольная марка не может быть пустой.'"); + ДанныеОперации.Вставить("Результат", Ложь); + ДанныеОперации.Вставить("ТекстОшибки", ТекстОшибки); + КонецЕсли; + КонецЕсли; + + Возврат ДанныеОперации; + + ИначеЕсли Команда = "CheckFiscalizationPacket" Тогда + + ДанныеОперации = ПараметрыФискализацииЧека(); + + Если ПараметрыОперации <> Неопределено И ПараметрыОперации.Свойство("ДанныеЧекаXML") Тогда + ДанныеОперации.ДанныеЧекаXML = ПараметрыОперации.ДанныеЧекаXML; + КонецЕсли; + + Возврат ДанныеОперации; + + КонецЕсли + +КонецФункции + +// Обработать данные операции после выполнения команды. +// +// Параметры: +// ПараметрыПодключения - Структура - см. МенеджерОборудованияКлиентСервер.ПараметрыПодключения() +// Команда - Строка - команда для выполнения +// РезультатВыполнения - Структура - +// ДанныеОперации - Структура - +Процедура ОбработатьДанныеОперации(ПараметрыПодключения, Команда, РезультатВыполнения, ДанныеОперации) Экспорт + + РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + + Если Команда = "CheckFiscalization" Или Команда = "CheckFiscalizationPacket" Тогда + + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + // Заполнить результаты фискализация чека из XML пакета. + ЗаполнитьРезультатыФискализацияЧекаИзXMLПакета(ДанныеОперации); + КонецЕсли; + + РезультатВыполнения.Вставить("НомерСменыККТ" , ДанныеОперации.НомерСменыККТ); + РезультатВыполнения.Вставить("НомерЧекаККТ" , ДанныеОперации.НомерЧекаККТ); + РезультатВыполнения.Вставить("СтатусСмены", 2); + РезультатВыполнения.Вставить("ДатаВремяЧека" , ДанныеОперации.ДатаВремяЧека); + РезультатВыполнения.Вставить("ФискальныйПризнак" , ДанныеОперации.ФискальныйПризнак); + РезультатВыполнения.Вставить("АдресСайтаПроверки" , ДанныеОперации.АдресСайтаПроверки); + РезультатВыполнения.Вставить("ОшибкаПечати" , ДанныеОперации.ОшибкаПечати); + РезультатВыполнения.Вставить("РегистрационныйНомерККТ", ДанныеОперации.РегистрационныйНомерККТ); + РезультатВыполнения.Вставить("ДанныеЧекаXML" , ДанныеОперации.ДанныеЧекаXML); + РезультатВыполнения.Вставить("ОперацияЗаписана" , Истина); + РезультатВыполнения.Вставить("ПараметрыФискализации" , ДанныеОперации); + + Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + Попытка + // Записать фискальную операцию. + ЗаписатьФискальнуюОперацию(ДанныеОперации); + Исключение + РезультатВыполнения.ОперацияЗаписана = Ложь; + КонецПопытки; + + ПараметрыQRКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыQRКодаЧекаККТ(); + ПараметрыQRКода.ДатаВремяРасчета = ДанныеОперации.ДатаВремяЧека; + ПараметрыQRКода.СуммаРасчета = ДанныеОперации.СуммаЧека; + ПараметрыQRКода.ФискальныйПризнак = ДанныеОперации.ФискальныйПризнак; + ПараметрыQRКода.ПризнакРасчета = ДанныеОперации.ТипРасчета; + ПараметрыQRКода.НомерФискальногоНакопителя = ДанныеОперации.ЗаводскойНомерФН; + ПараметрыQRКода.НомерФискальногоДокумента = ДанныеОперации.НомерЧекаККТ; + QRКодЧекаККТ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СформироватьQRКодЧекаККТ(ПараметрыQRКода); + + // Отправить электронный чек через рассылку + Если (ДанныеОперации.Отправляет1СSMS Или ДанныеОперации.Отправляет1СEmail) Тогда + МодульРассылкаЭлектронныхЧеков = ОбщегоНазначенияБПО.ОбщийМодуль("РассылкаЭлектронныхЧеков"); + Если МодульРассылкаЭлектронныхЧеков <> Неопределено Тогда + ТекстСообщения = МодульРассылкаЭлектронныхЧеков.ШаблонАтрибутовЧекаДляОтсылки(ДанныеОперации); + МодульРассылкаЭлектронныхЧеков.ОтправитьЭлектронныйЧек( + ДанныеОперации, + ТекстСообщения, + ДанныеОперации.ПокупательEmail, + ДанныеОперации.ПокупательНомер); + КонецЕсли; + КонецЕсли; + + Иначе + QRКодЧекаККТ = Неопределено; + ИнкрементироватьТекущийНомерЧекаККТ(ПараметрыПодключения.ИдентификаторУстройства, ДанныеОперации.ТекущаяСмена); + КонецЕсли; + РезультатВыполнения.Вставить("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»'"); + ОбщегоНазначенияБПО.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + КонецЕсли; + Иначе + ПараметрыККТ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыРегистрацииККТ(); + КонецЕсли; + РезультатВыполнения.Вставить("ПараметрыККТ" , ПараметрыККТ); + + ПослеОткрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения); + + ИначеЕсли Команда = "Encash" Тогда + + Попытка + // Записать фискальную операцию. + ЗаписатьФискальнуюОперацию(ДанныеОперации); + Исключение + РезультатВыполнения.ОперацияЗаписана = Ложь; + КонецПопытки; + + ИначеЕсли Команда = "GetDataKKT" Тогда + + ПараметрыККТ = ПараметрыИзXMLПакетаККТ(РезультатВыполнения.ПараметрыККТXML, РевизияИнтерфейса); + РезультатВыполнения.Вставить("ПараметрыККТ" , ПараметрыККТ); + + СохранитьПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства, ПараметрыККТ); + + ИначеЕсли Команда = "GetCurrentStatus" Тогда + + Если РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + ФискальныеДанныеСтруктура = ПолучитьПараметрыСменыИзXMLПакета(ДанныеОперации.РезультатXML, РевизияИнтерфейса); + НомерСменыККТ = ФискальныеДанныеСтруктура.НомерСменыККТ; + НомерЧекаККТ = ФискальныеДанныеСтруктура.НомерЧекаККТ; + СтатусСмены = ФискальныеДанныеСтруктура.СтатусСмены; + Иначе + ФискальныеДанныеСтруктура = ПолучитьПараметрыСостоянияИзXMLПакета(ДанныеОперации.РезультатXML); + НомерСменыККТ = ДанныеОперации.НомерСменыККТ; + НомерЧекаККТ = ДанныеОперации.НомерЧекаККТ; + СтатусСмены = ДанныеОперации.СтатусСмены; + КонецЕсли; + РезультатВыполнения.Вставить("НомерСменыККТ" , НомерСменыККТ); + РезультатВыполнения.Вставить("НомерЧекаККТ" , НомерЧекаККТ); + РезультатВыполнения.Вставить("СтатусСмены", СтатусСмены); + РезультатВыполнения.Вставить("ФискальныеДанные", ФискальныеДанныеСтруктура); + + ИначеЕсли Команда = "RequestKM" Тогда + + // ++ Локализация + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + ДанныеСтруктура = МодульМенеджерОборудованияМаркировка.ПолучитьРезультатыЗапросаКМИзXMLПакета(РезультатВыполнения.РезультатXML); + РезультатВыполнения.Вставить("КодМаркировкиПроверен", ДанныеСтруктура.КодМаркировкиПроверен); + РезультатВыполнения.Вставить("РезультатПроверки", ДанныеСтруктура.РезультатПроверки); + КонецЕсли; + // -- Локализация + + ИначеЕсли Команда = "GetProcessingKMResult" Тогда + + // ++ Локализация + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + РезультатВыполнения = МодульМенеджерОборудованияМаркировка.ПолучитьРезультатыОИСМКМИзXMLПакета(ДанныеОперации.РезультатXML, РезультатВыполнения); + РезультатВыполнения.СтатусРезультата = МодульМенеджерОборудованияМаркировка.СтатусРезультатаЗапросаКМПоКоду(ДанныеОперации.СтатусРезультатаКод); + РезультатВыполнения.Вставить("РезультатXML", ДанныеОперации.РезультатXML); + КонецЕсли; + // -- Локализация + + ИначеЕсли Команда = "OperationFN" Тогда + + Если ДанныеОперации.Свойство("ПараметрыККТ") И Не ПустаяСтрока(ДанныеОперации.ПараметрыККТ) Тогда + ПараметрыККТ = ПараметрыИзXMLПакетаККТ(ДанныеОперации.ПараметрыККТ, РевизияИнтерфейса); + РезультатВыполнения.Вставить("ПараметрыККТ" , ПараметрыККТ); + СохранитьПараметрыРегистрацииУстройства(ПараметрыПодключения.ИдентификаторУстройства, ПараметрыККТ); + КонецЕсли; + + КонецЕсли + +КонецПроцедуры + +Функция ПередОткрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Экспорт + + Результат = Истина; + + Если ИспользуетсяКассовыеСмены() Тогда + ОписаниеКассовойСмены = ОписаниеПоследнейКассовойСмены(ПараметрыПодключения.ИдентификаторУстройства); + Если ОписаниеКассовойСмены <> Неопределено И ОписаниеКассовойСмены.Статус = Перечисления.СтатусыКассовойСмены.Открыта Тогда + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = НСтр("ru='Кассовая смена уже открыта.'"); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ПередЗакрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Экспорт + + Результат = Истина; + + Если ИспользуетсяКассовыеСмены() Тогда + ОписаниеКассовойСмены = ОписаниеПоследнейКассовойСмены(ПараметрыПодключения.ИдентификаторУстройства); + Если ОписаниеКассовойСмены = Неопределено Тогда + ДанныеОперации.КассоваяСмена = НоваяКассоваяСмена(ПараметрыПодключения.ИдентификаторУстройства, ДанныеОперации); + ИначеЕсли ОписаниеКассовойСмены.Статус = Перечисления.СтатусыКассовойСмены.Открыта Тогда + ДанныеОперации.КассоваяСмена = ОписаниеКассовойСмены.КассоваяСмена; + Иначе + ДанныеОперации.Результат = Ложь; + ДанныеОперации.ТекстОшибки = НСтр("ru='Кассовая смена уже закрыта.'"); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ПослеОткрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения) Экспорт + + Результат = Истина; + + НоваяКассоваяСмена(ПараметрыПодключения.ИдентификаторУстройства, РезультатВыполнения); + + Возврат Результат; + +КонецФункции + +Функция ПослеЗакрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения) Экспорт + + Результат = Истина; + + ЗакрытьКассовуюСмену(РезультатВыполнения); + + Возврат Результат; + +КонецФункции + +Функция XMLПакетИнфоКвитанции(Данные, ШиринаСтроки, РевизияИнтерфейса) Экспорт + + Шаблон = ШаблоныФискальныхДокументов.ШаблонИнфоКвитанция(ШиринаСтроки, Данные); + Текст = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон); + + Возврат ОборудованиеЧекопечатающиеУстройства.ПолучитьXMLПакетДляТекста(Текст, РевизияИнтерфейса); +КонецФункции + + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ФормированиеДанныхККТ + +// Заменяет типы оплаты при коррекции, используется только при ФФД 1.05 +Процедура ЗаменитьТипыОплатыПриКоррекции(ОбщиеПараметры, ОбщиеПараметрыСторно = Неопределено) + + // Необходимо изменить вид оплат на «ВстречноеПредоставление» + Для Каждого ЭлементМассива Из ОбщиеПараметры.ТаблицаОплат Цикл + ЭлементМассива.ТипОплаты = Перечисления.ТипыОплатыККТ.ВстречноеПредоставление; + КонецЦикла; + + Если ОбщиеПараметрыСторно = Неопределено Тогда + Возврат; + КонецЕсли; + // Необходимо изменить вид оплат на «ВстречноеПредоставление» + Для Каждого ЭлементМассива Из ОбщиеПараметрыСторно.ТаблицаОплат Цикл + ЭлементМассива.ТипОплаты = Перечисления.ТипыОплатыККТ.ВстречноеПредоставление; + КонецЦикла; + +КонецПроцедуры + +Процедура ПодготовитьЧекКоррекции(ОбщиеПараметры, ОбщиеПараметрыСторно, ВерсияФФДККТ11) + + // Меняем признак типа расчета на противоположный. + Если ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств Тогда + ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств; + ИначеЕсли ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств Тогда + ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств; + ИначеЕсли ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.РасходДенежныхСредств Тогда + ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратРасходаДенежныхСредств; + ИначеЕсли ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратРасходаДенежныхСредств Тогда + ОбщиеПараметрыСторно.ТипРасчета = Перечисления.ТипыРасчетаДенежнымиСредствами.РасходДенежныхСредств; + КонецЕсли; + +КонецПроцедуры + +// ++ Локализация + +Процедура ЗаписатьДанныеКоррекции(ЗаписьXML, ДанныеКоррекции) + + ЗаписьXML.ЗаписатьНачалоЭлемента("CorrectionData"); + ТипКоррекции = ?(ПустаяСтрока(ДанныеКоррекции.ТипКоррекции), 0, ДанныеКоррекции.ТипКоррекции); + ЗаписьXML.ЗаписатьАтрибут("Type", XMLСтрока(ТипКоррекции)); + Если Не ПустаяСтрока(ДанныеКоррекции.ДатаКоррекции) Тогда + ЗаписьXML.ЗаписатьАтрибут("Date", XMLСтрока(НачалоДня(ДанныеКоррекции.ДатаКоррекции))); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеКоррекции.НомерПредписания) Тогда + ЗаписьXML.ЗаписатьАтрибут("Number", XMLСтрока(ДанныеКоррекции.НомерПредписания)); + КонецЕсли; + Если Не ПустаяСтрока(ДанныеКоррекции.ОписаниеКоррекции) Тогда + ЗаписьXML.ЗаписатьАтрибут("Description", XMLСтрока(ДанныеКоррекции.ОписаниеКоррекции)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +Процедура ЗаполнитьОтраслевойРеквизитОбъемноСортовойУчет(Позиция) + + ТипыТоваров = ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(); + ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит; + // Передача сведений об объемно сортовой товара при оптовой продаже через ККТ. + Если Позиция.ОбъемноСортовойУчет И ТипыТоваров.ОбъемноСортовойУчет Тогда + ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262 + ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20190403"); // 1263 + ОтраслевойРеквизит.НомерДокументаОснования = "620"; // 1264 + ЗначениеРеквизита = "crpt=mrk"; + Если Не ПустаяСтрока(Позиция.КоличествоВесовогоТовара) Тогда + ЗначениеРеквизита = ЗначениеРеквизита + "&q=" + Позиция.КоличествоВесовогоТовара; + КонецЕсли; + ОтраслевойРеквизит.ЗначениеРеквизита = ЗначениеРеквизита; // 1265 + КонецЕсли; + +КонецПроцедуры + +// Записывает данные агента в 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.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +// -- Локализация + +Функция ЗначениеXMLАтрибута(ЧтениеXML, ИмяАтрибута, ДопИмяАтрибута = Неопределено, ЗначениеПоУмолчанию = Неопределено) + + Результат = ЗначениеПоУмолчанию; + Если ЧтениеXML.ЗначениеАтрибута(ИмяАтрибута) <> Неопределено Тогда + Результат = ЧтениеXML.ЗначениеАтрибута(ИмяАтрибута); + ИначеЕсли НЕ ПустаяСтрока(ДопИмяАтрибута) И ЧтениеXML.ЗначениеАтрибута(ДопИмяАтрибута) <> Неопределено Тогда + Результат = ЧтениеXML.ЗначениеАтрибута(ДопИмяАтрибута); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область КассоваяСмена + +// Возвращает Истина, если используется подсистема "КассовыеСмены". +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// У хотя бы одной "функциональной" подсистемы включен флажок "Включать в командный интерфейс". +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяКассовыеСмены() + + Возврат ОбщегоНазначенияБПО.ИспользуетсяКассоваяСмена(); + +КонецФункции + +// Для внутреннего использования +// +Функция ПолучитьСтатусПоследнейСмены(ИдентификаторУстройства) + + Если ИспользуетсяКассовыеСмены() Тогда + МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены"); + Возврат МодульКассовыеСмены.СтатусПоследнейСмены(ИдентификаторУстройства); + Иначе + РезультатОперации = Новый Структура(); + РезультатОперации.Вставить("Активна", Истина); + РезультатОперации.Вставить("Открыта", Истина); + РезультатОперации.Вставить("ТекущийНомерЧека", 1); + РезультатОперации.Вставить("КассоваяСмена", Неопределено); + Возврат РезультатОперации; + КонецЕсли; + +КонецФункции + +// Для внутреннего использования +// +Функция НоваяКассоваяСмена(ФискальноеУстройство, ДанныеОперации) + + Если ИспользуетсяКассовыеСмены() Тогда + МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены"); + Возврат МодульКассовыеСмены.НоваяКассоваяСмена(ФискальноеУстройство, ДанныеОперации); + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +// Для внутреннего использования +// +Процедура ЗакрытьКассовуюСмену(ДанныеОперации) + + Если ИспользуетсяКассовыеСмены() Тогда + МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены"); + МодульКассовыеСмены.ЗакрытьКассовуюСмену(ДанныеОперации); + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования +// +Функция ОписаниеПоследнейКассовойСмены(ФискальноеУстройство) + + Если ИспользуетсяКассовыеСмены() Тогда + МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены"); + Возврат МодульКассовыеСмены.ОписаниеПоследнейКассовойСмены(ФискальноеУстройство); + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +// Для внутреннего использования +// +Процедура ИнкрементироватьТекущийНомерЧекаККТ(ФискальноеУстройство, КассоваяСмена) + + Если ИспользуетсяКассовыеСмены() Тогда + МодульКассовыеСмены = ОбщегоНазначенияБПО.ОбщийМодуль("КассовыеСмены"); + МодульКассовыеСмены.ИнкрементироватьТекущийНомерЧекаККТ(ФискальноеУстройство, КассоваяСмена); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область Служебные + +// Преобразовать в булево возможные значения строки +Функция ПреобразоватьВБулево(Строка) + Попытка + Возврат XMLЗначение(Тип("Булево"), Строка); + Исключение + Возврат ВРег(Строка) = "ДА" Или ВРег(Строка) = "TRUE" Или ВРег(Строка) = "YES"; + КонецПопытки; +КонецФункции + +#КонецОбласти + +#Область ФормированиеЧека + +// Создает контекст для выполнения процедуры формирования фискального чека +// Возвращаемое значение: +// Структура - структура контекста для вывода фискального документа в табличный документ +Функция ПараметрыВыводЧека() + + ШиринаСтроки = 46; + ШиринаСтраницыА4 = 100; + РазмерБоковогоПоля = Макс(0, (ШиринаСтраницыА4 - ШиринаСтроки) / 2); + + Контекст = Новый Структура(); + Контекст.Вставить("Строка", 0); + Контекст.Вставить("ФорматФФД", "1.1"); + Контекст.Вставить("ШиринаСтроки", ШиринаСтроки); + Контекст.Вставить("ФорматЧисло", "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0"); + Контекст.Вставить("ФорматКоличество", "ЧРД=.;ЧЦ=12;ЧДЦ=3;ЧН=0.000;ЧГ=0"); + Контекст.Вставить("ТабличныйДокумент", Новый ТабличныйДокумент()); + Контекст.ТабличныйДокумент.Область(, 2, , 3).ШиринаКолонки = ШиринаСтроки / 2; + Контекст.ТабличныйДокумент.Область(, 1, , 1).ШиринаКолонки = РазмерБоковогоПоля; + Контекст.ТабличныйДокумент.Область(, 4, , 4).ШиринаКолонки = РазмерБоковогоПоля; + + Контекст.Вставить("ДополнительнаяСтрокаШапка", ""); + Контекст.Вставить("ДополнительнаяСтрокаПодвал", ""); + МенеджерОборудованияВызовСервераПереопределяемый.ДополнительныйТекстПриФормированииЧекаPDF(Контекст.ДополнительнаяСтрокаШапка, Контекст.ДополнительнаяСтрокаПодвал); + + Итоги = Новый Структура(); + Итоги.Вставить("СуммаЧека", 0); + Итоги.Вставить("СуммаПозицийНДС0", 0); + Итоги.Вставить("СуммаПозицийНДС10", 0); + Итоги.Вставить("СуммаПозицийНДС18", 0); + Итоги.Вставить("СуммаПозицийНДС20", 0); + Итоги.Вставить("СуммаПозицийНДС110", 0); + Итоги.Вставить("СуммаПозицийНДС118", 0); + Итоги.Вставить("СуммаПозицийНДС120", 0); + Итоги.Вставить("СуммаПозицийБезНДС", 0); + Итоги.Вставить("СуммаНДС0", 0); + Итоги.Вставить("СуммаНДС10", 0); + Итоги.Вставить("СуммаНДС18", 0); + Итоги.Вставить("СуммаНДС20", 0); + Итоги.Вставить("СуммаНДС110", 0); + Итоги.Вставить("СуммаНДС118", 0); + Итоги.Вставить("СуммаНДС120", 0); + Итоги.Вставить("СуммаБезНДС", 0); + Контекст.Вставить("Итоги", Итоги); + + Оплата = Новый Структура(); + Оплата.Вставить("СуммаНаличными",0); + Оплата.Вставить("СуммаЭлектронными",0); + Оплата.Вставить("СуммаПостоплатой",0); + Оплата.Вставить("СуммаПредоплатой",0); + Оплата.Вставить("СуммаПредоставлением",0); + Оплата.Вставить("СуммаОплаты",0); + Оплата.Вставить("СуммаСдачи",0); + Контекст.Вставить("Оплата", Оплата); + + Возврат Контекст; + +КонецФункции + +// Выводит разделитель в табличном документе при формировании фискального документа +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// ТипЛинии - Строка - тип линии: +// "Двойная" - линия "=========================" +// "Сплошная" - линия "-------------------------" +// "НетЛинии" - пустая строка +Процедура ВывестиРазделитель(Контекст, ТипЛинии = "Двойная") + + Если ТипЛинии = "Двойная" Тогда + ЛинияРазделитель = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Двойная, 1); + ИначеЕсли ТипЛинии = "Сплошная" Тогда + ЛинияРазделитель = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); + Иначе + ЛинияРазделитель = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии, 1); + КонецЕсли; + Контекст.Строка = Контекст.Строка + 1; + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 2, Контекст.Строка, 3); + Область.ГраницаСнизу = ЛинияРазделитель; + +КонецПроцедуры + +// Выводит рекламную строку на весь документ +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// Текст - Строка - текст рекламной строки +Процедура ВывестиДополнительнуюСтроку(Контекст, Текст) + + Если ПустаяСтрока(Текст) Тогда + Возврат; + КонецЕсли; + + Контекст.Строка = Контекст.Строка + 1; + + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 1, , 4); + Область.ПоВыделеннымКолонкам = Истина; + Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; + + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 1); + Область.Текст = Текст; + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; + +КонецПроцедуры + +// Выводит строку в фискальном документе и выравнивает ее по центру +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// Текст - Строка - текст строки +// Выделить - Булево - если истина тогда будет выведено полужирным шрифтом +Процедура ВывестиСтрокуПоЦентру(Контекст, Текст, Выделить = Ложь) + + Если ПустаяСтрока(Текст) Тогда + Возврат; + КонецЕсли; + + Контекст.Строка = Контекст.Строка + 1; + + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 2, , 3); + Область.ПоВыделеннымКолонкам = Истина; + Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; + + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 2); + Область.Текст = Текст; + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; + Область.Шрифт = Новый Шрифт(Область.Шрифт,,,Выделить); + +КонецПроцедуры + +// Выводит строку в фискальном документе в двух колонках слева и справа +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// ТекстЛевый - Строка - текст строки в левой колонке выравнивается слева +// ТекстПравый - Строка - текст строки в правой колонке выравнивается справа +// Выделить - Булево - если истина тогда будет выведено полужирным шрифтом +Процедура ВывестиСтрокуПоШирине(Контекст, ТекстЛевый="", ТекстПравый = "", Выделить = Ложь) + + Если ПустаяСтрока(ТекстЛевый) И ПустаяСтрока(ТекстПравый) Тогда + Возврат; + КонецЕсли; + + Контекст.Строка = Контекст.Строка + 1; + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 2); + Область.Текст = ТекстЛевый; + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 3); + Область.Текст = ТекстПравый; + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право; + Область.Шрифт = Новый Шрифт(Область.Шрифт,,,Выделить); + +КонецПроцедуры + +// Выводит строку в фискальном документе слева +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// Текст - Строка - текст строки, выравнивается слева +// Выделить - Булево - если истина тогда будет выведено полужирным шрифтом +Процедура ВывестиСтрокуСлева(Контекст, Текст, Выделить = Ложь) + + Если ПустаяСтрока(Текст) Тогда + Возврат; + КонецЕсли; + + Контекст.Строка = Контекст.Строка + 1; + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 2, , 3); + Область.ПоВыделеннымКолонкам = Истина; + Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 2); + Область.Текст = Текст; + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + Область.Шрифт = Новый Шрифт(Область.Шрифт,,,Выделить); + +КонецПроцедуры + +// Выводит поле в двух колонках, слева ИмяПоля справа значение поля, если значение не заполнено, строка не выводится +// если значение число, то будет выполнено форматирование по строке заданной в контексте +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// ИмяПоля - Строка - имя поля, выравнивается слева +// Значение - Строка - значение поля, выравнивается справа +Процедура ВывестиПолеПоШирине(Контекст, ИмяПоля, Значение) + + Если Не ЗначениеЗаполнено(Значение) Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(Значение) = Тип("Число") Тогда + Значение = "=" + Формат(Значение, Контекст.ФорматЧисло); + КонецЕсли; + + Контекст.Строка = Контекст.Строка + 1; + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 2); + Область.Текст = ИмяПоля; + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 3); + Область.Текст = Значение; + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право; + +КонецПроцедуры + +// Выводит поле и значение друг за другом слева, если значение не заполнено, строка не выводится +// если значение число, то будет выполнено форматирование по строке заданной в контексте +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// ИмяПоля - Строка - имя поля, выравнивается слева +// Значение - Строка - значение поля, выравнивается справа +Процедура ВывестиПолеСлева(Контекст, ИмяПоля, Значение) + + Если Не ЗначениеЗаполнено(Значение) Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(Значение) = Тип("Число") Тогда + ЗначениеСтрокой = "=" + Формат(Значение, Контекст.ФорматЧисло); + КонецЕсли; + + Контекст.Строка = Контекст.Строка + 1; + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 2); + Область.Текст = ИмяПоля + " " + ЗначениеСтрокой; + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + +КонецПроцедуры + +// Возвращает код типа штрихкода по имени для передачи в ГенерацияШтрихкода +// Параметры: +// СтрокаТипШтрихкода - Строка - текстовое представление вида штрихкода +Функция ЧисловойТипШтрихкода(СтрокаТипШтрихкода) + + ТипыШтрихкода = Новый Соответствие(); + ТипыШтрихкода.Вставить("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, Результат); + +КонецФункции + +// Выводит штрихкод табличный документ +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// ТипШтрихкода - Строка - тип штрихкода в текстовом виде +// Штрихкод - Строка - значение штрихкода +Процедура ВывестиШтрихкод(Контекст, ТипШтрихкода, Штрихкод) + + ТабличныйДокумент = Контекст.ТабличныйДокумент; + + ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода(); + ПараметрыШтрихкода.Масштабировать = Истина; + ПараметрыШтрихкода.СохранятьПропорции = Истина; + ПараметрыШтрихкода.ОтображатьТекст = Ложь; + ПараметрыШтрихкода.Штрихкод = Штрихкод; + ПараметрыШтрихкода.ТипКода = ЧисловойТипШтрихкода(ТипШтрихкода); + + Штрихкод = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка); + Если ПараметрыШтрихкода.ТипКода = 16 Тогда + Штрихкод.РазмерКартинки = РазмерКартинки.Пропорционально; + ПараметрыШтрихкода.Ширина = 100; + ПараметрыШтрихкода.Высота = 100; + КоличествоСтрок = 6; + Иначе + Штрихкод.РазмерКартинки = РазмерКартинки.РеальныйРазмер; + ПараметрыШтрихкода.Ширина = 100; + ПараметрыШтрихкода.Высота = 100; + КоличествоСтрок = 2; + КонецЕсли; + + Изображение = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода); + Штрихкод.Картинка = Изображение.Картинка; + Штрихкод.ГраницаСверху = Ложь; + Штрихкод.ГраницаСнизу = Ложь; + Штрихкод.ГраницаСправа = Ложь; + Штрихкод.ГраницаСлева = Ложь; + + Контекст.Строка = Контекст.Строка + 1; + Область = Контекст.ТабличныйДокумент.Область(Контекст.Строка, 2, Контекст.Строка + КоличествоСтрок, 3); + Область.ПоВыделеннымКолонкам = Истина; + Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; + + ОбластьСтроки = Контекст.ТабличныйДокумент.Область(Контекст.Строка, , Контекст.Строка + КоличествоСтрок - 1); + ОбластьСтроки.ВместеСоСледующим = Истина; + Штрихкод.Расположить(Область); + + Контекст.Строка = Контекст.Строка + КоличествоСтрок; + +КонецПроцедуры + +// Определяет тип чека при выводе шапки фискального документа +// Параметры: +// ТипДокумента - Число - +// ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - +Функция ВывестиШапкуТипЧека(ТипДокумента, ТипРасчета = Неопределено) + + Если ТипДокумента = 0 Тогда + ТипыЧеков = Новый Соответствие(); + ТипыЧеков.Вставить(1, НСтр("ru='ПРИХОД'")); // Чек продажи + ТипыЧеков.Вставить(2, НСтр("ru='ВОЗВРАТ ПРИХОДА'")); // Чек возврата продажи + ТипыЧеков.Вставить(3, НСтр("ru='РАСХОД'")); // Чек покупки + ТипыЧеков.Вставить(4, НСтр("ru='ВОЗВРАТ РАСХОДА'")); // Чек возврата покупки + ТипЧека = ТипыЧеков.Получить(ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодРасчетаДенежнымиСредствами(ТипРасчета)); + ИначеЕсли ТипДокумента = 1 Тогда + ТипЧека = НСтр("ru='ОТКРЫТИЕ СМЕНЫ'"); + ИначеЕсли ТипДокумента = 2 Тогда + ТипЧека = НСтр("ru='ВНЕСЕНИЕ'"); + ИначеЕсли ТипДокумента = 3 Тогда + ТипЧека = НСтр("ru='ВЫЕМКА'"); + ИначеЕсли ТипДокумента = 4 Тогда + ТипЧека = НСтр("ru='ОТЧЕТ БЕЗ ГАШЕНИЯ'"); + ИначеЕсли ТипДокумента = 5 Тогда + ТипЧека = НСтр("ru='ОТЧЕТ С ГАШЕНИЕМ'"); + КонецЕсли; + + Возврат ТипЧека; + +КонецФункции + +// Выводит шапку фискального документа в табличный документ +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// ОбщиеПараметры - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ТипДокумента - Число - +Процедура ВывестиШапкуЧека(Контекст, ОбщиеПараметры, ТипДокумента) + + ВывестиСтрокуПоЦентру(Контекст, ОбщиеПараметры.ОрганизацияНазвание); + + Если НЕ ПустаяСтрока(ОбщиеПараметры.АдресРасчетов) Тогда + ВывестиСтрокуПоЦентру(Контекст, ОбщиеПараметры.АдресРасчетов); + ВывестиСтрокуПоЦентру(Контекст, ОбщиеПараметры.МестоРасчетов); + ИначеЕсли НЕ ПустаяСтрока(ОбщиеПараметры.АдресМагазина) Тогда + ВывестиСтрокуСлева(Контекст, ОбщиеПараметры.АдресМагазина); + КонецЕсли; + + ВывестиСтрокуПоЦентру(Контекст, ОбщиеПараметры.ТекстШапки); + + Если ТипДокумента = 0 Тогда + ВывестиСтрокуПоЦентру(Контекст, НСтр("ru='КАССОВЫЙ ЧЕК'"), Истина); + КонецЕсли; + + ТипЧека = ВывестиШапкуТипЧека(ТипДокумента, ОбщиеПараметры.ТипРасчета); + ОрганизацияИНН = ?(ПустаяСтрока(ОбщиеПараметры.ОрганизацияИНН), "", НСтр("ru='ИНН'") + Символы.НПП + ОбщиеПараметры.ОрганизацияИНН); + Если Не ПустаяСтрока(ОрганизацияИНН) Тогда + ВывестиСтрокуСлева(Контекст, ТипЧека); + Иначе + ВывестиСтрокуПоШирине(Контекст, ТипЧека, ОрганизацияИНН); + КонецЕсли; + + НомерЧека = ?(ПустаяСтрока(ОбщиеПараметры.НомерЧека),"", НСтр("ru='ЧЕК №'") + ОбщиеПараметры.НомерЧека); + ДатаВремя = ?(ПустаяСтрока(ОбщиеПараметры.ДатаВремя), + ОбщегоНазначенияБПО.ДатаСеанса(), + ОбщиеПараметры.ДатаВремя); + ДатаВремя = Формат(ДатаВремя, "ДФ=""дд.ММ.гггг ЧЧ:мм"""); // АПК: 1367 особенность локального законодательства + ВывестиСтрокуПоШирине(Контекст, НомерЧека, ДатаВремя); + + Если ТипДокумента = 0 Тогда + ВывестиПолеСлева(Контекст, НСтр("ru='ПОКУПАТЕЛЬ:'"), ОбщиеПараметры.Получатель); + ВывестиПолеСлева(Контекст, НСтр("ru='ИНН ПОКУПАТЕЛЯ:'"), ОбщиеПараметры.ПолучательИНН); + ВывестиСтрокуСлева(Контекст, ВРег(Строка(ОбщиеПараметры.ПризнакАгента))); + ВывестиПолеСлева(Контекст, НСтр("ru='ПОСТАВЩИК:'"), ОбщиеПараметры.ДанныеПоставщика.Наименование); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ТЛФ.ПОСТ.:'"), ОбщиеПараметры.ДанныеПоставщика.Телефон); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ИНН ПОСТАВЩИКА:'"), ОбщиеПараметры.ДанныеПоставщика.ИНН); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ПЛ.АГЕНТ ОПЕР.:'"), ОбщиеПараметры.ДанныеАгента.ПлатежныйАгент.Операция); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ПЛ.АГЕНТ.ТЛФ.:'"), ОбщиеПараметры.ДанныеАгента.ПлатежныйАгент.Телефон); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ОПЕРАТОР ПЕРЕВОДА:'"), ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Наименование); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='ТЛФ.ОП.ПЕРЕВОДА:'"), ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Телефон); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='АДР.ОП.ПЕРЕВОДА:'"), ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Адрес); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='ИНН ОП.ПЕРЕВОДА:'"), ОбщиеПараметры.ДанныеАгента.ОператорПеревода.ИНН); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ОПЕР.ПО ПРИЕМУ ПЛАТ.ТЛФ:'"), ОбщиеПараметры.ДанныеАгента.ОператорПоПриемуПлатежей.Телефон); + ВывестиПолеПоШирине(Контекст, НСтр("ru='РЕК.ПОЛЬЗ.:'"), ОбщиеПараметры.ДополнительныйРеквизитПользователя.Наименование); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='РЕК.ПОЛЬЗ.:'"), ОбщиеПараметры.ДополнительныйРеквизитПользователя.Значение); + КонецЕсли; + + ВывестиРазделитель(Контекст, "Сплошная"); + ВывестиРазделитель(Контекст, "НетЛинии"); + +КонецПроцедуры + +// Выводит текст налога и скидки при выводе позиции строки фискального документа +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// ПозицияЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека +Процедура ВывестиПозицииЧекаНалогИСкидка(Контекст, ПозицияЧека) + + Итоги = Контекст.Итоги; + + ТекстСкидки = ""; + Если ПозицияЧека.СуммаСкидок<>Неопределено Тогда + Если ПозицияЧека.СуммаСкидок > 0 Тогда + ТекстСкидки = НСтр("ru='СКИДКА'") + "=" + Формат(ПозицияЧека.СуммаСкидок, Контекст.ФорматЧисло); + ИначеЕсли ПозицияЧека.СуммаСкидок < 0 Тогда + ТекстСкидки = НСтр("ru='НАДБАВКА'") + "=" + Формат(ПозицияЧека.СуммаСкидок, Контекст.ФорматЧисло); + КонецЕсли; + КонецЕсли; + + ПозицияСуммаНДС = ?(ПозицияЧека.СуммаНДС = Неопределено, 0, ПозицияЧека.СуммаНДС); + ТекстНалога = ""; + Если ПозицияЧека.СтавкаНДС = 10 Тогда + Итоги.СуммаПозицийНДС10 = Итоги.СуммаПозицийНДС10 + ПозицияЧека.Сумма; + Итоги.СуммаНДС10 = Итоги.СуммаНДС10 + ПозицияСуммаНДС; + ТекстНалога = НСтр("ru='НДС 10%'"); + ИначеЕсли ПозицияЧека.СтавкаНДС = 18 Тогда + Итоги.СуммаПозицийНДС18 = Итоги.СуммаПозицийНДС18 + ПозицияЧека.Сумма; + Итоги.СуммаНДС18 = Итоги.СуммаНДС18 + ПозицияСуммаНДС; + ТекстНалога = НСтр("ru='НДС 18%'"); + ИначеЕсли ПозицияЧека.СтавкаНДС = 20 Тогда + Итоги.СуммаПозицийНДС20 = Итоги.СуммаПозицийНДС20 + ПозицияЧека.Сумма; + Итоги.СуммаНДС20 = Итоги.СуммаНДС20 + ПозицияСуммаНДС; + ТекстНалога = НСтр("ru='НДС 20%'"); + ИначеЕсли ПозицияЧека.СтавкаНДС = 0 Тогда + Итоги.СуммаПозицийНДС0 = Итоги.СуммаПозицийНДС0 + ПозицияЧека.Сумма; + Итоги.СуммаНДС0 = Итоги.СуммаНДС0 + ПозицияСуммаНДС; + ТекстНалога = НСтр("ru='НДС 0%'"); + ИначеЕсли ПозицияЧека.СтавкаНДС = 110 Тогда + Итоги.СуммаПозицийНДС110 = Итоги.СуммаПозицийНДС110 + ПозицияЧека.Сумма; + Итоги.СуммаНДС110 = Итоги.СуммаНДС110 + ПозицияСуммаНДС; + ТекстНалога = НСтр("ru='НДС 10/110'"); + ИначеЕсли ПозицияЧека.СтавкаНДС = 118 Тогда + Итоги.СуммаПозицийНДС118 = Итоги.СуммаПозицийНДС118 + ПозицияЧека.Сумма; + Итоги.СуммаНДС118 = Итоги.СуммаНДС118 + ПозицияСуммаНДС; + ТекстНалога = НСтр("ru='НДС 18/118'"); + ИначеЕсли ПозицияЧека.СтавкаНДС = 120 Тогда + Итоги.СуммаПозицийНДС120 = Итоги.СуммаПозицийНДС120 + ПозицияЧека.Сумма; + Итоги.СуммаНДС120 = Итоги.СуммаНДС120 + ПозицияСуммаНДС; + ТекстНалога = НСтр("ru='НДС 20/120'"); + Иначе + Итоги.СуммаПозицийБезНДС = Итоги.СуммаПозицийБезНДС + ПозицияЧека.Сумма; + Итоги.СуммаБезНДС = Итоги.СуммаБезНДС + ПозицияЧека.Сумма; + ТекстНалога = НСтр("ru='БЕЗ НДС'"); + КонецЕсли; + + Если ПустаяСтрока(ТекстСкидки) Тогда + ВывестиСтрокуСлева(Контекст, ТекстНалога); + Иначе + ВывестиСтрокуПоШирине(Контекст, ТекстНалога, ТекстСкидки); + КонецЕсли; + +КонецПроцедуры + +// Выводит все позиции чека фискального документа в табличный документ +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// ОбщиеПараметры - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// +Процедура ВывестиПозицииЧека(Контекст, ОбщиеПараметры) + + Для Каждого ТекущаяПозицияЧека Из ОбщиеПараметры.ПозицииЧека Цикл + ПозицияЧека = ТекущаяПозицияЧека; // см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека + Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда + НомерСекции = ?(ПозицияЧека.Свойство("НомерСекции") , ПозицияЧека.НомерСекции , 0); + СтавкаНДС = ?(ПозицияЧека.Свойство("СтавкаНДС") , ПозицияЧека.СтавкаНДС , 0); + СуммаНДС = ?(ПозицияЧека.Свойство("СуммаНДС") , ?(ПустаяСтрока(ПозицияЧека.СуммаНДС), 0, ПозицияЧека.СуммаНДС), 0); + + ВывестиРазделитель(Контекст, "НетЛинии"); + ВывестиСтрокуСлева(Контекст, ПозицияЧека.Наименование, Истина); + + ЦенаДляПечати = Окр(ПозицияЧека.Сумма / ?(ПозицияЧека.Количество > 0, ПозицияЧека.Количество, 1), 2); + СтрокаТовара = СтрШаблон("%1 х %2 = %3", + Формат(ПозицияЧека.Количество, Контекст.ФорматКоличество), + Формат(ЦенаДляПечати, Контекст.ФорматЧисло), + Формат(ПозицияЧека.Сумма, Контекст.ФорматЧисло)); + ВывестиПолеПоШирине(Контекст, ,СтрокаТовара); + Контекст.Итоги.СуммаЧека = Контекст.Итоги.СуммаЧека + ПозицияЧека.Сумма; + + ВывестиПозицииЧекаНалогИСкидка(Контекст, ПозицияЧека); + + ВывестиСтрокуСлева(Контекст, ВРег(Строка(ПозицияЧека.ПризнакПредметаРасчета))); + Если НЕ ПустаяСтрока(ПозицияЧека.ПризнакСпособаРасчета) Тогда + ПризнакСпособаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодПризнакаСпособаРасчета(ПозицияЧека.ПризнакСпособаРасчета); + ПризнакСпособаРасчетаНаименование = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеПризнакаСпособаРасчета(ПризнакСпособаРасчета); + ВывестиСтрокуСлева(Контекст, ПризнакСпособаРасчетаНаименование); + КонецЕсли; + + Если НЕ ПустаяСтрока(ПозицияЧека.КонтрольнаяМарка) Тогда + ВывестиСтрокуСлева(Контекст, НСтр("ru='[М]'")); + ИначеЕсли ПозицияЧека.ДанныеКодаТоварнойНоменклатуры.Свойство("РеквизитКодаТовара") Тогда + Штрихкод = ПозицияЧека.Штрихкод; + Если ПозицияЧека.Свойство("КодВидаНоменклатурнойКлассификации") И НЕ ПустаяСтрока(ПозицияЧека.КодВидаНоменклатурнойКлассификации) Тогда + Штрихкод = ПозицияЧека.КодВидаНоменклатурнойКлассификации; + КонецЕсли; + КодТовараТекст = Штрихкод; + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + КодТовараИдентифицируетЭкземпляр = МодульМенеджерОборудованияМаркировка.КодТовараИдентифицируетЭкземпляр(ПозицияЧека.ДанныеКодаТоварнойНоменклатуры.РеквизитКодаТовара, Штрихкод); + Если КодТовараИдентифицируетЭкземпляр Тогда + КодТовараТекст = НСтр("ru='[М]'") + КодТовараТекст + Символы.НПП; + КонецЕсли; + КонецЕсли; + ВывестиСтрокуСлева(Контекст, КодТовараТекст); + КонецЕсли; + + ВывестиПолеСлева(Контекст, НСтр("ru='КОД СТРАНЫ:'"), ПозицияЧека.КодСтраныПроисхожденияТовара); + ВывестиПолеСлева(Контекст, НСтр("ru='ДЕКЛАРАЦИЯ:'"), ПозицияЧека.НомерТаможеннойДекларации); + ВывестиПолеСлева(Контекст, НСтр("ru='АКЦИЗ:'"), Строка(ПозицияЧека.СуммаАкциза)); + ВывестиПолеСлева(Контекст, НСтр("ru='ЕД.ИЗМЕРЕНИЯ:'"), ПозицияЧека.ЕдиницаИзмерения); + ВывестиСтрокуСлева(Контекст, ВРег(Строка(ПозицияЧека.ПризнакАгентаПоПредметуРасчета))); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ПОСТАВЩИК:'"), ПозицияЧека.ДанныеПоставщика.Наименование); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ТЛФ.ПОСТ.:'"), ПозицияЧека.ДанныеПоставщика.Телефон); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ИНН ПОСТАВЩИКА:'"), ПозицияЧека.ДанныеПоставщика.ИНН); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ПЛ.АГЕНТ ОПЕР.:'"), ПозицияЧека.ДанныеАгента.ПлатежныйАгент.Операция); + // АПК: 1299-выкл особенность форматирования в чеках + ВывестиПолеПоШирине(Контекст, НСтр("ru=' ПЛ.АГЕНТ ТЛФ.:'"), ПозицияЧека.ДанныеАгента.ПлатежныйАгент.Телефон); + // АПК: 1299-вкл + ВывестиПолеПоШирине(Контекст, НСтр("ru='ОПЕРАТОР ПЕРЕВОДА:'"), ПозицияЧека.ДанныеАгента.ОператорПеревода.Наименование); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ТЛФ.ОП.ПЕРЕВОДА:'"), ПозицияЧека.ДанныеАгента.ОператорПеревода.Телефон); + ВывестиПолеПоШирине(Контекст, НСтр("ru='АДР.ОП.ПЕРЕВОДА:'"), ПозицияЧека.ДанныеАгента.ОператорПеревода.Адрес); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ИНН ОП.ПЕРЕВОДА:'"), ПозицияЧека.ДанныеАгента.ОператорПеревода.ИНН); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ОПЕР.ПО ПРИЕМУ ПЛАТ.ТЛФ:'"), ПозицияЧека.ДанныеАгента.ОператорПоПриемуПлатежей.Телефон); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ДОП.РЕК.:'"), ПозицияЧека.ДополнительныйРеквизит); + + ИначеЕсли ПозицияЧека.Свойство("ТекстоваяСтрока") Тогда + ВывестиСтрокуСлева(Контекст, ПозицияЧека.Текст); + ИначеЕсли ПозицияЧека.Свойство("ШтрихКод") Тогда + СтрокаШтрихкода = "|ШтрихКод|" + ПозицияЧека.ТипШтрихкода + "|" + ПозицияЧека.ШтрихКод; + ВывестиШтрихкод( + Контекст, + ПозицияЧека.ТипШтрихкода, + МенеджерОборудованияКлиентСервер.Base64ВШтрихкод(ПозицияЧека.ШтрихКодBase64)); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Вспомогательная функция расчет итогов оплаты +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// ОбщиеПараметры - Структура - параметры фискального документа загруженная из данных XML +// см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +Процедура ВывестиТаблицуОплатРассчитать(Контекст, ОбщиеПараметры) + + Оплата = Контекст.Оплата; + ТаблицаОплат = ОбщиеПараметры.ТаблицаОплат; + + Для Каждого СтрокаОплаты Из ТаблицаОплат Цикл + Если СтрокаОплаты.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно") Тогда + Оплата.СуммаЭлектронными = Оплата.СуммаЭлектронными + СтрокаОплаты.Сумма; + ИначеЕсли СтрокаОплаты.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Предоплата") Тогда + Оплата.СуммаПредоплатой = Оплата.СуммаПредоплатой + СтрокаОплаты.Сумма; + ИначеЕсли СтрокаОплаты.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Постоплата") Тогда + Оплата.СуммаПостоплатой = Оплата.СуммаПостоплатой + СтрокаОплаты.Сумма; + ИначеЕсли СтрокаОплаты.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.ВстречноеПредоставление") Тогда + Оплата.СуммаПредоставлением = Оплата.СуммаПредоставлением + СтрокаОплаты.Сумма; + Иначе + Оплата.СуммаНаличными = Оплата.СуммаНаличными + СтрокаОплаты.Сумма; + КонецЕсли; + КонецЦикла; + + Оплата.СуммаОплаты = Оплата.СуммаНаличными + + Оплата.СуммаЭлектронными + + Оплата.СуммаПостоплатой + + Оплата.СуммаПредоплатой + + Оплата.СуммаПредоставлением; + Оплата.СуммаСдачи = Оплата.СуммаОплаты - Контекст.Итоги.СуммаЧека; + +КонецПроцедуры + +// Вспомогательная функция для вывода строки оплаты фискального документа в табличный документ +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +Процедура ВывестиТаблицуОплатСуммаНДС(Контекст, ИмяПоля, СуммаПозицийНДС, СуммаНДС = 0, Отношение = 1) + + Если СуммаПозицийНДС > 0 Тогда + ЗначениеНДС = ?(СуммаНДС > 0, СуммаНДС, СуммаПозицийНДС / Отношение); + ВывестиПолеПоШирине(Контекст, ИмяПоля, ЗначениеНДС); + КонецЕсли; + +КонецПроцедуры + +// Выводит таблицу оплат фискального документа в табличный документ +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// ОбщиеПараметры - Структура - параметры фискального документа загруженная из данных XML +// см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +Процедура ВывестиТаблицуОплат(Контекст, ОбщиеПараметры) + + ВывестиТаблицуОплатРассчитать(Контекст, ОбщиеПараметры); + Оплата = Контекст.Оплата; + Итоги = Контекст.Итоги; + + ВывестиРазделитель(Контекст, "Сплошная"); + ВывестиРазделитель(Контекст, "НетЛинии"); + ВывестиПолеПоШирине(Контекст, НСтр("ru='ИТОГ'"), Итоги.СуммаЧека); + ВывестиРазделитель(Контекст, "Сплошная"); + ВывестиРазделитель(Контекст, "НетЛинии"); + + ВывестиСтрокуСлева(Контекст, НСтр("ru='ОПЛАТА'")); + + ФорматФФД = Контекст.ФорматФФД; + + Если ФорматФФД = "1.0" Тогда // ФФД 1.0 + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='НАЛИЧНЫМИ'"), Оплата.СуммаНаличными); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), Оплата.СуммаЭлектронными); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), Оплата.СуммаПостоплатой); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), Оплата.СуммаПредоплатой); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), Оплата.СуммаПредоставлением); + Иначе // ФФД 1.05 & ФФД 1.1 + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='НАЛИЧНЫМИ'"), Оплата.СуммаНаличными); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='БЕЗНАЛИЧНЫМИ'"), Оплата.СуммаЭлектронными); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='ПРЕДВАРИТЕЛЬНАЯ'"), Оплата.СуммаПредоплатой); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='ПОСЛЕДУЮЩАЯ'"), Оплата.СуммаПостоплатой); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='ИНАЯ ФОРМА'"), Оплата.СуммаПредоставлением); + КонецЕсли; + + Если Оплата.СуммаСдачи > 0 Тогда + ВывестиПолеПоШирине(Контекст, НСтр("ru='ПОЛУЧЕНО'"), Оплата.СуммаОплаты); + ВывестиПолеПоШирине(Контекст, " " + НСтр("ru='СДАЧА'"), Оплата.СуммаСдачи); + КонецЕсли; + + Если ОбщиеПараметры.Свойство("СистемаНалогообложения") Тогда + СистемаНалогообложенияКод = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодСистемыНалогообложенияККТ(ОбщиеПараметры.СистемаНалогообложения); + СистемаНалогообложения = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеСистемыНалогообложения(СистемаНалогообложенияКод, Истина); + ВывестиПолеПоШирине(Контекст, НСтр("ru='СНО:'"), СистемаНалогообложения); + КонецЕсли; + + // АПК: 1299-выкл особенность форматирования в чеках + ВывестиТаблицуОплатСуммаНДС(Контекст, НСтр("ru=' СУММА НДС 20%'"), Итоги.СуммаПозицийНДС20, Итоги.СуммаНДС20, 120*20); + ВывестиТаблицуОплатСуммаНДС(Контекст, НСтр("ru=' СУММА НДС 18%'"), Итоги.СуммаПозицийНДС18, Итоги.СуммаНДС18, 118*18); + ВывестиТаблицуОплатСуммаНДС(Контекст, НСтр("ru=' СУММА НДС 10%'"), Итоги.СуммаПозицийНДС10, Итоги.СуммаНДС10, 110*10); + ВывестиТаблицуОплатСуммаНДС(Контекст, НСтр("ru=' СУММА НДС 20/120'"), Итоги.СуммаПозицийНДС120, Итоги.СуммаНДС120, 120*20); + ВывестиТаблицуОплатСуммаНДС(Контекст, НСтр("ru=' СУММА НДС 18/118'"), Итоги.СуммаПозицийНДС118, Итоги.СуммаНДС118, 118*18); + ВывестиТаблицуОплатСуммаНДС(Контекст, НСтр("ru=' СУММА НДС 10/110'"), Итоги.СуммаПозицийНДС110, Итоги.СуммаНДС110, 110*10); + ВывестиТаблицуОплатСуммаНДС(Контекст, НСтр("ru=' СУММА НДС 0%'"), Итоги.СуммаПозицийНДС0); + ВывестиТаблицуОплатСуммаНДС(Контекст, НСтр("ru=' СУММА БЕЗ НДС'"), Итоги.СуммаПозицийБезНДС); + // АПК: 1299-вкл + + ВывестиСтрокуСлева(Контекст,НСтр("ru='КАССИР'") + ":" + Символы.НПП + ОбщиеПараметры.Кассир); + +КонецПроцедуры + +// Выводит подвал фискального документа с фискальными данными и QR кодом +// Параметры: +// Контекст - Структура - контекст который вернула функция ПараметрыВыводЧека() +// ОбщиеПараметры - Структура - параметры фискального документа загруженная из данных XML +// см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// Реквизиты - Структура - параметры фискального документа из регистра сведений фискальные документы +// см. ДанныеФискальнойОперации() +Процедура ВывестиРеквизитыЧека(Контекст, ОбщиеПараметры, Реквизиты) + + ВывестиСтрокуПоШирине(Контекст, НСтр("ru = 'РН ККТ:'"), Реквизиты.РегистрационныйНомерККТ); + ВывестиСтрокуПоШирине(Контекст, НСтр("ru = 'ФН №:'"), Реквизиты.ЗаводскойНомерФН); + ВывестиСтрокуПоШирине(Контекст, НСтр("ru = 'ФД №:'"), Реквизиты.НомерЧекаККМ); + ВывестиСтрокуПоШирине(Контекст, НСтр("ru = 'ФП:'"), Реквизиты.ФискальныйПризнак); + + ПараметрыQRКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыQRКодаЧекаККТ(); + ПараметрыQRКода.ДатаВремяРасчета = Реквизиты.Дата; + ПараметрыQRКода.СуммаРасчета = Реквизиты.Сумма; + ПараметрыQRКода.ФискальныйПризнак = Реквизиты.ФискальныйПризнак; + ПараметрыQRКода.ПризнакРасчета = Реквизиты.ТипРасчета; + ПараметрыQRКода.НомерФискальногоНакопителя = Реквизиты.ЗаводскойНомерФН; + ПараметрыQRКода.НомерФискальногоДокумента = Реквизиты.НомерЧекаККМ; + QRКодЧекаККТ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СформироватьQRКодЧекаККТ(ПараметрыQRКода); + + ВывестиШтрихкод(Контекст, "QR", QRКодЧекаККТ); + ВывестиРазделитель(Контекст, "НетЛинии"); + + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти 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..77793af --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваВызовСервера/Ext/Module.bsl @@ -0,0 +1,921 @@ + +#Область ПрограммныйИнтерфейс + +#Область ПараметрыРегистрации + +// Функция возвращает поддерживает ли фискальное устройство. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства +// +// Возвращаемое значение: +// Булево - Фискальное устройство поддерживает проверку кодов маркировки +Функция ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ИдентификаторУстройства) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ИдентификаторУстройства); + +КонецФункции + +// Функция возвращает для фискального устройства версию ФФД. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства. +// +// Возвращаемое значение: +// Неопределено - Фискальное устройство поддерживает версию ФФД +Функция ФискальноеУстройствоПоддерживаетВерсиюФФД(ИдентификаторУстройства) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ФискальноеУстройствоПоддерживаетВерсиюФФД(ИдентификаторУстройства); + +КонецФункции + +#КонецОбласти + +#Область ФормированиеДанныхККТ + +// Получить таблицу параметров смены из ККТ. +// +// Параметры: +// ДанныеXML - Строка - строка XML +// РевизияИнтерфейса - Число - ревизия интерфейса +// НомерСменыККТ - Число - номер смены +// НомерЧекаККТ - Число - номер чека +// +// Возвращаемое значение: +// Структура. +// +Функция ПолучитьПараметрыСменыИзXMLПакета(ДанныеXML, РевизияИнтерфейса = 0, НомерСменыККТ = 0, НомерЧекаККТ = 0) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПолучитьПараметрыСменыИзXMLПакета(ДанныеXML, РевизияИнтерфейса, НомерСменыККТ, НомерЧекаККТ); + +КонецФункции + +// Возвращает XML текст инфо-квитанции +// Параметры: +// Данные - Структура +// ШиринаСтроки - Число +// Ревизия - Строка +// +// Возвращаемое значение: +// Строка - Строка XML +// +Функция XMLПакетИнфоКвитанции(Данные, ШиринаСтроки, Ревизия) Экспорт + + Шаблон = ШаблоныФискальныхДокументов.ШаблонИнфоКвитанция(ШиринаСтроки, Данные); + НефискальныйДокумент = ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон); + Возврат ОборудованиеЧекопечатающиеУстройства.ПолучитьXMLПакетДляТекста(НефискальныйДокумент, Ревизия); + +КонецФункции + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +#Область ФискальныеОперации + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ЗаписатьФискальнуюОперацию. +// Записать операцию в журнал фискальных операций. +// +// Параметры: +// ПараметрыФискализации - Структура - +Процедура ЗаписатьФискальнуюОперацию(ПараметрыФискализации) Экспорт + + ОборудованиеЧекопечатающиеУстройства.ЗаписатьФискальнуюОперацию(ПараметрыФискализации); + +КонецПроцедуры + +// АПК: 142-выкл обратная совместимость + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ДанныеФискальнойОперации. +// Получить данные журнала фискальных операций. +// +// Параметры: +// ДокументСсылка - ДокументСсылка - Документ-основание. +// ИдентификаторЗаписи - РегистрСведенийЗапись.ФискальныеОперации - запись фискальной операции. +// ТипыДокументов - ПеречислениеСсылка.ТипыФискальныхДокументовККТ - типы документов. +// ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - тип расчета. +// ФискальныйПризнак - Строка - Фискальный признак документа +// +// Возвращаемое значение: +// Структура - Структура по свойствами: +// * НомерСменыККМ - Число - Номер чека ККМ. +// * Сумма - Число - Сумма. +// * ДокументОснование - ДокументСсылка - Документ-основание. +// * ДанныеXML - ХранилищеЗначения - Данные чека, переданные в ККТ (XML). +// +Функция ДанныеФискальнойОперации(ДокументСсылка, ИдентификаторЗаписи = Неопределено, ТипыДокументов = Неопределено, ТипРасчета = Неопределено, ФискальныйПризнак = Неопределено) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ДанныеФискальнойОперации(ДокументСсылка, ИдентификаторЗаписи, ТипыДокументов, ТипРасчета, ФискальныйПризнак); + +КонецФункции + +// АПК: 142-вкл + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ФискальнаяОперацииПоИдентификатору. +// Получить данные журнала фискальных операций. +// +// Параметры: +// ИдентификаторЗаписи - РегистрСведенийЗапись.ФискальныеОперации - Идентификатор записи. +// +// Возвращаемое значение: +// РегистрСведенийЗапись.ФискальныеОперации. +Функция ФискальнаяОперацииПоИдентификатору(ИдентификаторЗаписи) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ФискальнаяОперацииПоИдентификатору(ИдентификаторЗаписи); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.СписокФискальныхОпераций. +// Получить список журнала фискальных операций. +// +// Параметры: +// ДокументСсылка - ДокументСсылка - Документ-основание. +// ТипыДокументов - ПеречислениеСсылка.ТипыФискальныхДокументовККТ - типы фискальных документов. +// ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - типы расчета. +// +// Возвращаемое значение: +// Структура - Структура по свойствами: +// * НомерСменыККМ - Число - Номер чека ККМ. +// * Сумма - Число - Сумма. +// * ДокументОснование - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО - Документ-основание. +// * ДанныеXML - ХранилищеЗначения - Данные чека, переданные в ККТ (XML). +// +Функция СписокФискальныхОпераций(ДокументСсылка, ТипыДокументов = Неопределено, ТипРасчета = Неопределено) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.СписокФискальныхОпераций(ДокументСсылка, ТипыДокументов, ТипРасчета); + +КонецФункции + +#КонецОбласти + +#Область ОчередьЧековККТ + +// Устарела: следует использовать РаспределеннаяФискализация.ДобавитьЧекВОчередьЧековККТ. +// Добавить чек в очередь чеков ККТ. +// +// Параметры: +// ПараметрыЧекаККТ - Структура - Параметры чека ККТ: +// * ПозицииЧека - Массив из См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека - . +// ПараметрыПакетнойОперации - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПакетнойОперацииВОчередиЧеков +// Возвращаемое значение: +// РегистрСведенийЗапись.ОчередьЧековККТ. +Функция ДобавитьЧекВОчередьЧековККТ(ПараметрыЧекаККТ, ПараметрыПакетнойОперации = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ДобавитьЧекВОчередьЧековККТ(ПараметрыЧекаККТ, ПараметрыПакетнойОперации); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать РаспределеннаяФискализация.ДанныеЧекаВОчереди. +// Данные чека из очереди. +// +// Параметры: +// ИдентификаторЗаписи - РегистрСведенийЗапись.ФискальныеОперации - Идентификатор записи. +// +// Возвращаемое значение: +// Структура. +Функция ДанныеЧекаВОчереди(ИдентификаторЗаписи) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ДанныеЧекаВОчереди(ИдентификаторЗаписи); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать РаспределеннаяФискализация.ЧекиВОчередиНаФискализацию. +// Чеки в очереди на фискализацию. +// +// Параметры: +// КассаККМ - ОпределяемыйТип.КассаБПО - Касса по которой провести фискализацию, если не указано тогда по всем. +// +// Возвращаемое значение: +// Массив. +Функция ЧекиВОчередиНаФискализацию(КассаККМ = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ЧекиВОчередиНаФискализацию(КассаККМ); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать РаспределеннаяФискализация.УдалитьЧекИзОчереди. +// Удалить чек из очереди. +// +// Параметры: +// ДокументСсылка - ДокументСсылка - Документ-основание. +// +Процедура УдалитьЧекИзОчереди(ДокументСсылка) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + МодульРаспределеннаяФискализация.УдалитьЧекИзОчереди(ДокументСсылка); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализация.ОчиститьОчередьЧеков. +// Очистить очередь чеков. +// +Процедура ОчиститьОчередьЧеков() Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + МодульРаспределеннаяФискализация.ОчиститьОчередьЧеков(); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализация.ЗаписатьСтатусЧекаВОчереди. +// Записать статус чека в очереди. +// +// Параметры: +// ПараметрыФискализации - Структура: +// * ИдентификаторФискальнойЗаписи - Строка +// * ДокументОснование - ДокументСсылка +// * РезультатВыполненияПакетнойОперации - Структура +// СтатусЧека - ПеречислениеСсылка.СтатусЧекаККТВОчереди +// ОборудованиеККТ - СправочникСсылка.ПодключаемоеОборудование - +// ТекстОшибки - Строка +Процедура ЗаписатьСтатусЧекаВОчереди(ПараметрыФискализации, СтатусЧека, ОборудованиеККТ = Неопределено, ТекстОшибки = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + МодульРаспределеннаяФискализация.ЗаписатьСтатусЧекаВОчереди(ПараметрыФискализации, СтатусЧека, ОборудованиеККТ, ТекстОшибки); + КонецЕсли; + +КонецПроцедуры + +// Устарела: следует использовать РаспределеннаяФискализация.ПолучитьСтатусЧекаВОчереди. +// Данные чека из очереди. +// +// Параметры: +// ИдентификаторЗаписи - РегистрСведенийЗапись.ФискальныеОперации - Идентификатор записи. +// +// Возвращаемое значение: +// Структура. +Функция ПолучитьСтатусЧекаВОчереди(ИдентификаторЗаписи) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ПолучитьСтатусЧекаВОчереди(ИдентификаторЗаписи); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать РаспределеннаяФискализация.ПолучитьФискальнуюОперацию. +// Данные чека из очереди по фискальный признаку и номеру чеку ККМ. +// +// Параметры: +// ФискальныйПризнак - Строка - Фискальный признак +// НомерЧекаККМ - Строка - Номер чека ККМ +// +// Возвращаемое значение: +// Неопределено, Структура - Получить фискальную операцию: +// * ДокументОснование - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО. +// * ИдентификаторЗаписи - УникальныйИдентификатор. +// * ФискальныйПризнак - Строка - +// * НомерСменыККМ - Число. +// * НомерЧекаККМ - Число. +Функция ПолучитьФискальнуюОперацию(ФискальныйПризнак, НомерЧекаККМ = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяРаспределеннаяФискализация() Тогда + МодульРаспределеннаяФискализация = ОбщегоНазначенияБПО.ОбщийМодуль("РаспределеннаяФискализация"); + Возврат МодульРаспределеннаяФискализация.ПолучитьФискальнуюОперацию(ФискальныйПризнак, НомерЧекаККМ); + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область ФормированиеДанныхККТ + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодТовараЗаполняетсяДляТиповИдентификаторов. +// Возвращает, для каких типов идентификаторов будет заполняться код товара. +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыИдентификаторовТовараККТ +// +Функция КодТовараЗаполняетсяДляТиповИдентификаторов() Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.КодТовараЗаполняетсяДляТиповИдентификаторов(); + Иначе + Возврат Новый Массив(); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ТипыТоваровДляЗаполненияОтраслевогоРеквизита. +// Возвращает для каких типов товаров будет заполняться отраслевой реквизит. +// +// Возвращаемое значение: +// Структура: +// * ИзделияИзНатуральногоМеха - Булево - Заполнения для изделия из натурального меха. +// * ОбъемноСортовойУчет - Булево - Заполнения для товаров объемно сортового учета. +// * МолочнаяПродукцияСНечитаемымиКМ - Булево - Заполнения для молочной продукция с нечитаемыми КМ. +// +Функция ТипыТоваровДляЗаполненияОтраслевогоРеквизита() Экспорт; + + Возврат ОборудованиеЧекопечатающиеУстройства.ТипыТоваровДляЗаполненияОтраслевогоРеквизита(); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров. +// Возвращает для каких типов товаров будет заполняться отраслевой реквизит. +// +// Возвращаемое значение: +// Структура - см.ТипыТоваровДляЗаполненияОтраслевогоРеквизита() +// +Функция ОтраслевойРеквизитЗаполняетсяДляТиповТоваров() Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров(); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ВедетсяОбъемноСортовойУчет. +// Возвращает ведется объемно сортовой учет. +// +// Возвращаемое значение: +// Булево. +// +Функция ВедетсяОбъемноСортовойУчет() Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ВедетсяОбъемноСортовойУчет(); + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодТовараИдентифицируетЭкземпляр. +// Идентифицирует ли код товара (значение тега 1162) экземпляр товара. +// +// Параметры: +// РеквизитКодаТовара - Строка - Значение реквизита кода товара в BASE64. +// ШтриховойКодТовара - Строка - Штриховой код товара. +// +// Возвращаемое значение: +// Булево - Истина - Если код товара идентифицирует экземпляр товара. +// +Функция КодТовараИдентифицируетЭкземпляр(Знач РеквизитКодаТовара = Неопределено, Знач ШтриховойКодТовара = Неопределено) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.КодТовараИдентифицируетЭкземпляр(РеквизитКодаТовара, ШтриховойКодТовара); + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.СформироватьТаблицуПараметровДляОперацииФН. +// Сформировать таблицу параметров в XML для операции с ФН. +// +// Параметры: +// СтруктураПараметров - Структура +// РевизияИнтерфейса - Число - Ревизия интерфейса +// +// Возвращаемое значение: +// ЗаписьXML. +// +Функция СформироватьТаблицуПараметровДляОперацииФН(СтруктураПараметров, РевизияИнтерфейса = 0) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.СформироватьТаблицуПараметровДляОперацииФН(СтруктураПараметров, РевизияИнтерфейса); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ПараметрыИзXMLПакетаККТ. +// Получить таблицу параметров из ККТ. +// +// Параметры: +// Данные - Структура - Данные. +// РевизияИнтерфейса - Число - Ревизия интерфейса +// +// Возвращаемое значение: +// Структура - Параметры из XMLПакета ККТ: +// * ПризнакФискализации - Строка. +// * НомерДокументаФискализации - Число. +// * ДатаВремяФискализации - Дата. +Функция ПараметрыИзXMLПакетаККТ(Данные, РевизияИнтерфейса = 0) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПараметрыИзXMLПакетаККТ(Данные, РевизияИнтерфейса); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.СформироватьXMLПакетДляФискализацияЧека. +// Процедура формирует XML пакет для Фискализация чека. +// +// Параметры: +// ОбщиеПараметры - Структура - параметры чека +// ПараметрыФискализации - Структура - параметры фискализации чека. +// ВключатьПерсональныеДанные - Булево - Включать персональные данные. +// ПерсональныеДанные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПерсональныеДанныеПокупателя. +// ТипПерсональныхДанных - ПеречислениеСсылка.ТипыПерсональныхДанныхККТ - Тип персональных данных. +Процедура СформироватьXMLПакетДляФискализацияЧека(ОбщиеПараметры, ПараметрыФискализации, ВключатьПерсональныеДанные = Ложь, + ПерсональныеДанные = Неопределено, ТипПерсональныхДанных = Неопределено) Экспорт + + ОборудованиеЧекопечатающиеУстройства.СформироватьXMLПакетДляФискализацияЧека( + ОбщиеПараметры, + ПараметрыФискализации, + ВключатьПерсональныеДанные, + ПерсональныеДанные, + ТипПерсональныхДанных); + +КонецПроцедуры + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.СформироватьXMLПакетДляЧекаКоррекции. +// Процедура формирует XML пакет для Фискализация чека коррекции. +// +// Параметры: +// ОбщиеПараметры - Структура - параметры чека +// ПараметрыФискализации - Структура - параметры фискализации чека. +Процедура СформироватьXMLПакетДляЧекаКоррекции(ОбщиеПараметры, ПараметрыФискализации) Экспорт + + ОборудованиеЧекопечатающиеУстройства.СформироватьXMLПакетДляЧекаКоррекции(ОбщиеПараметры, ПараметрыФискализации); + +КонецПроцедуры + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ПолучитьXMLПакетДляОперации. +// Получить XMLПакет для операции. +// +// Параметры: +// ОбщиеПараметры - Структура, Булево - Общие параметры +// РевизияИнтерфейса - Число - Ревизия интерфейса +// +// Возвращаемое значение: +// Строка - Получить XMLПакет для операции +Функция ПолучитьXMLПакетДляОперации(ОбщиеПараметры, РевизияИнтерфейса = 0) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПолучитьXMLПакетДляОперации(ОбщиеПараметры, РевизияИнтерфейса); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ПолучитьXMLПакетДляТекста. +// Получить XMLПакет для текста. +// +// Параметры: +// СтрокаТекста - Строка, Структура - Строка текста +// РевизияИнтерфейса - Число - Ревизия интерфейса +// +// Возвращаемое значение: +// Массив из ЗаписьXML - Получить XMLПакет для текста. +Функция ПолучитьXMLПакетДляТекста(СтрокаТекста, РевизияИнтерфейса = 0) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПолучитьXMLПакетДляТекста(СтрокаТекста, РевизияИнтерфейса); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ПолучитьПараметрыСостоянияИзXMLПакета. +// Получить параметры состояния из XML пакета. +// +// Параметры: +// Данные - Произвольный. +// НомерСмены - Неопределено - Номер смены +// +// Возвращаемое значение: +// Структура - Получить параметры состояния из XMLПакета: +// * ДатаСменыККТ - Число - +// * НомерСменыККТ - Число - +// * НомерЧекаККТ - Число - +// * НомерЧекаЗаСмену - Число - +// * СтатусСмены - Неопределено - +// * СчетчикиОперацийПриход - Структура -: +// * КоличествоЧеков - Число. +// * СуммаЧеков - Число. +// * КоличествоЧековКоррекции - Число. +// * СуммаЧековКоррекции - Число. +// * СчетчикиОперацийВозвратПрихода - Структура -: +// * КоличествоЧеков - Число. +// * СуммаЧеков - Число. +// * КоличествоЧековКоррекции - Число. +// * СуммаЧековКоррекции - Число. +// * СчетчикиОперацийРасход - Структура -: +// * КоличествоЧеков - Число. +// * СуммаЧеков - Число. +// * КоличествоЧековКоррекции - Число. +// * СуммаЧековКоррекции - Число. +// * СчетчикиОперацийВозвратРасхода - Структура -: +// * КоличествоЧеков - Число. +// * СуммаЧеков - Число. +// * КоличествоЧековКоррекции - Число. +// * СуммаЧековКоррекции - Число. +// * КоличествоЧеков - Число. +// * ОстатокНаличных - Число. +// * ПревышеноВремяОжиданияОтветаОФД - Булево - +// * КоличествоНепереданныхФД - Неопределено - +// * НомерПервогоНепереданногоФД - Неопределено - +// * ДатаПервогоНепереданногоФД - Неопределено - +// * НеобходимаСрочнаяЗаменаФН - Булево - +// * ПамятьФНПереполнена - Булево - +// * РесурсФНИсчерпан - Булево - +Функция ПолучитьПараметрыСостоянияИзXMLПакета(Данные, НомерСмены = Неопределено) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПолучитьПараметрыСостоянияИзXMLПакета(Данные, НомерСмены); + +КонецФункции + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ЗаполнитьРезультатыФискализацияЧекаИзXMLПакета. +// Заполнить результаты фискализация чека из XML пакета. +// +// Параметры: +// ПараметрыФискализации - Структура +Процедура ЗаполнитьРезультатыФискализацияЧекаИзXMLПакета(ПараметрыФискализации) Экспорт + + ОборудованиеЧекопечатающиеУстройства.ЗаполнитьРезультатыФискализацияЧекаИзXMLПакета(ПараметрыФискализации); + +КонецПроцедуры + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ЗаполнитьXMLПакетыДляТекстовогоДокумента. +// Процедура заполняет XML пакет для печати текстового документа +// +// Параметры: +// ТестовыеЧеки - Массив из Строка - +// НефискальныеДокументы - Массив из см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ПараметрыПодключения - См. МенеджерОборудованияКлиентСервер.ПараметрыПодключения +// ШиринаСтроки - Число - ширина строки печатающего устройства +// +Процедура ЗаполнитьXMLПакетыДляТекстовогоДокумента(ТестовыеЧеки, НефискальныеДокументы, ПараметрыПодключения, ШиринаСтроки = 32) Экспорт + + ОборудованиеЧекопечатающиеУстройства.ЗаполнитьXMLПакетыДляТекстовогоДокумента(ТестовыеЧеки, НефискальныеДокументы, ПараметрыПодключения, ШиринаСтроки); + +КонецПроцедуры + +// Устарела: следует использовать ОборудованиеЧекопечатающиеУстройства.ЗагрузитьДанныеФискализацииИзXML. +// Получить структуру чека из XML. +// +// Параметры: +// ДанныеXML - Строка -Данные XML +// +// Возвращаемое значение: +// Структура - Загрузить данные фискализации из XML: +// * ДанныеКоррекции - Структура -: +// ** НомерПредписания - Число - +// ** ДатаКоррекции - Дата - +// ** ОписаниеКоррекции - Строка - +// ** ТипКоррекции - Число - +// * НеприменениеККТ - Булево - +// * КорректируемыйДокумент - Произвольный - +// * ЕстьПерсональныеДанные - Булево - +// * ИндивидуальныйРежимПодготовкиДанныхКПередачеВОФД - Булево - +// * ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число - +// * СпособФорматноЛогическогоКонтроля - Неопределено - +// * СформироватьЧекКоррекции - Булево - +// * ДополнительныйРеквизитПользователя - Структура -: +// ** Значение - Произвольный - +// ** Наименование - Строка - +// * ДополнительныйРеквизит - Неопределено - +// * НефискальныеДокументы - Массив из ОпределяемыйТип.ОснованиеФискальнойОперацииБПО - +// * КассаККМ - Произвольный - +// * ШаблонЧека - Произвольный - +// * ТаблицаОплат - Массив - +// * ПозицииЧека - Массив - +// * КопийЧека - Число - +// * ТекстПодвала - Строка - +// * ТекстШапки - Строка - +// * ДатаВремя - Дата - +// * НомерСмены - Число - +// * НомерЧека - Строка - +// * НомерКассы - Строка - +// * НаименованиеМагазина - Строка - +// * АдресМагазина - Строка - +// * ОрганизацияКПП - Строка - +// * ОрганизацияИНН - Строка - +// * ОрганизацияНазвание - Строка - +// * СерийныйНомер - Строка - +// * ПолучательИНН - Строка - +// * Получатель - Строка - +// * ДанныеПоставщика - Структура -: +// ** ИНН - Строка - +// ** Наименование - Строка - +// ** Телефон - Строка - +// * ДанныеАгента - Структура -: +// ** ОператорПоПриемуПлатежей - Структура -: +// *** Телефон - Неопределено - +// ** ОператорПеревода - Структура -: +// *** Телефон - Строка - +// *** Наименование - Строка - +// *** Адрес - Строка - +// *** ИНН - Строка - +// ** ПлатежныйАгент - Структура -: +// *** Операция - Строка - +// *** Телефон - Строка - +// * ПризнакАгента - Неопределено - +// * ПокупательНомер - Строка - +// * ПокупательEmail - Строка - +// * ОтправительEmail - Строка - +// * МестоРасчетов - Строка - +// * АдресРасчетов - Строка - +// * СистемаНалогообложения - ПеречислениеСсылка.ТипыСистемНалогообложенияККТ - +// * Отправляет1СEmail - Булево - +// * Отправляет1СSMS - Булево - +// * ТипРасчета - ПеречислениеСсылка.ТипыРасчетаДенежнымиСредствами - +// * Электронно - Булево - +// * ТорговыйОбъект - Неопределено - +// * Организация - Неопределено - +// * ИдентификаторФискальнойЗаписи - Неопределено - +// * ДокументОснование - Неопределено - +// * КассирИНН - Неопределено - +// * Кассир - Строка - +// * КорректируемыйДокумент - ОпределяемыйТип.ОснованиеКассовогоЧекаКоррекцииБПО +// * НеприменениеККТ - Булево - +// * ДанныеКоррекции - Структура -: +// ** ТипКоррекции - Число - +// ** ОписаниеКоррекции - Строка +// ** ДатаКоррекции - Дата +// ** НомерПредписания - Число +Функция ЗагрузитьДанныеФискализацииИз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.0" +// используются только виды оплат "НАЛИЧНЫМИ", "ЭЛЕКТРОННО" +// +// Возвращаемое значение: +// ТабличныйДокумент - табличный документ со сформированным фискальным документом, может быть сохранен в любой формат. +// +Функция СформироватьФискальныйДокумент(ТипДокумента, ОбщиеПараметры, РеквизитыЧека, ФорматФФД = "1.1") Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.СформироватьФискальныйДокумент(ТипДокумента, ОбщиеПараметры, РеквизитыЧека, ФорматФФД); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПередОткрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПередОткрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации); + +КонецФункции + +Функция ПередЗакрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПередЗакрытиемКассовойСмены(ПараметрыПодключения, ДанныеОперации); + +КонецФункции + +Функция ПослеОткрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПослеОткрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения); + +КонецФункции + +Функция ПослеЗакрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройства.ПослеЗакрытияКассовойСмены(ПараметрыПодключения, РезультатВыполнения); + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Коды маркировки + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодПланируемыйСтатусМаркируемогоТовара. +// Получить код планируемого статус маркируемого товара +// +// Параметры: +// ПланируемыйСтатусМаркируемогоТовара - ПеречислениеСсылка.ПланируемыйСтатусМаркируемогоТовара - Планируемый статус маркируемого товара. +// +// Возвращаемое значение: +// Число - Код планируемого статус маркируемого товара по ОФД +// +Функция КодПланируемыйСтатусМаркируемогоТовара(ПланируемыйСтатусМаркируемогоТовара) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.КодПланируемыйСтатусМаркируемогоТовара(ПланируемыйСтатусМаркируемогоТовара); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодОтветаОИСМОСтатусеТовара. +// Получить код ответ ОИСМ о статусе товара +// +// Параметры: +// ОтветОИСМОСтатусеТовара - ПеречислениеСсылка.ОтветОИСМОСтатусеТовара - Ответ от ИСМО. +// +// Возвращаемое значение: +// Число - Ответ ОИСМ о статусе товара по ОФД +// +Функция КодОтветаОИСМОСтатусеТовара(ОтветОИСМОСтатусеТовара) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.КодОтветаОИСМОСтатусеТовара(ОтветОИСМОСтатусеТовара); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.ОтветОИСМОСтатусеТовараПоКоду. +// Получить ответ ОИСМ о статусе товара по коду. +// +// Параметры: +// ОтветОИСМОСтатусеТовара - Число - Ответ от ИСМО. +// +// Возвращаемое значение: +// ПеречислениеСсылка.ОтветОИСМОСтатусеТовара - Ответ ОИСМ. +// +Функция ОтветОИСМОСтатусеТовараПоКоду(ОтветОИСМОСтатусеТовара) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.ОтветОИСМОСтатусеТовараПоКоду(ОтветОИСМОСтатусеТовара); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.КодТипаМаркировкиККТ. +// Получить код типа маркировки ККТ по коду. +// +// Параметры: +// ТипМаркировкиККТ - ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТ. +// +// Возвращаемое значение: +// Строка, Произвольный - Код типа маркировки ККТ +Функция КодТипаМаркировкиККТ(ТипМаркировкиККТ) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.КодТипаМаркировкиККТ(ТипМаркировкиККТ); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.ТипМаркировкиККТПоКоду. +// Получить код типа маркировки ККТ. +// +// Параметры: +// КодТипМаркировкиККТ - Число - Код тип маркировки ККТ +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТПо коду +Функция ТипМаркировкиККТПоКоду(КодТипМаркировкиККТ) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.ТипМаркировкиККТПоКоду(КодТипМаркировкиККТ); + КонецЕсли; + +КонецФункции + +// Устарела: следует использовать МенеджерОборудованияМаркировка.СтатусРезультатаЗапросаКМПоКоду. +// Получить статус результата запроса КМ по коду. +// +// Параметры: +// КодСтатуса - Число - Код статуса. +// +// Возвращаемое значение: +// Произвольный, ПеречислениеСсылка.СтатусРезультатаЗапросаКМ - Статус результата запроса КМПо коду +Функция СтатусРезультатаЗапросаКМПоКоду(КодСтатуса) Экспорт + + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + Возврат МодульМенеджерОборудованияМаркировка.СтатусРезультатаЗапросаКМПоКоду(КодСтатуса); + КонецЕсли; + +КонецФункции + +#КонецОбласти 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..43eec7a --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиент/Ext/Module.bsl @@ -0,0 +1,2125 @@ + +#Область ПрограммныйИнтерфейс + +// Производить печать чека на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьФискализациюЧекаНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт; + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("CheckFiscalization", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры); + // Будет сформировано сообщения в службу технической поддержки при ошибке. + ПараметрыВыполнениеКоманды.СообщенияВСлужбуТехническойПоддержки = Истина; + Если ПараметрыОперации.Свойство("АвтономнаяККТ") И ПараметрыОперации.АвтономнаяККТ Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяАвтономнаяККТ() Тогда + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, + ИдентификаторКлиента, ПараметрыОперации, ПараметрыВыполнениеКоманды, ДополнительныеПараметры); + КонецЕсли; + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Производить печать чека на фискальном устройстве пакетом. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьФискализациюЧекаНаФискальномУстройствеПакетом(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("CheckFiscalizationPacket", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Производить инкассацию на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьИнкассациюНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("Encash", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + + Если ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ЭтоККТБезПодключения(ПараметрыОперации) Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяАвтономнаяККТ() Тогда + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, + ИдентификаторКлиента, ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Производить печать текста на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПечатьТекста(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Истина); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "PrintText"); + КонтекстОперации.Вставить("Результат", Истина); + + ВыполнитьВыборФискальногоУстройства(КонтекстОперации); + +КонецПроцедуры + +// Начать открытие смены на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОткрытиеСменыНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + Контекст = Новый Структура(); + Контекст.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + Контекст.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + Контекст.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + Контекст.Вставить("ПараметрыОперации" , ПараметрыОперации); + Контекст.Вставить("КассаККМ" , ПараметрыОперации.КассаККМ); + Оповещение = Новый ОписаниеОповещения("НачатьОткрытиеСменыНаФискальномУстройствеЗавершение", ЭтотОбъект, Контекст); + + ПараметрыОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("OpenShift", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + // Будет сформировано сообщения в службу технической поддержки при ошибке. + ПараметрыВыполнениеКоманды.СообщенияВСлужбуТехническойПоддержки = Истина; + + Если ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ЭтоККТБезПодключения(ПараметрыОперации) Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяАвтономнаяККТ() Тогда + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент.НачатьВыполнениеКоманды(Оповещение, + ИдентификаторКлиента, ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(Оповещение, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Завершение операции открытие смены на фискальном устройстве. +// +// Параметры: +// Результат - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании. +// Контекст - Структура +// +Процедура НачатьОткрытиеСменыНаФискальномУстройствеЗавершение(Результат, Контекст) Экспорт + + Если Результат.Свойство("ПараметрыККТ") Тогда + ПараметрыККТ = Результат.ПараметрыККТ; + Если ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ЭтоККТБезПодключения(Контекст.ПараметрыОперации) Тогда + ПараметрыККТ.Вставить("ТипОборудования", ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.ККТ")); + ПараметрыККТ.Вставить("ПризнакАвтономногоРежима", Истина); + КонецЕсли; + МенеджерОборудованияКлиентПереопределяемый.ПриОткрытииСменыНаККТ(Контекст.ИдентификаторУстройства, Результат.ПараметрыККТ); + КонецЕсли; + + ВыполнитьОбработкуОповещения(Контекст.ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Начать закрытие смены на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьЗакрытиеСменыНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("CloseShift", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + // Будет сформировано сообщения в службу технической поддержки при ошибке. + ПараметрыВыполнениеКоманды.СообщенияВСлужбуТехническойПоддержки = Истина; + + Если ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ЭтоККТБезПодключения(ПараметрыОперации) Тогда + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяАвтономнаяККТ() Тогда + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент"); + МодульОборудованиеЧекопечатающиеАвтономныеУстройстваКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, + ИдентификаторКлиента, ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + Иначе + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Начать открытие денежного ящика фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОткрытиеДенежногоЯщика(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт; + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "OpenCashDrawer"); + КонтекстОперации.Вставить("Результат", Истина); + + ВыполнитьВыборФискальногоУстройства(КонтекстОперации); + +КонецПроцедуры + +// Получение ширины строки в символах для фискального устройства. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолучениеШириныСтрокиПечатающегоУстройства(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства = Неопределено, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Ложь); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "GetLineLength"); + КонтекстОперации.Вставить("Результат", Истина); + + ВыполнитьВыборФискальногоУстройства(КонтекстОперации); + +КонецПроцедуры + +// Производить аннулирование чека на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьАннулированиеЧекаНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("AnnulCheck", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Ложь, Ложь); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Начать формирование отчета о текущем состоянии расчетов на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьФормированиеОтчетаОТекущемСостоянииРасчетов(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("ReportCurrentStatusOfSettlements", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Ложь); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Начать формирование отчета отчет без гашения на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьФормированиеОтчетаБезГашения(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("PrintXReport", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Ложь); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Производить получение параметров фискального устройства. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолучениеПараметровФискальногоУстройства(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + Если ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ЭтоККТБезПодключения(ПараметрыОперации) Тогда + + ПараметрыККТ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыРегистрацииККТ(); + ПараметрыККТ.Вставить("ТипОборудования", ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.ККТ")); + ПараметрыККТ.Вставить("ПризнакАвтономногоРежима", Истина); + + РезультатОперации = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(Истина); + РезультатОперации.Вставить("ПараметрыККТ" , ПараметрыККТ); + + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатОперации); + + Иначе + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("GetDataKKT", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Ложь, Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Получение текущего состояния фискального устройства. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолучениеТекущегоСостоянияФискальногоУстройства(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("GetCurrentStatus", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Начать операцию ФН для фискального устройства. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОперациюФНДляФискальногоУстройства(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("OperationFN", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Начать формирование чека коррекции на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьФормированиеЧекаКоррекцииНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("PrintReceiptCorrection", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Осуществляет печать копии чека. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПечатьКопииЧека(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Истина); + КонтекстОперации.Вставить("ОбработатьДанные" , Истина); + КонтекстОперации.Вставить("Команда" , "PrintCheckCopy"); + КонтекстОперации.Вставить("Результат", Истина); + + ВыполнитьВыборФискальногоУстройства(КонтекстОперации); + +КонецПроцедуры + +// Осуществляет печать QR кода на фискальном устройстве. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПечатьQRКодаНаФискальномУстройстве(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = Новый Структура(); + КонтекстОперации.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + КонтекстОперации.Вставить("ИдентификаторКлиента" , ИдентификаторКлиента); + КонтекстОперации.Вставить("ИдентификаторУстройства", ИдентификаторУстройства); + КонтекстОперации.Вставить("ПараметрыОперации" , ПараметрыОперации); + КонтекстОперации.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонтекстОперации.Вставить("ПодготовитьДанные" , Истина); + КонтекстОперации.Вставить("ОбработатьДанные" , Ложь); + КонтекстОперации.Вставить("Команда" , "PrintQRCode"); + КонтекстОперации.Вставить("Результат", Истина); + + ВыполнитьВыборФискальногоУстройства(КонтекстОперации); + +КонецПроцедуры + +// Осуществляет открытие сессии регистрации КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьОткрытиеСессииРегистрацииКМ(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("OpenSessionRegistrationKM", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Ложь, Ложь); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Осуществляет закрытии сессии регистрации КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьЗакрытииСессииРегистрацииКМ(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("CloseSessionRegistrationKM", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Ложь, Ложь); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Осуществляет запрос КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьЗапросКМ(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("RequestKM", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Истина, Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Начать получения результатов запроса КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПолученияРезультатовЗапросаКМ(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("GetProcessingKMResult", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Ложь, Истина); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Начать подтверждение КМ. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - оповещение при завершении. +// ИдентификаторКлиента - ФормаКлиентскогоПриложения -идентификатор формы. +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - идентификатор устройства, если неопределенно - будет предложен выбор. +// ПараметрыОперации - Структура - параметры выполнения операции. +// ДополнительныеПараметры - Структура - дополнительные команды. +// +Процедура НачатьПодтверждениеКМ(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыВыполнениеКоманды = МенеджерОборудованияКлиентСервер.ПараметрыВыполнениеКоманды("ConfirmKM", + "ОборудованиеЧекопечатающиеУстройства", ДополнительныеПараметры, Ложь, Ложь); + + МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторУстройства, + ПараметрыОперации, ПараметрыВыполнениеКоманды); + +КонецПроцедуры + +// Функция возвращает поддерживает ли фискальное устройство. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства. +// +// Возвращаемое значение: +// Булево - Фискальное устройство поддерживает проверку кодов маркировки +Функция ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ИдентификаторУстройства) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ИдентификаторУстройства); + +КонецФункции + +// Функция возвращает для фискального устройства версию ФФД. +// +// Параметры: +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства. +// +// Возвращаемое значение: +// Неопределено - Фискальное устройство поддерживает версию ФФД +Функция ФискальноеУстройствоПоддерживаетВерсиюФФД(ИдентификаторУстройства) Экспорт + + Возврат ОборудованиеЧекопечатающиеУстройстваВызовСервера.ФискальноеУстройствоПоддерживаетВерсиюФФД(ИдентификаторУстройства); + +КонецФункции + +#Область ПакетнаяОбработка + +// Возвращает структуру для заполнения данными оплаты эквайринговым терминалом и фискализации +// +// Возвращаемое значение: +// Структура: +// * ПараметрыФискализацииЧека - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - См. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * ОповещениеВопросПользователю - ОписаниеОповещения - Описание оповещения пользователя, для самостоятельной выдачи +// сообщения, это оповещение будет вызвано в случае отрицательного ответа от эквайрингового +// терминала при оплате, в процедуру будут переданы результат выполнения пакета операций, +// а также структура содержащая контекст пакета, если требуется продолжить выполнение пакета, +// тогда нужно будет вызвать в модуле ОборудованиеЧекопечатающиеУстройстваКлиент процедуры +// "НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение" или +// "НачатьФискализациюЧекаСОплатойКартой_ПовторитьОплату". +// передав туда этот контекст. +// Процедура оповещения содержит следующие параметры: +// Результат - Структура: +// * РезультатОперации - См. РезультатФискализацииЧекаСОплатойКартой +// * КонтекстОперации - Структура - контекст пакета операции который нужно передать в процедуру +// "ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение" +// для продолжения выполнения пакета +// ДополнительныеПараметры - Любой - значение переданное при создании оповещения +// * СлипЧекВТелеФискального - Булево, Неопределено - Выводить слип-чек в теле фискального, Истина - слип-чек будет выведен +// в теле фискального, Ложь - короткий слип-чек не будет выводиться, Неопределено - короткий слип-чек +// будет выводиться если поддерживает драйвер оборудования. +// +// Пример: +// Определение процедуры оповещения пользователя +// Процедура ВопросПользователюЗавершение(Результат, ДополнительныеПараметры) +// РезультатОперации = Результат.РезультатОперации; +// КонтекстОперации = Результат.КонтекстОперации; +// ... +// // продолжить выполнение пакета операций +// ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение(Истина, КонтекстОперации); +// КонецПроцедуры +// +Функция ПараметрыФискализацияЧекаСОплатойКартой() Экспорт + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + ПараметрыВыполненияЭквайринговойОперации = МодульОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации(); + КонецЕсли; + ПараметрыОперацииФискализацииЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека(); + + Результат = Новый Структура(); + Результат.Вставить("ПараметрыФискализацииЧека", ПараметрыОперацииФискализацииЧека); + Результат.Вставить("ПараметрыВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("ОповещениеВопросПользователю", Неопределено); + Результат.Вставить("СлипЧекВТелеФискального", Неопределено); + Результат.Вставить("РеквизитыКартыQR", ""); + Возврат Результат; + +КонецФункции + +// Выполняет оплату на эквайринговом терминале, а затем фискализацию чека с печатью слип-чека в теле фискального, +// если операция при фискализации закончилась неуспешно, тогда происходит аварийная отмена последней операции на +// эквайринговом терминале. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - Описание процедуры которая будет вызвана при завершении операции +// со следующими параметрами: +// * Результат - См. РезультатФискализацииЧекаСОплатойКартой +// ИдентификаторКлиента - ФормаКлиентскогоПриложения - идентификатор формы. +// ИдентификаторККТ - СправочникСсылка.ПодключаемоеОборудование - ККТ на котором будет печататься фискальный чек +// содержащий в себе слип-чек. +// ИдентификаторЭТ - СправочникСсылка.ПодключаемоеОборудование - Эквайринговый терминал для обработки операции. +// ПараметрыОперации - См. ПараметрыФискализацияЧекаСОплатойКартой +// ДополнительныеПараметры - Структура - Дополнительные параметры которые можно передать в операции +// оплаты и фискализации. +Процедура НачатьФискализациюЧекаСОплатойКартой(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторККТ, + ИдентификаторЭТ, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + // Подготовить контекст пакета операций + КонтекстОперации = КонтекстФискализацииЧекаСОплатойКартой(); + КонтекстОперации.ОповещениеЗавершения = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторККТ = ИдентификаторККТ; + КонтекстОперации.ИдентификаторЭТ = ИдентификаторЭТ; + ЗаполнитьЗначенияСвойств(КонтекстОперации, ПараметрыОперации); + + ПодготовитьКонтекстПакетнойОперации(КонтекстОперации, ДополнительныеПараметры); + + // Выбрать ЭТ если не указан конкретный + ОповещениеЗавершенияПодключения = Новый ОписаниеОповещения("НачатьФискализациюЧекаСОплатойКартой_ЭквайринговаяОперация", + ЭтотОбъект, + КонтекстОперации); + ПакетнаяОбработка_ВыборУстройства(ОповещениеЗавершенияПодключения, КонтекстОперации); + +КонецПроцедуры + +// Запускает продолжение выполнения пакета, после обработки вопроса пользователя, или же успешной операции на +// эквайринговом терминале +// +// Параметры: +// Результат - Булево - Если Истина, тогда продолжается выполнение операции, иначе вызывается оповещение +// пользователя о завершении работы пакета +// КонтекстОперации - см. КонтекстФискализацииЧекаСОплатойКартой +Процедура НачатьФискализациюЧекаСОплатойКартой_ПродолжитьВыполнение(Результат, КонтекстОперации) Экспорт + + ОписаниеОшибки = КонтекстОперации.РезультатВыполненияЭквайринговойОперации.ОписаниеОшибки; + + Если Результат Тогда + НачатьФискализациюЧекаСОплатойКартой_Фискализация(КонтекстОперации); + Иначе + КонтекстОперации.Результат = Ложь; + КонтекстОперации.ОписаниеОшибки = ОписаниеОшибки; + ВывестиСлипЧекКакТекстовыйДокумент("Отказ", КонтекстОперации); + КонецЕсли; + +КонецПроцедуры + +// Запускает повторно эквайринговой операции. +// +// Параметры: +// КонтекстОперации - см. КонтекстФискализацииЧекаСОплатойКартой +Процедура НачатьФискализациюЧекаСОплатойКартой_ПовторитьОплату(КонтекстОперации) Экспорт + + ОписаниеОшибки = КонтекстОперации.РезультатВыполненияЭквайринговойОперации.ОписаниеОшибки; + + РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании(); + РезультатВыполнения.Результат = Истина; + РезультатВыполнения.ОписаниеОшибки = ОписаниеОшибки; + РезультатВыполнения.ПодключенноеУстройство = КонтекстОперации.ПодключенныйЭТ; + НачатьФискализациюЧекаСОплатойКартой_ЭквайринговаяОперация(РезультатВыполнения, КонтекстОперации); + +КонецПроцедуры + +// Возвращает структуру для заполнения данными операции продажи с выдачей наличных +// +// Возвращаемое значение: +// Структура: +// * ПараметрыФискализацииЧека - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыФискализацииЧекаВыдачи - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыФискализацииЧекаВозврата - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - См. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * ПризнакАгента - ПеречислениеСсылка.ПризнакиАгента - признак агента для автоматического формирования чека выдачи, +// см стандарт, по умолчанию Банковский платежный агент +// * ДанныеАгента - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеАгента +// * ДанныеПоставщика - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеПоставщика +// * СлипЧекВТелеФискального - Булево, Неопределено - Выводить слип-чек в теле фискального, Истина - слип-чек будет выведен +// в теле фискального, Ложь - короткий слип-чек не будет выводиться, Неопределено - короткий слип-чек +// будет выводиться если поддерживает драйвер оборудования. +// * ВыводитьУведомленияПользователя - Булево - если установлена Истина (по умолчанию), тогда при ошибке операции +// в пакете, будет выведено сообщение пользователю. +// * СуммаВыдачи - Число - сумма выдачи наличных денежных средств +Функция ПараметрыПродажаСВыдачейНаличных() Экспорт + + ПараметрыОперацииФискализацииЧекаПродажи = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека(); + ПараметрыВыполненияЭквайринговойОперации = Неопределено; + ПараметрыДанныеАгента = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеАгента(); + ПараметрыДанныеПоставщика = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеПоставщика(); + ПризнакАгента = ПредопределенноеЗначение("Перечисление.ПризнакиАгента.БанковскийПлатежныйАгент"); + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + ПараметрыВыполненияЭквайринговойОперации = МодульОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации(); + КонецЕсли; + + Результат = Новый Структура(); + Результат.Вставить("ПараметрыФискализацииЧека", ПараметрыОперацииФискализацииЧекаПродажи); + Результат.Вставить("ПараметрыФискализацииЧекаВыдачи", Неопределено); + Результат.Вставить("ПараметрыФискализацииЧекаВозврата", Неопределено); + Результат.Вставить("ПараметрыВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("ПризнакАгента", ПризнакАгента); + Результат.Вставить("ДанныеАгента", ПараметрыДанныеАгента); + Результат.Вставить("ДанныеПоставщика", ПараметрыДанныеПоставщика); + Результат.Вставить("СлипЧекВТелеФискального", Неопределено); + Результат.Вставить("ВыводитьУведомленияПользователя", Ложь); + Результат.Вставить("СуммаВыдачи", 0); + Результат.Вставить("ДокументОснованиеВыдачи", Неопределено); + Результат.Вставить("ДокументОснованиеВозврата", Неопределено); + Результат.Вставить("РеквизитыКартыQR", ""); + + Возврат Результат; + +КонецФункции + +// Заполняет параметры фискализации чека выдачи, по данным эквайринговой операции, параметров чека продажи, +// и данных переданных в параметрах операции, тогда они будут получены из чека продажи в соответствии +// с методическими указаниями для ФФД 1.05 и 1.1 ФНС России +// +// Параметры: +// ПараметрыОперации - см. ПараметрыПродажаСВыдачейНаличных +// +Процедура ЗаполнитьПараметрыЧекаВыдачи(ПараметрыОперации) Экспорт + ПризнакАгента = ПараметрыОперации.ПризнакАгента; + ДанныеАгента = ПараметрыОперации.ДанныеАгента; + ДанныеПоставщика = ПараметрыОперации.ДанныеПоставщика; + ПараметрыФискализацииЧека = ПараметрыОперации.ПараметрыФискализацииЧека; + ПараметрыВыполненияЭквайринговойОперации = ПараметрыОперации.ПараметрыВыполненияЭквайринговойОперации; + СуммаНаличных = ПараметрыВыполненияЭквайринговойОперации.СуммаНаличных; + + // создать чек выдачи наличных + ПараметрыЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека(); + + СписокСвойствДляКопирования = "ДокументОснование, Организация, ТорговыйОбъект, Электронно, Отправляет1СSMS, + |Отправляет1СEmail, СистемаНалогообложения, АдресРасчетов, МестоРасчетов, НомерАвтомата, ОтправительEmail, + |ПокупательEmail, ПокупательНомер, Получатель, ПолучательИНН, СубъектПерсональныхДанных, ЕстьПерсональныеДанные, + |ТипПерсональныхДанных, СерийныйНомер, ОрганизацияНазвание, ОрганизацияИНН, ОрганизацияКПП, АдресМагазина, + |НаименованиеМагазина, НомерКассы, НомерСмены, ДатаВремя, ТекстШапки, ТекстПодвала, КопийЧека, КассаККМ"; + ЗаполнитьЗначенияСвойств(ПараметрыЧека, ПараметрыФискализацииЧека, СписокСвойствДляКопирования); + + Если ЗначениеЗаполнено(ПараметрыОперации.ДокументОснованиеВыдачи) Тогда + ПараметрыЧека.ДокументОснование = ПараметрыОперации.ДокументОснованиеВыдачи; + КонецЕсли; + ПараметрыЧека.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.РасходДенежныхСредств"); + ПараметрыЧека.НомерЧека = Число(ПараметрыФискализацииЧека.НомерЧека) + 1; + + ЗаполнитьЗначенияСвойств(ПараметрыЧека.СведенияОПокупателе, ПараметрыФискализацииЧека.СведенияОПокупателе); + + // Позиции чека для фискализации. + ПараметрыЧека.ПозицииЧека.Очистить(); + СтрокаПозицииЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека(); + СтрокаПозицииЧека.НомерСтрокиТовара = 1; + СтрокаПозицииЧека.Наименование = НСтр("ru = 'Выдача наличных денежных средств'"); + СтрокаПозицииЧека.Количество = 1; + СтрокаПозицииЧека.Цена = СуммаНаличных; + СтрокаПозицииЧека.ЦенаСоСкидками = СуммаНаличных; + СтрокаПозицииЧека.Сумма = СуммаНаличных; + СтрокаПозицииЧека.СтавкаНДС = Неопределено; + СтрокаПозицииЧека.СуммаНДС = 0; + СтрокаПозицииЧека.ЕдиницаИзмерения = НСтр("ru = 'Штука'"); + СтрокаПозицииЧека.КодЕдиницыИзмерения = "796"; + СтрокаПозицииЧека.ДанныеАгента = ПараметрыЧека.ДанныеАгента; + СтрокаПозицииЧека.ДанныеПоставщика = ПараметрыЧека.ДанныеПоставщика; + СтрокаПозицииЧека.ПризнакСпособаРасчета = ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСПолнойОплатой"); + СтрокаПозицииЧека.ПризнакПредметаРасчета = ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Услуга"); + СтрокаПозицииЧека.ПризнакАгентаПоПредметуРасчета = ПризнакАгента; + СтрокаПозицииЧека.ДанныеАгента = ДанныеАгента; + СтрокаПозицииЧека.ДанныеПоставщика = ДанныеПоставщика; + + + ПараметрыЧека.ПозицииЧека.Добавить(СтрокаПозицииЧека); + + ПараметрыЧека.ТаблицаОплат.Очистить(); + СтрокаОплаты = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыСтрокиОплаты(); + СтрокаОплаты.Сумма = СуммаНаличных; + СтрокаОплаты.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные"); + ПараметрыЧека.ТаблицаОплат.Добавить(СтрокаОплаты); + + ПараметрыЧека.ДетализацияОплаты.Очистить(); + + ПараметрыОперации.ПараметрыФискализацииЧекаВыдачи = ПараметрыЧека; + +КонецПроцедуры + +// Заполняет параметры фискализации чека возврата формируемого в случае невыполнения фискализации чека выдачи, +// по данным параметров чека продажи +// +// Параметры: +// ПараметрыОперации - см. ПараметрыПродажаСВыдачейНаличных +// +Процедура ЗаполнитьПараметрыЧекаВозврата(ПараметрыОперации) Экспорт + + ПараметрыФискализацииЧека = ПараметрыОперации.ПараметрыФискализацииЧека; + + // создать чек возврата + ПараметрыЧека = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииЧекаКоррекции(); + + ЗаполнитьЗначенияСвойств(ПараметрыЧека, ПараметрыФискализацииЧека); + ПараметрыЧека.НомерЧека = Число(ПараметрыФискализацииЧека.НомерЧека) + 1; + ПараметрыЧека.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств"); + Если ЗначениеЗаполнено(ПараметрыОперации.ДокументОснованиеВозврата) Тогда + ПараметрыЧека.ДокументОснование = ПараметрыОперации.ДокументОснованиеВозврата; + ИначеЕсли ЗначениеЗаполнено(ПараметрыОперации.ДокументОснованиеВыдачи) Тогда + ПараметрыЧека.ДокументОснование = ПараметрыОперации.ДокументОснованиеВыдачи; + КонецЕсли; + + ПараметрыОперации.ПараметрыФискализацииЧекаВозврата = ПараметрыЧека; + +КонецПроцедуры + +// Выполняет операцию оплата с выдачей наличных на эквайринговом терминале, затем фискализацию чека продажи +// фискализацию чека выдачи. Если фискализация чека продажи не проходит, тогда выполняется аварийная отмена +// последней эквайринговой операции. Если фискализация чека выдачи не проходит тогда выполняется отмена операции +// продажи с помощью чека коррекции, а затем выполняется аварийная отмена последней эквайринговой операции. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - Описание процедуры которая будет вызвана при завершении операции +// со следующими параметрами: +// * Результат - См. ОборудованиеЧекопечатающиеУстройстваКлиент.РезультатПродажаСВыдачейНаличных +// ИдентификаторКлиента - ФормаКлиентскогоПриложения - идентификатор формы. +// ИдентификаторККТ - СправочникСсылка.ПодключаемоеОборудование - ККТ на котором будет печататься фискальный чек +// содержащий в себе слип-чек. +// ИдентификаторЭТ - СправочникСсылка.ПодключаемоеОборудование - Эквайринговый терминал для обработки операции. +// ПараметрыОперации - См. ПараметрыПродажаСВыдачейНаличных +// ДополнительныеПараметры - Структура - Дополнительные параметры которые можно передать в операции +// оплаты и фискализации. +Процедура НачатьПродажаСВыдачейНаличных(ОповещениеПриЗавершении, ИдентификаторКлиента, ИдентификаторККТ, + ИдентификаторЭТ, ПараметрыОперации, ДополнительныеПараметры = Неопределено) Экспорт + + КонтекстОперации = КонтекстПродажаСВыдачейНаличных(); + КонтекстОперации.ОповещениеЗавершения = ОповещениеПриЗавершении; + КонтекстОперации.ИдентификаторКлиента = ИдентификаторКлиента; + КонтекстОперации.ИдентификаторККТ = ИдентификаторККТ; + КонтекстОперации.ИдентификаторЭТ = ИдентификаторЭТ; + ЗаполнитьЗначенияСвойств(КонтекстОперации, ПараметрыОперации); + + ПодготовитьКонтекстПакетнойОперации(КонтекстОперации, ДополнительныеПараметры); + + Если ПараметрыОперации.ПараметрыВыполненияЭквайринговойОперации = Неопределено Тогда + ПараметрыОперации.ПараметрыВыполненияЭквайринговойОперации = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации; + КонецЕсли; + Если КонтекстОперации.ПараметрыФискализацииЧекаВыдачи = Неопределено Тогда + ЗаполнитьПараметрыЧекаВыдачи(ПараметрыОперации); + КонтекстОперации.ПараметрыФискализацииЧекаВыдачи = ПараметрыОперации.ПараметрыФискализацииЧекаВыдачи; + КонецЕсли; + Если КонтекстОперации.ПараметрыФискализацииЧекаВозврата = Неопределено Тогда + ЗаполнитьПараметрыЧекаВозврата(ПараметрыОперации); + КонтекстОперации.ПараметрыФискализацииЧекаВозврата = ПараметрыОперации.ПараметрыФискализацииЧекаВозврата; + КонецЕсли; + + // Выбрать ЭТ если не указан конкретный + ОповещениеЗавершенияПодключения = Новый ОписаниеОповещения("НачатьПродажаСВыдачейНаличных_ЭквайринговаяОперация", + ЭтотОбъект, + КонтекстОперации); + ПакетнаяОбработка_ВыборУстройства(ОповещениеЗавершенияПодключения, КонтекстОперации); + +КонецПроцедуры + +#КонецОбласти + +// Возвращает структуру для заполнения данных открытия формы настройки регистрации ККТ +// +// Возвращаемое значение: +// Структура: +// * ФискальноеУстройство - СправочникСсылка.ПодключаемоеОборудование - ссылка на ККТ +// * Организация - ОпределяемыйТип.ОрганизацияБПО +// * ТипОперации - Число +// * ОбработчикЗавершения - ОписаниеОповещения +Функция ПараметрыФормаНастройкиРегистрацииККТ() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ФискальноеУстройство"); + Параметры.Вставить("Организация"); + Параметры.Вставить("ТипОперации", 0); + Возврат Параметры; + +КонецФункции + +// Выполняет открытие формы настроек для регистрации ККТ +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения +// ПараметрыОткрытия - см. ПараметрыФормаНастройкиРегистрацииККТ +Процедура ОткрытьФормуНастройкиРегистрацииККТ(ОповещениеПриЗавершении, ПараметрыОткрытия) Экспорт + + ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация.ОткрытьФормуНастройкиРегистрацииККТ(ОповещениеПриЗавершении, ПараметрыОткрытия); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ПакетнаяОбработка + +// Обрабатывает результат выбора эквайрингового терминала +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстФискализацииЧекаСОплатойКартой +Процедура ПакетнаяОбработка_ВыборУстройстваЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + Результат = РезультатВыполнения.Результат; + + Если Не Результат Тогда + // Эквайринговый терминал не выбран, завершить пакет операций + ЗавершитьПакетОпераций(Ложь, РезультатВыполнения.ОписаниеОшибки, КонтекстОперации); + Возврат; + КонецЕсли; + + ИдентификаторЭТ = РезультатВыполнения.ИдентификаторУстройства; + ИдентификаторКлиента = КонтекстОперации.ИдентификаторКлиента; + КонтекстОперации.ИдентификаторЭТ = ИдентификаторЭТ; + + // Подключить ЭТ, если он не подключен (требуется для проверки возможности печати коротких слип-чеков) + Оповещение = Новый ОписаниеОповещения("ПакетнаяОбработка_ПодключениеУстройстваЗавершение", + ЭтотОбъект, + КонтекстОперации); + ПодключенноеУстройство = МенеджерОборудованияКлиент.ПолучитьПодключенноеУстройство(ИдентификаторЭТ); + Если ПодключенноеУстройство = Неопределено Тогда + ТипыОборудования = Новый Массив(); + ТипыОборудования.Добавить("ЭквайринговыйТерминал"); + МенеджерОборудованияКлиент.НачатьПодключениеОборудования(Оповещение, + ИдентификаторКлиента, + ТипыОборудования, + ИдентификаторЭТ); + Иначе + РезультатВыполнения.ПодключенноеУстройство = ПодключенноеУстройство; + ВыполнитьОбработкуОповещения(Оповещение, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +// Обрабатывает результат подключения эквайрингового терминала +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстФискализацииЧекаСОплатойКартой +Процедура ПакетнаяОбработка_ПодключениеУстройстваЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + Результат = РезультатВыполнения.Результат; + ОписаниеОшибки = РезультатВыполнения.ОписаниеОшибки; + ПодключенноеУстройство = РезультатВыполнения.ПодключенноеУстройство; + Оповещение = КонтекстОперации.ОповещениеЗавершенияПодключения; + + Если Не Результат Тогда + // Не удалось подключить эквайринговый терминал + ЗавершитьПакетОпераций(Ложь, ОписаниеОшибки, КонтекстОперации); + Возврат; + КонецЕсли; + КонтекстОперации.ПодключенныйЭТ = ПодключенноеУстройство; + + ОпределитьВозможностьПечатиСлипЧекаВТелеФискального(КонтекстОперации); + + // Подключить ЭТ, если он не подключен (требуется для проверки возможности печати коротких слип-чеков) + ВыполнитьОбработкуОповещения(Оповещение, РезультатВыполнения); + +КонецПроцедуры + +// Обрабатывает результат печати слип-чека как текстового документа +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстФискализацииЧекаСОплатойКартой +Процедура ПакетнаяОбработка_ПечатьТекстаЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + Результат = КонтекстОперации.Результат; + ОписаниеОшибки = КонтекстОперации.ОписаниеОшибки; + + ЗавершитьПакетОпераций(Результат, ОписаниеОшибки, КонтекстОперации); + +КонецПроцедуры + +#Область ФискализацияЧекаСОплатойКартой + +// Начинает выполнение операции на эквайринговом терминале +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстФискализацииЧекаСОплатойКартой +Процедура НачатьФискализациюЧекаСОплатойКартой_ЭквайринговаяОперация(РезультатВыполнения, КонтекстОперации) Экспорт + + // Проверить возможность выполнения пакета операций + ОписаниеОшибки = ""; + Если Не ФискализацияЧекаСОплатойКартойДопустима(КонтекстОперации, ОписаниеОшибки) Тогда + ЗавершитьПакетОпераций(Ложь, ОписаниеОшибки, КонтекстОперации); + Возврат; + КонецЕсли; + + // начать выполнение операций + Оповещение = Новый ОписаниеОповещения("НачатьФискализациюЧекаСОплатойКартой_ЭквайринговаяОперацияЗавершение", + ЭтотОбъект, + КонтекстОперации); + МодульОборудованиеПлатежныеСистемыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиент"); + МодульОборудованиеПлатежныеСистемыКлиент.НачатьВыполнениеОперацииНаЭквайринговомТерминале(Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторЭТ, + КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации, + КонтекстОперации.ДополнительныеПараметры, + КонтекстОперации.ИдентификаторККТ); +КонецПроцедуры + +// Обрабатывает результат выполнения эквайринговой операции, в случае успеха вставляет слип-чек, +// в тело фискального чека. +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстФискализацииЧекаСОплатойКартой +Процедура НачатьФискализациюЧекаСОплатойКартой_ЭквайринговаяОперацияЗавершение( + РезультатВыполнения, КонтекстОперации) Экспорт + + РезультатВыполнения.Вставить("СуммаОперации", КонтекстОперации.СуммаОперации); + КонтекстОперации.РезультатВыполненияЭквайринговойОперации = РезультатВыполнения; + + Если РезультатВыполнения.Результат Тогда + ВставитьСлипЧекВТелоФискальногоЧека(КонтекстОперации); + НачатьФискализациюЧекаСОплатойКартой_Фискализация(КонтекстОперации); + Иначе + ОбработатьОтрицательныйРезультатТерминалаПриОплатеКартой(КонтекстОперации); + КонецЕсли; + +КонецПроцедуры + +// Обрабатывает результаты фискализации чека, в случае ошибки фискализации вызывает аварийную отмену последней операции +// эквайрингового терминала +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстФискализацииЧекаСОплатойКартой +Процедура НачатьФискализациюЧекаСОплатойКартой_ФискализацияЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + КонтекстОперации.РезультатФискализацииЧека = РезультатВыполнения; + Результат = РезультатВыполнения.Результат; + ОписаниеОшибки = РезультатВыполнения.ОписаниеОшибки; + + Если Результат Тогда + Если КонтекстОперации.ПараметрыФискализацииЧека.Электронно Тогда + КонтекстОперации.Результат = Истина; + ВывестиСлипЧекКакТекстовыйДокумент("Электронный", КонтекстОперации); + Иначе + ЗавершитьПакетОпераций(Истина, ОписаниеОшибки, КонтекстОперации); + КонецЕсли; + Иначе + Если КонтекстОперации.РезультатВыполненияЭквайринговойОперации.Результат Тогда + МодульОборудованиеПлатежныеСистемыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиент"); + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + Оповещение = Новый ОписаниеОповещения("НачатьФискализациюЧекаСОплатойКартой_АварийнаяОтменаЗавершение", + ЭтотОбъект, + КонтекстОперации); + ПараметрыОтменыЭквайринговойОперации = МодульОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации(); + ЗаполнитьЗначенияСвойств( + ПараметрыОтменыЭквайринговойОперации, + КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации, + , + "ТипТранзакции, ИдентификаторЗапроса"); + МодульОборудованиеПлатежныеСистемыКлиент.НачатьВыполнениеАварийнойОтменыОперации(Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторЭТ, + ПараметрыОтменыЭквайринговойОперации, + КонтекстОперации.ДополнительныеПараметры); + Иначе + КонтекстОперации.Результат = Ложь; + КонтекстОперации.ОписаниеОшибки = ОписаниеОшибки; + ВывестиСлипЧекКакТекстовыйДокумент("Отказ", КонтекстОперации); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Обрабатывает результаты аварийной отмены последней операции эквайрингового терминала +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстФискализацииЧекаСОплатойКартой +Процедура НачатьФискализациюЧекаСОплатойКартой_АварийнаяОтменаЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + КонтекстОперации.РезультатАварийнойОтменыОперации = РезультатВыполнения; + КонтекстОперации.Результат = Ложь; + Если РезультатВыполнения.Результат Тогда + КонтекстОперации.ОписаниеОшибки = КонтекстОперации.РезультатФискализацииЧека.ОписаниеОшибки; + Иначе + КонтекстОперации.ОписаниеОшибки = КонтекстОперации.РезультатАварийнойОтменыОперации.ОписаниеОшибки; + КонецЕсли; + ВывестиСлипЧекКакТекстовыйДокумент("Отказ", КонтекстОперации); + +КонецПроцедуры + +// Возвращает заполненную структуру результата выполнения пакета операций +// +// Параметры: +// РезультатОперации - Булево - Результат выполнения пакета операций +// ОписаниеОшибки - Строка - Описание ошибки выполнения пакета операции +// КонтекстОперации - см. КонтекстФискализацииЧекаСОплатойКартой +// +// Возвращаемое значение: +// Структура: +// * Результат - Булево - Результат выполнения пакета операций. +// * ОписаниеОшибки - Строка - Описание ошибки выполнения пакета операции. +// * РезультатВыполненияЭквайринговойОперации - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатФискализацииЧека - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатАварийнойОтменыОперации - см. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * ПараметрыЭквайринговойОперации - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПакетнойОперацииВОчередиЧеков +Функция РезультатФискализацииЧекаСОплатойКартой(РезультатОперации, ОписаниеОшибки, КонтекстОперации) Экспорт + + Результат = Новый Структура(); + Результат.Вставить("Результат", РезультатОперации); + Результат.Вставить("ОписаниеОшибки", ОписаниеОшибки); + Результат.Вставить("ТипОперации", ПредопределенноеЗначение("Перечисление.ТипыПакетнойОперацииВОчередиЧеков.ФискализацияЧекаСОплатойКартой")); + Результат.Вставить("РезультатФискализацииЧека", КонтекстОперации.РезультатФискализацииЧека); + Результат.Вставить("РезультатАварийнойОтменыОперации", КонтекстОперации.РезультатАварийнойОтменыОперации); + Результат.Вставить("РезультатВыполненияЭквайринговойОперации", КонтекстОперации.РезультатВыполненияЭквайринговойОперации); + Результат.Вставить("ПараметрыЭквайринговойОперации", Новый Структура()); + + Возврат Результат; + +КонецФункции + +// Возвращает структуру, контекст выполнения пакета операций +// +// Возвращаемое значение: +// Структура: +// * ТипОперации - Строка - тип операции +// * Результат - Булево - результат выполнения пакета операций +// * ОписаниеОшибки - Строка - Описание ошибки пакета операций +// * ОповещениеЗавершения - ОписаниеОповещения - Оповещение вызываемое при завершении выполнения пакета +// * ИдентификаторКлиента - ФормаКлиентскогоПриложения - идентификатор формы. +// * ИдентификаторККТ - СправочникСсылка.ПодключаемоеОборудование - ККТ на котором будет печататься фискальный чек +// содержащий в себе слип-чек +// * ИдентификаторЭТ - СправочникСсылка.ПодключаемоеОборудование - Эквайринговый терминал для обработки операции +// * ПодключенныйЭТ - Структура - параметры подключенного терминала +// * ПараметрыФискализацииЧека - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - См. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * Результат - Булево - Результат выполнения пакета операций +// * РезультатВыполненияЭквайринговойОперации - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатФискализацииЧека - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатАварийнойОтменыОперации - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * ОповещениеВопросПользователю - ОписаниеОповещения - Описание оповещения пользователя, для самостоятельной выдачи +// сообщения, это оповещение будет вызвано в случае отрицательного ответа от эквайрингового +// терминала при оплате, в процедуру будут переданы результат выполнения пакета операций, +// а также структура содержащая контекст пакета. +// * ОставитьПодключенным - Булево - Оставить оборудование подключенным после выполнения пакета +// * ДополнительныеПараметры - Структура - Дополнительные параметры которые можно передать в операции +// оплаты и фискализации +// * РеквизитыКартыQR - Строка +Функция КонтекстФискализацииЧекаСОплатойКартой() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("ТипОперации", "ФискализацияЧекаСОплатой"); + Результат.Вставить("Результат", Ложь); + Результат.Вставить("ОписаниеОшибки", ""); + Результат.Вставить("ОповещениеЗавершения", Неопределено); + Результат.Вставить("ИдентификаторКлиента", Неопределено); + Результат.Вставить("ИдентификаторККТ", Неопределено); + Результат.Вставить("ИдентификаторЭТ", Неопределено); + Результат.Вставить("ПодключенныйЭТ", Неопределено); + Результат.Вставить("ИдентификаторЗаписи", Неопределено); + Результат.Вставить("ПараметрыФискализацииЧека", Неопределено); + Результат.Вставить("ПараметрыВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("РезультатВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("РезультатФискализацииЧека", Неопределено); + Результат.Вставить("РезультатАварийнойОтменыОперации", Неопределено); + Результат.Вставить("СлипЧекВТелеФискального", Неопределено); + Результат.Вставить("ОповещениеВопросПользователю", Неопределено); + Результат.Вставить("ОставитьПодключенным", Ложь); + Результат.Вставить("ДополнительныеПараметры", Новый Структура()); + Результат.Вставить("СуммаОперации", 0); + Результат.Вставить("РеквизитыКартыQR", ""); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ПродажаСВыдачейНаличных + +// Начинает выполнение эквайринговой операции "Оплата с выдачей наличных" +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстПродажаСВыдачейНаличных +Процедура НачатьПродажаСВыдачейНаличных_ЭквайринговаяОперация(РезультатВыполнения, КонтекстОперации) Экспорт + + // Проверить возможность выполнения пакета операций + ОписаниеОшибки = ""; + Если Не ПродажаСВыдачейНаличныхДопустима(КонтекстОперации, ОписаниеОшибки) Тогда + ЗавершитьПакетОпераций(Ложь, ОписаниеОшибки, КонтекстОперации); + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения( + "НачатьПродажаСВыдачейНаличных_ЭквайринговаяОперацияЗавершение", + ЭтотОбъект, + КонтекстОперации); + МодульОборудованиеПлатежныеСистемыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиент"); + МодульОборудованиеПлатежныеСистемыКлиент.НачатьВыполнениеОперацииНаЭквайринговомТерминале( + Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторЭТ, + КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации, + КонтекстОперации.ДополнительныеПараметры, + КонтекстОперации.ИдентификаторККТ); + +КонецПроцедуры + +// Начинает выполнение фискализации продажи +// +// Параметры: +// РезультатВыполнения - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// КонтекстОперации - См. КонтекстФискализацииЧекаСОплатойКартой +Процедура НачатьПродажаСВыдачейНаличных_ЭквайринговаяОперацияЗавершение(РезультатВыполнения, КонтекстОперации) Экспорт + + РезультатВыполнения.Вставить("СуммаОперации", КонтекстОперации.СуммаОперации); + РезультатВыполнения.Вставить("СуммаНаличных", КонтекстОперации.СуммаВыдачи); + КонтекстОперации.РезультатВыполненияЭквайринговойОперации = РезультатВыполнения; + + Результат = РезультатВыполнения.Результат; + ОписаниеОшибки = РезультатВыполнения.ОписаниеОшибки; + + Если РезультатВыполнения.Результат Тогда + // Эквайринговая операция выполнена успешно, требуется произвести фискализацию продажи + Если КонтекстОперации.СлипЧекВТелеФискального Тогда + ВставитьСлипЧекВТелоФискальногоЧека(КонтекстОперации); + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения( + "НачатьПродажаСВыдачейНаличных_ФискализацияПродажиЗавершение", + ЭтотОбъект, + КонтекстОперации); + + НачатьФискализациюЧекаНаФискальномУстройстве( + Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторККТ, + КонтекстОперации.ПараметрыФискализацииЧека, + КонтекстОперации.ДополнительныеПараметры); + Иначе + // Эквайринговая операция не выполнена, завершение пакета операций + Если КонтекстОперации.ВыводитьУведомленияПользователя Тогда + ТекстСообщения = НСтр("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 = 'Подсистема ""Платежные системы"" не подключена.'"); + ОписаниеОшибки = ОписаниеОшибки + ТекстОшибки + Символы.ПС; + КонецЕсли; + + ПараметрыВыполненияЭквайринговойОперации = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации; + Если ПараметрыВыполненияЭквайринговойОперации.ТипТранзакции <> "AuthorizeSales" Тогда + ТекстОшибки = НСтр("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; + ТаблицаОплат = ПараметрыФискализацииЧека.ТаблицаОплат; + Для Каждого СтрокаОплаты Из ТаблицаОплат Цикл + Если СтрокаОплаты.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно") Тогда + СуммаОперации = СуммаОперации + СтрокаОплаты.Сумма; + КонецЕсли; + КонецЦикла; + + Если КонтекстОперации.ТипОперации = "ПродажаСВыдачейНаличных" Тогда + СуммаВыдачи = КонтекстОперации.СуммаВыдачи; + ПараметрыВыполненияЭквайринговойОперации.ТипТранзакции = "PayByPaymentCardWithCashWithdrawal"; + ПараметрыВыполненияЭквайринговойОперации.СуммаНаличных = СуммаВыдачи; + ПараметрыВыполненияЭквайринговойОперации.СуммаОперации = СуммаОперации; + Иначе + ПараметрыВыполненияЭквайринговойОперации.ТипТранзакции = "AuthorizeSales"; + ПараметрыВыполненияЭквайринговойОперации.СуммаОперации = СуммаОперации; + КонецЕсли; + + ПараметрыВыполненияЭквайринговойОперации.ДокументОснование = ПараметрыФискализацииЧека.ДокументОснование; + ПараметрыВыполненияЭквайринговойОперации.РеквизитыКартыQR = КонтекстОперации.РеквизитыКартыQR; + ПараметрыВыполненияЭквайринговойОперации.ИдентификаторЗапроса = Новый УникальныйИдентификатор(); + + КонецЕсли; + +КонецПроцедуры + +// Подготавливает контекст пакетной операции для выполнения +// +// Параметры: +// КонтекстОперации - См. КонтекстПродажаСВыдачейНаличных +// ДополнительныеПараметры - Структура - дополнительные параметры переданные при запуске пакета +Процедура ПодготовитьКонтекстПакетнойОперации(КонтекстОперации, ДополнительныеПараметры) + + Если Не ЗначениеЗаполнено(ДополнительныеПараметры) Тогда + ДополнительныеПараметры = Новый Структура(); + КонецЕсли; + КонтекстОперации.ДополнительныеПараметры = ДополнительныеПараметры; + + // запомнить состояние ОставитьПодключенным переданные пользователем + Если ДополнительныеПараметры.Свойство("ОставитьПодключенным") Тогда + КонтекстОперации.ОставитьПодключенным = ДополнительныеПараметры.ОставитьПодключенным; + КонецЕсли; + + ПодготовитьПараметрыЭквайринговойОперации(КонтекстОперации); + + ПараметрыВыполненияЭквайринговойОперации = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации; + КонтекстОперации.СуммаОперации = ПараметрыВыполненияЭквайринговойОперации.СуммаОперации; + + // оставить подключенным оборудование, на все время выполнения пакета + ДополнительныеПараметры.Вставить("ОставитьПодключенным", Истина); +КонецПроцедуры + +// Определяет существует ли возможность печати короткого слип-чека в теле фискального +// +// Параметры: +// КонтекстОперации - См. КонтекстПродажаСВыдачейНаличных +Процедура ОпределитьВозможностьПечатиСлипЧекаВТелеФискального(КонтекстОперации) + + ПодключенноеУстройство = КонтекстОперации.ПодключенныйЭТ; + + // если не установлено в параметрах принудительная печать слип-чека + Если КонтекстОперации.СлипЧекВТелеФискального = Неопределено Тогда + // тогда печатать слип чек в зависимости от устройства + Если ПодключенноеУстройство.КороткиеСлипЧеки И Не ПодключенноеУстройство.ПечатьКвитанцийНаТерминале Тогда + КонтекстОперации.СлипЧекВТелеФискального = Истина; + Иначе + КонтекстОперации.СлипЧекВТелеФискального = Ложь; + КонецЕсли; + КонецЕсли; + + Если КонтекстОперации.СлипЧекВТелеФискального Тогда + КонтекстОперации.ДополнительныеПараметры.Вставить("ИспользоватьПечатающееУстройство", Ложь); + КонецЕсли; + +КонецПроцедуры + +// Отключает оборудование используемое в пакете (ККТ и ЭТ) +// +// Параметры: +// КонтекстОперации - см. КонтекстФискализацииЧекаСОплатойКартой +Процедура ОтключитьОборудованиеПакета(КонтекстОперации) + + // вернуть исходное значение ОставитьПодключенным + ДополнительныеПараметры = КонтекстОперации.ДополнительныеПараметры; + Если ДополнительныеПараметры.Свойство("ОставитьПодключенным") Тогда + ДополнительныеПараметры.ОставитьПодключенным = КонтекстОперации.ОставитьПодключенным; + КонецЕсли; + ОтключатьОборудование = Не КонтекстОперации.ОставитьПодключенным; + + // Требуется отключить оборудование, т.к. во время операции отключение оборудования было отменено + ПодключенноеУстройствоККТ = МенеджерОборудованияКлиент.ПолучитьПодключенноеУстройство(КонтекстОперации.ИдентификаторККТ); + Если ПодключенноеУстройствоККТ <> Неопределено Тогда + Если ОтключатьОборудование Или ПодключенноеУстройствоККТ.СетевоеОборудование Тогда + МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПоИдентификатору( + , + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторККТ); + КонецЕсли; + КонецЕсли; + + ПодключенноеУстройствоЭТ = МенеджерОборудованияКлиент.ПолучитьПодключенноеУстройство(КонтекстОперации.ИдентификаторЭТ); + Если ПодключенноеУстройствоЭТ <> Неопределено Тогда + Если ОтключатьОборудование Или ПодключенноеУстройствоЭТ.СетевоеОборудование Тогда + МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПоИдентификатору( + , + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторЭТ); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Формирует результат пакета операций и вызывает оповещение пользователя при завершении если оно было задано. +// +// Параметры: +// Результат - Булево - флаг того, что пакет операций завершился успешно +// ОписаниеОшибки - Строка - Описание ошибки, которое будет передано в оповещении +// КонтекстОперации - см. КонтекстФискализацииЧекаСОплатойКартой +Процедура ЗавершитьПакетОпераций(Результат, ОписаниеОшибки, КонтекстОперации) + + ТипОперации = КонтекстОперации.ТипОперации; + ОповещениеЗавершения = КонтекстОперации.ОповещениеЗавершения; + + + ОтключитьОборудованиеПакета(КонтекстОперации); + Если ОповещениеЗавершения <> Неопределено Тогда + Если ТипОперации = "ФискализацияЧекаСОплатой" Тогда + РезультатОперации = РезультатФискализацииЧекаСОплатойКартой(Результат, ОписаниеОшибки, КонтекстОперации); + ИначеЕсли ТипОперации = "ПродажаСВыдачейНаличных" Тогда + РезультатОперации = РезультатПродажаСВыдачейНаличных(Результат, ОписаниеОшибки, КонтекстОперации); + Иначе + ВызватьИсключение НСтр("ru = 'Неизвестный тип операции.'"); + КонецЕсли; + ВыполнитьОбработкуОповещения(ОповещениеЗавершения, РезультатОперации); + КонецЕсли; +КонецПроцедуры + +#Область ФормированиеСлипЧекаВТелеФискального + +// Возвращает структуру для формирования шаблона слип-чека +// +// Возвращаемое значение: +// Структура: +// * ПараметрыФискализацииЧека - См. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// * ПараметрыВыполненияЭквайринговойОперации - См. ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации +// * РезультатВыполненияЭквайринговойОперации - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * РезультатАварийнойОтменыОперации - См. МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании +// * ДополнительныеПараметры - Структура - Дополнительные параметры переданные ранее в процедуру +// "НачатьФискализациюЧекаСОплатойКартой" +Функция ПараметрыФормированияШаблонаСлипЧека() + + Результат = Новый Структура(); + Результат.Вставить("ПараметрыФискализацииЧека", Неопределено); + Результат.Вставить("ПараметрыВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("РезультатВыполненияЭквайринговойОперации", Неопределено); + Результат.Вставить("РезультатФискализацииЧека", Неопределено); + Результат.Вставить("РезультатАварийнойОтменыОперации", Неопределено); + Результат.Вставить("ДополнительныеПараметры", Неопределено); + Возврат Результат; + +КонецФункции + +// Формирует шаблон слип-чека и печатает его как текстовый документ на ККТ +// +// Параметры: +// Тип - Строка - Тип слип-чека +// КонтекстОперации - см. КонтекстФискализацииЧекаСОплатойКартой +Процедура ВывестиСлипЧекКакТекстовыйДокумент(Тип, КонтекстОперации) + + Оповещение = Новый ОписаниеОповещения("ПакетнаяОбработка_ПечатьТекстаЗавершение", + ЭтотОбъект, + КонтекстОперации); + Если Не КонтекстОперации.СлипЧекВТелеФискального Тогда + ВыполнитьОбработкуОповещения(Оповещение, Неопределено); + Возврат; + КонецЕсли; + + ПараметрыСлипЧека = КонтекстОперации.РезультатВыполненияЭквайринговойОперации; + Если КонтекстОперации.ТипОперации = "ФискализацияЧекаСОплатой" Тогда + ПараметрыФискализацииЧека = КонтекстОперации.ПараметрыФискализацииЧека; + РезультатФискализацииЧека = КонтекстОперации.РезультатФискализацииЧека; + ИначеЕсли КонтекстОперации.ТипОперации = "ПродажаСВыдачейНаличных" Тогда + ПараметрыФискализацииЧека = КонтекстОперации.ПараметрыФискализацииЧекаВыдачи; + РезультатФискализацииЧека = КонтекстОперации.РезультатФискализацииЧекаВыдачи; + Иначе + ВызватьИсключение НСтр("ru = 'Неизвестный тип операции.'"); + КонецЕсли; + + // дать возможность пользователю поменять текст слип чека + СтандартнаяОбработка = Истина; + ДанныеДляШаблона = ПараметрыФормированияШаблонаСлипЧека(); + ДанныеДляШаблона.ПараметрыФискализацииЧека = ПараметрыФискализацииЧека; + ДанныеДляШаблона.ПараметрыВыполненияЭквайринговойОперации = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации; + ДанныеДляШаблона.РезультатВыполненияЭквайринговойОперации = КонтекстОперации.РезультатВыполненияЭквайринговойОперации; + ДанныеДляШаблона.РезультатФискализацииЧека = РезультатФискализацииЧека; + ДанныеДляШаблона.РезультатАварийнойОтменыОперации = КонтекстОперации.РезультатАварийнойОтменыОперации; + ДанныеДляШаблона.ДополнительныеПараметры = КонтекстОперации.ДополнительныеПараметры; + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + Текст = МодульОборудованиеПлатежныеСистемыКлиентСервер.ТекстСлипЧекаПоУмолчанию( + ДанныеДляШаблона.РезультатВыполненияЭквайринговойОперации); + Иначе + Текст = ""; + КонецЕсли; + + МенеджерОборудованияКлиентПереопределяемый.СформироватьШаблонСлипЧека(Тип, ДанныеДляШаблона, Текст, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + // запомнить текст последнего слип-чека в глобальной переменной + Если Не ПустаяСтрока(Текст) И ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиент"); + МодульОборудованиеПлатежныеСистемыКлиент.УстановитьПоследнийСлипЧек(Текст); + КонецЕсли; + + ПараметрыОперации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПечатиТекста(Текст); + НачатьПечатьТекста(Оповещение, + КонтекстОперации.ИдентификаторКлиента, + КонтекстОперации.ИдентификаторККТ, + ПараметрыОперации, + КонтекстОперации.ДополнительныеПараметры); + +КонецПроцедуры + +// Получает текст слип-чека из предопределенной процедуры и вставляет его в тело фискального чека, +// так же записывает текст последнего слип-чека в глобальную переменную +// +// Параметры: +// КонтекстОперации - см. КонтекстФискализацииЧекаСОплатойКартой +Процедура ВставитьСлипЧекВТелоФискальногоЧека(КонтекстОперации) + + Если Не КонтекстОперации.СлипЧекВТелеФискального Тогда + Возврат; + КонецЕсли; + + // сформировать тест слип чека по умолчанию + Тип = "Обычный"; + Если КонтекстОперации.ТипОперации = "ФискализацияЧекаСОплатой" Тогда + ПараметрыФискализацииЧека = КонтекстОперации.ПараметрыФискализацииЧека; + ИначеЕсли КонтекстОперации.ТипОперации = "ПродажаСВыдачейНаличных" Тогда + ПараметрыФискализацииЧека = КонтекстОперации.ПараметрыФискализацииЧека; + Иначе + ВызватьИсключение НСтр("ru = 'Неизвестный тип операции.'"); + КонецЕсли; + + // дать возможность пользователю поменять текст слип чека + СтандартнаяОбработка = Истина; + ДанныеДляШаблона = ПараметрыФормированияШаблонаСлипЧека(); + ДанныеДляШаблона.ПараметрыФискализацииЧека = ПараметрыФискализацииЧека; + ДанныеДляШаблона.ПараметрыВыполненияЭквайринговойОперации = КонтекстОперации.ПараметрыВыполненияЭквайринговойОперации; + ДанныеДляШаблона.РезультатВыполненияЭквайринговойОперации = КонтекстОперации.РезультатВыполненияЭквайринговойОперации; + ДанныеДляШаблона.ДополнительныеПараметры = КонтекстОперации.ДополнительныеПараметры; + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиентСервер = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиентСервер"); + Текст = МодульОборудованиеПлатежныеСистемыКлиентСервер.ТекстСлипЧекаПоУмолчанию( + ДанныеДляШаблона.РезультатВыполненияЭквайринговойОперации); + Иначе + Текст = ""; + КонецЕсли; + + МенеджерОборудованияКлиентПереопределяемый.СформироватьШаблонСлипЧека(Тип, ДанныеДляШаблона, Текст, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + // добавить текст слип чека в тело фискального чека + Если ПустаяСтрока(ПараметрыФискализацииЧека.ТекстКороткогоСлипЧека) Тогда + ПараметрыФискализацииЧека.ТекстКороткогоСлипЧека = Текст; + КонецЕсли; + + // запомнить текст последнего слип-чека в глобальной переменной + Если Не ПустаяСтрока(Текст) И ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы() Тогда + МодульОборудованиеПлатежныеСистемыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеПлатежныеСистемыКлиент"); + МодульОборудованиеПлатежныеСистемыКлиент.УстановитьПоследнийСлипЧек(Текст); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецОбласти + 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..7875f7e --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСервер/Ext/Module.bsl @@ -0,0 +1,2425 @@ + +#Область ПрограммныйИнтерфейс + +// Проверяет соответствие ИНН требованиям. +// +// Параметры: +// ИНН - Строка - проверяемый индивидуальный номер налогоплательщика. +// ЭтоЮридическоеЛицо - Булево - признак, является ли владелец ИНН юридическим лицом. +// ТекстСообщения - Строка - текст сообщения о найденных ошибках. +// +// Возвращаемое значение: +// Булево - Истина, если соответствует. +// +Функция ИННСоответствуетТребованиям(Знач ИНН, ЭтоЮридическоеЛицо, ТекстСообщения) Экспорт + + СоответствуетТребованиям = Истина; + ТекстСообщения = ""; + + ИНН = СокрЛП(ИНН); + ДлинаИНН = СтрДлина(ИНН); + + Если ЭтоЮридическоеЛицо = Неопределено Тогда + ТекстСообщения = ТекстСообщения + НСтр("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, 10, 20, 18, 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. + + // Продажа товаров в объемно-сортовом учете. + ПараметрыСтроки.Вставить("ОбъемноСортовойУчет", Ложь); // Булево,Необязательно - Признак товара, что он подлежит объемно-сортовому учету. + ПараметрыСтроки.Вставить("КоличествоВесовогоТовара", Неопределено); // Число,Необязательно - Количество весового товара при объемно-сортовом учете. + // Дата производства товара для формирования отраслевых тегов при продаже молочной продукции с нечитаемыми DataMatrix. + ПараметрыСтроки.Вставить("ДатаПроизводства"); // Дата,Необязательно - Дата производства товара. + + ПараметрыСтроки.Вставить("NTIN"); // Строка,Необязательно - NTIN идентификаторы товара + + Возврат ПараметрыСтроки; + +КонецФункции + +// Заполняет структуру параметров текстовой строки для фискализации чека. +// +// Параметры: +// Текст - Строка - Текстовая строка +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыТекстовойСтрокиЧека(Текст = Неопределено) Экспорт; + + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("ТекстоваяСтрока"); // Тип строки. Исходящий служебный параметр. + ПараметрыСтроки.Вставить("Текст", Текст); // Строка,Обязательно - Текстовая строка + ПараметрыСтроки.Вставить("ПереносСтроки", Ложь); // Булево,Необязательно - Перенос строки, устанавливается значение по умолчанию. + ПараметрыСтроки.Вставить("Выравнивание" , "Лево"); // Строка,Необязательно - Выравнивание текста, Значения: "Лево", "Право", "Центр". + Возврат ПараметрыСтроки; + +КонецФункции + +// Заполняет структуру параметров штрихкода в строке для фискализации чека. +// +// Параметры: +// ТипШтрихкодаЗнач - Строка - Тип штрихкода. +// ШтрихКодЗнач - Строка - Значение штрихкода. +// ШтрихКодBase64 - Строка - Значение штрихкода в Base64. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыШтрихкодВСтрокеЧека(ТипШтрихкодаЗнач = Неопределено, ШтрихКодЗнач = Неопределено, ШтрихКодBase64 = Неопределено) Экспорт; + + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("ТипШтрихкода", ТипШтрихкодаЗнач); // Строка,Обязательно - Тип штрихкода. + ПараметрыСтроки.Вставить("ШтрихКод" , ШтрихКодЗнач); // Строка,Обязательно - Значение штрихкода. + ПараметрыСтроки.Вставить("ШтрихКодBase64", ШтрихКодBase64); // Строка,Обязательно - Значение штрихкода в Base64. + Возврат ПараметрыСтроки; + +КонецФункции + +// Заполняет структуру параметров строки оплаты. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыСтрокиОплаты() Экспорт + + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные")); + ПараметрыСтроки.Вставить("Сумма" , 0); + Возврат ПараметрыСтроки; + +КонецФункции + +// Заполняет структуру параметров детализации строки оплаты. +// +// Параметры: +// НаименованиеТипаОплаты - Строка +// Сумма - Число +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыДетализацииСтрокиОплаты(НаименованиеТипаОплаты = Неопределено, Сумма = 0) Экспорт + + ПараметрыСтроки = Новый Структура(); + ПараметрыСтроки.Вставить("НаименованиеТипаОплаты", НаименованиеТипаОплаты); // Строка,Обязательно Текстовая строка + ПараметрыСтроки.Вставить("Сумма", Сумма); + Возврат ПараметрыСтроки; + +КонецФункции + +// Заполняет структуру параметров строки оплаты. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыДанныеКоррекции() Экспорт + + ДанныеКоррекции = Новый Структура(); + ДанныеКоррекции.Вставить("ТипКоррекции", 0); // Число,Обязательно - Тип коррекции: 0-самостоятельно, 1-по предписанию. + ДанныеКоррекции.Вставить("ОписаниеКоррекции"); // Строка,Необязательно - Описание коррекции. + ДанныеКоррекции.Вставить("ДатаКоррекции"); // ДатаВремя,Обязательно - Дата совершения корректируемого расчета. + ДанныеКоррекции.Вставить("НомерПредписания"); // Строка,Обязательно - Номер предписания налогового органа. + Возврат ДанныеКоррекции; + +КонецФункции + +// Заполняет структуру параметров выполнения операции чека коррекции. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОперацииЧекаКоррекции() Экспорт; + + ПараметрыЧека = ПараметрыОперацииФискализацииЧека(); + ПараметрыЧека.Вставить("КорректируемыйДокумент"); + ПараметрыЧека.Вставить("НеприменениеККТ", Ложь); + ПараметрыЧека.Вставить("ДанныеКоррекции", ПараметрыДанныеКоррекции()); + + Возврат ПараметрыЧека; + +КонецФункции + +// Заполняет структуру параметров открытия и закрытия смены. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОткрытияЗакрытияСмены() Экспорт; + + ПараметрыОперации = ПараметрыВыполненияОперации(); + + ПараметрыОперации.Вставить("АдресРасчетов"); // Строка,Необязательно - Адрес расчетов (Тег 1009). + ПараметрыОперации.Вставить("МестоРасчетов"); // Строка,Необязательно - Место расчетов (Тег 1187). + ПараметрыОперации.Вставить("КассаККМ"); //ОпределяемыйТип.КассаБПО,Необязательно - касса ккм для закрытия смены. + ПараметрыОперации.Вставить("Печать", Истина); // Булево,Необязательно - Необходима печать требуемого документа. + + Возврат ПараметрыОперации; + +КонецФункции + +// Заполняет структуру параметров инкассацию на фискальном устройстве. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыИнкассации() Экспорт; + + ПараметрыОперации = ПараметрыВыполненияОперации(); + ПараметрыОперации.Вставить("ДокументОснование" , Неопределено); // Ссылка,Необязательно. Документ по которому формируется операция. + ПараметрыОперации.Вставить("Организация" , Неопределено); // Ссылка,Необязательно. Организация по которой формируется операция. + ПараметрыОперации.Вставить("ТорговыйОбъект" , Неопределено); // Ссылка,Необязательно. Объект по которому формируется операция. + ПараметрыОперации.Вставить("КассаККМ" , Неопределено); // Ссылка,Необязательно. Объект по которому формируется операция. + + ПараметрыОперации.Вставить("ТипИнкассации"); // Число,Обязательно - Тип инкассации (1-внесение, 0-выемка) + ПараметрыОперации.Вставить("Сумма", 0); // Число,Обязательно - Сумма инкассации. + + Возврат ПараметрыОперации; + +КонецФункции + +// Заполняет структуру параметров печати копии чека. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыПечатьКопииЧека() Экспорт; + + ПараметрыОперации = ПараметрыВыполненияОперации(); + ПараметрыОперации.Вставить("ДокументСсылка" , Неопределено); // Ссылка - Документ по которому пробивается чек. + ПараметрыОперации.Вставить("НомерЧекаККТ" , Неопределено); // Строка - Номер фискального чека. + ПараметрыОперации.Вставить("Аппаратно" , Истина); // Булево - Печать копии чека производиться аппаратно по данным ККТ, иначе по регистру фискальных операций. + ПараметрыОперации.Вставить("НомерЧека" , Неопределено); // Строка - Номер чека для аппаратной печати чека на ККТ. + ПараметрыОперации.Вставить("ФискальныйПризнак"); // Строка - Фискальный признак документа. + Возврат ПараметрыОперации; + +КонецФункции + +// Заполняет структуру параметров аннулирования чека. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыОперацииАннулированияЧека() Экспорт; + + ПараметрыОперации = ПараметрыВыполненияОперации(); + ПараметрыОперации.Вставить("ТипРасчета" , ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств")); + ПараметрыОперации.Вставить("Фискальный" , Истина); + Возврат ПараметрыОперации; + +КонецФункции + +// Заполняет структуру печати QR кода на фискальном устройстве. +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыПечатиQRКодаНаФискальномУстройстве() Экспорт; + + ПараметрыОперации = Новый Структура(); + + ПараметрыОперации.Вставить("ТипПлатежнойСистемы"); // ПеречислениеСсылка.ТипыПлатежнойСистемыККТ, Необязательно - Тип платежной системы. + ПараметрыОперации.Вставить("ИдентификаторОплатыПлатежнойСистемы"); // Строка,Необязательно - Идентификатор оплаты платежных системы. + ПараметрыОперации.Вставить("QRКод", ПараметрыQRКода()); // Структура,Заполнение необязательно - параметры QR кода в теле чека. + ПараметрыОперации.QRКод.ТекстПользователя = НСтр("ru='Для совершения платежа отсканируйте QR-код'"); + ПараметрыОперации.Вставить("СуммаОперации", Неопределено); // Число,Необязательно - Сумма операции. + + Возврат ПараметрыОперации; + +КонецФункции + +// Параметры счетчиков операций. +// +// Возвращаемое значение: +// Структура - Параметры нормализуемых фискальных данных: +// * КоличествоЧеков - Число - +// * СуммаЧеков - Число - +// * КоличествоЧековКоррекции - Число - +// * СуммаЧековКоррекции - Число - +// +Функция ПараметрыСчетчиковОпераций() Экспорт + + СтруктураРезультат = Новый Структура(); + + СтруктураРезультат.Вставить("КоличествоЧеков"); + СтруктураРезультат.Вставить("СуммаЧеков"); + СтруктураРезультат.Вставить("КоличествоЧековКоррекции"); + СтруктураРезультат.Вставить("СуммаЧековКоррекции"); + + Возврат СтруктураРезультат; + +КонецФункции + +// Заполняет структуру параметров нормализуемых фискальных данных. +// +// Возвращаемое значение: +// Структура - Параметры нормализуемых фискальных данных: +// * ДатаСменыККТ - Число - +// * НомерСменыККТ - Число - +// * НомерЧекаККТ - Число - +// * НомерЧекаЗаСмену - Число - +// * СтатусСмены - Неопределено - +// * СчетчикиОперацийПриход - Структура -: +// ** КоличествоЧеков - Число. +// ** СуммаЧеков - Число. +// ** КоличествоЧековКоррекции - Число. +// ** СуммаЧековКоррекции - Число. +// * СчетчикиОперацийВозвратПрихода - Структура -: +// ** КоличествоЧеков - Число. +// ** СуммаЧеков - Число. +// ** КоличествоЧековКоррекции - Число. +// ** СуммаЧековКоррекции - Число. +// * СчетчикиОперацийРасход - Структура -: +// ** КоличествоЧеков - Число. +// ** СуммаЧеков - Число. +// ** КоличествоЧековКоррекции - Число. +// ** СуммаЧековКоррекции - Число. +// * СчетчикиОперацийВозвратРасхода - Структура -: +// ** КоличествоЧеков - Число. +// ** СуммаЧеков - Число. +// ** КоличествоЧековКоррекции - Число. +// ** СуммаЧековКоррекции - Число. +// * КоличествоЧеков - Число. +// * ОстатокНаличных - Число. +// * ПревышеноВремяОжиданияОтветаОФД - Булево - +// * КоличествоНепереданныхФД - Неопределено - +// * НомерПервогоНепереданногоФД - Неопределено - +// * ДатаПервогоНепереданногоФД - Неопределено - +// * НеобходимаСрочнаяЗаменаФН - Булево - +// * ПамятьФНПереполнена - Булево - +// * РесурсФНИсчерпан - Булево - +// +Функция ПараметрыНормализуемыхФискальныхДанных() Экспорт + + СтруктураРезультат = Новый Структура(); + + СтруктураРезультат.Вставить("ДатаСменыККТ" , 0); // Дата открытой/закрытой смены. + СтруктураРезультат.Вставить("НомерСменыККТ" , 0); // Номер открытой/закрытой смены. + СтруктураРезультат.Вставить("НомерЧекаККТ" , 0); // Номер последнего фискального чека. + СтруктураРезультат.Вставить("НомерЧекаЗаСмену" , 0); // Номер последнего чека за смену. + СтруктураРезультат.Вставить("СтатусСмены" , Неопределено); // Состояние смены: 1-Закрыта, 2-Открыта, 3-Истекла. + СтруктураРезультат.Вставить("СчетчикиОперацийПриход" , ПараметрыСчетчиковОпераций()); // Счетчики операций по типу "приход". + СтруктураРезультат.Вставить("СчетчикиОперацийВозвратПрихода", ПараметрыСчетчиковОпераций()); // Счетчики операций по типу "возврат прихода". + СтруктураРезультат.Вставить("СчетчикиОперацийРасход" , ПараметрыСчетчиковОпераций()); // Счетчики операций по типу "расход". + СтруктураРезультат.Вставить("СчетчикиОперацийВозвратРасхода", ПараметрыСчетчиковОпераций()); // Счетчики операций по типу "возврат расхода". + СтруктураРезультат.Вставить("КоличествоЧеков"); // Количество кассовых чеков за смену. + СтруктураРезультат.Вставить("ОстатокНаличных"); // Остаток наличных денежных средств в кассе + СтруктураРезультат.Вставить("ПревышеноВремяОжиданияОтветаОФД", Ложь); + СтруктураРезультат.Вставить("КоличествоНепереданныхФД" , Неопределено); // Количество непереданных документов. + СтруктураРезультат.Вставить("НомерПервогоНепереданногоФД", Неопределено); // Номер первого непереданного документ. + СтруктураРезультат.Вставить("ДатаПервогоНепереданногоФД ", Неопределено); // Дата и время первого из непереданных документов. + СтруктураРезультат.Вставить("НеобходимаСрочнаяЗаменаФН" , Ложь); // Признак необходимости срочной замены ФН. + СтруктураРезультат.Вставить("ПамятьФНПереполнена" , Ложь); // Признак переполнения памяти ФН. + СтруктураРезультат.Вставить("РесурсФНИсчерпан" , Ложь); // Признак исчерпания ресурса ФН. + + Возврат СтруктураРезультат; + +КонецФункции + +// Заполняет структуру параметров печати текста. +// +// Параметры: +// СтрокиТекста - Строка +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыПечатиТекста(СтрокиТекста = Неопределено) Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("СтрокиТекста", СтрокиТекста); + Возврат Параметры; + +КонецФункции + +// Заполняет структуру параметров запрос КМ. +// +// Возвращаемое значение: +// Структура -Параметры запрос КМ: +// * ИдентификаторЗапроса - Строка - Уникальный идентификатор запроса +// * Количество - Число - Количество +// * ДробноеКоличество - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДробноеКоличество. +// * КонтрольнаяМарка - Строка - Код контрольной марки. Кодируется текстом в кодировке Base64. +// * КодЕдиницыИзмерения - Строка - Код единицы измерения в соответствии с общероссийским классификатором единиц измерения. +// * ПланируемыйСтатусТовара - ПеречислениеСсылка.ПланируемыйСтатусМаркируемогоТовара. +// +Функция ПараметрыЗапросКМ() Экспорт; + + Параметры = Новый Структура(); + Параметры.Вставить("ИдентификаторЗапроса"); // Строка,Обязательно - Уникальный идентификатор запроса + Параметры.Вставить("ОжидатьПолучениеОтветаОИСМ", Истина); // Булево,Обязательно - Будет ли ожидаться получение ответа от ОИСМ. + Параметры.Вставить("ОтправлятьНаСерверОИСМ" , Истина); // Булево,Обязательно - Запрос КМ формируется локально или отправляется на сервер ОИСМ. + Параметры.Вставить("Количество", 0); // Число,Обязательно - Количество + Параметры.Вставить("ДробноеКоличество", ПараметрыДробноеКоличество()); + Параметры.Вставить("КонтрольнаяМарка"); // Строка,Необязательно - Код контрольной марки. Кодируется текстом в кодировке Base64. + // КодЕдиницыИзмерения - Если значение реквизита заполнено, используется он, иначе МераКоличестваПредметаРасчета + Параметры.Вставить("КодЕдиницыИзмерения"); // Строка,Необязательно - Код единицы измерения в соответствии с общероссийским классификатором единиц измерения. + Параметры.Вставить("МераКоличестваПредметаРасчета"); // Перечисление.МераКоличестваПредметаРасчетаККТ,Необязательно - Мера количества предмета расчета. Тэг 2108. Значение из таблицы 114 (ФФД). + Параметры.Вставить("ПланируемыйСтатусТовара"); // Перечисление.ПланируемыйСтатусМаркируемогоТовара - Необязательно + Возврат Параметры; + +КонецФункции + +// Заполняет структуру параметров запрос КМ. +// +// Возвращаемое значение: +// Структура: +// * ИдентификаторЗапроса - Строка - Уникальный идентификатор запроса +// +Функция ПараметрыПодтверждениеКМ() Экспорт; + + Параметры = Новый Структура(); + Параметры.Вставить("ИдентификаторЗапроса"); // Строка,Обязательно - Уникальный идентификатор запроса + Параметры.Вставить("Выбытие", Истина); // Булево,Обязательно - КМ будет реализована в состав документа о реализации маркированного товара. + Возврат Параметры; + +КонецФункции + +// Заполняет структуру пакетной операции для добавления ее в очередь чеков +// +// Возвращаемое значение: +// Структура: +// * ТипОперации - ПеречислениеСсылка.ТипыПакетнойОперацииВОчередиЧеков +// * ИдентификаторЭТ - СправочникСсылка.ПодключаемоеОборудование - Эквайринговый терминал для обработки операции +// * СлипЧекВТелеФискального - Булево, Неопределено - Выводить слип-чек в теле фискального, Истина - слип-чек будет выведен +// в теле фискального, Ложь - короткий слип-чек не будет выводиться, Неопределено - короткий слип-чек +// будет выводиться если поддерживает драйвер оборудования. +// * ПараметрыЭквайринговойОперации - Структура: +// ** ВидОплаты - Строка - +// ** ПроцентКомиссии - Число - +// ** РеквизитыКартыQR - Строка - +// * ПараметрыПродажаСВыдачейНаличных - Структура: +// ** СуммаВыдачи - Число - сумма выдачи наличных, в случае операции продажа с выдачей наличных +// ** ДанныеАгента - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеАгента +// ** ДанныеПоставщика - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДанныеПоставщика +// ** ДокументОснованиеВыдачи - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО, Неопределено +// ** ДокументОснованиеВозврата - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО, Неопределено +// +Функция ПараметрыПакетнойОперацииВОчередиЧеков() Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("ТипОперации", ПредопределенноеЗначение("Перечисление.ТипыПакетнойОперацииВОчередиЧеков.НеПакетнаяОперация")); + Параметры.Вставить("ИдентификаторЭТ"); + Параметры.Вставить("СлипЧекВТелеФискального"); + + ПараметрыЭквайринговойОперации = Новый Структура(); + ПараметрыЭквайринговойОперации.Вставить("ВидОплаты"); + ПараметрыЭквайринговойОперации.Вставить("ПроцентКомиссии"); + ПараметрыЭквайринговойОперации.Вставить("РеквизитыКартыQR", ""); + + Параметры.Вставить("ПараметрыЭквайринговойОперации", ПараметрыЭквайринговойОперации); + + ПараметрыПродажаСВыдачейНаличных = Новый Структура(); + ПараметрыПродажаСВыдачейНаличных.Вставить("СуммаВыдачи"); + ПараметрыПродажаСВыдачейНаличных.Вставить("ДанныеАгента", ПараметрыДанныеАгента()); + ПараметрыПродажаСВыдачейНаличных.Вставить("ДанныеПоставщика", ПараметрыДанныеПоставщика()); + ПараметрыПродажаСВыдачейНаличных.Вставить("ДокументОснованиеВыдачи", Неопределено); + ПараметрыПродажаСВыдачейНаличных.Вставить("ДокументОснованиеВозврата", Неопределено); + + Параметры.Вставить("ПараметрыПродажаСВыдачейНаличных", ПараметрыПродажаСВыдачейНаличных); + Возврат Параметры; + +КонецФункции + +// Параметры фискальной операции. +// +// Возвращаемое значение: +// Структура - Параметры фискальной операции: +// * Кассир - ОпределяемыйТип.СубъектПерсональныхДанныхБПО +// * ДокументОснование - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО +// * Организация - ОпределяемыйТип.ОрганизацияБПО +// * ТорговыйОбъект - ОпределяемыйТип.ТорговыйОбъектБПО +// * НомерСменыККТ - Число - +// * НомерЧекаККТ - Число - +// * СтатусСмены - Число - +// * ДатаВремя - Дата +// * ПараметрыXML - Строка - +// * РезультатXML - Строка - +// * КассоваяСмена - ДокументСсылка.КассоваяСмена +// * ТестовыеЧеки - Булево +// * ТекстЧека - Строка +// * ДополнительныеПараметры - Любое +// * Результат - Булево - +// * ТекстОшибки - Строка +// +Функция ПараметрыФискальнойОперации() Экспорт + + ДанныеОперации = Новый Структура(); + ДанныеОперации.Вставить("Кассир"); + ДанныеОперации.Вставить("ДокументОснование"); + ДанныеОперации.Вставить("Организация"); + ДанныеОперации.Вставить("ТорговыйОбъект"); + + ДанныеОперации.Вставить("НомерСменыККТ" , 0); + ДанныеОперации.Вставить("НомерЧекаККТ" , 0); + ДанныеОперации.Вставить("СтатусСмены", 0); + ДанныеОперации.Вставить("ДатаВремя"); + ДанныеОперации.Вставить("ПараметрыXML", ""); + ДанныеОперации.Вставить("РезультатXML", ""); + ДанныеОперации.Вставить("КассоваяСмена"); + ДанныеОперации.Вставить("ТестовыеЧеки"); + ДанныеОперации.Вставить("ТекстЧека"); + ДанныеОперации.Вставить("ДополнительныеПараметры"); + ДанныеОперации.Вставить("Результат", Истина); + ДанныеОперации.Вставить("ТекстОшибки"); + + Возврат ДанныеОперации; + +КонецФункции + +#КонецОбласти + +#Область 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", ПолеПодписи = Истина) Экспорт + + ПозицииЧека = ?(ОбщиеПараметры.Свойство("ПозицииЧека"), ОбщиеПараметры.ПозицииЧека, Неопределено); + ТаблицаОплат = ?(ОбщиеПараметры.Свойство("ТаблицаОплат"), ОбщиеПараметры.ТаблицаОплат, Неопределено); + + Если ТипДокумента = 0 Тогда + ТипыЧеков = Новый Соответствие(); + ТипыЧеков.Вставить(1, НСтр("ru='ПРИХОД'")); // Чек продажи + ТипыЧеков.Вставить(2, НСтр("ru='ВОЗВРАТ ПРИХОДА'")); // Чек возврата продажи + ТипыЧеков.Вставить(3, НСтр("ru='РАСХОД'")); // Чек покупки + ТипыЧеков.Вставить(4, НСтр("ru='ВОЗВРАТ РАСХОДА'")); // Чек возврата покупки + ТипЧека = ТипыЧеков.Получить(КодРасчетаДенежнымиСредствами(ОбщиеПараметры.ТипРасчета)) + ИначеЕсли ТипДокумента = 1 Тогда + ТипЧека = НСтр("ru='ОТКРЫТИЕ СМЕНЫ'"); + ИначеЕсли ТипДокумента = 2 Тогда + ТипЧека = НСтр("ru='ВНЕСЕНИЕ'"); + ИначеЕсли ТипДокумента = 3 Тогда + ТипЧека = НСтр("ru='ВЫЕМКА'"); + ИначеЕсли ТипДокумента = 4 Тогда + ТипЧека = НСтр("ru='ОТЧЕТ БЕЗ ГАШЕНИЯ'"); + ИначеЕсли ТипДокумента = 5 Тогда + ТипЧека = НСтр("ru='ОТЧЕТ С ГАШЕНИЕМ'"); + КонецЕсли; + + ПечатьКлише = Истина; + + Разделитель = ПостроитьПоле("", ШиринаСтроки, "=") + Символы.ПС; + РазделительВнутр = ПостроитьПоле("", ШиринаСтроки, "-") + Символы.ПС; + + Текст = Разделитель; + + Если ПечатьКлише Тогда + // Сформировать шапку чека. + Если ОбщиеПараметры.Свойство("ОрганизацияНазвание") И НЕ ПустаяСтрока(ОбщиеПараметры.ОрганизацияНазвание) Тогда + Текст = Текст + ПостроитьПолеПереносом(ОбщиеПараметры.ОрганизацияНазвание, ШиринаСтроки, , Истина) + Символы.ПС; + КонецЕсли; + + Если ОбщиеПараметры.Свойство("АдресРасчетов") Тогда + АдресРасчетов = ОбщиеПараметры.АдресРасчетов; + Если НЕ ПустаяСтрока(АдресРасчетов) Тогда + Текст = Текст + ПостроитьПолеПереносом(АдресРасчетов, ШиринаСтроки, , Истина) + Символы.ПС; + Если ОбщиеПараметры.Свойство("МестоРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.МестоРасчетов) Тогда + Текст = Текст + ПостроитьПолеПереносом(ОбщиеПараметры.МестоРасчетов, ШиринаСтроки, , Истина) + Символы.ПС; + КонецЕсли; + ИначеЕсли ОбщиеПараметры.Свойство("АдресМагазина") И НЕ ПустаяСтрока(ОбщиеПараметры.АдресМагазина) Тогда + Текст = Текст + ПостроитьПолеПереносом(ОбщиеПараметры.АдресМагазина, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + КонецЕсли; + + Если ОбщиеПараметры.Свойство("ТекстШапки") И НЕ ПустаяСтрока(ОбщиеПараметры.ТекстШапки) Тогда + Текст = Текст + ВыстроитьПоля(ОбщиеПараметры.ТекстШапки, , ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Если ТипДокумента = 0 Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='КАССОВЫЙ ЧЕК'"), , ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + ОрганизацияИНН = ?(ОбщиеПараметры.Свойство("ОрганизацияИНН") И НЕ ПустаяСтрока(ОбщиеПараметры.ОрганизацияИНН), + НСтр("ru='ИНН'") + Символы.НПП + ОбщиеПараметры.ОрганизацияИНН, ""); + + НомерЧека = ?(ОбщиеПараметры.Свойство("НомерЧека") И НЕ ПустаяСтрока(ОбщиеПараметры.НомерЧека), + НСтр("ru='ЧЕК №'") + ОбщиеПараметры.НомерЧека, ""); + + Если Не ПустаяСтрока(ОрганизацияИНН) Тогда + Текст = Текст + ВыстроитьПоля(ТипЧека, ОрганизацияИНН, ШиринаСтроки) + Символы.ПС; + Иначе + Текст = Текст + ПостроитьПоле(ТипЧека, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + ДатаВремя = ?(ОбщиеПараметры.Свойство("ДатаВремя") И НЕ ПустаяСтрока(ОбщиеПараметры.ДатаВремя), + ОбщиеПараметры.ДатаВремя, + МенеджерОборудованияКлиентСервер.ДатаСеанса()); + ДатаВремя = Формат(ДатаВремя, "ДФ=""дд.ММ.гггг ЧЧ:мм"""); // АПК: 1367 особенность локального законодательства + Текст = Текст + ВыстроитьПоля(НомерЧека, ДатаВремя, ШиринаСтроки) + Символы.ПС; + + Если ТипДокумента = 0 Тогда + + Если НЕ ПустаяСтрока(ОбщиеПараметры.Получатель) Тогда + Текст = Текст + ПостроитьПолеПереносом(НСтр("ru='ПОКУПАТЕЛЬ:'") + ОбщиеПараметры.Получатель, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ОбщиеПараметры.ПолучательИНН) Тогда + Текст = Текст + ПостроитьПоле(НСтр("ru='ИНН ПОКУПАТЕЛЯ:'") + ОбщиеПараметры.ПолучательИНН, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Если НЕ ПустаяСтрока(ОбщиеПараметры.ПризнакАгента) Тогда + Текст = Текст + ПостроитьПоле(ВРег(Строка(ОбщиеПараметры.ПризнакАгента)), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеПоставщика.Наименование) Тогда + Текст = Текст + ПостроитьПолеПереносом(НСтр("ru='ПОСТАВЩИК:'") + ОбщиеПараметры.ДанныеПоставщика.Наименование, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеПоставщика.Телефон) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ТЛФ.ПОСТ.:'"), ОбщиеПараметры.ДанныеПоставщика.Телефон, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеПоставщика.ИНН) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ИНН ПОСТАВЩИКА:'"), ОбщиеПараметры.ДанныеПоставщика.ИНН, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ПлатежныйАгент.Операция) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ПЛ.АГЕНТ ОПЕР.:'"), ОбщиеПараметры.ДанныеАгента.ПлатежныйАгент.Операция, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ПлатежныйАгент.Телефон) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ПЛ.АГЕНТ.ТЛФ.:'"), ОбщиеПараметры.ДанныеАгента.ПлатежныйАгент.Телефон, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Наименование) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ОПЕРАТОР ПЕРЕВОДА:'"), ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Наименование, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Телефон) Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ТЛФ.ОП.ПЕРЕВОДА:'"), ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Телефон, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Адрес) Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='АДР.ОП.ПЕРЕВОДА:'"), ОбщиеПараметры.ДанныеАгента.ОператорПеревода.Адрес, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ОператорПеревода.ИНН) Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ИНН ОП.ПЕРЕВОДА:'"), ОбщиеПараметры.ДанныеАгента.ОператорПеревода.ИНН, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ОбщиеПараметры.ДанныеАгента.ОператорПоПриемуПлатежей.Телефон) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ОПЕР.ПО ПРИЕМУ ПЛАТ.ТЛФ:'"), ОбщиеПараметры.ДанныеАгента.ОператорПоПриемуПлатежей.Телефон, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Если НЕ ПустаяСтрока(ОбщиеПараметры.ДополнительныйРеквизитПользователя.Наименование) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='РЕК.ПОЛЬЗ.:'"), ОбщиеПараметры.ДополнительныйРеквизитПользователя.Наименование, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ОбщиеПараметры.ДополнительныйРеквизитПользователя.Значение) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='РЕК.ПОЛЬЗ.:'"), ОбщиеПараметры.ДополнительныйРеквизитПользователя.Значение, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + КонецЕсли; + + Текст = Текст + РазделительВнутр; + КонецЕсли; + + ФорматЧисла = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0"; + СуммаЧека = 0; + СуммаПозицийНДС0 = 0; + СуммаПозицийНДС10 = 0; + СуммаПозицийНДС18 = 0; + СуммаПозицийНДС20 = 0; + СуммаПозицийНДС110 = 0; + СуммаПозицийНДС118 = 0; + СуммаПозицийНДС120 = 0; + СуммаПозицийБезНДС = 0; + СуммаНДС0 = 0; + СуммаНДС10 = 0; + СуммаНДС18 = 0; + СуммаНДС20 = 0; + СуммаНДС110 = 0; + СуммаНДС118 = 0; + СуммаНДС120 = 0; + СуммаБезНДС = 0; + + // Формируем строки чека. + Если ПозицииЧека <> Неопределено Тогда + + Для ИндексМассива = 0 По ПозицииЧека.Количество() - 1 Цикл + + ПозицияЧека = ПозицииЧека[ИндексМассива]; + + Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда + Наименование = ?(ПозицияЧека.Свойство("Наименование"), ПозицияЧека.Наименование, ""); + Количество = ?(ПозицияЧека.Свойство("Количество") , ПозицияЧека.Количество , 1); + Цена = ?(ПозицияЧека.Свойство("Цена") , ПозицияЧека.Цена , 0); + Сумма = ?(ПозицияЧека.Свойство("Сумма") , ПозицияЧека.Сумма , 0); + НомерСекции = ?(ПозицияЧека.Свойство("НомерСекции") , ПозицияЧека.НомерСекции , 0); + СтавкаНДС = ?(ПозицияЧека.Свойство("СтавкаНДС") , ПозицияЧека.СтавкаНДС , 0); + СуммаНДС = ?(ПозицияЧека.Свойство("СуммаНДС") , ?(ПустаяСтрока(ПозицияЧека.СуммаНДС), 0, ПозицияЧека.СуммаНДС), 0); + СуммаСкидок = ?(ПозицияЧека.Свойство("СуммаСкидок") , ?(ПустаяСтрока(ПозицияЧека.СуммаСкидок), 0, ПозицияЧека.СуммаСкидок), 0); + + ТекстСтроки = ПостроитьПолеПереносом(Наименование, ШиринаСтроки) + Символы.ПС; + ЦенаДляПечати = Окр(Сумма / ?(Количество > 0, Количество, 1), 2); + + СтрокаТовара = Формат(Количество, "ЧРД=.;ЧЦ=12;ЧДЦ=3;ЧН=0.000;ЧГ=0") + " х " + + Формат(ЦенаДляПечати, ФорматЧисла) + "=" + Формат(Сумма, ФорматЧисла); + ТекстСтроки = Символы.ПС + ТекстСтроки + ВыстроитьПоля("", СтрокаТовара, ШиринаСтроки) + Символы.ПС; + + Если СуммаСкидок > 0 Тогда + ТекстСкидки = НСтр("ru='СКИДКА'") + "=" + Формат(СуммаСкидок, ФорматЧисла); + ИначеЕсли СуммаСкидок < 0 Тогда + ТекстСкидки = НСтр("ru='НАДБАВКА'") + "=" + Формат(СуммаСкидок, ФорматЧисла); + Иначе + ТекстСкидки = ""; + КонецЕсли; + + ТекстНалога = ""; + Если ПозицияЧека.СтавкаНДС = 10 Тогда + СуммаПозицийНДС10 = СуммаПозицийНДС10 + Сумма; + СуммаНДС10 = СуммаНДС10 + СуммаНДС; + ТекстНалога = НСтр("ru='НДС 10%'"); + ИначеЕсли ПозицияЧека.СтавкаНДС = 18 Тогда + СуммаПозицийНДС18 = СуммаПозицийНДС18 + Сумма; + СуммаНДС18 = СуммаНДС18 + СуммаНДС; + ТекстНалога = НСтр("ru='НДС 18%'"); + ИначеЕсли ПозицияЧека.СтавкаНДС = 20 Тогда + СуммаПозицийНДС20 = СуммаПозицийНДС20 + Сумма; + СуммаНДС20 = СуммаНДС20 + СуммаНДС; + ТекстНалога = НСтр("ru='НДС 20%'"); + ИначеЕсли ПозицияЧека.СтавкаНДС = 0 Тогда + СуммаПозицийНДС0 = СуммаПозицийНДС0 + Сумма; + СуммаНДС0 = СуммаНДС0 + СуммаНДС; + ТекстНалога = НСтр("ru='НДС 0%'"); + ИначеЕсли ПозицияЧека.СтавкаНДС = 110 Тогда + СуммаПозицийНДС110 = СуммаПозицийНДС110 + Сумма; + СуммаНДС110 = СуммаНДС110 + СуммаНДС; + ТекстНалога = НСтр("ru='НДС 10/110'"); + ИначеЕсли ПозицияЧека.СтавкаНДС = 118 Тогда + СуммаПозицийНДС118 = СуммаПозицийНДС118 + Сумма; + СуммаНДС118 = СуммаНДС118 + СуммаНДС; + ТекстНалога = НСтр("ru='НДС 18/118'"); + ИначеЕсли ПозицияЧека.СтавкаНДС = 120 Тогда + СуммаПозицийНДС120 = СуммаПозицийНДС120 + Сумма; + СуммаНДС120 = СуммаНДС120 + СуммаНДС; + ТекстНалога = НСтр("ru='НДС 20/120'"); + Иначе + СуммаПозицийБезНДС = СуммаПозицийБезНДС + Сумма; + СуммаБезНДС = СуммаБезНДС + Сумма; + ТекстНалога = НСтр("ru='БЕЗ НДС'"); + КонецЕсли; + + Если ПустаяСтрока(ТекстСкидки) Тогда + ТекстСтроки = ТекстСтроки + ПостроитьПоле(ТекстНалога, ШиринаСтроки) + Символы.ПС; + Иначе + ТекстСтроки = ТекстСтроки + ВыстроитьПоля(ТекстНалога, ТекстСкидки, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Текст = Текст + ТекстСтроки; + + Если НЕ ПустаяСтрока(ПозицияЧека.ПризнакПредметаРасчета) Тогда + ПризнакПредметаРасчетаНаименование = ВРег(Строка(ПозицияЧека.ПризнакПредметаРасчета)); + Текст = Текст + ПостроитьПолеПереносом(ПризнакПредметаРасчетаНаименование, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Если НЕ ПустаяСтрока(ПозицияЧека.ПризнакСпособаРасчета) Тогда + ПризнакСпособаРасчета = КодПризнакаСпособаРасчета(ПозицияЧека.ПризнакСпособаРасчета); + ПризнакСпособаРасчетаНаименование = НаименованиеПризнакаСпособаРасчета(ПризнакСпособаРасчета); + Текст = Текст + ПостроитьПоле(ПризнакСпособаРасчетаНаименование, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Если ПозицияЧека.Свойство("КонтрольнаяМарка") И НЕ ПустаяСтрока(ПозицияЧека.КонтрольнаяМарка) Тогда + Текст = Текст + ПостроитьПоле(НСтр("ru='[М]'"), ШиринаСтроки) + Символы.ПС; + ИначеЕсли ПозицияЧека.ДанныеКодаТоварнойНоменклатуры.Свойство("РеквизитКодаТовара") Тогда + Штрихкод = ПозицияЧека.Штрихкод; + Если ПозицияЧека.Свойство("КодВидаНоменклатурнойКлассификации") И НЕ ПустаяСтрока(ПозицияЧека.КодВидаНоменклатурнойКлассификации) Тогда + Штрихкод = ПозицияЧека.КодВидаНоменклатурнойКлассификации; + КонецЕсли; + КодТовараИдентифицируетЭкземпляр = ОборудованиеЧекопечатающиеУстройстваВызовСервера.КодТовараИдентифицируетЭкземпляр(ПозицияЧека.ДанныеКодаТоварнойНоменклатуры.РеквизитКодаТовара, Штрихкод); + КодТовараТекст = Штрихкод; + Если КодТовараИдентифицируетЭкземпляр Тогда + КодТовараТекст = НСтр("ru='[М]'") + КодТовараТекст + Символы.НПП; + КонецЕсли; + Текст = Текст + ПостроитьПолеПереносом(КодТовараТекст, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Если НЕ ПустаяСтрока(ПозицияЧека.КодСтраныПроисхожденияТовара) Тогда + Текст = Текст + ПостроитьПоле(НСтр("ru='КОД СТРАНЫ:'") + ПозицияЧека.КодСтраныПроисхожденияТовара, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ПозицияЧека.НомерТаможеннойДекларации) Тогда + Текст = Текст + ПостроитьПолеПереносом(НСтр("ru='ДЕКЛАРАЦИЯ:'") + ПозицияЧека.НомерТаможеннойДекларации, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ПозицияЧека.СуммаАкциза) И ПозицияЧека.СуммаАкциза > 0 Тогда + Текст = Текст + ПостроитьПоле(НСтр("ru='АКЦИЗ:'") + ПозицияЧека.СуммаАкциза, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ПозицияЧека.ЕдиницаИзмерения) Тогда + Текст = Текст + ПостроитьПоле(НСтр("ru='ЕД.ИЗМЕРЕНИЯ:'") + ПозицияЧека.ЕдиницаИзмерения, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Если НЕ ПустаяСтрока(ПозицияЧека.ПризнакАгентаПоПредметуРасчета) Тогда + Текст = Текст + ПостроитьПоле(ВРег(Строка(ПозицияЧека.ПризнакАгентаПоПредметуРасчета)), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеПоставщика.Наименование) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ПОСТАВЩИК:'"), ПозицияЧека.ДанныеПоставщика.Наименование, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеПоставщика.Телефон) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ТЛФ.ПОСТ.:'"), ПозицияЧека.ДанныеПоставщика.Телефон, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеПоставщика.ИНН) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ИНН ПОСТАВЩИКА:'"), ПозицияЧека.ДанныеПоставщика.ИНН, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ПлатежныйАгент.Операция) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ПЛ.АГЕНТ ОПЕР.:'"), ПозицияЧека.ДанныеАгента.ПлатежныйАгент.Операция, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ПлатежныйАгент.Телефон) Тогда + // АПК: 1299-выкл особенность форматирования в чеках + Текст = Текст + ВыстроитьПоля(НСтр("ru=' ПЛ.АГЕНТ ТЛФ.:'"), ПозицияЧека.ДанныеАгента.ПлатежныйАгент.Телефон, ШиринаСтроки) + Символы.ПС; + // АПК: 1299-вкл + КонецЕсли; + Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ОператорПеревода.Наименование) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ОПЕРАТОР ПЕРЕВОДА:'"), ПозицияЧека.ДанныеАгента.ОператорПеревода.Наименование, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ОператорПеревода.Телефон) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ТЛФ.ОП.ПЕРЕВОДА:'"), ПозицияЧека.ДанныеАгента.ОператорПеревода.Телефон, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ОператорПеревода.Адрес) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='АДР.ОП.ПЕРЕВОДА:'"), ПозицияЧека.ДанныеАгента.ОператорПеревода.Адрес, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ОператорПеревода.ИНН) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ИНН ОП.ПЕРЕВОДА:'"), ПозицияЧека.ДанныеАгента.ОператорПеревода.ИНН, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ПозицияЧека.ДанныеАгента.ОператорПоПриемуПлатежей.Телефон) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ОПЕР.ПО ПРИЕМУ ПЛАТ.ТЛФ:'"), ПозицияЧека.ДанныеАгента.ОператорПоПриемуПлатежей.Телефон, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если НЕ ПустаяСтрока(ПозицияЧека.ДополнительныйРеквизит) Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ДОП.РЕК.:'"), ПозицияЧека.ДополнительныйРеквизит, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + СуммаЧека = СуммаЧека + Сумма; + ИначеЕсли ПозицияЧека.Свойство("ТекстоваяСтрока") Тогда + ТекстСтроки = ?(ПозицияЧека.Свойство("Текст"), ПозицияЧека.Текст, ""); + Текст = Текст + ТекстСтроки + Символы.ПС; + ИначеЕсли ПозицияЧека.Свойство("ШтрихКод") Тогда + СтрокаШтрихкода = "|ШтрихКод|" + ПозицияЧека.ТипШтрихкода + "|" + ПозицияЧека.ШтрихКод; + Текст = Текст + СтрокаШтрихкода + Символы.ПС; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Формируем подвал чека + Если ТаблицаОплат <> Неопределено Тогда + + СуммаНаличными = 0; + СуммаЭлектронными = 0; + СуммаПостоплатой = 0; + СуммаПредоплатой = 0; + СуммаПредоставлением = 0; + Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл + Если ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно") Тогда + СуммаЭлектронными = СуммаЭлектронными + ТаблицаОплат[ИндексОплаты].Сумма; + ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Предоплата") Тогда + СуммаПредоплатой = СуммаПредоплатой + ТаблицаОплат[ИндексОплаты].Сумма; + ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Постоплата") Тогда + СуммаПостоплатой = СуммаПостоплатой + ТаблицаОплат[ИндексОплаты].Сумма; + ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.ВстречноеПредоставление") Тогда + СуммаПредоставлением = СуммаПредоставлением + ТаблицаОплат[ИндексОплаты].Сумма; + Иначе + СуммаНаличными = СуммаНаличными + ТаблицаОплат[ИндексОплаты].Сумма; + КонецЕсли; + КонецЦикла; + + СуммаОплаты = СуммаНаличными + СуммаЭлектронными + СуммаПостоплатой + СуммаПредоплатой + СуммаПредоставлением; + + Текст = Текст + РазделительВнутр; + Текст = Текст + ВыстроитьПоля(НСтр("ru='ИТОГ'"), "=" + Формат(СуммаЧека, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + Текст = Текст + РазделительВнутр; + + Текст = Текст + НСтр("ru='ОПЛАТА'") + Символы.ПС; + + Если ФорматФФД = "1.0" Тогда // ФФД 1.0 + Если СуммаНаличными > 0 Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='НАЛИЧНЫМИ'"), "=" + Формат(СуммаНаличными, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаЭлектронными > 0 Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаЭлектронными, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПостоплатой > 0 Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаПостоплатой, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПредоплатой > 0 Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаПредоплатой, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПредоставлением > 0 Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаПредоставлением, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Иначе // ФФД 1.05 & ФФД 1.1 + Если СуммаНаличными > 0 Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='НАЛИЧНЫМИ'"), "=" + Формат(СуммаНаличными, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаЭлектронными > 0 Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='БЕЗНАЛИЧНЫМИ'"), "=" + Формат(СуммаЭлектронными, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПредоплатой > 0 Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ПРЕДВАРИТЕЛЬНАЯ'"), "=" + Формат(СуммаПредоплатой, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПостоплатой > 0 Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ПОСЛЕДУЮЩАЯ'"), "=" + Формат(СуммаПостоплатой, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПредоставлением > 0 Тогда + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ИНАЯ ФОРМА'"), "=" + Формат(СуммаПредоставлением, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + КонецЕсли; + + Если СуммаОплаты - СуммаЧека > 0 Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru='ПОЛУЧЕНО'"), "=" + Формат(СуммаОплаты, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='СДАЧА'"), "=" + Формат(СуммаОплаты - СуммаЧека, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Если ОбщиеПараметры.Свойство("СистемаНалогообложения") Тогда + СистемаНалогообложенияКод = КодСистемыНалогообложенияККТ(ОбщиеПараметры.СистемаНалогообложения); + СистемаНалогообложения = НаименованиеСистемыНалогообложения(СистемаНалогообложенияКод, Истина); + Текст = Текст + ВыстроитьПоля(НСтр("ru='СНО:'"), СистемаНалогообложения, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + // АПК: 1299-выкл особенность форматирования в чеках + Если СуммаПозицийНДС20 > 0 Тогда + ЗначениеНДС = ?(СуммаНДС20 > 0, СуммаНДС20, СуммаПозицийНДС20 / 120 * 20); + Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 20%'"), "=" + Формат(ЗначениеНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПозицийНДС18 > 0 Тогда + ЗначениеНДС = ?(СуммаНДС18 > 0, СуммаНДС18, СуммаПозицийНДС18 / 118 * 18); + Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 18%'"), "=" + Формат(ЗначениеНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПозицийНДС10 > 0 Тогда + ЗначениеНДС = ?(СуммаНДС10 > 0, СуммаНДС10, СуммаПозицийНДС10 / 110 * 10); + Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 10%'"), "=" + Формат(ЗначениеНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПозицийНДС120 > 0 Тогда + ЗначениеНДС = ?(СуммаНДС120 > 0, СуммаНДС120, СуммаПозицийНДС120 / 120 * 20); + Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 20/120'"), "=" + Формат(ЗначениеНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПозицийНДС118 > 0 Тогда + ЗначениеНДС = ?(СуммаНДС118 > 0, СуммаНДС118, СуммаПозицийНДС118 / 118 * 18); + Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 18/118'"), "=" + Формат(ЗначениеНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПозицийНДС110 > 0 Тогда + ЗначениеНДС = ?(СуммаНДС110 > 0, СуммаНДС110, СуммаПозицийНДС110 / 110 * 10); + Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 10/110'"), "=" + Формат(ЗначениеНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПозицийНДС0 > 0 Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА C НДС 0%'") , "=" + Формат(СуммаПозицийНДС0, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + Если СуммаПозицийБезНДС > 0 Тогда + Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА БЕЗ НДС'"), "=" + Формат(СуммаПозицийБезНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС; + КонецЕсли; + // АПК: 1299-вкл + + Кассир = ?(ОбщиеПараметры.Свойство("Кассир"), ОбщиеПараметры.Кассир, ""); + Текст = Текст + ПостроитьПоле(НСтр("ru='КАССИР'") + ":" + Символы.НПП + Кассир, ШиринаСтроки) + Символы.ПС + Символы.ПС; + Если ПолеПодписи Тогда + Текст = Текст + ПостроитьПоле(НСтр("ru='ПОДПИСЬ'") + ":", ШиринаСтроки, "_") + Символы.ПС; + Если ОбщиеПараметры.Свойство("ТекстПодвала") И НЕ ПустаяСтрока(ОбщиеПараметры.ТекстПодвала) Тогда + Текст = Текст + ВыстроитьПоля(ОбщиеПараметры.ТекстПодвала, , ШиринаСтроки) + Символы.ПС; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Если НЕ ПустаяСтрока(ДополнительныйТекст) И ПолеПодписи Тогда + Текст = Текст + ДополнительныйТекст + Символы.ПС; + КонецЕсли; + + Текст = Текст + Разделитель + Символы.ПС; + + Возврат Текст; + +КонецФункции + +// АПК: 142-вкл + +// Устарела: следует использовать механизм ШаблоныФискальныхДокументов.ШаблонКассовыйЧек. +// Функция формирует текст нефискального чека по шаблону. +// +// Параметры: +// ОбщиеПараметры - Структура - см. СформироватьТекстНефискальногоДокумента() +// ШиринаСтроки - Число +// ФорматФФД - Строка +// ПолеПодписи - Булево - выводить поле подписи +// +// Возвращаемое значение: +// Структура. +// +Функция СформироватьТекстНефискальногоЧека(ОбщиеПараметры, ШиринаСтроки = 32, ФорматФФД = "1.1", ПолеПодписи = Истина) Экспорт + + Возврат СформироватьТекстНефискальногоДокумента(0, ОбщиеПараметры, ШиринаСтроки, Неопределено, ФорматФФД, ПолеПодписи); + +КонецФункции + +// Устарела: следует использовать механизм ШаблоныФискальныхДокументов.ШаблонИнфоКвитанция. +// Сформировать шаблон инфо квитанции. +// +// Параметры: +// Параметры - Структура - Параметры. +// ШиринаСтроки - Число - Ширина строки. +// ПечатьШтрихкода - Булево - Печать штрихкода +// +// Возвращаемое значение: +// Строка - Сформировать шаблон инфо квитанции +// +Функция СформироватьШаблонИнфоКвитанции(Параметры, ШиринаСтроки, ПечатьШтрихкода = Истина) Экспорт + + Текст = ВыстроитьПоля(Параметры.НаименованиеОрганизации, , ШиринаСтроки) + Символы.ПС; + + АдресЧека = ?(Параметры.Свойство("АдресЧека"), Параметры.АдресЧека, Неопределено); + ПодписьЧека = ?(Параметры.Свойство("ПодписьЧека"), Параметры.ПодписьЧека, Неопределено); + + ОрганизацияИНН = ?(НЕ ПустаяСтрока(Параметры.ИНН), НСтр("ru='ИНН:'") + Параметры.ИНН, ""); + ОрганизацияКПП = ?(НЕ ПустаяСтрока(Параметры.КПП), НСтр("ru='КПП:'") + Параметры.КПП, ""); + Если Не ПустаяСтрока(ОрганизацияИНН) Или НЕ ПустаяСтрока(ОрганизацияКПП) Тогда + Текст = Текст + ВыстроитьПоля(ОрганизацияИНН, ОрганизацияКПП, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + НомерКассы = ?(НЕ ПустаяСтрока(Параметры.НомерКассы), НСтр("ru='КАССА:'") + Параметры.НомерКассы, ""); + НомерСмены = ?(НЕ ПустаяСтрока(Параметры.НомерСмены), НСтр("ru='СМЕНА:'") + Формат(Параметры.НомерСмены, "ЧГ=0"), 0); + + Если Не ПустаяСтрока(НомерКассы) Или НЕ ПустаяСтрока(НомерСмены) Тогда + Текст = Текст + ВыстроитьПоля(НомерКассы, НомерСмены, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + НомерЧека = ?(НЕ ПустаяСтрока(Параметры.НомерЧека), НСтр("ru='ЧЕК:'") + Параметры.НомерЧека, ""); + // АПК: 1367-выкл особенность локального законодательства + ДатаВремя = НСтр("ru='ДАТА:'") + Формат(МенеджерОборудованияКлиентСервер.ДатаСеанса(), "ДФ=""дд.ММ.гггг ЧЧ:мм"""); + // АПК: 1367-вкл + Если Не ПустаяСтрока(НомерЧека) Или НЕ ПустаяСтрока(ДатаВремя) Тогда + Текст = Текст + ВыстроитьПоля(НомерЧека, ДатаВремя, ШиринаСтроки) + Символы.ПС; + КонецЕсли; + + Текст = Текст + " " + Символы.ПС; + + Если ПечатьШтрихкода Тогда + Текст = Текст + "|ШтрихКод|QR|" + АдресЧека + Символы.ПС; + КонецЕсли; + + Текст = Текст + " " + Символы.ПС; + + СтрокаТекста = ПостроитьПолеПереносом(АдресЧека, ШиринаСтроки); + Для НомерСтроки = 1 По СтрЧислоСтрок(СтрокаТекста) Цикл + Текст = Текст + СтрПолучитьСтроку(СтрокаТекста, НомерСтроки) + Символы.ПС; + КонецЦикла; + + Текст = Текст + " " + Символы.ПС; + + СтрокаТекста = ПостроитьПолеПереносом(ПодписьЧека, ШиринаСтроки); + Для НомерСтроки = 1 По СтрЧислоСтрок(СтрокаТекста) Цикл + Текст = Текст + СтрПолучитьСтроку(СтрокаТекста, НомерСтроки) + Символы.ПС; + КонецЦикла; + + Возврат Текст; + +КонецФункции + +#КонецОбласти + + +#КонецОбласти + +// -- Локализация + +// Устарела: следует использовать ПараметрыПечатиТекста. +// Заполняет структуру параметров печати текста. +// +// Параметры: +// СтрокиТекста - Строка +// +// Возвращаемое значение: +// Структура. +// +Функция ПараметрыПечатиТеста(СтрокиТекста = Неопределено) Экспорт + + Параметры = Новый Структура(); + Параметры.Вставить("СтрокиТекста", СтрокиТекста); + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает Истина если используется ККТ без подключения оборудования +// +// Параметры: +// ПараметрыОперации - Структура - параметры выполнения операции. +// +// Возвращаемое значение: +// Булево +Функция ЭтоККТБезПодключения(ПараметрыОперации) Экспорт + + Возврат ЗначениеЗаполнено(ПараметрыОперации) + И ПараметрыОперации.Свойство("КассаККМ") + И ЗначениеЗаполнено(ПараметрыОперации.КассаККМ); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Выстраивает строку по длине поля, если поле длинное - переносит на следующую строку. +// +// Параметры: +// Текст - Неопределено, Строка - Текст +// ДлинаПоля - Число - Длина поля +// ДобСимвол - Строка - Доб символ +// ПоЦентру - Булево - По центру +// +// Возвращаемое значение: +// Неопределено, Строка - Построить поле переносом +Функция ПостроитьПолеПереносом(Знач Текст, Знач ДлинаПоля, ДобСимвол = "", ПоЦентру = Ложь) Экспорт + + ДобСимвол = ?(ПустаяСтрока(ДобСимвол), " ", ДобСимвол); + + Если СтрДлина(Текст) > ДлинаПоля Тогда + ТекстПолный = ""; + Пока СтрДлина(Текст) > ДлинаПоля Цикл + ТекстПолный = ТекстПолный + ?(ПустаяСтрока(ТекстПолный), "", Символы.ПС) + Лев(Текст, ДлинаПоля); + Текст = Сред(Текст, ДлинаПоля + 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..1090c88 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация/Ext/Module.bsl @@ -0,0 +1,413 @@ +#Область ПрограммныйИнтерфейс + +#Область 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); + ПризнакиПредметаРасчета.Вставить(ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Залог") , 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..5773c04 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваЛокализация/Ext/Module.bsl @@ -0,0 +1,367 @@ + +#Область ПрограммныйИнтерфейс + +#Область ПараметрыРегистрации + +// Сохраняет параметры регистрации устройства +// +// Параметры: +// Результат - Булево +// Идентификатор - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства - +// ПараметрыРегистрации - Структура - +// +Процедура СохранитьПараметрыРегистрацииУстройства(Результат, Идентификатор, ПараметрыРегистрации) Экспорт + + // ++ Локализация + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 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"; + КонецЕсли; + + // -- Локализация + +КонецПроцедуры + +// Возвращает для фискального устройства версию ФФД. +// +// Параметры: +// Результат - Строка - Версию ФФД поддерживаемая устройством +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства. +// +Процедура ФискальноеУстройствоПоддерживаетВерсиюФФД(Результат, ИдентификаторУстройства) Экспорт + + // ++ Локализация + + Результат = Неопределено; + ПараметрыРегистрации = Новый Структура(); + ПараметрыРегистрацииУстройства(ПараметрыРегистрации, ИдентификаторУстройства); + Если ПараметрыРегистрации <> Неопределено И ПараметрыРегистрации.Свойство("ВерсияФФДККТ") Тогда + Результат = ПараметрыРегистрации.ВерсияФФДККТ; + КонецЕсли; + + // -- Локализация + +КонецПроцедуры + +#КонецОбласти + +// Выполняет проверку обязательности заполняет тэгов. +// +// Параметры: +// Результат - Булево +// Параметры - Структура +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование +// ОписаниеОшибки - Строка +// +// Возвращаемое значение: +// Булево. +Процедура ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов(Результат, Параметры, ИдентификаторУстройства, ОписаниеОшибки) Экспорт + + // ++ Локализация + + Если ОбщегоНазначенияБПО.ИспользуетсяФорматноЛогическийКонтроль() Тогда + МодульФорматноЛогическийКонтроль = ОбщегоНазначенияБПО.ОбщийМодуль("ФорматноЛогическийКонтроль"); + Результат = МодульФорматноЛогическийКонтроль.ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов(Параметры, ИдентификаторУстройства, ОписаниеОшибки); + Иначе + Результат = Истина; + КонецЕсли; + + // -- Локализация + +КонецПроцедуры + +// Приводит к формату согласованному с ФНС. +// +// Параметры: +// ОсновныеПараметры - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// Отказ - Булево +// ОписаниеОшибки - Строка +// ИсправленыОсновныеПараметры - Булево +Процедура ПривестиДанныеКТребуемомуФормату(ОсновныеПараметры, Отказ, ОписаниеОшибки, ИсправленыОсновныеПараметры) Экспорт + + // ++ Локализация + + Если ОбщегоНазначенияБПО.ИспользуетсяФорматноЛогическийКонтроль() Тогда + МодульФорматноЛогическийКонтроль = ОбщегоНазначенияБПО.ОбщийМодуль("ФорматноЛогическийКонтроль"); + МодульФорматноЛогическийКонтроль.ПривестиДанныеКТребуемомуФормату(ОсновныеПараметры, Отказ); + КонецЕсли; + + // -- Локализация + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// ++ Локализация +Функция ПреобразоватьВБулево(Строка) + Попытка + Возврат XMLЗначение(Тип("Булево"), Строка); + Исключение + Возврат ВРег(Строка) = "ДА" Или ВРег(Строка) = "TRUE" Или ВРег(Строка) = "YES"; + КонецПопытки; +КонецФункции +// -- Локализация + +#КонецОбласти \ No newline at end of file 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..f7ab320 --- /dev/null +++ b/CommonModules/ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер/Ext/Module.bsl @@ -0,0 +1,233 @@ + +#Область ПрограммныйИнтерфейс + +#Область КодыОФД + +/////////////////////////////////////////////////////////////////////////////// +// Коды изменений сведений ККТ + +// Возвращает код причины изменения сведений о ККТ. +// +// Параметры: +// ПричинаИзмененияСведенийККТ - ПеречислениеСсылка.ПричиныИзмененияСведенийККТ - Причина изменения сведений ККТ. +// +// Возвращаемое значение: +// Произвольный, Число - Код причины изменения сведений ККТ +Функция КодПричиныИзмененияСведенийККТ(ПричинаИзмененияСведенийККТ) Экспорт + + ПричиныИзмененияСведенийККТ = Новый Соответствие(); + + ПричиныИзмененияСведенийККТ.Вставить(ПредопределенноеЗначение("Перечисление.ПричиныИзмененияСведенийККТ.ЗаменаФН") , 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", ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.Терабайт")); + + МерыКоличества = МерыКоличества.Получить(Строка(КодЕдиницыИзмерения)); + Если МерыКоличества = Неопределено Тогда + МерыКоличества = ПредопределенноеЗначение("Перечисление.МераКоличестваПредметаРасчетаККТ.ИныеЕдиницыИзмерения"); + КонецЕсли; + + Возврат МерыКоличества; + +КонецФункции + +#КонецОбласти + +#КонецОбласти 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..bc2f2b3 --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПО/Ext/Module.bsl @@ -0,0 +1,1264 @@ +#Область ПрограммныйИнтерфейс + +// Получает текущую дату сервера, приведенную к часовому поясу сеанса. +// Предназначена для использования вместо функции ТекущаяДатаСеанса. +// +// Возвращаемое значение: +// Дата - текущая дата сеанса. +// +Функция ДатаСеанса() Экспорт +#Если МобильноеПриложениеСервер Тогда + // 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. +// +// Возвращаемое значение: +// Булево - признак автономного рабочего места. +// +Функция ЭтоАвтономноеРабочееМесто() Экспорт + + // Вызов БСП + Если ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщийМодуль("ОбменДаннымиСервер"); + Возврат МодульОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто(); + КонецЕсли; + // Конец Вызов БСП + + Возврат Ложь; + +КонецФункции + +// Возвращает Истина, если приложение запущено через веб-клиент +// +// Возвращаемое значение: +// Булево - признак веб клиента. +// +Функция ЭтоВебКлиент() Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.ЭтоВебКлиент(); + // Конец Вызов БСП + + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Возвращает Истина, если "функциональная" подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// У "функциональной" подсистемы снят флажок "Включать в командный интерфейс". +// +// Параметры: +// ПолноеИмяПодсистемы - Строка - полное имя объекта метаданных подсистема +// без слов "Подсистема." и с учетом регистра символов. +// Например: "СтандартныеПодсистемы.ВариантыОтчетов". +// +// Пример: +// +// Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда +// МодульВариантыОтчетов = ОбщегоНазначенияБПО.ОбщийМодуль("ВариантыОтчетов"); +// МодульВариантыОтчетов.<Имя метода>(); +// КонецЕсли; +// +// Возвращаемое значение: +// Булево. +// +Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.ПодсистемаСуществует(ПолноеИмяПодсистемы); + // Конец Вызов БСП + + Иначе + ИменаПодсистем = ОбщегоНазначенияБПОПовтИсп.ИменаПодсистем(); + Возврат ИменаПодсистем.Получить(ПолноеИмяПодсистемы) <> Неопределено; + КонецЕсли; + +КонецФункции + +// Возвращает ссылку на общий модуль по имени. +// +// Параметры: +// Имя - Строка - имя общего модуля, например: +// "ОбщегоНазначения", +// "ОбщегоНазначенияКлиент". +// +// Возвращаемое значение: +// ОбщийМодуль. +// +Функция ОбщийМодуль(Имя) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + // АПК: 486-выкл + ОбщегоНазначенияМодуль = Вычислить("ОбщегоНазначения"); //@skip-check server-execution-safe-mode + // АПК: 486-вкл + Возврат ОбщегоНазначенияМодуль.ОбщийМодуль(Имя); + // Конец Вызов БСП + + Иначе + Возврат ОбщийМодульБПО(Имя); + КонецЕсли; + +КонецФункции + +// Выполняет действия перед продолжением выполнения обработчика регламентного задания. +// +// Например, проверяет возможность выполнения обработчика регламентного задания. +// Если администратор не заблокировал выполнение регламентных заданий до +// окончания обновления ИБ, тогда требуется прекратить выполнение обработчика. +// +// Параметры: +// РегламентноеЗадание - РегламентноеЗадание - регламентное задание, +// из которого был вызван данный метод. Необходимо передавать для проверки доступности +// по функциональным опциям. +// +Процедура ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание = Неопределено) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + ОбщегоНазначенияМодуль.ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание); + // Конец Вызов БСП + + КонецЕсли; + +КонецПроцедуры + +// Вычисляет контрольную сумму для произвольных данных по указанному алгоритму. +// +// Параметры: +// Данные - Произвольный - любое сериализуемое значение. +// Алгоритм - ХешФункция - алгоритм расчета контрольной суммы. По умолчанию, MD5. +// +// Возвращаемое значение: +// Строка - контрольная сумма строкой без пробелов (например 32 символа). +// +Функция КонтрольнаяСуммаСтрокой(Знач Данные, Знач Алгоритм = Неопределено) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.КонтрольнаяСуммаСтрокой(Данные, Алгоритм); + // Конец Вызов БСП + + Иначе + Возврат КонтрольнаяСуммаСтрокойБПО(Данные, Алгоритм); + КонецЕсли; + +КонецФункции + +// Преобразует таблицу значений в массив структур. +// Может использоваться для передачи на клиент данных в том случае, если таблица +// значений содержит только такие значения, которые могут +// быть переданы с сервера на клиент. +// +// Полученный массив содержит структуры, каждая из которых повторяет +// структуру колонок таблицы значений. +// +// Не рекомендуется использовать для преобразования таблиц значений +// с большим количеством строк. +// +// Параметры: +// ТаблицаЗначений - ТаблицаЗначений - исходная таблица значений. +// +// Возвращаемое значение: +// Массив - коллекция строк таблицы в виде структур. +// +Функция ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ТаблицаЗначенийВМассив(ТаблицаЗначений); + // Конец Вызов БСП + + Иначе + Массив = Новый Массив(); + СтруктураСтрокой = ""; + НужнаЗапятая = Ложь; + Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл + Если НужнаЗапятая Тогда + СтруктураСтрокой = СтруктураСтрокой + ","; + КонецЕсли; + СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя; + НужнаЗапятая = Истина; + КонецЦикла; + Для Каждого Строка Из ТаблицаЗначений Цикл + НоваяСтрока = Новый Структура(СтруктураСтрокой); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); + Массив.Добавить(НоваяСтрока); + КонецЦикла; + Возврат Массив; + КонецЕсли; + +КонецФункции + +// Проверяет, умещаются ли переданные табличные документы на страницу при печати. +// +// Параметры: +// ТабДокумент - ТабличныйДокумент - табличный документ. +// ВыводимыеОбласти - Массив из ТабличныйДокумент +// - ТабличныйДокумент - массив из проверяемых таблиц или табличный документ. +// РезультатПриОшибке - Булево - какой возвращать результат при возникновении ошибки. +// +// Возвращаемое значение: +// Булево - умещаются или нет переданные документы. +// +Функция ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, РезультатПриОшибке = Истина) Экспорт + + Попытка + Возврат ТабДокумент.ПроверитьВывод(ВыводимыеОбласти); + Исключение + Возврат РезультатПриОшибке; + КонецПопытки; + +КонецФункции + +#Область ИнтерфейсныйПроцедурыИФункции + +// Установить свойства элемента управления +// +// Параметры: +// ЭлементУправления - ПолеФормы +// +Процедура ПодготовитьЭлементУправления(ЭлементУправления) Экспорт + +#Если МобильноеПриложениеСервер Тогда + СтандартнаяОбработка = Истина; // Булево + Если СтандартнаяОбработка Тогда + ЭлементУправления.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + ЭлементУправления.ШрифтЗаголовка = ШрифтыСтиля.МелкийШрифтТекста; + КонецЕсли; +#КонецЕсли + +КонецПроцедуры + +#КонецОбласти + +#Область ТекущееОкружение + +// Возвращает признак возможности обращения к разделенным данным (которые входят в состав разделителей). +// Признак относится к сеансу, но может меняться во время работы сеанса, если разделение было включено +// в самом сеансе, поэтому проверку следует делать непосредственно перед обращением к разделенным данным. +// +// Возвращает Истина, если конфигурация не может работать в режиме разделения данных +// (не содержит общих реквизитов, предназначенных для разделения данных). +// +// Возвращаемое значение: +// Булево - Истина, если разделение не поддерживается, либо разделение выключено, +// либо разделение включено и разделители установлены. +// Ложь, если разделение включено и разделители не установлены. +// +Функция ДоступноИспользованиеРазделенныхДанных() Экспорт + + Если ИспользуетсяБСП() Тогда + + // Вызов БСП + ОбщегоНазначенияМодуль = ОбщийМодуль("ОбщегоНазначения"); + Возврат ОбщегоНазначенияМодуль.ДоступноИспользованиеРазделенныхДанных(); + // Конец Вызов БСП + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +#КонецОбласти + + +// Преобразует строку таблицы значений в структуру. +// Свойства структуры и их значения совпадают с колонками переданной строки. +// +// Параметры: +// СтрокаТаблицыЗначений - СтрокаТаблицыЗначений +// +// Возвращаемое значение: +// Структура - преобразованная строка таблицы значений. +// +Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт + + Структура = Новый Структура; + Для каждого Колонка Из СтрокаТаблицыЗначений.Владелец().Колонки Цикл + Структура.Вставить(Колонка.Имя, СтрокаТаблицыЗначений[Колонка.Имя]); + КонецЦикла; + + Возврат Структура; + +КонецФункции + +#Область Данные + +// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно, +// с учетом типов дочерних элементов. При этом содержимое значений объектных типов +// (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект. +// +// Параметры: +// Источник - Структура +// - ФиксированнаяСтруктура +// - Соответствие +// - ФиксированноеСоответствие +// - Массив +// - ФиксированныйМассив +// - СписокЗначений - объект, который необходимо скопировать. +// ФиксироватьДанные - Булево - если Истина - фиксировать, если Ложь - снять фиксацию. +// - Неопределено - не изменять. +// +// Возвращаемое значение: +// Структура, +// ФиксированнаяСтруктура, +// Соответствие +// ФиксированноеСоответствие +// Массив +// ФиксированныйМассив +// СписокЗначений - копия объекта, переданного в параметре Источник. +// +Функция СкопироватьРекурсивно(Источник, ФиксироватьДанные = Неопределено) Экспорт + + Перем Приемник; + + ТипИсточника = ТипЗнч(Источник); + + Если ТипИсточника = Тип("ТаблицаЗначений") Тогда + Возврат Источник.Скопировать(); + КонецЕсли; + + Если ТипИсточника = Тип("Структура") + Или ТипИсточника = Тип("ФиксированнаяСтруктура") Тогда + Приемник = СкопироватьСтруктуру(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("Соответствие") + Или ТипИсточника = Тип("ФиксированноеСоответствие") Тогда + Приемник = СкопироватьСоответствие(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("Массив") + Или ТипИсточника = Тип("ФиксированныйМассив") Тогда + Приемник = СкопироватьМассив(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда + Приемник = СкопироватьСписокЗначений(Источник, ФиксироватьДанные); + Иначе + Приемник = Источник; + КонецЕсли; + + Возврат Приемник; + +КонецФункции + +#КонецОбласти + +#Область ДоступныеПодсистемы + +// Возвращает Истина, если используется устройства ввода и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяУстройстваВвода() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.УстройстваВвода"); + +КонецФункции + +// Возвращает Истина, если используется устройства "Шаблоны магнитных карт" и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяШаблоныМагнитныхКарт() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.УстройстваВвода.ШаблоныМагнитныхКарт"); + +КонецФункции + +// Возвращает Истина, если используется подсистемы фискальных устройств и эти подсистемы существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяЧекопечатающиеУстройства() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства"); + +КонецФункции + +// Возвращает Истина, если используется "Кассовая смена" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяКассоваяСмена() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.КассоваяСмена"); + +КонецФункции + +// Возвращает Истина, если используется "РассылкаЭлектронныхЧеков" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяРассылкаЭлектронныхЧеков() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.РассылкаЭлектронныхЧеков"); + +КонецФункции + +// Возвращает Истина, если используется "ФорматноЛогическийКонтроль" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяФорматноЛогическийКонтроль() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.ФорматноЛогическийКонтроль"); + +КонецФункции + +// Возвращает Истина, если используется "Маркировка" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяМаркировка() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.Маркировка"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Платежные системы" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПлатежныеСистемы() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ПлатежныеСистемы"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Дисплеи покупателя" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяДисплеиПокупателя() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ДисплеиПокупателя"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Весовое оборудование" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяВесовоеОборудование() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ВесовоеОборудование"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Терминалы сбора данных" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяТерминалыСбораДанных() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ТерминалыСбораДанных"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Принтеры этикеток" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПринтерыЭтикеток() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ПринтерыЭтикеток"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Считыватель RFID" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяСчитывательRFID() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.СчитывательRFID"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Офлайн-оборудование" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяОфлайнОборудование() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ОфлайнОборудование"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "Печать этикеток и ценников" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяПечатьЭтикетокИЦенников() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПечатьЭтикетокИЦенников"); + +КонецФункции + +// Возвращает Истина если существует подсистема ПоддержкаОборудования.СообщенияВСлужбуТехническойПоддержки +// +// Возвращаемое значение: +// Булево +Функция ИспользуетсяСообщенияВСлужбуТехническойПоддержки() Экспорт + + // Вызов БИП + Возврат ПодсистемаСуществует("ИнтернетПоддержкаПользователей.СообщенияВСлужбуТехническойПоддержки") + И ПодсистемаСуществует("ПоддержкаОборудования.СообщенияВСлужбуТехническойПоддержки"); + // Конец Вызов БИП + +КонецФункции + +// Возвращает Истина, если используется подсистема "Электронные сертификаты НСПК" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяЭлектронныеСертификатыНСПК() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ЭлектронныеСертификаты"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "СертификатыНУЦМинцифры" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяСертификатыНУЦМинцифры() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ЭлектронныеСертификаты.СертификатыНУЦМинцифры"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "РаспределеннаяФискализация" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяРаспределеннаяФискализация() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.РаспределеннаяФискализация"); + +КонецФункции + +// Возвращает Истина, если используется "АвтономнаяККТ" и эти подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяАвтономнаяККТ() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ЧекопечатающиеУстройства.АвтономнаяККТ"); + +КонецФункции + +// Возвращает Истина, если используется подсистема "НастройкиПрограммы" и эта подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// Возвращаемое значение: +// Булево. +// +Функция ИспользуетсяНастройкиПрограммыБПО() Экспорт + + Возврат ПодсистемаСуществует("ПоддержкаОборудования.НастройкиПрограммы"); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ОповещениеПользователя + +// Формирует и выводит сообщение, которое может быть связано с элементом управления формы. +// +// Параметры: +// ТекстСообщенияПользователю - Строка - текст сообщения. +// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится. +// Поле - Строка - наименование реквизита формы. +// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы). +// Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина. +//@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.Закрыть(); +КонецФункции + +#Область Данные + +#Область СкопироватьРекурсивно + +Функция СкопироватьСтруктуру(СтруктураИсточник, ФиксироватьДанные) + + СтруктураРезультат = Новый Структура; + + Для Каждого КлючИЗначение Из СтруктураИсточник Цикл + СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(СтруктураИсточник) = Тип("ФиксированнаяСтруктура") Тогда + + Возврат Новый ФиксированнаяСтруктура(СтруктураРезультат); + КонецЕсли; + + Возврат СтруктураРезультат; + +КонецФункции + +Функция СкопироватьСоответствие(СоответствиеИсточник, ФиксироватьДанные) + + СоответствиеРезультат = Новый Соответствие; + + Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл + СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(СоответствиеИсточник) = Тип("ФиксированноеСоответствие") Тогда + Возврат Новый ФиксированноеСоответствие(СоответствиеРезультат); + КонецЕсли; + + Возврат СоответствиеРезультат; + +КонецФункции + +Функция СкопироватьМассив(МассивИсточник, ФиксироватьДанные) + + МассивРезультат = Новый Массив; + + Для Каждого Элемент Из МассивИсточник Цикл + МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(МассивИсточник) = Тип("ФиксированныйМассив") Тогда + Возврат Новый ФиксированныйМассив(МассивРезультат); + КонецЕсли; + + Возврат МассивРезультат; + +КонецФункции + +Функция СкопироватьСписокЗначений(СписокИсточник, ФиксироватьДанные) + + СписокРезультат = Новый СписокЗначений; + + Для Каждого ЭлементСписка Из СписокИсточник Цикл + СписокРезультат.Добавить( + СкопироватьРекурсивно(ЭлементСписка.Значение, ФиксироватьДанные), + ЭлементСписка.Представление, + ЭлементСписка.Пометка, + ЭлементСписка.Картинка); + КонецЦикла; + + Возврат СписокРезультат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Если Не МобильноеПриложениеСервер Тогда + +Функция УровеньСобытияПоПредставлению(ПредставлениеУровня) + Если ПредставлениеУровня = "Информация" Тогда + Возврат УровеньЖурналаРегистрации.Информация; + ИначеЕсли ПредставлениеУровня = "Ошибка" Тогда + Возврат УровеньЖурналаРегистрации.Ошибка; + ИначеЕсли ПредставлениеУровня = "Предупреждение" Тогда + Возврат УровеньЖурналаРегистрации.Предупреждение; + ИначеЕсли ПредставлениеУровня = "Примечание" Тогда + Возврат УровеньЖурналаРегистрации.Примечание; + КонецЕсли; +КонецФункции + +#КонецЕсли + +#КонецОбласти 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..d88e2bf --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОКлиент/Ext/Module.bsl @@ -0,0 +1,751 @@ + +#Область ПрограммныйИнтерфейс + +// Возвращает текущую дату, происходит обращение к серверу, для получения точной даты. +// +// Возвращаемое значение: +// Дата - текущая дата сеанса. +// +Функция ДатаСеанса() Экспорт + + ДатаСеанса = МенеджерОборудованияКлиентПереопределяемый.ДатаСеанса(); + Если ЗначениеЗаполнено(ДатаСеанса) Тогда + Возврат ДатаСеанса; + КонецЕсли; + + Возврат ОбщегоНазначенияБПОСлужебныйВызовСервера.ДатаСеанса(); + +КонецФункции + +#Область РаботаС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..4a5dbb7 --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОКлиентСервер/Ext/Module.bsl @@ -0,0 +1,341 @@ +#Область ПрограммныйИнтерфейс + +// Функция возвращает разделитель GS1. +// +// Возвращаемое значение: +// Строка. +// +Функция РазделительGS1() Экспорт; + + Возврат Символ(29); // Dec 29 + +КонецФункции + +// Функция возвращает экранированный символ GS1. +// +// Возвращаемое значение: +// Строка. +// +Функция ЭкранированныйСимволGS1() Экспорт; + + Возврат "\x1d"; // Используется для экранирования символа GS1. + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Разбирает строку 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. + +КонецФункции + +#Область Интернет + +// Создает объект описания защищенного соединения OpenSSL. +// См. также описание объекта ЗащищенноеСоединениеOpenSSL в синтаксис-помощнике. +// +// Параметры: +// СертификатКлиента - СертификатКлиентаФайл +// - СертификатКлиентаWindows +// - Неопределено - клиентский сертификат OpenSSL. +// СертификатыУдостоверяющихЦентров - СертификатыУдостоверяющихЦентровФайл +// - СертификатыУдостоверяющихЦентровWindows +// - СертификатыУдостоверяющихЦентровLinux +// - СертификатыУдостоверяющихЦентровОС +// - Неопределено - сертификаты удостоверяющих центров OpenSSL. +// +// Возвращаемое значение: +// ЗащищенноеСоединениеOpenSSL +// +Функция НовоеЗащищенноеСоединение(СертификатКлиента = Неопределено, СертификатыУдостоверяющихЦентров = Неопределено) Экспорт + + // АПК: 1324-выкл БСП может не использоваться +#Если ВебКлиент Тогда + Возврат Неопределено; +#ИначеЕсли МобильныйКлиент Тогда + Возврат Новый ЗащищенноеСоединениеOpenSSL; +#Иначе + Возврат Новый ЗащищенноеСоединениеOpenSSL(СертификатКлиента, СертификатыУдостоверяющихЦентров); +#КонецЕсли + // АПК: 1324-вкл + +КонецФункции + +#КонецОбласти + +// Проверяет наличие реквизита или свойства у произвольного объекта без обращения к метаданным. +// +// Параметры: +// Объект - Произвольный - объект, у которого нужно проверить наличие реквизита или свойства; +// ИмяРеквизита - Строка - имя реквизита или свойства. +// +// Возвращаемое значение: +// Булево - Истина, если есть. +// +Функция ЕстьРеквизитИлиСвойствоОбъекта(Объект, ИмяРеквизита) Экспорт + + КлючУникальности = Новый УникальныйИдентификатор; + СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности); + ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект); + + Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности; + +КонецФункции + +// Проверяет, содержит ли строка только цифры. +// +// Параметры: +// Значение - Строка - проверяемая строка. +// Устаревший - Булево - устаревший параметр, не используется. +// ПробелыЗапрещены - Булево - если Ложь, то в строке допустимо наличие пробелов. +// +// Возвращаемое значение: +// Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы. +// +// Пример: +// Результат = ТолькоЦифрыВСтроке("0123"); // Истина +// Результат = ТолькоЦифрыВСтроке("0123abc"); // Ложь +// Результат = ТолькоЦифрыВСтроке("01 2 3",, Ложь); // Истина +// +Функция ТолькоЦифрыВСтроке(Знач Значение, Знач Устаревший = Истина, Знач ПробелыЗапрещены = Истина) Экспорт + + Если ТипЗнч(Значение) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ПробелыЗапрещены Тогда + Значение = СтрЗаменить(Значение, " ", ""); + КонецЕсли; + + Если СтрДлина(Значение) = 0 Тогда + Возврат Истина; + КонецЕсли; + + // Если содержит только цифры, то в результате замен должна быть получена пустая строка. + // Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы. + Возврат СтрДлина( + СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( + СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( + Значение, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "")) = 0; + +КонецФункции + +Функция СтрокаЗапускаБезопасная(СтрокаЗапуска) Экспорт + // Безопасными считаются такие строковые данные, которые не содержат в себе следующие символы: "$", "`", "|", "||" ";", "&", "&&". + ОпасныйВызов = СтрНайти(СтрокаЗапуска, "$")>0 + Или СтрНайти(СтрокаЗапуска, "`")>0 + Или СтрНайти(СтрокаЗапуска, "|")>0 + Или СтрНайти(СтрокаЗапуска, "||")>0 + Или СтрНайти(СтрокаЗапуска, ";")>0 + Или СтрНайти(СтрокаЗапуска, "&")>0 + Или СтрНайти(СтрокаЗапуска, "&&")>0; + Возврат Не ОпасныйВызов; +КонецФункции + +Функция ДатаСеанса() Экспорт + Возврат ОбщегоНазначенияБПОСлужебныйВызовСервера.ДатаСеанса(); +КонецФункции + +#КонецОбласти 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..2738fb7 --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОПереопределяемый/Ext/Module.bsl @@ -0,0 +1,16 @@ + +#Область ПрограммныйИнтерфейс + +// Выполняет запись ошибки в мобильном приложении вместо журнала регистрации +// @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..c6091a2 --- /dev/null +++ b/CommonModules/ОбщегоНазначенияБПОПовтИсп/Ext/Module.bsl @@ -0,0 +1,44 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает соответствие имен "функциональных" подсистем и значения Истина. +// У "функциональной" подсистемы снят флажок "Включать в командный интерфейс". +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение +// +Функция ИменаПодсистем() Экспорт + + Имена = Новый Соответствие; + ВставитьИменаПодчиненныхПодсистем(Имена, Метаданные); + + Возврат Новый ФиксированноеСоответствие(Имена); + +КонецФункции + +#КонецОбласти + + +#Область СлужебныеПроцедурыИФункции + +Процедура ВставитьИменаПодчиненныхПодсистем(Имена, РодительскаяПодсистема, ИмяРодительскойПодсистемы = "") + + Для Каждого ТекущаяПодсистема Из РодительскаяПодсистема.Подсистемы Цикл + + Если ТекущаяПодсистема.ВключатьВКомандныйИнтерфейс Тогда + Продолжить; + КонецЕсли; + + ИмяТекущейПодсистемы = ИмяРодительскойПодсистемы + ТекущаяПодсистема.Имя; + Имена.Вставить(ИмяТекущейПодсистемы, Истина); + + Если ТекущаяПодсистема.Подсистемы.Количество() = 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..d28312a --- /dev/null +++ b/CommonModules/ПодключаемоеОборудованиеДрайверКлиент/Ext/Module.bsl @@ -0,0 +1,2656 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Функция начинает выполнение команды, обрабатывает и перенаправляет на исполнение команду к драйверу. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ПараметрыПодключения - Структура +// Команда - Строка - команда для выполнения +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ВыполнениеКоманды(ПараметрыПодключения, Команда, ДанныеОперации) Экспорт; + + ОбъектДрайвера = ПараметрыПодключения.ОбъектДрайвера; + + // ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ФИСКАЛЬНЫМИ УСТРОЙСТВАМИ + Если Команда = "CheckFiscalization" Тогда + РезультатВыполнения = Ждать ФискализацияЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "PrintText" Или Команда = "PrintQRCode" Тогда + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "OpenShift" Тогда + РезультатВыполнения = Ждать ОткрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "CloseShift" Тогда + РезультатВыполнения = Ждать ЗакрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "Encash" Тогда + РезультатВыполнения = Ждать Инкассация(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "OpenCashDrawer" Тогда + РезультатВыполнения = Ждать ОткрытьДенежныйЯщик(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "PrintReceiptCorrection" Тогда + РезультатВыполнения = Ждать ПечатьЧекаКоррекции(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "ReportCurrentStatusOfSettlements" Тогда + РезультатВыполнения = Ждать ОтчетОТекущемСостоянииРасчетов(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "PrintXReport" Тогда + РезультатВыполнения = Ждать ОтчетБезГашения(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "GetLineLength" Тогда + РезультатВыполнения = Ждать ШиринаСтроки(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "AnnulCheck" Тогда + РезультатВыполнения = Ждать АннулированиеЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "GetDataKKT" Тогда + РезультатВыполнения = Ждать ПараметрыККТ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "GetCurrentStatus" Тогда + РезультатВыполнения = Ждать ТекущееСостояние(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "OperationFN" Тогда + РезультатВыполнения = Ждать ОперацияФискальногоНакопителя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "PrintCheckCopy" Тогда + РезультатВыполнения = Ждать НапечататьКопиюЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "OpenSessionRegistrationKM" Тогда + РезультатВыполнения = Ждать ОткрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "CloseSessionRegistrationKM" Тогда + РезультатВыполнения = Ждать ЗакрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "RequestKM" Тогда + РезультатВыполнения = Ждать ЗапросКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "GetProcessingKMResult" Тогда + РезультатВыполнения = Ждать РезультатыЗапросаКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "ConfirmKM" Тогда + РезультатВыполнения = Ждать ПодтвердитьКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + // ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ЭКВАЙРИНГОВЫМИ ТЕРМИНАЛАМИ + ИначеЕсли Команда = "AuthorizeSales" Или Команда = "AuthorizeRefund" Или Команда = "AuthorizeVoid" Или Команда = "PayByPaymentCardWithCashWithdrawal" Тогда + РезультатВыполнения = Ждать ЭквайринговаяОперация(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда); + ИначеЕсли Команда = "PayElectronicCertificate" Или Команда = "ReturnElectronicCertificate" Тогда + РезультатВыполнения = Ждать ЭквайринговаяОперацияСЭлектроннымСертификатом(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда); + ИначеЕсли Команда = "Settlement" Тогда // Сверка итогов по картам + РезультатВыполнения = Ждать ИтогиДняПоКартам(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "EmergencyVoid" Тогда // Аварийная отмена платежа + РезультатВыполнения = Ждать АварийнаяОтменаОперации(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "GetCardParametrs" Тогда // Получить параметры карты + РезультатВыполнения = Ждать ПараметрыКарты(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "GetOperationByCards" Тогда // Получить параметры карты + РезультатВыполнения = Ждать ОперацииПоКартам(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + // ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ДИСПЛЕЯМИ ПОКУПАТЕЛЯ + ИначеЕсли Команда = "GetOutputOptions" Тогда // Получить параметры вывода. + РезультатВыполнения = Ждать ПараметрыВывода(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "DisplayText" Тогда // Вывод строк на дисплей. + РезультатВыполнения = Ждать ВывестиСтрокуНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "ClearText" Тогда // Очистка дисплея. + РезультатВыполнения = Ждать ОчиститьДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "DisplayQRCode" Тогда // Вывод QR кода на дисплей. + РезультатВыполнения = Ждать ВывестиQRКодНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "DisplayStatus" Тогда // Вывести статус на дисплей покупателя + РезультатВыполнения = Ждать ВывестиСтатусНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "OutputHTML" Тогда // Вывести HTML на дисплей покупателя. + РезультатВыполнения = Ждать ВывестиHTMLНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "DisplayInfo" Тогда // Вывести информацию на дисплей покупателя + РезультатВыполнения = Ждать ВывестиИнформациюНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + // ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ЭЛЕКТРОННЫМИ ВЕСАМИ + ИначеЕсли Команда = "GetWeight" Тогда // Получить вес. + РезультатВыполнения = Ждать ПолучитьВес(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "Calibrate" Тогда // Установить вес тары. + РезультатВыполнения = Ждать Тарировать(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + // ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ВЕСАМИ C ПЕЧАТЬЮ ЭТИКЕТОК + ИначеЕсли Команда = "UploadGoods" Тогда // Выгрузка товаров в весы с печатью этикеток. + РезультатВыполнения = Ждать ВыгрузитьТовары(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "ClearBase" Тогда // Очистить базу весов с печатью этикеток. + РезультатВыполнения = Ждать ОчиститьТоварыВВесах(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + // ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ТЕРМИНАЛАМИ СБОРА ДАННЫМИ + ИначеЕсли Команда = "UploadDirectory" Тогда // Выгрузка таблицы в терминал сбора данных. + РезультатВыполнения = Ждать ВыгрузитьТаблицу(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "DownloadDocument" Тогда // Загрузка таблицы из терминала сбора данных. + РезультатВыполнения = Ждать ЗагрузитьТаблицу(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "ClearTable" Тогда // Очищает загруженную ранее таблицу в терминале сбора данных. + РезультатВыполнения = Ждать ОчиститьТаблицу(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + // ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ПРИНТЕРАМИ ЭТИКЕТОК + ИначеЕсли Команда = "InitializePrinter" Тогда + РезультатВыполнения = Ждать ИнициализацияПринтера(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "PrintLabels" Тогда + РезультатВыполнения = Ждать ПечатьЭтикеток(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + // ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩИЕ ДЛЯ РАБОТЫ С RFID + ИначеЕсли Команда = "OpenSessionRFID" Тогда // Открыть сессию RFID считывателя + РезультатВыполнения = Ждать ОткрытьСессиюRFID(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "CloseSessionRFID" Тогда // Открыть сессию RFID считывателя + РезультатВыполнения = Ждать ЗакрытьСессиюRFID(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + ИначеЕсли Команда = "SaveDataTagRFID" Тогда // Записать данные в метку RFID + РезультатВыполнения = Ждать ЗаписатьДанныеВМеткуRFID(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + Иначе + ОписаниеОшибки = НСтр("ru='Недопустимая команда.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Возвращает объект драйвера +// +Асинх Функция ОбъектДрайвераАсинх(ПараметрыПодключения) Экспорт + + Если ПараметрыПодключения.ИдентификаторОбъекта = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ОбъектДрайвера = МенеджерОборудованияКлиент.ОбъектДрайвераИзКэша(ПараметрыПодключения.ИдентификаторОбъекта); + Если ОбъектДрайвера <> Неопределено Тогда + Возврат ОбъектДрайвера; + КонецЕсли; + + ТекстСообщения = СтрШаблон( + НСтр("ru = 'Для продолжения работы требуется установка внешней компоненты ""%1"".'"), + ПараметрыПодключения.Наименование); + + Если ПараметрыПодключения.ПодключениеИзМакета Тогда + Если Не ПараметрыПодключения.МакетДоступен Тогда + Возврат Неопределено; + КонецЕсли; + Параметры = ВнешниеКомпонентыБПОКлиент.ПараметрыПодключения(); + Параметры.ТекстПояснения = ТекстСообщения; + Параметры.Изолированно = МенеджерОборудованияКлиентПовтИсп.ИзолированноеПодключенияВнешнихКомпонентНаКлиенте(); + Параметры.Кэшировать = Ложь; + РезультатПодключения = Ждать ВнешниеКомпонентыБПОКлиент.ПодключитьКомпонентуИзМакетаАсинх(ПараметрыПодключения.ИдентификаторОбъекта, ПараметрыПодключения.ИмяМакетаДрайвера, Параметры); + ИначеЕсли ПараметрыПодключения.ПодключениеЛокальноПоИдентификатору Тогда + РезультатПодключения = Ждать ВнешниеКомпонентыБПОКлиент.ПодключитьКомпонентуИзРеестраWindowsАсинх(ПараметрыПодключения.ИдентификаторОбъекта); + Иначе + Параметры = ВнешниеКомпонентыБПОКлиент.ПараметрыПодключения(); + Параметры.ТекстПояснения = ТекстСообщения; + Параметры.Изолированно = МенеджерОборудованияКлиентПовтИсп.ИзолированноеПодключенияВнешнихКомпонентНаКлиенте(); + Параметры.Кэшировать = Ложь; + Параметры.ПредложитьЗагрузить = Истина; + Параметры.ПредложитьУстановить = Истина; + Параметры.ОбновлятьАвтоматически = Ложь; + РезультатПодключения = Ждать ВнешниеКомпонентыБПОКлиент.ПодключитьКомпонентуАсинх(ПараметрыПодключения.ИдентификаторОбъекта, ПараметрыПодключения.ВерсияДрайвера, Параметры); + КонецЕсли; + + Если РезультатПодключения.Подключено Тогда + ОбъектДрайвера = РезультатПодключения.ПодключаемыйМодуль; + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + ПодключаемоеОборудование.ДрайверыОборудования.Вставить(ПараметрыПодключения.ИдентификаторОбъекта, ОбъектДрайвера); + КонецЕсли; + + Возврат ОбъектДрайвера; + +КонецФункции + +// Возвращает описание драйвера +// +Асинх Функция ОписаниеДрайвераАсинх(ПараметрыПодключения) Экспорт + + ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения); + Если ОбъектДрайвера = Неопределено Тогда + Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения); + Иначе + + Если Не ПустаяСтрока(ПараметрыПодключения.ШаблонЛокализации) Тогда + Попытка + ТекущийЯзык = ТекущийЯзык(); + КодЯзыкаПользователя = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка); + РезультатВызова = Ждать ОбъектДрайвера.УстановитьЛокализациюАсинх(КодЯзыкаПользователя, ПараметрыПодключения.ШаблонЛокализации); + Если НЕ РезультатВызова.Значение Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка локализации драйвера.'")); + КонецЕсли + Исключение + КонецПопытки; + КонецЕсли; + + ОписаниеДрайвера = МенеджерОборудованияКлиентСервер.ПараметрыОписанияДрайвера(); + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОписаниеАсинх(ОписаниеДрайвера.ОписаниеДрайвераXML); + Исключение + РевизияИнтерфейса = 2005; + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОписаниеАсинх(ОписаниеДрайвера.НаименованиеДрайвера, ОписаниеДрайвера.ОписаниеДрайвера, ОписаниеДрайвера.ТипОборудования, + РевизияИнтерфейса, ОписаниеДрайвера.ИнтеграционныйКомпонент, ОписаниеДрайвера.ОсновнойДрайверУстановлен, ОписаниеДрайвера.URLЗагрузкиДрайвера); + КонецПопытки; + + ПараметрыВызова = РезультатВызова.Параметры; + Если ПараметрыВызова.Количество() > 1 И Не СтрНачинаетсяС(ПараметрыВызова[0], "= 4000 И ОписаниеДрайвера.ПоддерживаетсяЛокализация Тогда + ШаблонЛокализации = ""; + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьШаблонЛокализацииАсинх(ШаблонЛокализации); + Если РезультатВызова.Значение Тогда + ПараметрыВызова = РезультатВызова.Параметры; + ОписаниеДрайвера.ШаблонЛокализации = ПараметрыВызова[0]; + КонецЕсли + Исключение + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка получения шаблон локализации драйвера.'")); + КонецПопытки; + КонецЕсли; + + // Устанавливаем тип оборудования. + Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения, Истина, Ложь); + // Получаем параметры драйвера. + Результат = Ждать ПараметрыДрайвераАсинх(ОбъектДрайвера, ОписаниеДрайвера, ПараметрыПодключения); + + РезультатВыполнения = РезультатОперацииНаОборудовании(Результат); + РезультатВыполнения.Вставить("ОписаниеДрайвера", ОписаниеДрайвера); + Возврат РезультатВыполнения; + + КонецЕсли; + +КонецФункции + +// Возвращает параметры драйвера +// +Асинх Функция ПараметрыДрайвераАсинх(ОбъектДрайвера, ОписаниеДрайвера, ПараметрыПодключения) Экспорт + + ПараметрыДрайвера = ""; + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыАсинх(ПараметрыДрайвера); + Исключение + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка получения параметров драйвера.'") + Символы.ПС + ОписаниеОшибки); + Возврат Ложь; + КонецПопытки; + + ПараметрыВызова = РезультатВызова.Параметры; + ОписаниеДрайвера.ПараметрыДрайвера = ПараметрыВызова[0]; + + ДополнительныеДействия = ""; + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьДополнительныеДействияАсинх(ДополнительныеДействия); + Исключение + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка получения описания драйвера.'")); + Возврат Ложь; + КонецПопытки; + + ПараметрыВызова = РезультатВызова.Параметры; + ОписаниеДрайвера.ДополнительныеДействия = ПараметрыВызова[0]; + ОписаниеДрайвера.Установлен = Истина; + + Если ПараметрыПодключения.Свойство("КоличествоПодключенных") Тогда + ОписаниеДрайвера.Вставить("КоличествоПодключенных", ПараметрыПодключения.КоличествоПодключенных); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Устанавливает параметры драйвера +// +Асинх Функция УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения, УстановитьТипОборудования = Истина, УстановитьПараметры = Истина) Экспорт + + Если УстановитьТипОборудования И ПараметрыПодключения.Свойство("ТипОборудованияИмя") Тогда + РезультатВызова = Ждать ОбъектДрайвера.УстановитьПараметрАсинх("EquipmentType", ПараметрыПодключения.ТипОборудованияИмя); // ТипОборудования + КонецЕсли; + + Если УстановитьПараметры И ПараметрыПодключения.Параметры <> Неопределено Тогда + Для Каждого Параметр Из ПараметрыПодключения.Параметры Цикл + Если Лев(Параметр.Ключ, 2) = "P_" Тогда + ЗначениеПараметра = Параметр.Значение; + ИмяПараметра = Сред(Параметр.Ключ, 3); + РезультатВызова = Ждать ОбъектДрайвера.УстановитьПараметрАсинх(ИмяПараметра, ЗначениеПараметра) + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Функция начинает подключение устройства. +// +Асинх Функция ПодключитьУстройствоАсинх(ПараметрыПодключения) Экспорт + + ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения); + Если ОбъектДрайвера = Неопределено Тогда + Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения); + КонецЕсли; + + ПараметрыПодключения.ОбъектДрайвера = ОбъектДрайвера; + + Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения, Истина, Ложь); + + ОписаниеДрайвера = МенеджерОборудованияКлиентСервер.ПараметрыОписанияДрайвера(); + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьРевизиюИнтерфейсаАсинх(); + ПараметрыПодключения.РевизияИнтерфейса = РезультатВызова.Значение; + Исключение + // Версия требований 2.5 и ниже + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОписаниеАсинх(ОписаниеДрайвера.НаименованиеДрайвера, ОписаниеДрайвера.ОписаниеДрайвера, ОписаниеДрайвера.ТипОборудования, + ОписаниеДрайвера.РевизияИнтерфейса, ОписаниеДрайвера.ИнтеграционныйКомпонент, ОписаниеДрайвера.ОсновнойДрайверУстановлен, ОписаниеДрайвера.URLЗагрузкиДрайвера); + ПараметрыПодключения.РевизияИнтерфейса = РезультатВызова.Параметры[3]; + КонецПопытки; + + Если ПустаяСтрока(ПараметрыПодключения.РевизияИнтерфейса) Или ПараметрыПодключения.РевизияИнтерфейса = 0 Тогда + ОписаниеОшибки = НСтр("ru='Ревизия интерфейса драйвера не определена.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Если ПараметрыПодключения.РевизияИнтерфейса >= 4000 Тогда + Если Не ПустаяСтрока(ПараметрыПодключения.ШаблонЛокализации) Тогда + Попытка + ТекущийЯзык = ТекущийЯзык(); + КодЯзыка = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка); + РезультатВызова = Ждать ОбъектДрайвера.УстановитьЛокализациюАсинх(КодЯзыка, ПараметрыПодключения.ШаблонЛокализации); + Если НЕ РезультатВызова.Значение Тогда + ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка локализации драйвера.'")); + КонецЕсли + Исключение + КонецПопытки; + КонецЕсли; + КонецЕсли; + + Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения, Ложь); + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПодключитьАсинх(ПараметрыПодключения.ИДУстройства); + ПараметрыПодключения.ИДУстройства = РезультатВызова.Параметры[0]; + Результат = РезультатВызова.Значение; + Исключение + Возврат ОшибкаВызоваДрайвера("Подключить"); + КонецПопытки; + + Если НЕ Результат Тогда + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + Возврат РезультатВыполнения; + Иначе + + Если ПараметрыПодключения.ТипыОборудования.ККТ + Или ПараметрыПодключения.ТипыОборудования.ПринтерЧеков + Или ПараметрыПодключения.ТипыОборудования.ФискальныйРегистратор Тогда + Результат = Ждать ШиринаСтроки(ОбъектДрайвера, ПараметрыПодключения, Неопределено) + КонецЕсли; + + Если ПараметрыПодключения.ТипыОборудования.ЭквайринговыйТерминал Тогда + Результат = Ждать ПараметрыТерминала(ОбъектДрайвера, ПараметрыПодключения, Неопределено) + КонецЕсли; + + Если ПараметрыПодключения.ТипыОборудования.ДисплейПокупателя Тогда + Результат = Ждать ПараметрыВывода(ОбъектДрайвера, ПараметрыПодключения, Неопределено) + КонецЕсли; + + Если ПараметрыПодключения.ТипыОборудования.СканерШтрихкода Тогда + ПараметрыПодключения.ИменаСобытий.Добавить("Штрихкод"); //@NON-NLS-1 @NON-NLS-2 + ПараметрыПодключения.ИменаСобытий.Добавить("ШтрихкодBase64"); //@NON-NLS-1 @NON-NLS-2 + ПараметрыПодключения.ИменаСобытий.Добавить("Barcode"); + ПараметрыПодключения.ИменаСобытий.Добавить("BarcodeBase64"); + КонецЕсли; + + Если ПараметрыПодключения.ТипыОборудования.СканерШтрихкода Тогда + ПараметрыПодключения.ИменаСобытий.Добавить("НажатиеКлавиши"); //@NON-NLS-1 @NON-NLS-2 + ПараметрыПодключения.ИменаСобытий.Добавить("KeyPress"); + КонецЕсли; + + Если ПараметрыПодключения.ТипыОборудования.СчитывательМагнитныхКарт Тогда + ПараметрыПодключения.ИменаСобытий.Добавить("ДанныеКарты"); //@NON-NLS-1 @NON-NLS-2 + ПараметрыПодключения.ИменаСобытий.Добавить("ДанныеКартыBase64"); //@NON-NLS-1 @NON-NLS-2 + ПараметрыПодключения.ИменаСобытий.Добавить("TracksData"); + ПараметрыПодключения.ИменаСобытий.Добавить("TracksDataBase64"); + КонецЕсли; + + Если ПараметрыПодключения.ТипыОборудования.СчитывательRFID Тогда + ПараметрыПодключения.ИменаСобытий.Добавить("RFID"); + КонецЕсли; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Возврат РезультатВыполнения; + КонецЕсли; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Возврат РезультатВыполнения; + +КонецФункции + +// Функция начинает отключение устройства. +// +Асинх Функция ОтключитьУстройствоАсинх(ПараметрыПодключения) Экспорт + + ОбъектДрайвера = ПараметрыПодключения.ОбъектДрайвера; + Если ОбъектДрайвера = Неопределено Тогда + Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения); + КонецЕсли; + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ОтключитьАсинх(ПараметрыПодключения.ИДУстройства); + РезультатВыполнения = РезультатОперацииНаОборудовании(РезультатВызова.Значение); + Исключение + Возврат ОшибкаВызоваДрайвера("Отключить", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Выполняет тест устройства +// +Асинх Функция ТестУстройстваАсинх(ПараметрыПодключения) Экспорт + + ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения); + Если ОбъектДрайвера = Неопределено Тогда + Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения); + КонецЕсли; + + Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения); + Если Результат Тогда + РезультатТеста = ""; + АктивированДемоРежим = ""; + + РезультатВызова = Ждать ОбъектДрайвера.ТестУстройстваАсинх(РезультатТеста, АктивированДемоРежим); + Результат = РезультатВызова.Значение; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Результат); + РезультатВыполнения.Вставить("РезультатВыполнения" , РезультатВызова.Параметры[0]); + РезультатВыполнения.Вставить("АктивированДемоРежим", РезультатВызова.Параметры[1]); + Иначе + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Выполняет дополнительное действие +// +Асинх Функция ВыполнитьДополнительноеДействиеАсинх(ПараметрыПодключения, ПараметрыВыполнения) Экспорт + + ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения); + Если ОбъектДрайвера = Неопределено Тогда + Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения); + КонецЕсли; + + Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения); + Если Результат Тогда + + Попытка + ИмяДействия = ПараметрыВыполнения.ИмяДействия; + РезультатВызова = Ждать ОбъектДрайвера.ВыполнитьДополнительноеДействиеАсинх(ИмяДействия); + Результат = РезультатВызова.Значение; + Исключение + ОписаниеОшибки = НСтр("ru='Ошибка вызова метода <ВыполнитьДополнительноеДействие>.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецПопытки; + + Если Результат Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + ОписаниеОшибки = ""; + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОшибкуАсинх(ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, РезультатВызова.Параметры[0]); + КонецЕсли; + + Иначе + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +#Область РежимСовместимости + +// Начинает выполнение команды, обрабатывает и перенаправляет на исполнение команду к драйверу. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения. +// ПараметрыПодключения - Структура +// Команда - Строка - команда для выполнения +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Процедура НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ПараметрыПодключения, Команда, ДанныеОперации) Экспорт + + Результат = Ждать ВыполнениеКоманды(ПараметрыПодключения, Команда, ДанныеОперации); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Начинает получение объекта драйвера +Асинх Процедура НачатьПолучениеОбъектаДрайвера(ОповещениеПриЗавершении, ПараметрыПодключения) Экспорт + + Результат = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Начинает получение описания драйвера +Асинх Процедура НачатьПолучениеОписанияДрайвера(ОповещениеПриЗавершении, ПараметрыПодключения) Экспорт + + Результат = Ждать ОписаниеДрайвераАсинх(ПараметрыПодключения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Процедура начинает подключение устройства. +// +Асинх Процедура НачатьПодключениеУстройства(ОповещениеПриЗавершении, ПараметрыПодключения) Экспорт + + Результат = Ждать ПодключитьУстройствоАсинх(ПараметрыПодключения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Процедура начинает отключение устройства. +// +Асинх Процедура НачатьОтключениеУстройства(ОповещениеПриЗавершении, ПараметрыПодключения) Экспорт + + Результат = Ждать ОтключитьУстройствоАсинх(ПараметрыПодключения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Процедура начинает тест устройства. +// +Асинх Процедура НачатьТестУстройства(ОповещениеПриЗавершении, ПараметрыПодключения, ПараметрыВыполнения) Экспорт + + Результат = Ждать ТестУстройстваАсинх(ПараметрыПодключения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +// Выполнение дополнительного действия для устройства. +// +Асинх Процедура НачатьВыполнитьДополнительноеДействие(ОповещениеПриЗавершении, ПараметрыПодключения, ПараметрыВыполнения) Экспорт + + Результат = Ждать ВыполнитьДополнительноеДействиеАсинх(ПараметрыПодключения, ПараметрыВыполнения); + ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработатьСобытие + +Функция ОбработатьСобытиеШтрихкод(Данные) Экспорт + + ИмяСобытия = "ScanData"; + Штрихкод = СокрЛП(Данные); + Если МенеджерОборудованияКлиент.СобытиеУстройствВводаНовыйФормат() Тогда + ДанныеСобытия = Новый Структура("Штрихкод,Данные", Штрихкод, Данные); + Иначе + ДанныеСобытия = Новый Массив(); + ДанныеСобытия.Добавить(Штрихкод); + МассивВторогоПорядка = Новый Массив(); + МассивВторогоПорядка.Добавить(Данные); + МассивВторогоПорядка.Добавить(Штрихкод); + МассивВторогоПорядка.Добавить(0); + ДанныеСобытия.Добавить(МассивВторогоПорядка); + КонецЕсли; + + РезультатОбработки = Новый Структура(); + РезультатОбработки.Вставить("Результат", Истина); + РезультатОбработки.Вставить("Событие" , ИмяСобытия); + РезультатОбработки.Вставить("Данные" , ДанныеСобытия); + Возврат РезультатОбработки; + +КонецФункции + +Функция ОбработатьСобытиеШтрихкод64(Данные) Экспорт + + ИмяСобытия = "ScanDataBase64"; + Штрихкод = СокрЛП(Данные); + Если МенеджерОборудованияКлиент.СобытиеУстройствВводаНовыйФормат() Тогда + ДанныеСобытия = Новый Структура("Штрихкод,Данные", Штрихкод, Данные); + Иначе + ДанныеСобытия = Новый Массив(); + ДанныеСобытия.Добавить(Штрихкод); + МассивВторогоПорядка = Новый Массив(); + МассивВторогоПорядка.Добавить(Данные); + МассивВторогоПорядка.Добавить(Штрихкод); + МассивВторогоПорядка.Добавить(0); + ДанныеСобытия.Добавить(МассивВторогоПорядка); + КонецЕсли; + + РезультатОбработки = Новый Структура(); + РезультатОбработки.Вставить("Результат", Истина); + РезультатОбработки.Вставить("Событие" , ИмяСобытия); + РезультатОбработки.Вставить("Данные" , ДанныеСобытия); + Возврат РезультатОбработки; + +КонецФункции + +Функция ОбработатьНажатиеКлавиши(Данные) Экспорт + + ИмяСобытия = "KeyPress"; + Штрихкод = СокрЛП(Данные); + ДанныеСобытия = Новый Структура("НажатаяКлавиша,Данные", СокрЛП(Данные), Данные); + + РезультатОбработки = Новый Структура(); + РезультатОбработки.Вставить("Результат", Истина); + РезультатОбработки.Вставить("Событие" , ИмяСобытия); + РезультатОбработки.Вставить("Данные" , ДанныеСобытия); + Возврат РезультатОбработки; + +КонецФункции + +Функция ОбработатьСобытиеДанныеКарты(ПараметрыПодключения, Данные) Экспорт + + КодКарты = Данные; + ПозицияПрефикса = 0; + ПозицияСуффикса = 0; + времКодКарты = ""; + ДанныеКарты = ""; + ПозицияДляЧтения = 1; + Параметры = ПараметрыПодключения.Параметры; + + ДанныеДорожек = Новый Массив(); + Если Параметры.Свойство("ПараметрыДорожек") И Параметры.ПараметрыДорожек <> Неопределено Тогда + Для НомерДорожки = 1 По 3 Цикл + ДанныеДорожек.Добавить(""); + ТекущаяДорожка = Параметры.ПараметрыДорожек[НомерДорожки - 1]; + Если ТекущаяДорожка.Использовать Тогда + ПрефиксДрайвера = Символ(ТекущаяДорожка.Префикс); + СуффиксДрайвера = Символ(ТекущаяДорожка.Суффикс); + Если ПозицияДляЧтения < СтрДлина(КодКарты) Тогда + ДанныеКарты = Сред(КодКарты, ПозицияДляЧтения); + ПозицияПрефикса = Найти(ДанныеКарты, ПрефиксДрайвера); + ПозицияСуффикса = Найти(ДанныеКарты, СуффиксДрайвера); + времПозицияПрефикса = ?(ПозицияПрефикса = 0, 1, ПозицияПрефикса + СтрДлина(ПрефиксДрайвера)); + времДлинаДоСуффикса = ?(ПозицияСуффикса = 0, СтрДлина(ДанныеКарты) + 1 - времПозицияПрефикса, ПозицияСуффикса - времПозицияПрефикса); + времКодКарты = времКодКарты + Сред(ДанныеКарты, времПозицияПрефикса, времДлинаДоСуффикса); + ДанныеДорожек[НомерДорожки - 1] = Сред(ДанныеКарты, времПозицияПрефикса, времДлинаДоСуффикса); + ПозицияДляЧтения = ПозицияДляЧтения + ?(ПозицияСуффикса = 0, СтрДлина(ДанныеКарты), ПозицияСуффикса + СтрДлина(СуффиксДрайвера) - 1); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ИмяСобытия = "TracksData"; + КодКарты = времКодКарты; + Если Параметры.ПараметрыДорожек <> Неопределено + И ОбщегоНазначенияБПОКлиент.ИспользуетсяУстройстваВвода() Тогда + + МодульОборудованиеУстройстваВводаКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеУстройстваВводаКлиент"); + СписокШаблонов = МодульОборудованиеУстройстваВводаКлиент.РасшифроватьКодМагнитнойКарты(ДанныеДорожек, Параметры.ПараметрыДорожек); + + Иначе + СписокШаблонов = Неопределено; + КонецЕсли; + + Если МенеджерОборудованияКлиент.СобытиеУстройствВводаНовыйФормат() Тогда + ДанныеСобытия = Новый Структура(); + ДанныеСобытия.Вставить("КодКарты" , КодКарты); + ДанныеСобытия.Вставить("Данные" , Данные); + ДанныеСобытия.Вставить("ДанныеДорожек" , ДанныеДорожек); + ДанныеСобытия.Вставить("СписокШаблонов", СписокШаблонов); + Иначе + ДанныеСобытия = Новый Массив(); + ДанныеСобытия.Добавить(КодКарты); + МассивВторогоПорядка = Новый Массив(); + МассивВторогоПорядка.Добавить(Сред(Данные,2)); + МассивВторогоПорядка.Добавить(ДанныеДорожек); + МассивВторогоПорядка.Добавить(0); + МассивВторогоПорядка.Добавить(СписокШаблонов); + ДанныеСобытия.Добавить(МассивВторогоПорядка); + КонецЕсли; + + РезультатОбработки = Новый Структура(); + РезультатОбработки.Вставить("Результат", Истина); + РезультатОбработки.Вставить("Событие" , ИмяСобытия); + РезультатОбработки.Вставить("Данные" , ДанныеСобытия); + Возврат РезультатОбработки; + +КонецФункции + +Асинх Функция ОбработатьСобытиеRFID(ПараметрыПодключения, Событие, Данные) Экспорт + + Результат = Ложь; + ИмяСобытия = Событие; + + Если ОбщегоНазначенияБПОКлиент.ИспользуетсяСчитывательRFID() Тогда + ДанныеОперации = Новый Структура("ИДПакета", Данные); + РезультатВыполнения = Ждать ПолучитьДанныеМетокRFID(ПараметрыПодключения.ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + Если РезультатВыполнения.Результат Тогда + ДанныеСобытия = МенеджерОборудованияВызовСервера.МеткиRFID(РезультатВыполнения.ТаблицаМеток); + Результат = Истина; + КонецЕсли; + КонецЕсли; + + РезультатОбработки = Новый Структура(); + РезультатОбработки.Вставить("Результат", Истина); + РезультатОбработки.Вставить("Событие" , ИмяСобытия); + РезультатОбработки.Вставить("Данные" , ДанныеСобытия); + Возврат РезультатОбработки; + +КонецФункции + +// Функция осуществляет обработку внешних событий подключаемого оборудования. +// +// Возвращаемое значение: +// Структура. +// +Функция ОбработатьСобытие(ОбъектДрайвера, ПараметрыПодключения, Событие, Данные) Экспорт + + Если Событие = "Штрихкод" Или Событие = "Barcode" Тогда + РезультатОбработки = ОбработатьСобытиеШтрихкод(Данные); + ИначеЕсли Событие = "ШтрихкодBase64" Или Событие = "BarcodeBase64" Тогда + РезультатОбработки = ОбработатьСобытиеШтрихкод64(Данные); + ИначеЕсли Событие = "ДанныеКарты" Или Событие = "TracksData" Тогда + РезультатОбработки = ОбработатьСобытиеДанныеКарты(ПараметрыПодключения, Данные); + ИначеЕсли Событие = "НажатиеКлавиши" Или Событие = "KeyPress" Тогда + РезультатОбработки = ОбработатьНажатиеКлавиши(Данные); + ИначеЕсли Событие = "RFID" Тогда + РезультатОбработки = ОбработатьСобытиеRFID(ПараметрыПодключения, Событие, Данные); + Иначе + РезультатОбработки = Новый Структура(); + РезультатОбработки.Вставить("Результат", Ложь); + РезультатОбработки.Вставить("Событие" , ""); + РезультатОбработки.Вставить("Данные" , Данные); + Возврат РезультатОбработки; + КонецЕсли; + + Возврат РезультатОбработки; + +КонецФункции + +#КонецОбласти + +#Область ОбщиеСинхронныеМетодыОбработчиков + +// Конструктор результата выполнения операции на оборудовании +// +// Параметры: +// Результат - Булево +// ОписаниеОшибки - Строка +// +// Возвращаемое значение: +// Структура: +// * Результат - Булево +// * ОписаниеОшибки - Строка +// * ОшибкаЗагрузки - Булево +// +Функция РезультатОперацииНаОборудовании(Результат = Ложь, ОписаниеОшибки = Неопределено) Экспорт + + РезультатВыполнения = Новый Структура(); + РезультатВыполнения.Вставить("Результат" , Результат); + РезультатВыполнения.Вставить("ОписаниеОшибки", ОписаниеОшибки); + РезультатВыполнения.Вставить("ОшибкаЗагрузки", Ложь); + Возврат РезультатВыполнения; + +КонецФункции + +Функция ОшибкаЗагрузкиДрайвера(ПараметрыПодключения, ОписаниеОшибки = "") Экспорт + + Текст = НСтр("ru='%1: Не удалось загрузить драйвер устройства. + |Проверьте, что драйвер корректно установлен и зарегистрирован в системе. + |%2'"); + Текст = СтрШаблон(Текст, ПараметрыПодключения.Наименование, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, Текст); + РезультатВыполнения.ОшибкаЗагрузки = Истина; + Возврат РезультатВыполнения; + +КонецФункции + +Функция ОшибкаВызоваДрайвера(МетодДрайвера = Неопределено, ОписаниеОшибки = Неопределено) Экспорт + + Если НЕ ПустаяСтрока(МетодДрайвера) Тогда + СообщениеОбОшибке = НСтр("ru='Ошибка вызова метода драйвера <%1>.'"); + СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, МетодДрайвера); + Иначе + СообщениеОбОшибке = НСтр("ru='Данный тип оборудования не поддерживает данную команду.'"); + КонецЕсли; + + Если НЕ ПустаяСтрока(ОписаниеОшибки) Тогда + СообщениеОбОшибке = СообщениеОбОшибке + Символы.ПС + ОписаниеОшибки; + КонецЕсли; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, СообщениеОбОшибке); + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Асинх Функция ПолучитьОшибкуДрайвера(ОбъектДрайвера) + + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОшибкуАсинх(""); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, РезультатВызова.Параметры[0]); + Возврат РезультатВыполнения; + +КонецФункции + +#Область ФискальныеУстройства + +// Получает ширину строки в символах. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ШиринаСтроки(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.Свойство("ШиринаСтроки") И ПараметрыПодключения.ШиринаСтроки > 0 Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ШиринаСтроки", ПараметрыПодключения.ШиринаСтроки); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьШиринуСтрокиАсинх(ПараметрыПодключения.ИДУстройства, 0); + ПараметрыПодключения.ШиринаСтроки = РезультатВызова.Параметры[1]; + Исключение + Возврат ОшибкаВызоваДрайвера("ПолучитьШиринуСтроки", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ШиринаСтроки", РезультатВызова.Параметры[1]); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет фискализацию чека. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ФискализацияЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + Если ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + Если ПараметрыПодключения.РевизияИнтерфейса >= 3004 Тогда + ТекущийСтатус = МенеджерОборудованияКлиент.ПроверкаКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + // Если есть текущая проверка КМ + Если НЕ ПустаяСтрока(ТекущийСтатус.ИдентификаторЗапроса) Тогда + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПодтвердитьКМАсинх(ПараметрыПодключения.ИДУстройства, ТекущийСтатус.ИдентификаторЗапроса, 0); + МенеджерОборудованияКлиент.УстановитьПроверкуКодаМаркировки(ПараметрыПодключения.ИДУстройства); + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПодтвердитьКМ", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + КонецЕсли; + КонецЕсли; + + Попытка + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + Если ДанныеОперации.ЕстьПерсональныеДанные Тогда + ДанныеЧекаXML = ДанныеОперации.ДанныеЧекаXMLПерсональныеДанные + Иначе + ДанныеЧекаXML = ДанныеОперации.ДанныеЧекаXML; + КонецЕсли; + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML); + ПараметрыВызова = РезультатВызова.Параметры; + ДанныеОперации.РезультатОперацииXML = ПараметрыВызова[3]; + Иначе // Версия стандарта 2.2 (ОФД 1.05) + РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, + ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ, ДанныеОперации.ФискальныйПризнак, ДанныеОперации.АдресСайтаПроверки); + ПараметрыВызова = РезультатВызова.Параметры; + ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[3]; + ДанныеОперации.НомерСменыККТ = ПараметрыВызова[4]; + ДанныеОперации.ФискальныйПризнак = ПараметрыВызова[5]; + ДанныеОперации.АдресСайтаПроверки = ПараметрыВызова[6]; + КонецЕсли; + ДанныеОперации.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса(); + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("СформироватьЧек", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + МенеджерОборудованияКлиент.УстановитьСессиюПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + Если ДанныеОперации.ТестовыеЧеки <> Неопределено И ДанныеОперации.ТестовыеЧеки.Количество() > 0 Тогда + РезультатПечатиНефискальныхДокументов = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + РезультатВыполнения.Вставить("РезультатПечатиНефискальныхДокументов", РезультатПечатиНефискальныхДокументов); + КонецЕсли; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Иначе + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет печать чека коррекции. +// +Асинх Функция ПечатьЧекаКоррекции(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + + Если ДанныеОперации.ЧекКоррекцииНаККТ Тогда + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + Результат = ОбъектДрайвера.СформироватьЧекКоррекции(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML); + Иначе + Результат = ОбъектДрайвера.СформироватьЧекКоррекции(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ, + ДанныеОперации.ФискальныйПризнак, ДанныеОперации.АдресСайтаПроверки); + ДанныеОперации.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса(); + КонецЕсли; + Иначе + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 + Результат = ОбъектДрайвера.СформироватьЧек(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, + ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML); + Иначе + Результат = ОбъектДрайвера.СформироватьЧек(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, + ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ, ДанныеОперации.ФискальныйПризнак, ДанныеОперации.АдресСайтаПроверки); + ДанныеОперации.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса(); + КонецЕсли; + КонецЕсли; + + Если Результат И ДанныеОперации.СформироватьЧекКоррекцииСторно Тогда + ПараметрыФискализацииСторно = ДанныеОперации.ЧекКоррекцииСторно; + Если ДанныеОперации.ЧекКоррекцииНаККТ Тогда + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + Результат = ОбъектДрайвера.СформироватьЧекКоррекции(ПараметрыПодключения.ИДУстройства, ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.РезультатОперацииXML); + Иначе + Результат = ОбъектДрайвера.СформироватьЧекКоррекции(ПараметрыПодключения.ИДУстройства, ПараметрыФискализацииСторно.Электронно, + ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.НомерЧекаККТ, ПараметрыФискализацииСторно.НомерСменыККТ, ПараметрыФискализацииСторно.ФискальныйПризнак, ПараметрыФискализацииСторно.АдресСайтаПроверки); + ПараметрыФискализацииСторно.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса(); + КонецЕсли; + Иначе + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 + Результат = ОбъектДрайвера.СформироватьЧек(ПараметрыПодключения.ИДУстройства, ПараметрыФискализацииСторно.Электронно, + ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.РезультатОперацииXML); + Иначе + Результат = ОбъектДрайвера.СформироватьЧек(ПараметрыПодключения.ИДУстройства, ПараметрыФискализацииСторно.Электронно, + ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.НомерЧекаККТ, ПараметрыФискализацииСторно.НомерСменыККТ, ПараметрыФискализацииСторно.ФискальныйПризнак, ПараметрыФискализацииСторно.АдресСайтаПроверки); + ПараметрыФискализацииСторно.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Результат Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьЧекВнесенияВыемки", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет печать текста. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Попытка + Для Каждого ТекстПечати Из ДанныеОперации.ТестовыеЧеки Цикл + РезультатВызова = Ждать ОбъектДрайвера.НапечататьТекстовыйДокументАсинх(ПараметрыПодключения.ИДУстройства, ТекстПечати); + Если НЕ РезультатВызова.Значение Тогда + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + Возврат РезультатВыполнения; + КонецЕсли; + КонецЦикла; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьТекстовыйДокумент", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет инкассацию. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция Инкассация(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + СуммаЧека = ?(ДанныеОперации.ТипИнкассации = 1, ДанныеОперации.СуммаЧека, - ДанныеОперации.СуммаЧека); + Попытка + РезультатВызова = Ждать ОбъектДрайвера.НапечататьЧекВнесенияВыемкиАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ДанныеЧекаXML, СуммаЧека); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + ДанныеОперации.СтатусСмены = 1; // Открыта + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьЧекВнесенияВыемки", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Иначе + РезультатВыполнения = ОшибкаВызоваДрайвера(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет закрытие смены. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ЗакрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь); + Попытка + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + РезультатВызова = Ждать ОбъектДрайвера.ЗакрытьСменуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML); + Иначе + РезультатВызова = Ждать ОбъектДрайвера.ЗакрытьСменуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML, + ДанныеОперации.НомерСменыККТ, ДанныеОперации.НомерЧекаККТ); + КонецЕсли; + Исключение + Возврат ОшибкаВызоваДрайвера("ЗакрытьСмену", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())) + КонецПопытки; + + Если РезультатВызова.Значение Тогда + ПараметрыВызова = РезультатВызова.Параметры; + ДанныеОперации.СтатусСмены = 1; // Статус 1 - Закрыта, 2 - Открыта, 3 - Истекла. + ДанныеОперации.РезультатXML = ПараметрыВызова[2]; + Если ПараметрыВызова.Количество() > 3 Тогда + ДанныеОперации.НомерСменыККТ = ПараметрыВызова[3]; + ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[4]; + КонецЕсли; + РезультатВыполнения.Результат = Истина; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + + Иначе + РезультатВыполнения = ОшибкаВызоваДрайвера(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет открытие смены. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ОткрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + ПараметрыККТ = ""; + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыККТАсинх(ПараметрыПодключения.ИДУстройства, ПараметрыККТ); + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыККТ", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + ПараметрыККТ = РезультатВызова.Параметры[1]; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + Возврат РезультатВыполнения; + КонецЕсли; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь); + Попытка + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + РезультатВызова = Ждать ОбъектДрайвера.ОткрытьСменуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML); + Иначе + РезультатВызова = Ждать ОбъектДрайвера.ОткрытьСменуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML, + ДанныеОперации.НомерСменыККТ, ДанныеОперации.НомерЧекаККТ); + КонецЕсли; + Исключение + Возврат ОшибкаВызоваДрайвера("ОткрытьСмену", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())) + КонецПопытки; + + Если РезультатВызова.Значение Тогда + ПараметрыВызова = РезультатВызова.Параметры; + ДанныеОперации.СтатусСмены = 2; // Статус 1 - Закрыта, 2 - Открыта, 3 - Истекла. + ДанныеОперации.Вставить("ПараметрыККТ", ПараметрыККТ); + ДанныеОперации.РезультатXML = ПараметрыВызова[2]; + Если ПараметрыВызова.Количество() > 3 Тогда + ДанныеОперации.НомерСменыККТ = ПараметрыВызова[3]; + ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[4]; + КонецЕсли; + РезультатВыполнения.Результат = Истина; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + + Иначе + РезультатВыполнения = ОшибкаВызоваДрайвера(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет открытие денежного ящика. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ОткрытьДенежныйЯщик(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ОткрытьДенежныйЯщикАсинх(ПараметрыПодключения.ИДУстройства); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ОткрытьДенежныйЯщик", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет формирование отчета о текущем состоянии расчетов. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ОтчетОТекущемСостоянииРасчетов(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + РезультатXML = ""; + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ОтчетОТекущемСостоянииРасчетовАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, РезультатXML); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + ДанныеОперации.РезультатXML = РезультатВызова.Параметры[2]; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ОтчетОТекущемСостоянииРасчетов", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Иначе + РезультатВыполнения = ОшибкаВызоваДрайвера(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет формирование отчет без гашения. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ОтчетБезГашения(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда + + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.НапечататьОтчетБезГашенияАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьОтчетБезГашения", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Иначе + РезультатВыполнения = ОшибкаВызоваДрайвера(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет аннулирование чека. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция АннулированиеЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("НомерСменыККТ" , Неопределено); + РезультатВыполнения.Вставить("НомерЧекаККТ" , Неопределено); + РезультатВыполнения.Вставить("СтатусСмены", 2); + РезультатВыполнения.Вставить("ДатаВремяЧека", ОбщегоНазначенияБПОКлиент.ДатаСеанса()); + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет получение параметров ККТ. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ПараметрыККТ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + + Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыККТАсинх(ПараметрыПодключения.ИДУстройства, ""); + Исключение + Возврат ОшибкаВызоваДрайвера("ПолучитьПараметрыККТ", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ПараметрыККТXML", РезультатВызова.Параметры[1]); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + + Иначе + РезультатВыполнения = ОшибкаВызоваДрайвера(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Осуществляет открытие смены. +// +// Параметры: +// ОбъектДрайвера - ОбъектВнешнейКомпоненты +// ПараметрыПодключения - Структура +// ДанныеОперации - Структура - данные операции для выполнения команды +// +Асинх Функция ТекущееСостояние(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Тогда + Возврат ОшибкаВызоваДрайвера(); + КонецЕсли; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь); + Попытка + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1) + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьТекущееСостояниеАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML); + Иначе + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьТекущееСостояниеАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ, + ДанныеОперации.СтатусСмены, ДанныеОперации.РезультатXML); + КонецЕсли; + Исключение + Возврат ОшибкаВызоваДрайвера("ПолучитьТекущееСостояние", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())) + КонецПопытки; + + Если РезультатВызова.Значение Тогда + ПараметрыВызова = РезультатВызова.Параметры; + РезультатВыполнения.Результат = Истина; + Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда + ДанныеОперации.ПараметрыXML = ПараметрыВызова[1]; + ДанныеОперации.РезультатXML = ПараметрыВызова[2]; + Иначе + ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[1]; + ДанныеОперации.НомерСменыККТ = ПараметрыВызова[2]; + ДанныеОперации.СтатусСмены = ПараметрыВызова[3]; + ДанныеОперации.РезультатXML = ПараметрыВызова[4]; + КонецЕсли; + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + Возврат РезультатВыполнения; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Процедура осуществляет операцию с фискальным накопителем. +// +Асинх Функция ОперацияФискальногоНакопителя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Тогда + Возврат ОшибкаВызоваДрайвера(); + КонецЕсли; + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ОперацияФНАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ТипОперации, ДанныеОперации.ПараметрыXML); + Если НЕ РезультатВызова.Значение Тогда + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + Возврат РезультатВыполнения; + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ОперацияФН", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыККТАсинх(ПараметрыПодключения.ИДУстройства, ""); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + ДанныеОперации.Вставить("ПараметрыККТ", РезультатВызова.Параметры[1]); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыККТ", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция печать копию чека. +// +Асинх Функция НапечататьКопиюЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Тогда + Возврат ОшибкаВызоваДрайвера(); + КонецЕсли; + + Если ДанныеОперации.Свойство("Аппаратно") И ДанныеОперации.Аппаратно Тогда + + НомерЧека = 0; + Если ДанныеОперации <> Неопределено И ДанныеОперации.Свойство("НомерЧека") Тогда + НомерЧека = ДанныеОперации.НомерЧека; + КонецЕсли; + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.НапечататьКопиюЧекаАсинх(ПараметрыПодключения.ИДУстройства, НомерЧека); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("НомерЧека", НомерЧека); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьКопиюЧека", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Иначе + РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция открывает сессию регистрации КМ. +// +Асинх Функция ОткрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + ИдентификаторСессии = МенеджерОборудованияКлиент.СессияПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + Если НЕ ПустаяСтрока(ИдентификаторСессии) Тогда + ОписаниеОшибки = НСтр("ru='Сессия проверки кодов маркировки уже открыта.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ОткрытьСессиюРегистрацииКМАсинх(ПараметрыПодключения.ИДУстройства); + Если РезультатВызова.Значение Тогда + ИдентификаторСессии = Строка(Новый УникальныйИдентификатор); + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ИдентификаторСессии", ИдентификаторСессии); + МенеджерОборудованияКлиент.УстановитьСессиюПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства, ИдентификаторСессии); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ОткрытьСессиюРегистрацииКМ", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция закрывает сессию регистрации КМ. +// +Асинх Функция ЗакрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + ИдентификаторСессии = МенеджерОборудованияКлиент.СессияПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + Если ПустаяСтрока(ИдентификаторСессии) Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ЗакрытьСессиюРегистрацииКМАсинх(ПараметрыПодключения.ИДУстройства); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + МенеджерОборудованияКлиент.УстановитьСессиюПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ЗакрытьСессиюРегистрацииКМ", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Запрос КМ. +// +Асинх Функция ЗапросКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + ТекущийСтатус = МенеджерОборудованияКлиент.ПроверкаКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + ИдентификаторСессии = ТекущийСтатус.ИдентификаторСессии; + ИдентификаторЗапроса = ТекущийСтатус.ИдентификаторЗапроса; + + // Если нет открытой сессии - открываем автоматически. + Если ПустаяСтрока(ИдентификаторСессии) Тогда + ВремРезультатВыполнения = Ждать ОткрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + Если Не ВремРезультатВыполнения.Результат Тогда + Возврат ВремРезультатВыполнения; + Иначе + ИдентификаторСессии = ВремРезультатВыполнения.ИдентификаторСессии; + КонецЕсли; + КонецЕсли; + + // Если есть текущая проверка КМ + Если НЕ ПустаяСтрока(ИдентификаторЗапроса) Тогда + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПодтвердитьКМАсинх(ПараметрыПодключения.ИДУстройства, ИдентификаторЗапроса, 0); + МенеджерОборудованияКлиент.УстановитьПроверкуКодаМаркировки(ПараметрыПодключения.ИДУстройства); + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПодтвердитьКМ", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + КонецЕсли; + + ИдентификаторЗапроса = ДанныеОперации.ИдентификаторЗапроса; + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ЗапросКМАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ""); + Если РезультатВызова.Значение Тогда + ПараметрыВызова = РезультатВызова.Параметры; + РезультатОперацииXML = ПараметрыВызова[2]; + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ИдентификаторСессии" , ИдентификаторСессии); + РезультатВыполнения.Вставить("ИдентификаторЗапроса", ИдентификаторЗапроса); + РезультатВыполнения.Вставить("ЗапросXML" , ДанныеОперации.ПараметрыXML); + РезультатВыполнения.Вставить("РезультатXML", РезультатОперацииXML); + МенеджерОборудованияКлиент.УстановитьРезультатПроверкиКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства, + ИдентификаторСессии, ДанныеОперации, РезультатВыполнения, ИдентификаторЗапроса); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ЗапросКМ", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Подтвердить результаты запроса КМ. +// +Асинх Функция ПодтвердитьКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + ИдентификаторЗапроса = ?(ДанныеОперации.Свойство("ИдентификаторЗапроса"), ДанныеОперации.ИдентификаторЗапроса, ""); + Выбытие = ?(ДанныеОперации.Свойство("Выбытие"), ДанныеОперации.Выбытие, Истина); + + Если ПустаяСтрока(ИдентификаторЗапроса) Тогда + ОписаниеОшибки = НСтр("ru='Идентификатор запроса КМ не указан.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПодтвердитьКМАсинх(ПараметрыПодключения.ИДУстройства, ПараметрыПодключения.ИДУстройства, ?(Выбытие, 0, 1)); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ИдентификаторЗапроса", ИдентификаторЗапроса); + МенеджерОборудованияКлиент.УстановитьПроверкуКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПодтвердитьКМ", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Получить результаты запроса КМ. +// +Асинх Функция РезультатыЗапросаКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда + ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + СтатусЗапроса = 0; + РезультатОперацииXML = ""; + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьРезультатыЗапросаКМАсинх(ПараметрыПодключения.ИДУстройства, РезультатОперацииXML, СтатусЗапроса); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатОперацииXML = РезультатВызова.Параметры[1]; + СтатусЗапроса = РезультатВызова.Параметры[2]; + ДанныеОперации.Вставить("РезультатXML", РезультатОперацииXML); + ДанныеОперации.Вставить("СтатусРезультатаКод", СтатусЗапроса); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьРезультатыЗапросаКМ", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область ЭквайринговыеТерминалы + +// Процедура возвращает параметры терминале. +// +Асинх Функция ПараметрыТерминала(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.РевизияИнтерфейса >= 3004 Тогда + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПараметрыТерминалаАсинх(ПараметрыПодключения.ИДУстройства, ""); + РезультатОперацииXML = РезультатВызова.Параметры[1]; + Если РезультатВызова.Значение Тогда + ПараметрыТерминала = ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML(РезультатОперацииXML); + Если ПараметрыТерминала.Свойство("TerminalID") И Не ПустаяСтрока(ПараметрыТерминала.TerminalID) Тогда + ПараметрыПодключения.ИдентификаторТерминала = ПараметрыТерминала.TerminalID; + КонецЕсли; + ПараметрыПодключения.ПечатьКвитанцийНаТерминале = ПараметрыТерминала.Свойство("PrintSlipOnTerminal") И ВРег(ПараметрыТерминала.PrintSlipOnTerminal) = "TRUE"; + ПараметрыПодключения.КороткиеСлипЧеки = ПараметрыТерминала.Свойство("ShortSlip") И ВРег(ПараметрыТерминала.ShortSlip) = "TRUE"; + ПараметрыПодключения.ВыдачиНаличныхДенежныхСредств = ПараметрыТерминала.Свойство("CashWithdrawal") И ВРег(ПараметрыТерминала.CashWithdrawal) = "TRUE"; + ПараметрыПодключения.ОплатаЭлектроннымиСертификатами = ПараметрыТерминала.Свойство("ElectronicCertificates") И ВРег(ПараметрыТерминала.ElectronicCertificates) = "TRUE"; + ПараметрыПодключения.ЧастичнаяОтмена = ПараметрыТерминала.Свойство("PartialCancellation") И ВРег(ПараметрыТерминала.PartialCancellation) = "TRUE"; + ПараметрыПодключения.ConsumerPresentedQR = ПараметрыТерминала.Свойство("ConsumerPresentedQR") И ВРег(ПараметрыТерминала.ConsumerPresentedQR) = "TRUE"; + ПараметрыПодключения.СписокОперацийПоКартам = ПараметрыТерминала.Свойство(" ListCardTransactions") И ВРег(ПараметрыТерминала.ListCardTransactions) = "TRUE"; + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + КонецЕсли + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПараметрыТерминала", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПечатьКвитанцийНаТерминалеАсинх(); + ПараметрыПодключения.ПечатьКвитанцийНаТерминале = РезультатВызова.Значение; + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПечатьКвитанцийНаТерминале", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция выполняет получение параметров карты. +// +Асинх Функция ПараметрыКарты(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + + Если РевизияИнтерфейса > 3004 Тогда + ОтПоследнейОперации = Ложь; + НомерКарты = ""; + ХешНомерКарты = ""; + РеквизитыКартыQR = ""; + СсылкаНаПлатежныйСчет = ""; + ТипКарты = ""; + СвояКарта = 0; + Попытка + Если РевизияИнтерфейса >= 4000 Тогда + РеквизитыКартыQR = ?(ДанныеОперации.Свойство("РеквизитыКартыQR"), ДанныеОперации.РеквизитыКартыQR, ""); + Если Не ПустаяСтрока(РеквизитыКартыQR) И НЕ ПараметрыПодключения.ConsumerPresentedQR Тогда + ОписаниеОшибки = НСтр("ru='Consumer-Presented QR не поддерживается драйвером.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыКартыАсинх(ПараметрыПодключения.ИДУстройства, РеквизитыКартыQR, ОтПоследнейОперации, НомерКарты, ХешНомерКарты, СсылкаНаПлатежныйСчет, ТипКарты, СвояКарта); + ИначеЕсли РевизияИнтерфейса >= 3007 Тогда + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыКартыАсинх(ПараметрыПодключения.ИДУстройства, ОтПоследнейОперации, НомерКарты, ХешНомерКарты, СсылкаНаПлатежныйСчет, ТипКарты, СвояКарта); + Иначе + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыКартыАсинх(ПараметрыПодключения.ИДУстройства, ОтПоследнейОперации, НомерКарты, ХешНомерКарты, ТипКарты, СвояКарта); + КонецЕсли; + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Если РевизияИнтерфейса >= 4000 Тогда + РеквизитыКартыQR = РезультатВызова.Параметры[1]; + НомерКарты = РезультатВызова.Параметры[3]; + ХешНомерКарты = РезультатВызова.Параметры[4]; + СсылкаНаПлатежныйСчет = РезультатВызова.Параметры[5]; + ТипКарты = РезультатВызова.Параметры[6]; + СвояКарта = РезультатВызова.Параметры[7]; + ИначеЕсли РевизияИнтерфейса >= 3007 Тогда + НомерКарты = РезультатВызова.Параметры[2]; + ХешНомерКарты = РезультатВызова.Параметры[3]; + СсылкаНаПлатежныйСчет = РезультатВызова.Параметры[4]; + ТипКарты = РезультатВызова.Параметры[5]; + СвояКарта = РезультатВызова.Параметры[6]; + Иначе + НомерКарты = РезультатВызова.Параметры[2]; + ХешНомерКарты = РезультатВызова.Параметры[3]; + ТипКарты = РезультатВызова.Параметры[4]; + СвояКарта = РезультатВызова.Параметры[5]; + КонецЕсли; + РезультатВыполнения.Вставить("НомерКарты" , НомерКарты); + РезультатВыполнения.Вставить("ХешНомерКарты", ХешНомерКарты); + РезультатВыполнения.Вставить("СсылкаНаПлатежныйСчет", СсылкаНаПлатежныйСчет); + РезультатВыполнения.Вставить("РеквизитыКартыQR" , РеквизитыКартыQR); + РезультатВыполнения.Вставить("ТипКарты" , ТипКарты); + РезультатВыполнения.Вставить("СвояКарта" , СвояКарта); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыКарты", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Процедура возвращает операции по картам. +// +Асинх Функция ОперацииПоКартам(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.РевизияИнтерфейса < 4000 Тогда + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + Иначе + Если НЕ ПараметрыПодключения.СписокОперацийПоКартам Тогда + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОперацииПоКартамАсинх(ПараметрыПодключения.ИДУстройства, ""); + Если РезультатВызова.Значение Тогда + РезультатОперацииXML = РезультатВызова.Параметры[1]; + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("РезультатОперацииXML", РезультатОперацииXML); + КонецЕсли + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьОперацииПоКартам", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет операцию на ЭТ. +// +Асинх Функция ЭквайринговаяОперация(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда) + + РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса; + + Если НЕ (ДанныеОперации.СуммаОперации > 0) Тогда + ОписаниеОшибки = НСтр("ru='Не корректная сумма операции.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + РеквизитыКартыQR = ?(ДанныеОперации.РеквизитыКартыQR <> Неопределено, ДанныеОперации.РеквизитыКартыQR, ""); + НомерМерчанта = ?(ДанныеОперации.НомерМерчанта <> Неопределено, ДанныеОперации.НомерМерчанта, 0); + НомерКарты = ?(ДанныеОперации.НомерКарты <> Неопределено, ДанныеОперации.НомерКарты, ""); + НомерЧека = ?(ДанныеОперации.НомерЧека <> Неопределено, ДанныеОперации.НомерЧека, ""); + СсылочныйНомер = ?(ДанныеОперации.СсылочныйНомер <> Неопределено, ДанныеОперации.СсылочныйНомер, ""); + КодАвторизации = ?(ДанныеОперации.КодАвторизации <> Неопределено, ДанныеОперации.КодАвторизации, ""); + СуммаОперации = ?(ДанныеОперации.СуммаОперации <> Неопределено, ДанныеОперации.СуммаОперации, 0); + СуммаНаличных = ?(ДанныеОперации.СуммаНаличных <> Неопределено, ДанныеОперации.СуммаНаличных, 0); + СуммаОригинальнойОперации = ?(ДанныеОперации.СуммаОригинальнойОперации <> Неопределено, ДанныеОперации.СуммаОригинальнойОперации, 0); + ТекстСлипЧека = ""; + + Если Не ПустаяСтрока(РеквизитыКартыQR) И НЕ ПараметрыПодключения.ConsumerPresentedQR Тогда + ОписаниеОшибки = НСтр("ru='Consumer-Presented QR не поддерживается драйвером.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + Если РевизияИнтерфейса >= 4000 Тогда + Если Команда = "AuthorizeSales" Тогда + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, СуммаОперации, + НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); + ИначеЕсли Команда = "AuthorizeRefund" Тогда + РезультатВызова = Ждать ОбъектДрайвера.ВернутьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, СуммаОперации, + НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); + ИначеЕсли Команда = "AuthorizeVoid" Тогда + Если СуммаОригинальнойОперации > 0 И НЕ ПараметрыПодключения.ЧастичнаяОтмена Тогда + ОписаниеОшибки = НСтр("ru='Частичная отмена не поддерживается драйвером.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + Иначе + РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, СуммаОперации, + СуммаОригинальнойОперации, НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); + КонецЕсли; + ИначеЕсли Команда = "PayByPaymentCardWithCashWithdrawal" Тогда + Если ПараметрыПодключения.ВыдачиНаличныхДенежныхСредств Тогда + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойCВыдачейНаличныхАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, СуммаОперации, + СуммаНаличных, НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); + Иначе + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + Иначе + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + ИначеЕсли РевизияИнтерфейса >= 3005 Тогда + Если Команда = "AuthorizeSales" Тогда + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, СуммаОперации, + НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); + ИначеЕсли Команда = "AuthorizeRefund" Тогда + РезультатВызова = Ждать ОбъектДрайвера.ВернутьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, СуммаОперации, + НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); + ИначеЕсли Команда = "AuthorizeVoid" Тогда + РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, СуммаОперации, + НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); + ИначеЕсли РевизияИнтерфейса >= 3006 И Команда = "PayByPaymentCardWithCashWithdrawal" Тогда + Если ПараметрыПодключения.ВыдачиНаличныхДенежныхСредств Тогда + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойCВыдачейНаличныхАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, СуммаОперации, + СуммаНаличных, НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); + Иначе + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + Иначе + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + Иначе + Если Команда = "AuthorizeSales" Тогда + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойАсинх(ПараметрыПодключения.ИДУстройства, НомерКарты, СуммаОперации, + НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); + ИначеЕсли Команда = "AuthorizeRefund" Тогда + РезультатВызова = Ждать ОбъектДрайвера.ВернутьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерКарты, СуммаОперации, + НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); + ИначеЕсли Команда = "AuthorizeVoid" Тогда + РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерКарты, СуммаОперации, + НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); + Иначе + ОписаниеОшибки = НСтр("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]; + КонецЕсли; + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("НомерМерчанта" , НомерМерчанта); + РезультатВыполнения.Вставить("НомерКарты" , НомерКарты); + РезультатВыполнения.Вставить("НомерЧекаЭТ" , НомерЧека); + РезультатВыполнения.Вставить("СсылочныйНомер", СсылочныйНомер); + РезультатВыполнения.Вставить("КодАвторизации", КодАвторизации); + РезультатВыполнения.Вставить("СуммаОперации" , СуммаОперации); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + РезультатВыполнения.Вставить("ТекстСлипЧека" , ТекстСлипЧека); + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + ПодключаемоеОборудование.ПоследнийСлипЧек = ТекстСлипЧека; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера(Команда, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет операцию на ЭТ c электронным сертификатом. +// +Асинх Функция ЭквайринговаяОперацияСЭлектроннымСертификатом(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда) + + Если ПараметрыПодключения.РевизияИнтерфейса < 3005 Тогда + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + РеквизитыКартыQR = ?(ДанныеОперации.РеквизитыКартыQR <> Неопределено, ДанныеОперации.РеквизитыКартыQR, ""); + НомерМерчанта = ?(ДанныеОперации.НомерМерчанта <> Неопределено, ДанныеОперации.НомерМерчанта, 0); + НомерКарты = ?(ДанныеОперации.НомерКарты <> Неопределено, ДанныеОперации.НомерКарты, ""); + НомерЧека = ?(ДанныеОперации.НомерЧека <> Неопределено, ДанныеОперации.НомерЧека, ""); + СсылочныйНомер = ?(ДанныеОперации.СсылочныйНомер <> Неопределено, ДанныеОперации.СсылочныйНомер, ""); + КодАвторизации = ?(ДанныеОперации.КодАвторизации <> Неопределено, ДанныеОперации.КодАвторизации, ""); + ИдентификаторКорзины = ?(ДанныеОперации.ИдентификаторКорзины <> Неопределено, ДанныеОперации.ИдентификаторКорзины, ""); + СуммаЭлектронногоСертификата = ?(ДанныеОперации.СуммаЭлектронногоСертификата <> Неопределено, ДанныеОперации.СуммаЭлектронногоСертификата, 0); + СуммаСобственныхСредств = ?(ДанныеОперации.СуммаСобственныхСредств <> Неопределено, ДанныеОперации.СуммаСобственныхСредств, 0); + ТекстСлипЧека = ""; + СтатусОперации = 0; + + Если НЕ ПараметрыПодключения.ОплатаЭлектроннымиСертификатами Тогда + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Если НЕ ПустаяСтрока(РеквизитыКартыQR) И НЕ ПараметрыПодключения.ConsumerPresentedQR Тогда + ОписаниеОшибки = НСтр("ru='Consumer-Presented QR не поддерживается драйвером.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Если ПустаяСтрока(ИдентификаторКорзины) Или СуммаЭлектронногоСертификата = 0 Тогда + ОписаниеОшибки = НСтр("ru='Неверные параметры в операции.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Попытка + Если ПараметрыПодключения.РевизияИнтерфейса >= 4000 Тогда + Если Команда = "PayElectronicCertificate" Тогда + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьЭлектроннымСертификатомАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, ИдентификаторКорзины, + СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека, + СсылочныйНомер, КодАвторизации, СтатусОперации, ТекстСлипЧека); + ИначеЕсли Команда = "ReturnElectronicCertificate" Тогда + РезультатВызова = Ждать ОбъектДрайвера.ВернутьЭлектроннымСертификатомАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, ИдентификаторКорзины, + СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека, + СсылочныйНомер, КодАвторизации, СтатусОперации, ТекстСлипЧека); + Иначе + ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + Иначе + Если Команда = "PayElectronicCertificate" Тогда + РезультатВызова = Ждать ОбъектДрайвера.ОплатитьЭлектроннымСертификатомАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, ИдентификаторКорзины, + СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека, + СсылочныйНомер, КодАвторизации, СтатусОперации, ТекстСлипЧека); + ИначеЕсли Команда = "ReturnElectronicCertificate" Тогда + РезультатВызова = Ждать ОбъектДрайвера.ВернутьЭлектроннымСертификатомАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, ИдентификаторКорзины, + СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека, + СсылочныйНомер, КодАвторизации, СтатусОперации, ТекстСлипЧека); + Иначе + ОписаниеОшибки = НСтр("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); + РезультатВыполнения.Вставить("ИдентификаторКорзины", ИдентификаторКорзины); + РезультатВыполнения.Вставить("СуммаЭлектронногоСертификата", СуммаЭлектронногоСертификата); + РезультатВыполнения.Вставить("СуммаСобственныхСредств", СуммаСобственныхСредств); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + РезультатВыполнения.Вставить("ТекстСлипЧека" , ТекстСлипЧека); + ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование(); + ПодключаемоеОборудование.ПоследнийСлипЧек = ТекстСлипЧека; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера(Команда, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет аварийную отмену операции по карте. +// +Асинх Функция АварийнаяОтменаОперации(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.АварийнаяОтменаОперацииАсинх(ПараметрыПодключения.ИДУстройства); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("АварийнаяОтменаОперации", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет сверку итогов по картам. +// +Асинх Функция ИтогиДняПоКартам(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + ТекстСлипЧека = ""; + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ИтогиДняПоКартамАсинх(ПараметрыПодключения.ИДУстройства, ТекстСлипЧека); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ТекстСлипЧека", РезультатВызова.Параметры[1]); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ИтогиДняПоКартам", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область ДисплейПокупателя + +// Функция возвращает параметры вывода на дисплей покупателя. +// +Асинх Функция ПараметрыВывода(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.РевизияИнтерфейса >= 3004 Тогда + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыДисплеяПокупателяАсинх(ПараметрыПодключения.ИДУстройства, ""); + РезультатОперации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"; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("СтолбцовНаДисплее", ПараметрыПодключения.СтолбцовНаДисплее); + РезультатВыполнения.Вставить("СтрокНаДисплее" , ПараметрыПодключения.СтрокНаДисплее); + РезультатВыполнения.Вставить("ДисплейОтображаетТекст" , ПараметрыПодключения.ДисплейОтображаетТекст); + РезультатВыполнения.Вставить("ДисплейОтображаетГрафику", ПараметрыПодключения.ДисплейОтображаетГрафику); + РезультатВыполнения.Вставить("ДисплейОтображаетQRКод" , ПараметрыПодключения.ДисплейОтображаетQRКод); + РезультатВыполнения.Вставить("ДисплейОтображаетHTML" , ПараметрыПодключения.ДисплейОтображаетHTML); + РезультатВыполнения.Вставить("ДисплейОтображаетСтатус" , ПараметрыПодключения.ДисплейОтображаетСтатус); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыДисплеяПокупателя", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыВыводаАсинх(ПараметрыПодключения.ИДУстройства, 20, 2); + Если РезультатВызова.Значение Тогда + ПараметрыПодключения.СтолбцовНаДисплее = Число(РезультатВызова.Параметры[1]); + ПараметрыПодключения.СтрокНаДисплее = Число(РезультатВызова.Параметры[2]); + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("СтолбцовНаДисплее", ПараметрыПодключения.СтолбцовНаДисплее); + РезультатВыполнения.Вставить("СтрокНаДисплее" , ПараметрыПодключения.СтрокНаДисплее); + РезультатВыполнения.Вставить("ДисплейОтображаетТекст" , Истина); + РезультатВыполнения.Вставить("ДисплейОтображаетГрафику", Ложь); + РезультатВыполнения.Вставить("ДисплейОтображаетQRКод" , Ложь); + РезультатВыполнения.Вставить("ДисплейОтображаетHTML" , Ложь); + РезультатВыполнения.Вставить("ДисплейОтображаетСтатус" , Ложь); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыВывода", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет вывод списка строк на дисплей покупателя. +// +Асинх Функция ВывестиСтрокуНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + СтрокиТекста = ?(ДанныеОперации.Свойство("СтрокиТекста"), ДанныеОперации.СтрокиТекста, НСтр("ru='Данные для вывода не указаны'")); + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ВывестиСтрокуНаДисплейПокупателяАсинх(ПараметрыПодключения.ИДУстройства, СтрокиТекста); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ВывестиСтрокуНаДисплейПокупателя", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет вывод QR кода на дисплей покупателя. +// +Асинх Функция ВывестиQRКодНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + ЗначениеQRКода = ?(ДанныеОперации.Свойство("ЗначениеQRКода"), ДанныеОперации.ЗначениеQRКода, ""); + КартинкаQRКода = ?(ДанныеОперации.Свойство("КартинкаQRКода"), ДанныеОперации.КартинкаQRКода, ""); + СтрокиТекста = ?(ДанныеОперации.Свойство("СтрокиТекста"), ДанныеОперации.СтрокиТекста, ""); + + Если Не ПустаяСтрока(СтрокиТекста) Тогда + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ВывестиСтрокуНаДисплейПокупателяАсинх(ПараметрыПодключения.ИДУстройства, СтрокиТекста); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + Возврат РезультатВыполнения; + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ВывестиСтрокуНаДисплейПокупателя", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + КонецЕсли; + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ВывестиQRКодНаДисплейПокупателяАсинх(ПараметрыПодключения.ИДУстройства, ЗначениеQRКода, КартинкаQRКода); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ВывестиQRКодНаДисплейПокупателя", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет вывод HTML на дисплей покупателя. +// +Асинх Функция ВывестиHTMLНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + ТекстHTML = ?(ДанныеОперации.Свойство("ТекстHTML"), ДанныеОперации.ТекстHTML, ""); + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ВывестиHTMLАсинх(ПараметрыПодключения.ИДУстройства, ТекстHTML); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ВывестиHTML", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет вывод информации на дисплей покупателя. +// +Асинх Функция ВывестиИнформациюНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + + Если ПараметрыПодключения.ДисплейОтображаетHTML Тогда + РезультатВыполнения = Ждать ВывестиHTMLНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + Иначе + + Если ПараметрыПодключения.ДисплейОтображаетТекст Тогда + РезультатВыполнения = Ждать ВывестиСтрокуНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + КонецЕсли; + + Если ПараметрыПодключения.ДисплейОтображаетQRКод Тогда + РезультатВыполнения = Ждать ВывестиQRКодНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + КонецЕсли; + + Если ПараметрыПодключения.ДисплейОтображаетСтатус Тогда + СтатусОперации = ?(ДанныеОперации.Свойство("СтатусОперации"), ДанныеОперации.СтатусОперации, 0); + Если СтатусОперации = 1 Или СтатусОперации = 2 Тогда + РезультатВыполнения = Ждать ВывестиСтатусНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет вывод статуса на дисплей покупателя. +// +Асинх Функция ВывестиСтатусНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Если ПараметрыПодключения.РевизияИнтерфейса < 3009 Тогда + ОписаниеОшибки = НСтр("ru='Устройство не поддерживает данную операцию.'"); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + СтатусОперации = ?(ДанныеОперации.Свойство("СтатусОперации"), ДанныеОперации.СтатусОперации, 0); + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ОтобразитьСтатусОперацииАсинх(ПараметрыПодключения.ИДУстройства, СтатусОперации); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ОтобразитьСтатусОперации", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет очистку дисплея покупателя. +// +Асинх Функция ОчиститьДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ОчиститьДисплейПокупателяАсинх(ПараметрыПодключения.ИДУстройства); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ОчиститьДисплейПокупателя", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область ЭлектронныеВесы + +// Функция осуществляет получение веса груза, расположенного на весах. +// +Асинх Функция ПолучитьВес(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Вес = 0; + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьВесАсинх(ПараметрыПодключения.ИДУстройства, Вес); + Если РезультатВызова.Значение Тогда + Вес = Число(РезультатВызова.Параметры[1]); + Если Вес < 0 Тогда + Вес = 0; + КонецЕсли; + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("Вес", Вес); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьВес", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет установку веса тары на весах. +// +Асинх Функция Тарировать(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + ВесТары = ?(ДанныеОперации.Свойство("ВесТары"), Число(ДанныеОперации.ВесТары), 0); + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.УстановитьВесТарыАсинх(ПараметрыПодключения.ИДУстройства, ВесТары); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("УстановитьВесТары", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет выгрузку товаров в весы с печатью этикеток. +// +Асинх Функция ВыгрузитьТовары(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + СтатусПакета = "first"; + + КоличествоПакетов = ДанныеОперации.ПакетыXML.Количество(); + ПроцентИнкремент = 100 / КоличествоПакетов; + ТекущийПроцент = 0; + ТекущийПакет = 0; + + СтатусПакета = ?(КоличествоПакетов > 1 , "first", "last"); + + Для Каждого ДанныеДляВыгрузки Из ДанныеОперации.ПакетыXML Цикл + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ВыгрузитьТоварыАсинх(ПараметрыПодключения.ИДУстройства, ДанныеДляВыгрузки, СтатусПакета); + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ВыгрузитьТовары", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + + Если НЕ РезультатВызова.Значение Тогда + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + Возврат РезультатВыполнения; + КонецЕсли; + ТекущийПакет = ТекущийПакет + 1; + СтатусПакета = ?(ТекущийПакет < КоличествоПакетов - 1 , "regular", "last"); + ТекущийПроцент = ТекущийПроцент + ПроцентИнкремент; + Состояние(НСтр("ru='Выгрузка данных...'"), Окр(ТекущийПроцент)); + КонецЦикла; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет очистку базы товаров в весах с печатью этикеток. +// +Асинх Функция ОчиститьТоварыВВесах(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ОчиститьТоварыАсинх(ПараметрыПодключения.ИДУстройства); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ОчиститьТовары", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область ТерминалыСбораДанных + +// Очищает загруженную ранее таблицу товаров в ТСД. +// +Асинх Функция ОчиститьТаблицу(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ОчиститьТаблицуАсинх(ПараметрыПодключения.ИДУстройства); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ОчиститьТаблицу", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет загрузку таблицы из терминала сбора данных. +// +Асинх Функция ЗагрузитьТаблицу(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + ДанныеЗагрузки = ""; + РезультатВызова = Ждать ОбъектДрайвера.ЗагрузитьТаблицуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеЗагрузки); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + ДанныеЗагрузки = РезультатВызова.Параметры[1]; + ДанныеОперации.Вставить("ДанныеЗагрузки", ДанныеЗагрузки); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ЗагрузитьТаблицу", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция осуществляет выгрузку данных в терминал сбора данных. +// +Асинх Функция ВыгрузитьТаблицу(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + СтатусПакета = "first"; + + КоличествоПакетов = ДанныеОперации.ПакетыXML.Количество(); + ПроцентИнкремент = 100 / КоличествоПакетов; + ТекущийПроцент = 0; + ТекущийПакет = 0; + + СтатусПакета = ?(КоличествоПакетов > 1 , "first", "last"); + + Для Каждого ДанныеДляВыгрузки Из ДанныеОперации.ПакетыXML Цикл + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ВыгрузитьТаблицуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеДляВыгрузки, СтатусПакета); + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ВыгрузитьТаблицу", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + + Если НЕ РезультатВызова.Значение Тогда + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + Возврат РезультатВыполнения; + КонецЕсли; + ТекущийПакет = ТекущийПакет + 1; + СтатусПакета = ?(ТекущийПакет < КоличествоПакетов - 1 , "regular", "last"); + ТекущийПроцент = ТекущийПроцент + ПроцентИнкремент; + Состояние(НСтр("ru='Выгрузка данных...'"), Окр(ТекущийПроцент)); + КонецЦикла; + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область ПринтерыЭтикеток + +Асинх Функция ИнициализацияПринтера(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ИнициализацияПринтераАсинх(ПараметрыПодключения.ИДУстройства); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ИнициализацияПринтера", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +Асинх Функция ПечатьЭтикеток(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + + ПакетыДляВыгрузки = ДанныеОперации.ПакетыДляВыгрузки; + КоличествоПакетов = ПакетыДляВыгрузки.Количество() - 1; + + СтатусПакета = "first"; + Для Счетчик = 0 По КоличествоПакетов Цикл + Если (Счетчик = КоличествоПакетов) Тогда + СтатусПакета = "last"; + ИначеЕсли (Счетчик > 1) Тогда + СтатусПакета = "regular"; + КонецЕсли; + + ДанныеДляВыгрузки = ПакетыДляВыгрузки[Счетчик]; + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПечатьЭтикетокАсинх(ПараметрыПодключения.ИДУстройства, ДанныеДляВыгрузки, СтатусПакета); + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПечатьЭтикеток", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат РезультатВыполнения; + КонецПопытки; + + Если НЕ РезультатВызова.Значение Тогда + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + Возврат РезультатВыполнения; + КонецЕсли; + + КонецЦикла; + + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область ПроцедурыИФункцииОбщиеДляRFIDСчитывателей + +// Функция получения данные меток RFID считывателя. +// +Асинх Функция ПолучитьДанныеМетокRFID(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + ТаблицаМеток = ""; + ИДПакета = ДанныеОперации.ИДПакета; + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ПолучитьДанныеМетокRFIDАсинх(ПараметрыПодключения.ИДУстройства, ИДПакета, ТаблицаМеток); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + ТаблицаМеток = РезультатВызова.Параметры[2]; + РезультатВыполнения.Вставить("ТаблицаМеток", ТаблицаМеток); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьДанныеМетокRFID", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция открывает сессию RFID считывателя. +// +Асинх Функция ОткрытьСессиюRFID(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ОткрытьСессиюRFIDАсинх(ПараметрыПодключения.ИДУстройства); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ОткрытьСессиюRFID", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция закрывает сессию RFID считывателя. +// +Асинх Функция ЗакрытьСессиюRFID(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ЗакрытьСессиюRFIDАсинх(ПараметрыПодключения.ИДУстройства); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ЗакрытьСессиюRFID", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + +КонецФункции + +// Функция записывает данные в метку RFID. +// +Асинх Функция ЗаписатьДанныеВМеткуRFID(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) + + // АПК: 1353-выкл TID, EPC - аббревиатура + Таймаут = ДанныеОперации.Таймаут; + TID = ДанныеОперации.TID; + EPC = ДанныеОперации.EPC; + Данные = ДанныеОперации.Данные; + БанкПамяти = ?(ДанныеОперации.БанкПамяти = "EPC", 1, 2); + + Попытка + РезультатВызова = Ждать ОбъектДрайвера.ЗаписатьДанныеВМеткуRFIDАсинх(ПараметрыПодключения.ИДУстройства, TID, EPC, Данные, БанкПамяти, Таймаут); + Если РезультатВызова.Значение Тогда + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + Иначе + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); + КонецЕсли; + Исключение + РезультатВыполнения = ОшибкаВызоваДрайвера("ЗаписатьДанныеВМеткуRFID", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат РезультатВыполнения; + // АПК: 1353-вкл + +КонецФункции + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/CommonModules/Синхронизация.xml b/CommonModules/Синхронизация.xml new file mode 100644 index 0000000..a71b255 --- /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..8b51d7a --- /dev/null +++ b/CommonModules/Синхронизация/Ext/Module.bsl @@ -0,0 +1,1021 @@ +Функция ДанныеОбновленияПубликации() Экспорт + + Результат = Новый Структура("ЕстьОбновление, ТекстСообщения, Идентификатор", Ложь, "", ""); + + ДанныеПубликации = ПолучитьДанныеПубликации(); + Если ПустаяСтрока(ДанныеПубликации.Идентификатор) + И ПустаяСтрока(ДанныеПубликации.Версия) Тогда + Возврат Результат; + КонецЕсли; + + ЕстьОбновление = ЭтоНоваяВерсияКонфигурации(ДанныеПубликации.Версия); + ЗаписатьПризнакАвтообновления(ЕстьОбновление, ДанныеПубликации.Адрес); + + Если Не ЕстьОбновление Тогда + Если Не ПустаяСтрока(ДанныеПубликации.Идентификатор) Тогда + ЗафиксироватьИдентификаторПубликации(ДанныеПубликации.Идентификатор); + КонецЕсли; + Возврат Результат; + КонецЕсли; + + Результат.ЕстьОбновление = Истина; + Результат.Идентификатор = ДанныеПубликации.Идентификатор; + Результат.ТекстСообщения = "Обнаружена новая версия приложения"; + + Возврат Результат; + +КонецФункции + +Процедура ЗафиксироватьИдентификаторПубликации(ИдентификаторПубликации) Экспорт + + Если Не ЗначениеЗаполнено(ИдентификаторПубликации) Тогда + Возврат; + КонецЕсли; + + ХранилищеОбщихНастроек.Сохранить("ОбновлениеКонфигурации", "ИдентификаторПубликации", ИдентификаторПубликации); + +КонецПроцедуры + +Функция ПодготовитьЗагрузкуОбновления() Экспорт + + Возврат ДанныеОбновленияПубликации(); + +КонецФункции + +Функция ЭтоНоваяВерсияКонфигурации(ВерсияПубликации) + + ВерсияНаСервере = СокрЛП(Строка(ВерсияПубликации)); + Если ПустаяСтрока(ВерсияНаСервере) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ВерсияНаСервере <> СокрЛП(Строка(Метаданные.Версия)); + +КонецФункции + +Функция ПолучитьДанныеПубликации() + + Результат = Новый Структура("Идентификатор, Версия, Адрес", "", "", ""); + + ПараметрыАдреса = ПараметрыАдресаПубликации(); + Результат.Адрес = ПараметрыАдреса.Адрес; + Если ПустаяСтрока(ПараметрыАдреса.Хост) Тогда + Возврат Результат; + КонецЕсли; + + Попытка + HTTPСоединение = Новый HTTPСоединение( + ПараметрыАдреса.Хост, + ПараметрыАдреса.Порт, + , + , + , + 10); + HTTPЗапрос = Новый HTTPЗапрос(ПараметрыАдреса.Путь); + Ответ = HTTPСоединение.Получить(HTTPЗапрос); + Если Ответ.КодСостояния < 200 Или Ответ.КодСостояния > 299 Тогда + Возврат Результат; + КонецЕсли; + ЗаполнитьДанныеИзФайлаПубликации(Результат, Ответ.ПолучитьТелоКакСтроку("UTF-8")); + Исключение + КонецПопытки; + + Возврат Результат; + +КонецФункции + +Процедура ЗаполнитьДанныеИзФайлаПубликации(ДанныеПубликации, ТекстФайла) + + Если ПустаяСтрока(ТекстФайла) Тогда + Возврат; + КонецЕсли; + + Попытка + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ТекстФайла); + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + Продолжить; + КонецЕсли; + Идентификатор = СокрЛП(Строка(ЧтениеXML.ЗначениеАтрибута("lastUpdateUUID"))); + Если Не ЗначениеЗаполнено(Идентификатор) Тогда + Продолжить; + КонецЕсли; + ДанныеПубликации.Идентификатор = Идентификатор; + ДанныеПубликации.Версия = СокрЛП(Строка(ЧтениеXML.ЗначениеАтрибута("version"))); + ЧтениеXML.Закрыть(); + Возврат; + КонецЦикла; + ЧтениеXML.Закрыть(); + Исключение + КонецПопытки; + +КонецПроцедуры + +Функция ПолучитьИдентификаторПубликации() + + Возврат ПолучитьДанныеПубликации().Идентификатор; + +КонецФункции + +Функция ИдентификаторИзФайлаПубликации(ТекстФайла) + + ДанныеПубликации = Новый Структура("Идентификатор, Версия, Адрес", "", "", ""); + ЗаполнитьДанныеИзФайлаПубликации(ДанныеПубликации, ТекстФайла); + Возврат ДанныеПубликации.Идентификатор; + +КонецФункции + +Функция ПараметрыАдресаПубликации() + + Результат = Новый Структура("Хост, Порт, Путь, Адрес", "", 80, "/1cema.xml", ""); + + СерверИсточник = СокрЛП(Константы.СерверИсточникОбновлений.Получить()); + Если ПустаяСтрока(СерверИсточник) Тогда + СерверИсточник = СокрЛП(Константы.Сервер.Получить()); + КонецЕсли; + Если ПустаяСтрока(СерверИсточник) Тогда + Возврат Результат; + КонецЕсли; + + СерверИсточник = СтрЗаменить(СерверИсточник, "https://", ""); + СерверИсточник = СтрЗаменить(СерверИсточник, "http://", ""); + + ХостПубликации = СерверИсточник; + ПутьКФайлуПубликации = "/1cema.xml"; + ПозицияПути = СтрНайти(СерверИсточник, "/"); + Если ПозицияПути > 0 Тогда + ХостПубликации = Лев(СерверИсточник, ПозицияПути - 1); + ПутьПубликации = Сред(СерверИсточник, ПозицияПути); + Если Прав(ПутьПубликации, 1) = "/" Тогда + ПутьКФайлуПубликации = ПутьПубликации + "1cema.xml"; + ИначеЕсли СтрНайти(НРег(ПутьПубликации), ".xml") = 0 Тогда + ПутьКФайлуПубликации = ПутьПубликации + "/1cema.xml"; + Иначе + ПутьКФайлуПубликации = ПутьПубликации; + КонецЕсли; + КонецЕсли; + + ПортПубликации = 80; + ПозицияПорта = СтрНайти(ХостПубликации, ":"); + Если ПозицияПорта > 0 Тогда + ПортСтрока = Сред(ХостПубликации, ПозицияПорта + 1); + ХостПубликации = Лев(ХостПубликации, ПозицияПорта - 1); + Попытка + ПортПубликации = Число(ПортСтрока); + Исключение + ПортПубликации = 80; + КонецПопытки; + КонецЕсли; + + Если ПустаяСтрока(ХостПубликации) Тогда + Возврат Результат; + КонецЕсли; + + Если Лев(ПутьКФайлуПубликации, 1) <> "/" Тогда + ПутьКФайлуПубликации = "/" + ПутьКФайлуПубликации; + КонецЕсли; + + Адрес = "http://" + ХостПубликации; + Если ПортПубликации <> 80 И ПортПубликации <> 0 Тогда + Адрес = Адрес + ":" + Формат(ПортПубликации, "ЧГ="); + КонецЕсли; + Адрес = Адрес + ПутьКФайлуПубликации; + + Результат.Хост = ХостПубликации; + Результат.Порт = ПортПубликации; + Результат.Путь = ПутьКФайлуПубликации; + Результат.Адрес = Адрес; + + Возврат Результат; + +КонецФункции + +Процедура ЗаписатьПризнакАвтообновления(Автообновление, АдресПубликации) + + #Если МобильноеПриложениеСервер Тогда + Попытка + ПутьКФайлу = НайтиФайлСпискаБаз(); + Если ПустаяСтрока(ПутьКФайлу) Тогда + Возврат; + КонецЕсли; + ЗаписатьПараметрыОбновленияВСпискеБаз(ПутьКФайлу, АдресПубликации, Автообновление); + Исключение + КонецПопытки; + #КонецЕсли + +КонецПроцедуры + +Функция НайтиФайлСпискаБаз() + + ИмяФайла = "ibases.v8i"; + КаталогиПоиска = Новый Массив; + + КаталогВрем = КаталогВременныхФайлов(); + КаталогиПоиска.Добавить(СтрЗаменить(КаталогВрем, "/cache/", "/files/1C/1cem/")); + КаталогиПоиска.Добавить(СтрЗаменить(КаталогВрем, "\cache\", "\files\1C\1cem\")); + КаталогиПоиска.Добавить(КаталогВрем); + КаталогиПоиска.Добавить("/Library/1C/1cem/"); + + Для Каждого КаталогПоиска Из КаталогиПоиска Цикл + Если ПустаяСтрока(КаталогПоиска) Тогда + Продолжить; + КонецЕсли; + Попытка + Найденные = НайтиФайлы(КаталогПоиска, ИмяФайла, Истина); + Если Найденные.Количество() > 0 Тогда + Возврат Найденные[0].ПолноеИмя; + КонецЕсли; + Исключение + КонецПопытки; + КонецЦикла; + + Возврат ""; + +КонецФункции + +Процедура ЗаписатьПараметрыОбновленияВСпискеБаз(ПутьКФайлу, АдресПубликации, Автообновление) + + СтрокиФайла = Новый Массив; + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу); + СтрокаТекста = ЧтениеТекста.ПрочитатьСтроку(); + Пока СтрокаТекста <> Неопределено Цикл + СтрокиФайла.Добавить(СтрокаТекста); + СтрокаТекста = ЧтениеТекста.ПрочитатьСтроку(); + КонецЦикла; + ЧтениеТекста.Закрыть(); + + ЗначениеAutoUpdate = ?(Автообновление, "1", "0"); + НовыеСтроки = Новый Массив; + ЕстьСекция = Ложь; + ЕстьAutoUpdateВСекции = Ложь; + ЕстьUpdateURLВСекции = Ложь; + + Для Индекс = 0 По СтрокиФайла.ВГраница() Цикл + СтрокаФайла = СтрокиФайла[Индекс]; + СтрокаБезПробелов = СокрЛП(СтрокаФайла); + ЭтоНачалоСекции = Лев(СтрокаБезПробелов, 1) = "[" + И Прав(СтрокаБезПробелов, 1) = "]"; + + Если ЭтоНачалоСекции Тогда + Если ЕстьСекция Тогда + ДобавитьПараметрыОбновленияВСекцию( + НовыеСтроки, + ЕстьAutoUpdateВСекции, + ЕстьUpdateURLВСекции, + АдресПубликации, + ЗначениеAutoUpdate); + КонецЕсли; + ЕстьСекция = Истина; + ЕстьAutoUpdateВСекции = Ложь; + ЕстьUpdateURLВСекции = Ложь; + НовыеСтроки.Добавить(СтрокаФайла); + Продолжить; + КонецЕсли; + + Если СтрНайти(СтрокаБезПробелов, "AutoUpdate=") = 1 Тогда + НовыеСтроки.Добавить("AutoUpdate=" + ЗначениеAutoUpdate); + ЕстьAutoUpdateВСекции = Истина; + Продолжить; + КонецЕсли; + + Если СтрНайти(СтрокаБезПробелов, "UpdateURL=") = 1 Тогда + Если ПустаяСтрока(АдресПубликации) Тогда + НовыеСтроки.Добавить(СтрокаФайла); + Иначе + НовыеСтроки.Добавить("UpdateURL=" + АдресПубликации); + КонецЕсли; + ЕстьUpdateURLВСекции = Истина; + Продолжить; + КонецЕсли; + + НовыеСтроки.Добавить(СтрокаФайла); + КонецЦикла; + + ДобавитьПараметрыОбновленияВСекцию( + НовыеСтроки, + ЕстьAutoUpdateВСекции, + ЕстьUpdateURLВСекции, + АдресПубликации, + ЗначениеAutoUpdate); + + ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу); + Для Каждого СтрокаФайла Из НовыеСтроки Цикл + ЗаписьТекста.ЗаписатьСтроку(СтрокаФайла); + КонецЦикла; + ЗаписьТекста.Закрыть(); + +КонецПроцедуры + +Процедура ДобавитьПараметрыОбновленияВСекцию(СтрокиФайла, ЕстьAutoUpdate, ЕстьUpdateURL, АдресПубликации, ЗначениеAutoUpdate) + + Если Не ЕстьAutoUpdate Тогда + СтрокиФайла.Добавить("AutoUpdate=" + ЗначениеAutoUpdate); + КонецЕсли; + Если Не ЕстьUpdateURL И Не ПустаяСтрока(АдресПубликации) Тогда + СтрокиФайла.Добавить("UpdateURL=" + АдресПубликации); + КонецЕсли; + +КонецПроцедуры + +Функция ЗапускСинхронизации() Экспорт + + Сообщения = Новый Массив; + ДобавитьСообщение(Сообщения, "Синхронизация " + Формат(ТекущаяДата(), "ДФ='dd.MM.yyyy HH:mm'")); + + ЗагрузитьНоменклатуру(Сообщения); + ОтправитьДокументыВыводаИзОборота(Сообщения); + ОбновитьСтатусыДокументовВыводаИзОборота(Сообщения); + + Возврат ТекстИзСообщений(Сообщения); + +КонецФункции + +Процедура ЗагрузитьНоменклатуру(Сообщения) + + Попытка + ДанныеНом = ВыполнитьЗапрос("/utip_curent/hs/tdp", Неопределено, Сообщения); + Если Не ЗапросВыполненУспешно(ДанныеНом) Тогда + ДобавитьСообщение(Сообщения, "Ошибка получения товаров."); + Возврат; + КонецЕсли; + + СписокНом = ДанныеНом.Получить("nom"); + Если СписокНом = Неопределено Тогда + ДобавитьСообщение(Сообщения, "Номенклатура: УТ11 не вернула список товаров."); + Возврат; + КонецЕсли; + + КоличествоЗаписано = 0; + Для Каждого Ном Из СписокНом Цикл + Номенклатура = Справочники.Номенклатура.НайтиПоКоду(Ном["code"]); + Если Не ЗначениеЗаполнено(Номенклатура) Тогда + Номенклатура = Справочники.Номенклатура.СоздатьЭлемент(); + Иначе + Номенклатура = Номенклатура.ПолучитьОбъект(); + КонецЕсли; + Номенклатура.Код = Ном["code"]; + Номенклатура.Наименование = Ном["name"]; + Номенклатура.Barcode = Ном["barcode"]; + Номенклатура.Записать(); + КоличествоЗаписано = КоличествоЗаписано + 1; + КонецЦикла; + + Если КоличествоЗаписано = 0 Тогда + ДобавитьСообщение(Сообщения, "Номенклатура: нет данных для загрузки."); + Иначе + ДобавитьСообщение(Сообщения, "Загружена номенклатура: " + XMLСтрока(КоличествоЗаписано)); + КонецЕсли; + Исключение + ДобавитьСообщение(Сообщения, "Ошибка получения товаров. " + ОписаниеОшибки()); + КонецПопытки; + +КонецПроцедуры + +Процедура ОтправитьДокументыВыводаИзОборота(Сообщения) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВыводИзОборота.Ссылка КАК Ссылка + |ИЗ + | Документ.ВыводИзОборота КАК ВыводИзОборота + |ГДЕ + | ВыводИзОборота.СтатусВыводаИзОборота = &СтатусВыводаИзОборота + | И ВыводИзОборота.ПометкаУдаления = ЛОЖЬ + | + |УПОРЯДОЧИТЬ ПО + | ВыводИзОборота.Дата, + | ВыводИзОборота.Номер"; + Запрос.УстановитьПараметр("СтатусВыводаИзОборота", Перечисления.Status.ГотовКОтправке); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Количество() = 0 Тогда + ДобавитьСообщение(Сообщения, "Нет документов для отправки."); + Возврат; + КонецЕсли; + + МассивЗапроса = Новый Массив; + ДокументыКОтправке = Новый Массив; + СоответствиеПоНомеру = Новый Соответствие; + ИНН = Константы.ИНН.Получить(); + Префикс = СокрЛП(Константы.Префикс.Получить()); + + Пока Выборка.Следующий() Цикл + Вывод = Выборка.Ссылка.ПолучитьОбъект(); + НомерДокумента = НомерДокументаСтрокой(Вывод.Номер); + + СтруктураМассива = Новый Структура("id,inn,prefix,tt,operation,nupd,dupd,marks"); + СтруктураМассива.id = НомерДокумента; + СтруктураМассива.inn = ИНН; + СтруктураМассива.prefix = Префикс; + СтруктураМассива.tt = СокрЛП(Константы.ТТ.Получить()); + СтруктураМассива.operation = Строка(Вывод.Операция); + СтруктураМассива.nupd = Вывод.nupd; + СтруктураМассива.dupd = Формат(Вывод.dupd, "ДФ=dd.MM.yyyy"); + + Marks = Новый Массив; + Для Каждого Товар Из Вывод.ТЧТовары Цикл + СтруктураMarks = Новый Структура("mark,kol"); + СтруктураMarks.mark = Товар.Mark; + СтруктураMarks.kol = Товар.Вес; + Marks.Добавить(СтруктураMarks); + КонецЦикла; + СтруктураМассива.marks = Marks; + + МассивЗапроса.Добавить(СтруктураМассива); + ДокументыКОтправке.Добавить(Выборка.Ссылка); + СоответствиеПоНомеру.Вставить(НомерДокумента, Выборка.Ссылка); + ДобавитьКлючиПоискаДокумента(СоответствиеПоНомеру, Выборка.Ссылка, Вывод.Номер, Префикс); + КонецЦикла; + + Попытка + Результат = ВыполнитьЗапрос("/utip_curent/hs/tdp", МассивЗапроса, Сообщения); + Если Не ЗапросВыполненУспешно(Результат) Тогда + ДобавитьСообщение(Сообщения, "Ошибка отправки документов вывода из оборота: УТ11 не подтвердила запись."); + Возврат; + КонецЕсли; + + ПодтвержденныеСсылки = ПодтвержденныеДокументы(Результат, ДокументыКОтправке, СоответствиеПоНомеру); + Если ПодтвержденныеСсылки.Количество() = 0 Тогда + ДобавитьСообщение(Сообщения, "Ошибка отправки документов вывода из оборота: УТ11 не подтвердила запись."); + СообщитьОшибкиЗаписиУТ(Результат, Сообщения); + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Для Каждого СсылкаДокумента Из ПодтвержденныеСсылки Цикл + Вывод = СсылкаДокумента.ПолучитьОбъект(); + Вывод.СтатусВыводаИзОборота = Перечисления.Status.Отправлен; + Вывод.Записать(); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + ДобавитьСообщение(Сообщения, "Отправлено документов: " + XMLСтрока(ПодтвержденныеСсылки.Количество())); + Если ПодтвержденныеСсылки.Количество() < ДокументыКОтправке.Количество() Тогда + ДобавитьСообщение(Сообщения, "Не записаны в УТ11: " + + XMLСтрока(ДокументыКОтправке.Количество() - ПодтвержденныеСсылки.Количество()) + + ". Они остались в статусе «Готов к отправке»."); + СообщитьОшибкиЗаписиУТ(Результат, Сообщения); + КонецЕсли; + Исключение + ДобавитьСообщение(Сообщения, "Ошибка отправки документов вывода из оборота. " + ОписаниеОшибки()); + КонецПопытки; + +КонецПроцедуры + +Процедура ОбновитьСтатусыДокументовВыводаИзОборота(Сообщения) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВыводИзОборота.Ссылка КАК Ссылка, + | ВыводИзОборота.Номер КАК Номер, + | ВыводИзОборота.Дата КАК Дата + |ИЗ + | Документ.ВыводИзОборота КАК ВыводИзОборота + |ГДЕ + | ВыводИзОборота.СтатусВыводаИзОборота В (&Статусы) + | И ВыводИзОборота.ПометкаУдаления = ЛОЖЬ + | + |УПОРЯДОЧИТЬ ПО + | ВыводИзОборота.Дата, + | ВыводИзОборота.Номер"; + Запрос.УстановитьПараметр("Статусы", СтатусыДляПроверкиВУТ()); + + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Если РезультатЗапроса.Количество() = 0 Тогда + ДобавитьСообщение(Сообщения, "Нет документов для проверки статусов."); + Возврат; + КонецЕсли; + + МассивЗапроса = Новый Массив; + СоответствиеПоНомеру = Новый Соответствие; + ИНН = Константы.ИНН.Получить(); + Префикс = СокрЛП(Константы.Префикс.Получить()); + + Для Каждого Строка Из РезультатЗапроса Цикл + СтруктураМассива = Новый Структура("id,inn,prefix,tt,operation,dupd,nupd"); + СтруктураМассива.id = НомерДокументаСтрокой(Строка.Номер); + СтруктураМассива.inn = ИНН; + СтруктураМассива.prefix = Префикс; + СтруктураМассива.tt = СокрЛП(Константы.ТТ.Получить()); + СтруктураМассива.operation = Строка(Строка.Ссылка.Операция); + СтруктураМассива.dupd = Формат(Строка.Ссылка.dupd, "ДФ=dd.MM.yyyy"); + СтруктураМассива.nupd = Строка(Строка.Ссылка.nupd); + МассивЗапроса.Добавить(СтруктураМассива); + + ДобавитьКлючиПоискаДокумента(СоответствиеПоНомеру, Строка.Ссылка, Строка.Номер, Префикс); + КонецЦикла; + + ДобавитьСообщение(Сообщения, "Проверка статусов документов: " + XMLСтрока(РезультатЗапроса.Количество())); + + Попытка + Результат = ВыполнитьЗапрос("/utip_curent/hs/tdpd", МассивЗапроса, Сообщения); + Если Не ЗапросВыполненУспешно(Результат) Тогда + ДобавитьСообщение(Сообщения, "Ошибка получения статусов документов: УТ11 не вернула корректный ответ."); + Возврат; + КонецЕсли; + + Доки = Неопределено; + Если ТипЗнч(Результат) = Тип("Соответствие") Тогда + Доки = Результат.Получить("docs"); + КонецЕсли; + + Если Не ЗначениеЗаполнено(Доки) Тогда + ДобавитьСообщение(Сообщения, "УТ11 не вернула статусы документов."); + Возврат; + КонецЕсли; + + Обновлено = 0; + ИзмененияСтатусов = Новый Массив; + НачатьТранзакцию(); + Попытка + Для Каждого Док Из Доки Цикл + Если Не ЭтоСтруктураОтветаУТ(Док) Тогда + Продолжить; + КонецЕсли; + + НомерИзУТ = НомерИзОтветаУТ(Док); + ДокументСсылка = НайтиДокументПоКлючу(СоответствиеПоНомеру, НомерИзУТ, Префикс); + Если Не ЗначениеЗаполнено(ДокументСсылка) Тогда + ДокументСсылка = ПолучитьВыводИзОборота(НомерИзУТ); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДокументСсылка) Тогда + Продолжить; + КонецЕсли; + + НовыйСтатус = СтатусПоОтветуУТ(Док); + Если Не ЗначениеЗаполнено(НовыйСтатус) Тогда + Продолжить; + КонецЕсли; + + ДокументОбъект = ДокументСсылка.ПолучитьОбъект(); + Если ДокументОбъект.СтатусВыводаИзОборота = НовыйСтатус Тогда + Продолжить; + КонецЕсли; + + СтарыйСтатус = Строка(ДокументОбъект.СтатусВыводаИзОборота); + ДокументОбъект.СтатусВыводаИзОборота = НовыйСтатус; + ДокументОбъект.Записать(); + Обновлено = Обновлено + 1; + ИзмененияСтатусов.Добавить("Документ " + НомерДокументаСтрокой(ДокументОбъект.Номер) + + ": " + СтарыйСтатус + " → " + Строка(НовыйСтатус)); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Для Каждого СтрокаИзменения Из ИзмененияСтатусов Цикл + ДобавитьСообщение(Сообщения, СтрокаИзменения); + КонецЦикла; + + Если Обновлено = 0 Тогда + ДобавитьСообщение(Сообщения, "Статусы проверены. Изменений нет."); + Иначе + ДобавитьСообщение(Сообщения, "Обновлены статусы документов: " + XMLСтрока(Обновлено)); + КонецЕсли; + Исключение + ДобавитьСообщение(Сообщения, "Ошибка получения статусов документов. " + ОписаниеОшибки()); + КонецПопытки; + +КонецПроцедуры + +Функция СтатусыДляПроверкиВУТ() + + Статусы = Новый Массив; + Статусы.Добавить(Перечисления.Status.Отправлен); + Статусы.Добавить(Перечисления.Status.ОшибкаВывода); + Возврат Статусы; + +КонецФункции + +Функция ПолучитьВыводИзОборота(Номер) + + НомерЧисло = НомерДокументаЧислом(Номер); + Если НомерЧисло = Неопределено Тогда + Возврат Документы.ВыводИзОборота.ПустаяСсылка(); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВыводИзОборота.Ссылка КАК Ссылка + |ИЗ + | Документ.ВыводИзОборота КАК ВыводИзОборота + |ГДЕ + | ВыводИзОборота.Номер = &Номер + | И ВыводИзОборота.Дата МЕЖДУ &Дата1 И &Дата2 + | + |УПОРЯДОЧИТЬ ПО + | ВыводИзОборота.Дата УБЫВ"; + Запрос.УстановитьПараметр("Номер", НомерЧисло); + Запрос.УстановитьПараметр("Дата1", НачалоГода(ДобавитьМесяц(ТекущаяДата(), -12))); + Запрос.УстановитьПараметр("Дата2", КонецГода(ТекущаяДата())); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Возврат Выборка.Ссылка; + КонецЕсли; + + Возврат Документы.ВыводИзОборота.ПустаяСсылка(); + +КонецФункции + +Функция ВыполнитьЗапрос(АдресРесурса, ПараметрыЗапроса = Неопределено, Сообщения = Неопределено) + + СерверИсточник = Константы.Сервер.Получить(); + ИмяФайлаЗапроса = ""; + + Попытка + HTTPСоединение = Новый HTTPСоединение( + СерверИсточник, + 80, + Константы.Логин.Получить(), + Константы.Пароль.Получить(), + , + 60); + Исключение + ДобавитьСообщение(Сообщения, "Не удалось соединиться с сервером: " + СерверИсточник); + Возврат Ложь; + КонецПопытки; + + Заголовки = Новый Соответствие; + Заголовки.Вставить("Content-Type", "application/json"); + + Если ЗначениеЗаполнено(ПараметрыЗапроса) Тогда + ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла("json"); + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.ОткрытьФайл(ИмяФайлаЗапроса); + ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса); + ЗаписьJSON.Закрыть(); + ФайлОтправки = Новый Файл(ИмяФайлаЗапроса); + Заголовки.Вставить("Content-Length", XMLСтрока(ФайлОтправки.Размер())); + КонецЕсли; + + HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + РезультатВозврата = Ложь; + + Попытка + Если ЗначениеЗаполнено(ПараметрыЗапроса) Тогда + HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса); + Результат = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); + Иначе + Результат = HTTPСоединение.Получить(HTTPЗапрос); + КонецЕсли; + + РезультатСтрока = Результат.ПолучитьТелоКакСтроку("UTF-8"); + Если Результат.КодСостояния < 200 Или Результат.КодСостояния > 299 Тогда + ДобавитьСообщение(Сообщения, "УТ11 вернула код " + XMLСтрока(Результат.КодСостояния) + + ?(ПустаяСтрока(РезультатСтрока), "", ": " + РезультатСтрока)); + ИначеЕсли ПустаяСтрока(СокрЛП(РезультатСтрока)) Тогда + ДобавитьСообщение(Сообщения, "УТ11 вернула пустой ответ."); + Иначе + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(РезультатСтрока); + ОбъектJSON = ПрочитатьJSON(ЧтениеJSON, Истина); + + Если ОтветСодержитОшибку(ОбъектJSON) Тогда + ДобавитьСообщение(Сообщения, ТекстОшибкиИзОтвета(ОбъектJSON)); + Иначе + РезультатВозврата = ОбъектJSON; + КонецЕсли; + КонецЕсли; + Исключение + ДобавитьСообщение(Сообщения, ОписаниеОшибки()); + РезультатВозврата = Ложь; + КонецПопытки; + + Если Не ПустаяСтрока(ИмяФайлаЗапроса) Тогда + Попытка + УдалитьФайлы(ИмяФайлаЗапроса); + Исключение + КонецПопытки; + КонецЕсли; + + Возврат РезультатВозврата; + +КонецФункции + +Функция ЗапросВыполненУспешно(Результат) + + Возврат Результат <> Ложь И Результат <> Неопределено; + +КонецФункции + +Функция ОтветСодержитОшибку(Результат) + + Если ТипЗнч(Результат) <> Тип("Соответствие") Тогда + Возврат Ложь; + КонецЕсли; + + Ошибка = Результат.Получить("error"); + Если ЗначениеЗаполнено(Ошибка) Тогда + Возврат Истина; + КонецЕсли; + + Ошибки = Результат.Получить("errors"); + Если ЗначениеЗаполнено(Ошибки) Тогда + Возврат Истина; + КонецЕсли; + + Успех = Результат.Получить("result"); + Если Успех = Ложь Или Успех = "false" Или Успех = "error" Тогда + Возврат Истина; + КонецЕсли; + + Успех = Результат.Получить("success"); + Если Успех = Ложь Или Успех = "false" Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ТекстОшибкиИзОтвета(Результат) + + Ошибка = Результат.Получить("error"); + Если ЗначениеЗаполнено(Ошибка) Тогда + Возврат Строка(Ошибка); + КонецЕсли; + + Ошибки = Результат.Получить("errors"); + Если ЗначениеЗаполнено(Ошибки) Тогда + Возврат Строка(Ошибки); + КонецЕсли; + + Возврат "УТ11 вернула ошибку записи документа."; + +КонецФункции + +Функция ПодтвержденныеДокументы(Результат, ДокументыКОтправке, СоответствиеПоНомеру) + + Подтвержденные = Новый Массив; + СписокИзОтвета = СписокДокументовИзОтвета(Результат); + Если Не ЗначениеЗаполнено(СписокИзОтвета) Тогда + Возврат Подтвержденные; + КонецЕсли; + + Префикс = СокрЛП(Константы.Префикс.Получить()); + Для Каждого Элемент Из СписокИзОтвета Цикл + Если Не ЭтоСтруктураОтветаУТ(Элемент) Тогда + Продолжить; + КонецЕсли; + Если Не СтатусОтветаЭтоУспешнаяЗапись(Элемент) Тогда + Продолжить; + КонецЕсли; + + НомерИзУТ = НомерИзОтветаУТ(Элемент); + СсылкаДокумента = НайтиДокументПоКлючу(СоответствиеПоНомеру, НомерИзУТ, Префикс); + Если ЗначениеЗаполнено(СсылкаДокумента) И Подтвержденные.Найти(СсылкаДокумента) = Неопределено Тогда + Подтвержденные.Добавить(СсылкаДокумента); + КонецЕсли; + КонецЦикла; + + Возврат Подтвержденные; + +КонецФункции + +Функция СписокДокументовИзОтвета(Результат) + + Если ТипЗнч(Результат) = Тип("Соответствие") Тогда + СписокИзОтвета = Результат.Получить("docs"); + Если СписокИзОтвета = Неопределено Тогда + СписокИзОтвета = Результат.Получить("ids"); + КонецЕсли; + Возврат СписокИзОтвета; + ИначеЕсли ТипЗнч(Результат) = Тип("Массив") Тогда + Возврат Результат; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Процедура СообщитьОшибкиЗаписиУТ(Результат, Сообщения) + + СписокИзОтвета = СписокДокументовИзОтвета(Результат); + Если Не ЗначениеЗаполнено(СписокИзОтвета) Тогда + Возврат; + КонецЕсли; + + Для Каждого Элемент Из СписокИзОтвета Цикл + Если Не ЭтоСтруктураОтветаУТ(Элемент) Тогда + Продолжить; + КонецЕсли; + Если СтатусОтветаЭтоУспешнаяЗапись(Элемент) Тогда + Продолжить; + КонецЕсли; + СтатусУТ = СокрЛП(Строка(ЗначениеПоляОтвета(Элемент, "status"))); + Если Не ПустаяСтрока(СтатусУТ) Тогда + ДобавитьСообщение(Сообщения, "УТ11: " + Строка(НомерИзОтветаУТ(Элемент)) + " — " + СтатусУТ); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ЭтоСтруктураОтветаУТ(Элемент) + + Возврат ТипЗнч(Элемент) = Тип("Соответствие") Или ТипЗнч(Элемент) = Тип("Структура"); + +КонецФункции + +Функция ЗначениеПоляОтвета(Элемент, ИмяПоля) + + Если ТипЗнч(Элемент) = Тип("Соответствие") Тогда + Возврат Элемент.Получить(ИмяПоля); + ИначеЕсли ТипЗнч(Элемент) = Тип("Структура") Тогда + Если Элемент.Свойство(ИмяПоля) Тогда + Возврат Элемент[ИмяПоля]; + КонецЕсли; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Функция НомерИзОтветаУТ(Элемент) + + Если Не ЭтоСтруктураОтветаУТ(Элемент) Тогда + Возврат Неопределено; + КонецЕсли; + + НомерИзУТ = ЗначениеПоляОтвета(Элемент, "docnom"); + Если НомерИзУТ = Неопределено Тогда + НомерИзУТ = ЗначениеПоляОтвета(Элемент, "id"); + КонецЕсли; + Если НомерИзУТ = Неопределено Тогда + НомерИзУТ = ЗначениеПоляОтвета(Элемент, "number"); + КонецЕсли; + + Возврат НомерИзУТ; + +КонецФункции + +Функция СтатусОтветаСтрокой(Элемент) + + Возврат НРег(СокрЛП(Строка(ЗначениеПоляОтвета(Элемент, "status")))); + +КонецФункции + +Функция СтатусОтветаЭтоУспешнаяЗапись(Элемент) + + СтатусУТ = СтатусОтветаСтрокой(Элемент); + Возврат СтатусУТ = "отправлен" Или СтатусУТ = "sent" Или СтатусУТ = "ok"; + +КонецФункции + +Функция СтатусПоОтветуУТ(Док) + + Если Не ЭтоСтруктураОтветаУТ(Док) Тогда + Возврат Неопределено; + КонецЕсли; + + Если ЗначениеЗаполнено(ЗначениеПоляОтвета(Док, "error")) Тогда + Возврат Перечисления.Status.ОшибкаВывода; + КонецЕсли; + + СтатусУТ = СтатусОтветаСтрокой(Док); + Если ПустаяСтрока(СтатусУТ) Тогда + Возврат Неопределено; + КонецЕсли; + + Если СтатусУТ = "выведен из оборота" Или СтатусУТ = "выведенизоборота" Тогда + Возврат Перечисления.Status.ВыведенИзОборота; + КонецЕсли; + + Если СтатусУТ = "отправлен" Или СтатусУТ = "sent" Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат Перечисления.Status.ОшибкаВывода; + +КонецФункции + +Функция НомерДокументаСтрокой(Номер) + + Возврат Формат(Номер, "ЧГ=0"); + +КонецФункции + +Функция НомерДокументаЧислом(Номер) + + Если ТипЗнч(Номер) = Тип("Число") Тогда + Возврат Номер; + КонецЕсли; + + СтрокаНомера = СокрЛП(Строка(Номер)); + СтрокаНомера = СтрЗаменить(СтрокаНомера, Символы.НПП, ""); + СтрокаНомера = СтрЗаменить(СтрокаНомера, " ", ""); + + Префикс = СокрЛП(Константы.Префикс.Получить()); + Если Не ПустаяСтрока(Префикс) И ВРег(Лев(СтрокаНомера, СтрДлина(Префикс))) = ВРег(Префикс) Тогда + СтрокаНомера = СокрЛП(Сред(СтрокаНомера, СтрДлина(Префикс) + 1)); + КонецЕсли; + Если Лев(СтрокаНомера, 1) = "-" Тогда + СтрокаНомера = СокрЛП(Сред(СтрокаНомера, 2)); + КонецЕсли; + + Цифры = ""; + Для Индекс = 1 По СтрДлина(СтрокаНомера) Цикл + Символ = Сред(СтрокаНомера, Индекс, 1); + Если СтрНайти("0123456789", Символ) > 0 Тогда + Цифры = Цифры + Символ; + КонецЕсли; + КонецЦикла; + + Если ПустаяСтрока(Цифры) Тогда + Возврат Неопределено; + КонецЕсли; + + Попытка + Возврат Число(Цифры); + Исключение + Возврат Неопределено; + КонецПопытки; + +КонецФункции + +Процедура ДобавитьКлючиПоискаДокумента(СоответствиеПоНомеру, СсылкаДокумента, Номер, Префикс) + + НомерСтрокой = НомерДокументаСтрокой(Номер); + СоответствиеПоНомеру.Вставить(НомерСтрокой, СсылкаДокумента); + СоответствиеПоНомеру.Вставить(XMLСтрока(Номер), СсылкаДокумента); + + Если Не ПустаяСтрока(Префикс) Тогда + СоответствиеПоНомеру.Вставить(Префикс + НомерСтрокой, СсылкаДокумента); + СоответствиеПоНомеру.Вставить(Префикс + "-" + НомерСтрокой, СсылкаДокумента); + СоответствиеПоНомеру.Вставить(Префикс + Прав("0000000000" + НомерСтрокой, 10), СсылкаДокумента); + СоответствиеПоНомеру.Вставить(Префикс + "-" + Прав("0000000000" + НомерСтрокой, 10), СсылкаДокумента); + КонецЕсли; + +КонецПроцедуры + +Функция НайтиДокументПоКлючу(СоответствиеПоНомеру, НомерИзУТ, Префикс) + + Если НомерИзУТ = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Ключи = Новый Массив; + Ключи.Добавить(СокрЛП(Строка(НомерИзУТ))); + Ключи.Добавить(НомерДокументаСтрокой(НомерИзУТ)); + + НомерЧисло = НомерДокументаЧислом(НомерИзУТ); + Если НомерЧисло <> Неопределено Тогда + Ключи.Добавить(НомерДокументаСтрокой(НомерЧисло)); + Если Не ПустаяСтрока(Префикс) Тогда + НомерКакВУТ = НомерДокументаСтрокой(НомерЧисло); + Ключи.Добавить(Префикс + НомерКакВУТ); + Ключи.Добавить(Префикс + "-" + НомерКакВУТ); + Ключи.Добавить(Префикс + Прав("0000000000" + НомерКакВУТ, 10)); + Ключи.Добавить(Префикс + "-" + Прав("0000000000" + НомерКакВУТ, 10)); + КонецЕсли; + КонецЕсли; + + Для Каждого Ключ Из Ключи Цикл + Если Не ЗначениеЗаполнено(Ключ) Тогда + Продолжить; + КонецЕсли; + СсылкаДокумента = СоответствиеПоНомеру.Получить(Ключ); + Если ЗначениеЗаполнено(СсылкаДокумента) Тогда + Возврат СсылкаДокумента; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +Процедура ДобавитьСообщение(Сообщения, Текст) + + Если Сообщения = Неопределено Или Не ЗначениеЗаполнено(Текст) Тогда + Возврат; + КонецЕсли; + + Сообщения.Добавить(Текст); + +КонецПроцедуры + +Функция ТекстИзСообщений(Сообщения) + + Результат = ""; + Для Каждого СтрокаСообщения Из Сообщения Цикл + Если Не ПустаяСтрока(Результат) Тогда + Результат = Результат + Символы.ПС; + КонецЕсли; + Результат = Результат + СтрокаСообщения; + КонецЦикла; + + Возврат Результат; + +КонецФункции 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..8fd5907 --- /dev/null +++ b/CommonModules/ФорматноЛогическийКонтроль/Ext/Module.bsl @@ -0,0 +1,1427 @@ + +#Область ПрограммныйИнтерфейс + +// Выполняет проверку правильности заполнения тегов в соответствии с ФФД +// +// Параметры: +// ДанныеЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Не обязательный +// Ошибки - Массив из строка - Строки ошибок по результатам контроля +// ИсправленыОсновныеПараметры - Булево +// +// Возвращаемое значение: +// Булево. +Функция ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов(ДанныеЧека, ИдентификаторУстройства, Ошибки = Неопределено, ИсправленыОсновныеПараметры = Неопределено) Экспорт + + Результат = Ложь; + Проверка = ПараметрыПроверки(); + Если Не ЗначениеЗаполнено(ИдентификаторУстройства) Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Не выбрано устройство'")); + Ошибки = Проверка.Ошибки; + Возврат Результат; + КонецЕсли; + + ПривестиДанныеКТребуемомуФормату(ДанныеЧека, ИсправленыОсновныеПараметры); + + СтруктураДанныхФЛК = СтруктураДанныхФорматноЛогическогоКонтроля(ИдентификаторУстройства); + ПараметрыРегистрации = ОборудованиеЧекопечатающиеУстройства.ПараметрыРегистрацииУстройства(ИдентификаторУстройства); + Проверка.ВерсияФФД = СтруктураДанныхФЛК.ФорматФД; + ДанныеЧека.Вставить("ФорматФД", СтруктураДанныхФЛК.ФорматФД); + ЗаполнитьЗначенияСвойств(Проверка, + ОбщегоНазначенияБПО.ЗначенияРеквизитовОбъекта(ИдентификаторУстройства, "ИспользуетсяФН36, ТипОборудования")); + + ПроверитьРеквизит(Проверка, ПараметрыРегистрации, "АдресРасчетов"); + ПроверитьРеквизит(Проверка, ПараметрыРегистрации, "МестоРасчетов", "1.05, 1.1, 1.2"); + ПроверитьРеквизит(Проверка, ДанныеЧека, "ОрганизацияНазвание"); + ПроверитьРеквизит(Проверка, ДанныеЧека, "ОрганизацияИНН"); + ПроверитьРеквизит(Проверка, ДанныеЧека, "ТипРасчета"); + ПроверитьРеквизит(Проверка, ДанныеЧека, "СистемаНалогообложения"); + ПроверитьРеквизит(Проверка, ДанныеЧека, "Кассир"); + ПроверитьДлинуРеквизита(Проверка, ДанныеЧека, "Кассир", 64); + ПроверитьРеквизитИНН (Проверка, ДанныеЧека, "КассирИНН"); + ПроверитьСведенияОПокупателе(Проверка, ДанныеЧека); + ПроверитьКодыНалогообложения(Проверка, ДанныеЧека, ПараметрыРегистрации.КодыСистемыНалогообложения); + ПроверитьЭлектронныйЧек(Проверка, ДанныеЧека); + + СуммыПозиций = ПараметрыСуммыПозиций(); + СуммыОплат = ПараметрыСуммыОплат(); + Для Каждого Позиция Из ДанныеЧека.ПозицииЧека Цикл + УвеличитьНомерПозиции(Проверка); + Если Позиция.Свойство("ФискальнаяСтрока") Тогда + ПроверитьРеквизит(Проверка, Позиция, "Количество"); + ПроверитьРеквизит(Проверка, Позиция, "СтавкаНДС"); + ПроверитьРеквизит(Проверка, Позиция, "ПризнакСпособаРасчета", "1.05, 1.1, 1.2"); + ПроверитьРеквизит(Проверка, Позиция, "ПризнакПредметаРасчета", "1.1, 1.2"); + ПроверитьДанныеАгента(Проверка, ДанныеЧека, Позиция); + ПроверитьДанныеПоставщика(Проверка, ДанныеЧека, Позиция); + ПроверитьКодТовараИдентифицируетЭкземпляр(Проверка, Позиция); + ВычислитьСуммыПозиций(СуммыПозиций, Позиция); + ОпределитьСтавкиНДС18И20(Проверка, Позиция); + + ПреобразоватьПризнакПредметаРасчета(Проверка, Позиция); + КонецЕсли; + КонецЦикла; + Для Каждого ЭлементОплаты Из ДанныеЧека.ТаблицаОплат Цикл + ПроверитьРеквизит(Проверка, ЭлементОплаты, "ТипОплаты"); + ВычислитьСуммыОплат(СуммыОплат, ЭлементОплаты); + КонецЦикла; + ВычислитьСуммуНаличныеБезСдачи(СуммыПозиций, СуммыОплат); + ПроверитьСуммыОплат(Проверка, СуммыПозиций, СуммыОплат); + ПроверитьКорректностьНДС18И20(Проверка); + + ПреобразоватьСистемуНалогообложения(Проверка, ДанныеЧека); + + Результат = Проверка.Ошибки.Количество() > 0; + Ошибки = СтрСоединить(Проверка.Ошибки, Символы.ПС); + + Возврат Результат; + +КонецФункции + +// Выполняет корректировку данных чека +// +// Параметры: +// ДанныеЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ИсправленыОсновныеПараметры - Булево +// +Процедура ПривестиДанныеКТребуемомуФормату(ДанныеЧека, ИсправленыОсновныеПараметры) Экспорт + + Если ДанныеЧека.ИндивидуальныйРежимПодготовкиДанныхКПередачеВОФД Тогда + Возврат; + КонецЕсли; + + Если ДанныеЧека.СпособФорматноЛогическогоКонтроля = Перечисления.СпособыФорматноЛогическогоКонтроля.НеКонтролировать Тогда + Возврат; + КонецЕсли; + + СуммыПозиций = ПараметрыСуммыПозиций(); + НужноПривестиСуммы = Ложь; + ИсправленыОсновныеПараметры = Ложь; + Для Каждого Позиция Из ДанныеЧека.ПозицииЧека Цикл + Если Позиция.Свойство("ФискальнаяСтрока") Тогда + + ПривестиЕслиСпособРасчетаБезПередачиТовара(Позиция, ИсправленыОсновныеПараметры); + ПривестиСтавкиНДС(Позиция); + ВычислитьСуммыПозиций(СуммыПозиций, Позиция); + + ПризнакСпособаРасчета = Позиция.ПризнакСпособаРасчета; + Если ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаЧастичная + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ОплатаКредита Тогда + НужноПривестиСуммы = Истина; + КонецЕсли; + + КонецЕсли; + КонецЦикла; + + Если НужноПривестиСуммы Тогда + СуммыОплат = ПараметрыСуммыОплат(); + Для Каждого СтрокаОплат Из ДанныеЧека.ТаблицаОплат Цикл + ВычислитьСуммыОплат(СуммыОплат, СтрокаОплат); + КонецЦикла; + ВычислитьСуммуНаличныеБезСдачи(СуммыПозиций, СуммыОплат); + ПривестиСуммыПозицийЧекаКСуммеТаблицыОплат(ДанныеЧека, СуммыПозиций, СуммыОплат); + КонецЕсли; + +КонецПроцедуры + +// Определяет требуется ли выполнить корректировку сумм в позициях чека +// +// Параметры: +// ДанныеЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// +// Возвращаемое значение: +// Булево +// +Функция НуженФорматноЛогическийКонтроль(ДанныеЧека) Экспорт + + СтандартнаяОбработка = Истина; + ПереопределяемыйРезультат = ФорматноЛогическийКонтрольПереопределяемый.НуженФорматноЛогическийКонтроль(ДанныеЧека, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + Возврат ПереопределяемыйРезультат; + КонецЕсли; + + Если (НЕ ЗначениеЗаполнено(ДанныеЧека.СпособФорматноЛогическогоКонтроля)) + ИЛИ ДанныеЧека.СпособФорматноЛогическогоКонтроля = Перечисления.СпособыФорматноЛогическогоКонтроля.НеКонтролировать Тогда + Возврат Ложь; + КонецЕсли; + + ДопустимоеРасхождение = ДанныеЧека.ДопустимоеРасхождениеФорматноЛогическогоКонтроля; + + Для Каждого ТекущаяПозиция Из ДанныеЧека.ПозицииЧека Цикл + Если Не ТекущаяПозиция.Свойство("ФискальнаяСтрока") Тогда + Продолжить; + КонецЕсли; + + Количество = ?(ТекущаяПозиция.Количество = 0, 1, ТекущаяПозиция.Количество); + Если Количество = 1 Тогда + Если ТекущаяПозиция.ЦенаСоСкидками <> ТекущаяПозиция.Сумма Тогда + Возврат Истина; + КонецЕсли; + Иначе + Если Окр(ТекущаяПозиция.ЦенаСоСкидками * Количество, 2, 1) <> ТекущаяПозиция.Сумма Тогда + Сумма = ТекущаяПозиция.Сумма; + // Умножаем входящее количество на заданную цену и получаем новую промежуточную сумму. + // Сумму НЕ округляем - Требования АСК ККТ ФНС РФ. + НоваяСуммаБезОкругления = Количество * ТекущаяПозиция.ЦенаСоСкидками; + // Вычисляем разницу между промежуточной и входящей суммой. + РазницаСумм = НоваяСуммаБезОкругления - Сумма; + // Если разница допустима - оставляем одну строку. + // Если разницы нет - оставляем одну строку. + Если РазницаСумм >= -ДопустимоеРасхождение И РазницаСумм <= ДопустимоеРасхождение Тогда + // Дополнительно получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество. + // Цену округляем. + РасчетнаяЦена = Окр(Сумма / Количество, 2, 1); + Если ТекущаяПозиция.ЦенаСоСкидками <> РасчетнаяЦена Тогда + // Но. Если цена не совпадает с расчетной - все равно надо ее пересчитывать. + Возврат Истина; + КонецЕсли; + Иначе + // Надо разделять строку. + Возврат Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Выполняет проверку сумм фискальных строк, осуществляя форматно-логический контроль чека. +// Функция переопределяется методом ФорматноЛогическийКонтрольКлиентСерверПереопределяемый.ПровестиФорматноЛогическийКонтроль. +// +// Параметры: +// ДанныеЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Не обязательный +// Если заполнено оборудование и не заполнен способ контроля в общих параметрах, +// то способ контроля и допустимое расхождение получаются из подключаемого оборудования. +// +Процедура ПровестиФорматноЛогическийКонтроль(ДанныеЧека, ИдентификаторУстройства = Неопределено) Экспорт + + СтандартнаяОбработка = Истина; + ФорматноЛогическийКонтрольПереопределяемый.ПровестиФорматноЛогическийКонтроль(ДанныеЧека, СтандартнаяОбработка, ИдентификаторУстройства); + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + Если Не НуженФорматноЛогическийКонтроль(ДанныеЧека) Тогда + Возврат; + КонецЕсли; + + СпособФорматноЛогическогоКонтроля = ДанныеЧека.СпособФорматноЛогическогоКонтроля; + ДопустимоеРасхождение = ДанныеЧека.ДопустимоеРасхождениеФорматноЛогическогоКонтроля; + + Если СпособФорматноЛогическогоКонтроля = Неопределено И ИдентификаторУстройства <> Неопределено Тогда + СтруктураДанныхФЛК = СтруктураДанныхФорматноЛогическогоКонтроля(ИдентификаторУстройства); + ДопустимоеРасхождение = СтруктураДанныхФЛК.ДопустимоеРасхождениеФорматноЛогическогоКонтроля; + СпособФорматноЛогическогоКонтроля = СтруктураДанныхФЛК.СпособФорматноЛогическогоКонтроля; + КонецЕсли; + + Если ЗначениеЗаполнено(СпособФорматноЛогическогоКонтроля) Тогда + НовыеПозицииЧека = Новый Массив; + Если СпособФорматноЛогическогоКонтроля = Перечисления.СпособыФорматноЛогическогоКонтроля.НеКонтролировать Тогда + Возврат; + ИначеЕсли СпособФорматноЛогическогоКонтроля = Перечисления.СпособыФорматноЛогическогоКонтроля.ЗачитыватьСуммы Тогда + ПривестиПозицииЧекаПоАлгоритмуЗачитыватьСуммы(ДанныеЧека.ПозицииЧека, НовыеПозицииЧека, ДопустимоеРасхождение); + ДанныеЧека.ПозицииЧека = НовыеПозицииЧека; + ИначеЕсли СпособФорматноЛогическогоКонтроля = Перечисления.СпособыФорматноЛогическогоКонтроля.РазделятьСтроки Тогда + ПривестиПозицииЧекаПоАлгоритмуРазделятьСтроки(ДанныеЧека.ПозицииЧека, НовыеПозицииЧека, ДопустимоеРасхождение); + ДанныеЧека.ПозицииЧека = НовыеПозицииЧека; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Структура данных форматно-логического контроля +// +// Параметры: +// ПодключаемоеОборудование - СправочникСсылка.ПодключаемоеОборудование - Устройство, фискализирующее чек +// +// Возвращаемое значение: +// Структура - Структура данных форматно логического контроля: +// * СпособФорматноЛогическогоКонтроля - Неопределено +// - ПеречислениеСсылка.СпособыФорматноЛогическогоКонтроля +// * ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число - +// * ФорматФД - Строка - +// +Функция СтруктураДанныхФорматноЛогическогоКонтроля(ПодключаемоеОборудование) Экспорт + + ФорматФД = "1.0"; + + ВозвращаемаяСтруктура = Новый Структура; + ВозвращаемаяСтруктура.Вставить("СпособФорматноЛогическогоКонтроля" , Неопределено); + ВозвращаемаяСтруктура.Вставить("ДопустимоеРасхождениеФорматноЛогическогоКонтроля", 0.01); + ВозвращаемаяСтруктура.Вставить("ФорматФД", ФорматФД); + + СтандартнаяОбработка = Истина; + ФорматноЛогическийКонтрольПереопределяемый.ПолучитьСтруктуруДанныхФорматноЛогическогоКонтроля(ПодключаемоеОборудование, ВозвращаемаяСтруктура, СтандартнаяОбработка); + + Если Не СтандартнаяОбработка Тогда + Возврат ВозвращаемаяСтруктура; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПодключаемоеОборудование.ДопустимоеРасхождениеФорматноЛогическогоКонтроля КАК ДопустимоеРасхождениеФорматноЛогическогоКонтроля, + | ПодключаемоеОборудование.СпособФорматноЛогическогоКонтроля КАК СпособФорматноЛогическогоКонтроля, + | ПодключаемоеОборудованиеПараметрыРегистрации.ЗначениеПараметра КАК ФорматФД + |ИЗ + | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодключаемоеОборудование.ПараметрыРегистрации КАК ПодключаемоеОборудованиеПараметрыРегистрации + | ПО ПодключаемоеОборудование.Ссылка = ПодключаемоеОборудованиеПараметрыРегистрации.Ссылка + | И (ПодключаемоеОборудованиеПараметрыРегистрации.Ссылка = &Ссылка) + | И (ПодключаемоеОборудованиеПараметрыРегистрации.НаименованиеПараметра = ""ВерсияФФДККТ"") + |ГДЕ + | ПодключаемоеОборудование.Ссылка = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", ПодключаемоеОборудование); + + Результат = Запрос.Выполнить(); + Если Не Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + ВозвращаемаяСтруктура.ФорматФД = Выборка.ФорматФД; + ВозвращаемаяСтруктура.СпособФорматноЛогическогоКонтроля = Выборка.СпособФорматноЛогическогоКонтроля; + ВозвращаемаяСтруктура.ДопустимоеРасхождениеФорматноЛогическогоКонтроля = Выборка.ДопустимоеРасхождениеФорматноЛогическогоКонтроля; + КонецЕсли; + + Возврат ВозвращаемаяСтруктура; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Возвращает структуру проверки форматно-логического контроля +// +// Возвращаемое значение: +// Структура: +// * ВерсияФФД - Строка - Версия формата, по которому выполнять проверку +// * ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования +// * ИспользуетсяФН36 - Булево - +// * НДС18 - Булево - +// * НДС20 - Булево - +// * Ошибки - Массив из Строка - строки содержащие описание найденных ошибок +// * НомерПозиции - Число - номер проверяемой позиции в чеке +// +Функция ПараметрыПроверки() + Параметры = Новый Структура; + Параметры.Вставить("ВерсияФФД", "1.2"); + Параметры.Вставить("ТипОборудования", Перечисления.ТипыПодключаемогоОборудования.ПустаяСсылка()); + Параметры.Вставить("ИспользуетсяФН36", Ложь); + Параметры.Вставить("НДС18", Ложь); + Параметры.Вставить("НДС20", Ложь); + Параметры.Вставить("Ошибки", Новый Массив); // Массив из Строка + Параметры.Вставить("НомерПозиции",0); + Возврат Параметры; +КонецФункции + +// Скопировать структуру. +// +// Параметры: +// Данные - Произвольный, Структура - Текущая позиция +// +// Возвращаемое значение: +// Структура +// +Функция СкопироватьСтруктуру(Данные) + + НоваяСтруктура = Новый Структура; + Для Каждого ЭлементСтруктуры Из Данные Цикл + НоваяСтруктура.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); + КонецЦикла; + + Возврат НоваяСтруктура; + +КонецФункции + +// Функция сортирует массив фискальных строк +// +// Параметры: +// МассивФискальныхСтрок - Массив из см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ИмяРеквизита - Строка +Процедура СортироватьМассивФискальныхСтрок(МассивФискальныхСтрок, ИмяРеквизита = "СтрокаПоследнегоТовара") + + МаксимальныйИндекс = МассивФискальныхСтрок.ВГраница(); + Если МаксимальныйИндекс >= 0 Тогда + // Начинаем со второго элемента. + Для ТекущийИндекс = 1 По МаксимальныйИндекс Цикл + ТекущаяСтрока = МассивФискальныхСтрок[ТекущийИндекс]; + НоваяТекущаяСтрока = СкопироватьСтруктуру(ТекущаяСтрока); + НовыйИндексТекущейСтроки = -1; + Для ОбратныйСчетчик = 1 По ТекущийИндекс Цикл + ПредыдущаяСтрока = МассивФискальныхСтрок[ТекущийИндекс - ОбратныйСчетчик]; + Если ПредыдущаяСтрока[ИмяРеквизита] > ТекущаяСтрока[ИмяРеквизита] Тогда + НоваяПредыдущаяСтрока = СкопироватьСтруктуру(ПредыдущаяСтрока); + + НовыйИндексТекущейСтроки = ТекущийИндекс - ОбратныйСчетчик; + МассивФискальныхСтрок.Удалить(НовыйИндексТекущейСтроки + 1); + МассивФискальныхСтрок.Вставить(НовыйИндексТекущейСтроки + 1, НоваяПредыдущаяСтрока); + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + Если НовыйИндексТекущейСтроки >=0 Тогда + МассивФискальныхСтрок.Удалить(НовыйИндексТекущейСтроки); + МассивФискальныхСтрок.Вставить(НовыйИндексТекущейСтроки, НоваяТекущаяСтрока); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +#Область СпециальныеПроверки + +// Выполняет проверку кода налогообложения в данных чека +// +// Параметры: +// Проверка - см. ПараметрыПроверки. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ДоступныеКодыСистемыНалогообложения - Строка +// +Процедура ПроверитьКодыНалогообложения(Проверка, Данные, ДоступныеКодыСистемыНалогообложения) + + Если Проверка.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ Тогда + // Проверка системы налогообложения + КодыНалогообложения = СтрРазделить(ДоступныеКодыСистемыНалогообложения, ","); + СистемаНалогообложения = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодСистемыНалогообложенияККТ(Данные.СистемаНалогообложения); + Если КодыНалогообложения.Найти(Строка(СистемаНалогообложения)) = Неопределено Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'ККТ не зарегистрирована с указанной системой налогообложения.'")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Выполняет проверку реквизитов для электронного чека +// +// Параметры: +// Проверка - см. ПараметрыПроверки. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// +Процедура ПроверитьЭлектронныйЧек(Проверка, Данные) + + // Электронный чек + Если Данные.Электронно + И (ПустаяСтрока(Данные.ПокупательEmail) Или ПустаяСтрока(Данные.ПокупательНомер)) Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Для электронного чека нужно указать либо Email, либо телефон.'")); + КонецЕсли; + + Если Данные.Отправляет1СEmail И ПустаяСтрока(Данные.ПокупательEmail) Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Не заполнен E-mail'")); + КонецЕсли; + + Если Данные.Отправляет1СSMS И НЕ ЗначениеЗаполнено(Данные.ПокупательНомер) Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Не заполнен номер телефона'")); + КонецЕсли; + +КонецПроцедуры + +// Выполняет проверку сведений о покупателе в данных чека +// +// Параметры: +// Проверка - см. ПараметрыПроверки. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// +Процедура ПроверитьСведенияОПокупателе(Проверка, Данные) + + // при формате 1.05 реквизит необязателен + Если ВерсияФФД(Проверка, "1.05") Тогда + Возврат; + КонецЕсли; + + СведенияОПокупателе = Данные.СведенияОПокупателе; + Если ПустаяСтрока(Данные.Получатель) И ПустаяСтрока(СведенияОПокупателе.Покупатель) Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Данные.ПолучательИНН) Или ЗначениеЗаполнено(СведенияОПокупателе.ПокупательИНН) Тогда + Возврат; + КонецЕсли; + + Если Данные.ЕстьПерсональныеДанные Тогда + ПерсональныеДанные = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПерсональныеДанныеПокупателя(); + ТипПерсональныхДанных = Данные.ТипПерсональныхДанных; + + МенеджерОборудованияВызовСервераПереопределяемый.ОбработкаЗаполненияПерсональныхДанных( + ПерсональныеДанные, + Данные.СубъектПерсональныхДанных, + ТипПерсональныхДанных, + ?(ПустаяСтрока(Данные.ДатаВремя), ОбщегоНазначенияБПО.ДатаСеанса(), Данные.ДатаВремя)); + + Если ТипПерсональныхДанных = Перечисления.ТипыПерсональныхДанныхККТ.ИНН И ЗначениеЗаполнено(ПерсональныеДанные.ИНН) Тогда + Возврат; + ИначеЕсли ТипПерсональныхДанных = Перечисления.ТипыПерсональныхДанныхККТ.ПаспортныеДанные + И ЗначениеЗаполнено(ПерсональныеДанные.ДатаРождения) + И ЗначениеЗаполнено(ПерсональныеДанные.ВидДокумента) + И ЗначениеЗаполнено(ПерсональныеДанные.ДанныеДокумента) Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Проверка.Ошибки.Добавить(НСтр("ru = 'Не указан ИНН или дата рождения и реквизиты документа удостоверяющего личность покупателя.'")); + +КонецПроцедуры + +// Выполняет проверку кода товара позволяющий идентифицировать экземпляр товара +// +// Параметры: +// Проверка - см. ПараметрыПроверки. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека +// +Процедура ПроверитьКодТовараИдентифицируетЭкземпляр(Проверка, Данные) + + Если Данные.Количество > 1 Тогда + Если ОбщегоНазначенияБПО.ИспользуетсяМаркировка() Тогда + РеквизитКодаТовара = Данные.ДанныеКодаТоварнойНоменклатуры.РеквизитКодаТовара; + МодульМенеджерОборудованияМаркировка = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировка"); + КодТовараИдентифицируетЭкземпляр = МодульМенеджерОборудованияМаркировка.КодТовараИдентифицируетЭкземпляр(РеквизитКодаТовара, Данные.Штрихкод); + Если КодТовараИдентифицируетЭкземпляр Тогда + Проверка.Ошибки.Добавить( + СтрШаблон(НСтр("ru = 'Код товара содержит в своем составе код, позволяющий идентифицировать экземпляр товара. Количество должно иметь значение равное единице в строке №%1.'"), + Формат(Проверка.НомерПозиции, "ЧГ=0"))); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Выполняет проверку заполнения данных агента +// +// Параметры: +// Проверка - см. ПараметрыПроверки. +// ДанныеЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// Позиция - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека +// +Процедура ПроверитьДанныеАгента(Проверка, ДанныеЧека, Позиция) + + Если ЗаполненРеквизит(Проверка, Позиция, "ПризнакАгентаПоПредметуРасчета") Тогда + МассивДанных = Новый Массив(); + МассивДанных.Добавить(ДанныеЧека); + МассивДанных.Добавить(Позиция); + ШаблонОшибки = НСтр("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 = 'Необходимо указать оплату'")); + КонецЕсли; + +КонецПроцедуры + +// Определяет есть ли в позиции чека ставки НДС 18 и 20 процентов +// +// Параметры: +// Проверка - см. ПараметрыПроверки. +// Позиция - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыФискальнойСтрокиЧека +// +Процедура ОпределитьСтавкиНДС18И20(Проверка, Позиция) + + Проверка.НДС18 = Проверка.НДС18 Или Позиция.СтавкаНДС = 18 Или Позиция.СтавкаНДС = 118; + Проверка.НДС20 = Проверка.НДС20 Или Позиция.СтавкаНДС = 20 Или Позиция.СтавкаНДС = 120; + +КонецПроцедуры + +// Определяет корректность ставок НДС 18 и 20 процентов +// +// Параметры: +// Проверка - см. ПараметрыПроверки. +// +Процедура ПроверитьКорректностьНДС18И20(Проверка) + + Если Проверка.НДС18 И Проверка.НДС20 Тогда + Проверка.Ошибки.Добавить(НСтр("ru = 'Ставки НДС 20% и НДС 18% в одном чеке не допустимы.'")); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПроцедурыИФункцииДляПриведенияКФормату + +Процедура ПривестиЕслиСпособРасчетаБезПередачиТовара(Позиция, ИсправленыОсновныеПараметры) + + ПризнакСпособаРасчета = Позиция.ПризнакСпособаРасчета; + Если ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаЧастичная + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ОплатаКредита + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.Аванс + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаПолная Тогда + Позиция.ЕдиницаИзмерения = "Платеж"; + Позиция.Количество = 1; + Позиция.Цена = Позиция.Сумма; + Позиция.ЦенаСоСкидками = Позиция.Сумма; + Позиция.СуммаСкидок = 0; + Позиция.ПризнакПредметаРасчета = Перечисления.ПризнакиПредметаРасчета.ПлатежВыплата; + ИсправленыОсновныеПараметры = Истина; + КонецЕсли; + +КонецПроцедуры + +Процедура ПривестиСтавкиНДС(Позиция) + + ПризнакСпособаРасчета = Позиция.ПризнакСпособаРасчета; + Если ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаЧастичная + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.Аванс + Или ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПредоплатаПолная Тогда + Если Позиция.СтавкаНДС = 18 Или Позиция.СтавкаНДС = 10 Или Позиция.СтавкаНДС = 20 Тогда + Позиция.СтавкаНДС = 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 не заполнен.'"), ШаблонОшибки); + Проверка.Ошибки.Добавить(ТекстОшибки(ШаблонОшибки, ИмяРеквизита, Проверка.НомерПозиции)); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьРеквизитВМассивеДанных(Проверка, МассивДанных, Знач ИмяРеквизита = Неопределено, Знач ВерсииФФД = Неопределено, Знач ШаблонОшибки = Неопределено) + + РеквизитЗаполнен = Ложь; + Для Каждого Данные Из МассивДанных Цикл + Значение = Неопределено; + Если ЕстьРеквизит(Проверка, Данные, ИмяРеквизита, Значение) И ЗначениеЗаполнено(Значение) Тогда + РеквизитЗаполнен = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если Не РеквизитЗаполнен Тогда + ШаблонОшибки = ?(ШаблонОшибки = Неопределено, + НСтр("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..29e6e8a --- /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..4ac558c --- /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..d8ef78e --- /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..0d9d908 --- /dev/null +++ b/CommonModules/ФорматноЛогическийКонтрольКлиентСерверПереопределяемый/Ext/Module.bsl @@ -0,0 +1,69 @@ + +#Область ПрограммныйИнтерфейс + +#Область УстаревшиеПроцедурыИФункции + +// Устарела: следует использовать ФорматноЛогическийКонтрольПереопределяемый.ПровестиФорматноЛогическийКонтроль. +// Функция переопределяет типовой форматно-логический контроль чека. +// Параметры: +// ОбщиеПараметры - Структура - структура, полученная ранее методом ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека, +// и заполненная данными чека. +// Содержит параметры для контроля: +// СпособФорматноЛогическогоКонтроля - ПеречислениеСсылка.СпособыФорматноЛогическогоКонтроля - если не заполнена, то контроль не выполняется, +// ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число - по умолчанию установленное 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..ab6c53a --- /dev/null +++ b/CommonModules/ШаблоныФискальныхДокументов/Ext/Module.bsl @@ -0,0 +1,768 @@ +#Область ПрограммныйИнтерфейс + +#Область ФорматыВывода + +// Возвращает формат для строки шаблона. +// +// Параметры: +// БазовыйФормат - см. НовыйФормат. +// +// Возвращаемое значение: +// Структура: +// * Тип - Строка - тип строки шаблона: Строка, Разделитель, Штрихкод, XML. +// * Выравнивание - ГоризонтальноеПоложение. +// * ВыравниваниеЗаголовка - Булево - Истина - выравнивать заголовок вместе с текстом, иначе Ложь. +// * ОбтеканиеСлева - Булево - Истина - выполнять обтекание слева. +// * ОбтеканиеСправа - Булево - Истина - выполнять обтекание справа. +// * Ширина - Строка - ширина колонки в символах или процентах: +// "10" - 10 символов; +// "40%" - 40% от строки; +// "*" - автоматически попытаться полностью поместить в колонку; +// "0", "" - распределить поровну оставшееся место в строке. +// * Заполнитель - Строка - символ заполнитель строки между заголовком и полем, по умолчанию " ". +// * ВыводитьЗаголовок - Булево - принудительно выводить заголовок даже если значение не установлено. +// * ПодавлятьПробелы - Булево - удалять пробелы в строке. +// * ШтрихкодТип - Строка - тип штрихкода: "EAN13", "QR". +// * ШтрихкодВысота - Число - высота штрихкода в строках. +// * ЭлементXML - Структура. +// * ИмяАтрибутаXML - Строка. +// +Функция НовыйФормат(БазовыйФормат = Неопределено) Экспорт + + Выравнивание = ГоризонтальноеПоложение.Лево; // ГоризонтальноеПоложение + Формат = Новый Структура(); + Формат.Вставить("Тип", "СТРОКА"); + Формат.Вставить("Выравнивание", Выравнивание); + Формат.Вставить("ВыравниваниеЗаголовка", Ложь); + Формат.Вставить("ОбтеканиеСлева", Ложь); + Формат.Вставить("ОбтеканиеСправа", Ложь); + Формат.Вставить("Ширина", "0"); + Формат.Вставить("Заполнитель", " "); + Формат.Вставить("ВыводитьЗаголовок", Ложь); + Формат.Вставить("ПодавлятьПробелы", Истина); + Формат.Вставить("ЭлементXML", Новый Структура()); + Формат.Вставить("ИмяАтрибутаXML", ""); + Формат.Вставить("ШтрихкодТип", ""); + Формат.Вставить("ШтрихкодВысота", 0); + + Если БазовыйФормат <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Формат, БазовыйФормат); + КонецЕсли; + + Возврат Формат; + +КонецФункции + +// Возвращает формат для строки разделителя. +// +// Возвращаемое значение: +// Структура - см. НовыйФормат. +// +Функция ФорматРазделитель() Экспорт + + Результат = НовыйФормат(); // НовыйФормат + Результат.Тип = "Разделитель"; + Результат.ВыводитьЗаголовок = Истина; + Возврат Результат; + +КонецФункции + +// Возвращает формат для штрихкода. +// +// Параметры: +// Выравнивание - ГоризонтальноеПоложение. +// ШтрихкодТип - Строка. +// ШтрихкодВысота - Число. +// +// Возвращаемое значение: +// Структура - см. НовыйФормат. +Функция ФорматШтрихкод(Выравнивание = Неопределено, ШтрихкодТип = "EAN13", ШтрихкодВысота = 0) Экспорт + + Результат = НовыйФормат(); + Результат.Тип = "ШТРИХКОД"; + Результат.Выравнивание = ?(Выравнивание = Неопределено, ГоризонтальноеПоложение.Лево, Выравнивание); + Результат.ШтрихкодВысота = ШтрихкодВысота; + Результат.ШтрихкодТип = ШтрихкодТип; + Возврат Результат; + +КонецФункции + +// Возвращает формат для штрихкода. +// +// Параметры: +// Ширина - Строка - ширина штрихкода +// Выравнивание - ГоризонтальноеПоложение +// ШтрихкодТип - Строка +// ШтрихкодВысота - Число - высота штрихкода +// +// Возвращаемое значение: +// Структура - см. НовыйФормат +Функция ФорматШтрихкодШирина(Ширина, Выравнивание = Неопределено, ШтрихкодТип = "EAN13", ШтрихкодВысота = 0) Экспорт + + Результат = НовыйФормат(); + Результат.Тип = "ШТРИХКОД"; + Результат.Ширина = Ширина; + Результат.Выравнивание = ?(Выравнивание = Неопределено, ГоризонтальноеПоложение.Лево, Выравнивание); + Результат.ШтрихкодВысота = ШтрихкодВысота; + Результат.ШтрихкодТип = ШтрихкодТип; + Возврат Результат; + +КонецФункции + +// Возвращает формат для строки. +// +// Параметры: +// Выравнивание - ГоризонтальноеПоложение. +// ВыравниваниеЗаголовка - Булево - Истина - выравнивать заголовок вместе с текстом, иначе Ложь. +// Обтекание - Булево - использовать обтекание +// +// Возвращаемое значение: +// Структура - см. НовыйФормат +Функция ФорматСтрока(Выравнивание = Неопределено, ВыравниваниеЗаголовка = Ложь, Обтекание = Ложь) Экспорт + + Результат = НовыйФормат(); + Результат.Выравнивание = ?(Выравнивание = Неопределено, ГоризонтальноеПоложение.Лево, Выравнивание); + Результат.ВыравниваниеЗаголовка = ВыравниваниеЗаголовка; + Результат.ОбтеканиеСлева = Обтекание; + Результат.ОбтеканиеСправа = Обтекание; + Возврат Результат; + +КонецФункции + +// Возвращает формат для строки. +// +// Параметры: +// Ширина - Строка - ширина штрихкода +// Выравнивание - ГоризонтальноеПоложение +// ВыравниваниеЗаголовка - Булево - Истина - выравнивать заголовок вместе с текстом, иначе Ложь. +// Обтекание - Булево - использовать обтекание +// +// Возвращаемое значение: +// Структура - см. НовыйФормат +// +Функция ФорматСтрокаШирина(Ширина, Выравнивание = Неопределено, ВыравниваниеЗаголовка = Ложь, Обтекание = Ложь) Экспорт + + Результат = НовыйФормат(); + Результат.Тип = "Строка"; + Результат.Ширина = Ширина; + Результат.Выравнивание = ?(Выравнивание = Неопределено, ГоризонтальноеПоложение.Лево, Выравнивание); + Результат.ВыравниваниеЗаголовка = ВыравниваниеЗаголовка; + Результат.ОбтеканиеСлева = Обтекание; + Результат.ОбтеканиеСправа = Обтекание; + Возврат Результат; + +КонецФункции + +// Возвращает формат для элемента 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; + КонецЦикла; + + Для Каждого Картинка Из Элемент.Картинки Цикл + Картинка.НачальнаяСтрока = НачалоЭлемента; + Картинки.Добавить(Картинка); + КонецЦикла; + + КонецЦикла; + + Для Каждого Картинка Из Картинки Цикл + Для Индекс = Картинка.НачальнаяСтрока По Картинка.НачальнаяСтрока + Картинка.ШтрихкодВысота-1 Цикл + Если Индекс = Строки.ВГраница() Тогда + Строки.Добавить(СтрокаСимволов(Шаблон.ШиринаСтроки)); + КонецЕсли; + Строка = Строки[Индекс]; + + Позиция = Картинка.НачальнаяПозиция; + Ширина = Картинка.НачальнаяШирина; + + Строка = Лев(Строка, Позиция-1)+СтрокаСимволов(Ширина, "#")+Сред(Строка, Позиция+Ширина); + Строки[Индекс] = Строка; + КонецЦикла; + КонецЦикла; + + Возврат СтрСоединить(Строки, Символы.ПС); + +КонецФункции + +// Выводит сформированный документ как табличный документ. +// +// Параметры: +// Шаблон - см. НовыйШаблон +// +// Возвращаемое значение: +// ТабличныйДокумент +// +Функция ВывестиКакТабличныйДокумент(Шаблон) Экспорт + + Если Не Шаблон.Сформирован Тогда + СформироватьДокументПоШаблону(Шаблон); + КонецЕсли; + + ТабличныйДокумент = Новый ТабличныйДокумент(); + + Область = ТабличныйДокумент.Область();//"C1:C"+Шаблон.ШиринаСтроки); + Область.ШиринаКолонки = 1; + Область.ВысотаСтроки = 9; + Область.АвтоВысотаСтроки = Ложь; + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; + Область.ВертикальноеПоложение = ВертикальноеПоложение.Центр; + Область.Шрифт = Новый Шрифт("Courier new", 8); + НомерСтроки = 1; + + Для Каждого Элемент Из Шаблон.Элементы Цикл + + НачалоЭлемента = НомерСтроки; + Для Каждого Строка Из Элемент.Строки Цикл + + ДлинаСтроки = СтрДлина(Строка); + + Для НомерСимвола = 1 По ДлинаСтроки Цикл + Область = ТабличныйДокумент.Область(НомерСтроки, НомерСимвола); + Область.Текст = Сред(Строка, НомерСимвола, 1); + КонецЦикла; + НомерСтроки = НомерСтроки + 1; + КонецЦикла; + + Для Каждого Картинка Из Элемент.Картинки Цикл + + Позиция = Картинка.НачальнаяПозиция; + ШиринаШтрихкода = Картинка.НачальнаяШирина; + ШтрихкодВысота = Картинка.ШтрихкодВысота; + + ОбластьСтроки = ТабличныйДокумент.Область(НачалоЭлемента, , НачалоЭлемента + ШтрихкодВысота, ); + ОбластьСтроки.ВместеСоСледующим = Истина; + + Область = ТабличныйДокумент.Область(НачалоЭлемента, Позиция, + НачалоЭлемента + ШтрихкодВысота, Позиция + ШиринаШтрихкода); + ШаблоныФискальныхДокументовСлужебный.ВывестиШтрихкод(ТабличныйДокумент, Область, Картинка.ШтрихкодТип, Картинка.Строка); + + КонецЦикла; + + КонецЦикла; + + Возврат ТабличныйДокумент; + +КонецФункции + +// Выводит сформированный документ как документ PDF. +// +// Параметры: +// Шаблон - см. НовыйШаблон +// +// Возвращаемое значение: +// ДокументPDF +// +Функция ВывестиКакPDF(Шаблон) Экспорт + + Поток = Новый ПотокВПамяти(); + ТабличныйДокумент = ВывестиКакТабличныйДокумент(Шаблон); + ТабличныйДокумент.Записать(Поток, ТипФайлаТабличногоДокумента.PDF); + + ДокументPDF = Новый ДокументPDF(); + ДокументPDF.Прочитать(Поток); + + Возврат ДокументPDF; + +КонецФункции + +#КонецОбласти + +#Область Шаблоны + +// Возвращает структуру параметров для формирования шаблона фискального документа. +// +// Возвращаемое значение: +// Структура: +// * ВерсияФФД - Строка - версия формата фискальных документов +// * Заголовок - Строка +// * Подпись - Булево - формировать ли поле подписи в документе +// * ДополнительныйТекст - Строка - дополнительный текст для вывода внизу документа +// +Функция ПараметрыШаблонаФискальногоДокумента() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("ВерсияФФД", "1.2"); + Результат.Вставить("Заголовок", ""); + Результат.Вставить("Подпись", Истина); + Результат.Вставить("ДополнительныйТекст", ""); + Возврат Результат; + +КонецФункции + +// Генерирует шаблон кассового чека, по данным операции фискализации чека. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ФискальнаяОперация - Структура +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонКассовыйЧек(ШиринаСтроки, Данные, ФискальнаяОперация = Неопределено, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонКассовыйЧек(Шаблон, Данные, ФискальнаяОперация, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонКассовыйЧек(Шаблон, Данные, ФискальнаяОперация, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +// Генерирует шаблон отчета об открытии смены. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонОтчетОбОткрытииСмены(ШиринаСтроки, Данные, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонОтчетОбОткрытииСмены(Шаблон, Данные, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонОтчетОбОткрытииСмены(Шаблон, Данные, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +// Генерирует шаблон отчета о закрытии смены. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонОтчетОЗакрытииСмены(ШиринаСтроки, Данные, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонОтчетОЗакрытииСмены(Шаблон, Данные, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонОтчетОЗакрытииСмены(Шаблон, Данные, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +// Генерирует шаблон отчета о текущем состоянии. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыВыполненияОперации +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонОтчетОТекущемСостоянии(ШиринаСтроки, Данные, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонОтчетОТекущемСостоянии(Шаблон, Данные, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонОтчетОТекущемСостоянии(Шаблон, Данные, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +// Генерирует шаблон отчета о снятии наличных. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыИнкассации +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонСнятиеНаличных(ШиринаСтроки, Данные, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонСнятиеНаличных(Шаблон, Данные, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонСнятиеНаличных(Шаблон, Данные, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +// Генерирует шаблон отчета о внесении наличных. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыИнкассации +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонВнесениеНаличных(ШиринаСтроки, Данные, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонВнесениеНаличных(Шаблон, Данные, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонВнесениеНаличных(Шаблон, Данные, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +// Генерирует шаблон отчета о инфо квитанции. +// +// Параметры: +// ШиринаСтроки - Число +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыВыполненияОперации +// Параметры - см. ПараметрыШаблонаФискальногоДокумента +// +// Возвращаемое значение: +// см. НовыйШаблон +// +Функция ШаблонИнфоКвитанция(ШиринаСтроки, Данные, Параметры = Неопределено) Экспорт + + Шаблон = НовыйШаблон(ШиринаСтроки); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыШаблонаФискальногоДокумента(); + КонецЕсли; + + ШаблоныФискальныхДокументовЛокализация.ШаблонИнфоКвитанция(Шаблон, Данные, Параметры); + + Если Шаблон.Элементы.Количество() = 0 Тогда + ШаблоныФискальныхДокументовСлужебный.ШаблонИнфоКвитанция(Шаблон, Данные, Параметры); + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Возвращает соответствие элементов XML +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение: +// * Ключ - Строка +// * Значение - см. НовыйЭлементXML +// +Функция НовыйСоответствиеЭлементыXML() + Возврат Новый Соответствие(); +КонецФункции + +// Возвращает соответствие атрибутов XML +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение: +// * Ключ - Строка +// * Значение - Строка +// +Функция НовыйСоответствиеАтрибутыXML() + Возврат Новый Соответствие(); +КонецФункции + +// Создает строку символов заданного размера. +// +// Параметры: +// Размер - Число - размер строки которую нужно создать +// Символ - Строка - символы которыми будет заполнен результат +// +// Возвращаемое значение: +// Строка - строка символов заданного размера +// +Функция СтрокаСимволов(Размер, Символ = " ") + Возврат ШаблоныФискальныхДокументовСлужебный.СтрокаСимволов(Размер, Символ); +КонецФункции + +#КонецОбласти 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..5c1439c --- /dev/null +++ b/CommonModules/ШаблоныФискальныхДокументовЛокализация/Ext/Module.bsl @@ -0,0 +1,463 @@ +#Область ПрограммныйИнтерфейс + +// Генерирует шаблон кассового чека, по данным операции фискализации чека +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ФискальнаяОперация - Структура +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонКассовыйЧек(Шаблон, Данные, ФискальнаяОперация, Параметры) Экспорт + + // ++ Локализация + + ПодготовитьКассовыйЧек(Данные, ФискальнаяОперация, Параметры.ВерсияФФД); + ШаблонКассовыйЧекШапка(Шаблон, Данные, Параметры); + + Для Каждого ПозицияЧека Из Данные.ПозицииЧека Цикл + Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда + ШаблонКассовыйЧекПозицияЧекаФискальнаяСтрока(Шаблон, ПозицияЧека); + ИначеЕсли ПозицияЧека.Свойство("ТекстоваяСтрока") Тогда + ШаблонКассовыйЧекПозицияЧекаТекстоваяСтрока(Шаблон, ПозицияЧека); + ИначеЕсли ПозицияЧека.Свойство("ШтрихКод") Тогда + ШаблонКассовыйЧекПозицияЧекаШтрихкод(Шаблон, ПозицияЧека); + КонецЕсли; + КонецЦикла; + + ШаблонКассовыйЧекПодвал(Шаблон, Данные, ФискальнаяОперация, Параметры); + + // -- Локализация + +КонецПроцедуры + +// Генерирует шаблон отчета об открытии смены +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонОтчетОбОткрытииСмены(Шаблон, Данные, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +// Генерирует шаблон отчета о закрытии смены +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонОтчетОЗакрытииСмены(Шаблон, Данные, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +// Генерирует шаблон отчета о текущем состоянии +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыВыполненияОперации +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонОтчетОТекущемСостоянии(Шаблон, Данные, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +// Генерирует шаблон отчета о снятии наличных +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыИнкассации +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонСнятиеНаличных(Шаблон, Данные, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +// Генерирует шаблон отчета о внесении наличных +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыИнкассации +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонВнесениеНаличных(Шаблон, Данные, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +// Генерирует шаблон отчета о инфо квитанции +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыВыполненияОперации +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента +// +Процедура ШаблонИнфоКвитанция(Шаблон, Данные, Параметры) Экспорт + + // ++ Локализация + // -- Локализация + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// ++ Локализация + +// Выполняет предварительную подготовку +// +// Параметры: +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека +// ВерсияФФД - Строка +// +Процедура ПодготовитьКассовыйЧек(Данные, ФискальнаяОперация, ВерсияФФД) + + // позиции чека + ТаблицаНДС = Новый Соответствие(); + СуммаЧека = 0; + СуммаОплаты = 0; + + Для Каждого ПозицияЧека Из Данные.ПозицииЧека Цикл + + Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда + Сумма = ПозицияЧека.Сумма; + СтавкаНДС = ПозицияЧека.СтавкаНДС; + СуммаНДС = ?(ПозицияЧека.СуммаНДС = 0, 0, ПозицияЧека.СуммаНДС); + + // НДС + Если СтавкаНДС = Неопределено Тогда + ТекстНалога = НСтр("ru='БЕЗ НДС'"); + СуммаВТаблицеПоКлючу(ТаблицаНДС, "БЕЗНДС", Сумма); + ИначеЕсли СтавкаНДС = 0 Тогда + ТекстНалога = НСтр("ru='НДС 0%'"); + СуммаВТаблицеПоКлючу(ТаблицаНДС, СтавкаНДС, Сумма); + ИначеЕсли СтавкаНДС < 100 Тогда + ТекстНалога = СтрШаблон(НСтр("ru='НДС %1%%'"), СтавкаНДС); + СуммаВТаблицеПоКлючу(ТаблицаНДС, СтавкаНДС, СуммаНДС); + ИначеЕсли СтавкаНДС >= 100 Тогда + ТекстНалога = СтрШаблон(НСтр("ru='НДС %2/%1%%'"), СтавкаНДС-100, СтавкаНДС); + СуммаВТаблицеПоКлючу(ТаблицаНДС, СтавкаНДС, СуммаНДС); + КонецЕсли; + ПозицияЧека.Вставить("ТекстНалога", ТекстНалога); + + СуммаЧека = СуммаЧека + Сумма; + КонецЕсли; + КонецЦикла; + + // подвал чека + // таблица оплаты + ТекстТаблицаОплат = Новый Соответствие(); + Для Каждого СтрокаОплаты Из Данные.ТаблицаОплат Цикл + ТипОплаты = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеТипаОплатыККТ(СтрокаОплаты.ТипОплаты, ВерсияФФД); + СуммаВТаблицеПоКлючу(ТекстТаблицаОплат, ТипОплаты, СтрокаОплаты.Сумма); + СуммаОплаты = СуммаОплаты + СтрокаОплаты.Сумма; + КонецЦикла; + Данные.Вставить("ТекстТаблицаОплат", ТекстТаблицаОплат); + Данные.Вставить("СуммаОплаты", СуммаОплаты); + Данные.Вставить("СуммаЧека", СуммаЧека); + + // таблица НДС + ТекстТаблицаНДС = Новый Соответствие(); + Для Каждого СтрокаНДС Из ТаблицаНДС Цикл + + СтавкаНДС = СтрокаНДС.Ключ; + Сумма = СтрокаНДС.Значение; + Если СтавкаНДС = "БЕЗНДС" Тогда + Заголовок = " "+НСтр("ru='СУММА БЕЗ НДС'"); + ИначеЕсли СтавкаНДС = 0 Тогда + Заголовок = " "+НСтр("ru='СУММА С НДС 0%'"); + ИначеЕсли СтавкаНДС < 100 Тогда + Заголовок = СтрШаблон(НСтр("ru='СУММА НДС %1%%'"), СтавкаНДС); + ИначеЕсли СтавкаНДС >= 100 Тогда + Заголовок = СтрШаблон(НСтр("ru='СУММА НДС %2/%1%%'"), СтавкаНДС-100, СтавкаНДС); + КонецЕсли; + ТекстТаблицаНДС.Вставить(Заголовок, Сумма); + + КонецЦикла; + Данные.Вставить("ТекстТаблицаНДС", ТекстТаблицаНДС); + + // QR код + Если ЗначениеЗаполнено(ФискальнаяОперация) Тогда + ПараметрыQRКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыQRКодаЧекаККТ(); + ПараметрыQRКода.ДатаВремяРасчета = ФискальнаяОперация.Дата; + ПараметрыQRКода.СуммаРасчета = ФискальнаяОперация.Сумма; + ПараметрыQRКода.ФискальныйПризнак = ФискальнаяОперация.ФискальныйПризнак; + ПараметрыQRКода.ПризнакРасчета = ФискальнаяОперация.ТипРасчета; + ПараметрыQRКода.НомерФискальногоНакопителя = ФискальнаяОперация.ЗаводскойНомерФН; + ПараметрыQRКода.НомерФискальногоДокумента = ФискальнаяОперация.НомерЧекаККМ; + Данные.QRКод.ЗначениеКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СформироватьQRКодЧекаККТ( + ПараметрыQRКода); + КонецЕсли; + + +КонецПроцедуры + +Процедура СуммаВТаблицеПоКлючу(Таблица, Ключ, Значение) + Сумма = Таблица.Получить(Ключ); + Сумма = ?(Сумма = Неопределено, 0, Сумма); + Таблица.Вставить(Ключ, Сумма + Значение); +КонецПроцедуры + +Процедура ШаблонКассовыйЧекШапка(Шаблон, Данные, Параметры) + + Модуль = ШаблоныФискальныхДокументов; + + ФорматРазделитель = Модуль.ФорматРазделитель(); + ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр); + ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право); + ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево); + ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине); + + Модуль.ДобавитьСтроку (Шаблон, Параметры.Заголовок, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, "=======", ФорматРазделитель); + Модуль.ДобавитьСтроку (Шаблон, Данные.ОрганизацияНазвание, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.АдресРасчетов, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.МестоРасчетов, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.АдресМагазина, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.ТекстШапки, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, НСтр("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 код и данные фискальной операции + Модуль.ДобавитьСтроку(Шаблон, " "); + Модуль.ДобавитьСтроку(Шаблон, " "); + Формат = Модуль.ФорматШтрихкод(ГоризонтальноеПоложение.Центр, "QR", 6); + Модуль.ДобавитьКолонку(Шаблон, Данные.QRКод.ЗначениеКода, Формат); + + Если ФискальнаяОперация = Неопределено Тогда + Для Индекс = 1 По 6 Цикл + Модуль.ДобавитьСтроку (Шаблон, " "); + Модуль.ДобавитьКолонку(Шаблон, " "); + КонецЦикла; + Иначе + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='РН ККТ:'"), ФискальнаяОперация.РегистрационныйНомерККТ, ФорматПраво); + Модуль.ДобавитьКолонку(Шаблон, " "); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ФН №:'"), ФискальнаяОперация.ЗаводскойНомерФН, ФорматПраво); + Модуль.ДобавитьКолонку(Шаблон, " "); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ФД №:'"), ФискальнаяОперация.НомерЧекаККМ, ФорматПраво); + Модуль.ДобавитьКолонку(Шаблон, " "); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ФП:'"), ФискальнаяОперация.ФискальныйПризнак, ФорматПраво); + Модуль.ДобавитьКолонку(Шаблон, " "); + Модуль.ДобавитьСтроку(Шаблон, " "); + Модуль.ДобавитьКолонку(Шаблон, " "); + КонецЕсли; + +КонецПроцедуры + +// -- Локализация + +#КонецОбласти 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..f49bc7e --- /dev/null +++ b/CommonModules/ШаблоныФискальныхДокументовСлужебный/Ext/Module.bsl @@ -0,0 +1,1137 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Генерирует шаблон универсального кассового чека, по данным операции фискализации чека, +// независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// ФискальнаяОперация - Структура. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонКассовыйЧек(Шаблон, Данные, ФискальнаяОперация, Параметры) Экспорт + + ПодготовитьКассовыйЧек(Данные, ФискальнаяОперация, Параметры.ВерсияФФД); + + ШаблонКассовыйЧекШапка(Шаблон, Данные, Параметры); + + Для Каждого ПозицияЧека Из Данные.ПозицииЧека Цикл + Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда + ШаблонКассовыйЧекПозицияЧекаФискальнаяСтрока(Шаблон, Данные, Параметры); + ИначеЕсли ПозицияЧека.Свойство("ТекстоваяСтрока") Тогда + ШаблонКассовыйЧекПозицияЧекаТекстоваяСтрока(Шаблон, Данные, Параметры); + ИначеЕсли ПозицияЧека.Свойство("ШтрихКод") Тогда + ШаблонКассовыйЧекПозицияЧекаШтрихкод(Шаблон, Данные, Параметры); + КонецЕсли; + КонецЦикла; + + ШаблонКассовыйЧекПодвал(Шаблон, Данные, ФискальнаяОперация, Параметры); + +КонецПроцедуры + +// Генерирует шаблон универсального отчет об открытии смены, независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонОтчетОбОткрытииСмены(Шаблон, Данные, Параметры) Экспорт + + ШаблонОтчет(Шаблон, Данные, Параметры, НСтр("ru='ОТКРЫТИЕ СМЕНЫ'")); + +КонецПроцедуры + +// Генерирует шаблон универсального отчет о закрытии смены, независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонОтчетОЗакрытииСмены(Шаблон, Данные, Параметры) Экспорт + + ШаблонОтчет(Шаблон, Данные, Параметры, НСтр("ru='ОТЧЕТ С ГАШЕНИЕМ'")); + +КонецПроцедуры + +// Генерирует шаблон универсального отчет о текущем состоянии, независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонОтчетОТекущемСостоянии(Шаблон, Данные, Параметры) Экспорт + + ШаблонОтчет(Шаблон, Данные, Параметры, НСтр("ru='ОТЧЕТ БЕЗ ГАШЕНИЯ'")); + +КонецПроцедуры + +// Генерирует шаблон универсального отчет о снятии наличных, независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонСнятиеНаличных(Шаблон, Данные, Параметры) Экспорт + + ШаблонОперацияИнкассации(Шаблон, Данные, Параметры, НСтр("ru='ВЫЕМКА'")); + +КонецПроцедуры + +// Генерирует шаблон универсального отчета о внесении наличных, независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонВнесениеНаличных(Шаблон, Данные, Параметры) Экспорт + + ШаблонОперацияИнкассации(Шаблон, Данные, Параметры, НСтр("ru='ВНЕСЕНИЕ'")); + +КонецПроцедуры + +// Генерирует шаблон инфо квитанции, независимого от локализации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// +Процедура ШаблонИнфоКвитанция(Шаблон, Данные, Параметры) Экспорт + + Модуль = ШаблоныФискальныхДокументов; + ФорматРазделитель = Модуль.ФорматРазделитель(); + ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр); + ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право); + ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево); + ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине); + + Модуль.ДобавитьСтроку (Шаблон, Параметры.Заголовок, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.НаименованиеОрганизации, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.АдресЧека, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.ПодписьЧека, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ИНН:'"), Данные.ИНН, ФорматЛево); + Модуль.ДобавитьКолонку(Шаблон, НСтр("ru='КПП:'"), Данные.КПП, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССА:'"), Данные.НомерКассы, ФорматЛево); + Модуль.ДобавитьКолонку(Шаблон, НСтр("ru='СМЕНА:'"), Данные.НомерСмены, ФорматПраво); + + ДатаВремя = Формат(ОбщегоНазначенияБПО.ДатаСеанса(), "ДФ=""дд.ММ.гггг ЧЧ:мм"""); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ЧЕК:'"), Данные.НомерЧека, ФорматЛево); + Модуль.ДобавитьКолонку(Шаблон, НСтр("ru='ДАТА:'"), ДатаВремя, ФорматПраво); + + Модуль.ДобавитьСтроку (Шаблон, "-", ФорматРазделитель); + Модуль.ДобавитьСтроку (Шаблон, Данные.АдресЧека, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.ПодписьЧека, ФорматЦентр); + +КонецПроцедуры + +#Область ГенераторШаблона + +// Создает строку символов заданного размера. +// +// Параметры: +// Размер - Число - размер строки которую нужно создать. +// Символ - Строка - символы которыми будет заполнен результат. +// +// Возвращаемое значение: +// Строка - строка символов заданного размера. +// +Функция СтрокаСимволов(Размер, Символ = " ") Экспорт + + ПустаяСтрока = ""; + ДлинаСимвола = СтрДлина(Символ); + Если ДлинаСимвола = 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Строка(Строка)); + Запись.ЗаписатьКонецЭлемента(); + КонецЦикла; + Иначе + Если Элемент.АтрибутыXML.Количество()=0 И Элемент.Дочерние.Количество()=0 Тогда + Возврат; + КонецЕсли; + Запись.ЗаписатьНачалоЭлемента(Элемент.Имя); + Для Каждого Атрибут Из Элемент.АтрибутыXML Цикл + Строка = СтрСоединить(Атрибут.Значение); + Запись.ЗаписатьАтрибут(Атрибут.Ключ, XMLСтрока(Строка)); + КонецЦикла; + Для Каждого Дочерний Из Элемент.Дочерние Цикл + ВывестиЭлементXML(Запись, Дочерний); + КонецЦикла; + Запись.ЗаписатьКонецЭлемента(); + КонецЕсли; + +КонецПроцедуры + +// Выводит штрихкод табличный документ. +// +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент - документ где должен быть выведен штрихкод. +// Область - ОбластьЯчеекТабличногоДокумента - область где должен быть выведен штрихкод. +// ТипШтрихкода - Строка - тип штрихкода в текстовом виде. +// Штрихкод - Строка - значение штрихкода. +// +Процедура ВывестиШтрихкод(ТабличныйДокумент, Область, ТипШтрихкода, Знач Штрихкод) Экспорт + + ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода(); + ПараметрыШтрихкода.Масштабировать = Истина; + ПараметрыШтрихкода.СохранятьПропорции = Истина; + ПараметрыШтрихкода.ОтображатьТекст = Ложь; + ПараметрыШтрихкода.Штрихкод = Штрихкод; + ПараметрыШтрихкода.ТипВходныхДанных = 1; + ПараметрыШтрихкода.ТипКода = ЧисловойТипШтрихкода(ТипШтрихкода); + + Штрихкод = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка); + Если ПараметрыШтрихкода.ТипКода = 16 Тогда + Штрихкод.РазмерКартинки = РазмерКартинки.Пропорционально; + ПараметрыШтрихкода.Ширина = 100; + ПараметрыШтрихкода.Высота = 100; + Иначе + Штрихкод.РазмерКартинки = РазмерКартинки.РеальныйРазмер; + ПараметрыШтрихкода.Ширина = 100; + ПараметрыШтрихкода.Высота = 100; + КонецЕсли; + + Изображение = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода); + Штрихкод.Картинка = Изображение.Картинка; + Штрихкод.ГраницаСверху = Ложь; + Штрихкод.ГраницаСнизу = Ложь; + Штрихкод.ГраницаСправа = Ложь; + Штрихкод.ГраницаСлева = Ложь; + + Область.ПоВыделеннымКолонкам = Истина; + Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; + Штрихкод.Расположить(Область); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ШаблоныДокументов + +// Выполняет предварительную подготовку. +// +// Параметры: +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека. +// ВерсияФФД - Строка. +// +Процедура ПодготовитьКассовыйЧек(Данные, ФискальнаяОперация, ВерсияФФД) + + // позиции чека + ТаблицаНДС = Новый Соответствие(); + СуммаЧека = 0; + СуммаОплаты = 0; + + Для Каждого ПозицияЧека Из Данные.ПозицииЧека Цикл + + Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда + Сумма = ПозицияЧека.Сумма; + СтавкаНДС = ПозицияЧека.СтавкаНДС; + СуммаНДС = ?(ПозицияЧека.СуммаНДС = 0, 0, ПозицияЧека.СуммаНДС); + + // НДС + Если СтавкаНДС = Неопределено Тогда + ТекстНалога = НСтр("ru='БЕЗ НДС'"); + СуммаВТаблицеПоКлючу(ТаблицаНДС, "БЕЗНДС", Сумма); + ИначеЕсли СтавкаНДС = 0 Тогда + ТекстНалога = НСтр("ru='НДС 0%'"); + СуммаВТаблицеПоКлючу(ТаблицаНДС, СтавкаНДС, Сумма); + ИначеЕсли СтавкаНДС < 100 Тогда + ТекстНалога = СтрШаблон(НСтр("ru='НДС %1%%'"), СтавкаНДС); + СуммаВТаблицеПоКлючу(ТаблицаНДС, СтавкаНДС, СуммаНДС); + ИначеЕсли СтавкаНДС >= 100 Тогда + ТекстНалога = СтрШаблон(НСтр("ru='НДС %2/%1%%'"), СтавкаНДС-100, СтавкаНДС); + СуммаВТаблицеПоКлючу(ТаблицаНДС, СтавкаНДС, СуммаНДС); + КонецЕсли; + ПозицияЧека.Вставить("ТекстНалога", ТекстНалога); + + СуммаЧека = СуммаЧека + Сумма; + КонецЕсли; + КонецЦикла; + + // подвал чека + // таблица оплаты + ТекстТаблицаОплат = Новый Соответствие(); + Для Каждого СтрокаОплаты Из Данные.ТаблицаОплат Цикл + ТипОплаты = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.НаименованиеТипаОплатыККТ(СтрокаОплаты.ТипОплаты, ВерсияФФД); + СуммаВТаблицеПоКлючу(ТекстТаблицаОплат, ТипОплаты, СтрокаОплаты.Сумма); + СуммаОплаты = СуммаОплаты + СтрокаОплаты.Сумма; + КонецЦикла; + Данные.Вставить("ТекстТаблицаОплат", ТекстТаблицаОплат); + Данные.Вставить("СуммаОплаты", СуммаОплаты); + Данные.Вставить("СуммаЧека", СуммаЧека); + + // таблица НДС + ТекстТаблицаНДС = Новый Соответствие(); + Для Каждого СтрокаНДС Из ТаблицаНДС Цикл + + СтавкаНДС = СтрокаНДС.Ключ; + Сумма = СтрокаНДС.Значение; + Если СтавкаНДС = "БЕЗНДС" Тогда + Заголовок = " "+НСтр("ru='СУММА БЕЗ НДС'"); + ИначеЕсли СтавкаНДС = 0 Тогда + Заголовок = " "+НСтр("ru='СУММА С НДС 0%'"); + ИначеЕсли СтавкаНДС < 100 Тогда + Заголовок = СтрШаблон(НСтр("ru='СУММА НДС %1%%'"), СтавкаНДС); + ИначеЕсли СтавкаНДС >= 100 Тогда + Заголовок = СтрШаблон(НСтр("ru='СУММА НДС %2/%1%%'"), СтавкаНДС-100, СтавкаНДС); + КонецЕсли; + ТекстТаблицаНДС.Вставить(Заголовок, Сумма); + + КонецЦикла; + Данные.Вставить("ТекстТаблицаНДС", ТекстТаблицаНДС); + + // QR код + Если ЗначениеЗаполнено(ФискальнаяОперация) Тогда + ПараметрыQRКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыQRКодаЧекаККТ(); + ПараметрыQRКода.ДатаВремяРасчета = ФискальнаяОперация.Дата; + ПараметрыQRКода.СуммаРасчета = ФискальнаяОперация.Сумма; + ПараметрыQRКода.ФискальныйПризнак = ФискальнаяОперация.ФискальныйПризнак; + ПараметрыQRКода.ПризнакРасчета = ФискальнаяОперация.ТипРасчета; + ПараметрыQRКода.НомерФискальногоНакопителя = ФискальнаяОперация.ЗаводскойНомерФН; + ПараметрыQRКода.НомерФискальногоДокумента = ФискальнаяОперация.НомерЧекаККМ; + Данные.QRКод.ЗначениеКода = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.СформироватьQRКодЧекаККТ( + ПараметрыQRКода); + КонецЕсли; + + +КонецПроцедуры + +// Процедура суммирует в соответствии значение по переданному ключу. +Процедура СуммаВТаблицеПоКлючу(Таблица, Ключ, Значение) + Сумма = Таблица.Получить(Ключ); + Сумма = ?(Сумма = Неопределено, 0, Сумма); + Таблица.Вставить(Ключ, Сумма + Значение); +КонецПроцедуры + +// Генерирует шаблон универсального отчета. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// НазваниеДокумента - Строка. +// +Процедура ШаблонОтчет(Шаблон, Данные, Параметры, НазваниеДокумента) Экспорт + + Модуль = ШаблоныФискальныхДокументов; + ФорматРазделитель = Модуль.ФорматРазделитель(); + ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр); + ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право); + ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево); + ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине); + + ДатаВремя = ОбщегоНазначенияБПО.ДатаСеанса(); + ДатаВремя = Формат(ДатаВремя, НСтр("ru = 'ДФ=""дд.ММ.гггг ЧЧ:мм""'")); + + ФорматПодпись = ШаблоныФискальныхДокументов.НовыйФормат(ФорматЛево); + ФорматПодпись.Заполнитель = "_"; + ФорматПодпись.ВыводитьЗаголовок = Истина; + + Модуль.ДобавитьСтроку (Шаблон, Параметры.Заголовок, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='НЕФИСКАЛЬНЫЙ РЕЖИМ'"), ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, "=", ФорматРазделитель); + Модуль.ДобавитьСтроку (Шаблон, Данные.АдресРасчетов, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.МестоРасчетов, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, НазваниеДокумента, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, ДатаВремя, ФорматПраво); + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССИР:'"), Данные.Кассир, ФорматЛево); + Если Параметры.Подпись Тогда + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПОДПИСЬ:'"), ФорматПодпись); + КонецЕсли; + Модуль.ДобавитьСтроку (Шаблон, "=", ФорматРазделитель); + +КонецПроцедуры + +// Генерирует шаблон универсального отчета инкассации. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// Данные - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОткрытияЗакрытияСмены. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// НазваниеОперации - Строка +// +Процедура ШаблонОперацияИнкассации(Шаблон, Данные, Параметры, НазваниеОперации) Экспорт + + Модуль = ШаблоныФискальныхДокументов; + ФорматРазделитель = Модуль.ФорматРазделитель(); + ФорматЦентр = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Центр); + ФорматПраво = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Право); + ФорматЛево = Модуль.ФорматСтрока(ГоризонтальноеПоложение.Лево); + ФорматПоШирине = Модуль.ФорматСтрока(ГоризонтальноеПоложение.ПоШирине); + + ДатаВремя = ОбщегоНазначенияБПО.ДатаСеанса(); + ДатаВремя = Формат(ДатаВремя, НСтр("ru = 'ДФ=""дд.ММ.гггг ЧЧ:мм""'")); + + ФорматПодпись = ШаблоныФискальныхДокументов.НовыйФормат(ФорматЛево); + ФорматПодпись.Заполнитель = "_"; + ФорматПодпись.ВыводитьЗаголовок = Истина; + + ФорматЧисла = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0"; + + Модуль.ДобавитьСтроку (Шаблон, Параметры.Заголовок, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, НСтр("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='ДОП.РЕК.:'"), ПозицияЧека.ДополнительныйРеквизит, ФорматПраво); + +КонецПроцедуры + +// Генерирует шаблон текстовой строки в позиции кассового чека. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// ПозицияЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека. +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонКассовыйЧекПозицияЧекаТекстоваяСтрока(Шаблон, ПозицияЧека, Параметры) + + Модуль = ШаблоныФискальныхДокументов; + + Формат = Модуль.ФорматСтрока(ГоризонтальноеПоложение[ПозицияЧека.Выравнивание]); + Модуль.ДобавитьСтроку (Шаблон, ПозицияЧека.Текст, Формат); + +КонецПроцедуры + +// Генерирует шаблон строки штрихкода в позиции кассового чека. +// +// Параметры: +// Шаблон - см. ШаблоныФискальныхДокументов.НовыйШаблон. +// ПозицияЧека - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыШтрихкодВСтрокеЧека +// Параметры - см. ШаблоныФискальныхДокументов.ПараметрыШаблонаФискальногоДокумента. +// +Процедура ШаблонКассовыйЧекПозицияЧекаШтрихкод(Шаблон, ПозицияЧека, Параметры) + + Модуль = ШаблоныФискальныхДокументов; + + Формат = Модуль.ФорматШтрихкод(ГоризонтальноеПоложение.Центр, ПозицияЧека.ТипШтрихкода, 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), ФорматПраво); + КонецЕсли; + + Для Каждого СтрокаНДС Из Данные.ТекстТаблицаНДС Цикл + Модуль.ДобавитьСтроку (Шаблон, " ", ФорматШирина2); + Модуль.ДобавитьКолонку(Шаблон, СтрокаНДС.Ключ, Формат(СтрокаНДС.Значение, ФорматЧисла2), ФорматПраво); + КонецЦикла; + + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='КАССИР:'"), Данные.Кассир, ФорматЛево); + Если Параметры.Подпись Тогда + Формат = ШаблоныФискальныхДокументов.НовыйФормат(ФорматЛево); + Формат.Заполнитель = "_"; + Формат.ВыводитьЗаголовок = Истина; + Модуль.ДобавитьСтроку (Шаблон, НСтр("ru='ПОДПИСЬ:'"), Формат); + КонецЕсли; + Модуль.ДобавитьСтроку (Шаблон, Параметры.ДополнительныйТекст, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, Данные.ТекстПодвала, ФорматЦентр); + Модуль.ДобавитьСтроку (Шаблон, "======", ФорматРазделитель); + + // QR код и данные фискальной операции + Модуль.ДобавитьСтроку (Шаблон, " "); + Модуль.ДобавитьСтроку (Шаблон, " "); + Формат = Модуль.ФорматШтрихкод(ГоризонтальноеПоложение.Центр, "QR", 6); + Модуль.ДобавитьКолонку(Шаблон, Данные.QRКод.ЗначениеКода, Формат); + + Если ФискальнаяОперация = Неопределено Тогда + Для Индекс = 1 По 6 Цикл + Модуль.ДобавитьСтроку (Шаблон, " "); + Модуль.ДобавитьКолонку(Шаблон, " "); + КонецЦикла; + Иначе + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='РН ККТ:'"), ФискальнаяОперация.РегистрационныйНомерККТ, ФорматПраво); + Модуль.ДобавитьКолонку(Шаблон, " "); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ФН №:'"), ФискальнаяОперация.ЗаводскойНомерФН, ФорматПраво); + Модуль.ДобавитьКолонку(Шаблон, " "); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ФД №:'"), ФискальнаяОперация.НомерЧекаККМ, ФорматПраво); + Модуль.ДобавитьКолонку(Шаблон, " "); + Модуль.ДобавитьСтроку(Шаблон, НСтр("ru='ФП:'"), ФискальнаяОперация.ФискальныйПризнак, ФорматПраво); + Модуль.ДобавитьКолонку(Шаблон, " "); + Модуль.ДобавитьСтроку (Шаблон, " "); + Модуль.ДобавитьКолонку(Шаблон, " "); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ГенераторШаблона + +// Конструктор элемента шаблона. +// +// Возвращаемое значение: +// Структура: +// * Строки - Массив из Строка - массив сформированных строк. +// * Колонки - Массив из см. ПараметрыКолонкиЭлементаШаблона. +// * Картинки - Массив из Структура. +// * ВыводитьПоСтрокам - Булево. +// * ЭлементXML - см. НовыйЭлементXML. +// * ИмяАтрибутаXML - Строка. +// +Функция НовыйЭлементШаблона() + + Элемент = Новый Структура(); + Элемент.Вставить("Строки", Новый Массив()); // Массив из Строка + Элемент.Вставить("Колонки", Новый Массив()); // Массив из см. ПараметрыКолонкиЭлементаШаблона + Элемент.Вставить("Картинки", Новый Массив()); // Массив из Структура + Элемент.Вставить("ВыводитьПоСтрокам", Истина); + Элемент.Вставить("ЭлементXML", Новый Структура()); + Элемент.Вставить("ИмяАтрибутаXML", ""); + Возврат Элемент; + +КонецФункции + +// Создает и возвращает структуру содержащую данные о колонке. +// +// Возвращаемое значение: +// Структура: +// * Тип - Строка - тип строки шаблона: Строка, Разделитель, Штрихкод, XML. +// * Выравнивание - ГоризонтальноеПоложение. +// * ВыравниваниеЗаголовка - Булево. +// * ОбтеканиеСлева - Булево. +// * ОбтеканиеСправа - Булево. +// * Ширина - Число - ширина поля абсолютное значение. +// * ШиринаФормат - Строка - ширина поля абсолютное или процент. +// * ВыводитьЗаголовок - Булево - флаг принудительного вывода заголовка если строка не содержит значения. +// * ПодавлятьПробелы - Булево. +// * Заполнитель - Строка - символы заполнитель при выравнивании. +// * ШтрихкодТип - Строка. +// * ШтрихкодВысота - Число. +// * Заголовок - Строка - заголовок поля, строка из шаблона до первого выражения. +// * Значение - Произвольный. +// * Строка - Строка - значение преобразованное в строку. +// * НачальнаяПозиция - Число - позиция в строке где начинается первая строка колонки. +// * НачальнаяШирина - Число - первоначальная ширина колонки. +// * НоваяШирина - Число - новая ширина колонки, используется при расчете обтекания. +// * Завершена - Булево - вывод колонки завершен, используется при расчете обтекания. +// * НачальнаяСтрока - Число. +// +Функция НоваяКолонкаЭлементаШаблона() + + Колонка = Новый Структура(); + Колонка.Вставить("Тип", "СТРОКА"); + // формат колонки + Выравнивание = ГоризонтальноеПоложение.Лево; // ГоризонтальноеПоложение + Колонка.Вставить("Выравнивание", Выравнивание); + Колонка.Вставить("ВыравниваниеЗаголовка", Ложь); + Колонка.Вставить("ОбтеканиеСлева", Ложь); + Колонка.Вставить("ОбтеканиеСправа", Ложь); + Колонка.Вставить("Ширина", 0); + Колонка.Вставить("ШиринаФормат", "0"); + Колонка.Вставить("ВыводитьЗаголовок", Ложь); + Колонка.Вставить("ПодавлятьПробелы", Истина); + Колонка.Вставить("Заполнитель", " "); + Колонка.Вставить("ШтрихкодТип", "EAN13"); + Колонка.Вставить("ШтрихкодВысота", 2); + // значения + Колонка.Вставить("Заголовок", ""); + Колонка.Вставить("Значение", Неопределено); + Колонка.Вставить("Строка", ""); + // служебные свойства + Колонка.Вставить("НачальнаяПозиция", 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, Результат); + +КонецФункции + +#КонецОбласти + +#КонецОбласти 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..a144abf 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..c3ff765 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..00b600a 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..bf9c2f7 Binary files /dev/null and b/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru/Ext/Template.bin differ diff --git a/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк_ru.xml b/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк_ru.xml new file mode 100644 index 0000000..b5dc642 --- /dev/null +++ b/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк_ru.xml @@ -0,0 +1,16 @@ + + + + + Драйвер1СЭквайринговыеТерминалыСбербанк_ru + + + ru + Драйвер "1С:Эквайринговые терминалы Сбербанк" + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк_ru/Ext/Template.bin b/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк_ru/Ext/Template.bin new file mode 100644 index 0000000..83a4e62 Binary files /dev/null and b/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк_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..d4112ee 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..a00f2b8 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..4d645e3 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..f2b817d 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..e28abb2 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/ДрайверАТОЛККТ54ФЗ10X_ru.xml b/CommonTemplates/ДрайверАТОЛККТ54ФЗ10X_ru.xml new file mode 100644 index 0000000..90d01b8 --- /dev/null +++ b/CommonTemplates/ДрайверАТОЛККТ54ФЗ10X_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверАТОЛККТ54ФЗ10X_ru + + + ru + АТОЛ:ККТ с передачей данных в ОФД 10.х + + + + AddIn + + + \ No newline at end of file diff --git a/CommonTemplates/ДрайверАТОЛККТ54ФЗ10X_ru/Ext/Template.bin b/CommonTemplates/ДрайверАТОЛККТ54ФЗ10X_ru/Ext/Template.bin new file mode 100644 index 0000000..7571fac Binary files /dev/null and b/CommonTemplates/ДрайверАТОЛККТ54ФЗ10X_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..eddaef2 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..1b9108d 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..1b9108d 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..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/ДрайверШтрихМККТ54ФЗ4ФФД12NG_ru.xml b/CommonTemplates/ДрайверШтрихМККТ54ФЗ4ФФД12NG_ru.xml new file mode 100644 index 0000000..9d11eeb --- /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..be37b5d Binary files /dev/null and b/CommonTemplates/ДрайверШтрихМККТ54ФЗ4ФФД12NG_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/ConfigDumpInfo.xml b/ConfigDumpInfo.xml new file mode 100644 index 0000000..ae75e08 --- /dev/null +++ b/ConfigDumpInfo.xml @@ -0,0 +1,836 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Configuration.xml b/Configuration.xml new file mode 100644 index 0000000..bf7ced2 --- /dev/null +++ b/Configuration.xml @@ -0,0 +1,463 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + f3de67f9-7fea-40c9-a405-f3e85b8416d9 + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + 05bf5371-840d-415b-9f2f-31c4c59f8664 + + + e3687481-0a87-462c-a166-9f34594f9bba + 9068dd2a-bf2e-4298-a073-6a03136eb09a + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + ebb2d6eb-3bbd-404f-810f-18e7629afda4 + + + 51f2d5d8-ea4d-4064-8892-82951750031e + 9baf7e32-bb4e-41c6-8dba-376a01a014b2 + + + e68182ea-4237-4383-967f-90c1e3370bc7 + 84cf3e2d-9707-4675-9c59-c3b23c67ca8f + + + fb282519-d103-4dd3-bc12-cb271d631dfc + 6b36f2ac-422e-4054-b03c-ff8d86bb5dd8 + + + + БиблиотекаПодключаемогоОборудования + + + ru + ВасяВасилек + + + + + Version8_5_1 + ManagedApplication + + PlatformApplication + MobilePlatformApplication + + Russian + + Role.ПолныеПрава + Role.АдминистраторСистемы + Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок + + Фирма "1С" + 3.2.131 + http://downloads.v8.1c.ru/tmplts/ + false + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + true + + + Microphone + true + + + MusicLibrary + true + + + PictureAndVideoLibraries + true + + + AudioPlaybackAndVibration + true + + + BackgroundAudioPlaybackAndVibration + true + + + InstallPackages + true + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + true + + + AllFilesAccess + true + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + true + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + TextToSpeech + false + + + + + + NavigationLeft + Auto + Normal + OpenDataInDialogs + + + + + Language.Русский + + + ru + Библиотека подключаемого оборудования, редакция 3.2 + + + + + ru + Библиотека подключаемого оборудования, редакция 3.2 + + + + + ru + Copyright (C) ООО "1C-Софт", 2009–2023. Все права защищены + + + + + ru + http://www.1c.ru + + + + + ru + http://v8.1c.ru/cel + + + Managed + NotAutoFree + UseWithWarnings + Use + Taxi + DontUse + DontUse + Version8_3_21 + + + + Русский + ПоддержкаОборудования + СлужебныеПодсистемы + ВнешняяКомпонентаДоступна + ВнешняяКомпонентаНеДоступна + ПараметрыКлиентаНаСервереБПО + РабочееМестоКлиента + ГлавнаяРоль + АдминистраторСистемы + БазовыеПраваБПО + ВыполнениеСинхронизацииДанных + ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок + ПолныеПрава + СохранениеДанныхПользователя + Драйвер1СДисплейПокупателя + Драйвер1СПринтерЧеков + Драйвер1СУстройстваВводаNative + Драйвер1СЭквайринговыеТерминалыСбербанк_ru + Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru + Драйвер1СЭлектронныеВесы + ДрайверMERTECHСканерШтрихкода_ru + ДрайверRightScanККТ54ФЗ_ru + ДрайверRightScanУстройстваВвода_ru + ДрайверRightScanУстройствоПечати_ru + ДрайверScanPortУстройстваВвода_ru + ДрайверUCSEFTPOSЭквайринговыеТерминалы_ru + ДрайверАЗУРККТ54ФЗФФД12_ru + ДрайверАЗУРПлатежнаяСистема_ru + ДрайверАТОЛККТ54ФЗ10X_ru + ДрайверАТОЛККТ54ФЗ10XФФД12_ru + ДрайверАТОЛСканерШтрихкода_ru + ДрайверВерсияТККТ54ФЗ_ru + ДрайверКлеверенсСканерШтрихкода_ru + ДрайверСканкодСканерШтрихкода_ru + ДрайверСканситиУстройстваВвода_ru + ДрайверШтрихМККТ54ФЗ4ФФД12NG_ru + КодВидаНоменклатурнойКлассификации + Синхронизация + ВнешниеКомпонентыБПО + ВнешниеКомпонентыБПОКлиент + ВнешниеКомпонентыБПОПереопределяемый + ГенерацияШтрихкода + ГенерацияШтрихкодаСерверПовтИсп + ИнтеграцияПодсистемБПО + ИнтеграцияПодсистемБПОКлиент + ИнтеграцияПодсистемБПОКлиентПовтИсп + ИнтеграцияПодсистемБПОСлужебныйВызовСервера + МенеджерОборудования + МенеджерОборудованияВызовСервера + МенеджерОборудованияВызовСервераПереопределяемый + МенеджерОборудованияКлиент + МенеджерОборудованияКлиентПереопределяемый + МенеджерОборудованияКлиентПовтИсп + МенеджерОборудованияКлиентСервер + МенеджерОборудованияКлиентСерверПереопределяемый + МенеджерОборудованияМаркировка + МенеджерОборудованияМаркировкаВызовСервера + МенеджерОборудованияМаркировкаКлиентСервер + МенеджерОборудованияПовтИсп + ОбновлениеИнформационнойБазыБПО + ОборудованиеВесовоеОборудование + ОборудованиеВесовоеОборудованиеКлиент + ОборудованиеВесовоеОборудованиеКлиентСервер + ОборудованиеДисплеиПокупателя + ОборудованиеДисплеиПокупателяКлиент + ОборудованиеПлатежныеСистемы + ОборудованиеПлатежныеСистемыКлиент + ОборудованиеПлатежныеСистемыКлиентСервер + ОборудованиеУстройстваВвода + ОборудованиеУстройстваВводаВызовСервера + ОборудованиеУстройстваВводаКлиент + ОборудованиеЧекопечатающиеУстройства + ОборудованиеЧекопечатающиеУстройстваВызовСервера + ОборудованиеЧекопечатающиеУстройстваКлиент + ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация + ОборудованиеЧекопечатающиеУстройстваКлиентСервер + ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация + ОборудованиеЧекопечатающиеУстройстваЛокализация + ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер + ОбщегоНазначенияБПО + ОбщегоНазначенияБПОКлиент + ОбщегоНазначенияБПОКлиентСервер + ОбщегоНазначенияБПОПереопределяемый + ОбщегоНазначенияБПОПовтИсп + ОбщегоНазначенияБПОСлужебныйВызовСервера + ПодключаемоеОборудованиеДрайверКлиент + ФорматноЛогическийКонтроль + ФорматноЛогическийКонтрольВызовСервера + ФорматноЛогическийКонтрольКлиентСервер + ФорматноЛогическийКонтрольКлиентСерверПереопределяемый + ФорматноЛогическийКонтрольПереопределяемый + ШаблоныФискальныхДокументов + ШаблоныФискальныхДокументовЛокализация + ШаблоныФискальныхДокументовСлужебный + ДенежнаяСуммаЛюбогоЗнака + ДенежнаяСуммаНеотрицательная + КассаБПО + ОрганизацияБПО + ОснованиеФискальнойОперацииБПО + ПользовательБПО + СубъектПерсональныхДанныхБПО + ТорговыйОбъектБПО + Настройки + Синхронизация + ВыбратьРМТекущегоСеанса + РегистрФискальныхОпераций + СверкаИтоговПоКартам + УправлениеФискальнымУстройством + УправлениеЭквайринговымТерминалом + Пароль + Логин + Сервер + СерверИсточникОбновлений + Префикс + ТТ + ИНН + КодВидаНоменклатурнойКлассификации + НастройкаРегистрацииККТ + СообщенияОбмена + УправлениеФискальнымУстройством + УправлениеЭквайринговымТерминалом + Номенклатура + ДрайверыОборудования + ПодключаемоеОборудование + РабочиеМеста + ВыводИзОборота + НумераторДокументовВывода + Status + Operation + ВидДокументаУдостоверяющегоЛичностьККТ + ВидыМаркированнойПродукцииБПО + ВидыОперацийИзмененияСостоянияФН + МераКоличестваПредметаРасчетаККТ + ОбработчикиДрайверовПодключаемогоОборудования + ОтветОИСМОСтатусеТовара + ПериодХраненияИсторииПлатежныхОпераций + ПланируемыйСтатусМаркируемогоТовара + ПоляШаблоновМагнитныхКарт + ПризнакиАгента + ПризнакиПредметаРасчета + ПризнакиСпособаРасчета + ПричиныИзмененияСведенийККТ + ПричиныПеререгистрацииФН + СпособПодключенияДрайвера + СпособыФорматноЛогическогоКонтроля + СтатусОбработкиЗапросаКМ + СтатусРезультатаЗапросаКМ + СтатусЧекаККТВОчереди + СтатусыКассовойСмены + ТипыИдентификаторовТовараККТ + ТипыМаркировкиККТ + ТипыОплатыККТ + ТипыПакетнойОперацииВОчередиЧеков + ТипыПерсональныхДанныхККТ + ТипыПлатежнойСистемыККТ + ТипыПлатежныхОпераций + ТипыПодключаемогоОборудования + ТипыПодключенияОборудования + ТипыРасчетаДенежнымиСредствами + ТипыСистемНалогообложенияККТ + ТипыФискальныхДокументовККТ + ТипыЧековКоррекции + НастройкиСоединения + ЗначенияЕМРЦ + ФискальныеОперации + + + \ No newline at end of file diff --git a/Constants/ИНН.xml b/Constants/ИНН.xml new file mode 100644 index 0000000..177bade --- /dev/null +++ b/Constants/ИНН.xml @@ -0,0 +1,62 @@ + + + + + + 21851a50-9057-4fce-b70f-ab5bce02cb87 + 3227adae-ac24-474a-aa13-12e9d9420893 + + + 80fc47a2-2020-4ebe-b3ae-bc8107956f8c + 5abf0650-1392-4405-befb-5253e1abf0b8 + + + 2aba210f-1b42-4600-bcc3-280d38e9508b + 156d6ba6-13b6-4c1e-92b6-9106655f940d + + + + ИНН + + + ru + ИНН + + + + + xs:string + + 50 + 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..6536d23 --- /dev/null +++ b/Constants/Логин.xml @@ -0,0 +1,62 @@ + + + + + + 020b0d10-1016-4870-97c8-c2d0313de040 + cbc35fc5-c3be-45ae-b258-f45025cb6209 + + + 1eea178a-7481-4d0e-8369-13907787b623 + cd29e3a7-2f87-453f-86cb-ae2f524d781e + + + 88e0a6b2-2239-4ff3-b13e-7190f2707a21 + bf0a423b-c00e-40a6-85f5-b219b51969aa + + + + Логин + + + ru + Логин + + + + + xs:string + + 20 + 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..f8b9c06 --- /dev/null +++ b/Constants/Пароль.xml @@ -0,0 +1,62 @@ + + + + + + 7b76cf08-fa85-470c-b140-4ad136c3de31 + 6ae7a04c-e53b-44d0-9e12-06817a9dc980 + + + 334f4534-610e-4b9b-8398-968dcbb92b7f + f46512c6-0854-4f5d-a0cb-b4a4f197dc74 + + + 7ea7e685-a674-43d1-b7bb-e9ef3dd77761 + da263e7f-a66d-404f-b73b-1e99dcc9f703 + + + + Пароль + + + ru + Пароль + + + + + xs:string + + 20 + 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..57ce7a3 --- /dev/null +++ b/Constants/Префикс.xml @@ -0,0 +1,62 @@ + + + + + + 28f317c6-6ce3-4fd8-9c5d-f5b910776a9a + 7c6941b8-1177-46ee-82e3-5bdfbf06e46d + + + 4a30b241-dabd-4075-8ceb-f8ae178c2b4f + 565359b9-622a-47d4-aeb6-74a9617c4743 + + + e0b7cca4-6f78-4280-a3b0-b1f044d7a5e6 + 4b4d335f-a9b2-4ae2-b845-e58d14af78f3 + + + + Префикс + + + ru + Префикс + + + + + xs:string + + 10 + 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..e5eabd5 --- /dev/null +++ b/Constants/Сервер.xml @@ -0,0 +1,62 @@ + + + + + + 9a9e3480-9196-450a-b52a-e44648f3a910 + 7100de8e-a1d2-48d3-a637-93907fb6b0bb + + + 28f10837-cff3-42cf-8de2-a45fd3c4cbbe + 561aa202-9b7b-48f0-8091-2567ff8d7236 + + + 9e89fcce-6007-4740-a494-e101feb4d3e4 + 5d84ec67-9a3c-4bee-a84e-8df997d94af8 + + + + Сервер + + + ru + Сервер + + + + + xs:string + + 50 + 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..1a29102 --- /dev/null +++ b/Constants/СерверИсточникОбновлений.xml @@ -0,0 +1,67 @@ + + + + + + b1d4e6a8-3c5f-4a72-9e81-6f0c2b8d1a45 + c2e5f7b9-4d60-4b83-af92-7a1d3c9e2b56 + + + d3f608ca-5e71-4c94-b0a3-8b2e4d0f3c67 + e40719db-6f82-4da5-c1b4-9c3f5e104d78 + + + f51820ec-7093-4eb6-d2c5-ad406f215e89 + 062931fd-81a4-4fc7-e3d6-be5170326f9a + + + + СерверИсточникОбновлений + + + ru + Сервер-источник обновлений + + + Адрес публикации мобильного приложения (хост или хост/путь) + + xs:string + + 150 + Variable + + + true + + + + false + + + + + ru + Сервер публикации конфигурации ТСД, например 192.168.1.10 или 192.168.1.10/tsd + + + 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..d7a1303 --- /dev/null +++ b/Constants/ТТ.xml @@ -0,0 +1,62 @@ + + + + + + f923acdb-e69f-4180-870e-2cfeb228d616 + 7a9892bc-571c-4109-8a9e-d57add851861 + + + 4941b945-30b2-49a7-afe9-ca416ffc1231 + ecedb19a-d082-4dcb-9b00-ffea33e11ed0 + + + 2e37f554-a2a9-4724-ac4b-530400585044 + a6b2f25f-2273-42ef-97dc-b525e74d8a38 + + + + ТТ + + + ru + ТТ + + + Торговая точка + + xs:string + + 50 + Variable + + + true + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + + + Auto + Managed + DontUse + false + false + + + \ No newline at end of file diff --git a/DataProcessors/НастройкиСоединения.xml b/DataProcessors/НастройкиСоединения.xml new file mode 100644 index 0000000..41d7a87 --- /dev/null +++ b/DataProcessors/НастройкиСоединения.xml @@ -0,0 +1,34 @@ + + + + + + 46cadc9f-cdad-42cb-abdc-5567091f9dc0 + 752ba5f4-cccf-4bed-a6f3-4439d287589d + + + 6553b42e-5b38-4c84-93f3-57256c511224 + 062ffa57-e7e8-47ff-b3e0-8f563680dcc4 + + + + НастройкиСоединения + + + ru + Настройки соединения + + + + true + DataProcessor.НастройкиСоединения.Form.Форма + + false + + + + +
Форма
+
+
+
\ No newline at end of file diff --git a/DataProcessors/НастройкиСоединения/Forms/Форма.xml b/DataProcessors/НастройкиСоединения/Forms/Форма.xml new file mode 100644 index 0000000..cac844c --- /dev/null +++ b/DataProcessors/НастройкиСоединения/Forms/Форма.xml @@ -0,0 +1,23 @@ + + +
+ + Форма + + + ru + Настройки + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + + +
+
\ No newline at end of file diff --git a/DataProcessors/НастройкиСоединения/Forms/Форма/Ext/Form.xml b/DataProcessors/НастройкиСоединения/Forms/Форма/Ext/Form.xml new file mode 100644 index 0000000..86da9be --- /dev/null +++ b/DataProcessors/НастройкиСоединения/Forms/Форма/Ext/Form.xml @@ -0,0 +1,551 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Настройки</v8:content> + </v8:item> + + false + None + false + + false + + + ПриОткрытии + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вход в настройки</v8:content> + </v8:item> + + #8E8E93 + Vertical + None + true + + + + Пароль1 + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пароль</v8:content> + </v8:item> + + Top + false + true + true + true + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Настройки</v8:content> + </v8:item> + + Vertical + None + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обмен с УТ</v8:content> + </v8:item> + + #8E8E93 + Vertical + None + #FFFFFF + + + + Данные.Сервер + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сервер обмена</v8:content> + </v8:item> + + Top + false + true + true + + + + + Данные.Логин + Top + false + true + true + + + + + Данные.Пароль + Top + false + true + true + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обновление конфигурации</v8:content> + </v8:item> + + #8E8E93 + Vertical + None + #FFFFFF + + + + Данные.СерверИсточникОбновлений + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сервер обновлений</v8:content> + </v8:item> + + Top + + + ru + Адрес публикации ТСД, например 192.168.1.10 или 192.168.1.10/tsd + + + false + true + true + + + ru + хост или хост/путь публикации + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Магазин</v8:content> + </v8:item> + + #8E8E93 + Vertical + None + #FFFFFF + + + + Данные.Префикс + Top + false + true + true + + + + + Данные.ТТ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Торговая точка</v8:content> + </v8:item> + + Top + false + true + true + + + + + Данные.ИНН + Top + false + true + true + + + + + + + Vertical + None + false + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Служебные операции</v8:content> + </v8:item> + + #8E8E93 + Vertical + Collapsible + true + None + #FFFFFF + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нумерация</v8:content> + </v8:item> + + Vertical + WeakSeparation + + + + РекДатаНачалаНумерации + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата начала</v8:content> + </v8:item> + + Top + false + true + true + + + + + НачальныйНомер + Top + false + true + true + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Статусы документов</v8:content> + </v8:item> + + Vertical + WeakSeparation + + + + дата1 + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата с</v8:content> + </v8:item> + + Top + false + true + true + + + + + Дата2 + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата по</v8:content> + </v8:item> + + Top + false + true + true + + + + + + + + + + + + + + + cfg:DataProcessorObject.НастройкиСоединения + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Данные</v8:content> + </v8:item> + + + cfg:ConstantsSet + + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пароль1</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата1</v8:content> + </v8:item> + + + xs:dateTime + + Date + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата2</v8:content> + </v8:item> + + + xs:dateTime + + Date + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рек дата начала нумерации</v8:content> + </v8:item> + + + xs:dateTime + + Date + + + + + + <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> + + + + 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/DataProcessors/НастройкиСоединения/Forms/Форма/Ext/Form/Module.bsl b/DataProcessors/НастройкиСоединения/Forms/Форма/Ext/Form/Module.bsl new file mode 100644 index 0000000..4f80d9d --- /dev/null +++ b/DataProcessors/НастройкиСоединения/Forms/Форма/Ext/Form/Module.bsl @@ -0,0 +1,122 @@ + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ЭтаФорма.Элементы.Группа2.Видимость = Ложь; + ЭтаФорма.Элементы.Группа1.Видимость = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ОК(Команда) + Если ЭтотОбъект.Пароль1 = "400943" Тогда + ЭтаФорма.Элементы.Группа2.Видимость = Истина; + ЭтаФорма.Элементы.Группа1.Видимость = Ложь; + Иначе + Сообщить("Пароль не верный!!!"); + КонецЕсли; +КонецПроцедуры + + +&НаКлиенте +Процедура ОчиститьДок(Команда) + ОчиститьДокНаСервере(); +КонецПроцедуры + + +&НаСервере +Процедура ОчиститьДокНаСервере() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВыводИзОборота.Ссылка КАК Ссылка + |ИЗ + | Документ.ВыводИзОборота КАК ВыводИзОборота"; + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + + докдок = ВыборкаДетальныеЗаписи.ссылка.ПолучитьОБъект(); + Докдок.Удалить() + + КонецЦикла; + +КонецПроцедуры + + +&НаКлиенте +Процедура ИзменитьСтатусДок(Команда) + ИзменитьСтатусДокНаСервере(ЭтаФорма.дата1, ЭтаФорма.Дата2); +КонецПроцедуры + + +&НаСервере +Процедура ИзменитьСтатусДокНаСервере(дата1,дата2) + // Вставить содержимое обработчика. //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА + // Данный фрагмент построен конструктором. + // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВыводИзОборота.Ссылка КАК Ссылка + |ИЗ + | Документ.ВыводИзОборота КАК ВыводИзОборота + |ГДЕ + | ВыводИзОборота.Дата МЕЖДУ &Дата1 И &Дата2"; + + Запрос.УстановитьПараметр("Дата1", Дата1); + Запрос.УстановитьПараметр("Дата2", Дата2); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Док= ВыборкаДетальныеЗаписи.Ссылка; + докдок = Док.ПолучитьОбъект(); + докдок.СтатусВыводаИзОборота = Перечисления.Status.ГотовКОтправке; + докдок.Записать(); + КонецЦикла; + + //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьНО(Команда) + ОбновитьНОНаСервере(); +КонецПроцедуры + +&НаСервере +Процедура ОбновитьНОНаСервере() + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВыводИзОборота.Ссылка КАК Ссылка + |ИЗ + | Документ.ВыводИзОборота КАК ВыводИзОборота + | + |УПОРЯДОЧИТЬ ПО + | ВыводИзОборота.Дата, + | ВыводИзОборота.Номер"; + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + НачальныйНомерДляДока = НачальныйНомер; + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Док = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); + Док.ОбменДанными.Загрузка = Истина; + Док.Номер = НачальныйНомерДляДока; + Док.СтатусВыводаИзОборота = Перечисления.Status.ГотовКОтправке; + НачальныйНомерДляДока = НачальныйНомерДляДока + 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..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..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..844e53d --- /dev/null +++ b/DocumentNumerators/НумераторДокументовВывода.xml @@ -0,0 +1,20 @@ + + + + + НумераторДокументовВывода + + + ru + Нумератор документов вывода + + + + Number + 10 + Variable + Year + true + + + \ No newline at end of file diff --git a/Documents/ВыводИзОборота.xml b/Documents/ВыводИзОборота.xml new file mode 100644 index 0000000..588d71f --- /dev/null +++ b/Documents/ВыводИзОборота.xml @@ -0,0 +1,533 @@ + + + + + + e5bb0fb9-5e14-4950-ab22-6d0b2eb2da36 + 18229ac4-9571-49a1-926c-74e77ad3a407 + + + 5df44b04-571a-4ea2-ae9d-79f7d27b821e + a41dc22e-d1b8-4308-892c-fe8b34690ab8 + + + 1e9661e6-6552-4274-9d6a-d96216aab29e + 22f00dd9-074b-49d2-8aa3-67d49c1e893a + + + 29aa650f-8719-41c2-b041-16fa856aedea + 562feebd-687e-4bc6-a4d5-249fea92a09f + + + 4e83bdf8-0c99-45bc-905b-b181ee3fb549 + ba90b910-7457-4170-bda1-8d900f70b8ab + + + + ВыводИзОборота + + + ru + Вывод из оборота + + + + true + DocumentNumerator.НумераторДокументовВывода + Number + 10 + Variable + Year + true + 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 + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + TransformValues + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + + + 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.Status + + false + + + + false + + false + false + + + false + Enum.Status.EnumValue.Создан + ShowError + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Операция + + + ru + Операция + + + + + cfg:EnumRef.Operation + + false + + + + false + + false + false + + + false + Enum.Operation.EnumValue.Фасовка + ShowError + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + nupd + + + ru + Номер документа основания + + + + + xs:string + + 20 + Variable + + + false + + + + false + + false + false + + + false + + ShowError + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + dupd + + + ru + Dupd + + + Дата документа основания + + xs:dateTime + + Date + + + false + + + + false + + false + false + + + false + + ShowError + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + +
ФормаДокумента
+
Вес
+
ФормаСписка
+ + + + b9a9f5ea-c14e-4661-b7f5-c2e5237d5a6f + b6950bee-c9f0-443d-9395-53787d562dea + + + 48996e79-fe06-4488-bbda-ec0bdde504d5 + fbbfc70d-e144-4d95-9055-34456fd29dbf + + + + ТЧТовары + + + ru + ТЧТовары + + + + + DontCheck + 5 + + + + + Номенклатура + + + 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 + + + ShowError + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Mark + + + ru + Mark + + + + + xs:string + + 120 + Variable + + + false + + + + false + + false + false + + + ShowError + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + +
+
+
\ No newline at end of file diff --git a/Documents/ВыводИзОборота/Forms/Вес.xml b/Documents/ВыводИзОборота/Forms/Вес.xml new file mode 100644 index 0000000..3d0613e --- /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..920c571 --- /dev/null +++ b/Documents/ВыводИзОборота/Forms/Вес/Ext/Form.xml @@ -0,0 +1,141 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вес</v8:content> + </v8:item> + + false + None + false + + false + + + ПриОткрытии + ПриСозданииНаСервере + + + + false + true + #8E8E93 + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Введите вес товара</v8:content> + </v8:item> + + Center + + + + + Инфо + false + + <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> + + #8E8E93 + Top + false + true + false + true + #FFFFFF + + + + + ВесПриИзменении + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вес</v8:content> + </v8:item> + + + xs:decimal + + 10 + 3 + 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> + + + + 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..6bf4978 --- /dev/null +++ b/Documents/ВыводИзОборота/Forms/Вес/Ext/Form/Module.bsl @@ -0,0 +1,27 @@ + +&НаКлиенте +Процедура ВесПриИзменении(Элемент) + Параметр = Новый Структура("Вес", ЭтаФорма.Вес); + Оповестить("ПриИзменении", Параметр, ЭтаФорма); + ЭтаФорма.Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура Готово(Команда) + ВесПриИзменении(Неопределено); +КонецПроцедуры + + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если ЗначениеЗаполнено(Параметры.Вес) Тогда + ЭтотОбъект.Вес = Параметры.Вес; + КонецЕсли; +КонецПроцедуры + + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ЭтаФорма.ТекущийЭлемент = ЭтаФорма.Элементы.Вес; + ЭтаФорма.НачатьРедактированиеЭлемента(); +КонецПроцедуры diff --git a/Documents/ВыводИзОборота/Forms/ФормаДокумента.xml b/Documents/ВыводИзОборота/Forms/ФормаДокумента.xml new file mode 100644 index 0000000..a7a4164 --- /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..b9e70b7 --- /dev/null +++ b/Documents/ВыводИзОборота/Forms/ФормаДокумента/Ext/Form.xml @@ -0,0 +1,446 @@ + +
+ None + false + CurrentOrLast + Auto + true + + Center + false + + + ОбработкаОповещения + ПриОткрытии + ВнешнееСобытие + ПередЗаписьюНаСервере + + + + true + true + Vertical + None + false + + + + false + Vertical + None + false + + + + false + AlwaysHorizontal + None + false + #FFFFFF + + + + Объект.Number + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер</v8:content> + </v8:item> + + #1C1C1E + + Left + EnterOnInput + true + 10 + false + 12 + true + true + + + + + Объект.Date + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата</v8:content> + </v8:item> + + #1C1C1E + + Left + EnterOnInput + true + 8 + false + 10 + false + true + + + ru + ДФ=dd.MM.yyyy + + + + + + + + + Объект.СтатусВыводаИзОборота + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Статус вывода</v8:content> + </v8:item> + + #1C1C1E + + Top + false + true + false + true + + + + + Объект.Операция + true + #1C1C1E + + Top + false + true + false + true + + + + + false + AlwaysHorizontal + None + false + #FFFFFF + + + + Объект.nupd + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер УПД</v8:content> + </v8:item> + + #1C1C1E + + Top + false + true + true + + + + + Объект.dupd + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата УПД</v8:content> + </v8:item> + + #1C1C1E + + Top + false + true + true + + + + dupdПриИзменении + + + + + + + + + List + Top + None + true +
true
+ true + false + false + true + true + true + Объект.ТЧТовары + #FFFFFF + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Товары</v8:content> + </v8:item> + + #1C1C1E + + + + + false + + + + + ТЧТовары + SearchStringRepresentation + + + + + + + ТЧТовары + ViewStatusRepresentation + + + + + + + ТЧТовары + SearchControl + + + + + + ТЧТоварыВыбор + ТЧТоварыОбработкаВыбора + + + + + + + Horizontal + + + + Объект.ТЧТовары.LineNumber + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>№</v8:content> + </v8:item> + + Center + Center + EnterOnInput + Center + false + true + 1 + + + + + Объект.ТЧТовары.Номенклатура + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номенклатура</v8:content> + </v8:item> + + Left + Center + EnterOnInput + true + false + true + 7 + + + + + Объект.ТЧТовары.Вес + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вес, кг</v8:content> + </v8:item> + + Right + EnterOnInput + Center + true + 3 + true + + + + + + + + + + Объект.ТЧТовары.Mark + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Марка</v8:content> + </v8:item> + + EnterOnInput + false + true + true + + + + + + + + +
+ + false + Bottom + AlwaysHorizontal + Bottom + None + false + #F2F2F7 + + + + + + +
+
+
+ + + + 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> + + + + 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..796fb85 --- /dev/null +++ b/Documents/ВыводИзОборота/Forms/ФормаДокумента/Ext/Form/Module.bsl @@ -0,0 +1,207 @@ +&НаКлиенте +Процедура СканироватьТовар(Команда) + +#Если МобильноеПриложениеКлиент Тогда +Если НЕ СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда +ВызватьИсключение НСтр("Сканирование штрихкодов не поддерживается"); +Возврат; +КонецЕсли; +ОбработчикСканирования = Новый ОписаниеОповещения("ОбработкаСканирования", ЭтотОбъект); +ОбработчикЗакрытия = Новый ОписаниеОповещения("ОбработкаЗакрытияИнтерфейса", ЭтотОбъект); +СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Наведите камеру на штрихкод", ОбработчикСканирования, ОбработчикЗакрытия); + +#КонецЕсли +КонецПроцедуры + +&НаСервере +Процедура ОбработкаСканирования(Данные, Результат, Сообщение, ДополнительныеПараметры) Экспорт // через камеры стандартно + //Добавление марки + штрих = СокрЛП(данные); + Если СтрДлина(данные) < 16 Тогда + баркод = данные; + Иначе + баркод = Сред(данные,4,14); + КонецЕсли; + + // Определяем что за товар в коде маркировки + ПозМолочки = СтрНайти(штрих,"93",НаправлениеПоиска.СКонца); // отсекаем часть марки + ПозРастМасла = СтрНайти(штрих,"91",НаправлениеПоиска.СКонца); + Если ПозМолочки > 0 Тогда + Штрихкод = СРЕД(штрих,1,ПозМолочки - 2); + ИначеЕсли ПозРастМасла > 0 Тогда + Штрихкод = СРЕД(штрих,1,ПозРастМасла - 2); + Иначе + Сообщить("Не удалось разобрать код маркировки"); + Возврат; + КонецЕсли; + + // Проверяем наличие товара в этом документе + Для Каждого строка из Объект.ТЧТовары Цикл + Если строка.Mark = Штрихкод Тогда + Сообщить("Товар уже добавлен в этот документ"); + Возврат; + КонецЕсли; + КонецЦикла; + // Проверяем наличие товара в этом документе + + Если Результат Тогда + ном = Справочники.Номенклатура.НайтиПоРеквизиту("Barcode",баркод); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВыводИзОборотаТЧТовары.Mark КАК mark + |ИЗ + | Документ.ВыводИзОборота.ТЧТовары КАК ВыводИзОборотаТЧТовары + |ГДЕ + | ВыводИзОборотаТЧТовары.Mark = &Mark"; + Запрос.УстановитьПараметр("Mark",Штрихкод); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Выгрузить().Количество()>0 Тогда + Для Каждого стр из РезультатЗапроса.Выгрузить() Цикл + Если стр.Mark = Штрихкод Тогда + Сообщить("Товар уже добавлен в другом документе. Попробуйте отсканировать снова"); + Возврат; + КонецЕсли; + КонецЦикла; + КонецЕсли; + // Если товар правильный и марка считана, то добавляем + Если ЗначениеЗаполнено(ном) Тогда + Тов = Объект.ТЧТовары.Добавить(); + Тов.Номенклатура = ном; + Тов.Mark = Штрихкод; + Иначе + Сообщить("Отсканированный ШК " + баркод + " не найден. Если товар не найден, нажмите кнопку «Обмен»."); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаЗакрытияИнтерфейса(ДополнительныеПараметры) Экспорт +КонецПроцедуры + +&НаКлиенте +Процедура dupdПриИзменении(Элемент) + текДата = ТекущаяДата()-60*60*24*11; + Если Объект.dupd < ТекДата ИЛИ Объект.dupd > ТекущаяДата() Тогда + Объект.dupd = ТекущаяДата(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТЧТоварыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + #Если МобильноеПриложениеКлиент Тогда + СтандартнаяОбработка = Ложь; + Структура = Новый Структура("Вес", Объект.ТЧТовары.Получить(ВыбраннаяСтрока).Вес); + ОткрытьФорму("Документ.ВыводИзОборота.Форма.Вес", Структура); + #КонецЕсли +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "ПриИзменении" Тогда + строка = ЭтаФорма.Элементы.ТЧТовары.ТекущаяСтрока; + Объект.ТЧТовары.Получить(строка).Вес = Параметр.Вес; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнееСобытие(Источник, Событие, Данные) + Если Событие = "Штрихкод" Тогда + ОбработкаСканированияЧерезКомпоненту(Данные, Истина, Неопределено); + КонецЕсли; +КонецПроцедуры + + +&НаСервере +Функция ПриОткрытииНаСервере() + Если Объект.СтатусВыводаИзОборота = Перечисления.Status.Отправлен ИЛИ Объект.СтатусВыводаИзОборота = Перечисления.Status.ВыведенИзОборота Тогда + Возврат Истина; + КонецЕсли; +КонецФункции +&НаКлиенте +Процедура ПриОткрытии(Отказ) + СтатусОтправлен = ПриОткрытииНаСервере(); + Если СтатусОтправлен = Истина Тогда + //ЭтаФорма.Элементы.Группа1.Доступность = Ложь; + ЭтаФорма.Элементы.Группа2.Доступность = Ложь; + ЭтаФорма.Элементы.Группа5.Доступность = Ложь; + ЭтаФорма.Элементы.Статус.Доступность = Ложь; + ЭтаФорма.Элементы.Операция.Доступность = Ложь; + ЭтаФорма.Элементы.Группа6.Доступность = Ложь; + ЭтаФорма.Элементы.СканироватьТовар.Доступность = Ложь; + ЭтаФорма.Элементы.ТЧТовары.Доступность = Ложь; + Сообщить("Редактирование документа запрещено"); + Иначе + ЭтотОбъект.ИспользоватьПодключаемоеОборудование = Истина; + МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода"); +// ЭтаФорма.Элементы.Дата.Доступность = Ложь; +// ЭтаФорма.Элементы.Номер.Доступность = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда + // Проверим заполненость документа + Если ЭтотОбъект.ПроверитьЗаполнение() Тогда + ТекущийОбъект.СтатусВыводаИзОборота = Перечисления.Status.ГотовКОтправке; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +Процедура ОбработкаСканированияЧерезКомпоненту(данные, Результат, Сообщение) Экспорт // broadcast nativeapi + //Добавление марки + штрих = СокрЛП(данные); + Если СтрДлина(штрих) < 16 Тогда + баркод = штрих; + Иначе + баркод = Сред(штрих,3,14); + КонецЕсли; + + Поз = СтрНайти(штрих,"93",НаправлениеПоиска.СКонца); // отсекаем часть марки + Если поз > 0 Тогда Штрихкод = СРЕД(штрих,1,Поз-2); + КонецЕсли; + + + // Проверяем наличие товара в этом документе + Для Каждого строка из Объект.ТЧТовары Цикл + Если строка.Mark = Штрихкод Тогда + Сообщить("Товар уже добавлен в этот документ"); + Возврат; + КонецЕсли; + КонецЦикла; + // Проверяем наличие товара в этом документе + + Если Результат Тогда + ном = Справочники.Номенклатура.НайтиПоРеквизиту("Barcode",баркод); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВыводИзОборотаТЧТовары.Mark КАК mark + |ИЗ + | Документ.ВыводИзОборота.ТЧТовары КАК ВыводИзОборотаТЧТовары + |ГДЕ + | ВыводИзОборотаТЧТовары.Mark = &Mark"; + Запрос.УстановитьПараметр("Mark",Штрихкод); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Выгрузить().Количество()>0 Тогда + Для Каждого стр из РезультатЗапроса.Выгрузить() Цикл + Если стр.Mark = Штрихкод Тогда + Сообщить("Товар уже добавлен в другом документе. Попробуйте отсканировать снова"); + Возврат; + КонецЕсли; + КонецЦикла; + КонецЕсли; + // Если товар правильный и марка считана, то добавляем + Если ЗначениеЗаполнено(ном) Тогда + Тов = Объект.ТЧТовары.Добавить(); + Тов.Номенклатура = ном; + Тов.Mark = Штрихкод; + Иначе + Сообщить("Отсканированный ШК " + баркод + " не найден. Если товар не найден, нажмите кнопку «Обмен»."); + КонецЕсли; +КонецЕсли; +КонецПроцедуры + + + diff --git a/Documents/ВыводИзОборота/Forms/ФормаСписка.xml b/Documents/ВыводИзОборота/Forms/ФормаСписка.xml new file mode 100644 index 0000000..3c89485 --- /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..01f4e31 --- /dev/null +++ b/Documents/ВыводИзОборота/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,362 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Документы</v8:content> + </v8:item> + + false + None + false + + false + + + ПриОткрытии + ПриПовторномОткрытии + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + false + + + + List + None + true + true + false + false + ExpandTopLevel + true + Список + Список.DefaultPicture + #FFFFFF + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + СписокКомпоновщикНастроекПользовательскиеНастройки + true + + false + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + + + + Список.СтатусВыводаИзОборота + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Статус</v8:content> + </v8:item> + + Left + true + true + true + #1C1C1E + + + + + + + + + Horizontal + + + + Список.Номер + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>№</v8:content> + </v8:item> + + Left + 10 + #007AFF + + + + + + Список.Дата + Left + 8 + #8E8E93 + + + + + + + + + + +
+ + false + Bottom + AlwaysHorizontal + Bottom + None + false + #F2F2F7 + + + + + + +
+ + + + cfg:DynamicList + + true + + true + true + ВЫБРАТЬ + ДокументВыводИзОборота.Ссылка КАК Ссылка, + ДокументВыводИзОборота.ПометкаУдаления КАК ПометкаУдаления, + ДокументВыводИзОборота.Номер КАК Номер, + ДокументВыводИзОборота.Дата КАК Дата, + ДокументВыводИзОборота.Проведен КАК Проведен, + ДокументВыводИзОборота.СтатусВыводаИзОборота КАК СтатусВыводаИзОборота, + ДокументВыводИзОборота.Операция КАК Операция, + ДокументВыводИзОборота.nupd КАК nupd, + ДокументВыводИзОборота.dupd КАК dupd, + ДокументВыводИзОборота.ТЧТовары.( + Ссылка КАК Ссылка, + НомерСтроки КАК НомерСтроки, + Номенклатура КАК Номенклатура, + Вес КАК Вес, + Mark КАК Mark + ) КАК ТЧТовары, + ДокументВыводИзОборота.МоментВремени КАК МоментВремени +ИЗ + Документ.ВыводИзОборота КАК ДокументВыводИзОборота +ГДЕ + ДокументВыводИзОборота.СтатусВыводаИзОборота <> &Статус + + Ссылка + Ссылка + + + Номер + Номер + + + nupd + nupd + + + Проведен + Проведен + + + ПометкаУдаления + ПометкаУдаления + + + СтатусВыводаИзОборота + СтатусВыводаИзОборота + + + Дата + Дата + + + Операция + Операция + + + ТЧТовары.НомерСтроки + ТЧТовары.НомерСтроки + + + dupd + dupd + + + ТЧТовары.Ссылка + ТЧТовары.Ссылка + + + ТЧТовары.Mark + ТЧТовары.Mark + + + ТЧТовары.Номенклатура + ТЧТовары.Номенклатура + + + ТЧТовары.Вес + ТЧТовары.Вес + + + ТЧТовары + ТЧТовары + + + МоментВремени + МоментВремени + + + Статус + + + ru + Статус + + + + cfg:EnumRef.Status + + + 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> + + + + 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..eacb8fa --- /dev/null +++ b/Documents/ВыводИзОборота/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -0,0 +1,108 @@ + +&НаКлиенте +Процедура СоздатьДокумент(Команда) + ОткрытьФорму("Документ.ВыводИзОборота.Форма.ФормаДокумента"); +КонецПроцедуры + +&НаСервере +Функция СинхронизацияНаСервере() + Возврат Синхронизация.ЗапускСинхронизации(); +КонецФункции + +&НаКлиенте +Процедура Синхронизация(Команда) + + ТекстСообщения = СинхронизацияНаСервере(); + ЭтаФорма.Элементы.Список.Обновить(); + ПоказатьСообщенияОбмена(ТекстСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьСообщенияОбмена(ТекстСообщения) + + Если ПустаяСтрока(ТекстСообщения) Тогда + ТекстСообщения = "Синхронизация выполнена."; + КонецЕсли; + + ПараметрыФормы = Новый Структура("ТекстСообщения", ТекстСообщения); + ОткрытьФорму( + "ОбщаяФорма.СообщенияОбмена", + ПараметрыФормы, + , + "СообщенияОбмена", + , + , + , + РежимОткрытияОкнаФормы.Независимый); + +КонецПроцедуры + +&НаСервере +Процедура ПриОткрытииНаСервере() + ЭтаФорма.Список.Параметры.УстановитьЗначениеПараметра("Статус", Перечисления.Status.Черновик); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ПриОткрытииНаСервере(); + ПодключитьОбработчикОжидания("ПроверитьОбновлениеТСД", 1); + ПодключитьОбработчикОжидания("НапомнитьОбОбновленииТСД", 3600); + +КонецПроцедуры + +&НаСервере +Процедура ПриПовторномОткрытииНаСервере() + ЭтаФорма.Список.Параметры.УстановитьЗначениеПараметра("Статус", Перечисления.Status.Черновик); +КонецПроцедуры + +&НаКлиенте +Процедура ПриПовторномОткрытии() + + ПриПовторномОткрытииНаСервере(); + ОтключитьОбработчикОжидания("НапомнитьОбОбновленииТСД"); + ПодключитьОбработчикОжидания("НапомнитьОбОбновленииТСД", 3600); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьОбновлениеТСД() + + ОтключитьОбработчикОжидания("ПроверитьОбновлениеТСД"); + ПоказатьНапоминаниеОбОбновлении(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура НапомнитьОбОбновленииТСД() + + ПоказатьНапоминаниеОбОбновлении(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьНапоминаниеОбОбновлении(ЭтоНапоминание) + + ДанныеОбновления = Синхронизация.ДанныеОбновленияПубликации(); + Если Не ДанныеОбновления.ЕстьОбновление Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТекстСообщения", "Обнаружена новая версия приложения"); + ПараметрыФормы.Вставить("ПоказатьАнимациюОбновления", Истина); + ПараметрыФормы.Вставить("ТаймаутЗакрытия", 0); + + ОткрытьФорму( + "ОбщаяФорма.СообщенияОбмена", + ПараметрыФормы, + , + "СообщениеОбновления", + , + , + , + РежимОткрытияОкнаФормы.Независимый); + +КонецПроцедуры + diff --git a/Enums/Operation.xml b/Enums/Operation.xml new file mode 100644 index 0000000..0e82f53 --- /dev/null +++ b/Enums/Operation.xml @@ -0,0 +1,82 @@ + + + + + + 993b3316-45d7-48e3-8fb1-5ce0f40e1dc2 + 76355571-a2fe-4a1e-bc73-ad831449273b + + + fc3c78ea-fcd2-42aa-a251-49d1239e3195 + 5e7f99e2-cdf1-435a-9543-c885a7197043 + + + 2d1190d4-156a-4dc6-8ff4-4cee5668e9e6 + e31a68d9-64cd-4d50-bc5e-6fb5eb264242 + + + + Operation + + + ru + Operation + + + + false + + true + BothWays + + + + + + + + Auto + + + + + Фасовка + + + ru + Фасовка + + + + auto + + + + + ИстечениеСрокаГодности + + + ru + Истечение срока годности + + + + auto + + + + + ПорчаУтеряТовара + + + ru + Порча, утеря товара + + + + auto + + + + + \ No newline at end of file diff --git a/Enums/Status.xml b/Enums/Status.xml new file mode 100644 index 0000000..b67013a --- /dev/null +++ b/Enums/Status.xml @@ -0,0 +1,121 @@ + + + + + + 1a584fbb-4420-4e45-bb8d-97babdceffa0 + 7e60828f-a1a7-4a86-a78b-cf6903472e99 + + + ab11b767-cfc7-4560-99ac-4e77f760e20b + 05467d2d-efa6-4dbd-932c-13c2a1ec99a1 + + + 066e278e-dd75-4dae-a31b-4e304612c05a + 731704ab-c89f-40f5-8a21-14cbfe599700 + + + + Status + + + ru + Status + + + + false + + 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..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..36ec975 --- /dev/null +++ b/Enums/ВидыМаркированнойПродукцииБПО.xml @@ -0,0 +1,333 @@ + + + + + + 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 + + + + + \ 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..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/ОтветОИСМОСтатусеТовара.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..aa43f1a --- /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..bf78308 --- /dev/null +++ b/Enums/ПризнакиПредметаРасчета.xml @@ -0,0 +1,528 @@ + + + + + + 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 + Расход + + + О суммах произведенных расходов в соответствии со статьей 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..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..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..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..02e47f9 --- /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..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..fa12b4a --- /dev/null +++ b/Enums/ТипыПакетнойОперацииВОчередиЧеков.xml @@ -0,0 +1,138 @@ + + + + + + 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 + + + + + \ 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..2a86085 --- /dev/null +++ b/Enums/ТипыПлатежныхОпераций.xml @@ -0,0 +1,294 @@ + + + + + + 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 + + + + + \ No newline at end of file diff --git a/Enums/ТипыПодключаемогоОборудования.xml b/Enums/ТипыПодключаемогоОборудования.xml new file mode 100644 index 0000000..9b3e2db --- /dev/null +++ b/Enums/ТипыПодключаемогоОборудования.xml @@ -0,0 +1,268 @@ + + + + + + 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 + ККТ с передачей данных + + + KKT + 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 + + + + + \ No newline at end of file diff --git a/Enums/ТипыПодключаемогоОборудования/Ext/ManagerModule.bsl b/Enums/ТипыПодключаемогоОборудования/Ext/ManagerModule.bsl new file mode 100644 index 0000000..4bc025b --- /dev/null +++ b/Enums/ТипыПодключаемогоОборудования/Ext/ManagerModule.bsl @@ -0,0 +1,15 @@ +#Область ОбработчикиСобытий + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) + + ДанныеВыбора = Новый СписокЗначений; + ДанныеВыбора.ЗагрузитьЗначения(МенеджерОборудования.ДоступныеТипыОборудования()); + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +#КонецЕсли + +#КонецОбласти \ 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/Ext/ClientApplicationInterface.xml b/Ext/ClientApplicationInterface.xml new file mode 100644 index 0000000..806df0c --- /dev/null +++ b/Ext/ClientApplicationInterface.xml @@ -0,0 +1,28 @@ + + + + + + + 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..bc463a4 --- /dev/null +++ b/Ext/HomePageWorkArea.xml @@ -0,0 +1,14 @@ + + + TwoColumnsEqualWidth + + +
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..dd2dc7b --- /dev/null +++ b/Ext/MainSectionCommandInterface.xml @@ -0,0 +1,180 @@ + + + + + + true + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + false + + + + + + NavigationPanelImportant + Auto + + + NavigationPanelImportant + Auto + + + NavigationPanelImportant + Auto + + + NavigationPanelOrdinary + Auto + + + NavigationPanelOrdinary + Auto + + + + + NavigationPanelImportant + + + NavigationPanelImportant + + + NavigationPanelImportant + + + NavigationPanelImportant + + + NavigationPanelImportant + + + NavigationPanelImportant + + + NavigationPanelOrdinary + + + NavigationPanelOrdinary + + + NavigationPanelOrdinary + + + NavigationPanelOrdinary + + + NavigationPanelOrdinary + + + NavigationPanelOrdinary + + + NavigationPanelOrdinary + + + NavigationPanelOrdinary + + + + NavigationPanelImportant + NavigationPanelOrdinary + + \ No newline at end of file diff --git a/Ext/ManagedApplicationModule.bsl b/Ext/ManagedApplicationModule.bsl new file mode 100644 index 0000000..32cab25 --- /dev/null +++ b/Ext/ManagedApplicationModule.bsl @@ -0,0 +1,28 @@ + +#Область ОписаниеПеременных + +// ПодключаемоеОборудование +Перем ПараметрыПриложения Экспорт; +// Конец ПодключаемоеОборудование + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПриНачалеРаботыСистемы() + + // ПодключаемоеОборудование + ИнтеграцияПодсистемБПОКлиент.ПриНачалеРаботыСистемы(); + // Конец ПодключаемоеОборудование + +КонецПроцедуры + +Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) + + // ПодключаемоеОборудование + ИнтеграцияПодсистемБПОКлиент.ОбработкаВнешнегоСобытия(Источник, Событие, Данные); + // Конец ПодключаемоеОборудование + +КонецПроцедуры + +#КонецОбласти diff --git a/Ext/ParentConfigurations.bin b/Ext/ParentConfigurations.bin new file mode 100644 index 0000000..4cebd7b --- /dev/null +++ b/Ext/ParentConfigurations.bin @@ -0,0 +1 @@ +{6,0,1,7b03120c-4530-484c-93f4-3340a588f87c,0,78b42e70-77d2-402f-9126-3279e9773b07,"3.2.130","Фирма ""1С""","БиблиотекаПодключаемогоОборудования",601,1,0,97c75154-b1b8-4b56-874b-477db8b556ef,8e14c2a4-38dc-451e-aeef-1cc0167aa154,1,0,1ffaba7c-011f-46f7-9fdd-0d3ca291ab26,8aa046bd-fe2b-4a2c-9c23-5c0c026a4851,1,0,c7e08cdf-ff48-4587-81e5-38991973c58b,c7e08cdf-ff48-4587-81e5-38991973c58b,1,0,e62be839-d3c0-4ee9-b370-54d77665643e,e62be839-d3c0-4ee9-b370-54d77665643e,1,0,a44321d9-a2f8-4fb9-8724-a1840ac2396f,a44321d9-a2f8-4fb9-8724-a1840ac2396f,1,0,b7842f18-fb5b-4517-8353-f8b623000091,b7842f18-fb5b-4517-8353-f8b623000091,1,0,8d06de65-3ebc-4c66-a3b6-c732a624760d,8d06de65-3ebc-4c66-a3b6-c732a624760d,1,0,d95cf8ff-0d39-4819-ad92-890bf01a4e13,d95cf8ff-0d39-4819-ad92-890bf01a4e13,1,0,329daa13-ab41-4f3f-a499-6196225fb0ee,329daa13-ab41-4f3f-a499-6196225fb0ee,1,0,98356598-c609-4f90-8d12-e8e266df6e65,98356598-c609-4f90-8d12-e8e266df6e65,1,0,756ae85b-eecd-4f7d-ac35-d1e96a561cc4,756ae85b-eecd-4f7d-ac35-d1e96a561cc4,1,0,7d0e729c-6f33-4eae-a703-9f4a33695753,7d0e729c-6f33-4eae-a703-9f4a33695753,1,0,3673da80-712d-440a-a873-febfd9c0b6f7,3673da80-712d-440a-a873-febfd9c0b6f7,1,0,9cdbe74b-bd42-4a2f-b8df-50cf9c049242,9cdbe74b-bd42-4a2f-b8df-50cf9c049242,1,0,e1be857b-8c41-488b-8d61-db2ab8e20eb2,e1be857b-8c41-488b-8d61-db2ab8e20eb2,1,0,1bf4db72-5bbb-4bb7-93f7-435f432ce476,1bf4db72-5bbb-4bb7-93f7-435f432ce476,1,0,7468729d-c502-4950-952c-4fd8f3f82979,7468729d-c502-4950-952c-4fd8f3f82979,1,0,1b606230-41a0-4c40-8548-cd29dd00b636,1b606230-41a0-4c40-8548-cd29dd00b636,1,0,50ed3573-da4f-455a-a034-d2ea5afda3de,50ed3573-da4f-455a-a034-d2ea5afda3de,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,0349b290-2ea7-4d82-96d7-84b9b23ad0a3,0349b290-2ea7-4d82-96d7-84b9b23ad0a3,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,01417e32-3897-43d5-aea7-9d138159cf74,01417e32-3897-43d5-aea7-9d138159cf74,1,0,4d411e77-b001-497e-ba6a-0dfefac52e9d,4d411e77-b001-497e-ba6a-0dfefac52e9d,1,0,151fb808-2c83-4970-b4b4-90343e45171a,151fb808-2c83-4970-b4b4-90343e45171a,1,0,69c9de07-3c84-4fbf-9730-cfffeadcf032,69c9de07-3c84-4fbf-9730-cfffeadcf032,1,0,e635d288-bd5e-495a-9617-b30e33fae921,e635d288-bd5e-495a-9617-b30e33fae921,1,0,4c6075a0-40c7-4cd6-be25-931940ddbd34,4c6075a0-40c7-4cd6-be25-931940ddbd34,1,0,a3e0068e-95cd-4e7c-8950-6aed9ede5617,a3e0068e-95cd-4e7c-8950-6aed9ede5617,1,0,ecb819d2-ff11-41a5-8e9e-fe07839157da,ecb819d2-ff11-41a5-8e9e-fe07839157da,1,0,2a1477c5-6a2f-41f1-828b-9db31b1c739b,2a1477c5-6a2f-41f1-828b-9db31b1c739b,1,0,2d62131c-a779-469f-b613-d8ab6df1735e,2d62131c-a779-469f-b613-d8ab6df1735e,1,0,aaed7ad5-b12e-4513-9c78-34aa7976f49b,aaed7ad5-b12e-4513-9c78-34aa7976f49b,1,0,b4758cbf-e5a9-4abf-8196-07791f204a00,b4758cbf-e5a9-4abf-8196-07791f204a00,1,0,106e34e5-6a4e-46e2-8821-31fb4adafbf3,106e34e5-6a4e-46e2-8821-31fb4adafbf3,1,0,5da3f45b-71d0-4185-a4a7-b891d44989f0,5da3f45b-71d0-4185-a4a7-b891d44989f0,1,0,da86a362-8d10-4303-ade1-d3a4ba122ceb,da86a362-8d10-4303-ade1-d3a4ba122ceb,1,0,56ca17b1-363b-4189-b979-8247a2b15795,56ca17b1-363b-4189-b979-8247a2b15795,1,0,de7167de-3cb6-4ace-9c61-157d596b3795,de7167de-3cb6-4ace-9c61-157d596b3795,1,0,e868c120-e192-4f66-8ccc-ce8bde010395,e868c120-e192-4f66-8ccc-ce8bde010395,1,0,4fbc198f-efad-462c-bf8b-2b9b5a414e9b,4fbc198f-efad-462c-bf8b-2b9b5a414e9b,1,0,ebad8398-5b15-4625-99e6-fb59229115f1,ebad8398-5b15-4625-99e6-fb59229115f1,1,0,94eca0f3-d3c8-4a68-9167-558005a9e56c,94eca0f3-d3c8-4a68-9167-558005a9e56c,1,0,63a3566e-badd-4bce-869e-6b9592221494,63a3566e-badd-4bce-869e-6b9592221494,1,0,c78dcdf6-36eb-43ea-a61e-1eb252d7f94a,c78dcdf6-36eb-43ea-a61e-1eb252d7f94a,1,0,ae1860de-2dee-4d38-a86e-ad5be06b813d,ae1860de-2dee-4d38-a86e-ad5be06b813d,1,0,02faccf7-3678-47d5-9272-cf675bd1830d,02faccf7-3678-47d5-9272-cf675bd1830d,1,0,336b874f-2029-4ffc-98d7-fae8e48d3e07,336b874f-2029-4ffc-98d7-fae8e48d3e07,1,0,9aa0a0cb-9547-4868-9495-b00f3ecd2b3a,9aa0a0cb-9547-4868-9495-b00f3ecd2b3a,1,0,a9e31d90-fe65-47c3-8109-6e1eae862f53,a9e31d90-fe65-47c3-8109-6e1eae862f53,1,0,4edafa7b-a2d2-45bc-ad5a-89ddb0f74d48,4edafa7b-a2d2-45bc-ad5a-89ddb0f74d48,1,0,cf672c10-3e81-4a91-b73d-059784f95956,cf672c10-3e81-4a91-b73d-059784f95956,1,0,d4cf1dfc-e86d-4ce6-8704-12b79f2ae3f9,d4cf1dfc-e86d-4ce6-8704-12b79f2ae3f9,1,0,9d4e0c08-2083-44f4-a2d1-cb9435506b1d,9d4e0c08-2083-44f4-a2d1-cb9435506b1d,1,0,7c45e8ff-4b67-4d7e-abce-fa40bbdff30e,7c45e8ff-4b67-4d7e-abce-fa40bbdff30e,1,0,c3086f25-efb9-4587-b79c-0e0df68e11c9,c3086f25-efb9-4587-b79c-0e0df68e11c9,1,0,fab4d01f-1b8a-4dc4-ac72-c4a02fa3271e,fab4d01f-1b8a-4dc4-ac72-c4a02fa3271e,1,0,0649d8c7-13df-4fe8-9cde-618fd7af637d,0649d8c7-13df-4fe8-9cde-618fd7af637d,1,0,013db9cd-9bc9-46ea-9bf9-e9275603d6d9,013db9cd-9bc9-46ea-9bf9-e9275603d6d9,1,0,c04cb836-c637-4591-aac3-ba3f9d4032e0,c04cb836-c637-4591-aac3-ba3f9d4032e0,1,0,1898d146-b1b2-45a3-b4a7-08a6a795babc,1898d146-b1b2-45a3-b4a7-08a6a795babc,1,0,c1aa46f4-737b-4fce-ac89-5dd1ffe29310,c1aa46f4-737b-4fce-ac89-5dd1ffe29310,1,0,cb38b6e8-4470-4d4d-833a-6b92a9c2c5f3,cb38b6e8-4470-4d4d-833a-6b92a9c2c5f3,1,0,613a4e9a-d65b-441d-a910-ef5ce33e41c0,613a4e9a-d65b-441d-a910-ef5ce33e41c0,1,0,d9a961d2-4aff-4693-9812-3bcc51b0b95b,d9a961d2-4aff-4693-9812-3bcc51b0b95b,1,0,351c4552-b8a2-4f2b-9f45-09cf7fc68aff,351c4552-b8a2-4f2b-9f45-09cf7fc68aff,1,0,549d3c98-1596-412e-8256-0ff297b3076f,549d3c98-1596-412e-8256-0ff297b3076f,1,0,124d55fc-75e6-4007-b0e5-390a2481b0b0,124d55fc-75e6-4007-b0e5-390a2481b0b0,1,0,e5742da4-f655-4e67-941d-99236d972a99,e5742da4-f655-4e67-941d-99236d972a99,1,0,2c54e561-3748-457f-b54e-a83074af43c1,2c54e561-3748-457f-b54e-a83074af43c1,1,0,bd83a037-5950-46d3-8ffe-00010adbdc3f,bd83a037-5950-46d3-8ffe-00010adbdc3f,1,0,85fe799b-d290-4e76-8b98-9a12ae6a0b4a,85fe799b-d290-4e76-8b98-9a12ae6a0b4a,1,0,863a0aab-a806-43a9-9103-ec3603b97d2d,863a0aab-a806-43a9-9103-ec3603b97d2d,1,0,8f0e3c3f-8bc2-44ed-ac06-493ef2692493,8f0e3c3f-8bc2-44ed-ac06-493ef2692493,1,0,d0ea1487-f3ed-4c92-b723-98aa1135504e,d0ea1487-f3ed-4c92-b723-98aa1135504e,1,0,3c152f4a-ce70-4e82-961a-08dec4b865ee,3c152f4a-ce70-4e82-961a-08dec4b865ee,1,0,56c5c9ca-7b91-468d-aa8a-d0507e178653,56c5c9ca-7b91-468d-aa8a-d0507e178653,1,0,01042cbf-90f3-45ad-b4d2-2836f1e9e74f,01042cbf-90f3-45ad-b4d2-2836f1e9e74f,1,0,645cf9a2-4eed-4886-8daf-069a18e26e10,645cf9a2-4eed-4886-8daf-069a18e26e10,1,0,49b2f814-a917-49fb-89ab-718924869071,49b2f814-a917-49fb-89ab-718924869071,1,0,7645e68f-bac6-422b-9769-da2312c9fd4f,7645e68f-bac6-422b-9769-da2312c9fd4f,1,0,d9bc3673-272b-4c37-8066-35bf5243e5fe,d9bc3673-272b-4c37-8066-35bf5243e5fe,1,0,ae18cae4-23f5-4441-b828-b497fb09c76a,ae18cae4-23f5-4441-b828-b497fb09c76a,1,0,f288bae3-8282-4cd4-b634-de6207c9ee83,f288bae3-8282-4cd4-b634-de6207c9ee83,1,0,7270ae27-b4ce-4fd8-9ceb-a4c23814bd4a,7270ae27-b4ce-4fd8-9ceb-a4c23814bd4a,1,0,a81fcb4f-515d-41ef-bac9-a6a5b1952620,a81fcb4f-515d-41ef-bac9-a6a5b1952620,1,0,c0fd5fac-255b-4963-ba2a-a718254e5962,c0fd5fac-255b-4963-ba2a-a718254e5962,1,0,1c48b7da-7f87-454d-a509-a74346e44ad7,1c48b7da-7f87-454d-a509-a74346e44ad7,1,0,98e10a49-4e0e-4987-afba-1fd5763c55f0,98e10a49-4e0e-4987-afba-1fd5763c55f0,1,0,608ff83f-dd66-43ca-9e3c-cf42014ba36b,608ff83f-dd66-43ca-9e3c-cf42014ba36b,1,0,8c38949c-232c-4f53-bc46-2b8483b5d160,8c38949c-232c-4f53-bc46-2b8483b5d160,1,0,15990b09-f5e7-42a8-869a-a75e9430f8a7,15990b09-f5e7-42a8-869a-a75e9430f8a7,1,0,ebd10200-f524-4577-bed5-c809c83238b3,ebd10200-f524-4577-bed5-c809c83238b3,1,0,f85deb41-4067-4c76-96cb-0214892e9879,f85deb41-4067-4c76-96cb-0214892e9879,1,0,eb775223-3427-4ce9-8064-cb70467a85f7,eb775223-3427-4ce9-8064-cb70467a85f7,1,0,697918d3-fc59-43ef-8f45-9158bcc2fabc,697918d3-fc59-43ef-8f45-9158bcc2fabc,1,0,85bebb69-4c64-4030-860f-2a6440644404,85bebb69-4c64-4030-860f-2a6440644404,1,0,46cd0c04-9eed-4860-9f04-d1ddbb29327e,46cd0c04-9eed-4860-9f04-d1ddbb29327e,1,0,8ce03692-7b05-40a7-b4b9-252e4473d08a,8ce03692-7b05-40a7-b4b9-252e4473d08a,1,0,10803d01-cde3-4f46-8ad9-9dae8cd02ece,10803d01-cde3-4f46-8ad9-9dae8cd02ece,1,0,9307c909-7ce3-4bc3-987c-18e621b2d2e6,9307c909-7ce3-4bc3-987c-18e621b2d2e6,1,0,31b93291-a58f-4176-8318-58200e8bc56e,31b93291-a58f-4176-8318-58200e8bc56e,1,0,293be1bc-49cb-4a99-add8-2a3a46829718,293be1bc-49cb-4a99-add8-2a3a46829718,1,0,5ead20ed-6c78-40fb-b885-3d4531b42d7d,5ead20ed-6c78-40fb-b885-3d4531b42d7d,1,0,4e20e7bb-9585-422c-9ccf-8f17adff0487,4e20e7bb-9585-422c-9ccf-8f17adff0487,1,0,484eb10d-1598-424e-b6d1-4688539f5ca1,484eb10d-1598-424e-b6d1-4688539f5ca1,1,0,0f217e13-2172-42d8-beab-3247e84202ab,0f217e13-2172-42d8-beab-3247e84202ab,1,0,cb583506-721d-43bf-b3c0-85343ef5784a,cb583506-721d-43bf-b3c0-85343ef5784a,1,0,02c99164-4aee-4e5b-babf-dd0fef6b9211,02c99164-4aee-4e5b-babf-dd0fef6b9211,1,0,3177a598-c693-4f5e-880e-15d687643cd0,3177a598-c693-4f5e-880e-15d687643cd0,1,0,7e0ebc5f-f8c9-47f9-91f9-fc1976f1d22d,7e0ebc5f-f8c9-47f9-91f9-fc1976f1d22d,1,0,38aec696-418a-4ad0-9456-bb7e446f6427,38aec696-418a-4ad0-9456-bb7e446f6427,1,0,04d2b6e3-46e0-401a-8a4a-6001859a21fd,04d2b6e3-46e0-401a-8a4a-6001859a21fd,1,0,fd5d9d82-290e-4b1d-9dd3-8de77341f12a,fd5d9d82-290e-4b1d-9dd3-8de77341f12a,1,0,3a86fec4-2a21-46fc-ba2c-7425afc979ed,3a86fec4-2a21-46fc-ba2c-7425afc979ed,1,0,60df9bf6-5bb6-41f7-8515-35fade226ddf,60df9bf6-5bb6-41f7-8515-35fade226ddf,1,0,91147d24-94d1-44d6-8a4b-d00f9377b3bc,91147d24-94d1-44d6-8a4b-d00f9377b3bc,1,0,e7c6ae50-116e-48c0-9fd0-034af6773d10,e7c6ae50-116e-48c0-9fd0-034af6773d10,1,0,dff8b4a3-f85f-41e3-8891-8105e9274b0a,dff8b4a3-f85f-41e3-8891-8105e9274b0a,1,0,fcb34768-286f-444a-9a96-25128b07470d,fcb34768-286f-444a-9a96-25128b07470d,1,0,36c31338-088f-4efd-a8f4-629e6b29b605,36c31338-088f-4efd-a8f4-629e6b29b605,1,0,76a5242c-f19a-437f-81f4-024d3b6c709f,76a5242c-f19a-437f-81f4-024d3b6c709f,1,0,d4f77ac9-1ba2-40cf-8e2a-b6cd2a753ef0,d4f77ac9-1ba2-40cf-8e2a-b6cd2a753ef0,1,0,22cc42ac-80a9-4420-8f8f-9b4a887354d1,22cc42ac-80a9-4420-8f8f-9b4a887354d1,1,0,9323e1ef-0efd-4817-b3a1-e36af26dffe1,9323e1ef-0efd-4817-b3a1-e36af26dffe1,1,0,c5f0e803-c86a-497c-aee6-a4a3ee1ab326,c5f0e803-c86a-497c-aee6-a4a3ee1ab326,1,0,7521779c-5476-4e2e-8c6a-a2407b884aab,7521779c-5476-4e2e-8c6a-a2407b884aab,1,0,454209eb-c146-4b3e-b58c-1092cdcdc59c,454209eb-c146-4b3e-b58c-1092cdcdc59c,1,0,83e6a138-c014-40bc-a244-2eda3dadf8f7,83e6a138-c014-40bc-a244-2eda3dadf8f7,1,0,ccf9844e-b8ce-42c7-a651-2c5a6f71b8ca,ccf9844e-b8ce-42c7-a651-2c5a6f71b8ca,1,0,be7d6af6-dd09-4fdf-9a4e-595331854f78,be7d6af6-dd09-4fdf-9a4e-595331854f78,1,0,23fbe4c8-8e00-4de3-ae17-fc93f21afafd,23fbe4c8-8e00-4de3-ae17-fc93f21afafd,1,0,1a585d77-b97c-409a-a42e-537812032109,1a585d77-b97c-409a-a42e-537812032109,1,0,7765357b-70c8-41ad-b3d4-699d212bc974,7765357b-70c8-41ad-b3d4-699d212bc974,1,0,584d4496-f9ca-4f8c-a670-11d9a37dd3e8,584d4496-f9ca-4f8c-a670-11d9a37dd3e8,1,0,45f36b43-2452-4e58-9413-2c6340330c84,45f36b43-2452-4e58-9413-2c6340330c84,1,0,36c0c0fd-6ad6-4a27-90fc-5ad07c76b9d3,36c0c0fd-6ad6-4a27-90fc-5ad07c76b9d3,1,0,bc7d78cc-c06e-43f2-8a3a-cedc584d8a72,bc7d78cc-c06e-43f2-8a3a-cedc584d8a72,1,0,093e5e94-4962-4070-ae96-a7e5c8795a41,093e5e94-4962-4070-ae96-a7e5c8795a41,1,0,77f938c4-c2d8-4e15-bf1d-0cb679020857,77f938c4-c2d8-4e15-bf1d-0cb679020857,1,0,5321c500-397b-4dbe-8094-959d59a59365,5321c500-397b-4dbe-8094-959d59a59365,1,0,84ddcff7-f498-4eeb-91fd-79d72f75d79d,84ddcff7-f498-4eeb-91fd-79d72f75d79d,1,0,ea418f46-ab4a-48d9-b87e-aa1c96d66f1d,ea418f46-ab4a-48d9-b87e-aa1c96d66f1d,1,0,187fdb1c-f18b-4f7c-a75d-85de2a60ac99,187fdb1c-f18b-4f7c-a75d-85de2a60ac99,1,0,9e49ce31-2e18-4175-83bf-3bf779f49187,9e49ce31-2e18-4175-83bf-3bf779f49187,1,0,70707e18-c144-495b-848d-b1e0b34e11c6,70707e18-c144-495b-848d-b1e0b34e11c6,1,0,7acd5cdb-9e28-40ff-80c5-59d956f5e057,7acd5cdb-9e28-40ff-80c5-59d956f5e057,1,0,d4d4833a-be1b-4042-be45-3b6790323305,d4d4833a-be1b-4042-be45-3b6790323305,1,0,f11e7026-88e2-4775-a043-cf01d0cba9c0,f11e7026-88e2-4775-a043-cf01d0cba9c0,1,0,38991eb0-5563-4a9a-b502-2e2800c0fb8d,38991eb0-5563-4a9a-b502-2e2800c0fb8d,1,0,5bb7ba5a-de47-4cf7-9647-c7224fad283f,5bb7ba5a-de47-4cf7-9647-c7224fad283f,1,0,450ea121-a9e8-440c-98b4-def488064ecc,450ea121-a9e8-440c-98b4-def488064ecc,1,0,ee532196-d5d1-4998-84c4-0bbe2ab74a96,ee532196-d5d1-4998-84c4-0bbe2ab74a96,1,0,7e50e54e-fc96-46f9-98ef-e672a12e7e14,7e50e54e-fc96-46f9-98ef-e672a12e7e14,1,0,d897ad1c-91d7-4d10-a0d9-b63c0ebbd91b,d897ad1c-91d7-4d10-a0d9-b63c0ebbd91b,1,0,f31862f2-9e12-492c-bb00-1bb25119d33c,f31862f2-9e12-492c-bb00-1bb25119d33c,1,0,2186a8b7-967a-4302-b817-8b2a9ed6774b,2186a8b7-967a-4302-b817-8b2a9ed6774b,1,0,58db0e29-2228-4e7d-8621-04e094535433,58db0e29-2228-4e7d-8621-04e094535433,1,0,df752808-b56b-4f3c-9a90-9e69ef135cd8,df752808-b56b-4f3c-9a90-9e69ef135cd8,1,0,d2447ec9-9bb4-4f4f-8356-2386a9eae779,d2447ec9-9bb4-4f4f-8356-2386a9eae779,1,0,02fa8b71-2c04-44ad-bcee-33a1cce5bfd1,02fa8b71-2c04-44ad-bcee-33a1cce5bfd1,1,0,616983be-4432-4929-82ef-c87f51bd3eb4,616983be-4432-4929-82ef-c87f51bd3eb4,1,0,722591b6-f18d-4618-95ec-284bf321eea6,722591b6-f18d-4618-95ec-284bf321eea6,1,0,e08fdde8-12e4-4644-b38a-82415c2780f9,e08fdde8-12e4-4644-b38a-82415c2780f9,1,0,e7cf60ec-1f44-4cf7-9bfb-90863fb079b8,e7cf60ec-1f44-4cf7-9bfb-90863fb079b8,1,0,7e0874a3-f5f5-48ca-9efb-31ce9679530e,7e0874a3-f5f5-48ca-9efb-31ce9679530e,1,0,74618dab-b5cb-4c8b-9a6c-461b902c92e7,74618dab-b5cb-4c8b-9a6c-461b902c92e7,1,0,c711f573-98cf-429f-b4ab-4e594838f669,c711f573-98cf-429f-b4ab-4e594838f669,1,0,e186921e-237a-4fe0-bd88-ed8a5760bbe8,e186921e-237a-4fe0-bd88-ed8a5760bbe8,1,0,5aef42c3-79c7-4616-933e-029de7cac161,5aef42c3-79c7-4616-933e-029de7cac161,1,0,bbcfaf8c-ad66-40e6-a1b7-488ea0563d15,bbcfaf8c-ad66-40e6-a1b7-488ea0563d15,1,0,4255308d-3cbf-4f4d-a730-edc2038c9b6c,4255308d-3cbf-4f4d-a730-edc2038c9b6c,1,0,8d3bdabd-7524-4c9c-8953-96a7d23b1dc2,8d3bdabd-7524-4c9c-8953-96a7d23b1dc2,1,0,e4615ddb-aee0-499d-a847-86fa4923b6f1,e4615ddb-aee0-499d-a847-86fa4923b6f1,1,0,e2c2662d-ad36-403e-b266-ca1df45df39a,e2c2662d-ad36-403e-b266-ca1df45df39a,1,0,bad23883-ec1d-4a56-89fa-49961aed6ffe,bad23883-ec1d-4a56-89fa-49961aed6ffe,1,0,5a0e0d95-5439-4909-980c-4655d41dddee,5a0e0d95-5439-4909-980c-4655d41dddee,1,0,8bff6955-f58c-4645-971f-7c86a4af7fee,8bff6955-f58c-4645-971f-7c86a4af7fee,1,0,155d9ab0-5e8a-4faf-bbaa-692a099113d5,155d9ab0-5e8a-4faf-bbaa-692a099113d5,1,0,39074181-57b2-4618-bc3f-d71d51616fda,39074181-57b2-4618-bc3f-d71d51616fda,1,0,9c6f75ea-8d97-46a6-b244-a7cb5fcdf99e,9c6f75ea-8d97-46a6-b244-a7cb5fcdf99e,1,0,35f0ce14-0c4c-49c7-8fba-f3c111d5bedc,35f0ce14-0c4c-49c7-8fba-f3c111d5bedc,1,0,b023f7db-5278-4d5a-aba6-bbe35052cc48,b023f7db-5278-4d5a-aba6-bbe35052cc48,1,0,a61d0303-3809-47ba-8af6-379fbc7535e4,a61d0303-3809-47ba-8af6-379fbc7535e4,1,0,f7fad79a-c439-4b9f-ad4d-fe7211cbb96c,f7fad79a-c439-4b9f-ad4d-fe7211cbb96c,1,0,b0c9c7d7-c203-4927-8ba1-714e956697f8,b0c9c7d7-c203-4927-8ba1-714e956697f8,1,0,f97feb92-48e1-4da4-972a-06fb3e884a75,f97feb92-48e1-4da4-972a-06fb3e884a75,1,0,c486bcab-1359-4da0-b61d-57fa817949e9,c486bcab-1359-4da0-b61d-57fa817949e9,1,0,513c0510-3b85-4dda-b46f-2d9b820da444,513c0510-3b85-4dda-b46f-2d9b820da444,1,0,0843bb39-1eb0-48cb-ba92-efa562a2ccca,0843bb39-1eb0-48cb-ba92-efa562a2ccca,1,0,fead1ba7-910d-4f83-9e59-8c9c0bb77a73,fead1ba7-910d-4f83-9e59-8c9c0bb77a73,1,0,17081af5-ef21-4df2-a380-cd7d00553088,17081af5-ef21-4df2-a380-cd7d00553088,1,0,cd38b0cb-612c-4d6b-b5ca-bd1fdcf526f9,cd38b0cb-612c-4d6b-b5ca-bd1fdcf526f9,1,0,294e235b-796e-4656-af40-29046834eca9,294e235b-796e-4656-af40-29046834eca9,1,0,6e26d99f-e2c3-44f0-978a-6b7ab55526fc,6e26d99f-e2c3-44f0-978a-6b7ab55526fc,1,0,230262f9-bcaa-45fb-8b7c-48194a4199d2,230262f9-bcaa-45fb-8b7c-48194a4199d2,1,0,80cab634-4949-46a2-b9be-44d1a4062efa,80cab634-4949-46a2-b9be-44d1a4062efa,1,0,edfd93f1-9bdf-4285-a3fb-fac870921560,edfd93f1-9bdf-4285-a3fb-fac870921560,1,0,274c18a1-dd5c-4ac6-bab2-3075e9a020a3,274c18a1-dd5c-4ac6-bab2-3075e9a020a3,1,0,8d7595d0-bf98-4142-a29f-c7a0b2c6bff4,8d7595d0-bf98-4142-a29f-c7a0b2c6bff4,1,0,7eb42457-3967-4d49-bbe3-7f988db4560e,7eb42457-3967-4d49-bbe3-7f988db4560e,1,0,60f27726-8d8a-4423-968e-a5fe308447e3,60f27726-8d8a-4423-968e-a5fe308447e3,1,0,2d89cbfd-3748-4b86-adff-9c0c9d4f3ec4,2d89cbfd-3748-4b86-adff-9c0c9d4f3ec4,1,0,bc0934a0-c169-4ab5-b306-f4338c13182c,bc0934a0-c169-4ab5-b306-f4338c13182c,1,0,8acbfd4e-b61c-464d-97ed-df7cfebc3acf,8acbfd4e-b61c-464d-97ed-df7cfebc3acf,1,0,dea9eddc-62e9-4d8e-8e41-867400f2cb61,dea9eddc-62e9-4d8e-8e41-867400f2cb61,1,0,d5f7db0d-4309-405f-8675-d5bc456d048f,d5f7db0d-4309-405f-8675-d5bc456d048f,1,0,92e3a689-94a6-4301-9ef2-e89bb16b0c7c,92e3a689-94a6-4301-9ef2-e89bb16b0c7c,1,0,f8bcab85-26a3-4aad-9bd0-9a32860b91eb,f8bcab85-26a3-4aad-9bd0-9a32860b91eb,1,0,9c4d7618-de08-4bae-85a3-b434184f9e66,9c4d7618-de08-4bae-85a3-b434184f9e66,1,0,2acc0aec-ba7a-4fc0-91e8-6a8d02561378,2acc0aec-ba7a-4fc0-91e8-6a8d02561378,1,0,5ff105eb-4a82-48ed-997a-4eb775811043,5ff105eb-4a82-48ed-997a-4eb775811043,1,0,607ef49d-f1fc-485c-a315-af2d1bb3b68c,607ef49d-f1fc-485c-a315-af2d1bb3b68c,1,0,30a19b83-24ea-4024-bf3d-2995ba003f95,30a19b83-24ea-4024-bf3d-2995ba003f95,1,0,d00ca7f4-d265-48f1-82e5-837b35cecaee,d00ca7f4-d265-48f1-82e5-837b35cecaee,1,0,2d963a12-7d6f-48fe-8f57-14aa47c10c9c,2d963a12-7d6f-48fe-8f57-14aa47c10c9c,1,0,fe2eb4ea-b2a4-4e4c-969b-5f97499325d3,fe2eb4ea-b2a4-4e4c-969b-5f97499325d3,1,0,f480a1b7-0012-4556-ad25-6ae671a448ce,f480a1b7-0012-4556-ad25-6ae671a448ce,1,0,2ddb0973-4e24-4538-a0b7-501f8609659d,2ddb0973-4e24-4538-a0b7-501f8609659d,1,0,1fe74dc3-378d-49bf-8fd1-924e220b8ea5,1fe74dc3-378d-49bf-8fd1-924e220b8ea5,1,0,f0c0e24a-d414-4d28-aaae-f314bbd0beb8,f0c0e24a-d414-4d28-aaae-f314bbd0beb8,1,0,59c33da7-0a63-41ab-9a3d-3b9d80df94fa,59c33da7-0a63-41ab-9a3d-3b9d80df94fa,1,0,cfa8d6fc-4005-4c66-9e42-56be78108911,cfa8d6fc-4005-4c66-9e42-56be78108911,1,0,cda478d0-5726-4be3-9da2-3c8d62f91cd9,cda478d0-5726-4be3-9da2-3c8d62f91cd9,1,0,1fec562f-77d8-4445-adf8-7f512db477f7,1fec562f-77d8-4445-adf8-7f512db477f7,1,0,48f107ea-60f5-4e60-b1c4-92264a6d32e4,48f107ea-60f5-4e60-b1c4-92264a6d32e4,1,0,d1fae748-38cf-4f17-b438-e4a0e5cb0765,d1fae748-38cf-4f17-b438-e4a0e5cb0765,1,0,840deffa-22c3-4135-bac2-97452a9211d8,840deffa-22c3-4135-bac2-97452a9211d8,1,0,f791be60-ace4-4ab1-9333-87e2320ff957,f791be60-ace4-4ab1-9333-87e2320ff957,1,0,daf6af01-3635-4d86-88e6-1eb0e2a21d23,daf6af01-3635-4d86-88e6-1eb0e2a21d23,1,0,68361d2a-56cc-4ee5-bbe3-a3a99f6dfcac,68361d2a-56cc-4ee5-bbe3-a3a99f6dfcac,1,0,e558d782-4f69-4a60-9283-dbd08184a93e,e558d782-4f69-4a60-9283-dbd08184a93e,1,0,a332ead0-386e-4cfa-ba70-a56a66e9d098,a332ead0-386e-4cfa-ba70-a56a66e9d098,1,0,9c843808-2c1a-447b-bfd9-303c01311769,9c843808-2c1a-447b-bfd9-303c01311769,1,0,640cda29-5303-45da-be8e-dd1a11bed532,640cda29-5303-45da-be8e-dd1a11bed532,1,0,9165f8be-f961-4042-b11f-7b4efc228c7c,9165f8be-f961-4042-b11f-7b4efc228c7c,1,0,af9fce50-1ffc-44b7-b1e5-8593f7fa41f2,af9fce50-1ffc-44b7-b1e5-8593f7fa41f2,1,0,f1296cd5-9063-4eaa-9ea5-9e6a2c25547e,f1296cd5-9063-4eaa-9ea5-9e6a2c25547e,1,0,0a677e6b-626b-40b4-9fbe-104124a3a787,0a677e6b-626b-40b4-9fbe-104124a3a787,1,0,c353c92b-da91-4880-a1cb-829502dff4bb,c353c92b-da91-4880-a1cb-829502dff4bb,1,0,46d7490e-9f9f-4a1c-a993-93daf6b4f9d9,46d7490e-9f9f-4a1c-a993-93daf6b4f9d9,1,0,d706ac34-3097-4e1a-a090-d0ed690a910b,d706ac34-3097-4e1a-a090-d0ed690a910b,1,0,6091611a-965a-4403-a6ac-4786a63930a5,6091611a-965a-4403-a6ac-4786a63930a5,1,0,5d298dc5-efa9-45f0-9665-9b6b0252c76a,5d298dc5-efa9-45f0-9665-9b6b0252c76a,1,0,d16cba57-1dde-45ce-b8e1-75f08b9933de,d16cba57-1dde-45ce-b8e1-75f08b9933de,1,0,6f76c28f-3f40-4b5c-b505-624ef6ec5a4f,6f76c28f-3f40-4b5c-b505-624ef6ec5a4f,1,0,d0a6a700-d56f-492e-b936-bd915bf64b82,d0a6a700-d56f-492e-b936-bd915bf64b82,1,0,8dd6e67f-c1b0-435a-ae1a-3e3ea88fb5ad,8dd6e67f-c1b0-435a-ae1a-3e3ea88fb5ad,1,0,e55aa354-7149-4fde-b18a-5b25c2f3f419,e55aa354-7149-4fde-b18a-5b25c2f3f419,1,0,4389a400-bbb2-47e8-ab8d-321e6acaf951,4389a400-bbb2-47e8-ab8d-321e6acaf951,1,0,d9721a2b-f955-4248-9d0e-e006d3b7433a,d9721a2b-f955-4248-9d0e-e006d3b7433a,1,0,8ed0fcc0-ed75-45fe-93db-e50e2cd0f93c,8ed0fcc0-ed75-45fe-93db-e50e2cd0f93c,1,0,bda4f526-c510-440d-bd93-090cc49ae143,bda4f526-c510-440d-bd93-090cc49ae143,1,0,bfb711e4-006f-4a18-a8a1-48869f52cf64,bfb711e4-006f-4a18-a8a1-48869f52cf64,1,0,8fccbf91-d95e-4116-ae2b-2bde65f37a3f,8fccbf91-d95e-4116-ae2b-2bde65f37a3f,1,0,eeb30c47-1eeb-46a2-a327-a1bba111f058,eeb30c47-1eeb-46a2-a327-a1bba111f058,1,0,30311453-3a66-4586-8227-fc5b7c84734d,30311453-3a66-4586-8227-fc5b7c84734d,1,0,f3af3404-9a2b-4df5-abe9-7bb5f4137355,f3af3404-9a2b-4df5-abe9-7bb5f4137355,1,0,61c468e7-9371-4a56-9d65-3d5bb41f4968,61c468e7-9371-4a56-9d65-3d5bb41f4968,1,0,74935747-9554-4538-98fe-a283a8a850a4,74935747-9554-4538-98fe-a283a8a850a4,1,0,984f3303-eae7-45c4-859c-995c865811c4,984f3303-eae7-45c4-859c-995c865811c4,1,0,2d5eaffb-f030-45c4-936e-6857da52ab36,2d5eaffb-f030-45c4-936e-6857da52ab36,1,0,6641da22-aa42-446a-93fa-d0e2249d7a49,6641da22-aa42-446a-93fa-d0e2249d7a49,1,0,41fdb501-d513-497b-a462-9925fa8ce0eb,41fdb501-d513-497b-a462-9925fa8ce0eb,1,0,e4c435ca-d90b-4943-91be-ecdd12f83c61,e4c435ca-d90b-4943-91be-ecdd12f83c61,1,0,9cd72b2a-d59e-438b-837c-f7adbc5b9f19,9cd72b2a-d59e-438b-837c-f7adbc5b9f19,1,0,9f9d7b6a-0c95-4f90-8a6e-4363ee413329,9f9d7b6a-0c95-4f90-8a6e-4363ee413329,1,0,331de91d-f5b5-4645-a3b2-785cb815643a,331de91d-f5b5-4645-a3b2-785cb815643a,1,0,235d2316-634a-42f6-8c7c-6a546feca7f7,235d2316-634a-42f6-8c7c-6a546feca7f7,1,0,809142ae-57bb-424f-a90d-44ebaafa7db5,809142ae-57bb-424f-a90d-44ebaafa7db5,1,0,f2076c19-cefb-415a-aaa3-6dac2884cf12,f2076c19-cefb-415a-aaa3-6dac2884cf12,1,0,575883be-20fd-4a0c-81bc-69227e0463f1,575883be-20fd-4a0c-81bc-69227e0463f1,1,0,f6857ff3-9218-4cff-9f16-4a9194777c49,f6857ff3-9218-4cff-9f16-4a9194777c49,1,0,7fb6dd39-05ea-4a54-a0e0-d97a7072d098,7fb6dd39-05ea-4a54-a0e0-d97a7072d098,1,0,02235eb2-fc28-4809-b715-ab91063772da,02235eb2-fc28-4809-b715-ab91063772da,1,0,ab796095-2eba-4e17-825a-132aba06a50d,ab796095-2eba-4e17-825a-132aba06a50d,1,0,6d612c75-cdac-45f2-9810-3f94401534b5,6d612c75-cdac-45f2-9810-3f94401534b5,1,0,5668c91f-78e6-446d-b1d9-43270e96f7d9,5668c91f-78e6-446d-b1d9-43270e96f7d9,1,0,98b241b6-8d9d-4dae-a8ac-7ffceba6b618,98b241b6-8d9d-4dae-a8ac-7ffceba6b618,1,0,bd2a7c39-fb6c-494b-a947-d851e90d1e7a,bd2a7c39-fb6c-494b-a947-d851e90d1e7a,1,0,0bb546e4-8db5-41b2-a5b6-fb4d8fd6388a,0bb546e4-8db5-41b2-a5b6-fb4d8fd6388a,1,0,3fe785f5-f5d8-4648-9cec-91bc30cb3f9f,3fe785f5-f5d8-4648-9cec-91bc30cb3f9f,1,0,d5af826b-3a92-4681-bb5e-dae5e1516375,d5af826b-3a92-4681-bb5e-dae5e1516375,1,0,26b43144-e17e-4556-8eb7-e0eb25249b21,26b43144-e17e-4556-8eb7-e0eb25249b21,1,0,972ed56f-fa36-4d01-b73f-1f74abf5037b,972ed56f-fa36-4d01-b73f-1f74abf5037b,1,0,defdccf0-3e72-4de0-923b-84ce574cd445,defdccf0-3e72-4de0-923b-84ce574cd445,1,0,cb572206-30fc-4702-a2f5-711397e11c1c,cb572206-30fc-4702-a2f5-711397e11c1c,1,0,bfd1039b-4767-442c-93eb-e8d8ba200c84,bfd1039b-4767-442c-93eb-e8d8ba200c84,1,0,c0f47771-4ca9-46c9-865e-ef39cd4e73a2,c0f47771-4ca9-46c9-865e-ef39cd4e73a2,1,0,16d24854-926b-4187-86e1-b24a7f93c4e6,16d24854-926b-4187-86e1-b24a7f93c4e6,1,0,4533145d-7dbf-4ac7-87d8-744a70ec4ad4,4533145d-7dbf-4ac7-87d8-744a70ec4ad4,1,0,a0edd2c5-0d9d-4669-a373-0ee6074df4e6,a0edd2c5-0d9d-4669-a373-0ee6074df4e6,1,0,91f5da46-00f1-494a-afe0-53d550b0ffdc,91f5da46-00f1-494a-afe0-53d550b0ffdc,1,0,ef30c08a-b2ab-4649-bdd8-34b92f6f5801,ef30c08a-b2ab-4649-bdd8-34b92f6f5801,1,0,f0466427-6483-4a70-aa4c-e3fe34c3ffbe,f0466427-6483-4a70-aa4c-e3fe34c3ffbe,1,0,538fc5bc-0d07-4a86-8e6b-2ba83af02cf9,538fc5bc-0d07-4a86-8e6b-2ba83af02cf9,1,0,8ea16cd9-a62e-4598-8f6c-6bd55d4a7480,8ea16cd9-a62e-4598-8f6c-6bd55d4a7480,1,0,3fb0f944-27d7-496e-b454-9d3b880f912d,3fb0f944-27d7-496e-b454-9d3b880f912d,1,0,66a698a8-d1b6-4306-8b2c-e513250c7293,66a698a8-d1b6-4306-8b2c-e513250c7293,1,0,97164bf4-4fdd-4e5a-8456-e0c23d75b8eb,97164bf4-4fdd-4e5a-8456-e0c23d75b8eb,1,0,6cf603ed-8bca-47de-8435-4e0117ff034f,6cf603ed-8bca-47de-8435-4e0117ff034f,1,0,f5316ac8-45b2-4033-a6b0-c14324d14ae4,f5316ac8-45b2-4033-a6b0-c14324d14ae4,1,0,aea86c55-2a8a-425d-8379-95ca46ff88f2,aea86c55-2a8a-425d-8379-95ca46ff88f2,1,0,900a591d-8388-45a1-973c-8630ee0ff9b4,900a591d-8388-45a1-973c-8630ee0ff9b4,1,0,5c000000-78cf-4704-9ae6-28aa68d773b0,5c000000-78cf-4704-9ae6-28aa68d773b0,1,0,03eacfee-75e5-4b7a-93ec-b5f6234ed04d,03eacfee-75e5-4b7a-93ec-b5f6234ed04d,1,0,a91e677f-4727-44f0-a0a1-7835e3f173be,a91e677f-4727-44f0-a0a1-7835e3f173be,1,0,5309a6dc-7a2f-4db1-8eab-5bdca58a5cae,5309a6dc-7a2f-4db1-8eab-5bdca58a5cae,1,0,8f257dfb-7980-4324-b5c6-db74344e5439,8f257dfb-7980-4324-b5c6-db74344e5439,1,0,9dda0853-53b6-4531-adc5-a29653d373e0,9dda0853-53b6-4531-adc5-a29653d373e0,1,0,8fea1445-7ac7-4fc8-8bbb-c2781213b2c6,8fea1445-7ac7-4fc8-8bbb-c2781213b2c6,1,0,c4d60f8f-9ea2-4229-872e-a5d420436dd9,c4d60f8f-9ea2-4229-872e-a5d420436dd9,1,0,fbedc08f-6d24-483b-8133-0ed6f6171ddb,fbedc08f-6d24-483b-8133-0ed6f6171ddb,1,0,f844b4e0-f43f-471a-93a1-dea9d889c529,f844b4e0-f43f-471a-93a1-dea9d889c529,1,0,9973226e-8f79-41ff-b62b-1519341c11e7,9973226e-8f79-41ff-b62b-1519341c11e7,1,0,dcf8e756-a15a-4f27-8cda-d167dc46957e,dcf8e756-a15a-4f27-8cda-d167dc46957e,1,0,a6ee22d2-96f3-4a29-ace7-9ae2480424e0,a6ee22d2-96f3-4a29-ace7-9ae2480424e0,1,0,520a0368-b13d-415b-b5c7-f3b002c55e73,520a0368-b13d-415b-b5c7-f3b002c55e73,1,0,68389e16-75ce-40c1-97e0-a0c1283a91fa,68389e16-75ce-40c1-97e0-a0c1283a91fa,1,0,4faa8e43-5ce7-4e07-a333-2a9038a08476,4faa8e43-5ce7-4e07-a333-2a9038a08476,1,0,77bc21e8-7160-4199-b9a4-f706dc6f9b95,77bc21e8-7160-4199-b9a4-f706dc6f9b95,1,0,d1a3f795-baf1-4a3b-952d-0891544af68b,d1a3f795-baf1-4a3b-952d-0891544af68b,1,0,917240b1-0ba9-41dd-9c98-a0d095c0688c,917240b1-0ba9-41dd-9c98-a0d095c0688c,1,0,ac601922-7ec2-474a-83fe-538fb663c37a,ac601922-7ec2-474a-83fe-538fb663c37a,1,0,01ac9728-c35d-41cc-a459-cf3ae8ee813c,01ac9728-c35d-41cc-a459-cf3ae8ee813c,1,0,98012e7d-d864-489e-867f-8c396a8fed21,98012e7d-d864-489e-867f-8c396a8fed21,1,0,c526b3f2-f8c8-45ad-94f8-e12f27802a11,c526b3f2-f8c8-45ad-94f8-e12f27802a11,1,0,ec391a89-80f3-4eaa-81e2-c4c0fdd99c0a,ec391a89-80f3-4eaa-81e2-c4c0fdd99c0a,1,0,bfaee19a-4bcf-47d7-bbad-3946786ca669,bfaee19a-4bcf-47d7-bbad-3946786ca669,1,0,1bb1d54e-b60a-491f-ba76-ca9a973c0904,1bb1d54e-b60a-491f-ba76-ca9a973c0904,1,0,c857ac3a-68b1-42b9-9dfd-93ab2d1fba77,c857ac3a-68b1-42b9-9dfd-93ab2d1fba77,1,0,b9fcc8eb-fd2f-4780-b6a5-70bb6d30fac7,b9fcc8eb-fd2f-4780-b6a5-70bb6d30fac7,1,0,84180d74-2b80-4aad-adc0-554a0ebbbf0b,84180d74-2b80-4aad-adc0-554a0ebbbf0b,1,0,d77e5534-5b70-465f-b15e-19e3d0c6782e,d77e5534-5b70-465f-b15e-19e3d0c6782e,1,0,768e28d2-e8dd-4bc6-aff4-a587eb1d7949,768e28d2-e8dd-4bc6-aff4-a587eb1d7949,1,0,9b42453f-1de7-4aed-8330-106edc1c7cd7,9b42453f-1de7-4aed-8330-106edc1c7cd7,1,0,9f13a35f-95b8-4bde-9bad-480612fa5f32,9f13a35f-95b8-4bde-9bad-480612fa5f32,1,0,aef0484e-2a19-48ee-9c25-525d59199433,aef0484e-2a19-48ee-9c25-525d59199433,1,0,264a4c30-d115-4769-87bd-cddaa3747808,264a4c30-d115-4769-87bd-cddaa3747808,1,0,0fd2f42a-44be-4f3a-bad4-31bac6f88b64,0fd2f42a-44be-4f3a-bad4-31bac6f88b64,1,0,e2c7dbdf-6807-4974-aa9d-35331cd88f96,e2c7dbdf-6807-4974-aa9d-35331cd88f96,1,0,2fe36e1a-5dfe-414e-87ba-6afa356d44e4,2fe36e1a-5dfe-414e-87ba-6afa356d44e4,1,0,347107d3-6c4c-4c32-b910-5bbc21cf394d,347107d3-6c4c-4c32-b910-5bbc21cf394d,1,0,e9412e04-b19c-4142-b6f9-1d6575e3c282,e9412e04-b19c-4142-b6f9-1d6575e3c282,1,0,a305ed53-6d00-4e68-be4f-e2580960a7a9,a305ed53-6d00-4e68-be4f-e2580960a7a9,1,0,974336c6-63ae-4f03-aaf7-b52ce2c7f207,974336c6-63ae-4f03-aaf7-b52ce2c7f207,1,0,535cfe1f-6a7b-4830-ad69-e7b4f0335575,535cfe1f-6a7b-4830-ad69-e7b4f0335575,1,0,232ce8ef-bf96-46cc-8b1e-e67f437d8dda,232ce8ef-bf96-46cc-8b1e-e67f437d8dda,1,0,621b3433-a705-4ba9-8ffe-54e60de8fb8c,621b3433-a705-4ba9-8ffe-54e60de8fb8c,1,0,88483c3d-93b0-4eaa-85ae-491f6d279725,88483c3d-93b0-4eaa-85ae-491f6d279725,1,0,84f2105e-a1bc-44a5-80cc-2b0e1e7d7460,84f2105e-a1bc-44a5-80cc-2b0e1e7d7460,1,0,f52d8734-d18b-49b5-ba1b-952ec1dc4d34,f52d8734-d18b-49b5-ba1b-952ec1dc4d34,1,0,4218e013-5733-493c-bd2b-0d04064c3de0,4218e013-5733-493c-bd2b-0d04064c3de0,1,0,c4e56496-1731-4afa-b625-afe6f8481f73,c4e56496-1731-4afa-b625-afe6f8481f73,1,0,cb829d05-c466-4f45-ab17-513f607876b7,cb829d05-c466-4f45-ab17-513f607876b7,1,0,576f9c3e-6700-450b-b754-b56a558e8cb2,576f9c3e-6700-450b-b754-b56a558e8cb2,1,0,9cddeb15-b6b4-44d2-947e-d5f97f93bb10,9cddeb15-b6b4-44d2-947e-d5f97f93bb10,1,0,26e8e7c5-45de-4fa0-8bec-e11628f88558,26e8e7c5-45de-4fa0-8bec-e11628f88558,1,0,03a931e1-8e58-4c48-964d-da322d8c141a,03a931e1-8e58-4c48-964d-da322d8c141a,1,0,fbe52190-875e-4ddf-a9de-e194115a9049,fbe52190-875e-4ddf-a9de-e194115a9049,1,0,25eae4f2-ae39-4664-a587-2341ac8447bc,25eae4f2-ae39-4664-a587-2341ac8447bc,1,0,1a67b35c-19b1-484d-bd87-8ceb7a0df166,1a67b35c-19b1-484d-bd87-8ceb7a0df166,1,0,3449cbb3-95e8-4cbd-a393-b153d450fa5a,3449cbb3-95e8-4cbd-a393-b153d450fa5a,1,0,95ac5106-f3c9-457c-9fc9-4e4fe35d4e2b,95ac5106-f3c9-457c-9fc9-4e4fe35d4e2b,1,0,07057998-bd48-426a-8680-191c6ba802b1,07057998-bd48-426a-8680-191c6ba802b1,1,0,20118856-5e5f-437a-b97c-ae56cf608672,20118856-5e5f-437a-b97c-ae56cf608672,1,0,36e20f97-751c-4bed-bfe9-5b0bcbcd6093,36e20f97-751c-4bed-bfe9-5b0bcbcd6093,1,0,a4f58d69-f582-4517-a5e2-7e36fb43ed9f,a4f58d69-f582-4517-a5e2-7e36fb43ed9f,1,0,00e97d74-6c99-41bb-8b23-5482d04a7a50,00e97d74-6c99-41bb-8b23-5482d04a7a50,1,0,1f86e996-1de9-4fe1-ba84-3b217d2e6e05,1f86e996-1de9-4fe1-ba84-3b217d2e6e05,1,0,ec983a14-3311-4da7-bbb9-48e0a413bd19,ec983a14-3311-4da7-bbb9-48e0a413bd19,1,0,91219944-7f36-4ceb-b770-4218fc73634f,91219944-7f36-4ceb-b770-4218fc73634f,1,0,dbc4c9f1-151b-4c3c-9996-a60dbed47a5f,dbc4c9f1-151b-4c3c-9996-a60dbed47a5f,1,0,2182d9f1-ca13-488e-9613-7ccca58b94d3,2182d9f1-ca13-488e-9613-7ccca58b94d3,1,0,ab97ea88-4d37-448a-811d-69334266b56a,ab97ea88-4d37-448a-811d-69334266b56a,1,0,8a134d82-8e76-49a9-a0ae-e60aab3d90a3,8a134d82-8e76-49a9-a0ae-e60aab3d90a3,1,0,295dae1e-8e25-4f86-9f4d-e41dc1583f5e,295dae1e-8e25-4f86-9f4d-e41dc1583f5e,1,0,bdb65dc2-3bd9-43fa-a63b-276accd2304b,bdb65dc2-3bd9-43fa-a63b-276accd2304b,1,0,c536f022-c8b0-43d2-bc4a-307a90b68827,c536f022-c8b0-43d2-bc4a-307a90b68827,1,0,b997b0b6-26c6-42c8-8c11-06df0d0cb258,b997b0b6-26c6-42c8-8c11-06df0d0cb258,1,0,57cb4e1f-060b-4a9f-874b-3b6ada17c3ca,57cb4e1f-060b-4a9f-874b-3b6ada17c3ca,1,0,7117d3e4-b8b1-4a6a-b192-c630d7a2dc8b,7117d3e4-b8b1-4a6a-b192-c630d7a2dc8b,1,0,2be1bc9e-9a3d-4590-92ee-81483bff4e29,2be1bc9e-9a3d-4590-92ee-81483bff4e29,1,0,ad3698bc-fde5-45fb-9811-12269fa96b60,ad3698bc-fde5-45fb-9811-12269fa96b60,1,0,0fc3d3ad-6577-4b40-8fb9-0ca1debe591f,0fc3d3ad-6577-4b40-8fb9-0ca1debe591f,1,0,267dfc39-468c-4869-8b78-33a41bcda57b,267dfc39-468c-4869-8b78-33a41bcda57b,1,0,68cb5348-ee10-4d67-b733-947829adb2b9,68cb5348-ee10-4d67-b733-947829adb2b9,1,0,48a2be8c-8487-4193-8b16-5a15c6f2a225,48a2be8c-8487-4193-8b16-5a15c6f2a225,1,0,d8d82846-21ba-4ee0-b61f-c66d9016709f,d8d82846-21ba-4ee0-b61f-c66d9016709f,1,0,1a3abe65-fd2f-4967-ab68-0b25af0efbd0,1a3abe65-fd2f-4967-ab68-0b25af0efbd0,1,0,d2086816-3f06-49ce-a224-318364515f2d,d2086816-3f06-49ce-a224-318364515f2d,1,0,65a388b3-c5d6-4304-b8c6-f45cc7527486,65a388b3-c5d6-4304-b8c6-f45cc7527486,1,0,7b97cdde-1562-4695-89a3-fb1c0adda13e,7b97cdde-1562-4695-89a3-fb1c0adda13e,1,0,be4ca6b0-21c3-4278-9453-8fd2713c5c4e,be4ca6b0-21c3-4278-9453-8fd2713c5c4e,1,0,c361cf46-9ff6-404b-9ed2-59b563be614e,c361cf46-9ff6-404b-9ed2-59b563be614e,1,0,8f91b43e-4899-4ef2-8011-442cf57e4493,8f91b43e-4899-4ef2-8011-442cf57e4493,1,0,3516e9d8-4c31-40f7-831d-2f607b77961b,3516e9d8-4c31-40f7-831d-2f607b77961b,1,0,6c3d351f-6f3b-4d5b-8bda-57cf73acda15,6c3d351f-6f3b-4d5b-8bda-57cf73acda15,1,0,cbb7fe44-ecf7-4971-b8b2-0de6112f4e30,cbb7fe44-ecf7-4971-b8b2-0de6112f4e30,1,0,1886734d-3504-45a7-8113-4ebcc8a1218b,1886734d-3504-45a7-8113-4ebcc8a1218b,1,0,9abbeb89-b2c3-420c-a5cb-ccc356db5387,9abbeb89-b2c3-420c-a5cb-ccc356db5387,1,0,ebbb525f-e315-4f09-b240-f8d93a0d8916,ebbb525f-e315-4f09-b240-f8d93a0d8916,1,0,c10d0834-ef79-46e5-99a6-0974daa53428,c10d0834-ef79-46e5-99a6-0974daa53428,1,0,a3afcfca-adeb-462f-8bfa-e84285e8ee8a,a3afcfca-adeb-462f-8bfa-e84285e8ee8a,1,0,0ce8b040-a42a-40cb-a382-836aa4ddb740,0ce8b040-a42a-40cb-a382-836aa4ddb740,1,0,f706cf88-ae26-4492-8b5d-b4aeccec8b87,f706cf88-ae26-4492-8b5d-b4aeccec8b87,1,0,8d69932f-d950-4553-be3b-e5c4336f82a9,8d69932f-d950-4553-be3b-e5c4336f82a9,1,0,0db44dcb-8deb-4969-98ca-52848ec1d05f,0db44dcb-8deb-4969-98ca-52848ec1d05f,1,0,3a9b5699-5f02-4701-a8e4-50724eba1c6d,3a9b5699-5f02-4701-a8e4-50724eba1c6d,1,0,89be63e4-9bb9-43f9-9f67-741c31ff52a2,89be63e4-9bb9-43f9-9f67-741c31ff52a2,1,0,da783bd1-8b77-4f23-b0d4-e19a838a31f3,da783bd1-8b77-4f23-b0d4-e19a838a31f3,1,0,7c96c4a6-f3db-463e-b706-1b0d699feea9,7c96c4a6-f3db-463e-b706-1b0d699feea9,1,0,14d007ec-5662-4d43-aa08-b47acd61f696,14d007ec-5662-4d43-aa08-b47acd61f696,1,0,eda1b74b-9d8a-4dd3-a68c-129ff9023474,eda1b74b-9d8a-4dd3-a68c-129ff9023474,1,0,136a5a84-08e2-431d-bfe5-fe7f81ba4c96,136a5a84-08e2-431d-bfe5-fe7f81ba4c96,1,0,f5397e0b-79d6-4e3d-90dc-83af0b2cac57,f5397e0b-79d6-4e3d-90dc-83af0b2cac57,1,0,17b91ea7-b8aa-497d-b6fe-38190b8e2e9c,17b91ea7-b8aa-497d-b6fe-38190b8e2e9c,1,0,f0d62daf-4403-4971-b71d-59709409738d,f0d62daf-4403-4971-b71d-59709409738d,1,0,f44078b2-4820-4274-a41d-c4c3aa528712,f44078b2-4820-4274-a41d-c4c3aa528712,1,0,0cc5ac92-75a2-449f-a0b4-d732acd15e92,0cc5ac92-75a2-449f-a0b4-d732acd15e92,1,0,bb42bad7-207e-4432-926d-70d046682943,bb42bad7-207e-4432-926d-70d046682943,1,0,98ece7e3-9993-426c-9f12-3bb3dd82d53b,98ece7e3-9993-426c-9f12-3bb3dd82d53b,1,0,9826555a-7cfe-4fab-ad5d-6decd208fee4,9826555a-7cfe-4fab-ad5d-6decd208fee4,1,0,c63fa5e6-0656-475f-8c2a-814b3345651a,c63fa5e6-0656-475f-8c2a-814b3345651a,1,0,0da7e138-85eb-4143-9437-4d1ce8bfa604,0da7e138-85eb-4143-9437-4d1ce8bfa604,1,0,934d5cd3-7b36-4480-a2bd-7b4739f10a74,934d5cd3-7b36-4480-a2bd-7b4739f10a74,1,0,2d6051cc-ced1-4b0f-9530-7263ac198a4a,2d6051cc-ced1-4b0f-9530-7263ac198a4a,1,0,ada548af-124e-455e-8506-764e66199126,ada548af-124e-455e-8506-764e66199126,1,0,00c33565-f1ce-407d-9670-8e763c0ca6bd,00c33565-f1ce-407d-9670-8e763c0ca6bd,1,0,46743aa7-d2ec-4280-b1cb-b116e914cd3e,46743aa7-d2ec-4280-b1cb-b116e914cd3e,1,0,fa357c90-8ed0-4cb6-9eb4-dd2e25696447,fa357c90-8ed0-4cb6-9eb4-dd2e25696447,1,0,52e2e47d-f33b-4afd-820f-06e9831a1154,52e2e47d-f33b-4afd-820f-06e9831a1154,1,0,4f129e0c-e558-435f-8e75-765d72d6cea7,4f129e0c-e558-435f-8e75-765d72d6cea7,1,0,ef0047a6-8d55-4063-b339-836f29261388,ef0047a6-8d55-4063-b339-836f29261388,1,0,2f889580-107a-429a-9890-1e4cc1bcd479,2f889580-107a-429a-9890-1e4cc1bcd479,1,0,b8f3bd01-8fcb-40a7-859c-c9e1d69a987a,b8f3bd01-8fcb-40a7-859c-c9e1d69a987a,1,0,479be54f-958f-4282-937b-6790d7fd8a99,479be54f-958f-4282-937b-6790d7fd8a99,1,0,09e56293-a055-4f60-807d-0f9e2f7c2de6,09e56293-a055-4f60-807d-0f9e2f7c2de6,1,0,a53d23fe-a9ca-40e9-828d-484b687e42b9,a53d23fe-a9ca-40e9-828d-484b687e42b9,1,0,7dde962c-a5ca-49eb-9d9c-74dc0878c753,7dde962c-a5ca-49eb-9d9c-74dc0878c753,1,0,56874e5a-3a04-44aa-956e-527be57962e4,56874e5a-3a04-44aa-956e-527be57962e4,1,0,8eaa831a-5864-414e-950d-4bdbbb0bcd56,8eaa831a-5864-414e-950d-4bdbbb0bcd56,1,0,5a963618-add1-4b55-ab4e-90f89424ddd8,5a963618-add1-4b55-ab4e-90f89424ddd8,1,0,e3fdec3e-d2e7-418a-954b-9f8a7fef796b,e3fdec3e-d2e7-418a-954b-9f8a7fef796b,1,0,633f985d-14ff-4252-9b8c-62327b197684,633f985d-14ff-4252-9b8c-62327b197684,1,0,e5e1d345-1072-4485-a2e4-675a1e49d6aa,e5e1d345-1072-4485-a2e4-675a1e49d6aa,1,0,e711d013-7240-4a1c-8e46-7e8a931b6bca,e711d013-7240-4a1c-8e46-7e8a931b6bca,1,0,eb2e77ae-1306-471a-b402-e09b249b932c,eb2e77ae-1306-471a-b402-e09b249b932c,1,0,a1c53a4c-4caf-47c3-bca0-baa992e53562,a1c53a4c-4caf-47c3-bca0-baa992e53562,1,0,e55d0a9e-0c14-412a-aa21-b1f14c25fced,e55d0a9e-0c14-412a-aa21-b1f14c25fced,1,0,f3dc4594-15e7-4805-a0fa-7a9259d09cdd,f3dc4594-15e7-4805-a0fa-7a9259d09cdd,1,0,e13a1128-874b-45ad-b55f-846e8f4c2c82,e13a1128-874b-45ad-b55f-846e8f4c2c82,1,0,e2a5c57e-a632-4248-8501-9ef10f7dd633,e2a5c57e-a632-4248-8501-9ef10f7dd633,1,0,61c8c814-4879-4159-b07a-3d1742a5fc93,61c8c814-4879-4159-b07a-3d1742a5fc93,1,0,410b74f6-348a-45c9-8410-a79114f3c098,410b74f6-348a-45c9-8410-a79114f3c098,1,0,f1c77672-fc03-4798-b24a-9eb17cb839a7,f1c77672-fc03-4798-b24a-9eb17cb839a7,1,0,91a00902-1131-4799-bfc3-a10923059215,91a00902-1131-4799-bfc3-a10923059215,1,0,f5a4c843-a0b9-4438-ac44-8065391af53a,f5a4c843-a0b9-4438-ac44-8065391af53a,1,0,c9d93a1b-4457-4aed-af04-9897d63e9536,c9d93a1b-4457-4aed-af04-9897d63e9536,1,0,0347ddde-4a5b-4ae8-a607-85e0f8a40c50,0347ddde-4a5b-4ae8-a607-85e0f8a40c50,1,0,610e7581-2857-4dd6-82c9-94da7311197f,610e7581-2857-4dd6-82c9-94da7311197f,1,0,dabeb5bd-b213-4de8-8d52-e24ce1a77a55,dabeb5bd-b213-4de8-8d52-e24ce1a77a55,1,0,0bf50e16-60dc-4516-ad9b-0ea8c20eb965,0bf50e16-60dc-4516-ad9b-0ea8c20eb965,1,0,f4b7bb17-6828-4d85-8038-e9ab650d21ff,f4b7bb17-6828-4d85-8038-e9ab650d21ff,1,0,4b36d739-c33b-4996-b04b-fd0b49c33eef,4b36d739-c33b-4996-b04b-fd0b49c33eef,1,0,b92e2cfc-1f0b-46f2-8f04-4261846b34e0,b92e2cfc-1f0b-46f2-8f04-4261846b34e0,1,0,88cc3039-c496-4b4f-a01f-70ce6f495a8a,88cc3039-c496-4b4f-a01f-70ce6f495a8a,1,0,4e32d959-7cbb-41c3-a4e0-566cca7ebc81,4e32d959-7cbb-41c3-a4e0-566cca7ebc81,1,0,54c8aa47-6be5-4e60-8178-f82d9262784b,54c8aa47-6be5-4e60-8178-f82d9262784b,1,0,f803f41e-5a2a-4b66-94e4-86324a089356,f803f41e-5a2a-4b66-94e4-86324a089356,1,0,0b58ddd1-c90d-4559-a7fc-dc975019106f,0b58ddd1-c90d-4559-a7fc-dc975019106f,1,0,0ff75417-2d3e-46ed-a8a6-b06bc5fc8db1,0ff75417-2d3e-46ed-a8a6-b06bc5fc8db1,1,0,057980b7-a444-439b-804e-5f35cff3e041,057980b7-a444-439b-804e-5f35cff3e041,1,0,0e816f24-3e75-4129-98d1-b8dd21374353,0e816f24-3e75-4129-98d1-b8dd21374353,1,0,7588e7ef-0b80-4203-b4c9-d25990ed954d,7588e7ef-0b80-4203-b4c9-d25990ed954d,1,0,2c9ce12b-376d-4f76-8534-0b0f0a226b56,2c9ce12b-376d-4f76-8534-0b0f0a226b56,1,0,055d81c0-4f63-4917-955c-508afff18828,055d81c0-4f63-4917-955c-508afff18828,1,0,5d14b82f-d2f6-4027-a451-6e6bcaa4c87f,5d14b82f-d2f6-4027-a451-6e6bcaa4c87f,1,0,39c9beee-6e7a-4152-8777-5bdd68a1bb83,39c9beee-6e7a-4152-8777-5bdd68a1bb83,1,0,63230880-8ef5-469f-87d5-03f16c582d84,63230880-8ef5-469f-87d5-03f16c582d84,1,0,6a9a9474-586c-4ca7-844f-2c1df0e7fbe2,6a9a9474-586c-4ca7-844f-2c1df0e7fbe2,1,0,527ddddd-e9a5-4e4b-abfe-b48f3b46a31e,527ddddd-e9a5-4e4b-abfe-b48f3b46a31e,1,0,4c05d164-0c20-4a49-bdeb-6c3c6c6cf374,4c05d164-0c20-4a49-bdeb-6c3c6c6cf374,1,0,f22ba0a5-829b-490d-99ca-5f026e8bc65a,f22ba0a5-829b-490d-99ca-5f026e8bc65a,1,0,a38d54ac-2dc9-47d9-9721-8430c19ce255,a38d54ac-2dc9-47d9-9721-8430c19ce255,1,0,6c360f3d-6412-4fc7-bbd7-b5641592194e,6c360f3d-6412-4fc7-bbd7-b5641592194e,1,0,425ffdf0-9604-41e4-a697-15792405b5d0,425ffdf0-9604-41e4-a697-15792405b5d0,1,0,4324beac-84c6-4c20-b6fd-47b280162fb0,4324beac-84c6-4c20-b6fd-47b280162fb0,1,0,6b55dc03-4d6a-432e-8da6-1cb0cf31cdfc,6b55dc03-4d6a-432e-8da6-1cb0cf31cdfc,1,0,383dd6c1-4710-4c44-83eb-5384b43a9171,383dd6c1-4710-4c44-83eb-5384b43a9171,1,0,7fabe24c-f45d-4cc6-aad4-441d244e28e1,7fabe24c-f45d-4cc6-aad4-441d244e28e1,1,0,f960cb91-fdcc-43c2-82fe-ac93d58a4edc,f960cb91-fdcc-43c2-82fe-ac93d58a4edc,1,0,ad572ff6-6306-4a46-a1f2-eca2892ef1ab,ad572ff6-6306-4a46-a1f2-eca2892ef1ab,1,0,96a8a745-6dad-4aa5-85b7-a738c96f1d20,96a8a745-6dad-4aa5-85b7-a738c96f1d20,1,0,1673dc9b-3bbc-468c-8c43-7e19002edc5b,1673dc9b-3bbc-468c-8c43-7e19002edc5b,1,0,68aeaec4-a942-4123-a1bf-27a2e80dd2d4,68aeaec4-a942-4123-a1bf-27a2e80dd2d4,1,0,da5518ff-bcbb-4013-9f79-4814e5318bb2,da5518ff-bcbb-4013-9f79-4814e5318bb2,1,0,cc729b4b-f405-4db2-9995-efb3af2c78fc,cc729b4b-f405-4db2-9995-efb3af2c78fc,1,0,7750696c-90a1-494c-a7df-ea5616fae58b,7750696c-90a1-494c-a7df-ea5616fae58b,1,0,535663f6-580a-4312-a51c-899856990ed9,535663f6-580a-4312-a51c-899856990ed9,1,0,99b3c8ec-1b11-40c8-ba98-280b41cda3a8,99b3c8ec-1b11-40c8-ba98-280b41cda3a8,1,0,388de346-ae97-4511-982a-eb02623f49ee,388de346-ae97-4511-982a-eb02623f49ee,1,0,c2cee3ef-8a29-49ea-b754-d83d5beccf7d,c2cee3ef-8a29-49ea-b754-d83d5beccf7d,1,0,e8326735-eb8d-4a2e-a8e1-e174274fc336,e8326735-eb8d-4a2e-a8e1-e174274fc336,1,0,5332ea4d-d92a-4099-879c-9ecd84915c28,5332ea4d-d92a-4099-879c-9ecd84915c28,1,0,a69a2dba-aa58-4afe-bf26-b7ebff631acf,a69a2dba-aa58-4afe-bf26-b7ebff631acf,1,0,72b1c980-6ebf-4484-8ddd-52f8e0558132,72b1c980-6ebf-4484-8ddd-52f8e0558132,1,0,4c6d93b0-1133-472b-9eed-de133d11bdd1,4c6d93b0-1133-472b-9eed-de133d11bdd1,1,0,7198fde6-d341-4cfc-8d42-68240a320c0e,7198fde6-d341-4cfc-8d42-68240a320c0e,1,0,385431d7-c552-41a2-893a-7ad234fecc16,385431d7-c552-41a2-893a-7ad234fecc16,1,0,17d6d642-f9f4-4184-9494-c31448761a97,17d6d642-f9f4-4184-9494-c31448761a97,1,0,058b36d9-0f38-4998-bd16-e38c9448a1ce,058b36d9-0f38-4998-bd16-e38c9448a1ce,1,0,247d3f49-0a29-4ee2-9d67-16d2c0c3ecfc,247d3f49-0a29-4ee2-9d67-16d2c0c3ecfc,1,0,e225080a-7355-4bd6-93f0-9701a233c00a,e225080a-7355-4bd6-93f0-9701a233c00a,1,0,f6de1537-bb32-43e9-a092-665a470b1490,f6de1537-bb32-43e9-a092-665a470b1490,1,0,181ace26-885b-43a5-a3fa-d7b883e7b5f6,181ace26-885b-43a5-a3fa-d7b883e7b5f6,1,0,6567f4a2-1bb4-44cb-9089-a734e16e92af,6567f4a2-1bb4-44cb-9089-a734e16e92af,1,0,df7d3df3-da97-4903-b332-acc060171b50,df7d3df3-da97-4903-b332-acc060171b50,1,0,b689ec92-a4f9-4f59-ab26-4f9c5895030d,b689ec92-a4f9-4f59-ab26-4f9c5895030d,1,0,819f1bf7-5a77-47db-8680-513fcb4763ae,819f1bf7-5a77-47db-8680-513fcb4763ae,1,0,cd5129d9-f856-4823-80a4-73c20a4947b7,cd5129d9-f856-4823-80a4-73c20a4947b7,1,0,f4d6d5bb-55f2-4cd3-a1a2-1ed59bd9b49d,f4d6d5bb-55f2-4cd3-a1a2-1ed59bd9b49d,1,0,09489070-e698-427e-83eb-f336a48fa8df,09489070-e698-427e-83eb-f336a48fa8df,1,0,4a855592-e93b-4330-aadb-030e36f5d541,4a855592-e93b-4330-aadb-030e36f5d541,1,0,7653bfe9-22db-43b5-96f9-c9fd9a575403,7653bfe9-22db-43b5-96f9-c9fd9a575403,1,0,96cbfe33-aae3-4025-bdb7-f2ed72be7812,96cbfe33-aae3-4025-bdb7-f2ed72be7812,1,0,67634a9a-3943-447e-959d-cc421be4554a,67634a9a-3943-447e-959d-cc421be4554a,1,0,c99f70ab-a032-410b-a489-1d88a0ad2a05,c99f70ab-a032-410b-a489-1d88a0ad2a05,1,0,d1d83fc5-993b-4dbb-830e-92881b2e9caf,d1d83fc5-993b-4dbb-830e-92881b2e9caf,1,0,dfb59d64-ac47-4644-bc82-63ee49e3be65,dfb59d64-ac47-4644-bc82-63ee49e3be65,1,0,3e18aa6a-4658-419e-a01c-35728078551d,3e18aa6a-4658-419e-a01c-35728078551d,1,0,e6919888-090e-444a-b674-039f79814fe6,e6919888-090e-444a-b674-039f79814fe6,1,0,524a3884-bdce-47ae-8cd4-cdb8383f2bd4,524a3884-bdce-47ae-8cd4-cdb8383f2bd4,1,0,21fe09c9-29a9-4aed-988a-103a1f6e2573,21fe09c9-29a9-4aed-988a-103a1f6e2573,1,0,faf25fcb-0835-4e6c-baed-69603a753312,faf25fcb-0835-4e6c-baed-69603a753312,1,0,e3f0f351-c427-4f58-9978-919c68f0cbaf,e3f0f351-c427-4f58-9978-919c68f0cbaf,1,0,84507e6c-8d81-4499-a6b8-57ebb963db3d,84507e6c-8d81-4499-a6b8-57ebb963db3d,1,0,88c4a2e0-69b2-4ebc-8dc2-3da76cc00d44,88c4a2e0-69b2-4ebc-8dc2-3da76cc00d44,1,0,09a94159-004c-43ac-8e88-587d039fc535,09a94159-004c-43ac-8e88-587d039fc535,1,0,63e7904d-47c0-4764-bea0-cb5ca94d5d5a,63e7904d-47c0-4764-bea0-cb5ca94d5d5a,1,0,87f72c14-cda7-46fc-9709-68c3d3c55d23,87f72c14-cda7-46fc-9709-68c3d3c55d23,1,0,b2ca84d1-5b99-46a8-9b44-a451b74dcb45,b2ca84d1-5b99-46a8-9b44-a451b74dcb45,1,0,ac11cbd6-381e-438d-b39f-66e21e31884b,ac11cbd6-381e-438d-b39f-66e21e31884b,1,0,bc118c21-c121-4818-b33a-f9861d29bd1b,bc118c21-c121-4818-b33a-f9861d29bd1b,1,0,0baf5f34-e11b-4085-adfe-106697f21106,0baf5f34-e11b-4085-adfe-106697f21106,1,0,a123b008-c2a4-4175-9bea-f43f010d7a19,a123b008-c2a4-4175-9bea-f43f010d7a19,1,0,5b3af805-6df3-4692-9b22-4c54a5a6a53a,5b3af805-6df3-4692-9b22-4c54a5a6a53a,1,0,a02e6213-f2d1-4d00-ac3b-4f5de22c1008,a02e6213-f2d1-4d00-ac3b-4f5de22c1008,1,0,512a98a4-5602-4117-991e-633f06d7a155,512a98a4-5602-4117-991e-633f06d7a155,1,0,8add22bd-7279-48d4-ad05-3f6cba312f78,8add22bd-7279-48d4-ad05-3f6cba312f78,1,0,f8e98b29-e595-4949-96f2-b661907a9fd8,f8e98b29-e595-4949-96f2-b661907a9fd8,1,0,c4c7b0d4-c0cd-4db4-9447-193939626029,c4c7b0d4-c0cd-4db4-9447-193939626029,1,0,84309d6f-d877-4f04-9016-d431a9a5fc10,84309d6f-d877-4f04-9016-d431a9a5fc10,1,0,96e937f6-0a35-4b8d-9898-08d86199ff31,96e937f6-0a35-4b8d-9898-08d86199ff31,1,0,8b3445d1-bb00-4bda-b017-633730807d64,8b3445d1-bb00-4bda-b017-633730807d64,1,0,c66f9091-3abe-4593-be68-7e4bf977b291,c66f9091-3abe-4593-be68-7e4bf977b291,1,0,11d5a16c-ec7c-4d20-b4df-c27e77c353f5,11d5a16c-ec7c-4d20-b4df-c27e77c353f5,1,0,9c53f229-b139-4577-9f7c-d4b4f74aaba4,9c53f229-b139-4577-9f7c-d4b4f74aaba4,1,0,82ea6d49-3a8a-4090-ac75-92b3177059d4,82ea6d49-3a8a-4090-ac75-92b3177059d4,1,0,8f79a97a-5af6-4caf-ad7b-3273aeffb6ce,8f79a97a-5af6-4caf-ad7b-3273aeffb6ce,1,0,34100635-351b-46c9-afda-5d75ec985325,34100635-351b-46c9-afda-5d75ec985325,1,0,c2f61a9d-2643-4615-9243-ad4910e7840a,c2f61a9d-2643-4615-9243-ad4910e7840a,1,0,86860e4a-1853-485f-a6a9-a36a49e5c5f2,86860e4a-1853-485f-a6a9-a36a49e5c5f2,1,0,27e52786-1d67-4643-bd0f-0fd070926479,27e52786-1d67-4643-bd0f-0fd070926479,1,0,d2ea852b-71fe-45c0-961b-9c33e377c166,d2ea852b-71fe-45c0-961b-9c33e377c166,1,0,498cd311-d9ef-4736-bffc-a6c6d913a811,498cd311-d9ef-4736-bffc-a6c6d913a811,1,0,060f9e61-5465-48ee-9ba7-2b6260f5e620,060f9e61-5465-48ee-9ba7-2b6260f5e620,1,0,309e6151-ac46-40d7-9326-67f35caccf15,309e6151-ac46-40d7-9326-67f35caccf15,1,0,e7325328-ca6c-4aa2-a2d5-4b4e765eca04,e7325328-ca6c-4aa2-a2d5-4b4e765eca04,1,0,e34ac021-a752-41d7-bfde-1df218002d3c,e34ac021-a752-41d7-bfde-1df218002d3c,1,0,337e84b5-200e-47a4-b171-75c3cfe58fd1,337e84b5-200e-47a4-b171-75c3cfe58fd1,1,0,3c1c25ab-8458-4f2b-8485-6471eb235795,3c1c25ab-8458-4f2b-8485-6471eb235795,1,0,a3caeb0f-e2f9-4f6b-acc0-f3ea296568ee,a3caeb0f-e2f9-4f6b-acc0-f3ea296568ee,1,0,03c4df97-fcdb-4b67-a8b2-0f16dd8889e3,03c4df97-fcdb-4b67-a8b2-0f16dd8889e3,1,0,0eedd562-7d42-40b2-8cc0-14994a79322b,0eedd562-7d42-40b2-8cc0-14994a79322b,1,0,1c1cc187-8275-4180-a5c6-7f9a0f455259,1c1cc187-8275-4180-a5c6-7f9a0f455259,1,0,22e8c38f-f3e2-42f4-9d67-6271cfd319b2,22e8c38f-f3e2-42f4-9d67-6271cfd319b2,1,0,e21067d4-d826-4375-acba-7c91efebe502,e21067d4-d826-4375-acba-7c91efebe502,1,0,84cc7c8d-7e84-4a02-97dd-d7aa83817ebc,84cc7c8d-7e84-4a02-97dd-d7aa83817ebc,1,0,08024dfb-e166-4d0d-a97d-da967d88f819,08024dfb-e166-4d0d-a97d-da967d88f819,1,0,d8c7ed5d-426c-4a9a-a68a-d51bdff35784,d8c7ed5d-426c-4a9a-a68a-d51bdff35784,1,0,cb842da8-cc6d-4637-8951-40e68f1c5697,cb842da8-cc6d-4637-8951-40e68f1c5697,1,0,9252c5b8-e665-46c2-a4de-408adf9ff6d5,9252c5b8-e665-46c2-a4de-408adf9ff6d5,1,0,5d307033-17d4-4a4c-b5b8-cfcfff50e17e,5d307033-17d4-4a4c-b5b8-cfcfff50e17e,1,0,7e0b77f0-278b-4273-94a5-daa481f07a04,7e0b77f0-278b-4273-94a5-daa481f07a04,1,0,e6fdcd17-7b9e-4887-be18-c01bff11324e,e6fdcd17-7b9e-4887-be18-c01bff11324e,1,0,6ade91c2-1357-4cb7-8a76-a367e1de2b99,6ade91c2-1357-4cb7-8a76-a367e1de2b99,1,0,6ffef034-2cf3-4222-a352-89b4651cc518,6ffef034-2cf3-4222-a352-89b4651cc518,1,0,2d997c3a-d807-4b31-9589-062cbca23937,2d997c3a-d807-4b31-9589-062cbca23937,1,0,ad03ef28-0be0-4f8a-8912-dc9050b23247,ad03ef28-0be0-4f8a-8912-dc9050b23247,1,0,7552624b-ef10-4b6f-9342-6d675d997921,7552624b-ef10-4b6f-9342-6d675d997921,1,0,6e144419-519f-477d-9eac-13f51ab2817d,6e144419-519f-477d-9eac-13f51ab2817d,1,0,3c5450ed-7617-4e3a-9cf0-e1d74ca48fb6,3c5450ed-7617-4e3a-9cf0-e1d74ca48fb6,1,0,f338f05f-eceb-4bd6-ba9c-8552207087c0,f338f05f-eceb-4bd6-ba9c-8552207087c0,1,0,ecd14699-e942-45db-82d1-e96dc2982b85,ecd14699-e942-45db-82d1-e96dc2982b85,1,0,5dd298d4-d7dc-4b7b-9dff-023ff7a6cd80,5dd298d4-d7dc-4b7b-9dff-023ff7a6cd80,1,0,85c311f9-eaa5-4f91-8d8d-7385bfb79031,85c311f9-eaa5-4f91-8d8d-7385bfb79031,1,0,a3459d86-ce94-4244-9541-e8c0ebaf1d8c,a3459d86-ce94-4244-9541-e8c0ebaf1d8c,1,0,bec4337b-b8c0-487c-9620-c647f4aee6f4,bec4337b-b8c0-487c-9620-c647f4aee6f4,1,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..fba8a48 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..1426680 --- /dev/null +++ b/InformationRegisters/ЗначенияЕМРЦ.xml @@ -0,0 +1,261 @@ + + + + + + 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 + + + + + + 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..ffaba63 --- /dev/null +++ b/InformationRegisters/ЗначенияЕМРЦ/Ext/ManagerModule.bsl @@ -0,0 +1,89 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс +// Заполняет первоначальные значения ЕМРЦ для табачной продукции. +Процедура ЗаполнитьЗначенияРегистраЕМРЦ() Экспорт + + НачатьТранзакцию(); + + Попытка + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЗначенияЕМРЦ"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("ОсобенностьУчета", Перечисления.ВидыМаркированнойПродукцииБПО.Табак); + Блокировка.Заблокировать(); + + НаборЗаписей = РегистрыСведений.ЗначенияЕМРЦ.СоздатьНаборЗаписей(); + + НоваяСтрока = НаборЗаписей.Добавить(); + НоваяСтрока.ОсобенностьУчета = Перечисления.ВидыМаркированнойПродукцииБПО.Табак; + НоваяСтрока.Период = Дата('20230101'); + НоваяСтрока.Цена = 0.02*3467*(1+0.2)*1.4; + + НоваяСтрока = НаборЗаписей.Добавить(); + НоваяСтрока.ОсобенностьУчета = Перечисления.ВидыМаркированнойПродукцииБПО.Табак; + НоваяСтрока.Период = Дата('20230301'); + НоваяСтрока.Цена = 0.02*3536*(1+0.2)*1.4; + + НоваяСтрока = НаборЗаписей.Добавить(); + НоваяСтрока.ОсобенностьУчета = Перечисления.ВидыМаркированнойПродукцииБПО.Табак; + НоваяСтрока.Период = Дата('20240101'); + НоваяСтрока.Цена = 0.02*3678*(1+0.2)*1.4; + + НоваяСтрока = НаборЗаписей.Добавить(); + НоваяСтрока.ОсобенностьУчета = Перечисления.ВидыМаркированнойПродукцииБПО.Табак; + НоваяСтрока.Период = Дата('20250101'); + НоваяСтрока.Цена = 0.02*3825*(1+0.2)*1.4; + + НаборЗаписей.Записать(); + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации( + НСтр("ru = 'Ошибка заполнения предопределенных элементов ЕМРЦ.'", ОбщегоНазначенияБПО.КодОсновногоЯзыка())); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +// Получает цену ЕМРЦ из данных информационной базы на дату. +// +// Параметры: +// ОсобенностьУчета - Перечисления.ВидыМаркированнойПродукцииБПО - тип маркированной продукции для проверки цены. +// Период - Дата - дата проверки цены. +// ЕМРЦ - Число - значение ЕМРЦ. +// +Процедура ПолучитьЦенуЕМРЦ(ОсобенностьУчета, Период = Неопределено, ЕМРЦ = 0) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ЗначениеЗаполнено(Период) Тогда + Период = ТекущаяДатаСеанса(); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЗначенияЕМРЦСрезПоследних.Цена КАК Цена + |ИЗ + | РегистрСведений.ЗначенияЕМРЦ.СрезПоследних(&Период, ОсобенностьУчета = &ОсобенностьУчета) КАК ЗначенияЕМРЦСрезПоследних"; + + Запрос.УстановитьПараметр("Период", Период); + Запрос.УстановитьПараметр("ОсобенностьУчета", ОсобенностьУчета); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + ЕМРЦ = Выборка.Цена; + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/InformationRegisters/ФискальныеОперации.xml b/InformationRegisters/ФискальныеОперации.xml new file mode 100644 index 0000000..367719d --- /dev/null +++ b/InformationRegisters/ФискальныеОперации.xml @@ -0,0 +1,1279 @@ + + + + + + 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 + + + + + + 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..8826f73 --- /dev/null +++ b/InformationRegisters/ФискальныеОперации/Ext/ManagerModule.bsl @@ -0,0 +1,68 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// СтандартныеПодсистемы.УправлениеДоступом +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +// +// Параметры: +// Ограничение - Структура: +// * Текст - Строка - ограничение доступа для пользователей. +// Если пустая строка, значит, доступ разрешен. +// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей. +// Если пустая строка, значит, доступ запрещен. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически. +// - Булево - если Ложь, то всегда записывать ключи доступа, +// если Истина, тогда не записывать ключи доступа, +// а использовать ключи доступа владельца (требуется, +// чтобы ограничение было строго по объекту-владельцу). +// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также +// как у параметра ПоВладельцуБезЗаписиКлючейДоступа. +// +Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт + + Менеджер = "РегистрСведений.ФискальныеОперации"; + МенеджерОборудованияВызовСервераПереопределяемый.ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ОчиститьРегистрДоДаты(ДатаОчистки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // АПК: 1328-выкл + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ФискальныеОперации.ИдентификаторЗаписи КАК ИдентификаторЗаписи + |ИЗ + | РегистрСведений.ФискальныеОперации КАК ФискальныеОперации + |ГДЕ + | ФискальныеОперации.Дата < &ДатаОчистки"; + + Запрос.УстановитьПараметр("ДатаОчистки", ДатаОчистки); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.ФискальныеОперации.СоздатьНаборЗаписей(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + НаборЗаписей.Очистить(); + НаборЗаписей.Отбор.ИдентификаторЗаписи.Установить(Выборка.ИдентификаторЗаписи); + НаборЗаписей.Записать(Истина); + КонецЦикла; + // АПК: 1328-вкл + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли + 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..b5afaa2 --- /dev/null +++ b/InformationRegisters/ФискальныеОперации/Forms/ФормаЗаписи/Ext/Form.xml @@ -0,0 +1,460 @@ + +
+ LockOwner + + 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> + + 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> + + + + + Запись.Дата + 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> + + 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> + + + + + ТабличныйДокумент + None + + + + + + + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>XML</v8:content> + </v8:item> + + AlwaysHorizontal + + + + ТекстXML + None + + + + + + + + + + + + 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>Сохранить в файл 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 + Печать копии чека + + + ПечатьКопииЧека + + +
\ 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..a540bb6 --- /dev/null +++ b/InformationRegisters/ФискальныеОперации/Forms/ФормаЗаписи/Ext/Form/Module.bsl @@ -0,0 +1,240 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Реквизиты = ОборудованиеЧекопечатающиеУстройства.ДанныеФискальнойОперации(Запись.ДокументОснование, Запись.ИдентификаторЗаписи); + Если Реквизиты <> Неопределено Тогда + ТекстСообщенияXML = Реквизиты.ДанныеXML.Получить(); + КонецЕсли; + + Элементы.КорректируемыйДокумент.Видимость = Не ПустаяСтрока(Запись.КорректируемыйДокумент); + + Если ЗначениеЗаполнено(ТекстСообщенияXML) + И (Реквизиты.ТипДокумента = Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧек + Или Реквизиты.ТипДокумента = Перечисления.ТипыФискальныхДокументовККТ.КассовыйЧекКоррекции) + Тогда + ПараметрыФорматирования = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Истина, Истина, " "); + ТекстXML.УстановитьТекст(ФорматироватьXMLСПараметрами(ТекстСообщенияXML, ПараметрыФорматирования)); + Элементы.Страницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + Элементы.Дополнительно.Видимость = Истина; + + ОбщиеПараметры = ОборудованиеЧекопечатающиеУстройства.ЗагрузитьДанныеФискализацииИзXML(ТекстСообщенияXML); + ОбщиеПараметры.ДатаВремя = Реквизиты.Дата; + Если ЗначениеЗаполнено(ОбщиеПараметры.ПокупательEmail) Тогда + ЭлектроннаяПочта = ОбщиеПараметры.ПокупательEmail; + Иначе + ЭлектроннаяПочта = ПустаяСтрокаПочты(); + КонецЕсли; + + ШиринаЧека = 42; + Шаблон = ШаблоныФискальныхДокументов.ШаблонКассовыйЧек(ШиринаЧека, ОбщиеПараметры, Реквизиты); + ШаблоныФискальныхДокументов.СформироватьДокументПоШаблону(Шаблон); + ТабличныйДокумент = ШаблоныФискальныхДокументов.ВывестиКакТабличныйДокумент(Шаблон); + + Иначе + Элементы.Страницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + Элементы.Дополнительно.Видимость = Ложь; + Элементы.ГруппаДокументы.Видимость = Ложь; + КонецЕсли; + + МенеджерОборудованияВызовСервераПереопределяемый.ЭкземплярФискальныеОперацииПриСозданииНаСервере(Запись, ЭтаФорма, Отказ, Параметры, СтандартнаяОбработка); + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // Вызов БСП + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначенияБПО.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + // Конец Вызов БСП + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + // Вызов БСП + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначенияБПО.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + // Конец Вызов БСП + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаСервереБезКонтекста +Процедура ОтправитьЭлектронныйЧекНаСервере(ПараметрыЧека, ТекстСообщения, Покупатель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 = '<не задано>'"); + +КонецФункции + +#КонецОбласти 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..5b547ee --- /dev/null +++ b/InformationRegisters/ФискальныеОперации/Forms/ФормаСписка/Ext/Form.xml @@ -0,0 +1,185 @@ + +
+ + false + + + ПриСозданииНаСервере + + + + List + None + true + false + SingleRow + false + 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/Languages/Русский.xml b/Languages/Русский.xml new file mode 100644 index 0000000..cd917cb --- /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..ed3a03c --- /dev/null +++ b/Roles/АдминистраторСистемы/Ext/Rights.xml @@ -0,0 +1,767 @@ + + + false + true + 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.ПодключаемоеОборудование.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.ПодключаемоеОборудование.Attribute.УдалитьВерсияФорматаОбмена + + View + false + + + Edit + false + + + + Catalog.ПодключаемоеОборудование.TabularSection.ПараметрыРегистрации.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.ИспользуетсяФН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.ДрайверыОборудования.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.УдалитьИдентификаторWebСервисОборудования + + 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..67486de --- /dev/null +++ b/Roles/БазовыеПраваБПО/Ext/Rights.xml @@ -0,0 +1,247 @@ + + + false + true + false + + CommonCommand.УправлениеФискальнымУстройством + + View + true + + + + SessionParameter.ПараметрыКлиентаНаСервереБПО + + Get + true + + + + CommonCommand.ВыбратьРМТекущегоСеанса + + View + true + + + + CommonCommand.СверкаИтоговПоКартам + + View + true + + + + CommonForm.КодВидаНоменклатурнойКлассификации + + 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 + + + + Configuration.БиблиотекаПодключаемогоОборудования + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + + Catalog.ПодключаемоеОборудование + + Read + true + + + View + true + + + InputByString + true + + + + Catalog.ДрайверыОборудования + + Read + true + + + View + true + + + InputByString + true + + + + InformationRegister.ЗначенияЕМРЦ + + Read + true + + + 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..3564a0d --- /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..e78e7c5 --- /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..df1cfbd --- /dev/null +++ b/Roles/ГлавнаяРоль/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + true + true + false + \ 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..38858af --- /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..14a84e0 --- /dev/null +++ b/Roles/ПолныеПрава/Ext/Rights.xml @@ -0,0 +1,110 @@ + + + true + true + true + + Catalog.РабочиеМеста + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + Configuration.БиблиотекаПодключаемогоОборудования + + Administration + false + + + UpdateDataBaseConfiguration + false + + + ThickClient + false + + + ExternalConnection + false + + + Automation + false + + + ConfigurationExtensionsAdministration + false + + + InteractiveOpenExtDataProcessors + false + + + InteractiveOpenExtReports + false + + + + Catalog.ПодключаемоеОборудование + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + Catalog.ДрайверыОборудования + + InteractiveDelete + 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..9f03bf3 --- /dev/null +++ b/Roles/СохранениеДанныхПользователя/Ext/Rights.xml @@ -0,0 +1,83 @@ + + + false + true + false + + Catalog.РабочиеМеста + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + Configuration.БиблиотекаПодключаемогоОборудования + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + SaveUserData + true + + + + Subsystem.ПоддержкаОборудования + + View + true + + + \ No newline at end of file diff --git a/SessionParameters/ПараметрыКлиентаНаСервереБПО.xml b/SessionParameters/ПараметрыКлиентаНаСервереБПО.xml new file mode 100644 index 0000000..014d460 --- /dev/null +++ b/SessionParameters/ПараметрыКлиентаНаСервереБПО.xml @@ -0,0 +1,18 @@ + + + + + ПараметрыКлиентаНаСервереБПО + + + ru + Параметры клиента на сервере БПО + + + + + v8:FixedStructure + + + + \ 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..36740e4 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования.xml @@ -0,0 +1,79 @@ + + + + + ПоддержкаОборудования + + + ru + Поддержка оборудования + + + + true + false + false + + + ru + Подсистема поддержки оборудования + + + + 0 + true + + + + Catalog.РабочиеМеста + DefinedType.ТорговыйОбъектБПО + DefinedType.ПользовательБПО + DefinedType.ОрганизацияБПО + CommonModule.ОбновлениеИнформационнойБазыБПО + SessionParameter.РабочееМестоКлиента + Role.СохранениеДанныхПользователя + Role.АдминистраторСистемы + Role.ВыполнениеСинхронизацииДанных + Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок + InformationRegister.ЗначенияЕМРЦ + DefinedType.ДенежнаяСуммаНеотрицательная + DefinedType.ДенежнаяСуммаЛюбогоЗнака + Enum.ТипыПлатежныхОпераций + Enum.ПериодХраненияИсторииПлатежныхОпераций + Role.ПолныеПрава + CommonModule.ГенерацияШтрихкода + CommonModule.ГенерацияШтрихкодаСерверПовтИсп + CommonModule.ВнешниеКомпонентыБПО + CommonModule.ВнешниеКомпонентыБПОКлиент + CommonModule.ВнешниеКомпонентыБПОПереопределяемый + CommonModule.ИнтеграцияПодсистемБПОКлиент + CommonModule.ИнтеграцияПодсистемБПОКлиентПовтИсп + CommonModule.ИнтеграцияПодсистемБПОСлужебныйВызовСервера + CommonModule.ОбщегоНазначенияБПО + CommonModule.ОбщегоНазначенияБПОКлиент + CommonModule.ОбщегоНазначенияБПОКлиентСервер + CommonModule.ОбщегоНазначенияБПОПереопределяемый + CommonModule.ОбщегоНазначенияБПОПовтИсп + CommonModule.ОбщегоНазначенияБПОСлужебныйВызовСервера + Role.БазовыеПраваБПО + Enum.ВидыМаркированнойПродукцииБПО + CommonModule.МенеджерОборудования + CommonModule.МенеджерОборудованияВызовСервера + CommonModule.МенеджерОборудованияВызовСервераПереопределяемый + CommonModule.МенеджерОборудованияКлиент + CommonModule.МенеджерОборудованияКлиентПереопределяемый + CommonModule.МенеджерОборудованияКлиентПовтИсп + CommonModule.МенеджерОборудованияКлиентСервер + CommonModule.МенеджерОборудованияКлиентСерверПереопределяемый + CommonModule.МенеджерОборудованияПовтИсп + CommonModule.ПодключаемоеОборудованиеДрайверКлиент + CommonModule.ИнтеграцияПодсистемБПО + CommonCommand.ВыбратьРМТекущегоСеанса + SessionParameter.ПараметрыКлиентаНаСервереБПО + + + + ПодключаемоеОборудование + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Ext/CommandInterface.xml b/Subsystems/ПоддержкаОборудования/Ext/CommandInterface.xml new file mode 100644 index 0000000..7d5a0b0 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Ext/CommandInterface.xml @@ -0,0 +1,13 @@ + + + + + + false + + + + + NavigationPanelImportant + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование.xml new file mode 100644 index 0000000..9dfa381 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование.xml @@ -0,0 +1,42 @@ + + + + + ПодключаемоеОборудование + + + ru + Подключаемое оборудование + + + + true + false + false + + + + Enum.ОбработчикиДрайверовПодключаемогоОборудования + Catalog.ДрайверыОборудования + Enum.СпособыФорматноЛогическогоКонтроля + Catalog.ПодключаемоеОборудование + CommonTemplate.КодВидаНоменклатурнойКлассификации + DefinedType.СубъектПерсональныхДанныхБПО + DefinedType.ОснованиеФискальнойОперацииБПО + Enum.ТипыПодключенияОборудования + Enum.ТипыПодключаемогоОборудования + Enum.СпособПодключенияДрайвера + CommonForm.КодВидаНоменклатурнойКлассификации + CommonPicture.ВнешняяКомпонентаНеДоступна + CommonPicture.ВнешняяКомпонентаДоступна + + + + УстройстваВвода + ЧекопечатающиеУстройства + ПлатежныеСистемы + ДисплеиПокупателя + ВесовоеОборудование + + + \ 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..cccdb43 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Ext/CommandInterface.xml @@ -0,0 +1,30 @@ + + + + + + false + + + + + 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..23b02b4 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ВесовоеОборудование.xml @@ -0,0 +1,34 @@ + + + + + ВесовоеОборудование + + + ru + Весовое оборудование + + + + true + false + false + + + + CommonModule.ОборудованиеВесовоеОборудованиеКлиент + CommonModule.ОборудованиеВесовоеОборудованиеКлиентСервер + CommonTemplate.Драйвер1СЭлектронныеВесы + Catalog.ДрайверыОборудования + Catalog.РабочиеМеста + Catalog.ПодключаемоеОборудование + Enum.ТипыПодключенияОборудования + Enum.ТипыПодключаемогоОборудования + Enum.СпособПодключенияДрайвера + Enum.СпособыФорматноЛогическогоКонтроля + CommonModule.ОборудованиеВесовоеОборудование + + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ДисплеиПокупателя.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ДисплеиПокупателя.xml new file mode 100644 index 0000000..2058f1d --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ДисплеиПокупателя.xml @@ -0,0 +1,33 @@ + + + + + ДисплеиПокупателя + + + ru + Дисплеи покупателя + + + + true + false + false + + + + CommonTemplate.Драйвер1СДисплейПокупателя + CommonModule.ОборудованиеДисплеиПокупателяКлиент + Catalog.ДрайверыОборудования + Catalog.РабочиеМеста + Catalog.ПодключаемоеОборудование + Enum.ТипыПодключенияОборудования + Enum.ТипыПодключаемогоОборудования + Enum.СпособПодключенияДрайвера + Enum.СпособыФорматноЛогическогоКонтроля + CommonModule.ОборудованиеДисплеиПокупателя + + + + + \ No newline at end of file diff --git a/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ПлатежныеСистемы.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ПлатежныеСистемы.xml new file mode 100644 index 0000000..d3f23c4 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ПлатежныеСистемы.xml @@ -0,0 +1,41 @@ + + + + + ПлатежныеСистемы + + + ru + Платежные системы + + + + true + false + false + + + + CommonModule.ОборудованиеПлатежныеСистемыКлиент + CommonTemplate.Драйвер1СЭквайринговыеТерминалыСбербанк_ru + CommonModule.ОборудованиеПлатежныеСистемыКлиентСервер + CommonCommand.СверкаИтоговПоКартам + CommonTemplate.ДрайверUCSEFTPOSЭквайринговыеТерминалы_ru + CommonCommand.УправлениеЭквайринговымТерминалом + CommonForm.УправлениеЭквайринговымТерминалом + CommonTemplate.Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru + Catalog.ДрайверыОборудования + Catalog.РабочиеМеста + Catalog.ПодключаемоеОборудование + Enum.ТипыПодключенияОборудования + Enum.ТипыПодключаемогоОборудования + Enum.СпособПодключенияДрайвера + Enum.СпособыФорматноЛогическогоКонтроля + Enum.ТипыПлатежнойСистемыККТ + CommonModule.ОборудованиеПлатежныеСистемы + CommonTemplate.ДрайверАЗУРПлатежнаяСистема_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..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..364bb0e --- /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СПринтерЧеков + CommonTemplate.ДрайверАТОЛККТ54ФЗ10X_ru + 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 + + + + ФорматноЛогическийКонтроль + Маркировка + + + \ 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..92adf24 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/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/ЧекопечатающиеУстройства/Subsystems/Маркировка.xml b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства/Subsystems/Маркировка.xml new file mode 100644 index 0000000..5e63541 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства/Subsystems/Маркировка.xml @@ -0,0 +1,30 @@ + + + + + Маркировка + + + ru + Маркировка + + + + true + false + false + + + + CommonModule.МенеджерОборудованияМаркировка + CommonModule.МенеджерОборудованияМаркировкаВызовСервера + CommonModule.МенеджерОборудованияМаркировкаКлиентСервер + Enum.ТипыИдентификаторовТовараККТ + Enum.ОтветОИСМОСтатусеТовара + Enum.СтатусОбработкиЗапросаКМ + Enum.СтатусРезультатаЗапросаКМ + + + + + \ 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..fa0b405 --- /dev/null +++ b/Subsystems/ПоддержкаОборудования/Subsystems/ПодключаемоеОборудование/Subsystems/ЧекопечатающиеУстройства/Subsystems/ФорматноЛогическийКонтроль.xml @@ -0,0 +1,29 @@ + + + + + ФорматноЛогическийКонтроль + + + ru + Форматно логический контроль + + + + true + false + false + + + + Enum.СпособыФорматноЛогическогоКонтроля + CommonModule.ФорматноЛогическийКонтрольВызовСервера + CommonModule.ФорматноЛогическийКонтрольКлиентСервер + CommonModule.ФорматноЛогическийКонтрольКлиентСерверПереопределяемый + CommonModule.ФорматноЛогическийКонтроль + CommonModule.ФорматноЛогическийКонтрольПереопределяемый + + + + + \ No newline at end of file diff --git a/Subsystems/СлужебныеПодсистемы.xml b/Subsystems/СлужебныеПодсистемы.xml new file mode 100644 index 0000000..87d0700 --- /dev/null +++ b/Subsystems/СлужебныеПодсистемы.xml @@ -0,0 +1,39 @@ + + + + + СлужебныеПодсистемы + + + ru + Служебные подсистемы + + + en + Service subsystems + + + + false + false + false + + + ru + Технологическая подсистема. +Предназначена для разделения метаданных конфигураций УТ11, КА2, УП2. + + + en + Technological subsystem. +It is intended to separate metadata of the TM11, CA2 and EM2 configurations. + + + + + + + ОбъектыМобильная + + + \ No newline at end of file diff --git a/Subsystems/СлужебныеПодсистемы/Subsystems/ОбъектыМобильная.xml b/Subsystems/СлужебныеПодсистемы/Subsystems/ОбъектыМобильная.xml new file mode 100644 index 0000000..707bc8a --- /dev/null +++ b/Subsystems/СлужебныеПодсистемы/Subsystems/ОбъектыМобильная.xml @@ -0,0 +1,167 @@ + + + + + ОбъектыМобильная + + + ru + Объекты для использования в мобильной версии библиотеки + + + + true + false + false + + + + CommonModule.ВнешниеКомпонентыБПО + CommonModule.ВнешниеКомпонентыБПОКлиент + CommonModule.ВнешниеКомпонентыБПОПереопределяемый + CommonModule.ГенерацияШтрихкода + CommonModule.ГенерацияШтрихкодаСерверПовтИсп + CommonModule.ИнтеграцияПодсистемБПО + CommonModule.ИнтеграцияПодсистемБПОКлиент + CommonModule.ИнтеграцияПодсистемБПОКлиентПовтИсп + CommonModule.ИнтеграцияПодсистемБПОСлужебныйВызовСервера + CommonModule.МенеджерОборудования + CommonModule.МенеджерОборудованияВызовСервера + CommonModule.МенеджерОборудованияВызовСервераПереопределяемый + CommonModule.МенеджерОборудованияКлиент + CommonModule.МенеджерОборудованияКлиентПереопределяемый + CommonModule.МенеджерОборудованияКлиентПовтИсп + CommonModule.МенеджерОборудованияКлиентСервер + CommonModule.МенеджерОборудованияКлиентСерверПереопределяемый + CommonModule.МенеджерОборудованияМаркировка + CommonModule.МенеджерОборудованияМаркировкаВызовСервера + CommonModule.МенеджерОборудованияМаркировкаКлиентСервер + CommonModule.МенеджерОборудованияПовтИсп + CommonModule.ОбновлениеИнформационнойБазыБПО + CommonModule.ОборудованиеВесовоеОборудование + CommonModule.ОборудованиеВесовоеОборудованиеКлиент + CommonModule.ОборудованиеВесовоеОборудованиеКлиентСервер + CommonModule.ОборудованиеДисплеиПокупателя + CommonModule.ОборудованиеДисплеиПокупателяКлиент + CommonModule.ОборудованиеПлатежныеСистемы + CommonModule.ОборудованиеПлатежныеСистемыКлиент + CommonModule.ОборудованиеПлатежныеСистемыКлиентСервер + CommonModule.ОборудованиеУстройстваВвода + CommonModule.ОборудованиеУстройстваВводаВызовСервера + CommonModule.ОборудованиеУстройстваВводаКлиент + CommonModule.ОборудованиеЧекопечатающиеУстройства + CommonModule.ОборудованиеЧекопечатающиеУстройстваВызовСервера + CommonModule.ОборудованиеЧекопечатающиеУстройстваКлиент + CommonModule.ОборудованиеЧекопечатающиеУстройстваКлиентЛокализация + CommonModule.ОборудованиеЧекопечатающиеУстройстваКлиентСервер + CommonModule.ОборудованиеЧекопечатающиеУстройстваКлиентСерверЛокализация + CommonModule.ОборудованиеЧекопечатающиеУстройстваЛокализация + CommonModule.ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер + CommonModule.ОбщегоНазначенияБПО + CommonModule.ОбщегоНазначенияБПОКлиент + CommonModule.ОбщегоНазначенияБПОКлиентСервер + CommonModule.ОбщегоНазначенияБПОПереопределяемый + CommonModule.ОбщегоНазначенияБПОПовтИсп + CommonModule.ОбщегоНазначенияБПОСлужебныйВызовСервера + CommonModule.ПодключаемоеОборудованиеДрайверКлиент + CommonModule.ФорматноЛогическийКонтроль + CommonModule.ФорматноЛогическийКонтрольВызовСервера + CommonModule.ФорматноЛогическийКонтрольКлиентСервер + CommonModule.ФорматноЛогическийКонтрольКлиентСерверПереопределяемый + CommonModule.ФорматноЛогическийКонтрольПереопределяемый + CommonModule.ШаблоныФискальныхДокументов + CommonModule.ШаблоныФискальныхДокументовЛокализация + CommonModule.ШаблоныФискальныхДокументовСлужебный + SessionParameter.РабочееМестоКлиента + Role.АдминистраторСистемы + Role.БазовыеПраваБПО + Role.ВыполнениеСинхронизацииДанных + Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок + Role.ПолныеПрава + Role.СохранениеДанныхПользователя + CommonCommand.ВыбратьРМТекущегоСеанса + CommonCommand.РегистрФискальныхОпераций + CommonCommand.СверкаИтоговПоКартам + CommonCommand.УправлениеФискальнымУстройством + CommonCommand.УправлениеЭквайринговымТерминалом + DefinedType.ДенежнаяСуммаЛюбогоЗнака + DefinedType.ДенежнаяСуммаНеотрицательная + DefinedType.ОрганизацияБПО + DefinedType.КассаБПО + DefinedType.ОснованиеФискальнойОперацииБПО + DefinedType.ПользовательБПО + DefinedType.СубъектПерсональныхДанныхБПО + DefinedType.ТорговыйОбъектБПО + CommonForm.НастройкаРегистрацииККТ + CommonForm.КодВидаНоменклатурнойКлассификации + CommonForm.УправлениеФискальнымУстройством + CommonForm.УправлениеЭквайринговымТерминалом + CommonTemplate.Драйвер1СДисплейПокупателя + CommonTemplate.Драйвер1СПринтерЧеков + CommonTemplate.Драйвер1СУстройстваВводаNative + CommonTemplate.Драйвер1СЭлектронныеВесы + CommonTemplate.Драйвер1СЭквайринговыеТерминалыСбербанк_ru + CommonTemplate.Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru + CommonPicture.ВнешняяКомпонентаДоступна + CommonPicture.ВнешняяКомпонентаНеДоступна + Catalog.ДрайверыОборудования + Catalog.ПодключаемоеОборудование + Catalog.РабочиеМеста + Enum.ВидДокументаУдостоверяющегоЛичностьККТ + Enum.ВидыМаркированнойПродукцииБПО + Enum.ВидыОперацийИзмененияСостоянияФН + Enum.МераКоличестваПредметаРасчетаККТ + Enum.ОбработчикиДрайверовПодключаемогоОборудования + Enum.ОтветОИСМОСтатусеТовара + Enum.ПериодХраненияИсторииПлатежныхОпераций + Enum.ПланируемыйСтатусМаркируемогоТовара + Enum.ПоляШаблоновМагнитныхКарт + Enum.ПризнакиАгента + Enum.ПризнакиПредметаРасчета + Enum.ПризнакиСпособаРасчета + Enum.ПричиныИзмененияСведенийККТ + Enum.ПричиныПеререгистрацииФН + Enum.СпособПодключенияДрайвера + Enum.СпособыФорматноЛогическогоКонтроля + Enum.СтатусОбработкиЗапросаКМ + Enum.СтатусРезультатаЗапросаКМ + Enum.СтатусЧекаККТВОчереди + Enum.СтатусыКассовойСмены + Enum.ТипыИдентификаторовТовараККТ + Enum.ТипыМаркировкиККТ + Enum.ТипыОплатыККТ + Enum.ТипыПакетнойОперацииВОчередиЧеков + Enum.ТипыПерсональныхДанныхККТ + Enum.ТипыПлатежнойСистемыККТ + Enum.ТипыПлатежныхОпераций + Enum.ТипыПодключаемогоОборудования + Enum.ТипыПодключенияОборудования + Enum.ТипыРасчетаДенежнымиСредствами + Enum.ТипыСистемНалогообложенияККТ + Enum.ТипыФискальныхДокументовККТ + Enum.ТипыЧековКоррекции + InformationRegister.ЗначенияЕМРЦ + SessionParameter.ПараметрыКлиентаНаСервереБПО + InformationRegister.ФискальныеОперации + CommonTemplate.КодВидаНоменклатурнойКлассификации + CommonTemplate.ДрайверАТОЛККТ54ФЗ10XФФД12_ru + CommonTemplate.ДрайверАТОЛККТ54ФЗ10X_ru + CommonTemplate.ДрайверШтрихМККТ54ФЗ4ФФД12NG_ru + CommonTemplate.ДрайверRightScanККТ54ФЗ_ru + CommonTemplate.ДрайверRightScanУстройствоПечати_ru + CommonTemplate.ДрайверRightScanУстройстваВвода_ru + CommonTemplate.ДрайверАЗУРККТ54ФЗФФД12_ru + CommonTemplate.ДрайверАЗУРПлатежнаяСистема_ru + CommonTemplate.ДрайверВерсияТККТ54ФЗ_ru + CommonTemplate.ДрайверUCSEFTPOSЭквайринговыеТерминалы_ru + CommonTemplate.ДрайверMERTECHСканерШтрихкода_ru + CommonTemplate.ДрайверScanPortУстройстваВвода_ru + CommonTemplate.ДрайверАТОЛСканерШтрихкода_ru + CommonTemplate.ДрайверКлеверенсСканерШтрихкода_ru + CommonTemplate.ДрайверСканкодСканерШтрихкода_ru + CommonTemplate.ДрайверСканситиУстройстваВвода_ru + + + + + \ No newline at end of file diff --git a/TSDMagazinuVasilek.7z b/TSDMagazinuVasilek.7z new file mode 100644 index 0000000..df87dba Binary files /dev/null and b/TSDMagazinuVasilek.7z differ