|
v7: Формирование отчета | ☑ | ||
---|---|---|---|---|
0
Style2out
02.09.11
✎
19:05
|
Доброе время соток. Делаю отчет по заказу номенклатуре, а так как новичок в программировании 1С требуется помощь.
Половину функций я реализовал на примере типовых отчетов. Мне нужно задавать и выводить в одну таблицу два периода к примеру с 01.01.11 по 10.01.11 и 11.01.11 по 20.01.11. http://imageshack.us/photo/my-images/31/80050587.jpg/ таблица http://imageshack.us/photo/my-images/717/95952520.jpg/ Как правильно реализовать запрос и формирование таблицы? Для каждого периода свой запрос? Как правильно? Сейчас работает вот так: Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата по КонДата; |Контрагент = Регистр.Заявки.Грузополучатель.Владелец; |Грузополучатель = Регистр.Заявки.Грузополучатель; |Номенклатура = Регистр.Заявки.Номенклатура; |МестоХранения = Регистр.Заявки.МестоОтгрузки; |СпособДоставки = Регистр.Заявки.Заявка.ВидДоставки; |Заказ = Регистр.Заявки.Заявка; |Количество = Регистр.Заявки.Количество; |Вес = Регистр.Заявки.Вес; |Функция КоличествоПлан = Приход(Количество); |Функция ВесПлан = Приход(Вес); |Функция КоличествоПлан1 = Приход(Количество); |Функция ВесПлан1 = Приход(Вес); |"//}}ЗАПРОС Состояние("Заполнение выходной таблицы..."); Если КолГруппировок>0 Тогда Пока Запрос.Группировка(1) = 1 Цикл Значение1=ПредставлениеСтроки_(Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(1))); Значение11=Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(1)); Таб.ВывестиСекцию("Строка1"); Если КолГруппировок>1 Тогда Пока Запрос.Группировка(2) = 1 Цикл Значение2=ПредставлениеСтроки_(Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(2))); Значение22=Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(2)); Таб.ВывестиСекцию("Строка2"); Если КолГруппировок>2 Тогда Пока Запрос.Группировка(3) = 1 Цикл Значение3=ПредставлениеСтроки_(Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(3))); Значение33=Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(3)); Таб.ВывестиСекцию("Строка3"); Если КолГруппировок>3 Тогда Пока Запрос.Группировка(4) = 1 Цикл Значение4=ПредставлениеСтроки_(Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(4))); Значение44=Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(4)); Таб.ВывестиСекцию("Строка4"); Если КолГруппировок>4 Тогда Пока Запрос.Группировка(5) = 1 Цикл Значение5=ПредставлениеСтроки_(Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(5))); Значение55=Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(5)); Таб.ВывестиСекцию("Строка5"); Если КолГруппировок>5 Тогда Пока Запрос.Группировка(5) = 1 Цикл Значение6=ПредставлениеСтроки_(Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(6))); Значение66=Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(6)); Таб.ВывестиСекцию("Строка6"); КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; т.е. в оба периода выводятся одинаковые значения, т.к. запрос один. Заранее благодарен за помощь. |
|||
1
Rie
02.09.11
✎
19:07
|
(0) Делай два запроса. Заполняй результатами этих запросов таблицу значений. А далее формируй отчёт по таблице значений.
|
|||
2
VasilyKushnir
02.09.11
✎
20:22
|
(1) +1000 Просто и со вкусом.. Только я бы сделал один запрос и сначала "подсунул" ему первый период, а потом второй, ну а дальше по классике от Rie :-))
|
|||
3
Style2out
02.09.11
✎
20:25
|
Очень интересно как это сделать с одним запросом. Покажите пожалуйста пример.
|
|||
4
VasilyKushnir
02.09.11
✎
20:26
|
(3) Запрос один (текст запросса имеется в виду), но прогоняется два раза с разными НачПериод и КонПериод.
|
|||
5
Style2out
03.09.11
✎
19:56
|
Создал два запроса с разным периодом дат. Вообще сделал вот так:
Процедура Сформировать() Перем Стр; Если ПроверкаДат(НачДата,КонДата) = 0 Тогда Возврат; КонецЕсли; Если ПроверкаДат(НачДата1,КонДата1) = 0 Тогда Возврат; КонецЕсли; СтрокаСтатуса = "Сформирован "+ТекущаяДата()+" "+ТекущееВремя()+?(ПустоеЗначение(ИмяПользователя())=0," Пользователь: "+ИмяПользователя(),""); ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Ном","Число"); ТЗ.НоваяКолонка("Пометка_","Число"); ТЗ.НоваяКолонка("Значение_"); ТЗ.НоваяКолонка("Строка_"); Для К=1 По СписокУровней.РазмерСписка() Цикл Если СписокУровней.Пометка(К,)=1 Тогда ТЗ.НоваяСтрока(); ТЗ.Ном=К; ТЗ.Пометка_=0; ТЗ.Значение_=СписокУровней.ПолучитьЗначение(К,Стр); ТЗ.Строка_=Стр; Иначе ТЗ.НоваяСтрока(); ТЗ.Ном=К; ТЗ.Пометка_=1; ТЗ.Значение_=СписокУровней.ПолучитьЗначение(К,Стр); ТЗ.Строка_=Стр; КонецЕсли; КонецЦикла; СписокУровней.УдалитьВсе(); ТЗ.Сортировать("+2,1"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл СписокУровней.ДобавитьЗначение(ТЗ.Значение_,ТЗ.Строка_); Если ТЗ.Пометка_=1 Тогда СписокУровней.Пометка(ТЗ.НомерСтроки,0); Иначе СписокУровней.Пометка(ТЗ.НомерСтроки,1); КонецЕсли; КонецЦикла; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата по КонДата; |Контрагент = Регистр.Заявки.Грузополучатель.Владелец; |Грузополучатель = Регистр.Заявки.Грузополучатель; |Номенклатура = Регистр.Заявки.Номенклатура; |МестоХранения = Регистр.Заявки.МестоОтгрузки; |СпособДоставки = Регистр.Заявки.Заявка.ВидДоставки; |Заказ = Регистр.Заявки.Заявка; |Количество = Регистр.Заявки.Количество; |Вес = Регистр.Заявки.Вес; |Функция КоличествоПлан = Приход(Количество); |Функция ВесПлан = Приход(Вес); |"//}}ЗАПРОС ; КолГруппировок=0; Для К=1 По СписокУровней.РазмерСписка() Цикл Если СписокУровней.Пометка(К,)=1 Тогда КолГруппировок=КолГруппировок+1; Если СписокУровней.ПолучитьЗначение(К)="Контрагент" Тогда ТекстЗапроса=ТекстЗапроса+" |Группировка Контрагент без групп упорядочить по Контрагент.Код;"; ТекстЗапроса=ТекстЗапроса+" |Условие (Контрагент в Зн2);"; КонецЕсли; Если СписокУровней.ПолучитьЗначение(К)="Грузополучатель" Тогда ТекстЗапроса=ТекстЗапроса+" |Группировка Грузополучатель без групп упорядочить по Грузополучатель.Код;"; ТекстЗапроса=ТекстЗапроса+" |Условие (Грузополучатель в Зн3);"; КонецЕсли; Если СписокУровней.ПолучитьЗначение(К)="Номенклатура" Тогда ТекстЗапроса=ТекстЗапроса+" |Группировка Номенклатура без групп упорядочить по Номенклатура.Код;"; ТекстЗапроса=ТекстЗапроса+" |Условие (Номенклатура в Зн1);"; КонецЕсли; Если СписокУровней.ПолучитьЗначение(К)="МестоХранения" Тогда ТекстЗапроса=ТекстЗапроса+" |Группировка МестоХранения без групп упорядочить по МестоХранения.Код;"; ТекстЗапроса=ТекстЗапроса+" |Условие (МестоХранения в Зн4);"; КонецЕсли; Если СписокУровней.ПолучитьЗначение(К)="СпособДоставки" Тогда ТекстЗапроса=ТекстЗапроса+" |Группировка СпособДоставки без групп упорядочить по СпособДоставки.Код;"; ТекстЗапроса=ТекстЗапроса+" |Условие (СпособДоставки в Зн5);"; КонецЕсли; Если СписокУровней.ПолучитьЗначение(К)="Заказ" Тогда ТекстЗапроса=ТекстЗапроса+" |Группировка Заказ упорядочить по Заказ.ДатаДок;"; КонецЕсли; Иначе Продолжить; КонецЕсли; КонецЦикла; Запрос1 = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата1 по КонДата1; |Контрагент = Регистр.Заявки.Грузополучатель.Владелец; |Грузополучатель = Регистр.Заявки.Грузополучатель; |Номенклатура = Регистр.Заявки.Номенклатура; |МестоХранения = Регистр.Заявки.МестоОтгрузки; |СпособДоставки = Регистр.Заявки.Заявка.ВидДоставки; |Заказ = Регистр.Заявки.Заявка; |Количество = Регистр.Заявки.Количество; |Вес = Регистр.Заявки.Вес; |Функция КоличествоПлан1 = Приход(Количество); |Функция ВесПлан1 = Приход(Вес); |"//}}ЗАПРОС ; КолГруппировок=0; Для К=1 По СписокУровней.РазмерСписка() Цикл Если СписокУровней.Пометка(К,)=1 Тогда КолГруппировок=КолГруппировок+1; Если СписокУровней.ПолучитьЗначение(К)="Контрагент" Тогда ТекстЗапроса=ТекстЗапроса+" |Группировка Контрагент без групп упорядочить по Контрагент.Код;"; ТекстЗапроса=ТекстЗапроса+" |Условие (Контрагент в Зн2);"; КонецЕсли; Если СписокУровней.ПолучитьЗначение(К)="Грузополучатель" Тогда ТекстЗапроса=ТекстЗапроса+" |Группировка Грузополучатель без групп упорядочить по Грузополучатель.Код;"; ТекстЗапроса=ТекстЗапроса+" |Условие (Грузополучатель в Зн3);"; КонецЕсли; Если СписокУровней.ПолучитьЗначение(К)="Номенклатура" Тогда ТекстЗапроса=ТекстЗапроса+" |Группировка Номенклатура без групп упорядочить по Номенклатура.Код;"; ТекстЗапроса=ТекстЗапроса+" |Условие (Номенклатура в Зн1);"; КонецЕсли; Если СписокУровней.ПолучитьЗначение(К)="МестоХранения" Тогда ТекстЗапроса=ТекстЗапроса+" |Группировка МестоХранения без групп упорядочить по МестоХранения.Код;"; ТекстЗапроса=ТекстЗапроса+" |Условие (МестоХранения в Зн4);"; КонецЕсли; Если СписокУровней.ПолучитьЗначение(К)="СпособДоставки" Тогда ТекстЗапроса=ТекстЗапроса+" |Группировка СпособДоставки без групп упорядочить по СпособДоставки.Код;"; ТекстЗапроса=ТекстЗапроса+" |Условие (СпособДоставки в Зн5);"; КонецЕсли; Если СписокУровней.ПолучитьЗначение(К)="Заказ" Тогда ТекстЗапроса=ТекстЗапроса+" |Группировка Заказ упорядочить по Заказ.ДатаДок;"; КонецЕсли; Иначе Продолжить; КонецЕсли; КонецЦикла; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Если Запрос1.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Анализ по номенклатуре"); Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Если КолГруппировок>0 Тогда Пока Запрос.Группировка(1) = 1 Цикл Значение1=ПредставлениеСтроки_(Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(1))); Значение11=Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(1)); Таб.ВывестиСекцию("Строка1"); Если КолГруппировок>1 Тогда Пока Запрос.Группировка(2) = 1 Цикл Значение2=ПредставлениеСтроки_(Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(2))); Значение22=Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(2)); Таб.ВывестиСекцию("Строка2"); Если КолГруппировок>2 Тогда Пока Запрос.Группировка(3) = 1 Цикл Значение3=ПредставлениеСтроки_(Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(3))); Значение33=Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(3)); Таб.ВывестиСекцию("Строка3"); Если КолГруппировок>3 Тогда Пока Запрос.Группировка(4) = 1 Цикл Значение4=ПредставлениеСтроки_(Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(4))); Значение44=Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(4)); Таб.ВывестиСекцию("Строка4"); Если КолГруппировок>4 Тогда Пока Запрос.Группировка(5) = 1 Цикл Значение5=ПредставлениеСтроки_(Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(5))); Значение55=Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(5)); Таб.ВывестиСекцию("Строка5"); Если КолГруппировок>5 Тогда Пока Запрос.Группировка(5) = 1 Цикл Значение6=ПредставлениеСтроки_(Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(6))); Значение66=Запрос.ПолучитьАтрибут(СписокУровней.ПолучитьЗначение(6)); Таб.ВывестиСекцию("Строка6"); КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; Результаты формирования вот: http://imageshack.us/photo/my-images/59/1234kma.jpg/ Что я сделал не так? Я так понимаю я неправильно выгружаю результаты запросов в таблицу? Или обрабатывается всего один запрос? |
|||
6
Style2out
05.09.11
✎
15:20
|
Как выгрузить данные из запросов в одну и ту же таблицу значений несколько раз, чтобы предыдущие выгруженные данные в таблице значений не затирались?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |