Объект «Документ» в платформе 1С:Предприятие — это не просто запись в базе данных, а фундаментальный элемент, который связывает бизнес-логику, учетные операции и автоматизацию процессов. Без понимания его назначения невозможно эффективно работать ни как пользователь, ни как разработчик. В этой статье мы разберём 8 практических целей использования объекта «Документ», которые выходят за рамки стандартных инструкций: от формирования проводок до интеграции с внешними системами.
Многие ошибочно считают, что документы в 1С нужны только для печати «бумажек» или фиксации фактов хозяйственной жизни. На деле этот объект решает задачи куда более широкого спектра: он может быть триггером для запуска скриптов, источником данных для аналитики, инструментом контроля версий изменений и даже основой для построения сложных бизнес-процессов. Далее — подробный разбор с примерами кода, таблицами сравнения и предупреждениями о типичных ошибках.
1. Фиксация хозяйственных операций: от прихода товара до начисления зарплаты
Основная функция объекта «Документ» — регистрация событий, которые изменяют состояние учёта. Это может быть приход товара на склад (ПоступлениеТоваровУслуг), начисление зарплаты (НачислениеЗарплаты) или списание материалов в производство (ТребованиеНакладная). Каждый документ фиксирует:
- 📅 Дата и время операции (критично для корректного отражения в отчётности).
- 📝 Реквизиты: контрагент, сумма, количество, номенклатура и т.д.
- 🔄 Движения по регистрам (бухгалтерским, накопления, сведений).
Пример кода для создания документа ПоступлениеТоваровУслуг программно:
Док = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Док.Дата = ТекущаяДата();
Док.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");
Док.Товары.Добавить();
Док.Товары[0].Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Ноутбук");
Док.Товары[0].Количество = 5;
Док.Записать();
Док.Провести();
⚠️ Внимание: Если документ не проводится (остаётся в статусе «Не проведён»), его данные не попадут в регистры и не повлияют на отчётность. Всегда проверяйте результат метода Провести()!
2. Автоматическое формирование бухгалтерских проводок
Один из ключевых механизмов объекта «Документ» — генерация проводок по заданным правилам. Например, документ ПлатёжноеПоручениеИсходящее при проведении автоматически создаёт проводку по дебету счёта 60 («Расчёты с поставщиками») и кредиту счёта 51 («Расчётный счёт»). Это избавляет бухгалтера от ручного ввода и снижает риск ошибок.
Как это работает на уровне конфигурации:
- В модуле документа прописываются правила формирования движений (метод
ОбработкаПроведения()). - При проведении документа платформа 1С анализирует реквизиты (сумму, счёт, аналитику) и создаёт записи в регистре бухгалтерии.
- Проводки можно просматривать в отчёте
Оборотно-сальдовая ведомостьили через форму документа.
| Тип документа | Пример проводки | Регистр |
|---|---|---|
ПоступлениеТоваровУслуг |
Дт 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С имеет историю изменений, которая фиксирует:
- 🕒 Время и дату создания/редактирования.
- 👤 Пользователя, внесшего изменения.
- 📄 Предыдущие версии (если включён механизм версионирования).
Как включить версионирование для документа:
- Откройте конфигуратор, перейдите в свойства документа.
- Установите флаг
Вести историю данных. - Настройте период хранения версий (например, 30 дней).
Пример получения последней версии документа:
ПоследняяВерсия = Документы.ЗаказПокупателя.ПолучитьОбъектПоСсылке(Док.Ссылка).ПолучитьПоследнююВерсию();
Если ПоследняяВерсия <> Неопределён Тогда
Сообщить("Последняя версия от " + ПоследняяВерсия.Дата);
КонецЕсли;
Версионирование документов критично для аудита и восстановления данных после сбоев. Однако оно увеличивает размер базы — настройте автоматическую очистку старых версий.
6. Генерация печатных форм и отчётов
Документы в 1С не только хранят данные, но и формируют печатные формы:
- 📄
СчётНаОплату→ печатная форма счёта для клиента. - 📋
АктВыполненныхРабот→ акт в формате Word или PDF. - 📊
ОтчётОПродажах→ сводная таблица по документам реализации.
Пример вывода документа в PDF:
Макет = Документы.СчётНаОплату.ПолучитьМакет("ПечатнаяФорма");
ТабДок = Новый ТабличныйДокумент;
ТабДок.Вывести(Макет);
PDF = Новый ЗаписьPDF();
PDF.НачатьДокумент();
ТабДок.Записать(PDF);
PDF.ЗакончитьДокумент();
PDF.Записать("C:\Temp\Счёт_" + Док.Номер + ".pdf");
Чтобы избежать ошибок при печати:
☑️ Подготовка печатной формы
7. Автоматизация через обработчики событий
Документы поддерживают обработчики событий, которые позволяют запускать код на разных этапах их жизненного цикла:
- 📥
ПриСозданииНаСервере— при создании нового документа. - 🔄
ПередЗаписью— перед сохранением изменений. - ✅
ПослеПроведения— после успешного проведения.
Пример блокировки редактирования документа после проведения:
Процедура ПередЗаписью(Отказ, Проводить)
Если ЭтотОбъект.Проведён Тогда
Отказ = Истина;
Сообщить("Нельзя редактировать проведённый документ! Сначала отмените проведение.");
КонецЕсли;
КонецПроцедуры
⚠️ Внимание: Чрезмерное использование обработчиков ПередЗаписью может замедлить работу системы, особенно в сеансах с большим количеством пользователей. Оптимизируйте код!
8. Аналитика и отчётность на основе документов
Документы служат основным источником данных для аналитических отчётов. Например:
- 📈 Анализ продаж по документам
РеализацияТоваровУслуг. - 💰 Контроль дебиторской задолженности по
СчётамНаОплату. - ⏱️ Мониторинг сроков выполнения заказов.
Пример запроса для анализа продаж по документам:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Документ.Контрагент КАК Контрагент,
| СУММА(Документ.СуммаДокумента) КАК Итого
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Документ
|ГДЕ
| Документ.Дата МЕЖДУ &НачалоПериода И &КонецПериода
|СГРУППИРОВАТЬ ПО
| Документ.Контрагент";
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДата()));
Результат = Запрос.Выполнить();
Для ускорения аналитических отчётов используйте регистры накопления вместо прямых выборок по документам. Это снизит нагрузку на базу.
FAQ: Частые вопросы о документах в 1С
Можно ли создать документ без проведения?
Да, документ можно сохранить в статусе «Не проведён» с помощью метода Записать() без вызова Провести(). Однако его данные не попадут в регистры и не повлияют на отчётность. Это удобно для черновиков или документов, требующих предварительного согласования.
Как отменить проведение документа?
Используйте метод ОтменитьПроведение(). Пример:
Док = Документы.ЗаказПокупателя.НайтиПоНомеру("ЗП-000123");
Док.ОтменитьПроведение();
После отмены документ можно редактировать и проводить заново.
Что делать, если документ «завис» при проведении?
Причины могут быть разные: от блокировок в базе до ошибок в коде обработчиков. Порядок действий:
- Проверьте журнал регистрации (
Администрирование → Журнал регистрации). - Попробуйте провести документ в монопольном режиме.
- Если ошибка повторяется, анализируйте трассировку или обратитесь к разработчику.
Как экспортировать документы в Excel?
Используйте объект ТабличныйДокумент и метод Записать() с параметром ТипФайла.XLSX. Пример:
ТабДок = Новый ТабличныйДокумент;
ТабДок.Вывести(Док.ПолучитьМакет("СписокТоваров"));
ТабДок.Записать("C:\Temp\Список.xlsx", ТипФайла.XLSX);
Можно ли изменить структуру документа после начала эксплуатации?
Технически да, но это чревато ошибками:
- 🔴 Потеря данных в существующих документах.
- 🔴 Нарушение работы отчётов и обработок.
- 🔴 Конфликты при обмене данными.
Лучше создавать новый документ с нужной структурой и переносить данные через обработку.