Всем привет. Мне нужно в ряде случаев изменять программно движения документа "Поступление товаров и услуг" в БП 3.0. Нужно на форме документа сделать галочку, и если пользователь ее поставит, то движения документа будуг нестандартные. Я хочу сделать доработку в расширении. У меня два вопроса:

1) Собственно "галочка".

Если делать ее как реквизит документа, то все работает. Но, насколько я понимаю, более правильно не добавлять ее как реквизит документа, а делать реквизит формы, или я ошибаюсь? И если делать ее как реквизит формы, то как передать ее значение в обработку проведения?

2) Корректировка движений.

Если делать через аннотацию "&Вместо", то все работает. Если через "&После" - не работает. Почему так получается?

У меня код вида:

```1c
    Если ЭтотОбъект.РасшАО_В20 Тогда

    Сумма1 = Движения.Хозрасчетный[0].Сумма;
    Сумма2 = Движения.Хозрасчетный[1].Сумма;
    Движения.Хозрасчетный[0].Сумма = Сумма1 + Сумма2;
    Движения.Хозрасчетный.Удалить(1);
    Движения.Хозрасчетный.Удалить(2);
    Движения.Записать();

    КонецЕсли;
```

Если делать &После("ОбработкаПроведения"), то в отладчике вроде все корректно, по итогу все корректируется, но по факту (в пользовательском режиме) ничего не меняется. Если делать через "&Вместо("ОбработкаПроведения")", то все работает.
---
Вообще должно работать

https://its.1c.ru/db/pubextensions/content/80/hdoc
---
Возможно стоит добавить Движения.Хозрасчетный.Записывать = Истина;?
Т.к. вызов Движения.Записать() этот флаг сбрасывает, в итоге вы свое Движения.Записать() вызываете со сброшенным флагом записи у движения по регистру.
---
или я ошибаюсь Ошибаешься.
---
Галочку лучше сделать реквизитом документа, иначе впоследствии будет не ясно стандартные у документа движения или нет.
Корректировку движений я бы сделал перед записью набора движений регистра Хозрасчетный в модуле набора записей, так как движения в &После("ОбработкаПроведения") могут иметь еще не окончательный вариант из-за других подписок.
---
Но, насколько я понимаю, более правильно не добавлять ее как реквизит документа, а делать реквизит формы,
При программном заполнении галочку можно будет получить только из формы (понимаете какая это заморочка ;)) Правильно реквизит документа.

(1) Если делать через аннотацию "&Вместо", то все работает. Если через "&После" - не работает. Почему так получается?

Код надо смотреть.
---
```1c
    &Вместо("ОбработкаПроведения")
    Процедура РасшАО_ОбработкаПроведения(Отказ, РежимПроведения)

    ПроверитьКорректностьЗаполненияТабличнойЧастиТовары(Отказ);
    Если Отказ Тогда
    Возврат;
    КонецЕсли;

    // ПОДГОТОВКА ПРОВЕДЕНИЯ ПО ДАННЫМ ДОКУМЕНТА

    ПроведениеСервер.ПодготовитьНаборыЗаписейКПроведению(ЭтотОбъект);
    Если РучнаяКорректировка Тогда
    Возврат;
    КонецЕсли;

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

    // ПОДГОТОВКА ПРОВЕДЕНИЯ ПО ДАННЫМ ИНФОРМАЦИОННОЙ БАЗЫ (АНАЛИЗ ОСТАТКОВ И Т.П.)

    // Таблица взаиморасчетов
    ВидДоговора = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДоговорКонтрагента, "ВидДоговора");
    Если ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером Тогда
    ТаблицаВзаиморасчеты = УчетВзаиморасчетов.ПодготовитьТаблицуВзаиморасчетовЗачетАвансовРасчетыСКомиссио­нером(ПараметрыПроведения.ЗачетАвансовТаблицаДокумента,
    ПараметрыПроведения.ТаблицаЗачетАвансов, ПараметрыПроведения.ЗачетАвансовРеквизиты, Отказ);
    Иначе
    ТаблицаВзаиморасчеты = УчетВзаиморасчетов.ПодготовитьТаблицуВзаиморасчетовЗачетАвансов(ПараметрыПроведения.ЗачетАвансовТаблицаДокумента,
    ПараметрыПроведения.ТаблицаЗачетАвансов, ПараметрыПроведения.ЗачетАвансовРеквизиты, Отказ);
    КонецЕсли;

    // Таблицы документа с корректировкой сумм по курсу авансов
    СтруктураТаблицДокумента = УчетДоходовРасходов.ПодготовитьТаблицыПоступленияПоКурсуАвансов(ПараметрыПроведения.СтруктураТаблицДокумента,
    ТаблицаВзаиморасчеты, ПараметрыПроведения.ЗачетАвансовРеквизиты);

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

    // Взаиморасчеты с комиссионером по продаже
    ТаблицаВзаиморасчетыКомиссияПоПродаже = Документы.ПоступлениеТоваровУслуг.ПодготовитьТаблицуВзаиморасчетыКомиссия(ТаблицаВзаиморасчеты,
    ПараметрыПроведения.ЗачетВыручкиКомиссионераРеквизиты, Отказ);

    // Товары и услуги, закупленные для комитентов
    ТаблицаТоварыУслугиКомиссияПоЗакупке = Документы.ПоступлениеТоваровУслуг.ПодготовитьТаблицуТоварыУслугиКомиссияПоЗакупке(
    СтруктураТаблицДокумента.ТаблицаТоварыУслугиКомиссияПоЗакупке,
    ПараметрыПроведения.ЗачетАвансовКомиссияПоЗакупкеРеквизиты,
    ПараметрыПроведения.Реквизиты);

    // Взаиморасчеты с комитентами по договорам комиссии на закупку
    ТаблицаЗачетАвансовКомиссияПоЗакупке = Документы.ПоступлениеТоваровУслуг.ПодготовитьТаблицуЗачетАвансовКомиссияПоЗакупке(
    ТаблицаТоварыУслугиКомиссияПоЗакупке);
    ТаблицаВзаиморасчетыКомиссияПоЗакупке = УчетВзаиморасчетов.ПодготовитьТаблицуВзаиморасчетовЗачетАвансов(
    ТаблицаЗачетАвансовКомиссияПоЗакупке, Неопределено, ПараметрыПроведения.ЗачетАвансовКомиссияПоЗакупкеРеквизиты, Отказ);

    // Структура таблиц для отражения в налоговом учете УСН
    СтруктураТаблицУСН = Новый Структура;
    СтруктураТаблицУСН.Вставить("ТаблицаРасчетов", ТаблицаВзаиморасчеты);
    СтруктураТаблицУСН.Вставить("ДолгПокупателя" , ТаблицаВзаиморасчетыКомиссияПоПродаже);

    // Учет доходов и расходов ИП
    ТаблицаТоваровИП = УчетДоходовИРасходовПредпринимателя.ПодготовитьТаблицуПоступленияМПЗ(
    ПараметрыПроведения.ИПТаблицаТоваров,
    ПараметрыПроведения.ИПРеквизиты);

    ТаблицаУслугИП = УчетДоходовИРасходовПредпринимателя.ПодготовитьТаблицуПоступленияМПЗ(
    ПараметрыПроведения.ИПТаблицаУслуг,
    ПараметрыПроведения.ИПРеквизиты);

    ТаблицаОборудованияИП = УчетДоходовИРасходовПредпринимателя.ПодготовитьТаблицуПоступленияМПЗ(
    ПараметрыПроведения.ИПТаблицаОборудования,
    ПараметрыПроведения.ИПРеквизиты);

    ТаблицаОсновныеСредстваИП = УчетДоходовИРасходовПредпринимателя.ПодготовитьТаблицуПоступленияМПЗ(
    ПараметрыПроведения.ИПТаблицаОсновныеСредства,
    ПараметрыПроведения.ИПРеквизиты);

    ТаблицаПоступленияОСИП = УчетДоходовИРасходовПредпринимателя.ПодготовитьТаблицуПоступленияОС(
    ТаблицаОсновныеСредстваИП,
    ТаблицаВзаиморасчеты,
    ПараметрыПроведения.ИПРеквизиты);

    ТаблицаОплатыОСИП = УчетДоходовИРасходовПредпринимателя.ПодготовитьТаблицуОплатыОСиНМА(
    Новый Структура("МПЗ", ТаблицаПоступленияОСИП),
    ПараметрыПроведения.Реквизиты);

    ТаблицаПрочееИП = УчетДоходовИРасходовПредпринимателя.ПодготовитьТаблицуПоступленияМПЗ(
    ПараметрыПроведения.ИПТаблицаПрочее,
    ПараметрыПроведения.ИПРеквизиты);

    СтруктураТаблицМПЗ = Новый Структура;
    СтруктураТаблицМПЗ.Вставить("ТаблицаТоваров", ТаблицаТоваровИП);
    СтруктураТаблицМПЗ.Вставить("ТаблицаУслуг", ТаблицаУслугИП);
    СтруктураТаблицМПЗ.Вставить("ТаблицаОборудования", ТаблицаОборудованияИП);
    СтруктураТаблицМПЗ.Вставить("ТаблицаПрочее", ТаблицаПрочееИП);

    ТаблицаПрочихРасчетов = УчетВзаиморасчетов.ПустаяТаблицаПоПрочимРасчетам();

    ТаблицыПоступленияОтФакторинговойКомпанииИП =
    УчетДоходовИРасходовПредпринимателя.ПодготовитьТаблицыПоступленияОтФакторинговойКомпании(
    ПараметрыПроведения.ЗачетАвансовТаблицаДокумента,
    ПараметрыПроведения.ИПРеквизиты, Движения, Отказ);

    Если ЗначениеЗаполнено(ТаблицыПоступленияОтФакторинговойКомпанииИП.ТаблицаПрочиеРасчеты) Тогда
    ОбщегоНазначенияБПВызовСервера.ЗагрузитьВТаблицуЗначений(
    ТаблицыПоступленияОтФакторинговойКомпанииИП.ТаблицаПрочиеРасчеты, ТаблицаПрочихРасчетов);
    КонецЕсли;

    Если НЕ ПроведениеСервер.ГрупповоеПерепроведение(ЭтотОбъект) Тогда
    ТаблицаСтатусовСчетов = СтатусыДокументов.ПодготовитьТаблицуСтатусовПоступленияПоСчетам(
    ПараметрыПроведения.ПоступлениеТоваровУслугПоСчету,
    ПараметрыПроведения.ПоступлениеВозвратнойТарыПоСчету,
    ПараметрыПроведения.Реквизиты);
    КонецЕсли;

    // ФОРМИРОВАНИЕ ДВИЖЕНИЙ

    // Алгоритмы формирования проводок этого документа учитывают малоценку
    Движения.Хозрасчетный.ДополнительныеСвойства.Вставить("ДвиженияПоМалоценнымОбъектамСформированы", Истина);

    // Поступление товаров
    УчетТоваров.СформироватьДвиженияПоступлениеТоваров(СтруктураТаблицДокумента.ТаблицаТовары,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетТоваров.СформироватьДвиженияНачислениеТорговойНаценкиПоступлениеТова­ров(СтруктураТаблицДокумента.ТаблицаТовары,
    ПараметрыПроведения.ПоступлениеТоваровТорговаяНаценкаРеквизиты, Движения, Отказ);

    // Поступление топлива
    УчетТоваров.СформироватьДвиженияПоступлениеПоТопливнымКартам(СтруктураТаблицДокумента.ТаблицаТопливо,
    ПараметрыПроведения.Реквизиты, Движения);

    // Поступление оборудования
    УчетОС.СформироватьДвиженияПоступлениеОборудования(СтруктураТаблицДокумента.ТаблицаОборудование,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Поступление объектов строительства
    УчетОС.СформироватьДвиженияПоступлениеОбъектовСтроительства(СтруктураТаблицДокумента.ТаблицаОбъектыСтроительства,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Поступление основных средств
    УчетОС.ПроверитьВозможностьИзмененияСостоянияОС(ПараметрыПроведения.ПроверкаСостоянияОСТаблица,
    ПараметрыПроведения.ПроверкаСостоянияОСРеквизиты, Отказ);

    УчетОС.СформироватьДвиженияПоступлениеОсновныхСредств(СтруктураТаблицДокумента.ТаблицаОсновныеСредства,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетГрупповыхОС.СформироватьДвиженияПоступлениеГрупповыхОбъектовОС(СтруктураТаблицДокумента.ТаблицаГрупповыеОбъектыОС,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Поступление услуг
    УчетДоходовРасходов.СформироватьДвиженияПоступлениеУслуг(СтруктураТаблицДокумента.ТаблицаУслуги,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Поступление тары
    УчетТоваров.СформироватьДвиженияПоступлениеТары(ПараметрыПроведения.ТаблицаТара,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Поступление товаров на комиссию
    УчетТоваров.СформироватьДвиженияПоступлениеТоваровНаКомиссию(ПараметрыПроведения.ПоступлениеТоваровНаКомиссиюТаблицаТовары,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Поступление в переработку
    УчетТоваров.СформироватьДвиженияПоступлениеМатериаловВПереработку(ПараметрыПроведения.ПоступлениеТоваровВПереработкуТаблицаТовары,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Поступление закупленных товаров и услуг комитентов
    УчетТоваров.СформироватьДвиженияПоступлениеЗакупленныхТоваровУслугКомите­нтов(
    ТаблицаТоварыУслугиКомиссияПоЗакупке, ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Задолженность комитентов по закупленных для них товарам и услугам
    УчетВзаиморасчетов.СформироватьДвиженияПоступлениеЗакупленныхТоваровУслугКомите­нтов(
    ТаблицаТоварыУслугиКомиссияПоЗакупке, ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Зачет аванса
    УчетВзаиморасчетов.СформироватьДвиженияЗачетАвансов(ТаблицаВзаиморасчеты,
    ПараметрыПроведения.ЗачетАвансовРеквизиты, Движения, Отказ);

    // Зачет аванса комитентов
    УчетВзаиморасчетов.СформироватьДвиженияЗачетАвансов(
    ТаблицаВзаиморасчетыКомиссияПоЗакупке, ПараметрыПроведения.ЗачетАвансовКомиссияПоЗакупкеРеквизиты, Движения, Отказ);

    //Движения регистра "Рублевые суммы документов в валюте"
    УчетНДСБП.СформироватьДвиженияРублевыеСуммыДокументовВВалютеПоступлени­еСобственныхТоваровУслуг(СтруктураТаблицДокумента.ТаблицаТовары,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетНДСБП.СформироватьДвиженияРублевыеСуммыДокументовВВалютеПоступлени­еСобственныхТоваровУслуг(СтруктураТаблицДокумента.ТаблицаОборудование,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетНДСБП.СформироватьДвиженияРублевыеСуммыДокументовВВалютеПоступлени­еСобственныхТоваровУслуг(СтруктураТаблицДокумента.ТаблицаОбъектыСтроительства,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетНДСБП.СформироватьДвиженияРублевыеСуммыДокументовВВалютеПоступлени­еСобственныхТоваровУслуг(СтруктураТаблицДокумента.ТаблицаОсновныеСредства,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетНДСБП.СформироватьДвиженияРублевыеСуммыДокументовВВалютеПоступлени­еСобственныхТоваровУслуг(СтруктураТаблицДокумента.ТаблицаГрупповыеОбъектыОС,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетНДСБП.СформироватьДвиженияРублевыеСуммыДокументовВВалютеПоступлени­еСобственныхТоваровУслуг(СтруктураТаблицДокумента.ТаблицаУслуги,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетНДСБП.СформироватьДвиженияРублевыеСуммыДокументовВВалютеБезНДС(ПараметрыПроведения.ТаблицаТара,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетНДСБП.СформироватьДвиженияРублевыеСуммыДокументовВВалюте(ПараметрыПроведения.ПоступлениеТоваровНаКомиссиюТаблицаТовары,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетНДСБП.СформироватьДвиженияРублевыеСуммыДокументовВВалютеБезНДС(ПараметрыПроведения.ПоступлениеТоваровВПереработкуТаблицаТовары,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетНДСБП.СформироватьДвиженияРублевыеСуммыДокументовВВалюте(ТаблицаТоварыУслугиКомиссияПоЗакупке,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Движения регистра ИмпортТоваровТаможенныйСоюз
    РегистрыСведений.ИмпортТоваровТаможенныйСоюз.СформироватьДвиженияИмпортТоваровТС(ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Учет НДС
    УчетНДС.СформироватьДвиженияПоступлениеТоваровУслугОтПоставщика(
    ТаблицыНДС.Товары, ТаблицыНДС.Услуги, ПараметрыПроведения.НомераГТД,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетНДСРаздельный.СформироватьДвиженияПоступлениеТоваровУслугОтПоставщика(
    ТаблицыНДС.Товары, ТаблицыНДС.Услуги, ПараметрыПроведения.Реквизиты,
    Движения, Отказ);

    УчетНДС.СформироватьДвиженияЖурналУчетаСчетовФактурРегистрация(
    ПараметрыПроведения.РегистрацияВЖурналеУчетаСчетовФактур, Движения, Отказ);

    // Учет прослеживаемых товаров
    ПрослеживаемыеОперации = ПараметрыПроведения.ПрослеживаемыеОперации;

    ПрослеживаемостьБП.РассчитатьТаблицуПрослеживаемыеОперацииВРублях(
    ПрослеживаемыеОперации,
    СтруктураТаблицДокумента.ТаблицаТовары,
    ПараметрыПроведения.Реквизиты);

    ПрослеживаемостьБП.РассчитатьТаблицуПрослеживаемыеОперацииВРублях(
    ПрослеживаемыеОперации,
    СтруктураТаблицДокумента.ТаблицаОборудование,
    ПараметрыПроведения.Реквизиты);

    ПрослеживаемостьБП.РассчитатьТаблицуПрослеживаемыеОперацииВРублях(
    ПрослеживаемыеОперации,
    ТаблицаТоварыУслугиКомиссияПоЗакупке,
    ПараметрыПроведения.Реквизиты);

    ПрослеживаемыеОперацииОС = ПараметрыПроведения.ПрослеживаемыеОперацииОС;
    ПрослеживаемостьБП.РассчитатьТаблицуПрослеживаемыеОперацииВРублях(
    ПрослеживаемыеОперацииОС,
    СтруктураТаблицДокумента.ТаблицаОсновныеСредства,
    ПараметрыПроведения.Реквизиты,
    Истина);

    ПрослеживаемостьБП.СформироватьДвиженияПоступлениеТоваров(
    ПараметрыПроведения.ПрослеживаемыеТовары,
    ПрослеживаемыеОперации,
    ПараметрыПроведения.РНПТ,
    ПараметрыПроведения.Реквизиты,
    Движения);

    ПрослеживаемостьБП.СформироватьДвиженияПоступлениеОС(
    ПараметрыПроведения.ПрослеживаемыеОС,
    ПрослеживаемыеОперацииОС,
    ПараметрыПроведения.РНПТОС,
    ПараметрыПроведения.Реквизиты,
    Движения);

    // УСН
    СуммаСторноРасхода = 0;
    УчетУСН.ПоступлениеРасходовУСН(ПараметрыПроведения.УСНТаблицаРасходов,
    ПараметрыПроведения.УСНРеквизиты, СуммаСторноРасхода, Движения, Отказ);

    Если НЕ Отказ И Движения.РасходыПриУСН.Количество() > 0 Тогда
    Движения.РасходыПриУСН.Записать(Истина);
    Движения.РасходыПриУСН.Записывать = Ложь;
    КонецЕсли;

    НалоговыйУчетУСН.СформироватьДвиженияУСН(ЭтотОбъект, СтруктураТаблицУСН);

    // Учет доходов и расходов ИП
    УчетДоходовИРасходовПредпринимателя.СформироватьДвиженияПоступлениеМПЗ(СтруктураТаблицМПЗ,
    ТаблицаВзаиморасчеты, ,ПараметрыПроведения.ИПРеквизиты, Движения, Отказ);

    УчетДоходовИРасходовПредпринимателя.СформироватьДвиженияПоступлениеОС(ТаблицаПоступленияОСИП,
    ПараметрыПроведения.ИПРеквизиты, Движения, Отказ);

    УчетДоходовИРасходовПредпринимателя.РегистрацияСведенийОбОплатеОСиНМА(ТаблицаОплатыОСИП,
    ПараметрыПроведения.ИПРеквизиты, Движения, Отказ);

    УчетВзаиморасчетов.СформироватьДвиженияПоПрочимРасчетам(ТаблицаПрочихРасчетов, Движения, Отказ);

    УчетДоходовИРасходовПредпринимателя.СформироватьДвиженияЗачетОплатыПокупателя(
    ТаблицыПоступленияОтФакторинговойКомпанииИП.ТаблицаИПМПЗОтгруженные,
    ТаблицыПоступленияОтФакторинговойКомпанииИП.ТаблицаВзаиморасчеты,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Переоценка валютных остатков - после формирования проводок всеми другими механизмами
    ТаблицаПереоценка = УчетДоходовРасходов.ПодготовитьТаблицуПереоценкаВалютныхОстатковПоПроводкамДокум­ента(
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетДоходовРасходов.СформироватьДвиженияПереоценкаВалютныхОстатков(ТаблицаПереоценка,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    УчетУСН.СформироватьДвиженияПереоценкаВалютныхОстатков(ТаблицаПереоценка,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);

    // Статусы счетов на оплату поставщика.
    Если НЕ ПроведениеСервер.ГрупповоеПерепроведение(ЭтотОбъект) Тогда
    СтатусыДокументов.СформироватьДвиженияСтатусовДокументов(
    ТаблицаСтатусовСчетов, ПараметрыПроведения.Реквизиты);
    КонецЕсли;

    // Отложенные расчеты с контрагентами.
    УчетВзаиморасчетовОтложенноеПроведение.ЗарегистрироватьОтложенныеРасчетыСКонтрагентами(
    ЭтотОбъект, Отказ, ПараметрыПроведения.РасчетыСКонтрагентамиОтложенноеПроведение);

    // Регистрация в последовательности
    Документы.ПоступлениеТоваровУслуг.ЗарегистрироватьОтложенныеРасчетыВПоследовательности(
    ЭтотОбъект, ПараметрыПроведения, Отказ);

    ПроведениеСервер.УстановитьЗаписьОчищаемыхНаборовЗаписей(ЭтотОбъект);

    Если ЭтотОбъект.РасшАО_В20 Тогда

    Сумма1 = Движения.Хозрасчетный[0].Сумма;
    Сумма2 = Движения.Хозрасчетный[1].Сумма;
    Движения.Хозрасчетный[0].Сумма = Сумма1 + Сумма2;
    Движения.Хозрасчетный.Удалить(1);
    Движения.Хозрасчетный.Удалить(2);
    Движения.Записать();

    КонецЕсли;

    ПараметрыДействия = УчетНДСПереопределяемый.НовыеПараметрыСостоянияСчетаФактуры("Проведен", ЭтотОбъект, "СчетФактураПолученный");
    УчетНДСПереопределяемый.УстановитьСостояниеСчетаФактуры(ПараметрыДействия, Отказ, НЕ УстановленСтатусДокумента);

    КонецПроцедуры
```
---
В самом конце.
---
Это тот который работает, ну вот и посмотрите в чем разница ;) если директива "после"
---
```1c
    &После("ОбработкаПроведения")
    Процедура РасшАО_ОбработкаПроведения(Отказ, РежимПроведения)
    Если ЭтотОбъект.РасшАО_В20 Тогда

    Сумма1 = Движения.Хозрасчетный[0].Сумма;
    Сумма2 = Движения.Хозрасчетный[1].Сумма;
    Движения.Хозрасчетный[0].Сумма = Сумма1 + Сумма2;
    Движения.Хозрасчетный.Удалить(1);
    Движения.Хозрасчетный.Удалить(2);
    Движения.Записать();

    КонецЕсли;

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

Этот не работает.

Так я поэтому и спрашиваю, что разницы не вижу.
---
Это плохо что не видите.
В варианте вместо у вас есть две строки после Вашего кода, в варианте после они были до Вашего кода.
Это то что очевидно (видно очами).
---
Эти строки я вижу, но там что-то про НДС, разве они должны влиять?
Сейчас проверю)
---
да не они главное. Найдите в процедуре то место где пишется основные движения которые Вы хотите откорректировать
И вот их уже сразу пишите скорректированными в зависимости от галочки. У Вас документ двигает куче регистров и план счетов, а вы выносите в другую процедуру изменения в хозрасчетном не указывая к чему это относится.
---
```1c
    &После("ОбработкаПроведения")
    Процедура РасшАО_ОбработкаПроведения(Отказ, РежимПроведения)

    Если ЭтотОбъект.РасшАО_В20 Тогда

    Сумма1 = Движения.Хозрасчетный[0].Сумма;
    Сумма2 = Движения.Хозрасчетный[1].Сумма;
    Движения.Хозрасчетный[0].Сумма = Сумма1 + Сумма2;
    Движения.Хозрасчетный.Удалить(1);
    Движения.Хозрасчетный.Удалить(2);
    Движения.Записать();

    КонецЕсли;

    ПараметрыДействия = УчетНДСПереопределяемый.НовыеПараметрыСостоянияСчетаФактуры("Проведен", ЭтотОбъект, "СчетФактураПолученный");
    УчетНДСПереопределяемый.УстановитьСостояниеСчетаФактуры(ПараметрыДействия, Отказ, НЕ УстановленСтатусДокумента);

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

Тоже не работает.
---
И не будет работать.... Вы не видите разницы и не хотите ее увидеть.
Что такое у Вас Движения.Хозрасчетный в процедуре после?
---
То же самое, что и в варианте с "&Вместо":
---
Найдите в процедуре то место где пишется основные движения которые Вы хотите откорректировать

Это сложно (для меня), поэтому и пытаюсь скорректировать движения на этапе, когда они уже готовы.
---
Вообще должно работать

https://its.1c.ru/db/pubextensions/content/80/hdoc
---
В варианте с "&после" после "Движения.Записать()" все как нужно. Запускаю пользовательский режим - жвижения при проведении не корректируются.
---
Коллега в (3) вам написал как правильно делать. А за Движения.Записать() доступ в конфигуратор нужно отбирать.
---
Я видел этот вариант. Я просто пытаюсь понять почему с "&Вместо" все работает, а с "&После" уже нет.
---
потому что это уже другая процедура...
---
Кто-то еще сделал в другом месте до вас Движения.Записать(). Кроме отладчика вам никто не даст правильный ответ.
---
Я даже скажу кто сделал - разработчики БП) Там в типовой в конце обработки проведения вызывается Движения.Записать()
---
Там в типовой в конце обработки проведения вызывается Движения.Записать()

Ну так я в "&После" тоже делаю Движения.Записать(), чем мои "Записать" хуже)
---
Возможно стоит добавить Движения.Хозрасчетный.Записывать = Истина;?
Т.к. вызов Движения.Записать() этот флаг сбрасывает, в итоге вы свое Движения.Записать() вызываете со сброшенным флагом записи у движения по регистру.
---
Тоже об этом подумал, спасибо большое)
---
```1c
    &После("ОбработкаПроведения")
    Процедура РасшАО_ОбработкаПроведения(Отказ, РежимПроведения)

    Если ЭтотОбъект.РасшАО_В20 Тогда

    Движения.Хозрасчетный.Записывать = Истина;

    Сумма1 = Движения.Хозрасчетный[0].Сумма;
    Сумма2 = Движения.Хозрасчетный[1].Сумма;
    Движения.Хозрасчетный[0].Сумма = Сумма1 + Сумма2;
    Движения.Хозрасчетный.Удалить(1);
    Движения.Хозрасчетный.Удалить(2);

    КонецЕсли;

    ПараметрыДействия = УчетНДСПереопределяемый.НовыеПараметрыСостоянияСчетаФактуры("Проведен", ЭтотОбъект, "СчетФактураПолученный");
    УчетНДСПереопределяемый.УстановитьСостояниеСчетаФактуры(ПараметрыДействия, Отказ, НЕ УстановленСтатусДокумента);

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

Заработало!
---
Всем спасибо)