Включает перемещение по ячейкам, стикеровку МП, синхронизацию справочников и обработку кодов маркировки. Co-authored-by: Cursor <cursoragent@cursor.com>
408 lines
29 KiB
Plaintext
408 lines
29 KiB
Plaintext
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
// Copyright (c) 2024, ООО 1С-Софт
|
||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
|
||
// Текст лицензии доступен по ссылке:
|
||
// https://creativecommons.org/licenses/by/4.0/legalcode
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Сведения о библиотеке (или конфигурации).
|
||
|
||
#Область ПрограммныйИнтерфейс
|
||
|
||
// Заполняет основные сведения о библиотеке или основной конфигурации.
|
||
// Библиотека, имя которой имя совпадает с именем конфигурации в метаданных, определяется как основная конфигурация.
|
||
//
|
||
// Параметры:
|
||
// Описание - Структура - сведения о библиотеке:
|
||
//
|
||
// * Имя - Строка - имя библиотеки, например, "СтандартныеПодсистемы".
|
||
// * Версия - Строка - версия в формате из 4-х цифр, например, "2.1.3.1".
|
||
//
|
||
// * ТребуемыеПодсистемы - Массив - имена других библиотек (Строка), от которых зависит данная библиотека.
|
||
// Обработчики обновления таких библиотек должны быть вызваны ранее
|
||
// обработчиков обновления данной библиотеки.
|
||
// При циклических зависимостях или, напротив, отсутствии каких-либо зависимостей,
|
||
// порядок вызова обработчиков обновления определяется порядком добавления модулей
|
||
// в процедуре ПриДобавленииПодсистем общего модуля
|
||
// ПодсистемыКонфигурацииПереопределяемый.
|
||
//
|
||
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
|
||
|
||
Описание.Имя = "БиблиотекаПодключаемогоОборудования";
|
||
Описание.Версия = МенеджерОборудования.ВерсияБиблиотеки();
|
||
|
||
КонецПроцедуры
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Обработчики обновления информационной базы.
|
||
|
||
// Добавляет в список процедуры-обработчики обновления данных ИБ
|
||
// для всех поддерживаемых версий библиотеки или конфигурации.
|
||
// Вызывается перед началом обновления данных ИБ для построения плана обновления.
|
||
//
|
||
// Параметры:
|
||
// Обработчики - ТаблицаЗначений - описание полей, см. в процедуре.
|
||
// ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления.
|
||
//
|
||
// Пример:
|
||
// Обработчик = Обработчики.Добавить();
|
||
// Обработчик.Версия = "1.1.0.0";
|
||
// Обработчик.Процедура = "ОбновлениеИБ.ПерейтиНаВерсию_1_1_0_0";
|
||
// Обработчик.РежимВыполнения = "Монопольно".
|
||
//
|
||
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
|
||
|
||
Обработчик = Обработчики.Добавить();
|
||
Обработчик.Версия = "*";
|
||
Обработчик.НачальноеЗаполнение = Истина;
|
||
Обработчик.РежимВыполнения = "Оперативно";
|
||
Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.ОбновитьПоставляемыеДрайвера";
|
||
Обработчик.Комментарий = НСтр("ru = 'Обновление поставляемых драйверов подключаемого оборудования.'");
|
||
|
||
Обработчик = Обработчики.Добавить();
|
||
Обработчик.Версия = МенеджерОборудования.ВерсияБиблиотеки();
|
||
Обработчик.НачальноеЗаполнение = Истина;
|
||
Обработчик.РежимВыполнения = "Оперативно";
|
||
Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.ОбновитьПоставляемыеДрайвера";
|
||
Обработчик.Комментарий = НСтр("ru = 'Обновление поставляемых драйверов подключаемого оборудования.'");
|
||
|
||
Обработчик = Обработчики.Добавить();
|
||
Обработчик.Версия = МенеджерОборудования.ВерсияБиблиотеки();
|
||
Обработчик.НачальноеЗаполнение = Истина;
|
||
Обработчик.РежимВыполнения = "Оперативно";
|
||
Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.ОбновитьПодключаемоеОборудование";
|
||
Обработчик.Комментарий = НСтр("ru = 'Обновление оборудования ККМ-офлайн.'");
|
||
|
||
Обработчик = Обработчики.Добавить();
|
||
Обработчик.Версия = "*";
|
||
Обработчик.НачальноеЗаполнение = Истина;
|
||
Обработчик.РежимВыполнения = "Оперативно";
|
||
Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.ОбновитьШаблоныЭтикетокИЦенников";
|
||
Обработчик.Комментарий = НСтр("ru = 'Создание предопределенных шаблонов печати.'");
|
||
|
||
Обработчик = Обработчики.Добавить();
|
||
Обработчик.Версия = "3.2.3.4";
|
||
Обработчик.НачальноеЗаполнение = Истина;
|
||
Обработчик.РежимВыполнения = "Оперативно";
|
||
Обработчик.Процедура = "РегистрыСведений.ЗначенияЕМРЦ.ЗаполнитьЗначенияРегистраЕМРЦ";
|
||
Обработчик.Комментарий = НСтр("ru = 'Создание предопределенных шаблонов печати.'");
|
||
|
||
Обработчик = Обработчики.Добавить();
|
||
Обработчик.Версия = "3.1.6.1";
|
||
Обработчик.НачальноеЗаполнение = Истина;
|
||
Обработчик.РежимВыполнения = "Оперативно";
|
||
Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.ОбновитьПараметрыРегистрацииОборудования";
|
||
Обработчик.Комментарий = НСтр("ru = 'Обработка параметров регистрации подключаемого оборудования.'");
|
||
|
||
Обработчик = Обработчики.Добавить();
|
||
Обработчик.Версия = "3.1.6.6";
|
||
Обработчик.НачальноеЗаполнение = Истина;
|
||
Обработчик.РежимВыполнения = "Оперативно";
|
||
Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.ОбновитьМакетыЭтикеток";
|
||
Обработчик.Комментарий = НСтр("ru = 'Обновление макетов этикеток и ценников на новый формат.'");
|
||
|
||
Обработчик = Обработчики.Добавить();
|
||
Обработчик.Версия = "3.1.8.1";
|
||
Обработчик.НачальноеЗаполнение = Истина;
|
||
Обработчик.РежимВыполнения = "Оперативно";
|
||
Обработчик.Процедура = "ОбновлениеИнформационнойБазыБПО.УстановитьСрокХраненияОпераций";
|
||
Обработчик.Комментарий = НСтр("ru = 'Установка срока хранения операций.'");
|
||
|
||
|
||
КонецПроцедуры
|
||
|
||
// Вызывается перед процедурами-обработчиками обновления данных ИБ.
|
||
//
|
||
Процедура ПередОбновлениемИнформационнойБазы() Экспорт
|
||
|
||
КонецПроцедуры
|
||
|
||
// Вызывается после завершения обновления данных ИБ.
|
||
//
|
||
// Параметры:
|
||
// ПредыдущаяВерсия - Строка - версия до обновления. "0.0.0.0" для "пустой" ИБ.
|
||
// ТекущаяВерсия - Строка - версия после обновления.
|
||
// ВыполненныеОбработчики - ДеревоЗначений - список выполненных процедур-обработчиков обновления,
|
||
// сгруппированных по номеру версии.
|
||
// ВыводитьОписаниеОбновлений - Булево - если установить Истина, то будет выведена форма
|
||
// с описанием обновлений. По умолчанию, Истина.
|
||
// Возвращаемое значение.
|
||
// МонопольныйРежим - Булево - Истина, если обновление выполнялось в монопольном режиме.
|
||
//
|
||
// Пример:
|
||
// // Пример обхода выполненных обработчиков обновления:
|
||
// Для Каждого Версия Из ВыполненныеОбработчики.Строки Цикл
|
||
//
|
||
// Если Версия.Версия = "*" Тогда
|
||
// // Обработчик, который может выполнятся при каждой смене версии.
|
||
// Иначе
|
||
// // Обработчик, который выполняется для определенной версии.
|
||
// КонецЕсли;
|
||
//
|
||
// Для Каждого Обработчик Из Версия.Строки Цикл
|
||
// ...
|
||
// КонецЦикла;
|
||
//
|
||
// КонецЦикла;
|
||
//
|
||
Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсия, Знач ТекущаяВерсия,
|
||
Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт
|
||
|
||
|
||
КонецПроцедуры
|
||
|
||
// Вызывается при подготовке табличного документа с описанием изменений в программе.
|
||
//
|
||
// Параметры:
|
||
// Макет - ТабличныйДокумент - описание обновления всех библиотек и конфигурации.
|
||
// Макет можно дополнить или заменить.
|
||
// См. также общий макет ОписаниеИзмененийСистемы.
|
||
//
|
||
Процедура ПриПодготовкеМакетаОписанияОбновлений(Знач Макет) Экспорт
|
||
|
||
КонецПроцедуры
|
||
|
||
// Позволяет переопределить режим обновления данных информационной базы.
|
||
// Для использования в редких (нештатных) случаях перехода, не предусмотренных в
|
||
// стандартной процедуре определения режима обновления.
|
||
//
|
||
// Параметры:
|
||
// РежимОбновленияДанных - Строка - в обработчике можно присвоить одно из значений:
|
||
// "НачальноеЗаполнение" - если это первый запуск пустой базы (области данных);
|
||
// "ОбновлениеВерсии" - если выполняется первый запуск после обновление конфигурации базы данных;
|
||
// "ПереходСДругойПрограммы" - если выполняется первый запуск после обновление конфигурации базы данных,
|
||
// в которой изменилось имя основной конфигурации.
|
||
//
|
||
// СтандартнаяОбработка - Булево - если присвоить Ложь, то стандартная процедура
|
||
// определения режима обновления не выполняется,
|
||
// а используется значение РежимОбновленияДанных.
|
||
//
|
||
Процедура ПриОпределенииРежимаОбновленияДанных(РежимОбновленияДанных, СтандартнаяОбработка) Экспорт
|
||
|
||
КонецПроцедуры
|
||
|
||
// Добавляет в список процедуры-обработчики перехода с другой программы (с другим именем конфигурации).
|
||
// Например, для перехода между разными, но родственными конфигурациями: базовая -> проф -> корп.
|
||
// Вызывается перед началом обновления данных ИБ.
|
||
//
|
||
// Параметры:
|
||
// Обработчики - ТаблицаЗначений - с колонками:
|
||
// * ПредыдущееИмяКонфигурации - Строка - имя конфигурации, с которой выполняется переход;
|
||
// или "*", если нужно выполнять при переходе с любой конфигурации.
|
||
// * Процедура - Строка - полное имя процедуры-обработчика перехода с программы ПредыдущееИмяКонфигурации.
|
||
// Например, "ОбновлениеИнформационнойБазыУПП.ЗаполнитьУчетнуюПолитику"
|
||
// Обязательно должна быть экспортной.
|
||
//
|
||
// Пример:
|
||
// // Пример добавления процедуры-обработчика в список:
|
||
// Обработчик = Обработчики.Добавить();
|
||
// Обработчик.ПредыдущееИмяКонфигурации = "УправлениеТорговлей";
|
||
// Обработчик.Процедура = "ОбновлениеИнформационнойБазыУПП.ЗаполнитьУчетнуюПолитику".
|
||
//
|
||
Процедура ПриДобавленииОбработчиковПереходаСДругойПрограммы(Обработчики) Экспорт
|
||
|
||
КонецПроцедуры
|
||
|
||
// Вызывается после выполнения всех процедур-обработчиков перехода с другой программы (с другим именем конфигурации),
|
||
// и до начала выполнения обновления данных ИБ.
|
||
//
|
||
// Параметры:
|
||
// ПредыдущееИмяКонфигурации - Строка - имя конфигурации до перехода.
|
||
// ПредыдущаяВерсияКонфигурации - Строка - имя предыдущей конфигурации (до перехода).
|
||
// Параметры - Структура:
|
||
// * ВыполнитьОбновлениеСВерсии - Булево - по умолчанию Истина. Если установить Ложь,
|
||
// то будут выполнена только обязательные обработчики обновления (с версией "*").
|
||
// * ВерсияКонфигурации - Строка - номер версии после перехода.
|
||
// По умолчанию, равен значению версии конфигурации в свойствах метаданных.
|
||
// Для того чтобы выполнить, например, все обработчики обновления с версии ПредыдущаяВерсияКонфигурации,
|
||
// следует установить значение параметра в ПредыдущаяВерсияКонфигурации.
|
||
// Для того чтобы выполнить вообще все обработчики обновления, установить значение "0.0.0.1".
|
||
// * ОчиститьСведенияОПредыдущейКонфигурации - Булево - по умолчанию Истина.
|
||
// Для случаев когда предыдущая конфигурация совпадает по имени с подсистемой текущей конфигурации, следует указать Ложь.
|
||
//
|
||
Процедура ПриЗавершенииПереходаСДругойПрограммы(Знач ПредыдущееИмяКонфигурации, Знач ПредыдущаяВерсияКонфигурации, Параметры) Экспорт
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныйПрограммныйИнтерфейс
|
||
|
||
#Область ПроцедурыОбновления
|
||
// АПК:1327-выкл процедуры выполняются в монопольном режиме, #std490 п 2.
|
||
// АПК:1328-выкл процедуры выполняются в монопольном режиме, #std490 п 2.
|
||
|
||
// Обновить поставляемые драйвера БПО.
|
||
//
|
||
Процедура ОбновитьПоставляемыеДрайвера(Параметры = Неопределено) Экспорт
|
||
|
||
МенеджерОборудования.ОбновитьПоставляемыеДрайвера();
|
||
МенеджерОборудования.ОбновитьУстановленныеДрайвера();
|
||
|
||
КонецПроцедуры
|
||
|
||
// Обновить оборудование.
|
||
//
|
||
Процедура ОбновитьПодключаемоеОборудование(Параметры = Неопределено) Экспорт
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| ПодключаемоеОборудование.Ссылка КАК Ссылка,
|
||
| ПодключаемоеОборудование.ТипОборудования КАК ТипОборудования
|
||
|ИЗ
|
||
| Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование";
|
||
|
||
РезультатЗапроса = Запрос.Выполнить();
|
||
|
||
Выборка = РезультатЗапроса.Выбрать();
|
||
|
||
ШаблонТекстаОшибки = НСтр("ru = 'Не удалось обработать обновление подключаемого оборудования по причине: %1'", ОбщегоНазначенияБПО.КодОсновногоЯзыка());
|
||
|
||
Пока Выборка.Следующий() Цикл
|
||
НачатьТранзакцию();
|
||
Попытка
|
||
ОбработатьПодключаемоеОборудование(Выборка.Ссылка);
|
||
ЗафиксироватьТранзакцию();
|
||
Исключение
|
||
ОтменитьТранзакцию();
|
||
ТекстОшибки = СтрШаблон(ШаблонТекстаОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации(
|
||
НСтр("ru = 'Обновление информационной базы'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()),
|
||
ТекстОшибки);
|
||
КонецПопытки;
|
||
КонецЦикла;
|
||
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяОфлайнОборудование() Тогда
|
||
МодульМенеджерОфлайнОборудованияВызовСервераПереопределяемый = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОфлайнОборудованияВызовСервераПереопределяемый");
|
||
МодульМенеджерОфлайнОборудованияВызовСервераПереопределяемый.ДополнительнаяОбработкаОбъектовПриПереходеНаОфлайнОборудование();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Обновить шаблоны этикеток и ценников БПО.
|
||
//
|
||
Процедура ОбновитьШаблоныЭтикетокИЦенников(Параметры = Неопределено) Экспорт
|
||
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяПечатьЭтикетокИЦенников() Тогда
|
||
МодульПечатьЭтикетокИЦенниковБПО = ОбщегоНазначенияБПО.ОбщийМодуль("ПечатьЭтикетокИЦенниковБПО");
|
||
МодульПечатьЭтикетокИЦенниковБПО.ЗаполнитьПредопределенныеЭлементы();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// АПК:1328-вкл
|
||
// АПК:1327-вкл
|
||
|
||
// Обновить параметры регистрации ККМ
|
||
//
|
||
Процедура ОбновитьПараметрыРегистрацииОборудования(Параметры = Неопределено) Экспорт
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| ПодключаемоеОборудованиеПараметрыРегистрации.Ссылка КАК Ссылка
|
||
|ИЗ
|
||
| Справочник.ПодключаемоеОборудование.ПараметрыРегистрации КАК ПодключаемоеОборудованиеПараметрыРегистрации
|
||
|ГДЕ
|
||
| ПодключаемоеОборудованиеПараметрыРегистрации.ЗначениеПараметра В (&ВозможныеЗначения)
|
||
|
|
||
|СГРУППИРОВАТЬ ПО
|
||
| ПодключаемоеОборудованиеПараметрыРегистрации.Ссылка";
|
||
ВозможныеЗначения = Новый Массив(4);
|
||
ВозможныеЗначения.Добавить("Да");
|
||
ВозможныеЗначения.Добавить("Нет");
|
||
ВозможныеЗначения.Добавить("Yes");
|
||
ВозможныеЗначения.Добавить("No");
|
||
Запрос.УстановитьПараметр("ВозможныеЗначения", ВозможныеЗначения);
|
||
|
||
Результат = Запрос.Выполнить();
|
||
Если Результат.Пустой() Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
НачатьТранзакцию();
|
||
Попытка
|
||
Блокировка = Новый БлокировкаДанных();
|
||
ЭлементБлокировки = Блокировка.Добавить("Справочник.ПодключаемоеОборудование");
|
||
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
|
||
ЭлементБлокировки.ИсточникДанных = Результат;
|
||
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Ссылка");
|
||
Блокировка.Заблокировать();
|
||
|
||
Выборка = Результат.Выбрать();
|
||
Пока Выборка.Следующий() Цикл
|
||
|
||
Объект = Выборка.Ссылка.ПолучитьОбъект();
|
||
Для Каждого Строка Из Объект.ПараметрыРегистрации Цикл
|
||
Если Строка.ЗначениеПараметра = "Да"
|
||
Или Строка.ЗначениеПараметра = "Yes" Тогда
|
||
Строка.ЗначениеПараметра = XMLСтрока(Истина);
|
||
ИначеЕсли Строка.ЗначениеПараметра = "Нет"
|
||
Или Строка.ЗначениеПараметра = "No" Тогда
|
||
Строка.ЗначениеПараметра = XMLСтрока(Ложь);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Объект.Записать();
|
||
|
||
КонецЦикла;
|
||
ЗафиксироватьТранзакцию();
|
||
Исключение
|
||
ОтменитьТранзакцию();
|
||
ШаблонТекстаОшибки = НСтр("ru = 'Не удалось преобразовать параметры регистрации подключаемого оборудования по причине:
|
||
|%1'", ОбщегоНазначенияБПО.КодОсновногоЯзыка());
|
||
ТекстОшибки = СтрШаблон(ШаблонТекстаОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации(
|
||
НСтр("ru = 'Обновление информационной базы'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()),
|
||
ТекстОшибки);
|
||
КонецПопытки;
|
||
|
||
|
||
КонецПроцедуры
|
||
|
||
// Обновить макеты этикеток на новый формат.
|
||
//
|
||
Процедура ОбновитьМакетыЭтикеток(Параметры = Неопределено) Экспорт
|
||
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяПечатьЭтикетокИЦенников() Тогда
|
||
МодульПечатьЭтикетокИЦенниковБПО = ОбщегоНазначенияБПО.ОбщийМодуль("ПечатьЭтикетокИЦенниковБПО");
|
||
МодульПечатьЭтикетокИЦенниковБПО.ОбновитьМакетыЭтикеток(Параметры);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Установить значение констант сроков хранения операций в регистрах сведений
|
||
//
|
||
Процедура УстановитьСрокХраненияОпераций(Параметры = Неопределено) Экспорт
|
||
|
||
|
||
КонецПроцедуры
|
||
|
||
|
||
#КонецОбласти
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
// АПК:1327-выкл процедуры выполняются в монопольном режиме, #std490 п 2.
|
||
// АПК:1328-выкл процедуры выполняются в монопольном режиме, #std490 п 2.
|
||
|
||
// Выполняет дополнительную обработку оборудования
|
||
//
|
||
// Параметры:
|
||
// СсылкаНаОборудование - СправочникСсылка.ПодключаемоеОборудование
|
||
//
|
||
Процедура ОбработатьПодключаемоеОборудование(СсылкаНаОборудование)
|
||
|
||
МенеджерОборудованияВызовСервераПереопределяемый.ОбновитьСправочникПодключаемогоОборудования(СсылкаНаОборудование);
|
||
|
||
КонецПроцедуры
|
||
|
||
// АПК:1328-вкл
|
||
// АПК:1327-вкл
|
||
|
||
#КонецОбласти
|