Добрый день, коллеги.
Давеча потребовалось реализовать в "1С Комплексная автоматизация 2.5" автоматическое (программное) нажатие вот этой кнопочки в документах "Заказ клиента" и "Заказ на перемещение" про проведении "расходного ордера на товары" со статусом "Отгружен".
Нужно это для того чтобы автоматически убрать из распоряжений товары, которые не были отгружены ордером.
Механика следующая: проводим расходный ордер на товары в статусе ОТГРУЖЕН, после его проведения автоматически отменяются необработанные строки распоряжений из табличной части "Товары по распоряжениям".
Вышел из положения, создав расширение (дополнение), добавив в него форму документа расходного ордера на товары и добавив в него расширение процедуры "ПослеЗаписиНаСервере".
Код привожу. Авось, облегчит кому-то жизнь. Можно его использовать как базу для дальнейшего развития этой части функционала. Думаю, подойдет и для ERP и для УТ11.
Тестировалось на конфигурации "1С:Комплексная автоматизация 2 (2.5.20.46) "
Само расширение не выкладываю, ибо у меня в нём много посторонней всячины.
&НаСервере
Процедура Расш1_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи)
//Отменим сроки в заказе
Если Объект.Статус = Перечисления.СтатусыРасходныхОрдеров.Отгружен Тогда
СписокРаспоряжений = Новый СписокЗначений;
Для Каждого СтрТекЗаказ Из Объект.ТоварыПоРаспоряжениям Цикл
Если СписокРаспоряжений.НайтиПоЗначению(СтрТекЗаказ.Распоряжение) = Неопределено Тогда
СписокРаспоряжений.Добавить(СтрТекЗаказ.Распоряжение);
КонецЕсли;
КонецЦикла;
Для Каждого ЭлЗаказ Из СписокРаспоряжений Цикл
Если ТипЗнч(ЭлЗаказ.Значение) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
ТекЗаказ = ЭлЗаказ.Значение;
ТекЗаказОбъектДокумента = ТекЗаказ.ПолучитьОбъект();
ПричинаОтмены = Неопределено;
ПроверятьОстатки = ТекЗаказ.Проведен;
ОтменитьНеотработанныеСтроки = Истина;
СтруктураКорректировки = ЗаказыСервер.СтруктураКорректировкиСтрокЗаказа();
СтруктураКорректировки.ДокументОбъект = ТекЗаказОбъектДокумента;
СтруктураКорректировки.ПричинаОтмены = ПричинаОтмены;
СтруктураКорректировки.ПроверятьОстатки = ПроверятьОстатки;
СтруктураКорректировки.ОтменитьНеотработанныеСтроки = ОтменитьНеотработанныеСтроки;
СтруктураРезультата = ПродажиСервер.СкорректироватьСтрокиЗаказа(СтруктураКорректировки);
КоличествоОтмененныхСтрок = СтруктураРезультата.КоличествоСтрок;
Если ТекЗаказОбъектДокумента.Проведен Тогда
ТекЗаказОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Иначе
ТекЗаказОбъектДокумента.Записать();
КонецЕсли;
Сообщить("Отменено " + КоличествоОтмененныхСтрок + " из документа " + ТекЗаказ);
ИначеЕсли ТипЗнч(ЭлЗаказ.Значение) = Тип("ДокументСсылка.ЗаказНаПеремещение") Тогда
ТекЗаказ = ЭлЗаказ.Значение;
ТекЗаказОбъектДокумента = ТекЗаказ.ПолучитьОбъект();
СтруктураКорректировкиСтрокЗаказа = ЗаказыСервер.СтруктураКорректировкиСтрокЗаказа();
СтруктураКорректировкиСтрокЗаказа.ОтменитьНеотработанныеСтроки = Истина;
СтруктураКорректировкиСтрокЗаказа.ПроверятьОстатки = Истина;
РезультатОтмены = ТекЗаказОбъектДокумента.СкорректироватьСтрокиЗаказа(СтруктураКорректировкиСтрокЗаказа);
Если ТекЗаказОбъектДокумента.Проведен Тогда
ТекЗаказОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Иначе
ТекЗаказОбъектДокумента.Записать();
КонецЕсли;
Сообщить(РезультатОтмены.Оповещение + " из " + ТекЗаказ);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры