Автоматизация · 11 мин
Как автоматически заполнять реквизит в 1С
Как настроить автоматическое заполнение реквизитов в 1С: подстановка по умолчанию, формулы, обработчики событий и расширения. Пошаговые инструкции и типичные ошибки.
Ручной ввод повторяющихся значений в документах и справочниках 1С отнимает время и провоцирует ошибки: менеджер забывает указать склад, бухгалтер выбирает не тот договор, оператор оставляет пустым поле «Организация». Автоматическое заполнение реквизитов решает эту задачу несколькими способами — от простой настройки значений по умолчанию до программной подстановки через расширение конфигурации.
Выбор способа зависит от того, есть ли у вас доступ к конфигуратору, работаете ли вы в типовой конфигурации без доработок и насколько сложна логика подстановки. В большинстве случаев задачу можно решить вообще без изменения конфигурации — средствами пользовательских настроек или механизма значений по умолчанию.
Ниже разобраны основные подходы: подстановка значений по умолчанию, заполнение по данным связанных объектов, обработчики событий формы, расширения конфигурации и внешние обработки. Для каждого способа указаны условия применения, ограничения и способ проверки результата.
Какие способы автозаполнения существуют и как выбрать подходящий
Прежде чем настраивать, определите источник значения. Если реквизит почти всегда один и тот же для конкретного пользователя (склад, подразделение, касса) — подойдут значения по умолчанию. Если значение зависит от другого поля документа (договор от контрагента, банковский счёт от организации) — нужна подстановка по связи. Если логика сложная, с условиями и проверками — потребуется код.
Второй критерий — допустимость доработки. В типовых конфигурациях на поддержке прямое изменение модулей усложняет обновление. В этом случае предпочтительны расширения конфигурации или механизмы, встроенные в пользовательский режим.
Сравнение способов автозаполнения
Подходит для постоянных значений пользователя: склад, подразделение, организация. Настраивается без конфигуратора, но не поддерживает условную логику.
Реквизит берётся из карточки контрагента, договора, номенклатуры. Работает в типовых конфигурациях автоматически, но только для предусмотренных разработчиком связей.
Гибкая логика любой сложности, но требует доступа к конфигуратору и усложняет обновление типовых решений.
Программная логика без снятия конфигурации с поддержки. Оптимально для типовых решений, но требует навыков разработки на встроенном языке.
Подключаются через «Дополнительные отчеты и обработки». Заполняют табличные части и реквизиты по кнопке, но не срабатывают автоматически при создании.
Настройка значений по умолчанию без программирования
Самый простой способ — задать значения, которые система будет подставлять при создании новых документов. В большинстве типовых конфигураций (Бухгалтерия предприятия, Управление торговлей, ERP) это делается через персональные настройки пользователя.
Например, в 1С:Бухгалтерии основная организация, склад и подразделение задаются в разделе «Главное — Персональные настройки» или через форму «Организации». В Управлении торговлей аналогичные настройки находятся в разделе «Настройки и администрирование — Персональные настройки». После указания значений новые документы создаются уже с заполненными полями.
Дополнительно многие документы запоминают последние введённые значения: если вы создали реализацию со складом «Основной», следующий документ откроется с тем же складом. Это штатное поведение, и его можно использовать осознанно — первым документом дня задавать нужные реквизиты.
- 1Откройте раздел персональных настроек (обычно «Главное» или «Настройки и администрирование»).
- 2Найдите блок «Значения по умолчанию» или аналогичный по названию.
- 3Укажите основную организацию, склад, подразделение, кассу — те реквизиты, которые повторяются в ваших документах.
- 4Создайте новый документ и проверьте, что поля заполнились автоматически.
- 5Если поле осталось пустым — проверьте, не переопределяется ли значение настройками учётной политики или правами пользователя.
Подстановка реквизитов из связанных объектов
В типовых конфигурациях многие реквизиты заполняются автоматически при выборе связанного значения. Выбрали контрагента — подставился основной договор. Выбрали организацию — подставился её банковский счёт. Выбрали номенклатуру — подтянулись единица измерения, ставка НДС и счета учёта.
Этот механизм работает только при условии, что связанные данные корректно заполнены в справочниках. Если договор не подставляется, почти всегда причина в том, что у контрагента несколько договоров и ни один не помечен как основной, либо договор не соответствует виду операции документа (например, договор «С покупателем» не подставится в документ поступления).
Чтобы механизм работал стабильно, поддерживайте порядок в справочниках: заполняйте в карточках контрагентов основной договор и банковский счёт, в карточках номенклатуры — ставку НДС и единицу измерения, в карточках организаций — основной счёт. Разовая настройка справочников избавит от ручного ввода в тысячах документов.
Программное заполнение через обработчики событий
Когда логика сложнее простой подстановки, используют обработчик ОбработкаЗаполнения в модуле объекта. Он вызывается при создании нового элемента и позволяет заполнить любые реквизиты по произвольному алгоритму.
Типовой пример — заполнение ответственного текущим пользователем и даты документа текущей датой:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Ответственный = Пользователи.ТекущийПользователь();
Если НЕ ЗначениеЗаполнено(Склад) Тогда
Склад = Справочники.Склады.НайтиПоНаименованию("Основной");
КонецЕсли;
КонецПроцедуры;
Если значение должно пересчитываться при изменении другого поля, используют обработчик ПриИзменении в модуле формы. Например, при выборе контрагента программно подставлять договор с учётом дополнительных условий — валюты, даты действия, признака действующего.
Помните о разделении контекста: обращение к данным базы (запросы, поиск ссылок) допустимо только в серверных процедурах. В клиентском обработчике ПриИзменении вызывайте серверную процедуру, иначе получите ошибку выполнения или замедление формы.
Расширения конфигурации и внешние обработки
Расширение — способ добавить программную логику, не меняя типовую конфигурацию. В расширении можно заимствовать модуль объекта или формы и дописать обработчики ОбработкаЗаполнения или ПриИзменении с аннотациями &После или &Вместо. Конфигурация остаётся на поддержке, обновления устанавливаются штатно.
Альтернатива без конфигуратора — внешние обработки заполнения табличных частей. Они подключаются через «Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки» и добавляют в документ кнопку «Заполнить». Минус: обработка срабатывает только по нажатию кнопки, а не автоматически при создании документа.
Для массового заполнения уже существующих документов используют обработку «Групповое изменение реквизитов» (в типовых конфигурациях доступна в разделе «Администрирование»). Она позволяет установить значение реквизита сразу для отобранного списка объектов — например, проставить склад во всех накладных за период.
&После("ОбработкаЗаполнения")
Процедура Расш1_ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если НЕ ЗначениеЗаполнено(Подразделение) Тогда
Подразделение = Справочники.Подразделения.НайтиПоКоду("000000001");
КонецЕсли;
КонецПроцедурыПроверка результата и типичные ошибки
После настройки проверьте автозаполнение в трёх сценариях: создание документа вручную, копирование существующего документа и ввод на основании другого документа. В каждом сценарии логика заполнения может отличаться — например, при копировании реквизиты берутся из исходника, а обработчик заполнения не вызывается.
Также проверьте работу под пользователями с ограниченными правами: если у пользователя нет прав на чтение справочника, из которого подставляется значение, поле останется пустым без видимой ошибки.
Как проверить результат
Реквизит заполнен сразу при открытии формы
Поле пустое или заполняется только после записи
Значение не противоречит данным основания
Подставлено значение по умолчанию, конфликтующее с документом-основанием
Поле заполняется так же, как у администратора
Поле пустое, в журнале регистрации ошибки доступа
Реквизит соответствует ожидаемой логике
Унаследовано устаревшее значение из исходного документа
FAQ: частые вопросы об автозаполнении реквизитов
Можно ли настроить автозаполнение без программиста?
Да, если речь о постоянных значениях (организация, склад, касса) — достаточно персональных настроек. Подстановка из связанных справочников тоже работает штатно, нужно лишь корректно заполнить карточки контрагентов и номенклатуры. Программист понадобится только для условной логики.
Почему реквизит заполняется у одного пользователя и не заполняется у другого?
Наиболее частые причины: значения по умолчанию заданы только для одного пользователя, у второго нет прав на чтение справочника-источника, либо у пользователей разные роли и разный состав функциональных опций. Проверьте персональные настройки и права доступа.
Как заполнить реквизит сразу во всех существующих документах?
Используйте штатную обработку «Групповое изменение реквизитов» из раздела «Администрирование». Отберите нужные документы, укажите реквизит и новое значение. Перед запуском на большом объёме сделайте резервную копию и сначала проверьте обработку на нескольких документах.
Почему при загрузке документов из файла реквизиты не заполняются автоматически?
Обработчики подстановки, привязанные к интерактивному выбору полей в форме, при программной загрузке не срабатывают. Значения должны либо присутствовать в файле загрузки, либо заполняться в обработчике ОбработкаЗаполнения объекта, который вызывается и при программном создании.
Что лучше для типовой конфигурации: доработка модуля или расширение?
Расширение. Оно не снимает конфигурацию с поддержки, обновления устанавливаются без конфликтов, а доработку легко отключить. Прямое изменение модулей оправдано только когда задачу невозможно решить через заимствование обработчиков в расширении.
Как сделать, чтобы автозаполнение не затирало значение, введённое вручную?
В программной логике всегда оборачивайте присвоение в проверку: Если НЕ ЗначениеЗаполнено(Реквизит) Тогда … КонецЕсли. Тогда подстановка сработает только для пустого поля, а введённое пользователем значение сохранится.
Что важно запомнить
Начните с простых способов: персональные настройки и корректно заполненные справочники закрывают большинство задач автозаполнения. Для условной логики используйте расширение конфигурации, а не прямую доработку модулей. Всегда проверяйте заполнение в сценариях копирования, ввода на основании и под пользователями с ограниченными правами.