Динамические константы или избавляемся от поиска по наименованию

29.10.18

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

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

Файлы

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

Наименование Скачано Купить файл
(только для физ. лиц)
Динамические константы.cf
.cf 25,47Kb ver:1
7 2 150 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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


Примеры использования:

в коде:

МояОрганизация = Справочники.БДВ_Константы.ПолучитьЗначениеКонстанты("Моя организация", 1);
СписокПользователей = Справочники.БДВ_Константы.ПолучитьЗначениеКонстанты("СписокПользователей", 0);

Второй параметр указывает в каком виде возвращается значение: 
0 - список значений,
1 - текущее значение.


в запросе:

"ВЫБРАТЬ Первые 1
|	К.Значение КАК Значение
|ИЗ
|	Справочник.БДВ_Константы.Значения КАК К
|ГДЕ
|	К.НаименованиеКонстанты = ""Моя организация"""

установка константы в коде:

Справочники.БДВ_Константы.УстановитьЗначениеКонстанты("Моя организация", Справочники.Организация.НайтиПоКоду("000001"));

СписокПользователей = Новый СписокЗначений;
СписокПользователей.Добавить(ПараметрвСеанса.ТекущийПользователь);
Справочники.БДВ_Константы.УстановитьЗначениеКонстанты("СписокПользователей", СписокПользователей, Истина);

Наименование константы может содержать любые символы.

При записи константы проверяется уникальность наименования, второй с таким же именем создать нельзя.

Перед записью проверяется наличие значений в других константах и выводится список констант, где эти значения присутствует.

Константы можно группировать по папкам.

Конфигурация тестировалась на платформе 8.3.10.2580.

Вступайте в нашу телеграмм-группу Инфостарт

константы

См. также

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

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

15500 руб.

02.09.2020    203416    1119    410    

1023

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

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

8400 руб.

20.08.2024    35942    208    104    

197

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

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

16000 руб.

10.11.2023    16554    71    39    

89

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    24105    63    26    

92

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

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

9360 руб.

17.05.2024    34832    124    53    

166

SALE! 30%

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 12600 руб.

22.11.2024    1845    1    0    

8

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

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

6000 руб.

07.02.2018    107333    249    100    

313
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bugagashenka 204 29.10.18 13:52 Сейчас в теме
А еще как вариант использовать связку ПВХ + РегистрСведений. Если константы меняются редко и их много, то для скорости получения можно использовать модуль с повторным использованием
kwazi; mickey.1cx; +2 Ответить
2. popenko 29.10.18 14:25 Сейчас в теме
присоединяюсь к (1)
СписокПользователей = Новый СписокЗначений;
СписокПользователей.Добавить(ПараметрвСеанса.СекущийПользователь);

но улыбнуло - СекущийПользователь ,может быть ТекущийПользователь
5. bashinsky 155 29.10.18 18:14 Сейчас в теме
9. popenko 30.10.18 16:43 Сейчас в теме
может я раньше не полностью высказался - для наглядной структуры - справочник, а вот же возможна периодика - с записью в регистр сведений за (1) + (8) . но полностью согласен с автором - каждый придумывает свое решение. Я лишь добавлю что ДОЛЖНА быть периодика, если хотите гибкости в длительном периоде, но это будет сложней.
bashinsky; +1 Ответить
3. VmvLer 29.10.18 14:54 Сейчас в теме
А можно вообще не лепить таблицы в БД, а создать обработку в расширении или через механизм БСП, а в ней
макет "Константы" с колонками

Имя/ТипМетаданныхСтрокой/ ВидМетаданныхСтрокой/ УидXmlСтрокой
....
"Филиал1"/"Справочник"/"Организации"/"......"

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


думаю это будет не медленнее, чем обращение к таблицам
7. bashinsky 155 29.10.18 18:21 Сейчас в теме
(3) вариантов можно много придумать, один из них вы видите здесь
4. le0nid 29.10.18 14:59 Сейчас в теме
Используем: Регистр сведений, повторно используемый модуль, ОбщееХранилищеНастроек (на служебного пользователя, для некритичных задач)
6. bashinsky 155 29.10.18 18:20 Сейчас в теме
(4) Повторно используемый модуль там используется.
В первоначальном варианте был регистр сведений, все значения хранились в Хранилище значений. Если там была ссылка, то контроля при удалении ни какого не было.
И из-за того что было много записей в регистре, хотелось немного их структурировать.
Поэтому пришлось использовать справочник.
8. skobzarev 30.10.18 05:14 Сейчас в теме
Хороший вариант, но мы ушли к регистру сведений из-за того, что появилась необходимость ввода периодических параметров
Контроль удаления решили через настройку прав доступа к регистру
10. TerveRus 31.10.18 10:26 Сейчас в теме
Не понял, зачем константе табличная часть со значениями. По какому принципу выбирается значение, если значений много? Сомневаюсь, что одна и та же константа может использоваться и так и так, и как одно значение и как список.
Если надо хранить список значений, так пусть это и будет список где-нибудь в хранилище, да хоть таблица значений. Есть же тип значения в колонке.

Параметры 0 и 1 лишние, проще было бы без параметра берется текущее значение, а с каким-либо параметром (Истина, например) - весь массив значений.
11. bashinsky 155 31.10.18 11:06 Сейчас в теме
(10) Сколько значений хранить решается исходя из требований прикладного решения. Если надо одно значение, то хранится одно значение в ТЧ, если список, то набивают сколько угодно.
12. acanta 31.10.18 11:14 Сейчас в теме
Константы / предопределенные элементы или Найти по наименованию в коде отчета/обработки - это уже холивар.
Есть математический принцип доказательств "Необходимо и достаточно". Необходимо чтобы данные заполнения для конкретно этой(любой) обработки/отчета/документа/справочника хранились либо для одного пользователя либо для всех.
Для одного пользователя хранится в кэше. При очистке кэша пропадает.
При хранении для всех - мы должны либо написать в коде(НайтиПоНаименованию) либо предусмотреть какой либо вариант констант (константа, справочник, регистр сведений с текстовым измерением или что-то еще).
Проблема в администрировании этого, а не в архитектуре. Пользователь в принципе может не знать - вносит от данные в базу как настройка для себя или для всех?
Или сегодня он делает эту работу один и ему нужны эти настройки, завтра их будет пятеро и у каждого свои индивидуальные, или вовсе без настроек, потому что каждый раз разное. А послезавтра снова один.
Для того чтобы другому пользователю не выскакивало то, что запомнил в базе кто-то другой - нужен администратор.
Мне вот понравилось как отчеты в ЗУП 2,5 настройки сохраняют.
Можно же сделать такое на документах/обработках/справочниках, нажал на кнопочку, видим список реквизитов/параметров которые можно сохранить и выбираем себе или всем или кому то конкретному. Как элемент БСП.

Поиск по наименованию плох не сам по себе, а как постоянно используемое в модуле для разных клиентов.Для заполнения первоначальных настроек при первом запуске это нормально
13. Taktic 40 30.07.24 09:53 Сейчас в теме
"Второй параметр указывает в каком виде возвращается значение:
0 - список значений,
1 - текущее значение."

Что то это мне напоминает... дайте подумать, кажется в 1С есть такой тип данных у которого всего два значения :)
Оставьте свое сообщение