8.х Устранение ошибок при создании ВПФ

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

  1. TopicStarter Overlay
    user1304
    Offline

    user1304

    Регистрация:
    17 янв 2013
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    КОЛЛЕГИ!

    Помогите кто может точным советом!

    При создании ВПФ на счет вылазят 2 ошибки:
    1. {ВнешняяОбработка.СчетКС.МодульОбъекта(301,56)}: Переменная не определена (Дата)
    ДанныеФЛ = РегистрыСведений.ФИОФизЛиц.СрезПоследних(<<?>>Дата, Новый Структура("ФизЛицо",ФЛ)); (Проверка: Толстый клиент (обычное приложение))
    1. {ВнешняяОбработка.СчетКС.МодульОбъекта(117,17)}: Процедура или функция с указанным именем не определена (ВернутьРасчетныйСчет)
    НомерСчета = <<?>>ВернутьРасчетныйСчет(СсылкаНаОбъект.СтруктурнаяЕдиница); (Проверка: Толстый клиент (обычное приложение))


    Сам код модуля такой:

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

    Строки с ошибками выделил жирным!

    Кто знает как правильно определить Дату и ВернутьРасчетныйСчет, чтобы ошибки пропали?!

    Спасибо огромное заранее!!!
  2. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    если вы все копировали из документа, то Дата - это Дата документа, там же в документе ищите описание функции ВернутьРасчетныйСчет, скорее всего вам ее придется пеертаскивать в впф

    З.Ы. оформляйте код в теги, такие большие куски особенно
  3. TopicStarter Overlay
    user1304
    Offline

    user1304

    Регистрация:
    17 янв 2013
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Спасибо! про теги учту, это первый опыт.

    Сам код я копировал из модуля Счета на оплату, который сидит в самой конфигурации. Значит по вашему совету надо идти туда, искать куски кода с описанием даты и вернутьрс и вставлять в свой модуль ВПФ - я правильно понял?!
  4. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Дата - это стандартный реквизит документа (Номер и дата у документа по умолчанию есть). Какую дату вам брать в ВПФ - думаю это вам решать. А вот функцию, кроме как в тексте модуля самого документа-исходника кода, вы нигде не найдете
  5. TopicStarter Overlay
    user1304
    Offline

    user1304

    Регистрация:
    17 янв 2013
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    согласен, но вопрос то в том, в какое место кода модуля моей формы эту функцию вставлять!
  6. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    как понять в какое место? вы программируете или только начинаете? почитайте тут на форуме есть тема про создание ВПФ - может натолкнет на какие мысли
  7. Филипп_Хардкоров
    Offline

    Филипп_Хардкоров Опытный в 1С

    Регистрация:
    10 фев 2013
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    В самом начале этой процедуры напиши
    Дата = ЭтотОбъект.Ссылка.Дата;

    и скопируй функцию "ВернутьРасчетныйСчет" из документа, для которого делаешь ВПФ

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