Как сделать предопределенный элемент в 1с

Добавил пользователь Дмитрий К.
Обновлено: 04.10.2024

Предопределенные элементы. не изменяя типовую конфигурацию

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

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

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

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

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

Изображение

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

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

Мы видим, что в функции запросом выбирается необходимый нам реквизит Значение из предопределенного элемента, имя которое передается в параметре функции.

Ниже показан пример связки элементов в пользовательском режиме.

Изображение

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

Как он может не существовать если он уже есть в структуре справочника от разработчика фирмы 1с?
И конечно его нет, так как я его еще только пытаюсь задать программно.

Как записать из Xml в справочник номенклатур?
Есть шаблон для чтения произвольного xml файл (в нем 2 поля -код - значение). Мне нужно записать.

Как связать предопределенные планы видов расчета и реквизиты документа?
Создал в плане видов расчета ОсновныеНачисленияОрганизаций предопределенные виды расчета.

В результате при обращении к предопределенному элементу А будет возвращен существовавший ранее объект данных А.

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

пока только чую, нужно будет разбираться, спасибо всем за помощь

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

седьмой, в конфигураторе на справочник правой кнопкой мыши-предопределенные элементы. Там и создавайте

Спасибо, сюда я заходил и даже писал значения, но не понял как оно свяжется с номенклатурой, одна только мысль пришла, что по коду наименования, но мне кажется это абсурд. В таком случае проще просто добавить еще одно поле в справочнике и туда писать данные, какой смысл в этом предопределении? Или тут какая то другая связь с элементом самого справочника?

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

Компания 1С старается максимально упростить бухгалтерам и предпринимателям работу со своим программным обеспечением. Она, при первой же подходящей возможности, выпускает качественные обновления программных продуктов. Их необходимо правильно и безошибочно установить.

Многие считают, что обновление 1 С — это работа для специалиста. Мол, своими руками данную процедуру реализовать не возможно. Это ошибочное мнение. Сложность обновления заключается в том, какая именно база используется вами, — стандартная или измененная. А также, от того, какая конфигурация установлена на компьютере.

Если стандартная база (то есть, программист ничего в нее не дополнял, и ни что не изменял), то по времени обновление займет от 15 минут до 3 часов максимум. Процедура выполняется в пользовательском режиме. Если же измененная база, то времени уйдет намного больше.

При неправильном и некачественном обновлении могут потеряться данные и пропасть все выполненные ранее доработки . Итак

Это значит, что произошло не совпадение конфигураций. Бывают типовые и не типовые конфигурации. Возможно скаченные файлы принадлежат одной конфигурации, а на компьютере установлена другая. Решение проблемы: создается пустая база типовой конфигурации и сохраняется в файл.cf, затем используется файл, чтобы обновить уже не типовую конфигурацию. Для получения типовой версии, конфигурация должна поддерживаться (то есть, должен высвечиваться желтый кубик).

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

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

Для устранения всех вышеперечисленных ошибок нужен опыт работы с программой 1с, а также профессиональные навыки. Если вы плохо разбираетесь в ошибках и не до конца смогли понять их описание (пути устранения), вам стоит обратится к специалисту.

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

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

Предопределенные элементы справочников создаются в режиме конфигуратора. В режиме "1С:Конфигуратор" определяются имена предопределенных элементов. Сами элементы, которые хранятся в базе данных, создаются в режиме "1С:Предприятие". Таким, образом предопределенный элемент - это метаданные (имя предопределенного элемента) и данные (сам элемент справочника).

1С:Предприятие 8.2

В 1С:Предприятии 8.2 предопределенные элементы добавленные или удаленные в конфигураторе, автоматически добавляются или удаляются в базе данных.

1С:Предприятие 8.3

В этой версии платформы, каждый справочник содержит стандартный реквизит "ИмяПредопределенныхДанных". Он создан для хранения предопределенного имени и доступен для программного изменения. При добавлении нового элемента в конфигураторе, этот элемент может быть создан в базе данных или нет - это зависит от свойства справочника "Обновление предопределенных данных". Если установлено значение "Обновлять автоматически", то созданные предопределенные элементы в конфигураторе, автоматически добавятся в базу. Если свойство установлено в значение "Не обновлять автоматически", элементы в базу не добавятся. В таком случае их нужно создать самостоятельно и программно привязать к предопределенным элементам справочника, установив реквизит "ИмяПредопределенныхДанных".


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

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

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

Условно можно выделить три типа ошибок:
1. "Предопределенный элемент отсутствует в данных";

3. Неверное указание предопределенного элемента;

1. "Предопределенный элемент отсутствует в данных" - о тсутствие описанного в конфигурации предопределённого элемента в данных ИБ.


Такая ошибка возникает в случае, если элемент в конфигурации описан, но в базе ему элемент не сопоставлен.

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

Также не используется автоматическое создание предопределенных элементов при работе в режиме РИБ. Так как новые элементы должны передаваться из центральной базы, а не создаваться в узлах с отличающимися УИДами.

Т.е. иногда ошибкой является обращение в несопоставленному элементу, а не само наличие такого элемента.


Необходимо проанализировать, почему элемент не создан. Возможно, он должен создаться при выполнении какого-либо режима программы. Например, после выполнения обмена в РИБ. А возможно, его просто случайно удалили.

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

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВидыКонтактнойИнформации.Ссылка |ИЗ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации |ГДЕ | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных = "" EmailКонтактногоЛица """; ЭлементОтсутсвуетВДанных = Запрос.Выполнить().Пустой();

Если это все-таки ошибка в данных базы, то необходимо выполнить привязку к предопределенному элементу элемента ИБ. Т.е. необходимо объяснить системе, к какому элементу ИБ должен обратиться программный код по данному имени. Технически привязка это просто указание имени предопределенного элемента в свойстве " ИмяПредопределенныхДанных " элемента ИБ. Для ее установки достаточно выполнить код:

2. "Предопределенный элемент не уникален" - з адвоенные предопределенные элементы:

Эта ситуация заключается в том, что к одному предопределенному элементу привязано несколько элементов ИБ. В этом случае при обращении к предопределенному имени элемент будет выбираться случайным образом. Такая ситуация всегда ошибочна. Ее сложность в том, что платформа никак о ней не сообщает. Просто алгоритмы начинают работать неверно.

Платформа сообщит об ошибке "Предопределенный элемент не уникален" лишь при попытке редактирования задублированного элемента.


До тех пор, пока никому не понадобится редактировать элемент, об ошибке никто не узнает.

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

Также эти дубли возникнут при использовании обработок обмена между конфигурациями в случае, если в разных базах предопределенным элементам соответствеют разные элементы ИБ. В этом случае один экземпляр предопределенных данных в базе уже есть, второй придет при выполнении загрузки данных с другим УИДом. Если вы выполняете переносы данных, необходимо решить, элементы какой базы считаются основными и использовать их же в подчиненной базе. В подчиненной базе необходимо заменить использование старых элементов на элементы основной базы.

Такие ошибки в базе данных можно выявить запросом вида:

ВЫБРАТЬ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВидыКонтактнойИнформации.Ссылка) КАК КоличествоПредопределенных ИЗ Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации СГРУППИРОВАТЬ ПО ВидыКонтактнойИнформации.ИмяПредопределенныхДанных ИМЕЮЩИЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВидыКонтактнойИнформации.Ссылка) > 1

Этот запрос вернет перечень предопределенных элементов, с которым связано более одного элемента ИБ.

При наличии таких элементов необходимо убрать для одного из них связь с предопределенным. Т.е. необходимо однозначно определить для системы, к какому элементу ИБ должен обратиться программный код при использовании данного имени. Для этого достаточно выполнить код.

3. Неверное указание предопределенного элемента.

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

Для этого достаточно выполнить одну из команд.

//Определение элемента ИБ, который привязан к нужному предопределенному Сообщить(Справочники.ВидыКонтактнойИнформации.EmailКонтактногоЛица) //Определяем предопределенный элемент, к которому привязан выбранный Сообщить(СсылкаНаЭлемент.ИмяПредопределенныхДанных)

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

Ну и кратко об ошибках при программной работе или в режиме конфигуратора:

"Предопределенный элемент не принадлежит " - ошибка возникает при попытке записать предопределенный элемент с именем, не совпадающим с именем в коонфигураторе .

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

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

"Предопределенные элементы не уникальны" - ошибка выдается в конфигураторе при обновлении информационной базы на релиз конфигурации без режима совместимости с 8.3.4. Необходимо до обновления проверить дубли и устранить их.

"Имя предопределенного элемента не уникально" - ошибка возникает при наличии в конфигурации нескольких одноименных предопределенных элементов при обновлении на платформу 8.3.6.2332 и выше. Необходимо устранить дубли в конфигурации.

Для работы с предопределенными данными рекоммендую обработку . Она умеет выполнять любые действия с предопределенными данными, а также может проверить конфигурацию вцелом на наличие во всех объектах ИБ (справочниках, планах счетов, ПВХ, ПВР) ошибок первых двух типов (задвоенных и отсутствующих элементов).


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

Простая обработка для работы с предопределенными значениями.

Позволяет сопоставить элементы ИБ с предопределенными в конфигурации элементами.

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

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

Порядок работы:

1. Запускаем обработку.

2. Выбираем тип (справочник, план счетов, ПВХ, ПВР).

3. Выбираем сам справочник выбранного типа.

4. В табличной части обработки появляются все предопределенные элементы, имеющиеся в ИБ, и описанные в конфигурации.

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

( В платформе 8.3.3 - 8.3.4 отображуются только элементы, которые есть в ИБ. В этом случае, если нужного предопределенного элемента в списке нет, значит, по каким-то причинам он не создался при изменении конфигурации либо его удалили пользователи. Нажимаем кнопочку добавить, указываем имя элемента и назначем ему элемент из ИБ).

5. Устанавливаем новые значения для нужных предопределенных элементов.

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

6. Выполняем переназначение нажатием кнопочки "Выполнить переназначения элементов".

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

Режимы массовой проверки корректности указания предопределенных элементов:

Проверка дублей (ошибка "Предопределенный элемент не уникален"):

При нажатии конопки "Проверить дубли" обработка проверит все справочники, планы счетов, ПВХ и ПВР и выведет список таблиц с задвоенными элементами с указанием количества задвоенных элементов.

После этого необходимо проверить отдельно объекты, для которых найдены ошибки.

Проверка пропущенных (ошибка "Предопределенный элемент отсутствует в данных"):

При нажатии кнопки "Проверить пропущенные" обработка проверит все справочники, планы счетов, ПВХ и ПВР и выведет перечень предопределённых элементов, которым не сопоставлены данные ИБ. (В платформе 8.3.3 - 8.3.4 для выполнения данной проверки необходимо предварительно в режиме конфигуратора выгрузить файлы конфигурации в каталог на сервере. С версии обработки 1.3.3 и платформы 8.3.5 предварительная выгрузка данных не нужна).

Для понимания принципов работы предопределенных данных и возможных причин ошибок рекоммендую статью Ошибки в предопределённых элементах

Для анализа других ошибок в ведении учета рекоммендую отчет Комплексная проверка ведения учета. Он позволяет выявить основные проблемы в данных ИБ: расхождения данных в связанных регистрах, отрицательные остатки по номеклатуре, зависшие суммовые остатки с нулевым количеством и т.д.

upd. Версия 1.2 Добавлена возможность поиска задвоений в целом по конфигурации. Доступно с 8.3.5.

upd. Версия 1.3 Добавлена возможность поиска в целом по конфигурации отсутствующих элементов .

upd. Версия 1.3.2. Добавлена обработка предопределенности строк стандартных табличных частей для устранения в 8.3.5 без режима совместимости ошибок "Не предопределенные объекты не могут иметь предопределенные записи видов субконто" и "Не предопределенные объекты не могут иметь предопределенные записи ведущих видов расчетов" (подробнее в комментариях (9),(10),(11),(18),(19))

upd. Версия 1.3.3 Добавлена возможность проверки пропущенных элементов вцелом по конфигурации без предварительной выгрузки конфигурации и автопроверка пропущенных при выборе справочника.

upd. Версия 1.3.4. Добавлена возможность создания отсутствующих в базе новых предопределенных элементов. Упрощен интерфейс выбора типов объектов. Отображаются лишь те справочники, в которых в конфигурации есть предопределенные элементы. Добавлена возможность подключения к механизму внешних обработок.

upd. Версия 1.3.5. Исправлена ошибка при работе в 8.3.10.

Читайте также: