|
Ежедневный отчет на основе ТОРГ12 | ☑ | ||
---|---|---|---|---|
0
Oleg102
23.10.13
✎
14:43
|
Всем привет! Никак не получается сделать отчет. Делаю отчет на основе ТОРГ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ЕжедневныйОтчет() |
|||
1
Oleg102
23.10.13
✎
14:44
|
Грув хватит темы закрывать? Что тебе не нравится как называю. Скажи как правильно. Я пишу тему по существу.
|
|||
2
zak555
23.10.13
✎
14:46
|
питание -- группировка1
номенклатура -- группировка2 -- обход все |
|||
3
Oleg102
23.10.13
✎
14:49
|
Зак извини пожалуйста. Как это примерно написать в коде?
|
|||
4
zak555
23.10.13
✎
14:52
|
для начала убрать области Завтрак/обед и т.д.
сделать одну вертикальную -- питание |
|||
5
Oleg102
23.10.13
✎
14:54
|
Понял, сейчас переделаю. Я так делал по началу. Но не смог вывести данные, наверное потому, что и не знаю как делать обход по группировкам
|
|||
6
Oleg102
23.10.13
✎
14:56
|
Переделал. Вместо названия "Завтрак" в макете сделал параметр <Питание>
|
|||
7
eklmn
гуру
23.10.13
✎
14:56
|
или
Пока ВыборкаСтрокТовары.Следующий() Цикл //НАЧАЛО УЧЕБНОГО ПРОЦЕССА Если ВыборкаСтрокТовары.Питание = "Обед" Тогда ОбластьМакетаПитание = ПолучитьОбласть("обед"); ОбластьМакетаПитание.параметры.Заполнить(ВыборкаСтрокТовары); Конецесли; // это просто намек, вообще делать надо красиво и правильно по другому //КОНЕЦ УЧЕБНОГО ПРОЦЕССА ОбластьМакетаПитаниеНомерЗ.Параметры.НомерСтроки = НС; ТабДокумент.Вывести(ОбластьМакетаПитаниеНомерЗ); ОбластьМакетаПитаниеЗ.Параметры.Заполнить(ВыборкаСтрокТовары); ОбластьМакетаПитаниеЗ.Параметры.Номенклатура = СокрЛП(ВыборкаСтрокТовары.Номенклатура); ОбластьМакетаПитаниеЗ.Параметры.Выход = ВыборкаСтрокТовары.Выход; ТабДокумент.Присоединить(ОбластьМакетаПитаниеЗ); НС = НС + 1; КонецЦикла; |
|||
8
eklmn
гуру
23.10.13
✎
14:58
|
и делать надо быстрее, пока Груви не пришел )
|
|||
9
zak555
23.10.13
✎
15:00
|
(6) теперь заполняй шапку питание
потом группировка1 питания все и группировка2 номенклатура |
|||
10
Oleg102
23.10.13
✎
15:01
|
(8) Ага это точно.))
|
|||
11
eklmn
гуру
23.10.13
✎
15:07
|
ОбластьМакетаПитание = ОбластьМакетаПитаниеШапкаО (у тебя)
|
|||
12
Oleg102
23.10.13
✎
15:11
|
Завтрак
1 Каша "Дружба" на сух молоке 300 Завтрак 2 Масло сливочное 25 Завтрак 3 Сыр 30 Завтрак 4 Чай с сахаром 400 Завтрак 5 Хлеб в/с 160 Завтрак 6 Бефстроганов из говядины 150 |
|||
13
Oleg102
23.10.13
✎
15:11
|
Вот так все выходит в отчете((
|
|||
14
eklmn
гуру
23.10.13
✎
15:12
|
Ты каому? Заку или мне? раскрой мысли, а то непонятно них...
|
|||
15
zak555
23.10.13
✎
15:13
|
где код вывода ?
p.s. 0 не копируй |
|||
16
Oleg102
23.10.13
✎
15:13
|
(14) Тебе.
|
|||
17
Oleg102
23.10.13
✎
15:22
|
(14) Вообщем сначало переделал макет как сказал "Зак" сделать одну область и убрать остальные. С твоим кодом на условие
//НАЧАЛО УЧЕБНОГО ПРОЦЕССА Если ВыборкаСтрокТовары.Питание = "Обед" Тогда ОбластьМакетаПитание = ПолучитьОбласть("обед"); ОбластьМакетаПитание.параметры.Заполнить(ВыборкаСтрокТовары); Конецесли; // это просто намек, вообще делать надо красиво и правильно по другому //КОНЕЦ УЧЕБНОГО ПРОЦЕССА выводило так как я показал выше (12). Сейчас передал как раньше было по началу, это код вообще не реагирует, без изменений. |
|||
18
eklmn
гуру
23.10.13
✎
15:25
|
(17) пиндец, естественно не работает, надо сделать под себя!
|
|||
19
Oleg102
23.10.13
✎
15:27
|
(18) я переделал так.
//Олег ТабДокумент.Вывести(ОбластьМакетаПитаниеШапкаНЗ); ТабДокумент.Присоединить(ОбластьМакетаПитаниеШапкаЗ); ОбластьКолонкаТоварЗ = Макет.Область("Завтрак"); ТабДокумент.Присоединить(ОбластьМакетаПитаниеШапкаО); ОбластьКолонкаТоварО = Макет.Область("Обед"); НС = 1; Пока ВыборкаСтрокТовары.Следующий() Цикл Если ВыборкаСтрокТовары.Питание = "Обед" Тогда ОбластьМакетаПитаниеШапкаО.ПолучитьОбласть("ШапкаТаблицы|Обед"); ОбластьМакетаПитаниеШапкаО.Параметры.Заполнить(ВыборкаСтрокТовары); Конецесли; ОбластьМакетаПитаниеНомерЗ.Параметры.НомерСтроки = НС; ТабДокумент.Вывести(ОбластьМакетаПитаниеНомерЗ); ОбластьМакетаПитаниеЗ.Параметры.Заполнить(ВыборкаСтрокТовары); ОбластьМакетаПитаниеЗ.Параметры.Номенклатура = СокрЛП(ВыборкаСтрокТовары.Номенклатура); ОбластьМакетаПитаниеЗ.Параметры.Выход = ВыборкаСтрокТовары.Выход; ТабДокумент.Присоединить(ОбластьМакетаПитаниеЗ); НС = НС + 1; КонецЦикла; |
|||
20
eklmn
гуру
23.10.13
✎
15:54
|
ТабДокумент.Вывести
ТабДокумент.Присоединить где? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |