From ff571a92f4f68253bd2395aa77409bea27ff7790 Mon Sep 17 00:00:00 2001 From: dtorov Date: Wed, 7 Oct 2026 12:47:05 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D1=82=D0=B0=D1=80=D0=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- тара.md | 328 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 328 insertions(+) create mode 100644 тара.md diff --git a/тара.md b/тара.md new file mode 100644 index 0000000..1cde67c --- /dev/null +++ b/тара.md @@ -0,0 +1,328 @@ +# ТЗ на доработку: учёт номерной тары + +**Дата:** 07.10.2026 +**Конфигурация:** ВесоваяАК (`ves2020`) +**Версия конфигурации (на момент анализа):** 0.0.3.21 +**Область:** учёт номерной тары при отгрузке (Расходная накладная) +**Тип работ:** новая функциональность (метаданные + форма/проведение документа) + +Документ сформирован по постановке заказчика с уточнением имён объектов по текущим исходникам/ИБ. Правки в конфигурацию этим документом не вносятся. + +--- + +## 1. Цель и критерии успеха + +### 1.1. Цель + +Обеспечить учёт индивидуальной (номерной) тары при отгрузке по Расходной накладной: + +- вести справочник экземпляров номерной тары в разрезе типа фасовки; +- при признаке «номерная тара» у типа фасовки — обязательно фиксировать конкретные экземпляры в документе; +- отражать расход в регистре накопления остатков; +- не регистрировать изменения ТЧ номерной тары на выгрузку в БЭКЗ (на текущем этапе). + +### 1.2. Критерии приёмки + +| № | Критерий | Как проверить | +|---|----------|---------------| +| К1 | У `экзТипыФасовки` есть реквизит «Номерная тара» (Булево); просмотр всем, изменение — только Полные права | Роли / форма элемента | +| К2 | Создан справочник номерной тары с владельцем `экзТипыФасовки`, длина наименования 25; есть загрузка из Excel по выбранному владельцу | Метаданные + сценарий загрузки | +| К3 | Создан РН остатков «Учет номерной тары» с заданным составом; регистратор — `РасходнаяНакладная` | Метаданные регистра | +| К4 | В РНК при заполненном `ТипФасовки` с признаком «Номерная тара» отображается ТЧ, число строк = `КоличествоМест`, заполнение обязательно, выбор ограничен владельцем | UI + проведение с ошибкой при пустых/неполных строках | +| К5 | При проведении формируются движения расхода (Количество = 1 на строку); при отмене проведения / пометке на удаление движения снимаются без дублей при повторном проведении | Остатки регистра до/после | +| К6 | Изменение только ТЧ «Учет номерной тары» не приводит к регистрации документа в плане обмена `агк_ОбменВесоваяБЭКЗ` | Узлы обмена / регистрация изменений | +| К7 | Константа/настройка «Использовать остатки номерной тары» создана; в РНК пока выбор всех элементов по владельцу (без отбора по остаткам) | Константа + форма выбора | +| К8 | П.6 (документ «Приход номерной тары», отчёт о движении) — вне срока до 07.10.2026, допускается отдельной задачей | Согласование сроков | + +--- + +## 2. Фактический контекст конфигурации (as-is) + +| Объект в постановке | Факт в конфигурации | +|---------------------|---------------------| +| Справочник «Тип фасовки» | `Справочник.экзТипыФасовки` (синоним: «Типы фасовки») | +| Реквизит «Тип фасовки» в РНК | `Документ.РасходнаяНакладная.ТипФасовки` → `Справочник.экзТипыФасовки` | +| «Количество мест» | `КоличествоМест` (вкладка «Данные для печати» → «Дополнительные», страница `ГруппаДанныеДляПечатиСтраницаДополнительные`) | +| Организация / Подразделение / Весовая / Склад | `Организация`, `ПодразделениеОрганизации`, `Весовая`, `Склад` | +| Пункт разгрузки / Получатель | `ПунктРазгрузки` («Пункт разгрузки (Контрагент)»), `Получатель` («Контрагент (Получатель)») | +| Вкладка «Данные для печати» | страница формы `ГруппаДанныеДляПечати` | +| Полные права | роль `ПолныеПрава` | +| Весовщики | роль `Весовая_Весовщик` (и при необходимости `Весовая_ВесовщикRLS`) | +| Обмен с БЭКЗ | план обмена `агк_ОбменВесоваяБЭКЗ` (в составе есть `Document.РасходнаяНакладная`) | +| Существующий справочник `экзТара` | **не** использовать: это «Тара» (номенклатура/вес), уже связан реквизитом `экзТипыФасовки.Тара`. Номерная тара — отдельный объект | + +**Предлагаемые имена новых объектов** (префикс `экз` — по домену фасовки/тары; `PREFIX` в `.dev.env` пуст): + +| Назначение | Имя метаданных | Синоним | +|------------|----------------|---------| +| Признак в типе фасовки | `экзТипыФасовки.НомернаяТара` | Номерная тара | +| Справочник экземпляров | `Справочник.экзНомернаяТара` | Номерная тара | +| Роль учёта | `Роль.экзУчетНомернойТары` | Учет номерной тары | +| Регистр накопления | `РегистрНакопления.экзУчетНомернойТары` | Учет номерной тары | +| ТЧ документа | `РасходнаяНакладная.УчетНомернойТары` | Учет номерной тары | +| Настройка | `Константа.экзИспользоватьОстаткиНомернойТары` | Использовать остатки номерной тары | +| Документ прихода (этап 2) | `Документ.экзПриходНомернойТары` | Приход номерной тары | + +Имена допускается скорректировать при реализации при согласовании, смысл и связи — по таблицам ниже. + +--- + +## 3. Объём работ по этапам + +### Этап A — к 07.10.2026 (обязательный) + +Пункты постановки **1–5**: признак в типе фасовки, справочник номерной тары (+ загрузка Excel), регистр, доработка РНК (форма, проверки, движения), настройка «Использовать остатки…» (заготовка под будущее). + +### Этап B — позже (не до 07.10.2026) + +Пункт постановки **6**: документ «Приход номерной тары», отчёт о движении номерной тары, включение отбора выбора в РНК по остаткам при включённой настройке. + +--- + +## 4. Требования к метаданным и правам + +### 4.1. Справочник `экзТипыФасовки` (Типы фасовки) + +Добавить реквизит: + +| Свойство | Значение | +|----------|----------| +| Имя | `НомернаяТара` | +| Синоним | Номерная тара | +| Тип | Булево | +| По умолчанию | Ложь | +| Размещение на форме | форма элемента `ФормаЭлементаУправляемая` | + +**Права на реквизит:** + +- просмотр — всем ролям, имеющим доступ к справочнику; +- изменение — только роль `ПолныеПрава` (остальным — только просмотр значения). + +> Не путать с существующим реквизитом `Тара` (`СправочникСсылка.экзТара`). + +### 4.2. Справочник `экзНомернаяТара` (Номерная тара) + +| Свойство | Значение | +|----------|----------| +| Владелец | `Справочник.экзТипыФасовки` | +| Использование подчинения | Элементам | +| Наименование | строка, длина **25** | +| Код | по принятому в проекте шаблону справочников (допустимо короткий код / автонумерация) | +| Иерархия | нет | + +**Права:** + +| Действие | Кто | +|----------|-----| +| Просмотр / чтение | всем (как минимум ролям контура весовой с доступом к НСИ) | +| Добавление / изменение / пометка удаления | новая роль `экзУчетНомернойТары` («Учет номерной тары») + `ПолныеПрава` | + +Роль включить в нужные профили групп доступа отдельно (вне кода — администрирование). + +#### 4.2.1. Загрузка из Excel + +Нужна обработка (отдельная обработка или команда формы списка справочника) загрузки элементов **по выбранному владельцу** (`Тип фасовки`): + +- пользователь выбирает тип фасовки (владелец) и файл Excel; +- в файле — колонка с наименованием номерной тары (длина ≤ 25); при необходимости — доп. колонки по согласованию на реализации; +- создаются/обновляются элементы с указанным владельцем; +- дубли по наименованию в рамках владельца: не создавать повторно (или обновлять существующий — зафиксировать в реализации один вариант и описать в справке); +- ошибки строк (пустое имя, длина > 25) — в протокол загрузки, без «тихого» пропуска без отчёта. + +### 4.3. Регистр накопления `экзУчетНомернойТары` + +| Свойство | Значение | +|----------|----------| +| Вид | Остатки | +| Синоним | Учет номерной тары | + +**Измерения:** + +| Имя | Тип | +|-----|-----| +| Организация | `СправочникСсылка.Организации` | +| Подразделение | `СправочникСсылка.ПодразделенияОрганизаций` (из шапки РНК — `ПодразделениеОрганизации`) | +| Весовая | `СправочникСсылка.Весовые` | +| Склад | `СправочникСсылка.Склады` | +| Контрагент | `СправочникСсылка.Контрагенты` | +| ТипФасовки | `СправочникСсылка.экзТипыФасовки` | +| НомернаяТара | `СправочникСсылка.экзНомернаяТара` | + +**Ресурс:** `Количество` (Число; для движений РНК — всегда 1 на строку ТЧ). + +**Регистраторы (этап A):** + +- `Документ.РасходнаяНакладная` — вид движения **Расход**. + +**Регистраторы (этап B):** + +- `Документ.экзПриходНомернойТары` — вид движения **Приход** (позже). + +Контроль уникальности измерений при проектировании: одна комбинация измерений — один остаток; повтор одной и той же номерной тары в одной РНК не допускается (проверка при записи/проведении). + +### 4.4. Настройка `экзИспользоватьОстаткиНомернойТары` + +| Свойство | Значение | +|----------|----------| +| Тип | Булево | +| Синоним | Использовать остатки номерной тары | +| Значение по умолчанию | Ложь | +| Размещение | форма констант / настройки учёта (по аналогии с другими `Использовать…` в конфигурации) | + +**Поведение на этапе A:** константа создаётся и сохраняется; в форме выбора номерной тары в РНК **не** отбираем по остаткам — показываем все элементы по владельцу `ТипФасовки`. + +**Поведение на этапе B (после документа прихода):** при `Истина` в выборе ТЧ РНК — только тара с положительным остатком по релевантным измерениям (уточнить разрез отбора в задаче этапа B). + +--- + +## 5. Доработка документа `РасходнаяНакладная` + +### 5.1. Табличная часть `УчетНомернойТары` + +| Колонка | Тип | Обязательность | +|---------|-----|----------------| +| НомернаяТара | `СправочникСсылка.экзНомернаяТара` | да, когда ТЧ обязательна по п. 5.3 | + +Дополнительные колонки на этапе A не требуются. + +### 5.2. Форма документа — видимость вкладки + +На форме документа (`ФормаДокумента`): + +1. Добавить страницу (вкладку) **«Учет номерной тары»** справа от «Данные для печати» (`ГруппаДанныеДляПечати`) в том же наборе страниц, где она расположена для основного сценария РНК. +2. По умолчанию в **новом** документе вкладка/ТЧ **скрыты**. +3. При **открытии** существующего документа: если ТЧ `УчетНомернойТары` не пустая — показать вкладку. +4. Динамически показывать вкладку при выполнении условий п. 5.3 (изменение `ТипФасовки` / признака / `КоличествоМест`). + +### 5.3. Условие обязательности и синхронизация строк + +**Условие «режим номерной тары»:** + +- `ТипФасовки` заполнен; +- у выбранного типа фасовки `НомернаяТара = Истина`. + +Тогда: + +1. Вкладка «Учет номерной тары» **видима**. +2. Число строк ТЧ должно быть равно `КоличествоМест` (целое; при `КоличествоМест ≤ 0` — режим не считать корректным: запретить проведение с понятным сообщением либо не включать обязательность — зафиксировать на реализации: **рекомендация** — при режиме номерной тары `КоличествоМест` должно быть ≥ 1). +3. При изменении `КоличествоМест` — подогнать число строк ТЧ (добавить пустые / удалить лишние с конца; не затирать уже выбранные значения без необходимости). +4. Заполнение всех строк ТЧ **обязательно** для записи/проведения (проверка заполнения `НомернаяТара` в каждой строке). +5. Выбор `НомернаяТара` — **только** элементы с владельцем = `Объект.ТипФасовки` (параметр выбора / отбор). +6. Дубли одной и той же ссылки номерной тары в ТЧ одного документа — запретить. + +Если условие режима **не** выполняется: + +- вкладку скрывать (если ТЧ пустая); +- если пользователь сменил тип фасовки так, что признак снят, а ТЧ была заполнена — очистить ТЧ с предупреждением или запросить подтверждение (предпочтительно: предупреждение + очистка при смене владельца/признака). + +### 5.4. Проведение — движения по регистру `экзУчетНомернойТары` + +При проведении РНК в режиме номерной тары (п. 5.3) для **каждой** строки ТЧ формировать движение **Расход**: + +| Поле регистра | Источник | +|---------------|----------| +| Организация | шапка `Организация` | +| Подразделение | шапка `ПодразделениеОрганизации` | +| Весовая | шапка `Весовая` | +| Склад | шапка `Склад` | +| Контрагент | если заполнен `ПунктРазгрузки` — он; иначе `Получатель` | +| ТипФасовки | шапка `ТипФасовки` | +| НомернаяТара | строка ТЧ `НомернаяТара` | +| Количество | **1** | + +Если режим номерной тары выключен — движений по этому регистру не писать (и очищать набор записей регистратора). + +### 5.5. Отмена проведения, пометка удаления, перепроведение + +- При отмене проведения и при пометке на удаление — движения по `экзУчетНомернойТары` должны быть сняты (стандартный механизм набора записей регистратора / `Движения.Записывать`). +- Запись движений всегда через набор записей документа-регистратора с предварительной очисткой, чтобы повторное проведение или правка ТЧ **не дублировали** остатки. +- Контроль отрицательных остатков на этапе A **не обязателен** (остатки появятся после документа прихода); при необходимости — мягкое предупреждение, не блок (уточняется при внедрении). + +### 5.6. Обмен с БЭКЗ + +**Требование:** данные по номерной таре **не выгружаем** в БЭКЗ (пока). + +Следствия для этапа A: + +1. Новые объекты (`экзНомернаяТара`, регистр, ТЧ) **не** включать в состав выгрузки `агк_ОбменВесоваяБЭКЗ` / правила обмена как обязательную выгрузку. +2. Редактирование **только** ТЧ `УчетНомернойТары` (и связанных служебных изменений, не влияющих на состав обмена) **не должно** регистрировать `РасходнаяНакладная` к обмену в `агк_ОбменВесоваяБЭКЗ`. + +Техническая реализация (на выбор при кодировании, с фиксацией в коде): + +- исключение реквизитов/ТЧ из правил регистрации изменений; и/или +- при записи, если изменены только «игнорируемые» данные номерной тары — `ОбменДанными.Получатели.АвтоЗаполнение = Ложь` / снятие регистрации по узлам плана; и/или +- доработка правил регистрации плана обмена. + +Критерий приёмки К6 обязателен. + +--- + +## 6. Этап B (отложено): приход и отчёт + +Описать отдельно; краткий каркас: + +### 6.1. Документ `экзПриходНомернойТары` + +- Состав реквизитов/ТЧ **зеркален** измерениям регистра + ресурс Количество (или ТЧ с номерной тарой по аналогии с РНК). +- Регистратор регистра `экзУчетНомернойТары`, движение **Приход**. +- Права: как у весовщиков на РНК / Приход по весовой (`Весовая_Весовщик` и связанные роли). + +### 6.2. Отчёт «Движение номерной тары» + +- Анализ прихода/расхода/остатков по регистру `экзУчетНомернойТары`. +- Детали — в отдельной задаче. + +### 6.3. Включение отбора по остаткам в РНК + +- При `экзИспользоватьОстаткиНомернойТары = Истина` — в выборе ТЧ РНК показывать только тару с остатком. + +--- + +## 7. Сценарии проверки (этап A) + +1. Тип фасовки без признака → в новой РНК вкладки номерной тары нет; проведение без ТЧ ОК. +2. Тип фасовки с признаком, `КоличествоМест = 3` → вкладка видна, 3 строки, без заполнения проведение запрещено. +3. Выбор номерной тары другого владельца невозможен. +4. Заполнение 3 разных экземпляров → проведение создаёт 3 движения расхода с Количество = 1 и корректными измерениями (контрагент: приоритет `ПунктРазгрузки`). +5. Отмена проведения → остатки/обороты регистратора обнулены; повторное проведение не удваивает. +6. Изменение только ТЧ номерной тары у уже выгружаемого/регистрируемого контура → **нет** новой регистрации в `агк_ОбменВесоваяБЭКЗ` (при прочих неизменных полях обмена). +7. Загрузка Excel по выбранному типу фасовки создаёт элементы с владельцем и длиной имени ≤ 25. +8. Роль без `ПолныеПрава` не меняет признак `НомернаяТара` у типа фасовки; роль `экзУчетНомернойТары` может создавать элементы справочника номерной тары. + +--- + +## 8. Вне объёма этапа A + +- Документ «Приход номерной тары». +- Отчёт о движении номерной тары. +- Отбор выбора в РНК строго по остаткам. +- Выгрузка номерной тары / движений в БЭКЗ. +- Мобильный клиент / отдельные РМ (если появятся — отдельная задача). + +--- + +## 9. Открытые решения (зафиксировать при реализации, если не оговорено иначе) + +| Тема | Рекомендация по умолчанию | +|------|---------------------------| +| Имена метаданных | префикс `экз…` по таблице §2 | +| `КоличествоМест = 0` при включённом признаке | запрет проведения | +| Дубли в Excel | пропуск с записью в протокол | +| Отрицательные остатки на этапе A | не блокировать | +| Место команды загрузки Excel | форма списка `экзНомернаяТара` | + +--- + +## 10. Порядок реализации (рекомендуемый) + +1. Реквизит `НомернаяТара` в `экзТипыФасовки` + права. +2. Справочник `экзНомернаяТара` + роль + загрузка Excel. +3. Регистр `экзУчетНомернойТары` + константа. +4. ТЧ и форма РНК (видимость, число строк, отбор выбора, проверки). +5. Движения при проведении / отмене. +6. Исключение влияния ТЧ на регистрацию БЭКЗ. +7. Регрессионные сценарии §7. + +--- + +*Источники уточнения имён: MCP `user-1c` (конфигурация ВесоваяАК 0.0.3.21), исходники `ves2020` (`экзТипыФасовки`, `РасходнаяНакладная`, `агк_ОбменВесоваяБЭКЗ`, роли `ПолныеПрава` / `Весовая_Весовщик`).*