Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 сен 2024, 18:33

вывод прайса в две колонки

Автор tema111, 05 июл 2012, 11:21

0 Пользователей и 2 гостей просматривают эту тему.

СветланаCC

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

Public_enemy

Пример макета


Текст кода

Запрос = Новый Запрос("ВЫБРАТЬ
   |   Номенклатура.Наименование,
   |   Номенклатура.ЕдИзм
   |ИЗ
   |   Справочник.Номенклатура КАК Номенклатура
   |ГДЕ
   |   Номенклатура.ЭтоГруппа = ЛОЖЬ");
   РЗ = Запрос.Выполнить().Выгрузить();
   КоличествоСтрок = РЗ.Количество() - 1;
   
   
   ТабДок = Новый ТабличныйДокумент;
   Макет = Справочники.Номенклатура.ПолучитьМакет("Макет");
   ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
   ТабДок.Вывести(ОбластьШапка);
   
   //  Для НомерСтроки = 1 По КоличествоСтрок Цикл
   // 
   //  ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
   //  ОбластьСтрока.Параметры.Товар  = РЗ[НомерСтроки - 1].Наименование;
   //  ОбластьСтрока.Параметры.Ед     = РЗ[НомерСтроки - 1].ЕдИзм;
   //  ОбластьСтрока.Параметры.Товар1 = РЗ[НомерСтроки].Наименование;
   //  ОбластьСтрока.Параметры.Ед1    = РЗ[НомерСтроки].ЕдИзм;
   //  ТабДок.Вывести(ОбластьСтрока);
   //  НомерСтроки = НомерСтроки + 1;
   //КонецЦикла;
   
   ПолТаблици = КоличествоСтрок / 2;   // Делим таблицу пополам
   Если Найти(Строка(ПолТаблици),",") > 0 Тогда //число поделилось не ровно  2,5
      ПолТаблици = (КоличествоСтрок + 1)/2;
      ПоследнийИндекс = КоличествоСтрок + 1; //Строку сэтим индексом выводить не надо
   КонецЕсли;                          // она пустая
   
   Индекс = ПолТаблици;
   Индекс2 = ПолТаблици + 1;
   Для НомерСтроки = 1 По ПолТаблици Цикл
      
      
      ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
      //Первая колонка
      ОбластьСтрока.Параметры.номер  = НомерСтроки;
      ОбластьСтрока.Параметры.Товар  = РЗ[НомерСтроки - 1].Наименование;
      ОбластьСтрока.Параметры.Ед     = РЗ[НомерСтроки - 1].ЕдИзм;
      //Вторая колонка
      Если  Индекс2 = ПоследнийИндекс  Тогда
         //Последняя стра при не ровном делении выводится пустой
         ОбластьСтрока.Параметры.Номер1 = "";
         ОбластьСтрока.Параметры.Товар1 = "";
         ОбластьСтрока.Параметры.Ед1    = "";
      Иначе
         ОбластьСтрока.Параметры.Номер1 = Индекс2;
         ОбластьСтрока.Параметры.Товар1 = РЗ[Индекс].Наименование;
         ОбластьСтрока.Параметры.Ед1    = РЗ[Индекс].ЕдИзм;
      КонецЕсли;
      ТабДок.Вывести(ОбластьСтрока);
      Индекс = Индекс + 1;
      Индекс2 = Индекс2 + 1;
      
   КонецЦикла;

Попробуйте такой вариант
У меня работает Выводит прайс в две колонки с нумерацией строк
и с учетом того что прайс по полам поделится не ровно (то есть 2,5)
Подставте свои переменные, должо все получится

Public_enemy

Прошу Прошения

Вот полный текст кода:

   Запрос = Новый Запрос("ВЫБРАТЬ
   |   Номенклатура.Наименование,
   |   Номенклатура.ЕдИзм
   |ИЗ
   |   Справочник.Номенклатура КАК Номенклатура
   |ГДЕ
   |   Номенклатура.ЭтоГруппа = ЛОЖЬ");
   РЗ = Запрос.Выполнить().Выгрузить();
   КоличествоСтрок = РЗ.Количество();
   
   
   ТабДок = Новый ТабличныйДокумент;
   Макет = Справочники.Номенклатура.ПолучитьМакет("Макет");
   ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
   ТабДок.Вывести(ОбластьШапка);
   
   
   ПолТаблици = КоличествоСтрок / 2;   // Делим таблицу пополам
   Если Найти(Строка(ПолТаблици),",") > 0 Тогда //число поделилось не ровно  2,5
      ПолТаблици = (КоличествоСтрок + 1)/2;
      ПоследнийИндекс = КоличествоСтрок + 1; //Строку сэтим индексом выводить не надо
   КонецЕсли;                          // она пустая
   
   Индекс = ПолТаблици;
   Индекс2 = ПолТаблици + 1;
   Для НомерСтроки = 1 По ПолТаблици Цикл
      
      
      ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
      //Первая колонка
      ОбластьСтрока.Параметры.номер  = НомерСтроки;
      ОбластьСтрока.Параметры.Товар  = РЗ[НомерСтроки - 1].Наименование;
      ОбластьСтрока.Параметры.Ед     = РЗ[НомерСтроки - 1].ЕдИзм;
      //Вторая колонка
      Если  Индекс2 = ПоследнийИндекс  Тогда
         //Последняя стра при не ровном делении выводится пустой
         ОбластьСтрока.Параметры.Номер1 = "";
         ОбластьСтрока.Параметры.Товар1 = "";
         ОбластьСтрока.Параметры.Ед1    = "";
      Иначе
         ОбластьСтрока.Параметры.Номер1 = Индекс2;
         ОбластьСтрока.Параметры.Товар1 = РЗ[Индекс].Наименование;
         ОбластьСтрока.Параметры.Ед1    = РЗ[Индекс].ЕдИзм;
      КонецЕсли;
      ТабДок.Вывести(ОбластьСтрока);
      Индекс = Индекс + 1;
      Индекс2 = Индекс2 + 1;
      
      
      
   КонецЦикла;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск