Документы и проведение
Документ фиксирует, что в определённый момент что-то произошло: продали, приняли на склад, начислили зарплату.
Документ — прикладной объект 1С, отражающий факт хозяйственной операции в конкретный момент времени. У документа обязательно есть дата и номер, а его главная задача — при проведении сформировать движения в регистрах.
Если справочник отвечает на вопрос «что у нас есть» (список товаров, клиентов), то документ отвечает на вопрос «что произошло». «Реализация товаров» — продали. «Поступление» — приняли на склад. «ПриходныйКассовыйОрдер» — получили деньги. У каждого такого события есть точное время, и именно это делает документ документом.
Зачем это нужно на практике
Бизнес — это поток событий во времени. Сколько товара на складе сегодня зависит от всех поступлений и продаж до сегодня. Документы выстраивают эти события в хронологию, а платформа по ним считает итоги. Без документов не было бы ни остатков, ни оборотов, ни отчётов «за период» — только статичные списки.
Дата и номер
Дата и номер — стандартные реквизиты любого документа, аналог Кода и Наименования у справочника. Дата определяет момент операции и порядок документов на оси времени. Номер — обычно автонумеруемый идентификатор в пределах периода (часто с префиксом организации). Читаются они как обычные свойства:
Реализация = Документы.РеализацияТоваров.НайтиПоНомеру("ПР-000123");
Если ЗначениеЗаполнено(Реализация) Тогда
Сообщить("Документ от " + Формат(Реализация.Дата, "ДЛФ=DD")
+ ", номер " + Реализация.Номер
+ ", проведён: " + ?(Реализация.Проведён, "да", "нет"));
КонецЕсли;
Результат:
Документ от 15 марта 2026 г., номер ПР-000123, проведён: да
Здесь ?(условие, значениеЕслиИстина, значениеЕслиЛожь) — тернарный оператор 1С, а Проведён — стандартный признак документа.
Чем документ отличается от справочника
Оба хранят данные и имеют реквизиты с табличными частями — новичок легко их путает. Но роль у них разная:
| Свойство | Справочник | Документ |
| Отвечает на вопрос | Что у нас есть? | Что произошло? |
| Привязка ко времени | Нет | Есть (дата и время) |
| Стандартные поля | Код, Наименование | Дата, Номер |
| Главное действие | Хранение и ссылки | Проведение → движения в регистрах |
| Меняется | Редко (условно-постоянный) | Постоянно создаются новые |
Простое правило: если сущность существует сама по себе и на неё ссылаются (товар, клиент) — это справочник. Если это событие с датой, влияющее на итоги (продажа, оплата) — это документ.
Что такое проведение
Само по себе создание документа ничего не меняет в учёте — это лишь запись «зафиксировали намерение». Настоящая работа происходит при проведении: документ формирует движения в регистрах. Продали 5 ноутбуков — при проведении «Реализация» списывает 5 штук из регистра остатков. Приняли товар — «Поступление» их туда добавляет.
Проведение — процесс, при котором документ отражается в учёте, создавая записи (движения) в регистрах накопления и сведений. До проведения документ существует, но на итоги не влияет.
Логика проведения пишется в модуле документа — в обработчике события ОбработкаПроведения. Он выполняется на сервере в момент, когда пользователь нажимает «Провести»:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// Перебираем строки товаров и списываем их с остатков
Для Каждого СтрокаТовара Из Товары Цикл
Движение = Движения.ТоварыНаСкладах.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = СтрокаТовара.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = СтрокаТовара.Количество;
КонецЦикла;
КонецПроцедуры
Параметр Отказ — управляющий: если в ходе проверок присвоить Отказ = Истина, платформа отменит проведение целиком. Так делают контроль: например, запрещают провести продажу, если товара не хватает.
// Контроль остатков внутри ОбработкаПроведения
Если ОстатокНаСкладе < СтрокаТовара.Количество Тогда
Сообщить("Недостаточно товара " + СтрокаТовара.Номенклатура + " на складе");
Отказ = Истина;
КонецЕсли;
Распроведение
Если документ провели ошибочно, его распроводят — платформа удаляет все его движения из регистров, будто операции не было. Признак Проведён снова становится Ложь. Из кода это делается через объект документа:
ДокОбъект = Реализация.ПолучитьОбъект();
// Провести программно
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
// ...или распровести
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
Как это работает
Проведение платформа выполняет в транзакции: сначала удаляет старые движения документа (если он перепроводится), затем выполняет ОбработкаПроведения и записывает новый набор движений. Если где-то выставлен Отказ = Истина или произошла ошибка — транзакция откатывается, и в регистрах не остаётся ничего от этого документа. Это гарантирует целостность: документ либо проведён полностью, либо не проведён вовсе, промежуточного состояния не бывает.
Набор движений документа платформа «привязывает» к нему через регистратор. Поэтому распроведение — это просто удаление всех записей, где регистратор равен нашему документу. Никакого ручного пересчёта не нужно.
Частые ошибки
- Думать, что созданный документ уже влияет на остатки. Пока документ не проведён, движений нет. «Записать» и «Провести» — разные операции: запись сохраняет реквизиты, проведение создаёт движения.
- Забыть про
Отказпри контроле. Вывели сообщение «недостаточно товара», но не присвоилиОтказ = Истина— документ всё равно проведётся, и остаток уйдёт в минус. - Писать бизнес-логику проведения на клиенте.
ОбработкаПроведениявсегда выполняется на сервере. Обращаться там к клиентским формам или диалогам нельзя. - Путать перепроведение с дублированием. Повторное проведение не добавляет движения поверх старых — платформа сначала удаляет прежний набор. Дубли в регистрах возникают из-за ошибок логики, а не из-за самого перепроведения.
Итоги
- Документ фиксирует факт операции во времени; его стандартные реквизиты — Дата и Номер.
- Справочник — «что есть», документ — «что произошло»; документ влияет на итоги через проведение.
- Проведение формирует движения в регистрах; логика живёт в обработчике
ОбработкаПроведенияна сервере. - Параметр
Отказ = Истинаотменяет проведение — так делают контроль остатков и прочие проверки. - Распроведение удаляет все движения документа; провести/распровести из кода можно через
Записать()с нужным режимом.