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

04.11.20

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Подсистема локальных констант для любой конфигурации:
.cf 108,73Kb ver:1.0.0
3
3 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

См. также

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

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

15500 руб.

02.09.2020    185136    1033    403    

970

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    25023    163    86    

161

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

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

22200 руб.

06.10.2023    20505    52    19    

86

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

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

15000 руб.

10.11.2023    13790    57    33    

77

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    30728    105    48    

148

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    19177    7    32    

43

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

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

5000 руб.

07.02.2018    104976    246    100    

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

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

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

Оптимизирую публикацию в ближайшее время.
3. pro96inf 602 20.10.20 23:59 Сейчас в теме
(1)Наименование локальной константы задаёт администратор или программист, а наименование элемента может изменить пользователь ответственный за НСИ или пользовать у которого есть права на редактирование элемента. Если писать в коде НайтиПоНаименованию и передавать наименование элемента, то с большой вероятностью такой алгоритм перестанет работать.
5. AlekseiAdamov 187 21.10.20 08:42 Сейчас в теме
(3) Понятно, что использовать НайтиПоНаименованию() в одном месте лучше, чем в нескольких. Но почему бы не вводить предопределённые данные? Да, они требуют монопольного обновления, но эти условные "константы" предполагают, как мне кажется, что разработчик их не добавляет на лету по первой прихоти.
pro96inf; 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. pro96inf 602 21.10.20 15:08 Сейчас в теме
(5) Можно вводить предопределенные данные, такой способ более надежный. Мне удобнее создавать предопределенные или обычные константы в одном справочнике, так их легче найти и легче обращаться к ним.
8. dehro 12 23.10.20 17:07 Сейчас в теме
Как показывает практика: таких локальных констант в базе немного. Максимум несколько десятков.

Там что мешает завести ещё несколько десятков констант? И удобнее, и функциональнее. Возможность добавить значение только из режима пользователя не особо важно: их использовать приходится в подписках, проверках - т.е. всё равно конфу обновлять.
9. pro96inf 602 23.10.20 17:38 Сейчас в теме
(8)Есть такие конфигурации, где используется написание кода в режиме предприятия для настройки программы, например, документооборот.
В таких базах достаточно много констант и добавлять каждую как отдельный объект метаданных трудоемко.
Dementor; +1 Ответить
14. kiset 09.11.20 09:11 Сейчас в теме
(8) в нашей базе имеется 370 таких настроек. Да, часть из них устарели, и должны быть вырезаны - но пока это не сделано.
Плюс у нас сделано, что они создаются и заполняются из кода. То есть при инициализации значения есть заполнение настройки по умолчанию. Удобно - одну строку кода написал, она тебе и получит значение, и создаст при необходимости.
15. dehro 12 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 12 09.11.20 14:19 Сейчас в теме
(16)
...что функционал запускается временно...

Тогда (17)?


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

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

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

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