Минимизация изменений в коде / Использование Хранилища общих настроек

01.07.20

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

В данной публикации будет показан пример использования Хранилища общих настроек, и показано, как с его помощью можно минимизировать изменения в типовом коде.

В данной статье рассмотрим 2 очень полезных аспекта:

1. Один из приёмов минимизации изменений в коде

2. Инструмент для минимизации этих самых изменений - ХранилищеОбщихНастроек.

Начнём с того, где есть слабые места при доработке типовых конфигураций. Слабое место в том, что много прыжков из одного общего модуля в другой. Особенно это неприятно, когда идёт переход через модули с постфиксом Внутренний. В этом модуле ничего не происходит, в нём просто передается управление в другой модуль.

Если возникает потребность изменить процедуру или функцию в конце этой цепочки прыжков, а именно необходимо добавить параметр, сразу приходится менять несколько модулей.

В каких задачах может возникнуть такая необходимость? Чаще всего это изменение механизма проведения типовых документов. Иногда нам необходимо либо исправить ошибку в типовой конфигурации, либо изменить логику проведения документов с учетом добавленных нами реквизитов и/или табличных частей. 

Все привыкли в этой ситуации добавлять параметр в конце процедуры или функции и делать его необязательным, присваивая ему значение (Чаще всего Неопределено).Но бывает так, что от одного реквизита должна измениться логика проведения по 10 и более регистрам. Учитывая наличие прыжков нам придётся изменить 2 десятка общих модулей. Но, с помощью упомянутого выше объекта ХранилищеОбщихНастроек этого можно избежать.

Работа с хранилищем включает в себя 3 действия:

1. Сохранение настроек

2. Чтение настроек

3. Удаление настроек

Хочу отметить сразу, что в программном интерфейсе БСП есть процедуры для работы с хранилищем.

Также необходимо отметить те проблемы, с которыми я столкнулся:

1. Если до вызова процедуры Сохранить установить привилегированный режим, то выдается программная ошибка. 

2. Внутри процедур БСП есть проверка на наличие набора прав "СохранениеДанныхПользователя". Здесь нужно продумать, под какими профилями будет выполняться Ваш код. 

3. Не получилось сохранить в качестве настроек Структуру.

4. Ключ лучше использовать текстовый. Но он должен быть уникален от момента сохранения настроек, до момента их удаления. Рекомендую использовать Строка(Ссылка). Главное, чтоб Ссылка была во всех модулях, в которых планируется в процессе проведения использовать хранилище. Ссылку можно вытащить из отбора в любом наборе записей в движениях документа.

5. Из положительного - таблицы можно сохранять как настройки.

ХранилищеОбщихНастроек оптимизация кода минимизация изменений сохранение настроек конфигуратор программирование

См. также

SALE! 50%

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

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

4900 2450 руб.

29.06.2022    11953    100    4    

132

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

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

23.09.2024    2914    kraynev-navi    2    

25

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

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

17.09.2024    7376    Golovanoff    69    

26

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

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

05.09.2024    2233    ardn    12    

15

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

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

14.08.2024    7699    lekot    34    

8

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

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

05.08.2024    4352    sinichenko_alex    16    

25

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

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

15.07.2024    3290    bayselonarrend    8    

24
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. decline12 22 14.11.19 16:03 Сейчас в теме
ничего не понятно ;-) про что рассказать то хотели?
glek; AlexiyNA; Lapitskiy; user774630; A_Max; BigB; wowik; awk; Hans; mrChOP93; +10 Ответить
2. ixijixi 1913 14.11.19 16:27 Сейчас в теме
(1) Ну как же: вот как-то так через такую ///ёппу оно и работает, больше ничего не скажу, дальше думайте сами
Прикрепленные файлы:
Скользящий; vsesam80; Lapitskiy; Alogy; alevnev; user774630; A_Max; Muzik92; Lancelot-2M; AnatolPopov; +10 Ответить
6. AnatolPopov 173 14.11.19 17:34 Сейчас в теме
(2) За картинку 10 плюсов хотел поставить, но получилось только один ;)
10. biimmap 2020 14.11.19 21:08 Сейчас в теме
(6) не вижу ни одного))) (но я не напрашиваюсь)
17. AnatolPopov 173 15.11.19 09:29 Сейчас в теме
(10) Да у вас и картинок-то нет. Учитесь у (2) иллюстрировать полет мысли ;)
3. biimmap 2020 14.11.19 16:32 Сейчас в теме
ок. на выходных добавлю куски кода, чтоб было понятней.
4. acanta 14.11.19 16:36 Сейчас в теме
5. Hans 3 14.11.19 16:43 Сейчас в теме
Вообще ничего не понял. Автор претендует на то, что вместо проброса своего параметра по стеку процедур можно этот параметр писать в хранилище, а потом в нужном месте его вытаскивать?
8. biimmap 2020 14.11.19 21:05 Сейчас в теме
(5)
тор претендует на то, что вместо проброса своего параметра по стеку процедур можно этот параметр писать в хранилище, а потом в нужном месте его вытаскивать?
Вы все верно поняли. скоро приведу примеры кода станет ещё ясней.
7. w.r. 650 14.11.19 17:41 Сейчас в теме
А чем не устраивает временное хранилище 1С? По логике оно больше подходит
9. biimmap 2020 14.11.19 21:07 Сейчас в теме
(7) не готов согласиться с Вами... Ключ один и тот же, а значений, которые я сохраняю много! около 20 (в моей задаче). Если параметр один - то да временное подходит, и собственно часто использую.
11. w.r. 650 14.11.19 21:19 Сейчас в теме
(9) временное хранилище поддерживает структуру. Можно упаковать все параметры в неё
12. biimmap 2020 14.11.19 22:55 Сейчас в теме
(11) для временного хранилища нужен уникальный идентификатор. Его в общем модуле нет... Его или передать нужно или получить.А вот ссылка на документ есть в нужных мне местах именно она и является ключом для записи и чтения всех данных.
14. mpeg1989 131 15.11.19 08:55 Сейчас в теме
(12) А если попробовать в качестве уида передавать гуид ссылки?
15. biimmap 2020 15.11.19 09:23 Сейчас в теме
19. mpeg1989 131 15.11.19 09:49 Сейчас в теме
(15) определять адрес в хранилище
29. w.r. 650 16.11.19 12:40 Сейчас в теме
(12) мне кажется, временное хранилище для хранения данных + параметры сеанса для хранения адреса в хранилище, были бы более оптимальными, чем ваш вариант с хранилищем настроек. Как написали ниже, это позволит не использовать обращения к базе данных
30. biimmap 2020 16.11.19 17:47 Сейчас в теме
(29)
для хранения данных + параметры сеанса для хранения адреса в хранилище, были бы более оптимальными, чем ваш вариант с хранилищем настроек. Как написали ниже, это позволит не использовать обращения к базе данных
Я же ответил на ваше предложение... нет ключа для использования временного хранилища.
31. w.r. 650 17.11.19 02:41 Сейчас в теме
(30) это не важно. Можно через новый уникальный идентификатор. А адрес записывается в параметрах сеанса и данные получаются потом в другом модуле по адресу
32. biimmap 2020 17.11.19 22:34 Сейчас в теме
(31)
м модуле по адресу
спорить не буду. Написано логично. Но почему-то этим не воспользовался. Была причина!
13. AlX0id 15.11.19 08:49 Сейчас в теме
А давайте на каждый вызов доработанной процедуры еще и пару вызовов ИБ добавим - у нас же мало проблем, правда?
16. biimmap 2020 15.11.19 09:24 Сейчас в теме
Напишите ваше сообщение
(13) непонятный комментарий. Поясните.
18. AlX0id 15.11.19 09:41 Сейчас в теме
(16)
Что, по-вашему происходит, когда вы обращаетесь к общим настройкам? Клиент обращается к серверу 1С, который в свою очередь лезет в базу данных.
Внимание, вопрос: как отразятся ваши доработки с использованием подобного подхода на производительности решения?
20. biimmap 2020 15.11.19 12:02 Сейчас в теме
(18)
Внимание, вопрос: как отразятся ваши доработки
При внимательном изучении моей статьи должно стать понятно, что все вызовы происходят в модуле объекта, в процедуре обработка проведения. Думаю, Вам известно, что выполняется она на сервере. И никакого клиента там нет.
21. AlX0id 15.11.19 12:22 Сейчас в теме
(20)
Хорошо. Вычеркнем из этой схемы клиент.
Клиент обращается к серверу 1С, который в свою очередь лезет в базу данных.

Внимание, вопрос: как отразятся ваши доработки с использованием подобного подхода на производительности решения?
Даже если не обращать внимания на то, что непонятно как сопровождать данный код в дальнейшем - соединение сервера 1С и сервера ИБ - это большие накладные расходы. Для решения вашей "задачи" - неоправданно большие накладные расходы.
22. biimmap 2020 15.11.19 12:41 Сейчас в теме
(21)
Для решения вашей "задачи" - неоправданно большие накладные расходы
Поделитесь полезной информацией, почему Вы решили, что используется БД? Где-то есть в описании? Я не создавал объект метаданных!
23. AlX0id 15.11.19 12:51 Сейчас в теме
(22)
Я не создавал объект метаданных!


Нет, 1С хранит ваши общие настройки в божественной эйдосфере, которая доступна ей в любой момент времени и результат оттуда получается мгновенно.

(22)
Поделитесь полезной информацией, почему Вы решили, что используется БД? Где-то есть в описании?


Например тут:
Структура ИБ 1С
24. AlX0id 15.11.19 13:15 Сейчас в теме
(22)
Откройте описание структуры ИБ 1С - и посмотрите.
25. biimmap 2020 15.11.19 14:32 Сейчас в теме
(24) Посмотрел... Допустим есть обращение к БД. А почему Вы решили, что слишком затратно будет? Алгоритм проведения содержит в себе сотню наверно обращений к БД. будет 101. Какая разница что читать: справочник, регистр или хранилище общих настроек? В чём вопрос-то? Если рассуждать как Вы, то каждая строчка кода тоже требует временных затрат на обработку. Давайте предложим 1С стереть половину кода.

Есть же определенные параметры по которым мы ориентируемся при доработке проведения... Например проведение должно быть не долее 2-х секунд. В той связи что большая часть документов на одного сотрудника... Никаких очень больших объёмов данных не хранится и не считывается. Я с Вами не соглашусь. С точки зрения прикладной задачи, весь код написан по стандартам. Я за этим слежу.

Предлагаю на этом с Вами остановиться. Данный код уже полгода в продуктивных базах с большим количеством сотрудников. Жалоб после доработки не добавлялось. Всегда есть жалобы на сервера и на работу в веб-клиенте... Но новых не было.
26. AlX0id 15.11.19 14:49 Сейчас в теме
(25)

(25)
(24) Посмотрел... Допустим есть обращение к БД. А почему Вы решили, что слишком затратно будет? Алгоритм проведения содержит в себе сотню наверно обращений к БД. будет 101.

Так с вами о производительности говорить бесполезно, собственно.
"И тааак сойдет".
27. biimmap 2020 15.11.19 15:44 Сейчас в теме
Нет, Вы не правы. Просто в Ваших комментариях нет аргументов. Я их соберу в один комментарий:
1. Обращения с клиента на сервер. Вы признали как ошибочный.
2. Использование обращений к БД. Обращения выполняются по ключу, информация хранится в ограниченном размере, после проведения удаляется.
3. Вы сами написали, что результат получается мгновенно.
4. Обращения к хранилищу в цикле у меня нет. Сохраняется около 30 параметров, половина из них - таблицы с небольшим количеством строк. Чтение происходит только нужных мне таблиц в определенный момент времени. Всё подряд по многу раз не получается. Просто данные один раз записываются, а далее порционно читаются.
5. Доработка уже давно используется, проблем с производительностью не испытываем.
6. Документы проводятся в соответствии со стандартами разработки не более 2-х минут

В каком месте у меня пробел в знаниях, чего я не учёл? Поговорить можем, но аргументированно.
28. VmvLer 15.11.19 17:36 Сейчас в теме
после двух абзацев стало понятно, что тс написал мини-манусрипт Войнича для тех кто является доказательством теоремы БЖ.

тролль не 80го уровня конеш, ну так около 30-го вполне.
33. Lapitskiy 1061 21.11.19 08:16 Сейчас в теме
"Знаешь, как создать интригу?"
"Нет"
"Потом расскажу!"

Примерно такие мысли возникли.
Ни примеров, ни картинок, "напишу позже!".
ubnkfl; Lyolik; +2 Ответить
34. Quantum81 6 24.11.19 13:52 Сейчас в теме
Структуру ДополнительныеСвойства у объектов тоже можно использовать. Как в общем-то в типовых и делают.
IronDain; +1 Ответить
35. Pron9 30.10.24 10:16 Сейчас в теме
Ну где же продолжение? :)
36. biimmap 2020 30.10.24 15:29 Сейчас в теме
(35) Как видно по плюсам интерес у публики нулевой. нет смысла
Оставьте свое сообщение