Как настроить автозаполнение полей в документах 1С

· 9 мин

Содержание

Автозаполнение в 1С 8.3 — это не одна кнопка, а четыре разных механизма. Реквизиты документа подставляются из значений по умолчанию при создании, табличную часть наполняет кнопка Заполнить, новый документ собирается из другого через ввод на основании, а нестандартную логику добавляют в обработчике ОбработкаЗаполнения. Для реквизитов, которые всегда одинаковы — организация, склад, ответственный, — хватает настроек; для расчёта по данным нужен код.

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

Из чего состоит автозаполнение в 1С

Под одним словом скрывается несколько независимых механизмов. Их полезно различать, потому что настраиваются они в разных местах:

  • 🔹 Значения по умолчанию реквизитов — поле подставляется само при создании объекта. Задаётся свойством «Значение заполнения» в конфигураторе.
  • 🔹 Кнопка Заполнить — наполняет табличную часть по заложенной логике (по остаткам, по документу-основанию, по подбору).
  • 🔹 Ввод на основании — создаёт новый документ и переносит в него реквизиты из исходного (команда Создать на основании).
  • 🔹 Автоподбор при вводе — когда вы печатаете в поле-ссылке, система предлагает совпадения из справочника (свойства «Быстрый выбор» и «Автоподстановка»).
  • 🔹 Программное заполнение — код в обработчике объекта или в событии формы для сложных правил.

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

Важно не путать автозаполнение реквизитов (одно поле) и заполнение табличной части (строки). Реквизиты закрываются значениями по умолчанию и событиями формы, а строки таблицы — кнопкой Заполнить, подбором или загрузкой из файла. От этого зависит, какой из способов ниже вам нужен.

Какой способ автозаполнения вам нужен?

Значения по умолчанию без программирования

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

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

Ответственный = текущий пользователь. В типовых конфигурациях поле «Ответственный» или «Автор» заполняется тем, кто создаёт документ. Отдельно включать это не нужно.

«Значение заполнения» реквизита. В конфигураторе у каждого реквизита справочника или документа есть свойство «Значение заполнения». Туда можно положить фиксированное значение (например, вид операции по умолчанию) или указать «Заполнять из данных заполнения». Значение подставляется только при создании нового объекта — на уже сохранённые документы оно не влияет.

Автоподбор при вводе. Когда поле ссылается на справочник, 1С по мере набора предлагает подходящие элементы. Это поведение задаётся свойствами реквизита формы и в типовых конфигурациях обычно уже включено. Поиск идёт по наименованию и коду, а если справочник небольшой — список раскрывается сразу по нажатию на поле (свойство «Быстрый выбор»).

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

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

Кнопка «Заполнить» и ввод на основании

Эти два механизма закрывают большинство задач «перенести данные из одного документа в другой».

Ввод на основании. Откройте исходный документ или выделите его в списке и нажмите Создать на основании (кнопка с иконкой в командной панели). Система предложит типы документов, которые можно создать, и перенесёт в них реквизиты: контрагента, договор, суммы, табличную часть. Это стандартная цепочка — например, из «Заказа покупателя» в «Реализацию», из «Поступления» в «Счёт-фактуру».

Кнопка Заполнить. В открытом документе она наполняет табличную часть по заложенному правилу. Варианты зависят от документа: «Заполнить по остаткам», «Подобрать номенклатуру», «Заполнить по документу-основанию». Логику этой кнопки на уровне платформы реализует обработчик ОбработкаЗаполнения.

При вводе на основании в новом документе сохраняется ссылка на исходный, поэтому цепочку легко отследить через «Связанные документы» или структуру подчинённости — это помогает понять, откуда взялись подставленные значения.

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

Автозаполнение через обработчики и события формы

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

Обработчик ОбработкаЗаполнения в модуле объекта срабатывает при создании нового документа, в том числе при вводе на основании. В параметр ДанныеЗаполнения приходит объект-основание:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Контрагенты") Тогда
        Контрагент = ДанныеЗаполнения;
        Комментарий = "Создано по контрагенту: " + Контрагент.Наименование;
    КонецЕсли;
КонецПроцедуры

Событие формы ПриСозданииНаСервере подходит, когда значение нужно вычислить при открытии формы нового документа. Обязательно проверяйте, что документ ещё не записан, иначе перезапишете данные в старых документах:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Объект.Ссылка.Пустая() Тогда
        Объект.Комментарий = "Черновик";
    КонецЕсли;
КонецПроцедуры

Функция ЗаполнитьЗначенияСвойств копирует одноимённые реквизиты из источника в приёмник одной строкой — удобно при переносе данных между объектами:

ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);

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

Весь этот код правильно размещать в расширении конфигурации, а не в самой типовой. Расширения появились в платформе 8.3.6; вы создаёте отдельный файл .cfe, добавляете в него обработчик и подключаете через Администрирование → Печатные формы, отчёты и обработки → Расширения. После загрузки расширения выполняется шаг «Обновить конфигурацию базы данных» — это отдельное действие, без него изменения не вступают в силу.

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

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

Загрузка данных из Excel и внешних источников

Часть автозаполнения приходит не из самой базы, а из файлов и смежных систем — прайсы, остатки, выгрузки из других программ.

Без кода — стандартной обработкой. Для номенклатуры и ряда справочников в типовых конфигурациях есть загрузка из табличного документа: вы открываете файл Excel, сопоставляете колонки файла с реквизитами 1С и запускаете перенос. Это закрывает большинство разовых загрузок прайсов и каталогов.

Кодом — через ТабличныйДокумент. Платформа 8.3 в актуальных релизах читает .xlsx напрямую, без установленного Excel:

ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\Обмен\Прайс.xlsx");
Для Строка = 2 По ТабДок.ВысотаТаблицы Цикл
    Наименование = ТабДок.Область(Строка, 1).Текст;
    Цена         = ТабДок.Область(Строка, 2).Текст;
КонецЦикла;

Сопоставление колонок файла и полей базы удобно держать перед глазами при настройке загрузки:

Сопоставление полей
Колонка A (Наименование)→Справочник «Номенклатура»
Колонка B (Цена)→Регистр «Цены номенклатуры»
Колонка C (Артикул)→Реквизит «Артикул»
Колонка D (Ставка НДС)→Справочник «Ставки НДС»

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

ЦенаЧисло = Число(СтрЗаменить(ТабДок.Область(Строка, 2).Текст, ",", "."));

Так же стоит заранее проверить формат дат в исходном файле: Excel хранит их по-разному, и строка 01.02.2026 и серийный номер даты читаются не одинаково.

Через COM (Новый COMОбъект("Excel.Application")) данные тоже читаются, но этот способ медленнее и требует установленного Excel на сервере — на потоковых задачах его лучше не использовать.

Из внешних систем по API. Если данные подтягиваются из сайта, CRM или другой программы, применяют HTTPСоединение и обмен по расписанию (регламентное задание). Это уже не разовое автозаполнение, а постоянная синхронизация, и настраивается она как отдельный обмен.

Типичные ошибки при настройке автозаполнения

Эти ошибки встречаются чаще всего — и почти все сводятся к непониманию, когда именно срабатывает механизм.

  • Задали «Значение заполнения», а поле пустое. Значение подставляется при создании объекта. В уже сохранённых документах оно не появится — их нужно перезаполнять вручную.
  • ОбработкаЗаполнения не срабатывает при ручном создании. Если документ создаётся не на основании, параметр ДанныеЗаполнения пустой — проверяйте его на заполненность перед обращением к свойствам.
  • ПриСозданииНаСервере перезаписывает данные. Без проверки Объект.Ссылка.Пустая() код сработает и при открытии старого документа, затерев значения.
  • Правку внесли в типовую конфигурацию напрямую. При следующем обновлении изменения потеряются. Любую свою логику выносите в расширение.
  • Excel: числа читаются как текст, даты сдвигаются. Свойство .Текст отдаёт строку — приводите её к числу или дате явно и проверяйте формат ячеек в исходном файле.

Где задаются значения по умолчанию в разных конфигурациях

Сами механизмы одинаковы во всех конфигурациях на платформе 8.3 — это поведение платформы, а не отдельной программы. Различается только то, какие значения подставляются по умолчанию и где их найти пользователю.

КонфигурацияЧто подставляется само
Бухгалтерия 3.0Единственная организация; ответственный — текущий пользователь
ЗУП 3.1Организация; подразделение — из настроек сотрудника-пользователя
Управление торговлей 11, ERPОрганизация и склад выносят в личные настройки пользователя — баз с несколькими организациями и складами здесь большинство

В УТ 11 и ERP искать персональные значения по умолчанию стоит в разделе НСИ и администрирование; в Бухгалтерии — в разделе Главное. Точное название пункта может отличаться между релизами, но раздел верхнего уровня стабилен.

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

Чем «Значение заполнения» отличается от обработчика `ОбработкаЗаполнения`?
«Значение заполнения» — это фиксированное значение или простая подстановка из данных заполнения, которую задают мышкой в конфигураторе. ОбработкаЗаполнения — код, который вычисляет значение по любой логике. Простое значение — настройкой, зависимое — кодом.
Нужны ли права конфигуратора для автозаполнения?
Для ввода на основании, кнопки Заполнить и личных настроек — нет, это доступно пользователю. Для значений по умолчанию и программной логики нужен доступ к конфигуратору или к расширению.
Почему поле заполняется в новом документе, а в старых пусто?
Автозаполнение срабатывает один раз — в момент создания объекта. На документы, созданные раньше, оно не распространяется: их придётся открыть и заполнить заново.
Можно ли настроить автозаполнение без изменения типовой конфигурации?
Да. Личные настройки и ввод на основании типовую не трогают вовсе, а свою программную логику размещают в расширении конфигурации — оно не ломает обновления.
Читает ли 1С файлы .xlsx напрямую?
Да, в актуальных релизах платформы 8.3 объект ТабличныйДокумент читает .xlsx без установленного Excel. Старый способ через COM-объект тоже работает, но медленнее и требует Excel на сервере.
Можно ли заполнять документы автоматически по расписанию?
Да, через регламентное задание. Оно создаёт объект программно, вызывает ту же логику заполнения, что и кнопка Заполнить, и записывает документ. Такой сценарий применяют для регулярных операций — например, формирования типовых документов в начале месяца.