20 Commits

Author SHA1 Message Date
mihailkudravcev 95c6315feb Изменения в форме РК_ФормаНастроекРана 2026-08-11 16:55:26 +03:00
mihailkudravcev 17e5a81a1d публикация исходной ИБ (crm) с повторным использованием сеансов отвечает HTTP 400 без заголовка сеанса 2026-08-11 15:42:46 +03:00
kma f306257050 Some fixes. 2026-08-11 15:36:16 +03:00
mihailkudravcev 260edf6800 crm3-26.rhana 1.3.1.53: заимствование ОбщегоНазначения.
Компилятор расширения не видит незаимствованные модули хоста;
восстановлены вызовы ЗначенияРеквизитовОбъекта в настройках подключения.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 15:16:57 +03:00
mihailkudravcev b472ff2470 РК_НастройкиПодключения 1.3.1.51: проверка соединения в менеджере.
ПроверитьСоединение по ссылке/объекту/структуре формы; GET /v1/health
через РК_ОбменСВнешнейБазой (X-Transfer-Token); README и CHANGELOG.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 15:03:50 +03:00
kma b0d0324074 Форма настроен. Каркас под команду тестирования соединения. 2026-08-11 14:49:51 +03:00
mihailkudravcev d39b1c0abb РК_ЗагрузкаОстатков 1.3.1.49: подбор складов, загрузка и сопоставление остатков.
HTTP-клиент Transfer API, детальная ТЧ входящих остатков и шаг сопоставления НСИ/серий по логике BSL-переноса.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 09:46:54 +03:00
kma b0d285a87d #1 - создание каркаса обработки загрузки складстких остатков из внешней (исходной) базы CRM3 2026-08-10 16:47:23 +03:00
mihailkudravcev 78c25277c8 Обмен — приём СФ выданного без полей аванса в ТЧ (1.3.0.47).
Не писать СвойстваОтсутствующиеВПолученныхДанных в строку ТЧ без ДополнительныеСвойства.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-30 15:48:59 +03:00
mihailkudravcev 0ef87a322c Обмен — приоритетный ВидНоменклатуры из ра_ВидНоменклатурыCRM326 (1.3.0.46).
При получении номенклатуры из Рабочая CRM3 сопоставляет вид по наименованию
из AdditionalInfo.РК_ВидНоменклатурыCRM326; без значения — прежний механизм.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-30 13:13:09 +03:00
mihailkudravcev 94f793b614 Обмен — ВидЦены строк из AdditionalInfo вместо соглашения (1.3.0.45, Д1.3).
Разбор AdditionalInfo.РК_ВидыЦенСтрок при получении; пустые виды цен
сохраняются как в источнике. Дозаполнение из соглашения убрано.

Refs: crm3-migration/-#10
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-21 14:25:00 +03:00
mihailkudravcev 0ebd01d0ba Обмен — дозаполнение ВидЦены в строках ТЧ при получении (1.3.0.44, Д1.3).
ED 1.8 не передаёт ВидЦены/ВидЦеныПоставщика в XDTO; после отложенной обработки
дозаполняем вид цены из соглашения без пересчёта цены и суммы.

Refs: crm3-migration/-#8
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-21 13:27:35 +03:00
mihailkudravcev 997b7fe110 Обмен серий: учитывать маппинг видов номенклатуры на target (1.3.0.43).
Для ПКО серий добавлен поиск существующей серии по владельцу вида с приоритетом Номер+ГоденДо и fallback по сроку при пустом номере; исключено создание дублей при несовпадении GUID.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-21 12:17:20 +03:00
mihailkudravcev a83f23d16c Обмен — этапы графика оплаты ЗаказКлиента (Д1.2) 1.3.0.42 2026-07-15 09:35:56 +03:00
mk eb097a8078 Версия 1.3.0.41: TransferAPI перенесён в ws-rhana.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-09 15:59:40 +03:00
mk 8a1624a47a HTTP Transfer API перенесён в универсальное расширение ws-rhana.
Удалены РК_TransferAPI и связанные объекты; WS — только в ws-rhana (РВС_).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-09 15:52:42 +03:00
mk 2dfa49b2cf HTTP Transfer API: read-only выгрузка данных для переноса (v0.1).
Добавлены РК_TransferAPI, серверный/клиентский модули, константы ключа и адреса партнёрской ИБ, роль вызова API.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-09 15:22:07 +03:00
mk 6a61479ba2 Обмен: досоздание объектов расчётов по договорам (1.3.0.40).
Типовой механизм UT 11.5 может не создать ОР при обмене crm3-dev→crm3-26; добавлен fallback через СоздатьЭлемент после отложенной обработки.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-08 19:04:08 +03:00
mk 7a313f254c Документация: README расширения целевой ИБ (обмен, контрагенты, состав).
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-06 16:25:13 +03:00
mk 45b7af871a Контрагенты: уникальность ИНН/КПП без помеченных на удаление (1.3.0.39).
Переопределение ПартнерыИКонтрагентыЛокализация — аналог crm3-dev.rhana v1.0.1.333.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-06 16:16:57 +03:00
85 changed files with 5730 additions and 119 deletions
+220 -1
View File
@@ -1,6 +1,225 @@
# История изменений crm3-26.rhana
Формат версии: `1.3.0.NNN` (синхронизируется с `VERSION` и `Configuration.xml`).
Формат версии: `1.3.0.NNN` / `1.3.1.NNN` (синхронизируется с `VERSION` и `Configuration.xml`).
---
## 1.3.1.55 (2026-08-11)
### Добавлено
- `РК_ФормаНастроекРана`: при открытии и смене `РК_РабочееПодключениеЧерезАПИ`
проверка через `СоединениеАктивно` — показ/скрытие `ДекорацияПодключениеНеСработает`.
---
## 1.3.1.54 (2026-08-11)
### Исправлено
- `РК_ОбменСВнешнейБазой`: заголовок `IBSession: start` при вызовах Transfer API —
иначе публикация с повторным использованием сеансов отвечает HTTP 400
(«Не указан заголовок управления сеансами…»).
- Краткий текст ошибки HTTP (из `<descr>` XML-ответа платформы) для формы проверки.
---
## 1.3.1.53 (2026-08-11)
### Исправлено
- Заимствован `CommonModule.ОбщегоНазначения` (Adopted, без доработки модуля) —
компилятор расширения видит только объекты расширения и заимствованные объекты хоста.
- В менеджере `РК_НастройкиПодключенияКВнешнейБазе` и `РК_ОбменСВнешнейБазой` снова
`ОбщегоНазначения.ЗначенияРеквизитовОбъекта` (как в `РК_ЗагрузкаОстатков` / `crm3-dev.rhana`).
---
## 1.3.1.52 (2026-08-11)
### Исправлено
- Модуль менеджера `РК_НастройкиПодключенияКВнешнейБазе` и `РК_ОбменСВнешнейБазой`:
убраны вызовы `ОбщегоНазначения.ЗначенияРеквизитовОбъекта` (модуль не заимствован в расширении) —
чтение реквизитов через ссылку/объект справочника.
---
## 1.3.1.51 (2026-08-11)
### РК_НастройкиПодключенияКВнешнейБазе
- Проверка соединения вынесена в модуль менеджера: `ПроверитьСоединение(Источник)`.
- Источник: ссылка, объект справочника или структура полей формы (без проверки «Активно»).
- Возврат: `Успех`, `Текст`, `Ответ`, `Ошибка` — для UI и вызова из кода.
- `СоединениеАктивно(Ссылка)` — «Активно» + совпадение `ИмяТекущейБазы` с текущей ИБ.
- `ИмяТекущейИнформационнойБазы()` — общее API менеджера.
---
## 1.3.1.50 (2026-08-11)
### РК_НастройкиПодключенияКВнешнейБазе
- Форма элемента: «Обновить имя текущей базы» — из `Ref=` / `File=` строки соединения.
- Форма элемента: «Проверить» — `GET /v1/health` по полям формы (без записи, без проверки «Активно»).
- `РК_ОбменСВнешнейБазой`: `ПроверитьСоединение`, `ВыполнитьGET`; токен передаётся в `X-Transfer-Token` (совместимо с Basic Auth).
---
## 1.3.1.49 (2026-08-10)
### Обработка РК_ЗагрузкаОстатков — подбор складов и предварительные остатки
- Общий модуль `РК_ОбменСВнешнейБазой`: HTTP-клиент Transfer API по `РК_НастройкиПодключенияКВнешнейБазе`.
- Подбор складов исходной ИБ (`POST /v1/stock/warehouses`) в отбор на форме.
- Загрузка остатков (`POST /v1/stock/balances`, mode=`combined`) в ТЧ `ВходящиеДанные` с детализацией (кол-во, артикул, код, характеристика, серия/ГТД GUID, вид, политика, организация).
- Шаг «Сопоставить»: поиск НСИ + создание серий-заглушек `Перенос_<склад>_<дата>` по логике BSL-переноса остатков (тест / запись).
- Создание документов ввода остатков — следующий шаг (пока не реализовано).
Пара: `ws-rhana` 0.0.0.30 (endpoint складов + `nomenclature_article`).
---
## 1.3.0.47 (2026-07-30)
### Обмен — приём СФ выданного без полей аванса в ТЧ
Модуль: `ОбменДаннымиXDTOСервер` (`&ИзменениеИКонтроль` `КонвертацияСвойстваСтруктурыОбъектаXDTO`).
Пакет из **crm3-dev** в `ПлатежноРасчетныеДокументы` передаёт только `ДатаДокумента` / `НомерДокумента`. Целевое ПКО также ждёт поля аванса (`ДатаИсправленияСчетаФактурыНаАванс` и др.). Типовой код при отсутствии свойства писал в `ПриемникДанных.ДополнительныеСвойства`, но у строки ТЧ этого поля нет → ошибка конвертации.
Исправление: фиксировать `СвойстваОтсутствующиеВПолученныхДанных` только если у приёмника есть `ДополнительныеСвойства`.
---
## 1.3.0.46 (2026-07-30)
### Обмен — приоритетный ВидНоменклатуры из ра_ВидНоменклатурыCRM326
Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`.
При получении номенклатуры из **Рабочая CRM3**: если в пакете есть `AdditionalInfo.РК_ВидНоменклатурыCRM326`, `ВидНоменклатуры` сопоставляется по наименованию в целевой ИБ (перебивает защиту учётных реквизитов). Если значение не передано — действует прежний механизм обмена.
Пара с `crm3-dev.rhana` 1.0.1.342.
---
## 1.3.0.45 (2026-07-21)
### Обмен — ВидЦены строк из AdditionalInfo (Д1.3 / issue #10)
Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`.
Заменяет дозаполнение из соглашения (1.3.0.44): передаём фактические виды цен из исходной ИБ.
- На отправке (`crm3-dev.rhana` 1.0.1.338): `AdditionalInfo.РК_ВидыЦенСтрок`.
- На приёме: сохранить карту при `*_ПриКонвертацииДанныхXDTO`; применить в `ОтложеннаяОбработка_*` по `ИндексВТЧ` (запасной ключ — `НомерСтроки`).
- Пустой вид цены в источнике остаётся пустым; цена/сумма не пересчитываются.
- Только узел **«Рабочая CRM3»**.
Refs: https://git.p7net.ru/rhana/crm3-migration/-/issues/10
---
## 1.3.0.44 (2026-07-21)
### Обмен — дозаполнение ВидЦены в строках ТЧ (Д1.3, вариант B)
Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`.
ED 1.8 не передаёт `ВидЦены` / `ВидЦеныПоставщика` в строках табличных частей (XDTO-схема не меняется).
- `&После("ВыполнитьПроцедуруМодуляМенеджера")``РК_ВыполнитьПроцедуруМодуляМенеджера_ДозаполнитьВидЦены` для всех процедур `ОтложеннаяОбработка_*`.
- Универсально обходит все ТЧ документа; для пустых `ВидЦены``ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(ПоляЗаполнения = "ВидЦены")`; для `ВидЦеныПоставщика``ЦеныПартнеровЗаполнениеСервер` с тем же ограничением полей.
- Цена и сумма строк **не пересчитываются** (в отличие от `ЗаполнитьУсловияПродажПоСоглашению(Истина)`).
- Только для узла **«Рабочая CRM3»** (`РК_ЭтоОбменС_Crm3Dev`).
---
## 1.3.0.43 (2026-07-21)
### Серии номенклатуры — подбор по владельцу вида и сроку
Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`.
- Для ПКО `Справочник_СерииНоменклатуры` добавлен подбор существующей серии с учетом
владельца серий вида номенклатуры в целевой ИБ:
- `ВладелецВида + Номер + ГоденДо`,
- `ВладелецВида + Номер`,
- при пустом номере: `ВладелецВида + ГоденДо`.
- Поиск теперь опирается на маппинг видов номенклатуры на target (через
`РК_ВладелецСерийДляВидаНоменклатуры`), что снимает конфликт, когда вид в source и target различается.
- При найденной серии с другим GUID создается предупреждение и запись из пакета пропускается
(без создания дубликата).
---
## 1.3.0.42 (2026-07-15)
### Обмен — этапы графика оплаты ЗаказКлиента (Д1.2)
База: **1.3.0.41** (ws-rhana + объекты расчётов 1.3.0.40).
Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`.
- `&После("ОтложеннаяОбработка_ЗаказыПоставщикуКлиента")``РК_ОтложеннаяОбработка_ЗаказыПоставщикуКлиента_ЭтапыОплаты`.
- При «бедных» этапах из XDTO (пустые `ДатаПлатежа` / `ВариантОтсчета`) ТЧ очищается и перезаполняется типовым `ЭтапыОплатыСервер.ПроверитьЗаполнитьЭтапыГрафикаОплаты` по соглашению / графику оплаты / договору.
- При пустых реквизитах шапки из соглашения подставляются `ГрафикОплаты`, `ФормаОплаты`.
- Только для узла **«Рабочая CRM3»** (`РК_ЭтоОбменС_Crm3Dev`).
Данные уже загруженных заказов: `docs/transfer/Код_дозаполнения_этапов_оплаты_заказов_crm3-26.bsl` (монорепозиторий).
---
## 1.3.0.41 (2026-07-09)
### HTTP Transfer API перенесён в ws-rhana
Удалены объекты `РК_TransferAPI` и связанные модули/константы/роль.
Read-only HTTP API — в универсальном расширении [`ws-rhana`](https://git.p7net.ru/1c/ws-rhana.git) (`РВС_TransferAPI`).
---
## 1.3.0.40 (2026-07-08)
### Обмен — объекты расчётов по договорам
Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`.
В UT 11.5 `ОбъектыРасчетов` — отдельный справочник; в XDTO 1.8 не передаётся. Типовой `ВзаиморасчетыСервер.ПередЗаписью` при обмене crm3-dev → crm3-26 может не создать ОР (пустой партнёр на договоре, сбой `СоздатьПоКлючу`).
| Процедура/функция | Назначение |
|-------------------|------------|
| `РК_ПартнерКонтрагентДляДоговора` | партнёр/контрагент из договора, подсказок заказа или последнего заказа |
| `РК_ОбеспечитьОбъектРасчетовПоДоговору` | создание ОР через `СоздатьЭлемент`, если не найден |
| `РК_ПКО_ДоговорыКонтрагентов_ДозаполнитьПартнера` | `&После` ПКО договора — дозаполнение партнёра из контрагента |
| `РК_ОтложеннаяОбработка_ДосоздатьОбъектыРасчетов` | `&После` типовой отложенной обработки — досоздание ОР по договорам из пакета |
Применяется только к узлу «Рабочая CRM3» (`РК_ЭтоОбменС_Crm3Dev`).
---
## 1.3.0.39 (2026-07-06)
### Контрагенты — уникальность ИНН/КПП
Модуль: `ПартнерыИКонтрагентыЛокализация` (заимствован).
В целевой конфигурации (crm3-26) проверка уникальности ИНН/КПП реализована в модуле локализации, а не в `ПартнерыИКонтрагенты` (как в crm3-dev). Функция возвращает структуру `НайденныеСовпадения` / `ДоступноСоздание` и учитывает `ЮрФизЛицо` (различение ИП и физлица).
| Процедура/функция | Изменение |
|-------------------|-----------|
| `ИННКППУжеИспользуетсяВИнформационнойБазе` | при поиске дублей исключаются контрагенты с `ПометкаУдаления = Истина` |
| `ПроверитьКорректностьЗаполненияКонтрагента` | для записываемого контрагента с `ПометкаУдаления` проверка уникальности ИНН/КПП **не выполняется** |
**Поведение** — аналогично `crm3-dev.rhana` v1.0.1.333:
- обычная запись — уникальность среди непомеченных на удаление;
- запись с пометкой удаления — проверка уникальности ИНН/КПП пропускается;
- дубль только у помеченного контрагента не блокирует активную карточку.
**Примечание:** отдельная CRM-функция `CRM_КлиентыСервер.ИННКППУжеИспользуетсяВИнформационнойБазе` (поиск по `Партнеры.CRM_ИНН`) не затронута — она относится к сценариям CRM, не к типовой записи справочника `Контрагенты`.
---
+144
View File
@@ -0,0 +1,144 @@
# crm3-26.rhana
Расширение РАНА для целевой конфигурации **crm3-26** (ИБ `crm3`, сервер `1c-srv.rhana.local`).
Текущая версия: **1.3.1.55** — см. [`VERSION`](VERSION) и `src/Configuration.xml`.
Префикс новых объектов расширения: **`РК_`**.
## Назначение
Доработки целевой CRM3 редакции 3.1, не входящие в типовую конфигурацию:
- **приём данных** при синхронизации **crm3-dev → crm3-26** (защита учётных настроек целевой ИБ);
- **НСИ и бизнес-логика** РАНА (контрагенты, договоры, реализация, заказы, отладка);
- **совместимость обмена** с исходной базой (EnterpriseData 1.8, ставки НДС 22%).
Парное расширение исходной ИБ: [`crm3-dev.rhana`](../crm3-dev.rhana).
## Документация
| Документ | Содержание |
|----------|------------|
| [`CHANGELOG.md`](CHANGELOG.md) | история версий и описание доработок |
| [`../docs/transfer/Анализ_синхронизации_crm3-dev_crm3-26.md`](../docs/transfer/Анализ_синхронизации_crm3-dev_crm3-26.md) | полный анализ синхронизации (монорепозиторий crm3-26) |
| [`../docs/meta/REPOSITORIES.md`](../docs/meta/REPOSITORIES.md) | связанные git-репозитории конфигураций |
## Синхронизация crm3-dev → crm3-26
### Разделение ответственности
| Сторона | Расширение | Роль |
|---------|------------|------|
| **Исходная** (`crm3_placentapharm`) | `crm3-dev.rhana` | совместимость **отправки** (XDTO 1.8, валюта банк.счетов, фильтр узла CRM3-26) |
| **Целевая** (`crm3`) | `crm3-26.rhana` | защита **приёма** (учёт номенклатуры, склады, виды, серии) |
Доработки обмена на каждой стороне применяются **только к узлу CRM3**, без влияния на обмен с Бухгалтерией.
### Ключевые функции (целевая ИБ)
Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`, область `Синхронизация_crm3_dev_crm3_26`.
| Функция | Назначение |
|---------|------------|
| `РК_УзелCrm3Dev_GUID()` | GUID узла «Рабочая CRM3» (`97cd20ee-bb06-11f0-8dac-0cc47a7d055f`) |
| `РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена)` | Истина только для обмена с исходной CRM |
### Защита при получении (v1.3.0.37+)
| Объект | Поведение |
|--------|-----------|
| **Номенклатура** (существует) | снимок и восстановление учётных реквизитов целевой ИБ после типового `ПередЗаписью` и отложенной обработки |
| **Номенклатура** (новая) | заполнение учёта по виду номенклатуры **целевой** ИБ |
| **Виды номенклатуры** (существует) | пропуск обновления (сопоставление по GUID сохраняется) |
| **Склады** (существует) | пропуск перезаписи реквизитов |
| **Серии номенклатуры** | проверка владельца + подбор по `Номер/ГоденДо` в рамках владельца вида (v1.3.0.43+) |
| **Ставки НДС** | ПКПД: `НДС22`, `НДС22_122` |
Защищаемые реквизиты номенклатуры: `ВидНоменклатуры`, `ОсобенностьУчета`, `ТипНоменклатуры`, `ИспользованиеХарактеристик`, `ВладелецСерий`, `ВладелецХарактеристик`, `ГруппаФинансовогоУчета`, `СкладскаяГруппа`.
## Контрагенты — уникальность ИНН/КПП (v1.3.0.39)
В crm3-26 проверка реализована в **`ПартнерыИКонтрагентыЛокализация`** (не в `ПартнерыИКонтрагенты`, как в crm3-dev).
| Процедура/функция | Изменение |
|-------------------|-----------|
| `ИННКППУжеИспользуетсяВИнформационнойБазе` | дубли ищутся только среди контрагентов **без** пометки удаления |
| `ПроверитьКорректностьЗаполненияКонтрагента` | для контрагента с `ПометкаУдаления` проверка уникальности **не выполняется** |
Поведение согласовано с `crm3-dev.rhana` v1.0.1.333. Отдельная CRM-функция `CRM_КлиентыСервер.ИННКППУжеИспользуетсяВИнформационнойБазе` (поиск по `Партнеры.CRM_ИНН`) не затронута.
## Состав расширения (основное)
### Общие модули
| Модуль | Назначение |
|--------|------------|
| `МенеджерОбменаЧерезУниверсальныйФормат` | синхронизация crm3-dev, защита учёта при получении |
| `ПартнерыИКонтрагентыЛокализация` | уникальность ИНН/КПП контрагентов |
| `РК_ОбменСВнешнейБазой` | HTTP-клиент Transfer API (`ws-rhana`) по настройкам справочника |
| `РК_ОбщегоНазначения` / `РК_ОбщегоНазначенияВызовСервера` / `РК_ОбщегоНазначенияКлиентСервер` | инфраструктура РАНА (режим отладки и др.) |
| `ОбщегоНазначенияКлиентСервер` | доработки отборов динамических списков |
### Справочники и HTTP к исходной ИБ (v1.3.1.49+)
| Объект | Назначение |
|--------|------------|
| `РК_НастройкиПодключенияКВнешнейБазе` | адрес `/hs/transfer`, токен, логин/пароль, таймаут, `ИмяТекущейБазы`, `Активно` |
| Менеджер справочника | `ПроверитьСоединение(Источник)`, `СоединениеАктивно(Ссылка)`, `ИмяТекущейИнформационнойБазы()` |
| `РК_РабочееПодключениеЧерезАПИ` | константа — текущая рабочая настройка |
| `РК_ЗагрузкаОстатков` | подбор складов / загрузка / сопоставление остатков из исходной ИБ |
**Проверка соединения** (форма элемента или любой код):
```bsl
// по ссылке
Р = Справочники.РК_НастройкиПодключенияКВнешнейБазе.ПроверитьСоединение(СсылкаНастройки);
// по полям формы / структуре (АдресПодключения|Адрес, Токен, …)
Р = Справочники.РК_НастройкиПодключенияКВнешнейБазе.ПроверитьСоединение(СтруктураПолей);
// Р.Успех, Р.Текст, Р.Ответ, Р.Ошибка — GET /v1/health через РК_ОбменСВнешнейБазой
```
HTTP-клиент передаёт `IBSession: start` (публикация с повторным использованием сеансов) и `X-Transfer-Token`.
Пара: расширение **`ws-rhana`** на исходной ИБ (≥ 0.0.0.30 для складов/остатков; health — с ранних версий).
### Обработки и формы
| Объект | Назначение |
|--------|------------|
| `РК_ЗагрузкаОстатков` | загрузка складских остатков из исходной ИБ через Transfer API |
| `РК_ОбработкаПарнеровКонтрагентов` | работа с партнёрами и контрагентами |
| `РК_ФормаНастроекРана` | настройки расширения |
| `ЗагрузкаДанныхИзФайла` | доработки загрузки НСИ |
### Подсистемы
- `РК_РАНА` — общие доработки РАНА
- `РК_РАНА326` — доработки, специфичные для целевой конфигурации
## Репозиторий
```text
https://git.p7net.ru/1c/crm3_26.rhana.git
```
Каталог в монорепозитории: `crm3-26.rhana/`.
## Обновление из конфигуратора
После выгрузки из 1С EDT / конфигуратора:
```bash
scripts/normalize_1c_export.sh crm3-26.rhana # из корня crm3-26
cd crm3-26.rhana && git add -A && git status
```
Синхронизация `.gitattributes` / `.editorconfig`: `scripts/sync_git_1c_config.sh` (см. [`tools/git_1c/README.md`](../tools/git_1c/README.md)).
## Связанные конфигурации
| Сторона | Конфигурация | ИБ | Расширение |
|---------|--------------|-----|------------|
| Исходная | `crm3-dev` | `crm3_placentapharm` | `crm3-dev.rhana` |
| Целевая | `crm3-26` | `crm3` | **`crm3-26.rhana`** |
+1 -1
View File
@@ -1 +1 @@
1.3.0.38
1.3.1.55
@@ -0,0 +1,442 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<Catalog uuid="9a372d93-d522-4e3c-9242-3f69517e7b43">
<InternalInfo>
<xr:GeneratedType name="CatalogObject.РК_НастройкиПодключенияКВнешнейБазе" category="Object">
<xr:TypeId>a62ececd-a3e8-4735-b5df-bf53a976ed21</xr:TypeId>
<xr:ValueId>586f67a4-b615-434a-bd76-f85eb2952384</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="CatalogRef.РК_НастройкиПодключенияКВнешнейБазе" category="Ref">
<xr:TypeId>f294ac9c-0cd9-479f-a972-a5d0049fd73a</xr:TypeId>
<xr:ValueId>d83b73c7-78df-454c-8cbf-7e353ad6f7fe</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="CatalogSelection.РК_НастройкиПодключенияКВнешнейБазе" category="Selection">
<xr:TypeId>fc1b1689-ffe2-4b03-9252-a2ef4d82410f</xr:TypeId>
<xr:ValueId>f5d76395-b07b-4383-833a-eb7f2eb92320</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="CatalogList.РК_НастройкиПодключенияКВнешнейБазе" category="List">
<xr:TypeId>bd3013e4-54d6-441f-8fe5-ee9eab62bdfb</xr:TypeId>
<xr:ValueId>cea2628f-8ce9-4e38-9ef3-db15bd5d0232</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="CatalogManager.РК_НастройкиПодключенияКВнешнейБазе" category="Manager">
<xr:TypeId>335fe1bd-3aae-4362-9e37-38b5bdcce92f</xr:TypeId>
<xr:ValueId>5cd69658-7c18-4cd1-a4e1-e635f4461659</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>РК_НастройкиПодключенияКВнешнейБазе</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Настройка подключения к внешней базе</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Hierarchical>false</Hierarchical>
<HierarchyType>HierarchyFoldersAndItems</HierarchyType>
<LimitLevelCount>false</LimitLevelCount>
<LevelCount>2</LevelCount>
<FoldersOnTop>true</FoldersOnTop>
<UseStandardCommands>true</UseStandardCommands>
<Owners/>
<SubordinationUse>ToItems</SubordinationUse>
<CodeLength>9</CodeLength>
<DescriptionLength>25</DescriptionLength>
<CodeType>String</CodeType>
<CodeAllowedLength>Variable</CodeAllowedLength>
<CodeSeries>WholeCatalog</CodeSeries>
<CheckUnique>true</CheckUnique>
<Autonumbering>true</Autonumbering>
<DefaultPresentation>AsDescription</DefaultPresentation>
<Characteristics/>
<PredefinedDataUpdate>Auto</PredefinedDataUpdate>
<EditType>InDialog</EditType>
<QuickChoice>false</QuickChoice>
<ChoiceMode>BothWays</ChoiceMode>
<InputByString>
<xr:Field>Catalog.РК_НастройкиПодключенияКВнешнейБазе.StandardAttribute.Description</xr:Field>
<xr:Field>Catalog.РК_НастройкиПодключенияКВнешнейБазе.StandardAttribute.Code</xr:Field>
</InputByString>
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
<FullTextSearchOnInputByString>DontUse</FullTextSearchOnInputByString>
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
<DefaultObjectForm>Catalog.РК_НастройкиПодключенияКВнешнейБазе.Form.ФормаЭлемента</DefaultObjectForm>
<DefaultFolderForm/>
<DefaultListForm/>
<DefaultChoiceForm/>
<DefaultFolderChoiceForm/>
<AuxiliaryObjectForm/>
<AuxiliaryFolderForm/>
<AuxiliaryListForm/>
<AuxiliaryChoiceForm/>
<AuxiliaryFolderChoiceForm/>
<IncludeHelpInContents>false</IncludeHelpInContents>
<BasedOn/>
<DataLockFields/>
<DataLockControlMode>Managed</DataLockControlMode>
<FullTextSearch>Use</FullTextSearch>
<ObjectPresentation/>
<ExtendedObjectPresentation/>
<ListPresentation/>
<ExtendedListPresentation/>
<Explanation/>
<CreateOnInput>Use</CreateOnInput>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<DataHistory>DontUse</DataHistory>
<UpdateDataHistoryImmediatelyAfterWrite>false</UpdateDataHistoryImmediatelyAfterWrite>
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
</Properties>
<ChildObjects>
<Attribute uuid="9fa4f82a-4345-4772-b2dc-f8d892fc8e82">
<Properties>
<Name>АдресПодключения</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Адрес подключения</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>150</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/>
<FillChecking>ShowError</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="f46fb546-fca7-4f92-9a0b-a380ea73dca9">
<Properties>
<Name>Токен</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Токен</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>150</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/>
<FillChecking>ShowError</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="73d37e7f-a7ee-494e-a946-d3d706e9f037">
<Properties>
<Name>Таймаут</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Таймаут</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
<v8:Digits>10</v8:Digits>
<v8:FractionDigits>0</v8:FractionDigits>
<v8:AllowedSign>Nonnegative</v8:AllowedSign>
</v8:NumberQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>ShowError</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="af91404e-d0ef-4b3d-9819-0027b61e8834">
<Properties>
<Name>Логин</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Логин</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>150</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/>
<FillChecking>ShowError</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="33e4efd1-caed-46ef-b9f8-892f4bb69def">
<Properties>
<Name>Пароль</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Пароль</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>150</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
<PasswordMode>true</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/>
<FillChecking>ShowError</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="8c13a155-b2b2-4648-b623-e03cb49ee1ee">
<Properties>
<Name>Активно</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Активно</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="55b271fd-588b-4b24-bb35-480535766533">
<Properties>
<Name>Коментарий</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Коментарий</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>true</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="ca043818-4250-4082-8d09-b6fce389c953">
<Properties>
<Name>ИмяТекущейБазы</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Имя текущей базы</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>150</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Form>ФормаЭлемента</Form>
</ChildObjects>
</Catalog>
</MetaDataObject>
@@ -0,0 +1,254 @@
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
// Признак, что настройку можно использовать в текущей ИБ.
//
Функция СоединениеАктивно(НастройкаСсылка) Экспорт
Если ТипЗнч(НастройкаСсылка) <> Тип("СправочникСсылка.РК_НастройкиПодключенияКВнешнейБазе") Тогда
Возврат Неопределено;
КонецЕсли;
Если Не ЗначениеЗаполнено(НастройкаСсылка) Тогда
Возврат Ложь;
КонецЕсли;
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(НастройкаСсылка, "Активно, ИмяТекущейБазы");
Если Реквизиты.Активно <> Истина Тогда
Возврат Ложь;
КонецЕсли;
ИмяВНастройке = СокрЛП(Строка(Реквизиты.ИмяТекущейБазы));
Если ПустаяСтрока(ИмяВНастройке) Тогда
Возврат Истина;
КонецЕсли;
Возврат ВРег(ИмяВНастройке) = ВРег(ИмяТекущейИнформационнойБазы());
КонецФункции
// Проверка Transfer API (GET /v1/health).
//
// Параметры:
// Источник - СправочникСсылка.РК_НастройкиПодключенияКВнешнейБазе,
// СправочникОбъект.РК_НастройкиПодключенияКВнешнейБазе
// или Структура с полями Адрес/АдресПодключения, Токен, Таймаут, Логин, Пароль.
// Для ссылки «Активно» не проверяется (можно тестировать черновик).
//
// Возвращаемое значение:
// Структура:
// * Успех - Булево
// * Текст - Строка (для показа пользователю)
// * Ответ - Структура/Соответствие ответа health или Неопределено
// * Ошибка - Строка
//
Функция ПроверитьСоединение(Источник) Экспорт
Результат = Новый Структура("Успех, Текст, Ответ, Ошибка", Ложь, "", Неопределено, "");
Попытка
Настройки = НастройкиДляПроверки(Источник);
ОтветHealth = РК_ОбменСВнешнейБазой.ПроверитьСоединение(Настройки);
Исключение
Результат.Ошибка = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
Результат.Текст = НСтр("ru = 'Ошибка соединения:'") + Символы.ПС + Результат.Ошибка;
Возврат Результат;
КонецПопытки;
Результат.Ответ = ОтветHealth;
Статус = ЗначениеПоляОтвета(ОтветHealth, "status");
Если НРег(СокрЛП(Строка(Статус))) <> "ok" Тогда
Результат.Ошибка = НСтр("ru = 'Неожиданный ответ health:'") + " " + Строка(Статус);
Результат.Текст = Результат.Ошибка;
Возврат Результат;
КонецЕсли;
Результат.Успех = Истина;
Результат.Текст = ТекстУспешнойПроверки(ОтветHealth);
Возврат Результат;
КонецФункции
// Имя текущей ИБ из строки соединения (Ref= / File=).
//
Функция ИмяТекущейИнформационнойБазы() Экспорт
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
Позиция = СтрНайти(СтрокаСоединения, "Ref=""");
Если Позиция > 0 Тогда
Хвост = Сред(СтрокаСоединения, Позиция + 5);
ПозицияКонец = СтрНайти(Хвост, """");
Если ПозицияКонец > 0 Тогда
Возврат Лев(Хвост, ПозицияКонец - 1);
КонецЕсли;
КонецЕсли;
Позиция = СтрНайти(СтрокаСоединения, "File=""");
Если Позиция > 0 Тогда
Хвост = Сред(СтрокаСоединения, Позиция + 6);
ПозицияКонец = СтрНайти(Хвост, """");
Если ПозицияКонец > 0 Тогда
Путь = СтрЗаменить(Лев(Хвост, ПозицияКонец - 1), "\", "/");
Пока Прав(Путь, 1) = "/" Цикл
Путь = Лев(Путь, СтрДлина(Путь) - 1);
КонецЦикла;
Пока СтрНайти(Путь, "/") > 0 Цикл
Путь = Сред(Путь, СтрНайти(Путь, "/") + 1);
КонецЦикла;
Возврат Путь;
КонецЕсли;
КонецЕсли;
Возврат "";
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция НастройкиДляПроверки(Источник)
Если ТипЗнч(Источник) = Тип("СправочникСсылка.РК_НастройкиПодключенияКВнешнейБазе") Тогда
Если Не ЗначениеЗаполнено(Источник) Тогда
ВызватьИсключение НСтр("ru = 'Не указана настройка подключения'");
КонецЕсли;
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Источник,
"АдресПодключения, Токен, Таймаут, Логин, Пароль");
Возврат СтруктураНастроекHTTP(
Реквизиты.АдресПодключения,
Реквизиты.Токен,
Реквизиты.Таймаут,
Реквизиты.Логин,
Реквизиты.Пароль);
ИначеЕсли ТипЗнч(Источник) = Тип("СправочникОбъект.РК_НастройкиПодключенияКВнешнейБазе") Тогда
Возврат СтруктураНастроекHTTP(
Источник.АдресПодключения,
Источник.Токен,
Источник.Таймаут,
Источник.Логин,
Источник.Пароль);
ИначеЕсли ТипЗнч(Источник) = Тип("Структура") Тогда
Адрес = "";
Если Источник.Свойство("Адрес") Тогда
Адрес = Источник.Адрес;
ИначеЕсли Источник.Свойство("АдресПодключения") Тогда
Адрес = Источник.АдресПодключения;
КонецЕсли;
Токен = "";
Если Источник.Свойство("Токен") Тогда
Токен = Источник.Токен;
КонецЕсли;
Таймаут = 120;
Если Источник.Свойство("Таймаут") Тогда
Таймаут = Источник.Таймаут;
КонецЕсли;
Логин = "";
Если Источник.Свойство("Логин") Тогда
Логин = Источник.Логин;
КонецЕсли;
Пароль = "";
Если Источник.Свойство("Пароль") Тогда
Пароль = Источник.Пароль;
КонецЕсли;
Возврат СтруктураНастроекHTTP(Адрес, Токен, Таймаут, Логин, Пароль);
Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый тип источника настройки подключения'");
КонецЕсли;
КонецФункции
Функция СтруктураНастроекHTTP(Адрес, Токен, Таймаут, Логин, Пароль)
ТаймаутЧисло = 120;
Попытка
ТаймаутЧисло = Число(Таймаут);
Исключение
ТаймаутЧисло = 120;
КонецПопытки;
Если ТаймаутЧисло <= 0 Тогда
ТаймаутЧисло = 120;
КонецЕсли;
Настройки = Новый Структура;
Настройки.Вставить("Адрес", СокрЛП(Строка(Адрес)));
Настройки.Вставить("Токен", СокрЛП(Строка(Токен)));
Настройки.Вставить("Таймаут", ТаймаутЧисло);
Настройки.Вставить("Логин", СокрЛП(Строка(Логин)));
Настройки.Вставить("Пароль", Строка(Пароль));
Возврат Настройки;
КонецФункции
Функция ТекстУспешнойПроверки(ОтветHealth)
ИБ = ЗначениеПоляОтвета(ОтветHealth, "ib");
Расширение = ЗначениеПоляОтвета(ОтветHealth, "extension");
ВерсияРасширения = ЗначениеПоляОтвета(ОтветHealth, "extension_version");
Конфигурация = ЗначениеПоляОтвета(ОтветHealth, "configuration_name");
ВерсияКонфигурации = ЗначениеПоляОтвета(ОтветHealth, "configuration_version");
ВремяСервера = ЗначениеПоляОтвета(ОтветHealth, "server_time");
Части = Новый Массив;
Части.Добавить(НСтр("ru = 'Соединение успешно.'"));
Если Не ПустаяСтрока(Строка(ИБ)) Тогда
Части.Добавить(НСтр("ru = 'ИБ:'") + " " + Строка(ИБ));
КонецЕсли;
Если Не ПустаяСтрока(Строка(Конфигурация)) Тогда
Части.Добавить(НСтр("ru = 'Конфигурация:'") + " " + Строка(Конфигурация)
+ ?(ПустаяСтрока(Строка(ВерсияКонфигурации)), "", " " + Строка(ВерсияКонфигурации)));
КонецЕсли;
Если Не ПустаяСтрока(Строка(Расширение)) Тогда
Части.Добавить(НСтр("ru = 'Transfer API:'") + " " + Строка(Расширение)
+ ?(ПустаяСтрока(Строка(ВерсияРасширения)), "", " " + Строка(ВерсияРасширения)));
КонецЕсли;
Если Не ПустаяСтрока(Строка(ВремяСервера)) Тогда
Части.Добавить(НСтр("ru = 'Время сервера:'") + " " + Строка(ВремяСервера));
КонецЕсли;
Возврат СтрСоединить(Части, Символы.ПС);
КонецФункции
Функция ЗначениеПоляОтвета(Источник, ИмяПоля)
Если Источник = Неопределено Тогда
Возврат "";
КонецЕсли;
Если ТипЗнч(Источник) = Тип("Структура") Тогда
Значение = Неопределено;
Если Источник.Свойство(ИмяПоля, Значение) Тогда
Возврат Значение;
КонецЕсли;
Возврат "";
КонецЕсли;
Если ТипЗнч(Источник) = Тип("Соответствие") Тогда
Значение = Источник.Получить(ИмяПоля);
Если Значение = Неопределено Тогда
Возврат "";
КонецЕсли;
Возврат Значение;
КонецЕсли;
Возврат "";
КонецФункции
#КонецОбласти
#КонецЕсли
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<Form uuid="5897541c-e081-4d49-b4cd-dc5418aa113a">
<Properties>
<Name>ФормаЭлемента</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Форма элемента</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
</UsePurposes>
</Properties>
</Form>
</MetaDataObject>
@@ -0,0 +1,182 @@
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcssch="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<WindowOpeningMode>LockOwnerWindow</WindowOpeningMode>
<UseForFoldersAndItems>Items</UseForFoldersAndItems>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<ChildItems>
<Button name="ФормаКомандаПроверитьСоединение" id="35">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.КомандаПроверитьСоединение</CommandName>
<ExtendedTooltip name="ФормаКомандаПроверитьСоединениеРасширеннаяПодсказка" id="36"/>
</Button>
</ChildItems>
</AutoCommandBar>
<ChildItems>
<InputField name="Код" id="1">
<DataPath>Объект.Code</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="КодКонтекстноеМеню" id="2"/>
<ExtendedTooltip name="КодРасширеннаяПодсказка" id="3"/>
</InputField>
<InputField name="Наименование" id="4">
<DataPath>Объект.Description</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="НаименованиеКонтекстноеМеню" id="5"/>
<ExtendedTooltip name="НаименованиеРасширеннаяПодсказка" id="6"/>
</InputField>
<UsualGroup name="ГруппаПодлючение" id="30">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подключение</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группа подлючение</v8:content>
</v8:item>
</ToolTip>
<ExtendedTooltip name="ГруппаПодлючениеРасширеннаяПодсказка" id="31"/>
<ChildItems>
<InputField name="АдресПодключения" id="7">
<DataPath>Объект.АдресПодключения</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="АдресПодключенияКонтекстноеМеню" id="8"/>
<ExtendedTooltip name="АдресПодключенияРасширеннаяПодсказка" id="9"/>
</InputField>
<InputField name="Токен" id="10">
<DataPath>Объект.Токен</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ТокенКонтекстноеМеню" id="11"/>
<ExtendedTooltip name="ТокенРасширеннаяПодсказка" id="12"/>
</InputField>
<InputField name="Таймаут" id="13">
<DataPath>Объект.Таймаут</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ТаймаутКонтекстноеМеню" id="14"/>
<ExtendedTooltip name="ТаймаутРасширеннаяПодсказка" id="15"/>
</InputField>
</ChildItems>
</UsualGroup>
<UsualGroup name="ГруппаПользователь" id="28">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Данные пользователя</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группа пользователь</v8:content>
</v8:item>
</ToolTip>
<ExtendedTooltip name="ГруппаПользовательРасширеннаяПодсказка" id="29"/>
<ChildItems>
<InputField name="Логин" id="16">
<DataPath>Объект.Логин</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ЛогинКонтекстноеМеню" id="17"/>
<ExtendedTooltip name="ЛогинРасширеннаяПодсказка" id="18"/>
</InputField>
<InputField name="Пароль" id="19">
<DataPath>Объект.Пароль</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ПарольКонтекстноеМеню" id="20"/>
<ExtendedTooltip name="ПарольРасширеннаяПодсказка" id="21"/>
</InputField>
</ChildItems>
</UsualGroup>
<UsualGroup name="Группа1" id="37">
<Group>AlwaysHorizontal</Group>
<ExtendedTooltip name="Группа1РасширеннаяПодсказка" id="38"/>
<ChildItems>
<InputField name="ИмяТекущейБазы" id="32">
<DataPath>Объект.ИмяТекущейБазы</DataPath>
<AutoMaxWidth>false</AutoMaxWidth>
<ClearButton>true</ClearButton>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ИмяТекущейБазыКонтекстноеМеню" id="33"/>
<ExtendedTooltip name="ИмяТекущейБазыРасширеннаяПодсказка" id="34"/>
</InputField>
<Button name="ОбновитьИмяТекущейБазы" id="39">
<Type>UsualButton</Type>
<Representation>Picture</Representation>
<CommandName>Form.Command.ОбновитьИмяТекущейБазы</CommandName>
<ExtendedTooltip name="ОбновитьИмяТекущейБазыРасширеннаяПодсказка" id="40"/>
</Button>
</ChildItems>
</UsualGroup>
<CheckBoxField name="Активно" id="22">
<DataPath>Объект.Активно</DataPath>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="АктивноКонтекстноеМеню" id="23"/>
<ExtendedTooltip name="АктивноРасширеннаяПодсказка" id="24"/>
</CheckBoxField>
<InputField name="Коментарий" id="25">
<DataPath>Объект.Коментарий</DataPath>
<AutoMaxWidth>false</AutoMaxWidth>
<Height>2</Height>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="КоментарийКонтекстноеМеню" id="26"/>
<ExtendedTooltip name="КоментарийРасширеннаяПодсказка" id="27"/>
</InputField>
</ChildItems>
<Attributes>
<Attribute name="Объект" id="1">
<Type>
<v8:Type>cfg:CatalogObject.РК_НастройкиПодключенияКВнешнейБазе</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
<SavedData>true</SavedData>
</Attribute>
</Attributes>
<Commands>
<Command name="ОбновитьИмяТекущейБазы" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обновить имя текущей базы</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обновить имя текущей базы из текущей</v8:content>
</v8:item>
</ToolTip>
<Picture>
<xr:Ref>CommonPicture.ЗаполнитьФорму</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
</Picture>
<Action>ОбновитьИмяТекущейБазы</Action>
</Command>
<Command name="КомандаПроверитьСоединение" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Проверить</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Команда проверить соединение</v8:content>
</v8:item>
</ToolTip>
<Picture>
<xr:Ref>StdPicture.AppearanceCheckIcon</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
</Picture>
<Action>КомандаПроверитьСоединение</Action>
</Command>
</Commands>
</Form>
@@ -0,0 +1,52 @@
#Область ОбработчикиСобытийФормы
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОбновитьИмяТекущейБазы(Команда)
ОбновитьИмяТекущейБазыНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура КомандаПроверитьСоединение(Команда)
ТекстРезультата = КомандаПроверитьСоединениеНаСервере();
ПоказатьПредупреждение(, ТекстРезультата);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОбновитьИмяТекущейБазыНаСервере()
Объект.ИмяТекущейБазы = Справочники.РК_НастройкиПодключенияКВнешнейБазе.ИмяТекущейИнформационнойБазы();
КонецПроцедуры
&НаСервере
Функция КомандаПроверитьСоединениеНаСервере()
Настройки = Новый Структура;
Настройки.Вставить("АдресПодключения", Объект.АдресПодключения);
Настройки.Вставить("Токен", Объект.Токен);
Настройки.Вставить("Таймаут", Объект.Таймаут);
Настройки.Вставить("Логин", Объект.Логин);
Настройки.Вставить("Пароль", Объект.Пароль);
РезультатПроверки = Справочники.РК_НастройкиПодключенияКВнешнейБазе.ПроверитьСоединение(Настройки);
Возврат РезультатПроверки.Текст;
КонецФункции
#КонецОбласти
@@ -6,7 +6,7 @@
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Форма настроек рана</v8:content>
<v8:content>Настройки РАНА</v8:content>
</v8:item>
</Synonym>
<Comment/>
@@ -1,7 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcssch="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Настройки РАНА</v8:content>
</v8:item>
</Title>
<WindowOpeningMode>LockOwnerWindow</WindowOpeningMode>
<AutoCommandBar name="" id="-1"/>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems>
<CheckBoxField name="РК_РежимОтладкиРана" id="1">
<DataPath>НаборКонстант.РК_РежимОтладкиРана</DataPath>
@@ -10,6 +19,26 @@
<ContextMenu name="РК_РежимОтладкиРанаКонтекстноеМеню" id="2"/>
<ExtendedTooltip name="РК_РежимОтладкиРанаРасширеннаяПодсказка" id="3"/>
</CheckBoxField>
<InputField name="РК_РабочееПодключениеЧерезАПИ" id="4">
<DataPath>НаборКонстант.РК_РабочееПодключениеЧерезАПИ</DataPath>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="РК_РабочееПодключениеЧерезАПИКонтекстноеМеню" id="5"/>
<ExtendedTooltip name="РК_РабочееПодключениеЧерезАПИРасширеннаяПодсказка" id="6"/>
<Events>
<Event name="OnChange">РК_РабочееПодключениеЧерезАПИПриИзменении</Event>
</Events>
</InputField>
<LabelDecoration name="ДекорацияПодключениеНеСработает" id="7">
<Visible>false</Visible>
<Title formatted="false">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Данное подключение не активно или отключено для данной базы.</v8:content>
</v8:item>
</Title>
<ContextMenu name="ДекорацияПодключениеНеСработаетКонтекстноеМеню" id="8"/>
<ExtendedTooltip name="ДекорацияПодключениеНеСработаетРасширеннаяПодсказка" id="9"/>
</LabelDecoration>
</ChildItems>
<Attributes>
<Attribute name="НаборКонстант" id="1">
@@ -0,0 +1,40 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПроверитьДоступностьПодключения();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура РК_РабочееПодключениеЧерезАПИПриИзменении(Элемент)
ПроверитьДоступностьПодключения();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Показывает предупреждение, если выбранное подключение неактивно
// или имя текущей ИБ не совпадает с ИмяТекущейБазы в настройке
// (пустое ИмяТекущейБазы в настройке — ограничение по имени не действует).
//
&НаСервере
Процедура ПроверитьДоступностьПодключения()
ПодключениеАктивно = Справочники.РК_НастройкиПодключенияКВнешнейБазе.СоединениеАктивно(
НаборКонстант.РК_РабочееПодключениеЧерезАПИ);
Элементы.ДекорацияПодключениеНеСработает.Видимость = (ПодключениеАктивно <> Истина);
КонецПроцедуры
#КонецОбласти
@@ -170,14 +170,13 @@
Если ЗначениеЗаполнено(ПолученныеДанные.ВидНоменклатуры) Тогда
Справочники.Номенклатура.ЗаполнитьРеквизитыПоВидуНоменклатуры(ПолученныеДанные);
КонецЕсли;
Возврат;
КонецЕсли;
Если Не ПолученныеДанные.ДополнительныеСвойства.Свойство("РК_СнимокУчетаНоменклатуры") Тогда
Возврат;
КонецЕсли;
Иначе
Если ПолученныеДанные.ДополнительныеСвойства.Свойство("РК_СнимокУчетаНоменклатуры") Тогда
ЗаполнитьЗначенияСвойств(ДанныеИБ, ПолученныеДанные.ДополнительныеСвойства.РК_СнимокУчетаНоменклатуры);
КонецЕсли;
КонецЕсли;
РК_ПрименитьВидНоменклатурыCRM326ИзДополнительныхСвойств(ПолученныеДанные, ДанныеИБ);
КонецПроцедуры
@@ -329,6 +328,85 @@
КонецФункции
// Подбор существующей серии в целевой ИБ по владельцу вида номенклатуры.
// Приоритет:
// 1) Вид + Номер + СрокГодности (если номер и срок заполнены)
// 2) Вид + Номер (если номер заполнен)
// 3) Вид + СрокГодности (если номер пустой и срок заполнен)
//
// Параметры:
// ВладелецСерий - СправочникСсылка.ВидыНоменклатуры
// НомерСерии - Строка
// СрокГодности - Дата, Неопределено
//
// Возвращаемое значение:
// СправочникСсылка.СерииНоменклатуры, Неопределено
//
Функция РК_НайтиСериюПоВладельцуНомерСроку(ВладелецСерий, НомерСерии, СрокГодности)
Если Не ЗначениеЗаполнено(ВладелецСерий) Тогда
Возврат Неопределено;
КонецЕсли;
НомерСерии = СокрЛП(Строка(НомерСерии));
СрокЗаполнен = ЗначениеЗаполнено(СрокГодности) И СрокГодности <> '00010101';
Если Не ПустаяСтрока(НомерСерии) Тогда
Запрос = Новый Запрос;
Если СрокЗаполнен Тогда
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Серии.Ссылка КАК Ссылка
|ИЗ
| Справочник.СерииНоменклатуры КАК Серии
|ГДЕ
| Серии.ВидНоменклатуры = &Владелец
| И НЕ Серии.ПометкаУдаления
| И Серии.Номер = &Номер
| И Серии.ГоденДо = &Срок";
Запрос.УстановитьПараметр("Срок", СрокГодности);
Иначе
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Серии.Ссылка КАК Ссылка
|ИЗ
| Справочник.СерииНоменклатуры КАК Серии
|ГДЕ
| Серии.ВидНоменклатуры = &Владелец
| И НЕ Серии.ПометкаУдаления
| И Серии.Номер = &Номер";
КонецЕсли;
Запрос.УстановитьПараметр("Владелец", ВладелецСерий);
Запрос.УстановитьПараметр("Номер", НомерСерии);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Ссылка;
КонецЕсли;
КонецЕсли;
Если СрокЗаполнен Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Серии.Ссылка КАК Ссылка
|ИЗ
| Справочник.СерииНоменклатуры КАК Серии
|ГДЕ
| Серии.ВидНоменклатуры = &Владелец
| И НЕ Серии.ПометкаУдаления
| И Серии.ГоденДо = &Срок";
Запрос.УстановитьПараметр("Владелец", ВладелецСерий);
Запрос.УстановитьПараметр("Срок", СрокГодности);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Ссылка;
КонецЕсли;
КонецЕсли;
Возврат Неопределено;
КонецФункции
// &После ДобавитьПКО_Справочник_СерииНоменклатуры.
// Подключает обработчик проверки владельца серии при получении из пакета обмена.
//
@@ -377,6 +455,8 @@
КонецЕсли;
СсылкаДляЖурнала = ?(ДанныеИБ = Неопределено, ПолученныеДанные.ПолучитьСсылкуНового(), ДанныеИБ.Ссылка);
НомерСерии = СокрЛП(Строка(ПолученныеДанные.Номер));
СрокГодности = ПолученныеДанные.ГоденДо;
Если ДанныеИБ <> Неопределено Тогда
@@ -406,33 +486,16 @@
Иначе
ПолученныеДанные.ВидНоменклатуры = КорректныйВладелец;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Серии.Ссылка КАК Ссылка
|ИЗ
| Справочник.СерииНоменклатуры КАК Серии
|ГДЕ
| Серии.ВидНоменклатуры = &Владелец
| И НЕ Серии.ПометкаУдаления
| И (Серии.Наименование = &Наименование
| ИЛИ Серии.Номер = &Номер
| И &НомерЗаполнен)";
Запрос.УстановитьПараметр("Владелец", КорректныйВладелец);
Запрос.УстановитьПараметр("Наименование", ПолученныеДанные.Наименование);
Запрос.УстановитьПараметр("Номер", ПолученныеДанные.Номер);
Запрос.УстановитьПараметр("НомерЗаполнен", ЗначениеЗаполнено(ПолученныеДанные.Номер));
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий()
И Выборка.Ссылка <> СсылкаДляЖурнала Тогда
СуществующаяСерия = РК_НайтиСериюПоВладельцуНомерСроку(КорректныйВладелец, НомерСерии, СрокГодности);
Если ЗначениеЗаполнено(СуществующаяСерия)
И СуществующаяСерия <> СсылкаДляЖурнала Тогда
ТекстОшибки = СтрШаблон(
"Серия с наименованием ""%1"" уже существует у владельца %2 (%3), GUID отличается от пакета.",
ПолученныеДанные.Наименование,
"Серия уже существует у владельца %1 (%2), GUID отличается от пакета. Номер=""%3"", годен до=""%4"".",
КорректныйВладелец,
Выборка.Ссылка);
СуществующаяСерия,
НомерСерии,
?(ЗначениеЗаполнено(СрокГодности), Формат(СрокГодности, "ДФ=yyyy-MM-dd"), ""));
ЗаписатьОшибкуВЖурналРегистрации(СсылкаДляЖурнала, ТекстОшибки, КомпонентыОбмена,
НСтр("ru = 'создать серию номенклатуры'"), УровеньЖурналаРегистрации.Предупреждение);
ПолученныеДанные = Неопределено;
@@ -443,4 +506,609 @@
КонецПроцедуры
// --- Объекты расчётов (crm3-dev → crm3-26) ---
// В UT 11.5 ОбъектыРасчетов — отдельный справочник; в XDTO 1.8 не передаётся.
// Типовой ВзаиморасчетыСервер.ПередЗаписью может не создать ОР (СоздатьПоКлючу, пустой партнёр).
// См. docs/transfer/План_синхронизации_2026-07-06_Учет.md (У1.1), Код_создания_объектов_расчетов_договоров.bsl.
// Возвращает партнёра и контрагента для договора: из договора, подсказок или последнего заказа.
//
// Параметры:
// ДоговорСсылка - СправочникСсылка.ДоговорыКонтрагентов.
// ПартнерПодсказка - СправочникСсылка.Партнеры, Неопределено.
// КонтрагентПодсказка - СправочникСсылка.Контрагенты, Неопределено.
//
// Возвращаемое значение:
// Структура - Партнер, Контрагент (могут остаться пустыми).
//
Функция РК_ПартнерКонтрагентДляДоговора(ДоговорСсылка, ПартнерПодсказка = Неопределено, КонтрагентПодсказка = Неопределено)
Результат = Новый Структура("Партнер, Контрагент");
Если Не ЗначениеЗаполнено(ДоговорСсылка) Тогда
Возврат Результат;
КонецЕсли;
РеквизитыДоговора = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДоговорСсылка, "Партнер, Контрагент");
Партнер = РеквизитыДоговора.Партнер;
Контрагент = РеквизитыДоговора.Контрагент;
Если ЗначениеЗаполнено(ПартнерПодсказка) Тогда
Партнер = ПартнерПодсказка;
КонецЕсли;
Если ЗначениеЗаполнено(КонтрагентПодсказка) Тогда
Контрагент = КонтрагентПодсказка;
КонецЕсли;
Если Не ЗначениеЗаполнено(Контрагент) И ЗначениеЗаполнено(Партнер) Тогда
Контрагент = ПартнерыИКонтрагенты.ПолучитьКонтрагентаПартнераПоУмолчанию(Партнер);
КонецЕсли;
Если Не ЗначениеЗаполнено(Партнер) И ЗначениеЗаполнено(Контрагент) Тогда
Партнер = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Контрагент, "Партнер");
КонецЕсли;
Если Не ЗначениеЗаполнено(Партнер) ИЛИ Не ЗначениеЗаполнено(Контрагент) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Зак.Партнер КАК Партнер,
| Зак.Контрагент КАК Контрагент
|ИЗ
| Документ.ЗаказКлиента КАК Зак
|ГДЕ
| Зак.Договор = &Договор
| И НЕ Зак.ПометкаУдаления
|УПОРЯДОЧИТЬ ПО
| Зак.Дата УБЫВ";
Запрос.УстановитьПараметр("Договор", ДоговорСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Если Не ЗначениеЗаполнено(Партнер) Тогда
Партнер = Выборка.Партнер;
КонецЕсли;
Если Не ЗначениеЗаполнено(Контрагент) Тогда
Контрагент = Выборка.Контрагент;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Контрагент) И ЗначениеЗаполнено(Партнер) Тогда
Контрагент = ПартнерыИКонтрагенты.ПолучитьКонтрагентаПартнераПоУмолчанию(Партнер);
КонецЕсли;
Результат.Партнер = Партнер;
Результат.Контрагент = Контрагент;
Возврат Результат;
КонецФункции
// Создаёт элемент справочника ОбъектыРасчетов для договора, если его ещё нет.
// Использует СоздатьЭлемент (не СоздатьПоКлючу — падает на договорах из обмена).
//
// Параметры:
// ДоговорСсылка - СправочникСсылка.ДоговорыКонтрагентов.
// Партнер - СправочникСсылка.Партнеры.
// Контрагент - СправочникСсылка.Контрагенты.
// КомпонентыОбмена - Структура - контекст обмена (для журнала).
//
// Возвращаемое значение:
// СправочникСсылка.ОбъектыРасчетов - созданный или найденный ОР; пустая ссылка при ошибке.
//
Функция РК_ОбеспечитьОбъектРасчетовПоДоговору(ДоговорСсылка, Партнер, Контрагент, КомпонентыОбмена)
ПустаяСсылкаОР = Справочники.ОбъектыРасчетов.ПустаяСсылка();
Если Не ЗначениеЗаполнено(ДоговорСсылка) Или Не ОбщегоНазначения.СсылкаСуществует(ДоговорСсылка) Тогда
Возврат ПустаяСсылкаОР;
КонецЕсли;
Если Не ЗначениеЗаполнено(Партнер) Или Не ЗначениеЗаполнено(Контрагент) Тогда
Возврат ПустаяСсылкаОР;
КонецЕсли;
Организация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДоговорСсылка, "Организация");
Если Не ЗначениеЗаполнено(Организация) Тогда
Возврат ПустаяСсылкаОР;
КонецЕсли;
Валюта = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДоговорСсылка, "ВалютаВзаиморасчетов");
Если Не ЗначениеЗаполнено(Валюта) Тогда
Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
КонецЕсли;
КритерииОР = ОбъектыРасчетовСервер.ДополнительныеКритерииПоиска();
КритерииОР.Партнер = Партнер;
КритерииОР.Контрагент = Контрагент;
КритерииОР.ВалютаВзаиморасчетов = Валюта;
КритерииОР.ВернутьПервый = Истина;
СсылкаОР = ОбъектыРасчетовСервер.ПолучитьОбъектРасчетовПоСсылке(
ДоговорСсылка,
Организация,
Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом,
КритерииОР);
Если ЗначениеЗаполнено(СсылкаОР) Тогда
Возврат СсылкаОР;
КонецЕсли;
Попытка
НовыйОР = Справочники.ОбъектыРасчетов.СоздатьЭлемент();
НовыйОР.Объект = ДоговорСсылка;
НовыйОР.Организация = Организация;
НовыйОР.Контрагент = Контрагент;
НовыйОР.Партнер = Партнер;
НовыйОР.ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом;
НовыйОР.ВалютаВзаиморасчетов = Валюта;
НовыйОР.Договор = ДоговорСсылка;
НовыйОР.Записать();
Возврат НовыйОР.Ссылка;
Исключение
ТекстОшибки = СтрШаблон(
"Не удалось создать объект расчётов для договора %1: %2",
ДоговорСсылка,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписатьОшибкуВЖурналРегистрации(ДоговорСсылка, ТекстОшибки, КомпонентыОбмена,
НСтр("ru = 'создать объект расчётов по договору'"), УровеньЖурналаРегистрации.Предупреждение);
Возврат ПустаяСсылкаОР;
КонецПопытки;
КонецФункции
// &После ПКО_Справочник_ДоговорыКонтрагентов_Получение_ПередЗаписьюПолученныхДанных.
// Дозаполняет партнёра на договоре из контрагента до записи в ИБ.
//
&После("ПКО_Справочник_ДоговорыКонтрагентов_Получение_ПередЗаписьюПолученныхДанных")
Процедура РК_ПКО_ДоговорыКонтрагентов_ДозаполнитьПартнера(ПолученныеДанные, ДанныеИБ, КонвертацияСвойств, КомпонентыОбмена)
Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда
Возврат;
КонецЕсли;
Если ПолученныеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПолученныеДанные.Партнер) И ЗначениеЗаполнено(ПолученныеДанные.Контрагент) Тогда
ПолученныеДанные.Партнер = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПолученныеДанные.Контрагент, "Партнер");
КонецЕсли;
Если Не ЗначениеЗаполнено(ПолученныеДанные.Контрагент) И ЗначениеЗаполнено(ПолученныеДанные.Партнер) Тогда
ПолученныеДанные.Контрагент = ПартнерыИКонтрагенты.ПолучитьКонтрагентаПартнераПоУмолчанию(ПолученныеДанные.Партнер);
КонецЕсли;
КонецПроцедуры
// &После ОтложеннаяОбработка_СоздатьОбновитьОбъектыРасчетов.
// Досоздаёт объекты расчётов по договорам из пакета обмена, если типовой механизм их пропустил.
//
&После("ОтложеннаяОбработка_СоздатьОбновитьОбъектыРасчетов")
Процедура РК_ОтложеннаяОбработка_ДосоздатьОбъектыРасчетов(КомпонентыОбмена)
Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда
Возврат;
КонецЕсли;
ДоговорыКОбработке = Новый Соответствие;
Для Каждого ЗагруженныйОбъект Из КомпонентыОбмена.ЗагруженныеОбъекты Цикл
СсылкаНаОбъект = ЗагруженныйОбъект.СсылкаНаОбъект;
ТипСсылки = ТипЗнч(СсылкаНаОбъект);
Если ТипСсылки = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
ДоговорыКОбработке.Вставить(СсылкаНаОбъект, Новый Структура("Партнер, Контрагент"));
ИначеЕсли ТипСсылки = Тип("ДокументСсылка.ЗаказКлиента") Тогда
РеквизитыЗаказа = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаОбъект, "Договор, Партнер, Контрагент");
Если ЗначениеЗаполнено(РеквизитыЗаказа.Договор) Тогда
Подсказки = Новый Структура("Партнер, Контрагент", РеквизитыЗаказа.Партнер, РеквизитыЗаказа.Контрагент);
ДоговорыКОбработке.Вставить(РеквизитыЗаказа.Договор, Подсказки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого КлючИЗначение Из ДоговорыКОбработке Цикл
ДоговорСсылка = КлючИЗначение.Ключ;
Подсказки = КлючИЗначение.Значение;
Участники = РК_ПартнерКонтрагентДляДоговора(
ДоговорСсылка,
Подсказки.Партнер,
Подсказки.Контрагент);
РК_ОбеспечитьОбъектРасчетовПоДоговору(
ДоговорСсылка,
Участники.Партнер,
Участники.Контрагент,
КомпонентыОбмена);
КонецЦикла;
КонецПроцедуры
// Д1.2: этапы графика оплаты из соглашения/договора при загрузке ЗаказКлиента.
// XDTO 1.8 не передаёт ВариантОтсчета; ДатаПлатежа часто пустая.
// Типовой ОтложеннаяОбработка_ЗаказыПоставщикуКлиента вызывает
// ЭтапыОплатыСервер.ПроверитьЗаполнитьЭтапыГрафикаОплаты только при пустой ТЧ —
// при «бедных» строках из пакета пересчёт не выполняется.
//
&После("ОтложеннаяОбработка_ЗаказыПоставщикуКлиента")
Процедура РК_ОтложеннаяОбработка_ЗаказыПоставщикуКлиента_ЭтапыОплаты(Объект, КомпонентыОбмена)
Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда
Возврат;
КонецЕсли;
РК_ДозаполнитьЭтапыГрафикаОплатыПоСоглашению(Объект);
КонецПроцедуры
// Перезаполняет ТЧ ЭтапыГрафикаОплаты, если есть строки без ДатаПлатежа / ВариантОтсчета.
// Иначе вызывает типовое заполнение из соглашения / графика оплаты / договора.
//
Процедура РК_ДозаполнитьЭтапыГрафикаОплатыПоСоглашению(Объект) Экспорт
Если Объект = Неопределено Тогда
Возврат;
КонецЕсли;
МетаОбъекта = Объект.Метаданные();
Если МетаОбъекта.ТабличныеЧасти.Найти("ЭтапыГрафикаОплаты") = Неопределено Тогда
Возврат;
КонецЕсли;
Если МетаОбъекта.Реквизиты.Найти("Соглашение") = Неопределено Тогда
Возврат;
КонецЕсли;
НужноПерезаполнить = Ложь;
Если Объект.ЭтапыГрафикаОплаты.Количество() = 0 Тогда
НужноПерезаполнить = ЗначениеЗаполнено(Объект.Соглашение)
Или (МетаОбъекта.Реквизиты.Найти("ГрафикОплаты") <> Неопределено
И ЗначениеЗаполнено(Объект.ГрафикОплаты))
Или (МетаОбъекта.Реквизиты.Найти("Договор") <> Неопределено
И ЗначениеЗаполнено(Объект.Договор));
Иначе
Для Каждого СтрокаЭтапа Из Объект.ЭтапыГрафикаОплаты Цикл
Если Не ЗначениеЗаполнено(СтрокаЭтапа.ДатаПлатежа)
Или Не ЗначениеЗаполнено(СтрокаЭтапа.ВариантОтсчета) Тогда
НужноПерезаполнить = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Не НужноПерезаполнить Тогда
Возврат;
КонецЕсли;
// Условия из соглашения (как при перевыборе на форме): график и форма оплаты.
Если ЗначениеЗаполнено(Объект.Соглашение)
И ТипЗнч(Объект.Соглашение) = Тип("СправочникСсылка.СоглашенияСКлиентами") Тогда
РеквизитыСоглашения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Соглашение,
"ГрафикОплаты,ФормаОплаты");
Если МетаОбъекта.Реквизиты.Найти("ГрафикОплаты") <> Неопределено
И Не ЗначениеЗаполнено(Объект.ГрафикОплаты)
И ЗначениеЗаполнено(РеквизитыСоглашения.ГрафикОплаты) Тогда
Объект.ГрафикОплаты = РеквизитыСоглашения.ГрафикОплаты;
КонецЕсли;
Если МетаОбъекта.Реквизиты.Найти("ФормаОплаты") <> Неопределено
И Не ЗначениеЗаполнено(Объект.ФормаОплаты)
И ЗначениеЗаполнено(РеквизитыСоглашения.ФормаОплаты) Тогда
Объект.ФормаОплаты = РеквизитыСоглашения.ФормаОплаты;
КонецЕсли;
КонецЕсли;
Объект.ЭтапыГрафикаОплаты.Очистить();
ЭтапыОплатыСервер.ПроверитьЗаполнитьЭтапыГрафикаОплаты(Объект);
КонецПроцедуры
// Д1.3 / issue #10: ВидЦены строк из AdditionalInfo.РК_ВидыЦенСтрок (не из соглашения).
// 1) ПриКонвертацииДанныхXDTO — сохранить карту в ДополнительныеСвойства и ПараметрыКонвертации.
// 2) ОтложеннаяОбработка_* — применить к ТЧ документа (пустые в источнике остаются пустыми).
//
&После("ВыполнитьПроцедуруМодуляМенеджера")
Процедура РК_ВыполнитьПроцедуруМодуляМенеджера_ВидыЦенИзAdditionalInfo(ИмяПроцедуры, Параметры)
Если Параметры = Неопределено Тогда
Возврат;
КонецЕсли;
КомпонентыОбмена = Неопределено;
Параметры.Свойство("КомпонентыОбмена", КомпонентыОбмена);
Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда
Возврат;
КонецЕсли;
Если СтрЗаканчиваетсяНа(ИмяПроцедуры, "_ПриКонвертацииДанныхXDTO") Тогда
ДанныеXDTO = Неопределено;
ПолученныеДанные = Неопределено;
Параметры.Свойство("ДанныеXDTO", ДанныеXDTO);
Параметры.Свойство("ПолученныеДанные", ПолученныеДанные);
РК_СохранитьВидыЦенСтрокИзAdditionalInfo(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена);
РК_СохранитьВидНоменклатурыCRM326ИзAdditionalInfo(ДанныеXDTO, ПолученныеДанные);
ИначеЕсли СтрНачинаетсяС(ИмяПроцедуры, "ОтложеннаяОбработка_") Тогда
Объект = Неопределено;
Если Не Параметры.Свойство("Объект", Объект) Или Объект = Неопределено Тогда
Возврат;
КонецЕсли;
РК_ПрименитьВидыЦенСтрокИзДополнительныхСвойств(Объект, КомпонентыОбмена);
КонецЕсли;
КонецПроцедуры
Процедура РК_ИнициализироватьКешВидовЦенСтрок(КомпонентыОбмена)
Если КомпонентыОбмена = Неопределено Или Не КомпонентыОбмена.Свойство("ПараметрыКонвертации") Тогда
Возврат;
КонецЕсли;
Если Не КомпонентыОбмена.ПараметрыКонвертации.Свойство("РК_ВидыЦенСтрокПоОбъектам") Тогда
КомпонентыОбмена.ПараметрыКонвертации.Вставить("РК_ВидыЦенСтрокПоОбъектам", Новый Соответствие);
КонецЕсли;
КонецПроцедуры
Функция РК_КлючКешаВидовЦенСтрок(Объект)
Попытка
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
Возврат НРег(XMLСтрока(Объект.Ссылка.УникальныйИдентификатор()));
КонецЕсли;
Исключение
КонецПопытки;
Попытка
СсылкаНового = Объект.ПолучитьСсылкуНового();
Если ЗначениеЗаполнено(СсылкаНового) Тогда
Возврат НРег(XMLСтрока(СсылкаНового.УникальныйИдентификатор()));
КонецЕсли;
Исключение
КонецПопытки;
Возврат "";
КонецФункции
// Копирует РК_ВидыЦенСтрок из AdditionalInfo пакета в ДополнительныеСвойства и кеш сессии обмена.
//
Процедура РК_СохранитьВидыЦенСтрокИзAdditionalInfo(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена)
Если ДанныеXDTO = Неопределено Или ПолученныеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не ДанныеXDTO.Свойство("AdditionalInfo")
Или ТипЗнч(ДанныеXDTO.AdditionalInfo) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
ВидыЦенСтрок = Неопределено;
Если Не ДанныеXDTO.AdditionalInfo.Свойство("РК_ВидыЦенСтрок", ВидыЦенСтрок)
Или ВидыЦенСтрок = Неопределено Тогда
Возврат;
КонецЕсли;
Попытка
ПолученныеДанные.ДополнительныеСвойства.Вставить("РК_ВидыЦенСтрок", ВидыЦенСтрок);
Исключение
// ПолученныеДанные может быть структурой без ДополнительныеСвойства.
КонецПопытки;
РК_ИнициализироватьКешВидовЦенСтрок(КомпонентыОбмена);
Ключ = РК_КлючКешаВидовЦенСтрок(ПолученныеДанные);
Если ЗначениеЗаполнено(Ключ)
И КомпонентыОбмена <> Неопределено
И КомпонентыОбмена.Свойство("ПараметрыКонвертации")
И КомпонентыОбмена.ПараметрыКонвертации.Свойство("РК_ВидыЦенСтрокПоОбъектам") Тогда
КомпонентыОбмена.ПараметрыКонвертации.РК_ВидыЦенСтрокПоОбъектам.Вставить(Ключ, ВидыЦенСтрок);
КонецЕсли;
КонецПроцедуры
// Проставляет ВидЦены / ВидЦеныПоставщика в строках ТЧ по карте из AdditionalInfo.
//
Процедура РК_ПрименитьВидыЦенСтрокИзДополнительныхСвойств(Объект, КомпонентыОбмена = Неопределено) Экспорт
Если Объект = Неопределено Тогда
Возврат;
КонецЕсли;
ВидыЦенСтрок = Неопределено;
Попытка
Объект.ДополнительныеСвойства.Свойство("РК_ВидыЦенСтрок", ВидыЦенСтрок);
Исключение
ВидыЦенСтрок = Неопределено;
КонецПопытки;
Если ВидыЦенСтрок = Неопределено И КомпонентыОбмена <> Неопределено Тогда
РК_ИнициализироватьКешВидовЦенСтрок(КомпонентыОбмена);
Ключ = РК_КлючКешаВидовЦенСтрок(Объект);
Если ЗначениеЗаполнено(Ключ)
И КомпонентыОбмена.ПараметрыКонвертации.Свойство("РК_ВидыЦенСтрокПоОбъектам") Тогда
ВидыЦенСтрок = КомпонентыОбмена.ПараметрыКонвертации.РК_ВидыЦенСтрокПоОбъектам.Получить(Ключ);
КонецЕсли;
КонецЕсли;
Если ВидыЦенСтрок = Неопределено Тогда
Возврат;
КонецЕсли;
МетаОбъекта = Объект.Метаданные();
Для Каждого ОписаниеСтроки Из ВидыЦенСтрок Цикл
Если ТипЗнч(ОписаниеСтроки) <> Тип("Структура") Тогда
Продолжить;
КонецЕсли;
ИмяТЧ = Неопределено;
НомерСтроки = Неопределено;
ОписаниеСтроки.Свойство("ТЧ", ИмяТЧ);
ОписаниеСтроки.Свойство("НомерСтроки", НомерСтроки);
Если Не ЗначениеЗаполнено(ИмяТЧ) Или Не ЗначениеЗаполнено(НомерСтроки) Тогда
Продолжить;
КонецЕсли;
МетаТЧ = МетаОбъекта.ТабличныеЧасти.Найти(ИмяТЧ);
Если МетаТЧ = Неопределено Тогда
Продолжить;
КонецЕсли;
ТабличнаяЧасть = Объект[ИмяТЧ];
СтрокаТЧ = Неопределено;
ИндексВТЧ = Неопределено;
Если ОписаниеСтроки.Свойство("ИндексВТЧ", ИндексВТЧ)
И ТипЗнч(ИндексВТЧ) = Тип("Число")
И ИндексВТЧ >= 0
И ИндексВТЧ < ТабличнаяЧасть.Количество() Тогда
СтрокаТЧ = ТабличнаяЧасть[ИндексВТЧ];
КонецЕсли;
Если СтрокаТЧ = Неопределено Тогда
СтрокаТЧ = ТабличнаяЧасть.Найти(НомерСтроки, "НомерСтроки");
КонецЕсли;
Если СтрокаТЧ = Неопределено Тогда
Продолжить;
КонецЕсли;
Если МетаТЧ.Реквизиты.Найти("ВидЦены") <> Неопределено
И ОписаниеСтроки.Свойство("ВидЦены") Тогда
СтрокаТЧ.ВидЦены = РК_НайтиВидЦеныПоОписанию(
ОписаниеСтроки, "ВидЦены", "ВидЦеныИмя", Ложь);
КонецЕсли;
Если МетаТЧ.Реквизиты.Найти("ВидЦеныПоставщика") <> Неопределено
И ОписаниеСтроки.Свойство("ВидЦеныПоставщика") Тогда
СтрокаТЧ.ВидЦеныПоставщика = РК_НайтиВидЦеныПоОписанию(
ОписаниеСтроки, "ВидЦеныПоставщика", "ВидЦеныПоставщикаИмя", Истина);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Разрешает ссылку вида цены: GUID (если объект есть в ИБ), иначе наименование; пусто → пустая ссылка.
//
Функция РК_НайтиВидЦеныПоОписанию(ОписаниеСтроки, ИмяGUID, ИмяНаименования, ЭтоПоставщика)
Если ЭтоПоставщика Тогда
МенеджерВидовЦен = Справочники.ВидыЦенПоставщиков;
Иначе
МенеджерВидовЦен = Справочники.ВидыЦен;
КонецЕсли;
GUIDСтрока = "";
Наименование = "";
ОписаниеСтроки.Свойство(ИмяGUID, GUIDСтрока);
ОписаниеСтроки.Свойство(ИмяНаименования, Наименование);
Если ЗначениеЗаполнено(GUIDСтрока) Тогда
Попытка
СсылкаПоGUID = МенеджерВидовЦен.ПолучитьСсылку(Новый УникальныйИдентификатор(GUIDСтрока));
Если ОбщегоНазначения.СсылкаСуществует(СсылкаПоGUID) Тогда
Возврат СсылкаПоGUID;
КонецЕсли;
Исключение
// Некорректный GUID — пробуем наименование.
КонецПопытки;
КонецЕсли;
Если ЗначениеЗаполнено(Наименование) Тогда
СсылкаПоИмени = МенеджерВидовЦен.НайтиПоНаименованию(Наименование, Истина);
Если ЗначениеЗаполнено(СсылкаПоИмени) Тогда
Возврат СсылкаПоИмени;
КонецЕсли;
КонецЕсли;
Возврат МенеджерВидовЦен.ПустаяСсылка();
КонецФункции
// Ключ AdditionalInfo для вида номенклатуры CRM3-26 (доп. реквизит ра_ВидНоменклатурыCRM326 в исходной ИБ).
//
Функция РК_КлючAdditionalInfoВидНоменклатурыCRM326()
Возврат "РК_ВидНоменклатурыCRM326";
КонецФункции
// Сохраняет наименование вида номенклатуры из AdditionalInfo пакета в ДополнительныеСвойства номенклатуры.
//
Процедура РК_СохранитьВидНоменклатурыCRM326ИзAdditionalInfo(ДанныеXDTO, ПолученныеДанные)
Если ДанныеXDTO = Неопределено Или ПолученныеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не ДанныеXDTO.Свойство("AdditionalInfo")
Или ТипЗнч(ДанныеXDTO.AdditionalInfo) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
НаименованиеВида = "";
Если Не ДанныеXDTO.AdditionalInfo.Свойство(РК_КлючAdditionalInfoВидНоменклатурыCRM326(), НаименованиеВида)
Или Не ЗначениеЗаполнено(НаименованиеВида) Тогда
Возврат;
КонецЕсли;
Попытка
ПолученныеДанные.ДополнительныеСвойства.Вставить(РК_КлючAdditionalInfoВидНоменклатурыCRM326(), СокрЛП(Строка(НаименованиеВида)));
Исключение
// ПолученныеДанные может быть структурой без ДополнительныеСвойства.
КонецПопытки;
КонецПроцедуры
// Приоритетно сопоставляет ВидНоменклатуры целевой ИБ по наименованию из ра_ВидНоменклатурыCRM326.
// Если значение не передано — остаётся текущий механизм обмена (в т.ч. защита учётных реквизитов).
//
Процедура РК_ПрименитьВидНоменклатурыCRM326ИзДополнительныхСвойств(ПолученныеДанные, ДанныеИБ)
Если ПолученныеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
НаименованиеВида = "";
Попытка
Если Не ПолученныеДанные.ДополнительныеСвойства.Свойство(РК_КлючAdditionalInfoВидНоменклатурыCRM326(), НаименованиеВида)
Или Не ЗначениеЗаполнено(НаименованиеВида) Тогда
Возврат;
КонецЕсли;
Исключение
Возврат;
КонецПопытки;
ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию(СокрЛП(Строка(НаименованиеВида)), Истина);
Если Не ЗначениеЗаполнено(ВидНоменклатуры) Тогда
Возврат;
КонецЕсли;
ПолученныеДанные.ВидНоменклатуры = ВидНоменклатуры;
Если ДанныеИБ <> Неопределено Тогда
ДанныеИБ.ВидНоменклатуры = ВидНоменклатуры;
Иначе
Справочники.Номенклатура.ЗаполнитьРеквизитыПоВидуНоменклатуры(ПолученныеДанные);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<CommonModule uuid="392bf65e-0667-4464-ab9f-98e9af6de114">
<InternalInfo>
<xr:PropertyState>
<xr:Property>Module</xr:Property>
<xr:State>Extended</xr:State>
</xr:PropertyState>
</InternalInfo>
<Properties>
<ObjectBelonging>Adopted</ObjectBelonging>
<Name>ОбменДаннымиXDTOСервер</Name>
<Comment/>
<ExtendedConfigurationObject>4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e</ExtendedConfigurationObject>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
</Properties>
</CommonModule>
</MetaDataObject>
@@ -0,0 +1,162 @@
// Исправление падения приёма XDTO: отсутствующие свойства формата в строке ТЧ.
// Типовой код пишет в ПриемникДанных.ДополнительныеСвойства, но у строки ТЧ этого поля нет
// (типичный кейс: СчетФактураВыданный.ПлатежноРасчетныеДокументы из crm3-dev без полей аванса).
&ИзменениеИКонтроль("КонвертацияСвойстваСтруктурыОбъектаXDTO")
Процедура РК_КонвертацияСвойстваСтруктурыОбъектаXDTO(
КомпонентыОбмена,
ДанныеXDTO,
ДополнительныеСвойства,
ПриемникДанных,
ПКС,
НомерЭтапа = 1,
ИмяТЧ = "")
// Обрабатывается ПКС где указано только свойство формата - оно используется только при выгрузке.
Если СокрЛП(ПКС.СвойствоКонфигурации) = "" Тогда
Возврат;
КонецЕсли;
ПравилоКонвертацииСвойства = ПКС.ПравилоКонвертацииСвойства;
ЗначениеСвойства = "";
Попытка
Если НомерЭтапа = 1 Тогда
Если Не ЗначениеЗаполнено(ПКС.СвойствоФормата) Тогда
Возврат;
КонецЕсли;
Если ПКС.ОбработкаКлючевогоСвойства
И Не ДанныеXDTO.Свойство("ЭтоНаборКлючевыхСвойств") Тогда
ИсточникДанных = ДанныеXDTO[КлассКлючевыеСвойства()];
Иначе
ИсточникДанных = ДанныеXDTO;
КонецЕсли;
СвойствоФормата_Имя = СокрЛП(ПКС.СвойствоФормата);
ПозицияТочки = СтрНайти(СвойствоФормата_Имя, ".");
// Указано полное имя свойства, входящего в группу общих свойств.
Если ПозицияТочки > 0 Тогда
ВложенныеСвойства = СтрРазделить(СвойствоФормата_Имя,".",Ложь);
ПолучитьЗначениеВложенныхСвойств(ИсточникДанных, ВложенныеСвойства, ЗначениеСвойства);
Иначе
Если НЕ ИсточникДанных.Свойство(СвойствоФормата_Имя, ЗначениеСвойства)
И НЕ ПКС.ОбработкаКлючевогоСвойства
И НЕ ПКС.ИспользуетсяАлгоритмКонвертации
Тогда
#Удаление
Если ПриемникДанных.ДополнительныеСвойства.Свойство("СвойстваОтсутствующиеВПолученныхДанных") Тогда
ПриемникДанных.ДополнительныеСвойства.СвойстваОтсутствующиеВПолученныхДанных = ПриемникДанных.ДополнительныеСвойства.СвойстваОтсутствующиеВПолученныхДанных + "," + СвойствоФормата_Имя;
Иначе
ПриемникДанных.ДополнительныеСвойства.Вставить("СвойстваОтсутствующиеВПолученныхДанных", СвойствоФормата_Имя);
КонецЕсли;
#КонецУдаления
#Вставка
// === [РК] НАЧАЛО БЛОКА ВСТАВКИ ===
// У строки ТЧ нет ДополнительныеСвойства (пакет без опциональных полей формата,
// например ДатаИсправленияСчетаФактурыНаАванс из crm3-dev).
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ПриемникДанных, "ДополнительныеСвойства") Тогда
Если ПриемникДанных.ДополнительныеСвойства.Свойство("СвойстваОтсутствующиеВПолученныхДанных") Тогда
ПриемникДанных.ДополнительныеСвойства.СвойстваОтсутствующиеВПолученныхДанных =
ПриемникДанных.ДополнительныеСвойства.СвойстваОтсутствующиеВПолученныхДанных + "," + СвойствоФормата_Имя;
Иначе
ПриемникДанных.ДополнительныеСвойства.Вставить("СвойстваОтсутствующиеВПолученныхДанных", СвойствоФормата_Имя);
КонецЕсли;
КонецЕсли;
// === [РК] КОНЕЦ БЛОКА ВСТАВКИ ===
#КонецВставки
КонецЕсли;
КонецЕсли;
ИначеЕсли НомерЭтапа = 2 Тогда
Если НомерЭтапа = 2 И Не ПКС.ИспользуетсяАлгоритмКонвертации Тогда
Возврат;
КонецЕсли;
// На 2-м этапе значения свойств получаются из дополнительных свойств объекта полученных данных
// и представляют из себя структуру, содержащую инструкцию для конвертации, либо значение XDTO.
// Если приемником значения является строка табличной части, то значение свойства располагается
// в ДополнительныеСвойства[ИмяТабличнойЧасти][ИндексСтроки].
Если ЗначениеЗаполнено(ИмяТЧ) Тогда
ИсточникДанных = ДополнительныеСвойства[ИмяТЧ][ПриемникДанных.НомерСтроки - 1];
Иначе
ИсточникДанных = ДополнительныеСвойства;
КонецЕсли;
Если ИсточникДанных.Свойство(ПКС.СвойствоКонфигурации) Тогда
ЗначениеСвойства = ИсточникДанных[ПКС.СвойствоКонфигурации];
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(ЗначениеСвойства) Тогда
Возврат;
КонецЕсли;
УдалятьСозданныеПоКлючевымСвойствам = КомпонентыОбмена.УдалятьСозданныеПоКлючевымСвойствам;
Если ТипЗнч(ЗначениеСвойства) = Тип("Структура")
И ЗначениеСвойства.Свойство("ИмяПКО")
И ЗначениеСвойства.Свойство("Значение") Тогда
// Значением является инструкция.
Если ЗначениеСвойства.Свойство("УдалятьСозданныеПоКлючевымСвойствам") Тогда
УдалятьСозданныеПоКлючевымСвойствам = ЗначениеСвойства.УдалятьСозданныеПоКлючевымСвойствам;
КонецЕсли;
ПравилоКонвертацииСвойства = ЗначениеСвойства.ИмяПКО;
ЗначениеСвойства = ЗначениеСвойства.Значение;
КонецЕсли;
Если ТипЗнч(ЗначениеСвойства) = Тип("Структура") Тогда
Если Не ЗначениеЗаполнено(ПравилоКонвертацииСвойства) Тогда
Возврат;
КонецЕсли;
ПКПД = КомпонентыОбмена.ПравилаКонвертацииПредопределенныхДанных.Найти(ПравилоКонвертацииСвойства, "ИмяПКПД");
Если ПКПД <> Неопределено Тогда
Значение = ПКПД.КонвертацииЗначенийПриПолучении.Получить(ЗначениеСвойства.Значение);
ПриемникДанных[ПКС.СвойствоКонфигурации] = Значение;
Возврат;
Иначе
ПравилоКонвертацииСвойства = ПКОПоИмени(КомпонентыОбмена, ПравилоКонвертацииСвойства);
КонецЕсли;
Иначе
// Конвертацию простых свойств выполняем только на 1-м этапе.
ПриемникДанных[ПКС.СвойствоКонфигурации] = ЗначениеСвойства;
Возврат;
КонецЕсли;
ПравилоКонвертации = Новый Структура("ПравилоКонвертации, УдалятьСозданныеПоКлючевымСвойствам",
ПравилоКонвертацииСвойства, УдалятьСозданныеПоКлючевымСвойствам);
ДанныеДляЗаписиВИБ = СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, ЗначениеСвойства, ПравилоКонвертации, "ПолучитьСсылку");
Если ДанныеДляЗаписиВИБ <> Неопределено Тогда
ПриемникДанных[ПКС.СвойствоКонфигурации] = ДанныеДляЗаписиВИБ.Ссылка;
КонецЕсли;
Исключение
ПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка конвертации свойства объекта XDTO, имя свойства: <%1>.'"), ПКС.СвойствоКонфигурации)
+ Символы.ПС + Символы.ПС + ПредставлениеОшибки;
ВызватьИсключение ТекстОшибки;
КонецПопытки;
КонецПроцедуры
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<CommonModule uuid="c7bc6cfd-24e8-45cc-abb6-36516b716cb5">
<InternalInfo/>
<Properties>
<ObjectBelonging>Adopted</ObjectBelonging>
<Name>ОбщегоНазначения</Name>
<Comment/>
<ExtendedConfigurationObject>ee1b4c39-8e14-4eda-9b3b-27ac089017bc</ExtendedConfigurationObject>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
</Properties>
</CommonModule>
</MetaDataObject>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<CommonModule uuid="204641bf-09d1-470a-9d72-3eb46439556d">
<InternalInfo>
<xr:PropertyState>
<xr:Property>Module</xr:Property>
<xr:State>Extended</xr:State>
</xr:PropertyState>
</InternalInfo>
<Properties>
<ObjectBelonging>Adopted</ObjectBelonging>
<Name>ПартнерыИКонтрагентыЛокализация</Name>
<Comment/>
<ExtendedConfigurationObject>c7ca240a-541d-4f86-8e30-0e63aafcd5fa</ExtendedConfigurationObject>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
</Properties>
</CommonModule>
</MetaDataObject>
@@ -0,0 +1,175 @@
&ИзменениеИКонтроль("ИННКППУжеИспользуетсяВИнформационнойБазе")
Функция РК_ИННКППУжеИспользуетсяВИнформационнойБазе(ИНН, КПП, ИсключаяСсылку = Неопределено, ЮрФизЛицо = Неопределено) Экспорт
РезультатПоиска = Новый Структура;
РезультатПоиска.Вставить("НайденныеСовпадения", Новый Массив);
РезультатПоиска.Вставить("ДоступноСоздание", Истина);
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
#Удаление
Запрос.Текст = "
|ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
| Партнеры.Ссылка КАК Партнер,
| Партнеры.Код КАК Код,
| ПРЕДСТАВЛЕНИЕ(Партнеры.ОсновнойМенеджер) КАК ОсновнойМенеджер
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
| ПО Контрагенты.Партнер = Партнеры.Ссылка
|ГДЕ
| Контрагенты.ИНН = &ИНН
| И Контрагенты.КПП = &КПП
| И Контрагенты.Ссылка <> &Ссылка";
#КонецУдаления
#Вставка
// {{ [+] (фрагмент ДОБАВЛЕН), уникальность ИНН/КПП только среди непомеченных на удаление контрагентов
Запрос.Текст = "
|ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
| Партнеры.Ссылка КАК Партнер,
| Партнеры.Код КАК Код,
| ПРЕДСТАВЛЕНИЕ(Партнеры.ОсновнойМенеджер) КАК ОсновнойМенеджер
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
| ПО Контрагенты.Партнер = Партнеры.Ссылка
|ГДЕ
| Контрагенты.ИНН = &ИНН
| И Контрагенты.КПП = &КПП
| И Контрагенты.Ссылка <> &Ссылка
| И НЕ Контрагенты.ПометкаУдаления";
// }}
#КонецВставки
Запрос.УстановитьПараметр("ИНН",ИНН);
Запрос.УстановитьПараметр("КПП",КПП);
Запрос.УстановитьПараметр("Ссылка",ИсключаяСсылку);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() = 1 Тогда
Выборка.Следующий();
Если ЗначениеЗаполнено(ИсключаяСсылку)
И Выборка.Ссылка = ИсключаяСсылку Тогда
Возврат РезультатПоиска;
ИначеЕсли ЗначениеЗаполнено(ЮрФизЛицо) Тогда
Если ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель
И Выборка.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
ИначеЕсли ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
И Выборка.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель Тогда
ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
Иначе
ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
РезультатПоиска.ДоступноСоздание = Ложь;
КонецЕсли;
Иначе
ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
РезультатПоиска.ДоступноСоздание = Ложь;
КонецЕсли;
ИначеЕсли Выборка.Количество() > 1 Тогда
РезультатПоиска.ДоступноСоздание = Ложь;
Пока Выборка.Следующий() Цикл
ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
КонецЦикла;
КонецЕсли;
Возврат РезультатПоиска;
КонецФункции
&ИзменениеИКонтроль("ПроверитьКорректностьЗаполненияКонтрагента")
Процедура РК_ПроверитьКорректностьЗаполненияКонтрагента(Объект, Контрагент, Отказ) Экспорт
//++ Локализация
КлючДанных = ?(ТипЗнч(Объект) = Тип("ФормаКлиентскогоПриложения"), Неопределено, Объект);
Если Объект.ОбособленноеПодразделение И ЗначениеЗаполнено(Объект.ГоловнойКонтрагент) Тогда
Если Объект.ГоловнойКонтрагент <> Контрагент Тогда
СвойстваГоловногоКонтрагента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
Объект.ГоловнойКонтрагент, "Наименование, ИНН");
Если ЗначениеЗаполнено(СвойстваГоловногоКонтрагента.ИНН) И СвойстваГоловногоКонтрагента.ИНН <> Объект.ИНН Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'ИНН контрагента не равен указанному в головном подразделении'"),
СвойстваГоловногоКонтрагента.Наименование);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, КлючДанных, "ИНН", , Отказ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ИНН) Тогда
#Вставка
// {{ [+] (фрагмент ДОБАВЛЕН), для помеченных на удаление уникальность ИНН/КПП не проверяется
Если НЕ Объект.ПометкаУдаления Тогда
// }}
#КонецВставки
РезультатПоиска = ИННКППУжеИспользуетсяВИнформационнойБазе(Объект.ИНН, Объект.КПП, Контрагент, Объект.ЮрФизЛицо) ;
Если Не РезультатПоиска.ДоступноСоздание Тогда
ДанныеКонтрагента = РезультатПоиска.НайденныеСовпадения[0];
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Данные ИНН и КПП уже указаны для другого контрагента, ответственный - %1.'"),
ДанныеКонтрагента.ОсновнойМенеджер),
КлючДанных,
"ИНН",
,
Отказ);
КонецЕсли;
#Вставка
КонецЕсли;
// }}
#КонецВставки
Иначе
Если НЕ ПартнерыИКонтрагенты.УпрощенныйВводДоступен() Тогда
Если (Объект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель
ИЛИ Объект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru = 'Не указан ИНН'"),
КлючДанных,
"ИНН",
,
Отказ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
//-- Локализация
КонецПроцедуры
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<CommonModule uuid="c0610707-f5d6-4026-9679-2330d831a986">
<Properties>
<Name>РК_ОбменСВнешнейБазой</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обмен с внешней базой</v8:content>
</v8:item>
</Synonym>
<Comment>HTTP-клиент Transfer API по настройкам РК_НастройкиПодключенияКВнешнейБазе</Comment>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>false</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>true</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>
@@ -0,0 +1,253 @@
#Область ПрограммныйИнтерфейс
// Настройки подключения из элемента справочника РК_НастройкиПодключенияКВнешнейБазе.
//
Функция НастройкиПодключения(Подключение) Экспорт
Если Не ЗначениеЗаполнено(Подключение) Тогда
ВызватьИсключение "Не указано подключение к сторонней базе";
КонецЕсли;
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Подключение,
"АдресПодключения, Токен, Таймаут, Логин, Пароль, Активно, ИмяТекущейБазы");
Если Реквизиты.Активно = Ложь Тогда
ВызватьИсключение "Подключение к сторонней базе отключено (Активно = Ложь)";
КонецЕсли;
Адрес = СокрЛП(Строка(Реквизиты.АдресПодключения));
Если ПустаяСтрока(Адрес) Тогда
ВызватьИсключение "В настройке подключения не заполнен АдресПодключения";
КонецЕсли;
Таймаут = 120;
Попытка
Таймаут = Число(Реквизиты.Таймаут);
Исключение
Таймаут = 120;
КонецПопытки;
Если Таймаут <= 0 Тогда
Таймаут = 120;
КонецЕсли;
Настройки = Новый Структура;
Настройки.Вставить("Адрес", Адрес);
Настройки.Вставить("Токен", СокрЛП(Строка(Реквизиты.Токен)));
Настройки.Вставить("Таймаут", Таймаут);
Настройки.Вставить("Логин", СокрЛП(Строка(Реквизиты.Логин)));
Настройки.Вставить("Пароль", Строка(Реквизиты.Пароль));
Настройки.Вставить("ИмяТекущейБазы", СокрЛП(Строка(Реквизиты.ИмяТекущейБазы)));
Возврат Настройки;
КонецФункции
// GET /v1/health — проверка доступности Transfer API по явным настройкам формы/структуры.
// НастройкиПодключения: Адрес, Токен, Таймаут, Логин, Пароль (без проверки Активно).
//
Функция ПроверитьСоединение(НастройкиПодключения) Экспорт
Адрес = "";
Если НастройкиПодключения.Свойство("Адрес") Тогда
Адрес = СокрЛП(Строка(НастройкиПодключения.Адрес));
КонецЕсли;
Если ПустаяСтрока(Адрес) Тогда
ВызватьИсключение "Не заполнен адрес подключения";
КонецЕсли;
Токен = "";
Если НастройкиПодключения.Свойство("Токен") Тогда
Токен = СокрЛП(Строка(НастройкиПодключения.Токен));
КонецЕсли;
Если ПустаяСтрока(Токен) Тогда
ВызватьИсключение "Не заполнен токен Transfer API";
КонецЕсли;
Возврат ВыполнитьGET(НастройкиПодключения, "v1/health");
КонецФункции
// POST /v1/stock/warehouses на исходной ИБ.
//
Функция СписокСкладовВнешнейБазы(Подключение, ПараметрыЗапроса = Неопределено) Экспорт
Если ПараметрыЗапроса = Неопределено Тогда
ПараметрыЗапроса = Новый Структура;
КонецЕсли;
Настройки = НастройкиПодключения(Подключение);
Возврат ВыполнитьPOST(Настройки, "v1/stock/warehouses", ПараметрыЗапроса);
КонецФункции
// POST /v1/stock/balances на исходной ИБ.
//
Функция ОстаткиВнешнейБазы(Подключение, ПараметрыЗапроса) Экспорт
Если ПараметрыЗапроса = Неопределено Тогда
ПараметрыЗапроса = Новый Структура;
КонецЕсли;
Настройки = НастройкиПодключения(Подключение);
Возврат ВыполнитьPOST(Настройки, "v1/stock/balances", ПараметрыЗапроса);
КонецФункции
// Универсальный GET к Transfer API.
//
Функция ВыполнитьGET(НастройкиПодключения, ОтносительныйПуть) Экспорт
Возврат ВыполнитьHTTPЗапросЛокально(НастройкиПодключения, ОтносительныйПуть, Неопределено, "GET");
КонецФункции
// Универсальный POST к Transfer API.
//
Функция ВыполнитьPOST(НастройкиПодключения, ОтносительныйПуть, Тело) Экспорт
Возврат ВыполнитьHTTPЗапросЛокально(НастройкиПодключения, ОтносительныйПуть, Тело, "POST");
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ВыполнитьHTTPЗапросЛокально(НастройкиПодключения, ОтносительныйПуть, Тело, Метод)
АдресБазы = СокрЛП(Строка(НастройкиПодключения.Адрес));
Ключ = СокрЛП(Строка(НастройкиПодключения.Токен));
Таймаут = 120;
Попытка
Таймаут = Число(НастройкиПодключения.Таймаут);
Исключение
Таймаут = 120;
КонецПопытки;
Если Таймаут <= 0 Тогда
Таймаут = 120;
КонецЕсли;
Логин = "";
Пароль = "";
Если НастройкиПодключения.Свойство("Логин") Тогда
Логин = СокрЛП(Строка(НастройкиПодключения.Логин));
КонецЕсли;
Если НастройкиПодключения.Свойство("Пароль") Тогда
Пароль = Строка(НастройкиПодключения.Пароль);
КонецЕсли;
Разбор = РазобратьURL(АдресБазы);
ПутьЗапроса = Разбор.Путь;
Если Не СтрЗаканчиваетсяНа(ПутьЗапроса, "/") Тогда
ПутьЗапроса = ПутьЗапроса + "/";
КонецЕсли;
Относительный = СокрЛП(ОтносительныйПуть);
Если СтрНачинаетсяС(Относительный, "/") Тогда
Относительный = Сред(Относительный, 2);
КонецЕсли;
ПутьЗапроса = ПутьЗапроса + Относительный;
ПользовательHTTP = ?(ПустаяСтрока(Логин), Разбор.Пользователь, Логин);
ПарольHTTP = ?(ПустаяСтрока(Логин), Разбор.Пароль, Пароль);
Соединение = Новый HTTPСоединение(
Разбор.Хост,
Разбор.Порт,
ПользовательHTTP,
ПарольHTTP,
,
Таймаут,
?(Разбор.HTTPS, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено));
ЗапросHTTP = Новый HTTPЗапрос(ПутьЗапроса);
// Повторное использование сеансов HTTP на публикации 1С (иначе HTTP 400 без IBSession).
ЗапросHTTP.Заголовки.Вставить("IBSession", "start");
// X-Transfer-Token не конфликтует с Basic Auth пользователя публикации (см. README ws-rhana).
Если Не ПустаяСтрока(Ключ) Тогда
ЗапросHTTP.Заголовки.Вставить("X-Transfer-Token", Ключ);
КонецЕсли;
МетодВР = ВРег(СокрЛП(Метод));
Если ПустаяСтрока(МетодВР) Тогда
МетодВР = "POST";
КонецЕсли;
Если МетодВР = "GET" Тогда
ОтветHTTP = Соединение.Получить(ЗапросHTTP);
Иначе
Если Тело = Неопределено Тогда
Тело = Новый Структура;
КонецЕсли;
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));
ЗаписатьJSON(Запись, Тело);
ТекстТела = Запись.Закрыть();
ЗапросHTTP.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
ЗапросHTTP.УстановитьТелоИзСтроки(ТекстТела, КодировкаТекста.UTF8);
ОтветHTTP = Соединение.ОтправитьДляОбработки(ЗапросHTTP);
КонецЕсли;
ТекстОтвета = ОтветHTTP.ПолучитьТелоКакСтроку();
Если ОтветHTTP.КодСостояния < 200 Или ОтветHTTP.КодСостояния >= 300 Тогда
ЗаписьЖурналаРегистрации("РК_ОбменСВнешнейБазой", УровеньЖурналаРегистрации.Ошибка, , ,
"HTTP " + ОтветHTTP.КодСостояния + " " + Относительный + ": " + ТекстОтвета);
ВызватьИсключение КраткийТекстОшибкиHTTP(ОтветHTTP.КодСостояния, ТекстОтвета);
КонецЕсли;
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстОтвета);
Результат = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Возврат Результат;
КонецФункции
Функция РазобратьURL(Адрес)
Результат = Новый Структура("Хост, Порт, Путь, HTTPS, Пользователь, Пароль", "", 0, "", Ложь, "", "");
СтрокаURL = СокрЛП(Адрес);
HTTPS = СтрНачинаетсяС(НРег(СтрокаURL), "https://");
Если СтрНачинаетсяС(НРег(СтрокаURL), "http://") Тогда
СтрокаURL = Сред(СтрокаURL, 8);
ИначеЕсли HTTPS Тогда
СтрокаURL = Сред(СтрокаURL, 9);
КонецЕсли;
Результат.HTTPS = HTTPS;
ПозицияПути = СтрНайти(СтрокаURL, "/");
ХостПорт = ?(ПозицияПути > 0, Лев(СтрокаURL, ПозицияПути - 1), СтрокаURL);
Результат.Путь = ?(ПозицияПути > 0, Сред(СтрокаURL, ПозицияПути), "/");
ПозицияПорта = СтрНайти(ХостПорт, ":");
Если ПозицияПорта > 0 Тогда
Результат.Хост = Лев(ХостПорт, ПозицияПорта - 1);
Результат.Порт = Число(Сред(ХостПорт, ПозицияПорта + 1));
Иначе
Результат.Хост = ХостПорт;
Результат.Порт = ?(HTTPS, 443, 80);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция КраткийТекстОшибкиHTTP(КодСостояния, ТекстОтвета)
Описание = СокрЛП(Строка(ТекстОтвета));
ПозицияDescr = СтрНайти(Описание, "<descr>");
Если ПозицияDescr > 0 Тогда
Хвост = Сред(Описание, ПозицияDescr + 7);
ПозицияКонец = СтрНайти(Хвост, "</descr>");
Если ПозицияКонец > 0 Тогда
Описание = СокрЛП(Лев(Хвост, ПозицияКонец - 1));
КонецЕсли;
КонецЕсли;
Если СтрДлина(Описание) > 500 Тогда
Описание = Лев(Описание, 500) + "…";
КонецЕсли;
Возврат "Ошибка HTTP " + КодСостояния + ": " + Описание;
КонецФункции
#КонецОбласти
+83 -24
View File
@@ -3,19 +3,39 @@
<ConfigVersions>
<Metadata name="Catalog.ДоговорыКонтрагентов" id="993b58b5-d228-4a08-92ac-6fd12cc60deb" configVersion="912a34da471ed07a2324f175789cdfcd3a7157f7"/>
<Metadata name="Catalog.ДоговорыКонтрагентов.Form.ФормаВыбора" id="d82ae63b-06bd-4463-a414-0fcdc8794703" configVersion="2ab274696219a21b932eff70ee518ff44c5a2f8f"/>
<Metadata name="Catalog.ДоговорыКонтрагентов.Form.ФормаВыбора.Form" id="d82ae63b-06bd-4463-a414-0fcdc8794703.0" configVersion="c8c1a42aabd1042697d4290ceef596b8e7a64061"/>
<Metadata name="Catalog.ДоговорыКонтрагентов.Form.ФормаВыбора.Form" id="d82ae63b-06bd-4463-a414-0fcdc8794703.0" configVersion="feeed4e9ae733a451f2e3ea89d0d62fab8a86b26"/>
<Metadata name="Catalog.РК_НастройкиПодключенияКВнешнейБазе" id="9a372d93-d522-4e3c-9242-3f69517e7b43" configVersion="93c1b6169033e887ef971d62dfc1a35c7195e92f">
<Metadata name="Catalog.РК_НастройкиПодключенияКВнешнейБазе.Attribute.Пароль" id="33e4efd1-caed-46ef-b9f8-892f4bb69def"/>
<Metadata name="Catalog.РК_НастройкиПодключенияКВнешнейБазе.Attribute.Коментарий" id="55b271fd-588b-4b24-bb35-480535766533"/>
<Metadata name="Catalog.РК_НастройкиПодключенияКВнешнейБазе.Attribute.Таймаут" id="73d37e7f-a7ee-494e-a946-d3d706e9f037"/>
<Metadata name="Catalog.РК_НастройкиПодключенияКВнешнейБазе.Attribute.Активно" id="8c13a155-b2b2-4648-b623-e03cb49ee1ee"/>
<Metadata name="Catalog.РК_НастройкиПодключенияКВнешнейБазе.Attribute.АдресПодключения" id="9fa4f82a-4345-4772-b2dc-f8d892fc8e82"/>
<Metadata name="Catalog.РК_НастройкиПодключенияКВнешнейБазе.Attribute.Логин" id="af91404e-d0ef-4b3d-9819-0027b61e8834"/>
<Metadata name="Catalog.РК_НастройкиПодключенияКВнешнейБазе.Attribute.ИмяТекущейБазы" id="ca043818-4250-4082-8d09-b6fce389c953"/>
<Metadata name="Catalog.РК_НастройкиПодключенияКВнешнейБазе.Attribute.Токен" id="f46fb546-fca7-4f92-9a0b-a380ea73dca9"/>
</Metadata>
<Metadata name="Catalog.РК_НастройкиПодключенияКВнешнейБазе.Form.ФормаЭлемента" id="5897541c-e081-4d49-b4cd-dc5418aa113a" configVersion="8d606d44be0b6de449c396208025c05c75a555ab"/>
<Metadata name="Catalog.РК_НастройкиПодключенияКВнешнейБазе.Form.ФормаЭлемента.Form" id="5897541c-e081-4d49-b4cd-dc5418aa113a.0" configVersion="7662dbdf5866e1a03004e924478e25858b3b523f"/>
<Metadata name="Catalog.РК_НастройкиПодключенияКВнешнейБазе.ManagerModule" id="9a372d93-d522-4e3c-9242-3f69517e7b43.3" configVersion="bc5533b84f7d5199e71661443b8fc189bbeac64a"/>
<Metadata name="ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения" id="e8b79bd5-f8ca-47e3-bcfd-1d84a4a64ee2" configVersion="3cadb32ee44e159e252e947f116f05b8f99ae1c4"/>
<Metadata name="CommonForm.РК_ФормаНастроекРана" id="5688e1b9-1552-45cc-b539-1f4cc3765e8a" configVersion="8ac3163937f01f9604c7a57e9dc814b6d466b5ac"/>
<Metadata name="CommonForm.РК_ФормаНастроекРана.Form" id="5688e1b9-1552-45cc-b539-1f4cc3765e8a.0" configVersion="ea9a4ab0f585a6af14dc4941cc5fd2e48f221b6a"/>
<Metadata name="CommonModule.МенеджерОбменаЧерезУниверсальныйФормат" id="46adff34-2644-4eb3-99a7-e969dbdf8496" configVersion="0e38e0f4d63c0c4783d0c8935de492efee1e4863"/>
<Metadata name="CommonModule.МенеджерОбменаЧерезУниверсальныйФормат.Module" id="46adff34-2644-4eb3-99a7-e969dbdf8496.0" configVersion="89e8efb209d7477a14ca8b50b3aa0065918e53b7"/>
<Metadata name="CommonForm.РК_ФормаНастроекРана" id="5688e1b9-1552-45cc-b539-1f4cc3765e8a" configVersion="1c5e7beb0918c494f3732b0d00f7307e66a1c41e"/>
<Metadata name="CommonForm.РК_ФормаНастроекРана.Form" id="5688e1b9-1552-45cc-b539-1f4cc3765e8a.0" configVersion="c4b0797038efba9d7de13b98621d64d466305150"/>
<Metadata name="CommonModule.МенеджерОбменаЧерезУниверсальныйФормат" id="46adff34-2644-4eb3-99a7-e969dbdf8496" configVersion="0184b2e80fe6a38b38ac012a2caed089baaa509b"/>
<Metadata name="CommonModule.МенеджерОбменаЧерезУниверсальныйФормат.Module" id="46adff34-2644-4eb3-99a7-e969dbdf8496.0" configVersion="538818d7cffacdb1f4cd44f13416901144f3279d"/>
<Metadata name="CommonModule.ОбменДаннымиXDTOСервер" id="392bf65e-0667-4464-ab9f-98e9af6de114" configVersion="f81d070e896c334187a4dabd7aab144557404e14"/>
<Metadata name="CommonModule.ОбменДаннымиXDTOСервер.Module" id="392bf65e-0667-4464-ab9f-98e9af6de114.0" configVersion="b4ced9229978788dca2420df443531932b4822c9"/>
<Metadata name="CommonModule.ОбщегоНазначения" id="c7bc6cfd-24e8-45cc-abb6-36516b716cb5" configVersion="10db0bd8664f5c69e30eb3abe5c837a05968e0ae"/>
<Metadata name="CommonModule.ОбщегоНазначенияКлиентСервер" id="1afe1653-696f-47e3-9bea-df7b84bd077c" configVersion="a3b2d57b152d8cd275a412ddf1479ac90b35402d"/>
<Metadata name="CommonModule.ОбщегоНазначенияКлиентСервер.Module" id="1afe1653-696f-47e3-9bea-df7b84bd077c.0" configVersion="74e1779aaae2e2e61a3957d284da0d61b1e34d41"/>
<Metadata name="CommonModule.ОбщегоНазначенияКлиентСервер.Module" id="1afe1653-696f-47e3-9bea-df7b84bd077c.0" configVersion="391544553ff7457895fc19270a0e8362bc866ee0"/>
<Metadata name="CommonModule.ПартнерыИКонтрагентыЛокализация" id="204641bf-09d1-470a-9d72-3eb46439556d" configVersion="1d1ab54a348ef06148f77bcf0e5a66998b9e54ed"/>
<Metadata name="CommonModule.ПартнерыИКонтрагентыЛокализация.Module" id="204641bf-09d1-470a-9d72-3eb46439556d.0" configVersion="c7c146948aa8436d387a80cf03a40295b9b84351"/>
<Metadata name="CommonModule.РК_ОбменСВнешнейБазой" id="c0610707-f5d6-4026-9679-2330d831a986" configVersion="08b9643947e617a6ef11e3623794f371fba45283"/>
<Metadata name="CommonModule.РК_ОбменСВнешнейБазой.Module" id="c0610707-f5d6-4026-9679-2330d831a986.0" configVersion="b3d0bada7f75b0a419b009cf3c36cb1b1cba6309"/>
<Metadata name="CommonModule.РК_ОбщегоНазначения" id="6bfc7b15-6995-43ad-96c6-a97569f2d5a4" configVersion="c11a335f853a42165758cfe7995f2ee06a9010f7"/>
<Metadata name="CommonModule.РК_ОбщегоНазначенияВызовСервера" id="845d7b2e-e411-4515-98ba-cf4f9fa2cb0f" configVersion="9a84ca5309ab5d1f2ea6331e02ac19191b2ae8d1"/>
<Metadata name="CommonModule.РК_ОбщегоНазначенияВызовСервера.Module" id="845d7b2e-e411-4515-98ba-cf4f9fa2cb0f.0" configVersion="3da56c93dc782c896847dba5acb46c67f50f497b"/>
<Metadata name="CommonModule.РК_ОбщегоНазначенияВызовСервера.Module" id="845d7b2e-e411-4515-98ba-cf4f9fa2cb0f.0" configVersion="90a43dbd4335302e2ba6482225461cf419586324"/>
<Metadata name="CommonModule.РК_ОбщегоНазначенияКлиентСервер" id="2b52814a-55be-4ad7-ac91-8b0e81c8d6f3" configVersion="03032527bc080e2cf758a92ab6d272d0f332a9f8"/>
<Metadata name="CommonModule.РК_ОбщегоНазначенияКлиентСервер.Module" id="2b52814a-55be-4ad7-ac91-8b0e81c8d6f3.0" configVersion="2f287bc705113022ad190f50fb1668665e62755a"/>
<Metadata name="CommonModule.РК_ОбщегоНазначенияКлиентСервер.Module" id="2b52814a-55be-4ad7-ac91-8b0e81c8d6f3.0" configVersion="d7bf8f7f08d258231cb71b19afd87f835fbbc7d3"/>
<Metadata name="CommonPicture.ВУпаковочныйЛист" id="366e09d0-bf1c-4209-bc4b-93eb10df6af5" configVersion="18a9588b13c3df2a86aeedfd831deefc62543fdb"/>
<Metadata name="CommonPicture.ЗаполнитьПоШаблону" id="a86c26ab-ab38-4d45-affb-4affa174f581" configVersion="552207f911e393416bb94788d3985eac96efc083"/>
<Metadata name="CommonPicture.ЗаполнитьФорму" id="089dd079-be61-4b45-bb54-4de0840a0426" configVersion="8f81f42104cdf220d78e2d2b8ba39f1437cc3846"/>
@@ -26,31 +46,71 @@
<Metadata name="CommonPicture.ПодписанЗашифрованСостояния" id="a0bd1007-a115-4d79-8160-d4f59cd57ffb" configVersion="08ed86b1653fc955004b703d7dce5d947956fdda"/>
<Metadata name="CommonPicture.СерииНоменклатурыКолонкаСтатусов" id="f2badc5e-4af7-4c05-be31-b4d5b7642ab5" configVersion="d070fbc999630568abec9d83770ed805666a24d9"/>
<Metadata name="CommonPicture.СтатусыУказанияСерий" id="cc5cab6d-e293-4890-a422-6e8cd2fb58bb" configVersion="17b11a4c6ec74254745177f7c136d38af0214bdf"/>
<Metadata name="Configuration.crm326RHANA" id="ef31d55b-3788-4972-affb-b7aefd3838aa" configVersion="2910b5ccbb9d930f0716a494a2b44068db7db4d4"/>
<Metadata name="Configuration.crm326RHANA.CommandInterface" id="39a8728d-cfaf-46d0-959f-980e396b5018.a" configVersion="fdaec039eea90396e8275a4185f01ff2ce9f09af"/>
<Metadata name="Configuration.crm326RHANA.MainSectionCommandInterface" id="39a8728d-cfaf-46d0-959f-980e396b5018.9" configVersion="fdaec039eea90396e8275a4185f01ff2ce9f09af"/>
<Metadata name="Configuration.crm326RHANA" id="ef31d55b-3788-4972-affb-b7aefd3838aa" configVersion="0ab7e5d843097580ac4f3a3d1c630f15a44345fa"/>
<Metadata name="Constant.РК_РабочееПодключениеЧерезАПИ" id="47f107f1-41f6-4f00-bb8a-aa1cf8b60191" configVersion="132678198dbf6e5b884c9ba219f5523cb63f7f8a"/>
<Metadata name="Constant.РК_РежимОтладкиРана" id="32d682cc-7aeb-45c8-abc6-68fef7f36011" configVersion="a12fe879a2594e605228c43059bb3a72d30fa471"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла" id="b6fd11ac-f702-4d13-b328-9a78b0874483" configVersion="c39312c21ebce9b1bb7a4df34e3e489203b3f8a8"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.Form.ЗагрузкаДанныхИзФайла" id="f47d02ff-17f2-4764-a151-627f4067a479" configVersion="247298ad849a4d46b1f412e90c0184fe64756489"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.Form.ЗагрузкаДанныхИзФайла.Form" id="f47d02ff-17f2-4764-a151-627f4067a479.0" configVersion="e853a6b3591994346f9ce1d3b7d5cf0daf864fb8"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.ManagerModule" id="b6fd11ac-f702-4d13-b328-9a78b0874483.2" configVersion="f450f4daf08ba37ced20d9f1b18f5f1eb8b5f027"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.ManagerModule" id="b6fd11ac-f702-4d13-b328-9a78b0874483.2" configVersion="1efb72f921b0e14eecaf61915ed4cb8cc58b53fa"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков" id="5922bda8-8f69-487c-823a-8b09e343f59a" configVersion="a75f86e09457ac4862a7eb51ee3700f9c455ce61">
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.СкладИдентификатор" id="086673fd-91b2-4966-8472-144da87650e6"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.КомментарийСопоставления" id="09d80a73-1aa6-4ecc-a39a-c667e99e3084"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные" id="11e438df-e73c-44d2-b3ed-08c04b320d8e"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.НомерГТДСсылка" id="13c8d651-954c-444e-9e3a-bfae61c7f1b4"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.КоличествоКОтгрузке" id="153af227-1988-4f97-bb00-30c138e01e11"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.Характеристика" id="25ff0379-7e93-4930-a29e-97bb9c77c235"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.ОрганизацияИдентификатор" id="4eef5276-30ac-40dd-bc7d-19e708da43e8"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.НоменклатураНаименование" id="56d7a5f1-92e5-41eb-bf65-e77db27abfba"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.ПолитикаСерии" id="57232515-7ec2-46b9-9c00-5f5dfd8f799c"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.СерияСсылка" id="5ac27167-fc94-42ea-81cb-a29ff122415d"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.НоменклатураКод" id="6212b2dc-a55b-48bb-9437-075e5502a1c5"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Attribute.ДатаОстатков" id="646059bd-f290-4888-aec1-991b5ea3cc79"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Attribute.ДатаДокументовВвода" id="69a4692c-f48e-4d6c-b8e3-a37fe4757a18"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.ОрганизацияНаименование" id="6c30b7db-dbb7-4564-8e6c-d3b17ba55bd3"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.ЕдИзм" id="6ff9dfd3-39a1-413b-86d1-d3e5ead111da"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.ЕдИзмИдентификатор" id="78602e20-5003-44ea-92ec-3c5f64d5c04d"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.Серия" id="7b2b88b1-f1d7-463f-9b69-f2a049dc6287"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.Количество" id="7b95a661-e588-4388-ab7a-906c5dba8326"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.ХарактеристикаНаименование" id="8fa984e4-bbf2-4d38-a80d-33827c3645da"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.СерияИдентификатор" id="a0b08c20-f11b-47bb-ab41-3c80166deab5"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.ВидНоменклатурыНаименование" id="a1896aca-6eaf-46df-87dc-2e9f3ea8ae64"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.Сопоставлено" id="a5532d88-c81a-46f9-adb0-b76a04205ccc"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.НоменклатураИдентификатор" id="a649bec4-d629-42a2-aeb4-d3d0b43c3e7a"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.ГТД" id="ab9a4fce-0d9b-4ac5-a109-a0c29d8e76d7"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.ГТДИдентификатор" id="b037736f-f398-4863-8734-45f0e88ee3c9"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.ХарактеристикаИдентификатор" id="bf93ecc1-fb65-4ba9-be07-78575a66384b"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.ВидНоменклатурыИдентификатор" id="c1085a20-3350-4ac3-924e-4f165c416542"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.КоличествоОрганизации" id="d290bd6f-5309-493b-ad6e-32ca05ba5757"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Attribute.ПодключениеКСтороннейБазе" id="d8202194-9b79-46e4-b922-34f7c3add55c"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.Склад" id="ee5deed3-c67c-4411-9069-1ee4c51b7776"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.СкладНаименование" id="f1ddafd7-debe-42fb-9313-e024b16aac31"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.Номенклатура" id="f8bd1e77-bfbf-4bd4-8779-3a04f7be0bea"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.Артикул" id="fc18b487-eee5-4116-80e7-a57f1afafa44"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеДанные.Attribute.ПолитикаХарактеристик" id="fe5d2e6d-6039-46ed-9277-3ec8fd31ae16"/>
</Metadata>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.ПодборСкладов" id="9dfcb2a8-bf22-44c3-97a7-a69f70ca4d61" configVersion="3bf7d51ed9ee398e1704b692c5cf543de885b35d"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.ПодборСкладов.Form" id="9dfcb2a8-bf22-44c3-97a7-a69f70ca4d61.0" configVersion="8cddcd809beef075b470c32dd5564aebb81e405c"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.Форма" id="dc49348d-9257-4545-9c29-70c138312177" configVersion="4541c8c382171c6c02021bcc8f500135f4358aa8"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.Форма.Form" id="dc49348d-9257-4545-9c29-70c138312177.0" configVersion="c3b99751d377b930533b5531c15fb72236e70216"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.ObjectModule" id="5922bda8-8f69-487c-823a-8b09e343f59a.0" configVersion="8b2998566b1bf925274c77ed1da82aa76d66916c"/>
<Metadata name="DataProcessor.РК_ОбработкаПарнеровКонтрагентов" id="323c24ca-5279-461a-b03a-9571cb4f0911" configVersion="61642f5832ac2ff8e4ddfeebbb89bcf83e000868"/>
<Metadata name="DataProcessor.РК_ОбработкаПарнеровКонтрагентов.ManagerModule" id="323c24ca-5279-461a-b03a-9571cb4f0911.2" configVersion="cd2fa8461c48c496bf36dda7a8862b28b0712771"/>
<Metadata name="DataProcessor.РК_ОбработкаПарнеровКонтрагентов.ManagerModule" id="323c24ca-5279-461a-b03a-9571cb4f0911.2" configVersion="bd9480c5b5e30bfba12e31cd19220a496429cf0c"/>
<Metadata name="DefinedType.РаспоряжениеНаОтгрузку" id="afb3288b-968a-4b19-8b67-721e50974db4" configVersion="b4e7b9549112d57eb9da5a9947237f4f601039e7"/>
<Metadata name="Document.ЗаказКлиента" id="83c6bfba-2c6d-4fe7-a05b-1b54e8208966" configVersion="0f1941010a3f2e5c6ace2f57e4dab142a17f8f20"/>
<Metadata name="Document.РасходныйОрдерНаТовары" id="3d303157-526b-4725-8f94-4077b108b463" configVersion="ead1a662035e72717ecbd4a581b489cd932bb0d2">
<Metadata name="Document.РасходныйОрдерНаТовары" id="3d303157-526b-4725-8f94-4077b108b463" configVersion="43ce890f8166575f8e201b20e1bea4cf341f6e47">
<Metadata name="Document.РасходныйОрдерНаТовары.TabularSection.ТоварыПоРаспоряжениям.Attribute.Распоряжение" id="f189fc59-8635-4c7d-bb98-120ed8da4000"/>
<Metadata name="Document.РасходныйОрдерНаТовары.TabularSection.ТоварыПоРаспоряжениям" id="fc7fa2cf-10f9-4100-aef4-9aee19b897ff"/>
</Metadata>
<Metadata name="Document.РасходныйОрдерНаТовары.Form.ФормаДокумента" id="f5a26ea1-198f-42b0-ba3f-056950385af4" configVersion="1474e568157498c81975ac65d4f5d3620949d9a6"/>
<Metadata name="Document.РасходныйОрдерНаТовары.Form.ФормаДокумента.Form" id="f5a26ea1-198f-42b0-ba3f-056950385af4.0" configVersion="a77f02de96512461bcd4d84fbbbf8ddf5a9f93fc"/>
<Metadata name="Document.РеализацияТоваровУслуг" id="a7641638-efca-42a4-9641-ad3095a03331" configVersion="3e91375dbc26d239cf0f56178c877961ad4f289a">
<Metadata name="Document.РасходныйОрдерНаТовары.Form.ФормаДокумента.Form" id="f5a26ea1-198f-42b0-ba3f-056950385af4.0" configVersion="7c8ac8917c33998ba125b1907f233a4f8a1a0120"/>
<Metadata name="Document.РеализацияТоваровУслуг" id="a7641638-efca-42a4-9641-ad3095a03331" configVersion="0da80d80db18edb4da090d68a8d1f4c90bbf2c1b">
<Metadata name="Document.РеализацияТоваровУслуг.TabularSection.ДополнительныеРеквизиты" id="1b0c662b-7e61-47d5-9b4b-ed8d6b77ae7b"/>
<Metadata name="Document.РеализацияТоваровУслуг.TabularSection.ДополнительныеРеквизиты.Attribute.Значение" id="31cdf55c-fc5f-4d41-80f8-083aa61f0387"/>
<Metadata name="Document.РеализацияТоваровУслуг.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока" id="58ea3d1a-b77b-4563-88d1-c11aeef9619f"/>
<Metadata name="Document.РеализацияТоваровУслуг.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство" id="d17094b3-ba3b-4fe9-886e-d7bb23bc22be"/>
</Metadata>
<Metadata name="Document.РеализацияТоваровУслуг.ObjectModule" id="a7641638-efca-42a4-9641-ad3095a03331.0" configVersion="fe73fe48d72d80cc22e9b648db6453b619b9f14d"/>
<Metadata name="Document.РеализацияТоваровУслуг.ObjectModule" id="a7641638-efca-42a4-9641-ad3095a03331.0" configVersion="3ad53d992c345055f2b145d142157787ae07eddc"/>
<Metadata name="Enum.ВариантыВыбытияМаркируемойПродукции" id="1d37bf86-8ac0-43ca-95ce-6df0dc42b205" configVersion="b735e18b59a5e8003b5b3fecdc7b580181deef1b">
<Metadata name="Enum.ВариантыВыбытияМаркируемойПродукции.EnumValue.ИспользованиеПокупателемДляСобственныхНужд" id="750a1fe1-80f8-4146-ba2a-4019a8f6cb4c"/>
</Metadata>
@@ -87,20 +147,19 @@
<Metadata name="FunctionalOption.РК_ФункциональнаяОпцияРежимаОтладки" id="5a2768ce-cddd-4126-bc6f-aa9aee904fee" configVersion="ec037b80c784d83ef696365788eddc3f9f5a2963"/>
<Metadata name="Language.Русский" id="4f6908d0-adbb-4ee7-a6d9-c0ff144e81da" configVersion="58c550359e219a4f54f6b31ee61d09a83fc82ee1"/>
<Metadata name="Role.РК_ОбщаяРольРасширения" id="0bf63003-e58b-47cb-9385-0a5ca6de3a6d" configVersion="e8bdeb55dc91ddc07237757365e36383d7372bbd"/>
<Metadata name="Role.РК_ОбщаяРольРасширения.Rights" id="0bf63003-e58b-47cb-9385-0a5ca6de3a6d.0" configVersion="2e5b130236068e6f058371ef8ee803e79eebb8b9"/>
<Metadata name="Role.РК_ОбщаяРольРасширения.Rights" id="0bf63003-e58b-47cb-9385-0a5ca6de3a6d.0" configVersion="8f18dc83818c11b5d5d94399bacb4763c0e5d32f"/>
<Metadata name="Role.РК_ОсновнаяРоль" id="9cf7026c-635c-4a6b-bb98-cc4d34018fe0" configVersion="c535cfb29ef4378b5e1d64c91c81dbdd785b239c"/>
<Metadata name="Role.РК_ОсновнаяРоль.Rights" id="9cf7026c-635c-4a6b-bb98-cc4d34018fe0.0" configVersion="945ca08e5fa00dd442aaa42b9afe0f4ca7f73d26"/>
<Metadata name="Role.РК_ОтладкаОтображение" id="df2cfcd4-a4fe-44bf-9666-a564d9ce27e1" configVersion="4c0e2ffc2530eb52add9e96ecb1e0c40f7bfb68b"/>
<Metadata name="Role.РК_ОтладкаОтображение.Rights" id="df2cfcd4-a4fe-44bf-9666-a564d9ce27e1.0" configVersion="2e5b130236068e6f058371ef8ee803e79eebb8b9"/>
<Metadata name="Role.РК_ОтладкаОтображение.Rights" id="df2cfcd4-a4fe-44bf-9666-a564d9ce27e1.0" configVersion="8f18dc83818c11b5d5d94399bacb4763c0e5d32f"/>
<Metadata name="Role.РК_ОтладкаУправление" id="b5325e35-72ba-49f6-a223-4209a963b7b2" configVersion="3a2ffc92f96d8f88d875cb55eb1a10d9312318fe"/>
<Metadata name="Role.РК_ОтладкаУправление.Rights" id="b5325e35-72ba-49f6-a223-4209a963b7b2.0" configVersion="2e5b130236068e6f058371ef8ee803e79eebb8b9"/>
<Metadata name="Role.РК_ОтладкаУправление.Rights" id="b5325e35-72ba-49f6-a223-4209a963b7b2.0" configVersion="8f18dc83818c11b5d5d94399bacb4763c0e5d32f"/>
<Metadata name="StyleItem.ПоясняющийТекст" id="f8d4cce2-c61a-4b17-a37c-37b73301d9be" configVersion="d1dd8a215ae36042bc326384743f3599e6a27493"/>
<Metadata name="Subsystem.РК_РАНА" id="01566022-7bd2-4d26-92f0-98f53c96a7d4" configVersion="7dff4fa49022434602b80d2ed0ce77024a9126a3"/>
<Metadata name="Subsystem.РК_РАНА.CommandInterface" id="01566022-7bd2-4d26-92f0-98f53c96a7d4.1" configVersion="fdaec039eea90396e8275a4185f01ff2ce9f09af"/>
<Metadata name="Subsystem.РК_РАНА" id="01566022-7bd2-4d26-92f0-98f53c96a7d4" configVersion="cf0646f7466b6b2b8bf9861267ed5072fdd136a1"/>
<Metadata name="Subsystem.РК_РАНА.Subsystem.РК_ОбменСВнешнейБазой" id="ac0fe2bc-d524-4b39-a345-04ec06dca5b8" configVersion="bde2e77da4dcdf9ff6584936aa606a237afe80ee"/>
<Metadata name="Subsystem.РК_РАНА.Subsystem.РК_Справочники" id="a5a628ff-57bb-404b-bcda-a14f7aafadfd" configVersion="84464576c2ecec7a3cee09ffe05bf0e1f1e1bdb7"/>
<Metadata name="Subsystem.РК_РАНА326" id="ca0c3a8e-d83f-42db-8de1-f9dd53a928f5" configVersion="fa0e7e981a97c6baec3e14aed39a223b2ab45454"/>
<Metadata name="Subsystem.РК_РАНА326.CommandInterface" id="ca0c3a8e-d83f-42db-8de1-f9dd53a928f5.1" configVersion="fdaec039eea90396e8275a4185f01ff2ce9f09af"/>
<Metadata name="XDTOPackage.EnterpriseData_1_8_6" id="8279d677-ce87-4de6-8b71-13730d992e02" configVersion="204040b4a4a28a931cf247cc8622256544515ace"/>
<Metadata name="XDTOPackage.EnterpriseData_1_8_6" id="8279d677-ce87-4de6-8b71-13730d992e02" configVersion="34ae5b2d268535913553e2f23a8428ffa9cc36e8"/>
<Metadata name="XDTOPackage.EnterpriseData_1_8_7" id="0ead7002-62ff-4b0e-907b-112c906d2b48" configVersion="1ec2419c83e675661b0b72baad5e41b8b5d898b2"/>
<Metadata name="XDTOPackage.EnterpriseData_1_8_7.Package" id="0ead7002-62ff-4b0e-907b-112c906d2b48.0" configVersion="0ba1eb0b35d568d1cafd7f6e030ea1d56e81fea3"/>
</ConfigVersions>
+9 -2
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<Configuration uuid="ef31d55b-3788-4972-affb-b7aefd3838aa">
<InternalInfo>
@@ -62,7 +62,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
</DefaultRoles>
<Vendor/>
<Version>1.3.0.38</Version>
<Version>1.3.1.55</Version>
<DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/>
@@ -95,15 +95,21 @@
<CommonModule>РК_ОбщегоНазначения</CommonModule>
<CommonModule>РК_ОбщегоНазначенияКлиентСервер</CommonModule>
<CommonModule>РК_ОбщегоНазначенияВызовСервера</CommonModule>
<CommonModule>РК_ОбменСВнешнейБазой</CommonModule>
<CommonModule>ОбщегоНазначения</CommonModule>
<CommonModule>ОбщегоНазначенияКлиентСервер</CommonModule>
<CommonModule>МенеджерОбменаЧерезУниверсальныйФормат</CommonModule>
<CommonModule>ОбменДаннымиXDTOСервер</CommonModule>
<CommonModule>ПартнерыИКонтрагентыЛокализация</CommonModule>
<XDTOPackage>EnterpriseData_1_8_7</XDTOPackage>
<XDTOPackage>EnterpriseData_1_8_6</XDTOPackage>
<FunctionalOption>РК_ФункциональнаяОпцияРежимаОтладки</FunctionalOption>
<DefinedType>РаспоряжениеНаОтгрузку</DefinedType>
<Constant>РК_РежимОтладкиРана</Constant>
<Constant>РК_РабочееПодключениеЧерезАПИ</Constant>
<CommonForm>РК_ФормаНастроекРана</CommonForm>
<Catalog>ДоговорыКонтрагентов</Catalog>
<Catalog>РК_НастройкиПодключенияКВнешнейБазе</Catalog>
<Document>РеализацияТоваровУслуг</Document>
<Document>ЗаказКлиента</Document>
<Document>РасходныйОрдерНаТовары</Document>
@@ -117,6 +123,7 @@
<Enum>СтавкиНДС</Enum>
<DataProcessor>ЗагрузкаДанныхИзФайла</DataProcessor>
<DataProcessor>РК_ОбработкаПарнеровКонтрагентов</DataProcessor>
<DataProcessor>РК_ЗагрузкаОстатков</DataProcessor>
<ChartOfCharacteristicTypes>ДополнительныеРеквизитыИСведения</ChartOfCharacteristicTypes>
</ChildObjects>
</Configuration>
@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<Constant uuid="47f107f1-41f6-4f00-bb8a-aa1cf8b60191">
<InternalInfo>
<xr:GeneratedType name="ConstantManager.РК_РабочееПодключениеЧерезАПИ" category="Manager">
<xr:TypeId>2d7fe591-0b1c-4f19-8465-14e56ddf1547</xr:TypeId>
<xr:ValueId>a5182e14-8697-4d2d-b5b4-99db4089e005</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="ConstantValueManager.РК_РабочееПодключениеЧерезАПИ" category="ValueManager">
<xr:TypeId>d4d8c39b-daeb-4061-b302-9b60d0e1efdd</xr:TypeId>
<xr:ValueId>ea5eb6d7-e2cf-488f-92b3-8d712c391b7b</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="ConstantValueKey.РК_РабочееПодключениеЧерезАПИ" category="ValueKey">
<xr:TypeId>b9032f0a-ecc8-4b82-9126-e66884c17046</xr:TypeId>
<xr:ValueId>f139eded-74a0-422f-b29e-15e79f9483ad</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>РК_РабочееПодключениеЧерезАПИ</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подключение через API</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>cfg:CatalogRef.РК_НастройкиПодключенияКВнешнейБазе</v8:Type>
</Type>
<UseStandardCommands>true</UseStandardCommands>
<DefaultForm>CommonForm.РК_ФормаНастроекРана</DefaultForm>
<ExtendedPresentation/>
<Explanation/>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<DataLockControlMode>Managed</DataLockControlMode>
<DataHistory>DontUse</DataHistory>
<UpdateDataHistoryImmediatelyAfterWrite>false</UpdateDataHistoryImmediatelyAfterWrite>
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
</Properties>
</Constant>
</MetaDataObject>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,439 @@
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
// Заполняет ТЧ ВходящиеДанные строками остатков Transfer API (mode=combined по умолчанию).
//
Процедура ЗаполнитьВходящиеДанныеИзОтветаОстатков(ОтветAPI, ОчищатьПередЗаполнением = Истина) Экспорт
Если ОчищатьПередЗаполнением Тогда
ВходящиеДанные.Очистить();
КонецЕсли;
СтрокиОтвета = Неопределено;
Если ТипЗнч(ОтветAPI) = Тип("Структура") Или ТипЗнч(ОтветAPI) = Тип("Соответствие") Тогда
СтрокиОтвета = ЗначениеСвойства(ОтветAPI, "rows", Неопределено);
КонецЕсли;
Если ТипЗнч(СтрокиОтвета) <> Тип("Массив") Тогда
Возврат;
КонецЕсли;
Для Каждого СтрокаAPI Из СтрокиОтвета Цикл
НовСтр = ВходящиеДанные.Добавить();
ЗаполнитьСтрокуВходящихДанныхИзAPI(НовСтр, СтрокаAPI);
КонецЦикла;
КонецПроцедуры
// Сопоставление строк ТЧ с НСИ целевой ИБ + создание серий-заглушек при необходимости.
// Алгоритм — по логике scripts/generate_balances_apply_bsl.py (артикул/GUID/код/имя; серии Перенос_*).
//
// Параметры:
// РежимТест - Булево - Истина: только поиск, без создания серий/характеристик
//
// Возвращаемое значение:
// Структура - Сопоставлено, НеСопоставлено, СозданоСерий, СозданоХарактеристик
//
Функция СопоставитьВходящиеДанные(РежимТест = Истина) Экспорт
Результат = Новый Структура;
Результат.Вставить("Сопоставлено", 0);
Результат.Вставить("НеСопоставлено", 0);
Результат.Вставить("СозданоСерий", 0);
Результат.Вставить("СозданоХарактеристик", 0);
СуффиксДатыСер = Формат(?(ЗначениеЗаполнено(ДатаДокументовВвода), ДатаДокументовВвода, ДатаОстатков), "ДФ=yyyyMMdd");
Если ПустаяСтрока(СуффиксДатыСер) Тогда
СуффиксДатыСер = Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd");
КонецЕсли;
КэшТребуетсяСерия = Новый Соответствие;
КэшСерий = Новый Соответствие;
Для Каждого СтрТ Из ВходящиеДанные Цикл
СтрТ.Сопоставлено = Ложь;
СтрТ.КомментарийСопоставления = "";
СтрТ.Номенклатура = Справочники.Номенклатура.ПустаяСсылка();
СтрТ.Склад = Справочники.Склады.ПустаяСсылка();
СтрТ.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
СтрТ.СерияСсылка = Справочники.СерииНоменклатуры.ПустаяСсылка();
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.ПустаяСсылка();
Ном = НайтиНоменклатуруСтроки(СтрТ);
Если Не ЗначениеЗаполнено(Ном) Тогда
СтрТ.КомментарийСопоставления = "Номенклатура не найдена";
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
Продолжить;
КонецЕсли;
СтрТ.Номенклатура = Ном;
СкладЦель = НайтиСкладСтроки(СтрТ);
Если Не ЗначениеЗаполнено(СкладЦель) Тогда
СтрТ.КомментарийСопоставления = "Склад не найден";
Результат.НеСопоставлено = Результат.НеСопоставлено + 1;
Продолжить;
КонецЕсли;
СтрТ.Склад = СкладЦель;
Хар = НайтиИлиСоздатьХарактеристику(СтрТ, Ном, РежимТест, Результат);
СтрТ.Характеристика = Хар;
Сер = НайтиИлиСоздатьСерию(СтрТ, Ном, СкладЦель, СуффиксДатыСер, РежимТест,
КэшТребуетсяСерия, КэшСерий, Результат);
СтрТ.СерияСсылка = Сер;
Если ЗначениеЗаполнено(СтрТ.ГТД) Тогда
КодГТД = СокрЛП(СтрТ.ГТД);
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоКоду(КодГТД);
Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоРеквизиту("РегистрационныйНомер", КодГТД);
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда
СтрТ.НомерГТДСсылка = Справочники.НомераГТД.НайтиПоНаименованию(КодГТД, Истина);
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда
СсылкаГТД = СсылкаПоUUID(Справочники.НомераГТД, СтрТ.ГТДИдентификатор);
Если ЗначениеЗаполнено(СсылкаГТД) И ОбщегоНазначения.СсылкаСуществует(СсылкаГТД) Тогда
СтрТ.НомерГТДСсылка = СсылкаГТД;
КонецЕсли;
КонецЕсли;
КонецЕсли;
СтрТ.Сопоставлено = Истина;
Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Тогда
СтрТ.КомментарийСопоставления = "OK";
КонецЕсли;
Результат.Сопоставлено = Результат.Сопоставлено + 1;
КонецЦикла;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ЗаполнитьСтрокуВходящихДанныхИзAPI(НовСтр, СтрокаAPI)
НовСтр.НоменклатураИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "nomenclature_guid", ""));
НовСтр.НоменклатураНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "nomenclature_name", "")));
НовСтр.НоменклатураКод = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "nomenclature_code", "")));
НовСтр.Артикул = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "nomenclature_article", "")));
НовСтр.СкладИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "warehouse_guid", ""));
НовСтр.СкладНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "warehouse_name", "")));
НовСтр.ЕдИзмИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "unit_guid", ""));
НовСтр.ЕдИзм = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "unit_name", "")));
Если ПустаяСтрока(НовСтр.ЕдИзм) Тогда
НовСтр.ЕдИзм = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "unit_code", "")));
КонецЕсли;
НовСтр.ХарактеристикаИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "characteristic_guid", ""));
НовСтр.ХарактеристикаНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "characteristic_name", "")));
НовСтр.СерияИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "series_guid", ""));
НовСтр.Серия = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "series_name", "")));
НовСтр.ГТДИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "gtd_guid", ""));
НовСтр.ГТД = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "gtd_name", "")));
НовСтр.ОрганизацияИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "organization_guid", ""));
НовСтр.ОрганизацияНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "organization_name", "")));
НовСтр.Количество = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_warehouse",
ЗначениеСвойства(СтрокаAPI, "qty_org", 0)), 0);
НовСтр.КоличествоКОтгрузке = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_to_ship", 0), 0);
НовСтр.КоличествоОрганизации = ЧислоИзЗначения(ЗначениеСвойства(СтрокаAPI, "qty_org", 0), 0);
НовСтр.ВидНоменклатурыИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "policy_kind_guid", ""));
НовСтр.ВидНоменклатурыНаименование = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "policy_kind_name", "")));
НовСтр.ПолитикаСерии = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "policy_use_series", "")));
НовСтр.ПолитикаХарактеристик = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "policy_use_characteristics", "")));
НовСтр.Сопоставлено = Ложь;
НовСтр.КомментарийСопоставления = "";
КонецПроцедуры
Функция НайтиНоменклатуруСтроки(СтрТ)
Ном = Справочники.Номенклатура.ПустаяСсылка();
Арт = СокрЛП(СтрТ.Артикул);
ИмяНом = СокрЛП(СтрТ.НоменклатураНаименование);
КодНом = СокрЛП(СтрТ.НоменклатураКод);
Если ЗначениеЗаполнено(Арт) Тогда
Ном = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Арт);
КонецЕсли;
Если Не ЗначениеЗаполнено(Ном) Тогда
СсылкаПоГуид = СсылкаПоUUID(Справочники.Номенклатура, СтрТ.НоменклатураИдентификатор);
Если ЗначениеЗаполнено(СсылкаПоГуид) И ОбщегоНазначения.СсылкаСуществует(СсылкаПоГуид) Тогда
Ном = СсылкаПоГуид;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Ном) И ЗначениеЗаполнено(КодНом) Тогда
Ном = Справочники.Номенклатура.НайтиПоКоду(КодНом);
КонецЕсли;
Если Не ЗначениеЗаполнено(Ном) И ЗначениеЗаполнено(ИмяНом) Тогда
Ном = Справочники.Номенклатура.НайтиПоНаименованию(ИмяНом, Истина);
КонецЕсли;
Если ЗначениеЗаполнено(Ном) И ЗначениеЗаполнено(ИмяНом) Тогда
Если СокрЛП(Ном.Наименование) <> ИмяНом Тогда
СтрТ.КомментарийСопоставления = "Номенклатура не совпала по имени: " + ИмяНом + " → " + Ном.Наименование;
Возврат Справочники.Номенклатура.ПустаяСсылка();
КонецЕсли;
КонецЕсли;
Возврат Ном;
КонецФункции
Функция НайтиСкладСтроки(СтрТ)
СкладЦель = СсылкаПоUUID(Справочники.Склады, СтрТ.СкладИдентификатор);
Если ЗначениеЗаполнено(СкладЦель) И ОбщегоНазначения.СсылкаСуществует(СкладЦель) Тогда
Возврат СкладЦель;
КонецЕсли;
ИмяСкл = СокрЛП(СтрТ.СкладНаименование);
Если ЗначениеЗаполнено(ИмяСкл) Тогда
Возврат Справочники.Склады.НайтиПоНаименованию(ИмяСкл, Истина);
КонецЕсли;
Возврат Справочники.Склады.ПустаяСсылка();
КонецФункции
Функция НайтиИлиСоздатьХарактеристику(СтрТ, Ном, РежимТест, Результат)
Хар = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
ИмяХар = СокрЛП(СтрТ.ХарактеристикаНаименование);
ВидНом = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры");
ИспХар = Ложь;
Попытка
ИспХар = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры.ИспользоватьХарактеристики") = Истина;
Исключение
Попытка
ИспХар = ВидНом.ИспользоватьХарактеристики;
Исключение
КонецПопытки;
КонецПопытки;
Если ЗначениеЗаполнено(ИмяХар) Тогда
Хар = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ИмяХар, Истина, , Ном);
Если Не ЗначениеЗаполнено(Хар) Тогда
Хар = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ИмяХар, Истина, , ВидНом);
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Хар) Тогда
СсылкаПоГуид = СсылкаПоUUID(Справочники.ХарактеристикиНоменклатуры, СтрТ.ХарактеристикаИдентификатор);
Если ЗначениеЗаполнено(СсылкаПоГуид) И ОбщегоНазначения.СсылкаСуществует(СсылкаПоГуид) Тогда
ВладХар = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаПоГуид, "Владелец");
Если ВладХар = Ном Или ВладХар = ВидНом Тогда
Хар = СсылкаПоГуид;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Хар) И ИспХар И ЗначениеЗаполнено(ИмяХар) И Не РежимТест Тогда
Попытка
НовХар = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
НовХар.Владелец = ВидНом;
НовХар.Наименование = ИмяХар;
НовХар.Записать();
Хар = НовХар.Ссылка;
Результат.СозданоХарактеристик = Результат.СозданоХарактеристик + 1;
Исключение
СтрТ.КомментарийСопоставления = "Ошибка создания характеристики: " + ИмяХар;
КонецПопытки;
КонецЕсли;
Если Не ИспХар Тогда
Хар = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
КонецЕсли;
Возврат Хар;
КонецФункции
Функция НайтиИлиСоздатьСерию(СтрТ, Ном, СкладЦель, СуффиксДатыСер, РежимТест,
КэшТребуетсяСерия, КэшСерий, Результат)
Сер = Справочники.СерииНоменклатуры.ПустаяСсылка();
ВидНом = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры");
КлючТребСер = Строка(Ном.УникальныйИдентификатор());
ТребуетсяСерия = КэшТребуетсяСерия.Получить(КлючТребСер);
Если ТребуетсяСерия = Неопределено Тогда
ТребуетсяСерия = Ложь;
Попытка
ТребуетсяСерия = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры.ИспользоватьСерии") = Истина;
Исключение
Попытка
ТребуетсяСерия = ВидНом.ИспользоватьСерии;
Исключение
КонецПопытки;
КонецПопытки;
КэшТребуетсяСерия.Вставить(КлючТребСер, ТребуетсяСерия);
КонецЕсли;
ИмяСерии = СокрЛП(СтрТ.Серия);
Если Не ЗначениеЗаполнено(ИмяСерии) И ТребуетсяСерия Тогда
КодСклЗагл = "";
Попытка
КодСклЗагл = СокрЛП(Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СкладЦель, "Код")));
Исключение
КодСклЗагл = "";
КонецПопытки;
Если ПустаяСтрока(КодСклЗагл) Тогда
КодСклЗагл = Лев(СтрЗаменить(Строка(СкладЦель.УникальныйИдентификатор()), "-", ""), 8);
КонецЕсли;
ИмяСерии = "Перенос_" + КодСклЗагл + "_" + СуффиксДатыСер;
СтрТ.Серия = ИмяСерии;
КонецЕсли;
Если Не ТребуетсяСерия И Не ЗначениеЗаполнено(ИмяСерии) Тогда
Возврат Сер;
КонецЕсли;
СсылкаПоГуид = СсылкаПоUUID(Справочники.СерииНоменклатуры, СтрТ.СерияИдентификатор);
Если ЗначениеЗаполнено(СсылкаПоГуид) И ОбщегоНазначения.СсылкаСуществует(СсылкаПоГуид) Тогда
Возврат СсылкаПоГуид;
КонецЕсли;
ВидСер = Неопределено;
ИспНомерСерии = Истина;
Попытка
НастрСер = Справочники.ВидыНоменклатуры.НастройкиИспользованияСерий(ВидНом, СкладЦель);
ВидСер = НастрСер.ВладелецСерий;
ИспНомерСерии = НастрСер.ИспользоватьНомерСерии;
Исключение
ВидСер = ВидНом;
КонецПопытки;
Если Не ЗначениеЗаполнено(ВидСер) Тогда
ВидСер = ВидНом;
КонецЕсли;
КлючКэшСер = Строка(ВидСер.УникальныйИдентификатор()) + "|" + ИмяСерии;
СерИзКэш = КэшСерий.Получить(КлючКэшСер);
Если СерИзКэш <> Неопределено Тогда
Возврат СерИзКэш;
КонецЕсли;
Если ИспНомерСерии Тогда
Сер = Справочники.СерииНоменклатуры.НайтиПоРеквизиту("Номер", ИмяСерии, , ВидСер);
КонецЕсли;
Если Не ЗначениеЗаполнено(Сер) Тогда
Сер = Справочники.СерииНоменклатуры.НайтиПоНаименованию(ИмяСерии, Истина, , ВидСер);
КонецЕсли;
Если Не ЗначениеЗаполнено(Сер) И Не РежимТест И (ТребуетсяСерия Или ЗначениеЗаполнено(ИмяСерии)) Тогда
Попытка
ОбСер = Справочники.СерииНоменклатуры.ПустойОбъект(ВидСер);
Если ИспНомерСерии Тогда
НомерСер = ИмяСерии;
Если СтрНачинаетсяС(ИмяСерии, "Перенос_") Тогда
НомерСер = Сред(ИмяСерии, СтрДлина("Перенос_") + 1);
КонецЕсли;
ОбСер.Номер = НомерСер;
Иначе
Попытка
ОбСер.Наименование = ИмяСерии;
Исключение
КонецПопытки;
КонецЕсли;
ОбСер.Записать();
Сер = ОбСер.Ссылка;
Результат.СозданоСерий = Результат.СозданоСерий + 1;
Исключение
СтрТ.КомментарийСопоставления = "Ошибка создания серии: " + ИмяСерии;
КонецПопытки;
КонецЕсли;
Если ЗначениеЗаполнено(Сер) Тогда
КэшСерий.Вставить(КлючКэшСер, Сер);
ИначеЕсли ТребуетсяСерия Тогда
Если ПустаяСтрока(СтрТ.КомментарийСопоставления) Или СтрТ.КомментарийСопоставления = "OK" Тогда
СтрТ.КомментарийСопоставления = "Серия не найдена" + ?(РежимТест, " (тест)", "");
КонецЕсли;
КонецЕсли;
Возврат Сер;
КонецФункции
Функция СсылкаПоUUID(Менеджер, Идентификатор)
Если Не ЗначениеЗаполнено(Идентификатор) Тогда
Возврат Менеджер.ПустаяСсылка();
КонецЕсли;
Попытка
Возврат Менеджер.ПолучитьСсылку(Идентификатор);
Исключение
Возврат Менеджер.ПустаяСсылка();
КонецПопытки;
КонецФункции
Функция UUIDИзСтроки(Значение)
Текст = НРег(СокрЛП(Строка(Значение)));
Если ПустаяСтрока(Текст) Или Текст = "00000000-0000-0000-0000-000000000000" Тогда
Возврат Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
КонецЕсли;
Попытка
Возврат Новый УникальныйИдентификатор(Текст);
Исключение
Возврат Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
КонецПопытки;
КонецФункции
Функция ЗначениеСвойства(Источник, Имя, ПоУмолчанию)
Если Источник = Неопределено Тогда
Возврат ПоУмолчанию;
КонецЕсли;
Если ТипЗнч(Источник) = Тип("Структура") Или ТипЗнч(Источник) = Тип("ФиксированнаяСтруктура") Тогда
Если Источник.Свойство(Имя) Тогда
Возврат Источник[Имя];
КонецЕсли;
Возврат ПоУмолчанию;
КонецЕсли;
Если ТипЗнч(Источник) = Тип("Соответствие") Или ТипЗнч(Источник) = Тип("ФиксированноеСоответствие") Тогда
Значение = Источник.Получить(Имя);
Если Значение = Неопределено Тогда
Возврат ПоУмолчанию;
КонецЕсли;
Возврат Значение;
КонецЕсли;
Возврат ПоУмолчанию;
КонецФункции
Функция ЧислоИзЗначения(Значение, ПоУмолчанию)
Если Значение = Неопределено Или Значение = Null Тогда
Возврат ПоУмолчанию;
КонецЕсли;
Попытка
Возврат Число(Значение);
Исключение
Возврат ПоУмолчанию;
КонецПопытки;
КонецФункции
#КонецОбласти
#КонецЕсли
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<Form uuid="9dfcb2a8-bf22-44c3-97a7-a69f70ca4d61">
<Properties>
<Name>ПодборСкладов</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подбор складов</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
</UsePurposes>
<ExtendedPresentation/>
</Properties>
</Form>
</MetaDataObject>
@@ -0,0 +1,178 @@
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcssch="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<ChildItems>
<Button name="ФормаПеренестиВОтбор" id="26">
<Type>CommandBarButton</Type>
<DefaultButton>true</DefaultButton>
<CommandName>Form.Command.ПеренестиВОтбор</CommandName>
<ExtendedTooltip name="ФормаПеренестиВОтборРасширеннаяПодсказка" id="27"/>
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems>
<CheckBoxField name="Добавление" id="23">
<DataPath>Добавление</DataPath>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Добавление (отмечено) или перезаполнить (не отмечено)</v8:content>
</v8:item>
</ToolTip>
<ToolTipRepresentation>ShowRight</ToolTipRepresentation>
<CheckBoxType>Switcher</CheckBoxType>
<ContextMenu name="ДобавлениеКонтекстноеМеню" id="24"/>
<ExtendedTooltip name="ДобавлениеРасширеннаяПодсказка" id="25"/>
</CheckBoxField>
<Table name="СписокСкладовВнешнейБазы" id="1">
<Representation>List</Representation>
<ChangeRowSet>false</ChangeRowSet>
<ChangeRowOrder>false</ChangeRowOrder>
<ChoiceMode>true</ChoiceMode>
<MultipleChoice>true</MultipleChoice>
<AutoInsertNewRow>true</AutoInsertNewRow>
<EnableStartDrag>true</EnableStartDrag>
<EnableDrag>true</EnableDrag>
<DataPath>СписокСкладовВнешнейБазы</DataPath>
<RowFilter xsi:nil="true"/>
<ContextMenu name="СписокСкладовВнешнейБазыКонтекстноеМеню" id="2"/>
<AutoCommandBar name="СписокСкладовВнешнейБазыКоманднаяПанель" id="3"/>
<ExtendedTooltip name="СписокСкладовВнешнейБазыРасширеннаяПодсказка" id="4"/>
<SearchStringAddition name="СписокСкладовВнешнейБазыСтрокаПоиска" id="5">
<AdditionSource>
<Item>СписокСкладовВнешнейБазы</Item>
<Type>SearchStringRepresentation</Type>
</AdditionSource>
<ContextMenu name="СписокСкладовВнешнейБазыСтрокаПоискаКонтекстноеМеню" id="6"/>
<ExtendedTooltip name="СписокСкладовВнешнейБазыСтрокаПоискаРасширеннаяПодсказка" id="7"/>
</SearchStringAddition>
<ViewStatusAddition name="СписокСкладовВнешнейБазыСостояниеПросмотра" id="8">
<AdditionSource>
<Item>СписокСкладовВнешнейБазы</Item>
<Type>ViewStatusRepresentation</Type>
</AdditionSource>
<ContextMenu name="СписокСкладовВнешнейБазыСостояниеПросмотраКонтекстноеМеню" id="9"/>
<ExtendedTooltip name="СписокСкладовВнешнейБазыСостояниеПросмотраРасширеннаяПодсказка" id="10"/>
</ViewStatusAddition>
<SearchControlAddition name="СписокСкладовВнешнейБазыУправлениеПоиском" id="11">
<AdditionSource>
<Item>СписокСкладовВнешнейБазы</Item>
<Type>SearchControl</Type>
</AdditionSource>
<ContextMenu name="СписокСкладовВнешнейБазыУправлениеПоискомКонтекстноеМеню" id="12"/>
<ExtendedTooltip name="СписокСкладовВнешнейБазыУправлениеПоискомРасширеннаяПодсказка" id="13"/>
</SearchControlAddition>
<ChildItems>
<InputField name="СписокСкладовВнешнейБазыНаименование" id="14">
<DataPath>СписокСкладовВнешнейБазы.Наименование</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="СписокСкладовВнешнейБазыНаименованиеКонтекстноеМеню" id="15"/>
<ExtendedTooltip name="СписокСкладовВнешнейБазыНаименованиеРасширеннаяПодсказка" id="16"/>
</InputField>
<LabelField name="СписокСкладовВнешнейБазыИдентификатор" id="17">
<DataPath>СписокСкладовВнешнейБазы.Идентификатор</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="СписокСкладовВнешнейБазыИдентификаторКонтекстноеМеню" id="18"/>
<ExtendedTooltip name="СписокСкладовВнешнейБазыИдентификаторРасширеннаяПодсказка" id="19"/>
</LabelField>
<CheckBoxField name="СписокСкладовВнешнейБазыОтметка" id="20">
<DataPath>СписокСкладовВнешнейБазы.Отметка</DataPath>
<EditMode>EnterOnInput</EditMode>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="СписокСкладовВнешнейБазыОтметкаКонтекстноеМеню" id="21"/>
<ExtendedTooltip name="СписокСкладовВнешнейБазыОтметкаРасширеннаяПодсказка" id="22"/>
</CheckBoxField>
</ChildItems>
</Table>
</ChildItems>
<Attributes>
<Attribute name="Объект" id="1">
<Type>
<v8:Type>cfg:DataProcessorObject.РК_ЗагрузкаОстатков</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
</Attribute>
<Attribute name="СписокСкладовВнешнейБазы" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Список складов внешней базы</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>v8:ValueTable</v8:Type>
</Type>
<Columns>
<Column name="Наименование" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Наименование</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
</Column>
<Column name="Идентификатор" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Идентификатор</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>v8:UUID</v8:Type>
</Type>
</Column>
<Column name="Отметка" id="3">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отметка</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
</Column>
</Columns>
</Attribute>
<Attribute name="Добавление" id="3">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Добавление</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
</Attribute>
</Attributes>
<Commands>
<Command name="ПеренестиВОтбор" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Перенести в отбор</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Перенести отмеченные склады в отбор</v8:content>
</v8:item>
</ToolTip>
<Action>ПеренестиВОтбор</Action>
</Command>
</Commands>
</Form>
@@ -0,0 +1,78 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Добавление = Истина;
Подключение = Неопределено;
Если Параметры.Свойство("ПодключениеКСтороннейБазе", Подключение) Тогда
Объект.ПодключениеКСтороннейБазе = Подключение;
КонецЕсли;
ЗаполнитьСписокСкладовНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиВОтбор(Команда)
Выбранные = Новый Массив;
Для Каждого Стр Из СписокСкладовВнешнейБазы Цикл
Если Стр.Отметка Тогда
Выбранные.Добавить(Новый Структура("Наименование, Идентификатор, Отметка",
Стр.Наименование, Стр.Идентификатор, Истина));
КонецЕсли;
КонецЦикла;
Закрыть(Новый Структура("Добавление, Склады", Добавление, Выбранные));
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокСкладовНаСервере()
Если Не ЗначениеЗаполнено(Объект.ПодключениеКСтороннейБазе) Тогда
Возврат;
КонецЕсли;
Ответ = РК_ОбменСВнешнейБазой.СписокСкладовВнешнейБазы(Объект.ПодключениеКСтороннейБазе);
Строки = Неопределено;
Если ТипЗнч(Ответ) = Тип("Структура") Или ТипЗнч(Ответ) = Тип("Соответствие") Тогда
Если ТипЗнч(Ответ) = Тип("Структура") Тогда
Если Ответ.Свойство("rows") Тогда
Строки = Ответ.rows;
КонецЕсли;
Иначе
Строки = Ответ.Получить("rows");
КонецЕсли;
КонецЕсли;
Если ТипЗнч(Строки) <> Тип("Массив") Тогда
Возврат;
КонецЕсли;
СписокСкладовВнешнейБазы.Очистить();
Для Каждого СтрокаAPI Из Строки Цикл
ГуидТекст = "";
Имя = "";
Если ТипЗнч(СтрокаAPI) = Тип("Структура") Тогда
Если СтрокаAPI.Свойство("guid") Тогда
ГуидТекст = СокрЛП(Строка(СтрокаAPI.guid));
КонецЕсли;
Если СтрокаAPI.Свойство("name") Тогда
Имя = СокрЛП(Строка(СтрокаAPI.name));
КонецЕсли;
ИначеЕсли ТипЗнч(СтрокаAPI) = Тип("Соответствие") Тогда
ГуидТекст = СокрЛП(Строка(СтрокаAPI.Получить("guid")));
Имя = СокрЛП(Строка(СтрокаAPI.Получить("name")));
КонецЕсли;
Если ПустаяСтрока(ГуидТекст) Тогда
Продолжить;
КонецЕсли;
НовСтр = СписокСкладовВнешнейБазы.Добавить();
НовСтр.Наименование = Имя;
Попытка
НовСтр.Идентификатор = Новый УникальныйИдентификатор(ГуидТекст);
Исключение
Продолжить;
КонецПопытки;
НовСтр.Отметка = Ложь;
КонецЦикла;
КонецПроцедуры
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<Form uuid="dc49348d-9257-4545-9c29-70c138312177">
<Properties>
<Name>Форма</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Форма</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
</UsePurposes>
<ExtendedPresentation/>
</Properties>
</Form>
</MetaDataObject>
@@ -0,0 +1,443 @@
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcssch="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Загрузка остатков из внешней базы</v8:content>
</v8:item>
</Title>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<ChildItems>
<Button name="ФормаЗагрузитьОстатки" id="113">
<Type>CommandBarButton</Type>
<DefaultButton>true</DefaultButton>
<CommandName>Form.Command.ЗагрузитьОстатки</CommandName>
<ExtendedTooltip name="ФормаЗагрузитьОстаткиРасширеннаяПодсказка" id="114"/>
</Button>
<Button name="ФормаСопоставить" id="115">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.Сопоставить</CommandName>
<ExtendedTooltip name="ФормаСопоставитьРасширеннаяПодсказка" id="116"/>
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems>
<InputField name="ПодключениеКСтороннейБазе" id="30">
<DataPath>Объект.ПодключениеКСтороннейБазе</DataPath>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ПодключениеКСтороннейБазеКонтекстноеМеню" id="31"/>
<ExtendedTooltip name="ПодключениеКСтороннейБазеРасширеннаяПодсказка" id="32"/>
</InputField>
<InputField name="ДатаОстатков" id="33">
<DataPath>Объект.ДатаОстатков</DataPath>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ДатаОстатковКонтекстноеМеню" id="34"/>
<ExtendedTooltip name="ДатаОстатковРасширеннаяПодсказка" id="35"/>
</InputField>
<InputField name="ДатаДокументовВвода" id="36">
<DataPath>Объект.ДатаДокументовВвода</DataPath>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ДатаДокументовВводаКонтекстноеМеню" id="37"/>
<ExtendedTooltip name="ДатаДокументовВводаРасширеннаяПодсказка" id="38"/>
</InputField>
<Pages name="ГруппаСтраницы" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группа страницы</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группа страницы</v8:content>
</v8:item>
</ToolTip>
<ExtendedTooltip name="ГруппаСтраницыРасширеннаяПодсказка" id="2"/>
<ChildItems>
<Page name="ГруппаВходящиеДанные" id="3">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Входящие данные</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группа входящие данные</v8:content>
</v8:item>
</ToolTip>
<ExtendedTooltip name="ГруппаВходящиеДанныеРасширеннаяПодсказка" id="4"/>
<ChildItems>
<Table name="ВходящиеДанные" id="5">
<AutoInsertNewRow>true</AutoInsertNewRow>
<EnableStartDrag>true</EnableStartDrag>
<EnableDrag>true</EnableDrag>
<DataPath>Объект.ВходящиеДанные</DataPath>
<RowFilter xsi:nil="true"/>
<ContextMenu name="ВходящиеДанныеКонтекстноеМеню" id="6"/>
<AutoCommandBar name="ВходящиеДанныеКоманднаяПанель" id="7"/>
<ExtendedTooltip name="ВходящиеДанныеРасширеннаяПодсказка" id="8"/>
<SearchStringAddition name="ВходящиеДанныеСтрокаПоиска" id="9">
<AdditionSource>
<Item>ВходящиеДанные</Item>
<Type>SearchStringRepresentation</Type>
</AdditionSource>
<ContextMenu name="ВходящиеДанныеСтрокаПоискаКонтекстноеМеню" id="10"/>
<ExtendedTooltip name="ВходящиеДанныеСтрокаПоискаРасширеннаяПодсказка" id="11"/>
</SearchStringAddition>
<ViewStatusAddition name="ВходящиеДанныеСостояниеПросмотра" id="12">
<AdditionSource>
<Item>ВходящиеДанные</Item>
<Type>ViewStatusRepresentation</Type>
</AdditionSource>
<ContextMenu name="ВходящиеДанныеСостояниеПросмотраКонтекстноеМеню" id="13"/>
<ExtendedTooltip name="ВходящиеДанныеСостояниеПросмотраРасширеннаяПодсказка" id="14"/>
</ViewStatusAddition>
<SearchControlAddition name="ВходящиеДанныеУправлениеПоиском" id="15">
<AdditionSource>
<Item>ВходящиеДанные</Item>
<Type>SearchControl</Type>
</AdditionSource>
<ContextMenu name="ВходящиеДанныеУправлениеПоискомКонтекстноеМеню" id="16"/>
<ExtendedTooltip name="ВходящиеДанныеУправлениеПоискомРасширеннаяПодсказка" id="17"/>
</SearchControlAddition>
<ChildItems>
<LabelField name="ВходящиеДанныеНомерСтроки" id="18">
<DataPath>Объект.ВходящиеДанные.LineNumber</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеНомерСтрокиКонтекстноеМеню" id="19"/>
<ExtendedTooltip name="ВходящиеДанныеНомерСтрокиРасширеннаяПодсказка" id="20"/>
</LabelField>
<InputField name="ВходящиеДанныеНоменклатураНаименование" id="21">
<DataPath>Объект.ВходящиеДанные.НоменклатураНаименование</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ВходящиеДанныеНоменклатураНаименованиеКонтекстноеМеню" id="22"/>
<ExtendedTooltip name="ВходящиеДанныеНоменклатураНаименованиеРасширеннаяПодсказка" id="23"/>
</InputField>
<InputField name="ВходящиеДанныеЕдИзм" id="27">
<DataPath>Объект.ВходящиеДанные.ЕдИзм</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ВходящиеДанныеЕдИзмКонтекстноеМеню" id="28"/>
<ExtendedTooltip name="ВходящиеДанныеЕдИзмРасширеннаяПодсказка" id="29"/>
</InputField>
<LabelField name="ВходящиеДанныеЕдИзмИдентификатор" id="76">
<DataPath>Объект.ВходящиеДанные.ЕдИзмИдентификатор</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеЕдИзмИдентификаторКонтекстноеМеню" id="77"/>
<ExtendedTooltip name="ВходящиеДанныеЕдИзмИдентификаторРасширеннаяПодсказка" id="78"/>
</LabelField>
<InputField name="ВходящиеДанныеСкладНаименование" id="24">
<DataPath>Объект.ВходящиеДанные.СкладНаименование</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ВходящиеДанныеСкладНаименованиеКонтекстноеМеню" id="25"/>
<ExtendedTooltip name="ВходящиеДанныеСкладНаименованиеРасширеннаяПодсказка" id="26"/>
</InputField>
<LabelField name="ВходящиеДанныеСкладИдентификатор" id="73">
<DataPath>Объект.ВходящиеДанные.СкладИдентификатор</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеСкладИдентификаторКонтекстноеМеню" id="74"/>
<ExtendedTooltip name="ВходящиеДанныеСкладИдентификаторРасширеннаяПодсказка" id="75"/>
</LabelField>
<InputField name="ВходящиеДанныеГТД" id="70">
<DataPath>Объект.ВходящиеДанные.ГТД</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ВходящиеДанныеГТДКонтекстноеМеню" id="71"/>
<ExtendedTooltip name="ВходящиеДанныеГТДРасширеннаяПодсказка" id="72"/>
</InputField>
<InputField name="ВходящиеДанныеСерия" id="67">
<DataPath>Объект.ВходящиеДанные.Серия</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ВходящиеДанныеСерияКонтекстноеМеню" id="68"/>
<ExtendedTooltip name="ВходящиеДанныеСерияРасширеннаяПодсказка" id="69"/>
</InputField>
<InputField name="ВходящиеДанныеКоличество" id="80">
<DataPath>Объект.ВходящиеДанные.Количество</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеКоличествоКонтекстноеМеню" id="81"/>
<ExtendedTooltip name="ВходящиеДанныеКоличествоРасширеннаяПодсказка" id="82"/>
</InputField>
<InputField name="ВходящиеДанныеАртикул" id="83">
<DataPath>Объект.ВходящиеДанные.Артикул</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеАртикулКонтекстноеМеню" id="84"/>
<ExtendedTooltip name="ВходящиеДанныеАртикулРасширеннаяПодсказка" id="85"/>
</InputField>
<InputField name="ВходящиеДанныеНоменклатураКод" id="86">
<DataPath>Объект.ВходящиеДанные.НоменклатураКод</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеНоменклатураКодКонтекстноеМеню" id="87"/>
<ExtendedTooltip name="ВходящиеДанныеНоменклатураКодРасширеннаяПодсказка" id="88"/>
</InputField>
<InputField name="ВходящиеДанныеХарактеристикаНаименование" id="89">
<DataPath>Объект.ВходящиеДанные.ХарактеристикаНаименование</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеХарактеристикаНаименованиеКонтекстноеМеню" id="90"/>
<ExtendedTooltip name="ВходящиеДанныеХарактеристикаНаименованиеРасширеннаяПодсказка" id="91"/>
</InputField>
<InputField name="ВходящиеДанныеВидНоменклатурыНаименование" id="92">
<DataPath>Объект.ВходящиеДанные.ВидНоменклатурыНаименование</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеВидНоменклатурыНаименованиеКонтекстноеМеню" id="93"/>
<ExtendedTooltip name="ВходящиеДанныеВидНоменклатурыНаименованиеРасширеннаяПодсказка" id="94"/>
</InputField>
<InputField name="ВходящиеДанныеОрганизацияНаименование" id="95">
<DataPath>Объект.ВходящиеДанные.ОрганизацияНаименование</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеОрганизацияНаименованиеКонтекстноеМеню" id="96"/>
<ExtendedTooltip name="ВходящиеДанныеОрганизацияНаименованиеРасширеннаяПодсказка" id="97"/>
</InputField>
<InputField name="ВходящиеДанныеНоменклатура" id="98">
<DataPath>Объект.ВходящиеДанные.Номенклатура</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеНоменклатураКонтекстноеМеню" id="99"/>
<ExtendedTooltip name="ВходящиеДанныеНоменклатураРасширеннаяПодсказка" id="100"/>
</InputField>
<InputField name="ВходящиеДанныеСклад" id="101">
<DataPath>Объект.ВходящиеДанные.Склад</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеСкладКонтекстноеМеню" id="102"/>
<ExtendedTooltip name="ВходящиеДанныеСкладРасширеннаяПодсказка" id="103"/>
</InputField>
<InputField name="ВходящиеДанныеСерияСсылка" id="104">
<DataPath>Объект.ВходящиеДанные.СерияСсылка</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеСерияСсылкаКонтекстноеМеню" id="105"/>
<ExtendedTooltip name="ВходящиеДанныеСерияСсылкаРасширеннаяПодсказка" id="106"/>
</InputField>
<CheckBoxField name="ВходящиеДанныеСопоставлено" id="107">
<DataPath>Объект.ВходящиеДанные.Сопоставлено</DataPath>
<EditMode>EnterOnInput</EditMode>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="ВходящиеДанныеСопоставленоКонтекстноеМеню" id="108"/>
<ExtendedTooltip name="ВходящиеДанныеСопоставленоРасширеннаяПодсказка" id="109"/>
</CheckBoxField>
<InputField name="ВходящиеДанныеКомментарийСопоставления" id="110">
<DataPath>Объект.ВходящиеДанные.КомментарийСопоставления</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ВходящиеДанныеКомментарийСопоставленияКонтекстноеМеню" id="111"/>
<ExtendedTooltip name="ВходящиеДанныеКомментарийСопоставленияРасширеннаяПодсказка" id="112"/>
</InputField>
</ChildItems>
</Table>
</ChildItems>
</Page>
<Page name="ГруппаОтбор" id="39">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отбор</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группа отбор</v8:content>
</v8:item>
</ToolTip>
<ExtendedTooltip name="ГруппаОтборРасширеннаяПодсказка" id="40"/>
<ChildItems>
<UsualGroup name="Склады" id="41">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Склады внешней базы</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Склады</v8:content>
</v8:item>
</ToolTip>
<ExtendedTooltip name="СкладыРасширеннаяПодсказка" id="42"/>
<ChildItems>
<Table name="ОтборСкладовВнешнейБазы" id="43">
<Representation>List</Representation>
<ChangeRowSet>false</ChangeRowSet>
<ChangeRowOrder>false</ChangeRowOrder>
<AutoInsertNewRow>true</AutoInsertNewRow>
<EnableStartDrag>true</EnableStartDrag>
<EnableDrag>true</EnableDrag>
<DataPath>ОтборСкладовВнешнейБазы</DataPath>
<RowFilter xsi:nil="true"/>
<ContextMenu name="ОтборСкладовВнешнейБазыКонтекстноеМеню" id="44"/>
<AutoCommandBar name="ОтборСкладовВнешнейБазыКоманднаяПанель" id="45">
<ChildItems>
<Button name="ОтборСкладовВнешнейБазыПодобратьСклады" id="65">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.ПодобратьСклады</CommandName>
<ExtendedTooltip name="ОтборСкладовВнешнейБазыПодобратьСкладыРасширеннаяПодсказка" id="66"/>
</Button>
</ChildItems>
</AutoCommandBar>
<ExtendedTooltip name="ОтборСкладовВнешнейБазыРасширеннаяПодсказка" id="46"/>
<SearchStringAddition name="ОтборСкладовВнешнейБазыСтрокаПоиска" id="47">
<AdditionSource>
<Item>ОтборСкладовВнешнейБазы</Item>
<Type>SearchStringRepresentation</Type>
</AdditionSource>
<ContextMenu name="ОтборСкладовВнешнейБазыСтрокаПоискаКонтекстноеМеню" id="48"/>
<ExtendedTooltip name="ОтборСкладовВнешнейБазыСтрокаПоискаРасширеннаяПодсказка" id="49"/>
</SearchStringAddition>
<ViewStatusAddition name="ОтборСкладовВнешнейБазыСостояниеПросмотра" id="50">
<AdditionSource>
<Item>ОтборСкладовВнешнейБазы</Item>
<Type>ViewStatusRepresentation</Type>
</AdditionSource>
<ContextMenu name="ОтборСкладовВнешнейБазыСостояниеПросмотраКонтекстноеМеню" id="51"/>
<ExtendedTooltip name="ОтборСкладовВнешнейБазыСостояниеПросмотраРасширеннаяПодсказка" id="52"/>
</ViewStatusAddition>
<SearchControlAddition name="ОтборСкладовВнешнейБазыУправлениеПоиском" id="53">
<AdditionSource>
<Item>ОтборСкладовВнешнейБазы</Item>
<Type>SearchControl</Type>
</AdditionSource>
<ContextMenu name="ОтборСкладовВнешнейБазыУправлениеПоискомКонтекстноеМеню" id="54"/>
<ExtendedTooltip name="ОтборСкладовВнешнейБазыУправлениеПоискомРасширеннаяПодсказка" id="55"/>
</SearchControlAddition>
<ChildItems>
<InputField name="ОтборСкладовВнешнейБазыНаименование" id="56">
<DataPath>ОтборСкладовВнешнейБазы.Наименование</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ОтборСкладовВнешнейБазыНаименованиеКонтекстноеМеню" id="57"/>
<ExtendedTooltip name="ОтборСкладовВнешнейБазыНаименованиеРасширеннаяПодсказка" id="58"/>
</InputField>
<LabelField name="ОтборСкладовВнешнейБазыИдентификатор" id="59">
<DataPath>ОтборСкладовВнешнейБазы.Идентификатор</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ОтборСкладовВнешнейБазыИдентификаторКонтекстноеМеню" id="60"/>
<ExtendedTooltip name="ОтборСкладовВнешнейБазыИдентификаторРасширеннаяПодсказка" id="61"/>
</LabelField>
<CheckBoxField name="ОтборСкладовВнешнейБазыОтметка" id="62">
<DataPath>ОтборСкладовВнешнейБазы.Отметка</DataPath>
<EditMode>EnterOnInput</EditMode>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="ОтборСкладовВнешнейБазыОтметкаКонтекстноеМеню" id="63"/>
<ExtendedTooltip name="ОтборСкладовВнешнейБазыОтметкаРасширеннаяПодсказка" id="64"/>
</CheckBoxField>
</ChildItems>
</Table>
</ChildItems>
</UsualGroup>
</ChildItems>
</Page>
</ChildItems>
</Pages>
</ChildItems>
<Attributes>
<Attribute name="Объект" id="1">
<Type>
<v8:Type>cfg:DataProcessorObject.РК_ЗагрузкаОстатков</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
</Attribute>
<Attribute name="ОтборСкладовВнешнейБазы" id="3">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отбор складов внешней базы</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>v8:ValueTable</v8:Type>
</Type>
<Columns>
<Column name="Наименование" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Наименование</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
</Column>
<Column name="Идентификатор" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Идентификатор</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>v8:UUID</v8:Type>
</Type>
</Column>
<Column name="Отметка" id="3">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отметка</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
</Column>
</Columns>
</Attribute>
</Attributes>
<Commands>
<Command name="ПодобратьСклады" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подобрать склады</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подобрать склады</v8:content>
</v8:item>
</ToolTip>
<Action>ПодобратьСклады</Action>
</Command>
<Command name="ЗагрузитьОстатки" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Загрузить остатки</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Загрузить остатки из исходной базы</v8:content>
</v8:item>
</ToolTip>
<Action>ЗагрузитьОстатки</Action>
</Command>
<Command name="Сопоставить" id="3">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Сопоставить</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Сопоставить НСИ и серии</v8:content>
</v8:item>
</ToolTip>
<Action>Сопоставить</Action>
</Command>
</Commands>
</Form>
@@ -0,0 +1,232 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ЗначениеЗаполнено(Объект.ПодключениеКСтороннейБазе) Тогда
Попытка
Объект.ПодключениеКСтороннейБазе = Константы.РК_РабочееПодключениеЧерезАПИ.Получить();
Исключение
КонецПопытки;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ДатаОстатков) Тогда
Объект.ДатаОстатков = КонецДня(НачалоМесяца(ТекущаяДатаСеанса()) - 1);
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ДатаДокументовВвода) Тогда
Объект.ДатаДокументовВвода = Объект.ДатаОстатков;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ПодобратьСклады(Команда)
Если Не ЗначениеЗаполнено(Объект.ПодключениеКСтороннейБазе) Тогда
ПоказатьПредупреждение(, "Укажите подключение к сторонней базе");
Возврат;
КонецЕсли;
ПодобратьСкладыНаСервере();
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаОтбор;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьОстатки(Команда)
Если Не ЗначениеЗаполнено(Объект.ПодключениеКСтороннейБазе) Тогда
ПоказатьПредупреждение(, "Укажите подключение к сторонней базе");
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ДатаОстатков) Тогда
ПоказатьПредупреждение(, "Укажите дату остатков");
Возврат;
КонецЕсли;
Количество = ЗагрузитьОстаткиНаСервере();
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаВходящиеДанные;
ПоказатьОповещениеПользователя("Загрузка остатков", , "Загружено строк: " + Формат(Количество, "ЧГ=0"));
КонецПроцедуры
&НаКлиенте
Процедура Сопоставить(Команда)
Если Объект.ВходящиеДанные.Количество() = 0 Тогда
ПоказатьПредупреждение(, "Сначала загрузите остатки");
Возврат;
КонецЕсли;
ДопПараметры = Новый Структура("РежимТест", Истина);
Описание = Новый ОписаниеОповещения("СопоставитьПослеВопроса", ЭтотОбъект, ДопПараметры);
ПоказатьВопрос(Описание,
"Создавать отсутствующие серии и характеристики?" + Символы.ПС
+ "Да — запись; Нет — только поиск (тест); Отмена — прервать.",
РежимДиалогаВопрос.ДаНетОтмена);
КонецПроцедуры
&НаКлиенте
Процедура СопоставитьПослеВопроса(РезультатВопроса, ДопПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
РежимТест = (РезультатВопроса <> КодВозвратаДиалога.Да);
Текст = СопоставитьНаСервере(РежимТест);
ПоказатьОповещениеПользователя("Сопоставление", , Текст);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ПодобратьСкладыНаСервере()
Ответ = РК_ОбменСВнешнейБазой.СписокСкладовВнешнейБазы(Объект.ПодключениеКСтороннейБазе);
Строки = Неопределено;
Если ТипЗнч(Ответ) = Тип("Структура") Или ТипЗнч(Ответ) = Тип("Соответствие") Тогда
Строки = ЗначениеСвойстваОтвета(Ответ, "rows");
КонецЕсли;
Если ТипЗнч(Строки) <> Тип("Массив") Тогда
ВызватьИсключение "Некорректный ответ /v1/stock/warehouses";
КонецЕсли;
БылиОтметки = Новый Соответствие;
Для Каждого Стр Из ОтборСкладовВнешнейБазы Цикл
БылиОтметки.Вставить(Строка(Стр.Идентификатор), Стр.Отметка);
КонецЦикла;
ОтборСкладовВнешнейБазы.Очистить();
Для Каждого СтрокаAPI Из Строки Цикл
ГуидТекст = СокрЛП(Строка(ЗначениеСвойстваОтвета(СтрокаAPI, "guid")));
Если ПустаяСтрока(ГуидТекст) Тогда
Продолжить;
КонецЕсли;
НовСтр = ОтборСкладовВнешнейБазы.Добавить();
НовСтр.Наименование = СокрЛП(Строка(ЗначениеСвойстваОтвета(СтрокаAPI, "name")));
Попытка
НовСтр.Идентификатор = Новый УникальныйИдентификатор(ГуидТекст);
Исключение
Продолжить;
КонецПопытки;
СтараяОтметка = БылиОтметки.Получить(Строка(НовСтр.Идентификатор));
НовСтр.Отметка = ?(СтараяОтметка = Неопределено, Ложь, СтараяОтметка = Истина);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ЗагрузитьОстаткиНаСервере()
СкладыGUID = Новый Массив;
Для Каждого Стр Из ОтборСкладовВнешнейБазы Цикл
Если Стр.Отметка Тогда
СкладыGUID.Добавить(Строка(Стр.Идентификатор));
КонецЕсли;
КонецЦикла;
Если СкладыGUID.Количество() = 0 Тогда
ВызватьИсключение "Отметьте хотя бы один склад на закладке «Отбор»";
КонецЕсли;
Фильтры = Новый Структура;
Фильтры.Вставить("warehouses", СкладыGUID);
Фильтры.Вставить("only_nonzero", Истина);
ВсеСтроки = Новый Массив;
Курсор = "";
Лимит = 2000;
МаксСтраниц = 200;
Для НомерСтраницы = 1 По МаксСтраниц Цикл
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("mode", "combined");
ПараметрыЗапроса.Вставить("as_of", Формат(Объект.ДатаОстатков, "ДФ=yyyy-MM-ddTHH:mm:ss"));
ПараметрыЗапроса.Вставить("limit", Лимит);
ПараметрыЗапроса.Вставить("include_policy", Истина);
ПараметрыЗапроса.Вставить("filters", Фильтры);
Если Не ПустаяСтрока(Курсор) Тогда
ПараметрыЗапроса.Вставить("cursor", Курсор);
КонецЕсли;
Ответ = РК_ОбменСВнешнейБазой.ОстаткиВнешнейБазы(Объект.ПодключениеКСтороннейБазе, ПараметрыЗапроса);
Строки = ЗначениеСвойстваОтвета(Ответ, "rows");
Если ТипЗнч(Строки) <> Тип("Массив") Тогда
ВызватьИсключение "Некорректный ответ /v1/stock/balances";
КонецЕсли;
Для Каждого СтрAPI Из Строки Цикл
ВсеСтроки.Добавить(СтрAPI);
КонецЦикла;
Мета = ЗначениеСвойстваОтвета(Ответ, "meta");
ЕстьЕще = Ложь;
Если ТипЗнч(Мета) = Тип("Структура") Или ТипЗнч(Мета) = Тип("Соответствие") Тогда
ЗначениеЕстьЕще = ЗначениеСвойстваОтвета(Мета, "has_more");
Если ТипЗнч(ЗначениеЕстьЕще) = Тип("Булево") Тогда
ЕстьЕще = ЗначениеЕстьЕще;
ИначеЕсли ЗначениеЕстьЕще <> Неопределено Тогда
ЕстьЕще = (НРег(СокрЛП(Строка(ЗначениеЕстьЕще))) = "true" Или Строка(ЗначениеЕстьЕще) = "1");
КонецЕсли;
КонецЕсли;
Курсор = СокрЛП(Строка(ЗначениеСвойстваОтвета(Ответ, "cursor")));
Если Не ЕстьЕще Или ПустаяСтрока(Курсор) Или Строки.Количество() = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Пакет = Новый Структура("rows", ВсеСтроки);
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
ОбъектОбработки.ЗаполнитьВходящиеДанныеИзОтветаОстатков(Пакет, Истина);
ЗначениеВРеквизитФормы(ОбъектОбработки, "Объект");
Возврат Объект.ВходящиеДанные.Количество();
КонецФункции
&НаСервере
Функция СопоставитьНаСервере(РежимТест)
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
Результат = ОбъектОбработки.СопоставитьВходящиеДанные(РежимТест);
ЗначениеВРеквизитФормы(ОбъектОбработки, "Объект");
Возврат СтрШаблон(
"Сопоставлено: %1; не сопоставлено: %2; создано серий: %3; создано характеристик: %4%5",
Формат(Результат.Сопоставлено, "ЧН=0; ЧГ=0"),
Формат(Результат.НеСопоставлено, "ЧН=0; ЧГ=0"),
Формат(Результат.СозданоСерий, "ЧН=0; ЧГ=0"),
Формат(Результат.СозданоХарактеристик, "ЧН=0; ЧГ=0"),
?(РежимТест, " (тест)", ""));
КонецФункции
&НаСервере
Функция ЗначениеСвойстваОтвета(Источник, Имя)
Если Источник = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если ТипЗнч(Источник) = Тип("Структура") Или ТипЗнч(Источник) = Тип("ФиксированнаяСтруктура") Тогда
Если Источник.Свойство(Имя) Тогда
Возврат Источник[Имя];
КонецЕсли;
Возврат Неопределено;
КонецЕсли;
Если ТипЗнч(Источник) = Тип("Соответствие") Или ТипЗнч(Источник) = Тип("ФиксированноеСоответствие") Тогда
Возврат Источник.Получить(Имя);
КонецЕсли;
Возврат Неопределено;
КонецФункции
#КонецОбласти
+1
View File
@@ -22,6 +22,7 @@
</Properties>
<ChildObjects>
<Subsystem>РК_Справочники</Subsystem>
<Subsystem>РК_ОбменСВнешнейБазой</Subsystem>
</ChildObjects>
</Subsystem>
</MetaDataObject>
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<Subsystem uuid="ac0fe2bc-d524-4b39-a345-04ec06dca5b8">
<Properties>
<Name>РК_ОбменСВнешнейБазой</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обмен с внешней базой</v8:content>
</v8:item>
</Synonym>
<Comment/>
<IncludeHelpInContents>true</IncludeHelpInContents>
<IncludeInCommandInterface>true</IncludeInCommandInterface>
<UseOneCommand>false</UseOneCommand>
<Explanation/>
<Picture/>
<Content>
<xr:Item xsi:type="xr:MDObjectRef">Catalog.РК_НастройкиПодключенияКВнешнейБазе</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Constant.РК_РабочееПодключениеЧерезАПИ</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.РК_ОбменСВнешнейБазой</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">DataProcessor.РК_ЗагрузкаОстатков</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">DataProcessor.РК_ОбработкаПарнеровКонтрагентов</xr:Item>
</Content>
</Properties>
<ChildObjects/>
</Subsystem>
</MetaDataObject>