Техническое задание: учёт драгметаллов в ломе электроники
Задание, которое получил ИИ-агент в примере «Полный цикл разработки в 1С силами ИИ-агента». Текст приведён без изменений; файл задания есть и в архиве комплекта.
Конфигурация: «Управление торговлей», редакция 11.5
Где выполняется доработка: отдельное расширение конфигурации «УчетДрагметаллов», префикс ДрМ_
Постановка
Компания принимает лом электроники — платы, разъёмы, контакты, катализаторы. В этом ломе содержатся драгоценные металлы: золото, серебро, платина, палладий.
Приёмщик взвешивает партию и видит грязный вес. Но платят сдатчику за чистый вес, а ценность партии определяется не весом лома, а тем, сколько в нём драгоценного металла и сколько этот металл стоит сегодня.
Сейчас всё это считают в таблице на компьютере приёмщика. Нужно вести в программе.
Общие требования
Конфигурация не меняется и с поддержки не снимается. Всё новое живёт в расширении. Типовые объекты — справочники, формы, общие модули — дорабатываются только заимствованием.
Доработка должна вести себя как часть типовой конфигурации. Прежде чем делать документ, форму, проведение или сообщение пользователю, нужно посмотреть, как это сделано в похожих типовых объектах, и повторить принятый там порядок. Пользователь не должен различать, где заканчивается типовая программа и начинается доработка.
Права доступа настраиваются сразу при создании каждого объекта, а не в конце работы — подробно в пункте 14.
Требования к интерфейсу — в отдельном разделе в конце задания. Они обязательны.
Как проверяется работа
Сделанным считается только то, что проверено в запущенной программе под пользователем с полными правами. Ответ среды разработки «успешно» и собранный файл расширения доказательством не являются.
Расчёты и проведение — модульными тестами (YAxUnit). Всё, что считает и записывает программа без участия пользователя, закрывается модульными тестами: вес нетто и суммы, расчёт драгоценных металлов, проведение и отмена проведения, движения по регистрам, контроль при проведении. Ожидаемые значения в тестах берутся из этого задания и считаются вручную, а не списываются с того, что вернула программа. Модульные тесты делаются до проверки интерфейса: ошибка в расчёте, найденная тестом, находится за минуты, а найденная на форме — за час.
Формы, кнопки и команды — сценариями Vanessa Automation. Сценарий открывает программу, открывает формы, нажимает кнопки и делает снимки экрана программы. Кнопка считается работающей, только если её нажали в программе и результат появился от нажатия. Каждый снимок исполнитель просматривает сам и проверяет, что на нём видно задуманное.
Проверять экономно. Запуск программы дороже самих шагов, поэтому проверки одной части работы собираются в один сценарий: открыть все нужные формы, нажать кнопки, сделать все снимки — за один запуск.
Данные для проверки должны быть настоящими: не меньше четырёх видов лома с содержанием металлов, котировки на несколько дат, не меньше десяти документов приёмки за разные дни и по разным складам. Пустой список проверкой не считается. Данные можно заводить любым способом, в том числе программно, — вручную в интерфейсе вводить не требуется.
Если подключён инструмент работы с данными работающей программы (например, MCP:RSV Data Pro), итоги дополнительно сверяются запросом к базе.
Отчёт о выполнении. По окончании — короткий отчёт: что сделано по каждому пункту и чем подтверждено (тесты, сценарии, снимки), сколько времени заняла каждая часть и вся работа, что сделать не удалось и почему.
1. Справочник «Драгоценные металлы»
Список драгоценных металлов, который пользователь пополняет сам: золото, серебро, платина, палладий. Со временем добавятся другие.
У металла: наименование, краткий код (AU, AG, PT, PD) и комментарий.
2. Содержание драгоценных металлов в номенклатуре
Для каждого вида лома нужно хранить, сколько граммов каждого драгоценного металла содержится в одном килограмме этого лома. Металлов у одного вида лома может быть несколько. Значения меняются редко, история изменений не нужна. Пользователь заполняет их сам, в отдельном списке.
Пример данных:
| Номенклатура | Металл | Содержание, г/кг |
|---|---|---|
| Платы компьютерные | Золото | 0,25 |
| Платы компьютерные | Серебро | 1,10 |
| Разъёмы позолоченные | Золото | 1,80 |
| Контакты серебряные | Серебро | 42,00 |
| Катализаторы автомобильные | Платина | 1,20 |
| Катализаторы автомобильные | Палладий | 0,90 |
| Радиодетали, лом | Золото | 0,08 |
| Радиодетали, лом | Серебро | 0,60 |
Список открывается не только из раздела программы, но и прямо из карточки вида лома: на панели навигации карточки номенклатуры, в группе «Перейти», должна появиться команда «Содержание драгоценных металлов». По ней открывается список, где видны строки только этой номенклатурной позиции. У позиции, для которой содержание не заполнено, список открывается пустым, а не с ошибкой.
3. Котировки драгоценных металлов
Стоимость одного грамма каждого металла на дату. Котировки меняются, поэтому нужна история: на любую дату должно быть видно, какая цена действовала тогда. Пользователь вводит котировки вручную.
Пример данных:
| Дата | Металл | Цена за грамм, руб. |
|---|---|---|
| 01.09.2026 | Золото | 9 850,00 |
| 01.09.2026 | Серебро | 118,40 |
| 01.09.2026 | Платина | 3 120,00 |
| 01.09.2026 | Палладий | 2 940,00 |
| 08.09.2026 | Золото | 9 920,00 |
| 08.09.2026 | Серебро | 121,10 |
Так же, как у номенклатуры, котировки открываются из карточки металла: на панели навигации карточки металла, в группе «Перейти», — команда «Котировки драгоценных металлов». По ней открывается список котировок только этого металла. Проверяется на двух разных металлах: у каждого — свои котировки.
4. Тестовые данные
Строки из таблицы пункта 2 и котировки из пункта 3 исполнитель заводит в базу сам — любым удобным способом. Сверх них — данные, нужные для проверки (раздел «Как проверяется работа»).
5. Документ «Приёмка лома»
Новый документ. В шапке, помимо даты и номера: организация, склад, партнёр-сдатчик, вид приёмки, комментарий.
Вид приёмки — закрытый список из четырёх значений, пользователь его не пополняет: заготовка, отбор, излишки, деловой прокат. У нового документа — «заготовка».
Табличная часть «Лом» — одна строка на вид лома:
| Колонка | Как заполняется |
|---|---|
| Номенклатура | выбирает пользователь |
| Вес брутто, кг | вводит пользователь |
| Вес мусора, кг | вводит пользователь |
| Засор, % | вводит пользователь |
| Вес нетто, кг | считается автоматически |
| Цена за кг | вводит пользователь |
| Сумма | считается автоматически |
Вес нетто = (вес брутто − вес мусора) × (1 − засор / 100) — до трёх знаков после запятой, лишние знаки отбрасываются, а не округляются. Сумма = вес нетто × цена за кг. Пересчёт происходит сразу, как только пользователь поменял любое из исходных значений.
Табличная часть «Драгоценные металлы» заполняется по кнопке «Рассчитать металлы» — по строке на каждый металл, найденный в принятом ломе:
| Колонка | Как заполняется |
|---|---|
| Металл | из содержания металлов в номенклатуре |
| Чистый металл, г | сумма по всем строкам лома: вес нетто × содержание, г/кг; округляется до сотых |
| Цена за грамм | котировка этого металла, действующая на дату документа (последняя введённая не позже этой даты) |
| Сумма | чистый металл × цена за грамм |
Под таблицей лома — общий вес нетто и общая сумма, под таблицей металлов — общее количество граммов и общая сумма.
Пример для проверки расчёта: брутто 100 кг, мусор 5 кг, засор 2 %, цена 50 руб./кг → нетто 93,100 кг, сумма 4 655,00 руб. Если это «Платы компьютерные», в металлах: золото 23,28 г, серебро 102,41 г.
Контроль при проведении. Если хотя бы для одной строки лома не заполнено содержание драгоценных металлов, документ не проводится. Пользователь получает сообщение с названием позиции, из-за которой проведение остановлено, и щелчок по сообщению переводит курсор на нужную строку таблицы «Лом».
Форма документа делается по образцу типовых документов. Сначала открыть один-два типовых документа — например, «Заказ клиента» и «Реализация товаров и услуг» — и посмотреть, как они устроены. Потом повторить тот же порядок:
- реквизиты шапки — на первой закладке «Основное», табличные части — каждая на своей закладке;
- комментарий — на закладке «Основное», многострочный: длинный текст виден целиком;
- на командной панели — те же кнопки, что у типового документа такого рода: «Провести и закрыть», «Записать», «Провести», меню «Печать» с актом и оценкой партии (пункты 7 и 7.1), меню «Отчёты» с движениями документа. Набор, вид и порядок — как у образца: «Записать», «Провести» и «Пометить на удаление» — одной картинкой, «Провести и закрыть» и меню — с надписью;
- код формы — в том же стиле, что у типовых документов; где в конфигурации уже есть готовая функция или общий модуль, вызывается готовое, а не пишется своё.
6. Учёт остатков
При проведении документа должны накапливаться данные, по которым в любой момент видно:
- сколько лома (вес нетто и сумма) лежит на каждом складе по каждому виду лома;
- сколько чистого драгоценного металла (граммы и сумма) принято на каждый склад по каждому металлу.
При отмене проведения эти данные снимаются.
Проведение делается по образцу типовых документов. Прежде чем писать код, разобрать, как проводятся те же «Заказ клиента» и «Реализация товаров и услуг», и писать в том же порядке и стиле: как готовятся и записываются движения, как ставятся блокировки, как документ сообщает о причине отказа. Где в конфигурации уже есть готовое — берётся готовое.
6.1. Раздел программы — сразу после пункта 6
Всё, что сделано в пунктах 1–6, пользователь открывает из собственного раздела программы «Драгоценные металлы», а не ищет по чужим разделам. Раздел заводится сразу после пункта 6 и дальше пополняется по ходу работы: появился новый объект — его команда добавляется в раздел в той же части работы. Окончательный вид — пункт 11.
7. Печатная форма «Приёмо-сдаточный акт»
Акт — документ для сдатчика: его подписывают обе стороны, и сдатчик забирает экземпляр себе. Поэтому в нём только то, о чём договорились при сделке: что принято и сколько за это платится.
В акте: шапка с реквизитами организации, партнёра-сдатчика, склада, номером и датой документа; таблица принятого лома — вес брутто, вес мусора, засор, вес нетто, цена за кг, сумма; итоговая строка; сумма к выплате цифрами и прописью; подписи сдатчика и приёмщика. Драгоценных металлов, котировок и их стоимости в акте нет — это внутренняя оценка компании, сдатчику её не показывают.
Акт помещается на одном листе А4 книжной ориентации, суммы — с двумя знаками после запятой и разделителями разрядов. Длинные значения в шапке (название организации с ИНН, партнёр) переносятся на следующую строку, а не обрезаются. Непроведённый документ печатать нельзя.
Печать работает так же, как у типовых документов: та же кнопка, тот же предварительный просмотр, те же возможности сохранения и отправки.
7.1. Печатная форма «Оценка партии»
Вторая печатная форма того же документа — для внутреннего пользования, на подпись сдатчику не отдаётся. Она показывает, чего партия стоит для компании.
В оценке: шапка с номером и датой документа, партнёром и складом; таблица драгоценных металлов партии — металл, чистый металл в граммах, цена за грамм по котировке на дату документа, стоимость; итог по металлам. Под таблицей — сумма, выплаченная сдатчику по акту, и разница между стоимостью металлов и этой суммой — ориентировочная выгода партии.
Печатается из того же меню «Печать» документа, на одном листе А4. Непроведённый документ печатать нельзя.
8. Отчёт «Драгоценные металлы в ломе»
Пользователь задаёт период и, при необходимости, склад. У отчёта два варианта; у каждого — понятное название, которое видно на закладке и в списке вариантов (название «Основной» не годится).
Вариант «Драгоценные металлы по складам». По каждому металлу: сколько граммов было на начало периода, сколько поступило за период, сколько на конец, и во что это оценивается по котировкам. Внутри металла — разбивка по складам. Итоги обязательны, включая общий итог по всем металлам. Заголовки колонок — «Содержится металла, г» и «Оценка по котировкам, руб.»: это граммы самого драгметалла в принятом ломе и их стоимость по котировке на дату приёмки, а не вес лома и не сумма, выплаченная сдатчикам. Под таблицей — диаграмма: доля каждого металла в общей стоимости принятых металлов.
Вариант «Лом на складах». По каждому виду лома с разбивкой по складам: вес нетто на начало периода, поступило за период, на конец, в килограммах, и сумма, выплаченная сдатчикам. Итоги обязательны. Вес лома и граммы металла в одной таблице не смешиваются: в одной партии лома бывает несколько металлов, и её вес посчитался бы дважды.
Отчёт виден в панели отчётов раздела «Закупки» вместе с прочими отчётами по закупкам и в панели отчётов собственного раздела (пункт 11).
Числа отчёта сверяются с данными базы. Отчёт может открываться и выглядеть правильно, а считать неверно — поэтому оба варианта проверяются по существу:
- отчёт формируется по-настоящему, на данных базы, за период с документами приёмки — и по всем складам, и с отбором по одному складу;
- те же итоги считаются независимо, прямым запросом к документам приёмки: граммы и оценка по каждому металлу и складу, вес нетто и выплаченная сумма по каждому виду лома и складу;
- числа отчёта и запроса совпадают до грамма и до копейки, включая общий итог. Расхождение — ошибка отчёта, её ищут и исправляют, а не объясняют.
Если подключён MCP:RSV Data Pro, это делается им: он формирует вариант отчёта в работающей программе и выполняет произвольный запрос к базе. Без него — модульным тестом, который формирует отчёт и сравнивает его итоги с запросом.
9. Внешняя обработка «Монитор приёмки лома»
Отдельный файл внешней обработки, который подключается к базе без изменения конфигурации.
Форма разделена на две части. Слева — список документов приёмки лома с отбором по периоду и по складу: дата, номер, склад, партнёр, вес нетто и сумма; непроведённые документы выделены цветом. Справа — драгоценные металлы документа, выделенного в списке: металл, граммы, цена за грамм, сумма. Список обновляется по кнопке.
Ширина делится по содержимому: левый список не забирает лишнего, а правая таблица показывает все свои колонки целиком, без горизонтальной прокрутки — при обычном размере окна программы. Когда окно шире, обе части растягиваются вместе с ним.
Кнопка «Пересчитать по текущим котировкам» считает, какой была бы стоимость металлов во всех документах, попавших в отбор, по сегодняшним котировкам. Сами документы не изменяются. По окончании показывается: сколько документов обработано, какая общая стоимость сейчас и какой она стала бы.
Документов может быть сотни, поэтому пересчёт идёт в фоне: окно программы не замирает, пользователь видит ход выполнения и может его прервать.
10. Приёмка лома в карточке партнёра
В карточке партнёра — отдельная вкладка «Приём лома»:
- признак «Сдатчик лома»;
- номер лицензии на обращение с ломом и дата её окончания;
- таблица последних приёмок от этого партнёра: дата, номер документа, склад, вес нетто, сумма. Таблица заполняется сразу при открытии карточки и служит только для просмотра.
Признак и лицензия сохраняются в карточке и видны при повторном открытии. Карточка дорабатывается заимствованием — типовая форма не изменяется.
11. Раздел программы «Драгоценные металлы»
Раздел, заведённый в пункте 6.1, доводится до окончательного вида. У него своя картинка, подходящая по смыслу, и три группы:
- Учёт — документы приёмки лома;
- Справочники и настройки — металлы, содержание металлов, котировки;
- Отчёты — отчёт по драгоценным металлам.
Команды внутри групп — в порядке, в котором ими пользуются: сначала то, с чем работают каждый день, потом настройки.
Документ приёмки и отчёт остаются доступными и из раздела «Закупки».
12. Дополнительные отчёты и обработки в разделе
В разделе «Драгоценные металлы» — группа «Дополнительные отчёты и обработки», такая же, как в типовых разделах. Внешняя обработка «Монитор приёмки лома» (пункт 9) подключена к базе как дополнительная обработка и привязана к этому разделу: пользователь открывает её из раздела, а не ищет файл на диске.
Подключаться обработка должна сама — при установке расширения или по отдельной команде; заводить её руками в интерфейсе не требуется. Открытая из раздела, она работает целиком: отбор, кнопки, фоновый пересчёт — так же, как при открытии файлом.
13. Справка по документу «Приёмка лома»
У документа — своя справка, которая открывается по знаку вопроса, как у типовых объектов. Коротко: что это за документ и для чего он нужен, что заполняет пользователь, что считается автоматически, откуда берутся драгоценные металлы и их стоимость, почему документ может не провестись. Пользователь нажимает знак вопроса и видит этот текст, а не пустое окно и не общую справку программы.
14. Права доступа
У каждого нового объекта — справочника, документа, регистров, отчёта, обработки, раздела программы и его команд — настроены права доступа, отдельной ролью или ролями в расширении.
Права настраиваются сразу при создании объекта. Создан объект — в том же шаге ему настроены права, и только потом берётся следующий. Иначе к концу работы часть объектов остаётся без прав, и обнаруживается это у пользователя.
Права — те, что нужны для работы: читать, добавлять, изменять, проводить и отменять проведение документа, открывать отчёты и обработки, видеть раздел и его команды.
Удалять объекты насовсем пользователь не должен ни при каких правах, включая полные. Сейчас в карточке элемента в меню «Еще» рядом с «Пометить на удаление» стоит пункт «Удалить» — он удаляет объект из базы сразу и безвозвратно. Такого пункта быть не должно ни в карточке, ни в списке — ни у справочника драгоценных металлов, ни у документа приёмки лома. Ненужное пользователь помечает на удаление, а удаляет помеченное администратор — обработкой удаления помеченных объектов, как это принято в программе.
Проверяется под пользователем с полными правами: в карточке и в списке металла и документа раскрыть меню «Еще» — пункта «Удалить» нет, «Пометить на удаление» есть и работает. Снимок раскрытого меню — по каждому из четырёх мест.
Требования к интерфейсу
Относятся ко всем формам доработки — документа, справочников, внешней обработки и вкладки в карточке партнёра.
- Формы проверяются глазами. По каждой форме — снимок работающей программы с настоящими данными, и снимок разбирается: то ли на нём видно, что задумано, и удобно ли этим пользоваться каждый день.
- Расположение логичное. Поля сгруппированы по смыслу, группы подписаны, связанные поля рядом, важное выше, редкое — ниже или на отдельной закладке. Ничто не наезжает и не обрезается, форма читается без лишней прокрутки. Строки итогов заполнены, а не пустые.
- У каждой кнопки — картинка, подходящая по смыслу. Исполнитель подбирает её сам из имеющихся в программе. Кнопка без картинки не принимается.
- У каждой закладки — картинка, подходящая по содержанию.
- Формы понятны без объяснений. Подписи — обычными словами, без сокращений; единицы измерения указаны там, где их можно перепутать.
- Оформление — как в типовой конфигурации: посмотреть похожие типовые формы и следовать тому же порядку.
- Строки различаются значками, а не только текстом: - в списке документов внешней обработки (пункт 9) — значок состояния: проведён, не проведён, помечен на удаление; - в таблице «Драгоценные металлы» документа — свой значок у каждого металла; - в списке содержания металлов (пункт 2) — у каждой строки значок её металла, тот же, что в документе.
- Признаки «да/нет» — флажком, как в типовых списках, а не словом «Да» или «Истина». Это касается признака «Сдатчик лома» и любых других признаков в списках и таблицах.