Аналогичные типовые формы берут данные по ценам из регистра сведений ЦеныНоменклатуры. Но есть организации, которые такой прайс не ведут. Да и нужно бывает, чтобы цена в акте соответствовала бухгалтерским проводкам после расчета себестоимости. В этой ПФ можно выбрать вариант формирования цен - из прайса или из себестоимости.
Данная печатная форма кроме пользы бухгалтерам может послужить учебным примером, как делать расчёт для печати двумя способами без использования дополнительной формы настроек. В обычных формах и толстом клиенте можно было вызвать диалог из модуля объекта и выбрать вариант. В управляемых формах в клиент-серверной архитектуре такой трюк не пройдёт.
Можно при старте вызывать специальную форму, как это предлагают, например, здесь.
А можно задать в описании две команды печати с разным названием, и по каждой команде запускать свою процедуру формирования данных для печати.
Функция СведенияОВнешнейОбработке() Экспорт
//Данные для заполнения сведений об обработке:
НаименованиеОбработки = ЭтотОбъект.Метаданные().Синоним; // Возьмем из синонима
ВерсияОбработки = СтрЗаменить(ЭтотОбъект.Метаданные().Комментарий,"v",""); // Возьмем из комментария
ИнформацияПоОбрабтке = "Внешняя печатная форма 'Акт на списание материалов'
|с расчетом цен либо из регистра сведений ЦеныНоменклатуры, аналогично типовой 'Требование-накладная (М-11)',
|либо из регистра накопления СебестоимостьТоваров (Работает только после закрытия месяца и расчета себестоимости).
|Во втором случае из себестоимости цена берется без НДС
|";
//Массив назначений
МассивНазначений = Новый Массив;
УказанныеТипы = ЭтотОбъект.Метаданные().Реквизиты.Документ.Тип.Типы(); // Возьмем типы из реквизита "Документ"
Для Каждого УказанныйТип ИЗ УказанныеТипы Цикл
ОбъектМетаданных = Метаданные.НайтиПотипу(УказанныйТип);
Если ОбъектМетаданных <> Неопределено Тогда
МассивНазначений.Добавить("Документ." + ОбъектМетаданных.Имя);
КонецЕсли;
КонецЦикла;
//Добавляемые команды на формы документов
ТаблицаКоманд = ПолучитьТаблицуКоманд();
//Варианты формирования источника цен
//Из регистра сведений ЦеныНоменклатуры, аналогично типовой "Требование-накладная (М-11)"
ДобавитьКоманду(ТаблицаКоманд, НаименованиеОбработки + " (по ценам)", ИмяМакета, "ВызовСерверногоМетода", Истина, "ПечатьMXL");
//Из регистра накопления СебестоимостьТоваров. Работает только после закрытия месяца
ДобавитьКоманду(ТаблицаКоманд, НаименованиеОбработки + " (по себестоимости)", ИмяМакета + "2", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
//Заполняем структуру сведений
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); // Варинаты: ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); // Массив документов, обрабатываемых обработкой
ПараметрыРегистрации.Вставить("Наименование", НаименованиеОбработки); // Имя под которым обработка будет зарегестрирована в справочнике внешних обработок
ПараметрыРегистрации.Вставить("Версия", ВерсияОбработки); // Версия обработки, которая будет отображаться в справочнике внешних обработок
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь); // Включение безопасного режима
ПараметрыРегистрации.Вставить("Информация", ИнформацияПоОбрабтке); // Описание обработки для пользователя
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); // Таблица команд, добавляемых в систему
Возврат ПараметрыРегистрации;
КонецФункции
В процедуре Печать анализируется окончание имени макета из коллекции, и если 2, то добавляется параметр ПоСебестоимости.
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода, ПараметрыПечати = Неопределено) Экспорт
//Выбираем вариант отчета
Если Прав(КоллекцияПечатныхФорм[0].ИмяВРЕГ,1) = "2" Тогда
//выбор при запуске из документа
ПоСебестоимости = Истина;
КоллекцияПечатныхФорм[0].ИмяМакета = ИмяМакета;
КоллекцияПечатныхФорм[0].ИмяВРЕГ = ВРег(ИмяМакета);
КоллекцияПечатныхФорм[0].СинонимМакета = СинонимМакета;
ИначеЕсли ТипЗнч(ПараметрыПечати) = Тип("Структура") И ПараметрыПечати.Свойство("ПоСебестоимости") Тогда
//выбор при запуске из формы внешнего отчета
ПоСебестоимости = ПараметрыПечати.ПоСебестоимости;
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ИмяМакета ) Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
ИмяМакета, СинонимМакета,
ПечатьАктНаСписаниеМатериалов(МассивОбъектов, ОбъектыПечати, ИмяМакета, СинонимМакета, ПоСебестоимости));
КонецЕсли;
КонецПроцедуры
После загрузки печатной формы, появятся две строки с командами.
В зависимости от условий конкретной базы можно либо оставить активными обе команды, либо деактивировать одну из них.
За образец основной формы я взял этот шаблон
Данная печатная форма тестировалась в конфигурации 1с Комплексная автоматизация 2.4.13.148 (8.3.18.1289).
27.12.2022 добавлена версия под КА 2.5.9 и выше в связи со сменой названия документа в конфигурации с "ВнутреннееПотреблениеТоваров" на "ВнутреннееПотребление". Кто скачал раннюю версию, достаточно подменить объект-документ в обработке в Конфигураторе. Или скачать последнюю версию )