Имя: Пароль:
1C
1С v8
Добавление параметра к шаблону счет фактуре
,
0 zzzLEXzzz
 
05.04.13
15:00
Ещё раз приветствую всех, такой вопрос у меня 1С 8,2 УТ. в макет шаблона "счет фактура" в область "строка" добавил параметр, который должен заполняться из реквизита номенклатуры, не подскажете как правильно к нему обратиться, вот так не получается. (я начинающий, если туплю извините)

НомерАртикулаМетро = Справочники.Номенклатура.НомерАртикулаМЕТРО;
ОбластьМакета.Параметры.НомерАртикулаМетро = НомерАртикулаМетро;
1 andreymongol82
 
05.04.13
15:01
Почему не получается? Что за ошибка?
2 zzzLEXzzz
 
05.04.13
15:03
(1) синтаксической ошибки нет, но при попытки напечатать выдает это

{Документ.СчетФактураВыданный(1550)}: Поле объекта не обнаружено (НомерАртикулаМЕТРО)
       НомерАртикулаМетро = Справочники.Номенклатура.НомерАртикулаМЕТРО;
3 andreymongol82
 
05.04.13
15:14
Это значит у справочника номенклатуры либо нет реквизита "НомерАртикулаМЕТРО", либо его не видно в силу каких-либо причин (ограничение данных)
4 zzzLEXzzz
 
05.04.13
15:21
(3) Реквизит 100% есть, может я полностью код процедуры пришлю?
5 zzzLEXzzz
 
05.04.13
15:25
Вот код функции, где я добавлял там комментарии LEX

Функция ПечатьСчетаФактуры(ДанныеДляПечати, Подпись= ложь)

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

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



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

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

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

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

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

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

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

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

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

   КонецЦикла;

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

   ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
   ОбластьМакета.Параметры.Заполнить(ДанныеДляПечати);
   
   
   //ВЫВОД ЭЛЕКТРОННОЙ ПОДПИСИ ****************************************************
   Если Подпись Тогда
       Руководители1 = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизации1(Организация, Дата,);
       Руководитель1 = Руководители1.Руководитель;
       Бухгалтер1    = Руководители1.ГлавныйБухгалтер;
                       
       //ОбластьМакета.Рисунки.ПодписьРуководителя.Картинка
       ПодписьРук = РаботаСДиалогами.ПолучитьПодпись(Руководитель1);
       ПодписьБух = РаботаСДиалогами.ПолучитьПодпись(Бухгалтер1);
       Если ПодписьРук <> NULL Тогда
           ОбластьМакета.Рисунки.ПодписьРуководителя.Картинка = ПодписьРук;
       КонецЕсли;                
       Если ПодписьБух <> NULL Тогда
           ОбластьМакета.Рисунки.ПодписьБухгалтера.Картинка =    ПодписьБух;        
       КонецЕсли;
   КонецЕсли;
   
   Если не Дата < '20040216' Тогда
       ОбластьМакета.Параметры.Свидетельство = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "Свидетельство,");
   КонецЕсли;
   ПроставитьПрочеркиВПустыеПоля(ОбластьМакета);
   ТабДокумент.Вывести(ОбластьМакета);

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

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

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

КонецФункции // ПечатьСчетаФактуры()
6 andreymongol82
 
05.04.13
15:32
Блииин, проглядел в предыдущих постах, но зато нашел в портянке
   // LEX

       НомерАртикулаМетро = Справочники.Номенклатура.НомерАртикулаМЕТРО;
       // LEX

Справочники.Номенклатура = это у нас менеджер, где нет данных
Надо же вот так
НомерАртикулаМетро = Строчка.Товар..НомерАртикулаМЕТРО;

Вообще, молодежь, читайте больше книжек :)
7 andreymongol82
 
05.04.13
15:33
(6) пардон, очепятка
НомерАртикулаМетро = Строчка.Товар.НомерАртикулаМЕТРО;
8 zzzLEXzzz
 
05.04.13
15:37
(6) поле заполнилось, но почему оно заполнилось буквами истина или ложь, хотя у меня там цифровое значение?
9 zzzLEXzzz
 
05.04.13
15:45
(8) то есть в место цифр, заполнилось слово "Ложь" или "Истина"
10 zzzLEXzzz
 
05.04.13
15:47
Всё извеняюсь, это я дурак, не правильно всё сделал, вот так написал, вот дебил

НомерАртикулаМетро = НомерАртикулаМетро = Строчка.Товар.НомерАртикулаМЕТРО
11 andreymongol82
 
05.04.13
15:47
(8) Забавно.
// LEX
       НомерАртикулаМетро = Справочники.Номенклатура.НомерАртикулаМЕТРО;
       // LEX
Вместо этого и потом дальше написал?
12 andreymongol82
 
05.04.13
15:48
(10) А ну так-то да, прям в стиле С++ получилось сравнить предыдущий результат с текущим ;)
13 zzzLEXzzz
 
05.04.13
15:56
(12) Спасибо огромное за помощь
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.