|
v7: Присоединить секцию | ☑ | ||
---|---|---|---|---|
0
Zheleznogorsk
25.07.12
✎
06:47
|
Давно не делал подобных отчетов, забыл!
Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; СпДоговор = СоздатьОбъект("СписокЗначений"); //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Договор1 = Документ.Поставка.Договор; |ТипЭРИ = Документ.Поставка.Группа; |ДатаИзготовления = Документ.Поставка.Группа.ДатаИзготовления; |КоличествоПН = Документ.Поставка.КоличествоНорма; |Контрагент = Документ.Поставка.Договор.Контрагент; |Функция КоличествоПНСумма = Сумма(КоличествоПН); |Группировка ТипЭРИ; |Группировка Договор1; |Условие(Контрагент=Контр); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл Таб.ВывестиСекцию("Строка|ТипЭРИ"); Для А=1 По СпДоговор.РазмерСписка() Цикл дог=Запрос.ПолучитьАтрибут("Договор1"+А); Таб.ПрисоединитьСекцию("Строка|Договор"); а=а+1; КонецЦикла; Таб.ПрисоединитьСекцию("Строка|Договор"); КонецЦикла; // Заполнение полей "Итого" //Таб.ВывестиСекцию("Итого"); // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры Выводит только один договор, не перебирает договоры! Всем спасибо! |
|||
1
Мимохожий Однако
25.07.12
✎
06:49
|
Группировка(2) где?
|
|||
2
Rie
25.07.12
✎
06:50
|
(0) А по второй группировке - Пушкин цикл крутить будет?
|
|||
3
Zheleznogorsk
25.07.12
✎
06:50
|
А забыл ее из запроса убрать!
|
|||
4
Rie
25.07.12
✎
06:52
|
(3) Так а если в запросе не будет группировки по договорам - то о каком переборе оных идёт речь?
|
|||
5
VladZ
25.07.12
✎
06:52
|
А где?
Пока Запрос.Группировка(2) = 1 Цикл |
|||
6
Zheleznogorsk
25.07.12
✎
06:53
|
То есть нужна все таки группировка по договорам!!!
|
|||
7
Мимохожий Однако
25.07.12
✎
06:53
|
Список значений СпДоговор где заполнялся?
. выгрузи запрос в ТЗ и посмотри. Может быть, ищешь то, чего нет в результате. |
|||
8
VladZ
25.07.12
✎
06:57
|
(6) А ты как сам думаешщь? Выборка сама волшебным образом выберется и тебе покажется?
|
|||
9
Zheleznogorsk
25.07.12
✎
06:57
|
Если делаю группировку по договорам, то не выводит наименование договора
|
|||
10
Мимохожий Однако
25.07.12
✎
06:59
|
А еще отладчик есть...
|
|||
11
Fenikus
25.07.12
✎
07:00
|
дог=Запрос.ПолучитьАтрибут("Договор1"+А);
не логично выглядит, после сложения получится "Договор11" |
|||
12
VladZ
25.07.12
✎
07:00
|
(9) Злые силы...
|
|||
13
Zheleznogorsk
25.07.12
✎
07:02
|
Злые,злые...
|
|||
14
Zheleznogorsk
25.07.12
✎
07:05
|
"дог=Запрос.ПолучитьАтрибут("Договор1"+А);
не логично выглядит, после сложения получится "Договор11" Хм...а как логично будет!? |
|||
15
Fenikus
25.07.12
✎
07:07
|
(14) Видимо дог=Запрос.ПолучитьАтрибут("Договор"+А);
|
|||
16
Rie
25.07.12
✎
07:07
|
(14) А что ты хочешь получить в переменной дог?
|
|||
17
Fenikus
25.07.12
✎
07:07
|
И то, только для первой итерации, а потом опять хрень получится :)
|
|||
18
Zheleznogorsk
25.07.12
✎
07:09
|
Хрень и получилась! :)
|
|||
19
Fenikus
25.07.12
✎
07:12
|
(18)Так попробуй
Пока Запрос.Группировка(1) = 1 Цикл Таб.ВывестиСекцию("Строка|ТипЭРИ"); Пока Запрос.Группировка(2) = 1 Цикл дог=Запрос.Договор1; Таб.ПрисоединитьСекцию("Строка|Договор"); КонецЦикла; КонецЦикла; |
|||
20
VladZ
25.07.12
✎
07:14
|
Итак... Начнем с самого начала...
Исходим из предположения, что твой мега отчет будет жить и развиваться. Так что, пытаемся его изначально сделать "красиво". Пункт нумер раз: не стоит в одну процедуру лепить все действия. Для того, чтобы было все просто и понятно, лучше разделить по функционалу. В твоем отчете есть: 1. получение данные. 2. вывод полученных данных в нужном виде. Вот из этого и исходим. Прикинем структуру кода. Функция ПолучитьДанные() КонецФункции Процедура ВывестиОтчет(аТЗ) КонецПроцедуры Процедура Сформировать() // тут обычно всякие проверки на правильность ввода инфы ТЗДанных = ПолучитьДанные() ВывестиДанные(ТЗДанных); КонецПроцедуры В таком виде все становится проще и понятнее. И если возникнет необходимость доработать какую-то часть (например, переписать получение данных на примые запросы) - достаточно изменить одну функцию. |
|||
21
Мимохожий Однако
25.07.12
✎
07:14
|
Повторюсь..
выгрузи запрос в ТЗ и посмотри. включи отладчик и посмотри. |
|||
22
Fenikus
25.07.12
✎
07:15
|
(18)Можно еще так:
Пока Запрос.Группировка(1) = 1 Цикл Таб.ВывестиСекцию("Строка|ТипЭРИ"); Для А=1 По СпДоговор.РазмерСписка() Цикл дог=спДоговор.ПолучитьЗначение(А); Таб.ПрисоединитьСекцию("Строка|Договор"); КонецЦикла; КонецЦикла; Кстати, в цикле Для А=1 По... увеличение переменной на единицу происходит автоматом, вручную не стоит этого делать, а то перескакивать будешь через один элемент. |
|||
23
VladZ
25.07.12
✎
07:16
|
Теперь рассмотрим по функциям...
Функция ПолучитьДанные() // получаем запросом // выгружаем в ТЗ // возвращаем ТЗ. КонецФункции |
|||
24
VladZ
25.07.12
✎
07:21
|
+23 Расписывать не буду, тут все легко.
Самое интересное в процедуре вывода.. Процедура ВывестиОтчет(Знач аТЗ) // выгружаем договора в отдельную ТЗ // выгружаем ТипЭРИ в отдельную ТЗ. // обязательное условие: таблицы должны быть отсортированы // сортируем аТЗ по "ТипЭРИ, Договор" // сортируем ТЗДоговоров по "Договор". // сортируем ТЗТипов по "ТипЭРИ". // выводим в таблицу, используя для строк выборку из ТЗТипов, для колонок из ТЗДоговоров КонецПроцедуры |
|||
25
Fenikus
25.07.12
✎
07:25
|
(24) А зачем две ТЗ? Можно и с одной все сделать чудненько
|
|||
26
Zheleznogorsk
25.07.12
✎
07:25
|
Если не трудно можете расписать!?
|
|||
27
Fenikus
25.07.12
✎
07:26
|
(26)по-моему и так все подробно расписано :)
|
|||
28
Zheleznogorsk
25.07.12
✎
07:27
|
Давно 7-ку не поднимал,а теперь необходимо!
|
|||
29
Мимохожий Однако
25.07.12
✎
07:27
|
(24)ОФФ: Ты попал )))
|
|||
30
VladZ
25.07.12
✎
07:27
|
Да, вот это можно не делать
// выгружаем ТипЭРИ в отдельную ТЗ. |
|||
31
VladZ
25.07.12
✎
07:28
|
(29) Посмотрим. :)
|
|||
32
VladZ
25.07.12
✎
07:28
|
(26) Не... Дальше - сам ковыряй... Я тебе и так все по полочкам разложил.
|
|||
33
VladZ
25.07.12
✎
07:30
|
(28) А чем вообще занимаешься? Восьмеркой?
|
|||
34
Zheleznogorsk
25.07.12
✎
07:31
|
давным давно занимался 7-кой, сейчас на джанго работаю!
|
|||
35
Zheleznogorsk
25.07.12
✎
07:32
|
поэтому и попросил расписать!
|
|||
36
VladZ
25.07.12
✎
07:34
|
(34) Ясно. Либо вспоминай, либо ищи спеца. :)
|
|||
37
Zheleznogorsk
25.07.12
✎
07:35
|
блин и спеца нет,а отчет как всегда вчера нужен был! :)
|
|||
38
Мимохожий Однако
25.07.12
✎
07:40
|
Вытри слёзы и начни отчет заново согласно рекомендациям.
|
|||
39
Zheleznogorsk
25.07.12
✎
07:46
|
в Функции ПолучитьДанные() что должно быть!?
|
|||
40
Fenikus
25.07.12
✎
07:49
|
(39)получение данных, я так понимаю :)
|
|||
41
Zheleznogorsk
25.07.12
✎
07:57
|
1С - дрянь редкостная!!!
|
|||
42
Fenikus
25.07.12
✎
07:58
|
(41) Когда чем-то не умеешь пользоваться, всегда так говоришь?
|
|||
43
Zheleznogorsk
25.07.12
✎
07:59
|
Благодаря VladZ и его подсказкам, делаю!!!
|
|||
44
Мимохожий Однако
25.07.12
✎
07:59
|
Добавь голосовалку. 1С - дрянь, джанго- форева )))
|
|||
45
Zheleznogorsk
25.07.12
✎
08:01
|
Можно и так!
|
|||
46
Zheleznogorsk
25.07.12
✎
08:03
|
Ладно, тему можно закрыть!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |