Имя: Пароль:
1C
1С v8
Почему одна и та же запись печатается 200 раз
,
0 IgorTrifonov
 
24.03.14
10:29
Всем здрасьте. Есть задание с экономить бумагу.
То есть узенькую печать, печатать в две колонки. Как в газетах.
Сначала первая колонка заполняется, затем вторая.
И только, только, только, потом на печать.

Алгоритмик простенький:
Сначала я заполняю таблицу значений (читая запрос), а затем просто распечатываю эту самую таблицу значений.
Таблица значений (тз) заполняется разными строками из запроса (в отладчике это хорошо видно)
И записей в запросе примерно 200
А вот когда распечатываю тз, то печатается 200 раз только одна запись.


Пожалуйста направьте мозги в нужное русло.

    // в цикле заполним тз, а потом выведем тз на печать
    Запрос1 = Результат.Выбрать(ОбходРезультатаЗапроса.Прямой);
    Пока Запрос1.Следующий() Цикл
        
        Область = ?(ЧастьЛиста = Левая, ОбластьСтрока, ОбластьСтрока2);
        Область.Параметры.Заполнить(Запрос1);
        
        ПроверкаЗаполненияЛиста.Добавить(Область);
        Если Не ТабДок.ПроверитьВывод(ПроверкаЗаполненияЛиста) Тогда
            ПроверкаЗаполненияЛиста.Очистить();
            ПроверкаЗаполненияЛиста.Добавить(Область);
            КолВоСтрок = ?(КолВоСтрок = 0, пп, пп - КолВоСтрок);
            ЧастьЛиста = ?(ЧастьЛиста = Левая, Правая, Левая);
        КонецЕсли;

        Если ЧастьЛиста = Левая Тогда
            нс = тз.Добавить();
            нс.Левая = Область;    // нс[ЧастьЛиста] = Область;
        Иначе
            тз[пп - КолВоСтрок].Правая= Область;
        КонецЕсли;
        
        пп = пп + 1;
    КонецЦикла;
    
    Для Сч = 0 по тз.Количество() - 1 Цикл
        ТабДок.Вывести(тз[Сч].Левая);    ТабДок.Присоединить(тз[Сч].Правая);
    КонецЦикла;
1 shuhard
 
24.03.14
10:30
(0) кривой цикл детектед (с)
2 vmv
 
24.03.14
10:31
используй Вставить(), как опытный спец
3 Галахад
 
гуру
24.03.14
10:49
Если я правильно понимаю, то в таблице значений во всех строках две переменные.
В конце цикла эти переменные во всех строках не должны отличатся.
4 azt-yur
 
24.03.14
11:02
У вас одна и та же область перезаполняется каждый раз.
Сделайте получение новой области при каждом проходе.
Замените
Область = ?(ЧастьЛиста = Левая, ОбластьСтрока, ОбластьСтрока2);
На
Область = ?(ЧастьЛиста = Левая, Макет.ПолучитьОбласть("Строка"), Макет.ПолучитьОбласть("Строка2");
5 IgorTrifonov
 
24.03.14
11:15
azt-yur благодарю
Область = ?(ЧастьЛиста = Левая, Макет.ПолучитьОбласть("Строка|ЛеваяЧасть"), Макет.ПолучитьОбласть("Строка|ПраваяЧасть"));
заработало