Last active
April 5, 2019 15:51
-
-
Save PlugFox/5f6d9379096d84062d51ba501910494a to your computer and use it in GitHub Desktop.
Создание дополнительных реквизитов для справок физических лиц
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//============================================================================== | |
// Дополнительные реквизиты и свойства | |
// Вызвать исключение, если не доступна подсистема Дополнительных Реквизитов и Сведений | |
Процедура ПроверитьИспользованиеДополнительныхРеквизитов() | |
Если Не УправлениеСвойствами.СвойстваДоступны() Тогда | |
ВызватьИсключение "Для текущего пользователя не доступна подсистема Дополнительных Реквизитов и Сведений"; | |
ИначеЕсли Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеРеквизитыИСведения") Тогда | |
ВызватьИсключение "Подсистема Дополнительных Реквизитов и Сведений не включена: | |
|Администрирование > Общие настройки > Дополнительные реквизиты и сведения | |
|Установить галочку на 'Дополнительные реквизиты и сведения'."; | |
КонецЕсли; | |
КонецПроцедуры // ПроверитьИспользованиеДополнительныхРеквизитов() | |
// Проверим и создадим доп. реквизит к Справочник.СправкиФизическихЛиц | |
Процедура ДобавитьДопРеквизитДляСправкиФизическихЛиц(СсылкаНаСправку, Заголовок, ТипыЗначения = Неопределено) | |
//пробуем найти доп. реквизит по заголовку | |
Наименование = Заголовок + " (" + Строка(СсылкаНаСправку) + ")";; | |
ЭлПВХ_Ссылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(Наименование, Истина); | |
// Если не найдено - создадим новый дополнительный реквизит | |
Если ЭлПВХ_Ссылка.Пустая() Тогда | |
// Основные данные дополнительного реквизита | |
ЭлПВХ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент(); | |
ЭлПВХ.Заголовок = Заголовок; | |
ЭлПВХ.Имя = СтрЗаменить(СтрЗаменить(СтрЗаменить(ТРег(Строка(СсылкаНаСправку)), " ", ""), "(", ""), ")", "") + "_" + СтрЗаменить(ТРег(Заголовок), " ", ""); | |
ЭлПВХ.НаборСвойств = ПредопределенноеЗначение("Справочник.НаборыДополнительныхРеквизитовИСведений.Справочник_СправкиФизическихЛиц"); | |
ЭлПВХ.Наименование = Наименование; | |
ЭлПВХ.ТипЗначения = ?(ТипыЗначения = Неопределено, Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(100)), ТипыЗначения); | |
ЭлПВХ.Комментарий = "Добавлено автоматически для обработки управляющей справками физических лиц."; | |
ЭлПВХ.ЗаполнятьОбязательно = Ложь; | |
// Настройка видимости в зависимости от вида справки | |
нСтр = ЭлПВХ.ЗависимостиДополнительныхРеквизитов.Добавить(); | |
нСтр.ЗависимоеСвойство = "Виден"; | |
нСтр.Реквизит = "ВидСправки"; | |
нСтр.Условие = "Равно"; | |
нСтр.Значение = СсылкаНаСправку; | |
ЭлПВХ.Записать(); | |
ЭлПВХ_Ссылка = ЭлПВХ.Ссылка; | |
КонецЕсли; | |
//проверим, что реквизит указан в наборе доп. реквизитов справок физических лиц | |
НаборОб = ПредопределенноеЗначение("Справочник.НаборыДополнительныхРеквизитовИСведений.Справочник_СправкиФизическихЛиц").ПолучитьОбъект(); | |
Если НаборОб.ДополнительныеРеквизиты.Найти(ЭлПВХ_Ссылка, "Свойство") = Неопределено Тогда | |
//добавим реквизит в набор | |
СтрНаборОб = НаборОб.ДополнительныеРеквизиты.Добавить(); | |
СтрНаборОб.Свойство = ЭлПВХ_Ссылка; | |
КонецЕсли; | |
Если НаборОб.Модифицированность() Тогда | |
//запишем при необходимости | |
НаборОб.Записать(); | |
КонецЕсли; | |
КонецПроцедуры // ДобавитьДопРеквизитДляСправкиФизическихЛиц() | |
Процедура СоздатьВидыСправокДопРеквизиты() Экспорт | |
ПроверитьИспользованиеДополнительныхРеквизитов(); | |
ВидыСправок = ПолучитьВидыСправок(); | |
// Найдем виды справок, которых еще нет в базе | |
ТЗ = Новый ТаблицаЗначений; | |
ТЗ.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(50))); | |
Для Каждого Вид Из ВидыСправок Цикл | |
нСтр = ТЗ.Добавить(); | |
нСтр.Наименование = СокрЛП(Вид.Наименование); | |
КонецЦикла; | |
Запрос = Новый Запрос("ВЫБРАТЬ * ПОМЕСТИТЬ ВТ ИЗ &ТЗ КАК ТЗ; | |
|ВЫБРАТЬ ВТ.Наименование КАК ВидСправки | |
|ИЗ ВТ КАК ВТ ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыСправок КАК ВидыСправок | |
|ПО ПОДСТРОКА(ВТ.Наименование, 1, 50) = ВидыСправок.Наименование И НЕ ВидыСправок.ПометкаУдаления | |
|ГДЕ ВидыСправок.Ссылка ЕСТЬ NULL"); | |
Запрос.УстановитьПараметр("ТЗ", ТЗ); | |
ВидыСправокНаДобавление = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ВидСправки"); | |
// Добавим справки и реквизиты к ним | |
// ТРАНЗАКЦИЯ + | |
НачатьТранзакцию(); | |
Попытка | |
// ОПЕРАЦИЯ + | |
Для Каждого ВидСправки Из ВидыСправок Цикл | |
Если ВидыСправокНаДобавление.Найти(ВидСправки.Наименование) = Неопределено Тогда Продолжить КонецЕсли; | |
нСправка = Справочники.ВидыСправок.СоздатьЭлемент(); | |
нСправка.Наименование = СокрЛП(ВидСправки.Наименование); | |
нСправка.Записать(); | |
СсылкаНаСправку = нСправка.Ссылка; | |
// ДОПОЛНИТЕЛЬНЫЕ РЕКВИЗИТЫ И СВОЙСТВА + | |
Если Не ВидСправки.Свойство("Реквизиты") Или Не ВидСправки.Реквизиты.Количество() Тогда Продолжить КонецЕсли; | |
Для Каждого Элемент Из ВидСправки.Реквизиты Цикл | |
ДобавитьДопРеквизитДляСправкиФизическихЛиц( | |
СсылкаНаСправку | |
, Элемент.Реквизит | |
, Новый ОписаниеТипов( | |
Элемент.Тип | |
, Новый КвалификаторыЧисла(15, 2) | |
, Новый КвалификаторыСтроки(100) | |
, Новый КвалификаторыДаты(ЧастиДаты.Дата) | |
) | |
); | |
КонецЦикла; | |
// ДОПОЛНИТЕЛЬНЫЕ РЕКВИЗИТЫ И СВОЙСТВА - | |
КонецЦикла; | |
// ОПЕРАЦИЯ - | |
ЗафиксироватьТранзакцию(); | |
Исключение | |
Если ТранзакцияАктивна() Тогда | |
ОтменитьТранзакцию(); | |
КонецЕсли; | |
ВызватьИсключение СтрШаблон("Во время транзакции произошла ошибка. | |
|Описание ошибки: %1", ОписаниеОшибки()); | |
КонецПопытки; | |
// ТРАНЗАКЦИЯ - | |
КонецПроцедуры // СоздатьВидыСправокДопРеквизиты() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment