Область применения
Наше решение поможет хранить реквизиты внешних печатных форм в Вашей 1С.
Для кого подойдёт данное решение
- Компании, желающие хранить реквизиты и табличные части внешних печатных форм в хранилище значений ИБ.
Технические требования
Совместимость
Решение совместимо с платформной 1С версии 8.3
Технические ограничения
Главным условием сохранения обработок является наличие реквизитов обработки, а не реквизитов формы.
Решение не проходило тестиро
сервисах аренды базы, ГРМ, 1С для стран СНГ.
Код открыт.
Функциональные возможности
- Хранение реквизитов в хранилище значений информационной базы;
- Сохранение и восстановление как реквизитов, так и табличных части.
Демонстрация решения и руководство по использованию==
Создаем регистр сведений, например, ХранилищеНастроекВнешнихОбработок.
Измерения:
1. ДокументСсылка - ссылка на любой документ.
2. Обработка - Строка (100)
Ресурсы
1. Настройка -ХранилищеЗначения
В один из общедоступных модулей ИБ добавляем 2 процедуры
Процедура дкВосстановитьНастройкиВнешнейОбработки(ДокументСсылка, ОбработкаОбъект) Экспорт
Если ЗначениеЗаполнено(ДокументСсылка) Тогда
НаборЗаписей = РегистрыСведений.ХранилищеНастроекВнешнихОбработок.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ДокументСсылка.Установить(ДокументСсылка);
НаборЗаписей.Отбор.Обработка.Установить(Строка(ОбработкаОбъект));
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() <> 0 Тогда
СтруктураНастроек = НаборЗаписей[0].Настройка.Получить();
Если ТипЗнч(СтруктураНастроек) = Тип("Структура") Тогда
//восстановим реквизиты
Для каждого Ключ Из ОбработкаОбъект.Метаданные().Реквизиты Цикл
Попытка
ОбработкаОбъект[Ключ.Имя] = СтруктураНастроек[Ключ.Имя];
Исключение
КонецПопытки;
КонецЦикла;
//восстановим табличные части
Для каждого ТабличнаяЧасть Из ОбработкаОбъект.Метаданные().ТабличныеЧасти Цикл
Для каждого стр Из СтруктураНастроек[ТабличнаяЧасть.Имя] Цикл
ЗаполнитьЗначенияСвойств(ОбработкаОбъект[ТабличнаяЧасть.Имя].Добавить(),Стр);
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
И
//Процедура сохраняет значения реквизитов обработки
//
Процедура дкСохранитьНастройкиВнешнейОбработки(ДокументСсылка, ОбработкаОбъект) Экспорт
Если ЗначениеЗаполнено(ДокументСсылка) Тогда
//сформируем структуру настроек
СтруктураНастроек = новый Структура;
Для каждого Ключ Из ОбработкаОбъект.Метаданные().Реквизиты Цикл
СтруктураНастроек.Вставить(Ключ.Имя,ОбработкаОбъект[Ключ.Имя]);
КонецЦикла;
Для каждого ТабличнаяЧасть Из ОбработкаОбъект.Метаданные().ТабличныеЧасти Цикл
СтруктураНастроек.Вставить(ТабличнаяЧасть.Имя,ОбработкаОбъект[ТабличнаяЧасть.Имя].Выгрузить());
КонецЦикла;
НаборЗаписей = РегистрыСведений.ХранилищеНастроекВнешнихОбработок.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ДокументСсылка.Установить(ДокументСсылка);
НаборЗаписей.Отбор.Обработка.Установить(Строка(ОбработкаОбъект));
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Настройка = Новый ХранилищеЗначения(СтруктураНастроек);
НоваяЗапись.ДокументСсылка = ДокументСсылка;
НоваяЗапись.Обработка = Строка(ОбработкаОбъект);
Иначе
//перезапишем настройку
Запись = НаборЗаписей[0];
Запись.Настройка = Новый ХранилищеЗначения(СтруктураНастроек);
КонецЕсли;
НаборЗаписей.Записать();
КонецЕсли;
КонецПроцедуры
Теперь во внешних печатных формах необходимо вызвать данные процедуры следующим образом:
В процедуре ПередОткрытием вызовем дкВосстановитьНастройкиВнешнейОбработки, а впроцедуре Перед закрытием - дкСохранитьНастройкиВнешнейОбработки.
Особенности решения
- Универсальный механизм хранения реквизитов в хранилище значений информационной базы
- Представленный метод позволяет сохранять и восстанавливать как реквизиты, так и табличные части.
Кейс внедрения
Существует ряд внешних печатных форм для 1С, которые предварительно "дозаполняются" перед формированием печатной формы. Пример тому печатная форма "1-Т", или "Транспортная накладная", "приложение №4". Возникла задача хранить заполненные реквизиты в информационной базе, чтобы можно было быстро переформировать ПФ без повторного заполнения ряда реквизитов.