diff --git a/CHANGELOG.md b/CHANGELOG.md index 652f880..aa12a77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ --- +## 1.3.1.111 (2026-09-03) + +### РК_ЗагрузкаОстатков — договор комиссии 2.5 (#34) + +- Поиск договора `ПередачаНаКомиссию` по партнёру/контрагенту/организации (предпочтительно `КомиссионныеПродажи25`). +- Соглашение не содержит реквизит `Договор`; API не отдаёт `contract_*`. +- Сопоставление и создание документа без договора — ошибка с понятным текстом. + ## 1.3.1.110 (2026-09-02) ### РК_ЗагрузкаОстатков — серии: ГоденДо и заглушки по номенклатуре (#30, #31) diff --git a/VERSION b/VERSION index 823727f..cb98a83 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.1.110 +1.3.1.111 diff --git a/src/ConfigDumpInfo.xml b/src/ConfigDumpInfo.xml index 158f846..69be812 100644 --- a/src/ConfigDumpInfo.xml +++ b/src/ConfigDumpInfo.xml @@ -50,14 +50,14 @@ - + - + @@ -203,7 +203,7 @@ - + diff --git a/src/Configuration.xml b/src/Configuration.xml index afa84f5..a058240 100644 --- a/src/Configuration.xml +++ b/src/Configuration.xml @@ -62,7 +62,7 @@ Role.РК_ОсновнаяРоль - 1.3.1.110 + 1.3.1.111 Language.Русский diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl index 2456af7..21726ff 100644 --- a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl +++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl @@ -240,6 +240,12 @@ Результат.НеСопоставлено = Результат.НеСопоставлено + 1; Продолжить; КонецЕсли; + Если Не ЗначениеЗаполнено(СтрТ.Договор) Тогда + СтрТ.КомментарийСопоставления = "Договор комиссии 2.5 не найден (партнёр: " + + СокрЛП(Строка(СтрТ.Партнер)) + ")"; + Результат.НеСопоставлено = Результат.НеСопоставлено + 1; + Продолжить; + КонецЕсли; Хар = НайтиИлиСоздатьХарактеристику(СтрТ, Ном, РежимТест, Результат); СтрТ.Характеристика = Хар; @@ -700,6 +706,15 @@ Функция СоздатьДокументКомиссии(СтрокиГруппы, ТекстТега) Первая = СтрокиГруппы[0]; + ДоговорШапки = Первая.Договор; + Если Не ЗначениеЗаполнено(ДоговорШапки) Тогда + ДоговорШапки = НайтиДоговорКомиссии2_5(Первая.Партнер, Первая.Контрагент); + КонецЕсли; + Если Не ЗначениеЗаполнено(ДоговорШапки) Тогда + ВызватьИсключение "Договор комиссии 2.5 не заполнен (партнёр: " + + СокрЛП(Строка(Первая.Партнер)) + "). См. #34."; + КонецЕсли; + Док = Документы.ВводОстатковТоваров.СоздатьДокумент(); Док.Дата = ДатаДокументовВвода; Док.Организация = Организация; @@ -707,7 +722,7 @@ Док.СоглашениеСКомиссионером = Первая.Соглашение; Док.Партнер = Первая.Партнер; Док.Контрагент = Первая.Контрагент; - Док.Договор = Первая.Договор; + Док.Договор = ДоговорШапки; Док.Комментарий = ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер)); Док.ОтражатьВОперативномУчете = Истина; Док.ОтражатьСебестоимость = ЕстьСтоимостьВСтроках(СтрокиГруппы); @@ -1160,16 +1175,64 @@ Договор = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(ИмяДог, Истина); КонецЕсли; КонецЕсли; - Если Не ЗначениеЗаполнено(Договор) И ЗначениеЗаполнено(Соглашение) Тогда - Попытка - Договор = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Соглашение, "Договор"); - Исключение - КонецПопытки; + // У СоглашенияСКлиентами нет реквизита Договор (только ИспользуютсяДоговорыКонтрагентов). + // API комиссии не отдаёт contract_* — ищем договор ПередачаНаКомиссию по партнёру/контрагенту. + Если Не ЗначениеЗаполнено(Договор) Тогда + Договор = НайтиДоговорКомиссии2_5(Партнер, Контр); КонецЕсли; СтрТ.Договор = Договор; КонецПроцедуры +// Договор для ввода остатков комиссии 2.5: ПередачаНаКомиссию у партнёра (предпочтительно CP25). +// +Функция НайтиДоговорКомиссии2_5(Партнер, Контрагент) + + Если Не ЗначениеЗаполнено(Партнер) Тогда + Возврат Справочники.ДоговорыКонтрагентов.ПустаяСсылка(); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Д.Ссылка КАК Ссылка + |ИЗ + | Справочник.ДоговорыКонтрагентов КАК Д + |ГДЕ + | НЕ Д.ПометкаУдаления + | И Д.Партнер = &Партнер + | И Д.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию) + | И (&Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) + | ИЛИ Д.Контрагент = &Контрагент + | ИЛИ Д.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)) + | И (&Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) + | ИЛИ Д.Организация = &Организация + | ИЛИ Д.Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)) + |УПОРЯДОЧИТЬ ПО + | Д.КомиссионныеПродажи25 УБЫВ, + | ВЫБОР + | КОГДА &Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) + | И Д.Контрагент = &Контрагент + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ, + | Д.Дата УБЫВ, + | Д.Номер УБЫВ"; + Запрос.УстановитьПараметр("Партнер", Партнер); + Запрос.УстановитьПараметр("Контрагент", + ?(ЗначениеЗаполнено(Контрагент), Контрагент, Справочники.Контрагенты.ПустаяСсылка())); + Запрос.УстановитьПараметр("Организация", + ?(ЗначениеЗаполнено(Организация), Организация, Справочники.Организации.ПустаяСсылка())); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Возврат Выборка.Ссылка; + КонецЕсли; + + Возврат Справочники.ДоговорыКонтрагентов.ПустаяСсылка(); + +КонецФункции + Функция ДатаИзSeriesExpire(СтрокаДаты) Текст = СокрЛП(Строка(СтрокаДаты));