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
+
+
+
@@ -85,195 +98,559 @@
-
+
ru
- Входящие данные
+ Собственные товары
ru
- Группа входящие данные
+ Собственные товары
-
+
-
+
true
true
true
- Объект.ВходящиеДанные
+ Объект.ВходящиеСобственныеТовары
-
-
+
+
-
-
-
+
+
- - ВходящиеДанные
+ - ВходящиеСобственныеТовары
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
-
-
+
+
+
+
+
+
+
+
+
+
+ ru
+ Комиссионные товары
+
+
+
+
+ ru
+ Комиссионные товары
+
+
+
+
+
+ true
+ true
+ true
+ Объект.ВходящиеКомиссионныеТовары
+
+
+
+
+
+ CommandBarButton
+ Form.Command.ЗагрузитьОстатки
+
+
+
+
+
+
+
+ - ВходящиеКомиссионныеТовары
+ 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
+
+
+
+
+
+
+
+
+
+
+ ru
+ Документы ввода
+
+
+
+
+ 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"),
Результат.ТекстТега,