|
v7: Помогите с алгоритмом вывода на печ форму | ☑ | ||
---|---|---|---|---|
0
zenon46
13.12.17
✎
09:52
|
Доброго дня.
Есть две таблицы значений, в первой таблице значений много разных колонок, ключевая это Номенклатура, таблица отсортирована по этой колонке, а во вторая свернута по "номенклатуре" с просуммированными нужными колонками (итоги), суть дела вывода на форму, перебирая значения первой таблицы выводим в строку до тех пор пока следующий элемент в выборке будет отличаться от предыдущего, в этот момент выводим строку (итоги) из второй таблицы. Проблема заключается в том что при окончании перебора первой таблицы итоги из второй не выводятся. НомерСтроки = 1; НомПП = 1; ТекНоменлатура = ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура"); Для НомерСтроки = 1 По ТаблицаЗапроса.КоличествоСтрок() Цикл Если (ТекНоменлатура <> ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура")) Тогда НомСтроки = ""; ТаблицаЗапросаВременная.НайтиЗначение(ТекНоменлатура,НомСтроки,"Номенклатура"); ПечИтогЦенаЗаЕдиницу = ТаблицаЗапросаВременная.ПолучитьЗначение(НомСтроки,"СуммаНоменклаутры"); ПечИтогСтоимостьДоставки = Окр(ТаблицаЗапросаВременная.ПолучитьЗначение(НомСтроки,"СуммаДоставки"),2); ПечИтогПроцентДоставки = Окр(((ПечИтогСтоимостьДоставки/ПечИтогЦенаЗаЕдиницу)*100),2); Таб.ВывестиСекцию("ИтогПоНоенклатуре"); КонецЕсли; /// вывод строк ТекНоменлатура = ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура"); ПечНомПП = НомПП; НомПП = НомПП + 1; Таб.ВывестиСекцию("Строка"); КонецЦикла; |
|||
1
Рэйв
13.12.17
✎
09:53
|
в конце цикла выведи еще раз итоги, в чем проблема то?
|
|||
2
zenon46
13.12.17
✎
09:55
|
(1) да получается что там еще хранятся итоги от предыдущей "номенклатуры"
|
|||
3
Рэйв
13.12.17
✎
09:56
|
(2)Полностью блок выведи который у тебя в
Если (ТекНоменлатура <> ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура")) Тогда |
|||
4
zenon46
13.12.17
✎
09:57
|
(3) он тут полностью
|
|||
5
Рэйв
13.12.17
✎
09:59
|
(2)А вообще это делается схематично так:
ЗначениеДо="!@#"; Для Каждого что Из Чего то Цикл Если ПроверяемоеЗначение<>ЗначениеДо Тогда //ищем итоги в тз итогов, выводим КонецЕсли; //выводим строку ЗначениеДо=ПроверяемоеЗначение; Конеццикла; //----------- тогда итоги будут вначале и выведутся все |
|||
6
Рэйв
13.12.17
✎
10:00
|
только сортировка должна быть обязательно по ПроверяемоеЗначение. Иначе фигню выведет
|
|||
7
zenon46
13.12.17
✎
10:01
|
(6) сортировка конечно есть, косяк в том что не выводится итоги по последней номенклатуре.
|
|||
8
Рэйв
13.12.17
✎
10:02
|
(7)Попробуй схему из (5) она стопудово рабочая. сто раз проверенная
|
|||
9
Злопчинский
13.12.17
✎
10:02
|
Возьми на ИС универсальную печать по ТЗ и не мучайся
Искать по NotaBene |
|||
10
zenon46
13.12.17
✎
10:05
|
(9) дело не в мучайся, я хочу сделать и понять почему не работает моя схема.
|
|||
11
zenon46
13.12.17
✎
10:07
|
(8) блин да вроде моя схема точно такая же, убрал все для понимания
НомерСтроки = 1; НомПП = 1; ТекНоменлатура = "";//ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура"); Для НомерСтроки = 1 По ТаблицаЗапроса.КоличествоСтрок() Цикл Если (ТекНоменлатура <> ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура")) Тогда Таб.ВывестиСекцию("ИтогПоНоенклатуре"); КонецЕсли; ТекНоменлатура = ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура"); ПечНомПП = НомПП; НомПП = НомПП + 1; Таб.ВывестиСекцию("Строка"); КонецЦикла; |
|||
12
Злопчинский
13.12.17
✎
10:08
|
Добавь в основную таблицу номенклатуры в конец пустую строку. При смене номенклатуры выводить все как обычно. Потом проверка если номенклатура пустая то прервать или на цикл продолжить.
|
|||
13
zenon46
13.12.17
✎
10:08
|
(12) во, это идея, сейчас попробую.
|
|||
14
Злопчинский
13.12.17
✎
10:09
|
Или после цикла просто напиши вывод итога по последней строке
|
|||
15
Злопчинский
13.12.17
✎
10:11
|
ТекНоменклатуру лучше инициализировать пустымзначегием номенклатуры а не пустой строкой
И что за извраты с выборкой по тз Напиши обычный цикл с выбрать строки и получитьстроку |
|||
16
Остап Сулейманович
13.12.17
✎
10:12
|
(11) Ну все же просто
НомерСтроки = 1; НомПП = 1; ... Для НомерСтроки = 1 По ТаблицаЗапроса.КоличествоСтрок() Цикл ... Таб.ВывестиСекцию("Строка"); КонецЦикла; //После основного цикла Если ТаблицаЗапроса.КоличествоСтрок() > 0 Тогда Таб.ВывестиСекцию("ИтогПоНоенклатуре"); КонецЕсли; |
|||
17
Злопчинский
13.12.17
✎
10:13
|
Код - авно
Итог будет выводиться для первой же строки |
|||
18
Злопчинский
13.12.17
✎
10:14
|
(17) это автору
|
|||
19
zenon46
13.12.17
✎
10:21
|
(17) еще раз повторяю, итоги выводятся как нужно, если в первой строке номенклатура "А", а во второй "Б", итог выводится после первой же строки, если "А" "А" "Б" то после второй.
|
|||
20
Остап Сулейманович
13.12.17
✎
10:21
|
(17) Автор догадается получить нужную строку из таблицы. Я так думаю.
От сокращения кода примера суть не теряется. Я так думаю. Возможно кому то нужно разжевать вплоть до положения точки с запятой, которые разделители операторов. Надеюсь, участники ветки в этом не нуждаются? |
|||
21
Злопчинский
13.12.17
✎
10:27
|
(19) в твоём коде итог выведется на первой де строке номенклатуры, потому что она не совпадает с пустой номенклатурой.
Код авно |
|||
22
Остап Сулейманович
13.12.17
✎
10:27
|
(19) В (5) вполне рабочая схема. Нужно только допилить первый вывод итогов.
Примерно так : текШаблон = ""; Для поз = 1 По ТЧ.КоличествоСтрок() Цикл ТЧ.ПолучитьСтрокуПоНомеру(поз); Если (текШаблон <> ТЧ.ШаблонИзТЧ) И (ПустоеЗначение(текШаблон) = 0) Тогда //Выводим итог текШаблон = ТЧ.ШаблонИзТЧ; КонецЕсли; КонецЦикла; //выводим итог по последнему значению //в текШаблон - значение по которому итог еще не выводился |
|||
23
Злопчинский
13.12.17
✎
10:28
|
Догадаться про инициалы зимовать номенклатуру перед циклом значением номенклатуры из первой строки - влом?
|
|||
24
Злопчинский
13.12.17
✎
10:28
|
(22) ишшо один кудесник ;-)
|
|||
25
Злопчинский
13.12.17
✎
10:30
|
Перед циклом проинициализировать значением из первой строки.
Далее обычный цикл вообще без извратов. После цикла вывести итог по последней строке. |
|||
26
zenon46
13.12.17
✎
10:30
|
(23) так там так и есть .
ТекНоменлатура = ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура"); |
|||
27
zenon46
13.12.17
✎
10:34
|
Все сделал как в (12), добавил пустую строку, и просто ее не вывожу, а перед пустой есте-но выводится итог по последней номенклатуре.
|
|||
28
HawkEye
13.12.17
✎
10:38
|
(11) не увидел ДВУХ таблиц из (0)...
|
|||
29
HawkEye
13.12.17
✎
10:40
|
(27) не проще было в условие добавить И ТекНоменлатура <> "" ?
|
|||
30
zenon46
13.12.17
✎
10:45
|
(28) да лишнее понавырезал.
|
|||
31
ikea
13.12.17
✎
10:47
|
Индексированная таблица в помощь с потомками, и не надо будет огород городить.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |