Имя: Пароль:
1C
1С v8
Распечатать 2 макета в одной печатной форме.
0 Iskatel
 
11.05.16
08:43
Здравствуйте!  Необходимо создать внешнюю печатную форму , которая должна распечатывать сразу СчетФактуру и 2 Акта выполненных работ.  Созданы два макета.  Какое условие нужно создать чтобы распечаталось эти три документа сразу.    
Если Документ.Дата<Дата(2015,07,13) Тогда
             Макет = ПолучитьМакет("Акт");
         Иначе
             Макет = ПолучитьМакет("Акт13072015");
                
                         
                  КонецЕсли;
Это условие печатает только 1 акт.
1 Iskatel
 
11.05.16
08:45
Куда нужно вставить еще макет счет фактуры?
2 Serg_1960
 
11.05.16
09:00
Наводящий вопрос: макет ты получаешь в "Макет", а куда его выводишь? :)
3 Iskatel
 
11.05.16
09:05
// Задать параметры макета.
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_АКТ_СДАЧИ_ПРИЕМКИ";
    
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ТабДокумент.ИмяПринтера         = ПринтерПоУмолчанию();
    ТабДокумент.АвтоМасштаб         = Истина;

    Если НЕ Документ.ВидРеализации = Справочники.ВидыРеализации.НайтиПоКоду(28) Тогда
        Если Документ.Дата<Дата(2015,07,13) Тогда
             Макет = ПолучитьМакет("Акт");
         Иначе
             Макет = ПолучитьМакет("Акт13072015");
                
                         
                  КонецЕсли;
            
    Иначе
        Макет = ПолучитьМакет("АктЛицензирование");      
    КонецЕсли;
    
    Корректировка = ДОкумент.ПризнакКорректировки;
    Аренда        = ?(Документ.ВидРеализации = Справочники.ВидыРеализации.НайтиПоКоду(5),Истина,Ложь);
    Если Корректировка Тогда
        кСумма    = Документ.Суммы[0].КорректируемыйДокумент.СуммаДокумента;
        кСуммаНДС = Документ.Суммы[0].КорректируемыйДокумент.СуммаНДС;
        кДата     = Документ.Суммы[0].КорректируемыйДокумент.Дата;
        кНомер    = Документ.Суммы[0].КорректируемыйДокумент.Номер;
    КонецЕсли;
    
    
    
    ЗапросСтрок = Новый Запрос;
    ЗапросСтрок.УстановитьПараметр("ТекущийДокумент", Документ.Ссылка);
    ЗапросСтрок.Текст = "ВЫБРАТЬ
                        |    РеализацияТоваровИУслугСуммы.Ссылка,
                        |    РеализацияТоваровИУслугСуммы.Номенклатура КАК Номенклатура,
                        |    РеализацияТоваровИУслугСуммы.Номенклатура.ЕдиницаИзмерения КАК ЕдИзм,
                        |    РеализацияТоваровИУслугСуммы.Количество КАК Количество,
                        |    РеализацияТоваровИУслугСуммы.Цена,
                        |    РеализацияТоваровИУслугСуммы.СуммаНДС КАК СуммаНДС,
                        |    РеализацияТоваровИУслугСуммы.Сумма КАК Сумма,
                        |    РеализацияТоваровИУслугСуммы.Сумма - РеализацияТоваровИУслугСуммы.СуммаНДС КАК СуммаБезНДС
                        |ИЗ
                        |    Документ.РеализацияМатериальныхАктивов.Суммы КАК РеализацияТоваровИУслугСуммы
                        |ГДЕ
                        |    РеализацияТоваровИУслугСуммы.Ссылка = &ТекущийДокумент
                        //|    И (НЕ РеализацияТоваровИУслугСуммы.Номенклатура = &НоменклатураШапкаДляАкта)
                        |ИТОГИ
                        |    СУММА(Количество),
                        |    СУММА(СуммаНДС),
                        |    СУММА(Сумма),
                        |    СУММА(СуммаБезНДС)
                        |ПО
                        |    ОБЩИЕ";
                        
    ДанныеСтрок = ЗапросСтрок.Выполнить().Выбрать();
    
    Если НЕ ДанныеСтрок.Следующий() Тогда
        
        Сообщить("Нет данных для печати.");
        
    // Есть данные для печати.
    Иначе    
    
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("ТекущийДокумент", Документ.Ссылка);
        Запрос.Текст = "
            |ВЫБРАТЬ
            |    РеализацияТоваровИУслуг.Дата                                                 КАК ДатаДок,
            |    РеализацияТоваровИУслуг.Контрагент.Ссылка                                     КАК КонтрагентСсылка,
            |    РеализацияТоваровИУслуг.Контрагент.ПолноеНаименование                         КАК Контрагент,
            |    РеализацияТоваровИУслуг.Договор.Договор                                     КАК Договор,
            |    РеализацияТоваровИУслуг.Контрагент.ОсновнойАдрес                             КАК КонтрагентАдрес,
            |    РеализацияТоваровИУслуг.Контрагент.ОсновнойАдрес.Индекс                        КАК КонтрагентИндекс,
            |    РеализацияТоваровИУслуг.ПрефиксНомера                                         КАК ПрефиксДок,
            |    РеализацияТоваровИУслуг.ПостфиксНомера                                         КАК ПостфиксДок,
            |    РеализацияТоваровИУслуг.Номер                                                 КАК НомерДок,
            |    КомментарииОбъектов.Комментарий                                             КАК Комментарий
            |ИЗ
            |    Документ.РеализацияМатериальныхАктивов КАК РеализацияТоваровИУслуг
            |    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КомментарииОбъектов КАК КомментарииОбъектов
            |        ПО РеализацияТоваровИУслуг.Ссылка = КомментарииОбъектов.Объект
            |ГДЕ
            |    РеализацияТоваровИУслуг.Ссылка = &ТекущийДокумент";    
        Данные = Запрос.Выполнить().Выбрать();
        Данные.Следующий();
        
        // Вывести шапку.
        ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
        ОбластьМакета.Параметры.НомерДок = Данные.НомерДок;
        ОбластьМакета.Параметры.ДатаДок =  Данные.ДатаДок;
        //получать наименование от даты (мой кусочек кода)
        НашаОрганизация = Справочники.Контрагенты.НашаОрганизация;
        ДатаАктуальности = Дата(2015,07,08);
        ЗапросНаименование = Новый Запрос;
        ЗапросНаименование.Текст =
          "ВЫБРАТЬ
          |    ПараметрыКонтрагента.Значение КАК ПолноеНаименование
          |ИЗ
          |    РегистрСведений.ПараметрыКонтрагента КАК ПараметрыКонтрагента
          |ГДЕ
          |    ПараметрыКонтрагента.Идентификатор = ""ПолноеНаименование""
          |    И ПараметрыКонтрагента.Период = &ДатаАктуальности
          |    И ПараметрыКонтрагента.Контрагент = &Контрагент";
         ЗапросНаименование.УстановитьПараметр("Контрагент",НашаОрганизация);
        Если Документ.Дата>=ДатаАктуальности Тогда
            ЗапросНаименование.УстановитьПараметр("ДатаАктуальности",ДатаАктуальности);
        Иначе
            ЗапросНаименование.УстановитьПараметр("ДатаАктуальности",Дата(2011,01,01));
        КонецЕсли;
        ВыборкаНаименование = ЗапросНаименование.Выполнить().Выбрать();
            Если ВыборкаНаименование.Следующий() Тогда
                ОбластьМакета.Параметры.ПредставлениеОрганизации = ВыборкаНаименование.ПолноеНаименование;
            КонецЕсли;
        // Конец (мой кусочек кода)     
            
        //ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ПолноеНаименование(НашаОрганизация);
        Если НашаОрганизация.ОсновнойАдрес = "" Тогда
            ОбластьМакета.Параметры.НашАдрес = "";
        Иначе    
            ОбластьМакета.Параметры.НашАдрес = "" + НашаОрганизация.ОсновнойАдрес.Индекс + " " + НашаОрганизация.ОсновнойАдрес;
        КонецЕсли;
        
        
        // Определить контрагента.
        ОтборПолноеНаименование = Новый Структура;
        ОтборПолноеНаименование.Вставить("Контрагент", Данные.КонтрагентСсылка);
        ОтборПолноеНаименование.Вставить("Идентификатор", "ПолноеНаименование");

        Попытка
            тз = РегистрыСведений.ПараметрыКонтрагента.СрезПоследних(Данные.ДатаДок,ОтборПолноеНаименование);
            ОбластьМакета.Параметры.Контрагент = тз[0].Значение;
            //ОбластьМакета.Параметры.Контрагент = Данные.Контрагент;
        Исключение
            Сообщить("Не заполнено полное наименование контаргента!", СтатусСообщения.Важное);
        КонецПопытки;
        
        Если Данные.КонтрагентАдрес = NULL Тогда
            ОбластьМакета.Параметры.АдресКонтрагента = "";
        Иначе    
            ОбластьМакета.Параметры.АдресКонтрагента = "" + Данные.КонтрагентИндекс + " " + Данные.КонтрагентАдрес;
        КонецЕсли;
        
        ОбластьМакета.Параметры.НомерДоговора = Данные.Договор;
        
        ТабДокумент.Вывести(ОбластьМакета);
            
        // Вывести заголовок.
        ОбластьЗаголовка = Макет.ПолучитьОбласть("Заголовок");
        ТабДокумент.Вывести(ОбластьЗаголовка);
        
        // Вывести строки.
        ОбластьМакета = Макет.ПолучитьОбласть("Строка");
        
        ИтогКоличество = ДанныеСтрок.Количество;
        ИтогБезНДС = ДанныеСтрок.СуммаБезНДС;
        ИтогНДС = ДанныеСтрок.СуммаНДС;
        ИтогСумма = ДанныеСтрок.Сумма;
        
        // Определить переменные для использования в ШАБЛОНЕ элемента справочника "Номенклатура".
        НомерДокумента        = СокрЛП(Строка(Данные.НомерДок));
        ДатаДокумента        = Данные.ДатаДок;
        Комментарий            = СокрЛП(Данные.Комментарий);
        ВидДокумента        = "РеализацияТоваровИУслуг";
        ДоговорДокумента    = Данные.Договор;
        
        
        Ном = 1;
        
        Пока ДанныеСтрок.Следующий() Цикл
            
            Если глПустоеЗначение(ДанныеСтрок.Номенклатура) Тогда
                Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
                Продолжить;
            КонецЕсли;
            
            Если Ном = 1 и ДанныеСтрок.Сумма = 0 Тогда
                //информационная строка
                
                ОбластьМакета.Параметры.Заполнить(ДанныеСтрок);
                
                Если НЕ глПустоеЗначение(ДанныеСтрок.Номенклатура.Шаблон) Тогда
                    Попытка
                        ОбластьМакета.Параметры.Номенклатура = Вычислить(ДанныеСтрок.Номенклатура.Шаблон);
                    Исключение
                        Сообщить("Ошибка вычисления шаблона '" + ДанныеСтрок.Номенклатура.Шаблон + "' " + ОписаниеОшибки());
                    КонецПопытки;
                КонецЕсли;
                ТабДокумент.Вывести(ОбластьМакета);
                Продолжить;
            КонецЕсли;
            
            
            ОбластьМакета.Параметры.Ном = Ном;
            ОбластьМакета.Параметры.Заполнить(ДанныеСтрок);
            
            Если НЕ глПустоеЗначение(ДанныеСтрок.Номенклатура.Шаблон) Тогда
                Попытка
                    ОбластьМакета.Параметры.Номенклатура = Вычислить(ДанныеСтрок.Номенклатура.Шаблон);
                Исключение
                    Сообщить("Ошибка вычисления шаблона '" + ДанныеСтрок.Номенклатура.Шаблон + "' " + ОписаниеОшибки());
                КонецПопытки;
            КонецЕсли;
            Если Корректировка И Аренда И ном = 1 Тогда
                ОбластьМакета.Параметры.Номенклатура = "Аренда газопроводов за "+Формат(кДата, "ДФ = ММММ")+" "+Формат(кДата, "ДФ = гггг")+ "г. по договору №"+СокрЛП(Документ.Договор.Наименование)+" от "+Формат(ДОкумент.Договор.Договор.ДатаДоговора,"ДФ=dd.MM.yyyy")+"г.";
                ОбластьМакета.Параметры.Сумма        = ДанныеСтрок.Сумма+кСумма;
                ОбластьМакета.Параметры.СуммаНДС     = ДанныеСтрок.СуммаНДС+кСуммаНДС;
                ОбластьМакета.Параметры.СуммаБезНДС  = (ДанныеСтрок.Сумма+кСумма)- (ДанныеСтрок.СуммаНДС+кСуммаНДС);
                ОбластьМакета.Параметры.Цена         = (ДанныеСтрок.Сумма+кСумма)- (ДанныеСтрок.СуммаНДС+кСуммаНДС);
                ИтогНДС    = ДанныеСтрок.СуммаНДС+кСуммаНДС;
                ИтогБезНДС = (ДанныеСтрок.Сумма+кСумма)- (ДанныеСтрок.СуммаНДС+кСуммаНДС);
                ИтогСумма  = ДанныеСтрок.Сумма+кСумма;
                
            КонецЕсли;
            Если Число(ОбластьМакета.Параметры.СуммаНДС) = 0 Тогда
                ОбластьМакета.Параметры.СуммаНДС = "Без НДС";
            КонецЕсли;
            
            ТабДокумент.Вывести(ОбластьМакета);
            Ном = Ном+1;
        КонецЦикла;

        // Вывести подвал.
        ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
        ОбластьМакета.Параметры.ИтогКоличество = ИтогКоличество;
        ОбластьМакета.Параметры.ИтогБезНДС = ИтогБезНДС;
        ОбластьМакета.Параметры.ИтогНДС = ИтогНДС;
        ОбластьМакета.Параметры.ИтогСумма = ИтогСумма;
        ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ПолноеНаименование(НашаОрганизация);
        ОбластьМакета.Параметры.Контрагент = Данные.Контрагент;
        ОбластьМакета.Параметры.ИтогСуммаПрописью = ФормированиеПечатныхФорм.СуммаПрописью(ИтогСумма);
        ОбластьМакета.Параметры.ИтогСуммаНДС = "" + Цел(ИтогНДС) + " руб. " +  ((ИтогНДС- Цел(ИтогНДС))*100) + " коп.";
        Если Число(ОбластьМакета.Параметры.ИтогНДС) = 0 Тогда
                ОбластьМакета.Параметры.ИтогСуммаНДС = " НДС не облагается на основании пп.26 п.2 ст.149 НК РФ";
        КонецЕсли;


        ОбластьМакета.Параметры.Комментарий = ОбщиеПроцедуры.ПолучитьКомментарийОбъекта(Документ.Ссылка);
        ОбластьМакета.Параметры.НомерДоговора = Данные.Договор;
        

        Руководитель = ФормированиеПечатныхФорм.ОтветственныеЛица(КонецДня(Документ.Дата));
        ФормированиеПечатныхФорм.УстановитьЗначениеПараметраОбластиМакета(ОбластьМакета,"ФИОРуководителя",КадровыйУчет.ФамилияИнициалыФизЛица(Руководитель.Руководитель, "Фамилия ИО" , Документ.Дата));
        ФормированиеПечатныхФорм.УстановитьЗначениеПараметраОбластиМакета(ОбластьМакета,"ДолжностьРуководителя", СокрЛП(Руководитель.РуководительДолжность));
        Запрос = Новый Запрос;
        Запрос.Текст = "
            |ВЫБРАТЬ  ПЕРВЫЕ 1
            |    КонтактныеЛица.Должность.Представление     КАК Должность,
            |    КонтактныеЛица.ОснованиеДеятельности     КАК Документ,
            |    КонтактныеЛица.ФИО                         КАК ФИО,
            |    КонтактныеЛица.Владелец                 КАК Владелец
            |ИЗ
            |    Справочник.КонтактныеЛица КАК КонтактныеЛица
            |ГДЕ
            |    КонтактныеЛица.РолиКонтактногоЛица.Роль.Ссылка = &ПредопределенныйРуководитель
            |    И КонтактныеЛица.ПометкаУдаления = ЛОЖЬ
            |    И &Контрагент = КонтактныеЛица.Владелец";
        
        Запрос.УстановитьПараметр("ПредопределенныйРуководитель",   Справочники.РолиКонтактногоЛица.Руководитель);
        Запрос.УстановитьПараметр("Контрагент",Данные.КонтрагентСсылка);
        ВыборкаЗапроса = Запрос.Выполнить().Выгрузить();
        Если ВыборкаЗапроса.Количество()<>0 Тогда
            ФормированиеПечатныхФорм.УстановитьЗначениеПараметраОбластиМакета(ОбластьМакета,"ФИОКонтрагента",ОбщиеПроцедуры.ПолучитьФамилиюИО(ВыборкаЗапроса[0].ФИО));
            ФормированиеПечатныхФорм.УстановитьЗначениеПараметраОбластиМакета(ОбластьМакета,"ДолжностьКонтрагента",ВыборкаЗапроса[0].Должность);
            ФормированиеПечатныхФорм.УстановитьЗначениеПараметраОбластиМакета(ОбластьМакета,"ОснованиеКонтрагента",ВыборкаЗапроса[0].Документ);
        КонецЕсли;
        
        Если глПустоеЗначение(Документ.Руководитель) тогда
            ОбластьМакета.Параметры.Подпись_ФИОРуководителя = "";
        Иначе
            ОбластьМакета.Параметры.Подпись_ФИОРуководителя = "/"+КадровыйУчет.ФамилияИнициалыФизЛица(Документ.Руководитель, "Фамилия ИО" , Документ.Дата)+"/";
            ОбластьМакета.Параметры.Подпись_ДолжностьРуководителя = РегистрыСведений.ОсновныеКадровыеДанные.ПолучитьПоследнее(Документ.Дата, Новый Структура("ФизЛицо",Документ.ИсполнительныйДиректор)).Должность;
        КонецЕсли;

        
        
        Если Корректировка И Аренда Тогда
            ОбластьМакета.Параметры.Комментарий = "Данный акт составлен в соответсвии с Доп.соглашением № 1 от 25.11.2008г. к договору №"+СокрЛП(Документ.Договор.Наименование)+" от "+Формат(ДОкумент.Договор.Договор)+"г. и принимается сторонами во изменение Акта №"+кНомер;

        КонецЕсли;
        
        //* вывод подписей в макет
        Подписи.Свойство("РуководительКонтрагента", ОбластьМакета.Параметры.Подпись_ФИОРуководителяКонтрагента);
        Подписи.Свойство("ДолжностьРуководителяКонтрагента", ОбластьМакета.Параметры.Подпись_ДолжностьРуководителяКонтрагента);
        //* конец вывода подписей в макет

        
        ТабДокумент.Вывести(ОбластьМакета);

                
        Возврат ТабДокумент;

    КонецЕсли;
    
КонецФункции // ПечатьТребованииНакладной()


Это уже часть рабочей формы, которая печатает только акт. Создан макет счет фактуры. как его засунуть сюда
4 Serg_1960
 
11.05.16
09:18
Типа, как-то так:

ОбщаяФормаНаПечать = Новый ТабличныйДокумент();
ОбщаяФормаНаПечать.Вывести(ТвойДокумент.Печать("Акт"));
ОбщаяФормаНаПечать.Вывести(ТвойДокумент.Печать("СчетФактура"));
5 FIXXXL
 
11.05.16
09:25
(3) да точно так же
перед Возврат ТабДокумент;
получаешь макет сч/ф, данные для вывода и продолжаешь лепить области из нового макета
6 FIXXXL
 
11.05.16
09:26
(5) + не забудь про разделитель страниц
а будет на одном листе Акт и шапка сч/ф
7 FIXXXL
 
11.05.16
09:41
ну или совсем простой вариант:
формируй два отдельных табДока и два раза вызвай процедуру вывода ТабДока на печать
8 Iskatel
 
11.05.16
10:10
Спасибо! думаю что получится)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.