diff --git a/CHANGELOG.md b/CHANGELOG.md index 106eaf2..c843404 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,30 @@ --- +## 1.3.1.60 (2026-08-13) + +### РК_ЗагрузкаОстатков — вкладка созданных документов + +- ТЧ `СозданныеДокументы` и страница **«Документы ввода»**: ссылка, вид (собственные / комиссия 2.5), + склад / соглашение / партнёр, число строк и количество, комментарий, признак теста. +- Заполняется на 3-м этапе (в т.ч. в режиме теста без записи); после создания форма переключается на эту вкладку. + +--- + +## 1.3.1.59 (2026-08-13) + +### РК_ЗагрузкаОстатков — комиссия 2.5 и серии без лишних заглушек + +- ТЧ `ВходящиеСобственныеТовары` (бывш. `ВходящиеДанные`) и `ВходящиеКомиссионныеТовары`. +- Загрузка: `mode=combined` + `mode=commission` (только переданные на комиссию 2.5). +- Сопоставление: серии создаются **только если не найдены** в целевой ИБ. + Заглушки `Перенос_*` — только при флаге **«Создавать заглушки серий»**. +- Документы: собственные (по складу) и `ВводОстатковТоваровПереданныхНаКомиссию2_5` + (по соглашению + партнёру, без склада). Количество, без себестоимости. +- Нужен **ws-rhana ≥ 0.0.0.36** на исходной ИБ. + +--- + ## 1.3.1.58 (2026-08-12) ### РК_ЗагрузкаОстатков — отборы и заполнение входящих данных diff --git a/README.md b/README.md index 059713a..c4b621d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Расширение РАНА для целевой конфигурации **crm3-26** (ИБ `crm3`, сервер `1c-srv.rhana.local`). -Текущая версия: **1.3.1.55** — см. [`VERSION`](VERSION) и `src/Configuration.xml`. +Текущая версия: **1.3.1.60** — см. [`VERSION`](VERSION) и `src/Configuration.xml`. Префикс новых объектов расширения: **`РК_`**. @@ -87,7 +87,7 @@ | `РК_НастройкиПодключенияКВнешнейБазе` | адрес `/hs/transfer`, токен, логин/пароль, таймаут, `ИмяТекущейБазы`, `Активно` | | Менеджер справочника | `ПроверитьСоединение(Источник)`, `СоединениеАктивно(Ссылка)`, `ИмяТекущейИнформационнойБазы()` | | `РК_РабочееПодключениеЧерезАПИ` | константа — текущая рабочая настройка | -| `РК_ЗагрузкаОстатков` | подбор складов / загрузка / сопоставление остатков из исходной ИБ | +| `РК_ЗагрузкаОстатков` | подбор складов/организаций, загрузка собственных и комиссии 2.5, сопоставление, ввод остатков | **Проверка соединения** (форма элемента или любой код): @@ -101,13 +101,13 @@ HTTP-клиент передаёт `IBSession: start` (публикация с повторным использованием сеансов) и `X-Transfer-Token`. -Пара: расширение **`ws-rhana`** на исходной ИБ (≥ 0.0.0.30 для складов/остатков; health — с ранних версий). +Пара: расширение **`ws-rhana`** на исходной ИБ (≥ 0.0.0.36 для комиссии 2.5 и `series_number`; склады/остатки — с 0.0.0.30). ### Обработки и формы | Объект | Назначение | |--------|------------| -| `РК_ЗагрузкаОстатков` | загрузка складских остатков из исходной ИБ через Transfer API | +| `РК_ЗагрузкаОстатков` | загрузка собственных и комиссионных (переданные 2.5) остатков через Transfer API | | `РК_ОбработкаПарнеровКонтрагентов` | работа с партнёрами и контрагентами | | `РК_ФормаНастроекРана` | настройки расширения | | `ЗагрузкаДанныхИзФайла` | доработки загрузки НСИ | diff --git a/VERSION b/VERSION index 882314f..334ea15 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.1.58 +1.3.1.60 diff --git a/src/ConfigDumpInfo.xml b/src/ConfigDumpInfo.xml index dd7ab13..95376d7 100644 --- a/src/ConfigDumpInfo.xml +++ b/src/ConfigDumpInfo.xml @@ -54,44 +54,102 @@ - - - + + + - - - + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Configuration.xml b/src/Configuration.xml index e6cd280..9d49e43 100644 --- a/src/Configuration.xml +++ b/src/Configuration.xml @@ -62,7 +62,7 @@ Role.РК_ОсновнаяРоль - 1.3.1.58 + 1.3.1.60 Language.Русский diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков.xml b/src/DataProcessors/РК_ЗагрузкаОстатков.xml index 96b79ee..f863231 100644 --- a/src/DataProcessors/РК_ЗагрузкаОстатков.xml +++ b/src/DataProcessors/РК_ЗагрузкаОстатков.xml @@ -204,23 +204,57 @@ Auto + + + СоздаватьЗаглушкиСерий + + + ru + Создавать заглушки серий + + + Создавать серии Перенос_* только если в источнике нет серии, а в целевой учёт по сериям обязателен + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + - + 24a13ff5-e077-4c25-bdef-dd12c9dacd5e e4101ca9-7d6b-4045-84c7-eb2df9be9252 - + b55f7c0a-9588-41ac-a6ef-eb42372e89dd d1b3e87d-881a-4515-a9ee-8d747272b0cd - ВходящиеДанные + ВходящиеСобственныеТовары ru - Входящие данные + Собственные товары @@ -1227,6 +1261,46 @@ Auto + + + СерияНомер + + + ru + Номер серии + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + СерияСсылка @@ -1449,6 +1523,2105 @@ + + + + 511d367c-82de-4757-bd5a-42267d161fe0 + a7c91e02-6d44-4b8a-9f1e-3c0d8e5b2a11 + + + d2e64d63-6327-4604-aabb-a5f313bea811 + b8e4f1c3-9a27-4d55-8c6b-1e7f0a4d3b22 + + + + ВходящиеКомиссионныеТовары + + + ru + Комиссионные товары + + + + + DontCheck + + + + + НоменклатураИдентификатор + + + ru + Номенклатура идентификатор + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + НоменклатураНаименование + + + ru + Наименование + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СкладНаименование + + + ru + Склад наименование + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СкладИдентификатор + + + ru + Склад идентификатор + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ЕдИзмИдентификатор + + + ru + Единица идентификатор + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ЕдИзм + + + ru + Ед. изм. + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Серия + + + ru + Серия + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ГТД + + + ru + ГТД + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Количество + + + ru + Количество + + + + + xs:decimal + + 15 + 3 + Any + + + false + + + + false + + false + false + + + false + 0 + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + КоличествоКОтгрузке + + + ru + К отгрузке + + + + + xs:decimal + + 15 + 3 + Any + + + false + + + + false + + false + false + + + false + 0 + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + КоличествоОрганизации + + + ru + Кол. организации + + + + + xs:decimal + + 15 + 3 + Any + + + false + + + + false + + false + false + + + false + 0 + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Артикул + + + ru + Артикул + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + НоменклатураКод + + + ru + Код + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ХарактеристикаНаименование + + + ru + Характеристика + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ХарактеристикаИдентификатор + + + ru + Характеристика идентификатор + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СерияИдентификатор + + + ru + Серия идентификатор + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ГТДИдентификатор + + + ru + ГТД идентификатор + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ВидНоменклатурыНаименование + + + ru + Вид номенклатуры + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ВидНоменклатурыИдентификатор + + + ru + Вид номенклатуры идентификатор + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ПолитикаСерии + + + ru + Политика серии + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ПолитикаХарактеристик + + + ru + Политика характеристик + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ОрганизацияНаименование + + + ru + Организация + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ОрганизацияИдентификатор + + + ru + Организация идентификатор + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Номенклатура + + + ru + Номенклатура + + + + + 190a7469-3325-4d33-b5ec-28a63ac83b06 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Склад + + + ru + Склад + + + + + e63fc7d1-3d01-4fbb-8cbe-9d4bf8fe2126 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Характеристика + + + ru + Характеристика (цель) + + + + + 89c162bd-68ef-4693-a4a8-19238fa23c62 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СерияНомер + + + ru + Номер серии + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СерияСсылка + + + ru + Серия (цель) + + + + + 2e2282a7-eada-4329-b569-8234e8d09040 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + НомерГТДСсылка + + + ru + Номер ГТД (цель) + + + + + bb862a21-77a7-4106-a5a5-a08f8d53a73a + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Сопоставлено + + + ru + Сопоставлено + + + + + xs:boolean + + false + + + + false + + false + false + + + false + false + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + КомментарийСопоставления + + + ru + Комментарий сопоставления + + + + + xs:string + + 500 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ДокументВвода + + + ru + Документ ввода + + + + + c3645cba-4207-4549-8344-987a59836dd4 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ЗагруженоВДокумент + + + ru + Загружено в документ + + + + + xs:boolean + + false + + + + false + + false + false + + + false + false + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СоглашениеНаименование + + + ru + Соглашение + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СоглашениеИдентификатор + + + ru + Соглашение идентификатор + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ПартнерНаименование + + + ru + Партнер / комиссионер + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ПартнерИдентификатор + + + ru + Партнер идентификатор + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + КонтрагентНаименование + + + ru + Контрагент + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + КонтрагентИдентификатор + + + ru + Контрагент идентификатор + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ДоговорНаименование + + + ru + Договор + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ДоговорИдентификатор + + + ru + Договор идентификатор + + + + + v8:UUID + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Соглашение + + + ru + Соглашение (цель) + + + + + 757c1970-be45-4fff-8f8b-19eac6de058f + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Партнер + + + ru + Партнер (цель) + + + + + 8f8a65b4-94c4-4794-b3e2-800d18d503ca + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Контрагент + + + ru + Контрагент (цель) + + + + + 77cb1448-7b83-44c4-bbf7-e724077c459b + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Договор + + + ru + Договор (цель) + + + + + 7d554a6c-0604-4a11-acd2-e9becfb81df1 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + + + + d4f9b2c5-8e30-4fa2-9b67-3c1d0a5e7f29 + e5a0c3d6-9f41-40b3-8c78-4d2e1b6f803a + + + f6b1d4e7-0a52-41c4-9d89-5e3f2c70914b + a7c2e5f8-1b63-42d5-8e9a-6f403d81a25c + + + + СозданныеДокументы + + + ru + Документы ввода + + + Документы, созданные на 3-м этапе, для контроля + + DontCheck + + + + + Документ + + + ru + Документ + + + + + c3645cba-4207-4549-8344-987a59836dd4 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ВидОстатков + + + ru + Вид остатков + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Склад + + + ru + Склад + + + + + e63fc7d1-3d01-4fbb-8cbe-9d4bf8fe2126 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Соглашение + + + ru + Соглашение + + + + + 757c1970-be45-4fff-8f8b-19eac6de058f + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Партнер + + + ru + Партнер + + + + + 8f8a65b4-94c4-4794-b3e2-800d18d503ca + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + КоличествоСтрок + + + ru + Строк + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + false + + + + false + + false + false + + + false + 0 + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + КоличествоТоваров + + + ru + Количество + + + + + xs:decimal + + 15 + 3 + Any + + + false + + + + false + + false + false + + + false + 0 + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Комментарий + + + ru + Комментарий + + + + + xs:string + + 250 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ЭтоТест + + + ru + Тест + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + +
Форма
ПодборСкладов
diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl index b24c5eb..4e58e81 100644 --- a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl +++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl @@ -3,12 +3,12 @@ #Область ПрограммныйИнтерфейс -// Заполняет ТЧ ВходящиеДанные строками остатков Transfer API (mode=combined по умолчанию). +// Заполняет ТЧ ВходящиеСобственныеТовары строками остатков Transfer API (mode=combined по умолчанию). // -Процедура ЗаполнитьВходящиеДанныеИзОтветаОстатков(ОтветAPI, ОчищатьПередЗаполнением = Истина) Экспорт +Процедура ЗаполнитьВходящиеСобственныеТоварыИзОтветаОстатков(ОтветAPI, ОчищатьПередЗаполнением = Истина) Экспорт Если ОчищатьПередЗаполнением Тогда - ВходящиеДанные.Очистить(); + ВходящиеСобственныеТовары.Очистить(); КонецЕсли; СтрокиОтвета = Неопределено; @@ -20,14 +20,46 @@ КонецЕсли; Для Каждого СтрокаAPI Из СтрокиОтвета Цикл - НовСтр = ВходящиеДанные.Добавить(); + НовСтр = ВходящиеСобственныеТовары.Добавить(); ЗаполнитьСтрокуВходящихДанныхИзAPI(НовСтр, СтрокаAPI); КонецЦикла; КонецПроцедуры -// Сопоставление строк ТЧ с НСИ целевой ИБ + создание серий-заглушек при необходимости. -// Алгоритм — по логике scripts/generate_balances_apply_bsl.py (артикул/GUID/код/имя; серии Перенос_*). +// Заполняет ТЧ ВходящиеКомиссионныеТовары остатками mode=commission (переданные 2.5). +// +Процедура ЗаполнитьВходящиеКомиссионныеТоварыИзОтветаОстатков(ОтветAPI, ОчищатьПередЗаполнением = Истина) Экспорт + + Если ОчищатьПередЗаполнением Тогда + ВходящиеКомиссионныеТовары.Очистить(); + КонецЕсли; + + СтрокиОтвета = Неопределено; + Если ТипЗнч(ОтветAPI) = Тип("Структура") Или ТипЗнч(ОтветAPI) = Тип("Соответствие") Тогда + СтрокиОтвета = ЗначениеСвойства(ОтветAPI, "rows", Неопределено); + КонецЕсли; + Если ТипЗнч(СтрокиОтвета) <> Тип("Массив") Тогда + Возврат; + КонецЕсли; + + Для Каждого СтрокаAPI Из СтрокиОтвета Цикл + НовСтр = ВходящиеКомиссионныеТовары.Добавить(); + ЗаполнитьСтрокуВходящихДанныхИзAPI(НовСтр, СтрокаAPI); + НовСтр.Количество = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_commission", + ЗначениеСвойства(СтрокаAPI, "qty_org", НовСтр.Количество)), 0); + НовСтр.КоличествоОрганизации = НовСтр.Количество; + НовСтр.СоглашениеИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "agreement_guid", "")); + НовСтр.СоглашениеНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "agreement_name", ""))); + НовСтр.ПартнерИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "partner_guid", "")); + НовСтр.ПартнерНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "partner_name", ""))); + НовСтр.КонтрагентИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "contractor_guid", "")); + НовСтр.КонтрагентНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "contractor_name", ""))); + КонецЦикла; + +КонецПроцедуры + +// Сопоставление строк ТЧ с НСИ целевой ИБ. +// Серии создаются только если не найдены; заглушки Перенос_* — только при СоздаватьЗаглушкиСерий. // // Параметры: // РежимТест - Булево - Истина: только поиск, без создания серий/характеристик @@ -35,7 +67,7 @@ // Возвращаемое значение: // Структура - Сопоставлено, НеСопоставлено, СозданоСерий, СозданоХарактеристик // -Функция СопоставитьВходящиеДанные(РежимТест = Истина) Экспорт +Функция СопоставитьВходящиеСобственныеТовары(РежимТест = Истина) Экспорт Результат = Новый Структура; Результат.Вставить("Сопоставлено", 0); @@ -51,7 +83,7 @@ КэшТребуетсяСерия = Новый Соответствие; КэшСерий = Новый Соответствие; - Для Каждого СтрТ Из ВходящиеДанные Цикл + Для Каждого СтрТ Из ВходящиеСобственныеТовары Цикл СтрТ.Сопоставлено = Ложь; СтрТ.КомментарийСопоставления = ""; @@ -83,24 +115,18 @@ Сер = НайтиИлиСоздатьСерию(СтрТ, Ном, СкладЦель, СуффиксДатыСер, РежимТест, КэшТребуетсяСерия, КэшСерий, Результат); СтрТ.СерияСсылка = Сер; - - Если ЗначениеЗаполнено(СтрТ.ГТД) Тогда - КодГТД = СокрЛП(СтрТ.ГТД); - СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоКоду(КодГТД); - Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда - СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоРеквизиту("РегистрационныйНомер", КодГТД); - КонецЕсли; - Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда - СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоНаименованию(КодГТД, Истина); - КонецЕсли; - Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда - СсылкаГТД = СсылкаПоUUID(Справочники.НомераГТД, СтрТ.ГТДИдентификатор); - Если ЗначениеЗаполнено(СсылкаГТД) И ОбщегоНазначения.СсылкаСуществует(СсылкаГТД) Тогда - СтрТ.НомерГТДСсылка = СсылкаГТД; - КонецЕсли; + Если НоменклатураИспользуетСерии(Ном, КэшТребуетсяСерия) И Не ЗначениеЗаполнено(Сер) Тогда + Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Или СтрТ.КомментарийСопоставления = "OK" Тогда + СтрТ.КомментарийСопоставления = "Серия не найдена" + + ?(РежимТест, " (тест)", "") + + ?(СоздаватьЗаглушкиСерий, "", "; заглушки выключены"); КонецЕсли; + Результат.НеСопоставлено = Результат.НеСопоставлено + 1; + Продолжить; КонецЕсли; + ЗаполнитьНомерГТДСтроки(СтрТ); + СтрТ.Сопоставлено = Истина; Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Тогда СтрТ.КомментарийСопоставления = "OK"; @@ -113,21 +139,116 @@ КонецФункции -// Создание документов ВводОстатковТоваров по сопоставленным строкам (1 документ на склад). +// Сопоставление комиссионных строк (переданные 2.5): соглашение, партнёр, контрагент, договор. +// Склад не обязателен. Серии — только существующие или созданные из исходных данных. +// +Функция СопоставитьВходящиеКомиссионныеТовары(РежимТест = Истина) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Сопоставлено", 0); + Результат.Вставить("НеСопоставлено", 0); + Результат.Вставить("СозданоСерий", 0); + Результат.Вставить("СозданоХарактеристик", 0); + + СуффиксДатыСер = Формат(?(ЗначениеЗаполнено(ДатаДокументовВвода), ДатаДокументовВвода, ДатаОстатков), "ДФ=yyyyMMdd"); + Если ПустаяСтрока(СуффиксДатыСер) Тогда + СуффиксДатыСер = Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd"); + КонецЕсли; + + КэшТребуетсяСерия = Новый Соответствие; + КэшСерий = Новый Соответствие; + + Для Каждого СтрТ Из ВходящиеКомиссионныеТовары Цикл + + СтрТ.Сопоставлено = Ложь; + СтрТ.КомментарийСопоставления = ""; + СтрТ.Номенклатура = Справочники.Номенклатура.ПустаяСсылка(); + СтрТ.Склад = Справочники.Склады.ПустаяСсылка(); + СтрТ.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(); + СтрТ.СерияСсылка = Справочники.СерииНоменклатуры.ПустаяСсылка(); + СтрТ.НомерГТДСсылка = Справочники.НомераГТД.ПустаяСсылка(); + СтрТ.Соглашение = Справочники.СоглашенияСКлиентами.ПустаяСсылка(); + СтрТ.Партнер = Справочники.Партнеры.ПустаяСсылка(); + СтрТ.Контрагент = Справочники.Контрагенты.ПустаяСсылка(); + СтрТ.Договор = Справочники.ДоговорыКонтрагентов.ПустаяСсылка(); + + Ном = НайтиНоменклатуруСтроки(СтрТ); + Если Не ЗначениеЗаполнено(Ном) Тогда + СтрТ.КомментарийСопоставления = "Номенклатура не найдена"; + Результат.НеСопоставлено = Результат.НеСопоставлено + 1; + Продолжить; + КонецЕсли; + СтрТ.Номенклатура = Ном; + + СкладЦель = НайтиСкладСтроки(СтрТ); + Если ЗначениеЗаполнено(СкладЦель) Тогда + СтрТ.Склад = СкладЦель; + КонецЕсли; + + Согл = НайтиСоглашениеСтроки(СтрТ); + Если Не ЗначениеЗаполнено(Согл) Тогда + СтрТ.КомментарийСопоставления = "Соглашение не найдено"; + Результат.НеСопоставлено = Результат.НеСопоставлено + 1; + Продолжить; + КонецЕсли; + СтрТ.Соглашение = Согл; + + ЗаполнитьПартнераКонтрагентаДоговорСтроки(СтрТ, Согл); + Если Не ЗначениеЗаполнено(СтрТ.Партнер) Тогда + СтрТ.КомментарийСопоставления = "Партнер / комиссионер не найден"; + Результат.НеСопоставлено = Результат.НеСопоставлено + 1; + Продолжить; + КонецЕсли; + + Хар = НайтиИлиСоздатьХарактеристику(СтрТ, Ном, РежимТест, Результат); + СтрТ.Характеристика = Хар; + + Сер = НайтиИлиСоздатьСерию(СтрТ, Ном, СтрТ.Склад, СуффиксДатыСер, РежимТест, + КэшТребуетсяСерия, КэшСерий, Результат); + СтрТ.СерияСсылка = Сер; + Если НоменклатураИспользуетСерии(Ном, КэшТребуетсяСерия) И Не ЗначениеЗаполнено(Сер) Тогда + Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Или СтрТ.КомментарийСопоставления = "OK" Тогда + СтрТ.КомментарийСопоставления = "Серия не найдена" + + ?(РежимТест, " (тест)", "") + + ?(СоздаватьЗаглушкиСерий, "", "; заглушки выключены"); + КонецЕсли; + Результат.НеСопоставлено = Результат.НеСопоставлено + 1; + Продолжить; + КонецЕсли; + + ЗаполнитьНомерГТДСтроки(СтрТ); + + СтрТ.Сопоставлено = Истина; + Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Тогда + СтрТ.КомментарийСопоставления = "OK"; + КонецЕсли; + Результат.Сопоставлено = Результат.Сопоставлено + 1; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Создание документов ВводОстатковТоваров по сопоставленным строкам. +// Собственные — 1 документ на склад; комиссия 2.5 — 1 документ на соглашение+партнёра (без склада). // Себестоимость не заполняется (нет данных в API) — только оперативный учёт количества. // // Параметры: // РежимТест - Булево - только подсчёт без записи // // Возвращаемое значение: -// Структура - СозданоДокументов, УдаленоДокументов, СтрокВДокументах, Пропущено, Ошибок, ТекстТега +// Структура - СозданоДокументов, СозданоДокументовКомиссии, УдаленоДокументов, +// СтрокВДокументах, СтрокКомиссии, Пропущено, Ошибок, ТекстТега // Функция СоздатьДокументыВводаОстатков(РежимТест = Истина) Экспорт Результат = Новый Структура; Результат.Вставить("СозданоДокументов", 0); + Результат.Вставить("СозданоДокументовКомиссии", 0); Результат.Вставить("УдаленоДокументов", 0); Результат.Вставить("СтрокВДокументах", 0); + Результат.Вставить("СтрокКомиссии", 0); Результат.Вставить("Пропущено", 0); Результат.Вставить("Ошибок", 0); Результат.Вставить("ТекстТега", ""); @@ -142,12 +263,13 @@ ТекстТега = ТегКомментарияДокументов(); Результат.ТекстТега = ТекстТега; - СтрокиПоСкладу = СгруппироватьСопоставленныеСтрокиПоСкладу(); - Если СтрокиПоСкладу.Количество() = 0 Тогда - Возврат Результат; - КонецЕсли; + СозданныеДокументы.Очистить(); - Если ПерезаписатьДокументы И Не РежимТест Тогда + СтрокиПоСкладу = СгруппироватьСопоставленныеСтрокиПоСкладу(); + СтрокиКомиссии = СгруппироватьСопоставленныеСтрокиКомиссии(); + + Если ПерезаписатьДокументы И Не РежимТест + И (СтрокиПоСкладу.Количество() > 0 Или СтрокиКомиссии.Количество() > 0) Тогда Результат.УдаленоДокументов = УдалитьПрежниеДокументыВолны(ТекстТега); КонецЕсли; @@ -163,6 +285,8 @@ Если РежимТест Тогда Результат.СозданоДокументов = Результат.СозданоДокументов + 1; Результат.СтрокВДокументах = Результат.СтрокВДокументах + СтрокиСклада.Количество(); + ДобавитьВСозданныеДокументы(Неопределено, "Собственные", СкладДок, + Неопределено, Неопределено, СтрокиСклада, ТекстТега + ", склад " + СокрЛП(Строка(СкладДок)), Истина); Продолжить; КонецЕсли; @@ -174,6 +298,43 @@ СтрТ.ДокументВвода = Док.Ссылка; СтрТ.ЗагруженоВДокумент = Истина; КонецЦикла; + ДобавитьВСозданныеДокументы(Док.Ссылка, "Собственные", СкладДок, + Неопределено, Неопределено, СтрокиСклада, Док.Комментарий, Ложь); + КонецЕсли; + Исключение + Результат.Ошибок = Результат.Ошибок + 1; + КонецПопытки; + + КонецЦикла; + + Для Каждого ЭлементГруппы Из СтрокиКомиссии Цикл + + СтрокиГруппы = ЭлементГруппы.Значение; + Если СтрокиГруппы.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + Попытка + Если РежимТест Тогда + Результат.СозданоДокументовКомиссии = Результат.СозданоДокументовКомиссии + 1; + Результат.СтрокКомиссии = Результат.СтрокКомиссии + СтрокиГруппы.Количество(); + Первая = СтрокиГруппы[0]; + ДобавитьВСозданныеДокументы(Неопределено, "Комиссия 2.5", Неопределено, + Первая.Соглашение, Первая.Партнер, СтрокиГруппы, + ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер)), Истина); + Продолжить; + КонецЕсли; + + Док = СоздатьДокументКомиссии(СтрокиГруппы, ТекстТега); + Если ЗначениеЗаполнено(Док) Тогда + Результат.СозданоДокументовКомиссии = Результат.СозданоДокументовКомиссии + 1; + Результат.СтрокКомиссии = Результат.СтрокКомиссии + Док.Товары.Количество(); + Для Каждого СтрТ Из СтрокиГруппы Цикл + СтрТ.ДокументВвода = Док.Ссылка; + СтрТ.ЗагруженоВДокумент = Истина; + КонецЦикла; + ДобавитьВСозданныеДокументы(Док.Ссылка, "Комиссия 2.5", Неопределено, + Док.СоглашениеСКомиссионером, Док.Партнер, СтрокиГруппы, Док.Комментарий, Ложь); КонецЕсли; Исключение Результат.Ошибок = Результат.Ошибок + 1; @@ -189,6 +350,33 @@ #Область СлужебныеПроцедурыИФункции +Процедура ДобавитьВСозданныеДокументы(ДокументСсылка, ВидОстатков, Склад, Соглашение, Партнер, СтрокиТоваров, Комментарий, ЭтоТест) + + НовСтр = СозданныеДокументы.Добавить(); + Если ЗначениеЗаполнено(ДокументСсылка) Тогда + НовСтр.Документ = ДокументСсылка; + КонецЕсли; + НовСтр.ВидОстатков = ВидОстатков; + Если ЗначениеЗаполнено(Склад) Тогда + НовСтр.Склад = Склад; + КонецЕсли; + Если ЗначениеЗаполнено(Соглашение) Тогда + НовСтр.Соглашение = Соглашение; + КонецЕсли; + Если ЗначениеЗаполнено(Партнер) Тогда + НовСтр.Партнер = Партнер; + КонецЕсли; + НовСтр.КоличествоСтрок = СтрокиТоваров.Количество(); + Колво = 0; + Для Каждого СтрТ Из СтрокиТоваров Цикл + Колво = Колво + СтрТ.Количество; + КонецЦикла; + НовСтр.КоличествоТоваров = Колво; + НовСтр.Комментарий = Комментарий; + НовСтр.ЭтоТест = ЭтоТест; + +КонецПроцедуры + Функция ТегКомментарияДокументов() Суффикс = Формат(ДатаДокументовВвода, "ДФ=yyyyMMdd"); @@ -202,7 +390,7 @@ Функция СгруппироватьСопоставленныеСтрокиПоСкладу() Группы = Новый Соответствие; - Для Каждого СтрТ Из ВходящиеДанные Цикл + Для Каждого СтрТ Из ВходящиеСобственныеТовары Цикл Если Не СтрТ.Сопоставлено Тогда Продолжить; КонецЕсли; @@ -223,7 +411,7 @@ // Переключить ключи на ссылки складов для удобства обхода. Результат = Новый Соответствие; - Для Каждого СтрТ Из ВходящиеДанные Цикл + Для Каждого СтрТ Из ВходящиеСобственныеТовары Цикл Если Не СтрТ.Сопоставлено Или Не ЗначениеЗаполнено(СтрТ.Склад) Тогда Продолжить; КонецЕсли; @@ -237,6 +425,33 @@ КонецФункции +Функция СгруппироватьСопоставленныеСтрокиКомиссии() + + Группы = Новый Соответствие; + Для Каждого СтрТ Из ВходящиеКомиссионныеТовары Цикл + Если Не СтрТ.Сопоставлено Тогда + Продолжить; + КонецЕсли; + Если Не ЗначениеЗаполнено(СтрТ.Соглашение) Или Не ЗначениеЗаполнено(СтрТ.Номенклатура) Тогда + Продолжить; + КонецЕсли; + Если СтрТ.Количество <= 0 Тогда + Продолжить; + КонецЕсли; + КлючГруппы = Строка(СтрТ.Соглашение.УникальныйИдентификатор()) + + "|" + Строка(СтрТ.Партнер.УникальныйИдентификатор()) + + "|" + Строка(СтрТ.Договор.УникальныйИдентификатор()); + СтрокиГруппы = Группы.Получить(КлючГруппы); + Если СтрокиГруппы = Неопределено Тогда + СтрокиГруппы = Новый Массив; + Группы.Вставить(КлючГруппы, СтрокиГруппы); + КонецЕсли; + СтрокиГруппы.Добавить(СтрТ); + КонецЦикла; + Возврат Группы; + +КонецФункции + Функция УдалитьПрежниеДокументыВолны(ТекстТега) Удалено = 0; @@ -251,7 +466,9 @@ | И НЕ Ввод.Проведен | И Ввод.Организация = &Организация | И Ввод.Комментарий ПОДОБНО &Тег - | И Ввод.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВводОстатковСобственныхТоваров)"; + | И Ввод.ХозяйственнаяОперация В ( + | ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВводОстатковСобственныхТоваров), + | ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВводОстатковТоваровПереданныхНаКомиссию2_5))"; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Тег", "%" + ТекстТега + "%"); @@ -301,29 +518,7 @@ КонецПопытки; Для Каждого СтрТ Из СтрокиСклада Цикл - НовСтр = Док.Товары.Добавить(); - НовСтр.Номенклатура = СтрТ.Номенклатура; - НовСтр.Характеристика = СтрТ.Характеристика; - НовСтр.Серия = СтрТ.СерияСсылка; - НовСтр.Количество = СтрТ.Количество; - НовСтр.КоличествоУпаковок = СтрТ.Количество; - НовСтр.Цена = 0; - НовСтр.Сумма = 0; - Попытка - НовСтр.СтавкаНДС = СтрТ.Номенклатура.СтавкаНДС; - Исключение - КонецПопытки; - Если ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда - НовСтр.НомерГТД = СтрТ.НомерГТДСсылка; - КонецЕсли; - Если ЗначениеЗаполнено(СтрТ.СерияСсылка) Тогда - СтрСер = Док.Серии.Добавить(); - СтрСер.Номенклатура = НовСтр.Номенклатура; - СтрСер.Характеристика = НовСтр.Характеристика; - СтрСер.Серия = СтрТ.СерияСсылка; - СтрСер.Количество = НовСтр.Количество; - СтрСер.КоличествоУпаковок = НовСтр.Количество; - КонецЕсли; + ДобавитьСтрокуТоваровДокументаВвода(Док, СтрТ); КонецЦикла; Если Док.Товары.Количество() = 0 Тогда @@ -343,6 +538,86 @@ КонецФункции +Функция СоздатьДокументКомиссии(СтрокиГруппы, ТекстТега) + + Первая = СтрокиГруппы[0]; + Док = Документы.ВводОстатковТоваров.СоздатьДокумент(); + Док.Дата = ДатаДокументовВвода; + Док.Организация = Организация; + Док.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВводОстатковТоваровПереданныхНаКомиссию2_5; + Док.СоглашениеСКомиссионером = Первая.Соглашение; + Док.Партнер = Первая.Партнер; + Док.Контрагент = Первая.Контрагент; + Док.Договор = Первая.Договор; + Док.Комментарий = ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер)); + Док.ОтражатьВОперативномУчете = Истина; + Док.ОтражатьСебестоимость = Ложь; + Док.ЦенаВключаетНДС = Ложь; + + Попытка + Док.Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация); + Исключение + Док.Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); + КонецПопытки; + + Если Не ЗначениеЗаполнено(Док.НалогообложениеНДС) Тогда + Док.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС; + КонецЕсли; + Попытка + ПараметрыНДС = Документы.ВводОстатковТоваров.ИнициализироватьПараметрыВидовДеятельностиНДС(Док); + УчетНДСУП.ЗаполнитьВидДеятельностиНДС(Док.ВидДеятельностиНДС, ПараметрыНДС); + Исключение + КонецПопытки; + + Для Каждого СтрТ Из СтрокиГруппы Цикл + ДобавитьСтрокуТоваровДокументаВвода(Док, СтрТ); + КонецЦикла; + + Если Док.Товары.Количество() = 0 Тогда + Возврат Документы.ВводОстатковТоваров.ПустаяСсылка(); + КонецЕсли; + + ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(Док, "Товары"); + Попытка + ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(Док, Документы.ВводОстатковТоваров); + НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Док, ПараметрыУказанияСерий); + Исключение + КонецПопытки; + + Док.ОбменДанными.Загрузка = Ложь; + Док.Записать(РежимЗаписиДокумента.Запись); + Возврат Док; + +КонецФункции + +Процедура ДобавитьСтрокуТоваровДокументаВвода(Док, СтрТ) + + НовСтр = Док.Товары.Добавить(); + НовСтр.Номенклатура = СтрТ.Номенклатура; + НовСтр.Характеристика = СтрТ.Характеристика; + НовСтр.Серия = СтрТ.СерияСсылка; + НовСтр.Количество = СтрТ.Количество; + НовСтр.КоличествоУпаковок = СтрТ.Количество; + НовСтр.Цена = 0; + НовСтр.Сумма = 0; + Попытка + НовСтр.СтавкаНДС = СтрТ.Номенклатура.СтавкаНДС; + Исключение + КонецПопытки; + Если ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда + НовСтр.НомерГТД = СтрТ.НомерГТДСсылка; + КонецЕсли; + Если ЗначениеЗаполнено(СтрТ.СерияСсылка) Тогда + СтрСер = Док.Серии.Добавить(); + СтрСер.Номенклатура = НовСтр.Номенклатура; + СтрСер.Характеристика = НовСтр.Характеристика; + СтрСер.Серия = СтрТ.СерияСсылка; + СтрСер.Количество = НовСтр.Количество; + СтрСер.КоличествоУпаковок = НовСтр.Количество; + КонецЕсли; + +КонецПроцедуры + Процедура ЗаполнитьСтрокуВходящихДанныхИзAPI(НовСтр, СтрокаAPI) НовСтр.НоменклатураИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "nomenclature_guid", "")); @@ -364,6 +639,10 @@ НовСтр.СерияИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "series_guid", "")); НовСтр.Серия = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "series_name", ""))); + НовСтр.СерияНомер = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "series_number", ""))); + Если ПустаяСтрока(НовСтр.Серия) И Не ПустаяСтрока(НовСтр.СерияНомер) Тогда + НовСтр.Серия = НовСтр.СерияНомер; + КонецЕсли; НовСтр.ГТДИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "gtd_guid", "")); НовСтр.ГТД = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "gtd_name", ""))); @@ -492,44 +771,169 @@ КонецФункции +Функция НоменклатураИспользуетСерии(Ном, КэшТребуетсяСерия) + + КлючТребСер = Строка(Ном.УникальныйИдентификатор()); + ТребуетсяСерия = КэшТребуетсяСерия.Получить(КлючТребСер); + Если ТребуетсяСерия <> Неопределено Тогда + Возврат ТребуетсяСерия; + КонецЕсли; + ТребуетсяСерия = Ложь; + Попытка + ТребуетсяСерия = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры.ИспользоватьСерии") = Истина; + Исключение + Попытка + ТребуетсяСерия = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры").ИспользоватьСерии; + Исключение + КонецПопытки; + КонецПопытки; + КэшТребуетсяСерия.Вставить(КлючТребСер, ТребуетсяСерия); + Возврат ТребуетсяСерия; + +КонецФункции + +Процедура ЗаполнитьНомерГТДСтроки(СтрТ) + + Если Не ЗначениеЗаполнено(СтрТ.ГТД) Тогда + Возврат; + КонецЕсли; + КодГТД = СокрЛП(СтрТ.ГТД); + СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоКоду(КодГТД); + Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда + СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоРеквизиту("РегистрационныйНомер", КодГТД); + КонецЕсли; + Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда + СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоНаименованию(КодГТД, Истина); + КонецЕсли; + Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда + СсылкаГТД = СсылкаПоUUID(Справочники.НомераГТД, СтрТ.ГТДИдентификатор); + Если ЗначениеЗаполнено(СсылкаГТД) И ОбщегоНазначения.СсылкаСуществует(СсылкаГТД) Тогда + СтрТ.НомерГТДСсылка = СсылкаГТД; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция НайтиСоглашениеСтроки(СтрТ) + + Согл = СсылкаПоUUID(Справочники.СоглашенияСКлиентами, СтрТ.СоглашениеИдентификатор); + Если ЗначениеЗаполнено(Согл) И ОбщегоНазначения.СсылкаСуществует(Согл) Тогда + Возврат Согл; + КонецЕсли; + ИмяСогл = СокрЛП(СтрТ.СоглашениеНаименование); + Если ЗначениеЗаполнено(ИмяСогл) Тогда + Возврат Справочники.СоглашенияСКлиентами.НайтиПоНаименованию(ИмяСогл, Истина); + КонецЕсли; + Возврат Справочники.СоглашенияСКлиентами.ПустаяСсылка(); + +КонецФункции + +Процедура ЗаполнитьПартнераКонтрагентаДоговорСтроки(СтрТ, Соглашение) + + Партнер = СсылкаПоUUID(Справочники.Партнеры, СтрТ.ПартнерИдентификатор); + Если Не (ЗначениеЗаполнено(Партнер) И ОбщегоНазначения.СсылкаСуществует(Партнер)) Тогда + Партнер = Справочники.Партнеры.ПустаяСсылка(); + ИмяПарт = СокрЛП(СтрТ.ПартнерНаименование); + Если ЗначениеЗаполнено(ИмяПарт) Тогда + Партнер = Справочники.Партнеры.НайтиПоНаименованию(ИмяПарт, Истина); + КонецЕсли; + КонецЕсли; + Если Не ЗначениеЗаполнено(Партнер) И ЗначениеЗаполнено(Соглашение) Тогда + Попытка + Партнер = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Соглашение, "Партнер"); + Исключение + КонецПопытки; + КонецЕсли; + СтрТ.Партнер = Партнер; + + Контр = СсылкаПоUUID(Справочники.Контрагенты, СтрТ.КонтрагентИдентификатор); + Если Не (ЗначениеЗаполнено(Контр) И ОбщегоНазначения.СсылкаСуществует(Контр)) Тогда + Контр = Справочники.Контрагенты.ПустаяСсылка(); + ИмяКонтр = СокрЛП(СтрТ.КонтрагентНаименование); + Если ЗначениеЗаполнено(ИмяКонтр) Тогда + Контр = Справочники.Контрагенты.НайтиПоНаименованию(ИмяКонтр, Истина); + КонецЕсли; + КонецЕсли; + Если Не ЗначениеЗаполнено(Контр) И ЗначениеЗаполнено(Соглашение) Тогда + Попытка + Контр = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Соглашение, "Контрагент"); + Исключение + КонецПопытки; + КонецЕсли; + Если Не ЗначениеЗаполнено(Контр) И ЗначениеЗаполнено(Партнер) Тогда + Попытка + Контр = ПартнерыИКонтрагенты.ПолучитьКонтрагентаПартнераПоУмолчанию(Партнер); + Исключение + КонецПопытки; + КонецЕсли; + Если Не ЗначениеЗаполнено(Контр) И ЗначениеЗаполнено(Партнер) Тогда + ЗапросК = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | К.Ссылка КАК Ссылка + |ИЗ + | Справочник.Контрагенты КАК К + |ГДЕ + | К.Партнер = &Партнер + | И НЕ К.ПометкаУдаления"); + ЗапросК.УстановитьПараметр("Партнер", Партнер); + ВыбК = ЗапросК.Выполнить().Выбрать(); + Если ВыбК.Следующий() Тогда + Контр = ВыбК.Ссылка; + КонецЕсли; + КонецЕсли; + СтрТ.Контрагент = Контр; + + Договор = СсылкаПоUUID(Справочники.ДоговорыКонтрагентов, СтрТ.ДоговорИдентификатор); + Если Не (ЗначениеЗаполнено(Договор) И ОбщегоНазначения.СсылкаСуществует(Договор)) Тогда + Договор = Справочники.ДоговорыКонтрагентов.ПустаяСсылка(); + ИмяДог = СокрЛП(СтрТ.ДоговорНаименование); + Если ЗначениеЗаполнено(ИмяДог) Тогда + Договор = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(ИмяДог, Истина); + КонецЕсли; + КонецЕсли; + Если Не ЗначениеЗаполнено(Договор) И ЗначениеЗаполнено(Соглашение) Тогда + Попытка + Договор = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Соглашение, "Договор"); + Исключение + КонецПопытки; + КонецЕсли; + СтрТ.Договор = Договор; + +КонецПроцедуры + Функция НайтиИлиСоздатьСерию(СтрТ, Ном, СкладЦель, СуффиксДатыСер, РежимТест, КэшТребуетсяСерия, КэшСерий, Результат) Сер = Справочники.СерииНоменклатуры.ПустаяСсылка(); ВидНом = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры"); - - КлючТребСер = Строка(Ном.УникальныйИдентификатор()); - ТребуетсяСерия = КэшТребуетсяСерия.Получить(КлючТребСер); - Если ТребуетсяСерия = Неопределено Тогда - ТребуетсяСерия = Ложь; - Попытка - ТребуетсяСерия = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры.ИспользоватьСерии") = Истина; - Исключение - Попытка - ТребуетсяСерия = ВидНом.ИспользоватьСерии; - Исключение - КонецПопытки; - КонецПопытки; - КэшТребуетсяСерия.Вставить(КлючТребСер, ТребуетсяСерия); - КонецЕсли; + ТребуетсяСерия = НоменклатураИспользуетСерии(Ном, КэшТребуетсяСерия); ИмяСерии = СокрЛП(СтрТ.Серия); - Если Не ЗначениеЗаполнено(ИмяСерии) И ТребуетсяСерия Тогда - КодСклЗагл = ""; - Попытка - КодСклЗагл = СокрЛП(Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СкладЦель, "Код"))); - Исключение - КодСклЗагл = ""; - КонецПопытки; - Если ПустаяСтрока(КодСклЗагл) Тогда - КодСклЗагл = Лев(СтрЗаменить(Строка(СкладЦель.УникальныйИдентификатор()), "-", ""), 8); + НомерСерии = СокрЛП(СтрТ.СерияНомер); + ЭтоЗаглушка = Ложь; + + Если Не ЗначениеЗаполнено(ИмяСерии) И Не ЗначениеЗаполнено(НомерСерии) Тогда + Если Не ТребуетсяСерия Тогда + Возврат Сер; + КонецЕсли; + Если Не СоздаватьЗаглушкиСерий Тогда + СтрТ.КомментарийСопоставления = "Серия обязательна, в источнике пустая (заглушки выключены)"; + Возврат Сер; + КонецЕсли; + КодСклЗагл = "КОМ"; + Если ЗначениеЗаполнено(СкладЦель) Тогда + Попытка + КодСклЗагл = СокрЛП(Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СкладЦель, "Код"))); + Исключение + КодСклЗагл = ""; + КонецПопытки; + Если ПустаяСтрока(КодСклЗагл) Тогда + КодСклЗагл = Лев(СтрЗаменить(Строка(СкладЦель.УникальныйИдентификатор()), "-", ""), 8); + КонецЕсли; КонецЕсли; ИмяСерии = "Перенос_" + КодСклЗагл + "_" + СуффиксДатыСер; СтрТ.Серия = ИмяСерии; - КонецЕсли; - - Если Не ТребуетсяСерия И Не ЗначениеЗаполнено(ИмяСерии) Тогда - Возврат Сер; + ЭтоЗаглушка = Истина; КонецЕсли; СсылкаПоГуид = СсылкаПоUUID(Справочники.СерииНоменклатуры, СтрТ.СерияИдентификатор); @@ -550,25 +954,34 @@ ВидСер = ВидНом; КонецЕсли; - КлючКэшСер = Строка(ВидСер.УникальныйИдентификатор()) + "|" + ИмяСерии; + КлючПоискаНомера = ?(ЗначениеЗаполнено(НомерСерии), НомерСерии, ИмяСерии); + КлючКэшСер = Строка(ВидСер.УникальныйИдентификатор()) + "|" + ИмяСерии + "|" + КлючПоискаНомера; СерИзКэш = КэшСерий.Получить(КлючКэшСер); Если СерИзКэш <> Неопределено Тогда Возврат СерИзКэш; КонецЕсли; - Если ИспНомерСерии Тогда - Сер = Справочники.СерииНоменклатуры.НайтиПоРеквизиту("Номер", ИмяСерии, , ВидСер); + Если ИспНомерСерии И ЗначениеЗаполнено(КлючПоискаНомера) Тогда + Сер = Справочники.СерииНоменклатуры.НайтиПоРеквизиту("Номер", КлючПоискаНомера, , ВидСер); КонецЕсли; - Если Не ЗначениеЗаполнено(Сер) Тогда + Если Не ЗначениеЗаполнено(Сер) И ЗначениеЗаполнено(ИмяСерии) Тогда Сер = Справочники.СерииНоменклатуры.НайтиПоНаименованию(ИмяСерии, Истина, , ВидСер); КонецЕсли; + Если Не ЗначениеЗаполнено(Сер) И ЗначениеЗаполнено(НомерСерии) И НомерСерии <> ИмяСерии Тогда + Сер = Справочники.СерииНоменклатуры.НайтиПоНаименованию(НомерСерии, Истина, , ВидСер); + КонецЕсли; - Если Не ЗначениеЗаполнено(Сер) И Не РежимТест И (ТребуетсяСерия Или ЗначениеЗаполнено(ИмяСерии)) Тогда + МожноСоздать = Не РежимТест И ЗначениеЗаполнено(ИмяСерии); + Если ЭтоЗаглушка Тогда + МожноСоздать = МожноСоздать И СоздаватьЗаглушкиСерий; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Сер) И МожноСоздать Тогда Попытка ОбСер = Справочники.СерииНоменклатуры.ПустойОбъект(ВидСер); Если ИспНомерСерии Тогда - НомерСер = ИмяСерии; - Если СтрНачинаетсяС(ИмяСерии, "Перенос_") Тогда + НомерСер = КлючПоискаНомера; + Если ЭтоЗаглушка И СтрНачинаетсяС(ИмяСерии, "Перенос_") Тогда НомерСер = Сред(ИмяСерии, СтрДлина("Перенос_") + 1); КонецЕсли; ОбСер.Номер = НомерСер; diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form.xml b/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form.xml index 56bfc72..75fd97e 100644 --- a/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form.xml +++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form.xml @@ -70,6 +70,19 @@ + + Объект.СоздаватьЗаглушкиСерий + + + ru + Создавать серии Перенос_* только если в источнике нет серии, а в целевой учёт по сериям обязателен + + + ShowRight + Auto + + + <v8:item> @@ -85,195 +98,559 @@ </ToolTip> <ExtendedTooltip name="ГруппаСтраницыРасширеннаяПодсказка" id="2"/> <ChildItems> - <Page name="ГруппаВходящиеДанные" id="3"> + <Page name="ГруппаСобственныеТовары" id="3"> <Title> <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Входящие данные</v8:content> + <v8:content>Собственные товары</v8:content> </v8:item> ru - Группа входящие данные + Собственные товары - + - +
truetruetrue - Объект.ВходящиеДанные + Объект.ВходящиеСобственныеТовары - - + + - - - + + - ВходящиеДанные + ВходящиеСобственныеТовары SearchStringRepresentation - - + + - + - ВходящиеДанные + ВходящиеСобственныеТовары ViewStatusRepresentation - - + + - + - ВходящиеДанные + ВходящиеСобственныеТовары SearchControl - - + + - - Объект.ВходящиеДанные.LineNumber + + Объект.ВходящиеСобственныеТовары.LineNumber EnterOnInput - - + + - - Объект.ВходящиеДанные.НоменклатураНаименование + + Объект.ВходящиеСобственныеТовары.НоменклатураНаименование EnterOnInput true - - + + - - Объект.ВходящиеДанные.ЕдИзм + + Объект.ВходящиеСобственныеТовары.ЕдИзм EnterOnInput true - - + + - - Объект.ВходящиеДанные.ЕдИзмИдентификатор + + Объект.ВходящиеСобственныеТовары.ЕдИзмИдентификатор EnterOnInput - - + + - - Объект.ВходящиеДанные.СкладНаименование + + Объект.ВходящиеСобственныеТовары.СкладНаименование EnterOnInput true - - + + - - Объект.ВходящиеДанные.СкладИдентификатор + + Объект.ВходящиеСобственныеТовары.СкладИдентификатор EnterOnInput - - + + - - Объект.ВходящиеДанные.ГТД + + Объект.ВходящиеСобственныеТовары.ГТД EnterOnInput true - - + + - - Объект.ВходящиеДанные.Серия + + Объект.ВходящиеСобственныеТовары.Серия EnterOnInput true - - + + - - Объект.ВходящиеДанные.Количество + + Объект.ВходящиеСобственныеТовары.СерияНомер EnterOnInput - - + true + + - - Объект.ВходящиеДанные.Артикул + + Объект.ВходящиеСобственныеТовары.Количество EnterOnInput - - + + - - Объект.ВходящиеДанные.НоменклатураКод + + Объект.ВходящиеСобственныеТовары.Артикул EnterOnInput - - + + - - Объект.ВходящиеДанные.ХарактеристикаНаименование + + Объект.ВходящиеСобственныеТовары.НоменклатураКод EnterOnInput - - + + - - Объект.ВходящиеДанные.ВидНоменклатурыНаименование + + Объект.ВходящиеСобственныеТовары.ХарактеристикаНаименование EnterOnInput - - + + - - Объект.ВходящиеДанные.ОрганизацияНаименование + + Объект.ВходящиеСобственныеТовары.ВидНоменклатурыНаименование EnterOnInput - - + + - - Объект.ВходящиеДанные.Номенклатура + + Объект.ВходящиеСобственныеТовары.ОрганизацияНаименование EnterOnInput - - + + - - Объект.ВходящиеДанные.Склад + + Объект.ВходящиеСобственныеТовары.Номенклатура EnterOnInput - - + + - - Объект.ВходящиеДанные.СерияСсылка + + Объект.ВходящиеСобственныеТовары.Склад EnterOnInput - - + + - - Объект.ВходящиеДанные.Сопоставлено + + Объект.ВходящиеСобственныеТовары.СерияСсылка + EnterOnInput + + + + + Объект.ВходящиеСобственныеТовары.Сопоставлено EnterOnInput Auto - - + + - - Объект.ВходящиеДанные.КомментарийСопоставления + + Объект.ВходящиеСобственныеТовары.КомментарийСопоставления EnterOnInput - - + + - - Объект.ВходящиеДанные.ДокументВвода + + Объект.ВходящиеСобственныеТовары.ДокументВвода EnterOnInput - - + + - - Объект.ВходящиеДанные.ЗагруженоВДокумент + + Объект.ВходящиеСобственныеТовары.ЗагруженоВДокумент EnterOnInput Auto - - + + + + +
+
+ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Комиссионные товары</v8:content> + </v8:item> + + + + ru + Комиссионные товары + + + + + + true + true + true + Объект.ВходящиеКомиссионныеТовары + + + + + + + + + + + ВходящиеКомиссионныеТовары + SearchStringRepresentation + + + + + + + ВходящиеКомиссионныеТовары + ViewStatusRepresentation + + + + + + + ВходящиеКомиссионныеТовары + SearchControl + + + + + + + Объект.ВходящиеКомиссионныеТовары.LineNumber + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.НоменклатураНаименование + EnterOnInput + true + + + + + Объект.ВходящиеКомиссионныеТовары.ЕдИзм + EnterOnInput + true + + + + + Объект.ВходящиеКомиссионныеТовары.ЕдИзмИдентификатор + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.СкладНаименование + EnterOnInput + true + + + + + Объект.ВходящиеКомиссионныеТовары.СкладИдентификатор + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.ГТД + EnterOnInput + true + + + + + Объект.ВходящиеКомиссионныеТовары.Серия + EnterOnInput + true + + + + + Объект.ВходящиеКомиссионныеТовары.СерияНомер + EnterOnInput + true + + + + + Объект.ВходящиеКомиссионныеТовары.Количество + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.Артикул + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.НоменклатураКод + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.ХарактеристикаНаименование + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.ВидНоменклатурыНаименование + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.ОрганизацияНаименование + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.Номенклатура + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.Склад + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.СерияСсылка + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.СоглашениеНаименование + EnterOnInput + true + + + + + Объект.ВходящиеКомиссионныеТовары.ПартнерНаименование + EnterOnInput + true + + + + + Объект.ВходящиеКомиссионныеТовары.КонтрагентНаименование + EnterOnInput + true + + + + + Объект.ВходящиеКомиссионныеТовары.Соглашение + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.Партнер + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.Контрагент + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.Сопоставлено + EnterOnInput + Auto + + + + + Объект.ВходящиеКомиссионныеТовары.КомментарийСопоставления + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.ДокументВвода + EnterOnInput + + + + + Объект.ВходящиеКомиссионныеТовары.ЗагруженоВДокумент + EnterOnInput + Auto + + + + +
+
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Документы ввода</v8:content> + </v8:item> + + + + ru + Документы, созданные на 3-м этапе + + + + + + List + false + false + true + true + Объект.СозданныеДокументы + + + + + + + СозданныеДокументы + SearchStringRepresentation + + + + + + + СозданныеДокументы + ViewStatusRepresentation + + + + + + + СозданныеДокументы + SearchControl + + + + + + + Объект.СозданныеДокументы.LineNumber + EnterOnInput + + + + + Объект.СозданныеДокументы.Документ + EnterOnInput + true + + + + + Объект.СозданныеДокументы.ВидОстатков + EnterOnInput + + + + + Объект.СозданныеДокументы.Склад + EnterOnInput + + + + + Объект.СозданныеДокументы.Соглашение + EnterOnInput + + + + + Объект.СозданныеДокументы.Партнер + EnterOnInput + + + + + Объект.СозданныеДокументы.КоличествоСтрок + EnterOnInput + + + + + Объект.СозданныеДокументы.КоличествоТоваров + EnterOnInput + + + + + Объект.СозданныеДокументы.Комментарий + EnterOnInput + + + + + Объект.СозданныеДокументы.ЭтоТест + EnterOnInput + Auto + +
@@ -679,7 +1056,7 @@ ru - Заполнить таблицу «Входящие данные» остатками из выбранного подключения (первичный анализ) + Заполнить таблицы собственных и комиссионных (2.5) товаров остатками из выбранного подключения ЗагрузитьОстатки @@ -709,7 +1086,7 @@ ru - Создать ВводОстатковТоваров по сопоставленным строкам + Создать ВводОстатковТоваров: собственные и комиссия 2.5 СоздатьДокументы diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl b/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl index a9308cc..9dd5317 100644 --- a/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl +++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Forms/Форма/Ext/Form/Module.bsl @@ -33,14 +33,15 @@ Если ОтборСкладовВнешнейБазы.Количество() = 0 И ОтборОрганизацийВнешнейБазы.Количество() = 0 - И Объект.ВходящиеДанные.Количество() = 0 Тогда + И Объект.ВходящиеСобственныеТовары.Количество() = 0 + И Объект.ВходящиеКомиссионныеТовары.Количество() = 0 Тогда ПодключениеКСтороннейБазеПредыдущее = Объект.ПодключениеКСтороннейБазе; Возврат; КонецЕсли; Описание = Новый ОписаниеОповещения("ПодключениеКСтороннейБазеПослеВопроса", ЭтотОбъект); ПоказатьВопрос(Описание, - "Смена подключения очистит отборы складов/организаций и входящие данные." + Символы.ПС + "Смена подключения очистит отборы складов/организаций, входящие данные и список созданных документов." + Символы.ПС + "Продолжить?", РежимДиалогаВопрос.ДаНет); @@ -136,15 +137,18 @@ ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; - Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаВходящиеДанные; - ПоказатьОповещениеПользователя("Входящие данные", , "Заполнено строк: " + Формат(Количество, "ЧГ=0")); + Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаСобственныеТовары; + ПоказатьОповещениеПользователя("Входящие данные", , + "Собственные: " + Формат(Количество.Собственные, "ЧН=0; ЧГ=0") + + "; комиссия 2.5: " + Формат(Количество.Комиссия, "ЧН=0; ЧГ=0")); КонецПроцедуры &НаКлиенте Процедура Сопоставить(Команда) - Если Объект.ВходящиеДанные.Количество() = 0 Тогда + Если Объект.ВходящиеСобственныеТовары.Количество() = 0 + И Объект.ВходящиеКомиссионныеТовары.Количество() = 0 Тогда ПоказатьПредупреждение(, "Сначала заполните входящие данные"); Возврат; КонецЕсли; @@ -152,7 +156,8 @@ ДопПараметры = Новый Структура("РежимТест", Истина); Описание = Новый ОписаниеОповещения("СопоставитьПослеВопроса", ЭтотОбъект, ДопПараметры); ПоказатьВопрос(Описание, - "Создавать отсутствующие серии и характеристики?" + Символы.ПС + "Создавать отсутствующие серии и характеристики из исходных данных?" + Символы.ПС + + "Серии Перенос_* — только если включено «Создавать заглушки серий»." + Символы.ПС + "Да — запись; Нет — только поиск (тест); Отмена — прервать.", РежимДиалогаВопрос.ДаНетОтмена); @@ -189,7 +194,7 @@ Описание = Новый ОписаниеОповещения("СоздатьДокументыПослеВопроса", ЭтотОбъект); ПоказатьВопрос(Описание, - "Создать документы ВводОстатковТоваров?" + Символы.ПС + "Создать документы ввода остатков (собственные и комиссия 2.5)?" + Символы.ПС + "Да — запись; Нет — только подсчёт (тест); Отмена — прервать.", РежимДиалогаВопрос.ДаНетОтмена); @@ -208,6 +213,7 @@ ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; + Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаСозданныеДокументы; ПоказатьОповещениеПользователя("Документы ввода", , Текст); КонецПроцедуры @@ -241,7 +247,9 @@ ОтборСкладовВнешнейБазы.Очистить(); ОтборОрганизацийВнешнейБазы.Очистить(); - Объект.ВходящиеДанные.Очистить(); + Объект.ВходящиеСобственныеТовары.Очистить(); + Объект.ВходящиеКомиссионныеТовары.Очистить(); + Объект.СозданныеДокументы.Очистить(); КонецПроцедуры @@ -317,14 +325,41 @@ ВызватьИсключение "Отметьте хотя бы один склад или организацию на закладке «Отбор»"; КонецЕсли; - Фильтры = Новый Структура; + ФильтрыСобственные = Новый Структура; Если СкладыGUID.Количество() > 0 Тогда - Фильтры.Вставить("warehouses", СкладыGUID); + ФильтрыСобственные.Вставить("warehouses", СкладыGUID); КонецЕсли; Если ОрганизацииGUID.Количество() > 0 Тогда - Фильтры.Вставить("organizations", ОрганизацииGUID); + ФильтрыСобственные.Вставить("organizations", ОрганизацииGUID); КонецЕсли; - Фильтры.Вставить("only_nonzero", Истина); + ФильтрыСобственные.Вставить("only_nonzero", Истина); + + ФильтрыКомиссия = Новый Структура; + Если ОрганизацииGUID.Количество() > 0 Тогда + ФильтрыКомиссия.Вставить("organizations", ОрганизацииGUID); + КонецЕсли; + ФильтрыКомиссия.Вставить("only_nonzero", Истина); + ПолныйОбходКомиссии = (ОрганизацииGUID.Количество() = 0); + + СтрокиСобственные = ЗагрузитьСтраницыОстатков("combined", ФильтрыСобственные, Ложь); + СтрокиКомиссия = ЗагрузитьСтраницыОстатков("commission", ФильтрыКомиссия, ПолныйОбходКомиссии); + + ОбъектОбработки = РеквизитФормыВЗначение("Объект"); + ОбъектОбработки.ЗаполнитьВходящиеСобственныеТоварыИзОтветаОстатков( + Новый Структура("rows", СтрокиСобственные), Истина); + ОбъектОбработки.ЗаполнитьВходящиеКомиссионныеТоварыИзОтветаОстатков( + Новый Структура("rows", СтрокиКомиссия), Истина); + ЗначениеВРеквизитФормы(ОбъектОбработки, "Объект"); + + Результат = Новый Структура; + Результат.Вставить("Собственные", Объект.ВходящиеСобственныеТовары.Количество()); + Результат.Вставить("Комиссия", Объект.ВходящиеКомиссионныеТовары.Количество()); + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ЗагрузитьСтраницыОстатков(Режим, Фильтры, ПолныйОбход) ВсеСтроки = Новый Массив; Курсор = ""; @@ -334,11 +369,14 @@ Для НомерСтраницы = 1 По МаксСтраниц Цикл ПараметрыЗапроса = Новый Структура; - ПараметрыЗапроса.Вставить("mode", "combined"); + ПараметрыЗапроса.Вставить("mode", Режим); ПараметрыЗапроса.Вставить("as_of", Формат(Объект.ДатаОстатков, "ДФ=yyyy-MM-ddTHH:mm:ss")); ПараметрыЗапроса.Вставить("limit", Лимит); ПараметрыЗапроса.Вставить("include_policy", Истина); ПараметрыЗапроса.Вставить("filters", Фильтры); + Если ПолныйОбход Тогда + ПараметрыЗапроса.Вставить("allow_full_scan", Истина); + КонецЕсли; Если Не ПустаяСтрока(Курсор) Тогда ПараметрыЗапроса.Вставить("cursor", Курсор); КонецЕсли; @@ -346,7 +384,7 @@ Ответ = РК_ОбменСВнешнейБазой.ОстаткиВнешнейБазы(Объект.ПодключениеКСтороннейБазе, ПараметрыЗапроса); Строки = ЗначениеСвойстваОтвета(Ответ, "rows"); Если ТипЗнч(Строки) <> Тип("Массив") Тогда - ВызватьИсключение "Некорректный ответ /v1/stock/balances"; + ВызватьИсключение "Некорректный ответ /v1/stock/balances (mode=" + Режим + ")"; КонецЕсли; Для Каждого СтрAPI Из Строки Цикл ВсеСтроки.Добавить(СтрAPI); @@ -369,12 +407,7 @@ КонецЦикла; - Пакет = Новый Структура("rows", ВсеСтроки); - ОбъектОбработки = РеквизитФормыВЗначение("Объект"); - ОбъектОбработки.ЗаполнитьВходящиеДанныеИзОтветаОстатков(Пакет, Истина); - ЗначениеВРеквизитФормы(ОбъектОбработки, "Объект"); - - Возврат Объект.ВходящиеДанные.Количество(); + Возврат ВсеСтроки; КонецФункции @@ -382,15 +415,18 @@ Функция СопоставитьНаСервере(РежимТест) ОбъектОбработки = РеквизитФормыВЗначение("Объект"); - Результат = ОбъектОбработки.СопоставитьВходящиеДанные(РежимТест); + РезСоб = ОбъектОбработки.СопоставитьВходящиеСобственныеТовары(РежимТест); + РезКом = ОбъектОбработки.СопоставитьВходящиеКомиссионныеТовары(РежимТест); ЗначениеВРеквизитФормы(ОбъектОбработки, "Объект"); Возврат СтрШаблон( - "Сопоставлено: %1; не сопоставлено: %2; создано серий: %3; создано характеристик: %4%5", - Формат(Результат.Сопоставлено, "ЧН=0; ЧГ=0"), - Формат(Результат.НеСопоставлено, "ЧН=0; ЧГ=0"), - Формат(Результат.СозданоСерий, "ЧН=0; ЧГ=0"), - Формат(Результат.СозданоХарактеристик, "ЧН=0; ЧГ=0"), + "Собственные: %1 / не %2; комиссия: %3 / не %4; серий: %5; характеристик: %6%7", + Формат(РезСоб.Сопоставлено, "ЧН=0; ЧГ=0"), + Формат(РезСоб.НеСопоставлено, "ЧН=0; ЧГ=0"), + Формат(РезКом.Сопоставлено, "ЧН=0; ЧГ=0"), + Формат(РезКом.НеСопоставлено, "ЧН=0; ЧГ=0"), + Формат(РезСоб.СозданоСерий + РезКом.СозданоСерий, "ЧН=0; ЧГ=0"), + Формат(РезСоб.СозданоХарактеристик + РезКом.СозданоХарактеристик, "ЧН=0; ЧГ=0"), ?(РежимТест, " (тест)", "")); КонецФункции @@ -403,9 +439,11 @@ ЗначениеВРеквизитФормы(ОбъектОбработки, "Объект"); Возврат СтрШаблон( - "Документов: %1; строк: %2; удалено прежних: %3; ошибок: %4; тег: %5%6", + "Собственные док.: %1 (%2 стр.); комиссия 2.5: %3 (%4 стр.); удалено: %5; ошибок: %6; тег: %7%8", Формат(Результат.СозданоДокументов, "ЧН=0; ЧГ=0"), Формат(Результат.СтрокВДокументах, "ЧН=0; ЧГ=0"), + Формат(Результат.СозданоДокументовКомиссии, "ЧН=0; ЧГ=0"), + Формат(Результат.СтрокКомиссии, "ЧН=0; ЧГ=0"), Формат(Результат.УдаленоДокументов, "ЧН=0; ЧГ=0"), Формат(Результат.Ошибок, "ЧН=0; ЧГ=0"), Результат.ТекстТега,