Справочники и Данные · 12 мин
Как записать данные в справочник 1С
Как записать данные в справочник 1С: создание элемента вручную, программная запись на встроенном языке, обмен данными и типичные ошибки при работе со справочниками.
Справочник в 1С — это объект конфигурации для хранения условно-постоянной нормативно-справочной информации: номенклатуры, контрагентов, сотрудников, складов, договоров. Записать данные в справочник можно тремя основными способами: вручную через пользовательский интерфейс, программно на встроенном языке 1С и через механизмы загрузки или обмена. Выбор способа зависит от объёма данных, прав пользователя и того, разовая это операция или регулярная задача.
Для разовой записи одного элемента достаточно стандартной формы справочника. Для массового создания элементов, загрузки из Excel или интеграции с внешней системой потребуется программная запись через объектную модель — Справочники.ИмяСправочника.СоздатьЭлемент() с последующим вызовом метода Записать(). Оба подхода подробно разобраны ниже с примерами кода и проверкой результата.
Перед любыми массовыми изменениями сделайте резервную копию информационной базы. Ошибка в коде загрузки может создать тысячи некорректных или дублирующих элементов, удаление которых займёт значительно больше времени, чем восстановление из копии.
Что нужно проверить перед записью в справочник
Прежде чем создавать элементы, убедитесь, что у вашей учётной записи есть права на добавление и изменение данных этого справочника. В типовых конфигурациях доступ регулируется ролями: например, право на редактирование номенклатуры может быть отдельно от права на редактирование контрагентов. Если кнопка «Создать» недоступна или неактивна — обратитесь к администратору за назначением нужной роли.
Также изучите структуру справочника: какие реквизиты обязательны для заполнения, есть ли иерархия (группы элементов), подчинённые справочники и предопределённые элементы. Например, у справочника «Номенклатура» обычно обязательны наименование и единица измерения, а у «Контрагенты» — наименование и вид контрагента. Незаполненные обязательные реквизиты не дадут записать элемент: система выдаст сообщение об ошибке проверки заполнения.
Кнопка «Создать» активна в списке справочника
Откройте форму элемента и посмотрите отметки незаполненного
Есть ли в списке папки и дерево групп
Выполните поиск по наименованию и ИНН/коду
Как записать элемент справочника вручную
Ручная запись подходит для разового добавления небольшого количества элементов. Откройте нужный справочник через главное меню или панель разделов (например, «Справочники» → «Номенклатура» или «Покупки» → «Номенклатура» в зависимости от конфигурации). Нажмите кнопку «Создать» — откроется форма нового элемента.
Заполните наименование и обязательные реквизиты. Если справочник иерархический, сначала выберите или создайте группу, в которую должен попасть элемент. После заполнения нажмите «Записать» — элемент сохранится, форма останется открытой, либо «Записать и закрыть» — элемент сохранится и форма закроется. Если система сообщает об ошибке, прочитайте текст сообщения: в нём указано, какой именно реквизит не заполнен или какое условие нарушено.
- 1Откройте список справочника через меню или панель разделов
- 2При иерархии выберите нужную группу или создайте её
- 3Нажмите «Создать» и заполните наименование и обязательные реквизиты
- 4Нажмите «Записать» и убедитесь в отсутствии сообщений об ошибках
- 5Проверьте, что элемент появился в списке и открывается с корректными данными
Запись группы в иерархическом справочнике
Группы создаются отдельной кнопкой «Создать группу» (или через выпадающий список кнопки «Создать»). У группы обычно заполняется только наименование — остальные реквизиты элемента для группы недоступны. Учитывайте это при программной записи: для групп используется метод СоздатьГруппу(), а не СоздатьЭлемент().
Как программно создать и записать элемент справочника
Программная запись выполняется через объектную модель встроенного языка. Типовой алгоритм: получить менеджер справочника, создать объект нового элемента, заполнить реквизиты, вызвать метод Записать(). Минимальный пример для справочника «Номенклатура»:
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Кабель ВВГ 3х2.5";
НовыйЭлемент.Артикул = "KB-001";
НовыйЭлемент.Записать();
Метод Записать() выполняет проверку заполнения, вызывает обработчики событий (ПередЗаписью, ПриЗаписи) и сохраняет объект в базу данных. Если проверка не пройдена, будет вызвано исключение — в массовой загрузке оборачивайте запись в конструкцию Попытка ... Исключение ... КонецПопытки и логируйте ошибки, чтобы не потерять информацию о незаписанных элементах.
Для иерархического справочника задайте родителя через реквизит Родитель, передав ссылку на группу. Ссылку на существующую группу можно получить поиском по наименованию или коду:
Группа = Справочники.Номенклатура.НайтиПоНаименованию("Кабельная продукция", Истина);
Если Группа.Пустая() Тогда
НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();
НоваяГруппа.Наименование = "Кабельная продукция";
НоваяГруппа.Записать();
Группа = НоваяГруппа.Ссылка;
КонецЕсли;
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Родитель = Группа;
НовыйЭлемент.Наименование = "Кабель ВВГ 3х2.5";
НовыйЭлемент.Записать();
Как изменить существующий элемент
Для изменения сначала нужно получить ссылку на элемент — поиском по коду, наименованию, реквизиту или из параметров запроса. Затем вызвать у ссылки метод ПолучитьОбъект(), изменить реквизиты и записать:
СсылкаНаЭлемент = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если Не СсылкаНаЭлемент.Пустая() Тогда
ЭлементОбъект = СсылкаНаЭлемент.ПолучитьОбъект();
ЭлементОбъект.Артикул = "KB-001-NEW";
ЭлементОбъект.Записать();
КонецЕсли;
Учтите, что ПолучитьОбъект() загружает весь объект в память. При обработке больших объёмов, когда нужно только прочитать данные без изменения, обращайтесь к реквизитам напрямую через ссылку (например, СсылкаНаЭлемент.Наименование) — это быстрее и не блокирует объект.
Запись табличных частей и подчинённых справочников
Многие справочники содержат табличные части — например, «Единицы измерения» у номенклатуры или «Контактная информация» у контрагентов. Табличная часть заполняется добавлением строк перед записью объекта:
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Кабель ВВГ 3х2.5";
НоваяСтрока = НовыйЭлемент.ДополнительныеРеквизиты.Добавить();
НоваяСтрока.Свойство = СвойствоЦвет;
НоваяСтрока.Значение = "Чёрный";
НовыйЭлемент.Записать();
Подчинённые справочники (например, «Договоры контрагентов», подчинённые справочнику «Контрагенты») требуют указания владельца через реквизит Владелец. Владелец должен быть уже записан в базу — нельзя сослаться на объект, у которого ещё нет ссылки. Порядок действий: сначала записать владельца, затем создать подчинённый элемент и присвоить Владелец = СсылкаНаВладельца.
Массовая загрузка данных в справочник
Для загрузки десятков и тысяч элементов ручной ввод неприемлем. Основные варианты: типовая обработка «Загрузка данных из табличного документа» (есть в конфигурациях на БСП), загрузка через универсальный обмен данными XML, собственная обработка с чтением Excel/CSV и программной записью, а также интеграция через web-сервисы или HTTP-запросы.
При массовой загрузке критичны три вещи: контроль дублей (перед созданием ищите существующий элемент по ключевым реквизитам — ИНН, артикулу, наименованию), пакетная запись в транзакциях разумного размера и журналирование ошибок. Не записывайте всё в одной транзакции: при ошибке откатится вся пачка, а длинная транзакция вызовет блокировки у других пользователей.
Способы записи данных в справочник
Разовое добавление элементов пользователем; не требует навыков программирования, но непригоден для больших объёмов
Загрузка из Excel в конфигурациях на БСП; подходит бухгалтеру, но требует аккуратного сопоставления колонок
Гибкая логика, контроль дублей, любые источники; требует разработчика и тестирования на копии
Регулярная синхронизация с другими системами; сложная настройка, но автоматическая работа
Проверка результата и типичные ошибки
После записи — ручной или программной — проверьте результат: откройте элемент в списке, убедитесь, что реквизиты заполнены корректно, элемент попал в нужную группу, а табличные части содержат ожидаемые строки. При массовой загрузке сверьте количество созданных элементов с количеством строк в источнике и разберите все записи журнала ошибок.
Как проверить результат записи
Элемент виден, открывается, реквизиты заполнены
Элемент отсутствует или не открывается
Совпадает с числом строк источника минус зафиксированные ошибки
Расхождение без объяснения в журнале
Поиск по ключевым реквизитам находит один элемент
Несколько элементов с одинаковым ИНН или артикулом
Родитель и владелец заполнены, ссылки открываются
Пустой родитель или «Объект не найден»
Часто задаваемые вопросы
Чем отличается СоздатьЭлемент() от СоздатьГруппу()?
Первый метод создаёт элемент справочника с полным набором реквизитов, второй — группу (папку) в иерархическом справочнике. У группы доступно в основном только наименование, и она служит для классификации элементов. Если справочник не иерархический, метод СоздатьГруппу() недоступен.
Как найти элемент справочника перед записью, чтобы не создать дубль?
Используйте методы менеджера: НайтиПоКоду(), НайтиПоНаименованию() или НайтиПоРеквизиту() для поиска по произвольному полю (например, по ИНН). Если метод вернул пустую ссылку — элемента нет, можно создавать новый. Для сложных условий поиска применяйте запрос.
Почему при вызове Записать() возникает ошибка проверки заполнения?
Не заполнен один или несколько обязательных реквизитов, либо значение не проходит проверку в обработчике ОбработкаПроверкиЗаполнения. Текст исключения указывает конкретное поле. Заполните его корректным значением нужного типа — для ссылочных реквизитов это должна быть ссылка, а не строка.
Можно ли записать элемент справочника без прав администратора?
Да, если у вашей роли есть права на добавление и изменение конкретного справочника. Прав администратора для этого не требуется. Если кнопка «Создать» недоступна, попросите администратора выдать соответствующую роль или профиль группы доступа.
Как записать данные в предопределённый элемент справочника?
Предопределённые элементы создаются в конфигураторе и изменять их составные свойства (например, имя) в пользовательском режиме нельзя. Программно ссылку на такой элемент получают по имени: Справочники.ИмяСправочника.ИмяПредопределённого. Реквизиты, не защищённые конфигурацией, изменить можно обычным способом через ПолучитьОбъект() и Записать().
Что делать, если массовая загрузка создала дубли?
Не удаляйте элементы вручную по одному — сначала определите, какие из дублей уже использованы в документах. В типовых конфигурациях есть обработка «Поиск и удаление дублей», которая объединяет элементы с заменой ссылок во всех объектах. Перед запуском сделайте резервную копию и проверьте результат на небольшой выборке.
Что важно запомнить
Разовую запись выполняйте вручную через форму элемента, массовую — программно через СоздатьЭлемент() и Записать() с контролем дублей и обработкой ошибок. Подчинённые элементы записывайте после владельца, группы — через СоздатьГруппу(). Перед массовыми операциями делайте резервную копию и тестируйте код на копии базы.