Skip to main content

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

 

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

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