В помощь разработчику и не только. Хранение констант, периодических констант, "динамических" констант — условно постоянных значений



Настройка для хранения периодических условно постоянных значений. Удобное получение при помощи метода общего модуля с различными вариациями параметров. Настройка основана на регистре сведений и плане видов характеристик.

Для хранения условно постоянных величин разработчиками 1С предусмотрен отдельный объект конфигурации "Константы". При этом так случается, что использование этого объекта по тем или иным причинам не подходит для реализации настроек. Предлагаю Вашему вниманию свой вариант настройки хранения констант, периодических значений, используемых для различных нужд при разработке настроек конфигурации, печатных форм, отчётов, и др.

Постановка задачи:

Нужно обращаться к какому-либо значению базы данных в коде.

  • Ссылки — искать по коду или по наименованию?
  • Примитивные типы — например, строка текста в печатной форме — прописывать в коде?

А если эти значения ещё и периодические? А если у ссылочного значения поменяют наименование или код? А может сделать элемент предопределённым?

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

Для чего это:

  • Чтобы проще обновлять типовые конфигурации — не нужно добавлять предопределённые элементы в типовые объекты
  • Чтобы  при изменении наименования, кода ссылочного типа настройка неожиданно не рухнула
  • Чтобы добавить "периодичность" Константам
  • ……..

Ранее я использовал настройку основанную на одном регистре со строковым измерением и ресурсом составного типа. Сейчас реализация немного более гибкая — кто хочет использует предопределённые элементы ПВХ, кто хочет создаёт их в Предприятии.

Итак. Реализация.

Создаём план видов характеристик. В типах прописываем все типы которые понадобятся, потом их можно будет добавить.
Создаём периодический регистр сведений. Измерение будет ссылка на элемент ПВХ, ресурс — Характеристика нашего нового ПВХ (не забыть установить связь по типу и связь параметров выбора, чтобы по фен-шую).

В общем то для минимального исполнения — всё. Можно заходить в предприятие и заполнять регистр. В коде можно получать значения запросом или объектно — ПолучитьПоследнее(..).

Но лёгкие пути не для нас, поэтому создаём в нашем (тот, что не типовой) общем модуле функцию ЗначениеКонстанты(Знач Константа, Дата). В которой прописываем код получение этих самых констант из регистра.
В своей настройке я это получение сделал чуточку гибким — получать можно по ссылке ПВХ или по строковому значению — в этом случае поиск будет по наименованию элемента ПВХ (его то изменять будем мы, если вообще будем — тут не то же, что со ссылкой на номенклатуру). Плюс в параметр можно передать массив, тогда функция вернёт Соответствие.

Чаще разработка происходит в копии, и изменения через хранилище получаются в рабочую базу. Значения констант нужно устанавливать в рабочей базе заново. И нужно не забыть, как они назывались. Для удобства решил добавить механизм автоматического добавления новых видов констант в регистр. Добавляются они текущей датой с пустым значением установленного типа. Это, конечно, для предопределённых элементов ПВХ.

На прошлом регистре констант делал настройку для разбивки по категориям, и установку различного представления списка регистра (по категориям, списком, по типам). Здесь этого пока не реализовано. Пока необходимости нет. Может быть в следующих релизах с ростом регистра будет и это.

И… Обязательно надо установить права на новые объекты!

Настройка создана на платформе 8.3.12.1714. Будет работать начиная с платформы 8.3.5.1068, т.к. испольуется объект "Схема запроса".

16 Comments

  1. triviumfan

    Видел подобно https://infostart.ru/public/868392/

    И там много «холивара» по этому поводу.

    В общем, разница лишь в используемом хранилище. Там автору регистр не понравился.

    Reply
  2. antonio_i

    (1)

    Да, тоже видел.

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

    Судя по наличию таких публикаций механизм хранения доп. констант — полезный инструмент!.

    Как хранить — выбирает каждый под свои нужды и для своего удобства.

    по сути ведь можно выделить несколько направлений:

    — Объект константы

    — Справочник

    — ПВХ (реквизит значение)

    — Регистр

    — Макет кто-то предлагал даже

    Reply
  3. triviumfan

    (2)

    Макет кто-то предлагал даже

    Ага, Рарус ещё 10 лет назад со своей Альфой 🙂

    Reply
  4. pm74

    (1) было такое

    (0) про сабжу , сам использую ПВХ + справочник

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

    Reply
  5. antonio_i

    (4) Так периодичности нет. Мне она нужна.

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

    Т.е. «скрестить» эти два решения. Тогда будет всё в одном.

    Reply
  6. pm74

    (5)

    Так периодичности нет.

    Добавьте дату в тч , вот вам и периодичность

    Reply
  7. antonio_i

    (6) Да, почему бы и нет.

    Reply
  8. PLAstic

    5 лет назад писал статью на эту тему. Там же предлагались и периодические РС, и ПВХ. В общем, баян.

    Чтобы при изменении наименования, кода ссылочного типа настройка неожиданно не рухнула

    Для этого используется РС с изменением типа ПВХ и ресурсом типа значений этого ПВХ. Мы же не хотим, чтобы мы или пользователь булевой константе назначили строковое значение?

    Читаю статью дальше:

    Ранее я использовал настройку основанную на одном регистре со строковым измерением и ресурсом составного типа.

    Ой. Вот за это я бы сразу уволил. 🙂

    Создаём план видов характеристик. В типах прописываем все типы которые понадобятся, потом их можно будет добавить.

    Создаём периодический регистр сведений. Измерение будет ссылка на элемент ПВХ, ресурс — Характеристика нашего нового ПВХ (не забыть установить связь по типу и связь параметров выбора, чтобы по фен-шую).

    Тут есть момент. Вводим общий модуль с повторным использованием значений (мы же не хотим каждый раз читать из базы и быть уволенными сразу же?) и в нём реализуем функцию получения значений. Конечно, при изменении значений используем процедуру ОбновитьПовторноИспользуемыеЗначения() (пишу по памяти, могу ошибиться).

    создаём в нашем (тот, что не типовой) общем модуле функцию ЗначениеКонстанты(Знач Константа, Дата). В которой прописываем код получение этих самых констант из регистра.

    Как сказал однажды в институте практикующий препод, «благодаря таким, как вы, у меня есть работа». Удачи, автор!

    Reply
  9. antonio_i

    (8)

    Ой. Вот за это я бы сразу уволил. 🙂

    Что же в таком решении ужасного?

    Раз уж написали, расшифруйте.

    (8)

    Как сказал однажды в институте практикующий препод, «благодаря таким, как вы, у меня есть работа».

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

    Reply
  10. PLAstic

    (9) Я написал выше, как было бы «в идеале» для вашего решения. ПВХ и РС.

    А увольнять надо за строковые измерения РС и за поиск по произвольной строке.

    Reply
  11. antonio_i

    (10) А вы публикацию вообще смотрели.

    Хотя бы картинки посмотрите, если читать не хочется…

    Reply
  12. PLAstic

    (11) Я привёл цитаты из всех частей вашей статьи и вы задаёте такой вопрос? Удачи в работе с такой логикой.

    Reply
  13. antonio_i

    (12)Вы противоречите себе:

    (9) Я написал выше, как было бы «в идеале» для вашего решения. ПВХ и РС.

    Но моё решение и основано на ПВХ и РС.

    Может вам просто хочется кого-то и что-то покритиковать?

    Да я и не против, только конструктивно критикуйте. С тем самым указанием, «как надо».

    Reply
  14. PLAstic

    (13)

    Но моё решение и основано на ПВХ и РС.

    Я привёл конкретную цитату, к которой относилось высказывание.

    Reply
  15. antonio_i

    (14) А для чего?

    Какую пользу вы своим ответом принесли кому-либо?

    Рекомендую почитать вам притчу «Три сита Сократа».

    Reply
  16. PLAstic

    (15)

    А для чего?

    Отметил для будущих поколений, что так делать нельзя. Вы и сами могли бы сделать акцент не просто «раньше я делал так», а написать, почему так делать нельзя.

    Reply

Leave a Comment

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