Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0ef87a322c | |||
| 94f793b614 | |||
| 0ebd01d0ba | |||
| 997b7fe110 | |||
| a83f23d16c | |||
| eb097a8078 | |||
| 8a1624a47a | |||
| 2dfa49b2cf | |||
| 6a61479ba2 | |||
| 7a313f254c | |||
| 45b7af871a |
+130
@@ -4,6 +4,136 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 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, не к типовой записи справочника `Контрагенты`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 1.3.0.38 (2026-07-06)
|
## 1.3.0.38 (2026-07-06)
|
||||||
|
|
||||||
### Обмен — фильтр узла «Рабочая CRM3»
|
### Обмен — фильтр узла «Рабочая CRM3»
|
||||||
|
|||||||
@@ -0,0 +1,119 @@
|
|||||||
|
# crm3-26.rhana
|
||||||
|
|
||||||
|
Расширение РАНА для целевой конфигурации **crm3-26** (ИБ `crm3`, сервер `1c-srv.rhana.local`).
|
||||||
|
|
||||||
|
Текущая версия: см. [`VERSION`](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, защита учёта при получении |
|
||||||
|
| `ПартнерыИКонтрагентыЛокализация` | уникальность ИНН/КПП контрагентов |
|
||||||
|
| `РК_ОбщегоНазначения` / `РК_ОбщегоНазначенияВызовСервера` / `РК_ОбщегоНазначенияКлиентСервер` | инфраструктура РАНА (режим отладки и др.) |
|
||||||
|
| `ОбщегоНазначенияКлиентСервер` | доработки отборов динамических списков |
|
||||||
|
|
||||||
|
### Обработки и формы
|
||||||
|
|
||||||
|
| Объект | Назначение |
|
||||||
|
|--------|------------|
|
||||||
|
| `РК_ОбработкаПарнеровКонтрагентов` | работа с партнёрами и контрагентами |
|
||||||
|
| `РК_ФормаНастроекРана` | настройки расширения |
|
||||||
|
| `ЗагрузкаДанныхИзФайла` | доработки загрузки НСИ |
|
||||||
|
|
||||||
|
### Подсистемы
|
||||||
|
|
||||||
|
- `РК_РАНА` — общие доработки РАНА
|
||||||
|
- `РК_РАНА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,4 +1,4 @@
|
|||||||
#Область СлужебныйПрограммныйИнтерфейс
|
#Область СлужебныйПрограммныйИнтерфейс
|
||||||
#Область ПКПД
|
#Область ПКПД
|
||||||
// &После ЗаполнитьПравилаКонвертацииПредопределенныхДанных.
|
// &После ЗаполнитьПравилаКонвертацииПредопределенныхДанных.
|
||||||
// Дополняет правило ПКПД «Перечисление_СтавкиНДС» значениями НДС22 и НДС22_122
|
// Дополняет правило ПКПД «Перечисление_СтавкиНДС» значениями НДС22 и НДС22_122
|
||||||
@@ -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 = 'создать серию номенклатуры'"), УровеньЖурналаРегистрации.Предупреждение);
|
НСтр("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="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 = 'Не указан ИНН'"),
|
||||||
|
КлючДанных,
|
||||||
|
"ИНН",
|
||||||
|
,
|
||||||
|
Отказ);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
//-- Локализация
|
||||||
|
КонецПроцедуры
|
||||||
@@ -9,6 +9,8 @@
|
|||||||
<Metadata name="CommonForm.РК_ФормаНастроекРана.Form" id="5688e1b9-1552-45cc-b539-1f4cc3765e8a.0" configVersion="ea9a4ab0f585a6af14dc4941cc5fd2e48f221b6a"/>
|
<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.МенеджерОбменаЧерезУниверсальныйФормат" id="46adff34-2644-4eb3-99a7-e969dbdf8496" configVersion="0e38e0f4d63c0c4783d0c8935de492efee1e4863"/>
|
||||||
<Metadata name="CommonModule.МенеджерОбменаЧерезУниверсальныйФормат.Module" id="46adff34-2644-4eb3-99a7-e969dbdf8496.0" configVersion="89e8efb209d7477a14ca8b50b3aa0065918e53b7"/>
|
<Metadata name="CommonModule.МенеджерОбменаЧерезУниверсальныйФормат.Module" id="46adff34-2644-4eb3-99a7-e969dbdf8496.0" configVersion="89e8efb209d7477a14ca8b50b3aa0065918e53b7"/>
|
||||||
|
<Metadata name="CommonModule.ПартнерыИКонтрагентыЛокализация" id="204641bf-09d1-470a-9d72-3eb46439556d" configVersion="4d92732dfb20d7aac1e4e8e85d854a56b78cb8ae"/>
|
||||||
|
<Metadata name="CommonModule.ПартнерыИКонтрагентыЛокализация.Module" id="204641bf-09d1-470a-9d72-3eb46439556d.0" configVersion="126cf53fde7bdeb39ba2495d14b179dc815a8331"/>
|
||||||
<Metadata name="CommonModule.ОбщегоНазначенияКлиентСервер" id="1afe1653-696f-47e3-9bea-df7b84bd077c" configVersion="a3b2d57b152d8cd275a412ddf1479ac90b35402d"/>
|
<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="74e1779aaae2e2e61a3957d284da0d61b1e34d41"/>
|
||||||
<Metadata name="CommonModule.РК_ОбщегоНазначения" id="6bfc7b15-6995-43ad-96c6-a97569f2d5a4" configVersion="c11a335f853a42165758cfe7995f2ee06a9010f7"/>
|
<Metadata name="CommonModule.РК_ОбщегоНазначения" id="6bfc7b15-6995-43ad-96c6-a97569f2d5a4" configVersion="c11a335f853a42165758cfe7995f2ee06a9010f7"/>
|
||||||
|
|||||||
@@ -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">
|
<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">
|
<Configuration uuid="ef31d55b-3788-4972-affb-b7aefd3838aa">
|
||||||
<InternalInfo>
|
<InternalInfo>
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
|
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
|
||||||
</DefaultRoles>
|
</DefaultRoles>
|
||||||
<Vendor/>
|
<Vendor/>
|
||||||
<Version>1.3.0.38</Version>
|
<Version>1.3.0.46</Version>
|
||||||
<DefaultStyle/>
|
<DefaultStyle/>
|
||||||
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||||
<BriefInformation/>
|
<BriefInformation/>
|
||||||
@@ -97,6 +97,7 @@
|
|||||||
<CommonModule>РК_ОбщегоНазначенияВызовСервера</CommonModule>
|
<CommonModule>РК_ОбщегоНазначенияВызовСервера</CommonModule>
|
||||||
<CommonModule>ОбщегоНазначенияКлиентСервер</CommonModule>
|
<CommonModule>ОбщегоНазначенияКлиентСервер</CommonModule>
|
||||||
<CommonModule>МенеджерОбменаЧерезУниверсальныйФормат</CommonModule>
|
<CommonModule>МенеджерОбменаЧерезУниверсальныйФормат</CommonModule>
|
||||||
|
<CommonModule>ПартнерыИКонтрагентыЛокализация</CommonModule>
|
||||||
<XDTOPackage>EnterpriseData_1_8_7</XDTOPackage>
|
<XDTOPackage>EnterpriseData_1_8_7</XDTOPackage>
|
||||||
<XDTOPackage>EnterpriseData_1_8_6</XDTOPackage>
|
<XDTOPackage>EnterpriseData_1_8_6</XDTOPackage>
|
||||||
<FunctionalOption>РК_ФункциональнаяОпцияРежимаОтладки</FunctionalOption>
|
<FunctionalOption>РК_ФункциональнаяОпцияРежимаОтладки</FunctionalOption>
|
||||||
|
|||||||
Reference in New Issue
Block a user