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