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

01.09.14

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

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

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

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

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

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

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

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

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

Код открыт.

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

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

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

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

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

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

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

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

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

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

КонецЕсли;

КонецЕсли;

КонецЕсли;

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

И 

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

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

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

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

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

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

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

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

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

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

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

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

См. также

SALE! 50%

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

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

4900 2450 руб.

29.06.2022    11934    99    4    

131

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

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

23.09.2024    2837    kraynev-navi    2    

25

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

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

17.09.2024    7290    Golovanoff    69    

26

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

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

05.09.2024    2178    ardn    12    

15

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

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

14.08.2024    7632    lekot    34    

8

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

В «долгоиграющих» проектах стандартный захват объектов 1С в хранилище может привести к длительным простоям других разработчиков. Но и создавать под каждую доработку отдельное хранилище, чтобы использовать технологию разветвленной разработки конфигураций от фирмы «1С» – избыточно. Расскажем о том, как разрабатывать в отдельной базе без ожиданий, а потом с легкостью перенести изменения в хранилище, используя основную идею технологии 1С – конфигурацию на поддержке хранилища.

05.08.2024    4242    sinichenko_alex    16    

25

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

Про изменения и новинки в агрегаторе открытых проектов OpenYellow, которые появились с момента его создания: про портал, Github и Telegram

15.07.2024    3233    bayselonarrend    8    

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

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

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

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

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


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

alnovin пишет:

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


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

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