diff --git a/Home.md b/Home.md index 8b7bd78..39d2954 100644 --- a/Home.md +++ b/Home.md @@ -1 +1,8 @@ -Добро пожаловать в вики. \ No newline at end of file +Добро пожаловать в вики. + + + +## Документация (docs) + +- [docs/index](docs/index) + diff --git a/_Sidebar.md b/_Sidebar.md new file mode 100644 index 0000000..acfcf20 --- /dev/null +++ b/_Sidebar.md @@ -0,0 +1,7 @@ + + +### Документация (docs) + +- [docs/index](docs/index) + + diff --git a/docs/Checklist_5b_UPD_2026-04-21.md b/docs/Checklist_5b_UPD_2026-04-21.md new file mode 100644 index 0000000..3e6441f --- /dev/null +++ b/docs/Checklist_5b_UPD_2026-04-21.md @@ -0,0 +1,140 @@ +--- +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`. +- [ ] Передать итоговую оценку рисков (низкий/средний/высокий) и план отката. diff --git a/docs/INDEX.md b/docs/INDEX.md new file mode 100644 index 0000000..18a01eb --- /dev/null +++ b/docs/INDEX.md @@ -0,0 +1,59 @@ +--- +title: Оглавление документов +author: Руководитель отдела ИТ Кудрявцев М.А. (kma@rhana.com) +version: 1.0 +date_created: 2026-01-04 +date_modified: 2026-01-04 +show_metadata_block: true +show_index_link: false +--- + +# Оглавление документов + +Навигация по всем документам проекта. + +## Анализ и отчеты + +- [Анализ механизма перезаполнения CRM ЖурналДокументов](Анализ_механизма_перезаполнения_CRM_ЖурналДокументов.md) +- [Анализ обработчиков обновления НДС 22](Анализ_обработчиков_обновления_НДС_22.md) +- [Анализ ошибок обновления](Анализ_ошибок_обновления.md) +- [Анализ печати пакета документов и складского учета (v3.0)](Анализ_печати_пакета_документов_и_складского_учета (v3.0).md) +- [Анализ применения КредитНота (v1.1)](Анализ_применения_КредитНота (v1.1).md) +- [Анализ применения реквизита Купон (v1.0)](Анализ_применения_реквизита_Купон (v1.0).md) +- [Анализ рисков неуникальности CRM ЖурналДокументов](Анализ_рисков_неуникальности_CRM_ЖурналДокументов.md) +- [Итоговый отчет анализа регистров](Итоговый_отчет_анализа_регистров.md) +- [Отчет о конвертации](Отчет_о_конвертации.md) +- [ФИНАЛЬНЫЙ ОТЧЕТ Анализ регистров](ФИНАЛЬНЫЙ_ОТЧЕТ_Анализ_регистров.md) + +## Инструкции + +- [Быстрое решение](Быстрое_решение.md) +- [Инструкция добавления ролей в профиль](Инструкция_добавления_ролей_в_профиль.md) +- [Инструкция по исправлению](Инструкция_по_исправлению.md) + +## Другое + +- [INDEX](INDEX.md) +- [README md to html](README_md_to_html.md) +- [instructions filter access groups](instructions_filter_access_groups.md) +- [Выводы сравнения конфигураций](Выводы_сравнения_конфигураций.md) +- [Глубинный анализ регистров](Глубинный_анализ_регистров.md) +- [Оценка правок для переноса НДС 22 (v1.1)](Оценка_правок_для_переноса_НДС_22_(v1.1).md) +- [Оценка правок для переноса НДС 22 (v1.3)](Оценка_правок_для_переноса_НДС_22_(v1.3).md) +- [Оценка правок для переноса НДС 22 (v1.4)](Оценка_правок_для_переноса_НДС_22_(v1.4).md) +- [Проблема неуникальности регистра CRM ЖурналДокументов](Проблема_неуникальности_регистра_CRM_ЖурналДокументов.md) +- [Проверка ставки НДС 22](Проверка_ставки_НДС_22.md) +- [РЕЗУЛЬТАТЫ КОНВЕРТАЦИИ](РЕЗУЛЬТАТЫ_КОНВЕРТАЦИИ.md) +- [Роли для включения в новой системе](Роли_для_включения_в_новой_системе.md) +- [Роли для отметки ДА осталось](Роли_для_отметки_ДА_осталось.md) +- [Сверка ролей профиля](Сверка_ролей_профиля.md) +- [Сверка ролей с учетом переименований](Сверка_ролей_с_учетом_переименований.md) +- [Сводка рисков неуникальности](Сводка_рисков_неуникальности.md) +- [Список объектов для удаления из подсистем](Список_объектов_для_удаления_из_подсистем.md) +- [Список ролей для отметки ДА](Список_ролей_для_отметки_ДА.md) +- [Улучшения скрипта проверки](Улучшения_скрипта_проверки.md) +- [ФИНАЛЬНЫЙ СПИСОК РОЛЕЙ ДЛЯ ВКЛЮЧЕНИЯ](ФИНАЛЬНЫЙ_СПИСОК_РОЛЕЙ_ДЛЯ_ВКЛЮЧЕНИЯ.md) + +--- + +*Этот файл автоматически сгенерирован скриптом конвертации.* diff --git a/docs/test.md b/docs/test.md new file mode 100644 index 0000000..f95d5a4 --- /dev/null +++ b/docs/test.md @@ -0,0 +1 @@ +# Проверка статей \ No newline at end of file diff --git a/docs/Анализ_ошибок_обновления.md b/docs/Анализ_ошибок_обновления.md new file mode 100644 index 0000000..53fa8c6 --- /dev/null +++ b/docs/Анализ_ошибок_обновления.md @@ -0,0 +1,196 @@ +--- +title: Анализ ошибок обновления конфигурации 1С +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 +--- + +# Анализ ошибок обновления конфигурации 1С + +> 📚 **См. также:** [Оглавление документов](INDEX.md) | [Глубинный анализ регистров](Глубинный_анализ_регистров.md) | [Быстрое решение](Быстрое_решение.md) | [Инструкция по исправлению](Инструкция_по_исправлению.md) + +## Проблема +При попытке применить обновление из конфигурации `crm326/crm326_test` на проект `crmdevlocal` возникают ошибки о наличии ссылок на удаляемые объекты. + +## Категории удаляемых объектов + +### 1. Подсистемы (5 объектов) +- `Подсистема.ЭлектронноеВзаимодействие.Подсистема.БизнесСеть` +- `Подсистема.ЭлектронноеВзаимодействие.Подсистема.ИнтеграцияСЯндексКассой` +- `Подсистема.ЭлектронноеВзаимодействие.Подсистема.РаботаСНоменклатурой` +- `Подсистема.ЭлектронноеВзаимодействие.Подсистема.ТорговыеПредложения` +- `Подсистема.ЭлектронноеВзаимодействие.Подсистема.СервисДоставки` + +**Ссылки:** Все ссылаются на `Подсистема.ЭлектронноеВзаимодействие.Справочная информация` + +### 2. Элементы стилей (1 объект) +- `ЭлементСтиля.ЦветГиперссылки` + +**Ссылки:** Используется в формах справочников и документов + +### 3. Общие картинки (9 объектов) +- `ОбщаяКартинка.CRM_ИерархияСправочника` +- `ОбщаяКартинка.CRM_СостояниеАктивен` +- `ОбщаяКартинка.CRM_СтатусЗаблокирован` +- `ОбщаяКартинка.CRM_СтатусОтключен` +- `ОбщаяКартинка.CRM_УНФ_СостояниеСделки` +- `ОбщаяКартинка.ДлительнаяОперация85БЭД` +- `ОбщаяКартинка.Комментарий` +- `ОбщаяКартинка.НастройкаОбменаДаннымиОтключена` +- `ОбщаяКартинка.ЭлектронныйДокументОшибкаПодписи` +- И другие... + +### 4. Общие макеты (3 объекта) +- `ОбщийМакет.Драйвер1ССканерШтрихкода` +- `ОбщийМакет.ДрайверГексагонСканерыШтрихкода` +- `ОбщийМакет.ДрайверККСДисплеиПокупателя` + +### 5. Общие модули (25+ объектов) +- Модули обмена данными +- Модули электронного взаимодействия +- Модули работы с оборудованием +- И другие... + +### 6. Подписки на события (3 объекта) +- `ПодпискаНаСобытие.ИзменитьСостояниеВерсииПередЗаписьюЭД` +- `ПодпискаНаСобытие.КонтрольОтраженияВУчетеЭДОПриЗаписиЭлектронногоДокумента` +- `ПодпискаНаСобытие.ОбработатьЗаписьЭД` + +### 7. Общие команды (7 объектов) +- Команды работы с ЭДО +- Команды обмена данными + +### 8. Справочники и их элементы +- Реквизиты справочников +- Формы справочников +- Команды справочников + +### 9. Документы и их элементы +- Реквизиты документов +- Табличные части +- Формы документов +- Команды документов + +### 10. Перечисления (5 объектов) +- `Перечисление.ВидСервиса` +- `Перечисление.Приоритеты` +- `Перечисление.СокращенияЭД` +- `Перечисление.СостоянияНаличия` +- `Перечисление.ТипыПодключаемогоОборудования.ЗначениеПеречисления.ККМОфлайн` +- `Перечисление.ФорматыХраненияОдностраничныхФайлов` + +### 11. Отчеты (5 объектов) +- `Отчет.CRM_ПлановыеЗатратыПроектов` +- `Отчет.АнализСебестоимостиТоваровРасширенный` +- И другие... + +### 12. Обработки +- Реквизиты обработок +- Формы обработок +- Команды обработок + +### 13. Регистры +- Регистры сведений +- Регистры накопления + +## Стратегия решения + +### Вариант 1: Удаление ссылок (Рекомендуется) +Удалить все ссылки на удаляемые объекты из основной конфигурации перед обновлением. + +**Плюсы:** +- Чистое решение +- Конфигурация остается актуальной + +**Минусы:** +- Требует ручной работы +- Может нарушить функциональность + +### Вариант 2: Сохранение объектов в основной конфигурации +Скопировать удаляемые объекты в основную конфигурацию перед обновлением. + +**Плюсы:** +- Сохраняет функциональность +- Меньше изменений в коде + +**Минусы:** +- Дублирование объектов +- Усложняет поддержку + +### Вариант 3: Поэтапное обновление +1. Сначала удалить ссылки на объекты, которые точно не нужны +2. Сохранить критичные объекты в основной конфигурации +3. Постепенно мигрировать функциональность + +## План действий + +### Этап 1: Подготовка +1. Создать резервную копию конфигурации `crmdevlocal` +2. Экспортировать список всех ссылок на удаляемые объекты +3. Проанализировать критичность каждого использования + +### Этап 2: Обработка по категориям + +#### 2.1. Подсистемы +- Проверить использование подсистем в `Справочная информация` +- Удалить или закомментировать ссылки +- Альтернатива: создать собственные подсистемы-заглушки + +#### 2.2. Элементы стилей +- Найти все использования `ЦветГиперссылки` в формах +- Заменить на альтернативный стиль или удалить использование + +#### 2.3. Общие картинки +- Найти все использования картинок в формах +- Заменить на альтернативные картинки или удалить элементы интерфейса + +#### 2.4. Общие модули +- Найти все вызовы методов из удаляемых модулей +- Создать обертки или перенести необходимый функционал + +#### 2.5. Реквизиты справочников/документов +- Удалить использование реквизитов из форм +- Обновить код, использующий эти реквизиты + +#### 2.6. Перечисления +- Найти все использования значений перечислений +- Заменить на альтернативные решения или удалить функциональность + +### Этап 3: Тестирование +1. Проверить компиляцию конфигурации +2. Провести функциональное тестирование +3. Проверить отсутствие ошибок при обновлении + +## Автоматизация + +Рекомендуется создать скрипт для: +1. Поиска всех ссылок на удаляемые объекты +2. Генерации отчета о использованиях +3. Автоматического удаления/замены некритичных ссылок + +## Приоритеты исправления + +### Высокий приоритет (критичные объекты) +- Общие модули, используемые в бизнес-логике +- Реквизиты документов, используемые в проводках +- Перечисления, используемые в типах данных + +### Средний приоритет +- Формы и элементы интерфейса +- Общие картинки +- Команды + +### Низкий приоритет +- Справочная информация +- Вспомогательные подсистемы + +## Рекомендации + +1. **Начать с анализа**: Определить, какие объекты действительно используются активно +2. **Создать план миграции**: Для каждого удаляемого объекта определить стратегию замены +3. **Тестировать поэтапно**: После каждого этапа проверять возможность обновления +4. **Документировать изменения**: Вести журнал всех изменений для последующего анализа + diff --git a/docs/Быстрое_решение.md b/docs/Быстрое_решение.md new file mode 100644 index 0000000..44deacc --- /dev/null +++ b/docs/Быстрое_решение.md @@ -0,0 +1,189 @@ +--- +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) + +## Суть проблемы + +При обновлении из `crm326/crm326_test` на `crmdevlocal` система пытается удалить объекты, на которые есть ссылки в основной конфигурации. + +## Три варианта решения + +### Вариант 1: Быстрое (для тестирования) + +**Удалить все ссылки на удаляемые объекты** + +1. Запустите скрипт поиска: + ```bash + python find_references.py CRM3devLocal + ``` + +2. Откройте `references_report.txt` + +3. Для каждого файла из отчета: + - Откройте файл в редакторе + - Найдите строки с удаляемыми объектами + - Закомментируйте или удалите эти строки + +4. Проверьте компиляцию + +**Время:** 2-4 часа +**Риск:** Может нарушить функциональность + +### Вариант 2: Безопасное (рекомендуется) + +**Сохранить критичные объекты в основной конфигурации** + +1. Перед обновлением экспортируйте удаляемые объекты: + - Откройте конфигурацию `crm326_test` + - Экспортируйте нужные объекты в файлы + - Импортируйте их в `crmdevlocal` + +2. Примените обновление + +3. После обновления проверьте работоспособность + +**Время:** 4-6 часов +**Риск:** Минимальный + +### Вариант 3: Поэтапное (для продакшена) + +**Исправить по приоритетам** + +#### Приоритет 1 (критично - исправить обязательно): +- Общие модули, используемые в бизнес-логике +- Реквизиты документов, влияющие на проводки +- Перечисления в типах данных + +#### Приоритет 2 (важно): +- Формы и элементы интерфейса +- Общие картинки в часто используемых формах + +#### Приоритет 3 (можно отложить): +- Справочная информация +- Вспомогательные подсистемы + +**Время:** 1-2 недели +**Риск:** Минимальный при правильном подходе + +## Топ-10 самых проблемных объектов + +1. **ОбщийМодуль.ОбменСКонтрагентами*** (10+ модулей) + - Используются в подсистеме обмена + - **Решение:** Создать обертки или удалить функциональность обмена + +2. **ОбщийМодуль.ЭлектронноеВзаимодействие*** (10+ модулей) + - Используются в подсистеме ЭДО + - **Решение:** Аналогично п.1 + +3. **Перечисление.Приоритеты** + - Используется в 7 документах + - **Решение:** Удалить реквизит `УдалитьПриоритет` из документов + +4. **ОбщаяКартинка.Комментарий** + - Используется в 5 формах + - **Решение:** Заменить на альтернативную картинку или удалить + +5. **ОбщаяКартинка.ЭлектронныйДокументОшибкаПодписи** + - Используется в 5 формах + - **Решение:** Аналогично п.4 + +6. **Справочник.Номенклатура.Реквизит.СтавкаНДС** + - Используется в форме + - **Решение:** Удалить из формы или использовать альтернативный источник + +7. **Справочник.УчетныеПолитикиОрганизаций** (множество реквизитов) + - Используется в форме элемента + - **Решение:** Удалить реквизиты из формы или заменить на альтернативные + +8. **Документ.УдалитьCRM_Сделка** (множество реквизитов) + - Используется в формах + - **Решение:** Удалить элементы формы, связанные с реквизитами + +9. **Документ.УдалитьCRM_Событие** (множество реквизитов) + - Используется в формах + - **Решение:** Аналогично п.8 + +10. **Подсистемы ЭлектронноеВзаимодействие** (5 подсистем) + - Используются в справочной информации + - **Решение:** Удалить ссылки из справочной информации + +## Минимальный набор действий для быстрого старта + +1. **Создать резервную копию** (5 минут) + ``` + Конфигурация → Сохранить конфигурацию в файлы... + ``` + +2. **Запустить анализ** (10 минут) + ```bash + python find_references.py CRM3devLocal + ``` + +3. **Исправить топ-3 проблемы** (2-3 часа) + - Перечисление.Приоритеты → удалить реквизиты + - Общие картинки → заменить/удалить + - Критичные модули → создать обертки + +4. **Проверить компиляцию** (5 минут) + ``` + Конфигурация → Проверить конфигурацию + ``` + +5. **Попробовать обновление** (10 минут) + ``` + Конфигурация → Сравнить, объединить с конфигурацией из файла... + ``` + +## Чек-лист быстрого исправления + +- [ ] Резервная копия создана +- [ ] Скрипт анализа запущен +- [ ] Отчет проанализирован +- [ ] Перечисление.Приоритеты исправлено +- [ ] Общие картинки исправлены +- [ ] Критичные модули обработаны +- [ ] Конфигурация компилируется +- [ ] Обновление проходит без ошибок ссылок + +## Если ничего не помогает + +1. **Временное решение:** Отключить проверку ссылок при обновлении (не рекомендуется) + +2. **Радикальное решение:** + - Создать новую конфигурацию на базе `crm326_test` + - Перенести изменения из `crmdevlocal` вручную + +3. **Обратиться за помощью:** + - К команде разработки + - К поставщику конфигурации + - На форумы 1С + +## Полезные команды + +```bash +# Поиск всех упоминаний объекта в файлах +grep -r "ОбъектИмя" CRM3devLocal/src/ + +# Подсчет количества упоминаний +grep -r "ОбъектИмя" CRM3devLocal/src/ | wc -l + +# Поиск с контекстом (3 строки до и после) +grep -r -A 3 -B 3 "ОбъектИмя" CRM3devLocal/src/ +``` + +## Контакты и ресурсы + +- Документация 1С: https://its.1c.ru/ +- Форум 1С: https://forum.mista.ru/ +- Сообщество разработчиков: https://infostart.ru/ + diff --git a/docs/Глубинный_анализ_регистров.md b/docs/Глубинный_анализ_регистров.md new file mode 100644 index 0000000..34dfc9a --- /dev/null +++ b/docs/Глубинный_анализ_регистров.md @@ -0,0 +1,296 @@ +--- +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) + +## Цель анализа + +Найти регистры сведений и регистры накопления, у которых из-за удаления нетиповых и старых объектов конфигурации, на которые ссылаются реквизиты измерений, после реструктуризации может быть нарушена уникальность данных по ключу измерений. + +## Методология + +1. Анализ всех регистров сведений и накопления в конфигурации `CRM3devLocal` +2. Проверка измерений регистров на ссылки к удаляемым объектам +3. Выявление рисков нарушения уникальности данных + +## Результаты анализа + +### Проанализировано +- **Всего регистров:** 801 +- **Регистров сведений:** ~400 +- **Регистров накопления:** ~400 + +### Найдено проблемных регистров: 3 + +## Критические проблемы (CRITICAL) + +### 1. РегистрНакопления.ТМЦВЭксплуатации + +**Статус:** Весь регистр удаляется из конфигурации + +**Проблема:** +- Регистр полностью удаляется при обновлении +- Все данные регистра будут потеряны +- Регистр используется для учета ТМЦ в эксплуатации + +**Измерения регистра:** +- Организация (CatalogRef.Организации) +- Подразделение (CatalogRef.СтруктураПредприятия) +- ФизическоеЛицо (CatalogRef.ФизическиеЛица) +- Номенклатура (CatalogRef.Номенклатура) +- Характеристика (CatalogRef.ХарактеристикиНоменклатуры) +- Партия (CatalogRef.ПартииТМЦВЭксплуатации) + +**Риск нарушения уникальности:** НЕТ (регистр полностью удаляется) + +**Рекомендации:** +1. Перед обновлением экспортировать все данные из регистра +2. Определить, нужны ли эти данные после обновления +3. Если данные нужны - создать скрипт миграции в альтернативный регистр + +--- + +### 2. РегистрСведений.УдалитьРеестрДокументов + +**Статус:** Весь регистр удаляется из конфигурации + +**Проблема:** +- Регистр полностью удаляется при обновлении +- Все данные регистра будут потеряны +- Регистр используется для реестра документов + +**Измерения регистра:** +- ТипСсылки (CatalogRef.ИдентификаторыОбъектовМетаданных) +- Организация (CatalogRef.Организации) +- ХозяйственнаяОперация (EnumRef.ХозяйственныеОперации) +- Партнер (CatalogRef.Партнеры) +- Контрагент (CatalogRef.Контрагенты) +- НаправлениеДеятельности (CatalogRef.НаправленияДеятельности) +- Подразделение (CatalogRef.СтруктураПредприятия) +- МестоХранения (CatalogRef.СтруктураПредприятия, CatalogRef.БанковскиеСчетаОрганизаций, CatalogRef.Кассы, CatalogRef.Склады) +- ДатаДокументаИБ (Date) +- Ссылка (множество типов документов) +- РазделительЗаписи (String) + +**Риск нарушения уникальности:** НЕТ (регистр полностью удаляется) + +**Рекомендации:** +1. Перед обновлением экспортировать все данные из регистра +2. Определить, нужны ли эти данные после обновления +3. Если данные нужны - создать скрипт миграции в альтернативный регистр + +--- + +### 3. РегистрСведений.РеестрДокументов + +**Статус:** Весь регистр удаляется из конфигурации (возможно, это альтернативное имя для УдалитьРеестрДокументов) + +**Проблема:** +- Регистр полностью удаляется при обновлении +- Все данные регистра будут потеряны + +**Риск нарушения уникальности:** НЕТ (регистр полностью удаляется) + +--- + +## Высокий риск (HIGH) + +### РегистрНакопления.МатериалыИРаботыВПроизводстве + +**Статус:** Имеет удаляемое измерение + +**Проблема:** +- Измерение `УдалитьАналитикаУчетаНоменклатуры` удаляется из регистра +- Тип измерения: `CatalogRef.КлючиАналитикиУчетаНоменклатуры` +- Измерение помечено как "(не используется)" + +**Измерения регистра:** +1. Организация +2. Номенклатура +3. Характеристика +4. Подразделение +5. Серия +6. Назначение +7. **УдалитьАналитикаУчетаНоменклатуры** ⚠️ (удаляется) + +**Риск нарушения уникальности:** ВЫСОКИЙ + +**Почему это критично:** +- После удаления измерения все записи с разными значениями `УдалитьАналитикаУчетаНоменклатуры` могут стать неразличимыми +- Если в регистре есть записи с одинаковыми значениями всех остальных измерений, но разными значениями `УдалитьАналитикаУчетаНоменклатуры`, после удаления измерения возникнут дубликаты по ключу +- Это нарушит уникальность данных регистра накопления + +**Пример проблемы:** +``` +До удаления: +Запись 1: Организация=ООО "А", Номенклатура=Товар1, УдалитьАналитикаУчетаНоменклатуры=Ключ1 +Запись 2: Организация=ООО "А", Номенклатура=Товар1, УдалитьАналитикаУчетаНоменклатуры=Ключ2 + +После удаления измерения: +Запись 1: Организация=ООО "А", Номенклатура=Товар1 +Запись 2: Организация=ООО "А", Номенклатура=Товар1 +→ ДУБЛИКАТ! Нарушение уникальности! +``` + +**Рекомендации:** + +1. **Перед обновлением:** + - Проверить наличие записей с одинаковыми значениями всех измерений, кроме `УдалитьАналитикаУчетаНоменклатуры` + - Если такие записи есть - определить стратегию обработки + +2. **Варианты решения:** + + **Вариант А: Очистка данных** + - Удалить все записи, где `УдалитьАналитикаУчетаНоменклатуры` заполнено + - Применить обновление + - Проверить целостность данных + + **Вариант Б: Объединение записей** + - Найти все группы записей с одинаковыми значениями измерений (кроме удаляемого) + - Объединить ресурсы этих записей + - Удалить дубликаты + - Применить обновление + + **Вариант В: Замена на альтернативное измерение** + - Если измерение действительно не используется, можно просто удалить его + - Но необходимо убедиться, что нет конфликтов данных + +3. **Скрипт проверки:** +```bsl +// Проверка на дубликаты после удаления измерения +Запрос = Новый Запрос; +Запрос.Текст = " +|ВЫБРАТЬ +| МатериалыИРаботыВПроизводстве.Организация КАК Организация, +| МатериалыИРаботыВПроизводстве.Номенклатура КАК Номенклатура, +| МатериалыИРаботыВПроизводстве.Характеристика КАК Характеристика, +| МатериалыИРаботыВПроизводстве.Подразделение КАК Подразделение, +| МатериалыИРаботыВПроизводстве.Серия КАК Серия, +| МатериалыИРаботыВПроизводстве.Назначение КАК Назначение, +| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МатериалыИРаботыВПроизводстве.УдалитьАналитикаУчетаНоменклатуры) КАК КоличествоРазличныхЗначений +|ИЗ +| РегистрНакопления.МатериалыИРаботыВПроизводстве КАК МатериалыИРаботыВПроизводстве +| +|СГРУППИРОВАТЬ ПО +| МатериалыИРаботыВПроизводстве.Организация, +| МатериалыИРаботыВПроизводстве.Номенклатура, +| МатериалыИРаботыВПроизводстве.Характеристика, +| МатериалыИРаботыВПроизводстве.Подразделение, +| МатериалыИРаботыВПроизводстве.Серия, +| МатериалыИРаботыВПроизводстве.Назначение +| +|ИМЕЮЩИЕ +| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МатериалыИРаботыВПроизводстве.УдалитьАналитикаУчетаНоменклатуры) > 1 +| И МатериалыИРаботыВПроизводстве.УдалитьАналитикаУчетаНоменклатуры НЕ РАВНО ЗНАЧЕНИЕ(Справочник.КлючиАналитикиУчетаНоменклатуры.ПустаяСсылка) +|"; +Результат = Запрос.Выполнить(); +Если Результат.Пустой() Тогда + Сообщить("Дубликатов не найдено. Безопасно удалять измерение."); +Иначе + Сообщить("ВНИМАНИЕ! Найдены дубликаты. Требуется обработка данных перед обновлением."); +КонецЕсли; +``` + +--- + +## Дополнительные проверки + +### Регистры, которые могут иметь проблемы + +Следующие регистры требуют дополнительной проверки, так как могут содержать ссылки на удаляемые объекты в измерениях: + +1. **Регистры с измерениями типа "Документ"** - могут ссылаться на удаляемые документы: + - УдалитьCRM_Сделка + - УдалитьCRM_Событие + - удалитьCRM_Мероприятие + - УдалитьВводОстатковПрослеживаемыхИмпортныхТоваров + - УдалитьКассовыйЧекКоррекции + - УдалитьПроизвольныйЭД + +2. **Регистры с измерениями типа "Справочник"** - могут ссылаться на удаляемые справочники: + - УдалитьCRM_ПериодыПланирования + - УдалитьНастройкиЯндексКассы + - УдалитьCRM_РазделыКарточекОбъектов + +3. **Регистры с измерениями типа "Перечисление"** - могут ссылаться на удаляемые перечисления: + - Приоритеты + - ВидСервиса + - СокращенияЭД + - СостоянияНаличия + - ФорматыХраненияОдностраничныхФайлов + +**Примечание:** Автоматический анализ не выявил таких регистров, но рекомендуется провести ручную проверку. + +--- + +## План действий + +### Этап 1: Подготовка (КРИТИЧНО) + +1. ✅ Создать резервную копию базы данных +2. ✅ Экспортировать данные из проблемных регистров: + - РегистрНакопления.ТМЦВЭксплуатации + - РегистрСведений.УдалитьРеестрДокументов + - РегистрСведений.РеестрДокументов +3. ✅ Выполнить проверку на дубликаты для регистра МатериалыИРаботыВПроизводстве + +### Этап 2: Обработка данных + +1. Для регистра **МатериалыИРаботыВПроизводстве**: + - Запустить скрипт проверки на дубликаты + - Если дубликаты найдены - выполнить объединение записей или очистку + - Убедиться, что после обработки дубликатов нет + +2. Для удаляемых регистров: + - Определить, нужны ли данные после обновления + - Если нужны - создать скрипт миграции + - Если не нужны - можно просто удалить данные + +### Этап 3: Применение обновления + +1. Применить обновление конфигурации +2. Проверить целостность данных +3. Проверить отсутствие ошибок уникальности + +### Этап 4: Верификация + +1. Проверить работу регистра МатериалыИРаботыВПроизводстве +2. Убедиться, что данные корректны +3. Провести функциональное тестирование + +--- + +## Выводы + +1. **Найдено 3 критических проблемы:** + - 2 регистра полностью удаляются (ТМЦВЭксплуатации, УдалитьРеестрДокументов) + - 1 регистр имеет удаляемое измерение (МатериалыИРаботыВПроизводстве) + +2. **Главный риск:** РегистрНакопления.МатериалыИРаботыВПроизводстве может потерять уникальность данных после удаления измерения + +3. **Рекомендация:** Обязательно выполнить проверку на дубликаты и обработку данных перед обновлением + +--- + +## Инструменты + +Созданы следующие инструменты для анализа: + +1. **deep_register_analysis.py** - скрипт для автоматического анализа регистров +2. **analyze_registers.py** - базовый скрипт анализа +3. **find_references.py** - скрипт для поиска ссылок на удаляемые объекты + +Все отчеты сохраняются в файлы: +- `deep_register_analysis_report.txt` - детальный отчет +- `register_analysis_report.txt` - базовый отчет +- `references_report.txt` - отчет о ссылках + diff --git a/docs/Инструкция_по_исправлению.md b/docs/Инструкция_по_исправлению.md new file mode 100644 index 0000000..674ba1f --- /dev/null +++ b/docs/Инструкция_по_исправлению.md @@ -0,0 +1,258 @@ +--- +title: Инструкция по исправлению ошибок обновления конфигурации 1С +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 +--- + +# Инструкция по исправлению ошибок обновления конфигурации 1С + +> 📚 **См. также:** [Оглавление документов](INDEX.md) | [Анализ ошибок обновления](Анализ_ошибок_обновления.md) | [Быстрое решение](Быстрое_решение.md) | [Глубинный анализ регистров](Глубинный_анализ_регистров.md) + +## Шаг 1: Анализ проблемы + +### 1.1. Запуск скрипта поиска ссылок + +```bash +python find_references.py CRM3devLocal +``` + +Скрипт создаст файл `references_report.txt` с детальным отчетом о всех найденных ссылках. + +### 1.2. Анализ отчета + +Откройте `references_report.txt` и проанализируйте: +- Какие объекты используются наиболее часто +- В каких файлах находятся ссылки +- Критичность использования каждого объекта + +## Шаг 2: Подготовка к исправлению + +### 2.1. Создание резервной копии + +**ВАЖНО!** Перед любыми изменениями создайте резервную копию конфигурации: + +1. В конфигураторе 1С: `Конфигурация → Сохранить конфигурацию в файлы...` +2. Сохраните в отдельную папку с датой (например, `CRM3devLocal_backup_2024`) + +### 2.2. Экспорт конфигурации для анализа + +Если конфигурация еще не экспортирована: +1. `Конфигурация → Выгрузить конфигурацию в файлы...` +2. Укажите папку `CRM3devLocal/src` + +## Шаг 3: Исправление по категориям + +### 3.1. Подсистемы + +**Проблема:** 5 подсистем ссылаются на `Подсистема.ЭлектронноеВзаимодействие.Справочная информация` + +**Решение:** +1. Откройте файл справочной информации подсистемы +2. Найдите ссылки на удаляемые подсистемы +3. Удалите или закомментируйте эти ссылки + +**Файлы для проверки:** +- `src/Subsystems/ЭлектронноеВзаимодействие/Subsystem/Information/` + +### 3.2. Элементы стилей + +**Проблема:** `ЭлементСтиля.ЦветГиперссылки` используется в формах + +**Решение:** +1. Найдите все использования в формах (см. отчет) +2. Замените на альтернативный стиль или удалите свойство + +**Файлы для проверки:** +- `Справочник.Номенклатура.Форма.ПодобныеТовары.Форма` +- `Справочник.ШаблоныДоговоров.Форма.ФормаПечати.Форма` +- `Справочник.Партнеры.Форма.CRM_ФормаЭлемента.Форма` +- `Документ.ЗаказПоставщику.Форма.ФормаЗакрытия.Форма` + +**Пример замены:** +```xml + + + ЭлементСтиля.ЦветГиперссылки + + + + + #0000FF + +``` + +### 3.3. Общие картинки + +**Проблема:** Множество картинок используется в формах + +**Решение:** +1. Для каждой картинки определите, можно ли ее удалить +2. Если нет - создайте альтернативную картинку или замените на текст + +**Приоритетные картинки:** +- `ОбщаяКартинка.Комментарий` - используется в 5 формах +- `ОбщаяКартинка.ЭлектронныйДокументОшибкаПодписи` - используется в 5 формах +- Остальные - по необходимости + +### 3.4. Общие модули + +**Проблема:** 25+ модулей используются в коде + +**Решение:** + +#### Вариант А: Создание оберток (рекомендуется) + +1. Создайте новый общий модуль `ОбменДаннымиСВнешнимиСистемамиОбертка` +2. Скопируйте необходимые методы из удаляемого модуля +3. Замените вызовы в коде + +#### Вариант Б: Удаление функциональности + +1. Найдите все вызовы методов модуля +2. Удалите или закомментируйте код, использующий эти методы +3. Добавьте заглушки, если необходимо + +**Пример:** +```bsl +// Было +ОбменДаннымиСВнешнимиСистемами.ОтправитьДанные(Параметры); + +// Стало (вариант А) +ОбменДаннымиСВнешнимиСистемамиОбертка.ОтправитьДанные(Параметры); + +// Или (вариант Б) +// Функциональность отключена +// ОбменДаннымиСВнешнимиСистемами.ОтправитьДанные(Параметры); +``` + +### 3.5. Реквизиты справочников и документов + +**Проблема:** Множество реквизитов используется в формах + +**Решение:** +1. Откройте каждую форму из отчета +2. Удалите элементы формы, связанные с удаляемыми реквизитами +3. Обновите код формы, если он использует эти реквизиты + +**Критичные реквизиты:** +- `Справочник.Номенклатура.Реквизит.СтавкаНДС` - используется в форме +- Реквизиты документов `УдалитьCRM_*` - используются в формах + +**Пример:** +```bsl +// В коде формы найти и удалить/закомментировать: +// ЭлементыФормы.СтавкаНДС +// Объект.СтавкаНДС +``` + +### 3.6. Перечисления + +**Проблема:** 5 перечислений используются в типах данных и коде + +**Решение:** + +#### Для `Перечисление.Приоритеты`: +1. Найти все использования в документах +2. Заменить на альтернативное перечисление или удалить реквизит + +**Документы с реквизитом `УдалитьПриоритет`:** +- `Документ.ЗаданиеНаПеревозку` +- `Документ.ЗаказКлиента` +- `Документ.ЗаказПоставщику` +- `Документ.ЗаявкаНаВозвратТоваровОтКлиента` +- `Документ.ЗаявкаНаРасходованиеДенежныхСредств` +- `Документ.ОрдерНаПеремещениеТоваров` +- `Документ.РасходныйОрдерНаТовары` + +**Действия:** +1. Удалить реквизит `УдалитьПриоритет` из этих документов +2. Удалить элементы формы, связанные с этим реквизитом +3. Обновить код, использующий этот реквизит + +#### Для других перечислений: +Аналогично - найти использования и удалить/заменить + +### 3.7. Отчеты и обработки + +**Проблема:** Отчеты и обработки используются в интерфейсе + +**Решение:** +1. Удалить команды, ссылающиеся на удаляемые отчеты/обработки +2. Удалить пункты меню, связанные с ними +3. Обновить интерфейсы + +## Шаг 4: Проверка и тестирование + +### 4.1. Компиляция конфигурации + +1. Откройте конфигуратор +2. `Конфигурация → Проверить конфигурацию` +3. Исправьте все ошибки компиляции + +### 4.2. Проверка обновления + +1. `Конфигурация → Сравнить, объединить с конфигурацией из файла...` +2. Выберите конфигурацию `crm326/crm326_test` +3. Проверьте, что ошибок о ссылках больше нет + +### 4.3. Функциональное тестирование + +1. Запустите конфигурацию в режиме предприятия +2. Проверьте основные функции +3. Убедитесь, что удаленные объекты не вызывают ошибок + +## Шаг 5: Применение обновления + +После исправления всех ошибок: + +1. `Конфигурация → Обновить конфигурацию базы данных...` +2. Выберите конфигурацию `crm326/crm326_test` +3. Следуйте инструкциям мастера обновления + +## Чек-лист исправлений + +- [ ] Создана резервная копия +- [ ] Запущен скрипт поиска ссылок +- [ ] Проанализирован отчет +- [ ] Исправлены ссылки на подсистемы +- [ ] Исправлены ссылки на элементы стилей +- [ ] Исправлены ссылки на общие картинки +- [ ] Исправлены ссылки на общие модули +- [ ] Исправлены ссылки на реквизиты +- [ ] Исправлены ссылки на перечисления +- [ ] Исправлены ссылки на отчеты и обработки +- [ ] Конфигурация компилируется без ошибок +- [ ] Проверка обновления проходит успешно +- [ ] Проведено функциональное тестирование + +## Дополнительные рекомендации + +1. **Ведите журнал изменений**: Записывайте все изменения для последующего анализа +2. **Тестируйте поэтапно**: После исправления каждой категории проверяйте компиляцию +3. **Используйте систему контроля версий**: Коммитьте изменения после каждого этапа +4. **Консультируйтесь с командой**: При сомнениях в критичности объекта + +## Автоматизация (опционально) + +Для массовой замены можно использовать скрипты поиска и замены: + +```python +# Пример скрипта для замены +import re + +def replace_in_file(file_path, old_pattern, new_text): + with open(file_path, 'r', encoding='utf-8') as f: + content = f.read() + + new_content = content.replace(old_pattern, new_text) + + with open(file_path, 'w', encoding='utf-8') as f: + f.write(new_content) +``` + +**ВНИМАНИЕ:** Используйте автоматизацию с осторожностью и всегда проверяйте результаты! + diff --git a/docs/ТЗ_минимальная_реализация_графы_5б_УПД_2026-04-21.md b/docs/ТЗ_минимальная_реализация_графы_5б_УПД_2026-04-21.md new file mode 100644 index 0000000..8ac1fca --- /dev/null +++ b/docs/ТЗ_минимальная_реализация_графы_5б_УПД_2026-04-21.md @@ -0,0 +1,634 @@ +--- +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. Перечень фактических изменений по объектам и методам. +--- diff --git a/manifest.export_docs.71ab8b6a.json b/manifest.export_docs.71ab8b6a.json new file mode 100644 index 0000000..1e175f9 --- /dev/null +++ b/manifest.export_docs.71ab8b6a.json @@ -0,0 +1,20 @@ +{ + "tool": "export_docs", + "version": "0.3.8", + "folder": "docs", + "files": [ + "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/test.md", + "/Users/mihailkudravcev/projects/crm3-26/docs/Анализ_ошибок_обновления.md" + ] +}