Объект «Документ» в платформе 1С:Предприятие — это не просто запись в базе данных, а фундаментальный элемент, который связывает бизнес-логику, учетные операции и автоматизацию процессов. Без понимания его назначения невозможно эффективно работать ни как пользователь, ни как разработчик. В этой статье мы разберём 8 практических целей использования объекта «Документ», которые выходят за рамки стандартных инструкций: от формирования проводок до интеграции с внешними системами.

Многие ошибочно считают, что документы в 1С нужны только для печати «бумажек» или фиксации фактов хозяйственной жизни. На деле этот объект решает задачи куда более широкого спектра: он может быть триггером для запуска скриптов, источником данных для аналитики, инструментом контроля версий изменений и даже основой для построения сложных бизнес-процессов. Далее — подробный разбор с примерами кода, таблицами сравнения и предупреждениями о типичных ошибках.

1. Фиксация хозяйственных операций: от прихода товара до начисления зарплаты

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

  • 📅 Дата и время операции (критично для корректного отражения в отчётности).
  • 📝 Реквизиты: контрагент, сумма, количество, номенклатура и т.д.
  • 🔄 Движения по регистрам (бухгалтерским, накопления, сведений).

Пример кода для создания документа ПоступлениеТоваровУслуг программно:

Док = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();

Док.Дата = ТекущаяДата();

Док.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");

Док.Товары.Добавить();

Док.Товары[0].Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Ноутбук");

Док.Товары[0].Количество = 5;

Док.Записать();

Док.Провести();

⚠️ Внимание: Если документ не проводится (остаётся в статусе «Не проведён»), его данные не попадут в регистры и не повлияют на отчётность. Всегда проверяйте результат метода Провести()!
📊 Как часто вы создаёте документы в 1С программно?
Никогда, только вручную
Редко, для специфических задач
Часто, это часть моей работы
Постоянно, пишу интеграции

2. Автоматическое формирование бухгалтерских проводок

Один из ключевых механизмов объекта «Документ» — генерация проводок по заданным правилам. Например, документ ПлатёжноеПоручениеИсходящее при проведении автоматически создаёт проводку по дебету счёта 60 («Расчёты с поставщиками») и кредиту счёта 51 («Расчётный счёт»). Это избавляет бухгалтера от ручного ввода и снижает риск ошибок.

Как это работает на уровне конфигурации:

  1. В модуле документа прописываются правила формирования движений (метод ОбработкаПроведения()).
  2. При проведении документа платформа 1С анализирует реквизиты (сумму, счёт, аналитику) и создаёт записи в регистре бухгалтерии.
  3. Проводки можно просматривать в отчёте Оборотно-сальдовая ведомость или через форму документа.
Тип документа Пример проводки Регистр
ПоступлениеТоваровУслуг Дт 41.01 «Товары на складах» — Кт 60.01 «Расчёты с поставщиками» Бухгалтерия
РеализацияТоваровУслуг Дт 62.01 «Расчёты с покупателями» — Кт 90.01 «Выручка» Бухгалтерия
НачислениеЗарплаты Дт 20 «Основное производство» — Кт 70 «Расчёты с персоналом» Бухгалтерия + Расчёт зарплаты
⚠️ Внимание: Если в конфигурации изменены планы счетов или алгоритмы проведения, проводки могут формироваться некорректно. Всегда тестируйте новые документы на копии базы!

3. Управление бизнес-процессами и задачами

Документы в 1С могут быть не только учётными записями, но и триггерами для бизнес-процессов. Например:

  • 📌 Документ ЗаявкаНаПокупку запускает процесс согласования с руководителем.
  • 📤 Документ ЗаказПокупателя автоматически создаёт задачи для отдела логистики и бухгалтерии.
  • ⏳ Документ СчётНаОплату отправляет уведомление клиенту через 3 дня после создания.

Пример настройки бизнес-процесса через документ:

Процедура ПриЗаписи(Отказ)

Если ЭтотОбъект.Сумма > 100000 Тогда

Задача = БизнесПроцессы.СоздатьОбъект("СогласованиеЗаявки");

Задача.Документ = ЭтотОбъект.Ссылка;

Задача.Исполнитель = ЭтотОбъект.Руководитель;

Задача.Запустить();

КонецЕсли;

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

💡

Используйте реквизит Статус в документе (например, "Черновик", "На согласовании", "Выполнен"), чтобы отслеживать этапы бизнес-процесса без создания отдельных задач.

4. Интеграция с внешними системами через документы

Объект «Документ» часто выступает мостом между 1С и другими программами. Например:

  • 🔄 Обмен с CRM (битрикс24, amoCRM): документы Лид или Сделка синхронизируются с заказами в 1С.
  • 📦 Интеграция с WMS-системами: документ ЗаказНаОтгрузку передаётся на склад для комплектации.
  • 💳 Обмен с банками: документы ПлатёжноеПоручение экспортируются в системы клиент-банк.

Пример экспорта документа в JSON для внешней системы:

Функция ЭкспортироватьДокументВJSON(Док)

Результат = Новый Структура();

Результат.Вставить("Дата", Док.Дата);

Результат.Вставить("Номер", Док.Номер);

Результат.Вставить("Контрагент", Док.Контрагент.Наименование);

Результат.Вставить("Товары", Новый Массив());

Для Каждого Строка Из Док.Товары Цикл

Товар = Новый Структура();

Товар.Вставить("Номенклатура", Строка.Номенклатура.Наименование);

Товар.Вставить("Количество", Строка.Количество);

Результат.Товары.Добавить(Товар);

КонецЦикла;

Возврат JSON.Записать(Результат);

КонецФункции

⚠️ Внимание: При обмене данными всегда проверяйте соответствие форматов дат, кодировок и разделителей. Ошибки в этих параметрах — основная причина сбоев интеграций.
Как проверить корректность JSON перед отправкой?

Используйте сервис JSONLint или встроенный валидатор в 1С: Попытка JSON.Прочитать(СтрокаJSON); Исключение Сообщить("Ошибка: " + ОписаниеОшибки()); КонецПопытки;

5. Контроль версий и история изменений

Каждый документ в 1С имеет историю изменений, которая фиксирует:

  • 🕒 Время и дату создания/редактирования.
  • 👤 Пользователя, внесшего изменения.
  • 📄 Предыдущие версии (если включён механизм версионирования).

Как включить версионирование для документа:

  1. Откройте конфигуратор, перейдите в свойства документа.
  2. Установите флаг Вести историю данных.
  3. Настройте период хранения версий (например, 30 дней).

Пример получения последней версии документа:

ПоследняяВерсия = Документы.ЗаказПокупателя.ПолучитьОбъектПоСсылке(Док.Ссылка).ПолучитьПоследнююВерсию();

Если ПоследняяВерсия <> Неопределён Тогда

Сообщить("Последняя версия от " + ПоследняяВерсия.Дата);

КонецЕсли;

💡

Версионирование документов критично для аудита и восстановления данных после сбоев. Однако оно увеличивает размер базы — настройте автоматическую очистку старых версий.

6. Генерация печатных форм и отчётов

Документы в 1С не только хранят данные, но и формируют печатные формы:

  • 📄 СчётНаОплату → печатная форма счёта для клиента.
  • 📋 АктВыполненныхРабот → акт в формате Word или PDF.
  • 📊 ОтчётОПродажах → сводная таблица по документам реализации.

Пример вывода документа в PDF:

Макет = Документы.СчётНаОплату.ПолучитьМакет("ПечатнаяФорма");

ТабДок = Новый ТабличныйДокумент;

ТабДок.Вывести(Макет);

PDF = Новый ЗаписьPDF();

PDF.НачатьДокумент();

ТабДок.Записать(PDF);

PDF.ЗакончитьДокумент();

PDF.Записать("C:\Temp\Счёт_" + Док.Номер + ".pdf");

Чтобы избежать ошибок при печати:

☑️ Подготовка печатной формы

Выполнено: 0 / 4

7. Автоматизация через обработчики событий

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

  • 📥 ПриСозданииНаСервере — при создании нового документа.
  • 🔄 ПередЗаписью — перед сохранением изменений.
  • ПослеПроведения — после успешного проведения.

Пример блокировки редактирования документа после проведения:

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

Если ЭтотОбъект.Проведён Тогда

Отказ = Истина;

Сообщить("Нельзя редактировать проведённый документ! Сначала отмените проведение.");

КонецЕсли;

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

⚠️ Внимание: Чрезмерное использование обработчиков ПередЗаписью может замедлить работу системы, особенно в сеансах с большим количеством пользователей. Оптимизируйте код!

8. Аналитика и отчётность на основе документов

Документы служат основным источником данных для аналитических отчётов. Например:

  • 📈 Анализ продаж по документам РеализацияТоваровУслуг.
  • 💰 Контроль дебиторской задолженности по СчётамНаОплату.
  • ⏱️ Мониторинг сроков выполнения заказов.

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Документ.Контрагент КАК Контрагент,

| СУММА(Документ.СуммаДокумента) КАК Итого

|ИЗ

| Документ.РеализацияТоваровУслуг КАК Документ

|ГДЕ

| Документ.Дата МЕЖДУ &НачалоПериода И &КонецПериода

|СГРУППИРОВАТЬ ПО

| Документ.Контрагент";

Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));

Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДата()));

Результат = Запрос.Выполнить();

💡

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

FAQ: Частые вопросы о документах в 1С

Можно ли создать документ без проведения?

Да, документ можно сохранить в статусе «Не проведён» с помощью метода Записать() без вызова Провести(). Однако его данные не попадут в регистры и не повлияют на отчётность. Это удобно для черновиков или документов, требующих предварительного согласования.

Как отменить проведение документа?

Используйте метод ОтменитьПроведение(). Пример:

Док = Документы.ЗаказПокупателя.НайтиПоНомеру("ЗП-000123");

Док.ОтменитьПроведение();

После отмены документ можно редактировать и проводить заново.

Что делать, если документ «завис» при проведении?

Причины могут быть разные: от блокировок в базе до ошибок в коде обработчиков. Порядок действий:

  1. Проверьте журнал регистрации (Администрирование → Журнал регистрации).
  2. Попробуйте провести документ в монопольном режиме.
  3. Если ошибка повторяется, анализируйте трассировку или обратитесь к разработчику.

Как экспортировать документы в Excel?

Используйте объект ТабличныйДокумент и метод Записать() с параметром ТипФайла.XLSX. Пример:

ТабДок = Новый ТабличныйДокумент;

ТабДок.Вывести(Док.ПолучитьМакет("СписокТоваров"));

ТабДок.Записать("C:\Temp\Список.xlsx", ТипФайла.XLSX);

Можно ли изменить структуру документа после начала эксплуатации?

Технически да, но это чревато ошибками:

  • 🔴 Потеря данных в существующих документах.
  • 🔴 Нарушение работы отчётов и обработок.
  • 🔴 Конфликты при обмене данными.

Лучше создавать новый документ с нужной структурой и переносить данные через обработку.