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