Адресные объекты / Модуль менеджера
файл///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
// Обновляет данные субъектов РФ в адресных объектах.
// Записи сопоставляются по полю КодСубъектаРФ.
//
Процедура ОбновитьСоставСубъектовРФПоКлассификатору(НачальноеЗаполнениеИОбновлениеДанных = Ложь) Экспорт
Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Классификатор = КлассификаторСубъектовРФ();
БлокировкаДанных = Новый БлокировкаДанных;
БлокировкаДанных.Добавить("РегистрСведений.АдресныеОбъекты");
НачатьТранзакцию();
Попытка
БлокировкаДанных.Заблокировать();
// Выбираем те, которые есть в макете, но отсутствующие в регистре.
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Параметр.КодСубъектаРФ КАК КодСубъектаРФ
|ПОМЕСТИТЬ
| Классификатор
|ИЗ
| &Классификатор КАК Параметр
|ИНДЕКСИРОВАТЬ ПО
| КодСубъектаРФ
|;
|
|ВЫБРАТЬ
| Классификатор.КодСубъектаРФ КАК КодСубъектаРФ
|ИЗ
| Классификатор КАК Классификатор
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты
|ПО
| АдресныеОбъекты.Уровень = 1
| И АдресныеОбъекты.КодСубъектаРФ = Классификатор.КодСубъектаРФ
|ГДЕ
| АдресныеОбъекты.Идентификатор ЕСТЬ NULL
|");
Запрос.УстановитьПараметр("Классификатор", Классификатор);
НовыеСубъектыРФ = Запрос.Выполнить().Выгрузить();
// Перезаписываем только отсутствующих.
Набор = СоздатьНаборЗаписей();
Отбор = Набор.Отбор.КодСубъектаРФ;
Для Каждого СубъектРФ Из НовыеСубъектыРФ Цикл
Отбор.Установить(СубъектРФ.КодСубъектаРФ);
Набор.Очистить();
ИсходныеДанные = Классификатор.Найти(СубъектРФ.КодСубъектаРФ, "КодСубъектаРФ");
НовыйСубъектРФ = Набор.Добавить();
ЗаполнитьЗначенияСвойств(НовыйСубъектРФ, ИсходныеДанные);
НовыйСубъектРФ.Уровень = 1;
Если НачальноеЗаполнениеИОбновлениеДанных Тогда
ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор);
Иначе
Набор.Записать();
КонецЕсли;
НаборСлужебныеАдресныеСведения = РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей();
НаборСлужебныеАдресныеСведения.Отбор.Тип.Установить("СубъектыРФ");
НаборСлужебныеАдресныеСведения.Отбор.Идентификатор.Установить(СубъектРФ.КодСубъектаРФ);
НаборСлужебныеАдресныеСведения.Прочитать();
Если НаборСлужебныеАдресныеСведения.Количество() > 0 Тогда
ЗаписьСПолнымНаименованием = НаборСлужебныеАдресныеСведения.Получить(0);
Иначе
ЗаписьСПолнымНаименованием = НаборСлужебныеАдресныеСведения.Добавить();
ЗаписьСПолнымНаименованием.Идентификатор = СубъектРФ.КодСубъектаРФ;
ЗаписьСПолнымНаименованием.Тип = "СубъектыРФ";
ЗаписьСПолнымНаименованием.Ключ = "06.06.2079 0:00:00";
КонецЕсли;
ЗаписьСПолнымНаименованием.Значение = ИсходныеДанные.ПолноеНаименование;
НаборСлужебныеАдресныеСведения.Записать();
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации(АдресныйКлассификаторСлужебный.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
// Возвращает информацию из классификатора субъектов РФ.
//
// Возвращаемое значение:
// ТаблицаЗначений - поставляемые данные. Колонки:
// * КодСубъектаРФ - Число - код классификатора субъекта, например 77 для Москвы.
// * Наименование - Строка - наименование субъекта по классификатору. Например, "Московская".
// * Сокращение - Строка - наименование субъекта по классификатору. Например, "Обл".
// * ПолноеНаименование - Строка - полное наименование субъекта по классификатору. Например, "Кемеровская
// область - Кузбасс";
// * ПочтовыйИндекс - Число - индекс региона. Если 0 - то неопределено.
// * Идентификатор - УникальныйИдентификатор - идентификатор адресного объекта.
//
Функция КлассификаторСубъектовРФ() Экспорт
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(ПолучитьМакет("КлассификаторСубъектовРФ").ПолучитьТекст());
Результат = СериализаторXDTO.ПрочитатьXML(Чтение);
Возврат Результат;
КонецФункции
// Возвращает информацию о адресных сокращениях.
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * Уровень - Число - уровень сокращения.
// * Наименование - Строка - полное наименование адресного объекта.
// * Сокращение - Строка - сокращенное наименование адресного объекта.
// * СокращениеПриказаМинфинаРФ171н - Строка - сокращенное наименование
// адресного объекта согласно приказу МинфинаРФ N 171н.
// .
//
Функция АдресныеСокращения() Экспорт
Макет = ПолучитьМакет("АдресныеСокращения");
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(Макет.ПолучитьТекст());
Результат = СериализаторXDTO.ПрочитатьXML(Чтение);
Возврат Результат;
КонецФункции
// Возвращает часовые зоны РФ согласно федеральному закону от 03.06.2011 N 107-ФЗ (ред. от 14.04.2023) "Об исчислении времени".
//
// Возвращаемое значение:
// ТаблицаЗначений - поставляемые данные. Колонки:
// * ЧасоваяЗонаРФ - Число - номер часовой зоны субъекта, например 2 для Москвы.
// * ЧасовойПояс - Строка - имя часового пояса, например "UTC+3" для Москвы.
// * ИдентификаторРегиона - УникальныйИдентификатор - уникальный идентификационный код адресного объекта (региона).
// * КодСубъектаРФ - Число - код классификатора субъекта, например 77 для Москвы.
// * ИдентификаторРайонаМуниципальный - УникальныйИдентификатор - уникальный идентификационный код адресного
// объекта (района). Указывается, когда в регионе
// несколько часовых зон.
// * ИдентификаторРайонаАдминистративный - УникальныйИдентификатор - уникальный идентификационный код адресного
// объекта (района). Указывается, когда в регионе
// несколько часовых зон.
//
Функция ЧасовыеЗоныСубъектовРФ() Экспорт
Результат = АдресныйКлассификаторПовтИсп.ЧасовыеЗоныСубъектовРФ();
Возврат Результат.ЧасовыеЗоныСубъектовРФ;
КонецФункции
#КонецОбласти
#КонецЕсли