Не срабатывают события формы ЗаказКлиента при программном резервировании товаров 1С УТ из события формы ПриобретениеТоваровУслуг 1С:Предприятие 8.3 (8.3.17.2198)
Здравствуйте, уважаемое сообщество!
1С:Предприятие 8.3 (8.3.17.2198)
1С:Управление торговлей (11.4.13.280)
Столкнулся с проблемой при реализации функционала в 1С:Предприятие. Задача заключалась в автоматическом резервировании товаров при проведении документа "Приобретение Товаров Услуг", ссылаясь на "Заказ Клиента" через "Заказ Поставщику" как на документ-основание. Программа должна резервировать товары, совпадающие по номенклатуре и количеству в заказе поставщика. В случае, если количество товара в заказе клиента превышает наличие, необходимо разбивать строки заказа и резервировать только требуемое количество.
Я успешно реализовал указанный механизм, однако столкнулся с неожиданной, для меня как для новичка, проблемой: при такой реализации не срабатывают стандартные события формы (ПриЗаписи, ПередЗаписью, ПослеЗаписи и т.д.) у Заказа клиента. Это существенно затрудняет дальнейшую работу, так как для полной интеграции моего решения в бизнес-процессы компании требуется выполнение этих событий.
Провел множество попыток найти решение, изучил доступные ресурсы, но так и не нашел подходящего способа. Буду крайне благодарен за любую помощь или направление в правильное решение этой проблемы. Возможно, кто-то сталкивался с подобным или знает, как правильно настроить систему для корректной работы событий формы в такой ситуации.
Спасибо за внимание и потенциальную помощь!
Код реализации в модуле формы ПриобретениеТоваровУслуг:
1С:Предприятие 8.3 (8.3.17.2198)
1С:Управление торговлей (11.4.13.280)
Столкнулся с проблемой при реализации функционала в 1С:Предприятие. Задача заключалась в автоматическом резервировании товаров при проведении документа "Приобретение Товаров Услуг", ссылаясь на "Заказ Клиента" через "Заказ Поставщику" как на документ-основание. Программа должна резервировать товары, совпадающие по номенклатуре и количеству в заказе поставщика. В случае, если количество товара в заказе клиента превышает наличие, необходимо разбивать строки заказа и резервировать только требуемое количество.
Я успешно реализовал указанный механизм, однако столкнулся с неожиданной, для меня как для новичка, проблемой: при такой реализации не срабатывают стандартные события формы (ПриЗаписи, ПередЗаписью, ПослеЗаписи и т.д.) у Заказа клиента. Это существенно затрудняет дальнейшую работу, так как для полной интеграции моего решения в бизнес-процессы компании требуется выполнение этих событий.
Провел множество попыток найти решение, изучил доступные ресурсы, но так и не нашел подходящего способа. Буду крайне благодарен за любую помощь или направление в правильное решение этой проблемы. Возможно, кто-то сталкивался с подобным или знает, как правильно настроить систему для корректной работы событий формы в такой ситуации.
Спасибо за внимание и потенциальную помощь!
Код реализации в модуле формы ПриобретениеТоваровУслуг:
&НаСервере
Процедура СП_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи)
ПриобретениеТоваровУслуг = ТекущийОбъект;
ЗаказКлиента = ПриобретениеТоваровУслуг.ЗаказПоставщику.ДокументОснование;
Если НЕ ЗначениеЗаполнено(ЗаказКлиента) Тогда
Возврат;
КонецЕсли;
Если НЕ ЗаказКлиента.Проведен или ЗаказКлиента.ПометкаУдаления Тогда
Возврат;
КонецЕсли;
ПолныйРезерв = Истина;
ПолнаяОтгрузка = Истина;
Для Каждого Товар из ЗаказКлиента.Товары Цикл;
Если НЕ Товар.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.СоСклада Тогда
ПолныйРезерв = Ложь;
КонецЕсли;
Если НЕ Товар.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.Отгрузить Тогда
ПолнаяОтгрузка = Ложь;
КонецЕсли;
КонецЦикла;
Если ПолныйРезерв или ПолнаяОтгрузка Тогда
Возврат;
КонецЕсли;
МенеджерЗаказКлиента = ЗаказКлиента.ПолучитьОбъект();
СтрокиДляРезерва = Новый Массив;
СтрокиИсключения = Новый Массив;
Для каждого ТоварПриобретения из ПриобретениеТоваровУслуг.Товары Цикл
Для каждого ТоварЗаказа из МенеджерЗаказКлиента.Товары Цикл;
Если ТоварЗаказа.Номенклатура = ТоварПриобретения.Номенклатура Тогда
Если ТоварЗаказа.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.СоСклада Тогда
Продолжить;
КонецЕсли;
Если ТоварЗаказа.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.Отгрузить Тогда
Продолжить;
КонецЕсли;
Если СтрокиИсключения.Найти(ТоварЗаказа.НомерСтроки) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если ТоварЗаказа.Количество > ТоварПриобретения.Количество Тогда
ТоварЗаказаКоличествоСохр = ТоварЗаказа.Количество;
ТоварЗаказа.Количество = ТоварПриобретения.Количество;
ТоварЗаказа.КоличествоУпаковок = ТоварЗаказа.Количество;
ТоварЗаказа.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.СоСклада;
НоваяСтрока = МенеджерЗаказКлиента.Товары.Добавить();
НоваяСтрока.Номенклатура = ТоварЗаказа.Номенклатура;
НоваяСтрока.ПроцентАвтоматическойСкидки = ТоварЗаказа.ПроцентАвтоматическойСкидки;
НоваяСтрока.ПроцентРучнойСкидки = ТоварЗаказа.ПроцентРучнойСкидки;
НоваяСтрока.Склад = ТоварЗаказа.Склад;
НоваяСтрока.СтавкаНДС = ТоварЗаказа.СтавкаНДС;
НоваяСтрока.Цена = ТоварЗаказа.Цена;
НоваяСтрока.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.Требуется;
НоваяСтрока.Количество = ТоварЗаказаКоличествоСохр - ТоварПриобретения.Количество;
НоваяСтрока.КоличествоУпаковок = НоваяСтрока.Количество;
НоваяСтрока.ВидЦены = ТоварЗаказа.ВидЦены;
СтрокиИсключения.Добавить(НоваяСтрока.НомерСтроки);
Продолжить;
КонецЕсли;
ТоварЗаказа.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.СоСклада;
КонецЕсли;
КонецЦикла;
КонецЦикла;
СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(МенеджерЗаказКлиента);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
КэшированныеЗначения = Неопределено;
ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(МенеджерЗаказКлиента.Товары, СтруктураДействий, КэшированныеЗначения);
МенеджерЗаказКлиента.Записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры
ПоказатьНайденные решения
Мой подход содержал ошибку: в данной задаче было целесообразнее написать функции обработки заказа клиента не в модуле формы, а в модуле объекта. В таком случае, при вызове функции ПолучитьОбъект и последующем изменении данных, активируются события ПередЗаписью (Перед/После). В моем случае при проведении ПриобретениеТоваровУслуг, как показано в приведенном выше коде, при изменении данных объекта заказа клиента, инициирует соответствующие события из модуля объекта заказа клиента. Задача успешно решена. Надеюсь, это окажется полезным для кого-то.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
Код находится в модуле формы документа ПриобретениеТоваровУслуг и там отрабатывает в ПослеЗаписиНаСервереПосле. Что вы имеете ввиду под созданием документа? Документ Приобретение создает сотрудник на основании Заказа поставщику, документ Заказ клиента уже создан.
Код находится в модуле формы документа ПриобретениеТоваровУслуг и там отрабатывает в ПослеЗаписиНаСервереПосле. Что вы имеете ввиду под созданием документа? Документ Приобретение создает сотрудник на основании Заказа поставщику, документ Заказ клиента уже создан.
Мой подход содержал ошибку: в данной задаче было целесообразнее написать функции обработки заказа клиента не в модуле формы, а в модуле объекта. В таком случае, при вызове функции ПолучитьОбъект и последующем изменении данных, активируются события ПередЗаписью (Перед/После). В моем случае при проведении ПриобретениеТоваровУслуг, как показано в приведенном выше коде, при изменении данных объекта заказа клиента, инициирует соответствующие события из модуля объекта заказа клиента. Задача успешно решена. Надеюсь, это окажется полезным для кого-то.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот