|
Вывод даты на макет печатной формы | ☑ | ||
---|---|---|---|---|
0
Валидатор
02.09.13
✎
12:23
|
Столкнулся с проблемой: получаю запросом все необходимые данные для вывода на печатную форму, после чего заполняю печатную форму циклом, но в этом цикле я могу вытащить дату, которая должна быть у меня в шапке, т.е.
Шапка: ДатаПланирования Потом сам макет: куча заполненных строк, вот код: ТабДок = Новый ТабличныйДокумент; Макет = ПолучитьМакет("Макет"); Шапка = Макет.ПолучитьОбласть("Шапка"); //Шапка.Параметры.ДатаДокумента = формат(СсылкаНаОбъект.Дата,"ДФ=ММММ-кк-гггг"); План = Макет.ПолучитьОбласть("План"); Строка = Макет.ПолучитьОбласть("Строка"); Отступ = Макет.ПолучитьОбласть("Отступ"); Подписи = Макет.ПолучитьОбласть("Подписи"); Шапка.Параметры.Подразделение = СсылкаНаОбъект.Подразделение; //ТабДок.Вывести(Шапка); //ТабДок.Вывести(План); Если ЗначениеЗаполнено(СсылкаНаОбъект.Подразделение) Тогда ПолучениеКода = СтрЗаменить(СсылкаНаОбъект.Подразделение.ПолныйКод(), "/", Символы.ПС); НаименованиеПодразделения = Справочники.Подразделения.НайтиПоКоду(ПолучениеКода); КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПланЗакупокСоставПлана.Номенклатура.Артикул КАК НоменклатураАртикул, | ПланЗакупокСоставПлана.Номенклатура КАК Номенклатура, | ПланЗакупокСоставПлана.Количество, | ПланЗакупокСоставПлана.Цена КАК Цена, | ПланЗакупокСоставПлана.ттДатаИзвещения КАК ДатаИзвещения, | ПланЗакупокСоставПлана.Ссылка.ДатаПланирования, | ПланЗакупокСоставПлана.ЕдиницаИзмерения.Наименование, | ПланЗакупокСоставПлана.Номенклатура.ДополнительноеОписаниеНоменклатуры КАК МинимальныеТребования, | ПланЗакупокСоставПлана.ттСпособЗакупки КАК СпособЗакупки, | ПланЗакупокСоставПлана.ЗакупкаВЭлектронной КАК Закупка, | ВЫБОР | КОГДА ЕСТЬNULL(ПланЗакупокСоставПлана.Номенклатура.Артикул, """") = """" | ТОГДА """" | ИНАЧЕ ПОДСТРОКА(ПланЗакупокСоставПлана.Номенклатура.Артикул, 1, 2) + ""."" + ПОДСТРОКА(ПланЗакупокСоставПлана.Номенклатура.Артикул, 3, 2) + ""."" + ПОДСТРОКА(ПланЗакупокСоставПлана.Номенклатура.Артикул, 5, 100) | КОНЕЦ КАК Артикул, | &Параметр, | ПланЗакупокСоставПлана.НомерСтроки, | ПланЗакупокСоставПлана.ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдОКЕИ, | ПланЗакупокСоставПлана.СуммаНДС |ПОМЕСТИТЬ втПараметр |ИЗ | Документ.ПланЗакупок.СоставПлана КАК ПланЗакупокСоставПлана |ГДЕ | ПланЗакупокСоставПлана.Ссылка = &Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ттРегионПоставки.кодОКАТО, | ттРегионПоставки.Наименование, | втПараметр.НоменклатураАртикул, | втПараметр.Номенклатура, | втПараметр.Количество, | втПараметр.Цена, | втПараметр.ДатаИзвещения, | втПараметр.ДатаПланирования, | втПараметр.ЕдиницаИзмеренияНаименование, | втПараметр.МинимальныеТребования, | втПараметр.СпособЗакупки, | втПараметр.Артикул, | втПараметр.Параметр, | втПараметр.НомерСтроки КАК НомерСтроки, | втПараметр.ЕдОКЕИ, | втПараметр.Закупка, | втПараметр.СуммаНДС |ИЗ | втПараметр КАК втПараметр | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ттРегионПоставки КАК ттРегионПоставки | ПО втПараметр.Параметр = ттРегионПоставки.Подразделение | |УПОРЯДОЧИТЬ ПО | НомерСтроки"; Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект); Запрос.УстановитьПараметр("Параметр", НаименованиеПодразделения); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Номер = 0; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Номер = Номер + 1 ; Шапка.Параметры.ДатаДокумента = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=ММММ-кк-гггг"); Строка.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Строка.Параметры.Порядковый = Номер; Строка.Параметры.Закупка = ВыборкаДетальныеЗаписи.Закупка; Строка.Параметры.Артикул = ВыборкаДетальныеЗаписи.Артикул; Строка.Параметры.Количество = ВыборкаДетальныеЗаписи.Количество; Строка.Параметры.Сумма = ОКР(((ВыборкаДетальныеЗаписи.Цена * ВыборкаДетальныеЗаписи.Количество) + ВыборкаДетальныеЗаписи.СуммаНДС),1); Строка.Параметры.ОКДП = ВыборкаДетальныеЗаписи.НоменклатураАртикул; Строка.Параметры.ЕдОКЕИ = ВыборкаДетальныеЗаписи.ЕдОКЕИ; Строка.Параметры.ОКАТОРегион = ВыборкаДетальныеЗаписи.КодОкато; Строка.Параметры.НаименованиеРегион = ВыборкаДетальныеЗаписи.Наименование; Строка.Параметры.Требования = ВыборкаДетальныеЗаписи.МинимальныеТребования; Строка.Параметры.ЕдНаименование = ВыборкаДетальныеЗаписи.ЕдиницаИзмеренияНаименование; Строка.Параметры.СпособЗакупки = ВыборкаДетальныеЗаписи.СпособЗакупки; //заполняем по дате извещения месяцы Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда Строка.Параметры.январь = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy"); КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 2 Тогда Строка.Параметры.февраль = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy"); КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 3 Тогда Строка.Параметры.мартИсп = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy"); КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 4 Тогда Строка.Параметры.апрИсп = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy"); КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 5 Тогда Строка.Параметры.майИсп = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy"); КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 6 Тогда Строка.Параметры.июньИсп = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy"); КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 7 Тогда Строка.Параметры.июльИсп = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy"); КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 8 Тогда Строка.Параметры.авгИсп = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy"); КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 9 Тогда Строка.Параметры.сентябрь = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy"); КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 10 Тогда Строка.Параметры.октярь = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy"); КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 11 Тогда Строка.Параметры.нобярь = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy"); КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 12 Тогда Строка.Параметры.декабрь = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy"); КонецЕсли; //заполняем по дате планирования месяцы Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 1 И НЕ ВыборкаДетальныеЗаписи.ДатаИзвещения = '00010101'Тогда Строка.Параметры.я = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy"); Иначе Строка.Параметры.я = ""; КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 2 Тогда Строка.Параметры.ф = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy"); Иначе Строка.Параметры.ф = ""; КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 3 Тогда Строка.Параметры.март = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy"); Иначе Строка.Параметры.март = ""; КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 4 Тогда Строка.Параметры.апр = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy"); Иначе Строка.Параметры.апр = ""; КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 5 Тогда Строка.Параметры.май = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy"); Иначе Строка.Параметры.май = ""; КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 6 Тогда Строка.Параметры.июнь = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy"); Иначе Строка.Параметры.июнь = ""; КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 7 Тогда Строка.Параметры.июль = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy"); Иначе Строка.Параметры.июль = ""; КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 8 Тогда Строка.Параметры.авг = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy"); Иначе Строка.Параметры.авг = ""; КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 9 Тогда Строка.Параметры.с = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy"); Иначе Строка.Параметры.с = ""; КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 10 Тогда Строка.Параметры.о = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy"); Иначе Строка.Параметры.о = ""; КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 11 Тогда Строка.Параметры.н = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy"); Иначе Строка.Параметры.н = ""; КонецЕсли; Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 12 Тогда Строка.Параметры.д = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy"); Иначе Строка.Параметры.д = ""; КонецЕсли; ТабДок.Вывести(строка); КонецЦикла; ТабДок.Вывести(Шапка); ТабДок.Вывести(План); Область шапка - область с Датой планирования которая в начале должна идти, но данные в нее попадают только когда отрабатывает цикл, то есть или каждый раз будет дублирование шапки, или строк в печатной форме. Как мне сделать, чтобы шапка писалась 1 раз, потом выводилась, а потом заполнялись остальные части? |
|||
1
Валидатор
02.09.13
✎
12:24
|
в цикл заполнение шапки не поставить, потому что будет дублироваться шапка, а данные, для вывода шапки в цикле мы и получаем при обходе выборки
|
|||
2
Wobland
02.09.13
✎
12:24
|
нужно как-то повлиять на порядок строк в коде
|
|||
3
Godofsin
02.09.13
✎
12:25
|
я бы сказал, приложить неимоверные усилия.
|
|||
4
Валидатор
02.09.13
✎
12:26
|
ну так вот как, я и спрашиваю
|
|||
5
Валидатор
02.09.13
✎
12:26
|
если сначала я получаю данные для вывода в шапку, при обходе выборки, в цикле, и в этом же цикле вывожу строки, мне в этом цикле и шапку выводить?
|
|||
6
Wobland
02.09.13
✎
12:27
|
(4) колдовство_над_шапкой;
магия_остальных_частей_в_цикле; |
|||
7
Валидатор
02.09.13
✎
12:29
|
(6) по нормальному не ответить? какая магия?
|
|||
8
Godofsin
02.09.13
✎
12:29
|
Ну можно так наг*внокодить:
Результат = Запрос.Выполнить().Выгрузить(); // ВыборкаДетальныеЗаписи = Результат.Выбрать(); Номер = 0; Шапка.Параметры.ДатаДокумента = формат(Результат[0].ДатаПланирования,"ДФ=ММММ-кк-гггг"); Для каждого ВыборкаДетальныеЗаписи.Следующий из Результат Цикл Номер = Номер + 1 ; Строка.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Строка.Параметры.Порядковый = Номер; Строка.Параметры.Закупка = ВыборкаДетальныеЗаписи.Закупка; |
|||
9
Godofsin
02.09.13
✎
12:31
|
блин, поторопился
|
|||
10
Godofsin
02.09.13
✎
12:31
|
Результат = Запрос.Выполнить().Выгрузить();
// ВыборкаДетальныеЗаписи = Результат.Выбрать(); Номер = 0; Шапка.Параметры.ДатаДокумента = формат(Результат[0].ДатаПланирования,"ДФ=ММММ-кк-гггг"); ТабДок.Вывести(Шапка); Для каждого ВыборкаДетальныеЗаписи из Результат Цикл Номер = Номер + 1 ; Строка.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Строка.Параметры.Порядковый = Номер; Строка.Параметры.Закупка = ВыборкаДетальныеЗаписи.Закупка; |
|||
11
Wobland
02.09.13
✎
12:31
|
(7) по нормальному: убери вывод шапки из цикла
|
|||
12
Валидатор
02.09.13
✎
12:32
|
(11) но данные в шапку получаются только после обхода цикла, вот в чем проблема
|
|||
13
Валидатор
02.09.13
✎
12:34
|
(10) спс помогло
|
|||
14
Godofsin
02.09.13
✎
12:36
|
(13) но это криво, задумайся =)
|
|||
15
Wobland
02.09.13
✎
12:38
|
(12) отличный повод задуматься над подходом к задаче
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |