Справочный материал
Условия: отгрузка с аналогами
Здесь описано поведение отгрузки для первого урока. Дополнительно действуют [общие правила учёта](/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. Допустимы циклы связей; они не должны приводить к зависанию или повторному учёту товара.
- Несвязанный товар заменять нечем. Связи не означают сходства цены или себестоимости: цена продажи сохраняется из строки заказа, стоимость списания берётся у фактической позиции.
- В контрольном наборе разрешена замена штука в штуку. Коэффициентов пересчёта, ранжирования по марже и подтверждения каждой замены пользователем нет.
Правило распределения
Оно специально уточнено для нашего курса: наличный товар сначала должен достаться строкам, в которых заказан именно он.
- Рассмотри все строки документа в их порядке и распредели заказанный товар каждой строки в пределах ещё не распределённого остатка.
- После первого прохода снова рассмотри строки по порядку. Для дефицита перебирай остальные товары той же группы по артикулу, каждый раз уменьшая общий доступный остаток.
- При нехватке хотя бы для одной строки откажи в проведении всего документа. Частичной отгрузки в задании нет.
Это правило задаёт результат; структуру кода выбирает разработчик. Нельзя подбирать каждую строку по независимой копии исходных остатков. Также нельзя списывать B как аналог строки A до того, как всем строкам самого B выделен его доступный остаток первого прохода.
Результат распределения — связь «строка заказа → заказанный товар → фактический товар → количество». Сумма фактических количеств по строке равна заказанной. Общий расход каждой позиции не превышает остатка её склада.
Движения и стоимость
Расходуется фактическая номенклатура. Стоимость рассчитывается по её средней на выбранном складе по общим правилам учёта. Аналог не наследует себестоимость заказанного товара.
Продажная сумма строки остаётся количеством × её ценой. Для подробного отчёта она распределяется по фактическим отгрузкам пропорционально количеству по тому же правилу неотрицательных долей с остатком в последней части, что и для себестоимости в общих правилах. Это позволяет проверить и выручку, и стоимость без размножения суммы строки соединением с несколькими заменами.
Первый раунд
Добавь хранение связей аналогов, подбор товаров и проведение. При нехватке выводи понятное сообщение. Предусмотри просмотр фактических движений.
В первом раунде допустима простая техническая расшифровка по движениям. Пользовательский отчёт с сохранённой связью каждой строки — отдельная доработка второго раунда. Нельзя откладывать на второй раунд корректность количества и стоимости.
Второй раунд: что заказали и что отгрузили
Сохранить расшифровку принятой отгрузки и вывести отчёт с документом, строкой, складом, заказанным и фактическим товаром, количеством, выручкой и себестоимостью. Можно отобрать только замены. Итоги отчёта совпадают с документом и движениями.
Для документов, проведённых до появления нужного хранения, подробная связь может быть недоступна. В таком случае явно показывается «Детальная расшифровка не сохранена», а не выдуманные строки или нулевые отгрузки. Автоматическая миграция старых документов вне задания. Проверки второго раунда выполняются на восстановленных наборах с новым проведением после добавления хранения.
После удаления связи аналогов отчёт старого документа не меняется: он показывает факт принятой операции. Явное перепроведение допустимого последнего документа — новая попытка распределения по текущим связям; при успехе факт заменяется атомарно, при отказе прежний факт и движения сохраняются. Новая накладная всегда использует текущие связи.
Изменение очередности строк перед новым проведением может менять распределение аналогов между строками; это предусмотрено правилами. Старый отчёт не должен менять очередность или результат самопроизвольно.
Что не входит в задание
Подбор по остаткам других складов, частичная отгрузка, импорт заказов, резервирование, оплата, возвраты, произвольное исправление истории и параллельное редактирование справочника аналогов не входят в проект. Проверка конкуренции выделена в урок 3; последовательные тесты этого урока не доказывают многопользовательскую корректность.