8.х Печатная форма: не выводятся результаты

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем MyNameNoName, 29 июл 2013.

  1. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Есть все-таки подозрение что что-то не так с параметрами, в частности
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка);
  2. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    есть подзрение, что вы не совсем понимает что есть процедура, а что есть функция и чем они друг от друга отличаются. Привязка к кнопке тут не при чем абсолютно. Процедура выполняет некоторый код и ничего не возвращает, функция может выполнять тот же код, но она должна вернуть некоторое значение (если в кратце). Так вот, считаю, что
    Код:
    Возврат ТабДокумент.Показать();
    не совсем верная конструкция. У вас же откуда то вызывается ваша функция Печать? ну так вот там и пишите Показать(). А ваша функция должна вернуть ТабДок в этом случае. Или же, сделайте Печать() процедурой , только уберите возврат. В общем, вот 2 варианта - выбирайте
    1 вариант
    Код:
    Функция Печать()
    //тут ваш код
    Возврат ТабДок;
    КонецФункции;
    Процедура ОткудаВызываемПечать()
    табдок = Печать();
    табдок.Показать();
    КонецПроцедуры;
    2 вариант
    Код:
    Процедура Печать()
    //тут ваш код
    ТабДок.Показать();
    КонецПроцедуры;
    Процедура ОткудаВызываемПечать()
    Печать();
    КонецПроцедуры
  3. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Все равно не работает. Если кто-нибудь может посмотрите код в чем беда не могу понять.
    Посмотреть вложение 15642

    Бухгалтерия 2.0

    Вложения:

    • М4.epf
      Размер файла:
      11,4 КБ
      Просмотров:
      4
  4. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    просто вставить код - это одно... вы откуда вызываете вашу обработку - вот там код процедуры ОткудаВызываемПечать() должен быть
  5. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Я в сервисе подменяю стандартную печатную форму. А при вызове как внешняя обработка все работает.
  6. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Итого получилось:
    Код:
    Перем мВалютаРегламентированногоУчета Экспорт;
    
    Функция ПечатьМ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";
    
    // Унифицированная форма М-4 (приходный ордер)
    ТабДокумент = ПечатьМ4();
    
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект, Строка(ВидОперации)), НепосредственнаяПечать);
    
    КонецПроцедуры // Печать
    
    Предполагаю должно быть так. Но ругается на переменную ВидОперации в строке:
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект, Строка(ВидОперации)), НепосредственнаяПечать);
    Как ее определить?
  7. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Исправил процедуру
    Код:
    Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт
    
    ИмяМакета = "М4";
    
    // Унифицированная форма М-4 (приходный ордер)
    ТабДокумент = ПечатьМ4();
    
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект, Строка(СсылкаНаОбъект.ВидОперации)), НепосредственнаяПечать);
    
    КонецПроцедуры // Печать
    
    
    {Форма.Форма.Форма(3,2)}: Недостаточно фактических параметров (Печать)
    <<?>>Печать().Показать();
  8. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Печать() это процедура у вас. Уясните разницу между процедурой и функцией. Она не возвращает значение, следовательно конструкция Печать().Показать() не катит. Универсальные механизмы должны вывести ваш табличный документ и так. Зачем еще раз Показать? И потом, у вас в процедуру Печать куча параметров передается, ну так при вызове и передайте их
  9. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Все равно не понимаю, почему конструкция
    Код:
    Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт
    ИмяМакета = "М4";
    ТабДокумент = ПечатьМ4();
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект, Строка(СсылкаНаОбъект.ВидОперации)), НепосредственнаяПечать);
    КонецПроцедуры // Печать
    
    сообщает:
    Не удалось сформировать внешнюю печатную форму!
    Обращение к процедуре объекта как к функции (Печать)
  10. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Для ВПФ в модуле Должна быть экспортная функция Печать(),
    у вас она является процедурой.
    Ошибка возникает из за того, что по действию объект пытается получить табличный документ от вашей ВПФ и ищет соотв. функцию, а получает "банан"
  11. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Все, разобрался. Все огромнейшее спасибо.
  12. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Спрошу в этой теме. Стал вытаскивать печатную форму М11.
    Получилось:
    Код:
    Функция СформироватьЗапросПоТабличнойЧасти(ДокументОбъект, ИмяТабличнойЧасти, СтруктураПолей) Экспорт
    
    ТекстЗапроса = "";
    
    Для Каждого Реквизит Из СтруктураПолей Цикл
    
    ТекстЗапроса  = ТекстЗапроса + ",
    |    Док." + Реквизит.Значение + " КАК " + СокрЛП(Реквизит.Ключ);
    
    КонецЦикла;
    
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    Док.НомерСтроки " + ТекстЗапроса + "
    |
    |ИЗ
    |    Документ." + ДокументОбъект.Метаданные().Имя + "."+ СокрЛП(ИмяТабличнойЧасти) + " КАК Док
    |
    |ГДЕ
    |    Док.Ссылка = &ДокументСсылка
    |
    |УПОРЯДОЧИТЬ ПО
    |	  НомерСтроки";
    
    // Установим параметры запроса.
    Запрос.УстановитьПараметр("ДокументСсылка" , ДокументОбъект.Ссылка);
    
    Возврат Запрос.Выполнить();
    
    КонецФункции // СформироватьЗапросПоТабличнойЧасти()
    
    
    
    Функция Печать() Экспорт
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ТабДокумент.ИмяПараметровПечати = "ПараметрыПечати_ТребованиеНакладная_М11";
    
    Макет = ЭтотОбъект.ПолучитьМакет("М11");
    
    Область = Макет.ПолучитьОбласть("Шапка");
    Область.Параметры.Заголовок			    = "ТРЕБОВАНИЕ-НАКЛАДНАЯ № " + Строка(СсылкаНаОбъект.Номер);
    Область.Параметры.КодОКПО				  = СсылкаНаОбъект.Организация.КодПоОКПО;
    СведенияОбОрганизации    = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(СсылкаНаОбъект.Организация, СсылкаНаОбъект.Дата);
    ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм,");
    Область.Параметры.ПредставлениеОрганизации = ПредставлениеОрганизации;
    Область.Параметры.ДатаСоставления		  = Формат(СсылкаНаОбъект.Дата, "ДФ=dd.MM.yy");
    Область.Параметры.Склад				    = СсылкаНаОбъект.Склад;
    Область.Параметры.КоррСчет				 = СсылкаНаОбъект.СчетЗатрат.Код;
    Область.Параметры.ПредставлениеПодразделения = СсылкаНаОбъект.ПодразделениеЗатрат.Наименование;
    ТабДокумент.Вывести(Область);
    
    СтруктураПолей = Новый Структура;
    СтруктураПолей.Вставить("Счет",						 "Счет");
    СтруктураПолей.Вставить("Материал",					 "Номенклатура");
    СтруктураПолей.Вставить("МатериалНаименование",		 "Номенклатура.НаименованиеПолное");
    
    Если Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить() = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
    СтруктураПолей.Вставить("НоменклатурныйНомер",		  "Номенклатура.Артикул");
    Иначе
    СтруктураПолей.Вставить("НоменклатурныйНомер",		  "Номенклатура.Код");
    КонецЕсли;
    
    СтруктураПолей.Вставить("ЕдиницаИзмеренияНаименование", "Номенклатура.БазоваяЕдиницаИзмерения");
    СтруктураПолей.Вставить("ЕдиницаИзмеренияКод",		  "Номенклатура.БазоваяЕдиницаИзмерения.Код");
    СтруктураПолей.Вставить("Количество",				   "Количество");
    
    Область = Макет.ПолучитьОбласть("Строка");
    
    ТаблицаМатериалов = СформироватьЗапросПоТабличнойЧасти(ЭтотОбъект, "Материалы", СтруктураПолей).Выгрузить();
    ТаблицаМатериалов.Свернуть("Материал, МатериалНаименование, Счет, НоменклатурныйНомер,ЕдиницаИзмеренияКод,ЕдиницаИзмеренияНаименование", "Количество");
    
    // Поиск сумм списания активов для заполнения Цены и Суммы
    ТаблицаСуммСписания = БухгалтерскийУчет.ПолучитьСуммуСписанияАктивов(ЭтотОБъект);
    
    Для Каждого СтрокаТЧ Из ТаблицаМатериалов Цикл
    
    Область.Параметры.Заполнить(СтрокаТЧ);
    СтрокаСуммСписания =  ТаблицаСуммСписания.Найти(СтрокаТЧ.Материал, "Номенклатура");
    Если СтрокаСуммСписания = Неопределено Тогда
    Область.Параметры.Цена = 0;
    Область.Параметры.Сумма = 0;
    Иначе
    Цена = ?(СтрокаСуммСписания.Количество = 0, 0, СтрокаСуммСписания.Сумма / СтрокаСуммСписания.Количество);
    Область.Параметры.Цена  = Цена;
    Область.Параметры.Сумма = Цена * СтрокаТЧ.Количество;
    КонецЕсли;
    ТабДокумент.Вывести(Область);
    
    КонецЦикла;
    
    ТаблицаМатериалов = ОбщегоНазначения.СформироватьЗапросПоТабличнойЧасти(ЭтотОбъект, "МатериалыЗаказчика", СтруктураПолей).Выгрузить();
    
    Для Каждого СтрокаТЧ Из ТаблицаМатериалов Цикл
    
    Область.Параметры.Заполнить(СтрокаТЧ);
    СтрокаСуммСписания =  ТаблицаСуммСписания.Найти(СтрокаТЧ.Материал, "Номенклатура");
    Если СтрокаСуммСписания = Неопределено Тогда
    Область.Параметры.Цена = 0;
    Область.Параметры.Сумма = 0;
    Иначе
    Цена = ?(СтрокаСуммСписания.Количество = 0, 0, СтрокаСуммСписания.Сумма / СтрокаСуммСписания.Количество);
    Область.Параметры.Цена  = Цена;
    Область.Параметры.Сумма = Цена * СтрокаТЧ.Количество;
    КонецЕсли;
    ТабДокумент.Вывести(Область);
    
    КонецЦикла;
    
    Область = Макет.ПолучитьОбласть("Подвал");
    
    ТабДокумент.Вывести(Область);
    
    Возврат ТабДокумент;
    
    КонецФункции
    
    Выдает ошибку:
    {ВнешняяОбработка.М11.МодульОбъекта(27)}: Поле объекта не обнаружено (Ссылка)
    Запрос.УстановитьПараметр("ДокументСсылка" , ДокументОбъект.Ссылка);

    В чем ошибка и что делать с ДокументОбъект.Ссылка?
  13. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    смотрите отладчиком что попадает в ДокументОбЪект

    Вы ВПФ делаете? тогда ЭтотОбЪект - это немного не то... надо ссылку на документ получить по другому
  14. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Да, впф.
    Посмотрел, там у ДокументОбъект есть свойства СсылкаНаОбъект, а есть ЭтотОбъект. Подправил на ДокументОбъект.СсылкаНаОбъект.Ссылка() выдает теперь:
    {ВнешняяОбработка.М11.МодульОбъекта(30)}: Ошибка при вызове метода контекста (Выполнить)
    Возврат Запрос.Выполнить();
    по причине:
    {(13, 2)}: Таблица не найдена "Документ.М11.Материалы"
    <<?>>Документ.М11.Материалы КАК Док


    Буду разбираться.
  15. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а табличная часть Материалы есть у вашего дока М11?
  16. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    ДокументОБъект Переправить на СсылкаНаОбъект, дело в том, что в СсылкаНаОбъект при печати передается ссылка на объект из которого вызывается печать, разумеется если в печатной форме на не нужно менять документ или объект то ДокументОбъект нам не нужен
  17. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    В том то все и дело что нету, как я понимаю заполняется следующим образом:
    Код:
    ТаблицаМатериалов = СформироватьЗапросПоТабличнойЧасти(ЭтотОбъект, "Материалы", СтруктураПолей).Выгрузить();
    
    Пробовал, это и была у меня первая мысль. Посли исправления:
    {(13, 2)}: Таблица не найдена "Документ.М11.Материалы"
    <<?>>Документ.М11.Материалы КАК Док
    Код:
    Функция СформироватьЗапросПоТабличнойЧасти(ДокументОбъект, ИмяТабличнойЧасти, СтруктураПолей) Экспорт
    
    ТекстЗапроса = "";
    
    Для Каждого Реквизит Из СтруктураПолей Цикл
    
    ТекстЗапроса  = ТекстЗапроса + ",
    |    Док." + Реквизит.Значение + " КАК " + СокрЛП(Реквизит.Ключ);
    
    КонецЦикла;
    
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    Док.НомерСтроки " + ТекстЗапроса + "
    |
    |ИЗ
    |    Документ." + ДокументОбъект.Метаданные().Имя + "."+ СокрЛП(ИмяТабличнойЧасти) + " КАК Док
    |
    |ГДЕ
    |    Док.Ссылка = &ДокументСсылка
    |
    |УПОРЯДОЧИТЬ ПО
    |	  НомерСтроки";
    
    // Установим параметры запроса.
    //Запрос.УстановитьПараметр("ДокументСсылка" , ДокументОбъект.Ссылка);
    Запрос.УстановитьПараметр("ДокументСсылка" , СсылкаНаОбъект);
    
    Возврат Запрос.Выполнить();
    
    КонецФункции // СформироватьЗапросПоТабличнойЧасти()
    
  18. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    В этой строке вы передаете в функцию объект - ВПФ, а не документ, нужно переправить "ЭтотОбъект" На "СсылкаНаДокумент" :)

    По каким документам должна работать ВПФ ?
  19. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Спасибо, подправил еще несколько ошибок и заработало)))

Поделиться этой страницей