Имя: Пароль:
1C
1С v8
Внешняя печ. форма
0 Gorro-1789
 
15.05.12
16:29
приветсвую вас, помогите пож-то,  выводит такое сообщение:

{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(23,1)}: Определения процедур и функций должны размещаться перед операторами тела модуля
<<?>>Функция Печать() ЭКСПОРТ  //ПечатьСчетаФактуры(ДанныеДляПечати)   (Проверка: Толстый клиент (обычное приложение))



Перем мУдалятьДвижения;

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

Перем мОбновлятьРеквизитыПриЗаписи Экспорт;

Перем мДокументЗаполнен Экспорт;

   ДанныеДляПечати = Новый Структура();
   ДанныеДляПечати.Вставить("Организация",      Шапка.Организация);
   ДанныеДляПечати.Вставить("Номер",            Шапка.Номер);
   ДанныеДляПечати.Вставить("Дата",             Шапка.Дата);
   ДанныеДляПечати.Вставить("Поставщик",        Шапка.Поставщик);
   ДанныеДляПечати.Вставить("Грузоотправитель", );
   ДанныеДляПечати.Вставить("Покупатель",       Шапка.Покупатель);
   ДанныеДляПечати.Вставить("Грузополучатель",  );
   ДанныеДляПечати.Вставить("Сумма",            Шапка.Сумма);
   ДанныеДляПечати.Вставить("Валюта",           Шапка.Валюта);
   ДанныеДляПечати.Вставить("УчитыватьНДС",     Истина);
   ДанныеДляПечати.Вставить("СуммаВключаетНДС", Истина);
   

Функция Печать() ЭКСПОРТ  //ПечатьСчетаФактуры(ДанныеДляПечати)  
   


   ТабДокумент = Новый ТабличныйДокумент;
   
   ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
   ТабДокумент.ПолеСверху    = 13;
   ТабДокумент.ПолеСлева      = 0;
   ТабДокумент.ПолеСнизу      = 0;
   ТабДокумент.ПолеСправа    = 0;
   ТабДокумент.АвтоМасштаб    = Истина;
   
   Дата = Дата;

   Если Дата < '20040216' Тогда
       ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура575";
       Макет = ПолучитьОбщийМакет("СчетФактура575");
   ИначеЕсли Дата < '20060530' Тогда
       ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура84";
       Макет = ПолучитьОбщийМакет("СчетФактура84");
   ИначеЕсли Дата < '20090609' Тогда
       ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура283";
       Макет = ПолучитьОбщийМакет("СчетФактура283");
   Иначе
       ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура451";
       Макет = ПолучитьОбщийМакет("СчетФактура451");
   КонецЕсли;

   СведенияОбПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Покупатель, Дата);
   СведенияОПоставщике  = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Поставщик, Дата);
   СведенияОГрузоотправителе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(?(ДанныеДляПечати.Грузоотправитель = "он же", Неопределено, ДанныеДляПечати.Грузоотправитель), Дата);
   СведенияОГрузополучателе  = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Грузополучатель, Дата);
   
   ВыборкаПоТоварам = ДанныеДляПечати.ТабличнаяЧасть.Скопировать();
   ВыборкаПоТоварам.Свернуть("Товар");
   
   Если ВыборкаПоТоварам.Количество() > 0 Тогда
       ТолькоУслуги = Истина;
       Для Каждого СтрокаТовар Из ВыборкаПоТоварам Цикл
           Если (ТипЗнч(СтрокаТовар.Товар) = Тип("СправочникСсылка.Номенклатура")
              И Не СтрокаТовар.Товар.Услуга)
              Тогда
               ТолькоУслуги = Ложь;
               Прервать;
           КонецЕсли;
       КонецЦикла;
   Иначе
       ТолькоУслуги = Ложь;
   КонецЕсли;

   // Выводим шапку накладной
   ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
   ОбластьМакета.Параметры.Заполнить(ДанныеДляПечати);
   ЗаголовокДляПечати = ОбщегоНазначения.СформироватьЗаголовокДокумента(ДанныеДляПечати, "Счет-фактура");
   ОбластьМакета.Параметры.Номер = ЗаголовокДляПечати;
   
   Если Дата < '20040216' Тогда
       ОбластьМакета.Параметры.ПредставлениеПоставщика       = "Продавец: "                                 + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике,  "ПолноеНаименование,");
       ОбластьМакета.Параметры.АдресПоставщика               = "Адрес: "                                    + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике,  "ЮридическийАдрес,");
       ОбластьМакета.Параметры.ИННпоставщика                 = "Идентификационный номер продавца (ИНН): "   + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике,  "ИНН,", Ложь);
       ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = "Грузоотправитель и его адрес: "             + ?(Не ЗначениеЗаполнено(ДанныеДляПечати.Грузоотправитель), "", ?(ДанныеДляПечати.Грузоотправитель = "он же", ДанныеДляПечати.Грузоотправитель, ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправителе,  "ПолноеНаименование,ФактическийАдрес,")));
       ОбластьМакета.Параметры.ПредставлениеГрузополучателя  = "Грузополучатель и его адрес: "              + ?(Не ЗначениеЗаполнено(ДанныеДляПечати.Грузополучатель), "", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе, "ПолноеНаименование,ФактическийАдрес,"));
       Строка_ПоДокументу = "";
       Для каждого ПараметрыДокуентаОплаты Из ДанныеДляПечати.ТаблицаДатОплат Цикл
           Строка_ПоДокументу = Строка_ПоДокументу+ ?(ПустаяСтрока(Строка_ПоДокументу), "К платежно-расчетному документу № ",", ")
                   +ПараметрыДокуентаОплаты.НомерПлатежноРасчетногоДокумента + " от " + Формат(ПараметрыДокуентаОплаты.ДатаПлатежноРасчетногоДокумента, "ДФ=dd.MM.yyyy");
       КонецЦикла;
       Если ПустаяСтрока(Строка_ПоДокументу) Тогда
           Строка_ПоДокументу = "К платежно-расчетному документу № -- от --"
       КонецЕсли;
       ОбластьМакета.Параметры.ПоДокументу                   = Строка_ПоДокументу;
       
       ОбластьМакета.Параметры.ПредставлениеПокупателя       = "Покупатель: "                               + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "ПолноеНаименование,");
       ОбластьМакета.Параметры.АдресПокупателя               = "Адрес: "                                    + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "ЮридическийАдрес,");
       ОбластьМакета.Параметры.ИННПокупателя                 = "Идентификационный номер покупателя (ИНН): " + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "ИНН,", Ложь);
   Иначе
       ДатаНачалаУказанияСокращенногоНаименованияПродавцаВСчетеФактуре = Константы.ДатаНачалаУказанияСокращенногоНаименованияПродавцаВСчетеФактуре.Получить();
       Если ДатаНачалаУказанияСокращенногоНаименованияПродавцаВСчетеФактуре <> '00010101'
           И ДатаНачалаУказанияСокращенногоНаименованияПродавцаВСчетеФактуре <= Дата Тогда
           ОбластьМакета.Параметры.ПредставлениеПоставщика       = "Продавец: " + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,") +
                                                                   " (" + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "Представление,") + ")";
       Иначе
           ОбластьМакета.Параметры.ПредставлениеПоставщика       = "Продавец: " + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,");
       КонецЕсли;
       ОбластьМакета.Параметры.АдресПоставщика               = "Адрес: "                            + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ЮридическийАдрес,");
       КПП = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "КПП,", Ложь);
       Если  ЗначениеЗаполнено(КПП) Тогда
           КПП = "/" + КПП;
       КонецЕсли;
       ОбластьМакета.Параметры.ИННпоставщика                 = "ИНН/КПП продавца: "                 + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ИНН,", Ложь) + КПП;
       Если ТолькоУслуги Тогда
           ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = "Грузоотправитель и его адрес: " + "-";
           ОбластьМакета.Параметры.ПредставлениеГрузополучателя  = "Грузополучатель и его адрес: "  + "-";
       Иначе
           ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = "Грузоотправитель и его адрес: " + ?(Не ЗначениеЗаполнено(ДанныеДляПечати.Грузоотправитель), "", ?(ДанныеДляПечати.Грузоотправитель = "он же", ДанныеДляПечати.Грузоотправитель, ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправителе,  "ПолноеНаименование,ФактическийАдрес,")));
           ОбластьМакета.Параметры.ПредставлениеГрузополучателя  = "Грузополучатель и его адрес: "  + ?(Не ЗначениеЗаполнено(ДанныеДляПечати.Грузополучатель), "", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе, "ПолноеНаименование,ФактическийАдрес,"));
       КонецЕсли;
       Строка_ПоДокументу = "";
       Для каждого ПараметрыДокуентаОплаты Из ДанныеДляПечати.ТаблицаДатОплат Цикл
           Строка_ПоДокументу = Строка_ПоДокументу+ ?(ПустаяСтрока(Строка_ПоДокументу), "К платежно-расчетному документу № ",", ")
                   +ПараметрыДокуентаОплаты.НомерПлатежноРасчетногоДокумента + " от " + Формат(ПараметрыДокуентаОплаты.ДатаПлатежноРасчетногоДокумента, "ДФ=dd.MM.yyyy");
       КонецЦикла;
       Если ПустаяСтрока(Строка_ПоДокументу) Тогда
           Строка_ПоДокументу = "К платежно-расчетному документу № -- от --"
       КонецЕсли;
       ОбластьМакета.Параметры.ПоДокументу                   = Строка_ПоДокументу;
       
       ОбластьМакета.Параметры.ПредставлениеПокупателя       = "Покупатель: "                       + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "ПолноеНаименование,");
       ОбластьМакета.Параметры.АдресПокупателя               = "Адрес: "                            + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "ЮридическийАдрес,");
       КПП = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "КПП,", Ложь);
       Если  ЗначениеЗаполнено(КПП) Тогда
           КПП = "/" + КПП;
       КонецЕсли;
       ОбластьМакета.Параметры.ИННПокупателя                 = "ИНН/КПП покупателя: "               + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "ИНН,", Ложь) + КПП;
   КонецЕсли;
   
   ПроставитьПрочеркиВПустыеПоля(ОбластьМакета);
   ТабДокумент.Вывести(ОбластьМакета);

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

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

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

   ВыборкаСтрокТовары = ДанныеДляПечати.ТабличнаяЧасть;
   ВыборкаСтрокТовары.Колонки.Добавить("СуммаБезНДС");
   ВыборкаСтрокТовары.Колонки.Добавить("СуммаСНДС");
   
   Для Каждого Строчка Из ВыборкаСтрокТовары Цикл
       Строчка.СуммаСНДС = Строчка.Сумма + ?(Строчка.СуммаВключаетНДС, 0, Строчка.СуммаНДС);
       Если (Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120)
        Или (Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118)
        Или (Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110) Тогда
           Строчка.СуммаБезНДС = Строчка.СуммаСНДС;
           Если Не Строчка.СуммаВключаетНДС тогда
               Строчка.Цена = 0;
           КонецЕсли;
       Иначе
           Строчка.СуммаБезНДС = Строчка.СуммаСНДС - Строчка.СуммаНДС;
           Если Строчка.СуммаВключаетНДС тогда
               Строчка.Цена = 0;
           КонецЕсли;
       КонецЕсли;
       
       ВидСчетаФактуры = СсылкаНаОбъект.ВидСчетаФактуры;
       
       Если ВидСчетаФактуры <> Перечисления.ВидСчетаФактурыВыставленного.НаАванс
           И ВидСчетаФактуры <> Перечисления.ВидСчетаФактурыВыставленного.НаАвансКомитента
           И Строчка.Цена = 0 Тогда
           Строчка.Цена = Окр(?(Строчка.Количество = 0, 0, Строчка.СуммаБезНДС / Строчка.Количество), 2);
       КонецЕсли;
   КонецЦикла;
   
   ВыборкаСтрокТовары.Свернуть("Товар, ТоварНаименование, СтранаПроисхождения, ПредставлениеСтраны, НомерГТД, ПредставлениеГТД, ЕдиницаИзмерения, Цена, СтавкаНДС", "Количество, Сумма, СуммаНДС, СуммаСНДС, СуммаБезНДС");
   
   Для Каждого Строчка Из ВыборкаСтрокТовары Цикл
       ОбластьМакета.Параметры.Заполнить(Строчка);
       
       Если Строчка.СтранаПроисхождения = Справочники.КлассификаторСтранМира.Россия Тогда
           ОбластьМакета.Параметры.ПредставлениеСтраны = "--";
           ОбластьМакета.Параметры.ПредставлениеГТД    = "--";
       КонецЕсли;

       Количество  = Строчка.Количество;

       Если ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс
           ИЛИ ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАвансКомитента Тогда
           // В счетах-фактурах на аванс колонка 3, 4, 5 не выводится
           ОбластьМакета.Параметры.Стоимость  = 0;
           ОбластьМакета.Параметры.Количество = 0;
           ОбластьМакета.Параметры.Цена       = 0;
       Иначе
           ОбластьМакета.Параметры.Количество = Количество;
           ОбластьМакета.Параметры.Цена   = Строчка.Цена;
           ОбластьМакета.Параметры.Стоимость  = Строчка.СуммаБезНДС;
       КонецЕсли;    
           
       ОбластьМакета.Параметры.Всего      = Строчка.СуммаСНДС;
       ОбластьМакета.Параметры.СтавкаНДС  = Строчка.СтавкаНДС;

       ИтогоСуммаНДС = ИтогоСуммаНДС + Строчка.СуммаНДС;
       ИтогоВсего    = ИтогоВсего    + Строчка.СуммаСНДС;

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

   КонецЦикла;

   Если ВыборкаСтрокТовары.Количество()>0 Тогда
       ТабДокумент.Область(ТабДокумент.ВысотаТаблицы,,ТабДокумент.ВысотаТаблицы,).ВместеСоСледующим = Истина;
   КонецЕсли;
   
   ОбластьМакета = Макет.ПолучитьОбласть("Итого");
   ОбластьМакета.Параметры.ИтогоСуммаНДС = ИтогоСуммаНДС;
   ОбластьМакета.Параметры.ИтогоВсего    = ИтогоВСего;
   
   ПроставитьПрочеркиВПустыеПоля(ОбластьМакета);
   ТабДокумент.Вывести(ОбластьМакета);

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

   ТабДокумент.ВерхнийКолонтитул.Выводить          = Истина;
   ТабДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2;
   ТабДокумент.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
   ТабДокумент.ВерхнийКолонтитул.ТекстСлева   = ЗаголовокДляПечати;
   ТабДокумент.ВерхнийКолонтитул.ТекстСправа  = "Лист [&НомерСтраницы]";

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

КонецФункции // ПечатьСчетаФактуры()
1 mikecool
 
15.05.12
16:31
сначала
перем
потом процы и функции
потом - все остальное
2 Wobland
 
15.05.12
16:32
(0) прокомментируй первую строку
3 salvator
 
15.05.12
16:32
Функцию Печать перемести после объявления переменных
4 andrewks
 
15.05.12
16:33
и правильно. два раза одну и ту же функцию определяешь
5 Wobland
 
15.05.12
16:33
(2) не так посмотрел. читать (1)
6 andrewks
 
15.05.12
16:34
+(4) сторно, это спойлер так собрал
7 Лоботряс
 
15.05.12
16:35
(5) Да все правильно ты понял
вот это
ДанныеДляПечати = Новый Структура();
   ДанныеДляПечати.Вставить("Организация",      Шапка.Организация);
   ДанныеДляПечати.Вставить("Номер",            Шапка.Номер);
   ДанныеДляПечати.Вставить("Дата",             Шапка.Дата);
   ДанныеДляПечати.Вставить("Поставщик",        Шапка.Поставщик);
   ДанныеДляПечати.Вставить("Грузоотправитель", );
   ДанныеДляПечати.Вставить("Покупатель",       Шапка.Покупатель);
   ДанныеДляПечати.Вставить("Грузополучатель",  );
   ДанныеДляПечати.Вставить("Сумма",            Шапка.Сумма);
   ДанныеДляПечати.Вставить("Валюта",           Шапка.Валюта);
   ДанныеДляПечати.Вставить("УчитыватьНДС",     Истина);
   ДанныеДляПечати.Вставить("СуммаВключаетНДС", Истина);
нужно в самый низ опустить
8 Gorro-1789
 
15.05.12
16:45
конечно опускал, выводит милион ошибок..
9 Wobland
 
15.05.12
16:50
(8) красавец, что сказать. разбирайся теперь персонально с каждой
10 John83
 
15.05.12
16:54
(8) что-то мне подсказывает, что у тебя переменная Шапка не определена
11 Gorro-1789
 
16.05.12
11:41
Если эти "коллекции" опускаю вниз, то у меня ругается на то что не определены переменные "Данные для печати"  и "Шапка" ...когда ж коллекции распологаются НАД функцией, то покранимерии ошибки  "не определена переменная ДАННЫЕ ДЛЯ ПЕЧАТИ" не выводит...    сылается тока на Шапку....            истина где-то рядом:)
12 Wobland
 
16.05.12
11:43
(11) а что за ДанныеДляПечати и Шапка? почему вдруг они вне всяких процедур взялись?
13 Gorro-1789
 
16.05.12
11:47
незнаю...    я стажер..)
14 Wobland
 
16.05.12
11:50
(13) ну дык задумайся. с чего вдруг кусок кода, который по логике вещей должен бы в какой-то процедуре быть, оказался сиротой