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

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

Метки:отчеты

Требуется вывести отчет в две колонки на листе

Я
   usr
 
17.11.04 - 14:09
Если у кого есть опыт или примеры, буду признателен (пока ничего кроме как выгрузить запрос в тз, разделить на колонки и вывести по адресам ячеек в голову не приходит).
 
  Рекламное место пустует
   big
 
1 - 17.11.04 - 14:14
А в любом случае то на то и выйдет. Все равно 2 раза обход делать придется.
   GrayT
 
2 - 17.11.04 - 14:15
Смотря в каком порядке колонки формировать
1 2
3 4
или
1 3
2 4
   usr
 
3 - 17.11.04 - 14:17
(2) в порядке
1 2
3 4
   Талица
4 - 17.11.04 - 14:55
нужна , напрямую с запросом думаю не получится
   GrayT
 
5 - 17.11.04 - 14:58
Присоеденяй секцию, Причем ту же самую
   Diter
 
6 - 17.11.04 - 14:58
(0) Ничего сложного
В секции две ячейки с выражениями например Зн1 и Зн2
Делая обход группировок запроса делаешь вывод секции не каждый раз, а через раз. При этом при первом обходе (нечётном) будешь присваивать значение из запроса Зн1, а при втором (чётном) - Зн2 и только после этого выводить секцию.
   Tarlich
 
7 - 17.11.04 - 14:59
Запросом на пямую наврятли , так ценники в торговле на печать
   miki
 
8 - 17.11.04 - 15:01
(6), (5) Почти.
Нечетная строка - Вывести()
Четная - Присоедить()
   miki
 
9 - 17.11.04 - 15:02
(8) +. Парюсь, сорри. ВывестиСекцию(), ПрисоединитьСекцию().
   Diter
 
10 - 17.11.04 - 15:05
(8) Читай внимательно (6). Я секцию вывожу ОДИН раз, просто в ней есть две ячейки с выражениями.
 
  Рекламное место пустует
   GrayT
 
11 - 17.11.04 - 15:08
(10)Твой способ хорош если всего и делов что Зн1, Зн2. В случае ценников и их исправлений (вдруг потребуется - лишний геморой)
   Diter
 
12 - 17.11.04 - 15:13
(11) А в чём геморой то? Все исправил и настроил для первого "кусочка" секции, потом Ctrl+Ins Shift+Ins и все изменения перенёс во второй "кусочек". Какая разница то, точнее разница в двух нажатия на клаву :)
   GrayT
 
13 - 17.11.04 - 15:17
Насколько я понял во втором кусочке Зн2, а в первом Зн1
   Diter
 
14 - 17.11.04 - 15:29
И что, возникают трудности с изменением одного на другое? Хорошо - плюс ещё пять секунд времени.
   GrayT
 
15 - 17.11.04 - 15:33
В топку
   miki
 
16 - 17.11.04 - 16:49
(14) Не попадались тебе невменяемые заказчики. Сегодня ему две колонки, завтра шесть, а субботу - три. И жми потом копи/пасте. А (8) можно развить до универсальности. Задал переменную типа <СколСтолбцовСегодняЖаждетЧел>, проинил ее, к примеру, для случая (0) СколСтолбцовСегодняЖаждетЧел=2. А в коде вывода отчета пишешь:
...
Счетчик=0;
Пока бла-бла Цикл
...
  Счетчик=Счетчик+1;
...
  Если Счетчик<СколСтолбцовСегодняЖаждетЧел Тогда  
      Таб.ВывестиСекцию(...|...)
   Иначе
      Таб.ПрисоединитьСекцию(...|...);
      Счетчик=0;
   КонецЕсли;
.....

..
   Пробежавший
17 - 17.11.04 - 20:24
Все это делал уже давно. Сейчас смотрю и сам себя матерю. Но все-равно - оно работает и пусть работает. Будет время - переделаю...
Кстати - текст сильно порезан, но основное вроде бы сохранил...
По кнопке Печать срабатывает процедура Сформировать. Она внизу. Так исторически
сложилось. Этот прайс у меня работает с разными ценами, позволяет делать дополнительные колонки, учитывать скидку или накрутку - монстр одним словом. Так вот это я все здесь повыбрасывал...
Костяк, короче. М.б. с ошибками :)  Торопился...
*************************************************************************************
Процедура ПечатьОсобая()
Перем кк, стр, первая, ном[66], иТов[66], Цена[66], ВУпак[66], гр[66], ВМассиве;
   // и еще, что потребуется...;

    первая = 1;  // это чтобы отличить первую страницу от остальных

    стр  = 66;   // это количество строк на листе. Здесь и в объявлении    переменных

   //       это дело можно регулировать в зависимости от модели принтера.

   //       а еще лучше... Ну, это тебе рано пока...

    кк   = 1;    // номер элемента т.н. "массива"

    пн   = 1;    // номер по порядку в прайсе

   // При печати элементы перетекают из колонки в колонку. Это касается и разбивки по 

   // группам товаров. Т.е. 1-я колонка: Название группы

   //                                    товар 

       //                                    товар 

   //                                    ...

       //                                    товар 

       //                                    товар 

       //                                    Название группы

       //                                    товар 

       //                                    товар 

   //                                    ...

   //                       2-я колонка  товар 

       //                                    товар 

       //                                    Название группы

       //                                    товар 

       //                                    товар 

   //                                    ...      и т.д.

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

   // Начинаем

    Таб.ВывестиСекцию("Шапка");
    Пока Запрос.Группировка("Товар") = 1 Цикл
        Тов = Запрос.Товар;
        Если первая=1 тогда
           // потому что у меня шапка 6 строк

            стр = 60;
        Иначе
            стр = 66;
        КонецЕсли;
        Если кк<=стр тогда
            ВМассиве=1;      // это пригодится для вывода последней страницы

            иТов[кк] = Тов.Наименование;
            Если Тов.ЭтоГруппа()=1 Тогда
                гр[кк]=1;
            Иначе
               // здесь заполняем наборы переменных

                Цена[кк]=Тов.МелкоОптоваяЦена;
                ВУпак[кк]=Тов.Сколько_в_упаковке ;
                ном[кк] = пн;
                пн = пн+1;
            КонецЕсли;
            кк = кк+1;
        Иначе
            ВМассиве=0;
           // структура секций Левая и Правая - одинаковые, только в левой пишем

           // в ячейке с номенклатурой (и т.п.) ?(ВМассиве=1,иТов[аа],иТов[кк-стр])

           // а в правой - Тов.Наименование      (короче, разберешься...)

           // Выводим секцию из набора переменных

            Если гр[кк-стр]=1 Тогда
                Таб.ВывестиСекцию("Группа|Левая");
            Иначе
                Таб.ВывестиСекцию("Товар|Левая");
            КонецЕсли;
           // и присоединяем 

            Если Тов.ЭтоГруппа()=1 Тогда
                Таб.ПрисоединитьСекцию("Группа|Правая");
            Иначе
                тЦена=Тов.МелкоОптоваяЦена;
                тВУпак=Тов.Сколько_в_упаковке ;
                Таб.ПрисоединитьСекцию("Товар|Правая");
                пн = пн+1;
            КонецЕсли;         
            Если кк=2*стр тогда
               // обнуляем счетчик

                кк=1;
                Для аа=1 по стр Цикл
                    ном[аа]=0;
                    иТов[аа]="";
                    Цена[аа]=0;
                    ВУпак[аа]=0;
                    гр[аа]=0;
                КонецЦикла;
                первая=0;
                Таб.НоваяСтраница();
            Иначе
                кк = кк+1;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
   // здесь вроде бы конец , но 

   // Если в наборе переменных остались нераспечатанные данные

   // продолжаем

    Если ВМассиве=1 Тогда
        Для аа=1 по стр Цикл
            Если ПустоеЗначение(иТов[аа])=1 Тогда
                Прервать;
            Иначе
               // Выводим оставшиеся данные

                Если гр[аа]=1 Тогда
                    Таб.ВывестиСекцию("Группа|Левая");
                Иначе
                    Таб.ВывестиСекцию("Товар|Левая");
                КонецЕсли;
               // Чтоб  красиво было. Там просто пустографка.

                Таб.ПрисоединитьСекцию("Пустая|Правая");
            КонецЕсли;
        КонецЦикла;
    Иначе
        Для аа=?(кк<стр,кк,(кк-стр)) по стр Цикл
            Если ПустоеЗначение(иТов[аа])=1 Тогда
                Прервать;
            Иначе
               // Выводим оставшиеся данные

                Если гр[аа]=1 Тогда
                    Таб.ВывестиСекцию("Группа|Левая");
                Иначе
                    Таб.ВывестиСекцию("Товар|Левая");
                КонецЕсли;
                Таб.ПрисоединитьСекцию("Пустая|Правая");
                Оживить(1);
            КонецЕсли;
            кк=кк+1;
        КонецЦикла;
    КонецЕсли;
    Таб.ПовторятьПриПечатиСтроки(7,7);// ну это заголовки столбцов

    Таб.Защита(Константа.ФлагЗащитыТаблиц);
    Таб.ТолькоПросмотр(1);
    Таб.Показать("П Р А Й С - Л И С Т","");
    ЧислоСтрок=0;// обнуляем глобальную переменную по окончании печати

КонецПроцедуры

Процедура Сформировать()
   //  Создаем и выполняем запрос с необходимыми параметрами

   //  Я его убрал отседова...

   //  Создаем Таблицу для выходного отчета

    Таб=СоздатьОбъект("Таблица");
    ПечатьОсобая();
КонецПроцедуры
   Интересно
18 - 18.11.04 - 01:45
Кто-нибудь читал?
   Asmody
 
19 - 18.11.04 - 01:54
я сбился на восьмом комментарии...


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