Имя: Пароль:
1C
1С v8
Помогите с отчетом
Ø (GROOVY 23.10.2013 14:18)
0 Oleg102
 
23.10.13
14:15
Всем привет! Никак не получается сделать отчет. Помогите пожалуйста. Делаю отчет на основе ТОРГ12. Вообщем есть таблица где вводятся данные и разделяются строки только по столбцу "Питание" (это Завтрак, обед, ужин, ночное питание). Мне надо вывести это в макет печатной формы в ряд столбцами. Я так думаю надо сделать условие и вставлять исходя по условию по областям. Но не могу додуматься как правильно это сделать. Скрины отчета и таблицы прикладываю.

http://www.fotolink.su/v.php?id=91f329cb187a6da96d664a0edb448896

http://www.fotolink.su/v.php?id=2ef4aecc9fb7736ef3ca727669cc514b

Код:

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

    ТабДокумент.Вывести(ОбластьМакетаПитаниеШапкаНЗ);
    ТабДокумент.Присоединить(ОбластьМакетаПитаниеШапкаЗ);
    ОбластьКолонкаТоварЗ = Макет.Область("Завтрак");
    ТабДокумент.Присоединить(ОбластьМакетаПитаниеШапкаО);
    ОбластьКолонкаТоварО = Макет.Область("Обед");
        
    НС = 1;
    Пока ВыборкаСтрокТовары.Следующий() Цикл
        
        ОбластьМакетаПитаниеНомерЗ.Параметры.НомерСтроки = НС;
        ТабДокумент.Вывести(ОбластьМакетаПитаниеНомерЗ);
        
                
        ОбластьМакетаПитаниеЗ.Параметры.Заполнить(ВыборкаСтрокТовары);
        ОбластьМакетаПитаниеЗ.Параметры.Номенклатура = СокрЛП(ВыборкаСтрокТовары.Номенклатура);
        ОбластьМакетаПитаниеЗ.Параметры.Выход = ВыборкаСтрокТовары.Выход;
        ТабДокумент.Присоединить(ОбластьМакетаПитаниеЗ);
        
    НС = НС + 1;
    КонецЦикла;
        
    
    // Инициализация счетчика страниц
    НомерСтраницы = 1;
    
    // Инициализация итогов по странице
    ИтогоМестНаСтранице       = 0;
    ИтогоКоличествоНаСтранице = 0;
    ИтогоСуммаНаСтранице      = 0;
    ИтогоНДСНаСтранице        = 0;
    ИтогоСуммаСНДСНаСтранице  = 0;
    
    // Инициализация итогов по документу
    ИтогоМест       = 0;
    ИтогоКоличество = 0;
    ИтогоСуммаСНДС  = 0;
    ИтогоСумма      = 0;
    ИтогоНДС        = 0;
    
    // Инициализация счетчика строк
    НомерСтроки     = 0;
    КоличествоСтрок = ТабличнаяЧасть.Количество();
    
    // Выводим заголовок многострочной части
    
    ТабДокумент.Вывести(ОбластьМакетаЗаголовокТаблицы);
    
    // Выводим многострочную часть документа
    Для Каждого ВыборкаСтрок Из ТабличнаяЧасть Цикл
        
        НомерСтроки = НомерСтроки + 1;
        
        ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаСтрок);
        
        ОбластьМакетаСтрока.Параметры.Номер = НомерСтроки;
        
        Если НЕ ЗначениеЗаполнено(ВыборкаСтрок.КоличествоМест) Тогда
            ОбластьМакетаСтрока.Параметры.ВидУпаковки           = "";
            ОбластьМакетаСтрока.Параметры.КоличествоВОдномМесте = "";
        КонецЕсли;
        
        ОбластьМакетаСтрока.Параметры.ТоварНаименование = СокрЛП(ВыборкаСтрок.ТоварНаименование);
        
        СуммаСНДС = (ВыборкаСтрок.Сумма + ?(Шапка.СуммаВключаетНДС, 0, ВыборкаСтрок.СуммаНДС));
        
        КоличествоМест = ВыборкаСтрок.КоличествоМест;
        Количество     = ВыборкаСтрок.Количество;
        СуммаНДС       = ВыборкаСтрок.СуммаНДС;
        СуммаБезНДС    = СуммаСНДС - СуммаНДС;
        
        ОбластьМакетаСтрока.Параметры.СуммаБезНДС = СуммаБезНДС;
                
        // Проверим вывод
        СтрокаСПодвалом = Новый Массив;
        Если НомерСтроки = 1 Тогда
            СтрокаСПодвалом.Добавить(ОбластьМакетаЗаголовокТаблицы); // если первая строка, то должен
        КонецЕсли;                                                   // помещаться заголовок
        СтрокаСПодвалом.Добавить(ОбластьМакетаСтрока);
        
        Если НомерСтроки = КоличествоСтрок Тогда           // если последняя строка, должен
            СтрокаСПодвалом.Добавить(ОбластьМакетаВсего);  // помещаться и подвал документа
            СтрокаСПодвалом.Добавить(ОбластьМакетаПодвал);
        КонецЕсли;
        
        
        ТабДокумент.Вывести(ОбластьМакетаСтрока);
        
        // Увеличим итоги по странице
        ИтогоМестНаСтранице       = ИтогоМестНаСтранице       + КоличествоМест;
        ИтогоКоличествоНаСтранице = ИтогоКоличествоНаСтранице + Количество;
        ИтогоСуммаНаСтранице      = ИтогоСуммаНаСтранице      + СуммаБезНДС;
                
        // Увеличим итоги по документу
        ИтогоМест       = ИтогоМест       + КоличествоМест;
        ИтогоКоличество = ИтогоКоличество + Количество;
        ИтогоСумма      = ИтогоСумма      + СуммаБезНДС;
                
    КонецЦикла;
    
    // Выводим итоги по странице
    ОбластьМакетаВсего.Параметры.ИтогКоличество = ИтогоКоличество;
    ОбластьМакетаВсего.Параметры.ИтогСуммы      = ИтогоСумма;
        
    ТабДокумент.Вывести(ОбластьМакетаВсего);
    
    // Выводим подвал документа
    
    ОбластьМакетаПодвал.Параметры.ФИОСтПовар      = Шапка.ФИОСтПовар;
    ОбластьМакетаПодвал.Параметры.ФИОТехнолог     = Шапка.ФИОТехнолог;
        
    
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    
    Возврат ТабДокумент;
    
КонецФункции // ПечатьТОРГ12ЕжедневныйОтчет()