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

mihailkudravcev
2026-07-29 12:28:28 +03:00
parent ace89afb8b
commit f66a5b4e62
11 changed files with 1808 additions and 1 deletions
+7
@@ -1 +1,8 @@
Добро пожаловать в вики.
<!-- export_docs:begin -->
## Документация (docs)
- [docs/index](docs/index)
<!-- export_docs:end -->
+7
@@ -0,0 +1,7 @@
<!-- export_docs:begin -->
### Документация (docs)
- [docs/index](docs/index)
<!-- export_docs:end -->
+140
@@ -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`.
- [ ] Передать итоговую оценку рисков (низкий/средний/высокий) и план отката.
+59
@@ -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)
---
*Этот файл автоматически сгенерирован скриптом конвертации.*
+1
@@ -0,0 +1 @@
# Проверка статей
@@ -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. **Документировать изменения**: Вести журнал всех изменений для последующего анализа
+189
@@ -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/
@@ -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` - отчет о ссылках
@@ -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
<!-- Было -->
<Properties>
<Property name="HyperlinkColor">ЭлементСтиля.ЦветГиперссылки</Property>
</Properties>
<!-- Стало -->
<Properties>
<Property name="HyperlinkColor">#0000FF</Property>
</Properties>
```
### 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)
```
**ВНИМАНИЕ:** Используйте автоматизацию с осторожностью и всегда проверяйте результаты!
@@ -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. Перечень фактических изменений по объектам и методам.
---
+20
@@ -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"
]
}