Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
26 мая 2024, 12:57

Несколько печатных форм во внешней печатной форме

Автор SnakeSolid, 20 фев 2018, 11:20

0 Пользователей и 1 гость просматривают эту тему.

SnakeSolid

Здравствуйте коллеги.
Подскажите, пожалуйста, что нужно сделать.
Делаю ВПФ.
Разумеется пишу так.
Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.СчетФактураВыданный"); //Указываем документ к которому делаем внешнюю печ. форму
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "СчетФактураГоловнойКПП"); //наименование печатной формы
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма счет-фактуры выданной для контрагентов с КПП головной организации");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Счет-фактура головной КПП", //наименование печатной формы в списке дополнительных ВПФ конкретного документа
"СчетФактураГоловнойКПП", //наименование печатной формы
"ВызовСерверногоМетода", Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

Возврат ПараметрыРегистрации;

КонецФункции

............................

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура1137") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура1137", "Счет-фактура",
ПечатьСчетовФактур1137(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Ложь)),, "ОбщийМакет.ПФ_MXL_СчетФактура1137");
КонецЕсли;

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура981") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура981", "Счет-фактура",
ПечатьСчетовФактур981(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Истина)),, "ОбщийМакет.ПФ_MXL_СчетФактура981");
КонецЕсли;

ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов,
КоллекцияПечатныхФорм,
ОбъектыПечати,
ПараметрыВывода);

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


При подключении 1С ругается, что "В обработчике печати не был сформирован табличный документ для: СчетФактураГоловнойКПП"

Ели я пишу так:

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактураГоловнойКПП") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактураГоловнойКПП", "Счет-фактура",
ПечатьСчетовФактур1137(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Ложь)),, "ОбщийМакет.ПФ_MXL_СчетФактура1137");
КонецЕсли;

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактураГоловнойКПП") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактураГоловнойКПП", "Счет-фактура",
ПечатьСчетовФактур981(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Истина)),, "ОбщийМакет.ПФ_MXL_СчетФактура981");
КонецЕсли;

ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов,
КоллекцияПечатныхФорм,
ОбъектыПечати,
ПараметрыВывода);

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


то программа уже не ругается, но, разумеется, подхватывается только одна последняя форма.

А мне необходимо, чтобы в зависимости от ситуации подхватывалась разная форма!!!

Многие в инее пишут, что можно добавить еще команды:

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.СчетФактураВыданный"); //Указываем документ к которому делаем внешнюю печ. форму
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "СчетФактураГоловнойКПП"); //наименование печатной формы
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма счет-фактуры выданной для контрагентов с КПП головной организации");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Счет-фактура головной КПП", //наименование печатной формы в списке дополнительных ВПФ конкретного документа
"СчетФактураГоловнойКПП1", //наименование печатной формы
"ВызовСерверногоМетода", Истина, "ПечатьMXL");

ДобавитьКоманду(ТаблицаКоманд,
"Счет-фактура головной КПП", //наименование печатной формы в списке дополнительных ВПФ конкретного документа
"СчетФактураГоловнойКПП2", //наименование печатной формы
"ВызовСерверногоМетода", Истина, "ПечатьMXL");

ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

Возврат ПараметрыРегистрации;

КонецФункции

но при таком подходе просто добавляются еще варианты печатных команд в кнопке "Печать".
Такой вариант мне не подходит.
Необходимо, чтобы форма сама автоматом подхватывалась нужная при необходимом условии.

Что не так делаю?

AIFrame

Подозреваю, что
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура1137") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура1137", "Счет-фактура",
            ПечатьСчетовФактур1137(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Ложь)),, "ОбщийМакет.ПФ_MXL_СчетФактура1137");
    ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура981") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура981", "Счет-фактура",       
            ПечатьСчетовФактур981(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Истина)),, "ОбщийМакет.ПФ_MXL_СчетФактура981");
    ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактураГоловнойКПП") Тогда
        //Что-то еще
    Иначе
        // Что-то еще
    КонецЕсли;

SnakeSolid

Цитата: AIFrame от 20 фев 2018, 11:26
Подозреваю, что
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура1137") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура1137", "Счет-фактура",
            ПечатьСчетовФактур1137(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Ложь)),, "ОбщийМакет.ПФ_MXL_СчетФактура1137");
    ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура981") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура981", "Счет-фактура",       
            ПечатьСчетовФактур981(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Истина)),, "ОбщийМакет.ПФ_MXL_СчетФактура981");
    ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактураГоловнойКПП") Тогда
        //Что-то еще
    Иначе
        // Что-то еще
    КонецЕсли;



спасибо, но это не вариант же
Печатью я подхватываю макеты из типовой конфы.
Вы предлагаете добавить еще форму в конфигурацию? Конфа у меня на ключе!

AIFrame

Где я это предложил?
По-моему, нигде не предлагал ни формы, ни макеты.
Ну да ладно. Я все равно не про то подумал.
Цитироватьмне необходимо, чтобы в зависимости от ситуации подхватывалась разная форма
Ну так и описывай эту ситуацию в процедуре Печать.
Смотрим
// Проверить, нужно ли печатать макет.
// Функция предназначена для использования только внутри процедуры Печать.
//
// Параметры:
//  КоллекцияПечатныхФорм - ТаблицаЗначений - служебный параметр, переданный в процедуру Печать;
//  ИмяМакета             - Строка          - имя проверяемого макета.
//
// Возвращаемое значение:
//  Булево - Истина, если макет надо печатать.
Функция НужноПечататьМакет(КоллекцияПечатныхФорм, ИмяМакета) Экспорт

Возврат КоллекцияПечатныхФорм.Найти(ВРег(ИмяМакета), "ИмяВРЕГ") <> Неопределено;

КонецФункции

А КоллекцияПечатныхФорм - обычная таблица значений.
Теперь попробуй для отладки написать
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
       
    Для Каждого СтрокаТЧ из КоллекцияПечатныхФорм Цикл
        Сообщить(СтрокаТЧ.ИмяВРЕГ);
    КонецЦикла;
   
КонецПроцедуры

SnakeSolid

Цитата: AIFrame от 20 фев 2018, 11:52Теперь попробуй для отладки написать
Код: [Выделить]
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
       
    Для Каждого СтрокаТЧ из КоллекцияПечатныхФорм Цикл
        Сообщить(СтрокаТЧ.ИмяВРЕГ);
    КонецЦикла;
   
КонецПроцедуры

Данная отладка выдает сообщение "СЧЕТФАКТУРАГОЛОВНОЙКПП" !!! Он и воспринимает "СчетФактураГоловнойКПП" как ИмяМакета.

Но не может же быть такого, чтобы по умолчанию ВПФ была заточена всего-лишь под один макет?

Про добавление условий я читал в интернете, а есть другой способ?
У меня складывается впечатление ,что вроде тут должно быть просто и я туплю сильно, но я уже просмотрел УправлениеПечатью и не вижу, где и какой параметр нужен в итоге.
Добавлено: 20 фев 2018, 12:49


смотрите, что обнаружил!

Если код делаем так:

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.СчетФактураВыданный"); //Указываем документ к которому делаем внешнюю печ. форму
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "СчетФактураГоловнойКПП"); //наименование печатной формы
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма счет-фактуры выданной для контрагентов с КПП головной организации");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Счет-фактура головной КПП", //наименование печатной формы в списке дополнительных ВПФ конкретного документа
"СчетФактура1137,СчетФактура981", //наименование печатной формы
"ВызовСерверногоМетода", Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

Возврат ПараметрыРегистрации;

КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура1137") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура1137", "Счет-фактура",
ПечатьСчетовФактур1137(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Ложь)),, "ОбщийМакет.ПФ_MXL_СчетФактура1137");
КонецЕсли;

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура981") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура981", "Счет-фактура",
ПечатьСчетовФактур981(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Истина)),, "ОбщийМакет.ПФ_MXL_СчетФактура981");
КонецЕсли;

ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов,
КоллекцияПечатныхФорм,
ОбъектыПечати,
ПараметрыВывода);

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


То программа выводит вот такое на печать:


Т.е. сразу обе печатные формы, НО С ВЫБОРОМ !!!

А если же я изменяю код вот так:

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура1137") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура1137", "Счет-фактура",
ПечатьСчетовФактур1137(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Ложь)),, "ОбщийМакет.ПФ_MXL_СчетФактура1137");

ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура981") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура981", "Счет-фактура",
ПечатьСчетовФактур981(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Истина)),, "ОбщийМакет.ПФ_MXL_СчетФактура981");
КонецЕсли;

ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов,
КоллекцияПечатныхФорм,
ОбъектыПечати,
ПараметрыВывода);

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


то снова выскакивает ошибка, что "В обработчике печати не был сформирован табличный документ для: ИмяМакета"

AIFrame

Цитата: SnakeSolid от 20 фев 2018, 12:12Данная отладка выдает сообщение "СЧЕТФАКТУРАГОЛОВНОЙКПП"
Потому что кроме этого макета в коллекции ничего и нет.
Потому что кроме этого макета у тебя в ВПФ ничего нет (см. Команды).
Ты их не объявил.
Если ты хочешь, чтобы у тебя ВПФ печатала И типовые макеты И твои из ВПФ - научи ее этому в процедуре Печать. Опиши там, когда какой макет формировать.
МассивОбъектов - список документов в виде массива.
Т.е. ты можешь получить любой в цикле
Для ИНД=0 по МассивОбъектов.Количество()-1 Цикл
    Документ =  МассивОбъектов[ИНД];
КонецЦикла;

Смотри их и принимай решение, когда какой макет нужен.

SnakeSolid

Цитата: AIFrame от 20 фев 2018, 12:52Если ты хочешь, чтобы у тебя ВПФ печатала И типовые макеты И твои из ВПФ - научи ее этому в процедуре Печать. Опиши там, когда какой макет формировать.

Хочу сказать, что у меня нет своих макетов.
Я беру только типовые счет-фактуру и корректировочную счет-фактуру!

Я вообще полностью беру процедуру ПЕЧАТЬ из Модуля Менеджера СчетФактураВыданный.


Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура", "Счет-фактура",
УчетНДСБП.ПечатьСчетовФактур(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(Ложь,Ложь,Ложь)));
КонецЕсли;

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура1137") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура1137", "Счет-фактура",
УчетНДС.ПечатьСчетовФактур1137(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Ложь)),,
"ОбщийМакет.ПФ_MXL_СчетФактура1137");
КонецЕсли;

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура981") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"СчетФактура981", "Счет-фактура",
УчетНДС.ПечатьСчетовФактур981(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур(,,Истина)),,
"ОбщийМакет.ПФ_MXL_СчетФактура981");
КонецЕсли;

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "КорректировочныйСчетФактура") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"КорректировочныйСчетФактура", "Корректировочный счет-фактура",
УчетНДСБП.ПечатьКорректировочныхСчетовФактур(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьКорректировочныхСчетовФактур(Ложь, Ложь,,Ложь)),,
"ОбщийМакет.ПФ_MXL_КорректировочныйСчетФактура");

КонецЕсли;

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "КорректировочныйСчетФактура1137") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"КорректировочныйСчетФактура1137", "Корректировочный счет-фактура",
УчетНДС.ПечатьКорректировочныхСчетовФактур1137(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьКорректировочныхСчетовФактур(, Ложь,,Ложь)),,
"ОбщийМакет.ПФ_MXL_КорректировочныйСчетФактура1137");
КонецЕсли;

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "КорректировочныйСчетФактура952") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"КорректировочныйСчетФактура952", "Корректировочный счет-фактура",
УчетНДС.ПечатьКорректировочныхСчетовФактур952(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьКорректировочныхСчетовФактур(,,,Ложь)),,
"ОбщийМакет.ПФ_MXL_КорректировочныйСчетФактура952");
КонецЕсли;

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "КорректировочныйСчетФактура981") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"КорректировочныйСчетФактура981", "Корректировочный счет-фактура",
УчетНДС.ПечатьКорректировочныхСчетовФактур981(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьКорректировочныхСчетовФактур(,,,Истина)),,
"ОбщийМакет.ПФ_MXL_КорректировочныйСчетФактура981");
КонецЕсли;

ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов,
КоллекцияПечатныхФорм,
ОбъектыПечати,
ПараметрыВывода);

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

AIFrame

Это все замечательно, но вызываешь то ты ее не из модуля менеджера объекта конфигурации, а из внешней обработки. И передаешь в нее другие параметры.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск