Программирование в 1С

1С создать элемент справочника программно: пошаговый пример

Коротко

Новый объект создаёт менеджер справочника: Справочники.Контрагенты.СоздатьЭлемент(). До вызова Записать() он существует только в памяти. Заполните обязательные реквизиты, при необходимости задайте Код, Наименование, Родитель, Владелец и строки табличной части, затем запишите объект.

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

Создать элемент справочника 1С 8.3 программно: базовый пример

Метод СоздатьЭлемент() вызывается у менеджера конкретного справочника и возвращает изменяемый объект. Ссылка появится у объекта после успешной записи:

НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагент.Наименование = "ООО Ромашка";
НовыйКонтрагент.ИНН = "7701234567";
НовыйКонтрагент.Записать();

СсылкаНаКонтрагента = НовыйКонтрагент.Ссылка;
СоздатьЭлемент
СправочникОбъект.<Имя справочника>

По данным синтакс-помощника, сигнатура метода — СоздатьЭлемент(): параметров у него нет. Для иерархического справочника группа создаётся другим методом — СоздатьГруппу().

Обязательные реквизиты, код и наименование

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

Элемент = Справочники.Номенклатура.СоздатьЭлемент();
Элемент.Наименование = "Кабель ВВГ 3x2,5";
Элемент.Артикул = "VVG-3-2-5";
Элемент.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.Штука;

// Код обычно присваивается автоматически при записи.
// Задавайте его явно только по правилам конкретной базы.
Элемент.Записать();

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

Проверка дублей до создания элемента

Сначала ищите запись по устойчивому бизнес-ключу, и только при пустом результате создавайте объект. Для контрагента таким ключом часто служит ИНН; если уникальность зависит ещё от КПП или владельца, проверяйте все поля одним запросом. Подробные способы разобраны в статье как найти элемент справочника в 1С.

ИНН = "7701234567";
Ссылка = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН);

Если Ссылка.Пустая() Тогда
    Контрагент = Справочники.Контрагенты.СоздатьЭлемент();
    Контрагент.ИНН = ИНН;
    Контрагент.Наименование = "ООО Ромашка";
    Контрагент.Записать();
    Ссылка = Контрагент.Ссылка;
КонецЕсли;

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

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

Иерархия: Родитель и владелец элемента

Для иерархического справочника свойство Родитель принимает ссылку на группу того же справочника. Для подчинённого справочника свойство Владелец принимает ссылку типа, указанного в метаданных:

Элемент = Справочники.Номенклатура.СоздатьЭлемент();
Элемент.Наименование = "Кабель ВВГ 3x2,5";
Элемент.Родитель = Справочники.Номенклатура.КабельнаяПродукция;
Элемент.Записать();

Договор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
Договор.Владелец = СсылкаНаКонтрагента;
Договор.Наименование = "Основной договор";
Договор.Записать();

Родитель должен быть группой, а не обычным элементом. Владельца задавайте до записи: без него поиск, контроль уникальности и обработчики объекта могут работать в неверном контексте.

Как заполнить табличную часть нового элемента

Строки добавляют через метод Добавить() табличной части до записи объекта. Имена табличной части и её колонок зависят от конфигурации:

Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
Номенклатура.Наименование = "Набор кабелей";

СтрокаКомплекта = Номенклатура.Комплектующие.Добавить();
СтрокаКомплекта.Номенклатура = СсылкаНаКабель;
СтрокаКомплекта.Количество = 10;

Номенклатура.Записать();

Табличная часть записывается вместе с владельцем-объектом отдельным вызовом не требуется. До добавления строк проверьте обязательные колонки и типы значений; очистка через Очистить() удалит все подготовленные строки.

Записать объект и обработать результат

Метод Записать() сохраняет новый или изменённый элемент в базе и запускает проверки и события записи. Он не возвращает ссылку — после успешного вызова берите её из свойства Ссылка объекта.

Элемент = Справочники.Контрагенты.СоздатьЭлемент();
Элемент.Наименование = "ООО Ромашка";
Элемент.ИНН = "7701234567";
Элемент.Записать();

Результат = Элемент.Ссылка;
Записать
не возвращает значение

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

Предопределённые элементы справочника

Предопределённые элементы задаются в конфигураторе и доступны по имени, например Справочники.ВидыЦен.Розничная. Их не следует повторно создавать через СоздатьЭлемент(): используйте готовую ссылку для заполнения реквизитов других объектов.

ВидЦены = Справочники.ВидыЦен.Розничная;
Если ВидЦены.Пустая() Тогда
    ВызватьИсключение "Предопределённый вид цены не найден";
КонецЕсли;

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

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

Частые ошибки при программном создании элемента справочника

  • Забыли вызвать Записать(). Объект остался в памяти и в базе не появился.
  • Проверяют дубль после создания. Лишняя запись уже могла попасть в базу; поиск выполняйте раньше.
  • Не заполнен обязательный реквизит. Срабатывает проверка заполнения или обработчик ПередЗаписью.
  • В Родитель передан элемент. Для иерархии групп нужен объект с признаком группы.
  • Неверный тип владельца. Ссылка должна входить в список типов владельцев справочника.
  • Код назначен вручную без проверки. Возникает ошибка уникальности или превышения длины.
  • Использовано имя реквизита из другой конфигурации. Сверяйте имена с метаданными текущей базы.
  • Создаётся копия предопределённого элемента. Обращайтесь к существующему элементу по предопределённому имени.

Частые вопросы о создании элементов справочника в 1С

Когда новый элемент справочника получает ссылку?

Объект можно получить через СоздатьЭлемент сразу, но рабочая ссылка на запись формируется после успешного вызова Записать.

Нужно ли программно задавать код элемента?

Обычно нет: при включённом автонумеровании платформа присвоит код при записи. Задавайте код вручную только по правилам обмена или миграции и проверяйте его уникальность.

Как не создать дубли справочника?

До вызова СоздатьЭлемент найдите запись по устойчивому бизнес-ключу, например ИНН. При параллельной загрузке дополнительно обеспечьте уникальность или сериализацию записи.

Тарифы

ИИ Консоль кода 1С

Лайт

Бесплатно
≈ 1,5 млн токенов

Для ознакомления с возможностями

  • Все функции бесплатно на 2 дня +2 дня за подписку на Telegram или Max
  • Полный набор инструментов без урезаний
  • Без ввода карты
Начать бесплатно

Старт

1990 руб. в месяц
≈ 10 млн токенов

Для индивидуального использования

Выбрать тариф

Продвинутый

Популярный выбор
3990 руб. в месяц
≈ 25 млн токенов

Для интенсивного использования или команд

  • До 15 конфигураций
  • Встроенный агент запросов 1С
  • Свои подписки Codex, Claude и любые OpenAI-совместимые
  • Внешние обработки без Конфигуратора
  • Приоритетная техническая поддержка
Выбрать тариф