Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0ebd01d0ba | |||
| 997b7fe110 | |||
| a83f23d16c | |||
| eb097a8078 | |||
| 8a1624a47a | |||
| 2dfa49b2cf | |||
| 6a61479ba2 | |||
| 7a313f254c | |||
| 45b7af871a |
+101
@@ -4,6 +4,107 @@
|
||||
|
||||
---
|
||||
|
||||
## 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)
|
||||
|
||||
### Обмен — фильтр узла «Рабочая 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
|
||||
@@ -329,6 +329,85 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Подбор существующей серии в целевой ИБ по владельцу вида номенклатуры.
|
||||
// Приоритет:
|
||||
// 1) Вид + Номер + СрокГодности (если номер и срок заполнены)
|
||||
// 2) Вид + Номер (если номер заполнен)
|
||||
// 3) Вид + СрокГодности (если номер пустой и срок заполнен)
|
||||
//
|
||||
// Параметры:
|
||||
// ВладелецСерий - СправочникСсылка.ВидыНоменклатуры
|
||||
// НомерСерии - Строка
|
||||
// СрокГодности - Дата, Неопределено
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// СправочникСсылка.СерииНоменклатуры, Неопределено
|
||||
//
|
||||
Функция РК_НайтиСериюПоВладельцуНомерСроку(ВладелецСерий, НомерСерии, СрокГодности)
|
||||
|
||||
Если Не ЗначениеЗаполнено(ВладелецСерий) Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
НомерСерии = СокрЛП(Строка(НомерСерии));
|
||||
СрокЗаполнен = ЗначениеЗаполнено(СрокГодности) И СрокГодности <> '00010101';
|
||||
|
||||
Если Не ПустаяСтрока(НомерСерии) Тогда
|
||||
Запрос = Новый Запрос;
|
||||
Если СрокЗаполнен Тогда
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||||
| Серии.Ссылка КАК Ссылка
|
||||
|ИЗ
|
||||
| Справочник.СерииНоменклатуры КАК Серии
|
||||
|ГДЕ
|
||||
| Серии.ВидНоменклатуры = &Владелец
|
||||
| И НЕ Серии.ПометкаУдаления
|
||||
| И Серии.Номер = &Номер
|
||||
| И Серии.ГоденДо = &Срок";
|
||||
Запрос.УстановитьПараметр("Срок", СрокГодности);
|
||||
Иначе
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||||
| Серии.Ссылка КАК Ссылка
|
||||
|ИЗ
|
||||
| Справочник.СерииНоменклатуры КАК Серии
|
||||
|ГДЕ
|
||||
| Серии.ВидНоменклатуры = &Владелец
|
||||
| И НЕ Серии.ПометкаУдаления
|
||||
| И Серии.Номер = &Номер";
|
||||
КонецЕсли;
|
||||
Запрос.УстановитьПараметр("Владелец", ВладелецСерий);
|
||||
Запрос.УстановитьПараметр("Номер", НомерСерии);
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
Если Выборка.Следующий() Тогда
|
||||
Возврат Выборка.Ссылка;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Если СрокЗаполнен Тогда
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||||
| Серии.Ссылка КАК Ссылка
|
||||
|ИЗ
|
||||
| Справочник.СерииНоменклатуры КАК Серии
|
||||
|ГДЕ
|
||||
| Серии.ВидНоменклатуры = &Владелец
|
||||
| И НЕ Серии.ПометкаУдаления
|
||||
| И Серии.ГоденДо = &Срок";
|
||||
Запрос.УстановитьПараметр("Владелец", ВладелецСерий);
|
||||
Запрос.УстановитьПараметр("Срок", СрокГодности);
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
Если Выборка.Следующий() Тогда
|
||||
Возврат Выборка.Ссылка;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Неопределено;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// &После ДобавитьПКО_Справочник_СерииНоменклатуры.
|
||||
// Подключает обработчик проверки владельца серии при получении из пакета обмена.
|
||||
//
|
||||
@@ -377,6 +456,8 @@
|
||||
КонецЕсли;
|
||||
|
||||
СсылкаДляЖурнала = ?(ДанныеИБ = Неопределено, ПолученныеДанные.ПолучитьСсылкуНового(), ДанныеИБ.Ссылка);
|
||||
НомерСерии = СокрЛП(Строка(ПолученныеДанные.Номер));
|
||||
СрокГодности = ПолученныеДанные.ГоденДо;
|
||||
|
||||
Если ДанныеИБ <> Неопределено Тогда
|
||||
|
||||
@@ -406,33 +487,16 @@
|
||||
Иначе
|
||||
|
||||
ПолученныеДанные.ВидНоменклатуры = КорректныйВладелец;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||||
| Серии.Ссылка КАК Ссылка
|
||||
|ИЗ
|
||||
| Справочник.СерииНоменклатуры КАК Серии
|
||||
|ГДЕ
|
||||
| Серии.ВидНоменклатуры = &Владелец
|
||||
| И НЕ Серии.ПометкаУдаления
|
||||
| И (Серии.Наименование = &Наименование
|
||||
| ИЛИ Серии.Номер = &Номер
|
||||
| И &НомерЗаполнен)";
|
||||
Запрос.УстановитьПараметр("Владелец", КорректныйВладелец);
|
||||
Запрос.УстановитьПараметр("Наименование", ПолученныеДанные.Наименование);
|
||||
Запрос.УстановитьПараметр("Номер", ПолученныеДанные.Номер);
|
||||
Запрос.УстановитьПараметр("НомерЗаполнен", ЗначениеЗаполнено(ПолученныеДанные.Номер));
|
||||
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
Если Выборка.Следующий()
|
||||
И Выборка.Ссылка <> СсылкаДляЖурнала Тогда
|
||||
СуществующаяСерия = РК_НайтиСериюПоВладельцуНомерСроку(КорректныйВладелец, НомерСерии, СрокГодности);
|
||||
Если ЗначениеЗаполнено(СуществующаяСерия)
|
||||
И СуществующаяСерия <> СсылкаДляЖурнала Тогда
|
||||
|
||||
ТекстОшибки = СтрШаблон(
|
||||
"Серия с наименованием ""%1"" уже существует у владельца %2 (%3), GUID отличается от пакета.",
|
||||
ПолученныеДанные.Наименование,
|
||||
"Серия уже существует у владельца %1 (%2), GUID отличается от пакета. Номер=""%3"", годен до=""%4"".",
|
||||
КорректныйВладелец,
|
||||
Выборка.Ссылка);
|
||||
СуществующаяСерия,
|
||||
НомерСерии,
|
||||
?(ЗначениеЗаполнено(СрокГодности), Формат(СрокГодности, "ДФ=yyyy-MM-dd"), ""));
|
||||
ЗаписатьОшибкуВЖурналРегистрации(СсылкаДляЖурнала, ТекстОшибки, КомпонентыОбмена,
|
||||
НСтр("ru = 'создать серию номенклатуры'"), УровеньЖурналаРегистрации.Предупреждение);
|
||||
ПолученныеДанные = Неопределено;
|
||||
@@ -443,4 +507,468 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// --- Объекты расчётов (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: ED 1.8 не передаёт ВидЦены / ВидЦеныПоставщика в строках ТЧ (XDTO не меняем).
|
||||
// После типовой отложенной обработки дозаполняем вид цены из соглашения
|
||||
// без пересчёта Цена/Сумма (ПоляЗаполнения только вид цены).
|
||||
//
|
||||
&После("ВыполнитьПроцедуруМодуляМенеджера")
|
||||
Процедура РК_ВыполнитьПроцедуруМодуляМенеджера_ДозаполнитьВидЦены(ИмяПроцедуры, Параметры)
|
||||
|
||||
Если Не СтрНачинаетсяС(ИмяПроцедуры, "ОтложеннаяОбработка_") Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если Параметры = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Объект = Неопределено;
|
||||
Если Не Параметры.Свойство("Объект", Объект) Или Объект = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
КомпонентыОбмена = Неопределено;
|
||||
Параметры.Свойство("КомпонентыОбмена", КомпонентыОбмена);
|
||||
|
||||
Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
РК_ДозаполнитьВидЦеныВДокументе(Объект);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Обходит все ТЧ документа; для реквизитов ВидЦены и ВидЦеныПоставщика вызывает дозаполнение.
|
||||
//
|
||||
// Параметры:
|
||||
// Объект - ДокументОбъект - загружаемый документ после отложенной обработки обмена.
|
||||
//
|
||||
Процедура РК_ДозаполнитьВидЦеныВДокументе(Объект) Экспорт
|
||||
|
||||
Если Объект = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
МетаОбъекта = Объект.Метаданные();
|
||||
|
||||
Для Каждого МетаТЧ Из МетаОбъекта.ТабличныеЧасти Цикл
|
||||
|
||||
Если МетаТЧ.Реквизиты.Найти("ВидЦены") <> Неопределено Тогда
|
||||
РК_ДозаполнитьВидЦеныВТабличнойЧасти(Объект, МетаТЧ.Имя, "ВидЦены");
|
||||
КонецЕсли;
|
||||
|
||||
Если МетаТЧ.Реквизиты.Найти("ВидЦеныПоставщика") <> Неопределено Тогда
|
||||
РК_ДозаполнитьВидЦеныВТабличнойЧасти(Объект, МетаТЧ.Имя, "ВидЦеныПоставщика");
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Дозаполняет пустой вид цены в одной табличной части, если есть строки без значения.
|
||||
//
|
||||
Процедура РК_ДозаполнитьВидЦеныВТабличнойЧасти(Объект, ИмяТЧ, ИмяПоляВидЦены)
|
||||
|
||||
ТабличнаяЧасть = Объект[ИмяТЧ];
|
||||
Если ТабличнаяЧасть.Количество() = 0 Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
НужноЗаполнить = Ложь;
|
||||
Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл
|
||||
Если Не ЗначениеЗаполнено(СтрокаТЧ[ИмяПоляВидЦены]) Тогда
|
||||
НужноЗаполнить = Истина;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Если Не НужноЗаполнить Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ИмяПоляВидЦены = "ВидЦены" Тогда
|
||||
РК_ЗаполнитьВидЦеныПродажиВТЧ(Объект, ТабличнаяЧасть);
|
||||
ИначеЕсли ИмяПоляВидЦены = "ВидЦеныПоставщика" Тогда
|
||||
РК_ЗаполнитьВидЦеныПоставщикаВТЧ(Объект, ТабличнаяЧасть);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура РК_ЗаполнитьВидЦеныПродажиВТЧ(Объект, ТабличнаяЧасть)
|
||||
|
||||
МетаОбъекта = Объект.Метаданные();
|
||||
Если МетаОбъекта.Реквизиты.Найти("Соглашение") = Неопределено
|
||||
Или Не ЗначениеЗаполнено(Объект.Соглашение) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыЗаполнения = Новый Структура;
|
||||
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "ВидЦены");
|
||||
РК_ДополнитьБазовыеПараметрыЗаполненияЦен(Объект, ПараметрыЗаполнения, Истина);
|
||||
|
||||
Попытка
|
||||
ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
|
||||
ТабличнаяЧасть,, ПараметрыЗаполнения, Новый Структура);
|
||||
Исключение
|
||||
// Не блокируем загрузку пакета из-за вида цены.
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура РК_ЗаполнитьВидЦеныПоставщикаВТЧ(Объект, ТабличнаяЧасть)
|
||||
|
||||
МетаОбъекта = Объект.Метаданные();
|
||||
Если МетаОбъекта.Реквизиты.Найти("Соглашение") = Неопределено
|
||||
Или Не ЗначениеЗаполнено(Объект.Соглашение) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыЗаполнения = ЦеныПартнеровЗаполнениеСервер.НовыйПараметрыЗаполненияЗаполнитьЦены();
|
||||
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "ВидЦеныПоставщика");
|
||||
РК_ДополнитьБазовыеПараметрыЗаполненияЦен(Объект, ПараметрыЗаполнения, Ложь);
|
||||
|
||||
Попытка
|
||||
ЦеныПартнеровЗаполнениеСервер.ЗаполнитьЦены(
|
||||
ТабличнаяЧасть, Неопределено, ПараметрыЗаполнения, Новый Структура);
|
||||
Исключение
|
||||
// Не блокируем загрузку пакета из-за вида цены.
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Общие параметры для ЦеныПредприятияЗаполнениеСервер / ЦеныПартнеровЗаполнениеСервер.
|
||||
//
|
||||
Процедура РК_ДополнитьБазовыеПараметрыЗаполненияЦен(Объект, ПараметрыЗаполнения, ЭтоПродажа)
|
||||
|
||||
МетаОбъекта = Объект.Метаданные();
|
||||
|
||||
Если МетаОбъекта.Реквизиты.Найти("Дата") <> Неопределено Тогда
|
||||
ПараметрыЗаполнения.Вставить("Дата", Объект.Дата);
|
||||
КонецЕсли;
|
||||
Если МетаОбъекта.Реквизиты.Найти("Организация") <> Неопределено Тогда
|
||||
ПараметрыЗаполнения.Вставить("Организация", Объект.Организация);
|
||||
КонецЕсли;
|
||||
Если МетаОбъекта.Реквизиты.Найти("Валюта") <> Неопределено Тогда
|
||||
ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта);
|
||||
КонецЕсли;
|
||||
Если МетаОбъекта.Реквизиты.Найти("Соглашение") <> Неопределено Тогда
|
||||
ПараметрыЗаполнения.Вставить("Соглашение", Объект.Соглашение);
|
||||
КонецЕсли;
|
||||
Если МетаОбъекта.Реквизиты.Найти("НалогообложениеНДС") <> Неопределено Тогда
|
||||
ПараметрыЗаполнения.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЭтоПродажа Тогда
|
||||
Если МетаОбъекта.Реквизиты.Найти("ВернутьМногооборотнуюТару") <> Неопределено Тогда
|
||||
ПараметрыЗаполнения.Вставить("ВозвращатьМногооборотнуюТару", Объект.ВернутьМногооборотнуюТару);
|
||||
КонецЕсли;
|
||||
ПараметрыЗаполнения.Вставить("РассчитыватьНаборы", Истина);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
@@ -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="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.ПартнерыИКонтрагентыЛокализация" 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.ОбщегоНазначенияКлиентСервер.Module" id="1afe1653-696f-47e3-9bea-df7b84bd077c.0" configVersion="74e1779aaae2e2e61a3957d284da0d61b1e34d41"/>
|
||||
<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">
|
||||
<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.0.44</Version>
|
||||
<DefaultStyle/>
|
||||
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||
<BriefInformation/>
|
||||
@@ -97,6 +97,7 @@
|
||||
<CommonModule>РК_ОбщегоНазначенияВызовСервера</CommonModule>
|
||||
<CommonModule>ОбщегоНазначенияКлиентСервер</CommonModule>
|
||||
<CommonModule>МенеджерОбменаЧерезУниверсальныйФормат</CommonModule>
|
||||
<CommonModule>ПартнерыИКонтрагентыЛокализация</CommonModule>
|
||||
<XDTOPackage>EnterpriseData_1_8_7</XDTOPackage>
|
||||
<XDTOPackage>EnterpriseData_1_8_6</XDTOPackage>
|
||||
<FunctionalOption>РК_ФункциональнаяОпцияРежимаОтладки</FunctionalOption>
|
||||
|
||||
Reference in New Issue
Block a user