Перейти к содержанию

Правка заказов поставщику

Каждая строка заказа поставщику помнит не только то, что заказали, но и то, что из этого вышло: сколько товара уже поступило и на сколько поставщик выставил счёт. Эти числа система ведёт сама — всякий раз, когда сохраняют или проводят поступление, счёт поставщика или возврат. Параллельно в справочнике «Статусы товара» накапливается количество «в заказах» — то, что уже заказано, но ещё не приехало.

Где искать: Модули → Заказы поставщикам (также в модулях: Обслуживание базы данных) → Обслуживание → Правка заказов поставщику

Пока всё проводится штатно, цифры сходятся. Но связь между документами можно порвать: массовый импорт из внешней системы, миграция базы, документ, удалённый в обход обычного порядка. Тогда заказ выглядит недополученным, хотя товар давно на складе, или в «Статусах товара» висит ожидание по заказу, который закрыли полгода назад.

Эта служба пересчитывает все такие числа заново — от первичных документов, а не от того, что записано в заказе.

Разбор на примере

Представьте заказ на 5 дрелей. Приход провели, счёт получили — в строке заказа должно стоять «поступило 5, зачтено 5». После неудачного импорта там стоит «зачтено 0», хотя счёт поставщика в базе есть и в его шапке указан этот заказ: у строки счёта потеряна ссылка на строку заказа.

Запуск службы разматывает ситуацию по шагам:

  1. Обнуляет «в заказах» во всех записях «Статусов товара» — дальше это число складывается заново.
  2. Проходит все заказы и добавляет заказанные количества обратно в «Статусы товара». Для непроведённых заказов отдельно накапливается своё количество. Заказ с флажком «Завершен» в «в заказах» не добавляет ничего, а строка непроведённого заказа с кодом, для которого нет карточки товара, — тоже.
  3. Чинит связь со счётом поставщика: смотрит счёт, в шапке которого указан этот заказ (если таких счетов несколько — только первый найденный), и в строках с тем же кодом товара восстанавливает ссылку на строку заказа. Строка без ссылки получает строку заказа этого товара с той же позицией, а если такой нет — первую строку этого товара; получает один раз, так что две строки заказа одного товара не забирают её друг у друга. Строка, чья ссылка ведёт за пределы заказа или на строку другого товара, получает строку своего товара с той же позицией. Ссылку на строку этого заказа с тем же товаром служба не трогает. Именно этот шаг и спасает наш пример. Связь строк поступлений и возвратов служба не чинит: их она находит только по ссылке на строку заказа, которая в них уже записана.
  4. Пересчитывает полученное по каждой строке заказа: отдельно «всего в поступлениях» (включая ещё не проведённые) и «в проведённых поступлениях», минус проведённые возвраты поставщику. Считаются только документы этого заказа — те, в шапке которых указан его номер, — так же, как при их сохранении.
  5. Пересчитывает зафактурованное — сумма количеств из строк счетов поставщика этого заказа; кредитовые счета (возврат денег) вычитаются — так же, как при сохранении самого счёта.
  6. Записывает результат в строки заказа и уменьшает «в заказах» на уже полученное: в пути остаётся только разница.

После этого в строке стоит «поступило 5, зачтено 5», а из «Статусов товара» исчезает фантомное ожидание.

Параметры запуска

Окно службы

Единственное поле — «Заказ поставщика», выбор из справочника заказов. Штатный режим — оставить его пустым: тогда служба пересчитывает всю базу. С номером заказа она пересчитывает только товары этого заказа, но по всем заказам, где они есть, — иначе «в заказах» получилось бы заниженным; другие товары не трогает. Номер, которого нет, — отказ «Заказ на закупку не найден: …», заказ без товаров — «В этом заказе поставщику нет товаров: …».

Кнопка «Выполнить» запускает пересчёт сразу, «По расписанию» ставит его в очередь регулярных заданий — но именно этой службе регулярность не нужна (см. ниже).

Вся работа идёт одной транзакцией: если на середине случится ошибка, база останется в том же состоянии, что и была.

Типичные ситуации

После миграции или массового импорта. Это самый частый повод. Документы перенесли, а связи между строками — нет. Пересчёт восстанавливает по коду товара и позиции только связь строк счетов поставщика; строку поступления или возврата без ссылки на строку заказа служба не найдёт, и её количество в «поступило» не попадёт. Так же не попадёт документ, в шапке которого не указан заказ: ссылка строки тут не спасает.

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

«Статусы товара» показывают ожидание по закрытому заказу. Товар давно на складе и уже продан, а система считает, что часть ещё в пути, — такое ожидание показывают, например, Отчет статуса товара и Отчет о нехватке запасов.

«Регистр «…» общий с другой компанией: эту службу запускает только она». Заказы поставщикам, статусы товара или счета поставщиков в этой компании общие с другой — пересчитывает их служба, запущенная в главной компании. Отказ приходит до любых изменений.

Регулярно «на всякий случай» запускать не надо. Служба переписывает показатели исполнения по всей базе; это инструмент лечения, а не ежедневного обслуживания.

Куда смотреть дальше