TSDZakazScladVasilek/CommonModules/ОбновлениеИнформационнойБазыБПО/Ext/Module.bsl

408 lines
29 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// 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-вкл
#КонецОбласти