Имя: Пароль:
1C
1С v8
Создание внешней печатной формы в ЗУП.
0 Босечка
 
30.11.15
17:47
Сделала внешнюю печ. форму для командировочных, не заполняются реквизиты шапки. Их заполняю при помощи функции. Можно ли вызывать функции во внешней печ. форме?


Перем мДлинаСуток;


Функция СформироватьЗапросДляПечати(Режим)

    Запрос = Новый Запрос;

    // Установим параметры запроса
    Запрос.УстановитьПараметр("ДокументСсылка",    СсылкаНаОбъект.Ссылка);
    Запрос.УстановитьПараметр("ДатаДокумента",    СсылкаНаОбъект.Дата);

    Если Режим = "ПоРеквизитамДокумента" Тогда

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

    ИначеЕсли Режим = "ПоТабличнойЧастиДокумента" Тогда

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

    Иначе
        Возврат Неопределено;
        
    КонецЕсли;

    Возврат Запрос.Выполнить();

КонецФункции // СформироватьЗапросДляПечати()





Функция Печать() Экспорт
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати    = "ПАРАМЕТРЫ_ПЕЧАТИ_КомандировкиОрганизации_Т9";
    ТабДокумент.ОриентацияСтраницы    = ОриентацияСтраницы.Портрет;
    
    // получаем данные для печати
    ВыборкаДляШапки        = СформироватьЗапросДляПечати("ПоРеквизитамДокумента").Выбрать();
    //  Т=  СформироватьЗапросДляПечати("ПоРеквизитамДокумента").Выгрузить();
     // Т.ВыбратьСтроку();
      ВыборкаРаботники    = СформироватьЗапросДляПечати("ПоТабличнойЧастиДокумента").Выбрать();

    // запоминаем области макета
    Макет = ПолучитьМакет("Макет");
    ОбластьМакетаШапка    = Макет.ПолучитьОбласть("Шапка"); // Шапка документа
    ОбластьМакетаПодвал    = Макет.ПолучитьОбласть("Подвал"); // Подвал документа
    ОбластьМакета        = Макет.ПолучитьОбласть("Работник"); // строка работника

    // выводим данные о руководителях организации
    Если ВыборкаДляШапки.Следующий() Тогда
        ОбластьМакетаШапка.Параметры.Заполнить(ВыборкаДляШапки); // Шапка документа.
        ОбластьМакетаШапка.Параметры.НазваниеОрганизации    = СокрЛП(ОбластьМакетаШапка.Параметры.НазваниеОрганизации);
        ОбластьМакетаПодвал.Параметры.Заполнить(ВыборкаДляШапки); // Для подвала.
        ОбластьМакета.Параметры.Заполнить(ВыборкаДляШапки); // область работника
        ВыводитьДатуОзнакомленияСПриказом = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации"), СсылкаНаОбъект.Организация, "ПроставлятьАвтоматическиДатуОзнакомленияВКадровыхПриказах");
        Если Не ВыводитьДатуОзнакомленияСПриказом Тогда
            ОбластьМакетаПодвал.Параметры.ДатаДок = ФормированиеПечатныхФормЗК.ПустаяДатаВПечатнойФорме();
        КонецЕсли;
        НомерДокДляПечати    = ВыборкаДляШапки.НомерДок;
    КонецЕсли;

    НомерФормы = 0;
    ПечататьПостфикс = ВыборкаРаботники.Количество() > 1;
    
    // Начинаем формировать выходной документ
    Пока ВыборкаРаботники.Следующий() Цикл

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

        // Шапка документа.
        Если ПечататьПостфикс Тогда
            НомерФормы = НомерФормы + 1;
            ОбластьМакетаШапка.Параметры.НомерДок = НомерДокДляПечати + "/" + НомерФормы
        КонецЕсли;
        ТабДокумент.Вывести(ОбластьМакетаШапка);

        // Данные по работнику.
        ОбластьМакета.Параметры.Заполнить(ВыборкаРаботники);
        
        РезультатСклонения = "";
        Если УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"), ВыборкаРаботники.Работник, 4,ВыборкаРаботники.ФизЛицоПол, РезультатСклонения) Тогда
            ОбластьМакета.Параметры.Работник    = РезультатСклонения
        КонецЕсли;
        
        //уберем из табельного номера префикс
        ОбластьМакета.Параметры.ТабельныйНомер = ВыборкаРаботники.ТабельныйНомер;
        
        ОбластьМакета.Параметры.Продолжительность = ?(ЗначениеЗаполнено(ВыборкаРаботники.ДатаОкончания),Цел((ВыборкаРаботники.ДатаОкончания - ВыборкаРаботники.ДатаНачала + 1) / мДлинаСуток) + 1,"");
        ТабДокумент.Вывести(ОбластьМакета);
        
        Если Не ВыводитьДатуОзнакомленияСПриказом Тогда
            ОбластьМакетаПодвал.Параметры.ДатаДок = ФормированиеПечатныхФормЗК.ПустаяДатаВПечатнойФорме();
        КонецЕсли;
        
        // Подвал документа.
        ТабДокумент.Вывести(ОбластьМакетаПодвал);

    КонецЦикла;

    // если не было ни одного работника - выводим пустой бланк
    Если ТабДокумент.ВысотаТаблицы = 0 Тогда
        ТабДокумент.Вывести(ОбластьМакетаШапка);
        ТабДокумент.Вывести(ОбластьМакета);
        ТабДокумент.Вывести(ОбластьМакетаПодвал);
    КонецЕсли;

    Возврат ТабДокумент;
    
    
Конецфункции

мДлинаСуток = 86400;

выходит пустой документ.
1 Горогуля
 
30.11.15
17:52
да
2 Босечка
 
30.11.15
17:54
Что да????
3 Горогуля
 
30.11.15
17:55
Можно вызывать функции во внешней печ. форме
4 Casey1984
 
30.11.15
17:58
можно
5 Босечка
 
30.11.15
17:58
А почему же у меня не заполняется шапка?
6 Горогуля
 
30.11.15
17:59
предлагаю сократить портянку и спросить конкретнее. после применения отладчика, разумеется
7 piter3
 
30.11.15
18:00
ДокументСсылка не заполнено.телепатов ищем?
8 Босечка
 
30.11.15
18:08
ДокументСсылка заполняется

Запрос.УстановитьПараметр("ДокументСсылка",    СсылкаНаОбъект.Ссылка);
9 Босечка
 
30.11.15
18:10
Но почему-то оно пустой. Я без функции попробовала, не заполняется тоже. СсылкаНаОбъект - реквизит обработки типа документ.КомандировкиОрганизаций.
10 Casey1984
 
30.11.15
18:15
(9) а запрос то выдает че?
11 Горогуля
 
30.11.15
18:15
(9) давай запрос что ли
12 runoff_runoff
 
30.11.15
18:16
надо СсылкаНаОбъект.Ссылка.Ссылка.Ссылка..
13 Босечка
 
30.11.15
18:17
Запрос.Текст =
        "ВЫБРАТЬ
        |    КомандировкиОрганизаций.Дата КАК ДатаДок,
        |    КомандировкиОрганизаций.Номер КАК НомерДок,
        |    КомандировкиОрганизаций.Организация.НаименованиеПолное КАК НазваниеОрганизации,
        |    КомандировкиОрганизаций.Организация.КодПоОКПО КАК КодПоОКПО,
        |    КомандировкиОрганизаций.СтранаНазначения,
        |    КомандировкиОрганизаций.ОрганизацияНазначения,
        |    КомандировкиОрганизаций.ОснованиеКомандировки,
        |    ОтветственныеЛицаОрганизаций.Должность КАК ДолжностьРуководителя,
        |    ОтветственныеЛицаОрганизаций.НаименованиеОтветственногоЛица КАК ФИОРуководителя
        |ИЗ
        |    Документ.КомандировкиОрганизаций КАК КомандировкиОрганизаций
        |        ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОбОтветственномЛице КАК ОтветственныеЛицаОрганизаций
        |        ПО (ИСТИНА)
        |ГДЕ
        |    КомандировкиОрганизаций.Ссылка = &ДокументСсылка";
14 Горогуля
 
30.11.15
18:18
(13) ну допустим, данные тут вынимаются. дальше
15 Casey1984
 
30.11.15
18:19
(14)  ну допустим, данные тут вынимаются - это еще не доказано)
16 Горогуля
 
30.11.15
18:20
(15) мы исходим из того, что вынимаются ;)
17 Горогуля
 
30.11.15
18:24
>ОбластьМакетаШапка.Параметры.Заполнить(ВыборкаДляШапки);
от тут косяк
18 Горогуля
 
30.11.15
18:24
(17) если исходить из предположения, что ТабДокумент.Вывести(ОбластьМакетаШапка) где-то есть
19 Мыш
 
30.11.15
18:25
(0) Выдрано с ИТС:

Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Версия = "1.0.0.0";
    ПараметрыРегистрации.Информация = "Информация о печатной форме";
    // Определение объектов, к которым подключается эта обработка.
    ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
    ПараметрыРегистрации.Назначение.Добавить("Документ.ПоступлениеТоваровУслуг");
    // Добавление команды печати "Печатная форма 1".
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Печатная форма 1 (внешняя печатная форма)'");
    НоваяКоманда.Идентификатор = "ПечатнаяФорма1";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.Модификатор = "ПечатьMXL";
    // Добавление команды печати "Печатная форма 2".
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Печатная форма 2 (внешняя печатная форма)'");
    НоваяКоманда.Идентификатор = "ПечатнаяФорма2";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.Модификатор = "ПечатьMXL";
    Возврат ПараметрыРегистрации;
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ПечатнаяФорма1");
    Если ПечатнаяФорма <> Неопределено Тогда
        ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФорму1(МассивОбъектов, ОбъектыПечати);
        ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Печатная форма 1 - синоним макета (внешняя печатная форма)'");
    КонецЕсли;
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ПечатнаяФорма2");
    Если ПечатнаяФорма <> Неопределено Тогда
        ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФорму2(МассивОбъектов, ОбъектыПечати);
        ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Печатная форма 2 - синоним макета (внешняя печатная форма)'");
    КонецЕсли;
КонецПроцедуры

Функция СформироватьПечатнуюФорму1(МассивОбъектов, ОбъектыПечати)
    ТабличныйДокумент = Новый ТабличныйДокумент;
    СсылкаИсточник = МассивОбъектов[0];
    Возврат ТабличныйДокумент;
КонецФункции

Функция СформироватьПечатнуюФорму2(МассивОбъектов, ОбъектыПечати)
    ТабличныйДокумент = Новый ТабличныйДокумент;
    СсылкаИсточник = МассивОбъектов[0];
    Возврат ТабличныйДокумент;
КонецФункции
20 Босечка
 
30.11.15
18:36
Я поняла, не видит ссылкуна объект.
Сообщить(ЭтотОбъект.СсылкаНаОбъект.Ссылка); выдает пустое значение.
21 Casey1984
 
30.11.15
18:41
(20) ЭтотОбъект - а где он у тебя в (0)?
22 Босечка
 
30.11.15
18:45
Я поняла свою ошибку надо выбирать документ.ссылка в реквизите, а я случайно выбрала документобъект....
все заработало!!!! Спасибо.
23 User_Agronom
 
30.11.15
19:40
(20) ...Ссылкуна...

Круто и точно))