Новый документ в конфигураторе 1С 8.3: от реквизитов до кода проведения
Содержание
Документ в 1С создают в Конфигураторе: в дереве метаданных правой кнопкой по ветке Документы → Добавить. Откроется окно редактирования объекта. В нём по вкладкам задают имя, нумерацию, реквизиты и табличные части, регистры для движений и формы. Код пишут в модуле объекта (ОбработкаПроведения, ПередЗаписью), в модуле менеджера и в модуле формы. Затем F7 (обновить конфигурацию
базы данных) и F5 (запуск в режиме 1С:Предприятие).
Ниже описана платформа 8.3 с управляемыми формами, одинаково для любой конфигурации. Последний раздел — сквозной пример: документ «Заказ покупателя» с табличной частью и проведением по регистру.
Что такое документ в 1С и чем он отличается от справочника
Справочник хранит условно-постоянные данные: контрагентов, товары, склады. Документ фиксирует событие на дату: продажу, поступление, заказ. Поэтому у каждого документа платформа сама создаёт стандартные реквизиты:
- 📅
Дата— момент события, с точностью до секунды; - 🔢
Номер— строка или число, по правилам нумерации; - ✅
Проведен— признак того, что документ сформировал движения; - 🗑
ПометкаУдаленияиСсылка— как у всех ссылочных объектов.
Главное отличие — проведение. Сам документ лишь хранит данные. Изменения остатков, оборотов и проводок он записывает в регистры: накопления, сведений, бухгалтерии, расчёта. Эти записи называют движениями. Отчёты строятся по регистрам, а не по документам.
Если объект нужен только для хранения бумаги без влияния на учёт (например, «Служебная записка»), ставьте у него Проведение: Запретить. Тогда кнопки «Провести» в форме не будет, и пользователи не запутаются.
Как создать документ в конфигураторе: пошагово
Подготовка
- Сделайте копию базы
:
Администрирование → Выгрузить информационную базув Конфигураторе. - Если конфигурация типовая и стоит на поддержке, решите, куда добавлять объект. Правка основной конфигурации снимает её с поддержки (полностью или частично) и усложняет обновления. Для доработок типовых удобнее расширение конфигурации: в актуальных версиях платформы в нём можно создавать собственные документы.
- Откройте конфигурацию:
Конфигурация → Открыть конфигурацию.
Создание объекта
- В дереве найдите ветку
Документы, щёлкните правой кнопкой →Добавить. - На вкладке
ОсновныезаполнитеИмя— латиница не обязательна, принято писать слитно с большой буквы:ЗаказПокупателя.Синонимсистема подставит сама («Заказ покупателя»), его видят пользователи. - Укажите
Представление объектаиПредставление списка, если синоним не подходит для заголовков окон. - На вкладке
Подсистемыотметьте раздел, в котором документ должен появиться в командном интерфейсе.
Нумерация
На вкладке Нумерация задают:
| Свойство | Что выбрать | Зачем |
|---|---|---|
Тип номера | Строка или Число | Строка позволяет префиксы организации и базы |
Длина номера | обычно 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. Права и запуск
- Откройте роль, через которую работают пользователи (в учебной базе можно создать роль
Менеджер), и дайте на документ праваЧтение,Добавление,Изменение,Проведение,Отмена проведения,Просмотр,Интерактивное добавление,Редактирование. На регистр — минимумЧтение. F7— обновить конфигурацию базы данных, принять изменения.F5— запустить режим 1С:Предприятие, найти документ в выбранном разделе, создать, провести.- Проверить движения: в панели навигации формы проведённого документа появится ссылка на регистр
Заказы покупателей— откройте её и сверьте строки.
Типичные ошибки при создании документов
- 🚫 Документа нет в интерфейсе. Не отмечена подсистема или у пользователя нет права
Просмотрв роли. Администратор с полными правами при этом документ видит — отсюда путаница «у меня работает, у бухгалтера нет». - 🚫 Движения задваиваются. Стоит
Удаление движений: Не удалять автоматически, а в коде нет очистки. Или в цикле забыли, чтоДобавить()вызывается на каждую строку, и добавили лишнее. - 🚫 Движения не записались. Не установлено
Движения.<Регистр>.Записывать = Истинаили регистр не отмечен на вкладкеДвижения. - 🚫 Ошибка в модуле формы с серверными объектами. На клиенте недоступны запросы и обращение к реквизитам ссылок через точку. Выносите такой код в процедуру с директивой
&НаСервере. - 🚫 Типовая сняла с поддержки целиком. Документ добавили прямо в основную конфигурацию без расчёта на обновления. Для доработок типовых используйте расширение.
- 🚫 Неточный тип числа. Сумма как
Число 10, 0— копейки отрезаются без предупреждения.
Как ускорить и упростить работу с документами
- Читайте данные запросом, а не через точку.
СтрокаТЧ.Номенклатура.ВидНоменклатурыв цикле — это отдельное обращение к базе на каждую строку. Один запрос к табличной части с соединением быстрее. - Используйте управляемый режим блокировок (свойство конфигурации
Режим управления блокировкой данных). В обработке проведения устанавливайте блокировкуБлокировкаДанныхтолько на те записи регистра, остатки которых проверяете. - Индексируйте с умом. Каждый индекс ускоряет отбор, но замедляет запись. Ставьте его на реквизиты, по которым реально фильтруют список.
- Не храните вычисляемое без нужды.
СуммаДокументахранить оправданно, потому что по ней сортируют список. Промежуточные суммы по строкам — нет. - Выносите общее в общие модули. Если одна и та же логика нужна в трёх документах, держите её в общем модуле, а в модулях объектов оставляйте вызов.
- Включайте оперативное проведение только там, где нужен контроль остатков «на сейчас». Для заказов и служебных документов оно лишнее.
- Проверяйте на большом документе. Проведите заказ на 500–1 000 строк в отладчике и посмотрите замер производительности (
Отладка → Замер производительности) — узкие места видно сразу.
Частые вопросы
Можно ли добавить документ в типовую конфигурацию без снятия с поддержки?
Чем модуль объекта отличается от модуля менеджера?
Почему после F7 документ не открывается у пользователя?
Подсистемы документа.Как удалить созданный документ из конфигурации?
Поиск ссылок на объект. Уберите их из других объектов, затем удалите документ и выполните F7. Данные этих документов в базе будут удалены.Обязательно ли документу проводиться?
Проведение: Запретить. Он будет только записываться.