Здравствуйте, уважаемое сообщество!

1С:Предприятие 8.3 (8.3.17.2198)
1С:Управление торговлей (11.4.13.280)

Столкнулся с проблемой при реализации функционала в 1С:Предприятие. Задача заключалась в автоматическом резервировании товаров при проведении документа "Приобретение Товаров Услуг", ссылаясь на "Заказ Клиента" через "Заказ Поставщику" как на документ-основание. Программа должна резервировать товары, совпадающие по номенклатуре и количеству в заказе поставщика. В случае, если количество товара в заказе клиента превышает наличие, необходимо разбивать строки заказа и резервировать только требуемое количество.

Я успешно реализовал указанный механизм, однако столкнулся с неожиданной, для меня как для новичка, проблемой: при такой реализации не срабатывают стандартные события формы (ПриЗаписи, ПередЗаписью, ПослеЗаписи и т.д.) у Заказа клиента. Это существенно затрудняет дальнейшую работу, так как для полной интеграции моего решения в бизнес-процессы компании требуется выполнение этих событий.

Провел множество попыток найти решение, изучил доступные ресурсы, но так и не нашел подходящего способа. Буду крайне благодарен за любую помощь или направление в правильное решение этой проблемы. Возможно, кто-то сталкивался с подобным или знает, как правильно настроить систему для корректной работы событий формы в такой ситуации.

Спасибо за внимание и потенциальную помощь!

Код реализации в модуле формы ПриобретениеТоваровУслуг:

```1c
    &НаСервере
    Процедура СП_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи)

    ПриобретениеТоваровУслуг = ТекущийОбъект;

    ЗаказКлиента = ПриобретениеТоваровУслуг.ЗаказПоставщику.ДокументОснование;

    Если НЕ ЗначениеЗаполнено(ЗаказКлиента) Тогда
    Возврат;
    КонецЕсли;

    Если НЕ ЗаказКлиента.Проведен или ЗаказКлиента.ПометкаУдаления Тогда
    Возврат;
    КонецЕсли;

    ПолныйРезерв = Истина;
    ПолнаяОтгрузка = Истина;
    Для Каждого Товар из ЗаказКлиента.Товары Цикл;
    Если НЕ Товар.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.СоСклада Тогда
    ПолныйРезерв = Ложь;
    КонецЕсли;

    Если НЕ Товар.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.Отгрузить Тогда
    ПолнаяОтгрузка = Ложь;
    КонецЕсли;
    КонецЦикла;

    Если ПолныйРезерв или ПолнаяОтгрузка Тогда
    Возврат;
    КонецЕсли;

    МенеджерЗаказКлиента = ЗаказКлиента.ПолучитьОбъект();

    СтрокиДляРезерва = Новый Массив;
    СтрокиИсключения = Новый Массив;
    Для каждого ТоварПриобретения из ПриобретениеТоваровУслуг.Товары Цикл
    Для каждого ТоварЗаказа из МенеджерЗаказКлиента.Товары Цикл;
    Если ТоварЗаказа.Номенклатура = ТоварПриобретения.Номенклатура Тогда

    Если ТоварЗаказа.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.СоСклада Тогда
    Продолжить;
    КонецЕсли;

    Если ТоварЗаказа.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.Отгрузить Тогда
    Продолжить;
    КонецЕсли;

    Если СтрокиИсключения.Найти(ТоварЗаказа.НомерСтроки) <> Неопределено Тогда
    Продолжить;
    КонецЕсли;

    Если ТоварЗаказа.Количество > ТоварПриобретения.Количество Тогда
    ТоварЗаказаКоличествоСохр = ТоварЗаказа.Количество;
    ТоварЗаказа.Количество = ТоварПриобретения.Количество;
    ТоварЗаказа.КоличествоУпаковок = ТоварЗаказа.Количество;
    ТоварЗаказа.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.СоСклада;

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

    СтрокиИсключения.Добавить(НоваяСтрока.НомерСтроки);
    Продолжить;
    КонецЕсли;

    ТоварЗаказа.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.СоСклада;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;

    СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(МенеджерЗаказКлиента);

    СтруктураДействий = Новый Структура;

    СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
    СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
    СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
    СтруктураДействий.Вставить("ПересчитатьСумму");
    СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина));
    СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));

    КэшированныеЗначения = Неопределено;
    ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(МенеджерЗаказКлиента.Товары, СтруктураДействий, КэшированныеЗначения);
    МенеджерЗаказКлиента.Записать(РежимЗаписиДокумента.Проведение);

    КонецПроцедуры
```
---
Мой подход содержал ошибку: в данной задаче было целесообразнее написать функции обработки заказа клиента не в модуле формы, а в модуле объекта. В таком случае, при вызове функции ПолучитьОбъект и последующем изменении данных, активируются события ПередЗаписью (Перед/После). В моем случае при проведении ПриобретениеТоваровУслуг, как показано в приведенном выше коде, при изменении данных объекта заказа клиента, инициирует соответствующие события из модуля объекта заказа клиента. Задача успешно решена. Надеюсь, это окажется полезным для кого-то.
---
Я верно понимаю, что ваш код отрабатывает в модуле объекта при проведении? Может как вариант сделать создание документа из окна формы?
---
Код находится в модуле формы документа ПриобретениеТоваровУслуг и там отрабатывает в ПослеЗаписиНаСервереПосле. Что вы имеете ввиду под созданием документа? Документ Приобретение создает сотрудник на основании Заказа поставщику, документ Заказ клиента уже создан.
---
Мой подход содержал ошибку: в данной задаче было целесообразнее написать функции обработки заказа клиента не в модуле формы, а в модуле объекта. В таком случае, при вызове функции ПолучитьОбъект и последующем изменении данных, активируются события ПередЗаписью (Перед/После). В моем случае при проведении ПриобретениеТоваровУслуг, как показано в приведенном выше коде, при изменении данных объекта заказа клиента, инициирует соответствующие события из модуля объекта заказа клиента. Задача успешно решена. Надеюсь, это окажется полезным для кого-то.