Имя: Пароль:
1C
1С v8
Не выводит результат запроса в печатную форму
0 Natalia_28
 
03.09.15
15:16
Натолкните на мысль, если не сложно: в печатной форме не выводит часть макета, в котором должны отображаться ФИО, если данных нет мне нужно вывести пустые строки
1 vicof
 
03.09.15
15:18
хороший вопрос содержит половину ответа
2 Natalia_28
 
03.09.15
16:23
(1) а чем вопрос не угодил?
3 Живой Ископаемый
 
03.09.15
16:24
в в8 есть отладчик.
4 ДенисЧ
 
03.09.15
16:24
Если ЕстьДанные Тогда
  ВывестиЗаполненныеСтроки
Иначе
  ВывестиПустыеСтроки
КонецЕсли;
5 Natalia_28
 
03.09.15
16:25
(4)знаю, что задам глупый вопрос, но все же.Куда этот кусок кода вставлять?До заполнения и присвоения значений параметрам или как?
6 Живой Ископаемый
 
03.09.15
16:27
если это параметры, и ФИО незаполненно, то просто не заполняй параметры, и строки выведутся пустыми
7 Natalia_28
 
03.09.15
16:30
ФИО у меня структура и заполняется оно так:

ОбластьОсновныеВедомости.Параметры.Заполнить(ФормированиеПечатныхФорм.ФамилияИмяОтчество(Работник.Физлицо,ДатаОтчета));

После есть запрос на выборку остальных данных по работнику: табномер, должность, дата прийома на работу и дата смены должности. Если в ФИО есть не заполненое значение, то оно выводит строки, а если в запросе есть хоть что-то без данных, то вся область макета исчезает
8 salvator
 
03.09.15
16:36
Код есть чё?
9 Natalia_28
 
03.09.15
16:37
Процедура ПечатьФормаСторона1(ТабДокумент, ДатаОтчета,Сотрудник, Организация, РаботникОтчета, ПустойБланк=Ложь) Экспорт

    Если ТабДокумент.ВысотаТаблицы>0 Тогда
        ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;    


    // запоминаем области макета
    Макет = ПолучитьМакет("Типовая_Форма_МШ_6_Сторона1");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьОсновныеВедомости = Макет.ПолучитьОбласть("ОсновныеВедомости");
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьВедомостьПоОрганизации = Макет.ПолучитьОбласть("ВедомостьПоОрганизации");
    ОбластьПробел = Макет.ПолучитьОбласть("Пробел");
    ОбластьНадпись = Макет.ПолучитьОбласть("Надпись");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    
    ОбластьШапка.Параметры.Организация = Организация.НаименованиеПолное;
    ОбластьШапка.Параметры.ЕДРПОУ = УправлениеКонтактнойИнформацией.ПолучитьКодОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Организация, ДатаОтчета));
    ОбластьОсновныеВедомости.Параметры.Заполнить(ФормированиеПечатныхФорм.ФамилияИмяОтчество(Работник.Физлицо,ДатаОтчета));
    
    ТабДокумент.Вывести(ОбластьШапка);
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Дата", ЭтотОбъект.ДатаАктуальности);
    Запрос.УстановитьПараметр("Работник", ЭтотОбъект.Работник);
    Запрос.УстановитьПараметр("Организация", ЭтотОбъект.Организация);
        
    Запрос.Текст = "ВЫБРАТЬ
                   |    РаботникиОрганизацийСрезПоследних.Организация КАК Организация,
                   |    РаботникиОрганизацийСрезПоследних.Сотрудник КАК Работник,
                   |    РаботникиОрганизацийСрезПоследних.Сотрудник.Код КАК ТабНомер,
                   |    РаботникиОрганизацийСрезПоследних.Сотрудник.Должность КАК Должность,
                   |    РаботникиОрганизацийСрезПоследних.Сотрудник.ДатаНачала КАК ДатаПрийома,
                   |    РаботникиОрганизацийСрезПоследних.Регистратор.Дата КАК ДатаИзм,
                   |    СотрудникиОрганизаций.Физлицо.Пол КАК Пол
                   |ИЗ
                   |    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Дата, Сотрудник = &Работник) КАК РаботникиОрганизацийСрезПоследних
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
                   |        ПО РаботникиОрганизацийСрезПоследних.Сотрудник = СотрудникиОрганизаций.Ссылка";
    
                                 
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
         ОбластьОсновныеВедомости.Параметры.Заполнить(Выборка);
         ТабДокумент.Вывести(ОбластьОсновныеВедомости);
     КонецЦикла;
         
    //выводим области макета
    ТабДокумент.Вывести(ОбластьПробел);
    ТабДокумент.Вывести(ОбластьНадпись);
    ТабДокумент.Вывести(ОбластьПробел);
    ТабДокумент.Вывести(ОбластьШапкаТаблицы);
    ТабДокумент.Вывести(ОбластьСтрока);
    ТабДокумент.Вывести(ОбластьПробел);
    ТабДокумент.Вывести(ОбластьВедомостьПоОрганизации);
    
КонецПроцедуры // Печать()
10 salvator
 
03.09.15
16:42
Если запрос пустой, то ОбластьОсновныеВедомости не выведется, что логично.
Если надо выводить ФИО, то добавь их в другую область и выводи.
11 Natalia_28
 
03.09.15
16:44
(10) а можно как-то сделать чтобы ОбластьОсновныеВедомости все таки выводилась, если запрос пустой
12 Natalia_28
 
03.09.15
16:45
(10) а можно как-то все таки вывести эту область, если параметры пустые?
13 salvator
 
03.09.15
16:45
ТабДокумент.Вывести(ОбластьОсновныеВедомости)

так, наверное, да? Ну подумать-то надо хоть чуточку.
14 Natalia_28
 
03.09.15
16:47
(13) я так и вывожу в цикле
15 salvator
 
03.09.15
16:52
Фамилию, имя, отчество откуда получается? Можно попробовать в одном запросе вывести их + левым соединением РС
16 Natalia_28
 
03.09.15
16:55
(15) вот откуда
ОбластьОсновныеВедомости.Параметры.Заполнить(ФормированиеПечатныхФорм.ФамилияИмяОтчество(Работник.Физлицо,ДатаОтчета));
17 Natalia_28
 
03.09.15
16:59
Общий модуль ФормированиеПечатныхФорм, функция ФамилияИмяОтчество
18 salvator
 
03.09.15
17:01
Так, стоп. Формируется же по одному сотруднику всегда?

Тогда после

ОбластьОсновныеВедомости.Параметры.Заполнить(ФормированиеПечатныхФорм.ФамилияИмяОтчество(Работник.Физлицо,ДатаОтчета));

Напиши

ТабДокумент.Вывести(ОбластьОсновныеВедомости);

Затем после запроса

Выборка = Запрос.Выполнить().Выбрать();  
Если Выборка.Количество()>0 Тогда
   Выборка.Следующий();           ОбластьОсновныеВедомости.Параметры.Заполнить(Выборка);
КонецЕсли;
19 salvator
 
03.09.15
17:01
А цикл убрать.
20 Natalia_28
 
03.09.15
17:02
(18) а это удалить:
Пока Выборка.Следующий() Цикл
         ОбластьОсновныеВедомости.Параметры.Заполнить(Выборка);
         ТабДокумент.Вывести(ОбластьОсновныеВедомости);
     КонецЦикла;
21 Natalia_28
 
03.09.15
17:08
а еще такой вопрос, если нужно так же вывести просто пустую строку таблицы если параметры пустые?
22 User_Agronom
 
03.09.15
17:17
(7) После.
23 Natalia_28
 
03.09.15
17:20
(22) ???
24 salvator
 
03.09.15
17:23
Не, все не так :) По (18) отбой.

Короче, оставляй как было.
Только после запроса вместо цикла напиши

Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
ОбластьОсновныеВедомости.Параметры.Заполнить(Выборка);
ТабДокумент.Вывести(ОбластьОсновныеВедомости);
25 User_Agronom
 
03.09.15
17:26
(23) После штатного переопредели параметры и всё.
26 Natalia_28
 
03.09.15
17:29
(24), спасибо
у меня еще вопрос возник: как вывести пустую строку таблицы, если параметры пустые.А то как-то одна шапка без строчки не эстетически смотрится
27 salvator
 
03.09.15
17:35
Выводи шапку если количество элементов в выборке больше 0
28 Natalia_28
 
03.09.15
17:40
(27) так:
Если Выборка.Количество()>0 Тогда
29 ibreiter
 
03.09.15
17:43
Если Выборка.Количество() > 0 Тогда
Пока Выборка.Следующий() Цикл
ОбластьОсновныеВедомости.Параметры.Заполнить(Выборка);
ТабДокумент.Вывести(ОбластьОсновныеВедомости);
КонецЦикла;
Иначе
ТабДокумент.Вывести(ОбластьОсновныеВедомости);
КонецЕсли;
30 Natalia_28
 
03.09.15
17:46
Выборка = Запрос.Выполнить().Выбрать();
    
    
    //выводим области макета
    ТабДокумент.Вывести(ОбластьНадпись);
    ТабДокумент.Вывести(ОбластьПробел);
    Если Выборка.Количество() > 0 Тогда
    
    Пока Выборка.Следующий() Цикл
        ОбластьСтрока.Параметры.Заполнить(Выборка);
        
        // Сформировать структуру отбора
        СтруктураПоиска = Новый Структура("Наименование, Партия", Выборка.Наименование, Выборка.Партия);
        // Найти строки
        МассивНайденныхСтрок = ТаблицаЗначений.НайтиСтроки(СтруктураПоиска);
        Если МассивНайденныхСтрок.Количество() > 0 Тогда
            ТекСтрока = МассивНайденныхСтрок[0];
            ОбластьСтрока.Параметры.Заполнить(ТекСтрока);
        КонецЕсли;    
        ТабДокумент.Вывести(ОбластьСтрока);
        Для Инд = 1 по МассивНайденныхСтрок.Количество() - 1 Цикл
            ТекСтрока = МассивНайденныхСтрок[Инд];
            ОбластьСтрока.Параметры.Заполнить(ТекСтрока);
            ТабДокумент.Присоединить(ОбластьСтрока);
        КонецЦикла;
    КонецЦикла;
    Иначе
        ТабДокумент.Вывести(ОбластьШапка);
    КонецЕсли;


Добавила Выборка.Количество: шапку выводит, а пустую строку таблицы нет
31 Брегорьян
 
03.09.15
17:53
>ТаблицаЗначений.НайтиСтроки(СтруктураПоиска)
и это всё в цикле в 21м веке, когда давным-давно изобрели запросы?
32 ibreiter
 
03.09.15
17:53
Вы ОбластьСтрока точно получаете перед циклом?
33 ibreiter
 
03.09.15
17:54
После "Иначе" должно быть ОбластьСтрока
34 Natalia_28
 
03.09.15
17:58
все запросом получаю и перед циклом
35 Natalia_28
 
03.09.15
18:01
(33) да, увидела.На автомате написала