Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PlugFox/5f6d9379096d84062d51ba501910494a to your computer and use it in GitHub Desktop.
Save PlugFox/5f6d9379096d84062d51ba501910494a to your computer and use it in GitHub Desktop.
Создание дополнительных реквизитов для справок физических лиц
//==============================================================================
// Дополнительные реквизиты и свойства
// Вызвать исключение, если не доступна подсистема Дополнительных Реквизитов и Сведений
Процедура ПроверитьИспользованиеДополнительныхРеквизитов()
Если Не УправлениеСвойствами.СвойстваДоступны() Тогда
ВызватьИсключение "Для текущего пользователя не доступна подсистема Дополнительных Реквизитов и Сведений";
ИначеЕсли Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеРеквизитыИСведения") Тогда
ВызватьИсключение "Подсистема Дополнительных Реквизитов и Сведений не включена:
|Администрирование > Общие настройки > Дополнительные реквизиты и сведения
|Установить галочку на 'Дополнительные реквизиты и сведения'.";
КонецЕсли;
КонецПроцедуры // ПроверитьИспользованиеДополнительныхРеквизитов()
// Проверим и создадим доп. реквизит к Справочник.СправкиФизическихЛиц
Процедура ДобавитьДопРеквизитДляСправкиФизическихЛиц(СсылкаНаСправку, Заголовок, ТипыЗначения = Неопределено)
//пробуем найти доп. реквизит по заголовку
Наименование = Заголовок + " (" + Строка(СсылкаНаСправку) + ")";;
ЭлПВХ_Ссылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(Наименование, Истина);
// Если не найдено - создадим новый дополнительный реквизит
Если ЭлПВХ_Ссылка.Пустая() Тогда
// Основные данные дополнительного реквизита
ЭлПВХ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
ЭлПВХ.Заголовок = Заголовок;
ЭлПВХ.Имя = СтрЗаменить(СтрЗаменить(СтрЗаменить(ТРег(Строка(СсылкаНаСправку)), " ", ""), "(", ""), ")", "") + "_" + СтрЗаменить(ТРег(Заголовок), " ", "");
ЭлПВХ.НаборСвойств = ПредопределенноеЗначение("Справочник.НаборыДополнительныхРеквизитовИСведений.Справочник_СправкиФизическихЛиц");
ЭлПВХ.Наименование = Наименование;
ЭлПВХ.ТипЗначения = ?(ТипыЗначения = Неопределено, Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(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