Правила формирования договоров из УТ в БП

1. Xershi 1484 29.01.21 13:18 Сейчас в теме
Добрый день, коллеги!
Нужно разобраться в правилах формирования договоров при переносе из УТ в БП.
Давайте разбираться вместе, т.к. информации в интернете нет.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1484 29.01.21 13:19 Сейчас в теме
Есть 4 варианта:
1. Договоры контрагентов формируются без привязки к соглашениям или заказам
2. Разным заказам соответствуют разные договоры контрагентов
3. Разным соглашениям соответствуют разные договоры контрагентов
4. Разным сделкам соответствуют разные договоры контрагентов

В плане обмена "СинхронизацияДанныхЧерезУниверсальныйФормат" в модуле формы есть код заполняющий реквизит "ПравилаСозданияДоговоровКонтрагентов":
// Формирует и возвращает список правил выгрузки договора по данным объектов Взаиморасчетов.
//
// Возвращаемое значение: СписокЗначений.
//
Функция СписокПравилФормированияДоговора() Экспорт
	
	СписокПравил = Новый СписокЗначений;
	СписокПравил.Добавить("БезРазделения", НСтр("ru = 'Договоры контрагентов формируются без привязки к соглашениям или заказам'"));
	
	Если (ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыКлиентов")
		Или ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыПоставщикам"))
		И Не (ПолучитьФункциональнуюОпцию("ИспользоватьПоступлениеПоНесколькимЗаказам")
			И ПолучитьФункциональнуюОпцию("ИспользоватьРеализациюПоНесколькимЗаказам")
			И ПолучитьФункциональнуюОпцию("ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам")) Тогда
		
		СписокПравил.Добавить("ПоЗаказам", НСтр("ru = 'Разным заказам соответствуют разные договоры контрагентов'"));
		
	КонецЕсли;
	
	Если Константы.ИспользованиеСоглашенийСКлиентами.Получить() <> Перечисления.ИспользованиеСоглашенийСКлиентами.НеИспользовать Тогда
		СписокПравил.Добавить("ПоСоглашениям", НСтр("ru = 'Разным соглашениям соответствуют разные договоры контрагентов'"));
	КонецЕсли;
	
	Если ПолучитьФункциональнуюОпцию("ИспользоватьСделкиСКлиентами") Тогда
		СписокПравил.Добавить("ПоСделкам", НСтр("ru = 'Разным сделкам соответствуют разные договоры контрагентов'"));
	КонецЕсли;
	
	Возврат СписокПравил;
	
КонецФункции
Показать
3. Xershi 1484 29.01.21 13:31 Сейчас в теме
1. БезРазделения = Договоры контрагентов формируются без привязки к соглашениям или заказам
2. ПоЗаказам = Разным заказам соответствуют разные договоры контрагентов
3. ПоСоглашениям = Разным соглашениям соответствуют разные договоры контрагентов
4. ПоСделкам = Разным сделкам соответствуют разные договоры контрагентов

Далее в общем модуле "МенеджерОбменаЧерезУниверсальныйФормат" идет такой код:
Процедура ПолучитьНастройкиВыгрузкиАналитикиПоДоговорам(НастройкиДопАналитикиПоДоговорам, КомпонентыОбмена)
	АналитикаВзаиморасчетов = "";
	
	НастройкиДопАналитикиПоДоговорам = Новый Структура;
	Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена
		И КомпонентыОбмена.УзелКорреспондента.Метаданные().Реквизиты.Найти("ПравилаСозданияДоговоровКонтрагентов") <> Неопределено Тогда
		АналитикаВзаиморасчетов = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "ПравилаСозданияДоговоровКонтрагентов");
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(АналитикаВзаиморасчетов) Тогда
		АналитикаВзаиморасчетов = "БезРазделения";
	КонецЕсли;
	
	
	НастройкиДопАналитикиПоДоговорам.Вставить("ЗаказВДоговор",      АналитикаВзаиморасчетов = "ПоЗаказам");
	НастройкиДопАналитикиПоДоговорам.Вставить("СоглашениеВДоговор", АналитикаВзаиморасчетов = "ПоСоглашениям");
	НастройкиДопАналитикиПоДоговорам.Вставить("СделкаВДоговор",     АналитикаВзаиморасчетов = "ПоСделкам");
	НастройкиДопАналитикиПоДоговорам.Вставить("ДоговорВДоговор",    АналитикаВзаиморасчетов = "БезРазделения");
КонецПроцедуры
Показать
4. Xershi 1484 29.01.21 13:33 Сейчас в теме
И тут уже в этом же модуле выполняются различные сценарии поиска:
	Если ЭтоЗаказ Или ЭтоСоглашение Или ЭтоСделка Тогда
			Если ЭтоЗаказ И КомпонентыОбмена.ПараметрыКонвертации.НастройкиДопАналитикиПоДоговорам.ЗаказВДоговор Тогда
				
				Запрос = Новый Запрос;
				Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
				
				Запрос.УстановитьПараметр("Ссылка", ЗаказСсылка);
				
				Если ТипЗнч(ЗаказСсылка) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
					Запрос.Текст = 
					"ВЫБРАТЬ
					|	ЗаказКлиента.Ссылка КАК Ссылка,
					|	ЗаказКлиента.Контрагент КАК Контрагент,
					|	ЗаказКлиента.Организация КАК Организация,
					|	ЗаказКлиента.Дата КАК Дата,
					|	ЗаказКлиента.Номер КАК Номер,
					|	ЗаказКлиента.Валюта КАК Валюта,
					|	ЗаказКлиента.Представление КАК Представление,
					|	ЗаказКлиента.ПорядокОплаты = ЗНАЧЕНИЕ(Перечисление.ПорядокОплатыПоСоглашениям.РасчетыВВалютеОплатаВРублях) КАК РасчетыВУсловныхЕдиницах
					|ПОМЕСТИТЬ ВТ_Документ
					|ИЗ
					|	Документ.ЗаказКлиента КАК ЗаказКлиента
					|ГДЕ
					|	ЗаказКлиента.Ссылка = &Ссылка";
					Запрос.Выполнить();
				ИначеЕсли ТипЗнч(ЗаказСсылка) = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента") Тогда
					Запрос.Текст = 
					"ВЫБРАТЬ
					|	ЗаявкаНаВозвратТоваровОтКлиента.Ссылка КАК Ссылка,
					|	ЗаявкаНаВозвратТоваровОтКлиента.Контрагент КАК Контрагент,
					|	ЗаявкаНаВозвратТоваровОтКлиента.Организация КАК Организация,
					|	ЗаявкаНаВозвратТоваровОтКлиента.Дата КАК Дата,
					|	ЗаявкаНаВозвратТоваровОтКлиента.Номер КАК Номер,
					|	ЗаявкаНаВозвратТоваровОтКлиента.Валюта КАК Валюта,
					|	ЗаявкаНаВозвратТоваровОтКлиента.Представление КАК Представление,
					|	ЗаявкаНаВозвратТоваровОтКлиента.ПорядокОплаты = ЗНАЧЕНИЕ(Перечисление.ПорядокОплатыПоСоглашениям.РасчетыВВалютеОплатаВРублях) КАК РасчетыВУсловныхЕдиницах
					|ПОМЕСТИТЬ ВТ_Документ
					|ИЗ
					|	Документ.ЗаявкаНаВозвратТоваровОтКлиента КАК ЗаявкаНаВозвратТоваровОтКлиента
					|ГДЕ
					|	ЗаявкаНаВозвратТоваровОтКлиента.Ссылка = &Ссылка";
					Запрос.Выполнить();
				ИначеЕсли ТипЗнч(ЗаказСсылка) = Тип("ДокументСсылка.ЗаказПоставщику") Тогда
					Запрос.Текст = 
					"ВЫБРАТЬ
					|	ЗаказПоставщику.Ссылка КАК Ссылка,
					|	ЗаказПоставщику.Контрагент КАК Контрагент,
					|	ЗаказПоставщику.Организация КАК Организация,
					|	ЗаказПоставщику.Дата КАК Дата,
					|	ЗаказПоставщику.Номер КАК Номер,
					|	ЗаказПоставщику.Валюта КАК Валюта,
					|	ЗаказПоставщику.Представление КАК Представление,
					|	ЗаказПоставщику.ПорядокОплаты = ЗНАЧЕНИЕ(Перечисление.ПорядокОплатыПоСоглашениям.РасчетыВВалютеОплатаВРублях) КАК РасчетыВУсловныхЕдиницах
					|ПОМЕСТИТЬ ВТ_Документ
					|ИЗ
					|	Документ.ЗаказПоставщику КАК ЗаказПоставщику
					|ГДЕ
					|	ЗаказПоставщику.Ссылка = &Ссылка";
					Запрос.Выполнить();
				КонецЕсли;
				
				Если Запрос.МенеджерВременныхТаблиц.Таблицы.Количество() > 0 Тогда
					
					Запрос.Текст = 
					"ВЫБРАТЬ
					|	ВТ_Документ.Ссылка КАК Ссылка,
					|	ВТ_Документ.Контрагент КАК Контрагент,
					|	ВТ_Документ.Организация КАК Организация,
					|	ВТ_Документ.Дата КАК Дата,
					|	ВТ_Документ.Номер КАК Номер,
					|	ВТ_Документ.Валюта КАК ВалютаВзаиморасчетов,
					|	ВТ_Документ.Представление КАК Наименование,
					|	ВТ_Документ.РасчетыВУсловныхЕдиницах КАК РасчетыВУсловныхЕдиницах,
					|	КурсыВалютСрезПоследних.Курс КАК КурсВзаиморасчетов,
					|	КурсыВалютСрезПоследних.Кратность КАК КратностьВзаиморасчетов
					|ИЗ
					|	ВТ_Документ КАК ВТ_Документ
					|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДок, ) КАК КурсыВалютСрезПоследних
					|		ПО ВТ_Документ.Валюта = КурсыВалютСрезПоследних.Валюта";
					Запрос.УстановитьПараметр("ДатаДок", ДанныеИБ.Дата);
					
					Выборка = Запрос.Выполнить().Выбрать();
					Если Выборка.Следующий() Тогда
						ЗаполнитьЗначенияСвойств(СтруктураДанныеДоговора, Выборка);
						СтруктураДанныеДоговора.Наименование = ОбщегоНазначенияУТ.ПолучитьПредставлениеДокумента(ЗаказСсылка, Выборка.Номер, Выборка.Дата);
						ДоговорЗаполнен = Истина;
					КонецЕсли;
					
				КонецЕсли;
			КонецЕсли;
			
			Если ЭтоСоглашение И ДопАналитикаПоДоговорам(КомпонентыОбмена).СоглашениеВДоговор Тогда
				
				Запрос = Новый Запрос;
				Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
				
				Запрос.УстановитьПараметр("Ссылка", СоглашениеСсылка);
				
				Если ТипЗнч(СоглашениеСсылка) = Тип("СправочникСсылка.СоглашенияСКлиентами") Тогда
					Запрос.Текст = 
					"ВЫБРАТЬ
					|	СоглашенияСКлиентами.Ссылка КАК Ссылка,
					|	СоглашенияСКлиентами.Контрагент КАК Контрагент,
					|	СоглашенияСКлиентами.Организация КАК Организация,
					|	СоглашенияСКлиентами.Дата КАК Дата,
					|	СоглашенияСКлиентами.Номер КАК Номер,
					|	СоглашенияСКлиентами.Валюта КАК ВалютаВзаиморасчетов,
					|	СоглашенияСКлиентами.Наименование КАК Наименование,
					|	СоглашенияСКлиентами.Типовое КАК Типовое,
					|	СоглашенияСКлиентами.ПорядокОплаты = ЗНАЧЕНИЕ(Перечисление.ПорядокОплатыПоСоглашениям.РасчетыВВалютеОплатаВРублях) КАК РасчетыВУсловныхЕдиницах
					|ПОМЕСТИТЬ ВТ_Соглашение
					|ИЗ
					|	Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами
					|ГДЕ
					|	СоглашенияСКлиентами.Ссылка = &Ссылка";
					Запрос.Выполнить();
				ИначеЕсли ТипЗнч(СоглашениеСсылка) = Тип("СправочникСсылка.СоглашенияСПоставщиками") Тогда
					Запрос.Текст = 
					"ВЫБРАТЬ
					|	СоглашенияСПоставщиками.Ссылка КАК Ссылка,
					|	СоглашенияСПоставщиками.Контрагент КАК Контрагент,
					|	СоглашенияСПоставщиками.Организация КАК Организация,
					|	СоглашенияСПоставщиками.Дата КАК Дата,
					|	СоглашенияСПоставщиками.Номер КАК Номер,
					|	СоглашенияСПоставщиками.Валюта КАК ВалютаВзаиморасчетов,
					|	СоглашенияСПоставщиками.Наименование КАК Наименование,
					|	ЛОЖЬ КАК Типовое,
					|	СоглашенияСПоставщиками.ПорядокОплаты = ЗНАЧЕНИЕ(Перечисление.ПорядокОплатыПоСоглашениям.РасчетыВВалютеОплатаВРублях) КАК РасчетыВУсловныхЕдиницах
					|ПОМЕСТИТЬ ВТ_Соглашение
					|ИЗ
					|	Справочник.СоглашенияСПоставщиками КАК СоглашенияСПоставщиками
					|ГДЕ
					|	СоглашенияСПоставщиками.Ссылка = &Ссылка";
					Запрос.Выполнить();
				КонецЕсли;
				
				Если Запрос.МенеджерВременныхТаблиц.Таблицы.Количество() > 0 Тогда
					
					Запрос.Текст = 
					"ВЫБРАТЬ
					|	СоглашенияСКлиентами.Ссылка КАК Ссылка,
					|	СоглашенияСКлиентами.Контрагент КАК Контрагент,
					|	СоглашенияСКлиентами.Организация КАК Организация,
					|	СоглашенияСКлиентами.Дата КАК Дата,
					|	СоглашенияСКлиентами.Номер КАК Номер,
					|	СоглашенияСКлиентами.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
					|	СоглашенияСКлиентами.Наименование КАК Наименование,
					|	СоглашенияСКлиентами.РасчетыВУсловныхЕдиницах КАК РасчетыВУсловныхЕдиницах,
					|	СоглашенияСКлиентами.Типовое КАК Типовое,
					|	КурсыВалютСрезПоследних.Курс КАК КурсВзаиморасчетов,
					|	КурсыВалютСрезПоследних.Кратность КАК КратностьВзаиморасчетов
					|ИЗ
					|	ВТ_Соглашение КАК СоглашенияСКлиентами
					|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДок, ) КАК КурсыВалютСрезПоследних
					|		ПО СоглашенияСКлиентами.ВалютаВзаиморасчетов = КурсыВалютСрезПоследних.Валюта";
					Запрос.УстановитьПараметр("ДатаДок", ДанныеИБ.Дата);
					
					Выборка = Запрос.Выполнить().Выбрать();
					Если Выборка.Следующий() Тогда
						ЗаполнитьЗначенияСвойств(СтруктураДанныеДоговора, Выборка);
						
						Если Не ЗначениеЗаполнено(СтруктураДанныеДоговора.Контрагент) Тогда
							Если ЕстьРеквизитДанныхИБ(ДанныеИБ, "Контрагент") Тогда
								СтруктураДанныеДоговора.Контрагент = ДанныеИБ.Контрагент;
							Иначе
								СтруктураДанныеДоговора.Контрагент = ПараметрыПоУмолчанию.Контрагент;
							КонецЕсли;
						КонецЕсли;
						
						Если Не ЗначениеЗаполнено(СтруктураДанныеДоговора.Организация) Тогда
							Если ЗначениеЗаполнено(ДанныеИБ.Организация) Тогда
								СтруктураДанныеДоговора.Организация = ДанныеИБ.Организация;
							Иначе
								СтруктураДанныеДоговора.Организация = ПараметрыПоУмолчанию.Организация;
							КонецЕсли;
						КонецЕсли;
						
						Если ТипЗнч(СоглашениеСсылка) = Тип("СправочникСсылка.СоглашенияСКлиентами") Тогда
							Наименование = ?(Выборка.Типовое, НСтр("ru = 'Типовое'"), НСтр("ru = 'Индивидуальное'")) + "; ";
						Иначе
						    Наименование = "";
						КонецЕсли;
						
						Наименование = Наименование + Выборка.Наименование
							+ " " + ?(ЗначениеЗаполнено(Выборка.Номер), "№" + Выборка.Номер, "")
							+ " " + ?(ЗначениеЗаполнено(Выборка.Дата), НСтр("ru = 'от'") + " " + Формат(Выборка.Дата, "ДЛФ=D"), "");
							
						СтруктураДанныеДоговора.Наименование = СокрЛП(Наименование);
						ДоговорЗаполнен = Истина;
					КонецЕсли;
					
				КонецЕсли;
				
			КонецЕсли;
			
			Если ЭтоСделка И ДопАналитикаПоДоговорам(КомпонентыОбмена).СделкаВДоговор Тогда
				Запрос = Новый Запрос(
				"ВЫБРАТЬ
				|	СделкиСКлиентами.Ссылка,
				|	СделкиСКлиентами.Код КАК Номер,
				|	"""" КАК Контрагент,
				|	"""" КАК Организация,
				|	СделкиСКлиентами.ДатаНачала КАК Дата,
				|	КурсыВалютСрезПоследних.Валюта КАК ВалютаВзаиморасчетов,
				|	СделкиСКлиентами.Наименование КАК Наименование,
				|	КурсыВалютСрезПоследних.Курс КАК КурсВзаиморасчетов,
				|	КурсыВалютСрезПоследних.Кратность КАК КратностьВзаиморасчетов
				|ИЗ
				|	Справочник.СделкиСКлиентами КАК СделкиСКлиентами,
				|	РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДок, Валюта = &Валюта) КАК КурсыВалютСрезПоследних
				|ГДЕ
				|	СделкиСКлиентами.Ссылка = &Ссылка");
				Запрос.УстановитьПараметр("Ссылка",  СделкаСсылка);
				Запрос.УстановитьПараметр("ДатаДок", ДанныеИБ.Дата);
				Запрос.УстановитьПараметр("Валюта",  ПараметрыПоУмолчанию.ВалютаВзаиморасчетов);
				
				Выборка = Запрос.Выполнить().Выбрать();
				Если Выборка.Следующий() Тогда
					ЗаполнитьЗначенияСвойств(СтруктураДанныеДоговора, Выборка);
					СтруктураДанныеДоговора.Организация = ДанныеИБ.Организация;
					Если ЕстьРеквизитДанныхИБ(ДанныеИБ, "Контрагент") Тогда
						СтруктураДанныеДоговора.Контрагент = ДанныеИБ.Контрагент;
					Иначе
						СтруктураДанныеДоговора.Контрагент = ПараметрыПоУмолчанию.Контрагент;
					КонецЕсли;
					Если ПараметрыПоУмолчанию.Свойство("РасчетыВУсловныхЕдиницах") Тогда
						СтруктураДанныеДоговора.РасчетыВУсловныхЕдиницах = ПараметрыПоУмолчанию.РасчетыВУсловныхЕдиницах;
					КонецЕсли;
					СтруктураДанныеДоговора.Наименование = ?(ЗначениеЗаполнено(СделкаСсылка.Метаданные().ПредставлениеОбъекта),
						СделкаСсылка.Метаданные().ПредставлениеОбъекта, СделкаСсылка.Метаданные().Синоним)
							+ ?(ЗначениеЗаполнено(Выборка.Номер), " " + Выборка.Номер, "");
					ДоговорЗаполнен = Истина;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	
Показать
5. Prog1S_Alt 22.10.21 10:01 Сейчас в теме
Для чего нужен код:
...
СтруктураДанныеДоговора.Наименование = ?(ЗначениеЗаполнено(СделкаСсылка.Метаданные().ПредставлениеОбъекта),
СделкаСсылка.Метаданные().ПредставлениеОбъекта, СделкаСсылка.Метаданные().Синоним)
+ ?(ЗначениеЗаполнено(Выборка.Номер), " " + Выборка.Номер, "");
...

в БП где идет разбор данной строки?
6. Prog1S_Alt 22.10.21 10:03 Сейчас в теме
И вот этот код тоже:

Наименование = Наименование + Выборка.Наименование
+ " " + ?(ЗначениеЗаполнено(Выборка.Номер), "№" + Выборка.Номер, "")
+ " " + ?(ЗначениеЗаполнено(Выборка.Дата), НСтр("ru = 'от'") + " " + Формат(Выборка.Дата, "ДЛФ=D"), "");
Оставьте свое сообщение

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