|
v7: Не выводится нужным способом таблица | ☑ | ||
---|---|---|---|---|
0
andryus
06.09.11
✎
08:49
|
Вот какая задача: есть документ, в нем список сотрудников, принадлежащих разным группам. Нужно чтобы формировалась платежная ведомость на каждую группу с включением в эту ведомость тех сотрудников, которые принадлежат данной группе. Отдельная группа, отдельная ведомость.
Сделал код: ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Сотрудник","Справочник.СотрудникиУчреждения"); ТЗ.НоваяКолонка("ГруппаСотрудника","Справочник"); ТЗ.НоваяКолонка("СуммаВыплаты","Число","15","2"); Далее обошел табличную часть документа, заполнил эту ТЗ, далее: код ТЗ.Свернуть("Сотрудник,ГруппаСотрудника","СуммаВыплаты"); ТЗ.Сортировать("ГруппаСотрудника+,Сотрудник+"); ТекущаяГруппа = ""; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.ГруппаСотрудника<>ТекущаяГруппа Тогда Подразделение = ТЗ.ГруппаСотрудника; Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); Таб.ВывестиСекцию("Шапка"); Ном=0; Итого=0; КонецЕсли; Ном=Ном+1; Таб.ВывестиСекцию("Строка"); Итого=Итого+ТЗ.СуммаВыплаты; Если ТЗ.ГруппаСотрудника<>ТекущаяГруппа Тогда ТекущаяГруппа=ТЗ.ГруппаСотрудника; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.ПараметрыСтраницы(1,,,,,,,,,,,); Таб.Опции(0,0,0,0); Таб.Показать("Платежная ведомость"); КонецЕсли; КонецЦикла; вообщем данный код почему то нормально все выводит ведомость на кажду группу с принадлежащим ей сотрудникам, НО почему то подвал ставится не в то место, а после первой строки, а после подвала выводятся другие строки. Помогите найти выход |
|||
1
Chum
06.09.11
✎
08:55
|
Если ТЗ.ГруппаСотрудника<>ТекущаяГруппа Тогда
Подразделение = ТЗ.ГруппаСотрудника; Если ТЗ.ГруппаСотрудника<>ТекущаяГруппа Тогда ТекущаяГруппа=ТЗ.ГруппаСотрудника; Найдите 10 отличий |
|||
2
Chum
06.09.11
✎
08:58
|
Подвал должен быть после таблицы? Тогда где проверка на последнюю строку?
А еще, для ИндексированнойТаблицы есть великолепный метод Группировать |
|||
3
andryus
06.09.11
✎
09:29
|
(1) Значение Подразделение как видите не участвует в условиях, соответственно не имеет значения, даже если я из кода уберу Подразделение = ТЗ.ГруппаСотрудника; это не даст абсолютно никакого значения.
(2) Да. Выводятся шапка, строки, подвал. Такая структура должна быть на каждую группу. Что за метод Группировать? Чего то я не нашел такой команды |
|||
4
Oleg_Kag
06.09.11
✎
09:42
|
(0) Всё правильно программа делает :)
Допустим, что это условие истина, идем по шагам Если ТЗ.ГруппаСотрудника<>ТекущаяГруппа Тогда <-выполнилась, вывелась шапка далее идет вывод строки и заход во второй Если, но ведь условие ИСТИНА. по этому и получается: Бухгалтерия Петрова Итого какая-то сумма Петрова Сидорова |
|||
5
andryus
06.09.11
✎
09:45
|
(4) Да я не сомневаюсь что программа права, я говорю выход не могу найти
|
|||
6
Ёпрст
06.09.11
✎
09:48
|
(0) если документ записан то весь вывод сделать чОрным запросом, который сам развернёт всю иерархию по группам справочника.
|
|||
7
andryus
06.09.11
✎
09:50
|
(6) Не выход. Не исключаю, что документ вообще будет проводится и делать проводки. Основная задача чисто информативная (я знаю что это можно сделать отчетом, но мне нужен документ)
|
|||
8
Oleg_Kag
06.09.11
✎
09:53
|
Даю "кривую" вводную (есть ошибка), но чуть будет понятна :)
... Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.ГруппаСотрудника<>ТекущаяГруппа Тогда Если ТЗ.ГруппаСотрудников<>Подразделение Тогда Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.ПараметрыСтраницы(1,,,,,,,,,,,); Таб.Опции(0,0,0,0); Таб.Показать("Платежная ведомость"); Подразделение = ТЗ.ГруппаСотрудника; КонецЕсли; Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); Таб.ВывестиСекцию("Шапка"); Ном=0; Итого=0; КонецЕсли; ... вот как-то так ... осталось вначале инициализировать Подразделение что бы не было первого входа во второй "Если" :) |
|||
9
Oleg_Kag
06.09.11
✎
09:55
|
офтоп - я манАл эти нетбуки фиг по клавишам попадешь :)
чуть=суть |
|||
10
Ёпрст
06.09.11
✎
09:59
|
(7) читаем вниматочно - документ должен быть ЗАПИСАН.
о проведении речи не было. |
|||
11
Oleg_Kag
06.09.11
✎
10:00
|
Можно поступить по другому:
1) Вне цикла выводим "первую" шапку 2) в цикле при выполнении условия "Если ТЗ.ГруппаСотрудника<>ТекущаяГруппа" выводим "подвал-вывод документа-шапка" 3) по окончанию цикла выводим "подвал-вывод документа" но (!) если ведомость пустая, то выведется 1 пусто табличный документ вида "шапка+подвал" |
|||
12
Ёпрст
06.09.11
✎
10:01
|
+10
хотя, можно и не записанный документ запросом обработать - тупо выгрузить табличную часть в список, его скормить в качестве фильтра к запросу по справочнику. |
|||
13
Oleg_Kag
06.09.11
✎
10:01
|
ппц пойду работать
1) читать как "ДО цикла" |
|||
14
Oleg_Kag
06.09.11
✎
10:05
|
ТЗ.Свернуть("Сотрудник,ГруппаСотрудника","СуммаВыплаты");
ТЗ.Сортировать("ГруппаСотрудника+,Сотрудник+"); Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); Таб.ВывестиСекцию("Шапка"); ТекущаяГруппа = ""; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.ГруппаСотрудника<>ТекущаяГруппа Тогда ТекущаяГруппа = ТЗ.ГруппаСотрудника; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.ПараметрыСтраницы(1,,,,,,,,,,,); Таб.Опции(0,0,0,0); Таб.Показать("Платежная ведомость"); Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); Таб.ВывестиСекцию("Шапка"); Ном=0; Итого=0; КонецЕсли; Ном=Ном+1; Таб.ВывестиСекцию("Строка"); Итого=Итого+ТЗ.СуммаВыплаты; КонецЦикла; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.ПараметрыСтраницы(1,,,,,,,,,,,); Таб.Опции(0,0,0,0); Таб.Показать("Платежная ведомость"); |
|||
15
PuhUfa
06.09.11
✎
10:10
|
ТекущаяГруппа = "";
ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если (ТЗ.ГруппаСотрудника<>ТекущаяГруппа) и (ТекущаяГруппа = "") Тогда //сменилась группа и первая группа. создает новую таб Таб=СоздатьОбъект("Таблица"); Таб.ВывестиСекцию("Шапка"); иначеесли (ТЗ.ГруппаСотрудника<>ТекущаяГруппа) и (ТекущаяГруппа <> "") тогда //сменилась группа и она не первая. выводим предыдцщцю таб и создаем новую Таб.ВывестиСекцию("Подвал"); Таб.Показать("Платежная ведомость"); Таб=СоздатьОбъект("Таблица"); Таб.ВывестиСекцию("Шапка"); конецесли; Таб.ВывестиСекцию("Строка"); ТекущаяГруппа = ТЗ.ГруппаСотрудника; конеццикла; //последний подвал Таб.ВывестиСекцию("Подвал"); Таб.Показать("Платежная ведомость"); |
|||
16
andryus
06.09.11
✎
10:35
|
(14) Все хорошо, но в ТЗ только 2 группы, от выдает по ним таблицы, НО еще выкидывает пустую таблицу
|
|||
17
Vladal
06.09.11
✎
10:59
|
Условие Если (ТЗ.ГруппаСотрудника<>ТекущаяГруппа) и (ТекущаяГруппа = "") Тогда избыточное
Вторая часть условия не выполнится никогда: иначеесли (ТЗ.ГруппаСотрудника<>ТекущаяГруппа) и (ТекущаяГруппа <> "") тогда |
|||
18
PuhUfa
06.09.11
✎
11:25
|
(17) это еще почему?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |