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

Печатные формы

Автор LES, 26 янв 2017, 18:37

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

LES

Здравствуйте!
Есть документ, в котором две табличные части.
В первой ТЧ: Работник и ДатаРождения
Во второй ТЧ: Работник и Факторы

На макете печатной формы должно выводиться Работник, ДатаРождения и Факторы.
Выводит все странно. Сначала фамилии работников. А потом последнюю фамилию в списке со всеми факторами.
Оно в принципе и логично. Как обойти это дело?

Спасибо за помощь!

Процедура Закл(ТабДок, Ссылка) Экспорт
   
        ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
        ТабДок.АвтоМасштаб = Истина;
        ТабДок.ОтображатьСетку = Ложь;
        ТабДок.ПолеСверху = 5;
        ТабДок.ПолеСнизу = 5;
        Макет = ПолучитьОбщийМакет("ПФ");   
        ОбластьЛист = Макет.ПолучитьОбласть("Лист");
       
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |   Док.Работники.(
        |       Работник,
        |       Работник.ДатаРождения
        |   ),
        |   Док.Фактор.(
        |       Фактор
        |   )
        |ИЗ
        |   Документ.Док КАК Док
        |ГДЕ
        |   Док.Ссылка В(&Ссылка)";
       
        Запрос.Параметры.Вставить("Ссылка", Ссылка);
        Выборка = Запрос.Выполнить().Выбрать();
        ТабДок.Очистить();
       
        Пока Выборка.Следующий() Цикл
           
            ВыборкаРаботники = Выборка.Работники.Выбрать();
            ВыборкаФактор = Выборка.Фактор.Выбрать();
           
            Пока ВыборкаРаботники.Следующий() Цикл
               
                ОбластьЛист.Параметры.Заполнить(ВыборкаРаботники);
                ТабДок.Вывести(ОбластьЛист, ВыборкаРаботники.Уровень());
               
            КонецЦикла;
           
            Пока ВыборкаФактор.Следующий() Цикл
   
                ОбластьЛист.Параметры.Заполнить(ВыборкаФактор);
                ТабДок.Вывести(ОбластьЛист, ВыборкаФактор.Уровень());
               
            КонецЦикла;         
           
                                   
            ВставлятьРазделительСтраниц = Истина;
           
        КонецЦикла;

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

Fedor_Safonchik

Мне кажется я делал что-то подобное Вашему выводу,

Вот ссылка посмотрите

LES

Переделала. Но есть одно НО: если у одного человека несколько факторов, то он выводит несколько листов (первый лист - Фамилия1 Фактор1; второй лист - Фамилия1 Фактор2 и т.д.). Как можно зациклить Факторы для одного человека, чтобы все факторы работника выводились в одном месте (1 лист - Фамилия1 Фактор1 Фактор 2)?

ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
        ТабДок.АвтоМасштаб = Истина;
        ТабДок.ОтображатьСетку = Ложь;
        ТабДок.ПолеСверху = 5;
        ТабДок.ПолеСнизу = 5;
        Макет = ПолучитьОбщийМакет("ПФ_Закл"); 
        ОбластьЛист = Макет.ПолучитьОбласть("Лист"); 
       
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |   ДокРаботники.Работник,
        |   ДокРаботники.Работник.ДатаРождения,
        |   ДокФакторы.Фактор
        |ИЗ
        |   Документ.Док.Работники КАК ДокРаботники,
        |   Документ.Док.Факторы КАК ДокФакторы
        |ГДЕ
        |   ДокРаботники.Ссылка В(&Ссылка) И
        |   ДокФакторы.Ссылка В(&Ссылка) И
        |   ДокРаботники.Работник = ДокФакторы.Работник";
       
       
        Запрос.Параметры.Вставить("Ссылка", Ссылка);
        Выборка = Запрос.Выполнить().Выбрать();
        ТабДок.Очистить();
       
        Пока Выборка.Следующий() Цикл
           
                ОбластьЛист.Параметры.Заполнить(Выборка);
                ТабДок.Вывести(ОбластьЛист, Выборка.Уровень());
               
                Если Не ТабДок.ПроверитьВывод(ОбластьЛист) Тогда
                    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
                КонецЕсли;
               
        КонецЦикла;

alex0402

Цитата: LES от 29 янв 2017, 14:01"ВЫБРАТЬ
        |   ДокРаботники.Работник,
        |   ДокРаботники.Работник.ДатаРождения,
        |   ДокФакторы.Фактор
        |ИЗ
        |   Документ.Док.Работники КАК ДокРаботники,
        |   Документ.Док.Факторы КАК ДокФакторы
        |ГДЕ
        |   ДокРаботники.Ссылка В(&Ссылка) И
        |   ДокФакторы.Ссылка В(&Ссылка) И
        |   ДокРаботники.Работник = ДокФакторы.Работник";
       
не хватает левого соединения.
Спасибо за Сказать спасибо

LES

С левым соединением выводит все тоже самое

alex0402

Цитата: LES от 29 янв 2017, 14:01Как можно зациклить Факторы для одного человека, чтобы все факторы работника выводились в одном месте (1 лист - Фамилия1 Фактор1 Фактор 2)?

отсортировать УПОРЯДОЧИТЬ ПО
ИЛИ использовать конструкцию ИТОГИ ПО (в этом случае выборка в два этапа
ВыборкаРаботник = Запрос.Выполнить().Выбрать(Обход.ПоГруппировкам);
Пока ВыборкаРаботник.Следующий() Цикл
    Выборка = ВыборкаРаботник.Выбрать();
    Пока Выборка.Следующий() Цикл
    КонецЦикла;
КонецЦикла;

Левое соеднеие Документ.Док.Факторы КАК ДокФакторы ПО ДокФакторы.Работник = ДокРаботники.Работник все таки нужно, иначе у работников будут выводиться чужие факторы.


)
Спасибо за Сказать спасибо

LES

Хорошо, левое соединение я сделала.
УПОРЯДОЧИТЬ ПО, по-моему, просто отсортирует в порядке возрастания?
Что касается ИТОГИ ПО: на сколько я поняла, можно использовать эту конструкцию только с полями типа число (ИТОГИ СУММА(КоличествоОборот) ПО.....), а у меня же строки.

При заполнении Факторов ТЧ документа выходит список факторов и около них ставятся галочки.
Может это какую-нибудь роль сыграет
Уже голова разрывается :xfbnsdfb:
Добавлено: 30 янв 2017, 16:02


Немного исправила, но теперь он выводит только последнюю фамилию из ТЧ. Почему?

       Показать = "Поехали:";
   
      ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
      ТабДок.АвтоМасштаб = Истина;
      ТабДок.ОтображатьСетку = Ложь;
      ТабДок.ПолеСверху = 5;
      ТабДок.ПолеСнизу = 5;
      Макет = ПолучитьОбщийМакет("ПФ");   
      ОбластьЛист = Макет.ПолучитьОбласть("Лист"); 
      
      Запрос = Новый Запрос;
      Запрос.Текст =
      "ВЫБРАТЬ
      |   ДокРаботники.Работник,
      |   ДокРаботник.ДатаРождения,
      |ИЗ
      |   Документ.Док.Работники КАК ДокРаботники
      |ГДЕ
      |   ДокРаботники.Ссылка В(&Ссылка)";
      
      Запрос.Параметры.Вставить("Ссылка", Ссылка);
      Выборка = Запрос.Выполнить().Выбрать();
      ТабДок.Очистить();
      
      Пока Выборка.Следующий() Цикл
         
         Запрос2 = Новый Запрос;
         Запрос2.Текст =
         "ВЫБРАТЬ
         |   ДокВПФиОПФ.ВПФиОПФ
         |ИЗ
         |   Документ.Док.ВПФиОПФ КАК ДокВПФиОПФ
         |ГДЕ
         |   ДокВПФиОПФ.Работник = &Работник
         |   И ДокВПФиОПФ.Ссылка В(&Ссылка)";

         Запрос2.Параметры.Вставить("Ссылка", Ссылка);
         Запрос2.Параметры.Вставить("Работник", Выборка.Работник);
         Выборка2 = Запрос2.Выполнить().Выбрать();
         ТабДок.Очистить();

         Пока Выборка2.Следующий() Цикл
            
            Показать = Показать + Выборка2.ВПФиОПФ;
            
         КонецЦикла;
         
            ОбластьЛист.Параметры.Показ = Показать;
            ОбластьЛист.Параметры.Заполнить(Выборка);               
            ТабДок.Вывести(ОбластьЛист,Выборка.Уровень());             
            
            Если Не ТабДок.ПроверитьВывод(ОбластьЛист) Тогда
               ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
            КонецЕсли;
            
            Показать = "Поехали: ";
      КонецЦикла;
Добавлено: 30 янв 2017, 19:09


Надо убрать строку: ТабДок.Очистить();

Теги:

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

Рейтинг@Mail.ru

Поиск