6 Commits

Author SHA1 Message Date
mk 6b3696417e Документация: CHANGELOG для обмена crm3-dev→crm3-26 (1.3.0.36–1.3.0.38).
Версия расширения не изменена.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-06 15:49:07 +03:00
mk 93ef9e904f VERSION: синхронизация с Configuration.xml (1.3.0.38).
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-06 12:43:36 +03:00
mk e00eab1028 Обмен crm3-dev→crm3-26: фильтр узла для доработок получения (1.3.0.38).
Защита учёта номенклатуры, складов и серий применяется только к узлу «Рабочая CRM3».

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-06 12:16:16 +03:00
mk e6082bbcf9 Обмен crm3-dev→crm3-26: номенклатура, склады, серии, НДС22 (1.3.0.37).
Защита учётных реквизитов номенклатуры, пропуск обновления видов и складов,
нормализация серий, ПКПД НДС22/НДС22_122.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-06 10:49:22 +03:00
mk 15d8020064 Git: LF для выгрузок 1С (.gitattributes, .editorconfig, renormalize).
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 13:04:10 +03:00
mk 3eb3c023e1 Синхронизация: защита учёта номенклатуры и складов при получении (1.3.0.36).
Сохраняем учётные реквизиты номенклатуры целевой ИБ при обновлении из crm3-dev;
существующие склады не перезаписываются данными из пакета обмена.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 16:35:35 +03:00
67 changed files with 592 additions and 84 deletions
+19
View File
@@ -0,0 +1,19 @@
# Единые правила редактора для репозиториев выгрузки 1С.
# Согласовано с tools/git_1c/.gitattributes (LF в репозитории).
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{bsl,os}]
indent_style = tab
[*.xml]
indent_style = tab
[VERSION]
insert_final_newline = true
+13 -10
View File
@@ -1,31 +1,34 @@
# €¢â®®¯à¥¤¥«¥­¨¥ ¤«ï ⥪á⮢ëå ä ©«®¢
# Единые правила для репозиториев выгрузки 1С (Configurator / EDT).
# Канонический формат в git: UTF-8, LF. См. tools/git_1c/README.md
* text=auto
# ” ©«ë 1‘ - ¢á¥£¤  LF ¤«ï ᮢ¬¥á⨬®á⨠á Linux
# Текстовые файлы выгрузки 1С
*.bsl text eol=lf
*.os text eol=lf
*.xml text eol=lf
*.txt text eol=lf
*.md text eol=lf
*.json text eol=lf
*.xml text eol=lf
*.ini text eol=lf
*.conf text eol=lf
VERSION text eol=lf
# ¨­ à­ë¥ ä ©«ë 1‘ - ­¥ âண âì
# Бинарные артефакты 1С
*.cf binary
*.cfe binary
*.epf binary
*.erf binary
*.ef binary
*.bin binary
*.cf.binary binary
*.mxl binary
# ” ©«ë á¯à ¢ª¨ 1‘ - ¡¨­ à­ë¥
# Справка и графика
*.html binary
*.htm binary
# ƒà ä¨ç¥áª¨¥ ä ©«ë - ¡¨­ à­ë¥
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
# ” ©«ë ä®à¬ ¨ ¬ ª¥â®¢ 1‘
*.bin binary
+78
View File
@@ -0,0 +1,78 @@
# История изменений crm3-26.rhana
Формат версии: `1.3.0.NNN` (синхронизируется с `VERSION` и `Configuration.xml`).
---
## 1.3.0.38 (2026-07-06)
### Обмен — фильтр узла «Рабочая CRM3»
Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`.
| Функция | Назначение |
|---------|------------|
| `РК_УзелCrm3Dev_GUID()` | GUID узла исходной ИБ в целевой (`97cd20ee-bb06-11f0-8dac-0cc47a7d055f`) |
| `РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена)` | Истина только для обмена crm3-dev ↔ crm3-26 |
**Поведение:** доработки получения (защита учёта номенклатуры, пропуск обновления видов и складов, нормализация серий) применяются **только** к узлу **«Рабочая CRM3»**. Обмен с **Бухгалтерией** не затрагивается.
---
## 1.3.0.37 (2026-07-06)
### Обмен crm3-dev → crm3-26 — приём данных
Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`.
#### Номенклатура
| Обработчик | Изменение |
|------------|-----------|
| `&Перед` / `&После` `ПКО_Справочник_Номенклатура_Получение_ПередЗаписьюПолученныхДанных` | для существующей номенклатуры — снимок и восстановление учётных реквизитов целевой ИБ; для новой — заполнение по виду целевой ИБ |
| `&После` `ОтложеннаяОбработка_ЗаполнитьНоменклатуру` | повторное восстановление учёта после типовой отложенной обработки |
Защищаемые реквизиты: `ВидНоменклатуры`, `ОсобенностьУчета`, `ТипНоменклатуры`, `ИспользованиеХарактеристик`, `ВладелецСерий`, `ВладелецХарактеристик`, `ГруппаФинансовогоУчета`, `СкладскаяГруппа`.
#### Виды номенклатуры и склады
| Обработчик | Изменение |
|------------|-----------|
| `&ИзменениеИКонтроль` `ПКО_Справочник_ВидыНоменклатуры_ПередЗаписьюПолученныхДанных` | существующие виды не обновляются (сопоставление по GUID сохраняется) |
| `&ИзменениеИКонтроль` `ПКО_Справочник_Склады_Получение_ПередЗаписьюПолученныхДанных` | существующие склады не перезаписываются |
#### Серии номенклатуры
| Обработчик | Изменение |
|------------|-----------|
| `&После` `ДобавитьПКО_Справочник_СерииНоменклатуры` | подключение `РК_ПКО_Справочник_СерииНоменклатуры_ПередЗаписьюПолученныхДанных` |
| `РК_ПКО_Справочник_СерииНоменклатуры_ПередЗаписьюПолученныхДанных` | нормализация владельца серии по настройкам вида в целевой ИБ; пропуск при конфликте |
#### Ставки НДС 22%
| Обработчик | Изменение |
|------------|-----------|
| `&После` `ЗаполнитьПравилаКонвертацииПредопределенныхДанных` | ПКПД `Перечисление_СтавкиНДС`: значения `НДС22`, `НДС22_122` |
**Контекст:** политика защиты учётных настроек целевой ИБ при синхронизации с crm3-dev. Подробнее: `docs/transfer/Анализ_синхронизации_crm3-dev_crm3-26.md` в монорепозитории crm3-26.
---
## 1.3.0.36 (2026-07-01)
### Синхронизация — первичная защита учёта при получении
Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`.
- Сохранение учётных реквизитов номенклатуры целевой ИБ при обновлении из crm3-dev.
- Существующие склады не перезаписываются данными из пакета обмена.
*Доработка развита в 1.3.0.37 (виды, серии, отложенная обработка, НДС22) и ограничена узлом CRM3 в 1.3.0.38.*
---
## Связанные объекты расширения (обмен)
| Модуль | Роль |
|--------|------|
| `МенеджерОбменаЧерезУниверсальныйФормат` | защита учёта при получении, фильтр узла, ПКПД НДС22 |
+1 -1
View File
@@ -1 +1 @@
1.3.0.35
1.3.0.38
@@ -1,10 +1,13 @@
#Область СлужебныйПрограммныйИнтерфейс
#Область ПКПД
// Заполняет таблицу правил конвертации предопределенных данных.
// &После ЗаполнитьПравилаКонвертацииПредопределенныхДанных.
// Дополняет правило ПКПД «Перечисление_СтавкиНДС» значениями НДС22 и НДС22_122
// для обмена crm3-dev → crm3-26 (EnterpriseData 1.8+).
//
// Параметры:
// НаправлениеОбмена - Строка - "Отправка" либо "Получение".
// ПравилаКонвертации - ТаблицаЗначений - таблица значений, в которую будут добавлены правила.
// ПравилаКонвертации - ТаблицаЗначений - таблица правил конвертации предопределённых данных.
//
&После("ЗаполнитьПравилаКонвертацииПредопределенныхДанных")
Процедура РК_ЗаполнитьПравилаКонвертацииПредопределенныхДанных(НаправлениеОбмена, ПравилаКонвертации)
ПоискПравилКонвертации = ПравилаКонвертации.НайтиСтроки(
@@ -36,3 +39,408 @@
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область Синхронизация_crm3_dev_crm3_26
// Ограничения обмена номенклатурой и видами номенклатуры (crm3-dev → crm3-26).
// Существующие элементы: не перезаписывать складской/финансовый учёт из источника.
// Новые элементы: применить настройки учёта вида номенклатуры целевой ИБ.
// См. docs/transfer/Анализ_синхронизации_crm3-dev_crm3-26.md, §3.2.
// Доработки применяются только к узлу «Рабочая CRM3» (исходная ИБ), не к Бухгалтерии.
// GUID узла плана обмена «Рабочая CRM3» в целевой ИБ (crm3).
//
// Возвращаемое значение:
// Строка - GUID узла корреспондента в нижнем регистре.
//
Функция РК_УзелCrm3Dev_GUID()
Возврат "97cd20ee-bb06-11f0-8dac-0cc47a7d055f";
КонецФункции
// Истина, если текущая сессия обмена — с исходной CRM (crm3_placentapharm), а не с Бухгалтерией.
//
// Параметры:
// КомпонентыОбмена - Структура - контекст текущей сессии обмена.
//
// Возвращаемое значение:
// Булево - Истина для обмена crm3-dev ↔ crm3-26.
//
Функция РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена)
Если КомпонентыОбмена = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Узел = Неопределено;
Если КомпонентыОбмена.Свойство("УзелКорреспондента") Тогда
Узел = КомпонентыОбмена.УзелКорреспондента;
ИначеЕсли КомпонентыОбмена.Свойство("УзелОбмена") Тогда
Узел = КомпонентыОбмена.УзелОбмена;
КонецЕсли;
Если Не ЗначениеЗаполнено(Узел) Тогда
Возврат Ложь;
КонецЕсли;
Возврат НРег(XMLСтрока(Узел.УникальныйИдентификатор())) = РК_УзелCrm3Dev_GUID();
КонецФункции
// Возвращает список реквизитов номенклатуры, подлежащих защите от перезаписи при обмене.
//
// Возвращаемое значение:
// Строка - имена реквизитов через запятую для конструктора Структура.
//
Функция РК_УчетныеРеквизитыНоменклатурыДляЗащиты()
Возврат "ВидНоменклатуры, ОсобенностьУчета, ТипНоменклатуры, ИспользованиеХарактеристик,"
+ "ВладелецСерий, ВладелецХарактеристик, ГруппаФинансовогоУчета, СкладскаяГруппа";
КонецФункции
// Создаёт в параметрах конвертации соответствие для хранения снимков учётных реквизитов номенклатуры.
//
// Параметры:
// КомпонентыОбмена - Структура - контекст текущей сессии обмена (ПараметрыКонвертации).
//
Процедура РК_ИнициализироватьСнимкиУчетаНоменклатуры(КомпонентыОбмена)
Если Не КомпонентыОбмена.ПараметрыКонвертации.Свойство("РК_СнимкиУчетаНоменклатуры") Тогда
КомпонентыОбмена.ПараметрыКонвертации.Вставить("РК_СнимкиУчетаНоменклатуры", Новый Соответствие);
КонецЕсли;
КонецПроцедуры
// Сохраняет снимок учётных реквизитов номенклатуры для последующего восстановления
// после типовой обработки и отложенного заполнения.
//
// Параметры:
// СсылкаНоменклатуры - СправочникСсылка.Номенклатура - элемент целевой ИБ.
// СнимокУчета - Структура - значения защищаемых реквизитов.
// КомпонентыОбмена - Структура - контекст текущей сессии обмена.
//
Процедура РК_СохранитьСнимокУчетаНоменклатуры(СсылкаНоменклатуры, СнимокУчета, КомпонентыОбмена)
РК_ИнициализироватьСнимкиУчетаНоменклатуры(КомпонентыОбмена);
КомпонентыОбмена.ПараметрыКонвертации.РК_СнимкиУчетаНоменклатуры.Вставить(СсылкаНоменклатуры, СнимокУчета);
КонецПроцедуры
// &Перед ПКО_Справочник_Номенклатура_Получение_ПередЗаписьюПолученныхДанных.
// Для существующей в целевой ИБ номенклатуры сохраняет снимок учётных реквизитов
// до выполнения типового обработчика получения.
//
// Параметры:
// ПолученныеДанные - СправочникОбъект.Номенклатура - данные из пакета обмена.
// ДанныеИБ - СправочникОбъект.Номенклатура - существующий объект целевой ИБ; Неопределено для нового.
// КонвертацияСвойств - ТаблицаЗначений - правила конвертации свойств ПКО.
// КомпонентыОбмена - Структура - контекст текущей сессии обмена.
//
&Перед("ПКО_Справочник_Номенклатура_Получение_ПередЗаписьюПолученныхДанных")
Процедура РК_ПКО_Справочник_Номенклатура_Получение_ПередЗаписью_СохранитьУчет(ПолученныеДанные, ДанныеИБ, КонвертацияСвойств, КомпонентыОбмена)
Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда
Возврат;
КонецЕсли;
Если ДанныеИБ = Неопределено Тогда
Возврат;
КонецЕсли;
СнимокУчета = Новый Структура(РК_УчетныеРеквизитыНоменклатурыДляЗащиты());
ЗаполнитьЗначенияСвойств(СнимокУчета, ДанныеИБ);
ПолученныеДанные.ДополнительныеСвойства.Вставить("РК_СнимокУчетаНоменклатуры", СнимокУчета);
РК_СохранитьСнимокУчетаНоменклатуры(ДанныеИБ.Ссылка, СнимокУчета, КомпонентыОбмена);
КонецПроцедуры
// &После ПКО_Справочник_Номенклатура_Получение_ПередЗаписьюПолученныхДанных.
// Для существующей номенклатуры восстанавливает учётные реквизиты целевой ИБ из снимка.
// Для новой номенклатуры заполняет складской и финансовый учёт по виду номенклатуры целевой ИБ.
//
// Параметры:
// ПолученныеДанные - СправочникОбъект.Номенклатура - данные из пакета обмена.
// ДанныеИБ - СправочникОбъект.Номенклатура - существующий объект целевой ИБ; Неопределено для нового.
// КонвертацияСвойств - ТаблицаЗначений - правила конвертации свойств ПКО.
// КомпонентыОбмена - Структура - контекст текущей сессии обмена.
//
&После("ПКО_Справочник_Номенклатура_Получение_ПередЗаписьюПолученныхДанных")
Процедура РК_ПКО_Справочник_Номенклатура_Получение_ПередЗаписью_УчетПослеБазы(ПолученныеДанные, ДанныеИБ, КонвертацияСвойств, КомпонентыОбмена)
Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда
Возврат;
КонецЕсли;
Если ДанныеИБ = Неопределено Тогда
// Новая номенклатура: настройки складского и финансового учёта — из вида целевой ИБ.
Если ЗначениеЗаполнено(ПолученныеДанные.ВидНоменклатуры) Тогда
Справочники.Номенклатура.ЗаполнитьРеквизитыПоВидуНоменклатуры(ПолученныеДанные);
КонецЕсли;
Возврат;
КонецЕсли;
Если Не ПолученныеДанные.ДополнительныеСвойства.Свойство("РК_СнимокУчетаНоменклатуры") Тогда
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ДанныеИБ, ПолученныеДанные.ДополнительныеСвойства.РК_СнимокУчетаНоменклатуры);
КонецПроцедуры
// &ИзменениеИКонтроль ПКО_Справочник_ВидыНоменклатуры_ПередЗаписьюПолученныхДанных.
// Пропускает обновление видов номенклатуры, уже существующих в целевой ИБ
// (сопоставление по GUID сохраняется, учётные настройки целевой ИБ не меняются).
//
// Параметры:
// ПолученныеДанные - СправочникОбъект.ВидыНоменклатуры - данные из пакета обмена.
// ДанныеИБ - СправочникОбъект.ВидыНоменклатуры - существующий объект целевой ИБ; Неопределено для нового.
// КонвертацияСвойств - ТаблицаЗначений - правила конвертации свойств ПКО.
// КомпонентыОбмена - Структура - контекст текущей сессии обмена.
//
&ИзменениеИКонтроль("ПКО_Справочник_ВидыНоменклатуры_ПередЗаписьюПолученныхДанных")
Процедура РК_ПКО_Справочник_ВидыНоменклатуры_ПередЗаписьюПолученныхДанных(ПолученныеДанные, ДанныеИБ, КонвертацияСвойств, КомпонентыОбмена)
#Вставка
Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда
Возврат;
КонецЕсли;
Если ДанныеИБ <> Неопределено Тогда
ПолученныеДанные = Неопределено;
Возврат;
КонецЕсли;
#КонецВставки
ДанныеДляЗаписиВИБ = ?(ДанныеИБ = Неопределено, ПолученныеДанные, ДанныеИБ);
Если НЕ ЗначениеЗаполнено(ДанныеДляЗаписиВИБ.ВариантОформленияПродажи) Тогда
ДанныеДляЗаписиВИБ.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДанныеДляЗаписиВИБ.ИспользованиеХарактеристик) Тогда
ДанныеДляЗаписиВИБ.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДанныеДляЗаписиВИБ.НастройкиКлючаЦенПоНоменклатуре) Тогда
ДанныеДляЗаписиВИБ.НастройкиКлючаЦенПоНоменклатуре = Перечисления.ВариантОтбораДляКлючаЦен.Использовать;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДанныеДляЗаписиВИБ.НастройкиКлючаЦенПоХарактеристике) Тогда
ДанныеДляЗаписиВИБ.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДанныеДляЗаписиВИБ.НастройкиКлючаЦенПоСерии) Тогда
ДанныеДляЗаписиВИБ.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДанныеДляЗаписиВИБ.НастройкиКлючаЦенПоУпаковке) Тогда
ДанныеДляЗаписиВИБ.НастройкиКлючаЦенПоУпаковке = Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать;
КонецЕсли;
Если Не ПолученныеДанные.ИспользоватьСерии = Истина Тогда
ПолученныеДанные.ИспользоватьСерии = ДанныеДляЗаписиВИБ.ИспользоватьСерии;
КонецЕсли;
КонецПроцедуры
// &ИзменениеИКонтроль ПКО_Справочник_Склады_Получение_ПередЗаписьюПолученныхДанных.
// Пропускает обновление складов, уже существующих в целевой ИБ
// (сопоставление по GUID сохраняется, реквизиты целевого склада не меняются).
//
// Параметры:
// ПолученныеДанные - СправочникОбъект.Склады - данные из пакета обмена.
// ДанныеИБ - СправочникОбъект.Склады - существующий объект целевой ИБ; Неопределено для нового.
// КонвертацияСвойств - ТаблицаЗначений - правила конвертации свойств ПКО.
// КомпонентыОбмена - Структура - контекст текущей сессии обмена.
//
&ИзменениеИКонтроль("ПКО_Справочник_Склады_Получение_ПередЗаписьюПолученныхДанных")
Процедура РК_ПКО_Справочник_Склады_Получение_ПередЗаписьюПолученныхДанных(ПолученныеДанные, ДанныеИБ, КонвертацияСвойств, КомпонентыОбмена)
#Вставка
Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда
Возврат;
КонецЕсли;
Если ДанныеИБ <> Неопределено Тогда
ПолученныеДанные = Неопределено;
Возврат;
КонецЕсли;
#КонецВставки
ЗагрузитьДополнительныеСведения(?(ДанныеИБ = Неопределено, ПолученныеДанные.ПолучитьСсылкуНового(), ДанныеИБ.Ссылка),
ПолученныеДанные.ДополнительныеСвойства, КомпонентыОбмена);
КонецПроцедуры
// &После ОтложеннаяОбработка_ЗаполнитьНоменклатуру.
// Восстанавливает учётные реквизиты номенклатуры из снимков после типовой отложенной обработки,
// которая перезаписывает ИспользованиеХарактеристик значением из вида номенклатуры.
//
// Параметры:
// КомпонентыОбмена - Структура - контекст текущей сессии обмена (ПараметрыКонвертации.РК_СнимкиУчетаНоменклатуры).
//
&После("ОтложеннаяОбработка_ЗаполнитьНоменклатуру")
Процедура РК_ОтложеннаяОбработка_ВосстановитьУчетНоменклатуры(КомпонентыОбмена)
Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда
Возврат;
КонецЕсли;
Если Не КомпонентыОбмена.ПараметрыКонвертации.Свойство("РК_СнимкиУчетаНоменклатуры") Тогда
Возврат;
КонецЕсли;
Снимки = КомпонентыОбмена.ПараметрыКонвертации.РК_СнимкиУчетаНоменклатуры;
Если Снимки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для Каждого КлючИЗначение Из Снимки Цикл
НоменклатураСсылка = КлючИЗначение.Ключ;
СнимокУчета = КлючИЗначение.Значение;
Если Не ОбщегоНазначения.СсылкаСуществует(НоменклатураСсылка) Тогда
Продолжить;
КонецЕсли;
НоменклатураОбъект = НоменклатураСсылка.ПолучитьОбъект();
ЗаполнитьЗначенияСвойств(НоменклатураОбъект, СнимокУчета);
НоменклатураОбъект.ОбменДанными.Загрузка = Истина;
Попытка
НоменклатураОбъект.Записать();
Исключение
ЗаписатьОшибкуВЖурналРегистрации(НоменклатураСсылка,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), КомпонентыОбмена);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
// Возвращает владельца серий для вида номенклатуры в целевой ИБ
// (с учётом НастройкиСерийБерутсяИзДругогоВидаНоменклатуры).
//
// Параметры:
// ВидНоменклатуры - СправочникСсылка.ВидыНоменклатуры - вид из пакета обмена или номенклатуры.
//
// Возвращаемое значение:
// СправочникСсылка.ВидыНоменклатуры - вид-владелец для справочника СерииНоменклатуры.
//
Функция РК_ВладелецСерийДляВидаНоменклатуры(ВидНоменклатуры)
Если Не ЗначениеЗаполнено(ВидНоменклатуры) Тогда
Возврат Справочники.ВидыНоменклатуры.ПустаяСсылка();
КонецЕсли;
НастройкиСерий = Справочники.ВидыНоменклатуры.НастройкиИспользованияСерий(ВидНоменклатуры);
ВладелецСерий = НастройкиСерий.ВладелецСерий;
Если Не ЗначениеЗаполнено(ВладелецСерий) Тогда
ВладелецСерий = ВидНоменклатуры;
КонецЕсли;
Возврат ВладелецСерий;
КонецФункции
// &После ДобавитьПКО_Справочник_СерииНоменклатуры.
// Подключает обработчик проверки владельца серии при получении из пакета обмена.
//
// Параметры:
// ПравилаКонвертации - ТаблицаЗначений - таблица правил конвертации объектов.
//
&После("ДобавитьПКО_Справочник_СерииНоменклатуры")
Процедура РК_ДобавитьПКО_Справочник_СерииНоменклатуры_УстановитьПередЗаписью(ПравилаКонвертации)
СтрокиПКО = ПравилаКонвертации.НайтиСтроки(Новый Структура("ИмяПКО", "Справочник_СерииНоменклатуры"));
Если СтрокиПКО.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СтрокиПКО[0].ПередЗаписьюПолученныхДанных = "РК_ПКО_Справочник_СерииНоменклатуры_ПередЗаписьюПолученныхДанных";
КонецПроцедуры
// ПКО Справочник_СерииНоменклатуры — ПередЗаписьюПолученныхДанных.
// Проверяет и нормализует привязку серии к виду-владельцу в целевой ИБ.
// При несовпадении владельца у сопоставленной по полям поиска серии — пропуск записи.
//
// Параметры:
// ПолученныеДанные - СправочникОбъект.СерииНоменклатуры - данные из пакета обмена.
// ДанныеИБ - СправочникОбъект.СерииНоменклатуры - существующий объект; Неопределено для нового.
// КонвертацияСвойств - ТаблицаЗначений - правила конвертации свойств ПКО.
// КомпонентыОбмена - Структура - контекст текущей сессии обмена.
//
Процедура РК_ПКО_Справочник_СерииНоменклатуры_ПередЗаписьюПолученныхДанных(ПолученныеДанные, ДанныеИБ, КонвертацияСвойств, КомпонентыОбмена)
Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда
Возврат;
КонецЕсли;
Если ПолученныеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПолученныеДанные.ВидНоменклатуры) Тогда
Возврат;
КонецЕсли;
КорректныйВладелец = РК_ВладелецСерийДляВидаНоменклатуры(ПолученныеДанные.ВидНоменклатуры);
Если Не ЗначениеЗаполнено(КорректныйВладелец) Тогда
Возврат;
КонецЕсли;
СсылкаДляЖурнала = ?(ДанныеИБ = Неопределено, ПолученныеДанные.ПолучитьСсылкуНового(), ДанныеИБ.Ссылка);
Если ДанныеИБ <> Неопределено Тогда
Если ЗначениеЗаполнено(ДанныеИБ.ВидНоменклатуры)
И ДанныеИБ.ВидНоменклатуры <> КорректныйВладелец
И ПолученныеДанные.ВидНоменклатуры <> ДанныеИБ.ВидНоменклатуры Тогда
ТекстОшибки = СтрШаблон(
"Неверная привязка серии по владельцу: в ИБ %1, из пакета (норм.) %2, наименование ""%3"", номер ""%4"".",
ДанныеИБ.ВидНоменклатуры,
КорректныйВладелец,
ПолученныеДанные.Наименование,
ПолученныеДанные.Номер);
ЗаписатьОшибкуВЖурналРегистрации(СсылкаДляЖурнала, ТекстОшибки, КомпонентыОбмена,
НСтр("ru = 'записать серию номенклатуры'"), УровеньЖурналаРегистрации.Предупреждение);
ПолученныеДанные = Неопределено;
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеИБ.ВидНоменклатуры) Тогда
ПолученныеДанные.ВидНоменклатуры = ДанныеИБ.ВидНоменклатуры;
Иначе
ПолученныеДанные.ВидНоменклатуры = КорректныйВладелец;
КонецЕсли;
Иначе
ПолученныеДанные.ВидНоменклатуры = КорректныйВладелец;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Серии.Ссылка КАК Ссылка
|ИЗ
| Справочник.СерииНоменклатуры КАК Серии
|ГДЕ
| Серии.ВидНоменклатуры = &Владелец
| И НЕ Серии.ПометкаУдаления
| И (Серии.Наименование = &Наименование
| ИЛИ Серии.Номер = &Номер
| И &НомерЗаполнен)";
Запрос.УстановитьПараметр("Владелец", КорректныйВладелец);
Запрос.УстановитьПараметр("Наименование", ПолученныеДанные.Наименование);
Запрос.УстановитьПараметр("Номер", ПолученныеДанные.Номер);
Запрос.УстановитьПараметр("НомерЗаполнен", ЗначениеЗаполнено(ПолученныеДанные.Номер));
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий()
И Выборка.Ссылка <> СсылкаДляЖурнала Тогда
ТекстОшибки = СтрШаблон(
"Серия с наименованием ""%1"" уже существует у владельца %2 (%3), GUID отличается от пакета.",
ПолученныеДанные.Наименование,
КорректныйВладелец,
Выборка.Ссылка);
ЗаписатьОшибкуВЖурналРегистрации(СсылкаДляЖурнала, ТекстОшибки, КомпонентыОбмена,
НСтр("ru = 'создать серию номенклатуры'"), УровеньЖурналаРегистрации.Предупреждение);
ПолученныеДанные = Неопределено;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
+3 -3
View File
@@ -7,8 +7,8 @@
<Metadata name="ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения" id="e8b79bd5-f8ca-47e3-bcfd-1d84a4a64ee2" configVersion="3cadb32ee44e159e252e947f116f05b8f99ae1c4"/>
<Metadata name="CommonForm.РК_ФормаНастроекРана" id="5688e1b9-1552-45cc-b539-1f4cc3765e8a" configVersion="8ac3163937f01f9604c7a57e9dc814b6d466b5ac"/>
<Metadata name="CommonForm.РК_ФормаНастроекРана.Form" id="5688e1b9-1552-45cc-b539-1f4cc3765e8a.0" configVersion="ea9a4ab0f585a6af14dc4941cc5fd2e48f221b6a"/>
<Metadata name="CommonModule.МенеджерОбменаЧерезУниверсальныйФормат" id="46adff34-2644-4eb3-99a7-e969dbdf8496" configVersion="07b90dd15d056182292ae6260cadd6aec5c3567b"/>
<Metadata name="CommonModule.МенеджерОбменаЧерезУниверсальныйФормат.Module" id="46adff34-2644-4eb3-99a7-e969dbdf8496.0" configVersion="edb6107ec1cdb48f26f4b589d8f53646b44e7351"/>
<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="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"/>
@@ -26,7 +26,7 @@
<Metadata name="CommonPicture.ПодписанЗашифрованСостояния" id="a0bd1007-a115-4d79-8160-d4f59cd57ffb" configVersion="08ed86b1653fc955004b703d7dce5d947956fdda"/>
<Metadata name="CommonPicture.СерииНоменклатурыКолонкаСтатусов" id="f2badc5e-4af7-4c05-be31-b4d5b7642ab5" configVersion="d070fbc999630568abec9d83770ed805666a24d9"/>
<Metadata name="CommonPicture.СтатусыУказанияСерий" id="cc5cab6d-e293-4890-a422-6e8cd2fb58bb" configVersion="17b11a4c6ec74254745177f7c136d38af0214bdf"/>
<Metadata name="Configuration.crm326RHANA" id="ef31d55b-3788-4972-affb-b7aefd3838aa" configVersion="1f13c87c612c4f51bf2f028c914b958f76b6121c"/>
<Metadata name="Configuration.crm326RHANA" id="ef31d55b-3788-4972-affb-b7aefd3838aa" configVersion="2910b5ccbb9d930f0716a494a2b44068db7db4d4"/>
<Metadata name="Configuration.crm326RHANA.CommandInterface" id="39a8728d-cfaf-46d0-959f-980e396b5018.a" configVersion="fdaec039eea90396e8275a4185f01ff2ce9f09af"/>
<Metadata name="Configuration.crm326RHANA.MainSectionCommandInterface" id="39a8728d-cfaf-46d0-959f-980e396b5018.9" configVersion="fdaec039eea90396e8275a4185f01ff2ce9f09af"/>
<Metadata name="Constant.РК_РежимОтладкиРана" id="32d682cc-7aeb-45c8-abc6-68fef7f36011" configVersion="a12fe879a2594e605228c43059bb3a72d30fa471"/>
+1 -1
View File
@@ -62,7 +62,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
</DefaultRoles>
<Vendor/>
<Version>1.3.0.35</Version>
<Version>1.3.0.38</Version>
<DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/>