Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 дек 2024, 00:29

Внешняя Печатная форма

Автор ls600, 21 июн 2012, 21:06

0 Пользователей и 1 гость просматривают эту тему.

ls600

Доброго времени суток. Подскажите создал внешнюю печатную форму. Добавил в 1С Предприятие. При нажатие на нее выводит сообщение.
Не удалось сформировать внешнюю печатную форму!
Поле объекта не обнаружено (ДанныеДляПечати)


Функция Печать() Экспорт

   ТабДокумент = Новый ТабличныйДокумент;

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

   // Выводим шапку накладной
   
   ТекстДопСчетФактура = "";
   Если СсылкаНаОбъект.ДанныеДляПечати.Дополнительная Тогда
      ТекстДопСчетФактура = "Дополнительный Счет-фактура" + ?(ЗначениеЗаполнено(СсылкаНаОбъект.ДанныеДляПечати.ОсновнойСчетФактура), " к " +
      "Счету-фактуре №" + ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект.ДанныеДляПечати.ОсновнойСчетФактура) + " от " + Формат(СсылкаНаОбъект.ДанныеДляПечати.ОсновнойСчетФактура.Дата,"ДФ=dd.MM.yyyy" ),"");
   КонецЕсли;
   
   ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
   ОбластьМакета.Параметры.ДопСчетФактура = ТекстДопСчетФактура;
   ОбластьМакета.Параметры.Заполнить(СсылкаНаОбъект.ДанныеДляПечати);
   
   Попытка
   Если Найти(Строка(СсылкаНаОбъект.ДокументОснование.УсловияОплаты),"Расчет наличными денежными")>0 Тогда
      ОбластьМакета.Параметры.УсловияОплаты            = "Расчет наличными";
   Иначе
      ОбластьМакета.Параметры.УсловияОплаты            = "Расчет в безналичном порядке ("+СсылкаНаОбъект.ДокументОснование.Доверенность+" от "+СсылкаНаОбъект.ДокументОснование.ДатаДоверенности+")";
   КонецЕсли;
   Исключение
   КонецПопытки;
   
   ОбластьМакета.Параметры.Номер = РаботаСДиалогами.СформироватьЗаголовокДокумента(ЭтотОбъект, "Счет-фактура", глСписокПрефиксовУзлов);
//   Если СтрДлина(КвитанцияДляФактуры)<2 Тогда
   КвитанцияДляФактуры = РаботаСДиалогами.СформироватьЗаголовокДокумента(ЭтотОбъект, ".", глСписокПрефиксовУзлов);
//   КонецЕсли;
Если СсылкаНаОбъект.ДокументыОснования.Количество()>0 Тогда
   Если ЗначениеЗаполнено(СсылкаНаОбъект.ДокументыОснования[0].ДокументОснование) Тогда
   ОбластьМакета.Параметры.ТТН = СсылкаНаОбъект.ДокументыОснования[0].ДокументОснование;
//   Если СтрДлина(ВагоныДляФактуры)>2 Тогда
   ОбластьМакета.Параметры.ТТН = КвитанцияДляФактуры;
   
   КонецЕсли;
КонецЕсли;

   ОбластьМакета.Параметры.ПредставлениеПоставщика = ОбщегоНазначения.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,");
   
   ОбластьМакета.Параметры.ПредставлениеПоставщика = ОбщегоНазначения.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,") +
                                           ОбщегоНазначения.ОписаниеОрганизации(СведенияОПоставщике, "БИН_ИИН,");
   Если СтрДлина(ВагоныДляФактуры)<2 Тогда
      ВагоныДляФактуры = "  самовывоз  ";
      Если (СтрДлина(КвитанцияДляФактуры)>2)И(СтрДлина(КвитанцияДляФактуры)<16) Тогда
         ВагоныДляФактуры = КвитанцияДляФактуры;
      КонецЕсли;
   Иначе
      КвитанцияДляФактуры = "кв ";
      Если СсылкаНаОбъект.ДокументыОснования.Количество()>0 Тогда
         Если ТипЗнч(СсылкаНаОбъект.ДокументыОснования[0].ДокументОснование) = Тип("ДокументСсылка.ОтгрузкаЦемента")
         Или ТипЗнч(СсылкаНаОбъект.ДокументыОснования[0].ДокументОснование) = Тип("ДокументСсылка.ОтгрузкаСторонно")
         Или ТипЗнч(СсылкаНаОбъект.ДокументыОснования[0].ДокументОснование) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
            Для Каждого Вагон из СсылкаНаОбъект.ДокументыОснования[0].ДокументОснование.Вагоны Цикл
               КвитанцияДляФактуры = КвитанцияДляФактуры + Вагон.Квитанция + ", ";
            КонецЦикла;
         КонецЕсли;
      КонецЕсли;
      ОбластьМакета.Параметры.ТТН = КвитанцияДляФактуры;
   КонецЕсли;
   ОбластьМакета.Параметры.СпособОтправления = ВагоныДляФактуры;
   
   Стр = ""; Стр = глТекущийПользователь;
   Н1 = Найти (Стр, "Галицкая");
   Н2 = Найти (Стр, "Админ");
   Н3 = Найти (Стр, "Шерер");
   Если СсылкаНаОбъект.ДокументыОснования.Количество()>0 Тогда
      Если  ((Н1>0)ИлИ(Н2>0)ИлИ(Н3>0)) И ТипЗнч(СсылкаНаОбъект.ДокументыОснования[0].ДокументОснование) = Тип("ДокументСсылка.ОтгрузкаЦемента")  Тогда
         Ссс = Строка("("+СсылкаНаОбъект.ДокументыОснования[0].ДокументОснование.ДокументОтправки+")");
         Если Ссс<>"("+")" Тогда
            ОбластьМакета.Параметры.ТТН = "";
         КонецЕсли;
         ОбластьМакета.Параметры.СпособОтправления = ОбластьМакета.Параметры.СпособОтправления + " ("+СсылкаНаОбъект.ДокументыОснования[0].ДокументОснование.ДокументОтправки+")";
      КонецЕсли;
   КонецЕсли;
   
   ОбластьМакета.Параметры.СвидетельствоПоНДС = "свидетельство   серия 30001 №0010460 от 5 августа 2009г";
   ПредставлениеРНН_БИНПоставщика = "";
   РННиБИНПоставщика = ОбщегоНазначения.ПолучитьРегистрационныйНомерОрганизацииКонтрагентаВПечатнуюФорму(СведенияОПоставщике, СсылкаНаОбъект.Дата, Истина, ПредставлениеРНН_БИНПоставщика);      
   ОбластьМакета.Параметры.РННИАдресПоставщика          = РННиБИНПоставщика  + ", " +  ОбщегоНазначения.ОписаниеОрганизации(СведенияОПоставщике, "ЮридическийАдрес,");
   
   ОбластьМакета.Параметры.РасчетныйСчетПоставщика        = ОбщегоНазначения.ОписаниеОрганизации(СведенияОПоставщике, "НомерСчета,Банк,БИК,");
   ОбластьМакета.Параметры.РасчетныйСчетПоставщика   = ОбластьМакета.Параметры.РасчетныйСчетПоставщика + " БИК: "+Строка(СсылкаНаОбъект.СчетОрганизации.Банк.Код);
   
   ПредставлениеРНН_БИНГрузоотправителя = "";
   РННиБИНГрузоотправителя = ОбщегоНазначения.ПолучитьРегистрационныйНомерОрганизацииКонтрагентаВПечатнуюФорму(СведенияОГрузоотправителе, СсылкаНаОбъект.Дата, Истина, ПредставлениеРНН_БИНГрузоотправителя);      
   ОбластьМакета.Параметры.ПредставлениеГрузоотправителя  = РННиБИНГрузоотправителя  + ", " +  ОбщегоНазначения.ОписаниеОрганизации(СведенияОГрузоотправителе, "ПолноеНаименование,ЮридическийАдрес,");
   ПредставлениеРНН_БИНГрузополучателя = "";
   РННиБИНГрузополучателя = ОбщегоНазначения.ПолучитьРегистрационныйНомерОрганизацииКонтрагентаВПечатнуюФорму(СведенияОГрузополучателе, СсылкаНаОбъект.Дата, Истина, ПредставлениеРНН_БИНГрузополучателя);      
   ОбластьМакета.Параметры.ПредставлениеГрузополучателя  = РННиБИНГрузополучателя 
            + ", " +  ОбщегоНазначения.ОписаниеОрганизации(СведенияОГрузополучателе, "ПолноеНаименование,ЮридическийАдрес,")
            + ?(ТипЗнч(СсылкаНаОбъект.ДокументОснование) = Тип("ДокументСсылка.ОтгрузкаЦемента") И ЗначениеЗаполнено(СсылкаНаОбъект.ДокументОснование.Направление),", " + СсылкаНаОбъект.ДокументОснование.Направление.Наименование,"");
   ОбластьМакета.Параметры.ПредставлениеПокупателя      = ОбщегоНазначения.ОписаниеОрганизации(СведенияОбПокупателе, "ПолноеНаименование,");
   
   ПредставлениеРНН_БИНПокупателя = "";
   РННиБИНПокупателя = ОбщегоНазначения.ПолучитьРегистрационныйНомерОрганизацииКонтрагентаВПечатнуюФорму(СведенияОбПокупателе, СсылкаНаОбъект.Дата, Истина, ПредставлениеРНН_БИНПокупателя);      
   ОбластьМакета.Параметры.РННИАдресПокупателя = РННиБИНПокупателя  + ", " +  ОбщегоНазначения.ОписаниеОрганизации(СведенияОбПокупателе, "ЮридическийАдрес,")
    + ", " +  ОбщегоНазначения.ОписаниеОрганизации(СведенияОбПокупателе, "Телефоны,");
//   ОбластьМакета.Параметры.ПредставлениеРНН_БИНПокупателя = ПредставлениеРНН_БИНПокупателя;
      
    СтрС = ОбщегоНазначения.ОписаниеОрганизации(СведенияОбПокупателе, "НомерСчета,Банк,БИК,");
   Если ЗначениеЗаполнено(СсылкаНаОбъект.СчетКонтрАгента) Тогда
      СтрС = СтрС + " БИК: " + СсылкаНаОбъект.СчетКонтрАгента.Банк.Код;
   КонецЕсли;
   ОбластьМакета.Параметры.РасчетныйСчетПокупателя = СтрС;
   
   
   Стр = ""; Стр = глТекущийПользователь;
   Если Найти(Стр,"Максим")>0 Тогда
      ОбластьМакета.Параметры.СпособОтправления = "";
      ОбластьМакета.Параметры.ТТН = "";
   КонецЕсли;
   
   ТабДокумент.Вывести(ОбластьМакета);

   ОбластьМакета = Макет.ПолучитьОбласть("Строка");

   ИтогоСуммаНДС = 0;
   ИтогоВсего    = 0;

   ВыборкаСтрокТовары = СсылкаНаОбъект.ДанныеДляПечати.ТабличнаяЧасть;

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

   КонецЦикла;

   ОбластьМакета = Макет.ПолучитьОбласть("Итого");
   ОбластьМакета.Параметры.ИтогоСуммаНДС          = ВыборкаСтрокТовары.Итог("СуммаНДС");
   ОбластьМакета.Параметры.ИтогоСтоимостьБезНДС    = ВыборкаСтрокТовары.Итог("СтоимостьБезНДС");
   ОбластьМакета.Параметры.ИтогоВсего             = ВыборкаСтрокТовары.Итог("Всего");
   
    _О = Макет.ПолучитьОбласть("Пропись");
   _О.Параметры.Текст = ЧислоПрописью(ВыборкаСтрокТовары.Итог("Всего"),,"Тенге, Тенге, Тенге, м, тиын, тиын, тиын, м, 2");
   
   
   ОбластьМакета.Параметры.ИтогоСуммаАкциза       = ВыборкаСтрокТовары.Итог("СуммаАкциза");
   ТабДокумент.Вывести(ОбластьМакета);
   ТабДокумент.Вывести(_О);

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

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

КонецФункции // ПечатьСчетаФактуры()

Подскажите где что не хватает, Заранее благодарю

Dethmontt

Вроде же написано по РУССКИ  "Поле объекта не обнаружено (ДанныеДляПечати)" - нужно создать данные для печати
(Если вы тупа не думая скопировали код из другой печатной формы, то не поленитесь скопировать и процедуры\функции которые формирую данные для печати)
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

ls600

тупо ни че не копировал, обработал код!!!

ls600

Процедура которая формирует печать документа выглядит так

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

ls600

Закрывайте тему, решил проблему!

Dethmontt

Решение оказалось в этой строчке
ДанныеДляПечати = СобратьДанныеТабличныхЧастейДляПечати();
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

ls600

да,  и надо было еще две функции добавить

Dethmontt

Спасибо что поделились решение =)))
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск