Разработка и Конфигурация · 12 мин
Как создать объект «Документ» в 1С и описать его структуру
Пошаговая инструкция по созданию объекта «Документ» в конфигураторе 1С: реквизиты, табличные части, нумерация, проведение и движения по регистрам.
Документ — ключевой объект конфигурации 1С, который фиксирует факт хозяйственной операции: поступление товара, отгрузку, оплату, начисление зарплаты. В отличие от справочника, документ существует во времени, имеет номер и дату, может проводиться и формировать записи в регистрах. Поэтому правильное описание его структуры напрямую влияет на корректность учёта.
Создание документа выполняется в конфигураторе через дерево конфигурации. Разработчик задаёт имя объекта, реквизиты шапки, табличные части, настройки нумерации, движения по регистрам и модуль проведения. Каждый из этих элементов имеет конкретные свойства, которые нужно заполнить осознанно, а не оставлять по умолчанию.
Материал рассчитан на начинающего разработчика или внедренца, работающего в конфигураторе 1С:Предприятие 8.3. Примеры приведены для управляемого приложения, но большинство настроек одинаково применимы и к обычным формам.
Что представляет собой документ в метаданных 1С
Объект метаданных «Документ» описывает не сами данные, а их структуру: какие поля будут у каждого экземпляра, как он будет нумероваться, в каких журналах отображаться и какие записи создавать при проведении. Физически платформа хранит документы в таблицах базы данных, но разработчик работает с ними через конфигуратор.
У каждого документа есть стандартные реквизиты, которые платформа добавляет автоматически: номер, дата, признак проведения, пометка удаления, ссылка. Дату и номер менять не нужно — они управляются настройками нумерации и периодичности. Всё остальное (организация, контрагент, склад, сумма) разработчик добавляет как собственные реквизиты.
Важное отличие документа от справочника — регистрация во времени. Дата документа определяет его позицию в последовательности и момент, на который формируются движения. Поэтому структуру документа нужно проектировать с учётом того, какие отчёты и регистры будут строиться по его данным.
Создание объекта «Документ» в конфигураторе
Откройте конфигуратор, разверните дерево конфигурации и найдите ветку «Документы». В контекстном меню выберите «Добавить» — откроется палитра свойств нового объекта. Первое, что нужно задать, — имя (идентификатор для обращения из кода, например «ПоступлениеТоваров») и синоним (представление для пользователя, например «Поступление товаров»).
Имя должно быть осмысленным и не содержать пробелов и спецсимволов — оно используется в запросах и программном коде: Документы.ПоступлениеТоваров.СоздатьДокумент(). Синоним может быть любым читаемым текстом, именно его увидят пользователи в списках и меню.
- 1Откройте конфигуратор и в дереве конфигурации найдите ветку «Документы»
- 2Через контекстное меню выберите «Добавить» и задайте имя и синоним
- 3На закладке «Данные» добавьте реквизиты шапки и табличные части
- 4На закладке «Нумерация» настройте вид номера, длину и периодичность
- 5На закладке «Движения» отметьте регистры, по которым документ делает записи
- 6Создайте форму документа и напишите обработчик ОбработкаПроведения
- 7Обновите конфигурацию базы данных (F7) и проверьте документ в режиме предприятия
После заполнения основных свойств платформа предложит автоматически создать формы (документа, списка, выбора). Для первой версии достаточно сгенерированных форм — их можно доработать позже. Обязательно проверьте, что документ включён хотя бы в одну подсистему, иначе пользователи не увидят его в интерфейсе.
Описание структуры: реквизиты шапки
Реквизиты шапки описывают общие данные документа: организацию, контрагента, договор, склад, ответственного. Они добавляются на закладке «Данные» палитры свойств. Для каждого реквизита задаются имя, тип данных, длина (для строк и чисел) и обязательность заполнения.
Выбор типа данных — критичный момент. Для ссылок на другие объекты используйте ссылочные типы: СправочникСсылка.Контрагенты, СправочникСсылка.Номенклатура. Не храните контрагента строкой — это лишает вас контроля целостности и возможности строить отчёты по связанным данным. Для сумм используйте тип «Число» с длиной 15 и точностью 2, для количеств — обычно точность 3.
Если реквизит должен участвовать в отборах и поиске, включите для него индексирование (свойство «Индексировать»). Но не индексируйте всё подряд: каждый индекс замедляет запись документа и увеличивает размер базы. Индексируйте только поля, по которым реально выполняются отборы в запросах и динамических списках.
Табличные части документа
Табличная часть — это список строк внутри документа, например перечень товаров с количеством и ценой. На закладке «Данные» добавьте табличную часть (например, «Товары»), а затем внутри неё — реквизиты: Номенклатура, Количество, Цена, Сумма. У каждой строки табличной части автоматически есть номер строки.
Документ может содержать несколько табличных частей: «Товары», «Услуги», «Оплаты». Их структура описывается независимо. При проведении вы обращаетесь к строкам через коллекцию: Для Каждого Строка Из Товары Цикл ... КонецЦикла;.
| Элемент структуры | Назначение | Пример |
|---|---|---|
| Стандартные реквизиты | Добавляются платформой автоматически | Номер, Дата, Проведён, Ссылка |
| Реквизиты шапки | Общие данные документа | Организация, Контрагент, Склад |
| Табличная часть | Список строк с детализацией | Товары: Номенклатура, Количество, Цена |
| Движения | Регистры, куда документ пишет записи | Регистр накопления «ОстаткиТоваров» |
Не выносите в шапку то, что по смыслу является строкой: если у документа может быть несколько товаров, нужна табличная часть. Обратная ошибка — создавать табличную часть ради одного реквизита, который всегда один на документ. Это усложняет форму и запросы без выигрыша.
Нумерация, периодичность и журналы
На закладке «Нумерация» задаются свойства номера: признак автонумерации, длина номера (обычно 5–11 символов), периодичность (в пределах года, квартала, месяца или непериодический) и контроль уникальности. Рекомендуется оставлять автонумерацию включённой и контроль уникальности активным — это защищает от дублей при ручном вводе номеров.
Периодичность определяет, когда нумерация начинается заново. Для большинства документов используется «В пределах года»: с 1 января счётчик сбрасывается. Если документ должен иметь сквозную нумерацию за всё время, выберите «Непериодический», но учтите, что длины номера должно хватить на весь срок эксплуатации.
Чтобы документ отображался в общих списках, добавьте его в журналы документов (ветка «Журналы документов»). В свойствах журнала отметьте нужные виды документов и настройте графы — реквизиты, которые будут показаны колонками списка.
Проведение и движения по регистрам
Главная функция документа — формировать движения. На закладке «Движения» отметьте регистры (накопления, сведений, бухгалтерии), в которые документ будет писать записи. После этого платформа разрешит заполнение коллекции Движения в модуле объекта.
Логика проведения описывается в обработчике ОбработкаПроведения модуля объекта. Типовой шаблон — обойти табличную часть и для каждой строки добавить запись в регистр:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого Строка Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = Строка.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = Строка.Количество;
КонецЦикла;
КонецПроцедуры
Для типовых операций удобно использовать конструктор движений (кнопка «Конструктор движений» в модуле объекта) — он сгенерирует код по выбранным регистрам и реквизитам автоматически. Сгенерированный код нужно проверить и при необходимости дополнить контролем остатков и установкой признака Отказ при ошибках.
Контроль отрицательных остатков лучше выполнять запросом к регистру после формирования движений, а не проверкой каждой строки по отдельности. Так код короче и быстрее, а сообщение пользователю можно вывести сразу по всем проблемным позициям.
Формы, права и проверка результата
Форма документа создаётся через конструктор форм: в палитре свойств документа нажмите кнопку открытия основной формы. На форму автоматически выносятся реквизиты и табличные части. Для управляемых форм настройте порядок элементов, группировку и видимость — пользователю должны быть видны только нужные поля.
Не забудьте про права: в ролях конфигурации отметьте права на чтение, добавление, изменение и проведение нового документа. Если роль не настроена, пользователь с этой ролью не увидит документ или получит ошибку доступа при открытии.
Как проверить результат
Форма открывается, реквизиты доступны для заполнения
Ошибка обновления конфигурации или документ отсутствует в интерфейсе
Новый документ получает следующий номер по правилам периодичности
Дубли номеров или сброс счётчика в середине периода
В регистрах появляются записи, суммы и количества совпадают с табличной частью
Движения пустые или с неверным видом движения
Записи в регистрах удаляются без остатка
Остаются «висячие» движения после распроведения
После обновления конфигурации базы данных (команда «Обновить конфигурацию базы данных» или клавиша F7) протестируйте полный цикл: создание, заполнение, проведение, отмена проведения, пометка удаления. Проверьте движения через отчёт по регистру или универсальный отчёт — записи должны соответствовать данным документа.
Что важно запомнить
Структура документа в 1С — это реквизиты шапки, табличные части, настройки нумерации и движения по регистрам. Создавайте объект в конфигураторе осознанно: ссылочные типы для связанных данных, контроль заполнения для ключевых полей, обработчик ОбработкаПроведения для записей в регистры. Финальный тест — полный цикл проведения и отмены с проверкой движений.
Частые вопросы
Чем документ отличается от справочника в 1С?
Справочник хранит относительно постоянные данные (номенклатуру, контрагентов), а документ фиксирует событие во времени: у него есть дата, номер, возможность проведения и формирования движений по регистрам. Документ влияет на учётные остатки, справочник — нет.
Можно ли изменить структуру документа, если в базе уже есть данные?
Да, добавление новых реквизитов и табличных частей безопасно — существующие документы получат пустые значения новых полей. Осторожности требуют удаление реквизитов (данные будут потеряны) и изменение типа поля (платформа попытается преобразовать значения, что может привести к их очистке). Перед такими изменениями делайте резервную копию.
Как запретить проведение документа при пустой табличной части?
В обработчике ОбработкаПроведения добавьте проверку: если Товары.Количество() = 0, установите Отказ = Истина и выведите сообщение пользователю через объект СообщениеПользователю. Проверку заполнения строк можно дополнить стандартным свойством «Проверка заполнения» у реквизитов табличной части.
Нужно ли писать код для отмены проведения?
Обычно нет: если все движения формируются только в ОбработкаПроведения через коллекцию Движения, платформа при отмене проведения автоматически удаляет записи документа из регистров. Собственный обработчик ОбработкаУдаленияПроведения нужен только для нестандартной логики, например снятия блокировок или отмены связанных операций.
Как сделать номер документа с префиксом организации?
Стандартный механизм — префиксация через свойство «Префикс» нумератора или подписку на событие ПриУстановкеНовогоНомера, где к номеру добавляется префикс организации или информационной базы. В типовых конфигурациях используется общий механизм префиксации, в самописной — подписка на событие в модуле.
Почему документ не виден пользователям после создания?
Чаще всего причина в том, что документ не включён ни в одну подсистему или у роли пользователя нет прав на него. Проверьте закладку «Подсистемы» в свойствах документа и настройки ролей. Также убедитесь, что выполнено обновление конфигурации базы данных, а не только сохранение конфигурации.