четверг, 21 сентября 2017 г.

Макет СКД как печатная форма

Макет СКД прекрасно подходит для прорисовки печатных форм.

1) Сначала нужно создать Макет СКД для объекта печати (ПКМ по объекту - добавить - макет)




Получаем запросом данные для печати и устанавливаем параметр отбора по объекту печати :

*На данном этапе нужно обратить внимание на тип параметра.

2) Процедуры модуля команды печати:


Листинг:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

Если ПроверкаВозмоджностиПечати(ПараметрКоманды) Тогда
Предупреждение("Документ нужно провести!", 60);
Возврат
КонецЕсли;

ТабДок = Новый ТабличныйДокумент;
Печать(ПараметрКоманды, ТабДок);
ТабДок.Показать();
КонецПроцедуры

&НаСервере
Функция ПроверкаВозмоджностиПечати(ПараметрКоманды)
Возврат НЕ ПараметрКоманды.Проведен;
КонецФункции

&НаСервере
Процедура Печать(ПараметрыКоманды,ТабДок);
Документы.ПродажиТоваров.Печать(ПараметрыКоманды, ТабДок);
КонецПроцедуры

2) Процедура формирования табличного документа печатной формы:


Листинг:

Процедура Печать(Документ, ТабДок) Экспорт

//Получаем макет СКД
Макет = Документы.ПродажиТоваров.ПолучитьМакет("Макет");

//Создаем компановщик настроек
КомпановщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпановщикНастроек.ЗагрузитьНастройки(Макет.НастройкиПоУмолчанию); //Позволяет избежать программной настройки макета

//Получаем параметр "Документ"
ПарамДок = Новый ПараметрКомпоновкиДанных("Документ"); 
ПарамДокСтрока = КомпановщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПарамДок);

//Установим Значение параметра
ПарамДокСтрока.Значение = Документ;
ПарамДокСтрока.Использование = Истина;

//Подготовим макет к созданию отчета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Макет, КомпановщикНастроек.Настройки); 
ПроцессорКомпоновки = Новый  ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

//Выводим данные в табличный документ 
ПроцессорВывода = Новый  ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры


4 комментария:

  1. Отличный мануал! Спасибо!

    ОтветитьУдалить
  2. Не пойму, почему у меня стопорится на этом пункте:
    ////Установим Значение параметра
    ПарамДокСтрока.Значение = Документ;

    С ошибкой Значение не является значением объектного типа (Значение)

    Подскажите, пожалуйста.

    ОтветитьУдалить
  3. Скорее всего, из-за обновления платформы. Если написать всё так, как здесь написано - он создаст пустые настройки. И не найдёт в этих настройках параметр "Документ" (ПарамДокСтрока = Неопределено). Как сделать правильно - сейчас ищу сам.

    ОтветитьУдалить
  4. Можно сделать так (заранее извиняюсь за ламерство - но лучше так, чем ничего):

    Парам = Новый ПараметрКомпоновкиДанных("Документ");

    НовыйЭлемент = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Добавить();
    НовыйЭлемент.Параметр = Парам;
    НовыйЭлемент.Использование = Истина;
    НовыйЭлемент.Значение = Документ;
    КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Документ", Документ);

    ОтветитьУдалить