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

01.09.14

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

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

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

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

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

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

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

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

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

Код открыт.

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

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

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

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

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

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

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

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

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

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

КонецЕсли;

КонецЕсли;

КонецЕсли;

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

И 

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

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

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

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

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

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

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

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

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

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

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

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

См. также

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Программист Стажер Платформа 1С v8.3 Платные (руб)

Использования систем контроля версий — стандарт современной разработки. На курсе научимся использованию Хранилища 1С и GIT при разработке на 1С:Предприятие 8. Разберем подходы и приемы коллективной разработки, научимся самостоятельно настраивать системы и ориентироваться в них.

4900 руб.

29.06.2022    13007    107    4    

139

Групповая разработка (Git, хранилище) Обновление 1С Программист Платформа 1С v8.3 Россия Бесплатно (free)

Внедряем проверку новых версий прямо в расширение. Оповещайте о новых версиях и показывайте пользователям список изменений. Для разработчиков, которые хотят сэкономить время и повысить лояльность клиентов!

05.02.2025    1686    Nonik    10    

17

Групповая разработка (Git, хранилище) Программист Руководитель проекта Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Когда в хранилище одновременно разрабатывают несколько команд, сортировка сделанного и несделанного при формировании релиза и проведение code review по задачам превращаются в непроходимый квест. В таких случаях нужен бранчинг. Расскажем об опыте перехода на новую схему хранения кода для ИТ-департамента.

23.09.2024    5866    kraynev-navi    3    

26

Групповая разработка (Git, хранилище) Программист Платформа 1С v8.3 Бесплатно (free)

Как исправить медленное сравнение конфигурации с файлом cf, сохраненным из хранилища.

17.09.2024    5736    vatkir    15    

10

Групповая разработка (Git, хранилище) Программист Бесплатно (free)

Называть Git новой технологией – уже смешно, но для многих 1С-ников это действительно «новое и неизведанное». Расскажем о плюсах и минусах двух главных систем контроля версий в мире 1С: Git и хранилища.

17.09.2024    11604    Golovanoff    69    

26

Групповая разработка (Git, хранилище) Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Во многих командах незаслуженно забывают о том, что в базе меняются расширения (как от вендора, так и собственные) и внешние отчеты и обработки. Вплоть до того, что релиз происходит каждый день – меняются печатные формы, отчеты, обработки. Расскажем о том, как выгружать в Git не только изменения конфигурации рабочего контура, но и файлы внешних обработок и расширений.

05.09.2024    4824    ardn    12    

15

EDT Групповая разработка (Git, хранилище) Программист Платформа 1С v8.3 Бесплатно (free)

Заказчики любят EDT+Git за прозрачность и контроль качества. А у разработчиков есть две основные причины не любить EDT – это тормоза и глюки. Расскажем о том, что нужно учесть команде при переходе на EDT+Git.

14.08.2024    10597    lekot    35    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. tormozit 7269 21.11.11 08:40 Сейчас в теме
Табличные части лучше методами Загрузить и Выгрузить копировать и восстанавливать.
2. DrAku1a 1754 21.11.11 09:41 Сейчас в теме
Механизмы общего хранения настроек в стандартных конфигурациях уже давно созданы.

//Пример: УТ 10.3

СтруктураНастройки.Вставить("Пользователь", Справочники.Пользователи.ПустаяСсылка());
СтруктураНастройки.Вставить("ИмяОбъекта", ИмяОбъекта);
СтруктураНастройки.Вставить("НаименованиеНастройки", ИмяНастройки);

УниверсальныеМеханизмы.ПолучитьНастройку(СтруктураНастройки);

УниверсальныеМеханизмы.СохранитьНастройку(СтруктураНастройки);
Показать


зачем изобретать велосипед?
bulpi; fomix; Istur; +3 Ответить
3. alnovin 323 21.11.11 12:09 Сейчас в теме
В конфигурациях от Раруса я ничего подобного не обнаружил, поэтому набросал "велосипед" )
4. Istur 1475 21.11.11 12:49 Сейчас в теме
Почитай вот это: Хранение настроек внешних отчетов на СКД в 1С. Существует как данный регистр, так и процедуры сохранения/восстановления настроек из него.

alnovin пишет:

В конфигурациях от Раруса я ничего подобного не обнаружил, поэтому набросал "велосипед" )


Но возможно было бы проще, универсальнее, перенести данные процедуры из типовой конфигурации 1с, точнее весь данный механизм, с общей формой и процедурами в общем модуле.
5. kirillkr 29 21.11.11 12:57 Сейчас в теме
alnovin пишет:
В конфигурациях от Раруса я ничего подобного не обнаружил, поэтому набросал "велосипед" )

А какая конфиуграция?
7. alnovin 323 21.11.11 19:02 Сейчас в теме
(5) kirillkr, Альфа-Авто: Автосервис+Автозапчасти. Редакция 4.1 (4.1.01.19)
6. kirillkr 29 21.11.11 15:54 Сейчас в теме
Я, например, в конфигурации от Раруса задействовал регистр КартинкиИФайлы.
8. dumal 23.11.11 10:25 Сейчас в теме
Правильно ли я понял, что Вы предлагаете использовать для хранения строку длиной 100 символов?
9. alnovin 323 24.11.11 07:00 Сейчас в теме
(8) dumal, данный механизм сохраняет данные произвольных типов, в частности, строки различной длинны.
10. dryms 249 27.06.12 11:32 Сейчас в теме
Не знаю как в других конфигурациях, но в УПП есть такой типовой регистр по названием "ЗначенияСвойствОбъектов". У любого документа он заполняется через свойства документа. Почему бы это не ипользовать для хранения доп реквизитов? Я именно так и сделал. Зачем ипользовать ваш механизм?
11. dmitry1975 343 13.01.13 21:35 Сейчас в теме
Извиняюсь, что сюда с вопросом, но можно поподробнее про такое сохранение настроек табличных частей. Столкнулся как раз с рарусовской конфигурацией альфа-авто 4.1 там есть обработка самописная,интегрированная в конфигурацию. В ней имеется очень большое кол-во колонок в табличной части, и каждый пользователь их каждый раз под себя подстраивает (перетаскивает с места на место, изменяет размер) и хотелось бы как-то сохранить один раз сделанные настройки пользователями и восстанавливать их при запуске. Мне казалось, что платформа 8.2 такие настройки делает автоматически, но почему-то именно в этой обработке такое сохранение не работает. Чистил кэши, выгружал обработку и снова загружал в конфигурацию, поднимал базу в файловом варианте, на другом сервере, плясал с бубном, но воз и ныне там. Самое интересное, что пользователи гвоорят, что раньше настройки сохранялись. уже не знаю куда копать и подумал, может имеет сделать принудительно сохранение. В связи с чем если есть возможность привести небольшой примерчик на эту тему то буду благодарен.
Режим работы 1С серверный. Крутится на ubuntu 10.04 LTS + 1С 8.2.15.301 + postgresql 9.04
12. alnovin 323 14.01.13 06:15 Сейчас в теме
(11) dmitry1975, добрый день! Пользователи, как показывает практика, любят преувеличить, мягко говоря. Логично, что настройки форм должны сохраняться, но, это не работает при аварийном завершении программы.
Как решение, можете собирать в структуру все настройки видимости, положение колонок и сохранять их при закрытии и восстанавливать при открытии.
13. dmitry1975 343 14.01.13 17:34 Сейчас в теме
(12) добрый день!
Спасибо за ответ, в принципе я на этом решении и остановился, но пока не реализовал, поскольку все-таки хочется докопаться, почему именно настройки этой формы не сохраняются автоматически. Ведь в этой же конфигурации настройки других форм документов сохраняются и восстанавливаются при открытии. А здесь нет.. Может есть какие идеи куда еще посмотреть можно? Кстати конфигурацию закрывают нормально, нет аварийных закрытий. Вернее они конечно есть, но не каждый же раз. Да и к тому же, даже не требуется полностью закрывать конфигурацию. достаточно переоткрыть обработку и все сделанные настройки сбрасываются :(
14. ETurdymuratov@mail.ru 08.09.21 08:50 Сейчас в теме
Оставьте свое сообщение