Вход | Регистрация


1С:Предприятие ::

Метки: 

v7: Помогите с алгоритмом вывода на печ форму

Я
   zenon46
 
13.12.17 - 09:52
Доброго дня.
Есть две таблицы значений, в первой таблице значений много разных колонок, ключевая это Номенклатура, таблица отсортирована по этой колонке, а во вторая свернута по "номенклатуре" с просуммированными нужными колонками (итоги), суть дела вывода на форму, перебирая значения первой таблицы выводим в строку до тех пор пока следующий элемент в выборке будет отличаться от предыдущего, в этот момент выводим строку (итоги) из второй таблицы. Проблема заключается в том что при окончании перебора первой таблицы итоги из второй не выводятся.

        НомерСтроки = 1;
        НомПП = 1;
        ТекНоменлатура = ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура");
        Для НомерСтроки = 1 По ТаблицаЗапроса.КоличествоСтрок() Цикл            
            Если (ТекНоменлатура <> ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура")) Тогда
                НомСтроки  = "";
                ТаблицаЗапросаВременная.НайтиЗначение(ТекНоменлатура,НомСтроки,"Номенклатура");
                ПечИтогЦенаЗаЕдиницу      = ТаблицаЗапросаВременная.ПолучитьЗначение(НомСтроки,"СуммаНоменклаутры");
                ПечИтогСтоимостьДоставки = Окр(ТаблицаЗапросаВременная.ПолучитьЗначение(НомСтроки,"СуммаДоставки"),2);
                ПечИтогПроцентДоставки   = Окр(((ПечИтогСтоимостьДоставки/ПечИтогЦенаЗаЕдиницу)*100),2);
                Таб.ВывестиСекцию("ИтогПоНоенклатуре");
            КонецЕсли;
            /// вывод строк

            ТекНоменлатура       = ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура");
            ПечНомПП             = НомПП;
            НомПП = НомПП + 1;
            Таб.ВывестиСекцию("Строка");
        КонецЦикла;
 
  Рекламное место пустует
   Рэйв
 
1 - 13.12.17 - 09:53
в конце цикла выведи еще раз итоги, в чем проблема то?
   zenon46
 
2 - 13.12.17 - 09:55
(1) да получается что там еще хранятся итоги от предыдущей "номенклатуры"
   Рэйв
 
3 - 13.12.17 - 09:56
(2)Полностью блок выведи который у тебя в 
Если (ТекНоменлатура <> ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура")) Тогда
   zenon46
 
4 - 13.12.17 - 09:57
(3) он тут полностью
   Рэйв
 
5 - 13.12.17 - 09:59
(2)А вообще это делается схематично так:

ЗначениеДо="!@#";

Для Каждого что Из Чего то Цикл
     Если ПроверяемоеЗначение<>ЗначениеДо Тогда
        //ищем итоги в тз итогов, выводим

     КонецЕсли; 
    //выводим строку

     ЗначениеДо=ПроверяемоеЗначение;
Конеццикла;

//-----------

тогда итоги будут вначале и выведутся все
   Рэйв
 
6 - 13.12.17 - 10:00
только сортировка должна быть обязательно по ПроверяемоеЗначение. Иначе фигню выведет
   zenon46
 
7 - 13.12.17 - 10:01
(6) сортировка конечно есть, косяк в том что не выводится итоги по последней номенклатуре.
   Рэйв
 
8 - 13.12.17 - 10:02
(7)Попробуй схему из (5) она стопудово рабочая. сто раз проверенная
   Злопчинский
 
Ведущий
9 - 13.12.17 - 10:02
Возьми на ИС универсальную печать по ТЗ и не мучайся
Искать по NotaBene
   zenon46
 
10 - 13.12.17 - 10:05
(9) дело не в мучайся, я хочу сделать и понять почему не работает моя схема.
 
  Рекламное место пустует
   zenon46
 
11 - 13.12.17 - 10:07
(8) блин да вроде моя схема точно такая же, убрал все для понимания

        НомерСтроки = 1;
        НомПП = 1;
        ТекНоменлатура = ""//ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура");

        Для НомерСтроки = 1 По ТаблицаЗапроса.КоличествоСтрок() Цикл            
            Если (ТекНоменлатура <> ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура")) Тогда
                Таб.ВывестиСекцию("ИтогПоНоенклатуре");
            КонецЕсли;
            ТекНоменлатура       = ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура");
            ПечНомПП             = НомПП;
            НомПП = НомПП + 1;
            Таб.ВывестиСекцию("Строка");
        КонецЦикла;
   Злопчинский
 
Ведущий
12 - 13.12.17 - 10:08
Добавь в основную таблицу номенклатуры в конец пустую строку. При смене номенклатуры выводить все как обычно. Потом проверка если номенклатура пустая то прервать или на цикл продолжить.
   zenon46
 
13 - 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) это автору
   zenon46
 
19 - 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
Перед циклом проинициализировать  значением из первой строки.
Далее обычный цикл вообще без извратов.
После цикла вывести итог по последней строке.
   zenon46
 
26 - 13.12.17 - 10:30
(23) так там так и есть .
ТекНоменлатура = ТаблицаЗапроса.ПолучитьЗначение(НомерСтроки,"Номенклатура");
   zenon46
 
27 - 13.12.17 - 10:34
Все сделал как в (12), добавил пустую строку, и просто ее не вывожу, а перед пустой есте-но выводится итог по последней номенклатуре.
   HawkEye
 
28 - 13.12.17 - 10:38
(11) не увидел ДВУХ таблиц из (0)...
   HawkEye
 
29 - 13.12.17 - 10:40
(27) не проще было в условие добавить И ТекНоменлатура <> "" ?
   zenon46
 
30 - 13.12.17 - 10:45
(28) да лишнее понавырезал.
   ikea
 
31 - 13.12.17 - 10:47
Индексированная таблица в помощь с потомками, и не надо будет огород городить.



Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует