Новый документ в конфигураторе 1С 8.3: от реквизитов до кода проведения

· 9 мин

Содержание

Документ в 1С создают в Конфигураторе: в дереве метаданных правой кнопкой по ветке Документы → Добавить. Откроется окно редактирования объекта. В нём по вкладкам задают имя, нумерацию, реквизиты и табличные части, регистры для движений и формы. Код пишут в модуле объекта (ОбработкаПроведения, ПередЗаписью), в модуле менеджера и в модуле формы. Затем F7 (обновить конфигурацию базы данных) и F5 (запуск в режиме 1С:Предприятие).

Ниже описана платформа 8.3 с управляемыми формами, одинаково для любой конфигурации. Последний раздел — сквозной пример: документ «Заказ покупателя» с табличной частью и проведением по регистру.

Что такое документ в 1С и чем он отличается от справочника

Справочник хранит условно-постоянные данные: контрагентов, товары, склады. Документ фиксирует событие на дату: продажу, поступление, заказ. Поэтому у каждого документа платформа сама создаёт стандартные реквизиты:

  • 📅 Дата — момент события, с точностью до секунды;
  • 🔢 Номер — строка или число, по правилам нумерации;
  • ✅ Проведен — признак того, что документ сформировал движения;
  • 🗑 ПометкаУдаления и Ссылка — как у всех ссылочных объектов.

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

Если объект нужен только для хранения бумаги без влияния на учёт (например, «Служебная записка»), ставьте у него Проведение: Запретить. Тогда кнопки «Провести» в форме не будет, и пользователи не запутаются.

Как создать документ в конфигураторе: пошагово

Подготовка

  1. Сделайте копию базы : Администрирование → Выгрузить информационную базу в Конфигураторе.
  2. Если конфигурация типовая и стоит на поддержке, решите, куда добавлять объект. Правка основной конфигурации снимает её с поддержки (полностью или частично) и усложняет обновления. Для доработок типовых удобнее расширение конфигурации: в актуальных версиях платформы в нём можно создавать собственные документы.
  3. Откройте конфигурацию: Конфигурация → Открыть конфигурацию.

Создание объекта

  1. В дереве найдите ветку Документы, щёлкните правой кнопкой → Добавить.
  2. На вкладке Основные заполните Имя — латиница не обязательна, принято писать слитно с большой буквы: ЗаказПокупателя. Синоним система подставит сама («Заказ покупателя»), его видят пользователи.
  3. Укажите Представление объекта и Представление списка, если синоним не подходит для заголовков окон.
  4. На вкладке Подсистемы отметьте раздел, в котором документ должен появиться в командном интерфейсе.

Нумерация

На вкладке Нумерация задают:

СвойствоЧто выбратьЗачем
Тип номераСтрока или ЧислоСтрока позволяет префиксы организации и базы
Длина номераобычно 9–11Хватит на годы работы с префиксом
Допустимая длинаПеременная или ФиксированнаяФиксированная дополняет номер нулями
АвтонумерацияВключенаНомер присвоится при первой записи
Контроль уникальностиВключенЗапрет двух документов с одним номером
ПериодичностьГод, квартал, месяц, день или непериодическийВ пределах какого периода номер уникален

Если несколько видов документов должны идти одной сквозной серией, создайте общий Нумератор (ветка Общие → Нумераторы) и укажите его в свойстве Нумератор.

Меняйте тип и длину номера до начала работы с базой. Если документы уже введены, изменение вызовет реструктуризацию таблиц, а сокращение длины обрежет номера.

Структура документа: реквизиты, табличные части, связи

Реквизиты шапки

На вкладке Данные в группе Реквизиты нажмите Добавить. Для каждого реквизита задайте имя и тип:

  • 🔗 ссылочный — СправочникСсылка.Контрагенты, ДокументСсылка.СчетНаОплату: так строятся связи между объектами;
  • 🔢 Число — с длиной и точностью: для суммы 15, 2, для количества 15, 3;
  • 📝 Строка — с ограниченной длиной. Строки неограниченной длины нельзя использовать в условиях сравнения, сортировке и группировке запроса без преобразования;
  • 📅 Дата, ✅ Булево;
  • 🧩 составной тип — когда в поле может стоять, например, и контрагент, и сотрудник. Удобно, но тяжелее для запросов.

Полезные свойства реквизита в палитре:

  • Проверка заполнения: Выдавать ошибку — платформа не даст провести документ с пустым полем;
  • Индексировать — только для полей, по которым часто отбирают список;
  • Связи параметров выбора — например, договор выбирается только у выбранного контрагента;
  • Значение заполнения — что подставить в новый документ.

Табличные части

Табличная часть — список строк внутри документа: товары, услуги, сотрудники. В группе Табличные части → Добавить, задайте имя (Товары) и добавьте ей свои реквизиты: Номенклатура, Количество, Цена, Сумма. Стандартный реквизит НомерСтроки создаётся автоматически.

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

Движения и формы

  • Вкладка Движения: отметьте регистры, в которые документ пишет данные. Здесь же свойства Проведение, Оперативное проведение, Удаление движений, Запись движений при проведении.
  • Вкладка Формы: нажмите кнопку создания рядом с полем Документа (основная форма объекта) и Списка. Конструктор формы соберёт форму со всеми реквизитами — потом её можно перекомпоновать.
  • Вкладка Ввод на основании: перечислите объекты, из которых можно создавать этот документ, и те, которые создаются из него.

Модуль документа: какой код где писать

У документа три места для кода. Перепутать их — частая причина ошибок «Метод объекта не обнаружен ».

МодульГде открытьЧто писать
Модуль объектавкладка Прочее → Модуль объектаСобытия записи и проведения конкретного экземпляра
Модуль менеджеравкладка Прочее → Модуль менеджераПечать, функции, не привязанные к экземпляру
Модуль формыоткрыть форму → вкладка МодульРеакция на действия пользователя, клиентский код

Основные события модуля объекта:

  • ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) — заполнение нового документа и ввод на основании;
  • ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) — свои проверки перед проведением;
  • ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) — расчёт итоговых полей, последняя проверка;
  • ОбработкаПроведения(Отказ, РежимПроведения) — формирование движений;
  • ОбработкаУдаленияПроведения(Отказ) — действия при отмене проведения.

Код движений проще всего начать конструктором движений: в модуле объекта откройте контекстное меню → Конструктор движений. Он сгенерирует цикл по табличной части с заполнением полей регистра — останется проверить и дописать.

В событиях ПередЗаписью и ПриЗаписи первой строкой ставьте проверку Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли;. Иначе при загрузке данных из обмена ваш код пересчитает или отклонит то, что пришло из другой базы.

Пример: документ «Заказ покупателя» с нуля

Задача: менеджер фиксирует заказ, а регистр показывает, сколько товара заказано по каждому клиенту.

1. Справочники и регистр

Если в учебной базе их нет, создайте:

  • справочники Контрагенты и Номенклатура (достаточно стандартного наименования);
  • регистр накопления ЗаказыПокупателей, вид Остатки. Измерения: Контрагент (СправочникСсылка.Контрагенты), Номенклатура (СправочникСсылка.Номенклатура). Ресурсы: Количество (Число 15, 3), Сумма (Число 15, 2).

2. Документ

  • Имя ЗаказПокупателя, нумерация: строка длиной 9, периодичность — год.
  • Реквизиты шапки: Контрагент (проверка заполнения — выдавать ошибку), СуммаДокумента (Число 15, 2), Комментарий (Строка 250).
  • Табличная часть Товары: Номенклатура, Количество (15, 3), Цена (15, 2), Сумма (15, 2).
  • На вкладке Движения отметьте регистр ЗаказыПокупателей.
  • Создайте форму документа и форму списка конструктором.

3. Код модуля объекта

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

	СуммаДокумента = Товары.Итог("Сумма");

КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

	Движения.ЗаказыПокупателей.Записывать = Истина;

	Для Каждого СтрокаТЧ Из Товары Цикл
		Движение = Движения.ЗаказыПокупателей.Добавить();
		Движение.ВидДвижения  = ВидДвиженияНакопления.Приход;
		Движение.Период       = Дата;
		Движение.Контрагент   = Контрагент;
		Движение.Номенклатура = СтрокаТЧ.Номенклатура;
		Движение.Количество   = СтрокаТЧ.Количество;
		Движение.Сумма        = СтрокаТЧ.Сумма;
	КонецЦикла;

КонецПроцедуры

Старые движения при перепроведении удалять вручную не нужно, если у документа стоит Удаление движений: Удалять автоматически.

4. Код формы: пересчёт суммы строки

В форме документа выделите колонку Количество табличной части, в палитре свойств найдите событие ПриИзменении и создайте обработчик. То же сделайте для колонки Цена, указав тот же обработчик.

&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)

	СтрокаТЧ = Элементы.Товары.ТекущиеДанные;
	Если СтрокаТЧ = Неопределено Тогда
		Возврат;
	КонецЕсли;

	СтрокаТЧ.Сумма = СтрокаТЧ.Количество * СтрокаТЧ.Цена;

КонецПроцедуры

Проверка арифметики: 3 шт. × 1 250,00 = 3 750,00 в колонке Сумма. При двух строках по 3 750,00 и 1 200,00 в шапке после записи окажется СуммаДокумента = 4 950,00.

5. Права и запуск

  1. Откройте роль, через которую работают пользователи (в учебной базе можно создать роль Менеджер), и дайте на документ права Чтение, Добавление, Изменение, Проведение, Отмена проведения, Просмотр, Интерактивное добавление, Редактирование. На регистр — минимум Чтение.
  2. F7 — обновить конфигурацию базы данных, принять изменения.
  3. F5 — запустить режим 1С:Предприятие, найти документ в выбранном разделе, создать, провести.
  4. Проверить движения: в панели навигации формы проведённого документа появится ссылка на регистр Заказы покупателей — откройте её и сверьте строки.
Документ готов к работе, если
Выполнено: 0 / 8

Типичные ошибки при создании документов

  • 🚫 Документа нет в интерфейсе. Не отмечена подсистема или у пользователя нет права Просмотр в роли. Администратор с полными правами при этом документ видит — отсюда путаница «у меня работает, у бухгалтера нет».
  • 🚫 Движения задваиваются. Стоит Удаление движений: Не удалять автоматически, а в коде нет очистки. Или в цикле забыли, что Добавить() вызывается на каждую строку, и добавили лишнее.
  • 🚫 Движения не записались. Не установлено Движения.<Регистр>.Записывать = Истина или регистр не отмечен на вкладке Движения.
  • 🚫 Ошибка в модуле формы с серверными объектами. На клиенте недоступны запросы и обращение к реквизитам ссылок через точку. Выносите такой код в процедуру с директивой &НаСервере.
  • 🚫 Типовая сняла с поддержки целиком. Документ добавили прямо в основную конфигурацию без расчёта на обновления. Для доработок типовых используйте расширение.
  • 🚫 Неточный тип числа. Сумма как Число 10, 0 — копейки отрезаются без предупреждения.

Как ускорить и упростить работу с документами

  1. Читайте данные запросом, а не через точку. СтрокаТЧ.Номенклатура.ВидНоменклатуры в цикле — это отдельное обращение к базе на каждую строку. Один запрос к табличной части с соединением быстрее.
  2. Используйте управляемый режим блокировок (свойство конфигурации Режим управления блокировкой данных). В обработке проведения устанавливайте блокировку БлокировкаДанных только на те записи регистра, остатки которых проверяете.
  3. Индексируйте с умом. Каждый индекс ускоряет отбор, но замедляет запись. Ставьте его на реквизиты, по которым реально фильтруют список.
  4. Не храните вычисляемое без нужды. СуммаДокумента хранить оправданно, потому что по ней сортируют список. Промежуточные суммы по строкам — нет.
  5. Выносите общее в общие модули. Если одна и та же логика нужна в трёх документах, держите её в общем модуле, а в модулях объектов оставляйте вызов.
  6. Включайте оперативное проведение только там, где нужен контроль остатков «на сейчас». Для заказов и служебных документов оно лишнее.
  7. Проверяйте на большом документе. Проведите заказ на 500–1 000 строк в отладчике и посмотрите замер производительности (Отладка → Замер производительности) — узкие места видно сразу.

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

Можно ли добавить документ в типовую конфигурацию без снятия с поддержки?
Да, через расширение конфигурации. Основная конфигурация остаётся на поддержке, обновления ставятся как обычно, а документ живёт в расширении.
Чем модуль объекта отличается от модуля менеджера?
Модуль объекта работает с конкретным документом: его реквизитами и проведением. Модуль менеджера — с документами этого вида в целом: печать, общие функции, обработка получения данных выбора.
Почему после F7 документ не открывается у пользователя?
Обычно не выданы права в роли или документ не включён в подсистему. Проверьте роль пользователя и вкладку Подсистемы документа.
Как удалить созданный документ из конфигурации?
Сначала найдите ссылки на него: правой кнопкой по объекту → Поиск ссылок на объект. Уберите их из других объектов, затем удалите документ и выполните F7. Данные этих документов в базе будут удалены.
Обязательно ли документу проводиться?
Нет. Если документ не меняет учёт, установите Проведение: Запретить. Он будет только записываться.