Skip to main content

Многодоговорность во входящих документах СБИС СписокXDTO

ПараметрыДоговораXDTO = ?(ТипЗнч(XMLДоговор) = Тип("СписокXDTO"),ПараметрыДоговораИзСпискаXDTO(XMLДоговор),XMLДоговор);
ДатаДоговора = ВычленитьДату(ПараметрыДоговораXDTO.ДатаОсн); 

Прототип.Договор = ITSP_ВернутьЭлементСправочника("CW_ДоговорыПоГрузоперевозкам", 
Новый Структура("НомерДоговора,ДатаДоговора,Наименование,Владелец,Организация,ВалютаДоговора,ВидДоговора",
ПараметрыДоговораXDTO.НомОсн,
ДатаДоговора,
ПараметрыДоговораXDTO.НомОсн+" "+Формат(ДатаДоговора,"ДФ=dd.MM.yy"),
Прототип.Контрагент,
Прототип.Организация,
Прототип.Валюта,
Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком),
СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("НомерДоговора,Владелец,Организация,ВалютаДоговора,ВидДоговора"),Истина); // Поиск по всему, кроме наименования и даты. Мало ли может ошиблись. Это не критично

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

Если НЕ ЗначениеЗаполнено(Прототип.Договор) Тогда
	МассивСообщений.Добавить("Не удалось найти договор "+ПараметрыДоговораXDTO.НомОсн+" от "+Формат(ДатаДоговора,"ДФ=dd.MM.yy")+" с "+Прототип.Контрагент);
	Возврат Неопределено;
КонецЕсли;
&НаСервереБезКонтекста
Функция ПараметрыДоговораИзСпискаXDTO(ОснованияСписокXDTO)
	
	Наименьшее = Неопределено;
	НаименьшееДатаОсн = Неопределено;
	Для каждого С ИЗ ОснованияСписокXDTO Цикл
		Если НаименьшееДатаОсн = Неопределено ИЛИ НаименьшееДатаОсн > С.ДатаОсн Тогда	
			НаименьшееДатаОсн = С.ДатаОсн;
			Наименьшее = С;
		КонецЕсли;
	КонецЦикла;  
	Возврат Наименьшее;    
	
КонецФункции

&НаСервереБезКонтекста
Функция ВернутьНаименьшееЗначениеПоляСписокXDTO(СписокXDTO,Поле) 
	Наименьшее = Неопределено;
	Для каждого С ИЗ СписокXDTO Цикл
		Если Наименьшее <> Неопределено И Наименьшее > С[Поле] Тогда	
			Наименьшее = С[Поле];	
		КонецЕсли;
	КонецЦикла;  
	Возврат Наименьшее;
КонецФункции