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

Вывод нескольких макетов в один печатный документ.

Автор ksander-fars, 23 ноя 2016, 09:34

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

ksander-fars

Здраствуйте. ЗУП 2.5

Как можно сделать что бы печатные документы при формировании выводились не каждый отдельно а все в одном?

То есть в одном печатном документе договора индивидуальной мат. ответственности, во втором договора коллективной мат. ответственности, а в третьем направления в бухгалтерию.... Ума не приложу как сделать, а то выводит кучу однотипных документов в разных окнах и это очень не продуктивно...

Вот кусок листинга.

ЗапросНаВыборкуПризнакаМатОтв = Новый Запрос;

ЗапросНаВыборкуПризнакаМатОтв.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                                      |   КадровоеПеремещениеОрганизацийРаботникиОрганизации.Сотрудник,
                                      |   КадровоеПеремещениеОрганизацийРаботникиОрганизации.Должность,
                                      |   КадровоеПеремещениеОрганизацийРаботникиОрганизации.Ссылка
                                      |ИЗ
                                      |   Документ.КадровоеПеремещениеОрганизаций.РаботникиОрганизации КАК КадровоеПеремещениеОрганизацийРаботникиОрганизации
                                      |ГДЕ
                                      |   КадровоеПеремещениеОрганизацийРаботникиОрганизации.Ссылка = &СсылкаНаДокумент";
            
ЗапросНаВыборкуПризнакаМатОтв.УстановитьПараметр("СсылкаНаДокумент", Ссылка);

ВыборкаПризнакаМатОтв = ЗапросНаВыборкуПризнакаМатОтв.Выполнить();

РезультатВыбПризнМатОтв = ВыборкаПризнакаМатОтв.Выбрать();

Пока РезультатВыбПризнМатОтв.Следующий() Цикл
   
   СсылкаНаСотрудника       =    РезультатВыбПризнМатОтв.Сотрудник;
   ДолжностьСотрудника    =     РезультатВыбПризнМатОтв.Должность;
   СсылкаНаДокПИМОиПКМО    =     РезультатВыбПризнМатОтв.Ссылка;
   
РезТерн_ДогИндМатОтв = ПризнакИндМатериальнойОтветственности(СсылкаНаСотрудника);

Если РезТерн_ДогИндМатОтв[0] = 1 Тогда
   
   
   ТабДокументИндОтв = Новый ТабличныйДокумент;
   Приказ59_ИндОтв = ЭтотОбъект.ПолучитьМакет("Приказ59_ИндОтв");
   Шапка = Приказ59_ИндОтв.ПолучитьОбласть("Шапка");         
   Если Параметры.Руководитель = ("Щербаков В.Ф.") Тогда
      Шапка.Параметры.ГенДиректор = "Щербакова Владимира Фёдоровича";
   ИначеЕсли
      Параметры.Руководитель = "Какурин С.В."  Тогда
      Шапка.Параметры.ФИОРукДатП = "Какурина Сергея Валерьевича";
   ИначеЕсли
      Параметры.Руководитель = "Новикова Н.Г."  Тогда
      Шапка.Параметры.ФИОРукДатП = "Новиковой Натальи Григорьевны";
   ИначеЕсли
      Параметры.Руководитель = "Щербаков А.В."  Тогда
      Шапка.Параметры.ФИОРукДатП = "Щербакова Антона Владимировича";
   ИначеЕсли
      Параметры.Руководитель = "Бабицкий О.Э."  Тогда
      Шапка.Параметры.ФИОРукДатП = "Бабицкого Олега Эдуардовича";
   ИначеЕсли
      Параметры.Руководитель = "Бабицкий Ан.Э."  Тогда
      Шапка.Параметры.ФИОРукДатП = "Бабицкого Андрея Эдуардовича";
   ИначеЕсли         
      Параметры.Руководитель = "Рябков Владимир Сергеевич"  Тогда
      Шапка.Параметры.ФИОРукДатП = "Рябкова Владимира Сергеевича";
   КонецЕсли;    
   
   
   Шапка.Параметры.Наименование = СсылкаНаСотрудника;
   Шапка.Параметры.Должность = ДолжностьСотрудника;
   Шапка.Параметры.ТекстЗама = Параметры.ДоверенностьРуководитель;
   
   ТабДокументИндОтв.Вывести(Шапка);
   
   ТабДокументИндОтв.ОтображатьСетку = Ложь;
   ТабДокументИндОтв.Защита = Ложь;
   ТабДокументИндОтв.ТолькоПросмотр = Ложь;
   ТабДокументИндОтв.ОтображатьЗаголовки = Ложь;
   ТабДокументИндОтв.АвтоМасштаб = Истина;
   ТабДокументИндОтв.ПолеСправа = 2;
   ТабДокументИндОтв.ПолеСлева = 15;
   ТабДокументИндОтв.ПолеСверху = 12;
   ТабДокументИндОтв.ПолеСнизу = 2;
   
   ТабДокументИндОтв.Показать();
   
КонецЕсли;

//   //   
//   //Печать договора коллективной материальной ответственности
//   //
   
   РезТерн_ДогКоллМатОтв = ПризнакКоллМатериальнойОтветственности(СсылкаНаСотрудника);
   

   
   
   Если РезТерн_ДогКоллМатОтв[0] = 1 Тогда
      
      ТабДокументКолОтв = Новый ТабличныйДокумент;
      Приказ59_КолОтв = ЭтотОбъект.ПолучитьМакет("Приказ59_КолОтв");
      Шапка = Приказ59_КолОтв.ПолучитьОбласть("Шапка");         
      Если Параметры.Руководитель = ("Щербаков В.Ф.") Тогда
         Шапка.Параметры.ГенДиректор = "Щербакова Владимира Фёдоровича";
      ИначеЕсли
         Параметры.Руководитель = "Какурин С.В."  Тогда
         Шапка.Параметры.ФИОРукДатП = "Какурина Сергея Валерьевича";
      ИначеЕсли
         Параметры.Руководитель = "Новикова Н.Г."  Тогда
         Шапка.Параметры.ФИОРукДатП = "Новиковой Натальи Григорьевны";
      ИначеЕсли
         Параметры.Руководитель = "Щербаков А.В."  Тогда
         Шапка.Параметры.ФИОРукДатП = "Щербакова Антона Владимировича";
      ИначеЕсли
         Параметры.Руководитель = "Бабицкий О.Э."  Тогда
         Шапка.Параметры.ФИОРукДатП = "Бабицкого Олега Эдуардовича";
      ИначеЕсли
         Параметры.Руководитель = "Бабицкий Ан.Э."  Тогда
         Шапка.Параметры.ФИОРукДатП = "Бабицкого Андрея Эдуардовича";
      ИначеЕсли         
         Параметры.Руководитель = "Рябков Владимир Сергеевич"  Тогда
         Шапка.Параметры.ФИОРукДатП = "Рябкова Владимира Сергеевича";
      КонецЕсли;    
      Шапка.Параметры.ТекстЗама = Параметры.ДоверенностьРуководитель;
      ТабДокументКолОтв.Вывести(Шапка);
      
      ТабДокументКолОтв.ОтображатьСетку = Ложь;
      ТабДокументКолОтв.Защита = Ложь;
      ТабДокументКолОтв.ТолькоПросмотр = Ложь;
      ТабДокументКолОтв.ОтображатьЗаголовки = Ложь;
      ТабДокументКолОтв.АвтоМасштаб = Истина;
      ТабДокументКолОтв.ПолеСправа = 2;
      ТабДокументКолОтв.ПолеСлева = 15;
      ТабДокументКолОтв.ПолеСверху = 12;
      ТабДокументКолОтв.ПолеСнизу = 2;
      
      ТабДокументКолОтв.Показать();   
      
   КонецЕсли;
   
////
////Направление в бухгалтерию
////

   Если РезТерн_ДогИндМатОтв[0] = 1 Или РезТерн_ДогКоллМатОтв[0] = 1 Тогда
      
      ТабДокументНапрВБух = Новый ТабличныйДокумент;
      Приказ59_НаправлениеВБухгалтерию = ЭтотОбъект.ПолучитьМакет("Приказ59_НаправлениеВБухгалтерию");
      Шапка = Приказ59_НаправлениеВБухгалтерию.ПолучитьОбласть("Шапка");         
      
      Шапка.Параметры.Наименование    =    СсылкаНаСотрудника;
      Шапка.Параметры.Должность       =    ДолжностьСотрудника;
      Шапка.Параметры.Подразделение   =   ВложеннаяВыборка.НовоеПодразделение;      
      
      ТабДокументНапрВБух.Вывести(Шапка);
      
      ТабДокументНапрВБух.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
      ТабДокументНапрВБух.ОтображатьСетку = Ложь;
      ТабДокументНапрВБух.Защита = Ложь;
      ТабДокументНапрВБух.ТолькоПросмотр = Ложь;
      ТабДокументНапрВБух.ОтображатьЗаголовки = Ложь;
      ТабДокументНапрВБух.АвтоМасштаб = Истина;
      ТабДокументНапрВБух.ПолеСправа = 2;
      ТабДокументНапрВБух.ПолеСлева = 15;
      ТабДокументНапрВБух.ПолеСверху = 12;
      ТабДокументНапрВБух.ПолеСнизу = 2;
      
      ТабДокументНапрВБух.Показать();   
      
   КонецЕсли;

КонецЦикла;

Kironten

В смысле, ума не приложите? О.о
Выводите все в ОДИН табличный документ, делите разделителями. В конце за пределами цикла выводите этот ОДИН общий табличный документ.
Т.е. н вашем примере:
...

Если РезТерн_ДогИндМатОтв[0] = 1 Тогда

ТабДок = Новый ТабличныйДокумент;
Приказ59_ИндОтв = ЭтотОбъект.ПолучитьМакет("Приказ59_ИндОтв");

...

//ТабДокументИндОтв.Показать();
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

КонецЕсли;

// //
// //Печать договора коллективной материальной ответственности
// //

РезТерн_ДогКоллМатОтв = ПризнакКоллМатериальнойОтветственности(СсылкаНаСотрудника);

Если РезТерн_ДогКоллМатОтв[0] = 1 Тогда

Приказ59_КолОтв = ЭтотОбъект.ПолучитьМакет("Приказ59_КолОтв");
Шапка = Приказ59_КолОтв.ПолучитьОбласть("Шапка");
Если Параметры.Руководитель = ("Щербаков В.Ф.") Тогда
Шапка.Параметры.ГенДиректор = "Щербакова Владимира Фёдоровича";
ИначеЕсли
Шапка.Параметры.ТекстЗама = Параметры.ДоверенностьРуководитель;

...

ТабДок.Вывести(Шапка);

//ТабДокументКолОтв.ОтображатьСетку = Ложь;
//ТабДокументКолОтв.Защита = Ложь;
//ТабДокументКолОтв.ТолькоПросмотр = Ложь;
//ТабДокументКолОтв.ОтображатьЗаголовки = Ложь;
//ТабДокументКолОтв.АвтоМасштаб = Истина;
//ТабДокументКолОтв.ПолеСправа = 2;
//ТабДокументКолОтв.ПолеСлева = 15;
//ТабДокументКолОтв.ПолеСверху = 12;
//ТабДокументКолОтв.ПолеСнизу = 2;

//ТабДокументКолОтв.Показать();
  ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
 
КонецЕсли;

////
////Направление в бухгалтерию
////

Если РезТерн_ДогИндМатОтв[0] = 1 Или РезТерн_ДогКоллМатОтв[0] = 1 Тогда

//ТабДокументНапрВБух = Новый ТабличныйДокумент;
Приказ59_НаправлениеВБухгалтерию = ЭтотОбъект.ПолучитьМакет("Приказ59_НаправлениеВБухгалтерию");
Шапка = Приказ59_НаправлениеВБухгалтерию.ПолучитьОбласть("Шапка");

Шапка.Параметры.Наименование = СсылкаНаСотрудника;
Шапка.Параметры.Должность = ДолжностьСотрудника;
Шапка.Параметры.Подразделение = ВложеннаяВыборка.НовоеПодразделение;

ТабДок.Вывести(Шапка);

//ТабДокументНапрВБух.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
//ТабДокументНапрВБух.ОтображатьСетку = Ложь;
//ТабДокументНапрВБух.Защита = Ложь;
//ТабДокументНапрВБух.ТолькоПросмотр = Ложь;
//ТабДокументНапрВБух.ОтображатьЗаголовки = Ложь;
//ТабДокументНапрВБух.АвтоМасштаб = Истина;
//ТабДокументНапрВБух.ПолеСправа = 2;
//ТабДокументНапрВБух.ПолеСлева = 15;
//ТабДокументНапрВБух.ПолеСверху = 12;
//ТабДокументНапрВБух.ПолеСнизу = 2;

ТабДок.Показать();

КонецЕсли;

КонецЦикла;

ТабДок.Показать();

ksander-fars

ДА я понял как это делается, но выходит ошибка если нет именно таких макетов, а такое может быть. То есть не стоит признак индивидуальной ответственности.

{ВнешняяОбработка.ПечатныеФормы_Терней.МодульОбъекта(2207)}: Значение не является значением объектного типа (Показать)
   ТабДокументИндОтв.Показать();

И второе это почему то выводится документ по одному человеку...
Добавлено: 24 ноя 2016, 03:06


Ошибка была связанна с пустым документом, это решено. А вот то что из документа кадровое перемещение по какой-то причине выводится один человек я так и не понял пока. То есть без объедения страниц в один табдок всё работает а в общем выводится один человек.
Добавлено: 24 ноя 2016, 04:20


Разобрался, надо было объявление табличного документа вынести перед циклом. спасибо

Теги:

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

Рейтинг@Mail.ru

Поиск