1C-CodeКак сделать → Как программно провести документ в 1С

Как программно провести документ в 1С

Получить объект по ссылке и записать его в режиме проведения. Отдельного метода «Провести» у документа нет — проведение это режим записи.

Код

ДокОбъект = СсылкаНаДокумент.ПолучитьОбъект();
Попытка
	ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
	Сообщить("Не удалось провести " + СсылкаНаДокумент
		+ ": " + ОписаниеОшибки());
КонецПопытки;

Что здесь важно

1. Режим записи решает всё

Записать() без параметра просто сохранит документ, не вызвав обработку проведения и не сформировав движений. Проведение — это РежимЗаписиДокумента.Проведение, отмена проведения — РежимЗаписиДокумента.ОтменаПроведения.

2. Отказ приходит исключением, а не возвращаемым значением

Если обработка проведения поставила Отказ = Истина, Записать вызовет исключение. Поэтому запись оборачивают в Попытка: иначе первый же непроведённый документ оборвёт всю обработку на середине.

3. Проверять надо ссылку, а не объект

Перед получением объекта убедитесь, что ссылка не пустая и документ не помечен на удаление. ПолучитьОбъект() у пустой ссылки вернёт Неопределено, и следующая же строка упадёт.

Где обычно спотыкаются

В цикле по многим документам ПолучитьОбъект() каждый раз идёт в базу за полной копией — это дорого. Если задача массовая, отбирайте документы запросом, обрабатывайте порциями и не держите всё в одной транзакции: одна ошибка на тысячном документе откатит девятьсот девяносто девять предыдущих.

Задача на это. Прочитать приём и применить его — разные умения. В тренажёре есть задача «Отменить проведение по списку номеров»: массовая операция над документами — с отбором запросом, а не перебором, и с честным отчётом о том, что не получилось. Решение проверяется скрытыми тестами, в том числе на краевых случаях, о которых в условии не сказано.

Решить задачу

Разобраться глубже

Другие вопросы

Как получить остатки на дату запросом в 1С Как избавиться от запроса в цикле в 1С Как добавить колонку в таблицу значений программно Как свернуть таблицу значений Как найти строку в таблице значений Как выгрузить колонку таблицы значений в массив Как превратить массив в таблицу значений Как передать таблицу значений с сервера на клиент Как отобрать строки в таблице значений Как отсортировать таблицу значений Как записать движения регистра накопления программно Чем регистр остатков отличается от регистра оборотов Как контролировать остатки при проведении документа Как добавить реквизит расширением конфигурации Как сравнить две таблицы значений Какие бывают соединения в запросе 1С и чем отличаются Как выгрузить таблицу значений в Excel Чем дерево значений отличается от таблицы значений Как задать условное оформление таблицы на форме