Предопределенные значения справочников и обновление конфигурации
Нередко требования заказчиков вынуждают привязывать алгоритмы конфигурации к каким-то определенным данным. Например, "если подразделение Челябинск, то проверить минимальный тип цен такой-то, а если Пермь, то такой-то". Основные подходы к реализации данного требования таковы:
1) Привязаться к наименованию/коду элемента и надеяться, что никто его никогда не поменяет. Например,
Если Подразделение.Код="0000001" Тогда ТипЦенПроверки=Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Минимальная (Челябинск)")....
Минусы, думаю, очевидны.
2) Создавать предопределенные значения в справочниках, и впоследствии переносить их из релиза в релиз. Если речь идет о базовых справочниках вроде контрагентов или номенклатуры, которые меняются довольно часто, это становится проблемой. Вторая проблема такого подхода: возможно, потребность выделить какой-то элемент как предопределенный появилась только сейчас, а ссылок на этот элемент в базе уже полно. Решение есть, но, например, при использовании РБД оно создаст еще ворох проблем.
3) Создать константы и записывать туда ссылки на эти самые элементы справочников. Уже лучше, но часто бывает так, что таких вот предопределенных значений может быть много, и список констант разрастется в несколько раз. К тому же необходимо создавать отдельную форму редактирования новых констант и вставлять ее в интерфейс. И права доступа в ролях необходимо добавлять на каждую новую константу.
Вариант, который я хочу предложить на рассмотрение.
Создаем справочник "Предопределенные значения". Реквизиты: "Значение", тип - составной: строка (ограниченной длины), число, булево, дата, ЛюбаяСсылка. В этом справочнике создаем в конфигураторе нужные нам предопределенные элементы. В пользовательском режиме заполняем реквизит "Значение" у созданных элементов. В коде используем конструкции типа
Если Подразделение = Справочники.ПредопределенныеЗначения.ПодразделениеЧелябинск.Значение Тогда ТипЦенПроверки = Справочники.ПредопределенныеЗначения.ТипЦенПроверкиЧелябинск.Значение.
Еще одним из плюсов такого подхода является то, что данный справочник можно использовать вообще вместо новых констант (для констант типа ХранилищеЗначения или Строка с бесконечной длиной необходимо добавить в этот справочник отдельные реквизиты). Кроме того, в нем можно указывать ссылки на любые объекты, в том числе и документы, бизнес-процессы и т.д. (экзотический случай, но, например, он встречается в типовой редакции конфигурации "1С:Рарус Альфа-авто 4.1".
У кого какие мысли по этому поводу?
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Инструменты администратора БД Обновление 1С Системный администратор Разработчик 1С 8.3 Абонемент ($m)
Если обновление 1С уже падало с "Записи регистра сведений стали неуникальными", вы знаете, что платформа называет только первый такой регистр, и каждый следующий всплывает новым запуском обновления. Проверьте заранее: снимите слепок регистров в базе с новой конфигурацией и нажмите "Проверить" в рабочей. Обработка покажет все регистры сведений, где записи после обновления совпадут по измерениям, и сами группы таких записей: укороченная строка, меньше знаков после запятой, укрупнённая периодичность, убранный из составного тип. Удалённое измерение называет, но записи по нему не считает. Что разобрать не может, называет с причиной и в "дублей не найдено" не записывает. Только чтение, без доступа к таблицам СУБД.
10 стартмани
09.11.2026 227 0 nedomolkov.ivan 0
Корректировка данных Обновление 1С Системный администратор Разработчик 1С 8.3 1С 8.5 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Абонемент ($m)
Сама поднимает новый релиз во временной копии и проверяет на нём обработки, отчёты, расширения и ваши доработки: пропавшие методы, объекты, поля запросов, перехваты, готовность к 8.5. В рабочую базу ничего не пишет.
5 стартмани
05.11.2026 340 4 Iliaelagin 0
Архивирование (backup) Обновление 1С Системный администратор Разработчик 1С 8.3 Бесплатно (free)
Платформа 8.3.17, MS SQL Server: обновление конфигурации падает через 15 секунд на этапе обновления предопределённых данных, и конфигуратор при каждом входе предлагает только повторить. Проверьте у себя, когда сделана последняя полная копия базы: у нас её не было почти месяц. Разбор по минутам: что не помогло (перезапуск агента сервера 1С, перезагрузка, пакетный /UpdateDBCfg, три совета со стороны) и почему. Как ibcmd достал .dt из базы, которая не открывается, и как новую базу подставили под старым именем в кластере 1С через rac, не трогая пользователей. Простой 57 минут, потерь данных нет. Отдельно ошибки ИИ-агента Claude, который работал на сервере, и порядок действий на случай, если это случилось у вас.
03.11.2026 708 nedomolkov.ivan 13
Обновление 1С Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бесплатно (free)
Вторая часть серии о переходе ERP 2.5 на 2.6. Я сравнил чистые выгрузки 2.5.27.88, 2.6.1.70 и 2.6.2.59 и выписал то, чего нет в официальных описаниях версий: какие экспортные методы удалены поимённо, какие документы больше нельзя создать и при каком условии, что переименовали без предупреждения. Из двенадцати механизмов, от которых отказывается 1С, к 2.6.2 удалены только два, а большая часть удалённого к ним не относится. Отдельно разбираю, почему перехватчики &ИзменениеИКонтроль ломаются на процедурах, где поменялся только английский текст, и почему доработки выгоднее готовить сразу под 2.6.2. Будет полезно разработчикам, которые сопровождают расширения и внешние обработки на ERP 2.5.27, и тем, кто планирует сроки перехода.
20.10.2026 1078 lexatsch 8
Обновление 1С Разработчик 1С 8.3 1С 8.5 Абонемент ($m)
Перед обновлением типовой конфигурации обработка читает код ваших доработок — внешних обработок, отчетов и расширений — и сверяет каждое обращение к конфигурации со старым и новым релизом. Результат — один отчет по всем доработкам: файл и строка, сам фрагмент кода и понятная причина («метод теперь принимает один параметр», «значение перечисления удалено», «перехватываемый метод не найден»). Исходники релизов и обработок можно подготовить прямо из обработки — пакетным запуском Конфигуратора.
3 стартмани
19.10.2026 355 1 InShallaH 0
Обновление 1С Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бесплатно (free)
1С считает, что перейти с ERP 2.5 на 2.6 не сложнее, чем обновиться между версиями длительной поддержки, а обязательным переход станет не раньше 30 апреля 2027 года. Я решил проверить это заранее на нашей доработанной ERP 2.5.27, где есть два больших расширения и 517 внешних отчётов и обработок. Форма готовности нашла четыре механизма, которые надо перевести, а про код промолчала. Проверка применимости на чистой 2.6.1 выдала 478 проблем, и настоящих среди них меньше сотни. А сверка кода со словарём изменений нашла ещё 63 проблемы, которых проверка применимости вообще не видит. Часть из них не даст открыть модуль, остальные вылезут уже у пользователей. Рассказываю, как проверить применимость расширения к 2.6.1 без записи в базу, что ловит компилятор, что ломается чаще всего и чем это заменить.
16.10.2026 691 lexatsch 0
Обновление 1С 1С:Предприятие 8 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1C:ERP Бесплатно (free)
Партизанские методы оптимизации обновления тяжёлых баз
13.10.2026 1379 1c-intelligence 2
Инструментарий разработчика Обновление 1С Разработчик 1С 8.3 Бесплатно (free)
Бесплатная внешняя обработка: до обновления типовой показывает, какие ваши внешние обработки и печатные формы после него упадут. Находит в их коде вызовы общих модулей и менеджеров типовой и сверяет каждый с текущей конфигурацией и с выгрузкой нового релиза: есть ли метод, экспортный ли, сходится ли число параметров. Обработки берёт из справочника или из папки .epf и .erf, без конфигуратора. У каждого вызова статус, строка и причина.
29.09.2026 1232 142 nedomolkov.ivan 2
Для это нужно было заполнить структур сохраненными (расч. счет, формат, путь к файлу импорта и т.д.) настройками, потом структуру сконвертировать через ЗначениеВСтрокуВнутр() и уже полученую строку сохранить в значении характеристики. Но оказалось что значение характеристики не может быть строкой неограниченной длинны (иначе необходимо включать возможность редактирования конфигурации). В итоге получается что не получается или выносить настройки в внешний файл и загружать в базу сам файл.
А по поводу описанной методики - беру на вооружение.
Реквизит ВидДанных - ссылка на перечисление - нужно дорабатывать перечисление, добавлять значение Справочник.
Реквизит Объект - составной тип данных - но не исчерпывающий список, нужно дорабатывать...
Реквизит Хранилище - туда то можно было бы запихнуть ссылку на элемент, который мы хотели бы считать предопределенным - но если этот элемент мы удалим - прощай ссылочная целостность.
Исходная идея - облегчить себе жизнь при обновлении, получив произвольный (с точки зрения правки ТИПОВОЙ конфигурации) набор предопределенных элементов, Хранилищем не решить.
А вот справочник, состоящий из одних предопределенных элементов, которого нет в типовых, но в реквизиты которого можно положить значение ЛЮБОГО типа, - просто чудненько.
Несомненно - плюс!
Создаем измерение - "Подразделение", ведущее, чтобы можно было из подразделения по кнопки "Перейти" попасть в этот регистр, ну и удалять записи, если само подразделение будет удалено.
В ресурсе указываем тип цен для выбранного подразделения.
В последствии организуем где-нибудь в общем модуле функцию по получению типа цен по переданному в нее подразделению.
Одним из плюсов данного способа является то, что пользователь сам может добавить любое соответствие "Подразделение - ТипЦен", в отличие от предопределенных значений, которые заводятся в конфигураторе.
За идею ставлю плюс.
Например, новые виды расчета в ЗУП, которые по каким-то причинам невозможно описать штатными средствами. Или новые счета в бухгалтерии.
За комментарий спасибо )
При необходимости его не сложно модифицировать: Пополнить список допустимых объектов; Список допустимых типов значений. (для примера, пришлось дополнить допустимые значения созданным справочником "РайоныДоставки", а пока была УТ_10.2 - расширялся набор справочников для объектов свойств)
На самом деле, Справочник в 1С - это что-то среднее между Регистром сведений (все основные данные хранятся в одной таблице) и Докмуентом (есть возможность подключать ТЧ и прочие "радости" документа).
Поэтому и работает Справочник - заметно быстрее поиска по документам, но значительно медленнее спецрегистров.
Но народ упорно применяет справочники вот в таких случаях хранения изменяемой информации, т.к. справочник - ближе "по понятию", нежели какой-то там "регистр".
(0) а что такого нового вы открыли?! Дополнительный объект хранения локальной используемой информации, больше никому не нужной, кроме отдельного предприятия?
А Свойства документов и Справочников смотрели?
И я не претендую на открытие. Я описываю способ, который кажется мне наиболее удобным в некоторых случаях. Применять его или нет - решать вам.
Возможно. Но используете то, что знаете, а не то, что оптимально :)
Какие задачи вы описываете в заметке? Я вот в ( 31) кратко и конкретно описал задачи, а у вас - только "вода" и прописная истина в заметке :)
И то сугубо индивидуальная и узкоспециализированная.
Вот и опишите сначала ЭТИ случаи. Чтоб было понятно, ЧТО это за случаи.
Ну да. А вам - писать статьи, чтобы неокрепшие новички ставили плюсы за "новаторскую идею" :)))
На вопрос о задачах могу ответить: перечитайте заметку.
Насчет "прописной истины", кстати, не отрицаю. "сугубо индивидуальная и узкоспециализированная" - все верно.
Да, и меня заинтересовала идея с обращением к конкретным значениям справочников через перечисление. Можете более подробно описать?
все сомнительное "достоинство" данного метода - это обращаться "без дураков" к нужному значению (так и хочется вписать - "без дураков из 1С" :) ), но это только если ты привык работать с предопределенными (т.е. конфа на них завязана).
И большинству вполне в таких случаях - "именного" обращения, - подойдет и будет достаточно списка в новом Перечислении.
Потом - есть механизм Свойств.
и вот уже если нужна некая "карточка" на это значение (все не умещается в одном "реквизите") - смотрим на Справочник. Да и то - если значений-описаний у элемента немного (а их немного в 99,9% случаев - 5-7-10) - то только РС и проблема закрыта.
а что за проблемы с обновлением справочников с предопределенными элементами?
Проблемы возникают только при РИБ - в распределенных (удаленных) базах нет этих значений, их туда надо специально переносить/вводить.
При обновлении базы - предопределенные элементы не трогаются, лишб бы код у них не совпадал (иначе обновление задвоит элементы под одним кодом, или будет ошибка обновления).
Создать регистр сведений в котором Измерение будет строка (по сути название константы) и ресурс - любая ссылка (по сути - значение константы)
Напишите функцию для доступа к такой псевдоконстанте и конструкция не будет громозкой.
Это позволит и легко поменять механизм хранения не затрагивая прикладной код.
Тоже вполне жизнеспособно.
Для справедливаости, можно заметить, что в 8.2 при обновлении можно безболезненно объединять списки предопределенных знаений. Тоесть обновление перестает быть проблемой.
Что касается ссылок в базе, то я, для быстрой разработки, применяю такой метод:
Значение = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор("10c6e765-deec-11de-b685-505054503030")) //Мой любимый контраент
Где идентификатор выявляется с помощью табло вот такой командой:
Справочники.Контрагенты.НайтиПоКоду("000001835").УникальныйИдентификатор()
Занимает 2 минуты, элемент жестко свзяан, проблем с изменением реквизитов не будет, РБД тоже правильно сработает.
И вдруг ваш любимый контрагент поменяется, только ручное изменение исходного кода вам сможет помочь, но справедливости ради, если прошла любовь и завяли помидоры, то с другим контрагентом чаще всего и другие условия работы :).
Первое что мне пришло в голову это вариант из (19). Но тут теряется читаемость.
Вариант же предложенный в статье для меня самый оптимальный. Все что мне нужно сделать это перенести добавленные Предопределенные в новый справочник и везде где они использовались исправить Справочники.ТиповойСправочник.ДобавленныйПредопределенный на Справочники.СправочникПредопределенных.ДобавленныйПредопределенный.Значение даже без вникания в суть кода :)
Так ты и отталкиваешься "от имеющегося", а не от "а каким бы способом это сделать" - который ставится негластно в статье, и какой "лоббируется" как "вопрос прочитавшего статью
Т.е., как я и писал уже выше - к исходным посылам статьи очень и очень большие вопросы.
И правильно, если у меня вся конфа будет на Справочниках (Накопления, Сведений, Расчетных), я что - буду использовать регистры (предположим, скорость обработки не имеет значения)? :)
Расширение списка предопределённых от типовой конфы - большая редкость. Следовательно, можно попыхтеть при обновлении. Надо только не забывать выборочно отказываться от затирания собственных значений.
Есть ещё одна ветка проблемы с которой я только что столкнулся:
Есть периодические вариации алгоритмов обработки... т.е. для текущего периода один алгоритм, а для документов прошлого периода - другой. Вроде как напрашивается периодический регистр сведений, хранящий в текстовом виде исполняемый код алгоритма... Но быстродействие получится не Айс!
Или придётся ограничиться периодическим параметром, который направляет на разные ветки алгоритма?
Предопределенные элементы нужны лишь для того чтобы к ним можно было обращаться по имени и суть статьи это то что незачем добавлять предопределенные в типовой справочник если их можно добавить в свой и пользоваться ими с тем же удобством, но при этом они не будут мешаться при обновлении никак.
В принципе конечно предопределенные объединяются при обновлении без проблем если в обновлении они добавлены, а если они удалены? Тогда что делать? Опять руками?
Не стоит городить справочники там, где есть другие средства.
Более быстрые - РС, и более простые - Перечисления. А то и просто Свойства.
(36) skif47,
Вот и опишите, статья - у вас. Все тезисы уже здесь описаны.
Не хотите прорабатывать тему статьи до конца и полно?
Тогда так и пишите - "лень мне, но вот что есть, то есть" :)
А лоббировать создание "предопределенок" как панацею "от всего" (не указывая "иное"), не прорабатывая материал "вглубь", чтобы новички со слюнями велись и апплодировали - это не самая лучщая метода писать статьи.
Любые. Даже на ИС.
Пока тролль - это вы. Троллите своей статьей и ответами.
У меня конкретно написано в ( 29) , ( 31) (и не только у меня - сообщения ( 4), ( 12) ), что "не так" с вашей статьей. Где вам нужно разобраться и переписать/дополнить.
А в ответ о вас - обвинения в троллизме.
Т.е. тролль (либо воинствующий студент) - он всегда в первую очередь обвинит в троллизме других. Главное - громко крикнуть, и собрать толпу таких же студентов.
На моей практике метаданные для которых создавались предопределенные элементы как правило подлежали изменению (доп реквизиты или изменения в модулях) поэтому было не страшно добавить еще один реквизит строку "ПредопределенныйКАК" в который можно поместить нужное нам название этого элемента, а потом искать по реквизиту нужный элемент, не боясь его изменения (в интерфейс его не выводим).
Как уже писали выше в случае псевдо предопределения теряется суть данной возможности, и идеальным была бы реализация со стороны 1с возможность разделения по поставкам таблиц предопределенных данных.
Так же хочу заметить что для каких-то метаданных (например ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные в бухгалтерии) использование не предопределенных данных вызовет некоторые затруднения.
справочник "ПредопределенныеЗначения", закрытый для редактирования (только с полными правами, т.е. программисты), в справочнике в качестве идентификатора используется поле "Наименование".
в общем модуле - реализована функция типа ПолучитьПредопределенноеЗначение(Имя).
Ну и навороты типа:
+ В качестве значения задавать список значений, таблицу значений, структуру, соответствие (для сложных типов реализованы редакторы значений).
+ Кэширование полученных значений в стандартном КЭШе (без изменения механизма кеширования)
+ Использование в функциях типа "ПолучитьДопПравоПользователя", "ПолучитьНастройкуПользователя" - настройки и доп.права создаются в режиме предприятия, ссылки на них помещаются в значения соответствующих "констант" /именованный элемент справочника "ПредопределенныеЗначения"/ - в коде вызывается по имени этой константы.
Таким образом - не нужно монопольное обновление, а добавляемые доп.права/настройки можно переименовывать.
Это позволяет делать "предопределенные" без предопределенных.
Поиск делаем по наименованию, которое как-бы является идентификатором/"названием переменной".
Минус, конечно, в том, что в запросах не используешь эти предопределенные, зато не надо монопольно обновляться, можно "динамить".
Плюс развиваем схему дальше - скоро добавим список значений, потом до таблицы значений дойдем...
не нравится. Строка, число, булево, дата - для предопределенных не нужно, а для составного типа реквизита плохо.
"Любая ссылка" - тоже плохо. Лучше ограничить типами реально используемых для хранения ссылок.
ВЫБРАТЬ
Представление (ПредопределенныеЗначения.Значение) КАК ЗначениеПредставление
ИЗ Справочник.ПредопределенныеЗначения КАК ПредопределенныеЗначения;
При типе ПредопределенныеЗначения.Значение "Любая ссылка" это приведет к тяжеловесному или вовсе невыполнимому плану запроса
Рейтинг: 356
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 155418
Создание 08.10.12 19:33
Обновление 22.08.13 15:53
Просмотры 37022
Загрузки 0
Рейтинг
67
Комментарии 52
Код открыт Не указано
Рубрики Обновление 1С
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация Универсальные
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)