Справочный материал

Условия: отгрузка с аналогами

Здесь описано поведение отгрузки для первого урока. Дополнительно действуют [общие правила учёта](/ru/courses/advanced-ai-for-1c/resources/course/accounting-contract/). Происхождение задания описано в [источниках](/ru/courses/advanced-ai-for-1c/resources/course/sources/).

Время
Справочный материал
Артефакт
Дополнительный материал к заданиям курса
Контрольная точка
Материал прочитан в контексте соответствующего задания

Здесь описано поведение отгрузки для первого урока. Дополнительно действуют общие правила учёта. Происхождение задания описано в источниках.

Заявка

На складе не всегда есть заказанный товар, но иногда есть взаимозаменяемый. Менеджер вводит то, что заказал покупатель. При проведении нужно отгрузить заказанный товар, а недостающее количество покрыть разрешёнными аналогами. Покупателю важен общий заказ, кладовщику — фактические позиции, а учёту — фактическая себестоимость.

Данные

  • В шапке расходного документа один склад. В строке — заказанный товар, количество и цена продажи. Номер строки задаёт порядок обработки; одинаковые товары могут встречаться повторно.
  • Товар имеет уникальный артикул. В учебных данных это строки из трёх цифр одинаковой длины; они сравниваются по возрастанию. Дубли артикулов не допускаются.
  • Связь аналогов симметрична и транзитивна: A—B и B—C означают взаимозаменяемость A, B и C. Допустимы циклы связей; они не должны приводить к зависанию или повторному учёту товара.
  • Несвязанный товар заменять нечем. Связи не означают сходства цены или себестоимости: цена продажи сохраняется из строки заказа, стоимость списания берётся у фактической позиции.
  • В контрольном наборе разрешена замена штука в штуку. Коэффициентов пересчёта, ранжирования по марже и подтверждения каждой замены пользователем нет.

Правило распределения

Оно специально уточнено для нашего курса: наличный товар сначала должен достаться строкам, в которых заказан именно он.

  1. Рассмотри все строки документа в их порядке и распредели заказанный товар каждой строки в пределах ещё не распределённого остатка.
  2. После первого прохода снова рассмотри строки по порядку. Для дефицита перебирай остальные товары той же группы по артикулу, каждый раз уменьшая общий доступный остаток.
  3. При нехватке хотя бы для одной строки откажи в проведении всего документа. Частичной отгрузки в задании нет.

Это правило задаёт результат; структуру кода выбирает разработчик. Нельзя подбирать каждую строку по независимой копии исходных остатков. Также нельзя списывать B как аналог строки A до того, как всем строкам самого B выделен его доступный остаток первого прохода.

Результат распределения — связь «строка заказа → заказанный товар → фактический товар → количество». Сумма фактических количеств по строке равна заказанной. Общий расход каждой позиции не превышает остатка её склада.

Движения и стоимость

Расходуется фактическая номенклатура. Стоимость рассчитывается по её средней на выбранном складе по общим правилам учёта. Аналог не наследует себестоимость заказанного товара.

Продажная сумма строки остаётся количеством × её ценой. Для подробного отчёта она распределяется по фактическим отгрузкам пропорционально количеству по тому же правилу неотрицательных долей с остатком в последней части, что и для себестоимости в общих правилах. Это позволяет проверить и выручку, и стоимость без размножения суммы строки соединением с несколькими заменами.

Первый раунд

Добавь хранение связей аналогов, подбор товаров и проведение. При нехватке выводи понятное сообщение. Предусмотри просмотр фактических движений.

В первом раунде допустима простая техническая расшифровка по движениям. Пользовательский отчёт с сохранённой связью каждой строки — отдельная доработка второго раунда. Нельзя откладывать на второй раунд корректность количества и стоимости.

Второй раунд: что заказали и что отгрузили

Сохранить расшифровку принятой отгрузки и вывести отчёт с документом, строкой, складом, заказанным и фактическим товаром, количеством, выручкой и себестоимостью. Можно отобрать только замены. Итоги отчёта совпадают с документом и движениями.

Для документов, проведённых до появления нужного хранения, подробная связь может быть недоступна. В таком случае явно показывается «Детальная расшифровка не сохранена», а не выдуманные строки или нулевые отгрузки. Автоматическая миграция старых документов вне задания. Проверки второго раунда выполняются на восстановленных наборах с новым проведением после добавления хранения.

После удаления связи аналогов отчёт старого документа не меняется: он показывает факт принятой операции. Явное перепроведение допустимого последнего документа — новая попытка распределения по текущим связям; при успехе факт заменяется атомарно, при отказе прежний факт и движения сохраняются. Новая накладная всегда использует текущие связи.

Изменение очередности строк перед новым проведением может менять распределение аналогов между строками; это предусмотрено правилами. Старый отчёт не должен менять очередность или результат самопроизвольно.

Что не входит в задание

Подбор по остаткам других складов, частичная отгрузка, импорт заказов, резервирование, оплата, возвраты, произвольное исправление истории и параллельное редактирование справочника аналогов не входят в проект. Проверка конкуренции выделена в урок 3; последовательные тесты этого урока не доказывают многопользовательскую корректность.