Подсистема локальных констант для любой конфигурации

04.11.20

Разработка - Инструментарий разработчика

В данной публикации я хочу поделиться подсистемой локальных констант для любой конфигурации.

Скачать исходный код

Наименование Файл Версия Размер
Подсистема локальных констант для любой конфигурации:
.cf 108,73Kb
2
.cf 1.0.0 108,73Kb 2 Скачать

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

Для решения данной проблемы предлагаю Вашему вниманию подсистему локальных констант. 

Константы хранятся в справочнике:

Для указания множества значений создана табличная часть. При получении множества значений данные выгружаются в массив. Получение константы выполняется в привелигерованном режиме с помощью функции "Получить" общего модуля "ЛК_Знч", поэтому для работы подсистемы пользователям без полных прав не требуется выдавать отдельные роли. Поиск константы выполняется по реквизиту "ИмяДляРазработчика".

 
 Программный код общего модуля "ЛК_Знч"

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

Подсистема поставляется в виде cf файла, добавляется в конфигурацию через сравнение и объединение с основной конфигурацией. 

Данная подсистема разрабатывалась и тестировалась на платформе 8.3.18.1128.

Обновление от 21.10.2020:

- поиск выполняется по реквизиту "ИмяДляРазработчика"

локальные константы поиск по наименованию коду

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    125056    683    389    

732

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    7792    24    6    

42

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    4296    12    2    

36

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2280 руб.

14.01.2013    178679    1084    0    

862

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99649    239    97    

298

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18407    6    8    

40

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23863    16    15    

33

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28331    3    10    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AlekseiAdamov 166 20.10.20 23:49 Сейчас в теме
Поиск по наименованию, коду является ненадежным вариантом т.к. эти данные могут быть изменены.

...
ЛокальнаяКонстанта = Справочники.ЛК_Константы.НайтиПоНаименованию(Наименование, Истина);
Sagat777; Dementor; TerveRus; Kerim09; pavelpribytkin96; sapervodichka; +6 Ответить
2. sapervodichka 6799 20.10.20 23:58 Сейчас в теме
(1) Да, нужен реквизит ИмяДляРазработчика, у общего модуля флаг повторного использования для получения значений и ОбновитьПовторноИспользуемыеЗначения() при записи справочника констант.
pavelpribytkin96; +1 Ответить
4. pavelpribytkin96 585 21.10.20 00:10 Сейчас в теме
(2)Спасибо за подсказку по общему модулю, так будет оптимальнее.

Да, создать реквизит имя для разработчика и искать по нему будет лучше и информативные (как в доп. реквизитах БСП), не учел этот момент, в рабочей базе используется поиск по наименованию(

Оптимизирую публикацию в ближайшее время.
3. pavelpribytkin96 585 20.10.20 23:59 Сейчас в теме
(1)Наименование локальной константы задаёт администратор или программист, а наименование элемента может изменить пользователь ответственный за НСИ или пользовать у которого есть права на редактирование элемента. Если писать в коде НайтиПоНаименованию и передавать наименование элемента, то с большой вероятностью такой алгоритм перестанет работать.
5. AlekseiAdamov 166 21.10.20 08:42 Сейчас в теме
(3) Понятно, что использовать НайтиПоНаименованию() в одном месте лучше, чем в нескольких. Но почему бы не вводить предопределённые данные? Да, они требуют монопольного обновления, но эти условные "константы" предполагают, как мне кажется, что разработчик их не добавляет на лету по первой прихоти.
pavelpribytkin96; FatPanzer; +2 Ответить
6. FatPanzer 21.10.20 09:11 Сейчас в теме
(5) Лично у меня в моей системе более расширенный подход:
1. Настройки подчинены мифическому справочнику подсистем.
2. В общей функции можно получить настройку/константу по её идентификатору. Идентификатор задается вручную для с помощником формирования и контролем именования.
3. В функции можно получать сразу несколько настроек/констант в виде структуры (именно для этого осуществляется контроль именования идентификатора) как по списку, так и по владельцу-подсистеме.
4. Используются массивы, структуры, соответствия, примитивные и ссылочные типы и коллекции смешанных типов.
5. В структуре хранения отсутствуют реквизиты типа ЛюбаяСсылка, что положительно влияет на быстродействие. Однако именно поэтому используется справочник БСП объектов метаданных...
Ну и всякое такое...
Прикрепленные файлы:
Инструкция. Дополнительные подсистемы.docx
10. Cyberhawk 135 24.10.20 14:44 Сейчас в теме
(6) Судя по документации, значения непримитивных типов у тебя хранятся в сериализованном виде.
Пришлось ли испытывать какие-то трудности из-за того, что значение такой настройки может быть беспрепятственно удалено из БД (т.к. контроль ссылочной целостности не "увидит" эти значения)?
11. FatPanzer 24.10.20 14:57 Сейчас в теме
(10) Справочник не предназначен для того, чтобы ссылки на него хранились в других таблицах. Это просто хранилище настроек для использования в коде. Соответственно, ни о какой ссылочной целостности говорить не приходится...
12. Cyberhawk 135 24.10.20 15:29 Сейчас в теме
(11)
чтобы ссылки на него хранились в других таблицах
Я не про это, а про обратную ситуацию спрашивал: когда объект, ссылка на который хранилась в настройке, был удален из БД
13. FatPanzer 24.10.20 15:40 Сейчас в теме
(12) А, понял. То есть ты намекаешь на то, не проверяю ли я все сериализованные XML-тексты в настройках на наличие в них удаляемых ссылок? Ну конечно же нет. Я даже не представляю зачем это делать.

Ну, будет возвращаться битая ссылка, в случае физического удаления объекта, да. И что? Точно так же как настройки отчетов хранят в себе ссылки, и при физическом удалении объектов - ни как не крашат систему, никакого контроля за этим не существует. Для того потом и разработчик, чтобы проверять полученные значения на актуальность.

Любой программист при наличии интереса может написать обработку, занимающейся такой проверкой. Я такой задачи перед собой не ставил, она выходит за рамки моих целей.
7. pavelpribytkin96 585 21.10.20 15:08 Сейчас в теме
(5) Можно вводить предопределенные данные, такой способ более надежный. Мне удобнее создавать предопределенные или обычные константы в одном справочнике, так их легче найти и легче обращаться к ним.
8. dehro 5 23.10.20 17:07 Сейчас в теме
Как показывает практика: таких локальных констант в базе немного. Максимум несколько десятков.

Там что мешает завести ещё несколько десятков констант? И удобнее, и функциональнее. Возможность добавить значение только из режима пользователя не особо важно: их использовать приходится в подписках, проверках - т.е. всё равно конфу обновлять.
9. pavelpribytkin96 585 23.10.20 17:38 Сейчас в теме
(8)Есть такие конфигурации, где используется написание кода в режиме предприятия для настройки программы, например, документооборот.
В таких базах достаточно много констант и добавлять каждую как отдельный объект метаданных трудоемко.
Dementor; +1 Ответить
14. kiset 09.11.20 09:11 Сейчас в теме
(8) в нашей базе имеется 370 таких настроек. Да, часть из них устарели, и должны быть вырезаны - но пока это не сделано.
Плюс у нас сделано, что они создаются и заполняются из кода. То есть при инициализации значения есть заполнение настройки по умолчанию. Удобно - одну строку кода написал, она тебе и получит значение, и создаст при необходимости.
15. dehro 5 09.11.20 09:42 Сейчас в теме
(14) Константы в sql хранятся в одной таблице.
Таблица из 370 строк - это очень маленькая таблица.

Плюсы:
1. При обновлении конфигурации своя константа не мешает.
2. В коде можно явно к ней обратится.
3. В коде видно прямое обращение к объекту (не функция, которая запросом где-то там ищет, а прямое).
4. Если не заполнено, вернёт пустую ссылку по типу значения - т.е. не упадёт при обращении к реквизиту.
5. При переносе конфы нужно только проинициализировать новое значение (это и в рекламируемой приблуде так же). Для программиста очень важно, ибо программируешь на одной базе, а в рабочую переносишь вечером (а то и ночью - мы же клиентоориентированные) - чем меньше телодвижений, тем лучше.

Минусы:
1. Нужно руками добавлять в конфу и монопольно её обновлять.
2. Нужно руками инициализировать первоначальное значение (это и в рекламируемой приблуде так же)

Кстати, в рекламирумой приблуде нужно писать везде заглушки - если не найдёт. Причём ничего универсального придумать нельзя, так как не всегда понятно какого типа ненайденное значение. Придётся через "Если НайденноеЗначение = Неопределено тогда ..." А если это каскад вызываемых процедур, так ещё и тащить то что не найдено, чтобы везде прервать корректно.
16. kiset 09.11.20 10:41 Сейчас в теме
(15)Так-то, с 8.2.14 на каждую константу создаётся отдельная таблица.

Но здесь есть над чем порассуждать. Все проблемы отдельной системы для себя можно решать каждому по-своему. У нас другое решение, мы обработали и типизацию, и инициацию при обновлении.

Удобство - не надо лупить объекты метаданных, при вычистке кода и настроек, не надо убивать объекты метаданных.

Поэтому, как альтернатива, может жить - почему бы нет? Очень часто бывает, что функционал запускается временно, и через короткое время выпиливается. Для этого константы добавлять/изменять может быть излишне.
18. dehro 5 09.11.20 14:19 Сейчас в теме
(16)
...что функционал запускается временно...

Тогда (17)?


(16)
может жить - почему бы нет

Жить-то может, не вижу как поможет ;)
19. kiset 10.11.20 12:29 Сейчас в теме
(18)Из тех преимуществ, которые я для себя выделяю:
- Удобство управления настройками без привлечения разработчика (администратор БД может сам играться с настройками)
- Возможность выстроить удобный интерфейс работы и управления настройками - например, добавить группировки по предметным областям или признак "Устаревшее" для последующей вырезки настроек и кода
- Нет необходимости создавать объекты в конфигураторе
- Единая настройка для всей базы (в отличие от хранилища, не надо всем пользователям менять, и потом контролировать, как бы новому пользователю по умолчанию другая настройка не встала)

Возможно, есть более удобные решения. Возможно, не всё это нужно всем.

Я это не пытаюсь продавать. Много лет назад такая система была разработана, и используется до сих.
17. Pryanishnikov_Vladimir 09.11.20 11:43 Сейчас в теме
А зачем все это нужно если есть ХранилищеОбщихНастроек?
Оставьте свое сообщение