Договор с контрагентом, как основание в счете на оплату (печатная форма)

1. lordelis 01.04.19 13:22 Сейчас в теме
Здравствуйте!

Перешли с 1С 8.2, УТП на 1С 8.3 УТ 3.2 для Казахстана, как я понял, то это аналог УТ 11.4.
Обнаружили, что в счёте не оплату исчезло поле Основание, в УТП оно было, в УТ нет.
Клиенты требуют, чтобы мы указывали Договор в поле основание.

Сейчас выкручиваемся указанием Договора в поле Информация для печати.

Вопрос: как вывести Основание в печатную форму?
Перелопатил интернет, полез в модуль, но ничего не получилось.
Есть ли ВПФ с выводом основания для УТ 11.4?

Понял, что надо здесь вставить кусок кода:

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

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


Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 298 01.04.19 13:32 Сейчас в теме
Ну может реквизит "заказ" есть ?
В структуре подчиненности документ основание выводится ?


А, или основание - это чисто в печатной форме....? Тогда сложнее, т.к. думаю немного пользователей с такой конфигурацией сидит. В самом макете то есть основание ?
А так да ВПФ, и доп реквизит, решит проблему.
3. lordelis 01.04.19 13:39 Сейчас в теме
(2) Нет, вы не поняли.
Требуется указывать в печатной форме в поле "Основание" Договор с контрагентом, по которому оформляется заказ и выставляется счет на оплату.

В УТП это по умолчанию было, в УТ исчезло.
4. SedovSU@mail.ru 297 01.04.19 13:47 Сейчас в теме
Ну раз вы уже начали писать, у вас не получилось??? или что? все же верно написано по подобию!
5. lordelis 01.04.19 13:57 Сейчас в теме
(4) Верно,написал по подобию, но не выводится в печатной форме.
7. SedovSU@mail.ru 297 01.04.19 14:18 Сейчас в теме
(5) а в параметрах макета есть параметр Договор??? Может его там нету и поэтому у вас не получается
9. lordelis 01.04.19 14:34 Сейчас в теме
(7) Да, добавил в макете параметр <Договор>
6. lordelis 01.04.19 14:15 Сейчас в теме
Я так понял, что напрямую реквизит Договор подтянуть нельзя. Надо пилить код в этом направлении.
8. oleg-x 27 01.04.19 14:27 Сейчас в теме
//ЭТО расшифровка того что сделали
    ОбластьМакета = Макет.ПолучитьОбласть("Основание"); //То есть в макете должна быть такая область, если её нет, то выдаст ошибку. Область выделена красны и на поля пишется её название
    СтруктураДанныхОснование = Новый Структура;
    СтруктураДанныхОснование.Вставить("Договор", СсылкаНаДокумент.ДоговорКонтрагента); //Это лишнее
    
    СтруктураДанныхОснование.Вставить("Договор" ,
            ФормированиеПечатныхФорм.ОписаниеОрганизации(ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Контрагент, ДанныеПечати.Дата),
            "Наименование,Номер,Дата"));// В структуре может быть только один параметр с уникальным названием "Договор",
// а при попытке присвоить, заменится значение
    
    ОбластьМакета.Параметры.Заполнить(СтруктураДанныхОснование); //Слово заполнить() означает, что по именам структуры заполняются параметры в области. 
//То есть если в макете есть параметр договор, он будет заполнен иначе проигнорирует.
    ТабличныйДокумент.Вывести(ОбластьМакета);
Показать
11. lordelis 01.04.19 14:36 Сейчас в теме
(8)
СтруктураДанныхОснование.Вставить("Договор", СсылкаНаДокумент.ДоговорКонтрагента); //Это лишнее


Это при отладке закомментил.


(8)
СтруктураДанныхОснование.Вставить("Договор" , ФормированиеПечатныхФорм.ОписаниеОрганизации(ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Контрагент, ДанныеПечати.Дата), "Наименование,Номер,Дата"));// В структуре может быть только один параметр с уникальным названием "Договор", а при попытке присвоить, заменится значение


Пробовал просто "Договор", не отображается.
Это уже эксперименты шли :)

Реквизит "Договор" существует.
10. oleg-x 27 01.04.19 14:34 Сейчас в теме
Как сделать так, что бы в основание выводился договор:
ОбластьМакета = Макет.ПолучитьОбласть("Основание"); //Найти в коде, где заполняется область, в которой заполняется основание
//Потом в макете посмотри как называется параметр, где хотите что бы выводился договор.
И перед выводом области в табличный документ пишите такую строку
ОбластьМакета.Параметры.НужныйПараметр = Ссылка на договор;
ТабличныйДокумент.Вывести(ОбластьМакета);


Все, будет выведено название договора. Соотвественно, старое значение параметра затрется, то есть другая информация в этом поле выводится не будет.
16. lordelis 01.04.19 14:48 Сейчас в теме
Скриншот выложил в виде ссылке, на модерацию ушел.

(10)
ОбластьМакета.Параметры.НужныйПараметр = Ссылка на договор;


Вопрос: где ссылку взять :)?
12. oleg-x 27 01.04.19 14:38 Сейчас в теме
Выложите СкринШот макета
13. lordelis 01.04.19 14:38 Сейчас в теме
Как я понял, тут надо работать через ссылку на Договор в счете.
Буду копать. Что-то не смог подобных ВПФ найти. А сам писать не умею :(
15. SedovSU@mail.ru 297 01.04.19 14:44 Сейчас в теме
(13) да у вас практически все готово все верно сделано. вы скиньет скриншот макета и посмотрим, может там проблема то в две минуты
17. lordelis 01.04.19 14:51 Сейчас в теме
Вот скрин
Прикрепленные файлы:
19. SedovSU@mail.ru 297 01.04.19 15:14 Сейчас в теме
(17) вот вы теперь поставьте точку останова где пишите код и в табло ставьте параметр ДанныеПечати - какие в нем будут доступны реквизиты. Исходя из этого можно вытащить ваш параметр
18. oleg-x 27 01.04.19 15:10 Сейчас в теме
Все зависит где этот код выполняется, модуль менеджера или в какой-то обработке.
Либо в "ДанныеПечати" одно из значений будет договор, либо там есть ссылка на документ и уже у него взять ссылку на договор.

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


Если делать в отладке (поставить точку остановки), то можно посмотреть какие данные доступны и не гадать.
21. lordelis 02.04.19 03:52 Сейчас в теме
(18)
ОбластьМакета = Макет.ПолучитьОбласть("Основание"); ОбластьМакета.Параметры.Договор = ДанныеПечати.ссылкаНаДокумент.ДоговорКонтрагента; ТабличныйДокумент.Вывести(ОбластьМакета);


{Обработка.ПечатьСчетовНаОплату.МодульМенеджера(287)}: Поле объекта не обнаружено (ссылкаНаДокумент)
ОбластьМакета.Параметры.Договор = ДанныеПечати.ссылкаНаДокумент.ДоговорКонтрагента;
22. Natasha70 02.04.19 15:55 Сейчас в теме
(21) ОбластьМакета.Параметры.Договор = ДанныеПечати.ДоговорКонтрагента;
Если нет договора в ДанныхПечати, то нужно привести структуру ДанныеПечати, чтобы узнать как ваша "ссылкаНаДокумент" там называется и из нее Договор взять.
23. lordelis 03.04.19 09:11 Сейчас в теме
(22)

Выглядит так:
Переменная Значение Тип
ДанныеПечати ВыборкаИзРезультатаЗапроса
|
|
|
|
|
|_ССылка Заказ клиента № ДокументСсылка.ЗаказКлиента
|
|
|
|_Договор Договр №__ СправочникСсылка.ДоговорыКонтрагентов

Единственное но, что эти переменные появляются при выполнение ниже расположенного кода

Процедура ЗаполнитьРеквизитыПодвалаСчетаНаОплату(ДанныеПечати, Макет, ТабличныйДокумент, ТаблицаЭтапыОплаты, СоответствиеСтавокНДС, ПараметрыПечати)
	
	МассивПроверкиВывода = Новый Массив;
	
	// В этом месте мы получаем данные печати //
	
	// Вывести этапы графика оплаты
	Если ТаблицаЭтапыОплаты.Количество() > 1 Тогда
		
		ИмяКолонкиДатыОплаты = ?(ДанныеПечати.СчетКВозврату, НСтр("ru='Дата оплаты или возврата'"), НСтр("ru='Дата оплаты'"));
		
		ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыЭтапыОплаты");
		ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ИтогоЭтапыОплаты");
		СтруктураДанныхШапки = Новый Структура("ИмяКолонкиДатыОплаты",ИмяКолонкиДатыОплаты);
		ОбластьШапкаТаблицы.Параметры.Заполнить(СтруктураДанныхШапки);
		МассивПроверкиВывода.Добавить(ОбластьШапкаТаблицы);
		МассивПроверкиВывода.Добавить(ОбластьПодвалТаблицы);
		
		ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыЭтапыОплаты");
		
		НомерЭтапа = 1;
		Для Каждого ТекЭтап Из ТаблицаЭтапыОплаты Цикл
			
			ПараметрыСтроки = НовыеПараметрыСтрокиЭтапа();
			ЗаполнитьЗначенияСвойств(ПараметрыСтроки, ТекЭтап);
			ПараметрыСтроки.НомерСтроки = НомерЭтапа;
			Если Не ПараметрыСтроки.ЭтоЗалогЗаТару Тогда
				ПараметрыСтроки.ТекстНДС = ФормированиеПечатныхФорм.СформироватьТекстНДСЭтапаОплаты(
					СоответствиеСтавокНДС,
					ТекЭтап.ПроцентПлатежа);
			Иначе
				ПараметрыСтроки.ПроцентПлатежа = "-";
				ПараметрыСтроки.ТекстНДС = НСтр("ru='Залог за тару. Без налога (НДС).'");
			КонецЕсли;
			
			ОбластьСтрокаТаблицы.Параметры.Заполнить(ПараметрыСтроки);
			
			МассивПроверкиВывода.Добавить(ОбластьСтрокаТаблицы);
			
			Если ТабличныйДокумент.ПроверитьВывод(МассивПроверкиВывода) Тогда
				Если НомерЭтапа = 1 Тогда
					ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
					МассивПроверкиВывода.Удалить(0);
				КонецЕслИ;
			Иначе
				ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
				ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
			КонецЕсли;
			
			ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы);
			МассивПроверкиВывода.Удалить(МассивПроверкиВывода.ВГраница());
			
			НомерЭтапа = НомерЭтапа + 1;
			
		КонецЦикла;
		ТабличныйДокумент.Вывести(ОбластьПодвалТаблицы);
		
	КонецЕсли;
	
	      	
	Если ЗначениеЗаполнено(ДанныеПечати.СсылкаДоговор) Тогда
		
		Область = Макет.ПолучитьОбласть("Основание");
		Область.Параметры.Заполнить(ДанныеПечати);
		ТабличныйДокумент.Вывести(Область);
	КонецЕсли;

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



А вставка Договора идет выше в предыдущей процедуре. Там вообще нет нигде Договора в переменных.
24. Natasha70 03.04.19 09:34 Сейчас в теме
(23) у вас в ДанныхПечати этот реквизит называется СсылкаДоговор - назовите его в макете также, если он заполнен, то появится в печатной форме
25. Natasha70 03.04.19 09:39 Сейчас в теме
(23) Если не заполнен СсылкаДоговор, то нужно все таки знать как в ДанныхПечати из запроса получается сама Ссылка на Заказ....тогда:
ОбластьМакета.Параметры.СсылкаДоговор = ДанныеПечати."та самая Ссылка на Заказ".ДоговорКонтрагента;
26. lordelis 08.04.19 14:24 Сейчас в теме
(25)
Никак не могу понять, как ссылка формируется из вытащенных данных.

Переменная ///////// Значение /////////// Тип
ДанныеПечати ///// ВыборкаИзРезультатаЗапроса
|
|
|
|
|
|_ССылка // Заказ клиента № // ДокументСсылка.ЗаказКлиента
* |
* |
* |
* |_Договор // Договор №__ // СправочникСсылка.ДоговорыКонтрагентов
Показать
20. oleg-x 27 01.04.19 15:31 Сейчас в теме
Также перед тем как печатать, не забудте установить настройки по умолчанию. Так как с пользовательской стороны макет можно менять также и возможно там старый вариант.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот