Добавить тара.md
This commit is contained in:
@@ -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` (`экзТипыФасовки`, `РасходнаяНакладная`, `агк_ОбменВесоваяБЭКЗ`, роли `ПолныеПрава` / `Весовая_Весовщик`).*
|
||||
Reference in New Issue
Block a user