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

01.09.14

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

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

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

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

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

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

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

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

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

Код открыт.

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

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

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

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

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

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

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

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

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

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

КонецЕсли;

КонецЕсли;

КонецЕсли;

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

И 

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Системы контроля версий для 1С-разработчиков.

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

Основы командной разработки на 1С. Использование систем контроля версий при разработке на платформе 1С:Предприятие 8

4900 руб.

29.06.2022    9144    78    4    

110

Особенности национального Workflow: Github Actions и OneScript

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

Сегодня мы посмотрим на Github Actions - встроенный инструментарий Github для автоматизации рабочих процессов. Разберем, что это такое, зачем и причем тут OneScript.

25.03.2024    1191    bayselonarrend    3    

37

Автоматизация процесса разработки с помощью сервиса GitFlic

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

GitFlic – первая в России полностью самостоятельная реализация сервиса для хранения репозиториев с исходным кодом. За три года разработки сервис GitFlic стал полноценным инструментом, которым можно заменить GitLab, GitHub и BitBucket. Расскажем о том, как выстроить в GitFlic процесс автоматического тестирования, статического анализа кода и сборки приложений.

05.03.2024    1866    user1989937    6    

15

OpenYellow - рейтинг открытых GitHub репозиториев для платформы 1С:Предприятие

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

Обновляемый топ GitHub репозиториев для 1С по всем языкам программирования и еще немного рассуждений про open-source.

05.02.2024    3783    bayselonarrend    15    

61

Насколько глубок 1С-ный GitHub?

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

Open-source проекты - важная часть мира программного обеспечения. 1С привычно держится немного в стороне от глобальных трендов, но бросить холодный статистический взгляд на положение дел мне показалось небезынтересным.

22.01.2024    7844    bayselonarrend    50    

86

TCP прокси-сервер хранилища конфигурации 1С

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

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    2776    kamisov    17    

57

Отдай корень! Библиотека OneScript для получения информации о захваченных объектах в хранилище

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

Хранилище конфигурации 1С - это инструмент групповой разработки. Работают с хранилищем следующим образом: захватывают какой-либо объект, редактируют, потом отдают его в хранилище. Хранилище помечает уже захваченные объекты и не дает возможности захватить их другим пользователям. Это рождает и самый большой недостаток хранилища - невозможность работы с одним объектом нескольких пользователей, например в случае доработки разных методов в одном большом модуле. Корень конфигурации - это самый верхний ее узел. Только захватив корень, мы можем добавить в конфигурацию новые общие модули, документы, справочники, регистры и подобное. Только захватив корень можно изменить настройки поддержки конфигурации. Соответственно, если корень захвачен одним программистом, другой программист не может добавить новые объекты или снять что-то с поддержки. Потому то и всплывает эта фраза - отдай корень, мне нужно тоже что-то добавить.

26.12.2023    1337    ardn    1    

26

Git Code Review - инструмент для рецензирования кода

Групповая разработка (Git, хранилище) Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Абонемент ($m)

Git Code Review - инструмент, позволяющий быстро анализировать изменения из git-репозитория прямо в 1С

1 стартмани

20.12.2023    3958    59    salexdv    26    

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

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

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

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

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


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

alnovin пишет:

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


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

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