Добрый день.

Создаю внешнюю обработку, которая автоматически создает документы.
Но мне нужно, чтобы Обработка проведения отработала иначе, чем указано в модуле объекта - обработка проведения.
Как это сделать?
---
Возможно, такой ход поможет:

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

```1c
    ДокОбъект.ОбменДанными.Загрузка=Истина;
    ...
    ДокОбъект.Проведен=Истина;
    ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
```

В этом случае обработчики из конфигурации не запустятся.

Написать свою процедуру формирования нужных движений регистров в этой же обработке.
К наборам записей можно обращаться так:

```1c
    НужныйРег=ДокОбъект.Движения.НужныйРегистр;
```

или так:

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

Поясню, это внешняя обработку и не хотелось бы лезть в конфигурацию.
Обработка по сути разовая.
---
А что значит иначе?
Вам в любом случае надо менять проведение. Так как через обработку можно изменить проведение, например после проведения поправить регистры программно. Но после стандартного перепроведения, все ваши изменения будут затерты.
---
Ну например для переноса документов закрытых периодов, в которых реальное проведение актуализирует какие-то регистры сведений со статусами текущей датой (а надо например не текущей, а какой-то другой). Или если при проведении осуществляется контроль остатков, а надо его обойти...
Да, перепроведение потом все перепишет - но это уже регулируется правами доступа и закрытыми периодами...

Случай частный, но тем не менее. Сам несколько раз так делал.
---
т.е. нельзя перехватить документ и сделать по другому перепроведение?
---
Нет, через расширение можно изменить процедуру проведения. Но в обработке нельзя.
---
Вы можете очистить результат проведения, и прописать свои, но как и писал выше, после перепроведения все встанет на места.
---
Созданный документ записываете в режиме ОбменДанными.Загрузка = Истина. Движения документа создаете отдельно и записываете отдельно.
---
Без ОбменДанными.Загрузка = Истина смысл не теряется. Проверил на УТ10 и 11.

```1c
    Ссылка = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("0в00-000022",ТекущаяДата());
    Реализация = Ссылка.ПолучитьОбъект();
    //Реализация.ОбменДанными.Загрузка=Истина;
    Реализация.Проведен=Истина;
    Реализация.Записать(РежимЗаписиДокумента.Запись);
```

Движения так же добавляются вручную, вопрос, попадает ли новый документ в "изменения" для обмена на логике обработчиков и подписок, срабатывающих ПриЗаписи.
---
Так-то оно так. Но обработчики "Перед записью" модуля документа начнут выполняться. Время увеличится. Отказ может где-то выстрелить, если что-то не заполнено.
---
Они в любом случае начнут выполняться... Просто грамотный разработчик в начале обработчика всегда Возврат прописывает для Загрузки. Но не все грамотные, ой не все...
---
В заголовке написано, что это УТ-10 и/или УТ-11. В модулях типовых документов обеих этих конфигураций есть конструкция

```1c
    Если ОбменДанными.Загрузка Тогда
    Возврат;
    КонецЕсли;
```
---
А кто сказал, что речь про типовые? Могут быть и нетиповые. А могут быть про наколбашенные рядом самописные подписки.
---
Возможно, такой ход поможет:

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

```1c
    ДокОбъект.ОбменДанными.Загрузка=Истина;
    ...
    ДокОбъект.Проведен=Истина;
    ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
```

В этом случае обработчики из конфигурации не запустятся.

Написать свою процедуру формирования нужных движений регистров в этой же обработке.
К наборам записей можно обращаться так:

```1c
    НужныйРег=ДокОбъект.Движения.НужныйРегистр;
```

или так:

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

Автора интересовала техническая сторона, ему подсказали. Вопрос закрыт.