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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

34 Comments

  1. decline12

    ничего не понятно 😉 про что рассказать то хотели?

    Reply
  2. the1

    (1) Ну как же: вот как-то так через такую ///ёппу оно и работает, больше ничего не скажу, дальше думайте сами

    Reply
  3. biimmap

    ок. на выходных добавлю куски кода, чтоб было понятней.

    Reply
  4. acanta
  5. Hans

    Вообще ничего не понял. Автор претендует на то, что вместо проброса своего параметра по стеку процедур можно этот параметр писать в хранилище, а потом в нужном месте его вытаскивать?

    Reply
  6. AnatolPopov

    (2) За картинку 10 плюсов хотел поставить, но получилось только один 😉

    Reply
  7. w.r.

    А чем не устраивает временное хранилище 1С? По логике оно больше подходит

    Reply
  8. biimmap

    (5)

    тор претендует на то, что вместо проброса своего параметра по стеку процедур можно этот параметр писать в хранилище, а потом в нужном месте его вытаскивать?

    Вы все верно поняли. скоро приведу примеры кода станет ещё ясней.

    Reply
  9. biimmap

    (7) не готов согласиться с Вами… Ключ один и тот же, а значений, которые я сохраняю много! около 20 (в моей задаче). Если параметр один — то да временное подходит, и собственно часто использую.

    Reply
  10. biimmap

    (6) не вижу ни одного))) (но я не напрашиваюсь)

    Reply
  11. w.r.

    (9) временное хранилище поддерживает структуру. Можно упаковать все параметры в неё

    Reply
  12. biimmap

    (11) для временного хранилища нужен уникальный идентификатор. Его в общем модуле нет… Его или передать нужно или получить.А вот ссылка на документ есть в нужных мне местах именно она и является ключом для записи и чтения всех данных.

    Reply
  13. AlX0id

    А давайте на каждый вызов доработанной процедуры еще и пару вызовов ИБ добавим — у нас же мало проблем, правда?

    Reply
  14. myxins1989

    (12) А если попробовать в качестве уида передавать гуид ссылки?

    Reply
  15. biimmap

    (14) чтобы что?

    Reply
  16. biimmap

    Напишите ваше сообщение

    (13) непонятный комментарий. Поясните.

    Reply
  17. AnatolPopov

    (10) Да у вас и картинок-то нет. Учитесь у (2) иллюстрировать полет мысли 😉

    Reply
  18. AlX0id

    (16)

    Что, по-вашему происходит, когда вы обращаетесь к общим настройкам? Клиент обращается к серверу 1С, который в свою очередь лезет в базу данных.

    Внимание, вопрос: как отразятся ваши доработки с использованием подобного подхода на производительности решения?

    Reply
  19. myxins1989

    (15) определять адрес в хранилище

    Reply
  20. biimmap

    (18)

    Внимание, вопрос: как отразятся ваши доработки

    При внимательном изучении моей статьи должно стать понятно, что все вызовы происходят в модуле объекта, в процедуре обработка проведения. Думаю, Вам известно, что выполняется она на сервере. И никакого клиента там нет.

    Reply
  21. AlX0id

    (20)

    Хорошо. Вычеркнем из этой схемы клиент.

    Клиент обращается к серверу 1С, который в свою очередь лезет в базу данных.

    Внимание, вопрос: как отразятся ваши доработки с использованием подобного подхода на производительности решения?

    Даже если не обращать внимания на то, что непонятно как сопровождать данный код в дальнейшем — соединение сервера 1С и сервера ИБ — это большие накладные расходы. Для решения вашей «задачи» — неоправданно большие накладные расходы.

    Reply
  22. biimmap

    (21)

    Для решения вашей «задачи» — неоправданно большие накладные расходы

    Поделитесь полезной информацией, почему Вы решили, что используется БД? Где-то есть в описании? Я не создавал объект метаданных!

    Reply
  23. AlX0id

    (22)

    Я не создавал объект метаданных!

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

    (22)

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

    Например тут:

    Структура ИБ 1С

    Reply
  24. AlX0id

    (22)

    Откройте описание структуры ИБ 1С — и посмотрите.

    Reply
  25. biimmap

    (24) Посмотрел… Допустим есть обращение к БД. А почему Вы решили, что слишком затратно будет? Алгоритм проведения содержит в себе сотню наверно обращений к БД. будет 101. Какая разница что читать: справочник, регистр или хранилище общих настроек? В чём вопрос-то? Если рассуждать как Вы, то каждая строчка кода тоже требует временных затрат на обработку. Давайте предложим 1С стереть половину кода.

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

    Предлагаю на этом с Вами остановиться. Данный код уже полгода в продуктивных базах с большим количеством сотрудников. Жалоб после доработки не добавлялось. Всегда есть жалобы на сервера и на работу в веб-клиенте… Но новых не было.

    Reply
  26. AlX0id

    (25)

    (25)

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

    Так с вами о производительности говорить бесполезно, собственно.

    «И тааак сойдет».

    Reply
  27. biimmap

    Нет, Вы не правы. Просто в Ваших комментариях нет аргументов. Я их соберу в один комментарий:

    1. Обращения с клиента на сервер. Вы признали как ошибочный.

    2. Использование обращений к БД. Обращения выполняются по ключу, информация хранится в ограниченном размере, после проведения удаляется.

    3. Вы сами написали, что результат получается мгновенно.

    4. Обращения к хранилищу в цикле у меня нет. Сохраняется около 30 параметров, половина из них — таблицы с небольшим количеством строк. Чтение происходит только нужных мне таблиц в определенный момент времени. Всё подряд по многу раз не получается. Просто данные один раз записываются, а далее порционно читаются.

    5. Доработка уже давно используется, проблем с производительностью не испытываем.

    6. Документы проводятся в соответствии со стандартами разработки не более 2-х минут

    В каком месте у меня пробел в знаниях, чего я не учёл? Поговорить можем, но аргументированно.

    Reply
  28. VmvLer

    после двух абзацев стало понятно, что тс написал мини-манусрипт Войнича для тех кто является доказательством теоремы БЖ.

    тролль не 80го уровня конеш, ну так около 30-го вполне.

    Reply
  29. w.r.

    (12) мне кажется, временное хранилище для хранения данных + параметры сеанса для хранения адреса в хранилище, были бы более оптимальными, чем ваш вариант с хранилищем настроек. Как написали ниже, это позволит не использовать обращения к базе данных

    Reply
  30. biimmap

    (29)

    для хранения данных + параметры сеанса для хранения адреса в хранилище, были бы более оптимальными, чем ваш вариант с хранилищем настроек. Как написали ниже, это позволит не использовать обращения к базе данных

    Я же ответил на ваше предложение… нет ключа для использования временного хранилища.

    Reply
  31. w.r.

    (30) это не важно. Можно через новый уникальный идентификатор. А адрес записывается в параметрах сеанса и данные получаются потом в другом модуле по адресу

    Reply
  32. biimmap

    (31)

    м модуле по адресу

    спорить не буду. Написано логично. Но почему-то этим не воспользовался. Была причина!

    Reply
  33. Lapitskiy

    «Знаешь, как создать интригу?»

    «Нет»

    «Потом расскажу!»

    Примерно такие мысли возникли.

    Ни примеров, ни картинок, «напишу позже!».

    Reply
  34. Quantum81

    Структуру ДополнительныеСвойства у объектов тоже можно использовать. Как в общем-то в типовых и делают.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *