К статье
Практический материал

Справочники и Данные · 8 мин

Как создать объект справочника в 1С

Как создать объект справочника в 1С через интерфейс и программно: СоздатьЭлемент(), заполнение реквизитов, запись, группы, типичные ошибки и проверка результата.

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

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

Что нужно проверить перед созданием элемента

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

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

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

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

Порядок действий в интерфейсе
  1. 1
    Откройте нужный справочник через раздел меню (например, «Номенклатура» в разделе «Справочники» или «Покупки»).
  2. 2
    Нажмите кнопку «Создать» в командной панели формы списка. Если справочник иерархический, сначала выберите группу, в которую попадёт элемент.
  3. 3
    Заполните наименование и обязательные реквизиты — они обычно подчёркнуты красным или отмечены звёздочкой.
  4. 4
    Нажмите «Записать и закрыть» или «Записать», чтобы сохранить элемент.
  5. 5
    Проверьте, что элемент появился в списке справочника.

Если кнопка «Создать» недоступна (серая), причины обычно две: нет прав на добавление либо справочник находится в режиме только просмотра из-за настроек формы. В первом случае обратитесь к администратору за назначением роли, во втором — проверьте, не открыта ли форма подбором из другого объекта.

Как создать объект справочника программно

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

bsl
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Кабель ВВГнг 3х2,5";
НовыйЭлемент.Артикул = "КБ-325";
НовыйЭлемент.Записать();

Сообщить("Создан элемент: " + НовыйЭлемент.Ссылка);

Метод СоздатьЭлемент() создаёт объект только в памяти. Пока не вызван Записать(), в базе данных ничего нет. После записи у объекта появляется ссылка — уникальный идентификатор, по которому на элемент можно ссылаться из документов и других справочников.

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

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

Создание группы и заполнение табличной части

Для иерархических справочников группы создаются отдельным методом — СоздатьГруппу(). Обычному элементу нельзя назначить подчинённые записи, поэтому путать эти два метода нельзя: попытка указать элемент в качестве родителя приведёт к ошибке при записи.

bsl
НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();
НоваяГруппа.Наименование = "Электротехника";
НоваяГруппа.Записать();

Если у справочника есть табличные части (например, «Единицы измерения» или «Контактная информация»), они заполняются после создания объекта, но до записи, либо после записи с последующим повторным Записать():

bsl
СтрокаТЧ = НовыйЭлемент.ДополнительныеРеквизиты.Добавить();
СтрокаТЧ.Свойство = СвойствоЦвет;
СтрокаТЧ.Значение = "Синий";
НовыйЭлемент.Записать();

Как избежать дублей при программном создании

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

bsl
Ссылка = Справочники.Номенклатура.НайтиПоНаименованию("Кабель ВВГнг 3х2,5");
Если Ссылка.Пустая() Тогда
    НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
    НовыйЭлемент.Наименование = "Кабель ВВГнг 3х2,5";
    НовыйЭлемент.Записать();
Иначе
    Сообщить("Такой элемент уже существует");
КонецЕсли;

Учтите ограничение: поиск по наименованию не защищает от дублей с разным написанием («Кабель ВВГнг» и «кабель ввгнг»). Для надёжной идентификации лучше использовать поиск по реквизиту с уникальным значением — артикулу, ИНН, внешнему коду — методом НайтиПоРеквизиту().

Проверка результата и типичные ошибки

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

Контрольные точки

Как проверить результат

Ссылка после записи
Норма

Свойство Ссылка заполнено, Пустая() возвращает Ложь

Тревожный признак

Ссылка пустая — Записать() не вызван или завершился ошибкой

Отображение в списке
Норма

Элемент виден в форме списка справочника

Тревожный признак

Элемента нет — проверьте отбор списка, пометку удаления или группу родителя

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

Записать() выполняется без исключений

Тревожный признак

Ошибка «Не заполнено значение» — не заполнен обязательный реквизит

Иерархия
Норма

Элемент находится в нужной группе

Тревожный признак

Элемент попал в корень — не заполнен реквизит Родитель

Типичные ошибки
01
Забыли вызвать Записать() — объект остался в памяти и исчез после завершения процедуры.
02
Создали элемент вместо группы (или наоборот) — нарушилась иерархия, элемент нельзя выбрать как папку.
03
Не проверили дубли — в справочнике появились одинаковые позиции, что ломает отчёты и учёт.
04
Заполнили реквизит строкой вместо ссылки — ошибка несоответствия типов при записи.
05
Создавали элементы в цикле без транзакции — при сбое часть данных записалась, часть нет.

Частые вопросы

Чем отличается СоздатьЭлемент() от ПолучитьСсылку()?

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

Можно ли задать код элемента вручную?

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

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

Код одинаков в любом контексте: Справочники.Имя.СоздатьЭлемент(), заполнение, Записать(). Разница только в том, откуда берутся данные для реквизитов — из реквизитов текущего объекта, параметров обработки или внешнего файла.

Почему элемент создался, но его не видно в списке?

Чаще всего причина в установленном отборе списка, отображении по иерархии (элемент попал не в ту группу) или в том, что элемент сразу был помечен на удаление другим процессом. Снимите отборы и обновите список.

Как создать сразу много элементов из таблицы или файла?

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

Нужны ли особые права для программного создания элементов?

Да. Проверки прав работают и для кода, выполняемого в пользовательском сеансе. Если у пользователя нет права «Добавление» на справочник, Записать() вызовет ошибку нарушения прав доступа. В серверных процедурах можно использовать УстановитьПривилегированныйРежим(), но это должно быть осознанным решением разработчика.

Итог

Что важно запомнить

Вручную объект справочника создаётся кнопкой «Создать» с заполнением обязательных реквизитов. Программно — через Справочники.Имя.СоздатьЭлемент() с обязательным вызовом Записать(). Для групп используется СоздатьГруппу(), для иерархии — реквизит Родитель. Перед созданием проверяйте дубли, права и обязательные поля, а массовую загрузку выполняйте после резервного копирования.