Имя: Пароль:
1C
 
Внешняя печатная форма.Ошибка при запуске.
0 greenyes1c
 
30.09.14
17:03
Создал внешнюю печатную форму из внутренней.Добавляю ее в предприятие.Но при запуске печати пишет ошибку : Не удалось сформировать внешнюю печатную форму!
Недостаточно фактических параметров

вот код который в модуле объекта.

Перем мВалютаРегламентированногоУчета Экспорт;
Перем Проведен Экспорт;

Функция ПечатьМ4()                                  

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

    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();

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

    Если Проведен И (Шапка.РасчетыВУсловныхЕдиницах
        ИЛИ (Шапка.ВалютаДокумента <> мВалютаРегламентированногоУчета >= '20090101000000')) Тогда
        
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
        Запрос.УстановитьПараметр("СчетУчетаРасчетовСКонтрагентом", СсылкаНаОбъект);
        Текст =
        "ВЫБРАТЬ
        |    СУММА(Хозрасчетный.Сумма) КАК Сумма
        |ИЗ
        |    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
        |ГДЕ
        |    Хозрасчетный.Регистратор = &Ссылка
        |    И Хозрасчетный.СчетКт = &СчетУчетаРасчетовСКонтрагентом
        |    И Хозрасчетный.СчетДт В
        |            (ВЫБРАТЬ РАЗЛИЧНЫЕ
        |                ПоступлениеТоваровУслуг.СчетУчета
        |            ИЗ
        |                Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслуг
        |            ГДЕ
        |                ПоступлениеТоваровУслуг.Ссылка = &Ссылка
        |
        |           ОБЪЕДИНИТЬ
        |
        |            ВЫБРАТЬ РАЗЛИЧНЫЕ
        |                ПоступлениеТоваровУслуг.СчетУчетаНДС
        |            ИЗ
        |                Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслуг
        |            ГДЕ
        |                ПоступлениеТоваровУслуг.Ссылка = &Ссылка)";
                
        Запрос.Текст = Текст;
        СуммаВзаиморасчетов = Запрос.Выполнить().Выгрузить()[0].Сумма;
        
        РасчетСуммыНДСПоСтавке =  УчетНДС.РасчетНДСвРубляхПоСтавкеДокумента(Шапка.ДатаСоставления);
        
        Если НЕ СуммаВзаиморасчетов = NULL Тогда
            
            ЗапросТовары.Колонки.Добавить("СуммаБезНДС");
            
            МассивРаспределения = Новый Массив;
            
            Для Каждого СтрокаТовар Из ЗапросТовары Цикл
                
                СуммаСНДС = СтрокаТовар.Стоимость + ?(Шапка.СуммаВключаетНДС, 0, СтрокаТовар.СуммаНДС);
                СуммаБезНДС = СуммаСНДС - СтрокаТовар.СуммаНДС;

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

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

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

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

    // Инициализация итогов в документе
    ИтогоКоличествоПринято = 0;
    ИтогоСуммаБезНДС       = 0;
    ИтогоСуммаНДС          = 0;
    ИтогоВсегоСНДС         = 0;
    Ном                    = 0;

    // Инициализация счетчиков страниц и строк
    НомерСтраницы   = 1;
    НомерСтроки     = 0;
    КоличествоСтрок = ЗапросТовары.Количество();
    
    // Выводим многострочную часть документа
    Для Каждого ВыборкаСтрок Из ЗапросТовары Цикл

        НомерСтроки = НомерСтроки + 1;

        ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаСтрок);

        Кратность = ?(Шапка.Кратность = 0, 1, Шапка.Кратность);
        ВсегоСНДС = (ВыборкаСтрок.Стоимость
                  + ?(Шапка.СуммаВключаетНДС, 0, ВыборкаСтрок.СуммаНДС));

        КоличествоПринято = ВыборкаСтрок.КоличествоПринято;
        СуммаНДС          = ВыборкаСтрок.СуммаНДС;
        Цена              = (ВсегоСНДС - СуммаНДС) / ?(КоличествоПринято = 0, 1, КоличествоПринято);

        ОбластьМакетаСтрока.Параметры.КоличествоПринято = КоличествоПринято;
        ОбластьМакетаСтрока.Параметры.ВсегоСНДС         = ВсегоСНДС;
        ОбластьМакетаСтрока.Параметры.СуммаБезНДС       = ВсегоСНДС - СуммаНДС;
        ОбластьМакетаСтрока.Параметры.СуммаНДС          = СуммаНДС;
        ОбластьМакетаСтрока.Параметры.Цена              = Цена;
        ОбластьМакетаСтрока.Параметры.ТоварНаименование = СокрЛП(ВыборкаСтрок.ТоварНаименование);

        // Проверим вывод
        СтрокаСПодвалом = Новый Массив;
        СтрокаСПодвалом.Добавить(ОбластьМакетаСтрока);
        Если НомерСтроки = КоличествоСтрок Тогда           // если последняя строка, должен
            СтрокаСПодвалом.Добавить(ОбластьМакетаИтого);  // помещаться и подвал документа
            СтрокаСПодвалом.Добавить(ОбластьМакетаПодвал);
        Иначе                                              // иначе - только подвал строк
            СтрокаСПодвалом.Добавить(ОбластьМакетаПодвалСтрок);
        КонецЕсли;

        Если НЕ ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, СтрокаСПодвалом) Тогда

            ТабДокумент.Вывести(ОбластьМакетаПодвалСтрок);
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            
            
            НомерСтраницы = НомерСтраницы + 1;
            ОбластьМакетаЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
            
            ТабДокумент.Вывести(ОбластьМакетаЗаголовокТаблицы);

        КонецЕсли;

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

        ИтогоКоличествоПринято = ИтогоКоличествоПринято + КоличествоПринято;
        ИтогоСуммаБезНДС       = ИтогоСуммаБезНДС       + ВсегоСНДС - СуммаНДС;
        ИтогоСуммаНДС          = ИтогоСуммаНДС          + СуммаНДС;
        ИтогоВсегоСНДС         = ИтогоВсегоСНДС         + ВсегоСНДС;

    КонецЦикла;

    // Выводим итоги по документу
    ОбластьМакетаИтого.Параметры.ИтогоКоличествоПринято = ИтогоКоличествоПринято;
    ОбластьМакетаИтого.Параметры.ИтогоСуммаБезНДС       = ИтогоСуммаБезНДС;
    ОбластьМакетаИтого.Параметры.ИтогоСуммаНДС          = ИтогоСуммаНДС;
    ОбластьМакетаИтого.Параметры.ИтогоВсегоСНДС         = ИтогоВсегоСНДС;
    ТабДокумент.Вывести(ОбластьМакетаИтого);

    // Выводим итоги по документу
    ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьМакетаПодвал.Параметры.Заполнить(Шапка);
    ТабДокумент.Вывести(ОбластьМакетаПодвал);

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

КонецФункции // ПечатьМ4()

Функция Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт
    
    ТабДокумент = ПечатьМ4();
    Возврат ТабДокумент;
    
КонецФункции // Печать
МВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
1 Wobland
 
30.09.14
17:04
это ты хвастаешься?
2 greenyes1c
 
30.09.14
17:15
Это я прошу помощи разобраться.Никак не могу понять почему так..
3 Wobland
 
30.09.14
17:16
там функция Печать() есть вообще?
4 Wobland
 
30.09.14
17:18
сделай форму, положи на неё ссылку на объект, откинсья на спинку кресла и насладись процессом отладки. форму потом викинешь
5 greenyes1c
 
30.09.14
17:21
Да.Все делал по инструкции по созданию внешних печатных форм.

Скопировал функцию Печать из модуля объекта документа.Вставил в
модуль объекта формы.
6 greenyes1c
 
30.09.14
17:24
Создал форму.Запустил отладку.Открыл внешнюю форму и вылетает ошибка  {Форма.Форма.Форма(3,14)}: Недостаточно фактических параметров (Печать)
    ТабДок = <<?>>Печать();
7 Wobland
 
30.09.14
17:25
(6) какие выводы ты можешь сделать из текста ошибки?
8 greenyes1c
 
30.09.14
17:26
То что у меня не хватает данных связанных с функцией печати?)
9 Wobland
 
30.09.14
17:27
ну пусть так. не хватает параметров для вызов
10 DS
 
30.09.14
17:30
По инструкции сколько параметров должно быть в "Печать()"?
11 greenyes1c
 
30.09.14
17:34
Эм...Там ничего про это не сказано.
12 del123
 
30.09.14
17:36
Функция Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт

почисти что в скобках
13 DS
 
30.09.14
17:37
(11) Очень сомнительно.
Вот из текста ошибки можно сделать вывод, что ни одного.
14 Wobland
 
30.09.14
17:39
(13) это он форму сделал по моему совету
15 DS
 
30.09.14
17:39
(11) Вот что пишут в требованиях для типовых на 8.2:
"Функция «Печать()» - без параметров,  возвращающая табличный документ."
- коротко и ясно.
16 greenyes1c
 
30.09.14
17:42
Удалил из скобок.Сохранил при запуске печати выдает ошибку Не удалось сформировать внешнюю печатную форму!
Поле объекта не обнаружено (Ссылка)


Я все поля Ссылка заменял на СсылкаНаОбъект.Разве так не правильно?
17 DS
 
30.09.14
17:49
(16) Не правильно.
"ЭтотОбъект.Ссылка" меняется на "СсылкаНаОбъект". Но могут быть обращения к реквизитам и через "ЭтотОбъект" или непосредственно по имени реквизита.
18 greenyes1c
 
30.09.14
17:51
То есть мне сейчас заново создать форму и вместо Этот.Объект.Ссылка записать СсылкаНаОбъект.А остальное не трогать?
19 DS
 
30.09.14
17:54
Остальное надо изучать по сути.
20 stix2010
 
30.09.14
17:54
(0) проблема в ДНК
21 greenyes1c
 
30.09.14
17:55
Спасибо за совет.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.