Механизм хранения реквизитов в хранилище значений информационной базы

01.09.14

Разработка - Групповая разработка (Git, хранилище)

Решение предназначено для хранения реквизитов внешних печатных форм в информационной базе

Область применения

Наше решение поможет хранить реквизиты внешних печатных форм в Вашей 1С.

Для кого подойдёт данное решение

  • Компании, желающие хранить реквизиты и табличные части внешних печатных форм в хранилище значений ИБ.

Технические требования

Совместимость
Решение совместимо с платформной 1С версии 8.3
Технические ограничения
Главным условием сохранения обработок является наличие реквизитов обработки, а не реквизитов формы.

Решение не проходило тестиро вание на конфигурациях, снятых с поддержки, в облачных
сервисах аренды базы, ГРМ, 1С для стран СНГ.

Код открыт.

Функциональные возможности

  • Хранение реквизитов в хранилище значений информационной базы;
  • Сохранение и восстановление как реквизитов, так и табличных части.

Демонстрация решения и руководство по использованию==

Создаем регистр сведений, например, ХранилищеНастроекВнешнихОбработок.
Измерения:
1. ДокументСсылка - ссылка на любой документ.
2. Обработка - Строка (100)
Ресурсы
1. Настройка -ХранилищеЗначения
 В один из общедоступных модулей ИБ добавляем 2 процедуры

Процедура дкВосстановитьНастройкиВнешнейОбработки(ДокументСсылка, ОбработкаОбъект) Экспорт

Если ЗначениеЗаполнено(ДокументСсылка) Тогда

НаборЗаписей = РегистрыСведений.ХранилищеНастроекВнешнихОбработок.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ДокументСсылка.Установить(ДокументСсылка);
НаборЗаписей.Отбор.Обработка.Установить(Строка(ОбработкаОбъект));
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() <> 0 Тогда

СтруктураНастроек = НаборЗаписей[0].Настройка.Получить();
Если ТипЗнч(СтруктураНастроек) = Тип("Структура") Тогда

//восстановим реквизиты
Для каждого Ключ Из ОбработкаОбъект.Метаданные().Реквизиты Цикл
Попытка
ОбработкаОбъект[Ключ.Имя] = СтруктураНастроек[Ключ.Имя];
Исключение
КонецПопытки;
КонецЦикла;

//восстановим табличные части
Для каждого ТабличнаяЧасть Из ОбработкаОбъект.Метаданные().ТабличныеЧасти Цикл
Для каждого стр Из СтруктураНастроек[ТабличнаяЧасть.Имя] Цикл
ЗаполнитьЗначенияСвойств(ОбработкаОбъект[ТабличнаяЧасть.Имя].Добавить(),Стр);
КонецЦикла;
КонецЦикла;

КонецЕсли;

КонецЕсли;

КонецЕсли;

КонецПроцедуры

И 

//Процедура сохраняет значения реквизитов обработки
//
Процедура дкСохранитьНастройкиВнешнейОбработки(ДокументСсылка, ОбработкаОбъект) Экспорт

Если ЗначениеЗаполнено(ДокументСсылка) Тогда

//сформируем структуру настроек
СтруктураНастроек = новый Структура;
Для каждого Ключ Из ОбработкаОбъект.Метаданные().Реквизиты Цикл
СтруктураНастроек.Вставить(Ключ.Имя,ОбработкаОбъект[Ключ.Имя]);
КонецЦикла;
Для каждого ТабличнаяЧасть Из ОбработкаОбъект.Метаданные().ТабличныеЧасти Цикл
СтруктураНастроек.Вставить(ТабличнаяЧасть.Имя,ОбработкаОбъект[ТабличнаяЧасть.Имя].Выгрузить());
КонецЦикла;
НаборЗаписей = РегистрыСведений.ХранилищеНастроекВнешнихОбработок.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ДокументСсылка.Установить(ДокументСсылка);
НаборЗаписей.Отбор.Обработка.Установить(Строка(ОбработкаОбъект));
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда

НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Настройка = Новый ХранилищеЗначения(СтруктураНастроек);
НоваяЗапись.ДокументСсылка = ДокументСсылка;
НоваяЗапись.Обработка = Строка(ОбработкаОбъект);

Иначе
//перезапишем настройку
Запись = НаборЗаписей[0];
Запись.Настройка = Новый ХранилищеЗначения(СтруктураНастроек);
КонецЕсли;

НаборЗаписей.Записать();
КонецЕсли;

КонецПроцедуры

Теперь во внешних печатных формах необходимо вызвать данные процедуры следующим образом:
В процедуре ПередОткрытием вызовем дкВосстановитьНастройкиВнешнейОбработки, а впроцедуре Перед закрытием - дкСохранитьНастройкиВнешнейОбработки. 

Особенности решения

  • Универсальный механизм хранения реквизитов в хранилище значений информационной базы
  • Представленный метод позволяет сохранять и восстанавливать как реквизиты, так и табличные части.

Кейс внедрения

Существует ряд внешних печатных форм для 1С, которые предварительно "дозаполняются" перед формированием печатной формы. Пример тому печатная форма "1-Т", или "Транспортная накладная", "приложение №4". Возникла задача хранить заполненные реквизиты в информационной базе, чтобы можно было быстро переформировать ПФ без повторного заполнения ряда реквизитов.

Вступайте в нашу телеграмм-группу Инфостарт