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

Работа с табличными частями документа.

Автор beztrud, 16 ноя 2011, 12:11

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

beztrud

Здравствуйте. В документе есть несколько табличных частей. Не все табличные части бывают заполнены. Необходимо при печати макета пропускать незаполненные табличные части. Т.е. необходимо написать что-то вроде этого

Процедура Печать(Элемент)
   //{{_КОНСТРУКТОР_ПЕЧАТИ_ЭЛЕМЕНТ(Печать)
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   ТабДок = Новый ТабличныйДокумент;
   Макет = Документы.ФаксыНаРабочую.ПолучитьМакет("Печать");
   // Заголовок
   Область = Макет.ПолучитьОбласть("Заголовок");
   ТабДок.Вывести(Область);
   // Шапка
   Шапка = Макет.ПолучитьОбласть("Шапка");
   Шапка.Параметры.Заполнить(ЭтотОбъект);
   ТабДок.Вывести(Шапка);
   // ТабличнаяЧасть1
ЕСЛИ ТабличнаяЧасть1 ЗАПОЛНЕНА ТОГДА
   Область = Макет.ПолучитьОбласть("ТабличнаяЧасть1Шапка");
   ТабДок.Вывести(Область);
   ОбластьТабличнаяЧасть1 = Макет.ПолучитьОбласть("ТабличнаяЧасть1");
   Для Каждого ТекСтрокаТабличнаяЧасть1 Из ТабличнаяЧасть1 Цикл
      ОбластьТабличнаяЧасть1.Параметры.Заполнить(ТекСтрокаТабличнаяЧасть1);
      ТабДок.Вывести(ОбластьТабличнаяЧасть1);
   КонецЦикла;
   // ТабличнаяЧасть2
ЕСЛИ ТабличнаяЧасть2 ЗАПОЛНЕНА ТОГДА
   Область = Макет.ПолучитьОбласть("ТабличнаяЧасть2Шапка");
   ТабДок.Вывести(Область);
   ОбластьТабличнаяЧасть2 = Макет.ПолучитьОбласть("ТабличнаяЧасть2");
   Для Каждого ТекСтрокаТабличнаяЧасть2 Из ТабличнаяЧасть2 Цикл
      ОбластьТабличнаяЧасть2.Параметры.Заполнить(ТекСтрокаТабличнаяЧасть2);
   ТабДок.Вывести(ОбластьТабличнаяЧасть2);   
   КонецЦикла;


   ТабДок.ОтображатьСетку = Ложь;
   ТабДок.Защита = Ложь;
   ТабДок.ТолькоПросмотр = Ложь;
   ТабДок.ОтображатьЗаголовки = Ложь;
   ТабДок.Показать();
   //}}_КОНСТРУКТОР_ПЕЧАТИ_ЭЛЕМЕНТ
КонецПроцедуры

has

Если ТабличнаяЧасть1.Количество() > 0 Тогда

beztrud


beztrud

Помогите пожалуйста реализовать это на 8.2. У меня такой текст в менеджере:

Процедура Печать(ТабДок, Ссылка) Экспорт
   //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
   Макет = Документы.ФаксыСтекло.ПолучитьМакет("Печать");
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |   ФаксыСтекло.Дата,
   |   ФаксыСтекло.Куда,
   |   ФаксыСтекло.Стекло1.(
   |      ТипСтекла,
   |      Высота,
   |      Ширина,
   |      Количество
   |   ),
   |   ФаксыСтекло.Стекло2.(
   |      ТипСтекла,
   |      Высота,
   |      Ширина,
   |      Количество
   |   ),
   |   ФаксыСтекло.Стекло3.(
   |      ТипСтекла,
   |      Высота,
   |      Ширина,
   |      Количество
   |   ),
   |   ФаксыСтекло.Стекло4.(
   |      ТипСтекла,
   |      Высота,
   |      Ширина,
   |      Количество
   |   ),
   |   ФаксыСтекло.Стекло5.(
   |      ТипСтекла,
   |      Высота,
   |      Ширина,
   |      Количество
   |   ),
   |   ФаксыСтекло.Стекло6.(
   |      ТипСтекла,
   |      Высота,
   |      Ширина,
   |      Количество
   |   ),
   |   ФаксыСтекло.Стекло7.(
   |      ТипСтекла,
   |      Высота,
   |      Ширина,
   |      Количество
   |   ),
   |   ФаксыСтекло.Стекло8.(
   |      ТипСтекла,
   |      Высота,
   |      Ширина,
   |      Количество
   |   ),
   |   ФаксыСтекло.Стекло9.(
   |      ТипСтекла,
   |      Высота,
   |      Ширина,
   |      Количество
   |   ),
   |   ФаксыСтекло.Стекло10.(
   |      ТипСтекла,
   |      Высота,
   |      Ширина,
   |      Количество
   |   )
   |ИЗ
   |   Документ.ФаксыСтекло КАК ФаксыСтекло
   |ГДЕ
   |   ФаксыСтекло.Ссылка В (&Ссылка)";
   Запрос.Параметры.Вставить("Ссылка", Ссылка);
   Выборка = Запрос.Выполнить().Выбрать();

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   Шапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьСтекло1Шапка = Макет.ПолучитьОбласть("Стекло1Шапка");
   ОбластьСтекло1 = Макет.ПолучитьОбласть("Стекло1");
   ОбластьСтекло2Шапка = Макет.ПолучитьОбласть("Стекло2Шапка");
   ОбластьСтекло2 = Макет.ПолучитьОбласть("Стекло2");
   ОбластьСтекло3Шапка = Макет.ПолучитьОбласть("Стекло3Шапка");
   ОбластьСтекло3 = Макет.ПолучитьОбласть("Стекло3");
   ОбластьСтекло4Шапка = Макет.ПолучитьОбласть("Стекло4Шапка");
   ОбластьСтекло4 = Макет.ПолучитьОбласть("Стекло4");
   ОбластьСтекло5Шапка = Макет.ПолучитьОбласть("Стекло5Шапка");
   ОбластьСтекло5 = Макет.ПолучитьОбласть("Стекло5");
   ОбластьСтекло6Шапка = Макет.ПолучитьОбласть("Стекло6Шапка");
   ОбластьСтекло6 = Макет.ПолучитьОбласть("Стекло6");
   ОбластьСтекло7Шапка = Макет.ПолучитьОбласть("Стекло7Шапка");
   ОбластьСтекло7 = Макет.ПолучитьОбласть("Стекло7");
   ОбластьСтекло8Шапка = Макет.ПолучитьОбласть("Стекло8Шапка");
   ОбластьСтекло8 = Макет.ПолучитьОбласть("Стекло8");
   ОбластьСтекло9Шапка = Макет.ПолучитьОбласть("Стекло9Шапка");
   ОбластьСтекло9 = Макет.ПолучитьОбласть("Стекло9");
   ОбластьСтекло10Шапка = Макет.ПолучитьОбласть("Стекло10Шапка");
   ОбластьСтекло10 = Макет.ПолучитьОбласть("Стекло10");
   ТабДок.Очистить();

   ВставлятьРазделительСтраниц = Ложь;
   Пока Выборка.Следующий() Цикл
      Если ВставлятьРазделительСтраниц Тогда
         ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
      КонецЕсли;

      ТабДок.Вывести(ОбластьЗаголовок);

      Шапка.Параметры.Заполнить(Выборка);
      ТабДок.Вывести(Шапка, Выборка.Уровень());

      ТабДок.Вывести(ОбластьСтекло1Шапка);
      ВыборкаСтекло1 = Выборка.Стекло1.Выбрать();
      Пока ВыборкаСтекло1.Следующий() Цикл
         ОбластьСтекло1.Параметры.Заполнить(ВыборкаСтекло1);
         ТабДок.Вывести(ОбластьСтекло1, ВыборкаСтекло1.Уровень());
      КонецЦикла;


      ТабДок.Вывести(ОбластьСтекло2Шапка);
      ВыборкаСтекло2 = Выборка.Стекло2.Выбрать();
      Пока ВыборкаСтекло2.Следующий() Цикл
         ОбластьСтекло2.Параметры.Заполнить(ВыборкаСтекло2);
         ТабДок.Вывести(ОбластьСтекло2, ВыборкаСтекло2.Уровень());
      КонецЦикла;
      
      ТабДок.Вывести(ОбластьСтекло3Шапка);
      ВыборкаСтекло3 = Выборка.Стекло3.Выбрать();
      Пока ВыборкаСтекло3.Следующий() Цикл
         ОбластьСтекло3.Параметры.Заполнить(ВыборкаСтекло3);
         ТабДок.Вывести(ОбластьСтекло3, ВыборкаСтекло3.Уровень());
      КонецЦикла;
   

      ТабДок.Вывести(ОбластьСтекло4Шапка);
      ВыборкаСтекло4 = Выборка.Стекло4.Выбрать();
      Пока ВыборкаСтекло4.Следующий() Цикл
         ОбластьСтекло4.Параметры.Заполнить(ВыборкаСтекло4);
         ТабДок.Вывести(ОбластьСтекло4, ВыборкаСтекло4.Уровень());
      КонецЦикла;
      

      ТабДок.Вывести(ОбластьСтекло5Шапка);
      ВыборкаСтекло5 = Выборка.Стекло5.Выбрать();
      Пока ВыборкаСтекло5.Следующий() Цикл
         ОбластьСтекло5.Параметры.Заполнить(ВыборкаСтекло5);
         ТабДок.Вывести(ОбластьСтекло5, ВыборкаСтекло5.Уровень());
      КонецЦикла;
   

      ТабДок.Вывести(ОбластьСтекло6Шапка);
      ВыборкаСтекло6 = Выборка.Стекло6.Выбрать();
      Пока ВыборкаСтекло6.Следующий() Цикл
         ОбластьСтекло6.Параметры.Заполнить(ВыборкаСтекло6);
         ТабДок.Вывести(ОбластьСтекло6, ВыборкаСтекло6.Уровень());
      КонецЦикла;
   

      ТабДок.Вывести(ОбластьСтекло7Шапка);
      ВыборкаСтекло7 = Выборка.Стекло7.Выбрать();
      Пока ВыборкаСтекло7.Следующий() Цикл
         ОбластьСтекло7.Параметры.Заполнить(ВыборкаСтекло7);
         ТабДок.Вывести(ОбластьСтекло7, ВыборкаСтекло7.Уровень());
      КонецЦикла;
      

      ТабДок.Вывести(ОбластьСтекло8Шапка);
      ВыборкаСтекло8 = Выборка.Стекло8.Выбрать();
      Пока ВыборкаСтекло8.Следующий() Цикл
         ОбластьСтекло8.Параметры.Заполнить(ВыборкаСтекло8);
         ТабДок.Вывести(ОбластьСтекло8, ВыборкаСтекло8.Уровень());
      КонецЦикла;
   
      ТабДок.Вывести(ОбластьСтекло9Шапка);
      ВыборкаСтекло9 = Выборка.Стекло9.Выбрать();
      Пока ВыборкаСтекло9.Следующий() Цикл
         ОбластьСтекло9.Параметры.Заполнить(ВыборкаСтекло9);
         ТабДок.Вывести(ОбластьСтекло9, ВыборкаСтекло9.Уровень());
      КонецЦикла;
   

      ТабДок.Вывести(ОбластьСтекло10Шапка);
      ВыборкаСтекло10 = Выборка.Стекло10.Выбрать();
      Пока ВыборкаСтекло10.Следующий() Цикл
         ОбластьСтекло10.Параметры.Заполнить(ВыборкаСтекло10);
         ТабДок.Вывести(ОбластьСтекло10, ВыборкаСтекло10.Уровень());
      КонецЦикла;
   
      ВставлятьРазделительСтраниц = Истина;
   КонецЦикла;
   //}}
КонецПроцедуры




Модуль команды:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
   //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
   ТабДок = Новый ТабличныйДокумент;
   Печать(ТабДок, ПараметрКоманды);

   ТабДок.ОтображатьСетку = Ложь;
   ТабДок.Защита = Ложь;
   ТабДок.ТолькоПросмотр = Ложь;
   ТабДок.ОтображатьЗаголовки = Ложь;
   ТабДок.Показать();
   //}}
КонецПроцедуры

&НаСервере
Процедура Печать(ТабДок, ПараметрКоманды)
   Документы.ФаксыСтекло.Печать(ТабДок, ПараметрКоманды);
КонецПроцедуры

has


beztrud

если пишу
Если Объект.Стекло1.Количество() > 0 Тогда
      ТабДок.Вывести(ОбластьСтекло1Шапка);
      ВыборкаСтекло1 = Выборка.Стекло1.Выбрать();
      Пока ВыборкаСтекло1.Следующий() Цикл
         ОбластьСтекло1.Параметры.Заполнить(ВыборкаСтекло1);
         ТабДок.Вывести(ОбластьСтекло1, ВыборкаСтекло1.Уровень());
      КонецЦикла;
      КонецЕсли;
То пишет ошибку {Документ.ФаксыСтекло.МодульМенеджера(111,8)}: Переменная не определена (Объект)
      Если <<?>>Объект.Стекло1.Количество() > 0 Тогда (Проверка: Сервер)

has

В модуле менеджера нет контекста документа определенного, поэтому передавать надо. Попробуй так
Если НЕ Выборка.Стекло1.Пустой() Тогда
     ТабДок.Вывести(ОбластьСтекло1Шапка);
     ВыборкаСтекло1 = Выборка.Стекло1.Выбрать();
     Пока ВыборкаСтекло1.Следующий() Цикл
        ОбластьСтекло1.Параметры.Заполнить(ВыборкаСтекло1);
        ТабДок.Вывести(ОбластьСтекло1, ВыборкаСтекло1.Уровень());
     КонецЦикла;
КонецЕсли;

beztrud

Респект и уважуха!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Теги:

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

Рейтинг@Mail.ru

Поиск