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

Добавить данные в печатную форму УПД для ЭДО с контрагентом

Автор Sanches_de_la_Vega, 21 дек 2023, 10:06

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

Sanches_de_la_Vega

Друзья, добрый день. Сделал расширение для БП 3.0. Добавил три реквизита на форму РеализацииТоваровУслуг. Дописал заполнение печатной формы УПД ими в общих модулях УчетНДС и ПечатьТорговыхДокументов. Все красиво заполняется. Но когда отправляю УПД контрагенту он туда мои реквизиты уже не вставляет. Подскажите, ЭДО использует другую печатную форму? Или за эту печатную форму другие модули отвечают. Пока мучаюсь не могу найти.

Sanches_de_la_Vega

Люди, подсобите. Со всем пока разобрался, все в печатную форму добавил. Но не могу добавить параметр в табличную часть. На форме реквизит разместил, заполняется. Описал параметр с этим реквизитом в функции печати, но выдает ошибку, что поле объекта не обнаружено. Обычный реквизит формы нормально добавился, а в табличной части не видит его. Куда его еще нужно прописать, от куда берутся данные для табличной части?

fruitella

Ну вот как тебе помочь?
Мы люди, нам свойственно видеть какие-то циферки или буковки, представлять в голове, что куда-то ты там нажал, куда-то ты там записал, где-то там оно появляется, а где-то нет. Ну это же ведь не рубрика "Что, где и когда?".
Показать бы для начала минимальную информацию: скрин, кусок когда, подробное описание ошибки, да все что угодно.

Я понимаю люди иногда задают вопрос, как это сделать, а дайте пожалуйста пример вот этой штуки. На вот пожалуйста, это так делается, а вот это так. Но тут иная ситуация, поэтому тут напрашивается только одна фраза: "На этом наши полномочия и все!"

Afinogen

Цитата: Sanches_de_la_Vega от 10 янв 2024, 10:21Люди, подсобите. Со всем пока разобрался, все в печатную форму добавил. Но не могу добавить параметр в табличную часть. На форме реквизит разместил, заполняется. Описал параметр с этим реквизитом в функции печати, но выдает ошибку, что поле объекта не обнаружено. Обычный реквизит формы нормально добавился, а в табличной части не видит его. Куда его еще нужно прописать, от куда берутся данные для табличной части?
B) ну так вы укажите вы параметр именно в объект добавили или на форме просто для данной табличной части добавили еще реквизит?  :dfbsdfbsdf:

Sanches_de_la_Vega

Afinogen, Да, я добавил реквизит в табличную часть, разместил его на форме. Но для печати формируется таблица сведений о документе в которой мое поле не описано, а я ни как не могу найти где это происходит - описание.

Sanches_de_la_Vega

fruitella, Да ошибка известная, поле объекта не обнаружено и я понимаю почему, но не могу найти где его описать для табличной части ТОРГ12.Ща код пришлю.

Sanches_de_la_Vega

Функция ПечатьТОРГ12(СведенияТОРГ12, ОбъектыПечати, ИмяПараметровПечати) Экспорт

УстановитьПривилегированныйРежим(Истина);

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

СисИнфо = Новый СистемнаяИнформация;
Если ПустаяСтрока(СисИнфо.ИнформацияПрограммыПросмотра) Тогда
ТабличныйДокумент.ПолеСлева          = 0;
ТабличныйДокумент.ПолеСправа         = 0;
Иначе
ТабличныйДокумент.ПолеСлева          = 10;
ТабличныйДокумент.ПолеСправа         = 10;
КонецЕсли;

ТабличныйДокумент.ИмяПараметровПечати = ИмяПараметровПечати;

Макет = ПолучитьМакет("локТОРГ12");//УправлениеПечатью.ПолучитьМакет("локТОРГ12");

ПервыйДокумент = Истина;

Для Каждого СведенияОДокументе Из СведенияТОРГ12 Цикл

Если НЕ ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

ПервыйДокумент = Ложь;

// Запомним номер строки, с которой начали выводить текущий документ.
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

ТаблицаДокумента = СведенияОДокументе.ТаблицаДокумента;
//поставим масу брутто
Св=ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Заголовок","Масса Брутто").Ссылка; 
Для Каждого СтрокаДокумента Из ТаблицаДокумента Цикл
Стр=СтрокаДокумента.Товар.ДополнительныеРеквизиты.Найти(Св,"Свойство");
Если Стр=Неопределено Тогда
СтрокаДокумента.МассаБрутто=0;
Иначе
СтрокаДокумента.МассаБрутто= Стр.Значение*СтрокаДокумента.Количество;
            КонецЕсли;
        КонецЦикла;
//\\

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

// Выводим общие реквизиты шапки
СведенияОПоставщике       = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(
СведенияОДокументе.Поставщик, СведенияОДокументе.ДатаДляПолученияСведений, СведенияОДокументе.БанковскийСчетПродавца);
СведенияОГрузоотправителе = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(СведенияОДокументе.Грузоотправитель, СведенияОДокументе.ДатаДляПолученияСведений);
СведенияОПокупателе       = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(СведенияОДокументе.Покупатель,       СведенияОДокументе.ДатаДляПолученияСведений);
СведенияОГрузополучателе  = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(СведенияОДокументе.Грузополучатель,  СведенияОДокументе.ДатаДляПолученияСведений);

ОбластьМакетаШапка.Параметры.Заполнить(СведенияОДокументе);

Если ЗначениеЗаполнено(СведенияОДокументе.НомерИсправления) И ЗначениеЗаполнено(СведенияОДокументе.ДатаИсправления) Тогда

ОбластьМакетаШапка.Параметры.ТекстИсправления = НСтр("ru='Исправление   '");
ОбластьМакетаШапка.Параметры.НомерИсправления = СведенияОДокументе.НомерИсправления;
ОбластьМакетаШапка.Параметры.ДатаИсправления = Формат(СведенияОДокументе.ДатаИсправления, "ДФ=dd.MM.yyyy");

ЛинияГраницыРеквизитовИсправления = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);
ОбластьНомерИсправления = ОбластьМакетаШапка.Области.НомерИсправления;
ОбластьНомерИсправления.ГраницаСнизу = ЛинияГраницыРеквизитовИсправления;
ОбластьНомерИсправления.ГраницаСлева = ЛинияГраницыРеквизитовИсправления;
ОбластьНомерИсправления.ГраницаСправа = ЛинияГраницыРеквизитовИсправления;

ОбластьДатаИсправления = ОбластьМакетаШапка.Области.ДатаИсправления;
ОбластьДатаИсправления.ГраницаСнизу = ЛинияГраницыРеквизитовИсправления;
ОбластьДатаИсправления.ГраницаСлева = ЛинияГраницыРеквизитовИсправления;
ОбластьДатаИсправления.ГраницаСправа = ЛинияГраницыРеквизитовИсправления;

  КонецЕсли;

Если СведенияОДокументе.Поставщик = СведенияОДокументе.Грузоотправитель Тогда
ОбластьМакетаШапка.Параметры.ПредставлениеОрганизации = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОПоставщике);
Иначе
ОбластьМакетаШапка.Параметры.ПредставлениеОрганизации = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(
СведенияОГрузоотправителе, "НаименованиеДляПечатныхФорм,ИНН,ФактическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет");
КонецЕсли;

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

ОбластьМакетаШапка.Параметры.ПредставлениеПоставщика  = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОПоставщике);
ОбластьМакетаШапка.Параметры.ПредставлениеПлательщика = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОПокупателе);

// Выводим всевозможные коды
ОбластьМакетаШапка.Параметры.ОрганизацияПоОКПО          = СведенияОГрузоотправителе.КодПоОКПО;
ОбластьМакетаШапка.Параметры.ВидДеятельностиПоОКДП      = "";
ОбластьМакетаШапка.Параметры.ГрузополучательПоОКПО      = СведенияОГрузополучателе.КодПоОКПО;
ОбластьМакетаШапка.Параметры.ПоставщикПоОКПО            = СведенияОПоставщике.КодПоОКПО;
ОбластьМакетаШапка.Параметры.ПлательщикПоОКПО           = СведенияОПокупателе.КодПоОКПО;
ОбластьМакетаШапка.Параметры.ТранспортнаяНакладнаяНомер = "";
ОбластьМакетаШапка.Параметры.ТранспортнаяНакладнаяДата  = "";

Если ТипЗнч(СведенияОДокументе.Документ)=Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
ОбластьМакетаШапка.Параметры.ТранспортнаяНакладнаяНомер = СведенияОДокументе.Документ.ТранспортнаяНакладнаяНомер;
ОбластьМакетаШапка.Параметры.ТранспортнаяНакладнаяДата  = Формат(СведенияОДокументе.Документ.ТранспортнаяНакладнаяДата, "ДФ=dd.MM.yyyy");
ОбластьМакетаШапка.Параметры.Основание=ОбластьМакетаШапка.Параметры.Основание+", Заказ №: "+СведенияОДокументе.Документ.ЗаказНомер;
ОбластьМакетаШапка.Параметры.ВидОперации="Продажа";
КонецЕсли;

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

// Инициализация счетчика страниц
НомерСтраницы = 1;

// Инициализация итогов по странице
ИтогоМестНаСтранице        = 0;
ИтогоКоличествоНаСтранице  = 0;
ИтогоСуммаБезНДСНаСтранице = 0;
ИтогоНДСНаСтранице         = 0;
ИтогоСуммаСНДСНаСтранице   = 0;
ИтогоМассаБруттоНаСтранице = 0;

// Инициализация итогов по документу
ИтогоМест        = 0;
ИтогоКоличество  = 0;
ИтогоСуммаСНДС   = 0;
ИтогоСуммаБезНДС = 0;
ИтогоНДС         = 0;
ИтогоМассаБрутто = 0;

// Инициализация счетчика строк
НомерСтроки     = 0;
КоличествоСтрок = ТаблицаДокумента.Количество();

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

// Выводим многострочную часть документа
Для Каждого СтрокаДокумента Из ТаблицаДокумента Цикл

НомерСтроки = НомерСтроки + 1;

ОбластьМакетаСтрока.Параметры.Номер = НомерСтроки;
ОбластьМакетаСтрока.Параметры.ТоварНаименование     = СтрокаДокумента.ТоварНаименование;
ОбластьМакетаСтрока.Параметры.ТоварКод = СтрокаДокумента.ТоварКод;
ОбластьМакетаСтрока.Параметры.БазоваяЕдиницаНаименование = СтрокаДокумента.ЕдиницаИзмеренияНаименование;
ОбластьМакетаСтрока.Параметры.БазоваяЕдиницаКодПоОКЕИ    = СтрокаДокумента.ЕдиницаИзмеренияКод;

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

ОбластьМакетаСтрока.Параметры.Количество                 = СтрокаДокумента.Количество;
ОбластьМакетаСтрока.Параметры.Цена                       = СтрокаДокумента.Цена;
ОбластьМакетаСтрока.Параметры.СуммаБезНДС                = СтрокаДокумента.СуммаБезНДС;
ОбластьМакетаСтрока.Параметры.СтавкаНДС                  = СтрокаДокумента.СтавкаНДС;
ОбластьМакетаСтрока.Параметры.СуммаНДС                   = СтрокаДокумента.СуммаНДС;
ОбластьМакетаСтрока.Параметры.СуммаСНДС                  = СтрокаДокумента.СуммаСНДС;
ОбластьМакетаСтрока.Параметры.МассаБрутто                = СтрокаДокумента.МассаБрутто;
ОбластьМакетаСтрока.Параметры.НомерПозиции          = СтрокаДокумента.НомерПозиции;

И я вот по своей неопытности думал, что сейчас параметр в областьСтроки добавлю и все. А нужно сведенияТорг12 заполнить, не пойму где. Вот в самом низу НомерПозиции, куда его добавить нужно?

fruitella

Заполнение реквизитов в печатную форму происходит через параметры.
1. Параметр или шаблон должен присутствовать в макете. Нужно убедиться, что данный параметр существует иначе система тебя просто не поймет, куда ты хочешь это добавлять.
2. Нужно заполнять перед выводом той или иной области, где присутствует нужный параметр. Сначала заполнить, а потом только вывести данную область.
3. Если заполняешь через метод Заполнить(), то наименование реквизита и параметра обязательно должны совпадать.

И того что получаем:
Заходим в нужный нам макет, проверяем существует ли параметр.
Находим ту область, где этот параметр используется.
Если параметр или шаблон не существует, значит создаем новый в той области, где тебе нужно.
В коде перед
ТабличныйДокумент.Вывести("НаименованиеНужнойНамОбласти")Заполняем параметр и затем выводим эту область.

Sanches_de_la_Vega

fruitella, Да, я так и сделал, но в цикле он выбирает данные из описания таблицы ТОРГ12, в которых нет моего реквизита и параметра, а я не понимаю какая функция за это отвечает, вроде, ПолучитьОписаниеТаблицыТОРГ12

fruitella

Sanches_de_la_Vega, Если нету, добавить его и обратиться к нему .
Если это табличная часть, можно сделать просто запрос по ссылке и посмотреть все реквизиты, которые там есть.

Теги:

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

Рейтинг@Mail.ru

Поиск