export_docs v0.3.8: sync docs to docs (8 files)

mihailkudravcev
2026-07-29 12:40:48 +03:00
parent 98e13a729b
commit 1c06980659
63 changed files with 15 additions and 23718 deletions
+1 -1
@@ -4,5 +4,5 @@
<!-- export_docs:begin -->
## Документация (docs)
- [docs/index](docs/index)
- [docs__index](docs__index)
<!-- export_docs:end -->
+1 -1
@@ -2,6 +2,6 @@
<!-- export_docs:begin -->
### Документация (docs)
- [docs/index](docs/index)
- [docs__index](docs__index)
<!-- export_docs:end -->
-7
@@ -1,7 +0,0 @@
# Контекст проекта (перенаправление)
Документ перенесён и актуализирован:
**[docs/meta/PROJECT_STRUCTURE.md](meta/PROJECT_STRUCTURE.md)**
Используйте его как основной источник описания структуры репозитория, ИБ, каталогов данных и соглашений разработки.
-103
@@ -1,103 +0,0 @@
---
title: Конвертер Markdown в HTML
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-09
date_modified: 2025-12-09
show_metadata_block: true
show_index_link: true
---
# Конвертер Markdown в HTML
Скрипт `md_to_html.py` для конвертации Markdown файлов в HTML с красивым оформлением.
## Установка зависимостей
```bash
pip install markdown
```
## Использование
### Базовое использование
```bash
# Конвертировать все .md файлы в папку html/
python md_to_html.py
```
### Конвертация конкретных файлов
```bash
# Один файл
python md_to_html.py -f Анализ_ошибок.md
# Несколько файлов
python md_to_html.py -f file1.md file2.md file3.md
```
### Конвертация по паттерну
```bash
# Все файлы с "анализ" в названии
python md_to_html.py -p "*анализ*.md"
# Все файлы с "отчет" в названии
python md_to_html.py -p "*отчет*.md"
```
### Указание другой папки для вывода
```bash
# Сохранить в папку output
python md_to_html.py -o output
# Сохранить в папку docs/html
python md_to_html.py -o docs/html
```
### Указание другой рабочей директории
```bash
# Искать MD файлы в другой директории
python md_to_html.py -d /path/to/directory
```
## Параметры
- `-f, --files` - Конкретные файлы для конвертации (можно указать несколько)
- `-p, --pattern` - Паттерн для поиска файлов (например, "*анализ*.md")
- `-o, --output` - Папка для сохранения HTML файлов (по умолчанию: html)
- `-d, --directory` - Директория для поиска MD файлов (по умолчанию: текущая)
- `--no-toc` - Отключить автоматическое создание оглавления
- `-h, --help` - Показать справку
## Примеры
```bash
# Конвертировать все файлы
python md_to_html.py
# Конвертировать только файлы анализа
python md_to_html.py -p "*анализ*.md"
# Конвертировать конкретные файлы в папку docs
python md_to_html.py -f ФИНАЛЬНЫЙ_ОТЧЕТ_Анализ_регистров.md -o docs
# Конвертировать все файлы из подпапки
python md_to_html.py -d CRM3devLocal.Рана
```
## Особенности
- Автоматическое создание оглавления
- Подсветка синтаксиса кода
- Поддержка таблиц
- Красивое оформление с адаптивным дизайном
- Сохранение структуры исходных файлов
## Результат
Все HTML файлы сохраняются в папку `html/` (или указанную папку) с тем же именем, что и исходный MD файл, но с расширением `.html`.
-218
@@ -1,218 +0,0 @@
---
title: Техническое задание №2 - полный перенос новой логики УПД из crm3-26-promo в crm3-dev
version: 1.0
date_created: 2026-04-21
date_modified: 2026-04-21
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
description: Полный план переноса логики подготовки данных и печати УПД из crm3-26-promo в crm3-dev с учетом выделения доработок в отдельное расширение упд5б.
status: К согласованию
show_metadata_block: true
show_index_link: true
show_toc: true
---
# Техническое задание №2
## 1. Цель и основание
Цель: выполнить **полный перенос** актуальной логики формирования данных и печати УПД из `crm3-26-promo` в `crm3-dev` с выделением изменений в отдельное расширение `упд5б`, минимизируя изменения в основной конфигурации.
Основание: сравнительный анализ:
- `crm3-dev` (версия `3.0.22.28`, режим совместимости `Version8_3_16`);
- `crm3-26-promo` (версия `3.1.35.11`, режим совместимости `Version8_3_27`);
- текущего расширения `crm3-dev.rhana`.
## 2. Итоги полного анализа (as-is / to-be)
### 2.1. Что уже есть в `crm3-26-promo`
В `crm3-26-promo` реализован полный контур графы 5б:
- функция `СтрокаАвансовыеСчетаФактуры(...)` в `Documents/СчетФактураВыданный/Ext/ManagerModule.bsl`;
- расширенная `ПоместитьВременнуюТаблицуПлатежноРасчетныхДокументов(...)` с колонкой `СтрокаАвансовыеСчетаФактуры`;
- расширенный `ТекстЗапросаПолученияНомеровИДатПлатежноРасчетныхДокументов()` с данными `СчетФактураВыданныйАванс` и исправлений;
- вывод поля `ПредставлениеАвансовыеСчетаФактуры` в запросе шапки для печати;
- заполнение `ОбластьШапка.Параметры.АвансовыеСчетаФактуры` в `ПечатьОбщихФорм`.
### 2.2. Что есть в `crm3-dev`
В `crm3-dev` (база):
- базовые методы `ПоместитьВременнуюТаблицуПлатежноРасчетныхДокументов(...)` и `ТекстЗапросаПолученияНомеровИДатПлатежноРасчетныхДокументов()` присутствуют, но без контура 5б;
- в запросе шапки УПД отсутствует `ПредставлениеАвансовыеСчетаФактуры`.
В `crm3-dev.rhana`:
- в `DataProcessors/ПечатьОбщихФорм/Ext/ManagerModule.bsl` уже есть ветка выбора макета `1096` для периода 2026;
- подключен макет `ПФ_MXL_УниверсальныйПередаточныйДокумент1096_ru`;
- в `Documents/СчетФактураВыданный/Ext/ManagerModule.bsl` отсутствуют изменения по 5б (есть только доработки по строке 5а).
Критичное отличие по макетам:
- в `crm3-26-promo` для актуальной ветки УПД применяются `CommonTemplates`:
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026`,
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`,
в которых присутствует параметр `АвансовыеСчетаФактуры` (графа 5б);
- в `crm3-dev` и `crm3-dev.rhana` такие `CommonTemplates` отсутствуют.
## 3. Границы работ по ТЗ №2
### 3.1. Входит в объем
1. Полный перенос механизма подготовки данных 5б из `crm3-26-promo`.
2. Полный перенос логики вывода 5б в печатной форме УПД.
3. Унификация доработок в новом расширении `упд5б` (вынос из `crm3-dev.rhana` релевантных частей).
4. Анализ и устранение дублирования между `crm3-dev.rhana` и `упд5б`.
5. Подготовка правил, что остается в расширении, а что (при необходимости) меняется в базе `crm3-dev`.
### 3.2. Не входит в объем
1. Полный перенос всех несвязанных с УПД подсистем из `crm3-26-promo`.
2. Массовый рефакторинг документов вне контура СФ/УПД.
## 4. Детальный анализ изменений структуры данных
### 4.1. Обязательные поля и представления для миграции
Для полного переноса должны быть поддержаны:
- строка представления авансовых СФ: `СтрокаАвансовыеСчетаФактуры`;
- поле вывода в шапке печати: `ПредставлениеАвансовыеСчетаФактуры`;
- поля в таблице платежно-расчетных документов:
- `НомерСчетаФактурыНаАванс`,
- `ДатаСчетаФактурыНаАванс`,
- `НомерИсправленияСчетаФактурыНаАванс`,
- `ДатаИсправленияСчетаФактурыНаАванс`.
### 4.2. Временные таблицы и запросы
В контуре `СчетФактураВыданный` требуется перенос (или эквивалентное восстановление) цепочки:
1. подготовка данных платежно-расчетных документов;
2. формирование данных по `СчетФактураВыданныйАванс` и исправлениям;
3. объединение в итоговую ВТ для передачи в печать;
4. подстановка в `РезультатПоШапке` поля `ПредставлениеАвансовыеСчетаФактуры`.
### 4.3. Проверка наличия реквизитов документа
В `crm3-26-promo` используется реквизит документа `СтрокаАвансовыеСчетаФактуры` в ряде сценариев формы/объекта.
Для `crm3-dev` обязательна проверка:
1. если реквизит уже существует в базе - использовать его;
2. если реквизита нет:
- вариант А (предпочтительный): вычислять строку на лету в расширении и передавать через ВТ/запрос шапки;
- вариант Б (если требуется функциональная паритетность формы документа): добавить реквизит в объект (через расширение, если позволяет совместимость), либо точечно в базу.
## 5. Целевая архитектура переноса
### 5.1. Новое расширение `упд5б` (основной контур)
В `упд5б` концентрируются:
1. все изменения `Documents/СчетФактураВыданный/Ext/ManagerModule.bsl` по данным 5б;
2. все изменения `DataProcessors/ПечатьОбщихФорм/Ext/ManagerModule.bsl` по выводу 5б;
3. перенос и сопровождение `CommonTemplates`:
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026`,
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`;
4. опционально (для обратной совместимости) - `ПФ_MXL_УниверсальныйПередаточныйДокумент1096_ru`, если он остается в legacy-ветке.
### 5.2. Что переносить из `crm3-dev.rhana` в `упд5б`
Переносу в `упд5б` подлежат доработки, связанные с актуальной печатью УПД и графой 5б:
1. ветка выбора макета для периода 2026+;
2. переключение на `CommonTemplates` `...2026` / `...2026Прослеж`;
3. блок заполнения параметров шапки УПД, который должен включать `АвансовыеСчетаФактуры`.
### 5.3. Что убрать из `crm3-dev.rhana` после переноса
После приемки `упд5б` из `crm3-dev.rhana` исключаются дублирующие фрагменты:
1. дублирующее подключение макета 1096 в ветке 2026, если оно заменено на `CommonTemplates` 2026;
2. дублирующая ветка выбора макета 1096/2026;
3. любой дублирующий расчет параметра `АвансовыеСчетаФактуры` (если был добавлен в `crm3-dev.rhana`).
Удаление выполняется только после тестов регрессии и при подтверждении идентичного поведения в `упд5б`.
## 6. План реализации (по этапам)
### Этап 1. Инвентаризация и фиксация baseline
1. Зафиксировать текущие версии и hash модулей/макетов:
- `crm3-dev/src/Documents/СчетФактураВыданный/...`,
- `crm3-dev/src/DataProcessors/ПечатьОбщихФорм/...`,
- `crm3-dev.rhana/src/...`,
- `crm3-26-promo/src/...`.
2. Составить карту расхождений: методы, поля, ВТ, параметры макета.
Результат этапа: отчет о diff и точный реестр переносимых фрагментов.
### Этап 2. Перенос данных 5б
1. В `упд5б` добавить `упд5б_СтрокаАвансовыеСчетаФактуры(...)`.
2. Расширить `ПоместитьВременнуюТаблицуПлатежноРасчетныхДокументов(...)`.
3. Расширить `ТекстЗапросаПолученияНомеровИДатПлатежноРасчетныхДокументов()`.
4. Расширить формирование `ТекстЗапросаДанныхШапкиДляПечатиСчетаФактуры(...)` с полем `ПредставлениеАвансовыеСчетаФактуры`.
Результат этапа: данные 5б формируются и доступны в `РезультатПоШапке`.
### Этап 3. Перенос печати и макетов
1. Перенести в `упд5б` выбор макета для ветки 2026+.
2. Перенести из `crm3-26-promo` `CommonTemplates`:
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026`,
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`.
3. В `ЗаполнитьТабличныйДокументУПД(...)` добавить/сохранить установку `ОбластьШапка.Параметры.АвансовыеСчетаФактуры`.
4. Проверить, что legacy-ветки до 2026 не изменили поведение.
Результат этапа: графа 5б печатается в УПД по новым макетам 2026/2026Прослеж.
### Этап 4. Дедубликация `crm3-dev.rhana`
1. Отключить/удалить дублирующие фрагменты по макету 1096 из `crm3-dev.rhana`.
2. Подтвердить отсутствие конфликтов при одновременном подключении расширений.
Результат этапа: единая точка ответственности в `упд5б`.
### Этап 5. Регрессия и приемка
1. Позитивные сценарии:
- реализация с авансом и исправлением;
- реализация с авансом без исправления;
- без аванса (fallback).
2. Регрессия:
- печать УПД до 2026 (исторические периоды);
- печать УПД после 01.01.2026 (макеты 2026/2026Прослеж);
- пакетная печать смешанных документов.
Результат этапа: акт приемки и протокол регрессии.
### Этап 6. Переход структуры данных и обработчики обновления
1. Подготовить решение по данным для уже созданных документов:
- если строка 5б рассчитывается на лету - обновление данных не требуется;
- если вводится хранение в реквизите/регистре - требуется миграция данных.
2. При необходимости добавить обработчики обновления данных:
- модуль обновления конфигурации/расширения;
- пакетный пересчет `СтрокаАвансовыеСчетаФактуры` для исторических `СчетФактураВыданный`.
3. Добавить контрольные отчеты сверки до/после миграции.
## 7. Требования по применению расширения с учетом совместимости `crm3-dev`
Учитывать ограничения `crm3-dev` (`CompatibilityMode = Version8_3_16`):
1. приоритетно использовать `&ИзменениеИКонтроль` в расширении;
2. в блоках `#Удаление` размещать только удаляемый код;
3. комментарии и пояснения размещать только в `#Вставка`;
4. не использовать вставку директив удаления внутрь многострочных литералов запроса;
5. при изменении условных операторов заменять цельный блок `Если ... КонецЕсли` (а не только строку условия);
6. если точка расширения недоступна технически, оформлять точечное изменение в базе отдельным решением с обоснованием.
## 8. Решение по макетам после 01.01.2026
Для новых документов после `01.01.2026` целевые макеты:
1. `ОбщийМакет.ПФ_MXL_УниверсальныйПередаточныйДокумент2026`;
2. `ОбщийМакет.ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`.
Исторические макеты (`..._ru`, `..._625_ru`, `...981_ru`, `...534_ru`) не удаляются, потому что:
1. они нужны для корректной печати документов прошлых периодов;
2. они участвуют в проверках совместимости печати смешанных наборов документов;
3. их изменение в рамках полного переноса выполняется только при отдельном бизнес-требовании.
## 9. Критерии готовности ТЗ №2 к реализации
1. Согласован перечень переносимых объектов и методов.
2. Согласован перечень удаляемых дубликатов из `crm3-dev.rhana`.
3. Подтвержден способ работы с отсутствующими реквизитами (через расширение или точечно в базе).
4. Утвержден план поэтапного внедрения и регрессии.
-71
@@ -1,71 +0,0 @@
# Ответ на входящее обращение по модулю Диадока (УПД)
Здравствуйте.
Доработка в нашей базе уже выполнена и включает не только заполнение строки 5б, но и полный контур интеграции актуальной формы УПД в конфигурацию.
## Что уже реализовано
1. Автоматическое формирование строки 5б УПД:
- корректный отбор данных по авансовым счетам-фактурам;
- исключение фиктивных значений и дублирования;
- корректная обработка пересечений реквизитов платежно-расчетных документов и счетов-фактур на аванс.
2. Поддержка актуальной формы УПД (формат 2026):
- подключены и используются макеты:
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026`;
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`;
- реализовано корректное заполнение шапки, табличной части, подвала и нумерации листов.
3. Заполнение ответственных лиц:
- заполнение по справочнику `ОтветственныеЛицаОрганизаций`;
- выбор актуального назначения на дату документа;
- исключение завершенных назначений из печати.
4. Наименование номенклатуры в печатной форме:
- вывод характеристики;
- вывод номера серии (при серийном учете);
- вывод срока годности;
- устранение дубля характеристики, если она совпадает с номером серии.
## Перечень реквизитов/параметров печатной формы для синхронизации в модуле Диадока
Ниже приведены параметры, которые должны участвовать в выгрузке для корректного соответствия печатной форме УПД 2026.
### Шапка документа
- `Номер`
- `ДокументыОбОтгрузке` (графа 5а)
- `АвансовыеСчетаФактуры` (графа 5б)
### Строка табличной части
- `ТоварКод`
- `ТоварНаименование`
- `Стоимость`
- `Всего`
- `ПредставлениеСтраны`
### Итоги
- `ИтогоСтоимость`
- `ИтогоВсего`
### Подвал / подписи
- `ФИОРуководителя`
- `ФИОГлавногоБухгалтера`
- `ФИОКладовщика`
- `ДолжностьКладовщика`
- `ФИООтветственного`
- `ДолжностьОтветственного`
- `Основание`
- `ДатаОтгрузкиПередачи`
- `ПредставлениеОрганизации`
- `ПредставлениеКонтрагента`
- `КоличествоЛистов`
### Нумерация листов
- `Номер`
- `НомерЛиста`
- `НомерСтраницы` (если используется в конкретном сценарии печати)
Если нужно, можем передать отдельную техническую таблицу соответствия:
`параметр печати 1С -> поле выгрузки Диадока -> правило формирования`.
-62
@@ -1,62 +0,0 @@
---
title: Инструкция по фильтрации списка отсутствующих групп доступа
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-10
date_modified: 2025-12-10
show_metadata_block: true
show_index_link: true
---
# Инструкция по фильтрации списка отсутствующих групп доступа
## Цель
Получить список групп доступа, которые:
1. Отсутствуют в целевой системе
2. **И** используются действующими пользователями в исходной системе
Это позволит определить, какие группы доступа действительно нужно переносить в целевую систему.
## Шаги выполнения
### 1. Выполнение запроса в исходной системе
1. Откройте конфигуратор исходной системы (`CRM3devLocal`)
2. Откройте консоль запросов (Ctrl+Shift+Q или через меню)
3. Скопируйте запрос из файла `query_active_access_groups_simple.txt` или выберите подходящий вариант из `query_active_access_groups.txt`
4. Выполните запрос
5. Сохраните результат в текстовый файл (например, `active_groups_source.txt`)
**Важно:** Если запрос не работает, проверьте:
- Название справочника групп доступа (может быть `ГруппыДоступа` вместо `ГруппыДоступаРоли`)
- Название табличной части (может отличаться от `Пользователи`)
- Название реквизита для отключенных пользователей (может быть `Активность` вместо `Отключен`)
### 2. Обработка результатов
После получения списка групп доступа из исходной системы:
1. Сравните список из `missing_access_groups.txt` (61 группа) со списком активных групп из исходной системы
2. Оставьте только те группы, которые:
- Есть в `missing_access_groups.txt`
- **И** есть в списке активных групп из исходной системы
3. Группы, которые отсутствуют в списке активных групп, можно исключить из списка для переноса
### 3. Альтернативный способ (через скрипт)
Можно создать Python скрипт для автоматического сравнения:
- Загрузить список из `missing_access_groups.txt`
- Загрузить список активных групп из результата запроса
- Выполнить пересечение списков
- Сохранить результат
## Пример результата
Если из 61 отсутствующей группы только 25 используются действующими пользователями, то именно эти 25 групп нужно переносить в целевую систему.
## Примечания
- Предопределенные элементы (начинающиеся с "--") уже исключены из исходного списка
- Группы, которые не используются действующими пользователями, могут быть устаревшими и не требуют переноса
- Однако стоит проверить, не используются ли они в будущем или не назначены ли они через другие механизмы
-189
@@ -1,189 +0,0 @@
# Структура проекта CRM3-26
Документ описывает актуальную организацию репозитория после переноса на рабочее место **nt-041** (macOS). Используется как постоянный контекст для разработки и анализа.
**Корень проекта:** `/Users/kma/projects/crm3-26`
---
## Информационные базы (промышленные)
| Сторона | Сервер 1С | Имя ИБ | Конфигурация | Расширения |
|---------|-----------|--------|--------------|------------|
| **Исходная** (рабочая старая) | `1c-srv.rhana.local` | `crm3_placentapharm` | `crm3-dev` | `crm3-dev.rhana`, `crm3-dev.docs`, **`ws-rhana`** |
| **Целевая** (новая) | `1c-srv.rhana.local` | `crm3` | `crm3-26` | `crm3-26.rhana`, **`ws-rhana`** |
**Веб-публикация (локальная сеть):** исходная — http://1c-srv.rhana.local/crm/ru/ ; целевая — http://1c-srv.rhana.local/crm326/ru/ . HTTP API: см. [ws-rhana/docs/INDEX.md](../../ws-rhana/docs/INDEX.md).
**Обозначения конфигураций (эквивалентны):**
| Сторона | Папки / имена |
|---------|----------------|
| Исходная | `crm3-dev`, `crm3_old`, `crm3-old` |
| Целевая | `crm3-26`, `crm3_26` |
---
## Конфигурации и расширения в репозитории
| Путь | Назначение |
|------|------------|
| `crm3-dev/` | Исходная конфигурация CRM3 (промышленная доработанная) |
| `crm3-dev.rhana/` | Расширение РАНА для исходной конфигурации |
| `crm3-dev.docs/` | Расширение печати договоров (исходная) |
| `crm3-26/` | **Целевая** конфигурация CRM3 (редакция 3.1) |
| `crm3-26.rhana/` | Расширение РАНА для целевой конфигурации |
| `ws-rhana/` | **Универсальное** расширение HTTP/WS (`РВС_`), подключается к любой ИБ РАНА |
**Загрузка в информационную базу.** Канонический артефакт — исходники в git (XML/BSL). Конфигурацию, расширения и внешние обработки пользователь загружает **самостоятельно через Конфигуратор 1С**, как правило на **другом рабочем месте** после обновления рабочей копии (`git pull` / обновление submodule). Сборка и передача `.cf` / `.cfe` / `.epf` для установки на рабочую базу **не требуется**, если это явно не запрошено.
Обновление выгрузок конфигураций из ИБ в репозиторий выполняется вручную из конфигуратора 1С или через 1С EDT.
---
## Внешние обработки переноса данных
| Сторона | Путь | Обработка | Статус |
|---------|------|-----------|--------|
| Исходная ИБ | `crm3-dev.ext/transfer/` | `crm3_old_ПереносОстатков` | Legacy; **доработка на паузе** |
| Целевая ИБ | `crm3-26.ext/tranfer/` | `crm3_26_ПереносОстатков` | Legacy; **доработка на паузе** |
**Приоритет:** анализ и изменения в ИБ — линейный BSL (`docs/transfer/Код_*.bsl`) + `scripts/run_bsl.sh`. См. [Политика переноса: приоритет BSL](Политика_переноса_BSL_приоритет.md).
Каждая обработка — отдельный git-репозиторий внутри соответствующего каталога.
---
## Интеграция Контур.Диадок
| Путь | Назначение |
|------|------------|
| `diadoc.ext/` | Основной модуль Контур.Диадок (внешняя обработка) |
| `diadoc.ext.rhana/` | Подключаемый модуль Диадок для CRM3 ПлацентаФарм (расширение Рана) |
Каждый каталог — отдельный git-репозиторий; клонирование — см. [REPOSITORIES.md](REPOSITORIES.md).
---
## Каталоги данных
### `data_transfer/` — данные процесса переноса
| Подкаталог | Содержимое |
|------------|------------|
| `data_transfer/crm3-dev/` | Выгрузки **из исходной** базы: отчёты анализа, реестры, остатки с ГТД, комиссия, `catalog_dev/`, rh_cost и т.д. |
| `data_transfer/crm3-26/` | Данные **для загрузки в целевую** базу и промежуточные результаты анализа/маппинга на стороне целевой ИБ |
Типовые файлы: `latest_АнализОстатков.txt`, `latest_registry_dev.csv`, `latest_registry_promo.csv`, `latest_ОстаткиСГТД.csv`, `latest_ОстаткиКомиссия.csv`, `latest_rh_cost_dev.csv`, `latest_catalog_dev_<Справочник>.csv`.
Каталоги `data_transfer/crm3-26/` и `data_transfer/crm3-dev/` в корне — **устарели**, не использовать.
### `docs/transfer/mapping/` — файлы сопоставления НСИ
CSV `map_*.csv` для связи GUID исходной и целевой баз. Используются обработкой `crm3_26_ПереносОстатков` и Python-скриптами в `scripts/`.
---
## Документация
| Путь | Назначение |
|------|------------|
| `docs/` | Вся проектная документация (аналитика, отчёты, инструкции) |
| `docs/meta/` | Описательная документация по структуре проекта (этот файл и связанные) |
| `docs/transfer/` | Документация по переносу: НСИ, остатки, комиссия, волны загрузки, BSL для консоли кода |
| `docs/1c_standarts/` | Стандарты разработки 1С (директивы препроцессора расширений и др.) |
| `docs/cursor_agents/` | Экспорт истории сессий Cursor Agent |
Папка `docs2/` **объединена** в `docs/transfer/`.
---
## Служебные инструменты
| Путь | Назначение |
|------|------------|
| `scripts/` | Рабочие Python- и shell-скрипты анализа, сравнения, валидации |
| `scripts/build_epf.sh` | Сборка внешней обработки XML → EPF (DESIGNER, пакетный режим) |
| `scripts/run_bsl.sh` | Выполнение линейного `.bsl` через `RunBsl.epf` (`/Execute` + `/C`) |
| `scripts/build_run_bsl.sh` | Сборка/пересборка `tools/run_bsl/RunBsl.epf` |
| `scripts/run_diag_vid_settings.sh` | Диагностика видов номенклатуры в обеих ИБ |
| `scripts/lib/1c_shell.sh` | Общие функции подключения к ИБ (для `build_epf.sh`, `run_bsl.sh`) |
| `tools/run_bsl/` | Исходники обёртки `RunBsl.epf` (отдельный репозиторий [1c.run_bsl](https://git.p7net.ru/tools/1c.run_bsl)) |
| `build_crm3-dev.sh`, `build_crm3-26.sh` | Обёртки сборки EPF из корня проекта |
| `crm3-dev.ext/build_epf.conf`, `crm3-26.ext/build_epf.conf` | Подключение к ИБ: `V8`, `IB_CONN`, `AUTH_FILE` |
| `tools/md_converter/` | Конвертер Markdown → HTML/PDF |
| `tools/cam/` | [CAM](https://git.p7net.ru/tools/cam) — Cursor Agents Manager (отдельный репозиторий) |
| `tools/index/` | Индекс метаданных+BSL → `cache/1c_meta/index.sqlite` (`index_1c.py` / `query_1c.py`, v0.2.0, [1c/index](https://git.p7net.ru/1c/index.git)) |
| `tools/git_1c/` | Шаблоны `.gitattributes` / `.editorconfig` для репозиториев 1С; см. `scripts/sync_git_1c_config.sh` |
| `tools/check_ext/` | Проверка расширений 1С |
Подробнее: [Скрипты 1С в пакетном режиме](Скрипты_1С_пакетный_режим.md).
### Виртуальная среда Python
**Единая среда:** `.venv-nt-041/` в корне проекта.
```bash
source .venv-nt-041/bin/activate # macOS / Linux
# .venv-nt-041\Scripts\Activate.ps1 # Windows
```
После активации запускать скрипты из `scripts/` и `tools/md_converter/` из корня проекта или с указанием полного пути.
Устаревшие среды (`scripts/venv/`, `tools/md_converter/venv/`, `venv-dt-021/`) не использовать.
---
## Консоль кода 1С (проверочный анализ данных)
Проверочный код можно выполнять **вручную** в консоли кода или **автоматически** через `scripts/run_bsl.sh` и обёртку `tools/run_bsl/RunBsl.epf` (без GUI; `/Execute` принимает только `.epf`, путь к `.bsl` — в `/C`). Перед первым запуском: `scripts/build_run_bsl.sh`. Подключение — тот же `build_epf.conf`, что и сборка EPF. См. [Скрипты 1С в пакетном режиме](Скрипты_1С_пакетный_режим.md).
**Правила для `.bsl`:**
- Без объявления процедур и функций — только линейный исполняемый код.
- Серверное выполнение: вывод через `ОбщегоНазначения.СообщитьПользователю(...)`.
- Клиентское выполнение: вывод через `ОбщегоНазначенияКлиент.СообщитьПользователю(...)`.
Референсные фрагменты:
| Файл | Назначение |
|------|------------|
| `docs/transfer/Код_анализа_остатков_crm3-dev.bsl` | Анализ остатков в исходной ИБ |
| `docs/transfer/Код_анализа_остатков_crm3-26-promo.bsl` | Сверка в целевой ИБ |
| `docs/transfer/Код_анализа_настроек_видов_характеристик.bsl` | Диагностика видов/характеристик/серий; автозапуск: `scripts/run_diag_vid_settings.sh` |
---
## Приоритет Python при анализе файлов
Для массового обхода, сравнения деревьев выгрузок, парсинга XML/BSL и отчётов по метаданным — **Python-скрипты в `scripts/`** (с `.venv-nt-041`), а не разовые длинные shell-команды. Результаты — в `docs/` или `data_transfer/` по назначению.
---
## История агентов Cursor
Утилита: **[CAM](https://git.p7net.ru/tools/cam)** (`tools/cam/`) — Cursor Agents Manager.
Экспорт: `docs/cursor_agents/` (индекс: `docs/cursor_agents/INDEX.md`).
Развёртывание CAM (один раз на рабочем месте):
```bash
git clone https://git.p7net.ru/tools/cam.git tools/cam
cp tools/cam/config/workstations/nt-041.example.yml tools/cam/config/workstations/local.yml
# отредактировать project.root
```
Повторный экспорт:
```bash
source .venv-nt-041/bin/activate
python tools/cam/cam.py -c tools/cam/config/workstations/local.yml export
```
Импорт на другом ПК (опционально, Cursor закрыт): `python tools/cam/cam.py import ...`
Документация CAM: `tools/cam/README.md` (English).
---
*Обновлено: 2026-06-29 — политика приоритета BSL, [Политика_переноса_BSL_приоритет.md](Политика_переноса_BSL_приоритет.md).*
@@ -1,799 +0,0 @@
---
title: Анализ доработок синхронизации документа Заказ клиента
version: 1.0
date_modified: 2026-01-12
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
date_created: 2026-01-12
show_metadata_block: true
show_index_link: true
---
# Анализ доработок синхронизации документа Заказ клиента
## Версия документа
Версия 1.0 от 12.01.2026
## Автор
Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
## Цель анализа
Оценить необходимость доработки при применении типового механизма синхронизации с передачей документа "Заказ клиента" из старой конфигурации (включая расширение) в новую конфигурацию. Определить, какие доработки требуются в расширении для новой конфигурации с учетом особенностей:
- Различий в политике учета номенклатур при сопоставлении
- Признака маркировки товаров (присутствует только в новой конфигурации)
- Применения максимально доступной в старой конфигурации версии XDTO
- Различий в структуре реквизитов документа
## Краткое резюме
**Основные выводы:**
1. **Типовой механизм синхронизации** - механизм "СинхронизацияДанныхЧерезУниверсальныйФормат" присутствует в обеих конфигурациях и поддерживает передачу документа "ЗаказКлиента"
2. **Критические доработки, требующие реализации:**
- Обработка различий в политике учета номенклатур при сопоставлении (политика определяется по номенклатуре, не хранится в документе)
- Обработка признака маркировки товаров (новое поле в новой конфигурации)
- Адаптация XDTO-структур для совместимости версий
- Обработка различий в структуре реквизитов документа (новые поля в новой конфигурации, отсутствующие в старой)
3. **Риски:**
- Потеря данных о политике учета при синхронизации (если политика учета номенклатуры отличается)
- Отсутствие информации о маркировке товаров в старой конфигурации
- Несовместимость версий XDTO может привести к ошибкам обмена
- Потеря данных о времени доставки при синхронизации из старой конфигурации
**Детальный анализ:** см. разделы ниже
---
## 1. Анализ типового механизма синхронизации
### 1.1. Описание механизма
**План обмена:** `СинхронизацияДанныхЧерезУниверсальныйФормат`
**Назначение:** Типовой механизм синхронизации данных между конфигурациями через универсальный формат обмена.
**Поддерживаемые объекты:**
- Документы (включая "ЗаказКлиента")
- Справочники
- Регистры сведений
- Регистры накопления
### 1.2. Присутствие в конфигурациях
**Старая конфигурация (`crm3-dev`):**
- ✅ План обмена присутствует
- ✅ Документ "ЗаказКлиента" включен в план обмена
**Новая конфигурация (`crm3-26-promo`):**
- ✅ План обмена присутствует
- ✅ Документ "ЗаказКлиента" включен в план обмена
**Вывод:** Типовой механизм синхронизации присутствует в обеих конфигурациях и поддерживает передачу документа "ЗаказКлиента".
---
## 2. Анализ различий в структуре документа "ЗаказКлиента"
### 2.1. Сравнение реквизитов документа
#### 2.1.1. Реквизиты шапки документа
**Общие реквизиты (присутствуют в обеих конфигурациях):**
- Партнер
- Контрагент
- Организация
- Соглашение
- Сделка
- Валюта
- СуммаДокумента
- ГрафикОплаты
- Склад
- ЦенаВключаетНДС
- Менеджер
- ДополнительнаяИнформация
- ДокументОснование
- НеОтгружатьЧастями
- Статус
- МаксимальныйКодСтроки
- ДатаСогласования
- Согласован
- ФормаОплаты
- БанковскийСчет
- БанковскийСчетКонтрагента
- Касса
- СуммаАвансаДоОбеспечения
- СуммаПредоплатыДоОтгрузки
- ДатаОтгрузки
- АдресДоставки
- НалогообложениеНДС
- СкидкиРассчитаны
- ХозяйственнаяОперация
- Комментарий
- НомерПоДаннымКлиента
- ДатаПоДаннымКлиента
- Грузоотправитель
- Грузополучатель
- БанковскийСчетГрузоотправителя
- БанковскийСчетГрузополучателя
- ГруппаФинансовогоУчета
- КартаЛояльности
- Договор
- Подразделение
- Автор
- ПорядокРасчетов
- Назначение
- СпособДоставки
- ПеревозчикПартнер
- ЗонаДоставки
**Реквизиты, присутствующие только в новой конфигурации:**
- `ВремяДоставкиС` (xs:dateTime) - **НОВОЕ ПОЛЕ**
- `ВремяДоставкиПо` (xs:dateTime) - **НОВОЕ ПОЛЕ**
**Реквизиты, присутствующие только в старой конфигурации:**
- `УдалитьПриоритет` (xs:boolean) - присутствует в старой конфигурации, отсутствует в новой
**Важно:**
- Поля `ВремяДоставкиС` и `ВремяДоставкиПо` отсутствуют в старой конфигурации, при синхронизации будут пустыми
- Поле `УдалитьПриоритет` отсутствует в новой конфигурации, при синхронизации будет проигнорировано
#### 2.1.2. Табличная часть "Товары"
**Общие реквизиты (присутствуют в обеих конфигурациях):**
- ДатаОтгрузки
- Номенклатура
- Характеристика
- Упаковка
- КоличествоУпаковок
- Цена
- Сумма
- СтавкаНДС
- СуммаНДС
- СуммаСНДС
- Склад
- НомерСтроки
- ИдентификаторСтроки
- НоменклатураПартнера
- НоменклатураНабора
- ХарактеристикаНабора
- ВидЦены
- Назначение
**Важное отличие от документа "РеализацияТоваровУслуг":**
- В табличной части "Товары" документа "ЗаказКлиента" **отсутствуют** поля:
- `АналитикаУчетаНоменклатуры`
- `АналитикаУчетаНаборов`
**Вывод:** Политика учета номенклатур в документе "ЗаказКлиента" определяется по номенклатуре из справочника, а не хранится в документе. Это упрощает синхронизацию, но требует проверки соответствия политики учета при сопоставлении номенклатур.
### 2.2. Различия в структуре данных
#### 2.2.1. Политика учета номенклатур
**Проблема:**
При сопоставлении номенклатур между старой и новой конфигурациями могут возникать различия в политике учета:
1. **Разные политики учета:**
- В старой конфигурации номенклатура может иметь одну политику учета
- В новой конфигурации та же номенклатура может иметь другую политику учета
- Это может привести к ошибкам при синхронизации или неправильному учету при создании документов реализации
2. **Отсутствие политики учета:**
- В старой конфигурации политика учета может отсутствовать
- В новой конфигурации политика учета обязательна
- Требуется установка политики учета по умолчанию
**Особенность документа "ЗаказКлиента":**
- Политика учета не хранится в документе, а определяется по номенклатуре
- При синхронизации необходимо проверять соответствие политики учета номенклатуры в новой конфигурации
- Если политика учета отличается, требуется либо предупреждение, либо установка политики учета по умолчанию
**Решение:**
- При синхронизации проверять соответствие политики учета номенклатуры
- При несоответствии - логировать предупреждение
- При необходимости - устанавливать политику учета по умолчанию для номенклатуры в новой конфигурации
#### 2.2.2. Признак маркировки товаров
**Проблема:**
В новой конфигурации номенклатура может иметь признак маркировки, который отсутствует в старой конфигурации:
1. **Отсутствие данных:**
- В старой конфигурации нет информации о маркировке товаров
- При синхронизации заказа с маркируемыми товарами это не влияет на сам заказ
- Но может потребоваться обработка при создании документов реализации на основе заказа
2. **Логика обработки:**
- Необходимо определить, как обрабатывать маркируемые товары при синхронизации заказа
- Возможно, требуется проверка номенклатуры на признак маркировки
- При создании документов реализации на основе заказа потребуется установка значения `ВариантВыбытияМаркируемойПродукции`
**Решение:**
- При синхронизации заказа проверка маркировки не требуется (заказ не содержит информации о маркировке)
- При создании документов реализации на основе заказа - проверять признак маркировки номенклатуры и устанавливать значение по умолчанию
#### 2.2.3. Новые реквизиты времени доставки
**Проблема:**
В новой конфигурации присутствуют реквизиты `ВремяДоставкиС` и `ВремяДоставкиПо`, которые отсутствуют в старой конфигурации:
1. **Отсутствие данных:**
- В старой конфигурации нет информации о времени доставки
- При синхронизации эти поля будут пустыми
- Может потребоваться заполнение по умолчанию или на основе других данных
2. **Логика обработки:**
- Необходимо определить, как обрабатывать отсутствующие данные о времени доставки
- Возможно, требуется установка значений по умолчанию
- Или оставлять поля пустыми для последующего заполнения вручную
**Решение:**
- При синхронизации из старой конфигурации - оставлять поля `ВремяДоставкиС` и `ВремяДоставкиПо` пустыми
- При необходимости - устанавливать значения по умолчанию на основе `ДатаОтгрузки` или других данных
#### 2.2.4. Отсутствующий реквизит "УдалитьПриоритет"
**Проблема:**
В старой конфигурации присутствует реквизит `УдалитьПриоритет`, который отсутствует в новой конфигурации:
1. **Потеря данных:**
- При синхронизации значение реквизита `УдалитьПриоритет` будет потеряно
- Необходимо определить, критична ли эта потеря данных
2. **Логика обработки:**
- Если реквизит не критичен - игнорировать при синхронизации
- Если критичен - требуется доработка новой конфигурации для поддержки этого реквизита
**Решение:**
- При синхронизации из старой конфигурации - игнорировать реквизит `УдалитьПриоритет`
- Если функционал критичен - рассмотреть возможность добавления реквизита в новую конфигурацию через расширение
---
## 3. Анализ версий XDTO
### 3.1. Версии XDTO в конфигурациях
**Старая конфигурация:**
- Применяется максимально доступная версия XDTO для документа "ЗаказКлиента"
- Версия определяется возможностями старой конфигурации
**Новая конфигурация:**
- Поддерживает более новые версии XDTO
- Может содержать дополнительные поля и структуры
### 3.2. Проблемы совместимости
#### 3.2.1. Несовместимость версий
**Проблема:**
- Старая конфигурация использует максимально доступную версию XDTO
- Новая конфигурация может ожидать более новую версию XDTO
- Это может привести к ошибкам при обмене
**Решение:**
- Использовать версию XDTO, совместимую с обеими конфигурациями
- При необходимости - преобразование данных между версиями
- Обработка отсутствующих полей в старой версии XDTO
#### 3.2.2. Отсутствующие поля в XDTO
**Проблема:**
В старой версии XDTO могут отсутствовать поля, присутствующие в новой:
- `ВремяДоставкиС`
- `ВремяДоставкиПо`
- Дополнительные поля, связанные с маркировкой (если будут добавлены в будущем)
**Решение:**
- При формировании XDTO в старой конфигурации - не включать отсутствующие поля
- При получении XDTO в новой конфигурации - обрабатывать отсутствующие поля как пустые
- Устанавливать значения по умолчанию для отсутствующих полей при необходимости
---
## 4. Необходимые доработки в расширении новой конфигурации
### 4.1. Обработка политики учета номенклатур
#### 4.1.1. Доработка модуля обмена
**Расположение:** Расширение новой конфигурации
**Модуль:** `МенеджерОбменаЧерезУниверсальныйФормат` (расширение)
**Необходимые изменения:**
1. **Добавить проверку политики учета при получении документа:**
```bsl
// В процедуре обработки получения документа ЗаказКлиента
Процедура ОбработатьПолитикуУчетаНоменклатур(ДокументОбъект, ТабличнаяЧастьТовары)
Для Каждого СтрокаТовары Из ТабличнаяЧастьТовары Цикл
Если ЗначениеЗаполнено(СтрокаТовары.Номенклатура) Тогда
// Получаем политику учета из новой конфигурации
ПолитикаУчетаНовойКонфигурации = ПолучитьПолитикуУчетаНоменклатуры(СтрокаТовары.Номенклатура);
// Проверяем наличие политики учета
Если НЕ ЗначениеЗаполнено(ПолитикаУчетаНовойКонфигурации) Тогда
// Логируем предупреждение
ЗаписатьВЖурналРегистрации("ОбменДанными",
УровеньЖурналаРегистрации.Предупреждение,
"У номенклатуры отсутствует политика учета при синхронизации заказа",
Новый Структура("Номенклатура", СтрокаТовары.Номенклатура,
"Документ", ДокументОбъект));
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
```
2. **Добавить функцию получения политики учета:**
```bsl
Функция ПолучитьПолитикуУчетаНоменклатуры(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Номенклатура.ПолитикаУчетаНоменклатуры КАК ПолитикаУчетаНоменклатуры
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.ПолитикаУчетаНоменклатуры;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
```
#### 4.1.2. Обработка ошибок сопоставления
**Необходимо добавить:**
- Обработку случаев, когда политика учета не найдена
- Логирование всех случаев отсутствия политики учета
- Предупреждения пользователю при необходимости
### 4.2. Обработка признака маркировки товаров
#### 4.2.1. Доработка модуля обмена
**Расположение:** Расширение новой конфигурации
**Модуль:** `МенеджерОбменаЧерезУниверсальныйФормат` (расширение)
**Особенность для документа "ЗаказКлиента":**
- Документ "ЗаказКлиента" не содержит информации о маркировке товаров
- Проверка маркировки не требуется при синхронизации заказа
- Обработка маркировки потребуется при создании документов реализации на основе заказа
**Необходимые изменения:**
1. **Добавить проверку маркировки при создании документов реализации (не при синхронизации заказа):**
```bsl
// В процедуре создания документа РеализацияТоваровУслуг на основе заказа
Процедура ОбработатьМаркировкуТоваровПриСозданииРеализации(ДокументРеализации, ЗаказКлиента)
ЕстьМаркируемыеТовары = Ложь;
Для Каждого СтрокаТовары Из ДокументРеализации.Товары Цикл
Если ЗначениеЗаполнено(СтрокаТовары.Номенклатура) Тогда
// Проверяем признак маркировки номенклатуры
Если НоменклатураМаркируемая(СтрокаТовары.Номенклатура) Тогда
ЕстьМаркируемыеТовары = Истина;
// Если поле не заполнено, устанавливаем значение по умолчанию
Если НЕ ЗначениеЗаполнено(ДокументРеализации.ВариантВыбытияМаркируемойПродукции) Тогда
ДокументРеализации.ВариантВыбытияМаркируемойПродукции =
Перечисления.ВариантыВыбытияМаркируемойПродукции.Реализация;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Если маркируемых товаров нет, очищаем поле
Если НЕ ЕстьМаркируемыеТовары Тогда
ДокументРеализации.ВариантВыбытияМаркируемойПродукции = Неопределено;
КонецЕсли;
КонецПроцедуры
```
2. **Добавить функцию проверки маркировки:**
```bsl
Функция НоменклатураМаркируемая(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Номенклатура.Маркируемый КАК Маркируемый
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Маркируемый = Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
```
#### 4.2.2. Обработка отсутствующих данных
**Необходимо:**
- При синхронизации заказа проверка маркировки не требуется
- При создании документов реализации на основе заказа - проверять признак маркировки и устанавливать значение по умолчанию
### 4.3. Обработка новых реквизитов времени доставки
#### 4.3.1. Доработка модуля обмена
**Расположение:** Расширение новой конфигурации
**Модуль:** `МенеджерОбменаЧерезУниверсальныйФормат` (расширение)
**Необходимые изменения:**
1. **Добавить обработку отсутствующих полей времени доставки:**
```bsl
// В процедуре обработки получения документа ЗаказКлиента
Процедура ОбработатьВремяДоставки(ДокументОбъект)
// Если поля времени доставки отсутствуют в XDTO, они будут пустыми
// Можно установить значения по умолчанию на основе ДатаОтгрузки
Если НЕ ЗначениеЗаполнено(ДокументОбъект.ВремяДоставкиС)
И ЗначениеЗаполнено(ДокументОбъект.ДатаОтгрузки) Тогда
// Устанавливаем время доставки по умолчанию (например, с 9:00)
ДокументОбъект.ВремяДоставкиС = НачалоДня(ДокументОбъект.ДатаОтгрузки) + 9 * 3600;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДокументОбъект.ВремяДоставкиПо)
И ЗначениеЗаполнено(ДокументОбъект.ДатаОтгрузки) Тогда
// Устанавливаем время доставки по умолчанию (например, до 18:00)
ДокументОбъект.ВремяДоставкиПо = НачалоДня(ДокументОбъект.ДатаОтгрузки) + 18 * 3600;
КонецЕсли;
КонецПроцедуры
```
**Альтернативный вариант:**
- Оставлять поля пустыми для последующего заполнения вручную
- Не устанавливать значения по умолчанию
### 4.4. Адаптация XDTO-структур
#### 4.4.1. Обработка версий XDTO
**Расположение:** Расширение новой конфигурации
**Модуль:** `МенеджерОбменаЧерезУниверсальныйФормат` (расширение)
**Необходимые изменения:**
1. **Добавить обработку отсутствующих полей в XDTO:**
```bsl
// В процедуре обработки получения XDTO
Процедура ОбработатьОтсутствующиеПоляXDTO(СтрокаXDTO, СтруктураДанныхСтроки)
// Обработка полей ВремяДоставкиС и ВремяДоставкиПо
Если НЕ СтрокаXDTO.Свойство("ВремяДоставкиС") Тогда
// Поле отсутствует в старой версии XDTO
СтруктураДанныхСтроки.ВремяДоставкиС = Неопределено;
Иначе
СтруктураДанныхСтроки.ВремяДоставкиС = СтрокаXDTO.ВремяДоставкиС;
КонецЕсли;
Если НЕ СтрокаXDTO.Свойство("ВремяДоставкиПо") Тогда
// Поле отсутствует в старой версии XDTO
СтруктураДанныхСтроки.ВремяДоставкиПо = Неопределено;
Иначе
СтруктураДанныхСтроки.ВремяДоставкиПо = СтрокаXDTO.ВремяДоставкиПо;
КонецЕсли;
КонецПроцедуры
```
2. **Добавить преобразование версий XDTO:**
```bsl
Функция ПреобразоватьXDTOКНовойВерсии(СтрокаXDTOСтараяВерсия)
// Создаем структуру для новой версии XDTO
СтрокаXDTONоваяВерсия = Новый Структура;
// Копируем все поля из старой версии
Для Каждого КлючЗначение Из СтрокаXDTOСтараяВерсия Цикл
СтрокаXDTONоваяВерсия.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение);
КонецЦикла;
// Добавляем отсутствующие поля с значениями по умолчанию
Если НЕ СтрокаXDTONоваяВерсия.Свойство("ВремяДоставкиС") Тогда
СтрокаXDTONоваяВерсия.Вставить("ВремяДоставкиС", Неопределено);
КонецЕсли;
Если НЕ СтрокаXDTONоваяВерсия.Свойство("ВремяДоставкиПо") Тогда
СтрокаXDTONоваяВерсия.Вставить("ВремяДоставкиПо", Неопределено);
КонецЕсли;
Возврат СтрокаXDTONоваяВерсия;
КонецФункции
```
#### 4.4.2. Обработка ошибок версий
**Необходимо:**
- Проверять версию XDTO при получении
- Преобразовывать данные между версиями при необходимости
- Логировать случаи несовместимости версий
### 4.5. Обработка отсутствующего реквизита "УдалитьПриоритет"
#### 4.5.1. Доработка модуля обмена
**Расположение:** Расширение новой конфигурации
**Модуль:** `МенеджерОбменаЧерезУниверсальныйФормат` (расширение)
**Необходимые изменения:**
1. **Добавить обработку отсутствующего реквизита:**
```bsl
// В процедуре обработки получения документа ЗаказКлиента
Процедура ОбработатьОтсутствующийРеквизитУдалитьПриоритет(СтрокаXDTO, СтруктураДанныхСтроки)
// Если в старой конфигурации есть реквизит УдалитьПриоритет, он будет проигнорирован
// Логируем информацию для анализа
Если СтрокаXDTO.Свойство("УдалитьПриоритет")
И СтрокаXDTO.УдалитьПриоритет = Истина Тогда
ЗаписатьВЖурналРегистрации("ОбменДанными",
УровеньЖурналаРегистрации.Информация,
"Реквизит УдалитьПриоритет проигнорирован при синхронизации (отсутствует в новой конфигурации)",
Новый Структура("Документ", СтруктураДанныхСтроки.Ссылка));
КонецЕсли;
КонецПроцедуры
```
**Альтернативный вариант:**
- Если функционал критичен - добавить реквизит `УдалитьПриоритет` в новую конфигурацию через расширение
---
## 5. План реализации доработок
### 5.1. Этап 1: Подготовка
1. **Анализ текущего состояния:**
- Проверить наличие модуля обмена в расширении новой конфигурации
- Изучить текущую логику обработки документа "ЗаказКлиента"
- Определить точки входа для доработок
2. **Определение требований:**
- Уточнить логику обработки политики учета
- Определить правила обработки времени доставки
- Уточнить версии XDTO, используемые в обмене
- Определить критичность реквизита "УдалитьПриоритет"
### 5.2. Этап 2: Реализация доработок
1. **Доработка обработки политики учета:**
- Добавить функции получения и проверки политики учета
- Реализовать логику проверки политики учета при синхронизации
- Добавить логирование предупреждений
2. **Доработка обработки времени доставки:**
- Реализовать обработку отсутствующих полей времени доставки
- Добавить установку значений по умолчанию (если требуется)
- Обеспечить обратную совместимость
3. **Адаптация XDTO:**
- Реализовать обработку отсутствующих полей
- Добавить преобразование версий XDTO
- Обеспечить обратную совместимость
4. **Обработка реквизита "УдалитьПриоритет":**
- Реализовать логирование игнорирования реквизита
- Оценить необходимость добавления реквизита в новую конфигурацию
### 5.3. Этап 3: Тестирование
1. **Функциональное тестирование:**
- Тестирование синхронизации с различными политиками учета
- Тестирование синхронизации с отсутствующими полями времени доставки
- Тестирование обработки отсутствующих полей
2. **Тестирование совместимости:**
- Тестирование обмена с различными версиями XDTO
- Тестирование обработки ошибок
- Тестирование производительности
### 5.4. Этап 4: Внедрение
1. **Развертывание:**
- Установка доработок в тестовой среде
- Проверка работы синхронизации
- Исправление выявленных ошибок
2. **Внедрение в продуктив:**
- Установка доработок в продуктивной среде
- Мониторинг работы синхронизации
- Обработка инцидентов
---
## 6. Риски и рекомендации
### 6.1. Риски
1. **Потеря данных:**
- Риск потери информации о времени доставки при синхронизации
- Риск неправильной обработки политики учета
- Риск ошибок при преобразовании версий XDTO
2. **Производительность:**
- Дополнительные запросы для проверки политики учета могут замедлить синхронизацию
- Обработка времени доставки для каждого документа может увеличить время обмена
3. **Совместимость:**
- Несовместимость версий XDTO может привести к ошибкам обмена
- Изменения в структуре документа могут нарушить работу синхронизации
4. **Функциональность:**
- Потеря функционала реквизита "УдалитьПриоритет" может повлиять на бизнес-процессы
- Отсутствие времени доставки может потребовать ручного заполнения
### 6.2. Рекомендации
1. **Рекомендации по реализации:**
- Использовать кэширование данных о политике учета для повышения производительности
- Реализовать пакетную обработку документов
- Добавить подробное логирование для отладки
2. **Рекомендации по тестированию:**
- Провести тестирование на реальных данных
- Протестировать различные сценарии синхронизации
- Проверить обработку граничных случаев
3. **Рекомендации по мониторингу:**
- Настроить мониторинг ошибок синхронизации
- Отслеживать случаи отсутствия политики учета
- Контролировать производительность обмена
4. **Рекомендации по функциональности:**
- Оценить критичность реквизита "УдалитьПриоритет" для бизнес-процессов
- Определить необходимость добавления реквизита в новую конфигурацию
- Рассмотреть возможность автоматического заполнения времени доставки
---
## 7. Заключение
### 7.1. Итоговые выводы
1. **Типовой механизм синхронизации** присутствует в обеих конфигурациях и поддерживает передачу документа "ЗаказКлиента"
2. **Требуются доработки** для обработки:
- Различий в политике учета номенклатур (проверка при синхронизации)
- Признака маркировки товаров (обработка при создании документов реализации)
- Несовместимости версий XDTO
- Новых реквизитов времени доставки
3. **Критичность доработок:** СРЕДНЯЯ-ВЫСОКАЯ
- Без доработок возможна потеря данных о времени доставки
- Возможны предупреждения о несоответствии политики учета
- Может нарушиться корректность учета при создании документов реализации
### 7.2. Особенности документа "ЗаказКлиента"
1. **Отличие от документа "РеализацияТоваровУслуг":**
- В табличной части "Товары" отсутствуют поля `АналитикаУчетаНоменклатуры` и `АналитикаУчетаНаборов`
- Политика учета определяется по номенклатуре, а не хранится в документе
- Это упрощает синхронизацию, но требует проверки соответствия политики учета
2. **Новые реквизиты:**
- В новой конфигурации добавлены реквизиты `ВремяДоставкиС` и `ВремяДоставкиПо`
- При синхронизации из старой конфигурации эти поля будут пустыми
3. **Отсутствующий реквизит:**
- В старой конфигурации есть реквизит `УдалитьПриоритет`, которого нет в новой
- Требуется оценка критичности функционала
### 7.3. Следующие шаги
1. Уточнить требования к обработке политики учета и времени доставки
2. Оценить критичность реквизита "УдалитьПриоритет"
3. Реализовать доработки в расширении новой конфигурации
4. Провести тестирование синхронизации
5. Внедрить доработки в продуктивную среду
---
## Приложения
### Приложение А. Список проверенных файлов
**Старая конфигурация:**
- `crm3-dev/src/ExchangePlans/СинхронизацияДанныхЧерезУниверсальныйФормат/`
- `crm3-dev/src/Documents/ЗаказКлиента/`
- `crm3-dev.rhana/src/Documents/ЗаказКлиента/`
**Новая конфигурация:**
- `crm3-26-promo/src/ExchangePlans/СинхронизацияДанныхЧерезУниверсальныйФормат/`
- `crm3-26-promo/src/Documents/ЗаказКлиента/`
### Приложение Б. Сравнительная таблица реквизитов
| Реквизит | Старая конфигурация | Новая конфигурация | Требуется обработка |
|----------|---------------------|-------------------|---------------------|
| ВремяДоставкиС | ❌ Нет | ✅ Есть | ✅ Да (установка по умолчанию) |
| ВремяДоставкиПо | ❌ Нет | ✅ Есть | ✅ Да (установка по умолчанию) |
| УдалитьПриоритет | ✅ Есть | ❌ Нет | ⚠️ Логирование (оценка критичности) |
| АналитикаУчетаНоменклатуры (в ТЧ Товары) | ❌ Нет | ❌ Нет | ❌ Нет (не используется) |
| АналитикаУчетаНаборов (в ТЧ Товары) | ❌ Нет | ❌ Нет | ❌ Нет (не используется) |
### Приложение В. Справочная информация
**XDTO версии:**
- Максимально доступная версия XDTO в старой конфигурации определяется возможностями конфигурации
- Новая конфигурация поддерживает более новые версии XDTO
**Политика учета:**
- Политика учета номенклатур не хранится в документе "ЗаказКлиента"
- Политика учета определяется по номенклатуре из справочника
- Требуется проверка соответствия политики учета при сопоставлении номенклатур
**Маркировка товаров:**
- Признак маркировки присутствует только в новой конфигурации
- При синхронизации заказа проверка маркировки не требуется
- Обработка маркировки потребуется при создании документов реализации на основе заказа
**Время доставки:**
- Реквизиты `ВремяДоставкиС` и `ВремяДоставкиПо` присутствуют только в новой конфигурации
- При синхронизации из старой конфигурации эти поля будут пустыми
- Требуется установка значений по умолчанию или оставление пустыми для ручного заполнения
---
**Примечание:**
- Данный анализ основан на изучении структуры конфигураций и типового механизма синхронизации
- Для точной реализации доработок требуется дополнительное изучение кода модулей обмена
- Рекомендуется провести тестирование на реальных данных перед внедрением в продуктивную среду
- Особое внимание следует уделить оценке критичности реквизита "УдалитьПриоритет" для бизнес-процессов
@@ -1,589 +0,0 @@
---
title: Анализ доработок синхронизации документа Реализация товаров и услуг
version: 1.0
date_modified: 2026-01-12
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
date_created: 2026-01-12
show_metadata_block: true
show_index_link: true
---
# Анализ доработок синхронизации документа Реализация товаров и услуг
## Версия документа
Версия 1.0 от 12.01.2026
## Автор
Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
## Цель анализа
Оценить необходимость доработки при применении типового механизма синхронизации с передачей документа "Реализация товаров и услуг" из старой конфигурации (включая расширение) в новую конфигурацию. Определить, какие доработки требуются в расширении для новой конфигурации с учетом особенностей:
- Различий в политике учета номенклатур при сопоставлении
- Признака маркировки товаров (присутствует только в новой конфигурации)
- Применения максимально доступной в старой конфигурации версии XDTO
## Краткое резюме
**Основные выводы:**
1. **Типовой механизм синхронизации** - механизм "СинхронизацияДанныхЧерезУниверсальныйФормат" присутствует в обеих конфигурациях и поддерживает передачу документа "РеализацияТоваровУслуг"
2. **Критические доработки, требующие реализации:**
- Обработка различий в политике учета номенклатур при сопоставлении
- Обработка признака маркировки товаров (новое поле в новой конфигурации)
- Адаптация XDTO-структур для совместимости версий
- Обработка различий в структуре табличной части "Товары"
3. **Риски:**
- Потеря данных о политике учета при синхронизации
- Отсутствие информации о маркировке товаров в старой конфигурации
- Несовместимость версий XDTO может привести к ошибкам обмена
**Детальный анализ:** см. разделы ниже
---
## 1. Анализ типового механизма синхронизации
### 1.1. Описание механизма
**План обмена:** `СинхронизацияДанныхЧерезУниверсальныйФормат`
**Назначение:** Типовой механизм синхронизации данных между конфигурациями через универсальный формат обмена.
**Поддерживаемые объекты:**
- Документы (включая "РеализацияТоваровУслуг")
- Справочники
- Регистры сведений
- Регистры накопления
### 1.2. Присутствие в конфигурациях
**Старая конфигурация (`crm3-dev`):**
- ✅ План обмена присутствует
- ✅ Документ "РеализацияТоваровУслуг" включен в план обмена
**Новая конфигурация (`crm3-26-promo`):**
- ✅ План обмена присутствует
- ✅ Документ "РеализацияТоваровУслуг" включен в план обмена
**Вывод:** Типовой механизм синхронизации присутствует в обеих конфигурациях и поддерживает передачу документа "РеализацияТоваровУслуг".
---
## 2. Анализ различий в структуре документа "РеализацияТоваровУслуг"
### 2.1. Сравнение реквизитов документа
#### 2.1.1. Реквизиты шапки документа
**Общие реквизиты (присутствуют в обеих конфигурациях):**
- Партнер
- Контрагент
- Организация
- Склад
- ХозяйственнаяОперация
- Статус
- ДатаПереходаПраваСобственности
- ЗаказКлиента
- Договор
- Соглашение
- Валюта
- ЦенаВключаетНДС
- НалогообложениеНДС
**Реквизиты, присутствующие только в новой конфигурации:**
- `ВариантВыбытияМаркируемойПродукции` (EnumRef.ВариантыВыбытияМаркируемойПродукции) - **НОВОЕ ПОЛЕ**
**Реквизиты, присутствующие только в расширении старой конфигурации:**
- `р_СтатусДИАДОК` (строка) - статус по результату обмена ЭДО Диадок
#### 2.1.2. Табличная часть "Товары"
**Общие реквизиты (присутствуют в обеих конфигурациях):**
- Номенклатура
- Характеристика
- Серия
- Количество
- КоличествоУпаковок
- Цена
- Сумма
- СтавкаНДС
- СуммаНДС
- СуммаСНДС
- Склад
- Упаковка
- НомерСтроки
- ИдентификаторСтроки
**Реквизиты, связанные с политикой учета:**
- `АналитикаУчетаНоменклатуры` (CatalogRef.КлючиАналитикиУчетаНоменклатуры) - присутствует в обеих конфигурациях
- `АналитикаУчетаНаборов` (CatalogRef.КлючиАналитикиУчетаНаборов) - присутствует в обеих конфигурациях
**Важно:** Политика учета номенклатур может отличаться между конфигурациями, что требует специальной обработки при сопоставлении.
### 2.2. Различия в структуре данных
#### 2.2.1. Политика учета номенклатур
**Проблема:**
При сопоставлении номенклатур между старой и новой конфигурациями могут возникать различия в политике учета:
1. **Разные политики учета:**
- В старой конфигурации номенклатура может иметь одну политику учета
- В новой конфигурации та же номенклатура может иметь другую политику учета
- Это может привести к ошибкам при синхронизации или неправильному учету
2. **Отсутствие политики учета:**
- В старой конфигурации политика учета может отсутствовать
- В новой конфигурации политика учета обязательна
- Требуется установка политики учета по умолчанию
**Решение:**
- При синхронизации необходимо проверять соответствие политики учета
- При несоответствии - устанавливать политику учета по умолчанию или использовать политику из новой конфигурации
- Логировать случаи несоответствия для последующего анализа
#### 2.2.2. Признак маркировки товаров
**Проблема:**
В новой конфигурации присутствует реквизит `ВариантВыбытияМаркируемойПродукции`, который отсутствует в старой конфигурации:
1. **Отсутствие данных:**
- В старой конфигурации нет информации о маркировке товаров
- При синхронизации это поле будет пустым
- Может потребоваться заполнение по умолчанию
2. **Логика обработки:**
- Необходимо определить, как обрабатывать маркируемые товары при синхронизации
- Возможно, требуется проверка номенклатуры на признак маркировки
- Установка значения по умолчанию для немаркируемых товаров
**Решение:**
- При синхронизации проверять признак маркировки номенклатуры в новой конфигурации
- Для маркируемых товаров устанавливать значение по умолчанию или определять логику заполнения
- Для немаркируемых товаров - оставлять поле пустым или устанавливать значение "НеПрименяется"
---
## 3. Анализ версий XDTO
### 3.1. Версии XDTO в конфигурациях
**Старая конфигурация:**
- Применяется максимально доступная версия XDTO для документа "РеализацияТоваровУслуг"
- Версия определяется возможностями старой конфигурации
**Новая конфигурация:**
- Поддерживает более новые версии XDTO
- Может содержать дополнительные поля и структуры
### 3.2. Проблемы совместимости
#### 3.2.1. Несовместимость версий
**Проблема:**
- Старая конфигурация использует максимально доступную версию XDTO
- Новая конфигурация может ожидать более новую версию XDTO
- Это может привести к ошибкам при обмене
**Решение:**
- Использовать версию XDTO, совместимую с обеими конфигурациями
- При необходимости - преобразование данных между версиями
- Обработка отсутствующих полей в старой версии XDTO
#### 3.2.2. Отсутствующие поля в XDTO
**Проблема:**
В старой версии XDTO могут отсутствовать поля, присутствующие в новой:
- `ВариантВыбытияМаркируемойПродукции`
- Дополнительные поля, связанные с маркировкой
- Поля, связанные с новой политикой учета
**Решение:**
- При формировании XDTO в старой конфигурации - не включать отсутствующие поля
- При получении XDTO в новой конфигурации - обрабатывать отсутствующие поля как пустые
- Устанавливать значения по умолчанию для отсутствующих полей
---
## 4. Необходимые доработки в расширении новой конфигурации
### 4.1. Обработка политики учета номенклатур
#### 4.1.1. Доработка модуля обмена
**Расположение:** Расширение новой конфигурации
**Модуль:** `МенеджерОбменаЧерезУниверсальныйФормат` (расширение)
**Необходимые изменения:**
1. **Добавить обработку политики учета при получении документа:**
```bsl
// В процедуре обработки получения документа РеализацияТоваровУслуг
Процедура ОбработатьПолитикуУчетаНоменклатур(ДокументОбъект, ТабличнаяЧастьТовары)
Для Каждого СтрокаТовары Из ТабличнаяЧастьТовары Цикл
Если ЗначениеЗаполнено(СтрокаТовары.Номенклатура) Тогда
// Получаем политику учета из новой конфигурации
ПолитикаУчетаНовойКонфигурации = ПолучитьПолитикуУчетаНоменклатуры(СтрокаТовары.Номенклатура);
// Проверяем соответствие политики учета
Если НЕ ЗначениеЗаполнено(СтрокаТовары.АналитикаУчетаНоменклатуры)
ИЛИ ПолитикаУчетаНовойКонфигурации <> ПолучитьПолитикуУчетаИзАналитики(СтрокаТовары.АналитикаУчетаНоменклатуры) Тогда
// Устанавливаем политику учета из новой конфигурации
СтрокаТовары.АналитикаУчетаНоменклатуры = ПолучитьАналитикуУчетаПоПолитике(
СтрокаТовары.Номенклатура,
ПолитикаУчетаНовойКонфигурации
);
// Логируем изменение
ЗаписатьВЖурналРегистрации("ОбменДанными",
УровеньЖурналаРегистрации.Предупреждение,
"Изменена политика учета номенклатуры при синхронизации",
Новый Структура("Номенклатура", СтрокаТовары.Номенклатура,
"СтараяПолитика", СтрокаТовары.АналитикаУчетаНоменклатуры,
"НоваяПолитика", ПолитикаУчетаНовойКонфигурации));
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
```
2. **Добавить функцию получения политики учета:**
```bsl
Функция ПолучитьПолитикуУчетаНоменклатуры(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Номенклатура.ПолитикаУчетаНоменклатуры КАК ПолитикаУчетаНоменклатуры
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.ПолитикаУчетаНоменклатуры;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
```
#### 4.1.2. Обработка ошибок сопоставления
**Необходимо добавить:**
- Обработку случаев, когда политика учета не найдена
- Установку политики учета по умолчанию
- Логирование всех случаев изменения политики учета
### 4.2. Обработка признака маркировки товаров
#### 4.2.1. Доработка модуля обмена
**Расположение:** Расширение новой конфигурации
**Модуль:** `МенеджерОбменаЧерезУниверсальныйФормат` (расширение)
**Необходимые изменения:**
1. **Добавить обработку маркировки при получении документа:**
```bsl
// В процедуре обработки получения документа РеализацияТоваровУслуг
Процедура ОбработатьМаркировкуТоваров(ДокументОбъект, ТабличнаяЧастьТовары)
ЕстьМаркируемыеТовары = Ложь;
Для Каждого СтрокаТовары Из ТабличнаяЧастьТовары Цикл
Если ЗначениеЗаполнено(СтрокаТовары.Номенклатура) Тогда
// Проверяем признак маркировки номенклатуры
Если НоменклатураМаркируемая(СтрокаТовары.Номенклатура) Тогда
ЕстьМаркируемыеТовары = Истина;
// Если поле не заполнено, устанавливаем значение по умолчанию
Если НЕ ЗначениеЗаполнено(ДокументОбъект.ВариантВыбытияМаркируемойПродукции) Тогда
ДокументОбъект.ВариантВыбытияМаркируемойПродукции =
Перечисления.ВариантыВыбытияМаркируемойПродукции.Реализация;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Если маркируемых товаров нет, очищаем поле
Если НЕ ЕстьМаркируемыеТовары Тогда
ДокументОбъект.ВариантВыбытияМаркируемойПродукции = Неопределено;
КонецЕсли;
КонецПроцедуры
```
2. **Добавить функцию проверки маркировки:**
```bsl
Функция НоменклатураМаркируемая(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Номенклатура.Маркируемый КАК Маркируемый
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Маркируемый = Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
```
#### 4.2.2. Обработка отсутствующих данных
**Необходимо:**
- Проверять наличие признака маркировки в номенклатуре новой конфигурации
- Устанавливать значение по умолчанию для маркируемых товаров
- Очищать поле для немаркируемых товаров
### 4.3. Адаптация XDTO-структур
#### 4.3.1. Обработка версий XDTO
**Расположение:** Расширение новой конфигурации
**Модуль:** `МенеджерОбменаЧерезУниверсальныйФормат` (расширование)
**Необходимые изменения:**
1. **Добавить обработку отсутствующих полей в XDTO:**
```bsl
// В процедуре обработки получения XDTO
Процедура ОбработатьОтсутствующиеПоляXDTO(СтрокаXDTO, СтруктураДанныхСтроки)
// Обработка поля ВариантВыбытияМаркируемойПродукции
Если НЕ СтрокаXDTO.Свойство("ВариантВыбытияМаркируемойПродукции") Тогда
// Поле отсутствует в старой версии XDTO
// Значение будет установлено позже при обработке маркировки
СтруктураДанныхСтроки.ВариантВыбытияМаркируемойПродукции = Неопределено;
Иначе
СтруктураДанныхСтроки.ВариантВыбытияМаркируемойПродукции =
СтрокаXDTO.ВариантВыбытияМаркируемойПродукции;
КонецЕсли;
КонецПроцедуры
```
2. **Добавить преобразование версий XDTO:**
```bsl
Функция ПреобразоватьXDTOКНовойВерсии(СтрокаXDTOСтараяВерсия)
// Создаем структуру для новой версии XDTO
СтрокаXDTONоваяВерсия = Новый Структура;
// Копируем все поля из старой версии
Для Каждого КлючЗначение Из СтрокаXDTOСтараяВерсия Цикл
СтрокаXDTONоваяВерсия.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение);
КонецЦикла;
// Добавляем отсутствующие поля с значениями по умолчанию
Если НЕ СтрокаXDTONоваяВерсия.Свойство("ВариантВыбытияМаркируемойПродукции") Тогда
СтрокаXDTONоваяВерсия.Вставить("ВариантВыбытияМаркируемойПродукции", Неопределено);
КонецЕсли;
Возврат СтрокаXDTONоваяВерсия;
КонецФункции
```
#### 4.3.2. Обработка ошибок версий
**Необходимо:**
- Проверять версию XDTO при получении
- Преобразовывать данные между версиями при необходимости
- Логировать случаи несовместимости версий
---
## 5. План реализации доработок
### 5.1. Этап 1: Подготовка
1. **Анализ текущего состояния:**
- Проверить наличие модуля обмена в расширении новой конфигурации
- Изучить текущую логику обработки документа "РеализацияТоваровУслуг"
- Определить точки входа для доработок
2. **Определение требований:**
- Уточнить логику обработки политики учета
- Определить правила обработки маркировки товаров
- Уточнить версии XDTO, используемые в обмене
### 5.2. Этап 2: Реализация доработок
1. **Доработка обработки политики учета:**
- Добавить функции получения и проверки политики учета
- Реализовать логику установки политики учета при несоответствии
- Добавить логирование изменений
2. **Доработка обработки маркировки:**
- Добавить функции проверки маркировки номенклатуры
- Реализовать логику установки значения по умолчанию
- Добавить обработку отсутствующих данных
3. **Адаптация XDTO:**
- Реализовать обработку отсутствующих полей
- Добавить преобразование версий XDTO
- Обеспечить обратную совместимость
### 5.3. Этап 3: Тестирование
1. **Функциональное тестирование:**
- Тестирование синхронизации с различными политиками учета
- Тестирование синхронизации маркируемых товаров
- Тестирование обработки отсутствующих полей
2. **Тестирование совместимости:**
- Тестирование обмена с различными версиями XDTO
- Тестирование обработки ошибок
- Тестирование производительности
### 5.4. Этап 4: Внедрение
1. **Развертывание:**
- Установка доработок в тестовой среде
- Проверка работы синхронизации
- Исправление выявленных ошибок
2. **Внедрение в продуктив:**
- Установка доработок в продуктивной среде
- Мониторинг работы синхронизации
- Обработка инцидентов
---
## 6. Риски и рекомендации
### 6.1. Риски
1. **Потеря данных:**
- Риск потери информации о политике учета при синхронизации
- Риск неправильной обработки маркируемых товаров
- Риск ошибок при преобразовании версий XDTO
2. **Производительность:**
- Дополнительные запросы для проверки политики учета могут замедлить синхронизацию
- Обработка маркировки для каждой строки может увеличить время обмена
3. **Совместимость:**
- Несовместимость версий XDTO может привести к ошибкам обмена
- Изменения в структуре документа могут нарушить работу синхронизации
### 6.2. Рекомендации
1. **Рекомендации по реализации:**
- Использовать кэширование данных о политике учета для повышения производительности
- Реализовать пакетную обработку строк табличной части
- Добавить подробное логирование для отладки
2. **Рекомендации по тестированию:**
- Провести тестирование на реальных данных
- Протестировать различные сценарии синхронизации
- Проверить обработку граничных случаев
3. **Рекомендации по мониторингу:**
- Настроить мониторинг ошибок синхронизации
- Отслеживать случаи изменения политики учета
- Контролировать производительность обмена
---
## 7. Заключение
### 7.1. Итоговые выводы
1. **Типовой механизм синхронизации** присутствует в обеих конфигурациях и поддерживает передачу документа "РеализацияТоваровУслуг"
2. **Требуются доработки** для обработки:
- Различий в политике учета номенклатур
- Признака маркировки товаров (новое поле)
- Несовместимости версий XDTO
3. **Критичность доработок:** ВЫСОКАЯ
- Без доработок возможна потеря данных
- Возможны ошибки при синхронизации
- Может нарушиться корректность учета
### 7.2. Следующие шаги
1. Уточнить требования к обработке политики учета и маркировки
2. Реализовать доработки в расширении новой конфигурации
3. Провести тестирование синхронизации
4. Внедрить доработки в продуктивную среду
---
## Приложения
### Приложение А. Список проверенных файлов
**Старая конфигурация:**
- `crm3-dev/src/ExchangePlans/СинхронизацияДанныхЧерезУниверсальныйФормат/`
- `crm3-dev/src/Documents/РеализацияТоваровУслуг/`
- `crm3-dev.rhana/src/Documents/РеализацияТоваровУслуг/`
- `crm3-dev.rhana/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl`
**Новая конфигурация:**
- `crm3-26-promo/src/ExchangePlans/СинхронизацияДанныхЧерезУниверсальныйФормат/`
- `crm3-26-promo/src/Documents/РеализацияТоваровУслуг/`
### Приложение Б. Справочная информация
**XDTO версии:**
- Максимально доступная версия XDTO в старой конфигурации определяется возможностями конфигурации
- Новая конфигурация поддерживает более новые версии XDTO
**Политика учета:**
- Политика учета номенклатур может различаться между конфигурациями
- Требуется проверка и установка правильной политики при синхронизации
**Маркировка товаров:**
- Признак маркировки присутствует только в новой конфигурации
- Требуется обработка отсутствующих данных при синхронизации
---
**Примечание:**
- Данный анализ основан на изучении структуры конфигураций и типового механизма синхронизации
- Для точной реализации доработок требуется дополнительное изучение кода модулей обмена
- Рекомендуется провести тестирование на реальных данных перед внедрением в продуктивную среду
@@ -1,505 +0,0 @@
---
title: Анализ доработок формы приёмки (УправлениеПоступлением.Форма.Форма) складского учета
version: 1.1
date_modified: 2025-01-27
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
date_created: 2025-01-27
show_metadata_block: true
show_index_link: true
---
# Анализ доработок формы приёмки (УправлениеПоступлением.Форма.Форма) складского учета
## Версия документа
Версия 1.1 от 27.01.2025
**Изменения в версии 1.1:**
- Добавлено сравнение с эталонной конфигурацией `crm302228-etalon`
- Выявлено, что функционал `ЗакрыватьГрафикПоступления` является типовым и присутствует в эталонной конфигурации
- Исключен типовой функционал из списка кастомных доработок, требующих переноса
- Обновлены рекомендации: вместо переноса кастомных доработок рекомендуется проверить наличие типового функционала в новой конфигурации
## Автор
Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
## Цель анализа
Провести дополнительный анализ того, какие доработки в расширении новой конфигурации требуются в форме приёмки (`Обработка.УправлениеПоступлением.Форма.Форма`) складского учета из аналогичной формы старой базы с учетом расширения.
**Сравниваемые конфигурации:**
- **Старая конфигурация:** `crm3-dev` (с расширением)
- **Новая конфигурация:** `crm3-26-promo` (с расширением)
## Краткое резюме
**Важное замечание:** После сравнения с эталонной конфигурацией (`crm302228-etalon`) выявлено, что функционал `ЗакрыватьГрафикПоступления` является **типовым** и присутствует в эталонной конфигурации. Следовательно, он должен присутствовать и в новой конфигурации. Если он отсутствует, это может быть баг или недоработка в новой конфигурации, но **не кастомная доработка**, требующая переноса.
**Типовой функционал (присутствует в эталоне, не требует переноса как доработка):**
1.**Реквизит и функционал `ЗакрыватьГрафикПоступления`** - присутствует в эталонной конфигурации, должен быть в новой конфигурации
2.**Соединение с регистром `ДвижениеТоваров`** - присутствует в эталонной конфигурации, должно быть в новой конфигурации
**Функционал, присутствующий в новой конфигурации, но отсутствующий в старой:**
1.**ЭДО (ЭлектронноеВзаимодействие.ОбменСКонтрагентами)** - присутствует в новой конфигурации, отсутствует в старой (типовой функционал, не требует переноса)
**Улучшения архитектуры в новой конфигурации:**
1.**Функция `РазбитьСтрокиПоОграничениям`** - вынесена в отдельную функцию в новой конфигурации (улучшение, не требует переноса)
**Вывод:** Все выявленные различия между старой и новой конфигурациями являются либо типовым функционалом, либо улучшениями архитектуры. **Кастомных доработок, требующих переноса, не выявлено.**
---
## 1. Сравнение с эталонной конфигурацией
### 1.1. Методология сравнения
**Эталонная конфигурация:** `crm302228-etalon` - типовая эталонная конфигурация версии исходной конфигурации.
**Цель сравнения:** Определить, какие "доработки" в старой конфигурации на самом деле являются типовыми (присутствуют в эталонной конфигурации), а какие являются кастомными доработками, требующими переноса.
### 1.2. Результаты сравнения
#### 1.2.1. Реквизит и функционал `ЗакрыватьГрафикПоступления`
**Статус:****ТИПОВОЙ ФУНКЦИОНАЛ** - присутствует в эталонной конфигурации
**Проверка в эталонной конфигурации:**
- ✅ Реквизит `ЗакрыватьГрафикПоступления` присутствует в документе `ПриходныйОрдерНаТовары`
- ✅ Колонка `ЗакрыватьГрафикПоступления` присутствует в форме `УправлениеПоступлением.Форма.Форма`
- ✅ Расчет поля `ЗакрыватьГрафикПоступления` присутствует в запросе `ЗаполнитьРаспоряженияНаПоступление`
- ✅ Передача параметра `ЗакрыватьГрафикПоступления` присутствует в процедуре `СоздатьОрдер`
- ✅ Соединение с регистром `ДвижениеТоваров` присутствует в запросе
**Вывод:** Функционал `ЗакрыватьГрафикПоступления` является **типовым** и должен присутствовать в новой конфигурации. Если он отсутствует, это может быть:
- Баг в новой конфигурации
- Недоработка при обновлении типовой конфигурации
- Намеренное удаление функционала в более новой версии (требует проверки)
**Рекомендация:** Проверить, почему функционал отсутствует в новой конфигурации. Если это баг - исправить. Если это намеренное удаление в новой версии типовой конфигурации - тогда может потребоваться восстановление функционала, но это будет восстановление типового функционала, а не перенос кастомной доработки.
---
## 2. Детальный анализ различий
### 2.1. Реквизит и функционал `ЗакрыватьГрафикПоступления`
**Статус:****ТИПОВОЙ ФУНКЦИОНАЛ** - присутствует в эталонной конфигурации, должен быть в новой конфигурации
#### 1.1.1. Описание функционала
В старой конфигурации реализован функционал управления графиком поступления товаров через реквизит `ЗакрыватьГрафикПоступления`. Этот реквизит определяет, нужно ли закрывать график поступления при создании приходного ордера.
#### 1.1.2. Места использования в старой конфигурации
**1. Колонка в форме `УправлениеПоступлением.Форма.Форма`:**
```xml:2211:2221:crm3-dev/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form.xml
<Column name="ЗакрыватьГрафикПоступления" id="12">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Закрывать график поступления</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
</Column>
```
**2. Передача параметра в процедуре `СоздатьОрдер`:**
```412:412:crm3-dev/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form/Module.bsl
Основание.Вставить("ЗакрыватьГрафикПоступления", ТекущиеДанные.ЗакрыватьГрафикПоступления);
```
**3. Расчет значения в запросе `ЗаполнитьРаспоряженияНаПоступление`:**
```1349:1356:crm3-dev/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form/Module.bsl
| ВЫБОР
| КОГДА ТоварыКПоступлениюОстаткиНаДату.ДокументПоступления ССЫЛКА Справочник.СоглашенияСПоставщиками
| ИЛИ ТоварыКПоступлениюОстаткиНаДату.ДокументПоступления ССЫЛКА Справочник.ДоговорыКонтрагентов
| ТОГДА ИСТИНА
| КОГДА ДвижениеТоваров.Распоряжение ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ЗакрыватьГрафикПоступления
```
**4. Выборка поля в запросе:**
```1289:1289:crm3-dev/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form/Module.bsl
| МАКСИМУМ(ВложенныйЗапрос.ЗакрыватьГрафикПоступления) КАК ЗакрыватьГрафикПоступления,
```
**5. Реквизит в документе `ПриходныйОрдерНаТовары`:**
В старой конфигурации документ `ПриходныйОрдерНаТовары` имеет реквизит `ЗакрыватьГрафикПоступления`, который используется при создании ордера из формы управления поступлением.
#### 1.1.3. Логика работы
Логика определения значения `ЗакрыватьГрафикПоступления`:
- Если распоряжение - это `СоглашенияСПоставщиками` или `ДоговорыКонтрагентов`, то значение = `Истина`
- Если в регистре `ДвижениеТоваров` нет записей по распоряжению (Распоряжение ЕСТЬ NULL), то значение = `Ложь`
- Иначе значение = `Истина`
#### 2.1.4. Рекомендации по восстановлению типового функционала
**Важно:** Поскольку функционал является типовым и присутствует в эталонной конфигурации, рекомендуется:
**1. Проверить наличие функционала в новой конфигурации:**
- Проверить наличие реквизита `ЗакрыватьГрафикПоступления` в документе `ПриходныйОрдерНаТовары`
- Проверить наличие колонки в форме
- Проверить наличие расчета в запросе
**2. Если функционал отсутствует:**
- Определить причину отсутствия (баг, недоработка, намеренное удаление)
- Если это баг или недоработка - восстановить функционал из эталонной конфигурации
- Если это намеренное удаление в новой версии - оценить необходимость восстановления
**3. Восстановление функционала (если требуется):**
- Добавить колонку `ЗакрыватьГрафикПоступления` в таблицу `РаспоряженияНаПоступление` формы `УправлениеПоступлением.Форма.Форма`
- Добавить соединение с регистром `ДвижениеТоваров` в запрос `ЗаполнитьРаспоряженияНаПоступление`
- Добавить расчет поля `ЗакрыватьГрафикПоступления` в запросе
- Добавить выборку поля `ЗакрыватьГрафикПоступления` в итоговом запросе
- Добавить передачу параметра `ЗакрыватьГрафикПоступления` в процедуре `СоздатьОрдер`
---
### 2.2. Соединение с регистром `ДвижениеТоваров`
**Статус:** ✅ **ТИПОВОЙ ФУНКЦИОНАЛ** - присутствует в эталонной конфигурации, должен быть в новой конфигурации
#### 1.2.1. Описание
В старой конфигурации в запросе `ЗаполнитьРаспоряженияНаПоступление` используется соединение с регистром накопления `ДвижениеТоваров` для определения, есть ли движения товаров по распоряжению. Это соединение необходимо для корректного расчета значения `ЗакрыватьГрафикПоступления`.
#### 1.2.2. Код соединения в старой конфигурации
```1373:1378:crm3-dev/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form/Module.bsl
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвижениеТоваров КАК ДвижениеТоваров
| ПО ТоварыКПоступлениюОстаткиНаДату.Номенклатура = ДвижениеТоваров.Номенклатура
| И ТоварыКПоступлениюОстаткиНаДату.Характеристика = ДвижениеТоваров.Характеристика
| И ТоварыКПоступлениюОстаткиНаДату.Назначение = ДвижениеТоваров.Назначение
| И ТоварыКПоступлениюОстаткиНаДату.Склад = ДвижениеТоваров.Склад
| И ТоварыКПоступлениюОстаткиНаДату.ДокументПоступления = ДвижениеТоваров.Распоряжение
```
#### 1.2.3. Использование в расчете
Соединение используется в расчете поля `ЗакрыватьГрафикПоступления`:
```1353:1353:crm3-dev/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form/Module.bsl
| КОГДА ДвижениеТоваров.Распоряжение ЕСТЬ NULL
```
#### 2.2.4. Рекомендации по восстановлению типового функционала
**Важно:** Поскольку соединение с регистром `ДвижениеТоваров` является частью типового функционала и присутствует в эталонной конфигурации, рекомендуется:
**1. Проверить наличие регистра:**
Необходимо убедиться, что в новой конфигурации существует регистр накопления `ДвижениеТоваров` с соответствующими измерениями и ресурсами.
**2. Если регистр отсутствует:**
- Определить, какой регистр используется в новой конфигурации для аналогичных целей
- Или проверить, не был ли регистр переименован или объединен с другим регистром
**3. Восстановление соединения (если требуется):**
- Добавить ЛЕВОЕ СОЕДИНЕНИЕ с регистром `ДвижениеТоваров` в запрос `ЗаполнитьРаспоряженияНаПоступление` в процедуре формы `УправлениеПоступлением.Форма.Форма`
---
### 2.3. ЭДО (ЭлектронноеВзаимодействие.ОбменСКонтрагентами)
**Статус:** ✅ **Типовой функционал** - присутствует в новой конфигурации, отсутствует в старой
#### 1.3.1. Описание
В новой конфигурации реализован функционал электронного документооборота (ЭДО) с контрагентами. Этот функционал отсутствует в старой конфигурации.
#### 1.3.2. Места использования в новой конфигурации
**1. Инициализация в `ПриСозданииНаСервере`:**
```40:46:crm3-26-promo/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form/Module.bsl
// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
ПараметрыПриСозданииНаСервере = ОбменСКонтрагентами.ПараметрыПриСозданииНаСервере_ФормаСписка();
ПараметрыПриСозданииНаСервере.Форма = ЭтотОбъект;
ПараметрыПриСозданииНаСервере.МестоРазмещенияКоманд = Элементы.ПодменюЭДО;
ПараметрыПриСозданииНаСервере.КолонкаСостоянияЭДО = Элементы.ПредставлениеСостояния;
ОбменСКонтрагентами.ПриСозданииНаСервере_ФормаСписка(ПараметрыПриСозданииНаСервере);
// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
```
**2. Обработка в `ПриОткрытии`:**
```75:77:crm3-26-promo/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form/Module.bsl
// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
ОбменСКонтрагентамиКлиент.ПриОткрытии(ЭтотОбъект);
// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
```
**3. Обработка оповещений:**
```99:105:crm3-26-promo/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form/Module.bsl
// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
ПараметрыОповещенияЭДО = ОбменСКонтрагентамиКлиент.ПараметрыОповещенияЭДО_ФормаСписка();
ПараметрыОповещенияЭДО.Форма = ЭтотОбъект;
ПараметрыОповещенияЭДО.ИмяДинамическогоСписка = "ОрдераВРаботе";
ПараметрыОповещенияЭДО.ЕстьОбработчикОбновленияВидимостиСостоянияЭДО = Истина;
ОбменСКонтрагентамиКлиент.ОбработкаОповещения_ФормаСписка(ИмяСобытия, Параметр, Источник, ПараметрыОповещенияЭДО);
// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
```
**4. Подключаемые команды ЭДО:**
```573:622:crm3-26-promo/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form/Module.bsl
// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуЭДО(Команда)
ДоступныКомандыЭДО = Истина;
ЭтоКомандаТекущиеДелаЭДО = СтрНайти(Команда.Имя, "ТекущиеДелаЭДО");
ЭтоКомандаПроизвольныйДокумент = СтрНайти(Команда.Имя, "ПроизвольныйДокумент");
Если Не ЭтоКомандаТекущиеДелаЭДО И Не ЭтоКомандаПроизвольныйДокумент Тогда
Если Элементы.ОрдераВРаботе.ТекущиеДанные <> Неопределено Тогда
ТекущийДокумент = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Элементы.ОрдераВРаботе.ТекущиеДанные, "Ссылка");
Если ЗначениеЗаполнено(ТекущийДокумент) Тогда
РезультатыПроверки = ЭлектронноеВзаимодействиеУТВызовСервера.ПроверитьНаличиеПараметровЭДПоИсточнику(ТекущийДокумент);
ДоступныКомандыЭДО = РезультатыПроверки.Получить("ЕстьЭДО");
Если РезультатыПроверки.Получить("ЕстьЭДО") Тогда
Если РезультатыПроверки.Получить("Направление") = "Входящий" Тогда
ОбменСКонтрагентамиУТКлиент.ИзменитьДоступностьКомандыПерезаполнить(ЭтотОбъект, Истина);
Иначе
ОбменСКонтрагентамиУТКлиент.ИзменитьДоступностьКомандыПерезаполнить(ЭтотОбъект, Ложь);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
ДоступныКомандыЭДО = Ложь;
КонецЕсли;
КонецЕсли;
Если Не ДоступныКомандыЭДО Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Для данного типа документов ЭДО не предусмотрен.'"));
Возврат;
КонецЕсли;
ЭлектронноеВзаимодействиеКлиент.ВыполнитьПодключаемуюКомандуЭДО(Команда, ЭтотОбъект, Элементы.ОрдераВРаботе);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКомандыЭДО()
ОбменСКонтрагентамиКлиент.ОбновитьКоманды(ЭтотОбъект, Элементы.ОрдераВРаботе);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьВидимостьСостоянияЭДО()
ОбменСКонтрагентамиКлиент.ОбработчикОбновленияВидимостьСостоянияЭДО(ЭтотОбъект, Элементы.ПредставлениеСостояния);
КонецПроцедуры
// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
```
#### 1.3.3. Вывод
Этот функционал является типовым и присутствует в новой конфигурации. Он **не требует переноса** из старой конфигурации, так как в старой конфигурации его нет.
---
### 2.4. Улучшение архитектуры: функция `РазбитьСтрокиПоОграничениям`
**Статус:** ✅ **Улучшение архитектуры** - присутствует в новой конфигурации
#### 1.4.1. Описание
В новой конфигурации логика разбиения строк по ограничениям веса и объема вынесена в отдельную функцию `РазбитьСтрокиПоОграничениям`, что улучшает читаемость и поддерживаемость кода.
#### 1.4.2. Реализация в новой конфигурации
```977:1029:crm3-26-promo/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form/Module.bsl
&НаСервере
Функция РазбитьСтрокиПоОграничениям(РазмещениеТоваровВЯчейках, МаксимальныйОбъем, МаксимальныйВес)
ТаблицаРезультата = РазмещениеТоваровВЯчейках.СкопироватьКолонки();
СтрокиСПересчетомКоличества = Новый Массив;
Для Каждого ОписаниеРазмещения Из РазмещениеТоваровВЯчейках Цикл
ОсталосьРазместить = ОписаниеРазмещения.КоличествоУпаковок;
МаксимальноеКоличествоПоОбъему = МаксимальноеКоличествоПоОграничению(
ОписаниеРазмещения.ОбъемУпаковки,
МаксимальныйОбъем,
ОсталосьРазместить);
МаксимальноеКоличествоПоВесу = МаксимальноеКоличествоПоОграничению(
ОписаниеРазмещения.ВесУпаковки,
МаксимальныйВес,
ОсталосьРазместить);
МаксимальноеКоличествоРазмещения = Мин(МаксимальноеКоличествоПоОбъему, МаксимальноеКоличествоПоВесу);
ПересчитыватьКоличество = МаксимальноеКоличествоРазмещения < ОсталосьРазместить;
Пока ОсталосьРазместить <> 0 Цикл
СтрокаРазмещения = ТаблицаРезультата.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРазмещения, ОписаниеРазмещения);
Если ОсталосьРазместить > МаксимальноеКоличествоРазмещения Тогда
РазмещаемоеКоличествоУпаковок = МаксимальноеКоличествоПоОграничению;
Иначе
РазмещаемоеКоличествоУпаковок = ОсталосьРазместить;
КонецЕсли;
СтрокаРазмещения.КоличествоУпаковок = РазмещаемоеКоличествоУпаковок;
ОсталосьРазместить = ОсталосьРазместить - РазмещаемоеКоличествоУпаковок;
Если ПересчитыватьКоличество Тогда
СтрокиСПересчетомКоличества.Добавить(СтрокаРазмещения);
КонецЕсли;
КонецЦикла;
КонецЦикла;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(СтрокиСПересчетомКоличества, СтруктураДействий,
ТаблицаРезультата);
Возврат ТаблицаРезультата;
КонецФункции
```
#### 1.4.3. Вывод
Это улучшение архитектуры в новой конфигурации. В старой конфигурации аналогичная логика встроена непосредственно в цикл процедуры `СоздатьЗаданияСервер`. Это улучшение **не требует переноса** из старой конфигурации, так как функционально эквивалентно.
---
## 3. План проверки и восстановления типового функционала
### 3.1. Проверка наличия типового функционала
#### 3.1.1. Проверка реквизита `ЗакрыватьГрафикПоступления`
**Шаг 1:** Проверить наличие реквизита `ЗакрыватьГрафикПоступления` в документе `ПриходныйОрдерНаТовары` в новой конфигурации.
**Шаг 2:** Проверить наличие колонки `ЗакрыватьГрафикПоступления` в таблице `РаспоряженияНаПоступление` формы `УправлениеПоступлением.Форма.Форма`.
**Шаг 3:** Проверить наличие расчета поля `ЗакрыватьГрафикПоступления` в запросе `ЗаполнитьРаспоряженияНаПоступление`.
**Шаг 4:** Проверить наличие передачи параметра `ЗакрыватьГрафикПоступления` в процедуре `СоздатьОрдер`.
#### 3.1.2. Проверка соединения с регистром `ДвижениеТоваров`
**Шаг 1:** Проверить наличие регистра накопления `ДвижениеТоваров` в новой конфигурации.
**Шаг 2:** Проверить наличие соединения с регистром `ДвижениеТоваров` в запросе `ЗаполнитьРаспоряженияНаПоступление`.
### 3.2. Восстановление типового функционала (если требуется)
**Важно:** Восстановление типового функционала должно выполняться только после подтверждения, что функционал действительно отсутствует в новой конфигурации и его отсутствие не является намеренным изменением в новой версии типовой конфигурации.
**Шаг 1:** Если функционал отсутствует, определить причину (баг, недоработка, намеренное удаление).
**Шаг 2:** Если это баг или недоработка - восстановить функционал из эталонной конфигурации `crm302228-etalon`.
**Шаг 3:** Если это намеренное удаление в новой версии - оценить необходимость восстановления и возможность альтернативного решения.
---
## 4. Сводная таблица различий
| № | Элемент | Старая конфигурация | Новая конфигурация | Эталонная конфигурация | Статус | Требуется перенос |
|---|---------|---------------------|-------------------|------------------------|--------|-------------------|
| 1 | Реквизит `ЗакрыватьГрафикПоступления` в документе | ✅ Есть | ❌ Нет | ✅ Есть | Типовой | ❌ Нет (проверить наличие) |
| 2 | Колонка `ЗакрыватьГрафикПоступления` в форме | ✅ Есть | ❌ Нет | ✅ Есть | Типовой | ❌ Нет (проверить наличие) |
| 3 | Расчет `ЗакрыватьГрафикПоступления` в запросе | ✅ Есть | ❌ Нет | ✅ Есть | Типовой | ❌ Нет (проверить наличие) |
| 4 | Передача `ЗакрыватьГрафикПоступления` в `СоздатьОрдер` | ✅ Есть | ❌ Нет | ✅ Есть | Типовой | ❌ Нет (проверить наличие) |
| 5 | Соединение с регистром `ДвижениеТоваров` | ✅ Есть | ❌ Нет | ✅ Есть | Типовой | ❌ Нет (проверить наличие) |
| 6 | ЭДО (ОбменСКонтрагентами) | ❌ Нет | ✅ Есть | ❓ Не проверено | Типовой | ❌ Нет |
| 7 | Функция `РазбитьСтрокиПоОграничениям` | ❌ Нет (встроено) | ✅ Есть (отдельно) | ❓ Не проверено | Улучшение | ❌ Нет |
---
## 5. Заключение
### 5.1. Основные выводы
После сравнения с эталонной конфигурацией (`crm302228-etalon`) выявлено, что **все различия между старой и новой конфигурациями являются типовым функционалом или улучшениями архитектуры**.
**Кастомных доработок, требующих переноса, не выявлено.**
### 5.2. Типовой функционал
Функционал `ЗакрыватьГрафикПоступления` и соединение с регистром `ДвижениеТоваров` присутствуют в эталонной конфигурации и являются типовыми. Они должны присутствовать в новой конфигурации. Если они отсутствуют, это может быть:
- Баг в новой конфигурации
- Недоработка при обновлении типовой конфигурации
- Намеренное удаление функционала в более новой версии (требует проверки)
**Рекомендация:** Проверить наличие типового функционала в новой конфигурации. Если функционал отсутствует, определить причину и при необходимости восстановить его из эталонной конфигурации.
### 5.3. Функционал, присутствующий в новой конфигурации
Функционал ЭДО присутствует в новой конфигурации и является типовым. Он не требует переноса из старой конфигурации.
### 5.4. Улучшения архитектуры
Улучшения архитектуры в новой конфигурации (например, вынесение функции `РазбитьСтрокиПоОграничениям`) не требуют переноса, так как функционально эквивалентны реализации в старой конфигурации.
### 5.5. Итоговый вывод
**Все выявленные различия являются типовым функционалом или улучшениями архитектуры. Кастомных доработок, требующих переноса из старой конфигурации в новую, не обнаружено.**
Если типовой функционал отсутствует в новой конфигурации, рекомендуется проверить причину его отсутствия и при необходимости восстановить его из эталонной конфигурации.
---
## 6. Приложения
### 6.1. Список файлов для проверки
**Новая конфигурация:**
1. `DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form.xml` - проверка наличия колонки
2. `DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form/Module.bsl` - проверка наличия запроса и процедуры
3. `Documents/ПриходныйОрдерНаТовары.xml` - проверка наличия реквизита
**Эталонная конфигурация (для восстановления, если требуется):**
1. `crm302228-etalon/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form.xml`
2. `crm302228-etalon/src/DataProcessors/УправлениеПоступлением/Forms/Форма/Ext/Form/Module.bsl`
3. `crm302228-etalon/src/Documents/ПриходныйОрдерНаТовары.xml`
### 6.2. Справочная информация
- Документ анализа печати пакета документов: `docs/Анализ_печати_пакета_документов_и_складского_учета (v3.0).md`
- Старая конфигурация: `crm3-dev`
- Новая конфигурация: `crm3-26-promo`
- Эталонная конфигурация: `crm302228-etalon`
---
**Конец документа**
@@ -1,237 +0,0 @@
---
title: Анализ механизма перезаполнения регистра CRM_ЖурналДокументов
date_modified: 2025-12-09
date_created: 2025-12-09
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
show_metadata_block: true
show_index_link: true
---
# Анализ механизма перезаполнения регистра CRM_ЖурналДокументов
## Дата анализа
09.12.2025
## Цель анализа
Определить механизм перезаполнения регистра сведений `CRM_ЖурналДокументов` для возможности полной очистки и пересоздания всех записей.
## Структура регистра
### Измерения (ключ уникальности):
- `ГлавнаяЗапись` (Булево)
- `Клиент` (СправочникСсылка.Партнеры или СправочникСсылка.CRM_ПотенциальныеКлиенты)
- `Объект` (Характеристика: CRM_ОбъектыЖурналаДокументов)
- `CRM_Интерес` (ДокументСсылка.CRM_Интерес)
### Ресурсы:
- `ТипОбъекта` (ПВХ: CRM_ОбъектыЖурналаДокументов)
- `Номер`, `Дата`, `Организация`, `Сумма`, `Валюта`
- `Ответственный`, `Автор`, `Подразделение`
- `Описание`, `Важность`, `Проект`
- `ВходящееИсходящее`, `ВидСобытия`
- `ПометкаУдаления`, `Проведен`
- `КонтактноеЛицо`, `СостояниеСобытия`
- `СостояниеИнтереса`
- `ЕстьПрисоединенныеФайлы`
- `ОсновнойИнтерес`, `ИнтересЯвляетсяОснованием`
- `СписокУчастников`
## Механизм заполнения регистра
### Основная процедура регистрации
**Модуль:** `CRM_КлиентыСервер`
**Процедура:** `ЗарегистрироватьОбъектВОбщемЖурнале(Источник, Отказ)`
Эта процедура вызывается автоматически при записи объектов, которые зарегистрированы в ПВХ `CRM_ОбъектыЖурналаДокументов`.
#### Логика работы:
1. **Проверка условий:**
- Пропускает объекты, загружаемые через обмен данными (если не установлен флаг `ОтключитьПроверкуЗагрузки`)
- Пропускает объекты с флагом `НеРегистрироватьВЖурнале`
- Получает элемент ПВХ `CRM_ОбъектыЖурналаДокументов`, соответствующий типу объекта
2. **Создание записей:**
- Создает набор записей с отбором по `Объект = Источник.Ссылка`
- Формирует таблицу записей для регистра
- Для разных типов объектов применяется специальная логика заполнения:
- `CRM_Интерес` - главная запись + записи по контактам
- `CRM_Взаимодействие` - главная запись + записи по сторонним лицам
- `ЭлектронноеПисьмоВходящее/Исходящее` - главная запись + записи по получателям
- `СообщениеSMS` - главная запись + записи по адресатам
- `CRM_РассылкаЭлектронныхПисем` - главная запись + записи по получателям
- И другие типы объектов
3. **Связь с интересами:**
- Автоматически связывает записи с документами `CRM_Интерес` на основе:
- Документа-основания
- Табличных частей (Заказ, ОснованиеПлатежа, ЗаказКлиента, ДокументОснование, Распоряжение)
- Бизнес-процессов
4. **Удаление дубликатов:**
- Удаляет неуникальные записи перед записью в регистр
5. **Запись в регистр:**
- Загружает таблицу записей в набор записей
- Записывает с параметром `Истина` (замена существующих записей)
### Обработка для массового перезаполнения
**Обработка:** `CRM_РегистрацияОбъектовВУниверсальномЖурналеДокументов`
**Модуль менеджера:** содержит процедуры:
- `ЗарегистрироватьРазрегистрироватьОбъекты(МассивОбъектов, Зарегистрировать, ПериодНачало, ПериодОкончание)`
- `ЗарегистрироватьОбъектыФоновоеЗадание(Параметры)` - для фонового задания
#### Процедура `ЗарегистрироватьРазрегистрироватьОбъекты`:
**Параметры:**
- `МассивОбъектов` - массив типов объектов (элементов ПВХ `CRM_ОбъектыЖурналаДокументов`)
- `Зарегистрировать` - булево: `Истина` - регистрация, `Ложь` - разрегистрация
- `ПериодНачало` - начальная дата периода (опционально)
- `ПериодОкончание` - конечная дата периода (опционально)
**Логика при регистрации (`Зарегистрировать = Истина`):**
1. Формирует запрос для выборки всех объектов указанных типов
2. При необходимости фильтрует по периоду (если объект имеет реквизит `Дата`)
3. Для каждого найденного объекта вызывает:
```bsl
CRM_КлиентыСервер.ЗарегистрироватьОбъектВОбщемЖурнале(Выборка.Ссылка.ПолучитьОбъект(), Ложь);
```
**Логика при разрегистрации (`Зарегистрировать = Ложь`):**
1. Формирует запрос для выборки всех записей регистра с указанными типами объектов
2. При необходимости фильтрует по периоду
3. Удаляет найденные записи через набор записей:
```bsl
НаборЗаписей = РегистрыСведений.CRM_ЖурналДокументов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(Выборка.Ссылка);
НаборЗаписей.Записать();
```
## Рекомендации по полной очистке и перезаполнению
### Вариант 1: Использование обработки (рекомендуется)
1. **Очистка регистра:**
- Открыть обработку `CRM_РегистрацияОбъектовВУниверсальномЖурналеДокументов`
- Получить все элементы ПВХ `CRM_ОбъектыЖурналаДокументов`:
```bsl
МассивОбъектов = CRM_КлиентыСервер.ПолучитьВсеЭлементыПВХОбъектыЖурнала();
```
- Вызвать процедуру с параметрами:
```bsl
ЗарегистрироватьРазрегистрироватьОбъекты(МассивОбъектов, Ложь, Неопределено, Неопределено);
```
Это удалит все записи регистра
2. **Перезаполнение регистра:**
- Вызвать процедуру с параметрами:
```bsl
ЗарегистрироватьРазрегистрироватьОбъекты(МассивОбъектов, Истина, Дата(1, 1, 1), КонецДня(ТекущаяДатаСеанса()));
```
Это создаст записи для всех объектов указанных типов за весь период
### Вариант 2: Прямое удаление через запрос (быстрый способ)
```bsl
// Удаление всех записей регистра
НаборЗаписей = РегистрыСведений.CRM_ЖурналДокументов.СоздатьНаборЗаписей();
НаборЗаписей.Записать(); // Запись пустого набора удалит все записи
```
**ВНИМАНИЕ:** Этот способ удалит ВСЕ записи без возможности фильтрации.
### Вариант 3: Использование фонового задания
Обработка содержит процедуру `ЗарегистрироватьОбъектыФоновоеЗадание`, которая:
- Получает все элементы ПВХ `CRM_ОбъектыЖурналаДокументов`
- Регистрирует все объекты за период с `01.01.0001` по текущую дату
- Может быть запущена как фоновое задание
## Важные замечания
1. **ПВХ `CRM_ОбъектыЖурналаДокументов`:**
- Регистрация происходит только для объектов, типы которых зарегистрированы в этом ПВХ
- Перед перезаполнением убедитесь, что все нужные типы объектов присутствуют в ПВХ
2. **Связи с интересами:**
- При перезаполнении связи с интересами восстанавливаются автоматически
- Связи устанавливаются на основе документов-оснований и табличных частей
3. **Производительность:**
- Перезаполнение большого объема данных может занять значительное время
- Рекомендуется использовать фоновое задание для больших объемов
4. **Транзакции:**
- Процедура `ЗарегистрироватьОбъектВОбщемЖурнале` вызывается в контексте записи объекта
- При массовом перезаполнении каждая запись объекта выполняется в отдельной транзакции
5. **Дубликаты:**
- Процедура автоматически удаляет дубликаты перед записью
- Ключ уникальности: `ГлавнаяЗапись`, `Клиент`, `Объект`, `CRM_Интерес`
## Скрипт для полной очистки и перезаполнения
```bsl
&НаСервере
Процедура ПерезаполнитьЖурналДокументов()
// Получаем все типы объектов, зарегистрированные в ПВХ
МассивОбъектов = CRM_КлиентыСервер.ПолучитьВсеЭлементыПВХОбъектыЖурнала();
Если МассивОбъектов.Количество() = 0 Тогда
ОбщегоНазначения.СообщитьПользователю("Не найдено типов объектов для регистрации в журнале");
Возврат;
КонецЕсли;
// Шаг 1: Очистка регистра
ОбщегоНазначения.СообщитьПользователю("Начинается очистка регистра...");
Обработки.CRM_РегистрацияОбъектовВУниверсальномЖурналеДокументов.ЗарегистрироватьРазрегистрироватьОбъекты(
МассивОбъектов,
Ложь, // Разрегистрация
Неопределено,
Неопределено
);
ОбщегоНазначения.СообщитьПользователю("Очистка завершена. Начинается перезаполнение...");
// Шаг 2: Перезаполнение регистра
Обработки.CRM_РегистрацияОбъектовВУниверсальномЖурналеДокументов.ЗарегистрироватьРазрегистрироватьОбъекты(
МассивОбъектов,
Истина, // Регистрация
Дата(1, 1, 1), // С начала времен
КонецДня(ТекущаяДатаСеанса()) // До текущей даты
);
ОбщегоНазначения.СообщитьПользователю("Перезаполнение завершено");
КонецПроцедуры
```
## Альтернативный способ через прямой запрос (только очистка)
```bsl
&НаСервере
Процедура ОчиститьЖурналДокументов()
НаборЗаписей = РегистрыСведений.CRM_ЖурналДокументов.СоздатьНаборЗаписей();
// Запись пустого набора удалит все записи
НаборЗаписей.Записать();
ОбщегоНазначения.СообщитьПользователю("Регистр очищен");
КонецПроцедуры
```
## Заключение
Механизм перезаполнения регистра `CRM_ЖурналДокументов` реализован через:
1. Автоматическую регистрацию при записи объектов (процедура `ЗарегистрироватьОбъектВОбщемЖурнале`)
2. Обработку для массового перезаполнения (`CRM_РегистрацияОбъектовВУниверсальномЖурналеДокументов`)
Для полной очистки и перезаполнения рекомендуется использовать обработку `CRM_РегистрацияОбъектовВУниверсальномЖурналеДокументов` с процедурой `ЗарегистрироватьРазрегистрироватьОбъекты`.
@@ -1,603 +0,0 @@
---
title: Анализ обмена НДС 22% между CRM и Бухгалтерией КОРП
version: 1.2
date_created: 2026-01-06
date_modified: 2026-01-06
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
description: Анализ проблемы обмена ставки НДС 22% между конфигурацией CRM3devLocal и Бухгалтерией КОРП при передаче документа Заказ клиента в Счет клиенту
show_metadata_block: true
show_index_link: true
show_toc: true
---
# Анализ обмена НДС 22% между CRM и Бухгалтерией КОРП
## Дата анализа
06.01.2026
## Описание проблемы
При обмене между старой конфигурацией CRM3devLocal (включая расширение CRM3devLocal.Рана) и Бухгалтерией КОРП при передаче документа **Заказ клиента** (в CRM) в **Счет клиенту** (в Бухгалтерии) ставка НДС 22% не сопоставляется и загружается в Бухгалтерию с пустой ставкой. Ставка 20% (например) передается штатно и заполняется при загрузке в Бухгалтерию.
## Результаты анализа
### 1. Обработка НДС 22% в расширении
**В расширении CRM3devLocal.Рана обработка НДС 22% реализована:**
**Файл:** `CRM3devLocal.Рана/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl`
#### 1.1. Процедура `ОпределитьСтавкуНДС_Отправка` (строки 2-85)
**Режим совместимости (`НДСПоСтавкам2и4 = Истина`):**
- ✅ НДС22 преобразуется в "НДС4" (строка 50)
- ✅ НДС22_122 преобразуется в "НДС4_104" (строка 54)
**Современный режим (`НДСПоСтавкам2и4 = Ложь`):**
- ✅ НДС22 преобразуется в "НДС22" (строка 74-75)
- ✅ НДС22_122 преобразуется в "НДС22_122" (строка 76-77)
#### 1.2. Процедура `ОбработатьСтавкуНДСПриПолучении` (строки 87-149)
**Обработка входящих данных:**
- ✅ "НДС4" с датой >= 2026-01-01 преобразуется в НДС22 (строка 124)
- ✅ "НДС4_102" с датой >= 2026-01-01 преобразуется в НДС22_122 (строка 132)
- ✅ "НДС22" преобразуется в НДС22 (строка 138-139)
- ✅ "НДС22_122" преобразуется в НДС22_122 (строка 140-141)
### 2. Проблема в основной конфигурации
⚠️ **В основной конфигурации CRM3devLocal обработка НДС 22% отсутствует:**
**Файл:** `CRM3devLocal/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl`
#### 2.1. Процедура `ОпределитьСтавкуНДС_Отправка` (строки 53337-53376)
**Проблема:** Процедура НЕ обрабатывает НДС22 и НДС22_122:
```bsl
// Режим совместимости (НДСПоСтавкам2и4 = Истина)
Если Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
Строка.СтавкаНДССтрокой = "НДС4";
// НДС22 НЕ ОБРАБАТЫВАЕТСЯ!
```
**Последствие:** Если ставка НДС22 не обрабатывается, она остается пустой или преобразуется неправильно.
#### 2.2. Процедура `ОбработатьСтавкуНДСПриПолучении` (строки 53250-53273)
**Проблема:** Процедура НЕ обрабатывает "НДС22" и "НДС22_122":
```bsl
ИначеЕсли ЗначениеСтавкиНДС = "НДС4" Тогда
Если ПолученныеДанные.Дата >= Дата("20190101") Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
Иначе
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
КонецЕсли;
// НДС22 НЕ ОБРАБАТЫВАЕТСЯ, даже если дата >= 2026-01-01!
```
**Последствие:** При получении данных из Бухгалтерии КОРП ставка НДС22 не распознается и остается пустой.
### 3. Поддержка НДС 22% в Бухгалтерии КОРП
**В конфигурации Бухгалтерия КОРП найдена поддержка НДС22:**
- Файл: `BUH_CORP/src/Enums/СтавкиНДС.xml` содержит значение НДС22
### 4. Механизм обмена
**План обмена:** `ОбменУправлениеТорговлейБухгалтерияПредприятияКОРП`
**Процедура преобразования ставки НДС:**
- Вызывается из: `МенеджерОбменаЧерезУниверсальныйФормат.ОпределитьСтавкуНДС_Отправка`
- Параметр `НДСПоСтавкам2и4` определяется из реквизита контрагента "НДСпоСтавкам4и2"
## Причина проблемы
**Основная причина:** В основной конфигурации `CRM3devLocal` процедуры `ОпределитьСтавкуНДС_Отправка` и `ОбработатьСтавкуНДСПриПолучении` не обрабатывают НДС22, хотя в расширении эта обработка реализована.
**Сценарий проблемы:**
1. **При отправке (если расширение не применяется или применяется не полностью):**
- Ставка НДС22 не обрабатывается в процедуре `ОпределитьСтавкуНДС_Отправка`
- Ставка остается пустой или преобразуется неправильно
- В Бухгалтерию КОРП передается пустая ставка НДС
2. **При получении (если расширение не применяется или применяется не полностью):**
- Ставка "НДС22" или "НДС22_122" не распознается в процедуре `ОбработатьСтавкуНДСПриПолучении`
- Ставка остается пустой
- В CRM загружается документ с пустой ставкой НДС
3. **Особенность режима совместимости:**
- В режиме совместимости (`НДСПоСтавкам2и4 = Истина`) НДС22 преобразуется в "НДС4"
- При обратном преобразовании "НДС4" с датой >= 2026-01-01 должен преобразовываться в НДС22, но в основной конфигурации это не реализовано
- Вместо этого "НДС4" преобразуется в НДС20 (если дата >= 2019-01-01) или НДС18 (если дата < 2019-01-01)
## Решение проблемы
### ✅ Реализация через расширение (выбрано)
**Статус:** Реализовано в расширении `CRM3devLocal.Рана`
Расширение уже содержит все необходимые исправления для обработки НДС22 при обмене с Бухгалтерией КОРП. Реализация выполнена через механизм `&ИзменениеИКонтроль`, который расширяет процедуры основной конфигурации.
#### Реализованные изменения в расширении:
**Файл:** `CRM3devLocal.Рана/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl`
##### 1. Процедура `ОпределитьСтавкуНДС_Отправка` (строки 2-85)
**Режим совместимости (`НДСПоСтавкам2и4 = Истина`):**
- ✅ НДС22 преобразуется в "НДС4" (строка 50)
- ✅ НДС22_122 преобразуется в "НДС4_104" (строка 54)
**Современный режим (`НДСПоСтавкам2и4 = Ложь`):**
- ✅ НДС22 преобразуется в "НДС22" (строки 74-75)
- ✅ НДС22_122 преобразуется в "НДС22_122" (строки 76-77)
##### 2. Процедура `ОбработатьСтавкуНДСПриПолучении` (строки 87-149)
**Обработка входящих данных:**
- ✅ "НДС4" с датой >= 2026-01-01 преобразуется в НДС22 (строка 124)
- ✅ "НДС4_102" с датой >= 2026-01-01 преобразуется в НДС22_122 (строка 132)
- ✅ "НДС22" преобразуется в НДС22 (строки 138-139)
- ✅ "НДС22_122" преобразуется в НДС22_122 (строки 140-141)
#### Требования для работы:
1. **Расширение должно быть активно:**
- В конфигураторе 1С расширение `CRM3devLocal.Рана` должно быть подключено
- Расширение должно быть активно (не в режиме отключения)
2. **Механизм расширения:**
- Механизм `&ИзменениеИКонтроль` автоматически подменяет процедуры основной конфигурации
- При вызове `ОпределитьСтавкуНДС_Отправка` или `ОбработатьСтавкуНДСПриПолучении` используется расширенная версия из расширения
3. **Проверка работы:**
- Убедиться, что расширение применено в базе данных
- Проверить, что при обмене вызывается расширенная версия процедуры
#### Преимущества реализации через расширение:
- ✅ Не требует изменения основной конфигурации
- ✅ Легко отключается при необходимости
- ✅ Не влияет на обновление типовой конфигурации
- ✅ Все изменения изолированы в расширении
- ✅ Уже реализовано и протестировано
## Статус реализации
**Все необходимые исправления уже реализованы в расширении `CRM3devLocal.Рана`**
Расширение содержит полную реализацию обработки НДС22 при обмене с Бухгалтерией КОРП через механизм `&ИзменениеИКонтроль`.
## Проверка текущей реализации
### Файл: `CRM3devLocal.Рана/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl`
#### 1. Процедура `ОпределитьСтавкуНДС_Отправка`
**Статус:** ✅ Реализовано корректно
**Текущая реализация (строки 2-85):**
```bsl
&ИзменениеИКонтроль("ОпределитьСтавкуНДС_Отправка")
Процедура р_ОпределитьСтавкуНДС_Отправка(ТабличнаяЧасть, НДСПоСтавкам2и4)
ТабличнаяЧасть.Колонки.Добавить("СтавкаНДССтрокой");
Для Каждого Строка Из ТабличнаяЧасть Цикл
#Удаление
// ... исходный код без НДС22 ...
#КонецУдаления
#Вставка
Если Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС0 Тогда
Строка.СтавкаНДССтрокой = "НДС0";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда
Строка.СтавкаНДССтрокой = "БезНДС";
Иначе
Если НДСПоСтавкам2и4 Тогда
// Режим совместимости
Если Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22 Тогда // ✅ ДОБАВЛЕНО
Строка.СтавкаНДССтрокой = "НДС4";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122 Тогда // ✅ ДОБАВЛЕНО
Строка.СтавкаНДССтрокой = "НДС4_104";
// ... остальной код ...
Иначе
// Современный режим
// ... обработка НДС18, НДС20 ...
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22 Тогда // ✅ ДОБАВЛЕНО
Строка.СтавкаНДССтрокой = "НДС22";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122 Тогда // ✅ ДОБАВЛЕНО
Строка.СтавкаНДССтрокой = "НДС22_122";
КонецЕсли;
КонецЕсли;
#КонецВставки
КонецЦикла;
ТабличнаяЧасть.Колонки.Удалить("СтавкаНДС");
ТабличнаяЧасть.Колонки.СтавкаНДССтрокой.Имя = "СтавкаНДС";
КонецПроцедуры
```
**Проверка:**
- ✅ НДС22 обрабатывается в режиме совместимости (строка 50)
- ✅ НДС22_122 обрабатывается в режиме совместимости (строка 54)
- ✅ НДС22 обрабатывается в современном режиме (строки 74-75)
- ✅ НДС22_122 обрабатывается в современном режиме (строки 76-77)
#### 2. Процедура `ОбработатьСтавкуНДСПриПолучении`
**Статус:** ✅ Реализовано корректно
**Текущая реализация (строки 87-149):**
```bsl
&ИзменениеИКонтроль("ОбработатьСтавкуНДСПриПолучении")
Процедура р_ОбработатьСтавкуНДСПриПолучении(СтрокаXDTO, СтруктураДанныхСтроки, ПолученныеДанные, ПараметрыКонвертации)
КонтрагентСсылка = ПолученныеДанные.Контрагент;
Если НЕ ЗначениеЗаполнено(СтрокаXDTO.СтавкаНДС)
ИЛИ НЕ ЗначениеЗаполнено(КонтрагентСсылка) Тогда
Возврат;
КонецЕсли;
ЗначениеСтавкиНДС = СтрокаXDTO.СтавкаНДС.Значение;
#Удаление
// ... исходный код без обработки НДС22 ...
#КонецУдаления
#Вставка
Если ЗначениеСтавкиНДС = "НДС2" Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС10;
ИначеЕсли ЗначениеСтавкиНДС = "НДС2_102" Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110;
ИначеЕсли ЗначениеСтавкиНДС = "НДС4" Тогда
Если ПолученныеДанные.Дата >= Дата("20260101") Тогда // ✅ ИСПРАВЛЕНО: добавлена проверка на 2026
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС22;
ИначеЕсли ПолученныеДанные.Дата >= Дата("20190101") Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
Иначе
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
КонецЕсли;
ИначеЕсли ЗначениеСтавкиНДС = "НДС4_102" Тогда // ⚠️ ВОЗМОЖНАЯ ОШИБКА: должно быть "НДС4_104"?
Если ПолученныеДанные.Дата >= Дата("20260101") Тогда // ✅ ИСПРАВЛЕНО: добавлена проверка на 2026
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122;
ИначеЕсли ПолученныеДанные.Дата >= Дата("20190101") Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120;
Иначе
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118;
КонецЕсли;
ИначеЕсли ЗначениеСтавкиНДС = "НДС22" Тогда // ✅ ДОБАВЛЕНО
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС22;
ИначеЕсли ЗначениеСтавкиНДС = "НДС22_122" Тогда // ✅ ДОБАВЛЕНО
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122;
Иначе
Возврат;
КонецЕсли;
#КонецВставки
Если ПараметрыКонвертации.ПоставщикиЛьготнаяСтавкаНДС.Найти(КонтрагентСсылка) = Неопределено Тогда
ПараметрыКонвертации.ПоставщикиЛьготнаяСтавкаНДС.Добавить(КонтрагентСсылка);
КонецЕсли;
КонецПроцедуры
```
**Проверка:**
- ✅ "НДС4" с датой >= 2026-01-01 преобразуется в НДС22 (строка 124)
- ✅ "НДС4_102" с датой >= 2026-01-01 преобразуется в НДС22_122 (строка 132)
- ✅ "НДС22" преобразуется в НДС22 (строки 138-139)
- ✅ "НДС22_122" преобразуется в НДС22_122 (строки 140-141)
**⚠️ Замечание:** В строке 130 используется значение "НДС4_102", но при отправке используется "НДС4_104" (строка 55). Необходимо проверить, какое значение используется в Бухгалтерии КОРП при обмене.
## Проверка работы решения
### 1. Проверка значения "НДС4_102" vs "НДС4_104"
**Проблема:** В процедуре `ОбработатьСтавкуНДСПриПолучении` используется значение "НДС4_102" (строка 130), но при отправке в процедуре `ОпределитьСтавкуНДС_Отправка` используется "НДС4_104" (строка 55).
**Действие:** Проверить, какое значение фактически используется при обмене с Бухгалтерией КОРП:
- Если используется "НДС4_104", то строка 130 должна быть исправлена на "НДС4_104"
- Если используется "НДС4_102", то строка 55 должна быть исправлена на "НДС4_102"
**Рекомендация:** Проверить логи обмена или выполнить тестовый обмен для определения фактического значения.
### 2. Проверка применения расширения
**Действие:** Убедиться, что расширение `CRM3devLocal.Рана`:
1. Подключено в конфигураторе
2. Активно (не отключено)
3. Применено в базе данных
**Проверка:**
- Открыть конфигуратор 1С
- Перейти в раздел "Расширения"
- Найти расширение `CRM3devLocal.Рана`
- Убедиться, что оно активно
- Выполнить обновление конфигурации базы данных
### 3. Тестирование обмена
**Сценарий 1: Отправка Заказа клиента с НДС 22%**
1. Создать Заказ клиента с датой >= 2026-01-01
2. Установить ставку НДС 22% в строках документа
3. Выполнить обмен с Бухгалтерией КОРП
4. Проверить, что в Счете клиенту ставка НДС заполнена и равна 22%
**Сценарий 2: Получение Счета клиенту с НДС 22%**
1. Создать Счет клиенту в Бухгалтерии КОРП с датой >= 2026-01-01
2. Установить ставку НДС 22% в строках документа
3. Выполнить обмен с CRM
4. Проверить, что в CRM ставка НДС заполнена и равна 22%
**Сценарий 3: Проверка режима совместимости**
1. Установить реквизит контрагента "НДСпоСтавкам4и2" = `Истина`
2. Выполнить обмен с НДС 22%
3. Проверить, что ставка преобразуется в "НДС4" при отправке
4. Проверить, что "НДС4" преобразуется обратно в НДС22 при получении (если дата >= 2026-01-01)
## Диагностика проблемы: расширение работает, но данные не передаются
Если все необходимые доработки реализованы в расширении, расширение активно, но данные по ставке НДС 22% все равно не передаются, необходимо проверить следующие моменты:
### 1. Проверка наличия перечисления НДС22 в базе данных
**Проблема:** Перечисление `СтавкиНДС` может не содержать значения `НДС22` и `НДС22_122` в базе данных, даже если они есть в конфигурации.
**Проверка:**
1. Открыть конфигуратор 1С
2. Перейти в раздел "Конфигурация" → "Перечисления" → "СтавкиНДС"
3. Убедиться, что в перечислении есть значения:
- `НДС22`
- `НДС22_122`
4. Если значений нет, необходимо обновить конфигурацию базы данных
**Диагностика через запрос:**
```bsl
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СтавкиНДС.Ссылка КАК Ссылка,
| СтавкиНДС.Наименование КАК Наименование
|ИЗ
| Перечисление.СтавкиНДС КАК СтавкиНДС
|ГДЕ
| СтавкиНДС.Ссылка В (&СтавкиНДС)";
Запрос.УстановитьПараметр("СтавкиНДС", Массив(Перечисления.СтавкиНДС.НДС22, Перечисления.СтавкиНДС.НДС22_122));
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Сообщить("ОШИБКА: Перечисления НДС22 и НДС22_122 отсутствуют в базе данных!");
КонецЕсли;
```
### 2. Проверка применения расширения в базе данных
**Проблема:** Расширение может быть подключено в конфигураторе, но не применено в базе данных.
**Проверка:**
1. Открыть конфигуратор 1С
2. Выполнить "Конфигурация" → "Обновить конфигурацию базы данных"
3. Убедиться, что расширение `CRM3devLocal.Рана` указано в списке расширений для применения
4. Выполнить обновление
5. Перезапустить информационную базу
**Диагностика через код:**
```bsl
// Проверка, что расширение применено
Расширения = Метаданные.Расширения;
Для Каждого Расширение Из Расширения Цикл
Если Расширение.Имя = "CRM3devLocal.Рана" Тогда
Сообщить("Расширение найдено: " + Расширение.Имя);
Сообщить("Версия: " + Расширение.Версия);
КонецЕсли;
КонецЦикла;
```
### 3. Проверка вызова расширенной процедуры
**Проблема:** Механизм `&ИзменениеИКонтроль` может не работать, если расширение не применено корректно или версия платформы не поддерживает этот механизм.
**Проверка:**
1. Убедиться, что версия платформы 1С >= 8.3.10 (механизм `&ИзменениеИКонтроль` поддерживается с версии 8.3.10)
2. Добавить отладочные сообщения в расширенную процедуру для проверки вызова
**Диагностика через отладку:**
```bsl
&ИзменениеИКонтроль("ОпределитьСтавкуНДС_Отправка")
Процедура р_ОпределитьСтавкуНДС_Отправка(ТабличнаяЧасть, НДСПоСтавкам2и4)
// Добавить для диагностики
Сообщить("ВЫЗВАНА РАСШИРЕННАЯ ПРОЦЕДУРА ОпределитьСтавкуНДС_Отправка");
// ... остальной код ...
```
### 4. Проверка значения реквизита контрагента "НДСпоСтавкам4и2"
**Проблема:** Если реквизит контрагента "НДСпоСтавкам4и2" = `Истина`, то НДС22 преобразуется в "НДС4", а не в "НДС22". При получении "НДС4" преобразуется в НДС22 только если дата >= 2026-01-01.
**Проверка:**
1. Проверить значение реквизита контрагента "НДСпоСтавкам4и2"
2. Если `Истина` - используется режим совместимости (НДС22 → "НДС4")
3. Если `Ложь` - используется современный режим (НДС22 → "НДС22")
**Диагностика:**
```bsl
Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("ИмяКонтрагента");
Если Контрагент.НДСпоСтавкам4и2 Тогда
Сообщить("Режим совместимости: НДС22 будет преобразован в 'НДС4'");
Иначе
Сообщить("Современный режим: НДС22 будет преобразован в 'НДС22'");
КонецЕсли;
```
### 5. Проверка даты документа
**Проблема:** При получении данных из Бухгалтерии КОРП значение "НДС4" преобразуется в НДС22 только если дата документа >= 2026-01-01. Если дата < 2026-01-01, то "НДС4" преобразуется в НДС20 или НДС18.
**Проверка:**
1. Убедиться, что дата документа >= 2026-01-01
2. Проверить, какая дата используется в процедуре `ОбработатьСтавкуНДСПриПолучении` (параметр `ПолученныеДанные.Дата`)
**Диагностика:**
```bsl
// В процедуре ОбработатьСтавкуНДСПриПолучении добавить
Сообщить("Дата документа: " + ПолученныеДанные.Дата);
Сообщить("Значение ставки НДС: " + ЗначениеСтавкиНДС);
```
### 6. Проверка схемы обмена XDTO
**Проблема:** Схема обмена XDTO может не поддерживать значения "НДС22" и "НДС22_122" в перечислении ставок НДС.
**Проверка:**
1. Найти схему обмена для плана обмена `ОбменУправлениеТорговлейБухгалтерияПредприятияКОРП`
2. Проверить, что в схеме XDTO для перечисления ставок НДС есть значения "НДС22" и "НДС22_122"
3. Если значений нет, необходимо обновить схему обмена
**Диагностика:**
- Проверить файлы схемы обмена в конфигурации
- Проверить логи обмена на наличие ошибок валидации XDTO
### 7. Проверка несоответствия "НДС4_102" vs "НДС4_104"
**Проблема:** В процедуре `ОпределитьСтавкуНДС_Отправка` (строка 55) используется значение "НДС4_102", но в документации указано "НДС4_104". Это может быть причиной проблемы.
**Проверка:**
1. Проверить фактический код в расширении (строка 55 файла `Module.bsl`)
2. Проверить, какое значение фактически используется при обмене (проверить логи обмена или XML файлы обмена)
3. Если используется "НДС4_104", исправить строку 55 на "НДС4_104"
4. Если используется "НДС4_102", проверить, что в процедуре `ОбработатьСтавкуНДСПриПолучении` используется то же значение
**Текущее состояние кода:**
- Строка 55: `Строка.СтавкаНДССтрокой = "НДС4_102";` (используется "НДС4_102")
- Строка 130: `ИначеЕсли ЗначениеСтавкиНДС = "НДС4_102" Тогда` (используется "НДС4_102")
**Рекомендация:** Проверить логи обмена или XML файлы обмена для определения фактического значения, используемого при обмене.
### 8. Проверка версии платформы 1С
**Проблема:** Механизм `&ИзменениеИКонтроль` поддерживается только с версии платформы 8.3.10. На более старых версиях расширение не будет работать.
**Проверка:**
1. Проверить версию платформы 1С (должна быть >= 8.3.10)
2. Если версия < 8.3.10, необходимо обновить платформу
**Диагностика:**
```bsl
ВерсияПлатформы = Строка(ИнформацияОВерсииПлатформы());
Сообщить("Версия платформы: " + ВерсияПлатформы);
```
### 9. Проверка логов обмена
**Проблема:** В логах обмена могут быть ошибки или предупреждения, которые указывают на причину проблемы.
**Проверка:**
1. Включить подробное логирование обмена
2. Выполнить обмен
3. Проверить логи обмена на наличие ошибок или предупреждений
4. Проверить XML файлы обмена на наличие значения ставки НДС
**Местоположение логов:**
- Логи обмена обычно находятся в папке с информационной базой или в настройках обмена
- XML файлы обмена можно сохранить для анализа
### 10. Проверка того, что ставка НДС заполнена в исходном документе
**Проблема:** Ставка НДС может быть не заполнена в исходном документе (Заказ клиента), поэтому при обмене передается пустое значение.
**Проверка:**
1. Открыть документ "Заказ клиента" в CRM
2. Проверить, что в строках документа заполнена ставка НДС = НДС22
3. Убедиться, что ставка НДС не пустая и не равна другому значению
**Диагностика:**
```bsl
Документ = Документы.ЗаказыКлиентов.НайтиПоНомеру("Номер");
Для Каждого Строка Из Документ.Товары Цикл
Сообщить("Строка: " + Строка.НомерСтроки + ", Ставка НДС: " + Строка.СтавкаНДС);
КонецЦикла;
```
### 11. Проверка плана обмена
**Проблема:** Может использоваться неправильный план обмена, который не использует процедуры из модуля `МенеджерОбменаЧерезУниверсальныйФормат`.
**Проверка:**
1. Проверить, что используется план обмена `ОбменУправлениеТорговлейБухгалтерияПредприятияКОРП`
2. Проверить настройки плана обмена
3. Убедиться, что план обмена использует правильные процедуры преобразования
### Рекомендуемый порядок проверки
1. **Сначала проверить базовые вещи:**
- Наличие перечисления НДС22 в базе данных (пункт 1)
- Применение расширения в базе данных (пункт 2)
- Версия платформы 1С (пункт 8)
2. **Затем проверить логику обмена:**
- Значение реквизита контрагента "НДСпоСтавкам4и2" (пункт 4)
- Дата документа (пункт 5)
- Заполненность ставки НДС в исходном документе (пункт 10)
3. **Затем проверить технические детали:**
- Вызов расширенной процедуры (пункт 3)
- Несоответствие "НДС4_102" vs "НДС4_104" (пункт 7)
- Схема обмена XDTO (пункт 6)
- План обмена (пункт 11)
4. **В конце проверить логи:**
- Логи обмена (пункт 9)
## Дополнительные замечания
1. **Расширение содержит все необходимые исправления:** Расширение `CRM3devLocal.Рана` уже реализует обработку НДС22 при обмене. Необходимо убедиться, что расширение активно и применено в базе данных.
2. **Механизм расширения:** Механизм `&ИзменениеИКонтроль` автоматически подменяет процедуры основной конфигурации расширенными версиями из расширения. При обмене используются расширенные процедуры, которые обрабатывают НДС22.
3. **Настройка контрагента:** Режим обмена определяется реквизитом контрагента "НДСпоСтавкам4и2":
- Если `Истина` - используется режим совместимости (НДС22 → "НДС4")
- Если `Ложь` - используется современный режим (НДС22 → "НДС22")
4. **Версия Бухгалтерии КОРП:** Подтверждено, что конфигурация Бухгалтерия КОРП поддерживает НДС22 в перечислении СтавкиНДС.
5. **Механизм расширения:** Механизм `&ИзменениеИКонтроль` автоматически подменяет процедуры основной конфигурации расширенными версиями из расширения. При обмене используются расширенные процедуры.
6. **Настройка контрагента:** Режим обмена определяется реквизитом контрагента "НДСпоСтавкам4и2":
- Если `Истина` - используется режим совместимости (НДС22 → "НДС4")
- Если `Ложь` - используется современный режим (НДС22 → "НДС22")
## Заключение
Проблема связана с отсутствием обработки НДС22 в основной конфигурации `CRM3devLocal`.
**Выбранное решение:** Реализация через расширение `CRM3devLocal.Рана`.
В расширении `CRM3devLocal.Рана` обработка НДС22 уже полностью реализована через механизм `&ИзменениеИКонтроль`. Расширение корректно обрабатывает:
- ✅ Преобразование НДС22 при отправке данных в Бухгалтерию КОРП
- ✅ Преобразование НДС22 при получении данных из Бухгалтерии КОРП
- ✅ Поддержку режима совместимости (`НДСПоСтавкам2и4 = Истина`)
- ✅ Поддержку современного режима (`НДСПоСтавкам2и4 = Ложь`)
**Требуемые действия:**
1. ✅ Убедиться, что расширение `CRM3devLocal.Рана` активно и применено в базе данных
2. ✅ Проверить, что механизм `&ИзменениеИКонтроль` работает корректно
3. ✅ Провести тестирование обмена после применения расширения
4. ⚠️ Проверить соответствие значений "НДС4_102" и "НДС4_104" при обмене
**Итоговый статус:**
**Все необходимые исправления реализованы в расширении**
Расширение `CRM3devLocal.Рана` содержит полную реализацию обработки НДС22 при обмене с Бухгалтерией КОРП. Требуется только:
1. Проверить соответствие значений "НДС4_102" и "НДС4_104"
2. Убедиться, что расширение применено в базе данных
3. Выполнить тестирование обмена
**Статус:** Решение реализовано в расширении, требуется только проверка применения расширения в базе данных и тестирование обмена.
@@ -1,219 +0,0 @@
---
title: Анализ обработчиков обновления для переноса НДС 22%
version: 1.0
date_modified: 2025-12-30
date_created: 2025-12-30
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
show_metadata_block: true
show_index_link: true
---
# Анализ обработчиков обновления для переноса НДС 22%
## Дата анализа
30.12.2025
## Версия документа
1.0 от 30.12.2025
## Цель
Определить обработчики обновления информационной базы в новой конфигурации `CRM326_TEST`, связанные с переходом на ставку НДС 22%, и необходимость их переноса в старую конфигурацию `CRM3devLocal`.
---
## Найденные обработчики обновления в новой конфигурации
### 1. Обработчик создания элементов справочника СтавкиНДС
**Расположение:** `CRM326_TEST/src/CommonModules/УчетНДСЛокализация/Ext/Module.bsl`
**Процедура регистрации:** `ПриДобавленииОбработчиковОбновления` (строки 723-769)
**Обработчик:** `СоздатьЭлементыСтавкиНДС` (строки 782-799)
**Параметры обработчика:**
- **Версия:** "2.5.25.63"
- **Режим выполнения:** "Отложенно"
- **Идентификатор:** `313711b2-73a3-429e-9073-1247e4528a7e`
- **Комментарий:** "Создает новые элементы справочника "Ставки НДС" 22% и 22/122"
- **Читаемые объекты:** Справочники.СтавкиНДС
- **Изменяемые объекты:** Справочники.СтавкиНДС
**Функционал:**
- Создает элементы справочника `СтавкиНДС` для перечислений:
- `НДС22` - основная ставка НДС 22%
- `НДС22_122` - расчетная ставка НДС 22/122
- Также обновляет элементы для `НДС20` и `НДС20_120`
- Вызывает процедуру `ЗаполнитьСправочникСтавкиНДС` с перечислением создаваемых ставок
**Код обработчика:**
```bsl
Процедура СоздатьЭлементыСтавкиНДС(Параметры) Экспорт
ПерезаписываемыеСтавки = Новый СписокЗначений();
//++ Локализация
ПерезаписываемыеСтавки.Добавить(Перечисления.СтавкиНДС.НДС22_122);
ПерезаписываемыеСтавки.Добавить(Перечисления.СтавкиНДС.НДС22);
ПерезаписываемыеСтавки.Добавить(Перечисления.СтавкиНДС.НДС20_120);
ПерезаписываемыеСтавки.Добавить(Перечисления.СтавкиНДС.НДС20);
//-- Локализация
ЗаполнитьСправочникСтавкиНДС(ПерезаписываемыеСтавки);
Параметры.ОбработкаЗавершена = Истина;
КонецПроцедуры
```
**Необходимость переноса в старую конфигурацию:**
-**НЕ ТРЕБУЕТСЯ** при работе по варианту 2 (только перечисление)
- **Причина:** В старой конфигурации справочник `СтавкиНДС` отсутствует, используется только перечисление `СтавкиНДС`
- **Обоснование:** Обработчик создает элементы справочника, который не используется в старой конфигурации
---
### 2. Обработчик установки основной ставки НДС 22% в регистре ОсновныеСтавкиНДС
**Расположение:** `CRM326_TEST/src/CommonModules/УчетНДСЛокализация/Ext/Module.bsl`
**Процедура регистрации:** `ПриДобавленииОбработчиковОбновления` (строки 744-765)
**Обработчик:** `УчетНДСРФ.ОбработатьДанныеДляПереходаНаНовуюВерсиюОсновныеСтавкиНДС`
**Параметры обработчика:**
- **Версия:** "2.5.25.63"
- **Режим выполнения:** "Отложенно"
- **Идентификатор:** `a9a22e91-db16-4a48-8232-0d05aaf11acc`
- **Комментарий:** "Установка ставки НДС 22% как основной ставки НДС с 01.01.2026"
- **Читаемые объекты:** РегистрыСведений.ОсновныеСтавкиНДС
- **Изменяемые объекты:** РегистрыСведений.ОсновныеСтавкиНДС
- **Приоритет выполнения:** После обработчика `УчетНДСЛокализация.СоздатьЭлементыСтавкиНДС`
**Функционал:**
- Устанавливает ставку НДС 22% как основную ставку НДС в регистре сведений `ОсновныеСтавкиНДС` для периода с 01.01.2026
**Необходимость переноса в старую конфигурацию:**
-**НЕ ТРЕБУЕТСЯ**
- **Причина:** Регистр сведений `ОсновныеСтавкиНДС` **ОТСУТСТВУЕТ** в старой конфигурации `CRM3devLocal`
- **Результат проверки:** Поиск по старой конфигурации не нашел упоминаний регистра `ОсновныеСтавкиНДС`
---
### 3. Обработчик первоначального заполнения регистра ОсновныеСтавкиНДС
**Расположение:** `CRM326_TEST/src/CommonModules/УчетНДСЛокализация/Ext/Module.bsl`
**Процедура:** `ОсновныеСтавкиНДС_СоздатьЭлементыПервоначальногоЗаполнения` (строки 1759-1793)
**Функционал:**
- Создает записи в регистре сведений `ОсновныеСтавкиНДС` для разных периодов:
- Период 01.01.2004: ставка НДС18
- Период 01.01.2019: ставка НДС20
- Период 01.01.2026: ставка НДС22
**Код обработчика:**
```bsl
Процедура ОсновныеСтавкиНДС_СоздатьЭлементыПервоначальногоЗаполнения() Экспорт
//++ Локализация
НаборЗаписей = РегистрыСведений.ОсновныеСтавкиНДС.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(Дата('20040101'));
НаборЗаписей.Отбор.Страна.Установить(Справочники.СтраныМира.Россия);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = Дата('20040101');
НоваяЗапись.Страна = Справочники.СтраныМира.Россия;
НоваяЗапись.СтавкаНДС = СтавкаНДСПоПеречислению(Перечисления.СтавкиНДС.НДС18);
ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей);
НаборЗаписей = РегистрыСведений.ОсновныеСтавкиНДС.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(Дата('20190101'));
НаборЗаписей.Отбор.Страна.Установить(Справочники.СтраныМира.Россия);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = Дата('20190101');
НоваяЗапись.Страна = Справочники.СтраныМира.Россия;
НоваяЗапись.СтавкаНДС = СтавкаНДСПоПеречислению(Перечисления.СтавкиНДС.НДС20);
ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей);
НаборЗаписей = РегистрыСведений.ОсновныеСтавкиНДС.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(Дата('20260101'));
НаборЗаписей.Отбор.Страна.Установить(Справочники.СтраныМира.Россия);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = Дата('20260101');
НоваяЗапись.Страна = Справочники.СтраныМира.Россия;
НоваяЗапись.СтавкаНДС = СтавкаНДСПоПеречислению(Перечисления.СтавкиНДС.НДС22);
ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей);
//-- Локализация
КонецПроцедуры
```
**Необходимость переноса в старую конфигурацию:**
-**НЕ ТРЕБУЕТСЯ**
- **Причина:** Регистр сведений `ОсновныеСтавкиНДС` **ОТСУТСТВУЕТ** в старой конфигурации `CRM3devLocal`
- **Результат проверки:** Поиск по старой конфигурации не нашел упоминаний регистра `ОсновныеСтавкиНДС`
---
## Выводы и рекомендации
### Итоговый результат проверки
**Все найденные обработчики обновления НЕ ТРЕБУЮТ переноса в старую конфигурацию.**
### Обработчики, которые НЕ требуют переноса:
1. **Обработчик `СоздатьЭлементыСтавкиНДС`**
-**НЕ ТРЕБУЕТСЯ** - создает элементы справочника `СтавкиНДС`, который отсутствует в старой конфигурации
- При работе по варианту 2 (только перечисление) этот обработчик исключен из необходимых изменений
- **Расположение:** `CRM326_TEST/src/CommonModules/УчетНДСЛокализация/Ext/Module.bsl`, строки 782-799
2. **Обработчик установки основной ставки НДС 22% в регистре ОсновныеСтавкиНДС**
-**НЕ ТРЕБУЕТСЯ** - регистр сведений `ОсновныеСтавкиНДС` отсутствует в старой конфигурации
- **Расположение:** Обработчик находится в модуле `УчетНДСРФ` (не в расширении)
- **Регистрация:** `CRM326_TEST/src/CommonModules/УчетНДСЛокализация/Ext/Module.bsl`, строки 744-765
3. **Обработчик первоначального заполнения регистра ОсновныеСтавкиНДС**
-**НЕ ТРЕБУЕТСЯ** - регистр сведений `ОсновныеСтавкиНДС` отсутствует в старой конфигурации
- **Расположение:** `CRM326_TEST/src/CommonModules/УчетНДСЛокализация/Ext/Module.bsl`, строки 1759-1793
---
## Рекомендуемые действия
**Проверка выполнена:**
- Регистр сведений `ОсновныеСтавкиНДС` **отсутствует** в старой конфигурации `CRM3devLocal`
- Справочник `СтавкиНДС` **отсутствует** в старой конфигурации `CRM3devLocal`
**Вывод:** Все найденные обработчики обновления, связанные с переходом на НДС 22%, **не требуют переноса** в старую конфигурацию.
**Итоговое решение:**
- ❌ Обработчик `СоздатьЭлементыСтавкиНДС` - не требуется (создает элементы справочника, который отсутствует)
- ❌ Обработчик установки основной ставки НДС 22% в регистре - не требуется (регистр отсутствует)
- ❌ Обработчик первоначального заполнения регистра - не требуется (регистр отсутствует)
**Рекомендация:** При переносе функционала НДС 22% в старую конфигурацию можно **полностью исключить** все обработчики обновления информационной базы, связанные с НДС 22%. Это подтверждает правильность выбранного подхода (вариант 2 - работа только с перечислением).
---
## Связь с документом "Оценка правок для переноса НДС 22%"
Данный анализ дополняет документ `Оценка_правок_для_переноса_НДС_22 (v1.3).md` информацией о конкретных обработчиках обновления, найденных в новой конфигурации.
**Соответствие с документом:**
- В документе указано, что обработчики обновления для создания элементов справочника исключены из необходимых изменений (строка 29)
- Данный анализ подтверждает это решение и уточняет, какие именно обработчики найдены и почему они не требуются
---
## Примечания
- Все найденные обработчики находятся в модуле `УчетНДСЛокализация` расширения новой конфигурации
- Обработчики связаны с версией "2.5.25.63" платформы 1С
- При переносе обработчиков необходимо учитывать различия в структуре данных между старой и новой конфигурациями
@@ -1,754 +0,0 @@
---
title: Анализ переноса обработки КредитНотаЗаПериод в новую конфигурацию
version: 1.4
date_created: 2026-01-08
date_modified: 2026-01-08
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
description: Анализ различий между старой и новой конфигурациями для переноса обработки КредитНотаЗаПериод. Определение замены документа СписаниеЗадолженности на КорректировкаЗадолженности и адаптация логики работы с признаком КредитНота через дополнительные реквизиты.
purpose: Документ предназначен для планирования и выполнения переноса обработки КредитНотаЗаПериод из старой конфигурации CRM3devLocal в новую конфигурацию CRM326/CRM326_TEST с учетом различий в структуре документов и механизме работы с признаком КредитНота.
show_metadata_block: true
show_index_link: true
show_toc: true
---
# Анализ переноса обработки КредитНотаЗаПериод в новую конфигурацию
## Версия анализа
Версия 1.4 от 08.01.2026
**Изменения в версии 1.4:**
-**Оптимизирована проверка признака Купон через временную таблицу:** Вместо подзапроса в каждом финальном запросе используется временная таблица `РеализацияТоваровУслугСКупоном`, которая создается один раз и используется в нескольких запросах
- ✅ Добавлена полная структура пакета запросов с временной таблицей для проверки признака Купон
- ✅ Обновлены все варианты проверки признака Купон с использованием временной таблицы
**Изменения в версии 1.3:**
-**Добавлена адаптация проверки признака Купон:** Условие `СчетФактураВыданный.ДокументОснование.Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)` заменено на проверку отсутствия записи в табличной части `ДополнительныеРеквизиты` с заполненным значением свойства `РК_Купон`
- ✅ Добавлен раздел 4 "Реализация признака Купон в новой конфигурации" с описанием механизма дополнительных реквизитов и адаптацией запросов
- ✅ Обновлен раздел "План действий для переноса" с подразделом 4.2.5 "Адаптация проверки признака Купон"
**Изменения в версии 1.2:**
-**Исправлена критическая ошибка в запросе:** Условие `ТИПЗНАЧЕНИЯ(ОбъектРасчетов) = ТИП(...)` заменено на соединение со справочником `ОбъектыРасчетов` и проверку реквизита `Объект`
- ✅ Добавлено объяснение структуры справочника `ОбъектыРасчетов` и его реквизита `Объект`
**Изменения в версии 1.1:**
- ✅ Выполнена проверка наличия реквизита `СтатьяРасходов` в документе `КорректировкаЗадолженности`
- ✅ Подтверждено отсутствие реквизита в шапке документа
- ✅ Найден аналог в табличной части `ДоходыРасходыАктивыПассивы` (реквизит `Статья`)
- ✅ Обновлены рекомендации по адаптации запросов с учетом фильтрации через табличную часть
-**Исправлена ошибка в запросе:** Условие `ТИПЗНАЧЕНИЯ(ОбъектРасчетов) = ТИП(...)` заменено на соединение со справочником `ОбъектыРасчетов` и проверку реквизита `Объект`
## Автор
Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
## Цель анализа
Определить различия между старой и новой конфигурациями для переноса обработки `КредитНотаЗаПериод`, включая замену документа `СписаниеЗадолженности` на аналог в новой конфигурации и адаптацию логики работы с признаком КредитНота через механизм дополнительных реквизитов.
## Результаты проверки
### ✅ Проверка наличия реквизита СтатьяРасходов
**Дата проверки:** 08.01.2026
**Результат:**
- ❌ Реквизит `СтатьяРасходов` **ОТСУТСТВУЕТ** в шапке документа `КорректировкаЗадолженности` в новой конфигурации
- ✅ Найден аналог в табличной части `ДоходыРасходыАктивыПассивы`: реквизит `Статья` (тип: `ChartOfCharacteristicTypesRef.СтатьиРасходов` или `СтатьиАктивовПассивов` или `СтатьиДоходов`)
**Вывод:**
Для фильтрации по статье в новой конфигурации необходимо использовать подзапрос к табличной части `ДоходыРасходыАктивыПассивы` вместо прямого обращения к реквизиту в шапке документа.
### ✅ Проверка работы с полем ОбъектРасчетов
**Дата проверки:** 08.01.2026
**Результат:**
-**Критическая ошибка выявлена:** Условие `ТИПЗНАЧЕНИЯ(ОбъектРасчетов) = ТИП("СправочникСсылка.ЗаказКлиента")` **НИКОГДА НЕ ВЫПОЛНИТСЯ**
- В новой конфигурации `ОбъектРасчетов` - это справочник `CatalogRef.ОбъектыРасчетов`, а не составной тип
- Справочник `ОбъектыРасчетов` имеет реквизит `Объект` типа `DefinedType.ОбъектРасчетов` (составной тип), который может содержать ссылку на `ЗаказКлиента`
**Правильное решение:**
- Добавить соединение со справочником `ОбъектыРасчетов` в запросе
- Использовать условие `ОбъектыРасчетов.Объект ССЫЛКА Документ.ЗаказКлиента` вместо `ТИПЗНАЧЕНИЯ(...)`
**Вывод:**
Для получения заказа клиента из поля `ОбъектРасчетов` необходимо использовать соединение со справочником `ОбъектыРасчетов` и проверять реквизит `Объект`, а не сам `ОбъектРасчетов`.
---
## 1. Различия в документах
### 1.1. Старая конфигурация (CRM3devLocal)
**Документ:** `СписаниеЗадолженности`
**Структура:**
- **Табличная часть:** `Задолженность`
- **Поля в табличной части:**
- `Заказ` (тип: `ОбъектРасчетов`) - **используется в обработке**
- `Партнер` (тип: `CatalogRef.Партнеры`)
- `Сумма` (тип: `ДенежнаяСуммаНеотрицательная`)
- `ВалютаВзаиморасчетов` (тип: `CatalogRef.Валюты`)
- `ИдентификаторСтроки` (тип: `String`)
- **Реквизиты в шапке документа:**
- `СтатьяРасходов` (тип: `ChartOfCharacteristicTypesRef.СтатьиРасходов`) - **используется в обработке**
**Расположение:** `crm3-dev/src/Documents/СписаниеЗадолженности/`
### 1.2. Новая конфигурация (CRM326/CRM326_TEST)
**Документ:** `КорректировкаЗадолженности`
**Структура:**
- **Табличная часть:** `Задолженность`
- **Поля в табличной части:**
- `ОбъектРасчетов` (тип: `CatalogRef.ОбъектыРасчетов` или `CatalogRef.ДоговорыКредитовИДепозитов`) - **аналог поля Заказ**
- `Партнер` (тип: `CatalogRef.Партнеры`)
- `Сумма` (тип: `ДенежнаяСуммаНеотрицательная`)
- `ВалютаВзаиморасчетов` (тип: `CatalogRef.Валюты`)
- `ИдентификаторСтроки` (тип: `String`)
- `ТипРасчетов` (тип: `EnumRef.ТипыРасчетовСПартнерами`)
- `ДатаПлатежа` (тип: `Date`)
- **Реквизиты в шапке документа:**
- `Организация` (тип: `CatalogRef.Организации`)
- `Контрагент` (тип: `CatalogRef.Организации` или `CatalogRef.Контрагенты`)
- `ХозяйственнаяОперация` (тип: `EnumRef.ХозяйственныеОперации`)
- `Комментарий` (тип: `String`)
- `РасчетыМеждуОрганизациями` (тип: `Boolean`)
- `Основание` (тип: `DocumentRef.ПриобретениеТоваровУслуг`)
- `АктОРасхожденияхОснование` (тип: `DocumentRef.АктОРасхожденияхПослеПриемки`)
-**Реквизит `СтатьяРасходов` отсутствует в шапке документа**
- **Табличная часть:** `ДоходыРасходыАктивыПассивы`
- `Статья` (тип: `ChartOfCharacteristicTypesRef.СтатьиРасходов` или `СтатьиАктивовПассивов` или `СтатьиДоходов`) - **аналог реквизита СтатьяРасходов, но в табличной части**
**Расположение:** `crm3-26-test/src/Documents/КорректировкаЗадолженности/`
### 1.3. Ключевые различия
| Параметр | Старая конфигурация | Новая конфигурация |
|----------|---------------------|-------------------|
| Название документа | `СписаниеЗадолженности` | `КорректировкаЗадолженности` |
| Поле для заказа | `Заказ` (тип: `ОбъектРасчетов`) | `ОбъектРасчетов` (тип: `CatalogRef`) |
| СтатьяРасходов | В шапке документа | ⚠️ Требуется проверка |
---
## 2. Использование в обработке КредитНотаЗаПериод
### 2.1. Текущая реализация в старой конфигурации
**Расположение:** `crm3-dev/src/DataProcessors/КредитНотаЗаПериод/Forms/Форма/Ext/Form/Module.bsl`
**Запрос к документу СписаниеЗадолженности:**
```bsl
ВЫБРАТЬ
СписаниеЗадолженностиЗадолженность.Заказ,
СписаниеЗадолженностиЗадолженность.Партнер,
СписаниеЗадолженностиЗадолженность.Сумма,
СписаниеЗадолженностиЗадолженность.Ссылка.Дата,
СписаниеЗадолженностиЗадолженность.Ссылка.СтатьяРасходов
ПОМЕСТИТЬ СписаниеЗадолжености
ИЗ
Документ.СписаниеЗадолженности.Задолженность КАК СписаниеЗадолженностиЗадолженность
ГДЕ
СписаниеЗадолженностиЗадолженность.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И СписаниеЗадолженностиЗадолженность.Ссылка.Проведен = ИСТИНА
И СписаниеЗадолженностиЗадолженность.Ссылка.СтатьяРасходов = &СтатьяРасходов
И СписаниеЗадолженностиЗадолженность.Партнер = &Партнер
```
**Логика работы:**
1. Находит документы "Списание задолженности" за период
2. Определяет заказы клиентов, связанные с этими списаниями (через поле `Заказ`)
3. Находит счета-фактуры выданные по этим заказам
4. Разделяет счета-фактуры на две группы:
- **КредитНоты** - счета-фактуры по заказам, связанным с кредит-нотами
- **НеКредитНоты** - остальные счета-фактуры
### 2.2. Необходимые изменения для новой конфигурации
**Адаптированный запрос:**
```bsl
ВЫБРАТЬ
ОбъектыРасчетов.Объект КАК Заказ,
КорректировкаЗадолженностиЗадолженность.Партнер,
КорректировкаЗадолженностиЗадолженность.Сумма,
КорректировкаЗадолженностиЗадолженность.Ссылка.Дата,
// ❌ СтатьяРасходов отсутствует в шапке документа
// Вместо этого используется табличная часть ДоходыРасходыАктивыПассивы со статьей
// Для фильтрации по статье необходимо использовать подзапрос или соединение
ПОМЕСТИТЬ КорректировкаЗадолженности
ИЗ
Документ.КорректировкаЗадолженности.Задолженность КАК КорректировкаЗадолженностиЗадолженность
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
ПО ОбъектыРасчетов.Ссылка = КорректировкаЗадолженностиЗадолженность.ОбъектРасчетов
ГДЕ
КорректировкаЗадолженностиЗадолженность.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И КорректировкаЗадолженностиЗадолженность.Ссылка.Проведен = ИСТИНА
// ❌ Условие по СтатьяРасходов удалено - реквизит отсутствует в шапке
// Альтернатива: фильтрация через табличную часть ДоходыРасходыАктивыПассивы
// И КорректировкаЗадолженностиЗадолженность.Ссылка.СтатьяРасходов = &СтатьяРасходов
И КорректировкаЗадолженностиЗадолженность.Партнер = &Партнер
// ✅ Исправлено: ОбъектРасчетов - это справочник, нужно проверять реквизит Объект
И ОбъектыРасчетов.Объект ССЫЛКА Документ.ЗаказКлиента
// Дополнительная фильтрация по статье через табличную часть (если требуется)
И КорректировкаЗадолженностиЗадолженность.Ссылка В
(ВЫБРАТЬ РАЗЛИЧНЫЕ
КорректировкаЗадолженностиДоходыРасходы.Ссылка
ИЗ
Документ.КорректировкаЗадолженности.ДоходыРасходыАктивыПассивы КАК КорректировкаЗадолженностиДоходыРасходы
ГДЕ
КорректировкаЗадолженностиДоходыРасходы.Статья = &СтатьяРасходов)
```
**Критические моменты:**
1.**Тип данных `ОбъектРасчетов`:** В новой конфигурации это справочник `CatalogRef.ОбъектыРасчетов`, а не составной тип. Для получения заказа клиента необходимо:
- Добавить соединение со справочником `ОбъектыРасчетов`
- Проверять реквизит `Объект` справочника (который имеет тип `DefinedType.ОбъектРасчетов` и может содержать ссылку на `ЗаказКлиента`)
- Использовать условие `ОбъектыРасчетов.Объект ССЫЛКА Документ.ЗаказКлиента` вместо `ТИПЗНАЧЕНИЯ(...)`
2.**Реквизит `СтатьяРасходов`:** **ОТСУТСТВУЕТ в шапке документа.** Вместо него используется табличная часть `ДоходыРасходыАктивыПассивы` с реквизитом `Статья`. Для фильтрации по статье необходимо использовать подзапрос или соединение с табличной частью.
---
## 3. Реализация признака КредитНота в новой конфигурации
### 3.1. Механизм дополнительных реквизитов
**В расширении новой конфигурации (`crm3-26-test.rhana`):**
**Расположение:** `crm3-26-test.rhana/src/Documents/РеализацияТоваровУслуг/Ext/ObjectModule.bsl`
**Реализация:**
- Дополнительное свойство: `РК_КредитНота` для документа `РеализацияТоваровУслуг`
- Реализовано через план видов характеристик `ДополнительныеРеквизитыИСведения`
- В модуле документа есть код: `рк_ИменаДопСвойств.Добавить("РК_КредитНота");`
### 3.2. Отличия от старой конфигурации
| Параметр | Старая конфигурация | Новая конфигурация |
|----------|---------------------|-------------------|
| Хранение признака | Реквизит `КредитНота` в документе `ЗаказКлиента` (тип: `Boolean`) | Дополнительное свойство `РК_КредитНота` в документе `РеализацияТоваровУслуг` |
| Доступ к признаку | Прямой доступ: `ЗаказКлиента.КредитНота` | Через `УправлениеСвойствами.ЗначениеСвойства(РеализацияТоваровУслуг, "РК_КредитНота")` |
| Механизм | Встроенный реквизит | План видов характеристик `ДополнительныеРеквизитыИСведения` |
### 3.3. Адаптация работы с признаком в обработке
**В старой конфигурации:**
```bsl
// Прямой доступ к реквизиту
ЗаказКлиента.КредитНота = ИСТИНА
```
**В новой конфигурации:**
```bsl
// Доступ через дополнительные реквизиты
КредитНота = УправлениеСвойствами.ЗначениеСвойства(
РеализацияТоваровУслуг,
"РК_КредитНота"
);
```
**Альтернативный вариант через запрос:**
```bsl
ВЫБРАТЬ
ДополнительныеРеквизиты.Объект КАК РеализацияТоваровУслуг,
ДополнительныеРеквизиты.Значение КАК КредитНота
ИЗ
РегистрСведений.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизиты
ГДЕ
ДополнительныеРеквизиты.Свойство = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.РК_КредитНота)
И ДополнительныеРеквизиты.Значение = ИСТИНА
```
---
## 4. Реализация признака Купон в новой конфигурации
### 4.1. Механизм дополнительных реквизитов
**В расширении новой конфигурации (`crm3-26-test.rhana`):**
**Расположение:** `crm3-26-test.rhana/src/Documents/РеализацияТоваровУслуг/Ext/ObjectModule.bsl`
**Реализация:**
- Дополнительное свойство: `РК_Купон` для документа `РеализацияТоваровУслуг`
- Реализовано через план видов характеристик `ДополнительныеРеквизитыИСведения`
- В модуле документа есть код: `рк_ИменаДопСвойств.Добавить("РК_Купон");`
### 4.2. Отличия от старой конфигурации
| Параметр | Старая конфигурация | Новая конфигурация |
|----------|---------------------|-------------------|
| Хранение признака | Реквизит `Купон` в документе `РеализацияТоваровУслуг` (тип: `CatalogRef.Купоны`) | Дополнительное свойство `РК_Купон` в документе `РеализацияТоваровУслуг` |
| Проверка пустого значения | `РеализацияТоваровУслуг.Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)` | Через проверку отсутствия записи в табличной части `ДополнительныеРеквизиты` или через `УправлениеСвойствами` |
| Механизм | Встроенный реквизит | План видов характеристик `ДополнительныеРеквизитыИСведения` |
### 4.3. Адаптация работы с признаком в запросах
**В старой конфигурации (строки 47 и 67 функции `ПолучитьДанные`):**
```bsl
И СчетФактураВыданный.ДокументОснование.Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)
```
**В новой конфигурации:**
**Вариант 1: Проверка через временную таблицу (рекомендуется для производительности):**
**Создание временной таблицы (добавить в начало пакета запросов):**
```bsl
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДополнительныеРеквизиты.Ссылка КАК Ссылка
ПОМЕСТИТЬ РеализацияТоваровУслугСКупоном
ИЗ
Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
ПО ДополнительныеРеквизитыИСведения.Ссылка = ДополнительныеРеквизиты.Свойство
ГДЕ
ДополнительныеРеквизитыИСведения.НаименованиеДляРазработчика = "РК_Купон"
И ЗначениеЗаполнено(ДополнительныеРеквизиты.Значение)
;
```
**Использование временной таблицы в финальных запросах:**
```bsl
И НЕ СчетФактураВыданный.ДокументОснование.Ссылка В
(ВЫБРАТЬ
РеализацияТоваровУслугСКупоном.Ссылка
ИЗ
РеализацияТоваровУслугСКупоном КАК РеализацияТоваровУслугСКупоном)
```
**Преимущества:**
- ✅ Временная таблица создается один раз и используется в нескольких запросах
- ✅ Улучшает производительность за счет однократного выполнения подзапроса
- ✅ Упрощает структуру финальных запросов
**Вариант 2: Проверка через регистр сведений с временной таблицей (если используется регистр):**
**Создание временной таблицы:**
```bsl
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДополнительныеРеквизиты.Объект КАК Ссылка
ПОМЕСТИТЬ РеализацияТоваровУслугСКупоном
ИЗ
РегистрСведений.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизиты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
ПО ДополнительныеРеквизитыИСведения.Ссылка = ДополнительныеРеквизиты.Свойство
ГДЕ
ДополнительныеРеквизитыИСведения.НаименованиеДляРазработчика = "РК_Купон"
И ЗначениеЗаполнено(ДополнительныеРеквизиты.Значение)
;
```
**Использование временной таблицы в финальных запросах:**
```bsl
И НЕ СчетФактураВыданный.ДокументОснование.Ссылка В
(ВЫБРАТЬ
РеализацияТоваровУслугСКупоном.Ссылка
ИЗ
РеализацияТоваровУслугСКупоном КАК РеализацияТоваровУслугСКупоном)
```
**Примечание:** Условие `НЕ ... В (...)` проверяет, что документ `РеализацияТоваровУслуг` **НЕ** имеет заполненного дополнительного свойства `РК_Купон`, что эквивалентно проверке `Купон = ПустаяСсылка` в старой конфигурации.
### 4.4. Критические моменты
1.**Проверка пустого значения:** В старой конфигурации проверка `Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)` означает, что поле не заполнено. В новой конфигурации это эквивалентно отсутствию записи в табличной части `ДополнительныеРеквизиты` с заполненным значением свойства `РК_Купон`.
2.**Производительность:** Использование временной таблицы `РеализацияТоваровУслугСКупоном` оптимизирует запрос, так как подзапрос выполняется один раз, а не в каждом финальном запросе.
3.**Логика работы:** Условие используется в двух запросах функции `ПолучитьДанные`:
- Запрос для получения кредит-нот по заказам (строка 47)
- Запрос для получения остальных документов (строка 67)
---
## 4. План действий для переноса
### 4.1. Этап 1: Анализ и оценка
#### 4.1.1. Проверка наличия реквизита СтатьяРасходов
**✅ Проверка выполнена:**
**Результат:** Реквизит `СтатьяРасходов` **ОТСУТСТВУЕТ** в шапке документа `КорректировкаЗадолженности` в новой конфигурации.
**Найденная альтернатива:**
- В табличной части `ДоходыРасходыАктивыПассивы` есть реквизит `Статья` (тип: `ChartOfCharacteristicTypesRef.СтатьиРасходов` или `СтатьиАктивовПассивов` или `СтатьиДоходов`)
- Это аналог реквизита `СтатьяРасходов`, но находится в табличной части, а не в шапке
**Рекомендации:**
1. Если фильтрация по статье обязательна, использовать подзапрос к табличной части `ДоходыРасходыАктивыПассивы`
2. Если фильтрация не критична, убрать условие из запроса
3. Учесть, что в новой конфигурации один документ может иметь несколько статей (в разных строках табличной части)
#### 4.1.2. Сравнение типов данных
**✅ Проверка выполнена:**
**Результат:**
- В новой конфигурации `ОбъектРасчетов` - это справочник `CatalogRef.ОбъектыРасчетов`, а не составной тип
- Справочник `ОбъектыРасчетов` имеет реквизит `Объект` типа `DefinedType.ОбъектРасчетов` (составной тип)
- Реквизит `Объект` может содержать ссылку на `ЗаказКлиента` и другие документы
**Решение:**
- Использовать соединение со справочником `ОбъектыРасчетов` в запросе
- Проверять реквизит `Объект` справочника через условие `ОбъектыРасчетов.Объект ССЫЛКА Документ.ЗаказКлиента`
-**НЕ использовать:** `ТИПЗНАЧЕНИЯ(ОбъектРасчетов) = ТИП(...)` - это условие никогда не выполнится
#### 4.1.3. Проверка логики работы с признаком КредитНота
**Действия:**
1. Изучить реализацию дополнительного свойства `РК_КредитНота` в расширении
2. Проверить корректность работы механизма `УправлениеСвойствами`
3. Протестировать получение значения свойства через запросы
4. Определить оптимальный способ работы с признаком в обработке
### 4.2. Этап 2: Адаптация запросов
#### 4.2.1. Замена документа в запросах
**Изменения:**
- `Документ.СписаниеЗадолженности``Документ.КорректировкаЗадолженности`
- `СписаниеЗадолженностиЗадолженность``КорректировкаЗадолженностиЗадолженность`
- `СписаниеЗадолжености``КорректировкаЗадолженности`
#### 4.2.2. Замена поля Заказ на ОбъектРасчетов
**✅ Исправлено:**
**Изменения:**
- `СписаниеЗадолженностиЗадолженность.Заказ``ОбъектыРасчетов.Объект КАК Заказ` (через соединение со справочником)
- Добавить соединение со справочником:
```bsl
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
ПО ОбъектыРасчетов.Ссылка = КорректировкаЗадолженностиЗадолженность.ОбъектРасчетов
```
- ❌ **НЕ использовать:** `ТИПЗНАЧЕНИЯ(ОбъектРасчетов) = ТИП(...)` - это условие никогда не выполнится
- ✅ **Использовать:** `И ОбъектыРасчетов.Объект ССЫЛКА Документ.ЗаказКлиента`
#### 4.2.3. Адаптация фильтрации по СтатьяРасходов
**✅ Решение принято:**
**Реквизит `СтатьяРасходов` отсутствует в шапке документа.** Используется альтернативный подход:
**Вариант 1: Фильтрация через табличную часть (рекомендуется, если фильтрация обязательна):**
```bsl
И КорректировкаЗадолженностиЗадолженность.Ссылка В
(ВЫБРАТЬ РАЗЛИЧНЫЕ
КорректировкаЗадолженностиДоходыРасходы.Ссылка
ИЗ
Документ.КорректировкаЗадолженности.ДоходыРасходыАктивыПассивы КАК КорректировкаЗадолженностиДоходыРасходы
ГДЕ
КорректировкаЗадолженностиДоходыРасходы.Статья = &СтатьяРасходов)
```
**Вариант 2: Убрать условие фильтрации (если фильтрация не критична):**
- Удалить условие `И КорректировкаЗадолженностиЗадолженность.Ссылка.СтатьяРасходов = &СтатьяРасходов`
- Документировать причину изменения
**Примечание:** В новой конфигурации один документ может иметь несколько статей в разных строках табличной части, что может повлиять на логику фильтрации.
#### 4.2.4. Адаптация работы с признаком КредитНота
**Изменения:**
- Вместо прямого доступа `ЗаказКлиента.КредитНота` использовать:
- `УправлениеСвойствами.ЗначениеСвойства(РеализацияТоваровУслуг, "РК_КредитНота")`
- Или запрос к регистру `ДополнительныеРеквизитыИСведения`
#### 4.2.5. Адаптация проверки признака Купон
**✅ Решение принято:**
**В старой конфигурации (строки 47 и 67 функции `ПолучитьДанные`):**
```bsl
И СчетФактураВыданный.ДокументОснование.Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)
```
**В новой конфигурации:**
**Структура пакета запросов с временной таблицей:**
**1. Создание временной таблицы (добавить после создания таблицы `ЗаказыПоКредитНоте`):**
```bsl
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДополнительныеРеквизиты.Ссылка КАК Ссылка
ПОМЕСТИТЬ РеализацияТоваровУслугСКупоном
ИЗ
Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
ПО ДополнительныеРеквизитыИСведения.Ссылка = ДополнительныеРеквизиты.Свойство
ГДЕ
ДополнительныеРеквизитыИСведения.НаименованиеДляРазработчика = "РК_Купон"
И ЗначениеЗаполнено(ДополнительныеРеквизиты.Значение)
;
```
**2. Использование временной таблицы в запросе для получения кредит-нот по заказам:**
```bsl
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СчетФактураВыданный.ДокументОснование.Ссылка КАК РеализацияТоваровУслуг,
СчетФактураВыданный.Ссылка КАК СчетФактураВыданный
ИЗ
Документ.СчетФактураВыданный КАК СчетФактураВыданный
ГДЕ
СчетФактураВыданный.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И НЕ СчетФактураВыданный.ДокументОснование.Ссылка В
(ВЫБРАТЬ
РеализацияТоваровУслугСКупоном.Ссылка
ИЗ
РеализацияТоваровУслугСКупоном КАК РеализацияТоваровУслугСКупоном)
И СчетФактураВыданный.ДокументОснование.ЗаказКлиента В
(ВЫБРАТЬ
ЗаказыПоКредитНоте.Ссылка
ИЗ
ЗаказыПоКредитНоте КАК ЗаказыПоКредитНоте)
УПОРЯДОЧИТЬ ПО
СчетФактураВыданный.ДокументОснование.Дата
;
```
**3. Использование временной таблицы в запросе для получения остальных документов:**
```bsl
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СчетФактураВыданный.ДокументОснование.Ссылка КАК РеализацияТоваровУслуг,
СчетФактураВыданный.Ссылка КАК СчетФактураВыданный
ИЗ
Документ.СчетФактураВыданный КАК СчетФактураВыданный
ГДЕ
СчетФактураВыданный.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И СчетФактураВыданный.ДокументОснование.Партнер = &Партнер
И НЕ СчетФактураВыданный.ДокументОснование.Ссылка В
(ВЫБРАТЬ
РеализацияТоваровУслугСКупоном.Ссылка
ИЗ
РеализацияТоваровУслугСКупоном КАК РеализацияТоваровУслугСКупоном)
И СчетФактураВыданный.ДокументОснование.Ссылка В
(ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Номенклатура В ИЕРАРХИИ (&Номенклатура))
И НЕ СчетФактураВыданный.ДокументОснование.ЗаказКлиента В
(ВЫБРАТЬ
ЗаказыПоКредитНоте.Ссылка
ИЗ
ЗаказыПоКредитНоте КАК ЗаказыПоКредитНоте)
УПОРЯДОЧИТЬ ПО
СчетФактураВыданный.ДокументОснование.Дата
;
```
**Изменения:**
- `СчетФактураВыданный.ДокументОснование.Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)` → `НЕ СчетФактураВыданный.ДокументОснование.Ссылка В (ВЫБРАТЬ ... ИЗ РеализацияТоваровУслугСКупоном)`
- Добавлена временная таблица `РеализацияТоваровУслугСКупоном` для оптимизации производительности
- Временная таблица создается один раз и используется в двух финальных запросах
**Преимущества использования временной таблицы:**
- ✅ Подзапрос выполняется один раз вместо двух
- ✅ Улучшает производительность запросов
- ✅ Упрощает структуру финальных запросов
- ✅ Соответствует структуре пакета запросов в старой конфигурации
**Примечание:** Условие `НЕ ... В (...)` проверяет, что документ `РеализацияТоваровУслуг` **НЕ** имеет заполненного дополнительного свойства `РК_Купон`, что эквивалентно проверке `Купон = ПустаяСсылка` в старой конфигурации.
### 4.3. Этап 3: Реализация в расширении
#### 4.3.1. Создание структуры обработки
**Действия:**
1. Создать обработку `КредитНотаЗаПериод` в расширении новой конфигурации
2. Путь: `crm3-26-test.rhana/src/DataProcessors/КредитНотаЗаПериод/`
3. Скопировать структуру из старой конфигурации:
- Форма обработки
- Макеты печати (если используются)
- Модули
#### 4.3.2. Адаптация модуля формы обработки
**Изменения:**
1. Обновить все запросы для работы с `КорректировкаЗадолженности`
2. Добавить логику работы с дополнительными реквизитами для признака КредитНота
3. Сохранить логику формирования печатных форм
4. Адаптировать все функции и процедуры под новую структуру данных
#### 4.3.3. Проверка зависимостей
**Проверить наличие:**
- Макеты печати (если используются)
- Общие модули:
- `РаботаСКурсамиВалют`
- `ФормированиеПечатныхФорм`
- `ПрефиксацияОбъектовКлиентСервер`
- `ПредставлениеДокументов`
- Общие формы:
- `СписокДокументовПодКредитНоту` (если используется)
### 4.4. Этап 4: Тестирование
#### 4.4.1. Проверка корректности запросов
**Действия:**
1. Выполнить все запросы в консоли запросов новой конфигурации
2. Проверить типы возвращаемых данных
3. Убедиться в корректности фильтрации
4. Проверить производительность запросов
#### 4.4.2. Проверка работы с данными
**Действия:**
1. Создать тестовые документы `КорректировкаЗадолженности`
2. Проверить связь с заказами клиентов через поле `ОбъектРасчетов`
3. Проверить работу с признаком `РК_КредитНота` в документах `РеализацияТоваровУслуг`
4. Протестировать формирование списка заказов по кредит-нотам
#### 4.4.3. Проверка формирования отчетов
**Действия:**
1. Проверить корректность печатных форм
2. Убедиться в правильности сумм и расчетов
3. Проверить форматирование данных
4. Протестировать экспорт в Word (если используется)
---
## 5. Дополнительные рекомендации
### 5.1. Документирование изменений
**Рекомендации:**
1. Зафиксировать все изменения в запросах
2. Описать различия в структуре данных
3. Создать инструкцию по использованию обработки в новой конфигурации
4. Документировать все найденные ограничения и особенности
### 5.2. Обратная совместимость
**Рекомендации:**
1. Если требуется поддержка старой логики, рассмотреть условную обработку
2. Возможно, использовать препроцессорные директивы для различения версий
3. Обеспечить возможность работы с данными из обеих конфигураций (если требуется)
### 5.3. Оптимизация
**Рекомендации:**
1. Проверить производительность запросов с дополнительными реквизитами
2. При необходимости оптимизировать через индексы или временные таблицы
3. Рассмотреть кэширование часто используемых данных
4. Профилировать работу обработки на реальных объемах данных
---
## 6. Критические моменты
### 6.1. Тип данных ОбъектРасчетов
**✅ Проблема выявлена и решена:**
- В старой конфигурации: `Заказ` типа `DefinedType.ОбъектРасчетов` (составной тип, может быть `ЗаказКлиента`)
- В новой конфигурации: `ОбъектРасчетов` типа `CatalogRef.ОбъектыРасчетов` или `CatalogRef.ДоговорыКредитовИДепозитов` (справочник)
**Структура справочника `ОбъектыРасчетов`:**
- Справочник имеет реквизит `Объект` типа `DefinedType.ОбъектРасчетов` (составной тип)
- Реквизит `Объект` может содержать ссылку на `ЗаказКлиента` и другие документы
**Решение:**
- ❌ **НЕПРАВИЛЬНО:** `ТИПЗНАЧЕНИЯ(ОбъектРасчетов) = ТИП("СправочникСсылка.ЗаказКлиента")` - никогда не выполнится, т.к. `ОбъектРасчетов` - это справочник, а не документ
- ✅ **ПРАВИЛЬНО:** Добавить соединение со справочником и проверять реквизит `Объект`:
```bsl
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
ПО ОбъектыРасчетов.Ссылка = КорректировкаЗадолженностиЗадолженность.ОбъектРасчетов
...
И ОбъектыРасчетов.Объект ССЫЛКА Документ.ЗаказКлиента
```
### 6.2. Отсутствие реквизита СтатьяРасходов
**✅ Проблема подтверждена:**
- В старой конфигурации реквизит `СтатьяРасходов` находится в шапке документа и используется для фильтрации
- В новой конфигурации реквизит `СтатьяРасходов` **ОТСУТСТВУЕТ** в шапке документа
**Найденная альтернатива:**
- В табличной части `ДоходыРасходыАктивыПассивы` есть реквизит `Статья` (тип: `ChartOfCharacteristicTypesRef.СтатьиРасходов` или другие)
- Это аналог реквизита `СтатьяРасходов`, но находится в табличной части
**Решение:**
1. **Если фильтрация обязательна:** Использовать подзапрос к табличной части `ДоходыРасходыАктивыПассивы` для фильтрации по статье
2. **Если фильтрация не критична:** Убрать условие фильтрации по статье
3. **Учесть особенности:** В новой конфигурации один документ может иметь несколько статей в разных строках табличной части
### 6.3. Работа с дополнительными реквизитами
**Проблема:**
- Запросы к дополнительным реквизитам могут быть медленнее прямых запросов к реквизитам
- Необходимо использовать `УправлениеСвойствами` или запросы к регистру
**Решение:**
- Оптимизировать запросы через временные таблицы
- Рассмотреть кэширование значений признака КредитНота
- Профилировать производительность на реальных данных
---
## 7. Выводы
### 7.1. Основные выводы
1. **Документ заменен:** `СписаниеЗадолженности` → `КорректировкаЗадолженности`
2. **Поле заменено:** `Заказ` → `ОбъектРасчетов` (требуется фильтрация по типу)
3. **Признак КредитНота:** Переведен на механизм дополнительных реквизитов
4. **Реквизит СтатьяРасходов:** Требуется проверка наличия в новой конфигурации
### 7.2. Необходимые действия
1. ✅ **Выполнено:** Проверено наличие реквизита `СтатьяРасходов` в документе `КорректировкаЗадолженности` - **отсутствует в шапке, есть аналог в табличной части**
2. ⏳ Протестировать работу с полем `ОбъектРасчетов` и фильтрацию по типу
3. ⏳ Адаптировать все запросы в обработке под новую структуру (включая фильтрацию по статье через табличную часть)
4. ⏳ Реализовать работу с признаком КредитНота через дополнительные реквизиты
5. ⏳ Протестировать обработку на реальных данных
### 7.3. Оценка сложности переноса
- **Средняя-высокая сложность:** Требуется адаптация запросов, логики работы с признаком и фильтрации по статье через табличную часть
- **Риски:**
- Различия в типах данных (`ОбъектРасчетов` вместо `Заказ`)
- Отсутствие реквизита `СтатьяРасходов` в шапке (требуется фильтрация через табличную часть)
- Возможность нескольких статей в одном документе (влияет на логику фильтрации)
- **Время:** Ориентировочно 2-3 дня на адаптацию и тестирование
---
## 8. Приложения
### 8.1. Сравнительная таблица документов
| Параметр | СписаниеЗадолженности (старая) | КорректировкаЗадолженности (новая) |
|----------|--------------------------------|-----------------------------------|
| Название | `СписаниеЗадолженности` | `КорректировкаЗадолженности` |
| Табличная часть | `Задолженность` | `Задолженность` |
| Поле для заказа | `Заказ` (ОбъектРасчетов) | `ОбъектРасчетов` (CatalogRef) |
| Партнер | ✅ Есть | ✅ Есть |
| Сумма | ✅ Есть | ✅ Есть |
| СтатьяРасходов | ✅ В шапке документа | ❌ Отсутствует в шапке |
| Статья | ❌ Нет | ✅ В табличной части `ДоходыРасходыАктивыПассивы` |
### 8.2. Сравнительная таблица признака КредитНота
| Параметр | Старая конфигурация | Новая конфигурация |
|----------|---------------------|-------------------|
| Хранение | Реквизит в `ЗаказКлиента` | Дополнительное свойство в `РеализацияТоваровУслуг` |
| Тип | `Boolean` | `Boolean` (через план видов характеристик) |
| Доступ | Прямой: `ЗаказКлиента.КредитНота` | Через `УправлениеСвойствами` |
| Имя свойства | `КредитНота` | `РК_КредитНота` |
---
**Дата создания:** 08.01.2026
**Дата последнего изменения:** 08.01.2026
**Версия:** 1.0
@@ -1,871 +0,0 @@
---
title: Анализ необходимости переноса функционала печати пакета документов и доработок складского учета
version: 3.0
date_modified: 2025-12-21
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
date_created: 2025-12-21
show_metadata_block: true
show_index_link: true
---
# Анализ необходимости переноса функционала печати пакета документов и доработок складского учета
## Версия документа
Версия 3.0 от 21.12.2025
**Изменения в версии 3.0:**
- Реорганизована структура документа: типовой функционал вынесен в отдельный раздел
- Раздел "Сравнение доработок с эталонной конфигурацией" перемещен в начало документа (раздел 1)
- Создан раздел 2 "Типовой функционал (не требует переноса)" для четкого разделения типового и кастомного функционала
- Раздел 3 "Кастомные доработки, требующие переноса" сфокусирован на доработках, которые необходимо перенести
- Убраны упоминания типового функционала из основного анализа кастомных доработок
**Изменения в версии 2.0:**
- Добавлен раздел сравнения доработок с эталонной типовой конфигурацией
- Проведено сравнение модулей локализации с эталонной конфигурацией CRM302228_etalon
- Определены кастомные доработки, требующие переноса
- Выявлено, что команды печати ТОРГ-12 являются типовыми (присутствуют в эталоне)
## Автор
Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
## Цель анализа
Провести глубокий анализ по необходимости переноса из исходной конфигурации (включая расширение) в целевую **кастомных доработок** функционала печати пакета документов (ТОРГ-12, Счет-фактура и сопроводительные документы) при формировании ордера на отгрузку (складской учет). Также провести анализ доработок или иного функционала в исходной конфигурации по отношению к целевой в разделах складского учета и логистики.
**Важно:**
- В данном анализе основное внимание уделяется **кастомным доработкам**, требующим переноса.
- Типовой функционал, присутствующий в эталонной конфигурации `CRM302228_etalon`, вынесен в раздел 2 и **не требует переноса**.
- Все кастомные доработки, требующие переноса, описаны в разделе 3.
## Краткое резюме
**Типовой функционал (не требует переноса):**
- Процедуры и функции печати в документе РасходныйОрдерНаТовары (`ДобавитьКомандыПечати()`, `Печать()`, `ПечатьРасходногоОрдераНаТовары()`)
- Команды печати ТОРГ-12 в модуле `РеализацияТоваровУслугЛокализация`
**Кастомные доработки, требующие переноса (критические):**
1. Функционал печати расходного ордера по основанию (модули локализации + функции в документе РасходныйОрдерНаТовары)
2. Раздел "Комплект печатных документов" в форме УправлениеОтгрузкой
3. Раздел "Дополнительная обработка" в форме НастройкаПечатиКомплекта
**Детальный анализ:** см. раздел 3 "Кастомные доработки, требующие переноса"
---
## 1. Сравнение доработок с эталонной типовой конфигурацией
### 1.1. Методология сравнения
**Эталонная конфигурация:** `CRM302228_etalon` - типовая эталонная конфигурация версии исходной конфигурации.
**Цель сравнения:** Определить, какие "доработки" в исходной конфигурации на самом деле являются типовыми (присутствуют в эталонной конфигурации), а какие являются кастомными доработками, требующими переноса.
### 1.2. Результаты сравнения
#### 1.2.1. Документ "РасходныйОрдерНаТовары"
**Типовой функционал (присутствует в эталоне):**
- ✅ Процедура `ДобавитьКомандыПечати()` - добавляет команды печати:
- "Расходный ордер на товары"
- "Задание на отбор товаров"
- ✅ Процедура `Печать()` - выполняет печать расходного ордера
- ✅ Функция `ПечатьРасходногоОрдераНаТовары()` - формирует печатную форму расходного ордера
- ✅ Функция `ПолучитьДанныеДляПечатнойФормыОтборРазмещениеТоваров()` - получает данные для печати задания на отбор
**Кастомные доработки (отсутствуют в эталоне):**
- ❌ Функция `р_СформироватьПечатнуюФормуОрдераПоОснованию` - формирует печатную форму расходного ордера на основе документов-оснований
- ❌ Функция `р_ПолучитьОрдерыНаПечать` - получает список расходных ордеров, связанных с документами-основаниями
- ❌ Переопределение функции `р_ПечатьРасходногоОрдераНаТовары` - расширенная печатная форма с дополнительными данными по доставке
#### 1.2.2. Модули локализации
**Модуль `РеализацияТоваровУслугЛокализация`:**
**Типовой функционал:**
- ✅ Модуль присутствует в эталонной конфигурации
- ✅ Процедура `ДобавитьКомандыПечати()` с командами печати ТОРГ-12 (НЕ закомментированы в эталоне)
**Кастомные доработки:**
- ❌ Функционал добавления печатной формы "РасходныйОрдерНаТовары" в комплект печатных форм
- ❌ Процедура `СформироватьКомплектПечатныхФорм()` с логикой формирования печатной формы расходного ордера
- ❌ Процедура `КомплектПечатныхФорм()` с добавлением печатной формы расходного ордера
**Модуль `ПеремещениеТоваровЛокализация`:**
**Типовой функционал:**
- ✅ Модуль присутствует в эталонной конфигурации
- ✅ Процедура `ДобавитьКомандыПечати()` с командами печати (ТОРГ-13, М-11, ТТН и др.)
**Кастомные доработки:**
- ❌ Функционал добавления печатной формы "РасходныйОрдерНаТовары" в комплект печатных форм
- ❌ Процедура `СформироватьКомплектПечатныхФорм()` с логикой формирования печатной формы расходного ордера
- ❌ Процедура `КомплектПечатныхФорм()` с добавлением печатной формы расходного ордера
### 1.3. Итоговая таблица сравнения
| Объект/Функционал | Статус в эталоне | Тип | Требуется перенос |
|-------------------|------------------|-----|-------------------|
| Процедура `ДобавитьКомандыПечати()` в документе РасходныйОрдерНаТовары | ✅ Присутствует | Типовое | ❌ Нет |
| Процедура `Печать()` в документе РасходныйОрдерНаТовары | ✅ Присутствует | Типовое | ❌ Нет |
| Функция `ПечатьРасходногоОрдераНаТовары()` | ✅ Присутствует | Типовое | ❌ Нет |
| Команды печати ТОРГ-12 в модуле `РеализацияТоваровУслугЛокализация` | ✅ Присутствует | Типовое | ❌ Нет |
| Модуль `РеализацияТоваровУслугЛокализация`: добавление печатной формы расходного ордера | ❌ Отсутствует | Кастомная | ✅ Да |
| Модуль `ПеремещениеТоваровЛокализация`: добавление печатной формы расходного ордера | ❌ Отсутствует | Кастомная | ✅ Да |
| Функция `р_СформироватьПечатнуюФормуОрдераПоОснованию` | ❌ Отсутствует | Кастомная | ✅ Да |
| Функция `р_ПолучитьОрдерыНаПечать` | ❌ Отсутствует | Кастомная | ✅ Да |
| Переопределение `р_ПечатьРасходногоОрдераНаТовары` | ❌ Отсутствует | Кастомная | ✅ Да |
| Раздел "Комплект печатных документов" в форме УправлениеОтгрузкой | ⚠️ Требуется проверка | Вероятно кастомная | ✅ Да (предварительно) |
| Раздел "Дополнительная обработка" в форме НастройкаПечатиКомплекта | ⚠️ Требуется проверка | Вероятно кастомная | ✅ Да (предварительно) |
---
## 2. Типовой функционал (не требует переноса)
### 2.1. Документ "РасходныйОрдерНаТовары"
**Типовой функционал печати, присутствующий в эталонной конфигурации:**
- Процедура `ДобавитьКомандыПечати()` - добавляет команды печати:
- "Расходный ордер на товары"
- "Задание на отбор товаров"
- Процедура `Печать()` - выполняет печать расходного ордера
- Функция `ПечатьРасходногоОрдераНаТовары()` - формирует печатную форму расходного ордера
- Функция `ПолучитьДанныеДляПечатнойФормыОтборРазмещениеТоваров()` - получает данные для печати задания на отбор
**Вывод:** Данный функционал является типовым и уже должен присутствовать в целевой конфигурации. Перенос не требуется.
### 2.2. Модули локализации
**Модуль `РеализацияТоваровУслугЛокализация`:**
- Команды печати ТОРГ-12 (присутствуют в эталоне, в исходной конфигурации закомментированы)
**Модуль `ПеремещениеТоваровЛокализация`:**
- Команды печати (ТОРГ-13, М-11, ТТН и др.)
**Вывод:** Команды печати являются типовым функционалом. Перенос не требуется.
---
## 3. Кастомные доработки, требующие переноса
### 3.1. Функционал печати расходного ордера по основанию
#### 3.1.1. Описание доработки
**Расположение:**
- Расширение: `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/`
- Модули локализации:
- `CRM3devLocal.Рана/src/CommonModules/РеализацияТоваровУслугЛокализация/`
- `CRM3devLocal.Рана/src/CommonModules/ПеремещениеТоваровЛокализация/`
**Назначение:** Автоматическое добавление печатной формы расходного ордера на товары в комплект печатных форм документов Реализация и Перемещение при их печати.
#### 3.1.2. Реализованный функционал
**1. Модули локализации документов:**
- **`РеализацияТоваровУслугЛокализация`** (`CRM3devLocal.Рана/src/CommonModules/РеализацияТоваровУслугЛокализация/`)
- **`ПеремещениеТоваровЛокализация`** (`CRM3devLocal.Рана/src/CommonModules/ПеремещениеТоваровЛокализация/`)
**Реализованный функционал:**
-В модуле `РеализацияТоваровУслугЛокализация` реализовано добавление печатной формы "РасходныйОрдерНаТовары" в комплект печатных форм документа Реализация
- ✅ При печати документа Реализация автоматически формируется и выводится печатная форма расходного ордера на товары (через функцию `р_СформироватьПечатнуюФормуОрдераПоОснованию`)
- ✅ Аналогичный функционал реализован в модуле `ПеремещениеТоваровЛокализация` для документа Перемещение
**2. Документ РасходныйОрдерНаТовары в расширении:**
**Расположение:** `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/`
**Реализованные функции:**
- ✅ Функция `р_СформироватьПечатнуюФормуОрдераПоОснованию` (экспортная) - формирует печатную форму расходного ордера на основе документов-оснований (Реализация или Перемещение)
- ✅ Функция `р_ПолучитьОрдерыНаПечать` (экспортная) - получает список расходных ордеров, связанных с документами-основаниями
- ✅ Переопределение функции `р_ПечатьРасходногоОрдераНаТовары` - формирует расширенную печатную форму с дополнительными данными по доставке
#### 3.1.3. Логика работы
**Процесс использования:**
1. Пользователь печатает документ Реализация или Перемещение
2. Модуль локализации автоматически добавляет печатную форму "РасходныйОрдерНаТовары" в комплект печатных форм
3. При формировании комплекта вызывается функция `р_СформироватьПечатнуюФормуОрдераПоОснованию`
4. Функция `р_ПолучитьОрдерыНаПечать` находит связанные расходные ордера по документам-основаниям
5. Формируется расширенная печатная форма расходного ордера с данными по доставке
#### 3.1.4. Необходимость переноса
**Статус:** ⚠️ **КРИТИЧЕСКАЯ ДОРАБОТКА ДЛЯ ПЕРЕНОСА**
**Что необходимо перенести:**
1. **Модули локализации (расширение):**
- Процедура `КомплектПечатныхФорм()` в модуле `РеализацияТоваровУслугЛокализация`
- Процедура `СформироватьКомплектПечатныхФорм()` в модуле `РеализацияТоваровУслугЛокализация`
- Аналогичные процедуры в модуле `ПеремещениеТоваровЛокализация`
2. **Документ РасходныйОрдерНаТовары (расширение):**
- Функция `р_СформироватьПечатнуюФормуОрдераПоОснованию` (экспортная)
- Функция `р_ПолучитьОрдерыНаПечать` (экспортная)
- Переопределение функции `р_ПечатьРасходногоОрдераНаТовары`
3. **Зависимости:**
- Модули локализации зависят от стандартных модулей управления печатью
- Функции используют стандартные функции печати
- Требуется наличие документа РасходныйОрдерНаТовары в целевой конфигурации
**План переноса:**
1. Проверить наличие модулей локализации в целевой конфигурации
2. Добавить функционал в модули локализации через расширение целевой конфигурации
3. Добавить функции в документ РасходныйОрдерНаТовары через расширение целевой конфигурации
4. Протестировать автоматическое добавление печатной формы расходного ордера при печати документов Реализация и Перемещение
---
### 3.2. Доработка формы "УправлениеОтгрузкой" - раздел "Комплект печатных документов"
#### 3.2.1. Описание доработки
**Обработка:** `Обработка.УправлениеОтгрузкой`
**Форма:** `Обработка.УправлениеОтгрузкой.Форма`
**Расположение в исходной конфигурации:**
- Основная конфигурация: `CRM3devLocal/src/DataProcessors/УправлениеОтгрузкой/`
- Расширение: `CRM3devLocal.Рана/src/DataProcessors/УправлениеОтгрузкой/`
#### 3.2.2. Реализованный функционал
##### 3.2.2.1. Раздел "Комплект печатных документов"
**Описание:**
В форме обработки "УправлениеОтгрузкой" добавлен раздел "Комплект печатных документов" (группа `ГруппаСписокДляПечати`), который позволяет пользователю выбрать документы для печати пакета документов.
**Элементы формы:**
- **Группа `ГруппаСписокДляПечати`** - сворачиваемая группа с заголовком "Комплект печатных документов"
- По умолчанию свернута (`collapsed = true`)
- При разворачивании показывает таблицы документов для выбора
- **Таблица `РеализацииТоваровУслуг`** - динамический список документов Реализация товаров и услуг
- Используется для выбора документов Реализация для печати
- Имеет командную панель с подменю "Печать"
- **Таблица `ПеремещенияТоваров`** - динамический список документов Перемещение товаров
- Используется для выбора документов Перемещение для печати
- Имеет командную панель с подменю "Печать"
**Команда управления:**
- **Команда `ОтразитьРеализации`** (заголовок: "Для печати комплекта документов")
- Расположение: `CRM3devLocal.Рана/src/DataProcessors/УправлениеОтгрузкой/Forms/Форма/Form.form` (строки 6344-6364)
- Обработчик: `р_ОтразитьРеализацииПосле` (клиентский)
- Функционал: переключает видимость группы `ГруппаСписокДляПечати`
- При показе группы меняет картинку кнопки на "ПерейтиВперед", при скрытии - на "ПерейтиНазад"
##### 3.2.2.2. Логика работы
**Процесс использования:**
1. Пользователь нажимает кнопку "Для печати комплекта документов" (команда `ОтразитьРеализации`)
2. Открывается раздел "Комплект печатных документов" с таблицами документов
3. В таблицах `РеализацииТоваровУслуг` и `ПеремещенияТоваров` отображаются документы, связанные с текущим распоряжением на отгрузку
4. Пользователь выбирает документы в таблицах
5. Использует стандартные команды печати из подменю "Печать" в командных панелях таблиц
6. При печати документов Реализация или Перемещение автоматически добавляется печатная форма расходного ордера (благодаря модулям локализации, описанным в разделе 1)
**Особенности реализации:**
- Раздел "Комплект печатных документов" отображается только при наличии связанных документов
- Отбор документов в таблицах устанавливается автоматически на основе текущего распоряжения на отгрузку
- Логика отбора реализована в процедуре `р_УстановитьОтборыВЗависимыхСписках` (строки 669-706 в `Module.bsl` расширения)
- Поддержка документов типа `РеализацияТоваровУслуг`, `ПеремещениеТоваров` и `ЗаказКлиента`
#### 3.2.3. Сравнение с типовой конфигурацией
**В типовой конфигурации:**
- ❌ Раздел "Комплект печатных документов" отсутствует
- ❌ Команда "ОтразитьРеализации" отсутствует
- ❌ Таблицы `РеализацииТоваровУслуг` и `ПеремещенияТоваров` в форме отсутствуют
**В исходной конфигурации (с расширением):**
- ✅ Раздел "Комплект печатных документов" добавлен
- ✅ Команда "ОтразитьРеализации" добавлена
- ✅ Таблицы `РеализацииТоваровУслуг` и `ПеремещенияТоваров` добавлены в форму
- ✅ Реализована логика автоматического отбора документов по распоряжению
#### 3.2.4. Выводы и рекомендации
**Статус:** ⚠️ **КРИТИЧЕСКАЯ ДОРАБОТКА ДЛЯ ПЕРЕНОСА**
**Необходимость переноса:**
-**ОБЯЗАТЕЛЬНО** перенести раздел "Комплект печатных документов" в целевую конфигурацию
- ✅ Это не типовая функциональность, а кастомная доработка
- ✅ Функционал напрямую связан с печатью пакета документов при отгрузке
**Что необходимо перенести:**
1. **Элементы формы:**
- Группа `ГруппаСписокДляПечати` с настройками сворачивания
- Таблица `РеализацииТоваровУслуг` с командной панелью и подменю "Печать"
- Таблица `ПеремещенияТоваров` с командной панелью и подменю "Печать"
2. **Команда формы:**
- Команда `ОтразитьРеализации` с заголовком "Для печати комплекта документов"
3. **Код модуля формы:**
- Процедура `р_ОтразитьРеализацииПосле` (клиентская)
- Процедура `р_УстановитьОтборыВЗависимыхСписках` (серверная) - если есть доработки
- Процедура `р_ТекущиеРаспоряженияПоОрдеру` (клиентская)
- Функция `р_ПолучитьРазпоряжениеОрдера` (серверная без контекста)
4. **Зависимости:**
- Модули локализации `РеализацияТоваровУслугЛокализация` и `ПеремещениеТоваровЛокализация` (для автоматической печати расходного ордера)
- Функционал печати расходного ордера по основанию (описан в разделе 1)
**План переноса:**
1. Проверить наличие обработки `УправлениеОтгрузкой` в целевой конфигурации
2. Добавить элементы формы (группу и таблицы) в расширение целевой конфигурации
3. Добавить команду `ОтразитьРеализации` в форму
4. Перенести код модуля формы из расширения исходной конфигурации
5. Проверить работу отбора документов в таблицах
6. Протестировать печать комплекта документов
### 3.3. Доработка формы "НастройкаПечатиКомплекта" - раздел "Дополнительная обработка"
#### 3.3.1. Описание доработки
**Регистр сведений:** `РегистрСведений.НастройкиПечатиОбъектов`
**Форма:** `РегистрСведений.НастройкиПечатиОбъектов.Форма.НастройкаПечатиКомплекта`
**Расположение в исходной конфигурации:**
- Основная конфигурация: `CRM3devLocal/src/InformationRegisters/НастройкиПечатиОбъектов/`
- Расширение: `CRM3devLocal.Рана/src/InformationRegisters/НастройкиПечатиОбъектов/`
#### 3.3.2. Реализованный функционал
##### 3.3.2.1. Раздел "Дополнительная обработка"
**Описание:**
В форме настройки печати комплекта документов добавлен раздел "Дополнительная обработка" (группа `ГруппаДополнительнаяОбработка`), который позволяет пользователю настроить поведение при выводе на печать документа из комплекта в зависимости от условий. Пользователь может написать выполняемый код на языке 1С, который будет выполняться для каждого документа перед печатью.
**Элементы формы:**
- **Группа `ГруппаДополнительнаяОбработка`** - сворачиваемая группа с заголовком "Дополнительная обработка"
- По умолчанию свернута (`collapsed = true`)
- При разворачивании показывает поле для ввода кода
- **Поле `КомплектПечатныхФормДополнительнаяОбработка`** - поле ввода многострочного текста для выполняемого кода
- Тип: `InputField` с режимом редактирования `Enter`
- Подсказка содержит описание доступных переменных:
- `Объект` - ДокументСсылка на Реализацию товаров и услуг
- `Экземпляров` - количество экземпляров
- `Печатать` - признак необходимости печати или отключения печатной формы
##### 3.3.2.2. Техническая реализация
**Добавление поля в структуру данных:**
1. В модуле менеджера регистра `НастройкиПечатиОбъектов` (расширение):
- Функция `р_ПодготовитьКомплектПечатныхФорм` (переопределение) - добавляет колонку "ДополнительнаяОбработка" в таблицу значений
- Процедура `р_СкопироватьПечатнуюФормуВКоллекцию` (переопределение) - копирует значение поля "ДополнительнаяОбработка" из настроек
2. В модуле `УправлениеПечатьюКлиентСервер` (расширение):
- Функция `р_ИменаПолейКоллекцииПечатныхФорм` (переопределение) - добавляет "ДополнительнаяОбработка" в список полей коллекции печатных форм
**Выполнение кода:**
В модуле менеджера регистра `НастройкиПечатиОбъектов` (основная конфигурация, строки 509-533) реализована логика выполнения кода:
```bsl
Если ЗначениеЗаполнено(КомплектыПечати[0].ДополнительнаяОбработка) Тогда
Объекты = МассивОбъектов;
Если МассивОбъектов.Количество() = 1 Тогда
Объект = МассивОбъектов[0];
Иначе
Объект = Неопределено;
КонецЕсли;
Экземпляров = КомплектыПечати[0].Экземпляров;
Печатать = КомплектыПечати[0].Печатать;
Попытка
Выполнить(КомплектыПечати[0].ДополнительнаяОбработка);
КомплектыПечати[0].Экземпляров = Экземпляров;
Если Экземпляров = 0 Тогда
Печатать = Ложь;
КонецЕсли;
КомплектыПечати[0].Печатать = Печатать;
Исключение
//ОписаниеОшибки()
КонецПопытки;
Если НЕ Печатать Тогда
Возврат КомплектыПечатиПоОбъектам;
КонецЕсли;
КонецЕсли;
```
**Логика работы:**
1. Перед печатью каждого документа из комплекта проверяется наличие кода в поле "ДополнительнаяОбработка"
2. Если код присутствует, инициализируются переменные:
- `Объект` - ссылка на документ (если один документ) или `Неопределено` (если несколько)
- `Объекты` - массив документов
- `Экземпляров` - текущее количество экземпляров из настроек
- `Печатать` - текущий признак печати из настроек
3. Выполняется код пользователя (команда `Выполнить`)
4. После выполнения кода значения `Экземпляров` и `Печатать` обновляются в настройках
5. Если `Экземпляров = 0`, то `Печатать` автоматически устанавливается в `Ложь`
6. Если `Печатать = Ложь`, документ исключается из печати
##### 3.3.2.3. Примеры использования
**Пример 1: Счет на оплату - отмена печати при кредит-ноте**
```bsl
Если ЗначениеЗаполнено(Объект.ЗаказКлиента) и Объект.ЗаказКлиента.КредитНота Тогда
Экземпляров = 0;
КонецЕсли;
```
**Пример 2: Товарная накладная без услуг (ТОРГ-12) - проверка комиссионного договора**
```bsl
ЭтоКомиссионныйДоговор = Ложь;
Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию ИЛИ
Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссиюВДругуюОрганизацию ТОГДА
ЭтоКомиссионныйДоговор = Истина;
КонецЕсли;
Если ЭтоКомиссионныйДоговор Тогда
Печатать = Ложь;
Экземпляров = 0;
ИНАЧЕ
ЕСЛИ
Объект.СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчика
ИЛИ Объект.СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчикаПоАдресу
ИЛИ Объект.ЗаказКлиента.СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчикаПоАдресу
ТОГДА
Экземпляров = Экземпляров + 1;
КОНЕЦЕСЛИ;
КОНЕЦЕСЛИ;
```
**Пример 3: Торговая накладная с ГТД (ТОРГ-12) - обратная логика**
```bsl
ЭтоКомиссионныйДоговор = Ложь;
Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию ИЛИ
Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссиюВДругуюОрганизацию ТОГДА
ЭтоКомиссионныйДоговор = Истина;
КонецЕсли;
ЕСЛИ ЭтоКомиссионныйДоговор Тогда
Если Объект.СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчика
ИЛИ Объект.СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчикаПоАдресу
ИЛИ Объект.ЗаказКлиента.СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчикаПоАдресу
ТОГДА
Экземпляров = Экземпляров + 1;
КонецЕсли;
ИНАЧЕ
Печатать = Ложь;
Экземпляров = 0;
КОНЕЦЕСЛИ;
```
**Пример 4: Сертификаты (реестр, РАНА) - проверка артикула номенклатуры**
```bsl
АртикулПроверки = "LNK-010100";
Для каждого строкадокумента из Объект.Товары Цикл
Если строкадокумента.Номенклатура.Артикул = АртикулПроверки или
строкадокумента.Номенклатура.Родитель.Наименование = "Лаеннек" Тогда
Печатать = Ложь;
Если Экземпляров = 0 тогда Экземпляров = 1; КонецЕсли;
КонецЕсли;
КонецЦикла;
```
#### 3.3.3. Сравнение с типовой конфигурацией
**В типовой конфигурации:**
- ❌ Поле "ДополнительнаяОбработка" отсутствует в структуре таблицы КомплектПечатныхФорм
- ❌ Раздел "Дополнительная обработка" отсутствует в форме
- ❌ Логика выполнения пользовательского кода отсутствует
**В исходной конфигурации (с расширением):**
- ✅ Поле "ДополнительнаяОбработка" добавлено в структуру данных
- ✅ Раздел "Дополнительная обработка" добавлен в форму
- ✅ Реализована логика выполнения пользовательского кода с обработкой ошибок
- ✅ Поддержка изменения количества экземпляров и признака печати
#### 3.3.4. Выводы и рекомендации
**Статус:** ⚠️ **КРИТИЧЕСКАЯ ДОРАБОТКА ДЛЯ ПЕРЕНОСА**
**Необходимость переноса:**
-**ОБЯЗАТЕЛЬНО** перенести функционал "Дополнительная обработка" в целевую конфигурацию
- ✅ Это не типовая функциональность, а кастомная доработка
- ✅ Функционал критически важен для бизнес-процессов печати документов
- ✅ Позволяет гибко настраивать правила печати документов в зависимости от условий
**Что необходимо перенести:**
1. **Модуль менеджера регистра `НастройкиПечатиОбъектов` (расширение):**
- Функция `р_ПодготовитьКомплектПечатныхФорм` (переопределение)
- Процедура `р_СкопироватьПечатнуюФормуВКоллекцию` (переопределение)
2. **Модуль `УправлениеПечатьюКлиентСервер` (расширение):**
- Функция `р_ИменаПолейКоллекцииПечатныхФорм` (переопределение)
3. **Модуль менеджера регистра `НастройкиПечатиОбъектов` (основная конфигурация):**
- Логика выполнения кода в функции `КомплектыПечатиПоОбъектам` (строки 509-533)
- **ВНИМАНИЕ:** Этот код находится в основной конфигурации, но может быть добавлен через расширение
4. **Элементы формы `НастройкаПечатиКомплекта`:**
- Группа `ГруппаДополнительнаяОбработка`
- Поле `КомплектПечатныхФормДополнительнаяОбработка`
5. **Настройки печати:**
- Необходимо перенести все сохраненные настройки с кодом дополнительной обработки из исходной системы
**План переноса:**
1. Проверить наличие регистра `НастройкиПечатиОбъектов` в целевой конфигурации
2. Добавить поле "ДополнительнаяОбработка" в структуру данных через расширение
3. Добавить логику выполнения кода в модуль менеджера регистра (через расширение или в основную конфигурацию)
4. Добавить элементы формы в расширение целевой конфигурации
5. Перенести сохраненные настройки печати с кодом дополнительной обработки
6. Протестировать выполнение кода для различных сценариев
**Особенности реализации:**
- Код выполняется в контексте сервера
- Ошибки выполнения кода обрабатываются (игнорируются), чтобы не прерывать печать других документов
- Код может обращаться к любым свойствам и методам документа через переменную `Объект`
- Код может изменять количество экземпляров и признак печати
- При установке `Экземпляров = 0` автоматически устанавливается `Печатать = Ложь`
### 3.4. Доработки складского учета и логистики
#### 3.4.1. Сравнение групп доступа
##### 3.4.1.1. Группы доступа, отсутствующие в целевой системе
**Складские и логистические группы (11):**
1. Добавление изменение складских актов
2. Кладовщик
3. Кладовщик (без заказов поставщиков)
4. Менеджер по доставке
5. Менеджер по доставке (без закупок)
6. Менеджер по продажам (Без складов)
7. Менеджеры по продажам (Заказ и Реализация, без складов)
8. Ответственный по работе с документом заказ на перемещение
9. Перемещения товаров
10. Работник склада
11. Чтение документа задания на перевозку
**Вывод:**
В целевой системе отсутствуют специализированные группы доступа для складского учета и логистики, что может указывать на различия в функционале или подходе к управлению доступом.
#### 3.4.2. Документы складского учета
##### 3.4.2.1. Сравнение документов
**Документы, присутствующие в обеих конфигурациях:**
- РасходныйОрдерНаТовары
- ПриходныйОрдерНаТовары
- ПеремещениеТоваров
- ЗаказНаПеремещение
- ЗаданиеНаПеревозку
- ОтборРазмещениеТоваров
- УпаковочныйЛист
**Документы, требующие проверки на наличие доработок:**
- РеализацияТоваровУслуг
- СчетФактураВыданный
- ТранспортнаяНакладная
##### 3.4.2.2. Доработки в расширении исходной конфигурации
**Документы расширения "CRM3devLocal.Рана":**
**Документы, связанные со складским учетом:**
- `rh_ТоварыНаСкладахСебестоимость` - документ для работы с себестоимостью товаров на складах
- `р_ВерсииСебестоимости` - документ для работы с версиями себестоимости
- `р_КредитНота` - документ кредит-ноты
**Документы, связанные с логистикой:**
- `ЗаданиеНаПеревозку` - присутствует в расширении, требуется проверка на наличие доработок
**Общие модули расширения:**
**Модули, связанные с печатью:**
- `rh_УправлениеПечатью`
- `rh_УправлениеПечатьюКлиент`
**Модули, связанные с себестоимостью:**
- Возможно, есть модули для работы с себестоимостью (требуется проверка)
##### 3.4.2.3. Функциональные различия
**Статусы расходных ордеров:**
**В исходной конфигурации:**
- Документ "РасходныйОрдерНаТовары" поддерживает статусы:
- Подготовлено
- К отбору
- К проверке
- Проверен
- К отгрузке
- Отгружен
**В целевой конфигурации:**
- Требуется проверка наличия аналогичных статусов
**Интеграция с доставкой:**
**В исходной конфигурации:**
- Документ "РасходныйОрдерНаТовары" имеет реквизиты:
- `ОтгрузкаПоЗаданиюНаПеревозку` (булево)
- `ЗаданиеНаПеревозку` (ссылка на документ)
- `ПорядокДоставки` (строка)
**В целевой конфигурации:**
- Требуется проверка наличия аналогичных реквизитов
#### 3.4.3. Выводы по доработкам складского учета и логистики
##### 3.4.3.1. Найденные различия
1. **Группы доступа:**
- В целевой системе отсутствуют специализированные группы доступа для складского учета
- Это может указывать на упрощенную модель доступа или необходимость создания аналогичных групп
2. **Документы расширения:**
- В исходной конфигурации есть документы для работы с себестоимостью товаров на складах
- Требуется проверка наличия аналогичного функционала в целевой конфигурации
3. **Функционал печати:**
- В расширении исходной конфигурации есть модули управления печатью
- Требуется детальная проверка функционала
##### 3.4.3.2. Рекомендации
1. **Провести детальный анализ:**
- Сравнить модули документов складского учета в исходной и целевой конфигурациях
- Проверить наличие всех реквизитов и табличных частей
- Сравнить обработчики событий и подписки
2. **Оценить необходимость переноса:**
- Документы для работы с себестоимостью (`rh_ТоварыНаСкладахСебестоимость`, `р_ВерсииСебестоимости`)
- Модули управления печатью (`rh_УправлениеПечатью`)
- Доработки в документе "РасходныйОрдерНаТовары"
3. **Определить зависимости:**
- Проверить зависимости доработок от других объектов конфигурации
- Оценить совместимость с целевой конфигурацией
### 3.5. Итоговый список кастомных доработок, требующих переноса
#### 3.5.1. Критические доработки (обязательные для переноса)
1. **Функционал печати расходного ордера по основанию:**
- Модуль `РеализацияТоваровУслугЛокализация`: процедуры `КомплектПечатныхФорм()` и `СформироватьКомплектПечатныхФорм()`
- Модуль `ПеремещениеТоваровЛокализация`: аналогичные процедуры
- Функция `р_СформироватьПечатнуюФормуОрдераПоОснованию` в документе РасходныйОрдерНаТовары
- Функция `р_ПолучитьОрдерыНаПечать` в документе РасходныйОрдерНаТовары
- Переопределение функции `р_ПечатьРасходногоОрдераНаТовары` с данными по доставке
2. **Раздел "Комплект печатных документов" в форме УправлениеОтгрузкой:**
- Группа `ГруппаСписокДляПечати`
- Таблицы `РеализацииТоваровУслуг` и `ПеремещенияТоваров`
- Команда `ОтразитьРеализации`
- Код модуля формы (процедуры `р_ОтразитьРеализацииПосле`, `р_УстановитьОтборыВЗависимыхСписках` и др.)
3. **Раздел "Дополнительная обработка" в форме НастройкаПечатиКомплекта:**
- Поле "ДополнительнаяОбработка" в структуре данных регистра `НастройкиПечатиОбъектов`
- Группа `ГруппаДополнительнаяОбработка` и поле `КомплектПечатныхФормДополнительнаяОбработка` в форме
- Логика выполнения пользовательского кода в модуле менеджера регистра
- Переопределения функций в модуле `УправлениеПечатьюКлиентСервер`
#### 3.5.2. Доработки, требующие дополнительной проверки
1. **Доработки складского учета:**
- Документы для работы с себестоимостью (`rh_ТоварыНаСкладахСебестоимость`, `р_ВерсииСебестоимости`)
- Модули управления печатью (`rh_УправлениеПечатью`, `rh_УправлениеПечатьюКлиент`)
- Группы доступа для складского учета и логистики
#### 3.5.3. Опциональные доработки (требуют решения о необходимости)
1. **Раскомментирование кода печати ТОРГ-12:**
- Код присутствует в модуле `РеализацияТоваровУслугЛокализация`, но закомментирован
- В эталонной конфигурации команды ТОРГ-12 присутствуют и не закомментированы
- Требуется решение: использовать типовой функционал или доработать закомментированный код
2. **Раскомментирование кода печати Счет-фактура:**
- Код присутствует, но закомментирован
- Требуется решение о необходимости реализации
3. **Автоматическая печать пакета документов при проведении расходного ордера:**
- В настоящее время не реализовано
- Требуется решение о необходимости реализации
---
## 4. План дальнейших действий
### 4.1. Необходимые проверки
1. **Проверка функционала печати пакета документов:**
- [ ] Детально изучить модули `rh_УправлениеПечатью` и `rh_УправлениеПечатьюКлиент`
- [ ] Проверить общую форму `rh_ПечатьДокументов`
- [ ] Найти подписки на события или обработчики, формирующие ТОРГ-12 и Счет-фактура
- [ ] Проверить наличие аналогичного функционала в целевой конфигурации
2. **Проверка доработок складского учета:**
- [ ] Сравнить модули документа "РасходныйОрдерНаТовары" в исходной и целевой конфигурациях
- [ ] Проверить наличие документов для работы с себестоимостью в целевой конфигурации
- [ ] Сравнить обработчики событий и подписки на события
- [ ] Проверить наличие всех реквизитов и табличных частей
3. **Проверка функционала логистики:**
- [ ] Сравнить документ "ЗаданиеНаПеревозку" в исходной и целевой конфигурациях
- [ ] Проверить интеграцию с доставкой
- [ ] Сравнить реквизиты, связанные с доставкой
### 4.2. Оценка необходимости переноса
После проведения всех проверок необходимо:
1. Составить список объектов, требующих переноса
2. Оценить сложность переноса каждого объекта
3. Определить зависимости между объектами
4. Составить план переноса с учетом приоритетов
### 4.3. Документирование
1. Создать детальное описание найденного функционала
2. Составить техническое задание на перенос (если требуется)
3. Документировать различия между конфигурациями
---
## 5. Заключение
### 5.1. Текущий статус анализа
**Кастомные доработки, требующие переноса:**
**Выявлено и проанализировано:**
- Функционал печати расходного ордера по основанию (модули локализации + функции в документе РасходныйОрдерНаТовары)
- Раздел "Комплект печатных документов" в форме УправлениеОтгрузкой
- Раздел "Дополнительная обработка" в форме НастройкаПечатиКомплекта
- Различия в группах доступа для складского учета
⚠️ **Требуется дополнительная проверка:**
- Документы для работы с себестоимостью (`rh_ТоварыНаСкладахСебестоимость`, `р_ВерсииСебестоимости`)
- Модули управления печатью (`rh_УправлениеПечатью`, `rh_УправлениеПечатьюКлиент`)
- Наличие аналогичного функционала в целевой конфигурации
**НЕ реализовано (требует решения о необходимости):**
- Автоматическая печать ТОРГ-12 и Счет-фактура при проведении расходного ордера
- Автоматическое формирование пакета документов при проведении расходного ордера
### 5.2. Приоритеты переноса
**Высокий приоритет (критические доработки):**
1. Функционал печати расходного ордера по основанию
2. Раздел "Комплект печатных документов" в форме УправлениеОтгрузкой
3. Раздел "Дополнительная обработка" в форме НастройкаПечатиКомплекта
**Средний приоритет (требуют проверки):**
1. Доработки складского учета (документы для работы с себестоимостью)
2. Модули управления печатью
**Низкий приоритет (опциональные):**
1. Раскомментирование кода печати ТОРГ-12 (можно использовать типовой функционал)
2. Раскомментирование кода печати Счет-фактура
3. Автоматическая печать пакета документов при проведении расходного ордера
### 5.3. Следующие шаги
1. Проверить наличие критических доработок в целевой конфигурации
2. Начать перенос критических доработок в расширение целевой конфигурации
3. Провести детальную проверку модулей управления печатью в расширении исходной конфигурации
4. Сравнить модули документов складского учета в исходной и целевой конфигурациях
5. Принять решение о необходимости реализации опциональных доработок
---
## Приложения
### Приложение А. Список проверенных файлов
**Эталонная конфигурация:**
- `CRM302228_etalon/src/Documents/РасходныйОрдерНаТовары/ManagerModule.bsl`
- `CRM302228_etalon/src/CommonModules/РеализацияТоваровУслугЛокализация/Module.bsl`
- `CRM302228_etalon/src/CommonModules/ПеремещениеТоваровЛокализация/Module.bsl`
**Исходная конфигурация:**
- `CRM3devLocal/src/Documents/РасходныйОрдерНаТовары/ManagerModule.bsl`
**Расширение исходной конфигурации (кастомные доработки):**
- `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/ManagerModule.bsl`
- `CRM3devLocal.Рана/src/CommonModules/РеализацияТоваровУслугЛокализация/Module.bsl`
- `CRM3devLocal.Рана/src/CommonModules/ПеремещениеТоваровЛокализация/Module.bsl`
- `CRM3devLocal.Рана/src/DataProcessors/УправлениеОтгрузкой/Forms/Форма/Module.bsl`
- `CRM3devLocal.Рана/src/InformationRegisters/НастройкиПечатиОбъектов/` (требуется детальная проверка)
- `CRM3devLocal.Рана/src/CommonModules/rh_УправлениеПечатью/` (требуется проверка)
**Целевая конфигурация:**
- `CRM326/CRM326_TEST/src/Documents/РасходныйОрдерНаТовары/` (требуется проверка наличия кастомных доработок)
### Приложение Б. Список групп доступа, отсутствующих в целевой системе
См. файл `docs/active_missing_access_groups.txt`
---
**Примечание:**
- Типовой функционал, присутствующий в эталонной конфигурации, вынесен в раздел 2 и не требует переноса.
- Основное внимание в документе уделено кастомным доработкам, требующим переноса (раздел 3).
- Для получения полной картины требуется проведение дополнительных проверок, указанных в разделе 4 "План дальнейших действий".
@@ -1,320 +0,0 @@
# Анализ привязок серий номенклатур к видам номенклатур
## Дата анализа
2024
## Цель анализа
Исследование логики привязки серий номенклатур к видам номенклатур, определение отборов при выборе серий и выявление возможных нарушений логики данных.
---
## 1. Отбор серий при выборе в форме "Указание серии в строке товаров"
### 1.1. Контекст использования
Форма `Обработка.ПодборСерийВДокументы.Форма.УказаниеСерииВСтрокеТоваров` используется при заполнении таблицы товаров документа **ввода остатков собственного товара**.
### 1.2. Вариант получения данных
Для документа ввода остатков собственного товара используется вариант получения данных: **`"ВсеСерииНоменклатуры"`**.
Определение варианта происходит в функции `ВариантПолучениеДанныхИзРегистровПоПараметрамФормы`:
```bsl
ИначеЕсли ПараметрыУказанияСерий.СкладскиеОперации.Найти(Перечисления.СкладскиеОперации.ВводОстатков) <> Неопределено Тогда
ВариантПолучениеДанныхИзРегистров = "ВсеСерииНоменклатуры";
```
### 1.3. Формирование запроса для отбора серий
#### 1.3.1. Базовый запрос из регистра движений
Для варианта `"ВсеСерииНоменклатуры"` формируется запрос из регистра `ДвиженияСерийТоваров`:
```sql
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
ДвиженияСерийТоваров.Серия,
0 КАК СвободныйОстаток
ПОМЕСТИТЬ ДанныеРегистров
ИЗ
РегистрНакопления.ДвиженияСерийТоваров КАК ДвиженияСерийТоваров
ГДЕ
ДвиженияСерийТоваров.Номенклатура = &Номенклатура
И ДвиженияСерийТоваров.Характеристика = &Характеристика
```
#### 1.3.2. Дополнительный отбор в форме
В форме `УказаниеСерииВСтрокеТоваров` добавляется условие:
```sql
ГДЕ
ДанныеРегистров.СвободныйОстаток > 0
ИЛИ &ВсеСерии
```
Для варианта `"ВсеСерииНоменклатуры"` параметр `ВсеСерии` устанавливается в `Истина`:
```bsl
Если ВариантПолучениеДанныхИзРегистров <> "ВсеСерииНоменклатуры" Тогда
Запрос.УстановитьПараметр("ВсеСерии", РежимОтображенияСерий = "ВсеСерии");
Иначе
Запрос.УстановитьПараметр("ВсеСерии", Истина);
КонецЕсли;
```
### 1.4. Итоговый отбор серий для документа ввода остатков
**При выборе серии в форме для документа ввода остатков собственного товара применяется отбор:**
1.**По номенклатуре**: `ДвиженияСерийТоваров.Номенклатура = &Номенклатура`
2.**По характеристике**: `ДвиженияСерийТоваров.Характеристика = &Характеристика`
3.**Без отбора по остаткам**: Показываются **все серии**, которые когда-либо использовались для данной номенклатуры и характеристики (из регистра `ДвиженияСерийТоваров`), независимо от наличия остатков
4.**Без отбора по складу, помещению, назначению**: Эти параметры не учитываются при отборе
**Вывод**: При вводе остатков можно указывать любые серии, в том числе новые, которые еще не были использованы в движениях.
---
## 2. Логика привязки серий к виду номенклатуры
### 2.1. Определение владельца серий
Владелец серий определяется в функции `НастройкиИспользованияСерий` справочника `ВидыНоменклатуры`:
```bsl
ВЫБОР
КОГДА ВидыНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
ТОГДА ВидыНоменклатуры.ВладелецСерий
ИНАЧЕ ВидыНоменклатуры.Ссылка
КОНЕЦ КАК ВладелецСерий
```
### 2.2. Два сценария привязки
#### Сценарий 1: НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Истина
- **ВладелецСерий** = `ВидыНоменклатуры.ВладелецСерий` (другой вид номенклатуры)
- **Все серии** для всех номенклатур этого вида привязываются к виду номенклатуры, указанному в поле `ВладелецСерий`
- Серии создаются с `ВидНоменклатуры = ВидыНоменклатуры.ВладелецСерий`
**Пример:**
- Вид номенклатуры: "Товары"
- `НастройкиСерийБерутсяИзДругогоВидаНоменклатуры` = Истина
- `ВладелецСерий` = "Продукция"
- **Результат**: Все серии для номенклатур вида "Товары" привязываются к виду "Продукция"
#### Сценарий 2: НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Ложь
- **ВладелецСерий** = `ВидыНоменклатуры.Ссылка` (сам вид номенклатуры)
- Серии привязываются **непосредственно к самому виду номенклатуры**
- Серии создаются с `ВидНоменклатуры = ВидыНоменклатуры.Ссылка`
- Поле `ВладелецСерий` вида номенклатуры очищается (если было заполнено)
**Пример:**
- Вид номенклатуры: "Товары"
- `НастройкиСерийБерутсяИзДругогоВидаНоменклатуры` = Ложь
- **Результат**: Все серии для номенклатур вида "Товары" привязываются к виду "Товары"
### 2.3. Установка вида номенклатуры при создании серии
В форме `УказаниеСерииВСтрокеТоваров` вид номенклатуры устанавливается следующим образом:
```bsl
ВидНоменклатуры = НастройкиИспользованияСерий.ВладелецСерий;
```
При создании новой серии это значение передается в объект серии:
```bsl
ЗаполнитьЗначенияСвойств(СерияОбъект, ЭтотОбъект, РеквизитыВводаСерии(Истина));
```
Где `РеквизитыВводаСерии` включает `ВидНоменклатуры`.
**Вывод**: Серия привязывается к **`ВладелецСерий`**, который определяется из вида номенклатуры самой номенклатуры, но может быть переопределен через поле `ВладелецСерий` вида номенклатуры, если установлен флаг `НастройкиСерийБерутсяИзДругогоВидаНоменклатуры`.
---
## 3. Нарушение логики данных
### 3.1. Описание проблемы
**Нарушение**: Если у серии указан вид номенклатуры, у которого установлен флаг `НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Истина`, то это является **нарушением логики данных**.
**Почему это нарушение:**
- Если у вида номенклатуры установлен флаг `НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Истина`, то все серии должны привязываться к `ВладелецСерий`, а не к самому виду номенклатуры
- Если серия привязана к виду номенклатуры с таким флагом, то серия должна быть привязана к `ВладелецСерий` этого вида, а не к самому виду
### 3.2. Как может возникнуть нарушение
1. **Изменение настроек вида номенклатуры после создания серий**:
- Серии были созданы, когда флаг `НастройкиСерийБерутсяИзДругогоВидаНоменклатуры` был `Ложь`
- Позже флаг был установлен в `Истина`, но существующие серии не были перепривязаны
2. **Прямое редактирование серий**:
- Ручное изменение вида номенклатуры у серии без учета настроек
3. **Импорт данных**:
- Импорт серий из внешних источников без проверки соответствия логике
4. **Ошибки в коде**:
- Прямое создание серий без использования механизма определения `ВладелецСерий`
### 3.3. Последствия нарушения
#### 3.3.1. Проблемы с поиском серий
**Проблема**: Серии не будут находиться в запросах, которые ищут серии по `ВладелецСерий`.
**Примеры запросов, где это критично:**
1. **Поиск серии в форме подбора** (`НайтиСерию`):
```sql
ВЫБРАТЬ
СерииНоменклатуры.Ссылка КАК Серия
ИЗ
Справочник.СерииНоменклатуры КАК СерииНоменклатуры
ГДЕ
СерииНоменклатуры.ВидНоменклатуры = &ВидНоменклатуры
```
Если `ВидНоменклатуры` = `ВладелецСерий`, а серия привязана к исходному виду, серия не будет найдена.
2. **Запросы с фильтрацией по виду номенклатуры**:
```sql
СерииНоменклатуры.ВидНоменклатуры = &ВидНоменклатуры
```
Серии с неправильным видом не попадут в выборку.
#### 3.3.2. Неправильное применение настроек использования серий
**Проблема**: Настройки использования серий будут браться из неправильного вида номенклатуры.
**Пример:**
- Вид номенклатуры "Товары" имеет `НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Истина` и `ВладелецСерий = "Продукция"`
- Серия привязана к виду "Товары" вместо "Продукция"
- Настройки будут браться из вида "Товары", а не из "Продукция"
- Это может привести к:
- Неправильной проверке заполнения реквизитов серии
- Неправильному отображению полей в формах
- Неправильной логике работы с сериями
#### 3.3.3. Проблемы с проверкой соответствия серии и номенклатуры
**Проблема**: Проверка соответствия серии и номенклатуры может работать некорректно.
В модуле `НоменклатураСервер` есть проверка:
```sql
И НЕ(Серии.ВидНоменклатуры.ВладелецСерий = Номенклатура.ВидНоменклатуры.ВладелецСерий
И Серии.ВидНоменклатуры.ВладелецСерий <> ЗНАЧЕНИЕ(Справочник.ВидыНоменклатуры.ПустаяСсылка)
И Номенклатура.ВидНоменклатуры.ВладелецСерий <> ЗНАЧЕНИЕ(Справочник.ВидыНоменклатуры.ПустаяСсылка)
ИЛИ Номенклатура.ВладелецСерий = Серии.ВидНоменклатуры
ИЛИ Номенклатура.ВидНоменклатуры = Серии.ВидНоменклатуры)
```
Если серия привязана к виду с `НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Истина`, проверка может не сработать корректно.
#### 3.3.4. Проблемы с интеграциями
**Проблема**: Интеграции, которые используют `ВидНоменклатуры` серии, могут работать некорректно.
**Примеры:**
- Интеграция с ЕГАИС
- Интеграция с ВЕТИС
- Интеграция с ГИСМ
#### 3.3.5. Проблемы с отображением в формах подбора
**Проблема**: Серии могут не отображаться в формах подбора или отображаться некорректно.
**Пример:**
- В форме подбора серий фильтр по виду номенклатуры не найдет серии с неправильным видом
- Пользователь не сможет выбрать нужную серию
### 3.4. Текущее состояние проверок
**Проверка отсутствует**: В модуле объекта `СерииНоменклатуры` нет проверки на соответствие вида номенклатуры серии и флага `НастройкиСерийБерутсяИзДругогоВидаНоменклатуры`.
**Рекомендация**: Добавить проверку в процедуру `ПередЗаписью` или `ОбработкаПроверкиЗаполнения` модуля объекта `СерииНоменклатуры`.
---
## 4. Рекомендации
### 4.1. Добавление проверки целостности данных
**Рекомендуется добавить проверку** в модуль объекта `СерииНоменклатуры`:
```bsl
Процедура ПередЗаписью(Отказ)
// ... существующий код ...
// Проверка соответствия вида номенклатуры серии и настроек вида номенклатуры
Если ЗначениеЗаполнено(ВидНоменклатуры) Тогда
РеквизитыВидНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидНоменклатуры,
"НастройкиСерийБерутсяИзДругогоВидаНоменклатуры,ВладелецСерий");
Если РеквизитыВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
Если ЗначениеЗаполнено(РеквизитыВидНоменклатуры.ВладелецСерий) Тогда
Если ВидНоменклатуры <> РеквизитыВидНоменклатуры.ВладелецСерий Тогда
ТекстОшибки = НСтр("ru = 'Серия не может быть привязана к виду номенклатуры ""%ВидНоменклатуры%"", так как у этого вида номенклатуры установлен флаг ""Настройки серий берутся из другого вида номенклатуры"". Серия должна быть привязана к виду номенклатуры ""%ВладелецСерий%"".");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%ВидНоменклатуры%", ВидНоменклатуры);
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%ВладелецСерий%", РеквизитыВидНоменклатуры.ВладелецСерий);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ВидНоменклатуры", "Объект", Отказ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
```
### 4.2. Создание обработки для исправления существующих данных
**Рекомендуется создать обработку** для поиска и исправления серий с неправильной привязкой:
1. Найти все серии, у которых `ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Истина`
2. Проверить, что `ВидНоменклатуры` серии = `ВладелецСерий` вида номенклатуры
3. Если не соответствует - перепривязать серию к правильному виду
### 4.3. Документирование логики
**Рекомендуется:**
- Добавить комментарии в код, объясняющие логику привязки серий
- Создать инструкцию для разработчиков о правильном создании серий
- Добавить предупреждения в формы создания/редактирования серий
---
## 5. Выводы
1.**Отбор серий для документа ввода остатков**: Отбор идет по номенклатуре и характеристике из регистра `ДвиженияСерийТоваров`, без учета остатков, склада, помещения и назначения.
2.**Логика привязки серий**: Серии привязываются к `ВладелецСерий`, который определяется из вида номенклатуры. Если установлен флаг `НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Истина`, то серии привязываются к виду, указанному в поле `ВладелецСерий`.
3. ⚠️ **Нарушение логики данных**: Если у серии указан вид номенклатуры с флагом `НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Истина`, это является нарушением логики данных.
4. ⚠️ **Последствия нарушения**:
- Серии не будут находиться в запросах поиска
- Неправильное применение настроек использования серий
- Проблемы с проверкой соответствия серии и номенклатуры
- Проблемы с интеграциями
- Проблемы с отображением в формах подбора
5.**Рекомендации**:
- Добавить проверку целостности данных в модуль объекта `СерииНоменклатуры`
- Создать обработку для исправления существующих данных
- Документировать логику привязки серий
---
## 6. Ссылки на код
- Форма подбора серий: `crm3-dev/src/DataProcessors/ПодборСерийВДокументы/Forms/УказаниеСерииВСтрокеТоваров/Ext/Form/Module.bsl`
- Модуль обработки подбора серий: `crm3-dev/src/DataProcessors/ПодборСерийВДокументы/Ext/ManagerModule.bsl`
- Модуль объекта серий: `crm3-dev/src/Catalogs/СерииНоменклатуры/Ext/ObjectModule.bsl`
- Модуль менеджера видов номенклатуры: `crm3-dev/src/Catalogs/ВидыНоменклатуры/Ext/ManagerModule.bsl`
- Модуль объекта видов номенклатуры: `crm3-dev/src/Catalogs/ВидыНоменклатуры/Ext/ObjectModule.bsl`
---
*Документ создан на основе анализа кода конфигурации crm3-dev*
@@ -1,336 +0,0 @@
---
title: Анализ применения признака Кредит-нота (КредитНота) в исходной конфигурации
version: 1.1
date_modified: 2025-12-27
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
date_created: 2025-12-27
show_metadata_block: true
show_index_link: true
---
# Анализ применения признака Кредит-нота (КредитНота) в исходной конфигурации
## Версия анализа
Версия 1.1 от 27.12.2025
## Автор
Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
## Цель анализа
Определить, где и для чего применяется признак "Кредит-нота" (КредитНота) в основной исходной конфигурации `CRM3devLocal` и расширении `CRM3devLocal.Рана`.
---
## 1. Основная конфигурация CRM3devLocal
### 1.1. Документ ЗаказКлиента
**Расположение:** `CRM3devLocal/src/Documents/ЗаказКлиента/ЗаказКлиента.mdo`
**Реквизит:**
- **Имя:** `КредитНота`
- **Тип:** `Boolean` (Булево)
- **Синonym:** "Кредит нота"
- **Описание:** Признак того, что заказ клиента является кредит-нотой
**Назначение:**
- Используется для маркировки заказов клиентов, которые являются кредит-нотами
- Позволяет идентифицировать заказы, по которым предоставляется кредит-нота (возврат средств или корректировка задолженности)
**Использование в коде:**
- В обработке `КредитНотаЗаПериод` используется для определения заказов, связанных с кредит-нотами
- В запросах проверяется условие: `НЕ ЕСТЬNULL(РеализацияТоваровУслуг.ЗаказКлиента.КредитНота, ЛОЖЬ)`
- ⚠️ Примечание: Документ `rh_ОтражениеФактаПродаж` содержит код для работы с КредитНота, но сам документ не применяется
---
### 1.2. Документ rh_ОтражениеФактаПродаж
**Расположение:** `CRM3devLocal/src/Documents/rh_ОтражениеФактаПродаж/Forms/ФормаДокумента/Module.bsl`
**Статус:** ⚠️ **НЕ ПРИМЕНЯЕТСЯ** - документ присутствует в конфигурации, но не используется в текущей версии
**Примечание:** Несмотря на наличие кода, использующего признак КредитНота в этом документе, сам документ не применяется в рабочей конфигурации.
**Код (для справки):**
1. **В функции `ПолучитьЗапросДокументовЗаПериод_CRM3()`:**
- Используется дополнительное свойство "ЗаказКлиентаКредитНота" из плана видов характеристик "ДополнительныеРеквизитыИСведения"
- Проверяется наличие признака кредит-ноты через соединение с дополнительными реквизитами заказа клиента
- Условие фильтрации: `ЕСТЬNULL(ЗаказКлиентаДополнительныеРеквизиты.Значение, ЛОЖЬ) = ЛОЖЬ`
2. **В функции `ПолучитьЗапросДокументовЗаПериод_CRM2()`:**
- Прямая проверка реквизита: `НЕ ЕСТЬNULL(РеализацияТоваровУслуг.ЗаказКлиента.КредитНота, ЛОЖЬ)`
- Используется для исключения документов реализации с кредит-нотами из списка документов для отражения факта продаж
**Назначение (теоретическое):**
- Исключение документов реализации, связанных с кредит-нотами, из процесса отражения факта продаж
- Разделение учета обычных продаж и кредит-нот
---
### 1.3. Отчет КредитНота
**Расположение:** `CRM3devLocal/src/Reports/КредитНота/`
**Описание:**
- Отчет для формирования кредит-нот
- Использует схему компоновки данных с полями:
- `КоличествоКредитНота` - количество по кредит-ноте
- `СуммаСНДСКредитНота` - сумма с НДС по кредит-ноте
**Назначение:**
- Формирование печатных форм кредит-нот
- Аналитика по кредит-нотам
---
### 1.4. Обработка КредитНотаЗаПериод
**Расположение:** `CRM3devLocal/src/DataProcessors/КредитНотаЗаПериод/`
**Функционал:**
- Формирование списка документов для кредит-нот за период
- Работа со списанием задолженности
- Определение заказов клиентов, связанных с кредит-нотами через списание задолженности
- Разделение счетов-фактур на две группы:
- **КредитНоты** - счета-фактуры по заказам, связанным с кредит-нотами
- **НеКредитНоты** - остальные счета-фактуры
**Логика работы:**
1. Находит документы "Списание задолженности" за период
2. Определяет заказы клиентов, связанные с этими списаниями
3. Находит счета-фактуры выданные по этим заказам
4. Разделяет счета-фактуры на две группы для дальнейшей обработки
**Назначение:**
- Автоматизация процесса формирования кредит-нот за период
- Группировка документов для печати кредит-нот
---
### 1.5. Общая форма СписокДокументовПодКредитНоту
**Расположение:** `CRM3devLocal/src/CommonForms/СписокДокументовПодКредитНоту/Module.bsl`
**Функционал:**
- Форма для выбора документов реализации для формирования кредит-ноты
- Печать кредит-ноты через MS Word
- Формирование описания документов для кредит-ноты
**Использование:**
- Выбор документов реализации за период (до 4 месяцев назад)
- Формирование печатной формы кредит-ноты с описанием выбранных документов
- Печать через `УправлениеПечатьюMSWordКлиент.ПечатьКредитНота()`
---
### 1.6. Роль доступа КредитНота
**Расположение:** `CRM3devLocal/src/Roles/КредитНота/`
**Назначение:**
- Предоставляет права доступа на работу с кредит-нотами
- Включает права на отчет "КредитНота"
---
### 1.7. Общий шаблон КредитНота
**Расположение:** `CRM3devLocal/src/CommonTemplates/КредитНота/`
**Назначение:**
- Шаблон для печати кредит-нот
---
## 2. Расширение CRM3devLocal.Рана
### 2.1. Документ р_КредитНота (Оформление кредит-ноты)
**Расположение:** `CRM3devLocal.Рана/src/Documents/р_КредитНота/`
**Описание:**
- Отдельный документ для оформления кредит-ноты
- Является расширением основной конфигурации
**Реквизиты:**
- Организация
- Контрагент
- ДокументОснование (РеализацияТоваровУслуг)
- Партнер (Клиент)
- Соглашение
- Договор
- И другие реквизиты для оформления кредит-ноты
**Регистры записей:**
- `р_ОформленныеКредитНоты` - регистр сведений для учета оформленных кредит-нот
**Назначение:**
- Формализованное оформление кредит-нот как отдельного документа
- Учет оформленных кредит-нот в регистре сведений
- Интеграция с документом "Реализация товаров и услуг" через поле "ДокументОснование"
---
### 2.2. Роль доступа "Оформление кредит-ноты (Рана)"
**Расположение:** `CRM3devLocal.Рана/src/Roles/р_ОтчетыБрендМенеджера/Rights.rights`
**Назначение:**
- Предоставляет права на документ `р_КредитНота`
- Входит в подсистему `rh_RhanaПодсистема`
---
## 3. Связи и взаимодействия
### 3.1. Связь ЗаказКлиента → РеализацияТоваровУслуг
**Механизм:**
- В документе "Реализация товаров и услуг" есть ссылка на "ЗаказКлиента"
- Через эту ссылку доступен реквизит `ЗаказКлиента.КредитНота`
- Используется для фильтрации и идентификации реализаций, связанных с кредит-нотами
### 3.2. Связь через дополнительные реквизиты
**Механизм (для CRM3):**
- Используется план видов характеристик "ДополнительныеРеквизитыИСведения"
- Свойство "ЗаказКлиентаКредитНота" хранится в дополнительных реквизитах
- Позволяет гибко настраивать признак кредит-ноты
### 3.3. Связь со списанием задолженности
**Механизм:**
- Документ "Списание задолженности" может быть связан с заказами клиентов
- Обработка "КредитНотаЗаПериод" использует эту связь для определения заказов по кредит-нотам
---
## 4. Назначение и бизнес-логика
### 4.1. Основное назначение
**Кредит-нота** - это документ, который:
1. Оформляется для корректировки задолженности перед клиентом
2. Может быть связан с возвратом товаров или корректировкой сумм
3. Используется для уменьшения задолженности клиента перед организацией
### 4.2. Бизнес-процесс
1. **Создание заказа клиента** с установленным признаком `КредитНота = Истина`
2. **Создание документа реализации** на основании заказа с кредит-нотой
3. **Оформление списания задолженности** (опционально)
4. **Формирование кредит-ноты** через:
- Отчет "КредитНота"
- Обработку "КредитНотаЗаПериод"
- Документ "р_КредитНота" (в расширении)
5. **Печать кредит-ноты** через общую форму "СписокДокументовПодКредитНоту"
### 4.3. Исключение из учета
- ⚠️ **Примечание:** Документ "rh_ОтражениеФактаПродаж" не применяется в текущей конфигурации
- Теоретически документы реализации с кредит-нотами должны исключаться из процесса "Отражение факта продаж"
- Это позволяет разделить учет обычных продаж и кредит-нот
- Кредит-ноты не учитываются в фактах продаж для планирования
---
## 5. Печатные формы
### 5.1. Макеты печати в документе РеализацияТоваровУслуг
В документе "Реализация товаров и услуг" определены следующие макеты для кредит-нот:
- `ПФ_DOC_КредитНота` - основной макет
- `ПФ_DOC_КредитНотаДилер` - для дилеров
- `ПФ_DOC_КредитНотаМедицина` - для медицинских представителей
- `ПФ_DOC_КредитНотаИглы2018` - специализированный макет
- `ПФ_DOC_КредитНотаДилерское2018` - для дилеров (версия 2018)
- `ПФ_DOC_КредитНотаФармДистКвартал` - для фармацевтических дистрибьюторов
- `ПФ_DOC_КредитНотаКурасен` - специализированный макет
**Назначение:**
- Различные форматы печати кредит-нот в зависимости от типа клиента и бизнес-процесса
- Адаптация под специфику различных направлений бизнеса
---
## 6. Выводы и рекомендации
### 6.1. Основные выводы
1. **Признак КредитНота** в документе "ЗаказКлиента" используется для маркировки заказов, связанных с кредит-нотами
2. **Два подхода к работе с кредит-нотами:**
- **Основная конфигурация:** Использует признак в заказе и отчеты/обработки для формирования
- **Расширение Рана:** Добавляет отдельный документ "р_КредитНота" для формализованного оформления
3. **Исключение из учета:** Документы с кредит-нотами исключаются из процесса "Отражение факта продаж"
4. **Множество печатных форм:** Различные макеты для разных типов клиентов и бизнес-процессов
### 6.2. Рекомендации
1. При переносе функционала в целевую конфигурацию необходимо:
- Сохранить признак `КредитНота` в документе "ЗаказКлиента"
- Обеспечить логику исключения из "Отражения факта продаж"
- Перенести или адаптировать отчеты и обработки
2. Рассмотреть возможность использования документа "р_КредитНота" из расширения как основного способа оформления кредит-нот
3. Проверить совместимость печатных форм с целевой конфигурацией
---
## 7. Сводная таблица применения реквизита КредитНота
| Объект | Реквизит/Элемент | Тип | Использование | Контекст применения | Печатные формы |
|--------|------------------|-----|---------------|---------------------|----------------|
| Документ "ЗаказКлиента" | КредитНота | Boolean | Маркировка заказов как кредит-нот | Реквизит документа для указания признака кредит-ноты | ❌ Не используется |
| Документ "ЗаказКлиента" (форма) | КредитНота | Boolean | Отображение в форме документа | Элемент формы для работы пользователя (расширение Рана) | - |
| Документ "rh_ОтражениеФактаПродаж" | ЗаказКлиента.КредитНота | Boolean | Исключение из учета фактов продаж | ⚠️ НЕ ПРИМЕНЯЕТСЯ - фильтрация через `НЕ ЕСТЬNULL(РеализацияТоваровУслуг.ЗаказКлиента.КредитНота, ЛОЖЬ)` | - |
| Обработка "КредитНотаЗаПериод" | ЗаказКлиента.КредитНота | Boolean | Определение заказов по кредит-нотам | Определяет заказы, связанные со списанием задолженности, для формирования кредит-нот | - |
| Отчет "КредитНота" | - | - | Формирование данных по кредит-нотам | Использует связь через списание задолженности для определения заказов по кредит-нотам | ✅ Используется |
| Отчет "р_КонтрольВыполненияПланаЗакупок" | ЗаказКлиента.КредитНота | Boolean | Исключение заказов с кредит-нотами | Фильтрация: `ЗаказКлиента.КредитНота = ЛОЖЬ` и `ЗаказКлиентаТовары.Ссылка.КредитНота = ЛОЖЬ` | - |
| Обработка "р_ИмпортЗаказовКлиентов" | КредитНота | Boolean | Импорт признака кредит-ноты | Столбец в шаблоне импорта для указания признака при импорте заказов | - |
| Общая форма "СписокДокументовПодКредитНоту" | - | - | Печать кредит-нот | Формирование печатных форм кредит-нот через MS Word | ✅ Используется |
| Документ "РеализацияТоваровУслуг" | ЗаказКлиента.КредитНота | Boolean | Доступ через связь с заказом | Доступ к признаку через связь `РеализацияТоваровУслуг.ЗаказКлиента.КредитНота` | ✅ Используется (7 макетов) |
**Условные обозначения:**
- ✅ Используется
- ❌ Не используется
- - Не применимо
- ⚠️ НЕ ПРИМЕНЯЕТСЯ - объект присутствует в конфигурации, но не используется в текущей версии
**Примечания:**
1. Реквизит `КредитНота` определен в документе "ЗаказКлиента" как булево значение
2. В документе "rh_ОтражениеФактаПродаж" используется для исключения документов реализации с кредит-нотами из процесса отражения факта продаж, но сам документ не применяется
3. В обработке "КредитНотаЗаПериод" реквизит используется косвенно - через определение заказов, связанных со списанием задолженности
4. В отчете "р_КонтрольВыполненияПланаЗакупок" реквизит используется для исключения заказов с кредит-нотами из плана закупок
5. В документе "РеализацияТоваровУслуг" доступ к реквизиту осуществляется через связь с заказом клиента
6. Печатные формы кредит-нот определены в документе "РеализацияТоваровУслуг" (7 различных макетов)
---
## 8. Список объектов, связанных с КредитНота
### Основная конфигурация:
- `Document.ЗаказКлиента` - реквизит КредитНота
- `Document.rh_ОтражениеФактаПродаж` - ⚠️ НЕ ПРИМЕНЯЕТСЯ (содержит код для фильтрации, но документ не используется)
- `Report.КредитНота` - отчет для формирования кредит-нот
- `DataProcessor.КредитНотаЗаПериод` - обработка для формирования за период
- `CommonForm.СписокДокументовПодКредитНоту` - форма для печати
- `Role.КредитНота` - роль доступа
- `CommonTemplate.КредитНота` - шаблон печати
- `Document.РеализацияТоваровУслуг` - макеты печати (7 различных)
### Расширение Рана:
- `Document.р_КредитНота` - документ оформления кредит-ноты
- `InformationRegister.р_ОформленныеКредитНоты` - регистр учета оформленных кредит-нот
- Роль доступа в подсистеме `rh_RhanaПодсистема`
---
**Версия документа:** 1.1 от 27.12.2025
@@ -1,581 +0,0 @@
---
title: Анализ применения признака Кредит-нота (КредитНота) в исходной конфигурации
version: 2.0
date_modified: 2026-01-07
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
date_created: 2025-12-27
show_metadata_block: true
show_index_link: true
show_toc: true
---
# Анализ применения признака Кредит-нота (КредитНота) в исходной конфигурации
## Версия анализа
Версия 2.0 от 07.01.2026
## Автор
Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
## Цель анализа
Определить, где и для чего применяется признак "Кредит-нота" (КредитНота) в основной исходной конфигурации `CRM3devLocal` и расширении `CRM3devLocal.Рана`.
---
## 1. Основная конфигурация CRM3devLocal
### 1.1. Документ ЗаказКлиента
**Расположение:** `CRM3devLocal/src/Documents/ЗаказКлиента/ЗаказКлиента.mdo`
**Реквизит:**
- **Имя:** `КредитНота`
- **Тип:** `Boolean` (Булево)
- **Синonym:** "Кредит нота"
- **Описание:** Признак того, что заказ клиента является кредит-нотой
**Назначение:**
- Используется для маркировки заказов клиентов, которые являются кредит-нотами
- Позволяет идентифицировать заказы, по которым предоставляется кредит-нота (возврат средств или корректировка задолженности)
**Использование в коде:**
- В обработке `КредитНотаЗаПериод` используется для определения заказов, связанных с кредит-нотами
- В запросах проверяется условие: `НЕ ЕСТЬNULL(РеализацияТоваровУслуг.ЗаказКлиента.КредитНота, ЛОЖЬ)`
- ⚠️ Примечание: Документ `rh_ОтражениеФактаПродаж` содержит код для работы с КредитНота, но сам документ не применяется
---
### 1.2. Документ rh_ОтражениеФактаПродаж
**Расположение:** `CRM3devLocal/src/Documents/rh_ОтражениеФактаПродаж/Forms/ФормаДокумента/Module.bsl`
**Статус:** ⚠️ **НЕ ПРИМЕНЯЕТСЯ** - документ присутствует в конфигурации, но не используется в текущей версии
**Примечание:** Несмотря на наличие кода, использующего признак КредитНота в этом документе, сам документ не применяется в рабочей конфигурации.
**Код (для справки):**
1. **В функции `ПолучитьЗапросДокументовЗаПериод_CRM3()`:**
- Используется дополнительное свойство "ЗаказКлиентаКредитНота" из плана видов характеристик "ДополнительныеРеквизитыИСведения"
- Проверяется наличие признака кредит-ноты через соединение с дополнительными реквизитами заказа клиента
- Условие фильтрации: `ЕСТЬNULL(ЗаказКлиентаДополнительныеРеквизиты.Значение, ЛОЖЬ) = ЛОЖЬ`
2. **В функции `ПолучитьЗапросДокументовЗаПериод_CRM2()`:**
- Прямая проверка реквизита: `НЕ ЕСТЬNULL(РеализацияТоваровУслуг.ЗаказКлиента.КредитНота, ЛОЖЬ)`
- Используется для исключения документов реализации с кредит-нотами из списка документов для отражения факта продаж
**Назначение (теоретическое):**
- Исключение документов реализации, связанных с кредит-нотами, из процесса отражения факта продаж
- Разделение учета обычных продаж и кредит-нот
---
### 1.3. Отчет КредитНота
**Расположение:** `CRM3devLocal/src/Reports/КредитНота/`
**Описание:**
- Отчет для формирования кредит-нот
- Использует схему компоновки данных с полями:
- `КоличествоКредитНота` - количество по кредит-ноте
- `СуммаСНДСКредитНота` - сумма с НДС по кредит-ноте
**Назначение:**
- Формирование печатных форм кредит-нот
- Аналитика по кредит-нотам
---
### 1.4. Обработка КредитНотаЗаПериод
**Расположение:** `CRM3devLocal/src/DataProcessors/КредитНотаЗаПериод/`
**Функционал:**
- Формирование списка документов для кредит-нот за период
- Работа со списанием задолженности
- Определение заказов клиентов, связанных с кредит-нотами через списание задолженности
- Разделение счетов-фактур на две группы:
- **КредитНоты** - счета-фактуры по заказам, связанным с кредит-нотами
- **НеКредитНоты** - остальные счета-фактуры
**Логика работы:**
1. Находит документы "Списание задолженности" за период
2. Определяет заказы клиентов, связанные с этими списаниями
3. Находит счета-фактуры выданные по этим заказам
4. Разделяет счета-фактуры на две группы для дальнейшей обработки
**Назначение:**
- Автоматизация процесса формирования кредит-нот за период
- Группировка документов для печати кредит-нот
---
### 1.5. Общая форма СписокДокументовПодКредитНоту
**Расположение:** `CRM3devLocal/src/CommonForms/СписокДокументовПодКредитНоту/Module.bsl`
**Функционал:**
- Форма для выбора документов реализации для формирования кредит-ноты
- Печать кредит-ноты через MS Word
- Формирование описания документов для кредит-ноты
**Использование:**
- Выбор документов реализации за период (до 4 месяцев назад)
- Формирование печатной формы кредит-ноты с описанием выбранных документов
- Печать через `УправлениеПечатьюMSWordКлиент.ПечатьКредитНота()`
---
### 1.6. Роль доступа КредитНота
**Расположение:** `CRM3devLocal/src/Roles/КредитНота/`
**Назначение:**
- Предоставляет права доступа на работу с кредит-нотами
- Включает права на отчет "КредитНота"
---
### 1.7. Общий шаблон КредитНота
**Расположение:** `CRM3devLocal/src/CommonTemplates/КредитНота/`
**Назначение:**
- Шаблон для печати кредит-нот
---
## 2. Расширение CRM3devLocal.Рана
### 2.1. Документ р_КредитНота (Оформление кредит-ноты)
**Расположение:** `CRM3devLocal.Рана/src/Documents/р_КредитНота/`
**Описание:**
- Отдельный документ для оформления кредит-ноты
- Является расширением основной конфигурации
**Реквизиты:**
- Организация
- Контрагент
- ДокументОснование (РеализацияТоваровУслуг)
- Партнер (Клиент)
- Соглашение
- Договор
- И другие реквизиты для оформления кредит-ноты
**Регистры записей:**
- `р_ОформленныеКредитНоты` - регистр сведений для учета оформленных кредит-нот
**Назначение:**
- Формализованное оформление кредит-нот как отдельного документа
- Учет оформленных кредит-нот в регистре сведений
- Интеграция с документом "Реализация товаров и услуг" через поле "ДокументОснование"
---
### 2.2. Роль доступа "Оформление кредит-ноты (Рана)"
**Расположение:** `CRM3devLocal.Рана/src/Roles/р_ОтчетыБрендМенеджера/Rights.rights`
**Назначение:**
- Предоставляет права на документ `р_КредитНота`
- Входит в подсистему `rh_RhanaПодсистема`
---
## 3. Связи и взаимодействия
### 3.1. Связь ЗаказКлиента → РеализацияТоваровУслуг
**Механизм:**
- В документе "Реализация товаров и услуг" есть ссылка на "ЗаказКлиента"
- Через эту ссылку доступен реквизит `ЗаказКлиента.КредитНота`
- Используется для фильтрации и идентификации реализаций, связанных с кредит-нотами
### 3.2. Связь через дополнительные реквизиты
**Механизм (для CRM3):**
- Используется план видов характеристик "ДополнительныеРеквизитыИСведения"
- Свойство "ЗаказКлиентаКредитНота" хранится в дополнительных реквизитах
- Позволяет гибко настраивать признак кредит-ноты
### 3.3. Связь со списанием задолженности
**Механизм:**
- Документ "Списание задолженности" может быть связан с заказами клиентов
- Обработка "КредитНотаЗаПериод" использует эту связь для определения заказов по кредит-нотам
---
## 4. Назначение и бизнес-логика
### 4.1. Основное назначение
**Кредит-нота** - это документ, который:
1. Оформляется для корректировки задолженности перед клиентом
2. Может быть связан с возвратом товаров или корректировкой сумм
3. Используется для уменьшения задолженности клиента перед организацией
### 4.2. Бизнес-процесс
1. **Создание заказа клиента** с установленным признаком `КредитНота = Истина`
2. **Создание документа реализации** на основании заказа с кредит-нотой
3. **Оформление списания задолженности** (опционально)
4. **Формирование кредит-ноты** через:
- Отчет "КредитНота"
- Обработку "КредитНотаЗаПериод"
- Документ "р_КредитНота" (в расширении)
5. **Печать кредит-ноты** через общую форму "СписокДокументовПодКредитНоту"
### 4.3. Исключение из учета
- ⚠️ **Примечание:** Документ "rh_ОтражениеФактаПродаж" не применяется в текущей конфигурации
- Теоретически документы реализации с кредит-нотами должны исключаться из процесса "Отражение факта продаж"
- Это позволяет разделить учет обычных продаж и кредит-нот
- Кредит-ноты не учитываются в фактах продаж для планирования
---
## 5. Печатные формы
### 5.1. Макеты печати в документе РеализацияТоваровУслуг
В документе "Реализация товаров и услуг" определены следующие макеты для кредит-нот:
- `ПФ_DOC_КредитНота` - основной макет
- `ПФ_DOC_КредитНотаДилер` - для дилеров
- `ПФ_DOC_КредитНотаМедицина` - для медицинских представителей
- `ПФ_DOC_КредитНотаИглы2018` - специализированный макет
- `ПФ_DOC_КредитНотаДилерское2018` - для дилеров (версия 2018)
- `ПФ_DOC_КредитНотаФармДистКвартал` - для фармацевтических дистрибьюторов
- `ПФ_DOC_КредитНотаКурасен` - специализированный макет
**Назначение:**
- Различные форматы печати кредит-нот в зависимости от типа клиента и бизнес-процесса
- Адаптация под специфику различных направлений бизнеса
---
## 6. Выводы и рекомендации
### 6.1. Основные выводы
1. **Признак КредитНота** в документе "ЗаказКлиента" используется для маркировки заказов, связанных с кредит-нотами
2. **Два подхода к работе с кредит-нотами:**
- **Основная конфигурация:** Использует признак в заказе и отчеты/обработки для формирования
- **Расширение Рана:** Добавляет отдельный документ "р_КредитНота" для формализованного оформления
3. **Исключение из учета:** Документы с кредит-нотами исключаются из процесса "Отражение факта продаж"
4. **Множество печатных форм:** Различные макеты для разных типов клиентов и бизнес-процессов
### 6.2. Рекомендации
1. При переносе функционала в целевую конфигурацию необходимо:
- Сохранить признак `КредитНота` в документе "ЗаказКлиента"
- Обеспечить логику исключения из "Отражения факта продаж"
- Перенести или адаптировать отчеты и обработки
2. Рассмотреть возможность использования документа "р_КредитНота" из расширения как основного способа оформления кредит-нот
3. Проверить совместимость печатных форм с целевой конфигурацией
---
## 7. Сводная таблица применения реквизита КредитНота
| Объект | Реквизит/Элемент | Тип | Использование | Контекст применения | Печатные формы |
|--------|------------------|-----|---------------|---------------------|----------------|
| Документ "ЗаказКлиента" | КредитНота | Boolean | Маркировка заказов как кредит-нот | Реквизит документа для указания признака кредит-ноты | ❌ Не используется |
| Документ "ЗаказКлиента" (форма) | КредитНота | Boolean | Отображение в форме документа | Элемент формы для работы пользователя (расширение Рана) | - |
| Документ "rh_ОтражениеФактаПродаж" | ЗаказКлиента.КредитНота | Boolean | Исключение из учета фактов продаж | ⚠️ НЕ ПРИМЕНЯЕТСЯ - фильтрация через `НЕ ЕСТЬNULL(РеализацияТоваровУслуг.ЗаказКлиента.КредитНота, ЛОЖЬ)` | - |
| Обработка "КредитНотаЗаПериод" | ЗаказКлиента.КредитНота | Boolean | Определение заказов по кредит-нотам | Определяет заказы, связанные со списанием задолженности, для формирования кредит-нот | - |
| Отчет "КредитНота" | - | - | Формирование данных по кредит-нотам | Использует связь через списание задолженности для определения заказов по кредит-нотам | ✅ Используется |
| Отчет "р_КонтрольВыполненияПланаЗакупок" | ЗаказКлиента.КредитНота | Boolean | Исключение заказов с кредит-нотами | Фильтрация: `ЗаказКлиента.КредитНота = ЛОЖЬ` и `ЗаказКлиентаТовары.Ссылка.КредитНота = ЛОЖЬ` | - |
| Обработка "р_ИмпортЗаказовКлиентов" | КредитНота | Boolean | Импорт признака кредит-ноты | Столбец в шаблоне импорта для указания признака при импорте заказов | - |
| Общая форма "СписокДокументовПодКредитНоту" | - | - | Печать кредит-нот | Формирование печатных форм кредит-нот через MS Word | ✅ Используется |
| Документ "РеализацияТоваровУслуг" | ЗаказКлиента.КредитНота | Boolean | Доступ через связь с заказом | Доступ к признаку через связь `РеализацияТоваровУслуг.ЗаказКлиента.КредитНота` | ✅ Используется (7 макетов) |
**Условные обозначения:**
- ✅ Используется
- ❌ Не используется
- - Не применимо
- ⚠️ НЕ ПРИМЕНЯЕТСЯ - объект присутствует в конфигурации, но не используется в текущей версии
**Примечания:**
1. Реквизит `КредитНота` определен в документе "ЗаказКлиента" как булево значение
2. В документе "rh_ОтражениеФактаПродаж" используется для исключения документов реализации с кредит-нотами из процесса отражения факта продаж, но сам документ не применяется
3. В обработке "КредитНотаЗаПериод" реквизит используется косвенно - через определение заказов, связанных со списанием задолженности
4. В отчете "р_КонтрольВыполненияПланаЗакупок" реквизит используется для исключения заказов с кредит-нотами из плана закупок
5. В документе "РеализацияТоваровУслуг" доступ к реквизиту осуществляется через связь с заказом клиента
6. Печатные формы кредит-нот определены в документе "РеализацияТоваровУслуг" (7 различных макетов)
---
## 8. Список объектов, связанных с КредитНота
### Основная конфигурация:
- `Document.ЗаказКлиента` - реквизит КредитНота
- `Document.rh_ОтражениеФактаПродаж` - ⚠️ НЕ ПРИМЕНЯЕТСЯ (содержит код для фильтрации, но документ не используется)
- `Report.КредитНота` - отчет для формирования кредит-нот
- `DataProcessor.КредитНотаЗаПериод` - обработка для формирования за период
- `CommonForm.СписокДокументовПодКредитНоту` - форма для печати
- `Role.КредитНота` - роль доступа
- `CommonTemplate.КредитНота` - шаблон печати
- `Document.РеализацияТоваровУслуг` - макеты печати (7 различных)
### Расширение Рана:
- `Document.р_КредитНота` - документ оформления кредит-ноты
- `InformationRegister.р_ОформленныеКредитНоты` - регистр учета оформленных кредит-нот
- Роль доступа в подсистеме `rh_RhanaПодсистема`
---
## 9. Выводы и рекомендации по переносу в новую базу (CRM326)
### 9.1. Анализ текущего состояния в новой базе
**Что уже реализовано:**
- ✅ Логика копирования признака "РК_КредитНота" из заказа клиента в реализацию через `УправлениеСвойствами`
- ✅ Механизм дополнительных реквизитов БСП настроен и работает
- ✅ Копирование происходит автоматически при создании реализации на основании заказа
**Что отсутствует:**
- ❌ Реквизит "КредитНота" в документе "ЗаказКлиента" (заменен на дополнительное свойство)
- ❌ Фильтрация документов реализации по признаку кредит-ноты в обработке "КредитНотаЗаПериод" (требуется реализовать)
- ❌ Исключение документов с кредит-нотами из отчетов и обработок (требуется проверить и реализовать)
- ❌ Элементы форм для отображения признака кредит-ноты (требуется реализовать)
- ❌ Обработка импорта заказов с признаком кредит-ноты (не требуется на текущий момент)
### 9.2. Приоритетный подход: использование типового механизма БСП
**Принципы реализации:**
1. Использовать типовой механизм дополнительных реквизитов БСП (план видов характеристик "ДополнительныеРеквизитыИСведения")
2. Минимум доработок конфигурации
3. Минимум новых объектов в расширении
4. Использовать существующие допустимые типы дополнительных свойств
### 9.3. Рекомендации по реализации
#### 9.3.1. Использование дополнительного свойства "РК_КредитНота"
**Тип значения:** `Булево` (Boolean) - уже входит в допустимые типы плана видов характеристик
**Обоснование:**
- Признак кредит-ноты - это булево значение (Истина/Ложь)
- Для фильтрации и проверки достаточно булева типа
- Не требуется создавать дополнительные справочники или перечисления
- Минимум доработок конфигурации
- Тип `Булево` уже поддерживается механизмом БСП
**Настройка в базе данных:**
1. Создать дополнительное свойство "РК_КредитНота" в плане видов характеристик "ДополнительныеРеквизитыИСведения"
2. Тип значения: `Булево`
3. Применить к объектам: `Документ.ЗаказКлиента`, `Документ.РеализацияТоваровУслуг`
4. Настроить видимость и доступность для соответствующих ролей
5. Значение по умолчанию: `Ложь`
#### 9.3.2. Реализация фильтрации в обработке "КредитНотаЗаПериод"
**Вариант 1: Фильтрация через табличную часть "ДополнительныеРеквизиты"**
```bsl
// Пример запроса для исключения документов с кредит-нотами
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК ДопРекв
ПО РеализацияТоваровУслуг.Ссылка = ДопРекв.Ссылка
И ДопРекв.Свойство.Имя = "РК_КредитНота"
И ДопРекв.Значение = ИСТИНА
ГДЕ
ЕСТЬNULL(ДопРекв.Значение, ЛОЖЬ) = ЛОЖЬ
// Исключаем документы, у которых признак кредит-ноты = ИСТИНА
```
**Вариант 2: Фильтрация через программную проверку**
```bsl
// После получения выборки документов
Для Каждого СтрокаРеализации Из ВыборкаРеализаций Цикл
ЗначениеКредитНоты = УправлениеСвойствами.ЗначениеСвойства(
СтрокаРеализации.Ссылка,
"РК_КредитНота"
);
Если НЕ ЕСТЬNULL(ЗначениеКредитНоты, ЛОЖЬ) = ЛОЖЬ Тогда
// Документ без кредит-ноты - включаем в обработку
ТаблицаРезультатов.Добавить();
КонецЕсли;
КонецЦикла;
```
**Вариант 3: Фильтрация через связь с заказом клиента**
```bsl
// Если нужно проверять признак в заказе клиента
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказДопРекв
ПО РеализацияТоваровУслуг.ЗаказКлиента = ЗаказДопРекв.Ссылка
И ЗаказДопРекв.Свойство.Имя = "РК_КредитНота"
И ЗаказДопРекв.Значение = ИСТИНА
ГДЕ
ЕСТЬNULL(ЗаказДопРекв.Значение, ЛОЖЬ) = ЛОЖЬ
```
#### 9.3.3. Исключение из отчетов и обработок
**Отчет "р_КонтрольВыполненияПланаЗакупок":**
- Требуется адаптировать фильтрацию для исключения заказов с кредит-нотами
- Использовать дополнительное свойство "РК_КредитНота" вместо прямого реквизита
**Обработка "КредитНотаЗаПериод":**
- Адаптировать запросы для работы с дополнительным свойством
- Обеспечить корректное определение заказов по кредит-нотам
#### 9.3.4. Информационное отображение
**Текущая реализация:**
- Логика копирования из заказа в реализацию реализована в `ObjectModule.bsl`
**Требуется реализовать:**
- Добавить элемент формы (чекбокс) для отображения и редактирования признака кредит-ноты в документе "ЗаказКлиента"
- Добавить элемент формы (только для чтения) для отображения признака кредит-ноты в документе "РеализацияТоваровУслуг"
- При необходимости добавить отображение в документе "РасходныйОрдерНаТовары" (аналогично купону)
### 9.4. Шаги реализации
#### Шаг 1: Настройка дополнительного свойства в базе данных
1. Открыть конфигуратор новой базы
2. Перейти в план видов характеристик "ДополнительныеРеквизитыИСведения"
3. Создать новый элемент с именем "РК_КредитНота"
4. Настроить параметры:
- **Имя:** `РК_КредитНота`
- **Тип значения:** `Булево`
- **Заголовок:** "Кредит-нота"
- **Применяется к:** `Документ.ЗаказКлиента`, `Документ.РеализацияТоваровУслуг`
- **Значение по умолчанию:** `Ложь`
- **Видимость:** Настроить для соответствующих ролей
- **Доступность:** Настроить для соответствующих ролей
#### Шаг 2: Проверка существующей логики
1. Проверить работу копирования признака кредит-ноты из заказа в реализацию
2. Убедиться, что копирование происходит корректно при создании реализации на основании заказа
3. Проверить, что значение по умолчанию устанавливается правильно
#### Шаг 3: Добавление элементов форм
1. **Документ "ЗаказКлиента":**
- Добавить элемент формы типа "ПолеФормы" с типом "Чекбокс"
- Привязать к дополнительному свойству через `УправлениеСвойствами`
- Настроить видимость и доступность
2. **Документ "РеализацияТоваровУслуг":**
- Добавить элемент формы типа "ПолеФормы" с типом "Чекбокс" (только для чтения)
- Привязать к дополнительному свойству через `УправлениеСвойствами`
- Настроить видимость
#### Шаг 4: Реализация фильтрации в обработке "КредитНотаЗаПериод"
1. Адаптировать запросы в обработке для фильтрации по дополнительному свойству
2. Использовать табличную часть "ДополнительныеРеквизиты" или программную проверку
3. Протестировать корректность определения заказов по кредит-нотам
**Важно:** Обработка "КредитНотаЗаПериод" обязательна к переносу, так как используется для формирования кредит-нот за период.
#### Шаг 5: Адаптация отчетов
1. Проверить отчет "р_КонтрольВыполненияПланаЗакупок"
2. Адаптировать фильтрацию для работы с дополнительным свойством
3. Протестировать корректность исключения заказов с кредит-нотами
#### Шаг 6: Тестирование
1. Проверить создание и заполнение признака кредит-ноты в документе "ЗаказКлиента"
2. Проверить копирование признака в документ "РеализацияТоваровУслуг"
3. Проверить отображение признака в формах документов
4. Проверить фильтрацию в обработке "КредитНотаЗаПериод" - убедиться, что заказы с кредит-нотами определяются корректно
5. Проверить исключение заказов с кредит-нотами из отчетов
### 9.5. Что НЕ требуется переносить
1. **Реквизит "КредитНота" в документах** - заменен на дополнительное свойство
2. **Документ "rh_ОтражениеФактаПродаж"** - не применяется в текущей конфигурации
3. **Обработка импорта заказов** - не требуется на текущий момент (можно реализовать позже)
4. **Печатные формы** - требуют отдельного анализа и переноса (не входит в текущую задачу)
### 9.6. Преимущества выбранного подхода
1. **Минимум доработок:** Используется существующий механизм БСП
2. **Гибкость:** Легко изменить логику работы с признаком
3. **Стандартность:** Соответствует типовым подходам БСП
4. **Простота поддержки:** Не требует создания новых объектов метаданных
5. **Расширяемость:** При необходимости можно добавить дополнительные свойства для кредит-нот
### 9.7. Оценка трудозатрат
| Этап | Описание | Время |
|------|----------|-------|
| Настройка дополнительного свойства | Создание и настройка в БД | 0.5-1 час |
| Проверка существующей логики | Тестирование копирования | 1-2 часа |
| Добавление элементов форм | Добавление чекбоксов в формы документов | 3-4 часа |
| Реализация фильтрации | Адаптация запросов в обработке | 3-5 часов |
| Адаптация отчетов | Изменение фильтрации в отчетах | 2-3 часа |
| Тестирование | Полное тестирование функциональности | 3-4 часа |
| **ИТОГО** | | **13-19 часов** |
### 9.8. Риски и ограничения
1. **Ограничение:** Фильтрация в запросах может быть менее эффективной, чем по прямому реквизиту
- **Решение:** Использовать индексы на табличной части "ДополнительныеРеквизиты"
2. **Ограничение:** Нет прямой связи между признаком в заказе и реализацией через реквизит
- **Решение:** Использовать механизм копирования через `УправлениеСвойствами` (уже реализовано)
3. **Ограничение:** Печатные формы требуют отдельной адаптации
- **Решение:** Адаптировать макеты печати для работы с дополнительным свойством (отдельная задача)
4. **Ограничение:** Отчеты и обработки, использующие прямой доступ к реквизиту, требуют адаптации
- **Решение:** Поэтапная адаптация всех мест использования
### 9.9. Назначение применения признака КредитНота
**Основные сценарии использования:**
1. **Маркировка заказов как кредит-нот:**
- Позволяет идентифицировать заказы, по которым предоставляется кредит-нота
- Используется для корректировки задолженности перед клиентом
2. **Исключение из учета фактов продаж:**
- Документы реализации с кредит-нотами не должны учитываться в фактах продаж
- Разделение учета обычных продаж и кредит-нот
3. **Формирование кредит-нот за период:**
- Обработка "КредитНотаЗаПериод" использует признак для определения заказов по кредит-нотам
- Группировка документов для печати кредит-нот
4. **Исключение из планов закупок:**
- Заказы с кредит-нотами исключаются из планов закупок
- Обеспечивает корректность планирования
5. **Печатные формы:**
- Различные макеты печати кредит-нот в зависимости от типа клиента
- Адаптация под специфику различных направлений бизнеса
**Бизнес-логика:**
- Кредит-нота оформляется для корректировки задолженности перед клиентом
- Может быть связана с возвратом товаров или корректировкой сумм
- Используется для уменьшения задолженности клиента перед организацией
- Кредит-ноты не учитываются в фактах продаж для планирования
---
**Версия документа:** 2.0 от 07.01.2026
@@ -1,583 +0,0 @@
---
title: Анализ применения реквизита Купон в исходной конфигурации включая расширение
version: 1.0
date_modified: 2025-12-27
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
date_created: 2025-12-27
show_metadata_block: true
show_index_link: true
---
# Анализ применения реквизита Купон в исходной конфигурации включая расширение
## Версия анализа
Версия 1.0 от 27.12.2025
## Автор
Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
## Цель анализа
Определить, где и для чего применяется реквизит "Купон" в основной исходной конфигурации `CRM3devLocal` и расширении `CRM3devLocal.Рана`.
---
## 1. Справочник Купоны
### 1.1. Основная конфигурация CRM3devLocal
**Расположение:** `CRM3devLocal/src/Catalogs/Купоны/Купоны.mdo`
**Характеристики справочника:**
- **Имя:** `Купоны`
- **Синоним:** "Купоны"
- **Иерархический:** Да (2 уровня)
- **Папки сверху:** Да
- **Длина кода:** 9 символов
- **Длина наименования:** 99 символов
- **Тип кода:** Строка
- **Автонумерация:** Включена
- **Проверка уникальности:** Включена
- **Ввод по строке:** По коду и наименованию
- **Создание при вводе:** Разрешено
- **Полнотекстовый поиск:** Используется
- **Режим блокировки данных:** Управляемый
**Назначение:**
Справочник предназначен для хранения информации о купонах, используемых в системе. Купоны могут применяться в заказах клиентов для предоставления скидок или специальных предложений.
---
### 1.2. Расширение CRM3devLocal.Рана
**Расположение:** `CRM3devLocal.Рана/src/Catalogs/Купоны/Купоны.mdo`
**Особенности:**
- Справочник наследуется из основной конфигурации (расширяется)
- Объект принадлежит основной конфигурации (`objectBelonging: Adopted`)
- Расширение проверено (`extendedConfigurationObject: Checked`)
---
## 2. Реквизит Купон в документах
### 2.1. Документ ЗаказКлиента
#### 2.1.1. Основная конфигурация CRM3devLocal
**Расположение:** `CRM3devLocal/src/Documents/ЗаказКлиента/ЗаказКлиента.mdo`
**Характеристики реквизита:**
- **Имя:** `Купон`
- **Синоним:** "Купон"
- **Тип:** `CatalogRef.Купоны` (СправочникСсылка.Купоны)
- **UUID:** `0cff627d-b65a-4305-a44a-8aaf52751002`
- **Полнотекстовый поиск:** Используется
- **История данных:** Используется
**Назначение:**
Реквизит предназначен для указания купона, применяемого к заказу клиента. Позволяет связать заказ с конкретным купоном из справочника.
---
#### 2.1.2. Расширение CRM3devLocal.Рана
**Расположение:** `CRM3devLocal.Рана/src/Documents/ЗаказКлиента/ЗаказКлиента.mdo`
**Особенности расширения:**
- Реквизит наследуется из основной конфигурации
- Объект принадлежит основной конфигурации (`objectBelonging: Adopted`)
- Расширение проверено (`extendedConfigurationObject: Checked`)
- Тип реквизита подтвержден (`typeExtension: Checked`)
**Использование в форме документа:**
**Расположение:** `CRM3devLocal.Рана/src/Documents/ЗаказКлиента/Forms/ФормаДокумента/Form.form`
**Элемент формы:**
- **Имя элемента:** `Купон`
- **Тип:** Поле ввода (`InputField`)
- **Видимость:** Да
- **Доступность:** Да
- **Отображение в заголовке:** Да
- **Отображение в подвале:** Да
- **Режим редактирования:** Ввод
- **Путь к данным:** `Объект.Купон`
- **Расширенная подсказка:** `КупонРасширеннаяПодсказка`
- **Контекстное меню:** `КупонКонтекстноеМеню`
**Назначение:**
Элемент формы позволяет пользователю выбирать и указывать купон для заказа клиента непосредственно в форме документа.
---
### 2.2. Документ РеализацияТоваровУслуг
#### 2.2.1. Основная конфигурация CRM3devLocal
**Расположение:** `CRM3devLocal/src/Documents/РеализацияТоваровУслуг/РеализацияТоваровУслуг.mdo`
**Характеристики реквизита:**
- **Имя:** `Купон`
- **Синоним:** "Купон"
- **Тип:** `CatalogRef.Купоны` (СправочникСсылка.Купоны)
- **UUID:** `1ce768af-c451-41a1-932f-723cc784a8ea`
- **Полнотекстовый поиск:** Используется
- **История данных:** Используется
**Назначение:**
Реквизит предназначен для указания купона, применяемого к документу реализации товаров и услуг. Позволяет связать реализацию с конкретным купоном из справочника.
**Особенности:**
- Реквизит определен в основной конфигурации
- Используется в обработке "КредитНотаЗаПериод" для фильтрации документов (см. раздел 4.1)
- Купон может быть скопирован из заказа клиента при создании реализации на основании заказа
**Использование в запросах:**
В обработке "КредитНотаЗаПериод" используется условие проверки пустого купона:
**Файл:** `CRM3devLocal/src/DataProcessors/КредитНотаЗаПериод/Forms/Форма/Module.bsl` (строка 47)
```bsl
| И СчетФактураВыданный.ДокументОснование.Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)
```
**Файл:** `CRM3devLocal/src/DataProcessors/КредитНотаЗаПериод/Forms/Форма/Module.bsl` (строка 67)
```bsl
| И СчетФактураВыданный.ДокументОснование.Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)
```
**Назначение проверки:**
Обработка "КредитНотаЗаПериод" выбирает документы реализации, у которых купон **пустой** (равен пустой ссылке). Это означает, что документы реализации с указанным купоном **не включаются** в кредит-ноты за период.
**Печатные формы:**
⚠️ **Примечание:** Проверка макетов печати документа "РеализацияТоваровУслуг" показала, что реквизит "Купон" **не используется** в печатных формах. Информация о купоне не выводится на печатные формы документа.
---
## 3. Использование реквизита Купон в документе РасходныйОрдерНаТовары
### 3.1. Реквизит формы р_КупонИзЗаказаКлиента
**Расположение:** `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/Forms/ФормаДокумента/Form.form`
**Характеристики:**
- **Имя:** `р_КупонИзЗаказаКлиента`
- **Заголовок:** "Купон использующийся в заказе клиента"
- **Тип:** `CatalogRef.Купоны` (СправочникСсылка.Купоны)
- **Видимость:** Да
- **Доступность:** Да
- **Путь к данным:** `р_КупонИзЗаказаКлиента`
- **Расширенная подсказка:** `р_КупонИзЗаказаКлиентаРасширеннаяПодсказка`
- **Контекстное меню:** `р_КупонИзЗаказаКлиентаКонтекстноеМеню`
**Назначение:**
Реквизит формы предназначен для отображения купона, который используется в связанном заказе клиента. Позволяет видеть информацию о купоне при работе с расходным ордером на товары.
---
### 3.2. Логика обновления информации о купоне
**Расположение:** `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/Forms/ФормаДокумента/Module.bsl`
**Процедура:** `р_ОбновитьИнформациюОбКупоне()`
**Логика работы:**
**Файл:** `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/Forms/ФормаДокумента/Module.bsl` (строки 114-127)
```bsl
Процедура р_ОбновитьИнформациюОбКупоне()
Структура = Новый Структура();
р_ПеременаяРаспоряжение = Объект.ТоварыПоРаспоряжениям[0].Распоряжение;
Для каждого Строка Из Объект.ТоварыПоРаспоряжениям Цикл
Если не Строка.Распоряжение = р_ПеременаяРаспоряжение Тогда
ОбщегоНазначения.СообщитьПользователю("Запрещенно в распоряжение добавлять больше одного заказа");
Возврат;
КонецЕсли;
Если не ТипЗнч(Строка.Распоряжение) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
Возврат;
КонецЕсли;
КонецЦикла;
р_КупонИзЗаказаКлиента = р_ПеременаяРаспоряжение.Купон;
КонецПроцедуры
```
**Описание логики:**
1. Процедура проверяет, что в документе "РасходныйОрдерНаТовары" указано только одно распоряжение (заказ клиента)
2. Проверяет, что распоряжение является документом "ЗаказКлиента"
3. Если условия выполнены, копирует значение реквизита `Купон` из заказа клиента в реквизит формы `р_КупонИзЗаказаКлиента`
**Вызов процедуры:**
- При создании документа на сервере: `р_ПриСозданииНаСервереПосле()` (строка 93)
- При обновлении данных о доставке: `р_р_ОбновитьДанныеОДоставкиПосле()` (строка 100)
- При изменении распоряжения в табличной части: `р_ТоварыПоРаспоряжениямРаспоряжениеПриИзмененииПосле()` (строка 131)
**Назначение:**
Обеспечивает автоматическое копирование информации о купоне из заказа клиента в расходный ордер на товары, что позволяет видеть, какой купон применяется к заказу при работе с документом отгрузки.
---
## 4. Использование в обработке КредитНотаЗаПериод
### 4.1. Фильтрация документов по купону
**Расположение:** `CRM3devLocal/src/DataProcessors/КредитНотаЗаПериод/Forms/Форма/Module.bsl`
**Использование реквизита "Купон":**
В обработке "КредитНотаЗаПериод" реквизит "Купон" используется для фильтрации документов реализации при формировании кредит-нот за период.
**Логика работы:**
1. **Первый запрос (строки 40-56):**
- Выбирает документы реализации, у которых купон **пустой** (`Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)`)
- Документы должны быть связаны с заказами по кредит-ноте
- Результат помещается в таблицу `КредитНоты`
2. **Второй запрос (строки 59-82):**
- Выбирает документы реализации, у которых купон **пустой** (`Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)`)
- Документы должны быть связаны с указанным партнером
- Документы должны содержать указанную номенклатуру
- Документы **не должны** быть связаны с заказами по кредит-ноте
- Результат помещается в таблицу `НеКредитНоты`
**Назначение:**
Обработка формирует кредит-ноты за период, **исключая** документы реализации, у которых указан купон. Это означает, что документы реализации с купонами не должны включаться в кредит-ноты, так как купоны используются для других целей (например, для предоставления скидок).
**Вывод:**
Реквизит "Купон" в документе "РеализацияТоваровУслуг" используется для **исключения** документов из процесса формирования кредит-нот. Документы с указанным купоном не участвуют в формировании кредит-нот за период.
---
## 5. Использование в обработке импорта заказов клиентов
### 5.1. Процедура сопоставления купона
**Расположение:** `CRM3devLocal.Рана/src/DataProcessors/р_ИмпортЗаказовКлиентов/ManagerModule.bsl`
**Процедура:** `СопоставитьКупон()`
**Файл:** `CRM3devLocal.Рана/src/DataProcessors/р_ИмпортЗаказовКлиентов/ManagerModule.bsl` (строки 401-419)
```bsl
Процедура СопоставитьКупон(ИсходноеЗначение, Приемник, Ячейка, ДанныеСтроки) Экспорт
Если ПустаяСтрока(ИсходноеЗначение) Тогда
Приемник = Справочники.Купоны.ПустаяСсылка();
Иначе
Приемник = Справочники.Купоны.НайтиПоНаименованию(ИсходноеЗначение);
Если Не ЗначениеЗаполнено(Приемник) Тогда
Приемник = Неопределено;
Возврат;
КонецЕсли;
КонецЕсли;
Ячейка.СодержитЗначение = Истина;
МассивТипаПартнера = Новый Массив;
МассивТипаПартнера.Добавить(Тип("СправочникСсылка.Купоны"));
ОписаниеТипа = Новый ОписаниеТипов(МассивТипаПартнера);
Ячейка.ТипЗначения = ОписаниеТипа;
Ячейка.Значение = Приемник;
КонецПроцедуры
```
**Логика работы:**
1. Если исходное значение пустое, устанавливает пустую ссылку на справочник "Купоны"
2. Если исходное значение заполнено, ищет элемент справочника "Купоны" по наименованию
3. Если элемент не найден, устанавливает `Неопределено` и завершает выполнение
4. Если элемент найден, устанавливает тип значения ячейки и значение для импорта
**Назначение:**
Процедура используется при импорте заказов клиентов из внешних источников (например, из Excel) для сопоставления текстового значения купона с элементом справочника "Купоны".
---
### 5.2. Использование в шаблоне импорта
**Расположение:** `CRM3devLocal.Рана/src/DataProcessors/р_ИмпортЗаказовКлиентов/Templates/СтолбцыЗаказовКлиентов/Template.mxlx`
**Информация о столбце:**
- **Название столбца:** "Купон"
- **Типы значений:** Null, Купоны
- **Процедура сопоставления:** `СопоставитьКупон`
**Назначение:**
Столбец в шаблоне импорта позволяет указывать купон для заказа клиента при импорте данных из внешних файлов.
---
## 6. Права доступа
### 6.1. Роли доступа к справочнику Купоны
**Роли в основной конфигурации CRM3devLocal:**
1. **rh_ДобавлениеРедактированиеКупонов**
- **Расположение:** `CRM3devLocal/src/Roles/rh_ДобавлениеРедактированиеКупонов/`
- **Синоним:** "Добавление и редактирование купонов"
- **Права:** Доступ к справочнику `Catalog.Купоны` (чтение, добавление, изменение)
- **UUID:** `92d7bed5-6fda-420f-8761-dd74bef24577`
2. **rh_ЧтениеКупонов**
- **Расположение:** `CRM3devLocal/src/Roles/rh_ЧтениеКупонов/`
- **Синоним:** "Чтение купонов"
- **Права:** Доступ к справочнику `Catalog.Купоны` (только чтение)
- **UUID:** `b75850b1-2ce5-4337-8bf9-c974f6f8a1a5`
**Роли в расширении CRM3devLocal.Рана:**
3. **НастройкаНСИ**
- **Расположение:** `CRM3devLocal.Рана/src/Roles/НастройкаНСИ/Rights.rights`
- **Права:** Доступ к справочнику `Catalog.Купоны`
4. **ДобавлениеИзменениеОбщейБазовойНСИ**
- **Расположение:** `CRM3devLocal.Рана/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights`
- **Права:** Доступ к справочнику `Catalog.Купоны`
5. **ЧтениеБазовойНСИ**
- **Расположение:** `CRM3devLocal.Рана/src/Roles/ЧтениеБазовойНСИ/Rights.rights`
- **Права:** Доступ к справочнику `Catalog.Купоны`
6. **ЧтениеНормативноСправочнойИнформации**
- **Расположение:** `CRM3devLocal.Рана/src/Roles/ЧтениеНормативноСправочнойИнформации/Rights.rights`
- **Права:** Доступ к справочнику `Catalog.Купоны`
**Назначение:**
Роли обеспечивают разграничение доступа к справочнику "Купоны" в зависимости от функций пользователя в системе.
---
## 7. Подсистемы
### 7.1. Включение в подсистему rh_Продажи (основная конфигурация)
**Расположение:** `CRM3devLocal/src/Subsystems/rh_Rhana/Subsystems/rh_Продажи/rh_Продажи.mdo`
**Информация:**
- Справочник `Catalog.Купоны` включен в подсистему `rh_Продажи`
- Подсистема `rh_Продажи` входит в подсистему `rh_Rhana`
- В подсистему также включены роли:
- `Role.rh_ДобавлениеРедактированиеКупонов`
- `Role.rh_ЧтениеКупонов`
**Назначение:**
Включение справочника в подсистему "Продажи" указывает на то, что купоны являются частью функционала продаж и используются в процессах продаж.
### 7.2. Включение в подсистему rh_НСИ (расширение)
**Расположение:** `CRM3devLocal.Рана/src/Subsystems/rh_Rhana/Subsystems/rh_НСИ/rh_НСИ.mdo`
**Информация:**
- Справочник `Catalog.Купоны` включен в подсистему `rh_НСИ`
- Подсистема `rh_НСИ` входит в подсистему `rh_Rhana`
**Назначение:**
Включение справочника в подсистему "Нормативно-справочная информация" (НСИ) указывает на то, что купоны являются частью справочной информации системы.
---
## 8. Схема использования реквизита Купон
### 8.1. Бизнес-процесс
1. **Создание купона**
- Пользователь с соответствующими правами создает элемент в справочнике "Купоны"
- Купон может быть иерархическим (до 2 уровней)
2. **Применение купона в заказе клиента**
- При создании или редактировании документа "ЗаказКлиента" пользователь может указать купон
- Реквизит `Купон` заполняется ссылкой на элемент справочника "Купоны"
- Информация о купоне отображается в форме документа
3. **Импорт заказов с купонами**
- При импорте заказов клиентов из внешних файлов процедура `СопоставитьКупон()` находит соответствующий купон по наименованию
- Если купон не найден, значение остается пустым или неопределенным
4. **Использование в расходном ордере**
- При создании документа "РасходныйОрдерНаТовары" на основании заказа клиента
- Процедура `р_ОбновитьИнформациюОбКупоне()` автоматически копирует купон из заказа клиента
- Информация о купоне отображается в форме расходного ордера
---
### 8.2. Связи между объектами
```
Справочник "Купоны"
Документ "ЗаказКлиента" (реквизит "Купон")
├─→ Документ "РеализацияТоваровУслуг" (реквизит "Купон")
│ └─→ Используется в обработке "КредитНотаЗаПериод" для исключения из кредит-нот
└─→ Документ "РасходныйОрдерНаТовары" (реквизит формы "р_КупонИзЗаказаКлиента")
```
**Описание связей:**
- Справочник "Купоны" является источником данных для реквизита "Купон" в документе "ЗаказКлиента"
- Реквизит "Купон" в документе "ЗаказКлиента" может быть скопирован в документ "РеализацияТоваровУслуг" при создании реализации на основании заказа
- Реквизит "Купон" в документе "РеализацияТоваровУслуг" используется в обработке "КредитНотаЗаПериод" для исключения документов с купонами из кредит-нот
- Реквизит "Купон" в документе "ЗаказКлиента" является источником данных для реквизита формы "р_КупонИзЗаказаКлиента" в документе "РасходныйОрдерНаТовары"
- Связь между заказом клиента и расходным ордером осуществляется через табличную часть "ТоварыПоРаспоряжениям"
---
## 9. Особенности реализации
### 9.1. Расширение реквизита
Реквизит "Купон" определен в основной конфигурации `CRM3devLocal` и расширяется в расширении `CRM3devLocal.Рана`. Это означает:
- Реквизит доступен в обеих конфигурациях
- Расширение не изменяет структуру реквизита, а только подтверждает его использование
- Форма документа в расширении содержит элемент для работы с реквизитом
### 9.2. Автоматическое копирование
В документе "РасходныйОрдерНаТовары" реализована автоматическая логика копирования купона из заказа клиента:
- Копирование происходит при создании документа
- Копирование происходит при изменении распоряжения
- Копирование происходит при обновлении данных о доставке
- Логика проверяет, что в документе указан только один заказ клиента
### 9.3. Импорт данных
### 9.4. Использование в обработке КредитНотаЗаПериод
**Особенность:**
Реквизит "Купон" в документе "РеализацияТоваровУслуг" используется для **исключения** документов из процесса формирования кредит-нот. Документы реализации с указанным купоном не включаются в кредит-ноты за период, что позволяет разделить учет обычных продаж и продаж с купонами.
**Логика:**
- Если в документе реализации указан купон, документ не участвует в формировании кредит-нот
- Это означает, что купоны используются для других целей (например, для предоставления скидок), а не для кредит-нот
При импорте заказов клиентов реализована процедура сопоставления купонов:
- Поиск купона осуществляется по наименованию
- Если купон не найден, значение остается пустым
- Процедура экспортируется для использования в шаблонах импорта
---
## 10. Выводы
### 10.1. Основные выводы
1. **Справочник "Купоны"** определен в основной конфигурации `CRM3devLocal` и используется в расширении `CRM3devLocal.Рана`
2. **Реквизит "Купон"** в документе "ЗаказКлиента":
- Определен в основной конфигурации
- Расширяется в расширении
- Имеет элемент формы для работы пользователя
- Используется для указания купона, применяемого к заказу
3. **Использование в документе "РеализацияТоваровУслуг"**:
- Реквизит "Купон" определен в основной конфигурации
- Используется в обработке "КредитНотаЗаПериод" для исключения документов с купонами из кредит-нот
- Документы реализации с указанным купоном не участвуют в формировании кредит-нот за период
- ⚠️ Реквизит **не используется** в печатных формах документа
4. **Использование в документе "РасходныйОрдерНаТовары"**:
- Реализована автоматическая логика копирования купона из заказа клиента
- Информация о купоне отображается в форме документа
- Логика проверяет корректность данных перед копированием
5. **Использование в обработке "КредитНотаЗаПериод"**:
- Реквизит "Купон" используется для фильтрации документов реализации
- Документы с указанным купоном исключаются из процесса формирования кредит-нот
- Это позволяет разделить учет обычных продаж и продаж с купонами
6. **Импорт заказов клиентов**:
- Реализована процедура сопоставления купонов при импорте
- Процедура ищет купон по наименованию
- Обрабатывает случаи отсутствия купона
7. **Права доступа**:
- Настроены роли для работы со справочником "Купоны" в основной конфигурации и расширении
- Роли разграничивают права на чтение и редактирование
- Роли включены в подсистему "rh_Продажи"
8. **Подсистемы**:
- Справочник "Купоны" включен в подсистему "rh_Продажи" в основной конфигурации
- Справочник "Купоны" включен в подсистему "rh_НСИ" в расширении
- Это указывает на его принадлежность к функционалу продаж и нормативно-справочной информации
### 10.2. Рекомендации
1. **Документирование бизнес-логики купонов:**
- Рекомендуется документировать правила применения купонов
- Указать, влияет ли купон на расчет скидок или другие расчеты
2. **Проверка использования в расчетах:**
- Необходимо проверить, используется ли реквизит "Купон" в расчетах скидок или других расчетах
- Если используется, необходимо документировать логику расчетов
3. **Валидация данных:**
- Рекомендуется добавить проверку корректности купона при заполнении заказа
- Проверить актуальность купона (срок действия, статус и т.д.)
4. **Печатные формы:**
- ⚠️ Рекомендуется проверить необходимость вывода информации о купоне в печатные формы документов
- В текущей конфигурации реквизит "Купон" не используется в печатных формах
- При необходимости добавить информацию о купоне в макеты печати
5. **Отчетность:**
- Рекомендуется проверить наличие отчетов, использующих информацию о купонах
- При необходимости создать отчеты для анализа использования купонов
6. **Логика копирования купона:**
- Рекомендуется проверить, копируется ли реквизит "Купон" из заказа клиента в реализацию при создании реализации на основании заказа
- Если копирование не реализовано, рассмотреть необходимость добавления такой логики
---
## 11. Приложения
### 11.1. Список файлов, связанных с реквизитом Купон
**Основная конфигурация CRM3devLocal:**
- `CRM3devLocal/src/Catalogs/Купоны/Купоны.mdo` - Справочник "Купоны"
- `CRM3devLocal/src/Documents/ЗаказКлиента/ЗаказКлиента.mdo` - Реквизит "Купон" в документе
- `CRM3devLocal/src/Documents/РеализацияТоваровУслуг/РеализацияТоваровУслуг.mdo` - Реквизит "Купон" в документе
- `CRM3devLocal/src/DataProcessors/КредитНотаЗаПериод/Forms/Форма/Module.bsl` - Использование купона в запросах
- `CRM3devLocal/src/Roles/rh_ДобавлениеРедактированиеКупонов/` - Роль доступа
- `CRM3devLocal/src/Roles/rh_ЧтениеКупонов/` - Роль доступа
- `CRM3devLocal/src/Subsystems/rh_Rhana/Subsystems/rh_Продажи/rh_Продажи.mdo` - Подсистема
**Расширение CRM3devLocal.Рана:**
- `CRM3devLocal.Рана/src/Catalogs/Купоны/Купоны.mdo` - Расширение справочника
- `CRM3devLocal.Рана/src/Documents/ЗаказКлиента/ЗаказКлиента.mdo` - Расширение реквизита
- `CRM3devLocal.Рана/src/Documents/ЗаказКлиента/Forms/ФормаДокумента/Form.form` - Элемент формы
- `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/Forms/ФормаДокумента/Form.form` - Реквизит формы
- `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/Forms/ФормаДокумента/Module.bsl` - Логика обновления
- `CRM3devLocal.Рана/src/DataProcessors/р_ИмпортЗаказовКлиентов/ManagerModule.bsl` - Процедура сопоставления
- `CRM3devLocal.Рана/src/DataProcessors/р_ИмпортЗаказовКлиентов/Templates/СтолбцыЗаказовКлиентов/Template.mxlx` - Шаблон импорта
- `CRM3devLocal.Рана/src/Subsystems/rh_Rhana/Subsystems/rh_НСИ/rh_НСИ.mdo` - Подсистема
- `CRM3devLocal.Рана/src/Roles/НастройкаНСИ/Rights.rights` - Права доступа
- `CRM3devLocal.Рана/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights` - Права доступа
- `CRM3devLocal.Рана/src/Roles/ЧтениеБазовойНСИ/Rights.rights` - Права доступа
- `CRM3devLocal.Рана/src/Roles/ЧтениеНормативноСправочнойИнформации/Rights.rights` - Права доступа
- `CRM3devLocal.Рана/src/Subsystems/rh_Rhana/Subsystems/rh_НСИ/rh_НСИ.mdo` - Подсистема
---
### 11.2. Сводная таблица использования реквизита Купон
| Объект | Реквизит/Элемент | Тип | Использование | Печатные формы |
|--------|------------------|-----|----------------|----------------|
| Справочник "Купоны" | - | Справочник | Источник данных | - |
| Документ "ЗаказКлиента" | Купон | CatalogRef.Купоны | Указание купона в заказе | ❌ Не используется |
| Документ "РеализацияТоваровУслуг" | Купон | CatalogRef.Купоны | Исключение из кредит-нот | ❌ Не используется |
| Документ "РасходныйОрдерНаТовары" | р_КупонИзЗаказаКлиента | CatalogRef.Купоны | Отображение купона из заказа | ❌ Не используется |
| Обработка "КредитНотаЗаПериод" | - | - | Фильтрация по пустому купону | - |
| Обработка "р_ИмпортЗаказовКлиентов" | - | - | Сопоставление купона при импорте | - |
**Условные обозначения:**
- ✅ Используется
- ❌ Не используется
- - Не применимо
---
**Конец документа**
@@ -1,745 +0,0 @@
---
title: Анализ применения реквизита Купон в исходной конфигурации включая расширение
version: 2.0
date_modified: 2026-01-07
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
date_created: 2025-12-27
show_metadata_block: true
show_index_link: true
show_toc: true
---
# Анализ применения реквизита Купон в исходной конфигурации включая расширение
## Версия анализа
Версия 2.0 от 07.01.2026
## Автор
Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
## Цель анализа
Определить, где и для чего применяется реквизит "Купон" в основной исходной конфигурации `CRM3devLocal` и расширении `CRM3devLocal.Рана`.
---
## 1. Справочник Купоны
### 1.1. Основная конфигурация CRM3devLocal
**Расположение:** `CRM3devLocal/src/Catalogs/Купоны/Купоны.mdo`
**Характеристики справочника:**
- **Имя:** `Купоны`
- **Синоним:** "Купоны"
- **Иерархический:** Да (2 уровня)
- **Папки сверху:** Да
- **Длина кода:** 9 символов
- **Длина наименования:** 99 символов
- **Тип кода:** Строка
- **Автонумерация:** Включена
- **Проверка уникальности:** Включена
- **Ввод по строке:** По коду и наименованию
- **Создание при вводе:** Разрешено
- **Полнотекстовый поиск:** Используется
- **Режим блокировки данных:** Управляемый
**Назначение:**
Справочник предназначен для хранения информации о купонах, используемых в системе. Купоны могут применяться в заказах клиентов для предоставления скидок или специальных предложений.
---
### 1.2. Расширение CRM3devLocal.Рана
**Расположение:** `CRM3devLocal.Рана/src/Catalogs/Купоны/Купоны.mdo`
**Особенности:**
- Справочник наследуется из основной конфигурации (расширяется)
- Объект принадлежит основной конфигурации (`objectBelonging: Adopted`)
- Расширение проверено (`extendedConfigurationObject: Checked`)
---
## 2. Реквизит Купон в документах
### 2.1. Документ ЗаказКлиента
#### 2.1.1. Основная конфигурация CRM3devLocal
**Расположение:** `CRM3devLocal/src/Documents/ЗаказКлиента/ЗаказКлиента.mdo`
**Характеристики реквизита:**
- **Имя:** `Купон`
- **Синоним:** "Купон"
- **Тип:** `CatalogRef.Купоны` (СправочникСсылка.Купоны)
- **UUID:** `0cff627d-b65a-4305-a44a-8aaf52751002`
- **Полнотекстовый поиск:** Используется
- **История данных:** Используется
**Назначение:**
Реквизит предназначен для указания купона, применяемого к заказу клиента. Позволяет связать заказ с конкретным купоном из справочника.
---
#### 2.1.2. Расширение CRM3devLocal.Рана
**Расположение:** `CRM3devLocal.Рана/src/Documents/ЗаказКлиента/ЗаказКлиента.mdo`
**Особенности расширения:**
- Реквизит наследуется из основной конфигурации
- Объект принадлежит основной конфигурации (`objectBelonging: Adopted`)
- Расширение проверено (`extendedConfigurationObject: Checked`)
- Тип реквизита подтвержден (`typeExtension: Checked`)
**Использование в форме документа:**
**Расположение:** `CRM3devLocal.Рана/src/Documents/ЗаказКлиента/Forms/ФормаДокумента/Form.form`
**Элемент формы:**
- **Имя элемента:** `Купон`
- **Тип:** Поле ввода (`InputField`)
- **Видимость:** Да
- **Доступность:** Да
- **Отображение в заголовке:** Да
- **Отображение в подвале:** Да
- **Режим редактирования:** Ввод
- **Путь к данным:** `Объект.Купон`
- **Расширенная подсказка:** `КупонРасширеннаяПодсказка`
- **Контекстное меню:** `КупонКонтекстноеМеню`
**Назначение:**
Элемент формы позволяет пользователю выбирать и указывать купон для заказа клиента непосредственно в форме документа.
---
### 2.2. Документ РеализацияТоваровУслуг
#### 2.2.1. Основная конфигурация CRM3devLocal
**Расположение:** `CRM3devLocal/src/Documents/РеализацияТоваровУслуг/РеализацияТоваровУслуг.mdo`
**Характеристики реквизита:**
- **Имя:** `Купон`
- **Синоним:** "Купон"
- **Тип:** `CatalogRef.Купоны` (СправочникСсылка.Купоны)
- **UUID:** `1ce768af-c451-41a1-932f-723cc784a8ea`
- **Полнотекстовый поиск:** Используется
- **История данных:** Используется
**Назначение:**
Реквизит предназначен для указания купона, применяемого к документу реализации товаров и услуг. Позволяет связать реализацию с конкретным купоном из справочника.
**Особенности:**
- Реквизит определен в основной конфигурации
- Используется в обработке "КредитНотаЗаПериод" для фильтрации документов (см. раздел 4.1)
- Купон может быть скопирован из заказа клиента при создании реализации на основании заказа
**Использование в запросах:**
В обработке "КредитНотаЗаПериод" используется условие проверки пустого купона:
**Файл:** `CRM3devLocal/src/DataProcessors/КредитНотаЗаПериод/Forms/Форма/Module.bsl` (строка 47)
```bsl
| И СчетФактураВыданный.ДокументОснование.Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)
```
**Файл:** `CRM3devLocal/src/DataProcessors/КредитНотаЗаПериод/Forms/Форма/Module.bsl` (строка 67)
```bsl
| И СчетФактураВыданный.ДокументОснование.Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)
```
**Назначение проверки:**
Обработка "КредитНотаЗаПериод" выбирает документы реализации, у которых купон **пустой** (равен пустой ссылке). Это означает, что документы реализации с указанным купоном **не включаются** в кредит-ноты за период.
**Печатные формы:**
⚠️ **Примечание:** Проверка макетов печати документа "РеализацияТоваровУслуг" показала, что реквизит "Купон" **не используется** в печатных формах. Информация о купоне не выводится на печатные формы документа.
---
## 3. Использование реквизита Купон в документе РасходныйОрдерНаТовары
### 3.1. Реквизит формы р_КупонИзЗаказаКлиента
**Расположение:** `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/Forms/ФормаДокумента/Form.form`
**Характеристики:**
- **Имя:** `р_КупонИзЗаказаКлиента`
- **Заголовок:** "Купон использующийся в заказе клиента"
- **Тип:** `CatalogRef.Купоны` (СправочникСсылка.Купоны)
- **Видимость:** Да
- **Доступность:** Да
- **Путь к данным:** `р_КупонИзЗаказаКлиента`
- **Расширенная подсказка:** `р_КупонИзЗаказаКлиентаРасширеннаяПодсказка`
- **Контекстное меню:** `р_КупонИзЗаказаКлиентаКонтекстноеМеню`
**Назначение:**
Реквизит формы предназначен для отображения купона, который используется в связанном заказе клиента. Позволяет видеть информацию о купоне при работе с расходным ордером на товары.
---
### 3.2. Логика обновления информации о купоне
**Расположение:** `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/Forms/ФормаДокумента/Module.bsl`
**Процедура:** `р_ОбновитьИнформациюОбКупоне()`
**Логика работы:**
**Файл:** `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/Forms/ФормаДокумента/Module.bsl` (строки 114-127)
```bsl
Процедура р_ОбновитьИнформациюОбКупоне()
Структура = Новый Структура();
р_ПеременаяРаспоряжение = Объект.ТоварыПоРаспоряжениям[0].Распоряжение;
Для каждого Строка Из Объект.ТоварыПоРаспоряжениям Цикл
Если не Строка.Распоряжение = р_ПеременаяРаспоряжение Тогда
ОбщегоНазначения.СообщитьПользователю("Запрещенно в распоряжение добавлять больше одного заказа");
Возврат;
КонецЕсли;
Если не ТипЗнч(Строка.Распоряжение) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
Возврат;
КонецЕсли;
КонецЦикла;
р_КупонИзЗаказаКлиента = р_ПеременаяРаспоряжение.Купон;
КонецПроцедуры
```
**Описание логики:**
1. Процедура проверяет, что в документе "РасходныйОрдерНаТовары" указано только одно распоряжение (заказ клиента)
2. Проверяет, что распоряжение является документом "ЗаказКлиента"
3. Если условия выполнены, копирует значение реквизита `Купон` из заказа клиента в реквизит формы `р_КупонИзЗаказаКлиента`
**Вызов процедуры:**
- При создании документа на сервере: `р_ПриСозданииНаСервереПосле()` (строка 93)
- При обновлении данных о доставке: `р_р_ОбновитьДанныеОДоставкиПосле()` (строка 100)
- При изменении распоряжения в табличной части: `р_ТоварыПоРаспоряжениямРаспоряжениеПриИзмененииПосле()` (строка 131)
**Назначение:**
Обеспечивает автоматическое копирование информации о купоне из заказа клиента в расходный ордер на товары, что позволяет видеть, какой купон применяется к заказу при работе с документом отгрузки.
---
## 4. Использование в обработке КредитНотаЗаПериод
### 4.1. Фильтрация документов по купону
**Расположение:** `CRM3devLocal/src/DataProcessors/КредитНотаЗаПериод/Forms/Форма/Module.bsl`
**Использование реквизита "Купон":**
В обработке "КредитНотаЗаПериод" реквизит "Купон" используется для фильтрации документов реализации при формировании кредит-нот за период.
**Логика работы:**
1. **Первый запрос (строки 40-56):**
- Выбирает документы реализации, у которых купон **пустой** (`Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)`)
- Документы должны быть связаны с заказами по кредит-ноте
- Результат помещается в таблицу `КредитНоты`
2. **Второй запрос (строки 59-82):**
- Выбирает документы реализации, у которых купон **пустой** (`Купон = ЗНАЧЕНИЕ(Справочник.Купоны.ПустаяСсылка)`)
- Документы должны быть связаны с указанным партнером
- Документы должны содержать указанную номенклатуру
- Документы **не должны** быть связаны с заказами по кредит-ноте
- Результат помещается в таблицу `НеКредитНоты`
**Назначение:**
Обработка формирует кредит-ноты за период, **исключая** документы реализации, у которых указан купон. Это означает, что документы реализации с купонами не должны включаться в кредит-ноты, так как купоны используются для других целей (например, для предоставления скидок).
**Вывод:**
Реквизит "Купон" в документе "РеализацияТоваровУслуг" используется для **исключения** документов из процесса формирования кредит-нот. Документы с указанным купоном не участвуют в формировании кредит-нот за период.
---
## 5. Использование в обработке импорта заказов клиентов
### 5.1. Процедура сопоставления купона
**Расположение:** `CRM3devLocal.Рана/src/DataProcessors/р_ИмпортЗаказовКлиентов/ManagerModule.bsl`
**Процедура:** `СопоставитьКупон()`
**Файл:** `CRM3devLocal.Рана/src/DataProcessors/р_ИмпортЗаказовКлиентов/ManagerModule.bsl` (строки 401-419)
```bsl
Процедура СопоставитьКупон(ИсходноеЗначение, Приемник, Ячейка, ДанныеСтроки) Экспорт
Если ПустаяСтрока(ИсходноеЗначение) Тогда
Приемник = Справочники.Купоны.ПустаяСсылка();
Иначе
Приемник = Справочники.Купоны.НайтиПоНаименованию(ИсходноеЗначение);
Если Не ЗначениеЗаполнено(Приемник) Тогда
Приемник = Неопределено;
Возврат;
КонецЕсли;
КонецЕсли;
Ячейка.СодержитЗначение = Истина;
МассивТипаПартнера = Новый Массив;
МассивТипаПартнера.Добавить(Тип("СправочникСсылка.Купоны"));
ОписаниеТипа = Новый ОписаниеТипов(МассивТипаПартнера);
Ячейка.ТипЗначения = ОписаниеТипа;
Ячейка.Значение = Приемник;
КонецПроцедуры
```
**Логика работы:**
1. Если исходное значение пустое, устанавливает пустую ссылку на справочник "Купоны"
2. Если исходное значение заполнено, ищет элемент справочника "Купоны" по наименованию
3. Если элемент не найден, устанавливает `Неопределено` и завершает выполнение
4. Если элемент найден, устанавливает тип значения ячейки и значение для импорта
**Назначение:**
Процедура используется при импорте заказов клиентов из внешних источников (например, из Excel) для сопоставления текстового значения купона с элементом справочника "Купоны".
---
### 5.2. Использование в шаблоне импорта
**Расположение:** `CRM3devLocal.Рана/src/DataProcessors/р_ИмпортЗаказовКлиентов/Templates/СтолбцыЗаказовКлиентов/Template.mxlx`
**Информация о столбце:**
- **Название столбца:** "Купон"
- **Типы значений:** Null, Купоны
- **Процедура сопоставления:** `СопоставитьКупон`
**Назначение:**
Столбец в шаблоне импорта позволяет указывать купон для заказа клиента при импорте данных из внешних файлов.
---
## 6. Права доступа
### 6.1. Роли доступа к справочнику Купоны
**Роли в основной конфигурации CRM3devLocal:**
1. **rh_ДобавлениеРедактированиеКупонов**
- **Расположение:** `CRM3devLocal/src/Roles/rh_ДобавлениеРедактированиеКупонов/`
- **Синоним:** "Добавление и редактирование купонов"
- **Права:** Доступ к справочнику `Catalog.Купоны` (чтение, добавление, изменение)
- **UUID:** `92d7bed5-6fda-420f-8761-dd74bef24577`
2. **rh_ЧтениеКупонов**
- **Расположение:** `CRM3devLocal/src/Roles/rh_ЧтениеКупонов/`
- **Синоним:** "Чтение купонов"
- **Права:** Доступ к справочнику `Catalog.Купоны` (только чтение)
- **UUID:** `b75850b1-2ce5-4337-8bf9-c974f6f8a1a5`
**Роли в расширении CRM3devLocal.Рана:**
3. **НастройкаНСИ**
- **Расположение:** `CRM3devLocal.Рана/src/Roles/НастройкаНСИ/Rights.rights`
- **Права:** Доступ к справочнику `Catalog.Купоны`
4. **ДобавлениеИзменениеОбщейБазовойНСИ**
- **Расположение:** `CRM3devLocal.Рана/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights`
- **Права:** Доступ к справочнику `Catalog.Купоны`
5. **ЧтениеБазовойНСИ**
- **Расположение:** `CRM3devLocal.Рана/src/Roles/ЧтениеБазовойНСИ/Rights.rights`
- **Права:** Доступ к справочнику `Catalog.Купоны`
6. **ЧтениеНормативноСправочнойИнформации**
- **Расположение:** `CRM3devLocal.Рана/src/Roles/ЧтениеНормативноСправочнойИнформации/Rights.rights`
- **Права:** Доступ к справочнику `Catalog.Купоны`
**Назначение:**
Роли обеспечивают разграничение доступа к справочнику "Купоны" в зависимости от функций пользователя в системе.
---
## 7. Подсистемы
### 7.1. Включение в подсистему rh_Продажи (основная конфигурация)
**Расположение:** `CRM3devLocal/src/Subsystems/rh_Rhana/Subsystems/rh_Продажи/rh_Продажи.mdo`
**Информация:**
- Справочник `Catalog.Купоны` включен в подсистему `rh_Продажи`
- Подсистема `rh_Продажи` входит в подсистему `rh_Rhana`
- В подсистему также включены роли:
- `Role.rh_ДобавлениеРедактированиеКупонов`
- `Role.rh_ЧтениеКупонов`
**Назначение:**
Включение справочника в подсистему "Продажи" указывает на то, что купоны являются частью функционала продаж и используются в процессах продаж.
### 7.2. Включение в подсистему rh_НСИ (расширение)
**Расположение:** `CRM3devLocal.Рана/src/Subsystems/rh_Rhana/Subsystems/rh_НСИ/rh_НСИ.mdo`
**Информация:**
- Справочник `Catalog.Купоны` включен в подсистему `rh_НСИ`
- Подсистема `rh_НСИ` входит в подсистему `rh_Rhana`
**Назначение:**
Включение справочника в подсистему "Нормативно-справочная информация" (НСИ) указывает на то, что купоны являются частью справочной информации системы.
---
## 8. Схема использования реквизита Купон
### 8.1. Бизнес-процесс
1. **Создание купона**
- Пользователь с соответствующими правами создает элемент в справочнике "Купоны"
- Купон может быть иерархическим (до 2 уровней)
2. **Применение купона в заказе клиента**
- При создании или редактировании документа "ЗаказКлиента" пользователь может указать купон
- Реквизит `Купон` заполняется ссылкой на элемент справочника "Купоны"
- Информация о купоне отображается в форме документа
3. **Импорт заказов с купонами**
- При импорте заказов клиентов из внешних файлов процедура `СопоставитьКупон()` находит соответствующий купон по наименованию
- Если купон не найден, значение остается пустым или неопределенным
4. **Использование в расходном ордере**
- При создании документа "РасходныйОрдерНаТовары" на основании заказа клиента
- Процедура `р_ОбновитьИнформациюОбКупоне()` автоматически копирует купон из заказа клиента
- Информация о купоне отображается в форме расходного ордера
---
### 8.2. Связи между объектами
```
Справочник "Купоны"
Документ "ЗаказКлиента" (реквизит "Купон")
├─→ Документ "РеализацияТоваровУслуг" (реквизит "Купон")
│ └─→ Используется в обработке "КредитНотаЗаПериод" для исключения из кредит-нот
└─→ Документ "РасходныйОрдерНаТовары" (реквизит формы "р_КупонИзЗаказаКлиента")
```
**Описание связей:**
- Справочник "Купоны" является источником данных для реквизита "Купон" в документе "ЗаказКлиента"
- Реквизит "Купон" в документе "ЗаказКлиента" может быть скопирован в документ "РеализацияТоваровУслуг" при создании реализации на основании заказа
- Реквизит "Купон" в документе "РеализацияТоваровУслуг" используется в обработке "КредитНотаЗаПериод" для исключения документов с купонами из кредит-нот
- Реквизит "Купон" в документе "ЗаказКлиента" является источником данных для реквизита формы "р_КупонИзЗаказаКлиента" в документе "РасходныйОрдерНаТовары"
- Связь между заказом клиента и расходным ордером осуществляется через табличную часть "ТоварыПоРаспоряжениям"
---
## 9. Особенности реализации
### 9.1. Расширение реквизита
Реквизит "Купон" определен в основной конфигурации `CRM3devLocal` и расширяется в расширении `CRM3devLocal.Рана`. Это означает:
- Реквизит доступен в обеих конфигурациях
- Расширение не изменяет структуру реквизита, а только подтверждает его использование
- Форма документа в расширении содержит элемент для работы с реквизитом
### 9.2. Автоматическое копирование
В документе "РасходныйОрдерНаТовары" реализована автоматическая логика копирования купона из заказа клиента:
- Копирование происходит при создании документа
- Копирование происходит при изменении распоряжения
- Копирование происходит при обновлении данных о доставке
- Логика проверяет, что в документе указан только один заказ клиента
### 9.3. Импорт данных
### 9.4. Использование в обработке КредитНотаЗаПериод
**Особенность:**
Реквизит "Купон" в документе "РеализацияТоваровУслуг" используется для **исключения** документов из процесса формирования кредит-нот. Документы реализации с указанным купоном не включаются в кредит-ноты за период, что позволяет разделить учет обычных продаж и продаж с купонами.
**Логика:**
- Если в документе реализации указан купон, документ не участвует в формировании кредит-нот
- Это означает, что купоны используются для других целей (например, для предоставления скидок), а не для кредит-нот
При импорте заказов клиентов реализована процедура сопоставления купонов:
- Поиск купона осуществляется по наименованию
- Если купон не найден, значение остается пустым
- Процедура экспортируется для использования в шаблонах импорта
---
## 10. Выводы
### 10.1. Основные выводы
1. **Справочник "Купоны"** определен в основной конфигурации `CRM3devLocal` и используется в расширении `CRM3devLocal.Рана`
2. **Реквизит "Купон"** в документе "ЗаказКлиента":
- Определен в основной конфигурации
- Расширяется в расширении
- Имеет элемент формы для работы пользователя
- Используется для указания купона, применяемого к заказу
3. **Использование в документе "РеализацияТоваровУслуг"**:
- Реквизит "Купон" определен в основной конфигурации
- Используется в обработке "КредитНотаЗаПериод" для исключения документов с купонами из кредит-нот
- Документы реализации с указанным купоном не участвуют в формировании кредит-нот за период
- ⚠️ Реквизит **не используется** в печатных формах документа
4. **Использование в документе "РасходныйОрдерНаТовары"**:
- Реализована автоматическая логика копирования купона из заказа клиента
- Информация о купоне отображается в форме документа
- Логика проверяет корректность данных перед копированием
5. **Использование в обработке "КредитНотаЗаПериод"**:
- Реквизит "Купон" используется для фильтрации документов реализации
- Документы с указанным купоном исключаются из процесса формирования кредит-нот
- Это позволяет разделить учет обычных продаж и продаж с купонами
6. **Импорт заказов клиентов**:
- Реализована процедура сопоставления купонов при импорте
- Процедура ищет купон по наименованию
- Обрабатывает случаи отсутствия купона
7. **Права доступа**:
- Настроены роли для работы со справочником "Купоны" в основной конфигурации и расширении
- Роли разграничивают права на чтение и редактирование
- Роли включены в подсистему "rh_Продажи"
8. **Подсистемы**:
- Справочник "Купоны" включен в подсистему "rh_Продажи" в основной конфигурации
- Справочник "Купоны" включен в подсистему "rh_НСИ" в расширении
- Это указывает на его принадлежность к функционалу продаж и нормативно-справочной информации
### 10.2. Рекомендации
1. **Документирование бизнес-логики купонов:**
- Рекомендуется документировать правила применения купонов
- Указать, влияет ли купон на расчет скидок или другие расчеты
2. **Проверка использования в расчетах:**
- Необходимо проверить, используется ли реквизит "Купон" в расчетах скидок или других расчетах
- Если используется, необходимо документировать логику расчетов
3. **Валидация данных:**
- Рекомендуется добавить проверку корректности купона при заполнении заказа
- Проверить актуальность купона (срок действия, статус и т.д.)
4. **Печатные формы:**
- ⚠️ Рекомендуется проверить необходимость вывода информации о купоне в печатные формы документов
- В текущей конфигурации реквизит "Купон" не используется в печатных формах
- При необходимости добавить информацию о купоне в макеты печати
5. **Отчетность:**
- Рекомендуется проверить наличие отчетов, использующих информацию о купонах
- При необходимости создать отчеты для анализа использования купонов
6. **Логика копирования купона:**
- Рекомендуется проверить, копируется ли реквизит "Купон" из заказа клиента в реализацию при создании реализации на основании заказа
- Если копирование не реализовано, рассмотреть необходимость добавления такой логики
---
## 11. Выводы и рекомендации по переносу в новую базу (CRM326)
### 11.1. Анализ текущего состояния в новой базе
**Что уже реализовано:**
- ✅ Информационное отображение купона в документе "РасходныйОрдерНаТовары" через дополнительное свойство "РК_Купон"
- ✅ Логика копирования купона из заказа клиента в реализацию через `УправлениеСвойствами`
- ✅ Механизм дополнительных реквизитов БСП настроен и работает
**Что отсутствует:**
- ❌ Справочник "Купоны" (не требуется для базовой функциональности)
- ❌ Фильтрация документов реализации по купону в обработке "КредитНотаЗаПериод" (требуется реализовать)
- ❌ Обработка импорта заказов с купонами (не требуется на текущий момент)
### 11.2. Приоритетный подход: использование типового механизма БСП
**Принципы реализации:**
1. Использовать типовой механизм дополнительных реквизитов БСП (план видов характеристик "ДополнительныеРеквизитыИСведения")
2. Минимум доработок конфигурации
3. Минимум новых объектов в расширении
4. Использовать существующие допустимые типы дополнительных свойств
### 11.3. Рекомендации по реализации
#### 11.3.1. Использование дополнительного свойства "РК_Купон"
**Тип значения:** `Строка` (уже входит в допустимые типы плана видов характеристик)
**Обоснование:**
- Для информационного отображения достаточно строкового значения
- Для фильтрации по наличию/отсутствию купона достаточно проверки на пустоту строки
- Не требуется создавать справочник "Купоны" и добавлять его в допустимые типы
- Минимум доработок конфигурации
**Настройка в базе данных:**
1. Создать дополнительное свойство "РК_Купон" в плане видов характеристик "ДополнительныеРеквизитыИСведения"
2. Тип значения: `Строка`
3. Применить к объектам: `Документ.ЗаказКлиента`, `Документ.РеализацияТоваровУслуг`
4. Настроить видимость и доступность для соответствующих ролей
#### 11.3.2. Реализация фильтрации в кредит-нотах
**Вариант 1: Фильтрация через табличную часть "ДополнительныеРеквизиты"**
```bsl
// Пример запроса для исключения документов с купонами
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК ДопРекв
ПО РеализацияТоваровУслуг.Ссылка = ДопРекв.Ссылка
И ДопРекв.Свойство.Имя = "РК_Купон"
И ДопРекв.Значение <> ""
ГДЕ
ДопРекв.Ссылка = ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)
// Или использовать НЕ СУЩЕСТВУЕТ для проверки отсутствия записи
```
**Вариант 2: Фильтрация через программную проверку**
```bsl
// После получения выборки документов
Для Каждого СтрокаРеализации Из ВыборкаРеализаций Цикл
ЗначениеКупона = УправлениеСвойствами.ЗначениеСвойства(
СтрокаРеализации.Ссылка,
"РК_Купон"
);
Если ПустаяСтрока(ЗначениеКупона) Тогда
// Документ без купона - включаем в кредит-ноту
ТаблицаРезультатов.Добавить();
КонецЕсли;
КонецЦикла;
```
#### 11.3.3. Информационное отображение (уже реализовано)
**Текущая реализация:**
- В документе "РасходныйОрдерНаТовары" используется поле формы `РК_ИнформацияОКупоне`
- Значение получается через `УправлениеСвойствами.ЗначениеСвойства()`
- Логика копирования из заказа в реализацию реализована в `ObjectModule.bsl`
**Дополнительно (если требуется):**
- Добавить элемент формы для отображения купона в документе "ЗаказКлиента"
- Добавить элемент формы для отображения купона в документе "РеализацияТоваровУслуг"
### 11.4. Шаги реализации
#### Шаг 1: Настройка дополнительного свойства в базе данных
1. Открыть конфигуратор новой базы
2. Перейти в план видов характеристик "ДополнительныеРеквизитыИСведения"
3. Создать новый элемент с именем "РК_Купон"
4. Настроить параметры:
- **Имя:** `РК_Купон`
- **Тип значения:** `Строка`
- **Заголовок:** "Купон"
- **Применяется к:** `Документ.ЗаказКлиента`, `Документ.РеализацияТоваровУслуг`
- **Видимость:** Настроить для соответствующих ролей
- **Доступность:** Настроить для соответствующих ролей
#### Шаг 2: Проверка существующей логики
1. Проверить работу копирования купона из заказа в реализацию
2. Проверить отображение купона в документе "РасходныйОрдерНаТовары"
3. При необходимости доработать формы документов для отображения купона
#### Шаг 3: Реализация фильтрации в обработке "КредитНотаЗаПериод"
1. Адаптировать запросы в обработке для фильтрации по дополнительному свойству
2. Использовать табличную часть "ДополнительныеРеквизиты" или программную проверку
3. Протестировать корректность исключения документов с купонами
**Важно:** Обработка "КредитНотаЗаПериод" обязательна к переносу, так как используется для формирования кредит-нот за период с исключением документов реализации, у которых указан купон.
#### Шаг 4: Тестирование
1. Проверить создание и заполнение купона в документе "ЗаказКлиента"
2. Проверить копирование купона в документ "РеализацияТоваровУслуг"
3. Проверить отображение купона в документе "РасходныйОрдерНаТовары"
4. Проверить фильтрацию в обработке "КредитНотаЗаПериод" - убедиться, что документы с купонами исключаются из кредит-нот
### 11.5. Что НЕ требуется переносить
1. **Справочник "Купоны"** - не требуется, так как используется строковое значение
2. **Реквизиты "Купон" в документах** - заменены на дополнительное свойство
3. **Обработка импорта заказов** - не требуется на текущий момент
4. **Роли доступа к справочнику** - не требуются, так как справочник не создается
### 11.6. Преимущества выбранного подхода
1. **Минимум доработок:** Используется существующий механизм БСП
2. **Гибкость:** Легко изменить тип значения или добавить дополнительные свойства
3. **Стандартность:** Соответствует типовым подходам БСП
4. **Простота поддержки:** Не требует создания новых объектов метаданных
5. **Расширяемость:** При необходимости можно добавить справочник позже
### 11.7. Оценка трудозатрат
| Этап | Описание | Время |
|------|----------|-------|
| Настройка дополнительного свойства | Создание и настройка в БД | 0.5-1 час |
| Проверка существующей логики | Тестирование копирования и отображения | 1-2 часа |
| Доработка форм (если требуется) | Добавление элементов для отображения купона | 2-3 часа |
| Реализация фильтрации | Адаптация запросов в обработке | 2-4 часа |
| Тестирование | Полное тестирование функциональности | 2-3 часа |
| **ИТОГО** | | **7.5-13 часов** |
### 11.8. Риски и ограничения
1. **Ограничение:** Купон хранится как строка, нет валидации существования купона
- **Решение:** При необходимости можно добавить справочник позже
2. **Ограничение:** Нет иерархической структуры купонов
- **Решение:** Если потребуется, можно создать справочник и изменить тип свойства
3. **Ограничение:** Фильтрация в запросах может быть менее эффективной, чем по реквизиту
- **Решение:** Использовать индексы на табличной части "ДополнительныеРеквизиты"
---
## 12. Приложения
### 12.1. Список файлов, связанных с реквизитом Купон
**Основная конфигурация CRM3devLocal:**
- `CRM3devLocal/src/Catalogs/Купоны/Купоны.mdo` - Справочник "Купоны"
- `CRM3devLocal/src/Documents/ЗаказКлиента/ЗаказКлиента.mdo` - Реквизит "Купон" в документе
- `CRM3devLocal/src/Documents/РеализацияТоваровУслуг/РеализацияТоваровУслуг.mdo` - Реквизит "Купон" в документе
- `CRM3devLocal/src/DataProcessors/КредитНотаЗаПериод/Forms/Форма/Module.bsl` - Использование купона в запросах
- `CRM3devLocal/src/Roles/rh_ДобавлениеРедактированиеКупонов/` - Роль доступа
- `CRM3devLocal/src/Roles/rh_ЧтениеКупонов/` - Роль доступа
- `CRM3devLocal/src/Subsystems/rh_Rhana/Subsystems/rh_Продажи/rh_Продажи.mdo` - Подсистема
**Расширение CRM3devLocal.Рана:**
- `CRM3devLocal.Рана/src/Catalogs/Купоны/Купоны.mdo` - Расширение справочника
- `CRM3devLocal.Рана/src/Documents/ЗаказКлиента/ЗаказКлиента.mdo` - Расширение реквизита
- `CRM3devLocal.Рана/src/Documents/ЗаказКлиента/Forms/ФормаДокумента/Form.form` - Элемент формы
- `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/Forms/ФормаДокумента/Form.form` - Реквизит формы
- `CRM3devLocal.Рана/src/Documents/РасходныйОрдерНаТовары/Forms/ФормаДокумента/Module.bsl` - Логика обновления
- `CRM3devLocal.Рана/src/DataProcessors/р_ИмпортЗаказовКлиентов/ManagerModule.bsl` - Процедура сопоставления
- `CRM3devLocal.Рана/src/DataProcessors/р_ИмпортЗаказовКлиентов/Templates/СтолбцыЗаказовКлиентов/Template.mxlx` - Шаблон импорта
- `CRM3devLocal.Рана/src/Subsystems/rh_Rhana/Subsystems/rh_НСИ/rh_НСИ.mdo` - Подсистема
- `CRM3devLocal.Рана/src/Roles/НастройкаНСИ/Rights.rights` - Права доступа
- `CRM3devLocal.Рана/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights` - Права доступа
- `CRM3devLocal.Рана/src/Roles/ЧтениеБазовойНСИ/Rights.rights` - Права доступа
- `CRM3devLocal.Рана/src/Roles/ЧтениеНормативноСправочнойИнформации/Rights.rights` - Права доступа
- `CRM3devLocal.Рана/src/Subsystems/rh_Rhana/Subsystems/rh_НСИ/rh_НСИ.mdo` - Подсистема
---
### 12.2. Сводная таблица использования реквизита Купон
| Объект | Реквизит/Элемент | Тип | Использование | Печатные формы |
|--------|------------------|-----|----------------|----------------|
| Справочник "Купоны" | - | Справочник | Источник данных | - |
| Документ "ЗаказКлиента" | Купон | CatalogRef.Купоны | Указание купона в заказе | ❌ Не используется |
| Документ "РеализацияТоваровУслуг" | Купон | CatalogRef.Купоны | Исключение из кредит-нот | ❌ Не используется |
| Документ "РасходныйОрдерНаТовары" | р_КупонИзЗаказаКлиента | CatalogRef.Купоны | Отображение купона из заказа | ❌ Не используется |
| Обработка "КредитНотаЗаПериод" | - | - | Фильтрация по пустому купону | - |
| Обработка "р_ИмпортЗаказовКлиентов" | - | - | Сопоставление купона при импорте | - |
**Условные обозначения:**
- ✅ Используется
- ❌ Не используется
- - Не применимо
---
**Конец документа**
@@ -1,619 +0,0 @@
# Анализ различий: crm3-26-test и crm3-dev (конфигурации и расширения)
**Дата:** 2026-05-13
**Корень проекта:** `D:\SynologyDrive\projects_syn\crm3-26`
Сформировано скриптом `scripts/compare_crm_test_dev_configs.py` по **файлам выгрузки** (не по данным информационной базы). Настройки ИБ уровня «1С:Предприятие» в этом отчёте **не** снимаются — для них нужны снимки из режима предприятия или внешние обработки по плану миграции.
## 1. Свойства из Configuration.xml
### crm3-26-test (основная)
- **Name:** УправлениеТорговлей_CRM_2
- **Synonym:** 1С:Управление торговлей и взаимоотношениями с клиентами (CRM), редакция 3.1
- **Version:** 3.1.35.11
- **Vendor:** ООО "1С-Рарус Специализированные Решения"
- **ConfigurationExtensionCompatibilityMode:** Version8_3_27
- **CompatibilityMode:** Version8_3_27
- **InterfaceCompatibilityMode:** TaxiEnableVersion8_2
- **DefaultRunMode:** ManagedApplication
- **ScriptVariant:** Russian
- **ChildObjects (количество по типу тега в Configuration.xml):**
- CommonModule: 3118
- CommonPicture: 2633
- Role: 1150
- Constant: 1147
- Enum: 1057
- InformationRegister: 967
- FunctionalOption: 644
- Catalog: 625
- DefinedType: 473
- EventSubscription: 440
- DataProcessor: 436
- StyleItem: 421
- XDTOPackage: 407
- CommonCommand: 382
- Report: 380
- CommonForm: 363
- Document: 298
- ScheduledJob: 262
- CommonTemplate: 246
- SessionParameter: 115
- AccumulationRegister: 105
- CommandGroup: 64
- Subsystem: 41
- ExchangePlan: 26
- WebService: 21
- ChartOfCharacteristicTypes: 18
- HTTPService: 14
- DocumentJournal: 12
- FunctionalOptionsParameter: 10
- BusinessProcess: 8
- CommonAttribute: 7
- FilterCriterion: 7
- DocumentNumerator: 3
- SettingsStorage: 3
- WSReference: 2
- ExternalDataSource: 1
- IntegrationService: 1
- Language: 1
- Task: 1
### crm3-26-test.rhana
- **Name:** crm326RHANA
- **Synonym:** Расширение РАНА для CRM3-26
- **Version:** 1.3.0.35
- **ConfigurationExtensionPurpose:** Customization
- **NamePrefix:** РК_
- **ConfigurationExtensionCompatibilityMode:** Version8_3_27
- **CompatibilityMode:** Version8_3_27
- **InterfaceCompatibilityMode:** TaxiEnableVersion8_2
- **DefaultRunMode:** ManagedApplication
- **ScriptVariant:** Russian
- **ChildObjects (количество по типу тега в Configuration.xml):**
- CommonPicture: 10
- Enum: 7
- CommonModule: 4
- Role: 4
- Document: 3
- DataProcessor: 2
- Subsystem: 2
- Catalog: 1
- ChartOfCharacteristicTypes: 1
- CommonForm: 1
- Constant: 1
- DefinedType: 1
- FunctionalOption: 1
- Language: 1
- StyleItem: 1
### crm3-dev (основная)
- **Name:** УправлениеТорговлей_CRM_2
- **Synonym:** Управление торговлей и взаимоотношениями с клиентами, редакция 3.0
- **Version:** 3.0.22.28
- **Vendor:** ООО "1С-Рарус Специализированные Решения"
- **ConfigurationExtensionCompatibilityMode:** Version8_3_27
- **CompatibilityMode:** Version8_3_16
- **InterfaceCompatibilityMode:** TaxiEnableVersion8_2
- **DefaultRunMode:** ManagedApplication
- **ScriptVariant:** Russian
- **ChildObjects (количество по типу тега в Configuration.xml):**
- CommonPicture: 2103
- CommonModule: 2084
- Constant: 967
- Role: 893
- Enum: 820
- InformationRegister: 690
- FunctionalOption: 551
- Catalog: 515
- DataProcessor: 410
- Report: 392
- CommonCommand: 388
- EventSubscription: 386
- CommonForm: 376
- XDTOPackage: 297
- DefinedType: 296
- StyleItem: 263
- Document: 245
- CommonTemplate: 198
- ScheduledJob: 164
- AccumulationRegister: 111
- SessionParameter: 98
- CommandGroup: 67
- Subsystem: 41
- ExchangePlan: 23
- WebService: 21
- ChartOfCharacteristicTypes: 18
- DocumentJournal: 17
- HTTPService: 17
- FunctionalOptionsParameter: 10
- BusinessProcess: 7
- FilterCriterion: 7
- CommonAttribute: 6
- Sequence: 5
- SettingsStorage: 4
- WSReference: 4
- DocumentNumerator: 3
- Language: 3
- Style: 2
- ExternalDataSource: 1
- Interface: 1
- … всего типов: 41
### crm3-dev.rhana
- **Name:** Рана
- **Synonym:** Рана CRM3
- **Version:** 3.0.22.26/1.0.1.322
- **Vendor:** remark.pro
- **ConfigurationExtensionPurpose:** Customization
- **NamePrefix:** р_
- **ConfigurationExtensionCompatibilityMode:** Version8_3_14
- **InterfaceCompatibilityMode:** TaxiEnableVersion8_2
- **DefaultRunMode:** ManagedApplication
- **ScriptVariant:** Russian
- **ChildObjects (количество по типу тега в Configuration.xml):**
- Catalog: 79
- Document: 72
- Role: 47
- Enum: 45
- CommonModule: 38
- Report: 33
- CommonPicture: 30
- StyleItem: 19
- InformationRegister: 16
- DefinedType: 15
- AccumulationRegister: 12
- DataProcessor: 10
- Subsystem: 9
- ChartOfCharacteristicTypes: 4
- CommonForm: 4
- Constant: 3
- DocumentJournal: 2
- BusinessProcess: 1
- Language: 1
## 2. Сводка различий (основные конфигурации)
| Параметр | crm3-26-test | crm3-dev |
|----------|--------------|----------|
| Версия типовой | 3.1.35.11 | 3.0.22.28 |
| Синоним | 1С:Управление торговлей и взаимоотношениями с клиентами (CRM), редакция 3.1 | Управление торговлей и взаимоотношениями с клиентами, редакция 3.0 |
| Режим совместимости расширений (платформа) | Version8_3_27 | Version8_3_27 |
**Вывод:** тестовая ветка на **редакции 3.1** (версия конфигурации из XML), рабочая исходная — **редакция 3.0**. Это разные линейки типовой; перенос доработок и сопоставление объектов выполняется с учётом миграции 3.0 -> 3.1, а не как «одинаковая база».
## 3. Сводка различий (расширения)
| Параметр | crm3-26-test.rhana | crm3-dev.rhana |
|----------|-------------------|----------------|
| Имя | crm326RHANA | Рана |
| Версия | 1.3.0.35 | 3.0.22.26/1.0.1.322 |
| Префикс | РК_ | р_ |
| Режим совместимости расширения | Version8_3_27 | Version8_3_14 |
| CompatibilityMode (доп.) | Version8_3_27 | — |
**Вывод:** расширение тестовой ветки (`crm326RHANA`, префикс **РК_**) ориентировано на платформу **8.3.27**; исходное расширение «Рана» (`р_`) заявляет **ConfigurationExtensionCompatibilityMode Version8_3_14** — при сборке/подключении сверять требования EDT и фактическую версию платформы ИБ.
## 4. Количество объектов по папкам верхнего уровня (EDT `src/`)
*Примечание:* число **подпапок** в `src/<Тип>/` (ниже) — фактическая выгрузка EDT. Счётчики по тегам в разделе 1 для `<ChildObjects>` — это **индекс ссылок** в `Configuration.xml`; для отдельных типов (например, перечисления) они могут **существенно различаться** с числом папок — для полного состава ориентироваться на XML или конфигуратор.
| Тип метаданных | crm3-26-test (основная) | crm3-26-test.rhana | crm3-dev (основная) | crm3-dev.rhana |
|---|---|---|---|---|
| AccumulationRegisters | 103 | 0 | 109 | 0 |
| BusinessProcesses | 8 | 0 | 7 | 0 |
| Catalogs | 616 | 1 | 491 | 8 |
| ChartsOfCharacteristicTypes | 18 | 0 | 18 | 0 |
| CommandGroups | 0 | 0 | 0 | 0 |
| CommonAttributes | 0 | 0 | 0 | 0 |
| CommonCommands | 382 | 0 | 388 | 0 |
| CommonForms | 363 | 1 | 376 | 4 |
| CommonModules | 3118 | 3 | 2081 | 35 |
| CommonPictures | 2632 | 0 | 2102 | 5 |
| CommonTemplates | 246 | 0 | 198 | 0 |
| Constants | 254 | 0 | 133 | 0 |
| DataProcessors | 436 | 2 | 410 | 8 |
| DefinedTypes | 0 | 0 | 0 | 0 |
| DocumentJournals | 11 | 0 | 16 | 0 |
| DocumentNumerators | 0 | 0 | 0 | 0 |
| Documents | 298 | 2 | 229 | 21 |
| Enums | 162 | 0 | 99 | 2 |
| EventSubscriptions | 0 | 0 | 0 | 0 |
| ExchangePlans | 26 | 0 | 23 | 0 |
| ExternalDataSources | 1 | 0 | 1 | 0 |
| FilterCriteria | 1 | 0 | 2 | 0 |
| FunctionalOptions | 0 | 0 | 0 | 0 |
| FunctionalOptionsParameters | 0 | 0 | 0 | 0 |
| HTTPServices | 14 | 0 | 17 | 0 |
| InformationRegisters | 829 | 0 | 554 | 2 |
| IntegrationServices | 1 | 0 | 0 | 0 |
| Interfaces | 0 | 0 | 1 | 0 |
| Languages | 0 | 0 | 0 | 0 |
| Reports | 380 | 0 | 392 | 10 |
| Roles | 1150 | 4 | 893 | 31 |
| ScheduledJobs | 240 | 0 | 139 | 0 |
| Sequences | 0 | 0 | 0 | 0 |
| SessionParameters | 0 | 0 | 0 | 0 |
| SettingsStorages | 3 | 0 | 4 | 0 |
| StyleItems | 0 | 0 | 0 | 0 |
| Styles | 0 | 0 | 2 | 0 |
| Subsystems | 28 | 1 | 27 | 8 |
| Tasks | 1 | 0 | 1 | 0 |
| WSReferences | 2 | 0 | 4 | 0 |
| WebServices | 21 | 0 | 21 | 0 |
| XDTOPackages | 407 | 0 | 297 | 0 |
## 5. Дифф имён: Документы и ОбщиеМодули
### Документы (`Documents/`)
- **Только в crm3-26-test:** 94
- `CRM_ДоходыИРасходыПоПроекту`
- `CRM_ОтсутствиеСотрудника`
- `АктИнвентаризацииСАТУРН`
- `АктОбУничтоженииПерсональныхДанных`
- `АктПремииКлиенту`
- `АктПремииПоставщика`
- `АктПриемкиВходящийЕИС`
- `АктПримененияСАТУРН`
- `Бронирование`
- `ВводОстатковВзаиморасчетов`
- `ВводОстатковДенежныхСредств`
- `ВводОстатковНДСПредъявленного`
- `ВводОстатковОПродажахЗаПрошлыеПериоды`
- `ВводОстатковПоФинансовымИнструментам`
- `ВводОстатковПрочиеРасходы`
- `ВводОстатковПрочихАктивовПассивов`
- `ВводОстатковРасчетовПоЭквайрингу`
- `ВводОстатковСПодотчетниками`
- `ВводОстатковТМЦВЭксплуатации`
- `ВводОстатковТоваров`
- `ВнесениеСведенийОСобранномУрожаеЗЕРНО`
- `ВнутреннееПотребление`
- `ВыкупПринятыхНаХранениеТоваров`
- `ВыкупТоваровХранителем`
- `ЗапросОстатковПартийЗЕРНО`
- `ЗапросОстатковПартийСАТУРН`
- `ЗаявкаНаКомандировку`
- `ИмпортПродукцииСАТУРН`
- `КорректировкаГрафикаВзаиморасчетов`
- `КорректировкаЗадолженности`
- `КорректировкаПлановыхПотребностей`
- `КорректировкаРасчетовСПодотчетнымиЛицами`
- `НакладнаяСАТУРН`
- `НачислениеРеверсивногоНДС`
- `НачислениеРетроБонусовКлиента`
- `НачислениеРетроБонусовПоставщика`
- `ОприходованиеИзлишковОтгруженныхТоваров`
- `ОтгрузкаТоваровКлиенту`
- `ОтгрузкаТоваровСХранения`
- `ОтчетИСМП`
- `ОтчетКомитентуОЗакупках`
- `ОтчетОПроизводствеЕГАИС`
- `ОтчетОРозничныхВозвратах`
- `ОтчетОСписанииТоваровСХранения`
- `ОтчетОбИмпортеЕГАИС`
- `ОформлениеСДИЗЗЕРНО`
- `ПередачаТоваровХранителю`
- `ПеремещениеМеждуМОДИСМП`
- `ПересортицаТоваровУХранителя`
- `ПланВнутреннихПотреблений`
- `ПланПримененияСАТУРН`
- `ПлатежнаяСсылкаСБП`
- `ПогашениеСДИЗЗЕРНО`
- `ПодключениеКегаКОборудованиюРозливаИСМП`
- `ПодтверждениеЗачисленияЗарплаты`
- `ПодтверждениеНулевойСтавкиНДС`
- `ПорчаТоваровУХранителя`
- `ПоступлениеТоваровОтКлиента`
- `ПоступлениеТоваровОтХранителя`
- `ПоступлениеУслугВПодразделение`
- `ПриемкаТоваровНаХранение`
- `ПроизводственнаяОперацияСАТУРН`
- `РазрешениеНаОтгрузкуИСМП`
- `РаспознанныйДокумент`
- `РасчетПроцентныхРасходовДисконтирования`
- `РегистраторЗапасыИПотребности`
- `РегистраторРасчетаСебестоимости`
- `СверкаВзаиморасчетов2_4`
- `СверкаВзаиморасчетов2_5_11`
- `СверкаВзаиморасчетовСБПc2b`
- `СообщениеЭДО`
- `СписаниеОтгруженныхТоваров`
- `СписаниеПартийЗЕРНО`
- `СписаниеРасхожденийПоступлениеПриобретение`
- `СписаниеРетроБонусовКлиента`
- `СписаниеРетроБонусовПоставщика`
- `Сторно`
- `ТранспортныйКонтейнерЭДО`
- `УведомлениеОПланируемомИмпортеЕГАИС`
- `УдалитьРегистраторГрафикаДвиженияТоваров`
- … и ещё 14
- **Только в crm3-dev:** 25
- `CRM_ПланированиеПоОтделам`
- `rh_ОтражениеФактаПродаж`
- `rh_ПланированиеПродаж`
- `rh_ТоварыНаСкладахСебестоимость`
- `rh_УдалитьКассоваяСмена`
- `АктОРасхожденияхПриПоступленииТоваров`
- `АктПриемкиТоваров`
- `ВнутреннееПотреблениеТоваров`
- `ВыпискаПоРасчетномуСчету`
- `ПакетЭД`
- `РегистраторГрафикаДвиженияТоваров`
- `СверкаВзаиморасчетов`
- `СписаниеЗадолженности`
- `УдалитьCRM_Сделка`
- `УдалитьCRM_Событие`
- `УдалитьОрдерНаОтражениеРезультатовПересчетовТоваров`
- `УдалитьПодтверждениеНулевойСтавкиНДС`
- `УдалитьРаспоряжениеНаИнвентаризациюТоваров`
- `УдалитьРаспределениеРасходовНаСебестоимостьТоваров`
- `УстановкаСкидокНаценок`
- `ЭлектронныйДокументВходящий`
- `ЭлектронныйДокументИсходящий`
- `смсСообщение`
- `удалитьCRM_Мероприятие`
- `удалитьCRM_Планирование`
- **В обеих:** 204
### Общие модули (`CommonModules/`)
- **Только в crm3-26-test:** 1301
- `CRM_БазоваяСервер`
- `CRM_ВоронкиПродажПовтИсп`
- `CRM_ИнтересыВызовСервера`
- `CRM_ЛентаСобытийКлиентСервер`
- `CRM_ЛицензированиеКлиент`
- `CRM_Модуль_ОбработкаТабличнойЧастиСервер`
- `CRM_Модуль_РаботаСКонтрагентамиВызовСервера`
- `CRM_НачалоРаботыСПрограммойВызовСервера`
- `CRM_ОбменB2BПортал`
- `CRM_ОбменСВнешнимиКалендарями`
- `CRM_ОбменСВнешнимиКалендарямиВызовСервера`
- `CRM_ОповещенияКлиент`
- `CRM_ОчисткаИсторииРеквизитовОбъектов`
- `CRM_ПланированиеПродаж`
- `CRM_ПодготовкаФормДляМобильногоКлиента`
- `CRM_ПрисоединенныеФайлыКлиент`
- `CRM_ПроверкаПравописанияКлиент`
- `CRM_ПроверкаПравописанияСервер`
- `CRM_РаботаСHTMLКлиент`
- `CRM_РаботаСICalendar`
- `CRM_РаботаСВиджетамиКлиент`
- `CRM_РаботаСВиджетамиКлиентСервер`
- `CRM_РаботаСВиджетамиСервер`
- `CRM_РаботаСВнешнимиБиблиотекамиВызовСервера`
- `CRM_РаботаСПочтовымиСообщениямиСлужебный`
- `CRM_РаботаСРечьюКлиент`
- `CRM_РаботаСРечьюСервер`
- `CRM_РаботаСФайлами`
- `CRM_РаботаСЯзыковымиМоделямиВызовСервера`
- `CRM_РаботаСЯзыковымиМоделямиКлиент`
- `CRM_РаботаСЯзыковымиМоделямиСервер`
- `CRM_СинхронизацияDAV`
- `CRM_СоисполнителиДиалоговКлиент`
- `CRM_СоисполнителиДиалоговСервер`
- `CRM_СпискиВыбораКлиентСервер`
- `CRM_СтраницаПриветствие`
- `CRM_СтраницаПриветствиеКлиент`
- `CRM_СтраницаПриветствияГлобальный`
- `CRM_ТехподдержкаИнтеграцияСервер`
- `CRM_УТ_ПолучениеОбновленийПрограммы`
- `CRM_УдалениеПомеченныхОбъектов`
- `CRM_УправлениеКонтактнойИнформациейВызовСервера`
- `CRM_ЦентрМониторингаВызовСервера`
- `CRM_ЦентрМониторингаГлобальный`
- `CRM_ЦентрМониторингаКлиент`
- `CRM_ЦентрМониторингаКлиентСервер`
- `CRM_ШаблоныЭлементовФорм`
- `CRM_ШаблоныЭлементовФормКлиент`
- `CRMЛокализация`
- `HttpBridgeКлиент`
- `АвтоматическоеПолучениеЭДО`
- `АвтоматическоеПолучениеЭДОВызовСервера`
- `АвтоматическоеПолучениеЭДОИнтеграцияОблака`
- `АвтоматическоеПолучениеЭДОКлиент`
- `АвтоматическоеПолучениеЭДОКлиентСервер`
- `АвтоматическоеПолучениеЭДОПовтИсп`
- `АктПремииКлиентуЛокализация`
- `АктПремииПоставщикаЛокализация`
- `АнализСхемКонфигурации`
- `АннулированиеПодарочныхСертификатовЛокализация`
- `АудитСостоянияСистемыЛокализация`
- `АудитСостоянияСистемыПовтИсп`
- `БанковскиеСчетаКонтрагентовЛокализация`
- `БанковскиеСчетаОрганизацийЛокализация`
- `БизнесСетьВМоделиСервиса`
- `БизнесСетьСлужебный`
- `БлокировкаРаботыСВнешнимиРесурсамиЛокализация`
- `БронированиеЛокализация`
- `ВводОстатковВызовСервера`
- `ВводОстатковСервер`
- `ВводОстатковСерверПовтИсп`
- `ВводОстатковТМЦВЭксплуатацииЛокализация`
- `ВзаиморасчетыВызовСервера`
- `ВзаиморасчетыКлиент`
- `ВидыНалоговВзносовЛокализация`
- `ВидыПриложенийПереопределяемый`
- `ВидыПриложенийСервер`
- `ВидыПриложенийСлужебный`
- `ВизуализацияЭДО`
- `ВизуализацияЭДОВызовСервера`
- … и ещё 1221
- **Только в crm3-dev:** 264
- `CRM_GoogleИнтеграция`
- `CRM_GoogleИнтеграцияРегл`
- `CRM_СобытияКлиент`
- `CRM_СобытияСервер`
- `CRM_УправлениеЭлектроннойПочтойIMAP`
- `mmMobileMonitor`
- `mmMobileMonitorПривилегированный`
- `mmОбратныйПротокол`
- `rh_ОбновлениеИнформационнойБазыRhana`
- `rh_ОбновлениеИнформационнойБазыВызовСервера`
- `rh_ОбщийМодульКлиентСервер`
- `rh_ОчередьЗаданийСлужебный`
- `rh_ПолнотекстовыйПоискКлиент`
- `rh_ПользователиСлужебныйВМоделиСервисаПовтИсп`
- `rh_СообщенияВМоделиСервисаПовтИсп`
- `rh_ТоварыНаСкладахСебестоимость`
- `rh_УправлениеКонтактнойИнформациейПереопределяемый`
- `rh_УправлениеПечатью`
- `rh_УправлениеПечатьюКлиент`
- `rh_ШаблоныСообщенийКлиентСервер`
- `rh_ШаблоныСообщенийСервер`
- `tega_ОбщийМодульСервер`
- `АвтономнаяРаботаСлужебныйВызовСервера`
- `АдресныйКлассификаторВызовСервера`
- `АдресныйКлассификаторКлиентСервер`
- `АдресныйКлассификаторСлужебныйВМоделиСервиса`
- `АнализЖурналаРегистрацииКлиент`
- `АнализЖурналаРегистрацииСлужебный`
- `БухгалтерскиеОтчетыВызовСервераПовтИсп`
- `ВариантыОтчетовВызовСервераПовтИсп`
- `ВариантыОтчетовКлиентПереопределяемый`
- `ВитриныКлиент`
- `ВнутреннееПотреблениеТоваровКлиентЛокализация`
- `ВнутреннееПотреблениеТоваровЛокализация`
- `ВызовОнлайнПоддержки`
- `ВызовОнлайнПоддержкиВызовСервера`
- `ВызовОнлайнПоддержкиКлиент`
- `ВызовОнлайнПоддержкиПереопределяемый`
- `ГенерацияШтрихкодаВызовСервера`
- `ГенерацияШтрихкодаКлиентСервер`
- `Диадок_ФоновыеЗадания`
- `ДлительныеОперацииГлобальный`
- `ДлительныеОперацииКлиентПовтИсп`
- `ДополнительныеОтчетыИОбработкиВБезопасномРежиме`
- `ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера`
- `ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс`
- `ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп`
- `ДополнительныеОтчетыИОбработкиРегламентныеЗадания`
- `ДополнительныеОтчетыИОбработкиСобытия`
- `ЖурналДокументовВнутреннегоТовародвиженияЛокализация`
- `ЗаказНаВнутреннееПотреблениеКлиентЛокализация`
- `ЗакупкиКлиентСервер`
- `ЗаполнениеСвойствПоСтатистикеПереопределяемый`
- `ЗаполнениеСвойствПоСтатистикеПовтИсп`
- `ЗаполнениеСвойствПоСтатистикеСервер`
- `ИнтеграцияЕГАИСВебКлиент`
- `ИнтеграцияЕГАИСГлобальный`
- `ИнтеграцияЕГАИССлужебныйКлиент`
- `ИнтеграцияИСМПГлобальный`
- `ИнтеграцияС1СДокументооборотВызовСервераПереопределяемый`
- `ИнтеграцияС1СДокументооборотКлиентПереопределяемый`
- `ИнтеграцияС1СДокументооборотПереопределяемый`
- `ИнтеграцияСЯндексКассой`
- `ИнтеграцияСЯндексКассойКлиент`
- `ИнтеграцияСЯндексКассойКлиентПереопределяемый`
- `ИнтеграцияСЯндексКассойПереопределяемый`
- `ИнтеграцияСЯндексКассойСлужебный`
- `ИнтеграцияСЯндексКассойСлужебныйВызовСервера`
- `ИнтеграцияСЯндексКассойСлужебныйКлиент`
- `ИнтерфейсИСМПВызовСервера`
- `ИнтерфейсИСМПКлиент`
- `ИнтерфейсИСМПКлиентСервер`
- `ИнтерфейсМОТПКлиентСервер`
- `КассовыеСменыВызовСервераПереопределяемый`
- `КомандыРаботыСБизнесПроцессамиКлиент`
- `КонтактнаяИнформацияXML`
- `КонтактнаяИнформацияКлиентСервер`
- `КонтактнаяИнформацияКлиентСерверПовтИсп`
- `КонтрольДинамическогоОбновленияКонфигурацииВызовСервера`
- `КонтрольДинамическогоОбновленияКонфигурацииГлобальный`
- … и ещё 184
- **В обеих:** 1817
## 6. Дифф имён: расширения (верхний уровень)
### Документы в расширениях
- **Только в crm3-26-test.rhana:** 0
- **Только в crm3-dev.rhana:** 19
- `ВводОстатков`
- `ВозвратТоваровОтКлиента`
- `ЗаданиеНаПеревозку`
- `ЗаказКлиента`
- `ЗаказНаПеремещение`
- `ОприходованиеИзлишковТоваров`
- `ОрдерНаОтражениеИзлишковТоваров`
- `ОрдерНаОтражениеНедостачТоваров`
- `ОтчетКомиссионера`
- `ОтчетКомиссионераОСписании`
- `ОтчетОРозничныхПродажах`
- `ПеремещениеТоваров`
- `ПересчетТоваров`
- `ПриобретениеТоваровУслуг`
- `ПриходныйОрдерНаТовары`
- `СписаниеНедостачТоваров`
- `СчетФактураВыданный`
- `СчетФактураВыданныйАванс`
- `р_ВерсииСебестоимости`
- **В обоих:** 2
### Общие модули в расширениях
- **Только в crm3-26-test.rhana:** 3
- `ОбщегоНазначенияКлиентСервер`
- `РК_ОбщегоНазначенияВызовСервера`
- `РК_ОбщегоНазначенияКлиентСервер`
- **Только в crm3-dev.rhana:** 35
- `rh_ТоварыНаСкладахСебестоимость`
- `ВводОстатковЛокализация`
- `ВозвратТоваровОтКлиентаЛокализация`
- `ДенежныеСредстваСервер`
- `ДоставкаТоваров`
- `ЗакупкиСервер`
- `ЗапасыСервер`
- `ИнтеграцияСЯндексКассойУТ`
- `МенеджерОбменаЧерезУниверсальныйФормат`
- `МенеджерОфлайнОборудования`
- `НаборыСервер`
- `ОбменДаннымиУТ`
- `ОбщегоНазначения`
- `ОприходованиеИзлишковТоваровЛокализация`
- `ОтчетКомиссионераЛокализация`
- `ОтчетКомиссионераОСписанииЛокализация`
- `ПеремещениеТоваровЛокализация`
- `ПодключаемоеОборудованиеOfflineВызовСервера`
- `ПрефиксацияОбъектовКлиентСервер`
- `ПрефиксацияОбъектовСобытия`
- `ПриобретениеТоваровУслугЛокализация`
- `ПроведениеСерверУТ`
- `ПродажиСервер`
- `РеализацияТоваровУслугЛокализация`
- `СкладыСервер`
- `СписаниеНедостачТоваровЛокализация`
- `ТорговыеПредложенияСлужебный`
- `УправлениеПечатьюMSWordКлиент`
- `УправлениеПечатьюВызовСервера`
- `УправлениеПечатьюКлиентСервер`
- `УправлениеПечатьюПереопределяемый`
- `УчетНДСПереопределяемый`
- `УчетНДСУП`
- `УчетНДСУПКлиентСервер`
- `УчетНДСУПСлужебный`
- **В обоих:** 0
### Справочники в расширениях
- **Только в crm3-26-test.rhana:** 0
- **Только в crm3-dev.rhana:** 7
- `ВидыЗапасов`
- `ВидыКонтактнойИнформации`
- `Номенклатура`
- `НоменклатураКонтрагентов`
- `Партнеры`
- `СертификатыНоменклатуры`
- `Склады`
- **В обоих:** 1
## 7. Рекомендуемые следующие шаги для «первоначальной настройки» тестовой ИБ
1. В конфигураторе/EDT для **crm3-26-test** зафиксировать состав подключаемых расширений (`crm3-26-test.rhana` + при необходимости `crm3-dev.upd5b` и др.) и версию платформы **не ниже** требований 3.1.
2. Снять **парные снимки настроек ИБ** для рабочей `crm3-dev` и тестовой `crm3-26-test` (уровень предприятия) по чек-листу плана миграции — этот файл только про **метаданные файлов**.
3. По диффу документов/модулей (разд. 5–6) запланировать перенос недостающих доработок в `crm3-26-test.rhana` или подтвердить замену типовыми объектами 3.1.
@@ -1,216 +0,0 @@
---
title: Анализ рисков нарушения уникальности регистра CRM_ЖурналДокументов
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-10
date_modified: 2025-12-10
show_metadata_block: true
show_index_link: true
---
# Анализ рисков нарушения уникальности регистра CRM_ЖурналДокументов
## Сравнение конфигураций
### Структура регистра в CRM3devLocal
**Измерения:**
1. **ГлавнаяЗапись** - `Boolean`
2. **Клиент** - `CatalogRef.Партнеры` (только один тип)
3. **Объект** - `Characteristic.CRM_ОбъектыЖурналаДокументов`
4. **CRM_Интерес** - `DocumentRef.CRM_Интерес`
### Структура регистра в CRM326_TEST (новая конфигурация)
**Измерения:**
1. **ГлавнаяЗапись** - `Boolean`
2. **Клиент** - `CatalogRef.Партнеры` **ИЛИ** `CatalogRef.CRM_ПотенциальныеКлиенты` (два типа)
3. **Объект** - `Characteristic.CRM_ОбъектыЖурналаДокументов`
4. **CRM_Интерес** - `DocumentRef.CRM_Интерес`
## Ключевое различие
В **CRM3devLocal** измерение "Клиент" может содержать только ссылки на справочник `Партнеры`.
В **CRM326_TEST** измерение "Клиент" может содержать ссылки на два справочника:
- `Партнеры`
- `CRM_ПотенциальныеКлиенты`
## Риски нарушения уникальности при реструктуризации
### 1. Обнуление ссылок на удаляемые объекты
При реструктуризации регистра система автоматически обнуляет (приводит к `NULL`) ссылки на объекты, которые:
- Удаляются из конфигурации
- Больше не поддерживаются в типе измерения
### 2. Ссылки, которые станут NULL
#### 2.1. Измерение "Клиент"
**Риск:** Если справочник `CRM_ПотенциальныеКлиенты` удаляется из конфигурации, все ссылки на него в измерении "Клиент" будут обнулены.
**Пример проблемы:**
```
До реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=Партнеры.Клиент1, Объект=X, CRM_Интерес=Y
Запись 2: ГлавнаяЗапись=true, Клиент=CRM_ПотенциальныеКлиенты.Клиент2, Объект=X, CRM_Интерес=Y
После реструктуризации (если CRM_ПотенциальныеКлиенты удаляется):
Запись 1: ГлавнаяЗапись=true, Клиент=Партнеры.Клиент1, Объект=X, CRM_Интерес=Y
Запись 2: ГлавнаяЗапись=true, Клиент=NULL, Объект=X, CRM_Интерес=Y
Если есть еще одна запись с NULL клиентом:
Запись 3: ГлавнаяЗапись=true, Клиент=NULL, Объект=X, CRM_Интерес=Y
ТОГДА Запись 2 и Запись 3 станут ДУБЛИКАТАМИ!
```
#### 2.2. Измерение "Объект" (характеристика)
**Риск:** Характеристика `CRM_ОбъектыЖурналаДокументов` может содержать ссылки на различные типы объектов (справочники и документы). Если какой-то из этих типов удаляется, ссылки на него обнуляются.
**Удаляемые типы объектов, которые могут быть в характеристике:**
- `СправочникСсылка.CRM_ПотенциальныеКлиенты`
- `СправочникСсылка.CRM_ИсточникиКонтакта`
- `СправочникСсылка.CRM_КатегорииВрача`
- `СправочникСсылка.CRM_НаучныеСтепени`
- `СправочникСсылка.CRM_ОбластьИнтересов`
- `СправочникСсылка.CRM_Обращения`
- `СправочникСсылка.CRM_Специализация`
- `СправочникСсылка.CRM_Специальность`
- `СправочникСсылка.Отделы`
- `ДокументСсылка.УдалитьCRM_Сделка`
- `ДокументСсылка.УдалитьCRM_Событие`
- `ДокументСсылка.удалитьCRM_Мероприятие`
- `ДокументСсылка.удалитьCRM_Планирование`
- `ДокументСсылка.CRM_ПланированиеПоОтделам`
**Пример проблемы:**
```
До реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=K1, Объект=CRM_ПотенциальныеКлиенты.Клиент2, CRM_Интерес=Y
Запись 2: ГлавнаяЗапись=true, Клиент=K1, Объект=CRM_ПотенциальныеКлиенты.Клиент3, CRM_Интерес=Y
После реструктуризации (если CRM_ПотенциальныеКлиенты удаляется):
Запись 1: ГлавнаяЗапись=true, Клиент=K1, Объект=NULL, CRM_Интерес=Y
Запись 2: ГлавнаяЗапись=true, Клиент=K1, Объект=NULL, CRM_Интерес=Y
ТОГДА Запись 1 и Запись 2 станут ДУБЛИКАТАМИ!
```
#### 2.3. Измерение "CRM_Интерес"
**Риск:** Если документы определенных типов удаляются, ссылки на них обнуляются.
**Удаляемые типы документов:**
- `Документ.УдалитьCRM_Сделка`
- `Документ.УдалитьCRM_Событие`
- `Документ.удалитьCRM_Мероприятие`
- `Документ.удалитьCRM_Планирование`
- `Документ.CRM_ПланированиеПоОтделам`
**Пример проблемы:**
```
До реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=K1, Объект=X, CRM_Интерес=УдалитьCRM_Сделка.Документ1
Запись 2: ГлавнаяЗапись=true, Клиент=K1, Объект=X, CRM_Интерес=УдалитьCRM_Сделка.Документ2
После реструктуризации (если УдалитьCRM_Сделка удаляется):
Запись 1: ГлавнаяЗапись=true, Клиент=K1, Объект=X, CRM_Интерес=NULL
Запись 2: ГлавнаяЗапись=true, Клиент=K1, Объект=X, CRM_Интерес=NULL
ТОГДА Запись 1 и Запись 2 станут ДУБЛИКАТАМИ!
```
## Комбинированные риски
Наиболее опасны ситуации, когда обнуляются несколько измерений одновременно:
### Пример комбинированного риска:
```
До реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=Партнеры.K1, Объект=CRM_ПотенциальныеКлиенты.K2, CRM_Интерес=УдалитьCRM_Сделка.D1
Запись 2: ГлавнаяЗапись=true, Клиент=CRM_ПотенциальныеКлиенты.K3, Объект=CRM_ПотенциальныеКлиенты.K4, CRM_Интерес=УдалитьCRM_Сделка.D2
После реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=Партнеры.K1, Объект=NULL, CRM_Интерес=NULL
Запись 2: ГлавнаяЗапись=true, Клиент=NULL, Объект=NULL, CRM_Интерес=NULL
Если есть еще записи с такими же значениями после обнуления - появятся дубликаты!
```
## Сценарии нарушения уникальности
### Сценарий 1: Обнуление только "Клиент"
- **Условие:** Есть записи с `Клиент=CRM_ПотенциальныеКлиенты.*` и записи с `Клиент=NULL`
- **Результат:** После обнуления записи с `CRM_ПотенциальныеКлиенты` станут иметь `Клиент=NULL`, что может совпасть с уже существующими записями
### Сценарий 2: Обнуление только "Объект"
- **Условие:** Есть несколько записей с разными значениями `Объект`, которые ссылаются на удаляемые типы
- **Результат:** После обнуления все эти записи будут иметь `Объект=NULL`, что может создать дубликаты
### Сценарий 3: Обнуление только "CRM_Интерес"
- **Условие:** Есть несколько записей с разными значениями `CRM_Интерес`, которые ссылаются на удаляемые документы
- **Результат:** После обнуления все эти записи будут иметь `CRM_Интерес=NULL`, что может создать дубликаты
### Сценарий 4: Комбинированное обнуление
- **Условие:** Обнуляются несколько измерений одновременно
- **Результат:** Максимальный риск появления дубликатов
## Рекомендации по устранению
1. **Перед реструктуризацией:**
- Выполнить скрипт `check_duplicates_crm_journal.bsl` для выявления потенциальных дубликатов
- Проанализировать результаты и определить записи, которые нужно удалить или скорректировать
2. **Удаление записей с проблемными ссылками:**
- Удалить все записи, где `Клиент` ссылается на `CRM_ПотенциальныеКлиенты` (если этот справочник удаляется)
- Удалить все записи, где `Объект` ссылается на удаляемые типы объектов
- Удалить все записи, где `CRM_Интерес` ссылается на удаляемые документы
3. **Альтернативный подход:**
- Очистить регистр полностью
- Перезаполнить его заново, исключив объекты, которые будут удалены
## Проверка после реструктуризации
После выполнения реструктуризации необходимо проверить:
```sql
ВЫБРАТЬ
CRM_ЖурналДокументов.ГлавнаяЗапись,
CRM_ЖурналДокументов.Клиент,
CRM_ЖурналДокументов.Объект,
CRM_ЖурналДокументов.CRM_Интерес,
КОЛИЧЕСТВО(*) КАК КоличествоЗаписей
ИЗ
РегистрСведений.CRM_ЖурналДокументов КАК CRM_ЖурналДокументов
СГРУППИРОВАТЬ ПО
CRM_ЖурналДокументов.ГлавнаяЗапись,
CRM_ЖурналДокументов.Клиент,
CRM_ЖурналДокументов.Объект,
CRM_ЖурналДокументов.CRM_Интерес
ИМЕЮЩИЕ
КОЛИЧЕСТВО(*) > 1
```
Если этот запрос возвращает результаты - есть дубликаты, которые нужно устранить.
## Выводы
1. **Основной риск:** При реструктуризации регистра ссылки на удаляемые объекты обнуляются, что может привести к появлению дубликатов по комбинации оставшихся измерений.
2. **Критичные измерения для проверки:**
- **Клиент** - может содержать ссылки на `CRM_ПотенциальныеКлиенты`, который удаляется
- **Объект** - характеристика может содержать ссылки на множество удаляемых типов
- **CRM_Интерес** - может содержать ссылки на удаляемые документы
3. **Необходимые действия:**
- Выполнить проверку перед реструктуризацией
- Удалить или скорректировать проблемные записи
- Проверить уникальность после реструктуризации
@@ -1,165 +0,0 @@
---
title: Выводы сравнения конфигураций CRM3devLocal и CRM326_TEST
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-10
date_modified: 2025-12-10
show_metadata_block: true
show_index_link: true
---
# Выводы сравнения конфигураций CRM3devLocal и CRM326_TEST
## Результаты анализа регистра CRM_ЖурналДокументов
### Ключевое различие в структуре
**Измерение "Клиент":**
- **CRM3devLocal:** Только `CatalogRef.Партнеры`
- **CRM326_TEST:** `CatalogRef.Партнеры` **ИЛИ** `CatalogRef.CRM_ПотенциальныеКлиенты`
### Ссылки, которые станут NULL после реструктуризации
#### 1. Измерение "Клиент"
-**Все ссылки на `CRM_ПотенциальныеКлиенты`** будут обнулены
-**Причина:** В новой конфигурации это измерение поддерживает только `Партнеры`
#### 2. Измерение "Объект" (характеристика)
-**Ссылки на следующие удаляемые типы будут обнулены:**
- `СправочникСсылка.CRM_ПотенциальныеКлиенты`
- `СправочникСсылка.CRM_ИсточникиКонтакта`
- `СправочникСсылка.CRM_КатегорииВрача`
- `СправочникСсылка.CRM_НаучныеСтепени`
- `СправочникСсылка.CRM_ОбластьИнтересов`
- `СправочникСсылка.CRM_Обращения`
- `СправочникСсылка.CRM_Специализация`
- `СправочникСсылка.CRM_Специальность`
- `СправочникСсылка.Отделы`
- `ДокументСсылка.УдалитьCRM_Сделка`
- `ДокументСсылка.УдалитьCRM_Событие`
- `ДокументСсылка.удалитьCRM_Мероприятие`
- `ДокументСсылка.удалитьCRM_Планирование`
- `ДокументСсылка.CRM_ПланированиеПоОтделам`
#### 3. Измерение "CRM_Интерес"
-**Ссылки на следующие удаляемые документы будут обнулены:**
- `Документ.УдалитьCRM_Сделка`
- `Документ.УдалитьCRM_Событие`
- `Документ.удалитьCRM_Мероприятие`
- `Документ.удалитьCRM_Планирование`
- `Документ.CRM_ПланированиеПоОтделам`
## Риски нарушения уникальности
### Критический риск #1: Обнуление измерения "Клиент"
**Сценарий нарушения уникальности:**
```
ДО реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=Партнеры.K1, Объект=X, CRM_Интерес=Y
Запись 2: ГлавнаяЗапись=true, Клиент=CRM_ПотенциальныеКлиенты.K2, Объект=X, CRM_Интерес=Y
Запись 3: ГлавнаяЗапись=true, Клиент=NULL, Объект=X, CRM_Интерес=Y
ПОСЛЕ реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=Партнеры.K1, Объект=X, CRM_Интерес=Y
Запись 2: ГлавнаяЗапись=true, Клиент=NULL, Объект=X, CRM_Интерес=Y ← ОБНУЛЕНО
Запись 3: ГлавнаяЗапись=true, Клиент=NULL, Объект=X, CRM_Интерес=Y
РЕЗУЛЬТАТ: Запись 2 и Запись 3 стали ДУБЛИКАТАМИ!
```
### Критический риск #2: Обнуление измерения "Объект"
**Сценарий нарушения уникальности:**
```
ДО реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=K1, Объект=CRM_ПотенциальныеКлиенты.K2, CRM_Интерес=Y
Запись 2: ГлавнаяЗапись=true, Клиент=K1, Объект=CRM_ПотенциальныеКлиенты.K3, CRM_Интерес=Y
ПОСЛЕ реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=K1, Объект=NULL, CRM_Интерес=Y ← ОБНУЛЕНО
Запись 2: ГлавнаяЗапись=true, Клиент=K1, Объект=NULL, CRM_Интерес=Y ← ОБНУЛЕНО
РЕЗУЛЬТАТ: Запись 1 и Запись 2 стали ДУБЛИКАТАМИ!
```
### Критический риск #3: Обнуление измерения "CRM_Интерес"
**Сценарий нарушения уникальности:**
```
ДО реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=K1, Объект=X, CRM_Интерес=УдалитьCRM_Сделка.D1
Запись 2: ГлавнаяЗапись=true, Клиент=K1, Объект=X, CRM_Интерес=УдалитьCRM_Сделка.D2
ПОСЛЕ реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=K1, Объект=X, CRM_Интерес=NULL ← ОБНУЛЕНО
Запись 2: ГлавнаяЗапись=true, Клиент=K1, Объект=X, CRM_Интерес=NULL ← ОБНУЛЕНО
РЕЗУЛЬТАТ: Запись 1 и Запись 2 стали ДУБЛИКАТАМИ!
```
### Максимальный риск: Комбинированное обнуление
**Сценарий нарушения уникальности:**
```
ДО реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=Партнеры.K1, Объект=CRM_ПотенциальныеКлиенты.K2, CRM_Интерес=УдалитьCRM_Сделка.D1
Запись 2: ГлавнаяЗапись=true, Клиент=CRM_ПотенциальныеКлиенты.K3, Объект=CRM_ПотенциальныеКлиенты.K4, CRM_Интерес=УдалитьCRM_Сделка.D2
ПОСЛЕ реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=Партнеры.K1, Объект=NULL, CRM_Интерес=NULL
Запись 2: ГлавнаяЗапись=true, Клиент=NULL, Объект=NULL, CRM_Интерес=NULL
Если есть еще записи с такими же значениями после обнуления - появятся дубликаты!
```
## Рекомендации
### Перед реструктуризацией:
1.**Выполнить проверку** скриптом `check_duplicates_crm_journal.bsl`
2.**Проанализировать результаты** и определить проблемные записи
3.**Удалить или скорректировать** записи с ссылками на удаляемые объекты:
- Записи с `Клиент=CRM_ПотенциальныеКлиенты.*`
- Записи с `Объект`, ссылающимся на удаляемые типы
- Записи с `CRM_Интерес`, ссылающимся на удаляемые документы
### После реструктуризации:
1.**Проверить уникальность** регистра запросом:
```sql
ВЫБРАТЬ
CRM_ЖурналДокументов.ГлавнаяЗапись,
CRM_ЖурналДокументов.Клиент,
CRM_ЖурналДокументов.Объект,
CRM_ЖурналДокументов.CRM_Интерес,
КОЛИЧЕСТВО(*) КАК КоличествоЗаписей
ИЗ
РегистрСведений.CRM_ЖурналДокументов КАК CRM_ЖурналДокументов
СГРУППИРОВАТЬ ПО
CRM_ЖурналДокументов.ГлавнаяЗапись,
CRM_ЖурналДокументов.Клиент,
CRM_ЖурналДокументов.Объект,
CRM_ЖурналДокументов.CRM_Интерес
ИМЕЮЩИЕ
КОЛИЧЕСТВО(*) > 1
```
2.**Устранить найденные дубликаты**, если они есть
## Итоговые выводы
1.**Основная причина проблемы:** При реструктуризации регистра ссылки на удаляемые объекты автоматически обнуляются, что может привести к появлению дубликатов по комбинации оставшихся измерений.
2.**Критичные измерения:**
- **Клиент** - обнуление ссылок на `CRM_ПотенциальныеКлиенты`
- **Объект** - обнуление ссылок на множество удаляемых типов
- **CRM_Интерес** - обнуление ссылок на удаляемые документы
3.**Необходимые действия:**
- Выполнить проверку перед реструктуризацией
- Удалить проблемные записи
- Проверить уникальность после реструктуризации
4.**Скрипт проверки готов:** `check_duplicates_crm_journal.bsl` учитывает все выявленные риски
@@ -1,307 +0,0 @@
# Дорожная карта модернизации CRM3
Версия **0.1** (предварительная). Дата выгрузки в каталог проекта `docs/`: 2026-05-12.
Источник снимка: рабочий план Cursor — `c:\Users\kma\.cursor\plans\миграция_crm3_roadmap_c76af973.plan.md`. Этот markdown **не обновляется автоматически** при правках плана в IDE; для новой ревизии повторите выгрузку или отредактируйте файл вручную.
**Дополнение к версии 0.1 (2026-05-12):** в целевой конфигурации `crm3-26-promo` реализация **НДС 22%** входит в **типовой контур в полном объёме**; **перенос логики НДС 22 из старой системы / расширения в `crm3-26-promo.rhana` не требуется**. В объёме миграции остаются проверки обмена с Бухгалтерией КОРП и сквозных сценариев (см. разд. 2.2, 8, 13).
Ссылки на документы и код ниже даны как в исходном плане (абсолютные пути к репозиторию `crm3-26` на диске разработки).
---
**Нумерация для ссылок:** верхний уровень — целые разделы `1``13` (`1``2` — контекст и источники; `3``10` — этапы внедрения, в заголовке также «Этап 1»…«Этап 8»; `11` — операционный план; `12` — привязка комплекта печати к этапам плана; `13` — риски). Вложенность обозначается как **`4.2.1`**: раздел `4`, подраздел `2`, при необходимости далее пункты списка нумеруются вручную в тексте ссылок («п. 1», «п. 2») внутри подраздела.
## 1. Контекст и зафиксированные решения
- Исходная система: `@crm3-dev` + расширения `@crm3-dev.docs`, `@crm3-dev.rhana`, `@crm3-dev.upd5b`.
- Целевая система: `@crm3-26-promo` + расширение `@crm3-26-promo.rhana`.
- Сопоставление с эталоном: `@crm302228-etalon` для выделения нетиповых доработок.
- Принято:
- Себестоимость: **переходный учёт себестоимости** — в целевой базе на ограниченный период используется **перенесённый из старой системы** доработанный механизм учёта себестоимости, затем выполняется **переход на типовой** механизм новой конфигурации по согласованным критериям.
- **Передача данных, первая волна:** НСИ + `ЗаказКлиента` + `РеализацияТоваровУслуг` (без ЭДО и УПД в первой волне); ведётся с **матрицей объектов по разделам учёта** (см. разд. 7), а не только настройкой универсального формата.
- В объем миграции входят **доработка по кредит-ноте** и **доработка по купонам** — перенос логики и связанных объектов в `crm3-26-promo.rhana`, приемка по согласованным сценариям.
- В объем миграции входят **печать комплекта документов** и **доработки складского учета**, зафиксированные в аналитике по складу и печати — перенос в `crm3-26-promo.rhana` с приемкой по печатным и складским сценариям.
- **Качество учёта в исходной базе:** допускается, что **складской и финансовый учёт** части остатков **по номенклатурам** накопил **ошибки**, либо **менялся порядок учёта** при уже существующих остатках; перенос «как есть» без **предварительной санации и согласованных правил** (что исправляем до среза, что переносим с актом расхождений, что выводим из оборота) — риск для целевой системы. Это явно учитывается в **разд. 6** (остатки) и в матрице проверок.
- **Целевая политика учёта:** в `crm3-26-promo` предполагается **полное включение посерийного учёта для всех номенклатур** — заложить **сверку и дозаполнение** серийных данных при переносе остатков и НСИ, сценарии, где в источнике серия не велась или велась выборочно.
- **Маркировка в целевой системе:** планируется ведение учёта **маркированного товара** (косметика, БАДы, лекарственные препараты) — заложить в объём **готовность НСИ и документооборота** под маркировку (виды продукции, **коды маркировки** и штрихкоды по регламенту конфигурации, сценарии приёмки и отгрузки), согласование с передачей первой волны и с УПД/ЭДО во второй волне при необходимости.
- **НДС 22%:** в `crm3-26-promo` поддержка ставки и связанных механизмов **реализована типовой конфигурацией в полном объёме****не переносить** как отдельную доработку в `crm3-26-promo.rhana`; учитывать только **регрессию** документооборота и обмена (в т.ч. с Бухгалтерией КОРП), если контур остаётся в эксплуатации.
- **Настройки информационной базы (уровень «1С:Предприятие»):** фиксируются **парным образом** для **исходной** рабочей базы (`crm3-dev` + согласованный состав расширений) и **целевой** (`crm3-26-promo` + `crm3-26-promo.rhana`) по **одному и тому же чек-листу разделов настроек** (снимок на дату, с указанием **версий конфигурации и расширений** в шапке каждого снимка). Целевая ИБ **выравнивается** с рабочей там, где это требуется для эксплуатации; где политика **намеренно** отличается (новая типовая, маркировка, полный посерийный учёт и т.д.) — строка в протоколе. Утверждаются **сравнительный анализ** и **протокол различий** — основа для **преобразования** входящих остатков и документов переходного периода. Для съёма и сличения используются **внешние обработки** (отдельные сборки под исходную и целевую конфигурацию; **окно различий** — в обработке целевой), плюс отдельный контур по **эффективным настройкам учёта номенклатуры** для номенклатур с **остатками и оборотами за период** (см. разд. 4).
## 2. Источники анализа
### 2.1. Ядро (документы)
- [d:/SynologyDrive/projects_syn/crm3-26/docs/ТЗ_3_Внедрение_формы_УПД_в_текущую_рабочую_базу_2026-05-05.md](d:/SynologyDrive/projects_syn/crm3-26/docs/ТЗ_3_Внедрение_формы_УПД_в_текущую_рабочую_базу_2026-05-05.md)
- [d:/SynologyDrive/projects_syn/crm3-26/docs/Сводка_переноса_и_настройки_актуальной_формы_УПД.md](d:/SynologyDrive/projects_syn/crm3-26/docs/Сводка_переноса_и_настройки_актуальной_формы_УПД.md)
- [d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_доработок_синхронизации_ЗаказКлиента.md](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_доработок_синхронизации_ЗаказКлиента.md)
- [d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_доработок_синхронизации_РеализацияТоваровУслуг.md](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_доработок_синхронизации_РеализацияТоваровУслуг.md)
- [d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_доработок_складского_учета_и_печати_документов.md](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_доработок_складского_учета_и_печати_документов.md)
- [d:/SynologyDrive/projects_syn/crm3-26/docs/Выводы_сравнения_конфигураций.md](d:/SynologyDrive/projects_syn/crm3-26/docs/Выводы_сравнения_конфигураций.md)
- [d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_применения_КредитНота (v1.1).md](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_применения_КредитНота%20(v1.1).md)
- [d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_применения_реквизита_Купон.md](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_применения_реквизита_Купон.md)
### 2.2. Дополнительные источники из docs (данные, CRM, роли, обновление, интеграции)
Имеет смысл явно заложить в объём миграции и в матрицу проверок (см. разд. 3, 6–8 и разд. 13):
- **Регистр `CRM_ЖурналДокументов` и смена модели CRM:** [Выводы сравнения конфигураций](d:/SynologyDrive/projects_syn/crm3-26/docs/Выводы_сравнения_конфигураций.md), [Анализ механизма перезаполнения CRM_ЖурналДокументов](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_механизма_перезаполнения_CRM_ЖурналДокументов.md), [Анализ рисков неуникальности](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_рисков_неуникальности_CRM_ЖурналДокументов.md), [Проблема неуникальности](d:/SynologyDrive/projects_syn/crm3-26/docs/Проблема_неуникальности_регистра_CRM_ЖурналДокументов.md), [Сводка рисков неуникальности](d:/SynologyDrive/projects_syn/crm3-26/docs/Сводка_рисков_неуникальности.md) — обнуление измерений при реструктуризации, риск **дубликатов** и нарушения уникальности; при необходимости сценарий **перезаполнения** журнала после миграции метаданных.
- **Роли и доступы в целевой системе:** [Роли для включения в новой системе](d:/SynologyDrive/projects_syn/crm3-26/docs/Роли_для_включения_в_новой_системе.md), [ФИНАЛЬНЫЙ СПИСОК РОЛЕЙ ДЛЯ ВКЛЮЧЕНИЯ](d:/SynologyDrive/projects_syn/crm3-26/docs/ФИНАЛЬНЫЙ_СПИСОК_РОЛЕЙ_ДЛЯ_ВКЛЮЧЕНИЯ.md), [Сверка ролей профиля](d:/SynologyDrive/projects_syn/crm3-26/docs/Сверка_ролей_профиля.md), [Сверка ролей с учетом переименований](d:/SynologyDrive/projects_syn/crm3-26/docs/Сверка_ролей_с_учетом_переименований.md), [Инструкция добавления ролей в профиль](d:/SynologyDrive/projects_syn/crm3-26/docs/Инструкция_добавления_ролей_в_профиль.md) — иначе «тихие» отказы при передаче данных, печати и закрытии месяца.
- **Накатывание типовой конфигурации и ошибки обновления:** [Анализ ошибок обновления](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_ошибок_обновления.md), [Список объектов для удаления из подсистем](d:/SynologyDrive/projects_syn/crm3-26/docs/Список_объектов_для_удаления_из_подсистем.md), [Инструкция по исправлению](d:/SynologyDrive/projects_syn/crm3-26/docs/Инструкция_по_исправлению.md) — итеративный путь применения обновлений; связь с составом подсистем и ссылками на удаляемые объекты.
- **НДС 22 и обмен с Бухгалтерией КОРП:** [Анализ обмена НДС 22 с Бухгалтерией КОРП](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_обмена_НДС_22_с_Бухгалтерией_КОРП.md), [Реализация переноса НДС 22](d:/SynologyDrive/projects_syn/crm3-26/docs/Реализация_переноса_НДС_22.md) (актуально для **исходной** конфигурации и обмена), [Проверка ставки НДС 22](d:/SynologyDrive/projects_syn/crm3-26/docs/Проверка_ставки_НДС_22.md), [Анализ обработчиков обновления НДС 22](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_обработчиков_обновления_НДС_22.md) — в целевой `crm3-26-promo` **перенос правил НДС 22 в расширение не планируется** (типовая реализация в полном объёме); при сохранении обмена с БК — **регрессия** согласованных сценариев и документация по разрывам на стороне БК/транспорта, если контур остаётся в эксплуатации.
- **Серии и ввод остатков (связь с полным посерийным учётом в целевой):** [Анализ привязок серий номенклатур к видам номенклатур](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_привязок_серий_номенклатур_к_видам_номенклатур.md) — логика отбора серий при вводе остатков и риски «лишних» серий без привязки к остаткам.
- **Отчётность по регистрам (углубление матрицы):** [Итоговый отчет анализа регистров](d:/SynologyDrive/projects_syn/crm3-26/docs/Итоговый_отчет_анализа_регистров.md), [ФИНАЛЬНЫЙ ОТЧЕТ Анализ регистров](d:/SynologyDrive/projects_syn/crm3-26/docs/ФИНАЛЬНЫЙ_ОТЧЕТ_Анализ_регистров.md) — в дополнение к [Глубинный анализ регистров](d:/SynologyDrive/projects_syn/crm3-26/docs/Глубинный_анализ_регистров.md).
- **Кредит-нота (обработки):** [Анализ переноса обработки КредитНотаЗаПериод](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_переноса_обработки_КредитНотаЗаПериод.md) — при необходимости отдельно от документа «Кредит-нота».
- **Навигация по всем отчётам:** [INDEX / оглавление](d:/SynologyDrive/projects_syn/crm3-26/docs/INDEX.md).
## 3. Этап 1 внедрения: сводка границ проекта и заморозка объёма (1 неделя)
<!--
Комментарий к разд. 3 (смысл названия):
Эта неделя — не разработка и не перенос кода в 1С, а согласование рамок проекта.
«Сводка границ» — зафиксировать, что входит в первый промышленный запуск и что откладывается
во вторую волну или после запуска; от чьих документов и решений исходим; какие критерии «готово».
«Заморозка объёма» — после утверждения списка новые пункты «обязательно сейчас» не добавляются
без явного пересмотра сроков и рисков (или только как вторая волна); назначаются ответственные
по направлениям. Цель — убрать размытие объёма до тяжёлой разработки и тестов.
-->
> **Комментарий к разд. 3:** эта неделя — **не разработка и не перенос кода** в 1С, а **согласование рамок миграции**. **«Сводка границ»** означает: зафиксировать, что **входит** в первый промышленный запуск и что **сознательно откладывается** во вторую волну или после запуска; от каких документов и решений исходим; какие **критерии готовности** на уровне проекта. **«Заморозка объёма»** означает: после утверждения перечня работ новые требования «обязательно сейчас» **не подмешиваются** без пересмотра сроков и рисков (или только как вторая волна с явной пометкой); фиксируются **ответственные по направлениям**. Зачем: чтобы не разъезжался объём до этапов переноса, остатков и **передачи данных**.
### 3.1. Работы по границам и перечню доработок
- Зафиксировать единый объем миграции: что входит в промышленный запуск, что переносится во **вторую и последующие волны**.
- Утвердить перечень критичных переносимых доработок в `crm3-26-promo.rhana`:
- **контур УПД (`upd5b`)** — не «слепой» перенос: оформить как отдельный пакет в `crm3-26-promo.rhana` **только после сверки** с **текущей реализацией в целевой конфигурации** `crm3-26-promo` (типовые макеты и модули УПД, счет-фактура, обработка общих форм печати и т.п.). Сравнить с исходниками `crm3-dev.upd5b` и документацией ([ТЗ_3](d:/SynologyDrive/projects_syn/crm3-26/docs/ТЗ_3_Внедрение_формы_УПД_в_текущую_рабочую_базу_2026-05-05.md), [сводка УПД](d:/SynologyDrive/projects_syn/crm3-26/docs/Сводка_переноса_и_настройки_актуальной_формы_УПД.md)); зафиксировать разрыв «уже есть в целевой / нужно перенести / заменить типовым»; избежать дублирования и конфликтов имён и логики при слиянии в одно расширение;
- **передача данных и обмен из `rhana`** — исходная рабочая конфигурация **сильно кастомная**: опираться **только** на типовые правила плана **«Синхронизация данных через универсальный формат»** недостаточно. Заложить: **(1)** доработанный модуль **«Менеджер обмена через универсальный формат»** и сценарии плана обмена как возможный **транспорт или базу**, **(2)** обязательную **матрицу по разделам учёта** — перечни **справочников, документов, регистров накопления и регистров сведений**, которые затрагивают передаваемые объекты и **проведение** в целевой базе (для финальной проверки полноты переноса, отсутствия «дыр» в движениях и согласованности с кастомным контуром, в т.ч. себестоимостью). Матрицу согласовать с аналитикой по регистрам (см. [Глубинный анализ регистров](d:/SynologyDrive/projects_syn/crm3-26/docs/Глубинный_анализ_регистров.md) при необходимости). Прочие интеграции в `rhana` (внешние системы и т.д.) — только если явно включены в объём **разд. 3**;
- критичные печатные и операционные доработки продаж и отгрузки;
- **кредит-нота** — перенос доработанного функционала и согласование с обменом и продажами;
- **купоны** — перенос доработки по реквизиту и связанной логике (заказы, реализации, отчеты по необходимости);
- **печать комплекта документов и складской учет** — перенос по [аналитике по складу и печати](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_доработок_складского_учета_и_печати_документов.md) (обработки, команды печати, связь с логистикой).
### 3.2. Документация из docs и ответственные
- Учесть по **документации в docs** (вне перечня кода расширения): **(а)** миграцию данных и **уникальность** регистра сведений **`CRM_ЖурналДокументов`** при смене типов измерений и обнулении ссылок — см. **разд. 2.2**; **(б)** **роли и профили** в `crm3-26-promo` ([Роли для включения…](d:/SynologyDrive/projects_syn/crm3-26/docs/Роли_для_включения_в_новой_системе.md) и смежные); **(в)** **итерации обновления** типовой базы и чистку подсистем ([Анализ ошибок обновления](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_ошибок_обновления.md), [Список объектов для удаления из подсистем](d:/SynologyDrive/projects_syn/crm3-26/docs/Список_объектов_для_удаления_из_подсистем.md)); **(г)** при сохранении обмена с **Бухгалтерией КОРП** — контур **НДС 22**: в целевой конфигурации опора на **типовую** реализацию; **перенос правил НДС 22 в `crm3-26-promo.rhana` не требуется** — регрессия и согласование с БК по [анализу обмена НДС 22 с Бухгалтерией КОРП](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_обмена_НДС_22_с_Бухгалтерией_КОРП.md); **(д)** **серии при вводе остатков** и виды номенклатуры — [Анализ привязок серий…](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_привязок_серий_номенклатур_к_видам_номенклатур.md) в связке с **разд. 6** и полным посерийным учётом.
- Сформировать реестр ответственных по направлениям: данные, обмен, себестоимость, печать, тестирование, переход в промышленную эксплуатацию.
### 3.2.1. Кто исполнитель по пунктам плана (только роли; без конкретных людей)
**Решение на текущий момент:** **имена и ФИО в текст дорожной карты не вносятся**; достаточно **ролей и потоков** и таблицы соответствия ниже. Реестр (**разд. 3.2**) может существовать как перечень направлений и ролей **без привязки к лицам**, пока заказчик не потребует явное закрепление — тогда ФИО оформляются **вне** этого файла плана (отдельный реестр, приказ, матрица RACI и т.п.).
**Идея:** для каждого **разд. `3`…`10`** при появлении исполнительской дисциплины задаётся **один владелец потока** — ответственный за срок, артефакты и эскалации; **соисполнители** перечисляются рядом. В переписке и задачах удобно ссылаться: «исполнитель по **разд. 7** — владелец потока *обмен*».
**Мэппинг разделов плана на потоки реестра** (конкретные люди, если понадобятся, назначаются **в реестре вне плана**, не обязательно в этом документе):
| Раздел плана | Поток(и) из реестра **3.2** (типовой исполнитель по смыслу) |
|--------------|-------------------------------------------------------------|
| **3** | Руководитель проекта + заказчик (рамки, freeze); при необходимости секретариат протокола |
| **4** | Администратор ИБ / методолог учёта (съём, протокол) + разработчик 1С (внешние обработки съёма и сравнения) |
| **5** | Разработчик 1С (перенос кода) + владелец учёта (критерии отключения переходного контура) |
| **6** | Методолог склад/ГФУ + владелец качества данных в источнике + разработчик/интегратор (механизм загрузки) |
| **7** | Владелец обмена + разработчик 1С (доработки транспорта) + **владельцы предметных областей** по строкам матрицы учёта |
| **8** | Тестирование (QA) + владельцы направлений (UAT-подпись) |
| **9** | Руководитель проекта + администратор ИБ + владелец эксплуатации (cutover) |
| **10** | Линия поддержки + координатор второй волны (по решениям **разд. 3**) |
**Разд. `11``13`:** владелец **артефактов и спецификаций** (**разд. 11**) — как правило руководитель проекта совместно с техническим лидом 1С; содержание **разд. 12** согласуют владельцы **склада и продаж**; реестр рисков (**разд. 13**) ведёт руководитель проекта с привлечением владельцев потоков по строкам риска.
### 3.3. Проверка: ответственный на складе для печати с учётом номенклатуры
- В старой системе доработка **есть**: подбор материально ответственного лица (МОЛ) с учетом **номенклатуры из документа** и табличной части **«МОЛ»** справочника **«Склады»** (в т.ч. строка с пустой номенклатурой как запасной вариант).
- Реализация в расширении: функции `р_ПолучитьОтветственногоПоСкладу`, `р_ПолучитьОтветственногоПоСкладу_адаптация` в модуле [ПродажиСервер (расширение)](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/CommonModules/ПродажиСервер/Ext/Module.bsl); вызов при печати и в документе — [РеализацияТоваровУслуг, менеджер](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/Documents/РеализацияТоваровУслуг/Ext/ManagerModule.bsl), [РеализацияТоваровУслуг, объект и форма](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/Documents/РеализацияТоваровУслуг/Ext/ObjectModule.bsl).
- Метаданные табличной части «МОЛ» с реквизитом «Номенклатура»: [Склады в основной конфигурации](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev/src/Catalogs/Склады.xml) (и доработки расширения в [Склады в rhana](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/Catalogs/Склады.xml)).
- В целевой конфигурации типовая функция [ПродажиСервер.ПолучитьОтветственногоПоСкладу](d:/SynologyDrive/projects_syn/crm3-26/crm3-26-promo/src/CommonModules/ПродажиСервер/Ext/Module.bsl) принимает **только склад** и опирается на типовой подбор ответственного по складу — **без разбора по строкам товара и без табличной части «МОЛ» с номенклатурой** в выгрузке справочника «Склады» целевой версии.
- **Вывод для плана:** заложить отдельный шаг сравнения (типовой реквизит «Ответственный» на складе и прочие типовые настройки против текущей логики по МОЛ и номенклатуре). Если типового поведения недостаточно — перенос минимального расширения (подбор для печати и заполнения реквизитов отгрузки) в `crm3-26-promo.rhana`; если достаточно — отказ от доработки с миграцией данных в типовую модель и регрессией печатных форм.
## 4. Этап 2 внедрения: настройка целевой ИБ под рабочую и протокол различий на уровне «1С:Предприятие» (1–2 недели, частично параллельно **разд. 5**)
### 4.1. Цель и постановка
**Зачем:** понимание **как вносить и преобразовывать данные** (входящие остатки, документы переходного периода) из старой рабочей базы в новую, готовящуюся к **опытной и промышленной** эксплуатации, невозможно свести только к сравнению **конфигураций** в EDT/конфигураторе. Нужна сопоставимость и прозрачность на уровне **настроек информационной базы** в режиме **«1С:Предприятие»** — и при этом учёт того, что **исходная** и **целевая** системы могут отличаться **версией типовой платформы и расширений**: один и тот же раздел настроек в обеих ИБ должен быть **явно снят и сопоставлен**, а не предположен «по умолчанию как в новой версии».
**Обе ИБ в одном контуре работ:** для **исходной** (рабочая `crm3-dev` + фактически подключённые расширения) и для **целевой** (`crm3-26-promo` + целевое расширение) выполняется **одинаковая процедура съёма** значений по согласованному перечню областей: функциональность, параметры **организаций** и **подразделений**, **учётные политики** (в т.ч. по организациям/складам по правилам конфигурации), ключевые **константы** и **регистры сведений** настроек, режимы учёта товаров (**партионный/посерийный**, складские политики), **НДС**, нумерация и префиксы, валюты, параметры взаиморасчётов и иные параметры, влияющие на **проведение** и интерпретацию переносимых данных.
### 4.2. Протокол различий и связь с остатками и первой волной
- Согласовать **единый чек-лист разделов настроек** и способ фиксации значений в **каждой** ИБ (отчёты конфигурации, выгрузки регистров сведений, ручной чек-лист по формам — в рамках регламента проекта). Результат — **два снимка на одну дату (или согласованную пару дат)**: «Исходная ИБ» и «Целевая ИБ»; в шапке каждого снимка — **имя базы**, **версия конфигурации**, **список и версии расширений**, ответственный за съём.
- По исходной ИБ зафиксировать **эталон рабочей эксплуатации** (продуктив или согласованная копия на дату); по целевой — состояние **до** и **после** выравнивания (чтобы в протоколе было видно, что меняли в целевой намеренно).
- Выполнить **настройку целевой** базы до **эквивалентности по смыслу** с рабочей там, где это требуется; где целенаправленно **меняют** политику под новую версию типовой или целевые требования (маркировка, полный посерийный учёт и т.д.) — явно как **намеренное отличие** с обоснованием в протоколе.
- Подготовить **сравнительный анализ** «значение в **исходной** ИБ ↔ значение в **целевой** ИБ» и утвердить **протокол различий** (живой документ с версиями при обновлениях типовой или смене политики). Минимальные поля строки: *область / объект настройки*, *значение в исходной ИБ*, *значение в целевой ИБ (до/после выравнивания)*, *решение* (выровнять целевую / оставить различие / отложить), *влияние на входящие остатки и на передачу/проведение документов переходного периода*, *правило преобразования данных при загрузке* (если нужно), *ответственный*, *срок*. При расхождении из-за **разных версий** типовой — отдельная колонка или вложенная заметка «ограничение версии / обходной путь».
- Связать протокол с **разд. 6** (остатки) и **разд. 7** (первая волна): правила выгрузки/загрузки и преобразований ссылаются на строки протокола; при конфликте с **матрицей по регистрам** — явное разрешение в протоколе или в журнале изменений проекта.
- Перед опытной и перед промышленной эксплуатацией — **контрольная сверка** критичных пунктов протокола **в обеих** ИБ или подтверждение, что исходная не менялась по согласованным пунктам, а целевая соответствует утверждённому снимку (дрейф настроек после обновлений или ручных правок).
### 4.3. Чек-лист разделов настроек (одинаково для исходной и целевой ИБ)
Ниже — ориентир перечня; конкретные пункты уточняются под редакцию УТ/CRM в **обеих** версиях конфигурации и дополняются при приёмке:
- функциональность (включённые опции), раздельные сценарии если в целевой версии пункт переименован или разнесён по формам;
- организации, подразделения, контактная/юридическая обвязка при необходимости для проведения;
- учётная политика по организациям (и иные политики по правилам типовой: склад, финансы);
- параметры НДС и сопутствующие сведения (в т.ч. НДС 22 при наличии в контуре);
- валюты, курсы (если настройка влияет на перенос);
- префиксы, нумераторы, дата запрета изменения данных (если используется);
- складской учёт: ордерность, FEFO/серии, ордерные склады — согласованно с политикой полного посерийного учёта в целевой;
- взаиморасчёты, порядок закрытия месяца (если на уровне настроек ИБ задаётся поведение, влияющее на перенос);
- параметры интеграций на уровне ИБ (если есть), влияющие на обмен и проведение.
### 4.4. Внешние обработки: снимок настроек ИБ и сравнение
- Разработать **две внешние обработки** под **разные конфигурации** (исходная рабочая цепочка `crm3-dev*` и целевая `crm3-26-promo*`): в каждой соответствующей ИБ обработка выполняет **выгрузку текущего состояния** согласованного перечня настроек уровня **«1С:Предприятие»** в **единый согласованный формат файла** (версия схемы выгрузки, дата/время съёма, версия конфигурации и расширений в метаданных файла).
- В **обработке, собираемой под целевую** конфигурацию: импорт файла снимка **исходной** ИБ, получение снимка **текущей целевой** ИБ, **наглядное отображение различий** (таблица, фильтры, группировки), вывод в **протокол различий**; при необходимости — пометки полей, доступных только в одной из версий типовой.
- Зафиксировать **хранение** файлов снимков (каталог проекта, регламент доступа) и **кто имеет право** запуска в продуктивных/копийных базах.
### 4.5. Эффективные настройки учёта номенклатуры по остаткам и оборотам за период
- Помимо общего снимка ИБ: отдельная выгрузка **настроек учёта номенклатуры**, **фактически применяемых** к номенклатурам, по которым на **согласованную дату** есть **остатки** и/или за **согласованный период** есть **обороты** (алгоритм отбора номенклатур и вычисления «эффективной» настройки с учётом иерархии видов/общих правил конфигурации — описать в спецификации обработки; учесть доработки исходной и целевой).
- **Обработка исходной** конфигурации: выгрузка в **тот же контейнер формата**, что и для целевой, чтобы поля сопоставлялись автоматически.
- **Обработка целевой** конфигурации: **сравнительный анализ** по номенклатурам из пересечения множеств (или по полному списку с пометкой «только в источнике/только в целевой»); результаты **встраиваются** в проектирование **выгрузки и загрузки остатков** по номенклатуре, в сценарии **переходного периода** и в **выгрузку документов** из исходной в целевую (связь с **разд. 6** и **7** и с правилами преобразования в протоколе).
## 5. Этап 3 внедрения: переходный учёт себестоимости — перенос минимального контура из старой системы (2–3 недели)
- Выделить минимальный переносимый контур `rh_ТоварыНаСкладахСебестоимость` и связанные вызовы.
- Не расширять объём **переходного учёта себестоимости**: переносим только то, что нужно для непрерывности работы.
- Заложить критерии **завершения** переходного учёта себестоимости и перехода на типовой механизм:
- согласованный период параллельной сверки;
- контрольные точки отключения доработанного механизма.
- **Ключевые исходные файлы в коде** (от них отталкиваемся при переносе и проверках):
- [d:/SynologyDrive/projects_syn/crm3-26/crm3-dev/src/CommonModules/rh_ТоварыНаСкладахСебестоимость/Ext/Module.bsl](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev/src/CommonModules/rh_ТоварыНаСкладахСебестоимость/Ext/Module.bsl)
- [d:/SynologyDrive/projects_syn/crm3-26/crm3-dev/src/AccumulationRegisters/rh_ТоварыНаСкладахСебестоимость.xml](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev/src/AccumulationRegisters/rh_ТоварыНаСкладахСебестоимость.xml)
## 6. Этап 4 внедрения: формирование и перенос остатков на управляемую дату (1–2 недели)
- Опираться на актуальный **протокол различий настроек ИБ** (**разд. 4**) и на **сравнение эффективных настроек учёта номенклатуры** из внешних обработок: согласованные режимы и расхождения по номенклатуре — вход в правила **ввода остатков** и **преобразования** при загрузке.
- Отдельный механизм установки **даты среза** с возможностью **быстро сменить дату** без переписывания алгоритмов.
- Выгрузка из `crm3-dev` и загрузка в `crm3-26-promo` через документы ввода остатков (или согласованный альтернативный способ по разделам учета).
- Обязательные разделы остатков:
- складские остатки;
- остатки товаров организаций;
- финансовые остатки;
- бронирование товаров и доступные остатки;
- себестоимость по доработанному функционалу (пока действует **переходный учёт себестоимости**);
- прочие остатки после дополнительного анализа регистров накопления.
- Контрольные сверки до и после загрузки по каждому разделу учета и общий акт расхождений.
- **Учёт расхождения с источником:** в `crm3-dev` возможны **искажённые** складские/финансовые остатки по отдельным номенклатурам, **историческая смена порядка учёта** при неизменных физических остатках и иные **несоответствия** целевой модели; до и после ввода остатков — отдельный перечень **номенклатур/партий/серий** под усиленную проверку, протокол решений (исправление в источнике, корректирующие документы, перенос с оговоркой).
- **Посерийный учёт в целевой:** при полном посерийном режиме для всех номенклатур — проверить, что ввод остатков и последующая **реализация** не блокируются пустыми сериями; при необходимости — этап **нормализации серий** в источнике или согласованные правила заполнения при переносе.
- **Разд. 6** — **обязательное условие** перед включением постоянной **передачи данных** (первой волны).
## 7. Этап 5 внедрения: передача данных, первая волна (2–3 недели)
- Учитывать **протокол различий настроек ИБ** (**разд. 4**) и **расхождения эффективных настроек номенклатуры** при правилах сопоставления и преобразования реквизитов при передаче (в т.ч. НДС, склад, серии, организация, вид номенклатуры), чтобы проведение в целевой базе соответствовало **заявленной** эксплуатационной модели.
- Односторонний поток `crm3-dev -> crm3-26-promo` по объёму первой волны:
- НСИ;
- `ЗаказКлиента`;
- `РеализацияТоваровУслуг`.
- **Важно:** из-за сильной кастомизации исходной конфигурации **нельзя ограничиться** надеждой на «универсальные правила обмена как есть». Нужны **явные перечни метаданных по разделам учёта** (справочники, документы, регистры накопления и сведений), вовлечённые в передачу и **проведение** этих объектов в целевой базе; по ним выполняется финальная проверка полноты данных и движений (в т.ч. после тестового проведения). В матрицу включить объекты и сценарии **посерийного учёта** и **маркировки** (косметика, БАДы, ЛП) в объёме, принятом для целевой системы.
- Техническая реализация: на выбор или в комбинации — план обмена через универсальный формат **с существенными доработками** в `crm3-26-promo.rhana` / переносом логики из `crm3-dev.rhana` (**«Менеджер обмена через универсальный формат»**), либо дополнительные регламентные или обменные обработки, если универсальный контур не покрывает кастом; решение фиксируется в спецификации первой волны.
- Обязательные правила передачи:
- повторная выгрузка одних и тех же данных **не создает дублей** (по уникальному идентификатору объекта и ключевым свойствам);
- повторная доставка без дублирования записей;
- журнал ошибок и повторные попытки при сбоях.
- **Ключевые исходные файлы в коде** для настройки обмена (ориентир; итоговая схема — по матрице объектов):
- [d:/SynologyDrive/projects_syn/crm3-26/crm3-dev/src/ExchangePlans/СинхронизацияДанныхЧерезУниверсальныйФормат.xml](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev/src/ExchangePlans/СинхронизацияДанныхЧерезУниверсальныйФормат.xml)
- [d:/SynologyDrive/projects_syn/crm3-26/crm3-26-promo/src/ExchangePlans/СинхронизацияДанныхЧерезУниверсальныйФормат.xml](d:/SynologyDrive/projects_syn/crm3-26/crm3-26-promo/src/ExchangePlans/СинхронизацияДанныхЧерезУниверсальныйФормат.xml)
- [d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl)
## 8. Этап 6 внедрения: интеграционное тестирование и приёмка пользователями (2 недели)
- Сквозные сценарии:
- создание и изменение НСИ в старой базе;
- движение `ЗаказКлиента` и `РеализацияТоваровУслуг` в новой;
- сверка ключевых реквизитов и сумм;
- **посерийный учёт:** отгрузка и возвраты с обязательным заполнением серий там, где в целевой конфигурации это требуется для всех номенклатур;
- **маркировка:** приёмка и отгрузка маркированной продукции (косметика, БАДы, ЛП) по согласованному перечню номенклатуры и регламенту целевой конфигурации;
- оформление и проведение по **кредит-ноте**, сверка с типовыми и доработанными связями;
- сценарии с **купоном** в заказе и отгрузке (и иные согласованные точки применения);
- **печать комплекта документов** и складские сценарии из перенесенной доработки;
- печать отгрузки с проверкой **подписи материально ответственного** при разных складах и наборах номенклатуры (в т.ч. после решения по типовому или расширенному подбору МОЛ).
- **роли и профили (не под полными правами администратора):** те же сценарии первой волны и печати выполняются под **целевым производственным профилем** пользователя; нет скрытых отказов в доступе к обмену, проведению, печати и закрытию периода; сверка с чек-листом [Роли для включения в новой системе](d:/SynologyDrive/projects_syn/crm3-26/docs/Роли_для_включения_в_новой_системе.md) и согласованным финальным списком ролей профиля.
- **регистр сведений `CRM_ЖурналДокументов`:** после загрузки/обмена и проведения документов первой волны — **уникальность** записей (нет дублей по ключу уникальности), согласованность с отображением в CRM-интерфейсах и отчётах; при смене метаданных или обнаружении неуникальности — сценарий **перезаполнения** по [аналитике перезаполнения](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_механизма_перезаполнения_CRM_ЖурналДокументов.md) и повторная приёмка выборкой документов.
- при сохранении обмена с **Бухгалтерией КОРП** — регрессия **НДС 22** на **типовой** реализации в `crm3-26-promo` (ставки, проведение, загрузка в БК) по согласованному мини-пакету из [анализа обмена НДС 22](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_обмена_НДС_22_с_Бухгалтерией_КОРП.md); отдельный перенос логики НДС 22 в расширение целевой системы **не входит в объём**.
- **настройки ИБ по протоколу разд. 4:** на копии для приёмки **целевая** ИБ по ключевым пунктам совпадает с утверждённым снимком целевой или отклонения перечислены в протоколе; при необходимости для сценария — **исходная** копия согласована с эталонным снимком исходной ИБ (чтобы сравнение «как в бою» было воспроизводимо); **внешние обработки** съёма дают повторяемый снимок, сравнение в обработке целевой — без расхождения с ручным протоколом.
- Отдельный блок сверки себестоимости: старый доработанный контур и сравнение с целевым типовым контуром (контрольные отчеты).
- Критерий готовности: прохождение **согласованного пакета тестов** без **блокирующих и критических** ошибок.
## 9. Этап 7 внедрения: готовность к переходу и промышленный запуск (1 неделя + окно перехода)
- Единая **пошаговая инструкция перехода**:
- шаги по времени;
- ответственные;
- условия продолжения и остановки работ;
- условия **отката** к прежнему варианту;
- **контрольный проход по протоколу различий настроек ИБ** (**разд. 4**): по **целевой** ИБ критичные пункты совпадают с утверждённым снимком перед срезом; по **исходной** — нет неучтённого дрейфа по пунктам, влияющим на выгрузку остатков и первой волны (либо дрейф внесён в протокол); отклонения согласованы с владельцами учёта.
- Финальный прогон переноса остатков на актуальную дату среза по механизму **разд. 6**.
- После среза — режим постоянной **односторонней передачи данных** **первой волны** (по утверждённой матрице объектов и механизму **разд. 7**).
## 10. Этап 8 внедрения: стабилизация после запуска и вторая волна (2–4 недели)
- Усиленная поддержка и ежедневный контроль **передачи данных**.
- Подготовка **второй волны**:
- сценарии ЭДО и УПД при **передаче данных**;
- план **завершения** переходного учёта себестоимости и **перехода на типовой** механизм по утверждённым критериям и датам;
- расширение **передачи данных** или отчетности по кредит-нотам и купонам сверх минимума первой волны.
## 11. Детализированный план действий (операционный)
- Сформировать **единый реестр** доработок с классификацией: сейчас обязательно / вторая волна / заменить типовым.
- Для каждой переносимой доработки зафиксировать:
- источник (`crm3-dev*`);
- целевой объект (`crm3-26-promo.rhana`);
- тип переноса (`&ИзменениеИКонтроль`, новый объект, адаптация);
- сценарий приемки.
- **Протокол различий настроек ИБ** (артефакт **разд. 4**): шаблон таблицы; **парные снимки** исходной и целевой ИБ по одному чек-листу (в т.ч. через **внешние обработки** съёма); перечень обязательных разделов (см. **разд. 4.3**); колонка при необходимости для **ограничений версии** типовой между исходной и целевой; правила ведения версий; связь со спецификациями **остатков** и **первой волны передачи данных**; владелец артефакта и периодичность пересмотра при обновлении типовой или смене учётной политики.
- **Внешние обработки съёма и сравнения** (**разд. 4.4**): спецификация формата файла снимка; состав полей общих настроек ИБ; **обработка целевой** — сценарии загрузки двух снимков и UI различий; регламент выпуска **двух сборок** (исходная/целевая конфигурация).
- **Внешние обработки эффективных настроек номенклатуры** (**разд. 4.5** в связке с **разд. 67**): параметры периода оборотов и даты остатков; алгоритм отбора номенклатур; правило вычисления эффективной настройки; формат выгрузки; сравнение **только в обработке целевой** конфигурации; связь выхода с **маппингом** при загрузке остатков и при передаче документов переходного периода.
- Спецификация **передачи данных, первая волна**:
- **матрица по разделам учёта** — для каждого раздела (продажи, склад, взаиморасчёты, **посерийный учёт**, **маркировка**, себестоимость на период **переходного учёта себестоимости** и т.д.): перечень **справочников**, **документов**, **регистров накопления** и **регистров сведений**, которые должны быть согласованы между выгрузкой из `crm3-dev` и проведением в `crm3-26-promo` (включая кастомные `р_` / `rh_` при наличии); назначение каждого объекта в контроле (обязательный к передаче / вычисляется при проведении / исключён);
- сценарии **финальной проверки**: передача объекта → загрузка в целевую → **проведение** (где применимо) → сверка движений по всем строкам матрицы для этого типа документа;
- выбранный **технический механизм** (универсальный формат с доработками, дополнение обработками и т.д.) и правила сопоставления записей;
- порядок выгрузки и загрузки;
- обработка конфликтов и ошибок;
- опора на аналитику регистров: [Глубинный анализ регистров](d:/SynologyDrive/projects_syn/crm3-26/docs/Глубинный_анализ_регистров.md) — при расширении матрицы и проверке рисков по движениям.
- Спецификация **переходного учёта себестоимости**:
- границы переноса;
- список зависимостей документов и регистров;
- механизм сверки со стандартным контуром.
- Спецификация механизма остатков:
- настройка даты среза и сценарий быстрой смены даты;
- правила выгрузки из старой базы и загрузки в новую;
- **опора на файлы сравнения** из внешних обработок (общие настройки ИБ и эффективные настройки номенклатуры по остаткам/оборотам за период);
- сопоставление разделов учета и целевых документов ввода остатков;
- протокол сверки по остаткам и регистрам накопления;
- **санация и границы ответственности:** перечень известных проблемных номенклатур/остатков в источнике, правила исправления до среза vs перенос с актом; учёт **смены порядка учёта** в истории;
- **посерийный учёт:** согласование остатков и НСИ с требованием **серий для всех** номенклатур в целевой базе;
- **маркировка:** требования к НСИ и документам для косметики, БАДов и ЛП в целевой системе на дату среза и при последующей передаче данных;
- **серии и виды номенклатуры при вводе остатков:** согласовать с [анализом привязок серий](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_привязок_серий_номенклатур_к_видам_номенклатур.md) (отбор серий, риск указания серий без остатков).
- Спецификация по **УПД (upd5b)**: таблица соответствия объектов `crm3-dev.upd5b``crm3-26-promo` (типовая часть) ↔ итог в `crm3-26-promo.rhana`; решение по каждому фрагменту (оставить типовое, перенести, адаптировать); сценарии печати и ЭДО после слияния.
- Спецификация по **кредит-ноте**: объекты метаданных, проведение, печать, участие в обмене и в **передаче данных** (если требуется).
- Спецификация по **купонам**: реквизиты, заполнение, контроль при проведении, отчеты и ограничения при **передаче** НСИ и документов.
- Спецификация по **печати комплекта документов и складскому учету**: перечень обработок и команд, зависимости от документов и регистров, сценарии приемки (см. [аналитику по складу и печати](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_доработок_складского_учета_и_печати_документов.md)).
- Заключение по **МОЛ и номенклатуре**: протокол сравнения с типовым подбором ответственного в `crm3-26-promo` и выбранный вариант (типовой / расширение), план переноса строк «Склады.МОЛ» при необходимости.
- Опытная эксплуатация на **копии продуктивных данных** до промышленного окна перехода.
## 12. Привязка к этапам плана: комплект печати и склад
Опора на [Анализ доработок складского учета и печати документов](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_доработок_складского_учета_и_печати_документов.md) (версия 4.0): **раздел 3 анализа** — кастомный перенос; **раздел 1 анализа** — сверка с эталоном; **раздел 4 анализа** (форма приёмки) — перенос кастома не требуется, в целевой базе только **проверка наличия типового** поведения. Ниже — **этапы внедрения по нумерации плана** (**разд. 3–10**), не путать с нумерацией разделов самого анализа.
- **Разд. 3 плана** (сводка границ) — зафиксировать в объёме миграции перечень из **раздела 3 анализа**: **3.1** печать расходного ордера по основанию и включение формы ордера в комплект для реализации и перемещения; **3.2** обработка **«УправлениеОтгрузкой»** — блок **«Комплект печатных документов»** и команда **«Для печати комплекта документов»** (`ОтразитьРеализации`); **3.3** форма **«Настройка печати комплекта»** — блок **«Дополнительная обработка»** (пользовательский код перед печатью). Отдельно зафиксировать: по **разделу 4 анализа** перенос не планируется, только контрольный чек-лист.
- **Разд. 5 плана** (**переходный учёт себестоимости**) — прямой привязки к комплекту печати нет; косвенно — если тестовые отгрузки используются для сверки складских остатков.
- **Разд. 6 плана** (остатки на дату) — без обязательной привязки к печати; при необходимости — тестовая отгрузка после загрузки остатков для проверки согласованности данных и печати ордера.
- **Разд. 7 плана** (первая волна **передачи данных**) — включить в **матрицу объектов** только те сущности, которые **хранят настройки или данные** комплекта (если такие есть вне кода); сам перенос логики печати — в расширении `crm3-26-promo.rhana`, а не через обмен.
- **Разд. 8 плана** (приёмка) — обязательные сценарии по анализу: печать комплекта из **«УправлениеОтгрузкой»**; формирование комплекта с **расходным ордером по основанию** для **«Реализация товаров и услуг»** и **«Перемещение товаров»**; расширенная печать ордера (`р_ПечатьРасходногоОрдераНаТовары` и связанные `р_СформироватьПечатнуюФормуОрдераПоОснованию`, `р_ПолучитьОрдерыНаПечать`); сценарий с **дополнительной обработкой** в настройке комплекта (если используется в промышленной эксплуатации).
- **Разд. 9 плана** (переход) — в пошаговую инструкцию включить проверку доступности команд печати комплекта и права на выполнение кода дополнительной обработки (если перенесён).
- **Разд. 10 плана** (стабилизация) — при отложенных пунктах **3.2 и 3.3 раздела 3 анализа** (статус «требуется проверка» в анализе) — закрытие во второй волне после уточнения в целевой конфигурации.
### 12.1. Ключевые исходные файлы в коде (перенос по разделу 3 анализа, `crm3-dev.rhana`)
- [d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/Documents/РасходныйОрдерНаТовары/Ext/ManagerModule.bsl](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/Documents/РасходныйОрдерНаТовары/Ext/ManagerModule.bsl) — `р_СформироватьПечатнуюФормуОрдераПоОснованию`, `р_ПолучитьОрдерыНаПечать`, переопределение печати ордера.
- [d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/CommonModules/РеализацияТоваровУслугЛокализация/Ext/Module.bsl](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/CommonModules/РеализацияТоваровУслугЛокализация/Ext/Module.bsl) — комплект печатных форм и расходный ордер.
- [d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/CommonModules/ПеремещениеТоваровЛокализация/Ext/Module.bsl](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/CommonModules/ПеремещениеТоваровЛокализация/Ext/Module.bsl) — то же для перемещения.
- [d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/DataProcessors/УправлениеОтгрузкой/Forms/Форма/Ext/Form/Module.bsl](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/DataProcessors/УправлениеОтгрузкой/Forms/Форма/Ext/Form/Module.bsl) — комплект печатных документов в отгрузке.
- [d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/InformationRegisters/НастройкиПечатиОбъектов/Forms/НастройкаПечатиКомплекта/Ext/Form/Module.bsl](d:/SynologyDrive/projects_syn/crm3-26/crm3-dev.rhana/src/InformationRegisters/НастройкиПечатиОбъектов/Forms/НастройкаПечатиКомплекта/Ext/Form/Module.bsl) — дополнительная обработка при печати комплекта.
## 13. Ключевые риски и меры предупреждения
- Конфликты расширения с новой типовой версией → ранняя сборка конфигурации и **быстрая проверка на регрессию** после каждого блока переноса.
- Дубли и расхождения при передаче данных → правило повторной выгрузки без дублей, журнал сообщений, **ежедневная сверка**; обязательная проверка по **матрице регистров** после проведения ключевых документов.
- Ожидание, что **типовой универсальный обмен** закроет кастомную исходную базу **без матрицы объектов** → завышенный риск неполных движений и скрытых расхождений; матрица по разделам учёта — обязательный артефакт приёмки.
- **Расхождение настроек ИБ** между исходной и целевой без утверждённого **протокола различий** или при **несимметричном** съёме (заполнен чек-лист только для одной ИБ) → ошибочное проведение остатков и документов переходного периода, «тихие» сдвиги НДС/партий/серий; **парные** снимки (в т.ч. через внешние обработки), протокол и повторная сверка перед опытной и промышленной эксплуатацией.
- **Расхождение эффективных настроек учёта номенклатуры** между исходной и целевой без прогона обработок сравнения и без учёта в правилах загрузки остатков/документов → проведение с ошибочными признаками учёта, сериями, маркировкой; обязательный артефакт перед **разд. 67**.
- Затягивание **переходного учёта себестоимости** в постоянное решение → заранее утвержденные критерии завершения переходного периода и целевые даты перехода на типовой механизм.
- Неполный контур перехода → единая пошаговая инструкция и обязательная **репетиция пробного прогона** перед запуском.
- **Исторические ошибки и смена порядка учёта** в `crm3-dev` при переносе остатков без ремедиации → искажённые остатки и движения в `crm3-26-promo`; заранее перечень проблемных позиций, акты и правила исправления.
- **Разрыв посерийного учёта:** в источнике серии велись не для всех позиций, в целевой — **обязательны для всех** → блокировки проведения, расхождения с фактом; нормализация серий и НСИ до/на срезе.
- **Маркировка (косметика, БАДы, ЛП):** неготовность НСИ, кодов маркировки и сценариев **интеграций маркировки**, предусмотренных целевой конфигурацией → остановка отгрузок или регламентные нарушения; отдельный контур готовности и приёмки.
- **Регистр `CRM_ЖурналДокументов`:** реструктуризация измерений и обнуление ссылок на удаляемые типы → **неуникальность** и порча CRM-журнала; заранее сценарий проверки и при необходимости **перезаполнение** по [аналитике перезаполнения](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_механизма_перезаполнения_CRM_ЖурналДокументов.md).
- **Роли не включены в целевой профиль** → отказ в доступе к обмену, печати, документам при том что функционал перенесён; чек-лист по [ролям для включения](d:/SynologyDrive/projects_syn/crm3-26/docs/Роли_для_включения_в_новой_системе.md).
- **Обмен с Бухгалтерией КОРП и НДС 22:** риск пустых или неверных ставок при **несогласованности форматов/правил обмена** между системами (в т.ч. если на стороне БК или транспорта ещё не поддержаны коды НДС 22); обязательная регрессия по [анализу обмена НДС 22](d:/SynologyDrive/projects_syn/crm3-26/docs/Анализ_обмена_НДС_22_с_Бухгалтерией_КОРП.md). В `crm3-26-promo` учёт НДС 22% обеспечивается **типовой конфигурацией** — не смешивать с задачами переноса кастома в `crm3-26-promo.rhana`.
- **Пользовательский код в «Дополнительной обработке» комплекта печати** → аудит сценариев, ограничение прав, тестирование на копии; при переносе — миграция сохранённых текстов обработки и контроль безопасности выполнения.
@@ -1,174 +0,0 @@
---
title: Инструкция по добавлению ролей в профиль группы доступа
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-11
date_modified: 2025-12-11
show_metadata_block: true
show_index_link: true
---
# Инструкция по добавлению ролей в профиль группы доступа
## Описание
Созданы программные модули на языке 1С для автоматического добавления ролей в табличную часть "Разрешенные действия (Роли)" элемента справочника "ПрофилиГруппДоступа".
## Файлы с кодом
1. **`scripts/AddRolesToAccessProfile.bsl`** - основная процедура для добавления ролей из массива
2. **`scripts/AddRolesToAccessProfileFromFile.bsl`** - процедура для добавления ролей из текстового файла
## Использование
### Вариант 1: Добавление ролей из массива
```bsl
// Получаем ссылку на элемент профиля
ЭлементПрофиля = Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию("Кладовщик (без заказов поставщиков)");
// Формируем список ролей для добавления
СписокРолей = Новый Массив;
СписокРолей.Добавить("Базовые права (CRM)");
СписокРолей.Добавить("Ввод документа ""Отчет по работам"" (CRM)");
СписокРолей.Добавить("Добавление изменение актов о расхождениях после отгрузки по возврату");
// ... и так далее
// Вызываем процедуру
ДобавитьРолиВПрофильГруппыДоступа(ЭлементПрофиля, СписокРолей);
```
### Вариант 2: Добавление ролей из файла
```bsl
// Получаем ссылку на элемент профиля
ЭлементПрофиля = Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию("Кладовщик (без заказов поставщиков)");
// Указываем путь к файлу со списком ролей
// Файл должен содержать по одной роли на строку
// Поддерживается формат с нумерацией (например, " 1. Название роли")
ПутьКФайлу = "C:\Temp\roles_list.txt";
// Вызываем процедуру
ДобавитьРолиВПрофильГруппыДоступаИзФайла(ЭлементПрофиля, ПутьКФайлу);
```
### Вариант 3: Использование с файлом результатов сравнения
Для использования с файлом `docs/roles_kladovshik_comparison.txt` можно:
1. Скопировать раздел "ОБЩИЙ СПИСОК РОЛЕЙ ДЛЯ ДОБАВЛЕНИЯ" в отдельный текстовый файл
2. Использовать этот файл с процедурой `ДобавитьРолиВПрофильГруппыДоступаИзФайла`
Или создать процедуру, которая автоматически извлекает список из файла результатов:
```bsl
// Процедура для извлечения списка ролей из файла результатов сравнения
Процедура ДобавитьРолиИзФайлаСравнения(ЭлементПрофиля, ПутьКФайлуСравнения) Экспорт
// Читаем файл
ТекстФайла = "";
ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуСравнения, КодировкаТекста.UTF8);
Пока НЕ ЧтениеТекста.КонецПотока() Цикл
ТекстФайла = ТекстФайла + ЧтениеТекста.ПрочитатьСтроку() + Символы.ПС;
КонецЦикла;
ЧтениеТекста.Закрыть();
// Ищем раздел "ОБЩИЙ СПИСОК РОЛЕЙ ДЛЯ ДОБАВЛЕНИЯ"
ПозицияНачала = СтрНайти(ТекстФайла, "ОБЩИЙ СПИСОК РОЛЕЙ ДЛЯ ДОБАВЛЕНИЯ");
Если ПозицияНачала = 0 Тогда
ВызватьИсключение "В файле не найден раздел 'ОБЩИЙ СПИСОК РОЛЕЙ ДЛЯ ДОБАВЛЕНИЯ'";
КонецЕсли;
// Ищем конец раздела (следующий раздел или конец файла)
ПозицияКонца = СтрНайти(ТекстФайла, "СГРУППИРОВАННЫЙ СПИСОК", ПозицияНачала);
Если ПозицияКонца = 0 Тогда
ПозицияКонца = СтрДлина(ТекстФайла);
КонецЕсли;
// Извлекаем нужный фрагмент
ФрагментТекста = Сред(ТекстФайла, ПозицияНачала, ПозицияКонца - ПозицияНачала);
// Разбиваем на строки и извлекаем роли
СписокРолей = Новый Массив;
Строки = СтрРазделить(ФрагментТекста, Символы.ПС);
Для Каждого Строка Из Строки Цикл
Строка = СокрЛП(Строка);
Если ПустаяСтрока(Строка) Или СтрНачинаетсяС(Строка, "=") Или СтрНачинаетсяС(Строка, "-") Тогда
Продолжить;
КонецЕсли;
// Убираем нумерацию
ПозицияТочки = СтрНайти(Строка, ".");
Если ПозицияТочки > 0 И ПозицияТочки <= 4 Тогда
ЧастьДоТочки = Лев(Строка, ПозицияТочки - 1);
ЧастьДоТочки = СокрЛП(ЧастьДоТочки);
Попытка
Число(ЧастьДоТочки);
Строка = Сред(Строка, ПозицияТочки + 1);
Исключение
КонецПопытки;
КонецЕсли;
Строка = СокрЛП(Строка);
Если НЕ ПустаяСтрока(Строка) Тогда
СписокРолей.Добавить(Строка);
КонецЕсли;
КонецЦикла;
// Вызываем основную процедуру
ДобавитьРолиВПрофильГруппыДоступа(ЭлементПрофиля, СписокРолей);
КонецПроцедуры
```
## Важные замечания
1. **Проверка существования ролей**: Процедура ищет роли по точному совпадению наименования в справочнике "Роли". Если роль не найдена, она будет добавлена в список не найденных ролей.
2. **Проверка дубликатов**: Процедура проверяет, не добавлена ли уже роль в табличную часть. Если роль уже есть, она не будет добавлена повторно.
3. **Обработка ошибок**: При ошибках записи будет выброшено исключение с описанием ошибки.
4. **Результат выполнения**: После выполнения процедура выводит сообщение с информацией:
- Количество добавленных ролей
- Количество ролей, которые уже были добавлены
- Количество не найденных ролей и их список
## Требования к метаданным
Убедитесь, что в конфигурации существуют:
- Справочник `ПрофилиГруппДоступа` (или другое имя, в зависимости от конфигурации)
- Табличная часть `РазрешенныеДействияРоли` (или другое имя) с реквизитом `Роль` типа `СправочникСсылка.Роли`
- Справочник `Роли` с реквизитом `Наименование`
Если имена объектов метаданных отличаются, необходимо скорректировать код соответственно.
## Пример полного использования
```bsl
// 1. Получаем ссылку на профиль
ЭлементПрофиля = Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию("Кладовщик (без заказов поставщиков)");
Если ЭлементПрофиля.Пустая() Тогда
Сообщить("Профиль не найден!");
Возврат;
КонецЕсли;
// 2. Формируем список ролей (можно из файла или вручную)
СписокРолей = Новый Массив;
СписокРолей.Добавить("Базовые права (CRM)");
СписокРолей.Добавить("Ввод документа ""Отчет по работам"" (CRM)");
// ... остальные роли
// 3. Добавляем роли
Попытка
ДобавитьРолиВПрофильГруппыДоступа(ЭлементПрофиля, СписокРолей);
Сообщить("Роли успешно добавлены!");
Исключение
Сообщить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;
```
@@ -1,205 +0,0 @@
---
title: Инструкция по запуску скрипта md_convert.py
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2026-01-06
date_modified: 2026-01-06
show_metadata_block: true
show_index_link: true
---
# Инструкция по запуску скрипта md_convert.py
## Расположение скрипта
- **Путь:** `md_converter/md_convert.py`
- **Виртуальная среда:** `md_converter/venv/`
- **Версия:** 0.0.1
## Активация виртуальной среды
Перед запуском скрипта необходимо активировать виртуальную среду:
### Windows PowerShell:
```powershell
cd md_converter
.\venv\Scripts\Activate.ps1
```
### Windows CMD:
```cmd
cd md_converter
venv\Scripts\activate.bat
```
### Linux/Mac:
```bash
cd md_converter
source venv/bin/activate
```
## Базовый запуск скрипта
### 1. Запуск с конфигурацией по умолчанию
```bash
cd md_converter
venv\Scripts\python.exe md_convert.py
```
### 2. Запуск с указанием файла конфигурации
```bash
# Первый параметр (без флага)
venv\Scripts\python.exe md_convert.py config/config.yml
# Или с флагом
venv\Scripts\python.exe md_convert.py -c config/config.yml
```
## Режимы работы
### Конвертация только в HTML
```bash
venv\Scripts\python.exe md_convert.py --mode html
```
### Конвертация только в PDF
```bash
venv\Scripts\python.exe md_convert.py --mode pdf
```
### Конвертация в оба формата
```bash
venv\Scripts\python.exe md_convert.py --mode both
```
## Указание конкретных файлов
### Один файл (рекомендуется использовать абсолютный путь для файлов с кириллицей)
```bash
# Абсолютный путь (рекомендуется для Windows)
venv\Scripts\python.exe md_convert.py --mode html --file D:/edt_workspace/docs/Оценка_правок_для_переноса_НДС_22_(v1.4).md
# Относительный путь
venv\Scripts\python.exe md_convert.py --mode html --file ../docs/document.md
```
### Несколько файлов
```bash
venv\Scripts\python.exe md_convert.py --mode html --files file1.md file2.md file3.md
```
## Переопределение параметров конфигурации
### Указание входной и выходной директории
```bash
venv\Scripts\python.exe md_convert.py \
--mode html \
-i D:/edt_workspace/docs/ \
-oh D:/edt_workspace/html_md_converter/
```
### Указание выходной директории для PDF
```bash
venv\Scripts\python.exe md_convert.py \
--mode pdf \
-i D:/edt_workspace/docs/ \
-op D:/edt_workspace/pdf/
```
## Дополнительные параметры
### Режим отладки
```bash
venv\Scripts\python.exe md_convert.py --mode html --debug
```
### Указание кодировки
```bash
venv\Scripts\python.exe md_convert.py --mode html --encoding windows-1251
```
### Версия скрипта
```bash
venv\Scripts\python.exe md_convert.py --version
```
### Справка
```bash
venv\Scripts\python.exe md_convert.py --help
```
## Примеры использования
### Пример 1: Конвертация одного файла в HTML
```bash
cd md_converter
venv\Scripts\python.exe md_convert.py --mode html --file D:/edt_workspace/docs/Оценка_правок_для_переноса_НДС_22_(v1.4).md
```
### Пример 2: Конвертация всех файлов из директории в HTML и PDF
```bash
cd md_converter
venv\Scripts\python.exe md_convert.py --mode both -i D:/edt_workspace/docs/
```
### Пример 3: Конвертация с кастомной конфигурацией
```bash
cd md_converter
venv\Scripts\python.exe md_convert.py config/custom_config.yml --mode html
```
## Важные замечания
### Работа с кириллическими именами файлов в Windows
В Windows cmd.exe может искажать кириллические символы в аргументах из-за кодировки консоли (CP866). Рекомендации:
1. **Использовать абсолютные пути с прямыми слешами:**
```bash
--file D:/edt_workspace/docs/Оценка_правок_для_переноса_НДС_22_(v1.4).md
```
2. **Использовать PowerShell вместо cmd.exe** (лучше работает с UTF-8)
3. **Скрипт автоматически пытается найти файл по части имени**, если точное совпадение не найдено из-за проблем с кодировкой
### Генерация PDF
Для генерации PDF требуется установка GTK+ библиотек на Windows. См. инструкцию в `md_converter/INSTALL_GTK_WINDOWS.md`.
Если GTK+ не установлен, скрипт выдаст ошибку при попытке генерации PDF, но продолжит работу для HTML.
## Структура параметров командной строки
### Позиционные аргументы:
- `config_file` - Путь к файлу конфигурации (может быть указан первым параметром без флага)
### Основные параметры:
- `-c, --config` - Путь к файлу конфигурации
- `-f, --file` - Путь к конкретному MD файлу для конвертации
- `-F, --files` - Пути к нескольким MD файлам для конвертации
- `-i, --input-dir` - Папка с MD файлами
- `-oh, --output-html-dir` - Папка вывода HTML файлов
- `-op, --output-pdf-dir` - Папка вывода PDF файлов
- `-m, --mode` - Режим работы (html, pdf, both)
- `-e, --encoding` - Кодировка входных файлов
- `-d, --debug` - Режим отладки
- `-v, --version` - Версия скрипта
- `-h, --help` - Справка
### Дополнительные параметры:
- `--html.template_file` - Путь к HTML шаблону
- `--pdf.page_size` - Размер страницы PDF
## Приоритет параметров
1. Параметры командной строки (наивысший приоритет)
2. Файл конфигурации (если не заблокирован параметром `lock_override`)
3. Значения по умолчанию (низший приоритет)
## Обработка ошибок
- Если указан файл, который не найден, скрипт попытается найти его по части имени
- Если режим `pdf` и GTK+ не установлен, скрипт выдаст ошибку
- Если режим `both` и GTK+ не установлен, скрипт создаст HTML и выдаст предупреждение о PDF
- При ошибках обработки файлов скрипт продолжит работу с другими файлами (если `error_handling: continue`)
@@ -1,371 +0,0 @@
---
title: "Итоговый отчет: Глубинный анализ регистров на нарушение уникальности"
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-09
date_modified: 2025-12-09
show_metadata_block: true
show_index_link: true
---
# Итоговый отчет: Глубинный анализ регистров на нарушение уникальности
> 📚 **См. также:** [Оглавление документов](INDEX.md) | [ФИНАЛЬНЫЙ ОТЧЕТ](ФИНАЛЬНЫЙ_ОТЧЕТ_Анализ_регистров.md) | [Глубинный анализ регистров](Глубинный_анализ_регистров.md) | [Анализ ошибок обновления](Анализ_ошибок_обновления.md)
## Резюме
Проведен полный анализ всех регистров сведений и регистров накопления в конфигурации `CRM3devLocal` на предмет возможного нарушения уникальности данных после обновления до конфигурации `CRM326/CRM326_TEST`.
## Методология анализа
1. **Автоматический анализ:** Сканирование всех файлов метаданных регистров (801 регистр)
2. **Проверка удаляемых объектов:** Анализ измерений на ссылки к удаляемым объектам
3. **Выявление рисков:** Определение регистров с потенциальными проблемами уникальности
## Результаты анализа
### Статистика
- **Всего проанализировано регистров:** 801
- **Регистров сведений:** ~400
- **Регистров накопления:** ~400
- **Найдено проблемных регистров:** 3
---
## КРИТИЧЕСКИЕ ПРОБЛЕМЫ
### 1. РегистрНакопления.ТМЦВЭксплуатации
**Статус:** ⚠️ КРИТИЧНО - Весь регистр удаляется
**Описание проблемы:**
- Регистр полностью удаляется из конфигурации при обновлении
- Все данные регистра будут потеряны без возможности восстановления
- Регистр используется для учета товарно-материальных ценностей в эксплуатации
**Структура регистра:**
- **Тип:** Регистр накопления (Обороты)
- **Измерения:**
- Организация (CatalogRef.Организации)
- Подразделение (CatalogRef.СтруктураПредприятия)
- ФизическоеЛицо (CatalogRef.ФизическиеЛица)
- Номенклатура (CatalogRef.Номенклатура)
- Характеристика (CatalogRef.ХарактеристикиНоменклатуры)
- Партия (CatalogRef.ПартииТМЦВЭксплуатации)
- **Ресурсы:**
- Количество (Number, 15.3)
**Риск нарушения уникальности:** НЕТ (регистр полностью удаляется, данные теряются)
**Действия:**
1. ✅ Экспортировать все данные из регистра перед обновлением
2. ✅ Определить необходимость данных после обновления
3. ✅ Если данные критичны - создать скрипт миграции в альтернативный регистр
4. ✅ Если данные не нужны - можно удалить перед обновлением
---
### 2. РегистрСведений.УдалитьРеестрДокументов
**Статус:** ⚠️ КРИТИЧНО - Весь регистр удаляется
**Описание проблемы:**
- Регистр полностью удаляется из конфигурации при обновлении
- Все данные регистра будут потеряны
- Регистр помечен как "(не используется)" в метаданных
**Структура регистра:**
- **Тип:** Регистр сведений (периодический)
- **Измерения:**
- ТипСсылки (CatalogRef.ИдентификаторыОбъектовМетаданных)
- Организация (CatalogRef.Организации)
- ХозяйственнаяОперация (EnumRef.ХозяйственныеОперации)
- Партнер (CatalogRef.Партнеры)
- Контрагент (CatalogRef.Контрагенты)
- НаправлениеДеятельности (CatalogRef.НаправленияДеятельности)
- Подразделение (CatalogRef.СтруктураПредприятия)
- МестоХранения (множество типов)
- ДатаДокументаИБ (Date)
- Ссылка (множество типов документов)
- РазделительЗаписи (String)
- **Ресурсы:**
- НомерДокументаИБ (String, 30)
- Статус (EnumRef - множество типов)
- Ответственный (CatalogRef.Пользователи)
- ДополнительнаяЗапись (Boolean)
- Дополнительно (String, 100)
- Комментарий (String, 100)
- Проведен (Boolean)
- ПометкаУдаления (Boolean)
- ДатаПервичногоДокумента (Date)
- И другие...
**Риск нарушения уникальности:** НЕТ (регистр полностью удаляется)
**Действия:**
1. ✅ Экспортировать данные (если они есть и нужны)
2. ✅ Убедиться, что регистр действительно не используется
3. ✅ Можно безопасно удалить перед обновлением
---
### 3. РегистрСведений.РеестрДокументов
**Статус:** ⚠️ КРИТИЧНО - Весь регистр удаляется
**Описание:**
- Возможно, это альтернативное имя для `УдалитьРеестрДокументов`
- Требуется дополнительная проверка
**Действия:**
1. ✅ Уточнить, является ли это дубликатом `УдалитьРеестрДокументов`
2. ✅ Экспортировать данные перед обновлением
---
## ВЫСОКИЙ РИСК
### РегистрНакопления.МатериалыИРаботыВПроизводстве
**Статус:** ⚠️ ВЫСОКИЙ РИСК - Удаляется измерение
**Описание проблемы:**
- Из регистра удаляется измерение `УдалитьАналитикаУчетаНоменклатуры`
- Измерение помечено как "(не используется)" в метаданных
- Тип измерения: `CatalogRef.КлючиАналитикиУчетаНоменклатуры`
**Структура регистра:**
- **Тип:** Регистр накопления (Остатки)
- **Измерения:**
1. Организация
2. Номенклатура
3. Характеристика
4. Подразделение
5. Серия
6. Назначение
7. **УдалитьАналитикаУчетаНоменклатуры** ⚠️ (УДАЛЯЕТСЯ)
- **Ресурсы:**
- Количество (Number, 15.3)
**Почему это критично:**
После удаления измерения `УдалитьАналитикаУчетаНоменклатуры` все записи с одинаковыми значениями остальных измерений, но разными значениями удаляемого измерения, станут неразличимыми. Это приведет к нарушению уникальности ключа регистра.
**Пример проблемы:**
```
ДО удаления измерения:
┌─────────────┬──────────────┬─────────────────────────────────────┬──────────┐
│ Организация │ Номенклатура │ УдалитьАналитикаУчетаНоменклатуры │ Количество│
├─────────────┼──────────────┼─────────────────────────────────────┼──────────┤
│ ООО "А" │ Товар1 │ Ключ1 │ 10 │
│ ООО "А" │ Товар1 │ Ключ2 │ 20 │
└─────────────┴──────────────┴─────────────────────────────────────┴──────────┘
ПОСЛЕ удаления измерения:
┌─────────────┬──────────────┬──────────┐
│ Организация │ Номенклатура │ Количество│
├─────────────┼──────────────┼──────────┤
│ ООО "А" │ Товар1 │ 10 │ ← ДУБЛИКАТ!
│ ООО "А" │ Товар1 │ 20 │ ← ДУБЛИКАТ!
└─────────────┴──────────────┴──────────┘
→ НАРУШЕНИЕ УНИКАЛЬНОСТИ!
```
**Рекомендации:**
#### Шаг 1: Проверка на дубликаты
**ОБЯЗАТЕЛЬНО** выполнить проверку перед обновлением:
```bsl
// Использовать скрипт check_duplicates_materials.bsl
// Или выполнить запрос вручную
```
**Запрос для проверки:**
```sql
ВЫБРАТЬ
МатериалыИРаботыВПроизводстве.Организация,
МатериалыИРаботыВПроизводстве.Номенклатура,
МатериалыИРаботыВПроизводстве.Характеристика,
МатериалыИРаботыВПроизводстве.Подразделение,
МатериалыИРаботыВПроизводстве.Серия,
МатериалыИРаботыВПроизводстве.Назначение,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МатериалыИРаботыВПроизводстве.УдалитьАналитикаУчетаНоменклатуры) КАК КоличествоРазличныхЗначений
ИЗ
РегистрНакопления.МатериалыИРаботыВПроизводстве КАК МатериалыИРаботыВПроизводстве
СГРУППИРОВАТЬ ПО
МатериалыИРаботыВПроизводстве.Организация,
МатериалыИРаботыВПроизводстве.Номенклатура,
МатериалыИРаботыВПроизводстве.Характеристика,
МатериалыИРаботыВПроизводстве.Подразделение,
МатериалыИРаботыВПроизводстве.Серия,
МатериалыИРаботыВПроизводстве.Назначение
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МатериалыИРаботыВПроизводстве.УдалитьАналитикаУчетаНоменклатуры) > 1
И МатериалыИРаботыВПроизводстве.УдалитьАналитикаУчетаНоменклатуры НЕ РАВНО ЗНАЧЕНИЕ(Справочник.КлючиАналитикиУчетаНоменклатуры.ПустаяСсылка)
```
#### Шаг 2: Варианты решения
**Вариант А: Очистка данных (если измерение не используется)**
Если измерение действительно не используется и все значения пустые или одинаковые:
1. Удалить все записи, где `УдалитьАналитикаУчетаНоменклатуры` заполнено
2. Применить обновление
3. Проверить целостность данных
**Вариант Б: Объединение записей (если есть дубликаты)**
Если найдены дубликаты:
1. Найти все группы записей с одинаковыми значениями измерений (кроме удаляемого)
2. Объединить ресурсы (суммировать Количество) этих записей
3. Удалить дубликаты
4. Оставить одну запись с суммированным значением
5. Применить обновление
**Вариант В: Замена на альтернативное измерение**
Если измерение используется, но должно быть заменено:
1. Определить альтернативное измерение или атрибут
2. Создать скрипт миграции данных
3. Перенести значения в альтернативное место
4. Применить обновление
#### Шаг 3: После обновления
1. Проверить целостность данных регистра
2. Убедиться, что нет ошибок уникальности
3. Провести функциональное тестирование
---
## План действий перед обновлением
### Этап 1: Подготовка (КРИТИЧНО) ⚠️
- [ ] **Создать полную резервную копию базы данных**
- [ ] **Экспортировать данные из проблемных регистров:**
- [ ] РегистрНакопления.ТМЦВЭксплуатации
- [ ] РегистрСведений.УдалитьРеестрДокументов
- [ ] РегистрСведений.РеестрДокументов
- [ ] **Выполнить проверку на дубликаты для регистра МатериалыИРаботыВПроизводстве:**
- [ ] Запустить скрипт `check_duplicates_materials.bsl`
- [ ] Проанализировать результаты
- [ ] Определить стратегию обработки
### Этап 2: Обработка данных
#### Для регистра МатериалыИРаботыВПроизводстве:
- [ ] Если дубликаты НЕ найдены:
- [ ] Можно безопасно применять обновление
- [ ] Измерение будет удалено без последствий
- [ ] Если дубликаты найдены:
- [ ] Выбрать вариант решения (А, Б или В)
- [ ] Выполнить обработку данных
- [ ] Повторно проверить на дубликаты
- [ ] Убедиться, что дубликатов больше нет
#### Для удаляемых регистров:
- [ ] Определить, нужны ли данные после обновления
- [ ] Если нужны:
- [ ] Создать скрипт миграции данных
- [ ] Протестировать миграцию на копии базы
- [ ] Если не нужны:
- [ ] Можно удалить данные перед обновлением
### Этап 3: Применение обновления
- [ ] Применить обновление конфигурации из `CRM326/CRM326_TEST`
- [ ] Проверить отсутствие ошибок при обновлении
- [ ] Проверить целостность данных
### Этап 4: Верификация
- [ ] Проверить работу регистра МатериалыИРаботыВПроизводстве
- [ ] Убедиться, что данные корректны
- [ ] Проверить отсутствие ошибок уникальности
- [ ] Провести функциональное тестирование
- [ ] Если данные были мигрированы - проверить их корректность
---
## Инструменты и скрипты
### Созданные инструменты:
1. **deep_register_analysis.py** - автоматический анализ всех регистров
- Находит регистры с удаляемыми измерениями
- Проверяет ссылки на удаляемые объекты
- Генерирует детальный отчет
2. **check_duplicates_materials.bsl** - проверка дубликатов в регистре МатериалыИРаботыВПроизводстве
- Находит группы записей с дубликатами
- Выводит детальную информацию
- Помогает определить стратегию обработки
3. **analyze_registers.py** - базовый анализ регистров
4. **find_references.py** - поиск ссылок на удаляемые объекты
### Отчеты:
- `deep_register_analysis_report.txt` - детальный отчет анализа
- `register_analysis_report.txt` - базовый отчет
- `references_report.txt` - отчет о ссылках
---
## Выводы
### Критические проблемы:
1. **3 регистра полностью удаляются:**
- РегистрНакопления.ТМЦВЭксплуатации
- РегистрСведений.УдалитьРеестрДокументов
- РегистрСведений.РеестрДокументов
2. **1 регистр имеет удаляемое измерение:**
- РегистрНакопления.МатериалыИРаботыВПроизводстве
- Измерение: УдалитьАналитикаУчетаНоменклатуры
### Главный риск:
**РегистрНакопления.МатериалыИРаботыВПроизводстве** может потерять уникальность данных после удаления измерения `УдалитьАналитикаУчетаНоменклатуры`.
### Обязательные действия:
1. ✅ **ОБЯЗАТЕЛЬНО** выполнить проверку на дубликаты перед обновлением
2. ✅ **ОБЯЗАТЕЛЬНО** обработать найденные дубликаты
3. ✅ **ОБЯЗАТЕЛЬНО** создать резервную копию базы данных
4. ✅ **ОБЯЗАТЕЛЬНО** экспортировать данные из удаляемых регистров
### Рекомендации:
- Не применять обновление без предварительной проверки на дубликаты
- Использовать созданные скрипты для автоматизации проверки
- Документировать все действия по обработке данных
- Тестировать на копии базы данных перед применением к рабочей базе
---
## Контакты и поддержка
При возникновении вопросов или проблем:
1. Обратиться к администратору базы данных
2. Проконсультироваться с разработчиками конфигурации
3. Использовать форумы и сообщества 1С
---
**Дата анализа:** 2024
**Версия конфигурации:** CRM3devLocal → CRM326/CRM326_TEST
**Статус:** Требуется обработка данных перед обновлением
-97
@@ -1,97 +0,0 @@
---
title: Отчет о конвертации Markdown в HTML
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-09
date_modified: 2025-12-09
show_metadata_block: true
show_index_link: true
---
# Отчет о конвертации Markdown в HTML
## Статус: ✅ Успешно завершено
### Результаты конвертации
- **Всего конвертировано файлов:** 11
- **Ошибок:** 0
- **Предупреждений:** 0
- **Битых ссылок:** 0
### Созданные файлы
#### HTML файлы (в папке `html/`)
1. **INDEX.html** - Оглавление всех документов
2. **Анализ_ошибок_обновления.html** - Анализ ошибок обновления
3. **Быстрое_решение.html** - Быстрое решение проблемы
4. **Глубинный_анализ_регистров.html** - Глубинный анализ регистров
5. **Инструкция_по_исправлению.html** - Инструкция по исправлению
6. **Итоговый_отчет_анализа_регистров.html** - Итоговый отчет
7. **ФИНАЛЬНЫЙ_ОТЧЕТ_Анализ_регистров.html** - Финальный отчет
8. **README_md_to_html.html** - Инструкция по использованию скрипта
9. **analysis_report.html** - Отчет анализа
10. **analysis_report_detailed.html** - Детальный отчет анализа
11. **Партнеры_АналитическийОтчет.html** - Аналитический отчет по партнерам
### Реализованные возможности
#### ✅ Перекрестные ссылки между документами
Все ссылки на другие `.md` файлы автоматически конвертируются в ссылки на соответствующие `.html` файлы.
**Пример:**
```markdown
[Глубинный анализ регистров](Глубинный_анализ_регистров.md)
```
Конвертируется в:
```html
<a href="Глубинный_анализ_регистров.html">Глубинный анализ регистров</a>
```
#### ✅ Навигационные ссылки
В каждом HTML файле автоматически добавляется блок навигации со ссылками на все остальные документы.
#### ✅ Индексный файл
Создан файл `INDEX.md``INDEX.html`) с оглавлением всех документов, сгруппированных по категориям:
- Анализ и отчеты
- Инструкции
- Другое
#### ✅ Добавлены перекрестные ссылки в документах
В начало каждого основного документа добавлены блоки со ссылками на связанные документы:
- Оглавление документов
- Связанные отчеты и анализы
- Инструкции и решения
### Проверка корректности
Все HTML файлы проверены на:
- ✅ Корректность структуры HTML
- ✅ Наличие всех необходимых тегов
- ✅ Работоспособность перекрестных ссылок
- ✅ Корректность кодировки (UTF-8)
- ✅ Наличие стилей и оформления
- ✅ Отсутствие битых ссылок
### Использование
1. Откройте файл `html/INDEX.html` в браузере для навигации по всем документам
2. Используйте навигационные ссылки в каждом документе для перехода между страницами
3. Все перекрестные ссылки между документами работают корректно
### Инструменты
- **md_to_html.py** - Скрипт конвертации с поддержкой перекрестных ссылок
- **check_html_files.py** - Скрипт проверки корректности HTML файлов
- **INDEX.md** - Автоматически генерируемый индексный файл
---
**Дата конвертации:** 2024
**Статус:** ✅ Все файлы успешно конвертированы и проверены
File diff suppressed because it is too large Load Diff
@@ -1,692 +0,0 @@
---
title: Оценка правок для переноса функционала ставки НДС 22%
version: 1.1
date_modified: 2025-12-15
date_created: 2025-12-15
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
show_metadata_block: true
show_index_link: true
description: Оценка переноса функционала по ставке НДС 22% из новой актуальной типовой конфигурации CRM3 в старую текущую рабочу.
status: документ устарел
---
# Оценка правок для переноса функционала ставки НДС 22%
## Дата анализа
15.12.2025
## Версия документа
1.1 от 15.12.2025
## Цель
Определить необходимые изменения в исходной конфигурации `CRM3devLocal` для переноса функционала применения ставки НДС 22% из целевой конфигурации `CRM326/CRM326_TEST`.
---
## Результаты анализа
### 1. Проверка наличия функционала в исходной конфигурации
**Результат:** В исходной конфигурации `CRM3devLocal` **НЕ НАЙДЕНО** упоминаний `СтавкаНДС22`.
**Вывод:** Функционал применения ставки НДС 22% отсутствует в исходной конфигурации и требует полного переноса.
---
## Необходимые изменения
### 1. Справочник "СтавкиНДС"
#### 1.1. Проверка наличия элемента справочника
- **Действие:** Проверить наличие элемента справочника `СтавкиНДС` с кодом/именем `СтавкаНДС22`
- **Приоритет:** Критический
- **Описание:**
- Если элемент отсутствует, необходимо создать элемент справочника `СтавкиНДС` с кодом `СтавкаНДС22`
- Установить значение ставки: 22% (или 0.22 в зависимости от формата хранения)
- Настроить даты действия ставки (если применимо)
---
### 2. Общий модуль "УчетНДС"
#### 2.1. Файл: `src/CommonModules/УчетНДС/Module.bsl`
**Необходимые изменения:**
1. **Добавление поиска элемента справочника СтавкаНДС22**
- **Место:** Около строки 2068 (по аналогии с целевой конфигурацией)
- **Код:**
```bsl
Справочники.СтавкиНДС.НайтиПервый("СтавкаНДС22", Истина);
```
2. **Добавление работы с набором записей СтавкаНДС22**
- **Место:** Около строки 2069, 2072
- **Код:**
```bsl
Справочники.СтавкиНДС.СтавкаНДС22.СоздатьНаборЗаписей();
```
3. **Использование значений ставки НДС 22%**
- **Место:** Около строки 2365, 2393
- **Код:**
```bsl
Справочники.СтавкиНДС.СтавкаНДС22.ЗначениеПроцент
Справочники.СтавкиНДС.СтавкаНДС22.ЗначениеПропорция
```
4. **Установка параметров для ставки НДС 22%**
- **Место:** Около строки 2455, 2457
- **Код:**
```bsl
Параметры.Установить("СтавкаНДС22ЗначениеПроцент",
Справочники.СтавкиНДС.СтавкаНДС22.ЗначениеПроцент);
Параметры.Установить("СтавкаНДС22ЗначениеПропорция",
Справочники.СтавкиНДС.СтавкаНДС22.ЗначениеПропорция);
```
**Приоритет:** Высокий
**Сложность:** Средняя
---
### 3. Общий модуль "РасчетыСКлиентами"
#### 3.1. Файл: `src/CommonModules/РасчетыСКлиентами/Module.bsl`
**Необходимые изменения:**
Добавить проверки условий с использованием `&СтавкаНДС22` в следующих местах (по аналогии с целевой конфигурацией):
1. **Строка ~2138:** Проверка ставки НДС в расчетах
2. **Строка ~2184:** Проверка ставки НДС в расчетах
3. **Строка ~2218:** Проверка ставки НДС в расчетах
4. **Строка ~2245:** Проверка ставки НДС в расчетах
5. **Строка ~2271:** Проверка ставки НДС в расчетах
6. **Строка ~2335:** Проверка ставки НДС в расчетах
7. **Строка ~2361:** Проверка ставки НДС в расчетах
8. **Строка ~2611:** Проверка ставки НДС в расчетах
9. **Строка ~2887:** Проверка ставки НДС в расчетах
10. **Строка ~2982:** Проверка ставки НДС в расчетах
11. **Строка ~3030:** Проверка ставки НДС в расчетах
12. **Строка ~3078:** Проверка ставки НДС в расчетах
13. **Строка ~3276:** Проверка ставки НДС в расчетах
**Пример кода:**
```bsl
Если СтавкаНДС = (&СтавкаНДС22) Тогда
// Обработка для ставки НДС 22%
КонецЕсли;
```
**Приоритет:** Высокий
**Сложность:** Высокая (требуется анализ логики каждого места)
---
### 4. Общий модуль "РасчетыСПоставщиками"
#### 4.1. Файл: `src/CommonModules/РасчетыСПоставщиками/Module.bsl`
**Необходимые изменения:**
Добавить использование `СтавкаНДС22` в расчетах:
1. **Строка ~1584:** Использование в расчетах НДС
2. **Строка ~1608:** Использование в расчетах НДС
3. **Строка ~1624:** Использование в расчетах НДС
4. **Строка ~1632:** Использование в расчетах НДС
5. **Строка ~1640:** Использование в расчетах НДС
6. **Строка ~1648:** Использование в расчетах НДС
7. **Строка ~1786:** Установка значения ставки НДС 22%
**Пример кода:**
```bsl
Если СтавкаНДС22.ЗначениеПроцент <> 0 Тогда
Результат = СтавкаНДС22.ЗначениеПроцент / СтавкаНДС22.ЗначениеПропорция
КонецЕсли;
```
**Приоритет:** Высокий
**Сложность:** Средняя
---
### 5. Регистр накопления "СводныеДвижения"
#### 5.1. Файл: `src/AccumulationRegisters/СводныеДвижения/ManagerModule.bsl`
**Необходимые изменения:**
1. **Строка ~105:** Добавить проверку ставки НДС 22% в условиях отбора
- **Код:**
```bsl
Если СтавкаНДС = (&СтавкаНДС22) Тогда
// Обработка движений со ставкой НДС 22%
КонецЕсли;
```
2. **Строка ~212, 222:** Добавить аналогичные проверки в других местах модуля
**Приоритет:** Средний
**Сложность:** Средняя
---
## Анализ ставки НДС 22/122 (выделение НДС из суммы "в том числе")
### Описание ставки 22/122
Ставка НДС 22/122 используется для выделения НДС из суммы, в которой НДС уже включен (сумма "в том числе НДС"). Коэффициент 22/122 ≈ 0.180327 (18.0327%) применяется для расчета суммы НДС из общей суммы.
**Формула:** НДС = Сумма × (22 / 122)
### Результаты проверки наличия функционала
**Результат:** В целевой конфигурации `CRM326_TEST` **прямых упоминаний** ставки "22/122" или "22\122" в коде **не обнаружено**.
**Вывод:** Ставка 22/122 может быть реализована:
1. Через элемент справочника `СтавкиНДС` с кодом/именем, содержащим "22/122" или "22\122"
2. Через расчет коэффициента 22/122 в модулях расчетов
3. Через использование свойств `ЗначениеПроцент` и `ЗначениеПропорция` элемента `СтавкаНДС22` с соответствующими значениями
### Необходимые изменения для ставки 22/122
#### 1. Справочник "СтавкиНДС"
##### 1.1. Проверка и создание элемента для ставки 22/122
- **Действие:** Проверить наличие элемента справочника `СтавкиНДС` с кодом/именем, соответствующим ставке 22/122
- **Варианты кодов/имен:**
- `СтавкаНДС22_122`
- `СтавкаНДС22/122`
- `СтавкаНДС22\122`
- `СтавкаНДС22ВТомЧисле`
- **Приоритет:** Критический
- **Описание:**
- Если элемент отсутствует, необходимо создать элемент справочника `СтавкиНДС`
- Установить значение `ЗначениеПроцент` = 22 (или 0.22 в зависимости от формата)
- Установить значение `ЗначениеПропорция` = 122 (для расчета коэффициента 22/122)
- Настроить даты действия ставки (если применимо)
#### 2. Общий модуль "УчетНДС"
##### 2.1. Файл: `src/CommonModules/УчетНДС/Module.bsl`
**Необходимые изменения:**
1. **Добавление поиска элемента справочника для ставки 22/122**
- **Место:** Рядом с поиском `СтавкаНДС22`
- **Код:**
```bsl
СтавкаНДС22_122 = Справочники.СтавкиНДС.НайтиПервый("СтавкаНДС22_122", Истина);
// или другой вариант кода в зависимости от реализации
```
2. **Добавление работы с набором записей для ставки 22/122**
- **Код:**
```bsl
Справочники.СтавкиНДС.СтавкаНДС22_122.СоздатьНаборЗаписей();
```
3. **Использование значений ставки НДС 22/122**
- **Код:**
```bsl
Справочники.СтавкиНДС.СтавкаНДС22_122.ЗначениеПроцент // = 22
Справочники.СтавкиНДС.СтавкаНДС22_122.ЗначениеПропорция // = 122
```
4. **Расчет коэффициента для выделения НДС из суммы**
- **Код:**
```bsl
КоэффициентНДС = СтавкаНДС22_122.ЗначениеПроцент / СтавкаНДС22_122.ЗначениеПропорция;
// КоэффициентНДС = 22 / 122 ≈ 0.180327
СуммаНДС = СуммаСНДС * КоэффициентНДС;
```
**Приоритет:** Высокий
**Сложность:** Средняя
#### 3. Общий модуль "РасчетыСКлиентами"
##### 3.1. Файл: `src/CommonModules/РасчетыСКлиентами/Module.bsl`
**Необходимые изменения:**
Добавить проверки условий и расчеты для ставки НДС 22/122 в местах, где происходит расчет НДС из суммы "в том числе":
1. **Проверка ставки НДС 22/122 в условиях**
- **Пример кода:**
```bsl
Если СтавкаНДС = (&СтавкаНДС22_122) Тогда
// Расчет НДС из суммы "в том числе"
СуммаНДС = СуммаСНДС * (СтавкаНДС22_122.ЗначениеПроцент / СтавкаНДС22_122.ЗначениеПропорция);
КонецЕсли;
```
2. **Добавление обработки ставки 22/122 во всех местах, где обрабатываются ставки НДС**
- Аналогично обработке ставки 22%, но с учетом коэффициента 22/122
**Приоритет:** Высокий
**Сложность:** Высокая (требуется анализ логики каждого места)
#### 4. Общий модуль "РасчетыСПоставщиками"
##### 4.1. Файл: `src/CommonModules/РасчетыСПоставщиками/Module.bsl`
**Необходимые изменения:**
Добавить использование ставки НДС 22/122 в расчетах:
1. **Расчет НДС из суммы "в том числе"**
- **Пример кода:**
```bsl
Если СтавкаНДС22_122.ЗначениеПроцент <> 0 Тогда
Коэффициент = СтавкаНДС22_122.ЗначениеПроцент / СтавкаНДС22_122.ЗначениеПропорция;
Результат = СуммаСНДС * Коэффициент;
КонецЕсли;
```
2. **Установка значений для ставки НДС 22/122**
- **Код:**
```bsl
Параметры.Установить("СтавкаНДС22_122ЗначениеПроцент",
Справочники.СтавкиНДС.СтавкаНДС22_122.ЗначениеПроцент);
Параметры.Установить("СтавкаНДС22_122ЗначениеПропорция",
Справочники.СтавкиНДС.СтавкаНДС22_122.ЗначениеПропорция);
```
**Приоритет:** Высокий
**Сложность:** Средняя
#### 5. Регистр накопления "СводныеДвижения"
##### 5.1. Файл: `src/AccumulationRegisters/СводныеДвижения/ManagerModule.bsl`
**Необходимые изменения:**
1. **Добавить проверку ставки НДС 22/122 в условиях отбора**
- **Код:**
```bsl
Если СтавкаНДС = (&СтавкаНДС22_122) Тогда
// Обработка движений со ставкой НДС 22/122
// Расчет НДС из суммы "в том числе"
КонецЕсли;
```
**Приоритет:** Средний
**Сложность:** Средняя
### Дополнительные проверки для ставки 22/122
1. **Проверить наличие перечислений** для ставок НДС "в том числе"
2. **Проверить константы**, связанные с коэффициентами выделения НДС
3. **Проверить формы документов** на наличие полей для выбора ставки "в том числе НДС"
4. **Проверить отчеты** на корректное отображение ставки 22/122
5. **Проверить валидацию** при выборе ставки 22/122
### Оценка трудозатрат для ставки 22/122
| Модуль | Сложность | Оценка времени |
|--------|-----------|----------------|
| Справочник СтавкиНДС (элемент 22/122) | Низкая | 0.5 часа |
| Модуль УчетНДС | Средняя | 2-3 часа |
| Модуль РасчетыСКлиентами | Высокая | 3-5 часов |
| Модуль РасчетыСПоставщиками | Средняя | 2-3 часа |
| Регистр СводныеДвижения | Средняя | 1-2 часа |
| Тестирование | Средняя | 2-3 часа |
| **ИТОГО** | | **11-17 часов** |
### Рекомендации по реализации ставки 22/122
1. **Создать элемент справочника** с кодом `СтавкаНДС22_122` или аналогичным
2. **Установить значения:**
- `ЗначениеПроцент` = 22
- `ЗначениеПропорция` = 122
3. **Добавить проверки** во всех местах, где происходит расчет НДС из суммы "в том числе"
4. **Убедиться в корректности** расчетов коэффициента 22/122 ≈ 0.180327
5. **Протестировать** все сценарии использования ставки 22/122
---
## Порядок выполнения работ
### Этап 1: Подготовка (Приоритет: Критический)
1. Проверить наличие справочника `СтавкиНДС` в исходной конфигурации
2. Создать элемент справочника `СтавкаНДС22` (если отсутствует)
- Установить значение ставки: 22% (или 0.22 в зависимости от формата)
3. Создать элемент справочника для ставки 22/122 (например, `СтавкаНДС22_122`)
- Установить `ЗначениеПроцент` = 22
- Установить `ЗначениеПропорция` = 122
4. Настроить даты действия ставок (если применимо)
### Этап 2: Модули учета НДС (Приоритет: Высокий)
1. Внести изменения в модуль `УчетНДС`
2. Добавить функции работы со ставкой НДС 22%
3. Добавить функции работы со ставкой НДС 22/122
4. Добавить расчет коэффициента 22/122 для выделения НДС из суммы "в том числе"
5. Протестировать функционал
### Этап 3: Модули расчетов (Приоритет: Высокий)
1. Внести изменения в модуль `РасчетыСКлиентами`
- Добавить проверки условий для ставки НДС 22%
- Добавить проверки условий для ставки НДС 22/122
- Добавить расчеты НДС из суммы "в том числе" для ставки 22/122
2. Внести изменения в модуль `РасчетыСПоставщиками`
- Добавить использование ставки НДС 22% в расчетах
- Добавить использование ставки НДС 22/122 в расчетах
- Добавить расчеты коэффициента 22/122
3. Протестировать расчеты для обеих ставок
### Этап 4: Регистры накопления (Приоритет: Средний)
1. Внести изменения в регистр `СводныеДвижения`
2. Добавить обработку движений со ставкой НДС 22%
3. Добавить обработку движений со ставкой НДС 22/122
4. Протестировать регистр
### Этап 5: Доработка форм (Приоритет: Высокий)
1. Проверить и доработать формы документов для поддержки ставок 22% и 22/122
2. Проверить и доработать формы справочников
3. Проверить и доработать формы отчетов
4. Проверить и доработать формы обработок
5. Протестировать работу форм
### Этап 6: Тестирование (Приоритет: Критический)
1. Провести полное тестирование функционала для ставки 22%
2. Провести полное тестирование функционала для ставки 22/122
3. Проверить корректность расчетов НДС для обеих ставок
4. Проверить корректность выделения НДС из суммы "в том числе" (22/122)
5. Проверить работу отчетности
6. Провести регрессионное тестирование существующих ставок НДС
---
## Оценка трудозатрат
### Ставка НДС 22%
| Модуль | Сложность | Оценка времени |
|--------|-----------|----------------|
| Справочник СтавкиНДС (элемент 22%) | Низкая | 0.5 часа |
| Модуль УчетНДС | Средняя | 2-3 часа |
| Модуль РасчетыСКлиентами | Высокая | 4-6 часов |
| Модуль РасчетыСПоставщиками | Средняя | 2-3 часа |
| Регистр СводныеДвижения | Средняя | 1-2 часа |
| Доработка форм | Средняя | 8-13 часов |
| Тестирование | Средняя | 3-4 часа |
| **ИТОГО для ставки 22%** | | **21-32 часа** |
### Ставка НДС 22/122
| Модуль | Сложность | Оценка времени |
|--------|-----------|----------------|
| Справочник СтавкиНДС (элемент 22/122) | Низкая | 0.5 часа |
| Модуль УчетНДС | Средняя | 2-3 часа |
| Модуль РасчетыСКлиентами | Высокая | 3-5 часов |
| Модуль РасчетыСПоставщиками | Средняя | 2-3 часа |
| Регистр СводныеДвижения | Средняя | 1-2 часа |
| Доработка форм | Средняя | 6-10 часов |
| Тестирование | Средняя | 2-3 часа |
| **ИТОГО для ставки 22/122** | | **17-27 часов** |
### Общая оценка (обе ставки)
**При последовательной реализации:** 38-59 часов
**При параллельной реализации:** 35-50 часов (за счет переиспользования кода)
---
## Риски и рекомендации
### Риски:
1. **Несовместимость логики:** Логика расчетов в исходной и целевой конфигурациях может отличаться
2. **Зависимости:** Изменения могут затронуть другие модули, использующие расчеты НДС
3. **Тестирование:** Требуется тщательное тестирование всех сценариев использования ставок НДС 22% и 22/122
4. **Ошибки в расчетах коэффициента:** Неправильный расчет коэффициента 22/122 может привести к ошибкам в сумме НДС
5. **Путаница между ставками:** Ставка 22% и ставка 22/122 имеют разные назначения и могут быть перепутаны
### Рекомендации:
1. Перед внесением изменений создать резервную копию конфигурации
2. Вносить изменения поэтапно, с тестированием после каждого этапа
3. Документировать все внесенные изменения
4. Провести регрессионное тестирование существующего функционала
5. Убедиться в корректности работы со ставками НДС 0%, 10%, 18%, 20% после добавления 22% и 22/122
6. **Для ставки 22/122:**
- Убедиться в корректности расчета коэффициента 22/122 ≈ 0.180327
- Проверить все места, где происходит выделение НДС из суммы "в том числе"
- Убедиться, что ставка 22/122 используется только для сумм "в том числе НДС"
- Проверить валидацию при выборе ставки 22/122
7. **Разделение логики:**
- Четко разделить логику работы со ставкой 22% (начисление НДС) и ставкой 22/122 (выделение НДС)
- Использовать понятные имена переменных и функций для каждой ставки
---
## Дополнительные проверки
1. Проверить наличие перечислений, связанных со ставками НДС
2. Проверить наличие констант, связанных со ставками НДС
3. Проверить наличие регламентных заданий, использующих ставки НДС
4. Проверить наличие отчетов, использующих ставки НДС
5. Проверить наличие обработок, использующих ставки НДС
---
## Проверка наличия обработки "Помощник замены ставки НДС на 22%"
### Результаты проверки
**Результат:** В целевой конфигурации `CRM326/CRM326_TEST` **НЕ НАЙДЕНА** обработка с названием "Помощник замены ставки НДС на 22%" или аналогичным.
**Проверенные места:**
1. Основная конфигурация `CRM326_TEST/src/DataProcessors/` - обработка не найдена
2. Расширение `CRM326_TEST.crm326RHANA/src/DataProcessors/` - обработка не найдена
3. Поиск по содержимому файлов обработок - упоминаний не найдено
**Вывод:** Обработка для массовой замены ставки НДС на 22% отсутствует в целевой конфигурации.
### Рекомендации
Если требуется функционал массовой замены ставки НДС на 22%, необходимо:
1. **Создать новую обработку** "Помощник замены ставки НДС на 22%" в исходной конфигурации
2. **Функционал обработки должен включать:**
- Выбор документов для замены (по датам, организациям, контрагентам и т.д.)
- Выбор старой ставки НДС (например, 20% или 18%)
- Замена на новую ставку НДС 22%
- Пересчет сумм НДС и итоговых сумм
- Возможность предварительного просмотра изменений
- Логирование выполненных замен
- Откат изменений (если требуется)
3. **Оценка трудозатрат на создание обработки:**
- Разработка обработки: **8-12 часов**
- Тестирование: **3-4 часа**
- **ИТОГО: 11-16 часов**
**Примечание:** Обработка может быть полезна при переходе на новую ставку НДС 22% для массового обновления исторических данных или документов в разработке.
---
## Анализ форм, требующих доработки
### Результаты анализа
В результате анализа конфигураций установлено, что **прямых упоминаний `СтавкаНДС22` в модулях форм не обнаружено**. Однако это не означает, что формы не требуют доработки. Ставки НДС используются в формах через:
1. **Элементы выбора ставки НДС** (поля выбора, комбобоксы)
2. **Обработчики событий**, работающие со ставками НДС
3. **Логику заполнения полей** на основе выбранной ставки НДС
4. **Валидацию данных** при выборе ставки НДС
### Категории форм, требующих проверки и возможной доработки
#### 1. Формы документов, работающих с НДС
**Описание:** Документы, которые имеют поля для выбора ставки НДС или расчета сумм НДС.
**Потенциально затронутые документы:**
- Документы реализации (накладные, счета-фактуры)
- Документы поступления (накладные поставщика, счета-фактуры полученные)
- Документы перемещения товаров
- Документы корректировки реализации/приобретения
- Документы возврата товаров
- Документы авансовых отчетов
**Необходимые доработки:**
1. Проверить элементы управления выбора ставки НДС - должны включать ставку 22%
2. Проверить обработчики событий изменения ставки НДС
3. Проверить логику расчета сумм НДС для ставки 22%
4. Проверить валидацию при выборе ставки НДС 22%
**Приоритет:** Высокий
**Сложность:** Средняя
#### 2. Формы справочников, связанных с НДС
**Описание:** Формы справочников, которые могут содержать информацию о ставках НДС или работать со ставками НДС.
**Потенциально затронутые справочники:**
- Справочник "СтавкиНДС" (если существует)
- Справочник "Номенклатура" (если содержит поле ставки НДС)
- Справочник "ВидыНоменклатуры" (если содержит поле ставки НДС)
- Справочник "Контрагенты" (если содержит настройки НДС)
**Необходимые доработки:**
1. Если справочник "СтавкиНДС" существует - проверить форму списка и форму элемента
2. Убедиться, что в форме можно создать/редактировать элемент с кодом "СтавкаНДС22"
3. Проверить валидацию значений ставки НДС
4. Проверить отображение ставки 22% в списках выбора
**Приоритет:** Высокий
**Сложность:** Низкая-Средняя
#### 3. Формы отчетов, связанных с НДС
**Описание:** Отчеты, которые выводят информацию о НДС или используют ставки НДС в расчетах.
**Потенциально затронутые отчеты:**
- Отчеты по НДС (книга покупок, книга продаж)
- Отчеты по расчетам с контрагентами
- Отчеты по реализации/приобретению
- Налоговые отчеты
**Необходимые доработки:**
1. Проверить схемы компоновки данных - должны учитывать ставку 22%
2. Проверить настройки отбора по ставкам НДС
3. Проверить группировки и итоги по ставкам НДС
4. Убедиться, что ставка 22% отображается в отчетах
**Приоритет:** Средний
**Сложность:** Средняя
#### 4. Формы обработок, связанных с НДС
**Описание:** Обработки, которые работают со ставками НДС (импорт, экспорт, расчеты).
**Потенциально затронутые обработки:**
- Обработки импорта/экспорта данных по НДС
- Обработки расчета НДС
- Обработки корректировки НДС
**Необходимые доработки:**
1. Проверить логику обработки ставки НДС 22% при импорте
2. Проверить валидацию данных при работе со ставкой 22%
3. Убедиться, что обработки корректно работают со ставкой 22%
**Приоритет:** Средний
**Сложность:** Средняя
### Рекомендации по доработке форм
#### Общие рекомендации:
1. **Проверка элементов выбора ставки НДС:**
- Убедиться, что все поля выбора ставки НДС включают ставку 22%
- Проверить, что ставка 22% отображается с правильным названием и значением
2. **Проверка обработчиков событий:**
- Проверить обработчики изменения ставки НДС
- Убедиться, что при выборе ставки 22% корректно пересчитываются суммы НДС
3. **Проверка валидации:**
- Добавить валидацию для ставки НДС 22% (если требуется)
- Проверить ограничения по датам действия ставки (если применимо)
4. **Проверка отображения:**
- Убедиться, что ставка 22% корректно отображается во всех формах
- Проверить форматирование значений ставки НДС
#### Конкретные действия:
1. **Для форм документов:**
- Найти все формы документов, имеющие поле "СтавкаНДС"
- Проверить модули этих форм на наличие логики работы со ставками
- Добавить обработку ставки 22% в соответствующие обработчики
2. **Для форм справочников:**
- Проверить форму справочника "СтавкиНДС" (если существует)
- Убедиться, что можно создать элемент с кодом "СтавкаНДС22"
- Проверить валидацию значений
3. **Для форм отчетов:**
- Проверить схемы компоновки данных отчетов по НДС
- Убедиться, что ставка 22% учитывается в отборах и группировках
### Оценка трудозатрат на доработку форм
| Категория форм | Количество форм (примерно) | Сложность | Оценка времени |
|----------------|---------------------------|-----------|----------------|
| Формы документов | 10-20 | Средняя | 4-6 часов |
| Формы справочников | 2-5 | Низкая | 1-2 часа |
| Формы отчетов | 3-5 | Средняя | 2-3 часа |
| Формы обработок | 2-3 | Средняя | 1-2 часа |
| **ИТОГО** | **17-33** | | **8-13 часов** |
**Примечание:** Точное количество форм, требующих доработки, может быть определено только после детального анализа каждой формы в исходной конфигурации.
---
## Заключение
Для переноса функционала применения ставок НДС 22% и 22/122 из целевой конфигурации в исходную необходимо:
### Ставка НДС 22%
1. **Создать элемент справочника** `СтавкаНДС22` (если отсутствует)
2. **Модифицировать 4 модуля:**
- Общий модуль `УчетНДС`
- Общий модуль `РасчетыСКлиентами`
- Общий модуль `РасчетыСПоставщиками`
- Модуль менеджера регистра `СводныеДвижения`
3. **Добавить проверки условий** для ставки НДС 22% в расчетах
4. **Доработать формы** (17-33 формы):
- Формы документов, работающих с НДС (10-20 форм)
- Формы справочников, связанных с НДС (2-5 форм)
- Формы отчетов по НДС (3-5 форм)
- Формы обработок, связанных с НДС (2-3 формы)
### Ставка НДС 22/122 (выделение НДС из суммы "в том числе")
1. **Создать элемент справочника** для ставки 22/122 (например, `СтавкаНДС22_122`)
2. **Установить значения:**
- `ЗначениеПроцент` = 22
- `ЗначениеПропорция` = 122
3. **Модифицировать те же 4 модуля** для поддержки ставки 22/122:
- Общий модуль `УчетНДС`
- Общий модуль `РасчетыСКлиентами`
- Общий модуль `РасчетыСПоставщиками`
- Модуль менеджера регистра `СводныеДвижения`
4. **Добавить расчеты коэффициента** 22/122 для выделения НДС из суммы "в том числе"
5. **Доработать формы** для поддержки ставки 22/122
### Общая оценка трудозатрат
| Компонент | Ставка 22% | Ставка 22/122 | Итого |
|-----------|------------|---------------|-------|
| **Модули и логика** | 13-19 часов | 11-17 часов | **24-36 часов** |
| **Доработка форм** | 8-13 часов | 6-10 часов | **14-23 часов** |
| **Тестирование** | 3-4 часа | 2-3 часа | **5-7 часов** |
| **ИТОГО** | **24-36 часов** | **19-30 часов** | **43-66 часов** |
**Примечание:** При параллельной реализации обеих ставок общее время может быть сокращено за счет переиспользования кода и одновременного тестирования. Ориентировочная оценка при параллельной работе: **35-50 часов работы разработчика**.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,260 +0,0 @@
---
title: Проблема неуникальности регистра CRM_ЖурналДокументов
version: 1.0
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
date_created: 2025-12-09
date_modified: 2025-12-09
show_metadata_block: true
show_index_link: true
---
# Проблема неуникальности регистра CRM_ЖурналДокументов
> 📚 **См. также:** [Оглавление документов](INDEX.md) | [Список объектов для удаления из подсистем](Список_объектов_для_удаления_из_подсистем.md) | [Анализ ошибок обновления](Анализ_ошибок_обновления.md)
## Контекст проблемы
После успешного удаления всех объектов из состава подсистем и сохранения новой конфигурации **CRM3-26** поверх рабочей **CRM3**, при завершении процесса обновления возникла ошибка:
```
Записи регистра сведений стали неуникальными: CRM_ЖурналДокументов
```
## Описание проблемы
### Суть ошибки
Регистр сведений `CRM_ЖурналДокументов` содержит дублирующиеся записи, которые нарушают уникальность ключа регистра. Это означает, что в регистре есть несколько записей с одинаковыми значениями всех измерений.
### Причины возникновения
1. **Изменение структуры регистра** - при обновлении конфигурации могли измениться измерения регистра
2. **Миграция данных** - при переносе данных из старой конфигурации могли возникнуть дубликаты
3. **Ошибки в данных** - в исходной конфигурации уже могли существовать дубликаты, которые не проверялись
4. **Удаление измерений** - если из регистра было удалено измерение, которое различало записи, они могли стать дубликатами
### Критичность
**ВЫСОКАЯ** - Обновление конфигурации не может быть завершено до устранения проблемы.
---
## Решение проблемы
### Шаг 1: Проверка дубликатов
Необходимо выполнить запрос для выявления дублирующихся записей в регистре `CRM_ЖурналДокументов`.
#### Запрос для проверки дубликатов
```bsl
// Проверка на дубликаты в регистре сведений CRM_ЖурналДокументов
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| CRM_ЖурналДокументов.Документ КАК Документ,
| КОЛИЧЕСТВО(*) КАК КоличествоДубликатов
ИЗ
| РегистрСведений.CRM_ЖурналДокументов КАК CRM_ЖурналДокументов
|
|СГРУППИРОВАТЬ ПО
| CRM_ЖурналДокументов.Документ
|
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(*) > 1";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Количество() > 0 Тогда
Сообщить("Обнаружены дубликаты в регистре CRM_ЖурналДокументов:");
Пока Выборка.Следующий() Цикл
Сообщить(" Документ: " + Выборка.Документ
+ ", Количество дубликатов: " + Выборка.КоличествоДубликатов);
КонецЦикла;
Иначе
Сообщить("Дубликаты в регистре CRM_ЖурналДокументов не обнаружены.");
КонецЕсли;
```
**Примечание:** Структура запроса может отличаться в зависимости от фактических измерений регистра. Необходимо уточнить структуру регистра в конфигураторе.
### Шаг 2: Анализ структуры регистра
Перед выполнением запроса необходимо:
1. Открыть конфигурацию в конфигураторе
2. Найти регистр `РегистрСведений.CRM_ЖурналДокументов`
3. Проверить список измерений регистра
4. Адаптировать запрос под фактическую структуру
### Шаг 3: Варианты решения
#### Вариант 1: Удаление дубликатов (если данные не критичны)
Если дубликаты не несут важной информации, их можно удалить, оставив только одну запись для каждого уникального ключа.
```bsl
// Удаление дубликатов из регистра CRM_ЖурналДокументов
// ВНИМАНИЕ: Выполнять только после резервного копирования!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| CRM_ЖурналДокументов.Ссылка КАК Ссылка
ИЗ
| РегистрСведений.CRM_ЖурналДокументов КАК CRM_ЖурналДокументов
|
|ГДЕ
| CRM_ЖурналДокументов.Документ = &Документ
|
|УПОРЯДОЧИТЬ ПО
| CRM_ЖурналДокументов.Ссылка";
// Для каждого документа с дубликатами
// Оставить первую запись, остальные удалить
```
#### Вариант 2: Объединение данных (если данные важны)
Если в дубликатах есть различающиеся данные в ресурсах, необходимо объединить их перед удалением дубликатов.
#### Вариант 3: Корректировка измерений (если структура изменилась)
Если проблема возникла из-за изменения структуры регистра, может потребоваться:
- Добавить временное измерение для различения записей
- Выполнить миграцию данных
- Удалить временное измерение
### Шаг 4: Проверка после исправления
После устранения дубликатов необходимо:
1. Повторно выполнить запрос проверки дубликатов
2. Убедиться, что дубликатов больше нет
3. Попробовать завершить обновление конфигурации
---
## Детальный запрос для анализа
Для более детального анализа можно использовать следующий запрос:
```bsl
// Детальный анализ дубликатов в регистре CRM_ЖурналДокументов
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| CRM_ЖурналДокументов.Документ КАК Документ,
| КОЛИЧЕСТВО(*) КАК КоличествоЗаписей,
| МИНИМУМ(CRM_ЖурналДокументов.Период) КАК ПерваяЗапись,
| МАКСИМУМ(CRM_ЖурналДокументов.Период) КАК ПоследняяЗапись
ИЗ
| РегистрСведений.CRM_ЖурналДокументов КАК CRM_ЖурналДокументов
|
|СГРУППИРОВАТЬ ПО
| CRM_ЖурналДокументов.Документ
|
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(*) > 1
|
|УПОРЯДОЧИТЬ ПО
| КоличествоЗаписей УБЫВ";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Количество() > 0 Тогда
Сообщить("Детальный анализ дубликатов:");
Пока Выборка.Следующий() Цикл
Сообщить(" Документ: " + Выборка.Документ
+ ", Записей: " + Выборка.КоличествоЗаписей
+ ", Период первой: " + Выборка.ПерваяЗапись
+ ", Период последней: " + Выборка.ПоследняяЗапись);
КонецЦикл;
КонецЕсли;
```
---
## Рекомендации
### Перед исправлением
1. ✅ **Создать резервную копию базы данных**
2. ✅ **Выполнить запрос проверки** для оценки масштаба проблемы
3. ✅ **Проанализировать результаты** - понять, какие документы имеют дубликаты
4. ✅ **Определить стратегию** - удаление или объединение данных
### При исправлении
1. ⚠️ **Выполнять в режиме монопольного доступа**
2. ⚠️ **Не выполнять во время работы пользователей**
3. ⚠️ **Сохранять логи** всех операций
4. ⚠️ **Тестировать на копии** базы данных перед применением к рабочей
### После исправления
1. ✅ **Проверить отсутствие дубликатов**
2. ✅ **Проверить целостность данных**
3. ✅ **Попробовать завершить обновление**
4. ✅ **Провести функциональное тестирование**
---
## Альтернативные решения
### Если проблема не решается стандартными методами
1. **Обратиться в поддержку 1С** - возможно, это известная проблема с решением
2. **Проверить обновления платформы** - возможно, требуется обновление платформы 1С
3. **Использовать утилиты миграции** - специальные утилиты для миграции данных
4. **Ручная корректировка** - если записей немного, можно исправить вручную
---
## Связанные проблемы
При обновлении конфигурации могут возникнуть аналогичные проблемы с другими регистрами:
- Регистры сведений с измененной структурой
- Регистры накопления с удаленными измерениями
- Регистры с данными, требующими миграции
**Рекомендация:** После устранения проблемы с `CRM_ЖурналДокументов` проверить другие регистры на наличие аналогичных проблем.
---
## Чек-лист действий
- [ ] Создать резервную копию базы данных
- [ ] Открыть конфигурацию в конфигураторе
- [ ] Проверить структуру регистра `CRM_ЖурналДокументов`
- [ ] Адаптировать запрос проверки под структуру регистра
- [ ] Выполнить запрос проверки дубликатов
- [ ] Проанализировать результаты
- [ ] Определить стратегию исправления
- [ ] Выполнить исправление (на копии базы)
- [ ] Проверить результат
- [ ] Применить к рабочей базе
- [ ] Завершить обновление конфигурации
- [ ] Провести тестирование
---
## История проблемы
### Версия 1.0 (Текущая итерация)
- Обнаружена проблема после удаления объектов из состава подсистем
- Конфигурация сохранена, но обновление не завершено
- Требуется устранение дубликатов в регистре `CRM_ЖурналДокументов`
---
**Дата создания:** 2024
**Статус:** Требуется решение
**Критичность:** ВЫСОКАЯ
**Контекст:** Применение CRM3-26 поверх рабочей CRM3
-60
@@ -1,60 +0,0 @@
---
title: Проверка наличия ставки НДС 22% в целевой конфигурации CRM326
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-13
date_modified: 2025-12-13
show_metadata_block: true
show_index_link: true
---
# Проверка наличия ставки НДС 22% в целевой конфигурации CRM326
## Результаты проверки
**Дата проверки:** 13.12.2025
## Найдены реализации ставки НДС 22%
В целевой конфигурации `CRM326/CRM326_TEST` обнаружены упоминания ставки НДС 22% в следующих файлах:
### 1. Регистр накопления "СводныеДвижения"
- **Файл:** `CRM326_TEST/src/AccumulationRegisters/СводныеДвижения/ManagerModule.bsl`
- **Строка 105:** Упоминание `СтавкаНДС22`
### 2. Общий модуль "УчетНДС"
- **Файл:** `CRM326_TEST/src/CommonModules/УчетНДС/Module.bsl`
- **Найдено несколько упоминаний:**
- Строка 2068: `Справочники.СтавкиНДС.НайтиПервый("СтавкаНДС22", ...)`
- Строка 2069: `Справочники.СтавкиНДС.СтавкаНДС22.СоздатьНаборЗаписей()`
- Строка 2072: `Справочники.СтавкиНДС.СтавкаНДС22.СоздатьНаборЗаписей()`
- Строка 2365: Использование `Справочники.СтавкиНДС.СтавкаНДС22.ЗначениеПроцент`
- Строка 2393: Использование `Справочники.СтавкиНДС.СтавкаНДС22.ЗначениеПропорция`
- Строка 2455: `Параметры.Установить("СтавкаНДС22ЗначениеПроцент", Справочники.СтавкиНДС.СтавкаНДС22.ЗначениеПроцент)`
- Строка 2457: `Параметры.Установить("СтавкаНДС22ЗначениеПропорция", Справочники.СтавкиНДС.СтавкаНДС22.ЗначениеПропорция)`
### 3. Общий модуль "РасчетыСКлиентами"
- **Файл:** `CRM326_TEST/src/CommonModules/РасчетыСКлиентами/Module.bsl`
- **Найдено множество упоминаний:**
- Строки 2138, 2184, 2218, 2245, 2271, 2335, 2361, 2611, 2887, 2982, 3030, 3078, 3276: Проверки условий с использованием `&СтавкаНДС22`
### 4. Другие модули
- **Файл:** `CRM326_TEST/src/CommonModules/РасчетыСПоставщиками/Module.bsl`
- Строки 1584, 1608, 1624, 1632, 1640, 1648, 1786: Использование `СтавкаНДС22` в расчетах
## Вывод
**Ставка НДС 22% реализована в целевой конфигурации CRM326.**
Реализация включает:
1. Элемент справочника "СтавкиНДС" с кодом/именем "СтавкаНДС22"
2. Использование в модулях учета НДС
3. Использование в расчетах с клиентами и поставщиками
4. Использование в регистрах накопления для учета движений
## Рекомендации
1. Проверить наличие элемента справочника "СтавкиНДС" с кодом "СтавкаНДС22" в метаданных конфигурации
2. Убедиться, что значение ставки установлено корректно (22% или 0.22)
3. Проверить даты действия ставки НДС 22% (если применимо)
@@ -1,238 +0,0 @@
---
title: Результаты конвертации Markdown в HTML
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-09
date_modified: 2025-12-09
show_metadata_block: true
show_index_link: true
---
# Результаты конвертации Markdown в HTML
## ✅ Статус: Успешно завершено
### Итоговая статистика
- **Всего конвертировано файлов:** 12
- **Ошибок при конвертации:** 0
- **Ошибок в HTML файлах:** 0
- **Предупреждений:** 0
- **Битых ссылок:** 0
---
## Реализованные возможности
### ✅ 1. Перекрестные ссылки между документами
Все ссылки на другие `.md` файлы автоматически конвертируются в ссылки на соответствующие `.html` файлы.
**Пример конвертации:**
```markdown
[Глубинный анализ регистров](Глубинный_анализ_регистров.md)
```
```html
<a href="Глубинный_анализ_регистров.html">Глубинный анализ регистров</a>
```
**Результат:** Все перекрестные ссылки работают корректно в HTML формате.
### ✅ 2. Автоматическая навигация
В каждом HTML файле автоматически добавляется блок навигации со ссылками на все остальные документы.
**Расположение:** В верхней части каждого документа, перед основным содержимым.
**Стиль:** Синие кнопки с белым текстом, при наведении темнеют.
### ✅ 3. Индексный файл (INDEX.md/INDEX.html)
Создан автоматически генерируемый индексный файл со всеми документами, сгруппированными по категориям:
- **Анализ и отчеты** (5 документов)
- **Инструкции** (2 документа)
- **Другое** (5 документов)
### ✅ 4. Добавлены перекрестные ссылки в документах
В начало каждого основного документа добавлены блоки со ссылками на связанные документы:
- Оглавление документов (INDEX)
- Связанные отчеты и анализы
- Инструкции и решения
**Формат:** Блоки с эмодзи 📚 и ссылками на связанные документы.
---
## Список конвертированных файлов
### HTML файлы (в папке `html/`)
1. ✅ **INDEX.html** - Оглавление всех документов (23 ссылки)
2. ✅ **Анализ_ошибок_обновления.html** - Анализ ошибок обновления (15 ссылок)
3. ✅ **Быстрое_решение.html** - Быстрое решение проблемы (15 ссылок)
4. ✅ **Глубинный_анализ_регистров.html** - Глубинный анализ регистров (15 ссылок)
5. ✅ **Инструкция_по_исправлению.html** - Инструкция по исправлению (15 ссылок)
6. ✅ **Итоговый_отчет_анализа_регистров.html** - Итоговый отчет (15 ссылок)
7. ✅ **ФИНАЛЬНЫЙ_ОТЧЕТ_Анализ_регистров.html** - Финальный отчет (15 ссылок)
8. ✅ **Отчет_о_конвертации.html** - Отчет о конвертации (11 ссылок)
9. ✅ **README_md_to_html.html** - Инструкция по использованию скрипта (11 ссылок)
10. ✅ **analysis_report.html** - Отчет анализа (11 ссылок)
11. ✅ **analysis_report_detailed.html** - Детальный отчет анализа (26 ссылок)
12. ✅ **Партнеры_АналитическийОтчет.html** - Аналитический отчет по партнерам (20 ссылок)
---
## Проверка корректности
### ✅ Структура HTML
Все файлы проверены на:
- ✅ Наличие `<!DOCTYPE html>`
- ✅ Корректная структура `<html>`, `<head>`, `<body>`
- ✅ Наличие тега `<title>` с осмысленным содержимым
- ✅ Указана кодировка UTF-8
- ✅ Присутствуют стили CSS
### ✅ Ссылки
- ✅ Все перекрестные ссылки между документами работают
- ✅ Относительные пути корректны
- ✅ Нет битых ссылок
- ✅ Навигационные ссылки присутствуют во всех файлах
### ✅ Оформление
- ✅ Адаптивный дизайн
- ✅ Подсветка синтаксиса кода
- ✅ Стилизованные таблицы
- ✅ Красивое оформление блоков цитат
- ✅ Оглавление (TOC) работает корректно
### ✅ Контент
- ✅ Все содержимое Markdown корректно отображается
- ✅ Таблицы отформатированы правильно
- ✅ Код подсвечен синтаксисом
- ✅ Списки отображаются корректно
---
## Использование
### Открытие документов
1. **Начните с индексного файла:**
```
html/INDEX.html
```
Откройте этот файл в браузере для навигации по всем документам.
2. **Используйте навигацию:**
- В каждом документе есть блок навигации вверху
- Используйте его для перехода между документами
- Все перекрестные ссылки в тексте также работают
3. **Прямые ссылки:**
Можно открыть любой HTML файл напрямую - все ссылки будут работать корректно.
### Примеры ссылок
- `html/INDEX.html` - Главная страница с оглавлением
- `html/Анализ_ошибок_обновления.html` - Анализ ошибок
- `html/ФИНАЛЬНЫЙ_ОТЧЕТ_Анализ_регистров.html` - Финальный отчет
- `html/Глубинный_анализ_регистров.html` - Глубинный анализ
---
## Инструменты
### Созданные скрипты
1. **md_to_html.py** - Основной скрипт конвертации
- Поддержка перекрестных ссылок
- Автоматическая навигация
- Создание индексного файла
- Гибкие параметры запуска
2. **check_html_files.py** - Скрипт проверки корректности
- Проверка структуры HTML
- Проверка ссылок
- Выявление битых ссылок
- Статистика
3. **compare_configurations.py** - Сравнение конфигураций
- Поиск удаляемых объектов
- Генерация отчетов
4. **deep_register_analysis.py** - Анализ регистров
- Поиск проблем с уникальностью
- Детальные отчеты
### Автоматически созданные файлы
- **INDEX.md** - Индексный файл (автоматически обновляется)
- **INDEX.html** - HTML версия индексного файла
---
## Технические детали
### Формат HTML
- **Версия:** HTML5
- **Кодировка:** UTF-8
- **Стили:** Встроенные CSS
- **Адаптивность:** Да (responsive design)
### Поддерживаемые возможности Markdown
- ✅ Заголовки всех уровней
- ✅ Списки (нумерованные и маркированные)
- ✅ Таблицы
- ✅ Блоки кода с подсветкой синтаксиса
- ✅ Цитаты
- ✅ Ссылки (включая перекрестные)
- ✅ Изображения
- ✅ Горизонтальные разделители
- ✅ Автоматическое оглавление (TOC)
### Особенности реализации
1. **Относительные пути:** Все ссылки используют относительные пути, что позволяет открывать файлы из любой папки
2. **Автоматическая навигация:** Каждый документ содержит ссылки на все остальные
3. **Красивое оформление:** Современный дизайн с адаптивной версткой
4. **Подсветка кода:** Автоматическая подсветка синтаксиса для блоков кода
---
## Рекомендации
1. **Для просмотра:** Откройте `html/INDEX.html` в браузере
2. **Для обновления:** Запустите `python md_to_html.py --create-index`
3. **Для проверки:** Запустите `python check_html_files.py`
4. **Для добавления ссылок:** Используйте формат `[текст](файл.md)` в Markdown
---
## Заключение
✅ **Все задачи выполнены успешно:**
1. ✅ Создан скрипт конвертации с поддержкой перекрестных ссылок
2. ✅ Создан индексный файл со всеми документами
3. ✅ Все MD файлы конвертированы в HTML
4. ✅ Добавлены перекрестные ссылки в документах
5. ✅ Проверена корректность всех HTML файлов
6. ✅ Проверена работоспособность всех ссылок
**Результат:** Все 12 HTML файлов корректны, все ссылки работают, документы готовы к использованию.
---
**Дата конвертации:** 2024
**Статус:** ✅ Полностью готово к использованию
@@ -1,829 +0,0 @@
---
title: Реализация переноса НДС 22%
version: 1.0
date_created: 2026-01-05
date_modified: 2026-01-05
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
description: Результаты проверки реализации переноса функционала ставки НДС 22% в старой конфигурации на основе документа оценки
status: Выполнение проверки на тестовой базе
extension: CRM3devLocal.Рана
extension_version: 3.0.22.26/1.0.1.316
based_on: Оценка_правок_для_переноса_НДС_22_(v1.4).md
based_on_title: Оценка правок для переноса функционала ставки НДС 22%
based_on_version: 1.4
show_metadata_block: true
show_index_link: true
show_toc: true
---
# Реализация переноса НДС 22%
## Дата проверки
05.01.2026
## Версия документа
1.0 от 05.01.2026
## Автор работ по переносу
Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
## Текущий статус
Выполнение проверки на тестовой базе
## Версия расширения
**Расширение:** `CRM3devLocal.Рана`
**Версия:** `3.0.22.26/1.0.1.316`
## Основа для проверки
Документ-основание: [Оценка правок для переноса функционала ставки НДС 22% (v1.4)](Оценка_правок_для_переноса_НДС_22_(v1.4).md)
---
## Результаты проверки реализации
### 1. Перечисление "СтавкиНДС"
#### 1.1. Добавление значений в перечисление
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Значение `НДС22` добавлено в перечисление `СтавкиНДС` в расширении `CRM3devLocal.Рана`
- ✅ Значение `НДС22_122` добавлено в перечисление `СтавкиНДС` в расширении `CRM3devLocal.Рана`
- ✅ Значения присутствуют в файле `CRM3devLocal.Рана/src/Enums/СтавкиНДС.xml`
**Расположение:** `CRM3devLocal.Рана/src/Enums/СтавкиНДС.xml`
**Примечание:** Изменения внесены в расширение, что соответствует архитектуре конфигурации.
---
### 2. Общий модуль "УчетНДСУП"
#### 2.1. Модификация функции СтавкаНДСПоУмолчанию
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Функция модифицирована в расширении `CRM3devLocal.Рана/src/CommonModules/УчетНДСУП/Ext/Module.bsl`
- ✅ Добавлена проверка даты для ставки НДС 22%
- ✅ Корректно используется дата `'20260101'` для начала действия ставки НДС 22%
**Реализация (строки 17-23):**
```bsl
// Добавление ставки НДС 22%
Если ДатаПолучения >= '20260101' Тогда
Возврат ?(РасчетнаяСтавка, Перечисления.СтавкиНДС.НДС22_122, Перечисления.СтавкиНДС.НДС22);
ИначеЕсли ДатаПолучения >= '20190101' Тогда
Возврат ?(РасчетнаяСтавка, Перечисления.СтавкиНДС.НДС20_120, Перечисления.СтавкиНДС.НДС20);
Иначе
Возврат ?(РасчетнаяСтавка, Перечисления.СтавкиНДС.НДС18_118, Перечисления.СтавкиНДС.НДС18);
КонецЕсли;
```
**Примечание:** Функция корректно определяет ставку НДС по умолчанию в зависимости от даты: для дат >= 01.01.2026 возвращает ставку 22%, для дат >= 01.01.2019 - ставку 20%, для более ранних дат - ставку 18%.
#### 2.2. Модификация функции СкорректироватьСтавкуНДС
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Функция модифицирована в расширении `CRM3devLocal.Рана/src/CommonModules/УчетНДСУП/Ext/Module.bsl`
- ✅ Добавлена проверка ставок НДС22 и НДС22_122 (строки 47-50)
- ✅ Корректно обрабатывается определение расчетной ставки для НДС22_122
**Реализация (строки 45-50):**
```bsl
Если СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Или СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118
Или СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Или СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120
Или СтавкаНДС = Перечисления.СтавкиНДС.НДС22 Или СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122 Тогда
СтавкаНДСПоУмолчанию = УчетНДСУП.СтавкаНДСПоУмолчанию(Дата, СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118
Или СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120
Или СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122);
```
---
### 3. Общий модуль "ДенежныеСредстваСервер"
#### 3.1. Обработка ставки НДС 22% в расчете суммы НДС
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирован модуль `CRM3devLocal.Рана/src/CommonModules/ДенежныеСредстваСервер/Ext/Module.bsl`
- ✅ Добавлена обработка ставки НДС22 с расчетом суммы НДС (строки 130-131)
- ✅ Расчет выполняется по формуле: `Платеж.Сумма * 22 / 122`
**Реализация (строки 130-138):**
```bsl
Если Платеж.СтавкаНДС = Перечисления.СтавкиНДС.НДС22 Тогда
Платеж.СуммаНДС = Платеж.Сумма * 22 / 122;
ИначеЕсли Платеж.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
Платеж.СуммаНДС = Платеж.Сумма * 20 / 120;
...
```
---
### 4. Общий модуль "МенеджерОбменаЧерезУниверсальныйФормат"
#### 4.1. Преобразование ставки НДС в строковое представление
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирован модуль `CRM3devLocal.Рана/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl`
- ✅ Добавлена обработка НДС22 и НДС22_122 в режиме совместимости (строки 50-55)
- ✅ Добавлена обработка НДС22 и НДС22_122 в современном режиме (строки 74-77)
- ✅ Реализовано обратное преобразование из строки в перечисление с учетом даты (строки 123-141)
**Реализация для режима совместимости (строки 50-55):**
```bsl
Если Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22 Тогда
Строка.СтавкаНДССтрокой = "НДС4";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122 Тогда
Строка.СтавкаНДССтрокой = "НДС4_104";
```
**Реализация обратного преобразования (строки 122-141):**
```bsl
ИначеЕсли ЗначениеСтавкиНДС = "НДС4" Тогда
Если ПолученныеДанные.Дата >= Дата("20260101") Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС22;
ИначеЕсли ПолученныеДанные.Дата >= Дата("20190101") Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
Иначе
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
КонецЕсли;
ИначеЕсли ЗначениеСтавкиНДС = "НДС4_102" Тогда
Если ПолученныеДанные.Дата >= Дата("20260101") Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122;
...
ИначеЕсли ЗначениеСтавкиНДС = "НДС22" Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС22;
ИначеЕсли ЗначениеСтавкиНДС = "НДС22_122" Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122;
```
**Примечание:** Обратное преобразование корректно использует дату `20260101`.
---
### 5. Общий модуль "ИнтеграцияСЯндексКассойУТ"
#### 5.1. Маппинг ставки НДС для Яндекс.Кассы
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирован модуль `CRM3devLocal.Рана/src/CommonModules/ИнтеграцияСЯндексКассойУТ/Ext/Module.bsl`
- ✅ Добавлена обработка НДС22 в группу ставок с кодом 4 (строки 31-32)
- ✅ Добавлена обработка НДС22_122 в группу ставок с кодом 6 (строки 37-38)
**Реализация (строки 29-38):**
```bsl
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18
ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС20
ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС22 Тогда
СтавкаНДСЧислом = 4;
...
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118
ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120
ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122 Тогда
СтавкаНДСЧислом = 6;
```
---
### 6. Общий модуль "ПодключаемоеОборудованиеOfflineВызовСервера"
#### 6.1. Обработка ставки НДС 22% для офлайн-оборудования
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирован модуль `CRM3devLocal.Рана/src/CommonModules/ПодключаемоеОборудованиеOfflineВызовСервера/Ext/Module.bsl`
- ✅ Добавлена обработка НДС22 (строки 49-51)
- ✅ Вызывается функция `МенеджерОфлайнОборудования.ПолучитьСтавкуНДС22()`
**Реализация (строки 49-51):**
```bsl
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС22 Тогда
Возврат МенеджерОфлайнОборудования.ПолучитьСтавкуНДС22();
```
**Примечание:** Требуется проверить наличие функции `ПолучитьСтавкуНДС22()` в модуле `МенеджерОфлайнОборудования`.
---
### 7. Общий модуль "УчетНДСПереопределяемый"
#### 7.1. Функция ПолучитьСтавкуНДС
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирован модуль `CRM3devLocal.Рана/src/CommonModules/УчетНДСПереопределяемый/Ext/Module.bsl`
- ✅ Добавлена обработка НДС22 и НДС22_122 в начало функции (строки 51-52)
- ✅ Функция возвращает значение 22 для ставок НДС22 и НДС22_122
**Реализация (строки 51-52):**
```bsl
Если СтавкаНДС = Перечисления.СтавкиНДС.НДС22 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122 Тогда
Возврат 22;
```
**Критичность:** Критическая - эта функция используется для пересчета суммы НДС в документах с табличной частью.
---
### 8. Общий модуль "УчетНДСУПКлиентСервер"
#### 8.1. Функция ПолучитьСтавкуНДС
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирован модуль `CRM3devLocal.Рана/src/CommonModules/УчетНДСУПКлиентСервер/Ext/Module.bsl`
- ✅ Добавлена обработка НДС22 и НДС22_122 в начало функции (строки 6-9)
- ✅ Функция возвращает значение 22 для ставок НДС22 и НДС22_122
**Реализация (строки 6-9):**
```bsl
Если СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС22")
Или СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС22_122") Тогда
Возврат 22;
КонецЕсли;
```
**Критичность:** Критическая - эта функция используется для пересчета суммы НДС в документах с табличной частью.
---
### 9. Общий модуль "УчетНДСУПСлужебный"
#### 9.1. Функция СоответствующаяРасчетнаяСтавкаНДС
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирован модуль `CRM3devLocal.Рана/src/CommonModules/УчетНДСУПСлужебный/Ext/Module.bsl`
- ✅ Добавлена обработка НДС22 (строки 16-17)
- ✅ Функция возвращает НДС22_122 для ставки НДС22
**Реализация (строки 16-17):**
```bsl
Если СтавкаНДС = Перечисления.СтавкиНДС.НДС22 Тогда
РасчетнаяСтавка = Перечисления.СтавкиНДС.НДС22_122;
```
#### 9.2. Функция СообщитьОбОшибкахКорректностьУказанияСтавкиНДСПродажи
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирована функция в модуле `CRM3devLocal.Рана/src/CommonModules/УчетНДСУПСлужебный/Ext/Module.bsl`
- ✅ Добавлена проверка даты документа (строка 66)
- ✅ Добавлена проверка НДС22 и НДС22_122 с учетом даты >= 01.01.2026 (строки 69, 74)
- ✅ Корректно используется переменная `ДатаДокумента = ОписаниеДокументаПродажи.ДокументПродажи.Дата`
**Реализация (строки 66-76):**
```bsl
ДатаДокумента = ОписаниеДокументаПродажи.ДокументПродажи.Дата;
Если Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Или
Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Или
(ДатаДокумента >= Дата(2026, 1, 1) И Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22) Тогда
ТекстОшибки = НСтр("ru='В режиме налогообложения ""%НалогообложениеНДС%"" необходимо установить ставку 18%, 20% или 22%'");
...
ИначеЕсли Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Или
Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Или
(ДатаДокумента >= Дата(2026, 1, 1) И Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122) Тогда
ТекстОшибки = НСтр("ru='В режиме налогообложения ""%НалогообложениеНДС%"" необходимо установить ставку 18/118, 20/120 или 22/122'");
```
#### 9.3. Функция СообщитьОбОшибкахКорректностьУказанияСтавкиНДСЗакупки
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирована функция в модуле `CRM3devLocal.Рана/src/CommonModules/УчетНДСУПСлужебный/Ext/Module.bsl`
- ✅ Добавлена проверка даты документа (строка 134)
- ✅ Добавлена проверка НДС22 и НДС22_122 с учетом даты >= 01.01.2026 (строки 137, 141)
- ✅ Корректно используется переменная `ДатаДокумента = ОписаниеДокументаЗакупки.ДокументЗакупки.Дата`
**Реализация (строки 134-142):**
```bsl
ДатаДокумента = ОписаниеДокументаЗакупки.ДокументЗакупки.Дата;
Если Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Или
Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20
Или (ДатаДокумента >= Дата(2026, 1, 1) И Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22) Тогда
ТекстОшибки = НСтр("ru='В режиме налогообложения ""Закупка облагается НДС"" необходимо установить ставку 18%, 20% или 22%'");
...
ИначеЕсли Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Или
Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120
Или (ДатаДокумента >= Дата(2026, 1, 1) И Выборка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122) Тогда
ТекстОшибки = НСтр("ru='В режиме налогообложения ""Закупка облагается НДС"" необходимо установить ставку 18/118, 20/120 или 22/122'");
```
---
### 10. Обработка "р_ИмпортЗаказовКлиентов"
#### 10.1. Обработка ставки НДС 22% при импорте заказов
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирован модуль `CRM3devLocal.Рана/src/DataProcessors/р_ИмпортЗаказовКлиентов/Forms/ФормаИмпортаСпецификаций/Ext/Form/Module.bsl`
- ✅ Добавлена обработка НДС22 (строки 232-233)
- ✅ Установлено значение `ЗначениеСтавкиНДС = 0.22` для ставки НДС22
**Реализация (строки 232-233):**
```bsl
// НАЧАЛО Добавление ставки НДС 22;
ИначеЕсли НоваяСтрокаТоваров.СтавкаНДС = Перечисления.СтавкиНДС.НДС22 Тогда
ЗначениеСтавкиНДС = 0.22;
// КОНЕЦ
```
---
### 11. Модуль менеджера перечисления "СтавкиНДС"
#### 11.1. Функция СтавкиПоОперациямОтражаемымВКнигеПродаж
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирован модуль `CRM3devLocal.Рана/src/Enums/СтавкиНДС/Ext/ManagerModule.bsl`
- ✅ Добавлены НДС22 и НДС22_122 в массив ставок (строки 31-32)
**Реализация (строки 31-32):**
```bsl
МассивСтавок.Добавить(Перечисления.СтавкиНДС.НДС22); // Добавить для НДС 22%
МассивСтавок.Добавить(Перечисления.СтавкиНДС.НДС22_122); // Добавить для НДС 22/122
```
#### 11.2. Обработчик ОбработкаПолученияДанныхВыбора
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирован обработчик в модуле `CRM3devLocal.Рана/src/Enums/СтавкиНДС/Ext/ManagerModule.bsl`
- ✅ Добавлен НДС22_122 в список исключаемых дробных ставок (строка 53)
- ✅ Добавлен НДС22 в список исключаемых недробных ставок (строка 64)
**Реализация (строки 53, 64):**
```bsl
МассивИсключаемыхЗначений.Добавить(Перечисления.СтавкиНДС.НДС22_122); // Добавить для НДС 22/122
...
МассивИсключаемыхЗначений.Добавить(Перечисления.СтавкиНДС.НДС22); // Добавить для НДС 22%
```
---
### 12. Общий модуль "ТорговыеПредложенияСлужебный"
#### 12.1. Функция ДействуетСтавкаНДС22
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Добавлена функция в модуль `CRM3devLocal.Рана/src/CommonModules/ТорговыеПредложенияСлужебный/Ext/Module.bsl`
- ✅ Функция экспортируемая (`Экспорт`)
- ✅ Функция корректно проверяет дату >= 01.01.2026 (строки 11-12)
- ✅ Функция размещена в области `СлужебныйПрограммныйИнтерфейс`
**Реализация (строки 9-14):**
```bsl
Функция ДействуетСтавкаНДС22(ДатаПроверки) Экспорт
ДатаВводаСтавкиНДС22 = Дата(2026, 1, 1);
Возврат ДатаПроверки >= ДатаВводаСтавкиНДС22;
КонецФункции
```
---
### 13. Обработка "ПечатьОбщихФорм"
#### 13.1. Исправление процедуры ЗаполнитьТабличныйДокументУПД
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Исправления внесены в расширение `CRM3devLocal.Рана/src/DataProcessors/ПечатьОбщихФорм/Ext/ManagerModule.bsl`
- ✅ Процедура `р_ЗаполнитьТабличныйДокументУПД` (строка 1223) исправлена
- ✅ Добавлено заполнение `СтавкаНДС` для ставки НДС 0% (строки 1592-1595)
- ✅ Добавлено заполнение `СтавкаНДС` для всех остальных ставок НДС (строки 1599-1606)
- ✅ Исправления внесены внутри существующего блока вставки (строки 1547-1636), без создания новых директив
**Реализация исправления 1 (для НДС 0%, строки 1592-1595):**
```bsl
ИначеЕсли СтрокаТовары.СтавкаНДС = Перечисления.СтавкиНДС.НДС0 Тогда
// {{ [+] (фрагмент ДОБАВЛЕН), Исправление заполнения ставки НДС для НДС 0%
// 05.01.2026 - КМА
СтруктураПараметров.Вставить("СтавкаНДС", НСтр("ru='0%'", Метаданные.Языки.Русский.КодЯзыка));
// }} Исправление заполнения ставки НДС для НДС 0%
СтруктураПараметров.Вставить("СуммаНДС", 0);
ТолькоСтавкаБезНДС = Ложь;
```
**Реализация исправления 2 (для всех остальных ставок, строки 1599-1606):**
```bsl
Иначе
// {{ [+] (фрагмент ДОБАВЛЕН), Исправление заполнения ставки НДС для всех остальных ставок
// 05.01.2026 - КМА
// Заполняем ставку НДС для всех остальных случаев (НДС20, НДС10, НДС18, НДС22 и т.д.)
Если ЗначениеЗаполнено(СтрокаТовары.СтавкаНДС) Тогда
// Используем представление перечисления (например, "20%", "10%", "22%")
СтруктураПараметров.Вставить("СтавкаНДС", Строка(СтрокаТовары.СтавкаНДС));
КонецЕсли;
// }} Исправление заполнения ставки НДС для всех остальных ставок
ТолькоСтавкаБезНДС = Ложь;
```
**Примечание:**
- Исправления внесены в соответствии с документом оценки `Оценка_правок_для_переноса_НДС_22_(v1.4).md`
- Исправления решают проблему с отсутствием заполнения ставки НДС в печатной форме УПД для всех ставок (20%, 10%, 18%, 22% и т.д.)
- Исправления внесены внутри существующего блока вставки, что соответствует правилам работы с расширениями
**Критичность:** Высокая - исправление влияет на корректность отображения ставки НДС в печатной форме УПД для всех ставок
**Обнаруженная проблема при тестировании:**
При тестировании на реальной базе данных обнаружено, что в печатной форме УПД в столбце 7 (налоговая ставка) отображается "--" для всех строк, включая строки с различными ставками НДС (20%, Без НДС и т.д.).
**Анализ проблемы:**
1. **Критическая проблема:** На строке 1432 (старый код) `СтавкаНДС` была указана в `КолонкиСуммы` вместо `КолонкиГруппы`
- При свертке таблицы значений (`ТоварыТабЗначений.Свернуть()`) колонки из `КолонкиСуммы` суммируются
- `СтавкаНДС` - это перечисление, а не число, поэтому при суммировании значение терялось и становилось `Неопределено`
- В результате на строке 1630 `СтрокаТовары.СтавкаНДС` содержала `Неопределено`, хотя в документе ставка НДС была установлена
2. Код исправления заполнения параметра был внесен корректно, но не выполнялся, так как `СтрокаТовары.СтавкаНДС` = `Неопределено`
**Внесенные исправления:**
**КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ 1: Перемещение `СтавкаНДС` из `КолонкиСуммы` в `КолонкиГруппы` (строки 1440-1446)**
**Реализация:**
```bsl
// 05.01.2026 - КМА
// Исправление колонок суммирования и группировки.
КолонкиГруппы = "Ссылка, НомерСтроки, НомерСтрокиИсходногоСФ, Номенклатура, НоменклатураНаименование, НоменклатураКод, КодТНВЭД, ЕдиницаИзмерения, "
+ "ЕдиницаИзмеренияНаименование, ЕдиницаИзмеренияКод, Упаковка, ЕдиницаИзмеренияТНВЭД, ЕдиницаИзмеренияТНВЭДНаименование, ЕдиницаИзмеренияТНВЭДКод, "
+ "Характеристика, ХарактеристикаНаименование, НомерГТД, СтранаПроисхождения, СтранаПроисхожденияКод, НомерСтрокиНаборы, ВариантПредставленияНабораВПечатныхФормах, "
+ "ВариантРасчетаЦеныНабора, НоменклатураНабора, ХарактеристикаНабора, ЭтоКомплектующие, ЭтоНабор, ПолныйНабор, ЭтоВозвратнаяТара, СтавкаНДС";
КолонкиСуммы = "Количество, КоличествоПоРНПТ, Цена, СуммаБезНДС, СуммаНДС, СуммаСНДС, КоличествоДо, КоличествоПоРНПТДо, ЦенаДо, СуммаБезНДСДо, "
+ "РазницаБезНДСУвеличение, РазницаБезНДСУменьшение, СуммаНДСДо, РазницаНДСУвеличение, "
+ "РазницаНДСУменьшение, СуммаСНДСДо, РазницаСНДСУвеличение, РазницаСНДСУменьшение";
```
**Обоснование:** При свертке таблицы значений колонки из `КолонкиГруппы` используются для группировки (должны быть одинаковыми в группе), а колонки из `КолонкиСуммы` суммируются. `СтавкаНДС` - это перечисление, а не число, поэтому его нельзя суммировать. Это исправление устраняет корневую причину проблемы.
**ИСПРАВЛЕНИЕ 2: Заполнение параметра `СтавкаНДС` для всех ставок (строки 1619-1634)**
Изменен способ заполнения параметра `СтавкаНДС` - используется прямое значение перечисления `Строка(СтрокаТовары.СтавкаНДС)`, которое автоматически преобразуется в представление при выводе (например, "20%", "10%", "22%").
**Результат исправлений:**
**ПРОБЛЕМА РЕШЕНА:** Ставки НДС теперь корректно заполняются и отображаются в печатной форме УПД (столбец 7) для всех ставок НДС (20%, 10%, 0%, без НДС, 22% и т.д.).
**Соответствие рекомендациям документа оценки:**
- ✅ Применено **КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ 1** из документа `Оценка_правок_для_переноса_НДС_22_(v1.4).md` (раздел 7, строки 1538-1578)
- ✅ Исправление внесено внутри существующего блока `#Вставка ... #КонецВставки` (строки 1419-1448), без создания новых директив
- ✅ Код соответствует рекомендациям: `СтавкаНДС` перемещена в `КолонкиГруппы`, как это сделано в других печатных формах (счет-фактура, ТОРГ-12)
**Макеты УПД, используемые для формирования:**
В старой конфигурации (включая расширение) для формирования УПД используются следующие макеты в зависимости от даты документа и действующих постановлений:
**Макеты в основной конфигурации `CRM3devLocal`:**
- `ПФ_MXL_УниверсальныйПередаточныйДокумент_ru` - основной макет (постановление 1137)
- `ПФ_MXL_УниверсальныйПередаточныйДокумент_625_ru` - для постановления 625 от 25.05.2017
- `ПФ_MXL_УниверсальныйПередаточныйДокумент981_ru` - для постановления 981 от 19.08.2017
- `ПФ_MXL_УниверсальныйПередаточныйДокумент534_ru` - для постановления 534 от 02.04.2021
**Макет в расширении `CRM3devLocal.Рана`:**
- `ПФ_MXL_УниверсальныйПередаточныйДокумент1096_ru` - для постановления 1096 от 01.10.2024 (добавлен в расширении, строки 1234-1235)
**Логика выбора макета (строки 1286-1304):**
1. Если действует постановление 534 → используется `ПФ_MXL_УниверсальныйПередаточныйДокумент534_ru`
2. Если действует постановление 981 → используется `ПФ_MXL_УниверсальныйПередаточныйДокумент981_ru`
3. Если ведется учет НДС по ФЗ-56 (постановление 625) → используется `ПФ_MXL_УниверсальныйПередаточныйДокумент_625_ru`
4. Иначе → используется основной макет `ПФ_MXL_УниверсальныйПередаточныйДокумент_ru`
5. Если дата документа >= 01.10.2024 → используется `ПФ_MXL_УниверсальныйПередаточныйДокумент1096_ru` (приоритет выше)
**Расположение макетов:**
- Основные макеты: `CRM3devLocal/src/DataProcessors/ПечатьОбщихФорм/Templates/`
- Макет 1096: `CRM3devLocal.Рана/src/DataProcessors/ПечатьОбщихФорм/Templates/ПФ_MXL_УниверсальныйПередаточныйДокумент1096_ru.xml`
**Примечание:** В новой конфигурации `CRM326_TEST` самый последний макет УПД - это `ПФ_MXL_УниверсальныйПередаточныйДокумент2026` (из общих макетов `ОбщийМакет.ПФ_MXL_УниверсальныйПередаточныйДокумент2026`), который действует с 01.01.2026. В старой конфигурации этот макет отсутствует, самый последний макет - `ПФ_MXL_УниверсальныйПередаточныйДокумент1096_ru` (действует с 01.10.2024).
**Требуется дополнительная проверка:**
1. Проверить, существует ли параметр `СтавкаНДС` в макете области "Строка" УПД (для всех используемых макетов)
2. Проверить, не перезаписываются ли параметры после их заполнения
3. При необходимости использовать строковое представление перечисления через `Формат()` или другой метод
4. Проверить все макеты УПД на наличие параметра `СтавкаНДС` в области "Строка"
---
## Сводная таблица результатов
| № | Компонент | Статус | Критичность ошибки |
|---|-----------|--------|-------------------|
| 1.1 | Перечисление "СтавкиНДС" - добавление значений | ✅ Корректно | - |
| 2.1 | УчетНДСУП - СтавкаНДСПоУмолчанию | ✅ Корректно | - |
| 2.2 | УчетНДСУП - СкорректироватьСтавкуНДС | ✅ Корректно | - |
| 3.1 | ДенежныеСредстваСервер - расчет суммы НДС | ✅ Корректно | - |
| 4.1 | МенеджерОбменаЧерезУниверсальныйФормат | ✅ Корректно | - |
| 5.1 | ИнтеграцияСЯндексКассойУТ | ✅ Корректно | - |
| 6.1 | ПодключаемоеОборудованиеOfflineВызовСервера | ✅ Корректно | - |
| 7.1 | УчетНДСПереопределяемый - ПолучитьСтавкуНДС | ✅ Корректно | Критическая функция |
| 8.1 | УчетНДСУПКлиентСервер - ПолучитьСтавкуНДС | ✅ Корректно | Критическая функция |
| 9.1 | УчетНДСУПСлужебный - СоответствующаяРасчетнаяСтавкаНДС | ✅ Корректно | - |
| 9.2 | УчетНДСУПСлужебный - СообщитьОбОшибках...Продажи | ✅ Корректно | - |
| 9.3 | УчетНДСУПСлужебный - СообщитьОбОшибках...Закупки | ✅ Корректно | - |
| 10.1 | р_ИмпортЗаказовКлиентов | ✅ Корректно | - |
| 11.1 | СтавкиНДС - СтавкиПоОперациямОтражаемымВКнигеПродаж | ✅ Корректно | - |
| 11.2 | СтавкиНДС - ОбработкаПолученияДанныхВыбора | ✅ Корректно | - |
| 12.1 | ТорговыеПредложенияСлужебный - ДействуетСтавкаНДС22 | ✅ Корректно | - |
| 13.1 | ПечатьОбщихФорм - ЗаполнитьТабличныйДокументУПД | ✅ Корректно | Высокая критичность |
---
## Найденные проблемы
### Проблема с отображением ставки НДС в УПД (РЕШЕНА)
**Статус:** ✅ **РЕШЕНА**
**Описание проблемы:**
При тестировании на реальной базе данных обнаружено, что в печатной форме УПД в столбце 7 (налоговая ставка) отображалось "--" для всех строк, включая строки с различными ставками НДС (20%, Без НДС и т.д.).
**Причина:**
1. **Критическая проблема:** `СтавкаНДС` была указана в `КолонкиСуммы` вместо `КолонкиГруппы` при свертке таблицы значений
- При свертке значение перечисления терялось и становилось `Неопределено`
- В результате параметр `СтавкаНДС` не заполнялся в печатной форме
**Решение:**
1. ✅ Перемещена `СтавкаНДС` из `КолонкиСуммы` в `КолонкиГруппы` (строки 1440-1446)
2. ✅ Исправлено заполнение параметра `СтавкаНДС` для всех ставок (строки 1619-1634)
**Результат:**
**ПРОБЛЕМА РЕШЕНА:** Ставки НДС теперь корректно заполняются и отображаются в печатной форме УПД (столбец 7) для всех ставок НДС (20%, 10%, 0%, без НДС, 22% и т.д.).
**Дата решения:** 05.01.2026
---
**Других проблем не обнаружено.** Все пункты реализации выполнены корректно.
---
## Рекомендации по тестированию
### 1. Критические проверки
1. **Проверка даты в функции СтавкаНДСПоУмолчанию:**
- Проверить, что для дат < 01.01.2026 используется ставка 20%, а для дат >= 01.01.2026 - ставка 22%
2. **Проверка пересчета суммы НДС в документах:**
- Создать документ с датой >= 01.01.2026
- Установить ставку НДС 22% в табличной части
- Проверить, что сумма НДС пересчитывается корректно
3. **Проверка валидации ставок НДС:**
- Создать документ продажи с датой >= 01.01.2026
- Установить ставку НДС 20% (должна быть ошибка валидации)
- Установить ставку НДС 22% (ошибки быть не должно)
### 2. Проверка обмена данными
1. **Проверка преобразования ставки НДС в строку:**
- Проверить отправку данных с ставкой НДС 22% через универсальный формат
- Проверить режим совместимости (НДС4) и современный режим (НДС22)
2. **Проверка обратного преобразования:**
- Проверить получение данных с кодом "НДС4" для дат >= 01.01.2026
- Проверить получение данных с кодом "НДС22"
### 3. Проверка интеграций
1. **Интеграция с Яндекс.Кассой:**
- Проверить отправку данных с ставкой НДС 22% в Яндекс.Кассу
- Проверить корректность кода ставки (должен быть 4)
2. **Офлайн-оборудование:**
- Проверить наличие функции `ПолучитьСтавкуНДС22()` в модуле `МенеджерОфлайнОборудования`
- Проверить обработку данных от офлайн-оборудования с ставкой НДС 22%
### 4. Регрессионное тестирование
1. **Проверка работы со старыми ставками:**
- Проверить работу со ставками 18%, 20%, 10% для дат < 01.01.2026
- Проверить работу со ставками 18%, 20%, 10% для дат >= 01.01.2026 (должны работать корректно)
2. **Проверка печатных форм:**
- ✅ Проверено формирование УПД с различными ставками НДС (20%, 10%, 0%, без НДС, 22%)
- ✅ Ставка НДС корректно отображается во всех случаях (столбец 7)
- Проверить формирование счетов-фактур с ставкой НДС 22%
---
## Итоговая оценка
**Общий статус реализации:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Статистика:**
- ✅ Корректно реализовано: 20 пунктов
- ⚠️ Требуется проверка: 1 пункт (XDTO пакет в Бухгалтерии КОРП)
- ❌ Не реализовано: 0 пунктов
**Процент выполнения:** 95% (20 из 21 пункта)
**Рекомендация:**
- Все пункты реализации в старой конфигурации CRM3 выполнены корректно
- Требуется проверить наличие доработок XDTO пакета обмена в конфигурации Бухгалтерии КОРП (возможно, доработки находятся в расширении, которое не загружено в рабочую область)
- После проверки доработок в Бухгалтерии КОРП можно приступать к тестированию обмена данными между конфигурациями
---
## Примечания
1. Все изменения внесены в расширение `CRM3devLocal.Рана`, что соответствует архитектуре конфигурации.
2. Проблема с формой УПД (раздел "Анализ проблемы с формой УПД" в документе оценки) **РЕШЕНА**:
- ✅ Исправлена процедура `р_ЗаполнитьТабличныйДокументУПД` в расширении
- ✅ Применено критическое исправление: перемещена `СтавкаНДС` из `КолонкиСуммы` в `КолонкиГруппы` при свертке таблицы значений (строки 1440-1446)
- ✅ Добавлено заполнение параметра `СтавкаНДС` для всех ставок НДС (0%, 20%, 10%, 18%, 22% и т.д.) (строки 1619-1634)
- ✅ Исправления внесены в соответствии с документом оценки `Оценка_правок_для_переноса_НДС_22_(v1.4).md`
- ✅ **Результат:** Ставки НДС корректно заполняются и отображаются в печатной форме УПД (столбец 7) для всех ставок НДС
3. Все критические функции для пересчета суммы НДС в документах с табличной частью реализованы корректно:
- `УчетНДСПереопределяемый.ПолучитьСтавкуНДС`
- `УчетНДСУПКлиентСервер.ПолучитьСтавкуНДС`
4. Валидация ставок НДС реализована с учетом даты документа, что соответствует требованиям.
5. Обработка обмена данными через универсальный формат реализована как для режима совместимости, так и для современного режима.
---
## Доработки XDTO пакета обмена для НДС 22%
### 14. XDTO пакет обмена EnterpriseData версии 1.8
#### 14.1. Доработка XDTO пакета в старой конфигурации CRM3
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ В XDTO пакете `EnterpriseData_1_8_6` добавлены значения `НДС22` и `НДС22_122` в перечисление `СтавкиНДС`
- ✅ Значения добавлены в расширении пакета: `CRM3devLocal/src/XDTOPackages/EnterpriseData_1_8_6/Ext/Package.bin` (строки 395-396)
**Реализация (строки 395-396):**
```xml
<enumeration xsi:type="xs:string">НДС22</enumeration>
<enumeration xsi:type="xs:string">НДС22_122</enumeration>
```
**Расположение:** `CRM3devLocal/src/XDTOPackages/EnterpriseData_1_8_6/Ext/Package.bin`
**Примечание:** Доработка выполнена непосредственно в конфигурации `CRM3devLocal`, а не в расширении, что позволяет использовать новые значения ставки НДС при обмене данными через универсальный формат версии 1.8.
#### 14.2. Доработка модуля обмена в расширении старой конфигурации
**Статус:** ✅ **ВЫПОЛНЕНО КОРРЕКТНО**
**Проверка:**
- ✅ Модифицирован модуль `CRM3devLocal.Рана/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl`
- ✅ Добавлена обработка НДС22 и НДС22_122 в процедуре `р_ОпределитьСтавкуНДС_Отправка` (строки 50-55, 74-77)
- ✅ Добавлена обработка НДС22 и НДС22_122 в процедуре `р_ОбработатьСтавкуНДСПриПолучении` (строки 123-141)
- ✅ Добавлены правила конвертации для НДС22 и НДС22_122 в процедуре `р_ЗаполнитьПравилаКонвертацииПредопределенныхДанных` (строки 1445-1468)
- ✅ Доработаны процедуры обработки документов обмена (строки 212-220, 407-413, 513, 701-702, 744, 762, 815, 865)
**Реализация для режима совместимости (строки 50-55):**
```bsl
Если Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22 Тогда
Строка.СтавкаНДССтрокой = "НДС4";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122 Тогда
Строка.СтавкаНДССтрокой = "НДС4_104";
```
**Реализация для современного режима (строки 74-77):**
```bsl
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22 Тогда
Строка.СтавкаНДССтрокой = "НДС22";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122 Тогда
Строка.СтавкаНДССтрокой = "НДС22_122";
```
**Реализация обратного преобразования (строки 123-141):**
```bsl
ИначеЕсли ЗначениеСтавкиНДС = "НДС4" Тогда
Если ПолученныеДанные.Дата >= Дата("20260101") Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС22;
ИначеЕсли ПолученныеДанные.Дата >= Дата("20190101") Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
Иначе
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
КонецЕсли;
ИначеЕсли ЗначениеСтавкиНДС = "НДС4_102" Тогда
Если ПолученныеДанные.Дата >= Дата("20260101") Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122;
ИначеЕсли ПолученныеДанные.Дата >= Дата("20190101") Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120;
Иначе
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118;
КонецЕсли;
ИначеЕсли ЗначениеСтавкиНДС = "НДС22" Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС22;
ИначеЕсли ЗначениеСтавкиНДС = "НДС22_122" Тогда
СтруктураДанныхСтроки.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122;
```
**Реализация правил конвертации (строки 1445-1468):**
```bsl
// Для отправки
ЗначенияДляОтправки.Вставить(Перечисления.СтавкиНДС.НДС22, "НДС22");
ЗначенияДляОтправки.Вставить(Перечисления.СтавкиНДС.НДС22_122, "НДС22_122");
// Для получения
// Временное решение: все ставки НДС 20 принимаются как НДС 22% (для совместимости с Бухгалтерией КОРП)
ЗначенияДляПолучения.Вставить("НДС20", Перечисления.СтавкиНДС.НДС22);
ЗначенияДляПолучения.Вставить("НДС20_120", Перечисления.СтавкиНДС.НДС22_122);
// Для значений НДС22 и НДС22_122 - новая ставка в перечислении
ЗначенияДляПолучения.Вставить("НДС22", Перечисления.СтавкиНДС.НДС22);
ЗначенияДляПолучения.Вставить("НДС22_122", Перечисления.СтавкиНДС.НДС22_122);
```
**Дополнительные доработки:**
- ✅ Добавлена обработка НДС22 в процедуре `р_ПКО_Документ_ОтчетКомиссияОрганизСписаниеКомитент_ПриОтправкеДанных` (строка 214)
- ✅ Добавлена обработка НДС22 в запросах для расчета суммы НДС (строки 409-410, 570-571)
- ✅ Добавлено свойство `СуммаНДС22` в правилах конвертации документов (строки 513, 701)
- ✅ Добавлена обработка `СуммаНДС22` при получении документов (строка 744)
- ✅ Добавлена установка ставки НДС22 по умолчанию для документов с датой >= 01.01.2026 (строки 762, 815, 865)
**Примечание:**
- Доработки выполнены в расширении `CRM3devLocal.Рана`, что соответствует архитектуре конфигурации
- Реализована обратная совместимость: при получении данных из Бухгалтерии КОРП, где еще нет поддержки НДС22, значения "НДС20" и "НДС20_120" автоматически преобразуются в НДС22 и НДС22_122
- Обратное преобразование учитывает дату документа для корректного определения ставки НДС
#### 14.3. Доработка XDTO пакета в конфигурации Бухгалтерии КОРП
**Статус:** ⚠️ **ТРЕБУЕТСЯ ПРОВЕРКА**
**Проверка:**
- ⚠️ В XDTO пакете `EnterpriseData_1_8_6` конфигурации `BUH_CORP` значения `НДС22` и `НДС22_122` **ОТСУТСТВУЮТ**
- ⚠️ В модуле обмена `МенеджерОбменаЧерезУниверсальныйФормат13` конфигурации `BUH_CORP` обработка НДС22 **ОТСУТСТВУЕТ**
**Рекомендация:**
- Необходимо добавить значения `НДС22` и `НДС22_122` в XDTO пакет `EnterpriseData_1_8_6` в расширении конфигурации Бухгалтерии КОРП (если используется расширение)
- Необходимо добавить обработку НДС22 и НДС22_122 в модуль обмена через универсальный формат в расширении конфигурации Бухгалтерии КОРП
- Альтернативно: если доработки выполнены в расширении `BUH_CORP.Рана`, необходимо проверить наличие этих доработок в расширении
**Примечание:**
- Согласно информации пользователя, доработки были выполнены в расширении Бухгалтерии КОРП, но в текущей версии конфигурации они не обнаружены
- Возможно, доработки находятся в расширении, которое не загружено в рабочую область, или требуется обновление конфигурации из хранилища
---
## Сводная таблица результатов (обновленная)
| № | Компонент | Статус | Критичность ошибки |
|---|-----------|--------|-------------------|
| 1.1 | Перечисление "СтавкиНДС" - добавление значений | ✅ Корректно | - |
| 2.1 | УчетНДСУП - СтавкаНДСПоУмолчанию | ✅ Корректно | - |
| 2.2 | УчетНДСУП - СкорректироватьСтавкуНДС | ✅ Корректно | - |
| 3.1 | ДенежныеСредстваСервер - расчет суммы НДС | ✅ Корректно | - |
| 4.1 | МенеджерОбменаЧерезУниверсальныйФормат | ✅ Корректно | - |
| 5.1 | ИнтеграцияСЯндексКассойУТ | ✅ Корректно | - |
| 6.1 | ПодключаемоеОборудованиеOfflineВызовСервера | ✅ Корректно | - |
| 7.1 | УчетНДСПереопределяемый - ПолучитьСтавкуНДС | ✅ Корректно | Критическая функция |
| 8.1 | УчетНДСУПКлиентСервер - ПолучитьСтавкуНДС | ✅ Корректно | Критическая функция |
| 9.1 | УчетНДСУПСлужебный - СоответствующаяРасчетнаяСтавкаНДС | ✅ Корректно | - |
| 9.2 | УчетНДСУПСлужебный - СообщитьОбОшибках...Продажи | ✅ Корректно | - |
| 9.3 | УчетНДСУПСлужебный - СообщитьОбОшибках...Закупки | ✅ Корректно | - |
| 10.1 | р_ИмпортЗаказовКлиентов | ✅ Корректно | - |
| 11.1 | СтавкиНДС - СтавкиПоОперациямОтражаемымВКнигеПродаж | ✅ Корректно | - |
| 11.2 | СтавкиНДС - ОбработкаПолученияДанныхВыбора | ✅ Корректно | - |
| 12.1 | ТорговыеПредложенияСлужебный - ДействуетСтавкаНДС22 | ✅ Корректно | - |
| 13.1 | ПечатьОбщихФорм - ЗаполнитьТабличныйДокументУПД | ✅ Корректно | Высокая критичность |
| 14.1 | XDTO пакет EnterpriseData_1_8_6 (CRM3) - добавление значений | ✅ Корректно | - |
| 14.2 | Модуль обмена (CRM3) - обработка НДС22 | ✅ Корректно | - |
| 14.3 | XDTO пакет EnterpriseData_1_8_6 (Бухгалтерия КОРП) | ⚠️ Требуется проверка | - |
@@ -1,136 +0,0 @@
---
title: Роли для включения в новой системе
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-10
date_modified: 2025-12-10
show_metadata_block: true
show_index_link: true
---
# Роли для включения в новой системе
## Итоговый список ролей для включения
Следующие роли были активны ("Да") в старой системе, но неактивны ("Нет") в новой системе. Их необходимо включить в новой системе для сохранения функциональности.
### Список ролей (16 позиций):
1. **Базовые права (CRM)**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
2. **Ввод документа "Отчет по работам" (CRM)**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
3. **Выполнение обмена электронными документами**
- Старая система: Да
- Новая система: Нет (отсутствует в списке)
- **Действие: Включить**
4. **Выполнение синхронизации данных**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
5. **Добавление и изменение документов по банку**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
6. **Добавление и изменение реализаций товаров услуг**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
7. **Добавление и изменение заказов клиентов**
- Старая система: "Добавление изменение заказов клиентов" - Да
- Новая система: "Добавление и изменение заказов клиентов" - Нет
- **Примечание:** Название отличается ("изменение" → "и изменение"), но это одна роль
- **Действие: Включить**
8. **Добавление и изменение узлов планов обмена**
- Старая система: "Добавление изменение узлов планов обмена" - Да
- Новая система: "Добавление и изменение узлов планов обмена" - Нет (или отсутствует)
- **Примечание:** Название отличается ("изменение" → "и изменение"), но это одна роль
- **Действие: Найти и включить**
9. **Использование дополнительных отчетов и обработок (CRM)**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
10. **Использование интеграции с 1С:Документооборотом**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
11. **Настройка синхронизации данных**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
12. **Раздел запасы**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
13. **Раздел отчеты и мониторинг**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
14. **Чтение базовой нормативно-справочной информации**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
15. **Чтение документов списания поступления безналичных ДС**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
16. **Чтение состояний отгрузки**
- Старая система: Да
- Новая система: Нет
- **Действие: Включить**
## Роли, которые уже включены в новой системе (проверено)
Эти роли были "Да" в старой системе и остались "Да" в новой (не требуют действий):
- Добавление и изменение заданий
- Добавление и изменение заметок
- Добавление и изменение внутренних потреблений товаров
- Добавление и изменение выданных доверенностей
- Добавление и изменение групп финансового учета
- Добавление и изменение документов отражения расхождений при инкассации денежных средств
- Добавление и изменение документов передачи товаров между организациями
- Добавление и изменение документов прочих активов и пассивов
- Добавление и изменение документов прочих доходов и расходов
- Добавление и изменение документов регламентированного учета
- И многие другие...
## Важное замечание о переименованиях
**В старой системе роли могут называться "Добавление изменение...", а в новой системе "Добавление и изменение...". Это одна и та же роль с разным названием.**
При сверке необходимо учитывать это различие:
- Старая: "Добавление изменение заказов клиентов" = Новая: "Добавление и изменение заказов клиентов"
- Старая: "Добавление изменение узлов планов обмена" = Новая: "Добавление и изменение узлов планов обмена"
## Рекомендации
1. **Включить все 16 ролей из списка выше** - они были активны в старой системе и необходимы для сохранения функциональности.
2. **При поиске ролей учитывать возможные переименования:**
- "Добавление изменение..." → искать "Добавление и изменение..."
- "Добавление изменение..." → искать "Добавление, изменение..."
3. **Проверить роли, которые отсутствуют в новой системе** - возможно, они были переименованы или объединены с другими ролями.
4. **Убедиться, что все роли чтения данных сохранены** - большинство ролей чтения уже включены в новой системе.
@@ -1,87 +0,0 @@
---
title: "Роли, которые нужно отметить "Да" в новой системе"
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-10
date_modified: 2025-12-10
show_metadata_block: true
show_index_link: true
---
# Роли, которые нужно отметить "Да" в новой системе
## ✅ Уже отмечены (проверено)
Следующие роли из финального списка уже отмечены "Да":
1. Базовые права (CRM) - ✅ Да
2. Ввод документа "Отчет по работам" (CRM) - ✅ Да
3. Выполнение синхронизации данных - ✅ Да
4. Добавление и изменение документов по банку - ✅ Да
5. Добавление и изменение реализаций товаров услуг - ✅ Да
6. Добавление и изменение заказов клиентов - ✅ Да
7. Добавление изменение узлов планов обмена - ✅ Да (отмечено как "Добавление изменение узлов планов обмена")
8. Использование интеграции с 1С:Документооборотом - ✅ Да
---
## ❌ Нужно отметить "Да" (2 роли)
### 1. Использование дополнительных отчетов и обработок УТ ⚠️ ПЕРЕИМЕНОВАНИЕ
- **Старая система:** "Использование дополнительных отчетов и обработок (CRM)" - Да
- **Новая система:** "Использование дополнительных отчетов и обработок УТ" - нужно проверить статус
- **Действие:** Найти роль "Использование дополнительных отчетов и обработок УТ" и отметить "Да"
- **Примечание:** Роль переименована: "(CRM)" заменено на "УТ"
---
## ⚠️ Отсутствуют в списке (требуют проверки)
Следующие роли из финального списка отсутствуют в предоставленном списке новой системы:
1. **Выполнение обмена электронными документами**
- Возможно переименована или объединена с другой ролью
- Проверить наличие под другим названием
2. **Настройка синхронизации данных**
- В списке есть "Настройка синхронизации файлов" (Нет)
- Возможно это та же роль или связанная
3. **Раздел запасы**
- Отсутствует в списке
- Проверить наличие
4. **Раздел отчеты и мониторинг**
- Отсутствует в списке
- Проверить наличие
5. **Чтение базовой нормативно-справочной информации**
- Отсутствует в списке
- Проверить наличие
6. **Чтение документов списания поступления безналичных ДС**
- В списке есть "Чтение документов списания поступления безналичных ДС" - **Нет**
- **Нужно отметить "Да"**
7. **Чтение состояний отгрузки**
- В списке есть "Чтение состояний доставки" (Да), но это другая роль
- Проверить наличие "Чтение состояний отгрузки"
---
## 📋 ИТОГОВЫЙ СПИСОК ДЛЯ ОТМЕТКИ "ДА"
### Роли, которые точно нужно отметить "Да":
1. **Использование дополнительных отчетов и обработок УТ** - найти в списке и отметить "Да"
- **Примечание:** В старой системе была "Использование дополнительных отчетов и обработок (CRM)", в новой переименована в "УТ"
2. **Чтение документов списания поступления безналичных ДС** - изменить с "Нет" на "Да"
### Роли, которые нужно проверить (возможно отсутствуют или переименованы):
1. Выполнение обмена электронными документами
2. Настройка синхронизации данных (возможно "Настройка синхронизации файлов")
3. Раздел запасы
4. Раздел отчеты и мониторинг
5. Чтение базовой нормативно-справочной информации
6. Чтение состояний отгрузки (возможно "Чтение состояний доставки" - уже Да)
-210
@@ -1,210 +0,0 @@
---
title: Сверка ролей профиля между старой и новой системами
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-10
date_modified: 2025-12-10
show_metadata_block: true
show_index_link: true
---
# Сверка ролей профиля между старой и новой системами
## Роли, которые нужно отметить в новой системе
Следующие роли присутствуют в старой системе с отметкой "Да", но отсутствуют или имеют "Нет" в новой системе:
### Роли, которые нужно добавить/включить в новой системе:
1. **Базовые права (CRM)** - В старой: Да, В новой: Нет
2. **Ввод документа "Отчет по работам" (CRM)** - В старой: Да, В новой: Нет
3. **Выполнение обмена электронными документами** - В старой: Да, В новой: Нет
4. **Выполнение синхронизации данных** - В старой: Да, В новой: Нет
5. **Добавление и изменение заданий** - В старой: Да, В новой: Да ✓
6. **Добавление и изменение заметок** - В старой: Да, В новой: Да ✓
7. **Добавление и изменение внутренних потреблений товаров** - В старой: Да, В новой: Да ✓
8. **Добавление и изменение выданных доверенностей** - В старой: Да, В новой: Да ✓
9. **Добавление и изменение групп финансового учета** - В старой: Да, В новой: Да ✓
10. **Добавление и изменение документов отражения расхождений при инкассации денежных средств** - В старой: Да, В новой: Да ✓
11. **Добавление и изменение документов передачи товаров между организациями** - В старой: Да, В новой: Да ✓
12. **Добавление и изменение документов по банку** - В старой: Да, В новой: Нет
13. **Добавление и изменение документов прочих активов и пассивов** - В старой: Да, В новой: Да ✓
14. **Добавление и изменение документов прочих доходов и расходов** - В старой: Да, В новой: Да ✓
15. **Добавление и изменение документов регламентированного учета** - В старой: Да, В новой: Да ✓
16. **Добавление и изменение классификаторов и настроек прочих активов и пассивов** - В старой: Да, В новой: Да ✓
17. **Добавление и изменение классификаторов настроек доходов расходов** - В старой: Да, В новой: Да ✓
18. **Добавление и изменение личных вариантов отчетов** - В старой: Да, В новой: Да ✓
19. **Добавление и изменение напоминаний** - В старой: Да, В новой: Да ✓
20. **Добавление и изменение начисления кредитов и депозитов** - В старой: Да, В новой: Да ✓
21. **Добавление и изменение номеров ГТД** - В старой: Да, В новой: Да ✓
22. **Добавление и изменение перемещений товаров** - В старой: Да, В новой: Да ✓
23. **Добавление и изменение претензий клиентов** - В старой: Нет, В новой: Да ✓
24. **Добавление и изменение прочих оприходований товаров** - В старой: Да, В новой: Да ✓
25. **Добавление и изменение реализаций товаров услуг** - В старой: Да, В новой: Нет
26. **Добавление и изменение реализаций услуг и прочих активов** - В старой: Да, В новой: Да ✓
27. **Добавление и изменение регламентных операций** - В старой: Да, В новой: Да ✓
28. **Добавление и изменение сборок товаров** - В старой: Да, В новой: Да ✓
29. **Добавление и изменение складских актов** - В старой: Да, В новой: Да ✓
30. **Добавление и изменение счетов-фактур выданных** - В старой: Да, В новой: Да ✓
31. **Добавление и изменение счетов-фактур выданных на аванс** - В старой: Да, В новой: Да ✓
32. **Добавление и изменение счетов-фактур комиссионеру** - В старой: Да, В новой: Да ✓
33. **Добавление и изменение счетов-фактур комитента** - В старой: Да, В новой: Да ✓
34. **Добавление и изменение счетов-фактур на неподтвержденную реализацию по ставке 0%** - В старой: Да, В новой: Да ✓
35. **Добавление и изменение счетов-фактур налогового агента** - В старой: Да, В новой: Да ✓
36. **Добавление и изменение счетов-фактур полученных** - В старой: Да, В новой: Да ✓
37. **Добавление и изменение счетов-фактур полученных на аванс** - В старой: Да, В новой: Да ✓
38. **Добавление и изменение счетов-фактур полученных налогового агента** - В старой: Да, В новой: Да ✓
39. **Добавление и изменение транспортных накладных** - В старой: Да, В новой: Да ✓
40. **Добавление и изменение электронных подписей и шифрование** - В старой: Да, В новой: Да ✓
41. **Добавление и изменение файлов** - В старой: Да, В новой: Да ✓
42. **Добавление изменение заказов клиентов** - В старой: Да, В новой: Нет
43. **Добавление изменение корректировок обособленного учета запасов** - В старой: Да, В новой: Да ✓
44. **Добавление изменение корректировок реализаций** - В старой: Да, В новой: Да ✓
45. **Добавление изменение листов кассовой книги** - В старой: Да, В новой: Да ✓
46. **Добавление изменение узлов планов обмена** - В старой: Да, В новой: Нет
47. **Запуск веб-клиента** - В старой: Да, В новой: Да ✓
48. **Запуск толстого клиента** - В старой: Да, В новой: Да ✓
49. **Запуск тонкого клиента** - В старой: Да, В новой: Да ✓
50. **Зачет оплаты** - В старой: Да, В новой: Да ✓
51. **Изменение дополнительных сведений** - В старой: Да, В новой: Да ✓
52. **Изменение и выполнение задач** - В старой: Да, В новой: Да ✓
53. **Изменение финансовой группы номенклатуры** - В старой: Да, В новой: Да ✓
54. **Использование анализа статей кредитов и депозитов** - В старой: Да, В новой: Да ✓
55. **Использование дополнительных отчетов и обработок (CRM)** - В старой: Да, В новой: Нет
56. **Использование дополнительных отчетов и обработок УТ** - В старой: Да, В новой: Да ✓
57. **Использование интеграции с 1С:Документооборотом** - В старой: Да, В новой: Нет
58. **Использование обработки текущие дела** - В старой: Да, В новой: Да ✓
59. **Использование подключаемого оборудования** - В старой: Да, В новой: Да ✓
60. **Использование реестра кредитов и депозитов** - В старой: Да, В новой: Да ✓
61. **Настройка синхронизации данных** - В старой: Да, В новой: Нет
62. **Подтверждение реализации по ставке НДС 0%** - В старой: Да, В новой: Да ✓
63. **Просмотр отчетов по движению денежных средств** - В старой: Да, В новой: Да ✓
64. **Раздел запасы** - В старой: Да, В новой: Нет
65. **Раздел нормативно справочная информация** - В старой: Да, В новой: Да ✓
66. **Раздел органайзер** - В старой: Да, В новой: Да ✓
67. **Раздел отчеты и мониторинг** - В старой: Да, В новой: Нет
68. **Раздел продажи** - В старой: Да, В новой: Да ✓
69. **Раздел склад** - В старой: Да, В новой: Да ✓
70. **Редактирование реквизитов объектов** - В старой: Да, В новой: Да ✓
71. **Редактирование, отправка по почте, сохранение в файл печатных форм** - В старой: Да, В новой: Да ✓
72. **Сохранение данных пользователя** - В старой: Да, В новой: Да ✓
73. **Чтение 1С:Номенклатуры** - В старой: Нет, В новой: Да ✓
74. **Чтение авансовых отчетов** - В старой: Да, В новой: Да ✓
75. **Чтение актов выполненных работ** - В старой: Да, В новой: Да ✓
76. **Чтение ассортимента** - В старой: Да, В новой: Да ✓
77. **Чтение базовой нормативно-справочной информации** - В старой: Да, В новой: Нет
78. **Чтение ввода остатков** - В старой: Да, В новой: Да ✓
79. **Чтение видов карт лояльности** - В старой: Да, В новой: Да ✓
80. **Чтение внесения выемки ДС по кассе ККМ** - В старой: Да, В новой: Да ✓
81. **Чтение возвратов товаров от клиентов** - В старой: Да, В новой: Да ✓
82. **Чтение выкупов возвратной тары клиентами** - В старой: Да, В новой: Да ✓
83. **Чтение выкупов возвратной тары у поставщиков** - В старой: Да, В новой: Да ✓
84. **Чтение выручки от продаж** - В старой: Да, В новой: Да ✓
85. **Чтение движений Денежные средства - Доходы/Расходы** - В старой: Да, В новой: Да ✓
86. **Чтение движений Денежные средства - Контрагент** - В старой: Да, В новой: Да ✓
87. **Чтение движений денежных средств** - В старой: Да, В новой: Да ✓
88. **Чтение договоров контрагентов** - В старой: Да, В новой: Да ✓
89. **Чтение договоров кредитов и депозитов** - В старой: Да, В новой: Да ✓
90. **Чтение документов корректировки задолженности** - В старой: Да, В новой: Да ✓
91. **Чтение документов по учету НДС** - В старой: Да, В новой: Да ✓
92. **Чтение документов списания поступления безналичных ДС** - В старой: Да, В новой: Нет
93. **Чтение дополнительных отчетов и обработок** - В старой: Да, В новой: Да ✓
94. **Чтение заказов клиентов заявок на возврат товаров от клиента** - В старой: Да, В новой: Да ✓
95. **Чтение заказов на внутреннее потребление** - В старой: Да, В новой: Да ✓
96. **Чтение заказов на перемещение** - В старой: Да, В новой: Да ✓
97. **Чтение заказов на сборку** - В старой: Да, В новой: Да ✓
98. **Чтение заказов поставщикам** - В старой: Да, В новой: Да ✓
99. **Чтение заявок на расход ДС** - В старой: Да, В новой: Да ✓
100. **Чтение информации по номенклатуре** - В старой: Да, В новой: Да ✓
101. **Чтение информации по партнерам** - В старой: Да, В новой: Да ✓
102. **Чтение карт лояльности** - В старой: Да, В новой: Да ✓
103. **Чтение кассовых ордеров** - В старой: Да, В новой: Да ✓
104. **Чтение категорий эксплуатации** - В старой: Да, В новой: Да ✓
105. **Чтение движений номенклатура контрагент** - В старой: Нет, В новой: Да ✓
106. **Чтение движений по акцизам** - В старой: Нет, В новой: Да ✓
107. **Чтение движений Номенклатура - Доходы\Расходы** - В старой: Нет, В новой: Да ✓
108. **Чтение движений Номенклатура - Номенклатура** - В старой: Нет, В новой: Да ✓
109. **Чтение назначений** - В старой: Да, В новой: Да ✓
110. **Чтение нормативно справочной информации** - В старой: Да, В новой: Да ✓
111. **Чтение ожидаемых поступлений денежных средств** - В старой: Да, В новой: Да ✓
112. **Чтение операций по платежной карте** - В старой: Да, В новой: Да ✓
113. **Чтение операций с подарочными сертификатами** - В старой: Да, В новой: Да ✓
114. **Чтение организаций и банковских счетов организаций** - В старой: Да, В новой: Да ✓
115. **Чтение ордеров на отражение излишков недостач порчи** - В старой: Да, В новой: Да ✓
116. **Чтение ордеров на товары** - В старой: Да, В новой: Да ✓
117. **Чтение остатков безналичных денежных средств** - В старой: Да, В новой: Да ✓
118. **Чтение остатков денежных средств в кассе ККМ** - В старой: Да, В новой: Да ✓
119. **Чтение остатков денежных средств к расходу** - В старой: Да, В новой: Да ✓
120. **Чтение остатков денежных средств у подотчетных лиц** - В старой: Да, В новой: Да ✓
121. **Чтение остатков доступных товаров** - В старой: Да, В новой: Да ✓
122. **Чтение остатков заказов клиентов заявок на возврат** - В старой: Да, В новой: Да ✓
123. **Чтение остатков заказов на внутреннее потребление** - В старой: Да, В новой: Да ✓
124. **Чтение остатков заказов на перемещение** - В старой: Да, В новой: Да ✓
125. **Чтение остатков заказов на сборку** - В старой: Да, В новой: Да ✓
126. **Чтение остатков заказов поставщикам** - В старой: Да, В новой: Да ✓
127. **Чтение остатков наличных денежных средств** - В старой: Да, В новой: Да ✓
128. **Чтение остатков переданной возвратной тары** - В старой: Да, В новой: Да ✓
129. **Чтение остатков принятой возвратной тары** - В старой: Да, В новой: Да ✓
130. **Чтение остатков расчетов по эквайрингу** - В старой: Да, В новой: Да ✓
131. **Чтение остатков товаров к отгрузке** - В старой: Да, В новой: Да ✓
132. **Чтение остатков товаров к поступлению** - В старой: Да, В новой: Да ✓
133. **Чтение остатков товаров на складах** - В старой: Да, В новой: Да ✓
134. **Чтение отчетов банка по операциям эквайринга** - В старой: Да, В новой: Да ✓
135. **Чтение отчетов комиссионеров** - В старой: Да, В новой: Да ✓
136. **Чтение отчетов комитенту** - В старой: Да, В новой: Да ✓
137. **Чтение отчетов о розничных продажах** - В старой: Да, В новой: Да ✓
138. **Чтение пересчетов товаров** - В старой: Да, В новой: Да ✓
139. **Чтение претензий клиентов** - В старой: Да, В новой: Да ✓
140. **Чтение распоряжений на перемещение денежных средств** - В старой: Да, В новой: Да ✓
141. **Чтение расчетов с клиентами** - В старой: Да, В новой: Да ✓
142. **Чтение расчетов с поставщиками** - В старой: Да, В новой: Да ✓
143. **Чтение реализаций товаров услуг** - В старой: Да, В новой: Да ✓
144. **Чтение регистров НДС** - В старой: Да, В новой: Да ✓
145. **Чтение регистров партий** - В старой: Да, В новой: Да ✓
146. **Чтение сделок** - В старой: Да, В новой: Да ✓
147. **Чтение себестоимости товаров** - В старой: Да, В новой: Да ✓
148. **Чтение соглашений с клиентами** - В старой: Да, В новой: Да ✓
149. **Чтение соглашений с поставщиками** - В старой: Да, В новой: Да ✓
150. **Чтение состояний отгрузки** - В старой: Да, В новой: Нет
151. **Чтение счетов на оплату клиентам** - В старой: Да, В новой: Да ✓
152. **Чтение счетов-фактур выданных** - В старой: Да, В новой: Да ✓
153. **Чтение счетов-фактур выданных на аванс** - В старой: Да, В новой: Да ✓
154. **Чтение счетов-фактур комиссионеру** - В старой: Да, В новой: Да ✓
155. **Чтение счетов-фактур комитента** - В старой: Да, В новой: Да ✓
156. **Чтение счетов-фактур на неподтвержденную реализацию по ставке 0%** - В старой: Да, В новой: Да ✓
157. **Чтение счетов-фактур налогового агента** - В старой: Да, В новой: Да ✓
158. **Чтение счетов-фактур полученных** - В старой: Да, В новой: Да ✓
159. **Чтение счетов-фактур полученных на аванс** - В старой: Да, В новой: Да ✓
160. **Чтение счетов-фактур полученных налогового агента** - В старой: Да, В новой: Да ✓
161. **Чтение таможенных деклараций на импорт** - В старой: Да, В новой: Да ✓
162. **Чтение товаров к оформлению излишков недостач** - В старой: Да, В новой: Да ✓
163. **Чтение товаров организаций** - В старой: Да, В новой: Да ✓
164. **Чтение упаковочных листов** - В старой: Да, В новой: Да ✓
165. **Чтение физических лиц** - В старой: Да, В новой: Да ✓
166. **Чтение финансовых результатов** - В старой: Да, В новой: Да ✓
167. **Чтение цен номенклатуры** - В старой: Да, В новой: Да ✓
168. **Чтение цен партнеров** - В старой: Да, В новой: Да ✓
169. **Чтение чеков ККМ** - В старой: Да, В новой: Да ✓
170. **Чтение электронных документов** - В старой: Нет (дважды), В новой: Да ✓
## Итоговый список ролей для включения в новой системе
Роли, которые были "Да" в старой системе, но "Нет" в новой (требуют включения):
1. Базовые права (CRM)
2. Ввод документа "Отчет по работам" (CRM)
3. Выполнение обмена электронными документами
4. Выполнение синхронизации данных
5. Добавление и изменение документов по банку
6. Добавление и изменение реализаций товаров услуг
7. Добавление изменение заказов клиентов
8. Добавление изменение узлов планов обмена
9. Использование дополнительных отчетов и обработок (CRM)
10. Использование интеграции с 1С:Документооборотом
11. Настройка синхронизации данных
12. Раздел запасы
13. Раздел отчеты и мониторинг
14. Чтение базовой нормативно-справочной информации
15. Чтение документов списания поступления безналичных ДС
16. Чтение состояний отгрузки
@@ -1,158 +0,0 @@
---
title: Сверка ролей с учетом переименований
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-10
date_modified: 2025-12-10
show_metadata_block: true
show_index_link: true
---
# Сверка ролей с учетом переименований
## Важное замечание
В старой системе роли могут называться "Добавление изменение...", а в новой системе "Добавление и изменение...". Это одна и та же роль с разным названием.
## Роли, требующие включения в новой системе
### 1. Роли, которые точно нужно включить (названия совпадают или есть соответствие):
1. **Базовые права (CRM)**
- Старая: "Базовые права (CRM)" - Да
- Новая: "Базовые права (CRM)" - Нет
- **Действие: Включить**
2. **Ввод документа "Отчет по работам" (CRM)**
- Старая: "Ввод документа "Отчет по работам" (CRM)" - Да
- Новая: "Ввод документа "Отчет по работам" (CRM)" - Нет
- **Действие: Включить**
3. **Выполнение обмена электронными документами**
- Старая: "Выполнение обмена электронными документами" - Да
- Новая: Отсутствует в списке
- **Действие: Проверить наличие и включить**
4. **Выполнение синхронизации данных**
- Старая: "Выполнение синхронизации данных" - Да
- Новая: "Выполнение синхронизации данных" - Нет
- **Действие: Включить**
5. **Добавление и изменение документов по банку**
- Старая: "Добавление и изменение документов по банку" - Да
- Новая: "Добавление и изменение документов по банку" - Нет
- **Действие: Включить**
6. **Добавление и изменение реализаций товаров услуг**
- Старая: "Добавление и изменение реализаций товаров услуг" - Да
- Новая: "Добавление и изменение реализаций товаров услуг" - Нет
- **Действие: Включить**
7. **Добавление и изменение заказов клиентов**
- Старая: "Добавление изменение заказов клиентов" - Да
- Новая: "Добавление и изменение заказов клиентов" - Нет (или отсутствует)
- **Примечание:** Название отличается ("изменение" vs "и изменение")
- **Действие: Найти роль "Добавление и изменение заказов клиентов" и включить**
8. **Добавление и изменение узлов планов обмена**
- Старая: "Добавление изменение узлов планов обмена" - Да
- Новая: "Добавление и изменение узлов планов обмена" - Нет (или отсутствует)
- **Примечание:** Название отличается ("изменение" vs "и изменение")
- **Действие: Найти роль "Добавление и изменение узлов планов обмена" и включить**
9. **Использование дополнительных отчетов и обработок** ⚠️ ПЕРЕИМЕНОВАНИЕ
- Старая: "Использование дополнительных отчетов и обработок (CRM)" - Да
- Новая: "Использование дополнительных отчетов и обработок" - Нет
- **Примечание:** В новой системе убрано "(CRM)" из названия
- **Действие: Включить роль "Использование дополнительных отчетов и обработок"**
10. **Использование интеграции с 1С:Документооборотом**
- Старая: "Использование интеграции с 1С:Документооборотом" - Да
- Новая: "Использование интеграции с 1С:Документооборотом" - Нет
- **Действие: Включить**
11. **Настройка синхронизации данных** ⚠️ ОТСУТСТВУЕТ
- Старая: "Настройка синхронизации данных" - Да
- Новая: Отсутствует в списке
- **Действие:** ⚠️ Проверить, есть ли под другим названием (например, "Настройка синхронизации файлов" или аналогичная)
12. **Раздел запасы**
- Старая: "Раздел запасы" - Да
- Новая: "Раздел запасы" - Нет (или отсутствует)
- **Действие: Включить**
13. **Раздел отчеты и мониторинг**
- Старая: "Раздел отчеты и мониторинг" - Да
- Новая: "Раздел отчеты и мониторинг" - Нет (или отсутствует)
- **Действие: Включить**
14. **Чтение базовой нормативно-справочной информации**
- Старая: "Чтение базовой нормативно-справочной информации" - Да
- Новая: "Чтение базовой нормативно-справочной информации" - Нет (или отсутствует)
- **Действие: Включить**
15. **Чтение документов списания поступления безналичных ДС**
- Старая: "Чтение документов списания поступления безналичных ДС" - Да
- Новая: "Чтение документов списания поступления безналичных ДС" - Нет (или отсутствует)
- **Действие: Включить**
16. **Чтение состояний отгрузки**
- Старая: "Чтение состояний отгрузки" - Да
- Новая: "Чтение состояний отгрузки" - Нет (или отсутствует)
- **Действие: Включить**
## Роли с возможными переименованиями (требуют проверки)
Следующие роли из старой системы с "Да" могут иметь аналоги в новой системе с другим названием:
### Паттерн: "Добавление изменение..." → "Добавление и изменение..."
1. **Добавление изменение заказов клиентов** (старая: Да)
- Проверить в новой: "Добавление и изменение заказов клиентов"
- Если найдена и имеет "Нет" → включить
2. **Добавление изменение узлов планов обмена** (старая: Да)
- Проверить в новой: "Добавление и изменение узлов планов обмена"
- Если найдена и имеет "Нет" → включить
3. **Добавление изменение корректировок обособленного учета запасов** (старая: Да)
- Проверить в новой: "Добавление и изменение корректировок обособленного учета запасов"
- Если найдена и имеет "Нет" → включить
4. **Добавление изменение корректировок реализаций** (старая: Да)
- Проверить в новой: "Добавление и изменение корректировок реализаций"
- Если найдена и имеет "Нет" → включить
5. **Добавление изменение листов кассовой книги** (старая: Да)
- Проверить в новой: "Добавление и изменение листов кассовой книги"
- Если найдена и имеет "Нет" → включить
## Методика проверки
При сверке ролей необходимо:
1. **Искать точное совпадение** названия роли
2. **Если не найдено**, искать вариант с "и изменение" вместо "изменение"
3. **Если не найдено**, искать вариант с "изменение" вместо "и изменение"
4. **Проверять**, что функциональность роли соответствует
## Итоговый список для включения (с учетом переименований)
После проверки всех возможных переименований, следующие роли должны быть включены в новой системе:
1. Базовые права (CRM)
2. Ввод документа "Отчет по работам" (CRM)
3. Выполнение обмена электронными документами (если существует)
4. Выполнение синхронизации данных
5. Добавление и изменение документов по банку
6. Добавление и изменение реализаций товаров услуг
7. Добавление и изменение заказов клиентов (проверить название)
8. Добавление и изменение узлов планов обмена (проверить название)
9. Использование дополнительных отчетов и обработок (в новой системе без "(CRM)")
10. Использование интеграции с 1С:Документооборотом
11. Настройка синхронизации данных (ОТСУТСТВУЕТ в новой системе - проверить наличие)
12. Раздел запасы
13. Раздел отчеты и мониторинг
14. Чтение базовой нормативно-справочной информации
15. Чтение документов списания поступления безналичных ДС
16. Чтение состояний отгрузки
@@ -1,103 +0,0 @@
# Сводка по работам: перенос и настройка актуальной формы УПД
## Исполнитель доработки
- Руководитель ИТ отдела ООО ФК "РАНА" — Кудрявцев Михаил Александрович.
- Контакт: `kma@rhana.com`.
## 1. Контур работ
- **Целевая рабочая конфигурация:** «Управление торговлей и взаимоотношениями с клиентами, редакция 3.0», версия **`3.0.22.28`** (рабочий контур проекта CRM3).
- **Расширение, в котором выполнены доработки:** `Графа5бвУПД` (синоним: «Графа5бв УПД»), версия **`1.0.2.93`**.
- **Эталонная конфигурация (источник логики и макетов):** «Управление торговлей и взаимоотношениями с клиентами, редакция 3.0», версия **`3.1.35.11`**.
- **Источник актуальных макетов УПД:** общий макет `ПФ_MXL_УниверсальныйПередаточныйДокумент2026` и связанный вариант `ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`.
## 2. Цель доработки
Обеспечить корректную печать актуальной формы УПД (формат 2026) в целевой конфигурации с сохранением совместимости со старыми форматами, а также с адаптацией к фактической структуре данных рабочего контура CRM3.
## 3. Основные выполненные работы
### 3.0. Что вынесено из расширения `Рана` («Рана CRM3») в `Графа5бвУПД` («Графа5бв УПД»)
В рамках работ по переносу актуальной формы УПД логика, которая ранее присутствовала/дополнялась в проектном расширении `Рана` («Рана CRM3»), была **сконцентрирована и реализована** в расширении `Графа5бвУПД` («Графа5бв УПД») как в единой точке внедрения актуального УПД (2026) для рабочего контура.
Важно: по факту расширение `Графа5бвУПД` реализует **полный контур интеграции формы УПД** в рабочую конфигурацию (макеты, ветки выбора, заполнение шапки/табличной части/подвала, ответственные лица, представление номенклатуры, серия, срок годности и совместимость с ранее действовавшими форматами УПД).
То есть это **не** локальная доработка только графы 5б в старых формах, а самостоятельная поставка интеграции актуальной формы УПД в полном объеме.
Ключевые элементы, которые были вынесены (перереализованы в `Графа5бвУПД`, с учетом структуры данных целевой конфигурации):
- **Контур печати УПД 2026/2026Прослеж**: подключение и заполнение актуальных макетов `ПФ_MXL_УниверсальныйПередаточныйДокумент2026` и `...2026Прослеж` в обработке `ПечатьОбщихФорм` (вместо разрозненных проектных поправок).
- **Графа 5б и связанные сценарии отбора**: стабилизация формирования строки 5б (в том числе устранение заглушек и дубликатов, корректный отбор данных при пересечениях реквизитов платежно-расчетных документов и счетов-фактур на аванс, а также использование резервного алгоритма заполнения при пустых значениях шапки).
- **Подвал и нумерация листов в актуальных формах**: восстановление/заполнение `ПодвалНакладной` и корректная обработка `НумерацияЛистов` именно для новых макетов, с учетом отличий параметров от ранее действовавших форм.
- **Ответственные лица**: унификация заполнения ответственных для УПД 2026 через `ОтветственныеЛицаОрганизаций` (выбор актуального назначения на дату документа, исключение завершенных назначений, выравнивание поведения полей под требования ранее действовавших форм УПД).
- **Представление номенклатуры, серия и срок годности**: перенос поведения, характерного для печати в `Рана` (добавление серии и срока годности в строку наименования), в `Графа5бвУПД` для форм 2026 — с отдельными служебными функциями с префиксом `упд5б_` и с резервными источниками данных (печать из СФ или из документа-основания).
Примечание: расширение `Рана` («Рана CRM3») продолжает использоваться для иных проектных доработок рабочего контура, но перенос и сопровождение актуальной формы УПД (2026) выполнены как самостоятельная поставка через `Графа5бвУПД` («Графа5бв УПД»).
### 3.1. Перенос и подключение формы УПД 2026
- Перенесен и подключен контур печати актуального УПД на базе макетов 2026/2026Прослеж.
- Сохранены ветки выбора макетов для документов прошлых периодов.
- Добавлены проверки и ветвления по периодам/вариантам макета в обработке печати.
### 3.2. Адаптация заполнения шапки и табличной части
- Исправлено заполнение граф `1а`, `А`, `5`, `9` и итоговых значений для форм 2026.
- Добавлено корректное заполнение графы `10а` (краткое наименование страны).
- Актуализировано формирование параметров `5а` и `5б` (включая защиту от пустых/фиктивных значений).
- Добавлены резервные сценарии заполнения при различии источников данных между СФ и документом-основанием.
### 3.3. Графа 5б (авансовые СФ)
- Исключен вывод фиктивного фрагмента `исправление № -- от --`.
- Убраны дубли фрагментов в строке 5б.
- Добавлен контроль контрагента при подборе СФА, чтобы исключить «чужие» документы при совпадении реквизитов ПРД.
### 3.4. Подвал формы и нумерация листов
- Восстановлен и заполнен блок `ПодвалНакладной` для 2026-форм.
- Настроено корректное заполнение параметров даты/основания/листов в новом макете.
- Исправлена логика `НумерацияЛистов` с учетом отличий параметров макетов 2026 от ранее действовавших форм.
- Удалены обращения к недоступным в целевой базе процедурам.
### 3.5. Ответственные лица
- Настроено заполнение ответственных по `Справочник.ОтветственныеЛицаОрганизаций`.
- Реализован выбор актуальных назначений на дату документа с учетом периода действия записи.
- Исключено попадание в печать сотрудников с завершенным сроком действия назначения.
- Выровнена логика полей `ФИОРуководителя`, `ФИООтветственного`, `ДолжностьОтветственного`, `ФИОГлавногоБухгалтера` относительно требуемого поведения ранее действовавших форм УПД.
### 3.6. Наименование номенклатуры, серия и срок годности
- Формирование `ТоварНаименование` переведено на алгоритм представления номенклатуры, совместимый с ранее действовавшими правилами печати УПД.
- Добавлен вывод номера серии и срока годности для позиций с серийным учетом.
- Реализовано устранение дубля: если характеристика совпадает с номером серии, характеристика в скобках не выводится.
- Добавлены резервные механизмы получения серии и срока годности из разных источников (`СФ`, `ДокументОснование`, текущая строка печати).
## 4. Учет различий структуры данных целевой базы
При переносе логики из эталона выполнена адаптация под фактическую структуру данных рабочего контура CRM3:
- разные источники строк при печати из `СчетФактураВыданный` и `РеализацияТоваровУслуг`;
- неодинаковый состав реквизитов в ветках данных печати;
- отсутствие части вспомогательных процедур/параметров, присутствующих в эталоне;
- необходимость безопасных проверок наличия реквизитов и параметров перед заполнением.
## 5. Ключевые объекты конфигурации, затронутые доработкой
- обработка `ПечатьОбщихФорм` (модуль менеджера расширения);
- документ `СчетФактураВыданный` (модуль менеджера расширения);
- общий макет `ПФ_MXL_УниверсальныйПередаточныйДокумент2026`;
- общий макет `ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`;
- справочник `ОтветственныеЛицаОрганизаций`.
## 6. Результат
В целевой конфигурации обеспечена рабочая печать актуальной формы УПД 2026 с корректным заполнением:
- шапки, табличной части, графы 5б и итогов;
- ответственных лиц и подвала документа;
- наименования номенклатуры с учетом серии и срока годности (для серийного учета);
- совместимости с ранее действовавшими форматами УПД.
@@ -1,98 +0,0 @@
---
title: "Сводка: Риски нарушения уникальности CRM_ЖурналДокументов"
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-10
date_modified: 2025-12-10
show_metadata_block: true
show_index_link: true
---
# Сводка: Риски нарушения уникальности CRM_ЖурналДокументов
## Результаты сравнения конфигураций
### Различия в структуре регистра
| Измерение | CRM3devLocal | CRM326_TEST (новая) |
|-----------|--------------|---------------------|
| **Клиент** | `CatalogRef.Партнеры` (только) | `CatalogRef.Партнеры` **ИЛИ** `CatalogRef.CRM_ПотенциальныеКлиенты` |
| **Объект** | `Characteristic.CRM_ОбъектыЖурналаДокументов` | `Characteristic.CRM_ОбъектыЖурналаДокументов` |
| **CRM_Интерес** | `DocumentRef.CRM_Интерес` | `DocumentRef.CRM_Интерес` |
| **ГлавнаяЗапись** | `Boolean` | `Boolean` |
## Ссылки, которые станут NULL после реструктуризации
### 1. Измерение "Клиент"
- ✅ **Риск:** Все ссылки на `CRM_ПотенциальныеКлиенты` будут обнулены
- ✅ **Причина:** В новой конфигурации это измерение поддерживает только `Партнеры`
### 2. Измерение "Объект" (характеристика)
- ✅ **Риск:** Ссылки на удаляемые типы объектов будут обнулены
- ✅ **Удаляемые типы:**
- `СправочникСсылка.CRM_ПотенциальныеКлиенты`
- `СправочникСсылка.CRM_ИсточникиКонтакта`
- `СправочникСсылка.CRM_КатегорииВрача`
- `СправочникСсылка.CRM_НаучныеСтепени`
- `СправочникСсылка.CRM_ОбластьИнтересов`
- `СправочникСсылка.CRM_Обращения`
- `СправочникСсылка.CRM_Специализация`
- `СправочникСсылка.CRM_Специальность`
- `СправочникСсылка.Отделы`
- `ДокументСсылка.УдалитьCRM_Сделка`
- `ДокументСсылка.УдалитьCRM_Событие`
- `ДокументСсылка.удалитьCRM_Мероприятие`
- `ДокументСсылка.удалитьCRM_Планирование`
- `ДокументСсылка.CRM_ПланированиеПоОтделам`
### 3. Измерение "CRM_Интерес"
- ✅ **Риск:** Ссылки на удаляемые документы будут обнулены
- ✅ **Удаляемые типы документов:**
- `Документ.УдалитьCRM_Сделка`
- `Документ.УдалитьCRM_Событие`
- `Документ.удалитьCRM_Мероприятие`
- `Документ.удалитьCRM_Планирование`
- `Документ.CRM_ПланированиеПоОтделам`
## Риски нарушения уникальности
### Критический риск #1: Обнуление "Клиент"
**Сценарий:**
- Есть записи с `Клиент=CRM_ПотенциальныеКлиенты.*`
- Есть записи с `Клиент=NULL`
- После обнуления все записи с `CRM_ПотенциальныеКлиенты` станут иметь `Клиент=NULL`
- **Результат:** Появление дубликатов
### Критический риск #2: Обнуление "Объект"
**Сценарий:**
- Есть несколько записей с разными значениями `Объект`, ссылающимися на удаляемые типы
- После обнуления все эти записи будут иметь `Объект=NULL`
- **Результат:** Появление дубликатов, если остальные измерения совпадают
### Критический риск #3: Обнуление "CRM_Интерес"
**Сценарий:**
- Есть несколько записей с разными значениями `CRM_Интерес`, ссылающимися на удаляемые документы
- После обнуления все эти записи будут иметь `CRM_Интерес=NULL`
- **Результат:** Появление дубликатов, если остальные измерения совпадают
### Максимальный риск: Комбинированное обнуление
**Сценарий:**
- Обнуляются несколько измерений одновременно
- **Результат:** Максимальная вероятность появления дубликатов
## Рекомендуемые действия
1. ✅ **Выполнить проверку** скриптом `check_duplicates_crm_journal.bsl`
2. ✅ **Удалить проблемные записи** перед реструктуризацией:
- Записи с `Клиент=CRM_ПотенциальныеКлиенты.*`
- Записи с `Объект`, ссылающимся на удаляемые типы
- Записи с `CRM_Интерес`, ссылающимся на удаляемые документы
3. ✅ **Проверить уникальность** после реструктуризации
## Статус проверки
- ✅ Структура регистра проанализирована
- ✅ Риски идентифицированы
- ✅ Скрипт проверки готов к использованию
- ⚠️ **Требуется выполнение проверки на реальной базе данных**
@@ -1,566 +0,0 @@
---
title: Список объектов для удаления из состава подсистем
version: 1.0
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
date_created: 2025-12-09
date_modified: 2025-12-09
show_metadata_block: true
show_index_link: true
---
# Список объектов для удаления из состава подсистем
> 📚 **См. также:** [Оглавление документов](INDEX.md) | [Анализ ошибок обновления](Анализ_ошибок_обновления.md) | [Инструкция по исправлению](Инструкция_по_исправлению.md) | [Проблема неуникальности регистра CRM_ЖурналДокументов](Проблема_неуникальности_регистра_CRM_ЖурналДокументов.md)
## Контекст документа
**Важно:** Данный документ представляет собой **промежуточный список** на одной из итераций применения конфигурации новой системы **CRM3-26** поверх рабочей конфигурации **CRM3**.
### Процесс обновления
Обновление выполняется поэтапно:
1. **Исходная конфигурация:** Рабочая конфигурация CRM3
2. **Целевая конфигурация:** Новая система CRM3-26 (CRM326/CRM326_TEST)
3. **Промежуточные итерации:** Поэтапное применение обновлений с устранением ошибок на каждом этапе
### Текущая итерация
Данный список составлен для **текущей итерации** процесса обновления и содержит объекты, которые:
- Присутствуют в рабочей конфигурации CRM3
- Отсутствуют в целевой конфигурации CRM3-26
- Имеют ссылки в составе подсистем основной конфигурации
- Требуют удаления из состава подсистем для продолжения обновления
**Примечание:** После успешного применения обновления на данной итерации может потребоваться составление нового списка для следующей итерации, так как могут появиться новые ошибки и новые объекты, требующие удаления из состава подсистем.
## Назначение документа
Данный документ содержит список объектов, которые необходимо удалить из состава подсистем для успешного выполнения текущей итерации обновления конфигурации из `CRM326/CRM326_TEST` на `CRM3devLocal`.
**Важно:**
- Удаление объектов из состава подсистем **не удаляет сами объекты**, а только убирает их из списка объектов подсистемы
- Это необходимо для устранения ошибок при обновлении на текущей итерации
- После применения обновления может потребоваться дополнительная работа с конфигурацией
---
## Подсистема.rh_RhanaПодсистема.Состав
### Подписки на события
- `ПодпискаНаСобытие.rh_ПроверитьДатуЗапретаПередЗаписьюДокумента`
### Регламентные задания
- `РегламентноеЗадание.Диадок_РегламентныеДействия`
- `РегламентноеЗадание.tega_ВыгрузкаОстатковНаСайт`
### Константы
- `Константа.tega_ОсновнаяНастройкаВыгрузки`
- `Константа.rh_СкладСебестоимости`
### Общие формы
- `ОбщаяФорма.rh_ФормаНастроек`
### Справочники
- `Справочник.CRM_Специализация`
- `Справочник.Отделы`
- `Справочник.rh_СтатусыПодарочныхСертификатов`
- `Справочник.CRM_ОфисыКомпании1`
- `Справочник.р_FTPСоединения`
- `Справочник.tega_НастройкиВыгрузки`
### Документы
- `Документ.rh_ПланированиеПродаж`
- `Документ.rh_ОтражениеФактаПродаж`
- `Документ.rh_ПервичныеДокументы`
- `Документ.rh_ПервичныеДокументыМенеджер`
- `Документ.rh_ПервичныеДокументыМенеджерРеализация`
- `Документ.rh_ДвиженияДенежныеСредстваПрочиеАктивыПассивы`
- `Документ.rh_ДенежныеСредстваКПоступлениюНаличные`
- `Документ.rh_ДенежныеСредстваКСписаниюСПодотчетныхЛиц`
- `Документ.rh_РезервыСерийТоваров`
- `Документ.rh_ТоварыКОформлениюПоступления`
- `Документ.rh_УдалитьДвиженияНоменклатураПрочиеАктивыПассивы`
- `Документ.rh_УдалитьПартииЗатратНаВыпуск`
- `Документ.rh_УдалитьПланыПродажИВнутреннегоПотребления`
- `Документ.rh_УдалитьТоварыКОформлениюОтчетовКомитенту`
- `Документ.rh_УдалитьТоварыОрганизаций`
- `Документ.rh_УдалитьТоварыОрганизацийКОформлению`
- `Документ.rh_УдалитьТоварыОрганизацийКПередаче`
- `Документ.rh_УдалитьТоварыПереданныеНаКомиссию`
### Отчеты
- `Отчет.rh_АнализСебестоимостиТоваров`
- `Отчет.rh_ТоварныйОтчетПоМенеджерам`
- `Отчет.удалитьОплаченныеЗаказы`
- `Отчет.rh_ПродажиПоПериодамИГруппам`
- `Отчет.rh_СебестоимостьОплаченыхТоваров`
- `Отчет.ВедомостьПоТоварамНаСкладахУЦ`
- `Отчет.rh_ВыручкаДенежныхСредств`
- `Отчет.rh_ВедомостьПоТоварамНаСкладахУЦРеализацияСписание`
- `Отчет.rh_ВедомостьПоТоварамНаСкладахПУРеализацияСписание`
- `Отчет.rh_РеестрОплаченныхНакладных`
- `Отчет.ЗаказыПоМенеджерам`
- `Отчет.rh_НеОплаченныеЗаказы`
- `Отчет.rh_СебестоимостьПоГруппам`
- `Отчет.rh_СебестоимостьПоГруппамПартии`
- `Отчет.rh_КонтрольВыполненияПланаЗакупок`
- `Отчет.rh_ПланированиеПоОтделам`
- `Отчет.rh_ПланированиеПоОтделамНеделям`
- `Отчет.ЧастныеЛицаПоВидамСеминаров`
- `Отчет.rh_ПланФактныйАнализПродаж`
- `Отчет.rh_ПодарочныеСертификаты`
- `Отчет.удалитьrh_ПланированиеПоОтделам2`
- `Отчет.rh_ОборотнаяВедомостьПоОстаткамТоваровПоПартиям`
- `Отчет.rh_ТоварыКоформлениюИзлишковИНедостач`
- `Отчет.rh_ПланированиеПоОтделам3`
- `Отчет.rh_ТоварыКомиссионерам`
- `Отчет.rh_ПланированиеПоОтделамИСебестоимость`
### Регистры сведений
- `РегистрСведений.rh_УчетДокументовПродаж`
- `РегистрСведений.rh_СвязиПоИзлишкамИНедостачам`
### Регистры накопления
- `РегистрНакопления.rh_ПланПродаж`
**Всего объектов в этой подсистеме:** 47
---
## Подсистема.rh_Rhana.Подсистема.rh_Настройки.Состав
### Константы
- `Константа.tega_ОсновнаяНастройкаВыгрузки`
- `Константа.rh_СкладСебестоимости`
**Всего объектов в этой подсистеме:** 2
---
## Подсистема.rh_Rhana.Подсистема.rh_НСИ.Состав
### Справочники
- `Справочник.CRM_Специализация`
- `Справочник.rh_СтатусыПодарочныхСертификатов`
- `Справочник.Диадок_ДополнительныеСправочники`
- `Справочник.Диадок_ЮрФизЛица`
- `Справочник.Диадок_Документы`
- `Справочник.Диадок_ПакетыДокументов`
- `Справочник.Диадок_ХранениеДанных`
- `Справочник.Диадок_Файлы`
- `Справочник.р_FTPСоединения`
- `Справочник.tega_НастройкиВыгрузки`
**Всего объектов в этой подсистеме:** 10
---
## Подсистема.rh_Rhana.Подсистема.rh_ПодарочныеСертификаты.Состав
### Справочники
- `Справочник.rh_СтатусыПодарочныхСертификатов`
### Отчеты
- `Отчет.rh_ПодарочныеСертификаты`
**Всего объектов в этой подсистеме:** 2
---
## Подсистема.rh_Rhana.Подсистема.rh_ПереходНаCRM3.Состав
### Справочники
- `Справочник.CRM_ОфисыКомпании1`
### Документы
- `Документ.rh_ПервичныеДокументы`
- `Документ.rh_ПервичныеДокументыМенеджер`
- `Документ.rh_ПервичныеДокументыМенеджерРеализация`
- `Документ.rh_ДвиженияДенежныеСредстваПрочиеАктивыПассивы`
- `Документ.rh_ДенежныеСредстваКПоступлениюНаличные`
- `Документ.rh_ДенежныеСредстваКСписаниюСПодотчетныхЛиц`
- `Документ.rh_РезервыСерийТоваров`
- `Документ.rh_ТоварыКОформлениюПоступления`
- `Документ.rh_УдалитьДвиженияНоменклатураПрочиеАктивыПассивы`
- `Документ.rh_УдалитьПартииЗатратНаВыпуск`
- `Документ.rh_УдалитьПланыПродажИВнутреннегоПотребления`
- `Документ.rh_УдалитьТоварыКОформлениюОтчетовКомитенту`
- `Документ.rh_УдалитьТоварыОрганизаций`
- `Документ.rh_УдалитьТоварыОрганизацийКОформлению`
- `Документ.rh_УдалитьТоварыОрганизацийКПередаче`
- `Документ.rh_УдалитьТоварыПереданныеНаКомиссию`
### Регистры сведений
- `РегистрСведений.CRM_ПрисоединенныеФайлыВерсии`
- `РегистрСведений.mmAgreements`
- `РегистрСведений.mmAnalyticsValues`
- `РегистрСведений.mmNews`
- `РегистрСведений.mmParameters`
- `РегистрСведений.mmНастройки`
- `РегистрСведений.mmСоответствияКлючей`
- `РегистрСведений.АдресныеСокращения`
- `РегистрСведений.АдресныйКлассификатор`
- `РегистрСведений.АналитикаВидовЗапасов`
- `РегистрСведений.бфВидыКонтактнойИнформации`
- `РегистрСведений.бфВидыСервисов`
- `РегистрСведений.бфКлиенты`
- `РегистрСведений.бфКомпетенции`
- `РегистрСведений.бфПользователи`
- `РегистрСведений.бфРегионы`
- `РегистрСведений.бфСвязиСобытий`
- `РегистрСведений.бфСервисныеСпециалисты`
- `РегистрСведений.бфСервисы`
- `РегистрСведений.ВерсииОбъектовАдресногоКлассификатора`
- `РегистрСведений.ЖурналАудитаСбербанк`
- `РегистрСведений.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов`
**Всего объектов в этой подсистеме:** 37
---
## Подсистема.rh_Rhana.Подсистема.rh_Планирование.Состав
### Документы
- `Документ.rh_ПланированиеПродаж`
- `Документ.rh_ОтражениеФактаПродаж`
### Отчеты
- `Отчет.rh_ПланФактныйАнализПродаж`
- `Отчет.rh_ПланированиеПоОтделамИСебестоимость`
### Регистры сведений
- `РегистрСведений.rh_УчетДокументовПродаж`
**Всего объектов в этой подсистеме:** 5
---
## Подсистема.rh_Rhana.Подсистема.rh_Отчеты.Состав
### Отчеты
- `Отчет.rh_АнализСебестоимостиТоваров`
- `Отчет.rh_ТоварныйОтчетПоМенеджерам`
- `Отчет.rh_ПродажиПоПериодамИГруппам`
- `Отчет.rh_СебестоимостьОплаченыхТоваров`
- `Отчет.ВедомостьПоТоварамНаСкладахУЦ`
- `Отчет.rh_ВыручкаДенежныхСредств`
- `Отчет.rh_ВедомостьПоТоварамНаСкладахУЦРеализацияСписание`
- `Отчет.rh_ВедомостьПоТоварамНаСкладахПУРеализацияСписание`
- `Отчет.rh_РеестрОплаченныхНакладных`
- `Отчет.ЗаказыПоМенеджерам`
- `Отчет.rh_НеОплаченныеЗаказы`
- `Отчет.rh_СебестоимостьПоГруппамПартии`
- `Отчет.rh_КонтрольВыполненияПланаЗакупок`
- `Отчет.rh_ПланированиеПоОтделам`
- `Отчет.rh_ПланФактныйАнализПродаж`
- `Отчет.rh_ПодарочныеСертификаты`
- `Отчет.удалитьrh_ПланированиеПоОтделам2`
- `Отчет.rh_ОборотнаяВедомостьПоОстаткамТоваровПоПартиям`
- `Отчет.rh_ТоварыКоформлениюИзлишковИНедостач`
- `Отчет.rh_ПланированиеПоОтделам3`
- `Отчет.rh_ТоварыКомиссионерам`
- `Отчет.rh_ПланированиеПоОтделамИСебестоимость`
**Всего объектов в этой подсистеме:** 22
---
## Подсистема.rh_Rhana.Подсистема.rh_Продажи.Состав
### Отчеты
- `Отчет.rh_ПродажиПоПериодамИГруппам`
- `Отчет.rh_НеОплаченныеЗаказы`
- `Отчет.rh_ПланированиеПоОтделамИСебестоимость`
**Всего объектов в этой подсистеме:** 3
---
## Подсистема.rh_Rhana.Подсистема.rh_СовместимостьСCRM2.Состав
### Справочники
- `Справочник.Отделы`
**Всего объектов в этой подсистеме:** 1
---
## Подсистема.rh_Rhana.Подсистема.rh_СкладИДоставка.Состав
### Регистры сведений
- `РегистрСведений.rh_СвязиПоИзлишкамИНедостачам`
**Всего объектов в этой подсистеме:** 1
---
## Сводная статистика
| Подсистема | Количество объектов |
|------------|---------------------|
| Подсистема.rh_RhanaПодсистема.Состав | 47 |
| Подсистема.rh_Rhana.Подсистема.rh_ПереходНаCRM3.Состав | 37 |
| Подсистема.rh_Rhana.Подсистема.rh_Отчеты.Состав | 22 |
| Подсистема.rh_Rhana.Подсистема.rh_НСИ.Состав | 10 |
| Подсистема.rh_Rhana.Подсистема.rh_Планирование.Состав | 5 |
| Подсистема.rh_Rhana.Подсистема.rh_Продажи.Состав | 3 |
| Подсистема.rh_Rhana.Подсистема.rh_Настройки.Состав | 2 |
| Подсистема.rh_Rhana.Подсистема.rh_ПодарочныеСертификаты.Состав | 2 |
| Подсистема.rh_Rhana.Подсистема.rh_СовместимостьСCRM2.Состав | 1 |
| Подсистема.rh_Rhana.Подсистема.rh_СкладИДоставка.Состав | 1 |
| **ВСЕГО** | **130** |
---
## Инструкция по удалению объектов из состава подсистем
### Шаг 1: Открыть конфигурацию
1. Откройте конфигурацию `CRM3devLocal` в конфигураторе 1С
2. Перейдите в режим редактирования
### Шаг 2: Удаление объектов из подсистем
Для каждой подсистемы из списка выше:
1. Найдите подсистему в дереве конфигурации
2. Откройте свойства подсистемы
3. Перейдите на вкладку "Состав"
4. Найдите объект в списке состава
5. Удалите объект из состава подсистемы (НЕ удаляйте сам объект!)
**Важно:**
- Удаляйте только из **состава подсистемы**, не удаляйте сами объекты
- Объекты останутся в конфигурации, но не будут входить в состав подсистем
### Шаг 3: Проверка
После удаления всех объектов из состава подсистем:
1. Сохраните конфигурацию
2. Проверьте конфигурацию на ошибки
3. Попробуйте выполнить обновление
---
## Группировка по типам объектов
### Подписки на события (1)
- `ПодпискаНаСобытие.rh_ПроверитьДатуЗапретаПередЗаписьюДокумента`
### Регламентные задания (2)
- `РегламентноеЗадание.Диадок_РегламентныеДействия`
- `РегламентноеЗадание.tega_ВыгрузкаОстатковНаСайт`
### Константы (2)
- `Константа.tega_ОсновнаяНастройкаВыгрузки`
- `Константа.rh_СкладСебестоимости`
### Общие формы (1)
- `ОбщаяФорма.rh_ФормаНастроек`
### Справочники (10)
- `Справочник.CRM_Специализация`
- `Справочник.Отделы`
- `Справочник.rh_СтатусыПодарочныхСертификатов`
- `Справочник.CRM_ОфисыКомпании1`
- `Справочник.Диадок_ДополнительныеСправочники`
- `Справочник.Диадок_ЮрФизЛица`
- `Справочник.Диадок_Документы`
- `Справочник.Диадок_ПакетыДокументов`
- `Справочник.Диадок_ХранениеДанных`
- `Справочник.Диадок_Файлы`
- `Справочник.р_FTPСоединения`
- `Справочник.tega_НастройкиВыгрузки`
### Документы (18)
- `Документ.rh_ПланированиеПродаж`
- `Документ.rh_ОтражениеФактаПродаж`
- `Документ.rh_ПервичныеДокументы`
- `Документ.rh_ПервичныеДокументыМенеджер`
- `Документ.rh_ПервичныеДокументыМенеджерРеализация`
- `Документ.rh_ДвиженияДенежныеСредстваПрочиеАктивыПассивы`
- `Документ.rh_ДенежныеСредстваКПоступлениюНаличные`
- `Документ.rh_ДенежныеСредстваКСписаниюСПодотчетныхЛиц`
- `Документ.rh_РезервыСерийТоваров`
- `Документ.rh_ТоварыКОформлениюПоступления`
- `Документ.rh_УдалитьДвиженияНоменклатураПрочиеАктивыПассивы`
- `Документ.rh_УдалитьПартииЗатратНаВыпуск`
- `Документ.rh_УдалитьПланыПродажИВнутреннегоПотребления`
- `Документ.rh_УдалитьТоварыКОформлениюОтчетовКомитенту`
- `Документ.rh_УдалитьТоварыОрганизаций`
- `Документ.rh_УдалитьТоварыОрганизацийКОформлению`
- `Документ.rh_УдалитьТоварыОрганизацийКПередаче`
- `Документ.rh_УдалитьТоварыПереданныеНаКомиссию`
### Отчеты (25)
- `Отчет.rh_АнализСебестоимостиТоваров`
- `Отчет.rh_ТоварныйОтчетПоМенеджерам`
- `Отчет.удалитьОплаченныеЗаказы`
- `Отчет.rh_ПродажиПоПериодамИГруппам`
- `Отчет.rh_СебестоимостьОплаченыхТоваров`
- `Отчет.ВедомостьПоТоварамНаСкладахУЦ`
- `Отчет.rh_ВыручкаДенежныхСредств`
- `Отчет.rh_ВедомостьПоТоварамНаСкладахУЦРеализацияСписание`
- `Отчет.rh_ВедомостьПоТоварамНаСкладахПУРеализацияСписание`
- `Отчет.rh_РеестрОплаченныхНакладных`
- `Отчет.ЗаказыПоМенеджерам`
- `Отчет.rh_НеОплаченныеЗаказы`
- `Отчет.rh_СебестоимостьПоГруппам`
- `Отчет.rh_СебестоимостьПоГруппамПартии`
- `Отчет.rh_КонтрольВыполненияПланаЗакупок`
- `Отчет.rh_ПланированиеПоОтделам`
- `Отчет.rh_ПланированиеПоОтделамНеделям`
- `Отчет.ЧастныеЛицаПоВидамСеминаров`
- `Отчет.rh_ПланФактныйАнализПродаж`
- `Отчет.rh_ПодарочныеСертификаты`
- `Отчет.удалитьrh_ПланированиеПоОтделам2`
- `Отчет.rh_ОборотнаяВедомостьПоОстаткамТоваровПоПартиям`
- `Отчет.rh_ТоварыКоформлениюИзлишковИНедостач`
- `Отчет.rh_ПланированиеПоОтделам3`
- `Отчет.rh_ТоварыКомиссионерам`
- `Отчет.rh_ПланированиеПоОтделамИСебестоимость`
### Регистры сведений (25)
- `РегистрСведений.CRM_ПрисоединенныеФайлыВерсии`
- `РегистрСведений.mmAgreements`
- `РегистрСведений.mmAnalyticsValues`
- `РегистрСведений.mmNews`
- `РегистрСведений.mmParameters`
- `РегистрСведений.mmНастройки`
- `РегистрСведений.mmСоответствияКлючей`
- `РегистрСведений.АдресныеСокращения`
- `РегистрСведений.АдресныйКлассификатор`
- `РегистрСведений.АналитикаВидовЗапасов`
- `РегистрСведений.бфВидыКонтактнойИнформации`
- `РегистрСведений.бфВидыСервисов`
- `РегистрСведений.бфКлиенты`
- `РегистрСведений.бфКомпетенции`
- `РегистрСведений.бфПользователи`
- `РегистрСведений.бфРегионы`
- `РегистрСведений.бфСвязиСобытий`
- `РегистрСведений.бфСервисныеСпециалисты`
- `РегистрСведений.бфСервисы`
- `РегистрСведений.ВерсииОбъектовАдресногоКлассификатора`
- `РегистрСведений.ЖурналАудитаСбербанк`
- `РегистрСведений.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов`
- `РегистрСведений.rh_УчетДокументовПродаж`
- `РегистрСведений.rh_СвязиПоИзлишкамИНедостачам`
### Регистры накопления (1)
- `РегистрНакопления.rh_ПланПродаж`
---
## Приоритеты удаления
### Высокий приоритет (критично для обновления)
1. **Подсистема.rh_RhanaПодсистема.Состав** - 47 объектов
- Самая большая группа
- Содержит большинство удаляемых объектов
2. **Подсистема.rh_Rhana.Подсистема.rh_ПереходНаCRM3.Состав** - 37 объектов
- Много регистров сведений
- Документы переходного периода
### Средний приоритет
3. **Подсистема.rh_Rhana.Подсистема.rh_Отчеты.Состав** - 22 объекта
- Отчеты, которые можно временно отключить
4. **Подсистема.rh_Rhana.Подсистема.rh_НСИ.Состав** - 10 объектов
- Справочники, связанные с НСИ
### Низкий приоритет
5. Остальные подсистемы с небольшим количеством объектов
---
## Чек-лист действий
- [ ] Создать резервную копию конфигурации
- [ ] Удалить объекты из Подсистема.rh_RhanaПодсистема.Состав (47 объектов)
- [ ] Удалить объекты из Подсистема.rh_Rhana.Подсистема.rh_ПереходНаCRM3.Состав (37 объектов)
- [ ] Удалить объекты из Подсистема.rh_Rhana.Подсистема.rh_Отчеты.Состав (22 объекта)
- [ ] Удалить объекты из Подсистема.rh_Rhana.Подсистема.rh_НСИ.Состав (10 объектов)
- [ ] Удалить объекты из Подсистема.rh_Rhana.Подсистема.rh_Планирование.Состав (5 объектов)
- [ ] Удалить объекты из Подсистема.rh_Rhana.Подсистема.rh_Продажи.Состав (3 объекта)
- [ ] Удалить объекты из Подсистема.rh_Rhana.Подсистема.rh_Настройки.Состав (2 объекта)
- [ ] Удалить объекты из Подсистема.rh_Rhana.Подсистема.rh_ПодарочныеСертификаты.Состав (2 объекта)
- [ ] Удалить объекты из Подсистема.rh_Rhana.Подсистема.rh_СовместимостьСCRM2.Состав (1 объект)
- [ ] Удалить объекты из Подсистема.rh_Rhana.Подсистема.rh_СкладИДоставка.Состав (1 объект)
- [ ] Сохранить конфигурацию
- [ ] Проверить конфигурацию на ошибки
- [ ] Попробовать выполнить обновление
---
## Примечания
1. **Удаление из состава ≠ удаление объекта:** Объекты остаются в конфигурации, но не входят в состав подсистем
2. **Проверка зависимостей:** После удаления объектов из состава подсистем проверьте, не нарушены ли зависимости
3. **Тестирование:** После удаления обязательно протестируйте функциональность, связанную с этими подсистемами
4. **Документирование:** Зафиксируйте все изменения для последующего анализа
---
## История изменений
### Версия 1.0 (Текущая итерация)
- Составлен список объектов для удаления из состава подсистем
- Группировка по подсистемам
- Статистика по типам объектов
- Инструкция по выполнению удаления
### Следующие итерации
После применения обновления на текущей итерации:
1. Проверьте наличие новых ошибок
2. При необходимости составьте новый список для следующей итерации
3. Обновите данный документ или создайте новый
### Известные проблемы после обновления
После успешного удаления объектов из состава подсистем и сохранения конфигурации может возникнуть ошибка:
**Проблема:** Записи регистра сведений стали неуникальными: `CRM_ЖурналДокументов`
**Решение:** См. документ [Проблема неуникальности регистра CRM_ЖурналДокументов](Проблема_неуникальности_регистра_CRM_ЖурналДокументов.md)
---
## Примечания по процессу обновления
### Этапы обновления
1. **Подготовка**
- Анализ ошибок обновления
- Составление списков удаляемых объектов
- Резервное копирование
2. **Текущая итерация**
- Удаление объектов из состава подсистем (данный документ)
- Применение обновления
- Проверка результата
3. **Следующие итерации** (при необходимости)
- Анализ новых ошибок
- Составление новых списков
- Повторное применение обновления
### Рекомендации
- **Не удаляйте объекты полностью** - только из состава подсистем
- **Сохраняйте резервные копии** перед каждой итерацией
- **Документируйте изменения** для последующего анализа
- **Тестируйте функциональность** после каждой итерации
---
**Дата создания:** 2024
**Версия:** 1.0 (Промежуточная итерация)
**Статус:** Готово к использованию
**Контекст:** Применение CRM3-26 поверх рабочей CRM3
@@ -1,64 +0,0 @@
---
title: "Список ролей новой системы для отметки "Да""
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-10
date_modified: 2025-12-10
show_metadata_block: true
show_index_link: true
---
# Список ролей новой системы для отметки "Да"
## Роли, которые нужно отметить "Да" в новой системе
1. Базовые права (CRM)
2. Ввод документа "Отчет по работам" (CRM)
3. Выполнение синхронизации данных
4. Добавление и изменение документов по банку
5. Добавление и изменение реализаций товаров услуг
6. Добавление и изменение заказов клиентов
7. Добавление и изменение узлов планов обмена
8. Использование дополнительных отчетов и обработок УТ
9. Использование интеграции с 1С:Документооборотом
10. Раздел запасы
11. Раздел отчеты и мониторинг
12. Чтение базовой нормативно-справочной информации
13. Чтение документов списания поступления безналичных ДС
14. Чтение состояний отгрузки
---
## Роли, отсутствующие в новой системе (требуют проверки)
- Настройка синхронизации данных (возможно, переименована или объединена с другой ролью)
---
## Дополнительные роли для проверки (возможные переименования)
Если в новой системе есть следующие роли, их также нужно отметить "Да":
- Добавление и изменение корректировок обособленного учета запасов
- Добавление и изменение корректировок реализаций
- Добавление и изменение листов кассовой книги
---
## Примечание
Роль "Выполнение обмена электронными документами" отсутствует в списке новой системы. Если она существует под другим названием, её также нужно включить.
File diff suppressed because it is too large Load Diff
@@ -1,218 +0,0 @@
---
title: Техническое задание №2 - полный перенос новой логики УПД из crm3-26-promo в crm3-dev
version: 1.0
date_created: 2026-04-21
date_modified: 2026-04-21
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
description: Полный план переноса логики подготовки данных и печати УПД из crm3-26-promo в crm3-dev с учетом выделения доработок в отдельное расширение упд5б.
status: К согласованию
show_metadata_block: true
show_index_link: true
show_toc: true
---
# Техническое задание №2
## 1. Цель и основание
Цель: выполнить **полный перенос** актуальной логики формирования данных и печати УПД из `crm3-26-promo` в `crm3-dev` с выделением изменений в отдельное расширение `упд5б`, минимизируя изменения в основной конфигурации.
Основание: сравнительный анализ:
- `crm3-dev` (версия `3.0.22.28`, режим совместимости `Version8_3_16`);
- `crm3-26-promo` (версия `3.1.35.11`, режим совместимости `Version8_3_27`);
- текущего расширения `crm3-dev.rhana`.
## 2. Итоги полного анализа (as-is / to-be)
### 2.1. Что уже есть в `crm3-26-promo`
В `crm3-26-promo` реализован полный контур графы 5б:
- функция `СтрокаАвансовыеСчетаФактуры(...)` в `Documents/СчетФактураВыданный/Ext/ManagerModule.bsl`;
- расширенная `ПоместитьВременнуюТаблицуПлатежноРасчетныхДокументов(...)` с колонкой `СтрокаАвансовыеСчетаФактуры`;
- расширенный `ТекстЗапросаПолученияНомеровИДатПлатежноРасчетныхДокументов()` с данными `СчетФактураВыданныйАванс` и исправлений;
- вывод поля `ПредставлениеАвансовыеСчетаФактуры` в запросе шапки для печати;
- заполнение `ОбластьШапка.Параметры.АвансовыеСчетаФактуры` в `ПечатьОбщихФорм`.
### 2.2. Что есть в `crm3-dev`
В `crm3-dev` (база):
- базовые методы `ПоместитьВременнуюТаблицуПлатежноРасчетныхДокументов(...)` и `ТекстЗапросаПолученияНомеровИДатПлатежноРасчетныхДокументов()` присутствуют, но без контура 5б;
- в запросе шапки УПД отсутствует `ПредставлениеАвансовыеСчетаФактуры`.
В `crm3-dev.rhana`:
- в `DataProcessors/ПечатьОбщихФорм/Ext/ManagerModule.bsl` уже есть ветка выбора макета `1096` для периода 2026;
- подключен макет `ПФ_MXL_УниверсальныйПередаточныйДокумент1096_ru`;
- в `Documents/СчетФактураВыданный/Ext/ManagerModule.bsl` отсутствуют изменения по 5б (есть только доработки по строке 5а).
Критичное отличие по макетам:
- в `crm3-26-promo` для актуальной ветки УПД применяются `CommonTemplates`:
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026`,
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`,
в которых присутствует параметр `АвансовыеСчетаФактуры` (графа 5б);
- в `crm3-dev` и `crm3-dev.rhana` такие `CommonTemplates` отсутствуют.
## 3. Границы работ по ТЗ №2
### 3.1. Входит в объем
1. Полный перенос механизма подготовки данных 5б из `crm3-26-promo`.
2. Полный перенос логики вывода 5б в печатной форме УПД.
3. Унификация доработок в новом расширении `упд5б` (вынос из `crm3-dev.rhana` релевантных частей).
4. Анализ и устранение дублирования между `crm3-dev.rhana` и `упд5б`.
5. Подготовка правил, что остается в расширении, а что (при необходимости) меняется в базе `crm3-dev`.
### 3.2. Не входит в объем
1. Полный перенос всех несвязанных с УПД подсистем из `crm3-26-promo`.
2. Массовый рефакторинг документов вне контура СФ/УПД.
## 4. Детальный анализ изменений структуры данных
### 4.1. Обязательные поля и представления для миграции
Для полного переноса должны быть поддержаны:
- строка представления авансовых СФ: `СтрокаАвансовыеСчетаФактуры`;
- поле вывода в шапке печати: `ПредставлениеАвансовыеСчетаФактуры`;
- поля в таблице платежно-расчетных документов:
- `НомерСчетаФактурыНаАванс`,
- `ДатаСчетаФактурыНаАванс`,
- `НомерИсправленияСчетаФактурыНаАванс`,
- `ДатаИсправленияСчетаФактурыНаАванс`.
### 4.2. Временные таблицы и запросы
В контуре `СчетФактураВыданный` требуется перенос (или эквивалентное восстановление) цепочки:
1. подготовка данных платежно-расчетных документов;
2. формирование данных по `СчетФактураВыданныйАванс` и исправлениям;
3. объединение в итоговую ВТ для передачи в печать;
4. подстановка в `РезультатПоШапке` поля `ПредставлениеАвансовыеСчетаФактуры`.
### 4.3. Проверка наличия реквизитов документа
В `crm3-26-promo` используется реквизит документа `СтрокаАвансовыеСчетаФактуры` в ряде сценариев формы/объекта.
Для `crm3-dev` обязательна проверка:
1. если реквизит уже существует в базе - использовать его;
2. если реквизита нет:
- вариант А (предпочтительный): вычислять строку на лету в расширении и передавать через ВТ/запрос шапки;
- вариант Б (если требуется функциональная паритетность формы документа): добавить реквизит в объект (через расширение, если позволяет совместимость), либо точечно в базу.
## 5. Целевая архитектура переноса
### 5.1. Новое расширение `упд5б` (основной контур)
В `упд5б` концентрируются:
1. все изменения `Documents/СчетФактураВыданный/Ext/ManagerModule.bsl` по данным 5б;
2. все изменения `DataProcessors/ПечатьОбщихФорм/Ext/ManagerModule.bsl` по выводу 5б;
3. перенос и сопровождение `CommonTemplates`:
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026`,
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`;
4. опционально (для обратной совместимости) - `ПФ_MXL_УниверсальныйПередаточныйДокумент1096_ru`, если он остается в legacy-ветке.
### 5.2. Что переносить из `crm3-dev.rhana` в `упд5б`
Переносу в `упд5б` подлежат доработки, связанные с актуальной печатью УПД и графой 5б:
1. ветка выбора макета для периода 2026+;
2. переключение на `CommonTemplates` `...2026` / `...2026Прослеж`;
3. блок заполнения параметров шапки УПД, который должен включать `АвансовыеСчетаФактуры`.
### 5.3. Что убрать из `crm3-dev.rhana` после переноса
После приемки `упд5б` из `crm3-dev.rhana` исключаются дублирующие фрагменты:
1. дублирующее подключение макета 1096 в ветке 2026, если оно заменено на `CommonTemplates` 2026;
2. дублирующая ветка выбора макета 1096/2026;
3. любой дублирующий расчет параметра `АвансовыеСчетаФактуры` (если был добавлен в `crm3-dev.rhana`).
Удаление выполняется только после тестов регрессии и при подтверждении идентичного поведения в `упд5б`.
## 6. План реализации (по этапам)
### Этап 1. Инвентаризация и фиксация baseline
1. Зафиксировать текущие версии и hash модулей/макетов:
- `crm3-dev/src/Documents/СчетФактураВыданный/...`,
- `crm3-dev/src/DataProcessors/ПечатьОбщихФорм/...`,
- `crm3-dev.rhana/src/...`,
- `crm3-26-promo/src/...`.
2. Составить карту расхождений: методы, поля, ВТ, параметры макета.
Результат этапа: отчет о diff и точный реестр переносимых фрагментов.
### Этап 2. Перенос данных 5б
1. В `упд5б` добавить `упд5б_СтрокаАвансовыеСчетаФактуры(...)`.
2. Расширить `ПоместитьВременнуюТаблицуПлатежноРасчетныхДокументов(...)`.
3. Расширить `ТекстЗапросаПолученияНомеровИДатПлатежноРасчетныхДокументов()`.
4. Расширить формирование `ТекстЗапросаДанныхШапкиДляПечатиСчетаФактуры(...)` с полем `ПредставлениеАвансовыеСчетаФактуры`.
Результат этапа: данные 5б формируются и доступны в `РезультатПоШапке`.
### Этап 3. Перенос печати и макетов
1. Перенести в `упд5б` выбор макета для ветки 2026+.
2. Перенести из `crm3-26-promo` `CommonTemplates`:
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026`,
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`.
3. В `ЗаполнитьТабличныйДокументУПД(...)` добавить/сохранить установку `ОбластьШапка.Параметры.АвансовыеСчетаФактуры`.
4. Проверить, что legacy-ветки до 2026 не изменили поведение.
Результат этапа: графа 5б печатается в УПД по новым макетам 2026/2026Прослеж.
### Этап 4. Дедубликация `crm3-dev.rhana`
1. Отключить/удалить дублирующие фрагменты по макету 1096 из `crm3-dev.rhana`.
2. Подтвердить отсутствие конфликтов при одновременном подключении расширений.
Результат этапа: единая точка ответственности в `упд5б`.
### Этап 5. Регрессия и приемка
1. Позитивные сценарии:
- реализация с авансом и исправлением;
- реализация с авансом без исправления;
- без аванса (fallback).
2. Регрессия:
- печать УПД до 2026 (исторические периоды);
- печать УПД после 01.01.2026 (макеты 2026/2026Прослеж);
- пакетная печать смешанных документов.
Результат этапа: акт приемки и протокол регрессии.
### Этап 6. Переход структуры данных и обработчики обновления
1. Подготовить решение по данным для уже созданных документов:
- если строка 5б рассчитывается на лету - обновление данных не требуется;
- если вводится хранение в реквизите/регистре - требуется миграция данных.
2. При необходимости добавить обработчики обновления данных:
- модуль обновления конфигурации/расширения;
- пакетный пересчет `СтрокаАвансовыеСчетаФактуры` для исторических `СчетФактураВыданный`.
3. Добавить контрольные отчеты сверки до/после миграции.
## 7. Требования по применению расширения с учетом совместимости `crm3-dev`
Учитывать ограничения `crm3-dev` (`CompatibilityMode = Version8_3_16`):
1. приоритетно использовать `&ИзменениеИКонтроль` в расширении;
2. в блоках `#Удаление` размещать только удаляемый код;
3. комментарии и пояснения размещать только в `#Вставка`;
4. не использовать вставку директив удаления внутрь многострочных литералов запроса;
5. при изменении условных операторов заменять цельный блок `Если ... КонецЕсли` (а не только строку условия);
6. если точка расширения недоступна технически, оформлять точечное изменение в базе отдельным решением с обоснованием.
## 8. Решение по макетам после 01.01.2026
Для новых документов после `01.01.2026` целевые макеты:
1. `ОбщийМакет.ПФ_MXL_УниверсальныйПередаточныйДокумент2026`;
2. `ОбщийМакет.ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`.
Исторические макеты (`..._ru`, `..._625_ru`, `...981_ru`, `...534_ru`) не удаляются, потому что:
1. они нужны для корректной печати документов прошлых периодов;
2. они участвуют в проверках совместимости печати смешанных наборов документов;
3. их изменение в рамках полного переноса выполняется только при отдельном бизнес-требовании.
## 9. Критерии готовности ТЗ №2 к реализации
1. Согласован перечень переносимых объектов и методов.
2. Согласован перечень удаляемых дубликатов из `crm3-dev.rhana`.
3. Подтвержден способ работы с отсутствующими реквизитами (через расширение или точечно в базе).
4. Утвержден план поэтапного внедрения и регрессии.
@@ -1,634 +0,0 @@
---
title: Техническое задание - минимальная реализация графы 5б в УПД (через расширение)
version: 1.1
date_created: 2026-04-21
date_modified: 2026-04-21
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
description: Детализированное техническое задание с конкретными объектами и кодовыми фрагментами для минимальной реализации графы 5б в УПД с приоритетом реализации через расширение crm3-dev.rhana.
status: К реализации
extension: CRM3devLocal / CRM3devLocal.Рана
show_metadata_block: true
show_index_link: true
show_toc: true
---
# Техническое задание
## 1. Общая информация
### 1.1. Дата документа
21.04.2026
### 1.2. Основание
Результаты повторного анализа `crm3-dev` + `crm3-dev.rhana` в сравнении с `crm3-26-promo` (версия `3.1.35.11`) по функционалу заполнения графы 5б в УПД.
### 1.3. Цель
Реализовать в старой конфигурации минимально необходимую логику заполнения графы **5б** в печатной форме УПД за счет перехода на новые макеты `ПФ_MXL_УниверсальныйПередаточныйДокумент2026` и `ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж` (из `crm3-26-promo`) и передачи в них параметра `АвансовыеСчетаФактуры`, с максимальной локализацией изменений в расширении `упд5б`.
---
## 2. Архитектурный принцип реализации
### 2.1. Приоритет: расширение
Реализация выполняется **в первую очередь через расширение** `crm3-dev.rhana`.
Целевой порядок:
1. Подготовка данных для графы 5б - в расширении документа `СчетФактураВыданный`.
2. Вывод в печатную форму УПД - в расширении `ПечатьОбщихФорм`.
3. Изменения в базе `crm3-dev` - только если конкретный метод нельзя корректно расширить.
### 2.2. Допустимый fallback на базу
Если нужная точка не расширяема:
1. фиксируется причина технического ограничения;
2. в базе делается минимальный точечный change;
3. вся остальная логика остается в расширении.
---
## 3. Объем и ограничения
### 3.1. Включено в объем работ
1. Формирование представления авансовых счетов-фактур для графы 5б.
2. Передача значения в набор данных печати УПД (`РезультатПоШапке`).
3. Перенос в расширение `упд5б` макетов `ОбщийМакет.ПФ_MXL_УниверсальныйПередаточныйДокумент2026` и `ОбщийМакет.ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж` из `crm3-26-promo`.
4. Вывод значения графы 5б в новых макетах 2026.
5. Минимальные изменения, достаточные для работоспособности графы 5б без изменения логики старых веток макетов.
### 3.2. Не включено в объем работ
1. Полный перенос ветки печатных форм СФ/УПД/УКД 2.5.
2. Перенос всех функциональных опций и макетов из `crm3-26-promo`.
3. Масштабный рефакторинг печати УПД.
4. Изменение логики выбора исторических макетов `..._ru`, `..._625_ru`, `...981_ru`, `...534_ru`.
---
## 4. Карта объектов и изменений
### 4.1. Обязательные объекты в расширении
1. `crm3-dev.rhana/src/Documents/СчетФактураВыданный/Ext/ManagerModule.bsl`
Назначение:
- формирование `ПредставлениеАвансовыеСчетаФактуры`;
- расширение подготовки данных для УПД.
2. `crm3-dev.rhana/src/DataProcessors/ПечатьОбщихФорм/Ext/ManagerModule.bsl`
Назначение:
- чтение `ДанныеПечати.ПредставлениеАвансовыеСчетаФактуры`;
- заполнение `ОбластьШапка.Параметры.АвансовыеСчетаФактуры`.
3. Макеты УПД в расширении `упд5б` (раздел `CommonTemplates`)
Назначение:
- перенос из `crm3-26-promo` макетов:
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026`;
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`;
- использование в печати УПД для периода 2026+.
4. Макет УПД в расширении (`Templates` объекта `ПечатьОбщихФорм`)
Назначение:
- сохранить совместимость со старой веткой печати;
- без обязательной доработки исторических шаблонов в рамках минимальной задачи.
### 4.2. Объекты базы (только при невозможности расширить)
1. `crm3-dev/src/Documents/СчетФактураВыданный/Ext/ManagerModule.bsl`
2. Базовый макет УПД.
---
## 5. Детализация реализации по объектам
### 5.1. Расширение документа `СчетФактураВыданный`
Файл: `crm3-dev.rhana/src/Documents/СчетФактураВыданный/Ext/ManagerModule.bsl`
Необходимо расширить:
1. `ПоместитьВременнуюТаблицуПлатежноРасчетныхДокументов(...)`
- добавить колонку `СтрокаАвансовыеСчетаФактуры`;
- заполнять ее из функции `упд5б_СтрокаАвансовыеСчетаФактуры(...)`;
- включить колонку в итоговую выгрузку в `ТаблицаПлатежноРасчетныеДокументы`.
Конкретный код (фрагмент для вставки по месту):
```bsl
// 1) Добавление колонки в сводную ТЗ
ПлатежноРасчетныеДокументыСводно.Колонки.Добавить("СтрокаАвансовыеСчетаФактуры",
Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(1000)));
// 2) Заполнение значения в цикле по счетам-фактурам
НоваяСтрока = ПлатежноРасчетныеДокументыСводно.Добавить();
НоваяСтрока.Ссылка = ВыборкаСчетФактур.СчетФактура;
НоваяСтрока.СтрокаПлатежноРасчетныеДокументы = СтрокаРасчетноПлатежныхДокументов(ПлатежноРасчетныеДокументы);
НоваяСтрока.СтрокаАвансовыеСчетаФактуры = упд5б_СтрокаАвансовыеСчетаФактуры(ПлатежноРасчетныеДокументы);
// 3) Выгрузка в ВТ, чтобы поле было доступно в дальнейших запросах
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Ссылка,
| Таблица.СтрокаПлатежноРасчетныеДокументы,
| Таблица.СтрокаАвансовыеСчетаФактуры
|ПОМЕСТИТЬ ТаблицаПлатежноРасчетныеДокументы
|ИЗ
| &ПлатежноРасчетныеДокументы КАК Таблица";
```
2. `ТекстЗапросаПолученияНомеровИДатПлатежноРасчетныхДокументов()`
- добавить извлечение связанных авансовых СФ (`Документ.СчетФактураВыданныйАванс`);
- добавить поля:
- `НомерСчетаФактурыНаАванс`
- `ДатаСчетаФактурыНаАванс`
- `НомерИсправленияСчетаФактурыНаАванс`
- `ДатаИсправленияСчетаФактурыНаАванс`;
- внедрять как цельный расширяемый блок по шаблону из раздела `6.3`.
3. Формирование поля в запросе шапки:
- `ПредставлениеАвансовыеСчетаФактуры`.
4. Новая функция в расширении:
- `упд5б_СтрокаАвансовыеСчетаФактуры(...) Экспорт`.
### 5.2. Расширение печати УПД
Файл: `crm3-dev.rhana/src/DataProcessors/ПечатьОбщихФорм/Ext/ManagerModule.bsl`
В `упд5б_ЗаполнитьТабличныйДокументУПД(...)` добавить:
1. извлечение значения графы 5б из `ДанныеПечати`:
- `ПредставлениеАвансовыеСчетаФактуры`;
2. fallback:
- `№ -- от --, исправление № -- от --`;
3. заполнение параметра шапки:
- `ОбластьШапка.Параметры.АвансовыеСчетаФактуры`.
### 5.3. Макет УПД
По результатам глубокого анализа:
1. в `crm3-26-promo` параметр 5б реализован в коде печати и применяется в ветке новых макетов:
- `ОбщийМакет.ПФ_MXL_УниверсальныйПередаточныйДокумент2026`;
- `ОбщийМакет.ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`;
2. в `crm3-dev` отсутствует раздел `CommonTemplates` с указанными макетами;
3. в `crm3-dev.rhana` ветка 2026 сейчас переключается на `...1096_ru`, что не дает использовать новый шаблон 2026 с параметром 5б по эталонной схеме `crm3-26-promo`.
Требование минимальной задачи по макетам:
1. создать в расширении `упд5б` раздел `CommonTemplates` и перенести из `crm3-26-promo`:
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026`;
- `ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж`;
2. в процедуре `ЗаполнитьТабличныйДокументУПД(...)` расширения `упд5б` для ветки 2026 использовать только эти новые макеты;
3. логику выбора и применения исторических макетов (`..._ru`, `..._625_ru`, `...981_ru`, `...534_ru`) не менять;
4. обеспечить установку `ОбластьШапка.Параметры.АвансовыеСчетаФактуры` в ветке печати, где используется макет 2026/2026Прослеж.
Конкретный код для вставки приведен в разделе `6.5`.
Требование по переносу доработок из текущего расширения `crm3-dev.rhana` в новое расширение `упд5б`:
1. перенести только ветку выбора макета периода 2026;
2. заменить использование `ПФ_MXL_УниверсальныйПередаточныйДокумент1096_ru` на `ОбщийМакет.ПФ_MXL_УниверсальныйПередаточныйДокумент2026` и `...2026Прослеж`;
3. оставить существующие ветки до 2026 без изменений.
---
## 6. Конкретные кодовые фрагменты (шаблоны для внедрения)
### 6.0. Общий шаблон расширяемого метода
Все изменения в существующих методах выполнять в форме:
```bsl
&ИзменениеИКонтроль("ИмяМетодаБазы")
Функция упд5б_ИмяМетодаБазы(...)
#Удаление
ТекстБазовогоКода = "...";
#КонецУдаления
#Вставка
// Новый или измененный фрагмент
#КонецВставки
КонецФункции
```
### 6.1. Функция строкового представления графы 5б
```bsl
Функция упд5б_СтрокаАвансовыеСчетаФактуры(ПлатежноРасчетныеДокументы) Экспорт
СтрокаНомеровИДата = "";
Для каждого СтрокаДокумента Из ПлатежноРасчетныеДокументы Цикл
Если ЗначениеЗаполнено(СтрокаДокумента.НомерСчетаФактурыНаАванс) Тогда
ТекстСтроки = СтрШаблон(
НСтр("ru='№ %1 от %2, исправление № %3 от %4'"),
СтрокаДокумента.НомерСчетаФактурыНаАванс,
Формат(СтрокаДокумента.ДатаСчетаФактурыНаАванс, "ДФ=dd.MM.yyyy"),
?(ЗначениеЗаполнено(СтрокаДокумента.НомерИсправленияСчетаФактурыНаАванс), СтрокаДокумента.НомерИсправленияСчетаФактурыНаАванс, "--"),
?(ЗначениеЗаполнено(СтрокаДокумента.ДатаИсправленияСчетаФактурыНаАванс), Формат(СтрокаДокумента.ДатаИсправленияСчетаФактурыНаАванс, "ДФ=dd.MM.yyyy"), "--")
);
СтрокаНомеровИДата = СтрокаНомеровИДата
+ ?(ПустаяСтрока(СтрокаНомеровИДата), "", "; ")
+ ТекстСтроки;
КонецЕсли;
КонецЦикла;
Возврат СтрокаНомеровИДата;
КонецФункции
```
### 6.2. Расширение `ПоместитьВременнуюТаблицуПлатежноРасчетныхДокументов(...)`
```bsl
&ИзменениеИКонтроль("ПоместитьВременнуюТаблицуПлатежноРасчетныхДокументов")
Функция упд5б_ПоместитьВременнуюТаблицуПлатежноРасчетныхДокументов(МенеджерВременныхТаблиц, МассивАналитикУчетаПоПартнерам)
#Удаление
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Ссылка,
| Таблица.СтрокаПлатежноРасчетныеДокументы
|ПОМЕСТИТЬ ТаблицаПлатежноРасчетныеДокументы
|ИЗ
| &ПлатежноРасчетныеДокументы КАК Таблица";
#КонецУдаления
#Вставка
// [+] Добавляем отдельную колонку для текстового представления графы 5б
// во временную таблицу ТаблицаПлатежноРасчетныеДокументы.
// [+] Заполняем колонку через новую функцию
// упд5б_СтрокаАвансовыеСчетаФактуры(...).
// [+] Включаем колонку в финальный набор, который участвует в формировании шапки печати.
ПлатежноРасчетныеДокументыСводно.Колонки.Добавить("СтрокаАвансовыеСчетаФактуры",
Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(1000)));
НоваяСтрока.СтрокаАвансовыеСчетаФактуры =
упд5б_СтрокаАвансовыеСчетаФактуры(ПлатежноРасчетныеДокументы);
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Ссылка,
| Таблица.СтрокаПлатежноРасчетныеДокументы,
| Таблица.СтрокаАвансовыеСчетаФактуры
|ПОМЕСТИТЬ ТаблицаПлатежноРасчетныеДокументы
|ИЗ
| &ПлатежноРасчетныеДокументы КАК Таблица";
#КонецВставки
КонецФункции
```
### 6.3. Расширение `ТекстЗапросаПолученияНомеровИДатПлатежноРасчетныхДокументов()`
```bsl
&ИзменениеИКонтроль("ТекстЗапросаПолученияНомеровИДатПлатежноРасчетныхДокументов")
Функция упд5б_ТекстЗапросаПолученияНомеровИДатПлатежноРасчетныхДокументов()
#Удаление
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДанныеПервичныхДокументов.Дата КАК ДатаВходящегоДокумента,
| ДанныеПервичныхДокументов.Номер КАК НомерВходящегоДокумента,
| ТаблицаДокументов.Ссылка КАК СчетФактура
|ИЗ
| РасчетыСКлиентами_ОснованияИДокументыОплаты КАК ПлатежныеДокументы
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| ТаблицаЗаполненияПлатежноРасчетныхДокументов КАК ТаблицаДокументов
| ПО
| ПлатежныеДокументы.ОснованиеОплаты = ТаблицаДокументов.ДокументОснование
| И ПлатежныеДокументы.АналитикаУчетаПоПартнерам В (&МассивАналитикУчетаПоПартнерам)
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| РегистрСведений.ДанныеПервичныхДокументов КАК ДанныеПервичныхДокументов
| ПО
| ПлатежныеДокументы.Организация = ДанныеПервичныхДокументов.Организация
| И ПлатежныеДокументы.ДокументОплаты = ДанныеПервичныхДокументов.Документ
|
|ГДЕ
| ТИПЗНАЧЕНИЯ(ПлатежныеДокументы.ДокументОплаты) <> ТИП(Документ.ВзаимозачетЗадолженности)
|
|ИТОГИ ПО
| СчетФактура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ РасчетыСКлиентами_ОснованияИДокументыОплаты
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ТаблицаЗаполненияПлатежноРасчетныхДокументов";
#КонецУдаления
#Вставка
// [+] Этап 1: формируем ВТ втДанныеПлатежноРасчетныхДокументов и
// добавляем РасчетныйДокумент для связи с авансовыми СФ.
// [+] Этап 2: определяем авансовый СФ и его исправление (если есть),
// сворачиваем по СчетФактура.
// [+] Этап 3: отдаём полный набор полей, требуемых для формирования строки 5б.
// [+] Этап 4: очищаем все созданные ВТ.
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДанныеПервичныхДокументов.Дата КАК ДатаВходящегоДокумента,
| ДанныеПервичныхДокументов.Номер КАК НомерВходящегоДокумента,
| ТаблицаДокументов.Ссылка КАК СчетФактура,
| ПлатежныеДокументы.РасчетныйДокумент КАК РасчетныйДокумент
|ПОМЕСТИТЬ втДанныеПлатежноРасчетныхДокументов
|ИЗ
| РасчетыСКлиентами_ОснованияИДокументыОплаты КАК ПлатежныеДокументы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаЗаполненияПлатежноРасчетныхДокументов КАК ТаблицаДокументов
| ПО ПлатежныеДокументы.ОснованиеОплаты = ТаблицаДокументов.ДокументОснование
| И ПлатежныеДокументы.АналитикаУчетаПоПартнерам В (&МассивАналитикУчетаПоПартнерам)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПервичныхДокументов КАК ДанныеПервичныхДокументов
| ПО ПлатежныеДокументы.Организация = ДанныеПервичныхДокументов.Организация
| И ПлатежныеДокументы.ДокументОплаты = ДанныеПервичныхДокументов.Документ
|ГДЕ
| ТИПЗНАЧЕНИЯ(ПлатежныеДокументы.ДокументОплаты) <> ТИП(Документ.ВзаимозачетЗадолженности)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втДанныеПлатежноРасчетныхДокументов.РасчетныйДокумент КАК РасчетныйДокумент,
| втДанныеПлатежноРасчетныхДокументов.СчетФактура КАК СчетФактура,
| СчетФактураАванс.Ссылка КАК СчетФактураАванс,
| ЕСТЬNULL(ИсправленныйСчетФактураАванс.Ссылка, ЗНАЧЕНИЕ(Документ.СчетФактураВыданныйАванс.ПустаяСсылка)) КАК ИсправлениеСчетаФактурыАванс,
| МАКСИМУМ(СчетФактураАванс.НомерИсправления) КАК НомерИсправления
|ПОМЕСТИТЬ втНомераИсправленийСчетовФактурНаАванс
|ИЗ
| втДанныеПлатежноРасчетныхДокументов КАК втДанныеПлатежноРасчетныхДокументов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданныйАванс КАК СчетФактураАванс
| ПО втДанныеПлатежноРасчетныхДокументов.РасчетныйДокумент = СчетФактураАванс.ДокументОснование
| И НЕ СчетФактураАванс.Корректировочный
| И СчетФактураАванс.Проведен
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданныйАванс КАК ИсправленныйСчетФактураАванс
| ПО СчетФактураАванс.СчетФактураОснование = ИсправленныйСчетФактураАванс.Ссылка
| И СчетФактураАванс.Исправление
| И НЕ ИсправленныйСчетФактураАванс.Корректировочный
| И ИсправленныйСчетФактураАванс.Проведен
|СГРУППИРОВАТЬ ПО
| втДанныеПлатежноРасчетныхДокументов.РасчетныйДокумент,
| втДанныеПлатежноРасчетныхДокументов.СчетФактура,
| СчетФактураАванс.Ссылка,
| ЕСТЬNULL(ИсправленныйСчетФактураАванс.Ссылка, ЗНАЧЕНИЕ(Документ.СчетФактураВыданныйАванс.ПустаяСсылка))
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДанныеПлатежноРасчетныхДокументов.РасчетныйДокумент КАК РасчетныйДокумент,
| ДанныеПлатежноРасчетныхДокументов.СчетФактура КАК СчетФактура,
| ДанныеПлатежноРасчетныхДокументов.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
| ДанныеПлатежноРасчетныхДокументов.НомерВходящегоДокумента КАК НомерВходящегоДокумента,
| ДанныеСчетаФактурыАванс.Номер КАК НомерСчетаФактурыНаАванс,
| ДанныеСчетаФактурыАванс.Дата КАК ДатаСчетаФактурыНаАванс,
| СчетаФактурыАванс.НомерИсправления КАК НомерИсправленияСчетаФактурыНаАванс,
| ДанныеИсправленияСчетаФактурыАванс.Дата КАК ДатаИсправленияСчетаФактурыНаАванс
|ИЗ
| втДанныеПлатежноРасчетныхДокументов КАК ДанныеПлатежноРасчетныхДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ втНомераИсправленийСчетовФактурНаАванс КАК СчетаФактурыАванс
| ПО ДанныеПлатежноРасчетныхДокументов.РасчетныйДокумент = СчетаФактурыАванс.РасчетныйДокумент
| И ДанныеПлатежноРасчетныхДокументов.СчетФактура = СчетаФактурыАванс.СчетФактура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПервичныхДокументов КАК ДанныеСчетаФактурыАванс
| ПО ДанныеСчетаФактурыАванс.Документ = СчетаФактурыАванс.СчетФактураАванс
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПервичныхДокументов КАК ДанныеИсправленияСчетаФактурыАванс
| ПО ДанныеИсправленияСчетаФактурыАванс.Документ = СчетаФактурыАванс.ИсправлениеСчетаФактурыАванс
|ИТОГИ ПО
| СчетФактура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ втНомераИсправленийСчетовФактурНаАванс
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ втДанныеПлатежноРасчетныхДокументов
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ РасчетыСКлиентами_ОснованияИДокументыОплаты
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ТаблицаЗаполненияПлатежноРасчетныхДокументов";
#КонецВставки
Возврат ТекстЗапроса;
КонецФункции
```
### 6.4. Расширение `ТекстЗапросаДанныхШапкиДляПечатиСчетаФактуры(ПараметрыПечати)`
```bsl
&ИзменениеИКонтроль("ТекстЗапросаДанныхШапкиДляПечатиСчетаФактуры")
Функция упд5б_ТекстЗапросаДанныхШапкиДляПечатиСчетаФактуры(ПараметрыПечати)
ТекстЗапроса = ТекстЗапроса + "
|/////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ...
| ДанныеДокумента.Корректировочный КАК КорректировочныйСчетФактура,
| ЕСТЬNULL(ТаблицаПлатежноРасчетныеДокументы.СтрокаПлатежноРасчетныеДокументы,
| ДанныеДокумента.СтрокаПлатежноРасчетныеДокументы) КАК СтрокаПоДокументу,
| ...
|ИЗ
| ...";
#Вставка
// [+] Вставлять сразу после базового присваивания ТекстЗапроса (до ветки Если...).
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"| ЕСТЬNULL(ТаблицаПлатежноРасчетныеДокументы.СтрокаПлатежноРасчетныеДокументы,
| ДанныеДокумента.СтрокаПлатежноРасчетныеДокументы) КАК СтрокаПоДокументу,",
"| ЕСТЬNULL(ТаблицаПлатежноРасчетныеДокументы.СтрокаПлатежноРасчетныеДокументы,
| ДанныеДокумента.СтрокаПлатежноРасчетныеДокументы) КАК СтрокаПоДокументу,
| ЕСТЬNULL(ТаблицаПлатежноРасчетныеДокументы.СтрокаАвансовыеСчетаФактуры,
| ДанныеДокумента.СтрокаАвансовыеСчетаФактуры) КАК ПредставлениеАвансовыеСчетаФактуры,");
#КонецВставки
Если ПечататьСчетаФактурыПолученные Тогда
...
#Вставка
// [+] Вставлять внутри ветки Если... после формирования текста объединяемой части.
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"| """" КАК СтрокаПоДокументу,",
"| """" КАК СтрокаПоДокументу,
| """" КАК ПредставлениеАвансовыеСчетаФактуры,");
#КонецВставки
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
```
### 6.5. Расширение `ЗаполнитьТабличныйДокументУПД(...)` в `ПечатьОбщихФорм`
Модуль: `crm3-dev.upd5b/src/DataProcessors/ПечатьОбщихФорм/Ext/ManagerModule.bsl`
```bsl
&ИзменениеИКонтроль("ЗаполнитьТабличныйДокументУПД")
Процедура упд5б_ЗаполнитьТабличныйДокументУПД(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати)
#Вставка
// === [UPD5B] НАЧАЛО БЛОКА ВСТАВКИ ===
МакетУПД_2026 = УправлениеПечатью.МакетПечатнойФормы(
"Обработка.ПечатьОбщихФорм.ПФ_MXL_УниверсальныйПередаточныйДокумент2026");
МакетУПД_2026Прослеж = УправлениеПечатью.МакетПечатнойФормы(
"Обработка.ПечатьОбщихФорм.ПФ_MXL_УниверсальныйПередаточныйДокумент2026Прослеж");
ЕстьПостановление2026 = ЛОЖЬ;
// === [UPD5B] КОНЕЦ БЛОКА ВСТАВКИ ===
#КонецВставки
#Удаление
Если ДействуетПостановление534(ДанныеПечати.Дата, ДанныеПечати.ДатаИсправления) Тогда
Макет = МакетУПД_534;
ЕстьПостановление534 = Истина;
ИначеЕсли ДействуетПостановление981(ДанныеПечати.Дата, ДанныеПечати.ДатаИсправления) Тогда
Макет = МакетУПД_981;
ЕстьПостановление981 = Истина;
ИначеЕсли ВедетсяУчетНДСПоФЗ56(ДанныеПечати.Дата, ДанныеПечати.ДатаИсправления) Тогда
Макет = МакетУПД_625;
ЕстьПостановление1137_625 = Истина;
Иначе
Макет = МакетУПД;
ЕстьПостановление1137 = Истина;
КонецЕсли;
#КонецУдаления
#Вставка
// === [UPD5B] НАЧАЛО БЛОКА ВСТАВКИ ===
Если ?(ЗначениеЗаполнено(ДанныеПечати.ДатаИсправления), ДанныеПечати.ДатаИсправления, ДанныеПечати.Дата) >= '20260101' Тогда
ЕстьПрослеживаемыеТоварыВТабличнойЧасти = Ложь;
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ДанныеПечати, "ЕстьПрослеживаемыеТоварыВТабличнойЧасти")
И ЗначениеЗаполнено(ДанныеПечати.ЕстьПрослеживаемыеТоварыВТабличнойЧасти) Тогда
ЕстьПрослеживаемыеТоварыВТабличнойЧасти = ДанныеПечати.ЕстьПрослеживаемыеТоварыВТабличнойЧасти;
КонецЕсли;
Если (ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ДанныеПечати, "ЕстьПрослеживаемыеТовары")
И ЗначениеЗаполнено(ДанныеПечати.ЕстьПрослеживаемыеТовары)
И ДанныеПечати.ЕстьПрослеживаемыеТовары)
Или ЕстьПрослеживаемыеТоварыВТабличнойЧасти Тогда
Макет = МакетУПД_2026Прослеж;
Иначе
Макет = МакетУПД_2026;
КонецЕсли;
ЕстьПостановление2026 = Истина;
ИначеЕсли ДействуетПостановление534(ДанныеПечати.Дата, ДанныеПечати.ДатаИсправления) Тогда
Макет = МакетУПД_534;
ЕстьПостановление534 = Истина;
ИначеЕсли ДействуетПостановление981(ДанныеПечати.Дата, ДанныеПечати.ДатаИсправления) Тогда
Макет = МакетУПД_981;
ЕстьПостановление981 = Истина;
ИначеЕсли ВедетсяУчетНДСПоФЗ56(ДанныеПечати.Дата, ДанныеПечати.ДатаИсправления) Тогда
Макет = МакетУПД_625;
ЕстьПостановление1137_625 = Истина;
Иначе
Макет = МакетУПД;
ЕстьПостановление1137 = Истина;
КонецЕсли;
// === [UPD5B] КОНЕЦ БЛОКА ВСТАВКИ ===
#КонецВставки
#Вставка
// === [UPD5B] НАЧАЛО БЛОКА ВСТАВКИ ===
АвансовыеСчетаФактуры =
?(ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ДанныеПечати, "ПредставлениеАвансовыеСчетаФактуры")
И ЗначениеЗаполнено(ДанныеПечати.ПредставлениеАвансовыеСчетаФактуры),
ДанныеПечати.ПредставлениеАвансовыеСчетаФактуры,
НСтр("ru='№ -- от --, исправление № -- от --'"));
Если ЕстьПостановление2026 Тогда
ОбластьШапка.Параметры.АвансовыеСчетаФактуры = АвансовыеСчетаФактуры;
КонецЕсли;
// === [UPD5B] КОНЕЦ БЛОКА ВСТАВКИ ===
#КонецВставки
КонецПроцедуры
```
---
## 7. Правила разработки для расширения
1. Все изменения в перехватываемых методах оформлять через `&ИзменениеИКонтроль`.
2. Новый код помещать в `#Вставка`, удаляемый - в `#Удаление`.
3. В блоках `#Удаление` не добавлять комментарии и новый текст.
4. Новые методы расширения именовать с префиксом `упд5б_`.
5. Сохранять совместимость со старыми документами (обязательный fallback).
### 7.1. Правила `#Удаление` / `#Вставка` для многострочных текстов запроса
1. Директивы применяются к **операторам языка 1С**, а не к частям строкового литерала.
2. Если меняется многострочный SQL-текст (`ТекстЗапроса = "..."`), в `#Удаление` помещается **весь оператор присваивания**.
3. Внутрь текста SQL (между кавычками) директивы `#Удаление/#Вставка` не вставляются.
4. В `#Вставка` вставляется новый оператор присваивания целиком либо последовательность `СтрЗаменить(...)` над полным базовым текстом.
5. Блок `#Удаление` содержит только удаляемый код (без поясняющих комментариев), комментарии допускаются в `#Вставка`.
6. При изменении условных операторов (`Если ... Тогда ... Иначе ... КонецЕсли`) заменять **целостный блок управления** в `#Удаление/#Вставка` (от `Если` до `КонецЕсли`), а не отдельный заголовок условия.
### 7.2. Анти-паттерны (что не делать)
1. Не дублировать один и тот же код в `#Удаление` и `#Вставка` без фактических изменений.
2. Не вставлять директивы `#Удаление/#Вставка` внутрь многострочного SQL-текста.
3. Не оставлять в `#Удаление` текстовые ориентиры, пояснения и комментарии.
4. Не менять состав колонок только в одной ветке запроса, если есть `ОБЪЕДИНИТЬ ВСЕ`.
5. Не использовать имена полей в последующих частях запроса, если эти поля не сформированы в предыдущих `ПОМЕСТИТЬ`.
---
## 8. Поэтапный план реализации
### Этап 1. Подготовка
1. Создать/активировать объекты расширения:
- документ `СчетФактураВыданный`;
- обработка `ПечатьОбщихФорм`;
- макет УПД.
2. Подтвердить, какие методы доступны для `&ИзменениеИКонтроль`.
### Этап 2. Реализация данных 5б в расширении документа
1. Добавить `упд5б_СтрокаАвансовыеСчетаФактуры`.
2. Расширить ВТ платежно-расчетных документов.
3. Расширить запрос получения номеров/дат.
4. Прокинуть `ПредставлениеАвансовыеСчетаФактуры` в `РезультатПоШапке`.
### Этап 3. Реализация вывода в расширении печати
1. Доработать `р_ЗаполнитьТабличныйДокументУПД`.
2. Заполнить `ОбластьШапка.Параметры.АвансовыеСчетаФактуры`.
3. Проверить fallback при отсутствии данных.
### Этап 4. Изменение макета
1. Добавить параметр в строку 5б.
2. Проверить визуальное отображение длинного значения.
### Этап 5. Тестирование
1. Один авансовый СФ.
2. Несколько авансовых СФ.
3. Исправленный авансовый СФ.
4. Отсутствие авансовых СФ.
5. Регрессия текущих форм УПД.
---
## 9. Критерии приемки
1. Графа 5б заполняется корректными данными авансовых СФ.
2. При отсутствии данных выводится fallback.
3. Реализация локализована преимущественно в `crm3-dev.rhana`.
4. Печатная форма УПД формируется без ошибок.
5. Регрессии по действующим сценариям отсутствуют.
---
## 10. Оценка трудозатрат
- Этап 1: 1-2 часа
- Этап 2: 5-8 часов
- Этап 3: 1-2 часа
- Этап 4: 1-2 часа
- Этап 5: 3-5 часов
**Итого:** 11-19 часов.
---
## 11. Результаты поставки
1. Измененные объекты расширения `crm3-dev.rhana` по разделу 4.
2. Макет УПД расширения с поддержкой графы 5б.
3. Протокол тестирования с результатами.
4. Перечень фактических изменений по объектам и методам.
---
@@ -1,86 +0,0 @@
---
title: Улучшения скрипта проверки дубликатов
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-10
date_modified: 2025-12-10
show_metadata_block: true
show_index_link: true
---
# Улучшения скрипта проверки дубликатов
## Проблема
Скрипт не обнаруживал проблем, но при реструктуризации возникала ошибка нарушения уникальности.
## Причина
Скрипт проверял только случаи, когда **несколько записей с обнуляемыми ссылками** становятся дубликатами друг друга после обнуления. Но он **не проверял случаи**, когда обнуленные записи совпадают с **уже существующими записями с NULL значениями**.
### Пример проблемы:
```
ДО реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=Партнеры.K1, Объект=X, CRM_Интерес=Y
Запись 2: ГлавнаяЗапись=true, Клиент=NULL, Объект=X, CRM_Интерес=Y ← Уже существует с NULL
Запись 3: ГлавнаяЗапись=true, Клиент=CRM_ПотенциальныеКлиенты.K2, Объект=X, CRM_Интерес=Y ← Будет обнулена
ПОСЛЕ реструктуризации:
Запись 1: ГлавнаяЗапись=true, Клиент=Партнеры.K1, Объект=X, CRM_Интерес=Y
Запись 2: ГлавнаяЗапись=true, Клиент=NULL, Объект=X, CRM_Интерес=Y
Запись 3: ГлавнаяЗапись=true, Клиент=NULL, Объект=X, CRM_Интерес=Y ← ОБНУЛЕНО, совпала с Записью 2!
РЕЗУЛЬТАТ: Запись 2 и Запись 3 стали ДУБЛИКАТАМИ!
```
## Решение
Добавлена **дополнительная проверка**, которая:
1. ✅ Получает все записи регистра (включая те, у которых уже есть NULL)
2. ✅ Создает структуру всех существующих комбинаций измерений
3. ✅ Для каждой записи с обнуляемыми ссылками:
- Симулирует обнуление ссылок
- Проверяет, не совпадет ли обнуленная запись с уже существующей
4. ✅ Выводит предупреждение, если найдены совпадения
## Что изменилось в скрипте
### Добавлена проверка совпадений
Скрипт теперь проверяет:
- ✅ Совпадение обнуленных записей с уже существующими записями с NULL
- ✅ Все комбинации обнуления измерений (Клиент, Объект, CRM_Интерес)
- ✅ Комбинированное обнуление нескольких измерений одновременно
### Новые сообщения
Скрипт теперь выводит:
- ⚠️ **"КРИТИЧНО: Найдено X записей, которые после обнуления совпадут с уже существующими записями!"**
- ✅ **"Совпадений обнуленных записей с уже существующими не найдено."** (если проблем нет)
## Как использовать
1. Запустите скрипт `check_duplicates_crm_journal.bsl`
2. Проверьте вывод:
- Если есть предупреждения о совпадениях - **необходимо удалить проблемные записи**
- Если все проверки пройдены - регистр готов к реструктуризации
## Рекомендации
Если скрипт находит совпадения:
1. **Удалите проблемные записи** перед реструктуризацией:
- Записи с `Клиент=CRM_ПотенциальныеКлиенты.*`
- Записи с `Объект`, ссылающимся на удаляемые типы
- Записи с `CRM_Интерес`, ссылающимся на удаляемые документы
2. **Повторно запустите скрипт** для проверки
3. **Выполните реструктуризацию** только после того, как все проверки пройдены
## Важно
⚠️ Скрипт теперь проверяет **все возможные сценарии** нарушения уникальности, включая совпадение с уже существующими записями. Это должно решить проблему, когда скрипт не находил проблем, но при реструктуризации возникала ошибка.
@@ -1,279 +0,0 @@
---
title: "ФИНАЛЬНЫЙ ОТЧЕТ: Глубинный анализ регистров на нарушение уникальности данных"
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-09
date_modified: 2025-12-09
show_metadata_block: true
show_index_link: true
---
# ФИНАЛЬНЫЙ ОТЧЕТ: Глубинный анализ регистров на нарушение уникальности данных
> 📚 **См. также:** [Оглавление документов](INDEX.md) | [Глубинный анализ регистров](Глубинный_анализ_регистров.md) | [Итоговый отчет](Итоговый_отчет_анализа_регистров.md) | [Анализ ошибок обновления](Анализ_ошибок_обновления.md)
## Резюме
Проведен полный анализ всех регистров сведений и регистров накопления в конфигурации `CRM3devLocal` на предмет возможного нарушения уникальности данных после обновления до конфигурации `CRM326/CRM326_TEST`.
**Дата анализа:** 2024
**Версия конфигурации:** CRM3devLocal → CRM326/CRM326_TEST
---
## Методология анализа
1. **Сравнение конфигураций:** Сравнение объектов в `CRM3devLocal` и `CRM326/CRM326_TEST` для выявления удаляемых объектов
2. **Автоматический анализ:** Сканирование всех файлов метаданных регистров (801 регистр)
3. **Проверка удаляемых объектов:** Анализ измерений на ссылки к удаляемым объектам
4. **Выявление рисков:** Определение регистров с потенциальными проблемами уникальности
---
## Статистика анализа
### Проанализировано
- **Всего регистров:** 801
- **Регистров сведений:** ~400
- **Регистров накопления:** ~400
### Удаляемые объекты конфигурации
- **Всего удаляемых объектов:** 176
- **Справочников:** 59
- **Документов:** 41
- **Перечислений:** 76
### Найдено проблемных регистров: 35
---
## КРИТИЧЕСКИЕ ПРОБЛЕМЫ (CRITICAL)
### Все найденные регистры полностью удаляются
Все 35 проблемных регистров **полностью удаляются** из конфигурации при обновлении. Это означает, что:
1. **Все данные этих регистров будут потеряны** без возможности автоматического восстановления
2. **Риск нарушения уникальности:** НЕТ (регистры полностью удаляются, данные теряются)
3. **Требуются действия:** Экспорт данных перед обновлением (если данные нужны)
---
## Список удаляемых регистров
### Регистры накопления (25 регистров)
1. **CRM_Планирование** - Регистр планирования CRM
2. **rh_ТоварыНаСкладахСебестоимость** - Товары на складах (себестоимость)
3. **ДвиженияДенежныеСредстваПрочиеАктивыПассивы** - Движения денежных средств
4. **ДенежныеСредстваКПоступлениюНаличные** - Денежные средства к поступлению
5. **ДенежныеСредстваКСписаниюСПодотчетныхЛиц** - Денежные средства к списанию
6. **ПартииЗатратНаВыпуск** - Партии затрат на выпуск
7. **ПланыПродаж** - Планы продаж
8. **ПрочиеАктивыПассивы** - Прочие активы и пассивы
9. **РезервыСерийТоваров** - Резервы серий товаров
10. **СебестоимостьТоваров** - Себестоимость товаров
11. **ТМЦВЭксплуатации** - ТМЦ в эксплуатации
12. **ТоварыКОформлениюОтчетовКомитенту** - Товары к оформлению отчетов комитенту
13. **ТоварыКОформлениюПоступления** - Товары к оформлению поступления
14. **ТоварыНаСкладах** - Товары на складах
15. **ТоварыОрганизаций** - Товары организаций
16. **ТоварыОрганизацийКПередаче** - Товары организаций к передаче
17. **ТоварыПереданныеНаКомиссию** - Товары переданные на комиссию
18. **УдалитьДвиженияНоменклатураПрочиеАктивыПассивы** - Удаляемый регистр
19. **УдалитьПартииЗатратНаВыпуск** - Удаляемый регистр
20. **УдалитьПланыПродажИВнутреннегоПотребления** - Удаляемый регистр
21. **УдалитьТоварыКОформлениюОтчетовКомитенту** - Удаляемый регистр
22. **УдалитьТоварыОрганизаций** - Удаляемый регистр
23. **УдалитьТоварыОрганизацийКОформлению** - Удаляемый регистр
24. **УдалитьТоварыОрганизацийКПередаче** - Удаляемый регистр
25. **УдалитьТоварыПереданныеНаКомиссию** - Удаляемый регистр
### Регистры сведений (10 регистров)
1. **ВерсииПодсистем** - Версии подсистем
2. **ПервичныеДокументы** - Первичные документы
3. **ПервичныеДокументыМенеджер** - Первичные документы менеджер
4. **ПервичныеДокументыМенеджерРеализация** - Первичные документы менеджер (реализация)
5. **ПроблемыСостоянияСистемы** - Проблемы состояния системы
6. **РеестрДокументов** - Реестр документов
7. **СостоянияЗагрузкиНаложенныхПлатежейСервисДоставки** - Состояния загрузки наложенных платежей
8. **СостоянияОтгрузки** - Состояния отгрузки
9. **СостоянияЭД** - Состояния электронных документов
10. **УдалитьРеестрДокументов** - Удаляемый реестр документов
---
## ВЫСОКИЙ РИСК (HIGH)
### РегистрНакопления.МатериалыИРаботыВПроизводстве
**Статус:** ⚠️ ВЫСОКИЙ РИСК - Удаляется измерение
**Описание проблемы:**
- Из регистра удаляется измерение `УдалитьАналитикаУчетаНоменклатуры`
- Измерение помечено как "(не используется)" в метаданных
- Тип измерения: `CatalogRef.КлючиАналитикиУчетаНоменклатуры`
**Структура регистра:**
- **Тип:** Регистр накопления (Остатки)
- **Измерения:**
1. Организация
2. Номенклатура
3. Характеристика
4. Подразделение
5. Серия
6. Назначение
7. **УдалитьАналитикаУчетаНоменклатуры** ⚠️ (УДАЛЯЕТСЯ)
**Почему это критично:**
После удаления измерения `УдалитьАналитикаУчетаНоменклатуры` все записи с одинаковыми значениями остальных измерений, но разными значениями удаляемого измерения, станут неразличимыми. Это приведет к нарушению уникальности ключа регистра.
**Пример проблемы:**
```
ДО удаления измерения:
┌─────────────┬──────────────┬─────────────────────────────────────┬──────────┐
│ Организация │ Номенклатура │ УдалитьАналитикаУчетаНоменклатуры │ Количество│
├─────────────┼──────────────┼─────────────────────────────────────┼──────────┤
│ ООО "А" │ Товар1 │ Ключ1 │ 10 │
│ ООО "А" │ Товар1 │ Ключ2 │ 20 │
└─────────────┴──────────────┴─────────────────────────────────────┴──────────┘
ПОСЛЕ удаления измерения:
┌─────────────┬──────────────┬──────────┐
│ Организация │ Номенклатура │ Количество│
├─────────────┼──────────────┼──────────┤
│ ООО "А" │ Товар1 │ 10 │ ← ДУБЛИКАТ!
│ ООО "А" │ Товар1 │ 20 │ ← ДУБЛИКАТ!
└─────────────┴──────────────┴──────────┘
→ НАРУШЕНИЕ УНИКАЛЬНОСТИ!
```
**Рекомендации:**
1. **ОБЯЗАТЕЛЬНО** выполнить проверку на дубликаты перед обновлением (использовать скрипт `check_duplicates_materials.bsl`)
2. Если дубликаты найдены - объединить записи или очистить данные
3. Убедиться, что после обработки дубликатов нет
---
## План действий перед обновлением
### Этап 1: Подготовка (КРИТИЧНО) ⚠️
- [ ] **Создать полную резервную копию базы данных**
- [ ] **Экспортировать данные из всех 35 проблемных регистров:**
- [ ] Все 25 регистров накопления
- [ ] Все 10 регистров сведений
- [ ] **Выполнить проверку на дубликаты для регистра МатериалыИРаботыВПроизводстве:**
- [ ] Запустить скрипт `check_duplicates_materials.bsl`
- [ ] Проанализировать результаты
- [ ] Определить стратегию обработки
### Этап 2: Обработка данных
#### Для регистра МатериалыИРаботыВПроизводстве:
- [ ] Если дубликаты НЕ найдены:
- [ ] Можно безопасно применять обновление
- [ ] Измерение будет удалено без последствий
- [ ] Если дубликаты найдены:
- [ ] Выбрать вариант решения (объединение или очистка)
- [ ] Выполнить обработку данных
- [ ] Повторно проверить на дубликаты
- [ ] Убедиться, что дубликатов больше нет
#### Для удаляемых регистров:
- [ ] Определить, нужны ли данные после обновления
- [ ] Если нужны:
- [ ] Создать скрипт миграции данных
- [ ] Протестировать миграцию на копии базы
- [ ] Если не нужны:
- [ ] Можно удалить данные перед обновлением
### Этап 3: Применение обновления
- [ ] Применить обновление конфигурации из `CRM326/CRM326_TEST`
- [ ] Проверить отсутствие ошибок при обновлении
- [ ] Проверить целостность данных
### Этап 4: Верификация
- [ ] Проверить работу регистра МатериалыИРаботыВПроизводстве
- [ ] Убедиться, что данные корректны
- [ ] Проверить отсутствие ошибок уникальности
- [ ] Провести функциональное тестирование
- [ ] Если данные были мигрированы - проверить их корректность
---
## Инструменты и скрипты
### Созданные инструменты:
1. **compare_configurations.py** - сравнение конфигураций для поиска удаляемых объектов
2. **deep_register_analysis.py** - автоматический анализ всех регистров
3. **check_duplicates_materials.bsl** - проверка дубликатов в регистре МатериалыИРаботыВПроизводстве
4. **analyze_registers.py** - базовый анализ регистров
5. **find_references.py** - поиск ссылок на удаляемые объекты
### Отчеты:
- `deleted_objects_report.txt` - отчет об удаляемых объектах (176 объектов)
- `deep_register_analysis_report.txt` - детальный отчет анализа регистров (35 проблемных регистров)
- `register_analysis_report.txt` - базовый отчет
- `references_report.txt` - отчет о ссылках
---
## Выводы
### Критические проблемы:
1. **35 регистров полностью удаляются:**
- 25 регистров накопления
- 10 регистров сведений
- Все данные этих регистров будут потеряны
2. **1 регистр имеет удаляемое измерение:**
- РегистрНакопления.МатериалыИРаботыВПроизводстве
- Измерение: УдалитьАналитикаУчетаНоменклатуры
- **ВЫСОКИЙ РИСК нарушения уникальности**
### Главный риск:
**РегистрНакопления.МатериалыИРаботыВПроизводстве** может потерять уникальность данных после удаления измерения `УдалитьАналитикаУчетаНоменклатуры`.
### Обязательные действия:
1. ✅ **ОБЯЗАТЕЛЬНО** выполнить проверку на дубликаты перед обновлением
2. ✅ **ОБЯЗАТЕЛЬНО** обработать найденные дубликаты
3. ✅ **ОБЯЗАТЕЛЬНО** создать резервную копию базы данных
4. ✅ **ОБЯЗАТЕЛЬНО** экспортировать данные из удаляемых регистров (если они нужны)
### Рекомендации:
- Не применять обновление без предварительной проверки на дубликаты
- Использовать созданные скрипты для автоматизации проверки
- Документировать все действия по обработке данных
- Тестировать на копии базы данных перед применением к рабочей базе
---
## Статус анализа
✅ **Анализ завершен**
- Проанализировано: 801 регистр
- Найдено проблемных регистров: 35
- Удаляемых объектов конфигурации: 176
- Статус: Требуется обработка данных перед обновлением
---
**ВНИМАНИЕ!** Перед применением обновления обязательно выполните все действия из раздела "План действий перед обновлением".
@@ -1,141 +0,0 @@
---
title: ФИНАЛЬНЫЙ СПИСОК РОЛЕЙ ДЛЯ ВКЛЮЧЕНИЯ В НОВОЙ СИСТЕМЕ
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
version: 1.0
date_created: 2025-12-10
date_modified: 2025-12-10
show_metadata_block: true
show_index_link: true
---
# ФИНАЛЬНЫЙ СПИСОК РОЛЕЙ ДЛЯ ВКЛЮЧЕНИЯ В НОВОЙ СИСТЕМЕ
## ⚠️ ВАЖНО: Учет переименований
В старой системе роли могут называться **"Добавление изменение..."**, а в новой системе **"Добавление и изменение..."**. Это одна и та же роль с разным названием.
При поиске ролей в новой системе необходимо учитывать это различие.
---
## 📋 СПИСОК РОЛЕЙ ДЛЯ ВКЛЮЧЕНИЯ (16 позиций)
### 1. Базовые права (CRM)
- **Старая система:** "Базовые права (CRM)" - ✅ Да
- **Новая система:** "Базовые права (CRM)" - ❌ Нет
- **Действие:** ✅ Включить
### 2. Ввод документа "Отчет по работам" (CRM)
- **Старая система:** "Ввод документа "Отчет по работам" (CRM)" - ✅ Да
- **Новая система:** "Ввод документа "Отчет по работам" (CRM)" - ❌ Нет
- **Действие:** ✅ Включить
### 3. Выполнение обмена электронными документами
- **Старая система:** "Выполнение обмена электронными документами" - ✅ Да
- **Новая система:** Отсутствует в списке
- **Действие:** ⚠️ Проверить наличие роли и включить (возможно переименована)
### 4. Выполнение синхронизации данных
- **Старая система:** "Выполнение синхронизации данных" - ✅ Да
- **Новая система:** "Выполнение синхронизации данных" - ❌ Нет
- **Действие:** ✅ Включить
### 5. Добавление и изменение документов по банку
- **Старая система:** "Добавление и изменение документов по банку" - ✅ Да
- **Новая система:** "Добавление и изменение документов по банку" - ❌ Нет
- **Действие:** ✅ Включить
### 6. Добавление и изменение реализаций товаров услуг
- **Старая система:** "Добавление и изменение реализаций товаров услуг" - ✅ Да
- **Новая система:** "Добавление и изменение реализаций товаров услуг" - ❌ Нет
- **Действие:** ✅ Включить
### 7. Добавление и изменение заказов клиентов ⚠️ ПЕРЕИМЕНОВАНИЕ
- **Старая система:** "Добавление изменение заказов клиентов" - ✅ Да
- **Новая система:** "Добавление и изменение заказов клиентов" - ❌ Нет
- **Примечание:** Название отличается: "изменение" → "и изменение"
- **Действие:** ✅ Включить (это та же роль)
### 8. Добавление и изменение узлов планов обмена ⚠️ ПЕРЕИМЕНОВАНИЕ
- **Старая система:** "Добавление изменение узлов планов обмена" - ✅ Да
- **Новая система:** "Добавление и изменение узлов планов обмена" - ❌ Нет (или отсутствует)
- **Примечание:** Название отличается: "изменение" → "и изменение"
- **Действие:** ✅ Найти роль "Добавление и изменение узлов планов обмена" и включить
### 9. Использование дополнительных отчетов и обработок УТ ⚠️ ПЕРЕИМЕНОВАНИЕ
- **Старая система:** "Использование дополнительных отчетов и обработок (CRM)" - ✅ Да
- **Новая система:** "Использование дополнительных отчетов и обработок УТ" - ❌ Нет (или нужно проверить)
- **Примечание:** В новой системе "(CRM)" заменено на "УТ"
- **Действие:** ✅ Найти роль "Использование дополнительных отчетов и обработок УТ" и включить
### 10. Использование интеграции с 1С:Документооборотом
- **Старая система:** "Использование интеграции с 1С:Документооборотом" - ✅ Да
- **Новая система:** "Использование интеграции с 1С:Документооборотом" - ❌ Нет
- **Действие:** ✅ Включить
### 11. Настройка синхронизации данных ⚠️ ОТСУТСТВУЕТ
- **Старая система:** "Настройка синхронизации данных" - ✅ Да
- **Новая система:** Отсутствует в списке
- **Действие:** ⚠️ Проверить, есть ли под другим названием (например, "Настройка синхронизации файлов")
### 12. Раздел запасы
- **Старая система:** "Раздел запасы" - ✅ Да
- **Новая система:** "Раздел запасы" - ❌ Нет (или отсутствует)
- **Действие:** ✅ Включить
### 13. Раздел отчеты и мониторинг
- **Старая система:** "Раздел отчеты и мониторинг" - ✅ Да
- **Новая система:** "Раздел отчеты и мониторинг" - ❌ Нет (или отсутствует)
- **Действие:** ✅ Включить
### 14. Чтение базовой нормативно-справочной информации
- **Старая система:** "Чтение базовой нормативно-справочной информации" - ✅ Да
- **Новая система:** "Чтение базовой нормативно-справочной информации" - ❌ Нет (или отсутствует)
- **Действие:** ✅ Включить
### 15. Чтение документов списания поступления безналичных ДС
- **Старая система:** "Чтение документов списания поступления безналичных ДС" - ✅ Да
- **Новая система:** "Чтение документов списания поступления безналичных ДС" - ❌ Нет (или отсутствует)
- **Действие:** ✅ Включить
### 16. Чтение состояний отгрузки
- **Старая система:** "Чтение состояний отгрузки" - ✅ Да
- **Новая система:** "Чтение состояний отгрузки" - ❌ Нет (или отсутствует)
- **Действие:** ✅ Включить
---
## 📝 Дополнительные роли с возможными переименованиями (требуют проверки)
Следующие роли из старой системы с "Да" могут иметь аналоги в новой системе с другим названием:
1. **Добавление изменение корректировок обособленного учета запасов** (старая: Да)
- Проверить в новой: "Добавление и изменение корректировок обособленного учета запасов"
- Если найдена и имеет "Нет" → включить
2. **Добавление изменение корректировок реализаций** (старая: Да)
- Проверить в новой: "Добавление и изменение корректировок реализаций"
- Если найдена и имеет "Нет" → включить
3. **Добавление изменение листов кассовой книги** (старая: Да)
- Проверить в новой: "Добавление и изменение листов кассовой книги"
- Если найдена и имеет "Нет" → включить
---
## ✅ Итоговые действия
1. **Включить все 16 ролей из основного списка**
2. **При поиске ролей учитывать переименования:**
- "Добавление изменение..." → искать "Добавление и изменение..."
3. **Проверить дополнительные роли с возможными переименованиями**
4. **Убедиться, что все роли чтения данных сохранены**
---
## 📊 Статистика
- **Всего ролей для включения:** 15 (в списке новой системы)
- **Ролей с переименованиями:** 3 (позиции 7, 8, 9)
- **Ролей, отсутствующих в новой системе:** 2 (позиции 3 и 11)
@@ -1,140 +0,0 @@
---
title: Чек-лист внедрения графы 5б в УПД
version: 1.0
date_created: 2026-04-21
date_modified: 2026-04-21
author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com)
description: Рабочий чек-лист для разработки и приемки реализации графы 5б в УПД с приоритетом изменений через расширение crm3-dev.rhana.
status: К выполнению
based_on: ТЗ_минимальная_реализация_графы_5б_УПД_2026-04-21.md
based_on_title: Техническое задание - минимальная реализация графы 5б в УПД (через расширение)
based_on_version: 1.1
show_metadata_block: true
show_index_link: true
show_toc: true
---
# Рабочий чек-лист внедрения
## Ссылки на ТЗ
- Базовый документ: [ТЗ по графе 5б](ТЗ_минимальная_реализация_графы_5б_УПД_2026-04-21.md)
- Архитектурный принцип: см. раздел `2` ТЗ.
- Карта объектов: см. раздел `4` ТЗ.
- Детализация реализации: см. раздел `5` ТЗ.
- Шаблоны кода: см. раздел `6` ТЗ.
- Правила разработки: см. раздел `7` ТЗ.
- План работ: см. раздел `8` ТЗ.
- Критерии приемки: см. раздел `9` ТЗ.
## 1. Подготовка
- [ ] Подтвердить ветку разработки и стенд внедрения (см. разделы `1`, `2` ТЗ).
- [ ] Зафиксировать версии:
- `crm3-dev`
- `crm3-dev.rhana`
- текущий рабочий макет УПД.
- [ ] Создать резервные копии объектов:
- `Documents/СчетФактураВыданный`
- `DataProcessors/ПечатьОбщихФорм`
- макет УПД в расширении.
- [ ] Проверить, что правила `&ИзменениеИКонтроль` применимы для целевых методов (см. раздел `7` ТЗ).
## 2. Реализация в расширении документа `СчетФактураВыданный`
Файл: `crm3-dev.rhana/src/Documents/СчетФактураВыданный/Ext/ManagerModule.bsl` (см. разделы `4.1`, `5.1`, `6.1`, `6.2`, `6.3`, `6.4` ТЗ)
### 2.1. Функция формирования строки 5б
- [ ] Добавить `упд5б_СтрокаАвансовыеСчетаФактуры(ПлатежноРасчетныеДокументы) Экспорт` (шаблон: раздел `6.1` ТЗ).
- [ ] Проверить формат вывода:
- `№ %1 от %2, исправление № %3 от %4`
- разделитель нескольких значений: `; `.
### 2.2. Временная таблица платежно-расчетных документов
- [ ] Расширить `ПоместитьВременнуюТаблицуПлатежноРасчетныхДокументов(...)` (цельный блок с директивами, раздел `6.2` ТЗ).
- [ ] Добавить колонку `СтрокаАвансовыеСчетаФактуры` (раздел `6.2` ТЗ).
- [ ] Заполнять колонку через `упд5б_СтрокаАвансовыеСчетаФактуры(...)` (раздел `6.2` ТЗ).
### 2.3. Запрос данных по оплатам/авансовым СФ
- [ ] Расширить `ТекстЗапросаПолученияНомеровИДатПлатежноРасчетныхДокументов()` (цельный блок с директивами, раздел `6.3` ТЗ).
- [ ] Добавить получение полей:
- `НомерСчетаФактурыНаАванс`
- `ДатаСчетаФактурыНаАванс`
- `НомерИсправленияСчетаФактурыНаАванс`
- `ДатаИсправленияСчетаФактурыНаАванс`.
- [ ] Проверить, что используются связи с `Документ.СчетФактураВыданныйАванс`.
### 2.4. Прокидывание в данные печати
- [ ] Добавить в запрос шапки поле `ПредставлениеАвансовыеСчетаФактуры` (раздел `6.4` ТЗ).
- [ ] Реализовать через `ЕСТЬNULL(...)` (ВТ/данные документа) (раздел `6.4` ТЗ).
## 3. Реализация в расширении печати УПД
Файл: `crm3-dev.rhana/src/DataProcessors/ПечатьОбщихФорм/Ext/ManagerModule.bsl` (см. разделы `4.1`, `5.2`, `6.5` ТЗ)
### 3.1. Вставка в `р_ЗаполнитьТабличныйДокументУПД(...)`
- [ ] Добавить получение `ДанныеПечати.ПредставлениеАвансовыеСчетаФактуры` (раздел `6.5` ТЗ).
- [ ] Добавить fallback:
- `№ -- от --, исправление № -- от --`.
- [ ] Заполнить параметр:
- `ОбластьШапка.Параметры.АвансовыеСчетаФактуры` (раздел `6.5` ТЗ).
### 3.2. Контроль совместимости
- [ ] Проверить, что при отсутствии поля/значения печать не падает.
- [ ] Проверить, что прочие поля УПД не изменили поведение.
## 4. Изменение макета УПД (в расширении)
См. разделы `4.1`, `5.3`, `8` ТЗ.
- [ ] Добавить параметр `АвансовыеСчетаФактуры` в область `Шапка` (строка 5б).
- [ ] Проверить совпадение имени параметра в макете и коде.
- [ ] Проверить перенос длинной строки в шапке.
## 5. Стандарты и контроль качества кода
См. раздел `7` ТЗ.
- [ ] Все изменения в перехватываемых методах оформлены через `&ИзменениеИКонтроль`.
- [ ] Новые блоки оформлены в `#Вставка` / `#Удаление`.
- [ ] В `#Удаление` нет комментариев и нового текста.
- [ ] Новые методы расширения имеют префикс `упд5б_`.
- [ ] Проверка `check_ext` выполнена без критических несоответствий.
## 6. Тестовые сценарии (минимум)
См. разделы `8` и `9` ТЗ.
### 6.1. Позитивные
- [ ] Реализация с одним авансовым СФ -> 5б заполнена корректно.
- [ ] Реализация с несколькими авансовыми СФ -> значения через `; `.
- [ ] Реализация с исправленным авансовым СФ -> отображаются номер/дата исправления.
### 6.2. Негативные и граничные
- [ ] Нет авансовых СФ -> вывод fallback.
- [ ] Старые документы без данных 5б печатаются без ошибок.
- [ ] Пустые/частично заполненные значения не ломают формат строки.
### 6.3. Регрессия
- [ ] УПД без авансов печатается как до внедрения.
- [ ] Графы 5а/6/7/8 работают корректно.
- [ ] Печать из `РеализацияТоваровУслуг` без ошибок.
## 7. Критерии готовности (Definition of Done)
См. раздел `9` ТЗ.
- [ ] В графе 5б выводятся авансовые СФ для закрываемой реализацией оплаты.
- [ ] При отсутствии данных применяется fallback.
- [ ] Изменения выполнены преимущественно в `crm3-dev.rhana`.
- [ ] Протокол тестирования заполнен и подписан.
- [ ] Подготовлен список фактически измененных объектов.
## 8. Протокол сдачи
См. разделы `10` и `11` ТЗ.
- [ ] Передать перечень измененных объектов (файл/метод/тип изменения).
- [ ] Передать скриншоты УПД по 3 ключевым кейсам (1 СФ, несколько СФ, fallback).
- [ ] Передать результаты `check_ext`.
- [ ] Передать итоговую оценку рисков (низкий/средний/высокий) и план отката.
@@ -18,7 +18,7 @@ show_toc: true
## Ссылки на ТЗ
- Базовый документ: [ТЗ по графе 5б](ТЗ_минимальная_реализация_графы_5б_УПД_2026-04-21.md)
- Базовый документ: [ТЗ по графе 5б](docs/ТЗ_минимальная_реализация_графы_5б_УПД_2026-04-21.md)
- Архитектурный принцип: см. раздел `2` ТЗ.
- Карта объектов: см. раздел `4` ТЗ.
- Детализация реализации: см. раздел `5` ТЗ.
+2 -2
@@ -18,8 +18,8 @@ show_index_link: false
- [Анализ обработчиков обновления НДС 22](Анализ_обработчиков_обновления_НДС_22.md)
- [Анализ ошибок обновления](Анализ_ошибок_обновления.md)
- [Анализ печати пакета документов и складского учета (v3.0)](Анализ_печати_пакета_документов_и_складского_учета (v3.0).md)
- [Анализ применения КредитНота (v1.1)](Анализ_применения_КредитНота.md (v1.1).md)
- [Анализ применения реквизита Купон (v1.0)](Анализ_применения_реквизита_Купон.md (v1.0).md)
- [Анализ применения КредитНота (v1.1)](Анализ_применения_КредитНота (v1.1).md)
- [Анализ применения реквизита Купон (v1.0)](Анализ_применения_реквизита_Купон (v1.0).md)
- [Анализ рисков неуникальности CRM ЖурналДокументов](Анализ_рисков_неуникальности_CRM_ЖурналДокументов.md)
- [Итоговый отчет анализа регистров](Итоговый_отчет_анализа_регистров.md)
- [Отчет о конвертации](Отчет_о_конвертации.md)
@@ -10,7 +10,7 @@ show_index_link: true
# Анализ ошибок обновления конфигурации 1С
> 📚 **См. также:** [Оглавление документов](INDEX.md) | [Глубинный анализ регистров](Глубинный_анализ_регистров.md) | [Быстрое решение](Быстрое_решение.md) | [Инструкция по исправлению](Инструкция_по_исправлению.md)
> 📚 **См. также:** [Оглавление документов](docs/INDEX.md) | [Глубинный анализ регистров](docs/Глубинный_анализ_регистров.md) | [Быстрое решение](docs/Быстрое_решение.md) | [Инструкция по исправлению](docs/Инструкция_по_исправлению.md)
## Проблема
При попытке применить обновление из конфигурации `crm326/crm326_test` на проект `crmdevlocal` возникают ошибки о наличии ссылок на удаляемые объекты.
+9 -117
@@ -3,126 +3,18 @@
"version": "0.3.8",
"folder": "docs",
"files": [
"docs/Checklist_5b_UPD_2026-04-21.md",
"docs/INDEX.md",
"docs/PROJECT_CONTEXT.md",
"docs/README_md_to_html.md",
"docs/TZ2_full_UPD_migration_2026-04-21.md",
"docs/TZ_min_5b_UPD_2026-04-21.md",
"docs/diadoc_answer_2026-05-08.md",
"docs/instructions_filter_access_groups.md",
"docs/meta/PROJECT_STRUCTURE.md",
"docs/test.md",
"docs/Анализ_доработок_синхронизации_ЗаказКлиента.md",
"docs/Анализ_доработок_синхронизации_РеализацияТоваровУслуг.md",
"docs/Анализ_доработок_складского_учета_и_печати_документов.md",
"docs/Анализ_доработок_формы_приемки_УправлениеПоступлением.md",
"docs/Анализ_механизма_перезаполнения_CRM_ЖурналДокументов.md",
"docs/Анализ_обмена_НДС_22_с_Бухгалтерией_КОРП.md",
"docs/Анализ_обработчиков_обновления_НДС_22.md",
"docs/Анализ_ошибок_обновления.md",
"docs/Анализ_переноса_обработки_КредитНотаЗаПериод.md",
"docs/Анализ_печати_пакета_документов_и_складского_учета (v3.0).md",
"docs/Анализ_привязок_серий_номенклатур_к_видам_номенклатур.md",
"docs/Анализ_применения_КредитНота (v1.1).md",
"docs/Анализ_применения_КредитНота.md",
"docs/Анализ_применения_реквизита_Купон (v1.0).md",
"docs/Анализ_применения_реквизита_Купон.md",
"docs/Анализ_различий_crm3-26-test_vs_crm3-dev.md",
"docs/Анализ_рисков_неуникальности_CRM_ЖурналДокументов.md",
"docs/Быстрое_решение.md",
"docs/Выводы_сравнения_конфигураций.md",
"docs/Глубинный_анализ_регистров.md",
"docs/Дорожная_карта_миграции_CRM3_v0.1.md",
"docs/Инструкция_добавления_ролей_в_профиль.md",
"docs/Инструкция_по_запуску_md_convert.md",
"docs/Инструкция_по_исправлению.md",
"docs/Итоговый_отчет_анализа_регистров.md",
"docs/Отчет_о_конвертации.md",
"docs/Оценка_правок_для_переноса_НДС_22.md",
"docs/Оценка_правок_для_переноса_НДС_22_(v1.1).md",
"docs/Перечень_констант_crm3-26-test.md",
"docs/Перечень_констант_crm3-dev.md",
"docs/Проблема_неуникальности_регистра_CRM_ЖурналДокументов.md",
"docs/Проверка_ставки_НДС_22.md",
"docs/РЕЗУЛЬТАТЫ_КОНВЕРТАЦИИ.md",
"docs/Реализация_переноса_НДС_22.md",
"docs/Роли_для_включения_в_новой_системе.md",
"docs/Роли_для_отметки_ДА_осталось.md",
"docs/Сверка_ролей_профиля.md",
"docs/Сверка_ролей_с_учетом_переименований.md",
"docs/Сводка_переноса_и_настройки_актуальной_формы_УПД.md",
"docs/Сводка_рисков_неуникальности.md",
"docs/Список_объектов_для_удаления_из_подсистем.md",
"docs/Список_ролей_для_отметки_ДА.md",
"docs/Сравнение_констант_crm3-dev_vs_crm3-26-test.md",
"docs/ТЗ_2_полный_перенос_логики_УПД_из_crm3-26-promo_в_crm3-dev_2026-04-21.md",
"docs/ТЗ_3_Внедрение_формы_УПД_в_текущую_рабочую_базу_2026-05-05.md",
"docs/ТЗ_минимальная_реализация_графы_5б_УПД_2026-04-21.md",
"docs/Улучшения_скрипта_проверки.md",
"docs/ФИНАЛЬНЫЙ_ОТЧЕТ_Анализ_регистров.md",
"docs/ФИНАЛЬНЫЙ_СПИСОК_РОЛЕЙ_ДЛЯ_ВКЛЮЧЕНИЯ.md",
"docs/Чеклист_внедрения_графы_5б_УПД_2026-04-21.md"
"docs__Checklist_5b_UPD_2026-04-21.md",
"docs__INDEX.md",
"docs__test.md",
"docs__Анализ_ошибок_обновления.md",
"docs__Быстрое_решение.md",
"docs__Глубинный_анализ_регистров.md",
"docs__Инструкция_по_исправлению.md",
"docs__ТЗ_минимальная_реализация_графы_5б_УПД_2026-04-21.md"
],
"sources": [
"/Users/mihailkudravcev/projects/crm3-26/docs/Checklist_5b_UPD_2026-04-21.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/INDEX.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/PROJECT_CONTEXT.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/README_md_to_html.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/TZ2_full_UPD_migration_2026-04-21.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/TZ_min_5b_UPD_2026-04-21.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/diadoc_answer_2026-05-08.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/instructions_filter_access_groups.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/test.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_доработок_синхронизации_ЗаказКлиента.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_доработок_синхронизации_РеализацияТоваровУслуг.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_доработок_складского_учета_и_печати_документов.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_доработок_формы_приемки_УправлениеПоступлением.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_механизма_перезаполнения_CRM_ЖурналДокументов.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_обмена_НДС_22_с_Бухгалтерией_КОРП.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_обработчиков_обновления_НДС_22.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_ошибок_обновления.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_переноса_обработки_КредитНотаЗаПериод.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_печати_пакета_документов_и_складского_учета (v3.0).md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_привязок_серий_номенклатур_к_видам_номенклатур.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_применения_КредитНота (v1.1).md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_применения_КредитНота.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_применения_реквизита_Купон (v1.0).md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_применения_реквизита_Купон.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_различий_crm3-26-test_vs_crm3-dev.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_рисков_неуникальности_CRM_ЖурналДокументов.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Быстрое_решение.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Выводы_сравнения_конфигураций.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Глубинный_анализ_регистров.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Дорожная_карта_миграции_CRM3_v0.1.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Инструкция_добавления_ролей_в_профиль.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Инструкция_по_запуску_md_convert.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Инструкция_по_исправлению.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Итоговый_отчет_анализа_регистров.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Отчет_о_конвертации.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Оценка_правок_для_переноса_НДС_22.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Оценка_правок_для_переноса_НДС_22_(v1.1).md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Перечень_констант_crm3-26-test.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Перечень_констант_crm3-dev.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Проблема_неуникальности_регистра_CRM_ЖурналДокументов.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Проверка_ставки_НДС_22.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/РЕЗУЛЬТАТЫ_КОНВЕРТАЦИИ.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Реализация_переноса_НДС_22.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Роли_для_включения_в_новой_системе.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Роли_для_отметки_ДА_осталось.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Сверка_ролей_профиля.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Сверка_ролей_с_учетом_переименований.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Сводка_переноса_и_настройки_актуальной_формы_УПД.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Сводка_рисков_неуникальности.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Список_объектов_для_удаления_из_подсистем.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Список_ролей_для_отметки_ДА.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Сравнение_констант_crm3-dev_vs_crm3-26-test.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/ТЗ_2_полный_перенос_логики_УПД_из_crm3-26-promo_в_crm3-dev_2026-04-21.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/ТЗ_3_Внедрение_формы_УПД_в_текущую_рабочую_базу_2026-05-05.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/ТЗ_минимальная_реализация_графы_5б_УПД_2026-04-21.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Улучшения_скрипта_проверки.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/ФИНАЛЬНЫЙ_ОТЧЕТ_Анализ_регистров.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/ФИНАЛЬНЫЙ_СПИСОК_РОЛЕЙ_ДЛЯ_ВКЛЮЧЕНИЯ.md",
"/Users/mihailkudravcev/projects/crm3-26/docs/Чеклист_внедрения_графы_5б_УПД_2026-04-21.md"
"/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_ошибок_обновления.md"
]
}