Имя: Пароль:
1C
1С v8
Печатная форма недоступна. внешняя печатная форма.
0 Анка_Пивовар
 
10.02.15
14:20
Создала внешнюю печатную форму Бухгалтерия предприятия, редакция 3.0 (3.0.37.32)
Добавила в доп отчеты и обработки, при выводе из документа, пишет "Печатная форма недоступна". в чем может быть проблема?


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    
    ПараметрыРегистрации.Вставить("Наименование", "Т-53");
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("Информация", "Любая дополнительная информация");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Версия", "1.0");

    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.РасходныйКассовыйОрдер");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    
    тзКоманды = Новый ТаблицаЗначений;
    тзКоманды.Колонки.Добавить("Идентификатор");
    тзКоманды.Колонки.Добавить("Представление");
    тзКоманды.Колонки.Добавить("Модификатор");
    тзКоманды.Колонки.Добавить("ПоказыватьОповещение");
    тзКоманды.Колонки.Добавить("Использование");

    строкаКоманды = тзКоманды.Добавить();
    строкаКоманды.Идентификатор = "Т53";
    строкаКоманды.Представление = "Т-53 внешняя";
    строкаКоманды.Модификатор = "ПечатьMXL";
    строкаКоманды.ПоказыватьОповещение = Истина;
    строкаКоманды.Использование = "ВызовСерверногоМетода";

    ПараметрыРегистрации.Вставить("Команды", тзКоманды);

    Возврат ПараметрыРегистрации;
КонецФункции

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

Функция ПечатьТ53(МассивОбъектов, ОбъектыПечати)
    
    //Менеджер = Документы[МассивОбъектов[0].Метаданные().Имя];
    
    УстановитьПривилегированныйРежим(Истина);

    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ВедомостьНаВыплатуЗарплатыВКассу_Т53";
    
    Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_Т53");
    НастройкиПечатныхФорм = ЗарплатаКадрыПовтИсп.НастройкиПечатныхФорм();
    
    ВалютаУчета = ЗарплатаКадры.ВалютаУчетаЗаработнойПлаты();
    
    // получаем данные для печати
    ВыборкаШапок = ВыборкаДляПечатиШапки(МассивОбъектов);
    ВыборкаСтрок = ВыборкаДляПечатиТаблицы(МассивОбъектов);
    
    ПервыйДокумент = Истина;
    Пока ВыборкаШапок.Следующий() Цикл
        
        // Документы нужно выводить на разных страницах.
        Если Не ПервыйДокумент Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        ПервыйДокумент = Ложь;
        
        // Запомним номер строки, с которой начали выводить текущий документ.
        НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
        
        // подсчитываем количество страниц документа - для корректного разбиения на страницы
        ВсегоСтрокДокумента = ВыборкаСтрок.Количество();
        
        ОбластьМакетаШапкаДокумента = Макет.ПолучитьОбласть("ШапкаДокумента");
        ОбластьМакетаШапка            = Макет.ПолучитьОбласть("Шапка");
        ОбластьМакетаСтрока         = Макет.ПолучитьОбласть("Строка");
        ОбластьМакетаИтогПоСтранице = Макет.ПолучитьОбласть("ИтогПоЛисту");
        ОбластьМакетаПодвал         = Макет.ПолучитьОбласть("Подвал");
        
        // массив с двумя строками - для разбиения на страницы
        ВыводимыеОбласти = Новый Массив();
        ВыводимыеОбласти.Добавить(ОбластьМакетаСтрока);
        ВыводимыеОбласти.Добавить(ОбластьМакетаИтогПоСтранице);
        
        // выводим данные о документе
        ОбластьМакетаШапкаДокумента.Параметры.Заполнить(ВыборкаШапок);
        ОбластьМакетаШапкаДокумента.Параметры.НазваниеОрганизации    = СокрЛП(ОбластьМакетаШапкаДокумента.Параметры.НазваниеОрганизации);
        ОбластьМакетаШапкаДокумента.Параметры.НомерДок                = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(ВыборкаШапок.НомерДок, Истина, Истина);
        ОбластьМакетаШапкаДокумента.Параметры.ОтчетныйПериодС        = НачалоМесяца(ВыборкаШапок.ПериодРегистрации);
        ОбластьМакетаШапкаДокумента.Параметры.ОтчетныйПериодПо        = ?(НЕ ЗначениеЗаполнено(ВыборкаШапок.ПериодРегистрации), ВыборкаШапок.ПериодРегистрации, КонецМесяца(ВыборкаШапок.ПериодРегистрации));
        
        Если НастройкиПечатныхФорм.ВыводитьПолнуюИерархиюПодразделений И ЗначениеЗаполнено(ОбластьМакетаШапкаДокумента.Параметры.Подразделение) Тогда
            ОбластьМакетаШапкаДокумента.Параметры.Подразделение = ОбластьМакетаШапкаДокумента.Параметры.Подразделение.ПолноеНаименование();
        КонецЕсли;
        
        Если ВыборкаШапок.СуммаПоДокументу <> 0 Тогда
            ОбластьМакетаШапкаДокумента.Параметры.СуммаДок = РаботаСКурсамиВалют.СформироватьСуммуПрописью(ВыборкаШапок.СуммаПоДокументу, ВалютаУчета);
            ОбластьМакетаШапкаДокумента.Параметры.СуммаДокРублей = Цел(ВыборкаШапок.СуммаПоДокументу);
            ОбластьМакетаШапкаДокумента.Параметры.СуммаДокКопеек = (ВыборкаШапок.СуммаПоДокументу - Цел(ВыборкаШапок.СуммаПоДокументу)) * 100
        КонецЕсли;
        
        ОбластьМакетаПодвал.Параметры.Заполнить(ВыборкаШапок); // Подвал документа.
        // Строка не локализуется т.к. является частью регламентированной формы, применяемой в РФ
        ОбластьМакетаПодвал.Параметры.РКО = "Расходный кассовый ордер № _______ от  ""___"" ___________ 20 ___ г.";
        
        ТабличныйДокумент.Вывести(ОбластьМакетаШапкаДокумента);
        ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        ТабличныйДокумент.Вывести(ОбластьМакетаШапка);
        
        ВыведеноСтраниц = 1; ВыведеноСтрок = 0; ИтогоНаСтранице = 0; Итого = 0;
        
        // выводим данные по строкам документа.
        НомерСтроки = 0;
        ВыборкаСтрок.Сбросить();
        Пока ВыборкаСтрок.НайтиСледующий(ВыборкаШапок.Ссылка, "Ведомость") Цикл
            
            НомерСтроки = НомерСтроки + 1;
            
            ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаСтрок);
            ОбластьМакетаСтрока.Параметры.НомерСтроки = НомерСтроки;
            ОбластьМакетаСтрока.Параметры.ТабельныйНомер =
                ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(ВыборкаСтрок.ТабельныйНомер, Истина);
                
            Если НастройкиПечатныхФорм.ВыводитьПолныеФИОВСписочныхПечатныхФормах Тогда
                    
                ОбластьМакетаСтрока.Параметры.Физлицо = СокрЛП(ВыборкаСтрок.Фамилия)
                    + ?(ПустаяСтрока(ВыборкаСтрок.Имя), "", " " + ВыборкаСтрок.Имя)
                    + ?(ПустаяСтрока(ВыборкаСтрок.Отчество), "", " " + ВыборкаСтрок.Отчество);
                    
            Иначе
                ОбластьМакетаСтрока.Параметры.Физлицо = ФизическиеЛицаКлиентСервер.ФамилияИнициалыФизЛица(Неопределено,
                    ВыборкаСтрок.Фамилия, ВыборкаСтрок.Имя, ВыборкаСтрок.Отчество);
            КонецЕсли;
            
            // разбиение на страницы
            ВыведеноСтрок = ВыведеноСтрок + 1;
            
            // Проверим, уместится ли строка на странице или надо открывать новую страницу
            ВывестиПодвалЛиста = Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ВыводимыеОбласти);
            Если Не ВывестиПодвалЛиста и ВыведеноСтрок = ВсегоСтрокДокумента Тогда
                ВыводимыеОбласти.Добавить(ОбластьМакетаПодвал);
                ВывестиПодвалЛиста = Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ВыводимыеОбласти);
            КонецЕсли;
            Если ВывестиПодвалЛиста Тогда
                
                ОбластьМакетаИтогПоСтранице.Параметры.ИтогоНаСтранице = ИтогоНаСтранице;
                ТабличныйДокумент.Вывести(ОбластьМакетаИтогПоСтранице);
                ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                ТабличныйДокумент.Вывести(ОбластьМакетаШапка);
                ВыведеноСтраниц = ВыведеноСтраниц + 1;
                ИтогоНаСтранице = 0;
                
            КонецЕсли;
            
            ТабличныйДокумент.Вывести(ОбластьМакетаСтрока);
            ИтогоНаСтранице = ИтогоНаСтранице + ВыборкаСтрок.Сумма;
            Итого = Итого + ВыборкаСтрок.Сумма;
            
        КонецЦикла; // по строкам документа
        
        Если ВыведеноСтрок > 0 Тогда
            ОбластьМакетаИтогПоСтранице.Параметры.ИтогоНаСтранице = ИтогоНаСтранице;
        КонецЕсли;
        ОбластьМакетаПодвал.Параметры.КоличествоЛистов = ?(ВыведеноСтрок = 0,"",ВыведеноСтраниц + 1);
        
        ВыводимыеОбласти = Новый Массив();
        ВыводимыеОбласти.Добавить(ОбластьМакетаСтрока);
        ВыводимыеОбласти.Добавить(ОбластьМакетаИтогПоСтранице);
        ВыводимыеОбласти.Добавить(ОбластьМакетаПодвал);
        Для Сч = 1 По ОбластьМакетаСтрока.Параметры.Количество() Цикл
            ОбластьМакетаСтрока.Параметры.Установить(Сч - 1,"");
        КонецЦикла;
        ОбластьМакетаСтрока.Параметры.Физлицо = " ";
        Пока ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ВыводимыеОбласти) Цикл
            ТабличныйДокумент.Вывести(ОбластьМакетаСтрока);
        КонецЦикла;
        ТабличныйДокумент.Вывести(ОбластьМакетаИтогПоСтранице);
        ТабличныйДокумент.Вывести(ОбластьМакетаПодвал);
        
        // В табличном документе необходимо задать имя области, в которую был
        // выведен объект. Нужно для возможности печати покомплектно
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаШапок.Ссылка);
        
    КонецЦикла; // по документам
        
    Возврат ТабличныйДокумент;
    
КонецФункции

Функция ВыборкаДляПечатиШапки(Ведомости) Экспорт

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

// Формирует запрос по табличной части документа
//
// Параметры:
//  Ведомости - массив ДокументСсылка.ВедомостьНаВыплатуЗарплатыВБанк
//
// Возвращаемое значение:
//  Выборка из результата запроса
//
Функция ВыборкаДляПечатиТаблицы(Ведомости) Экспорт

    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    
    Запрос.УстановитьПараметр("Ведомости", Ведомости);

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

КонецФункции
1 laeg
 
10.02.15
14:25
Значит где то ошибка. На инфостарте пробегала обработка для отладки внешних печатных форм для УФ. Она тебе в помошь.
2 Анка_Пивовар
 
10.02.15
14:27
(1) все нашла! спасибо!
3 _KaA
 
10.02.15
14:30
(0) Это у вас табличный документ не сформировался...