Правка заказов поставщику
Каждая строка заказа поставщику помнит не только то, что заказали, но и то, что из этого вышло: сколько товара уже поступило и на сколько поставщик выставил счёт. Эти числа система ведёт сама — всякий раз, когда сохраняют или проводят поступление, счёт поставщика или возврат. Параллельно в справочнике «Статусы товара» накапливается количество «в заказах» — то, что уже заказано, но ещё не приехало.
Где искать: Модули → Заказы поставщикам (также в модулях: Обслуживание базы данных) → Обслуживание → Правка заказов поставщику
Пока всё проводится штатно, цифры сходятся. Но связь между документами можно порвать: массовый импорт из внешней системы, миграция базы, документ, удалённый в обход обычного порядка. Тогда заказ выглядит недополученным, хотя товар давно на складе, или в «Статусах товара» висит ожидание по заказу, который закрыли полгода назад.
Эта служба пересчитывает все такие числа заново — от первичных документов, а не от того, что записано в заказе.
Разбор на примере
Представьте заказ на 5 дрелей. Приход провели, счёт получили — в строке заказа должно стоять «поступило 5, зачтено 5». После неудачного импорта там стоит «зачтено 0», хотя счёт поставщика в базе есть и в его шапке указан этот заказ: у строки счёта потеряна ссылка на строку заказа.
Запуск службы разматывает ситуацию по шагам:
- Обнуляет «в заказах» во всех записях «Статусов товара» — дальше это число складывается заново.
- Проходит все заказы и добавляет заказанные количества обратно в «Статусы товара». Для непроведённых заказов отдельно накапливается своё количество. Заказ с флажком «Завершен» в «в заказах» не добавляет ничего, а строка непроведённого заказа с кодом, для которого нет карточки товара, — тоже.
- Чинит связь со счётом поставщика: смотрит счёт, в шапке которого указан этот заказ (если таких счетов несколько — только первый найденный), и в строках с тем же кодом товара восстанавливает ссылку на строку заказа. Строка без ссылки получает строку заказа этого товара с той же позицией, а если такой нет — первую строку этого товара; получает один раз, так что две строки заказа одного товара не забирают её друг у друга. Строка, чья ссылка ведёт за пределы заказа или на строку другого товара, получает строку своего товара с той же позицией. Ссылку на строку этого заказа с тем же товаром служба не трогает. Именно этот шаг и спасает наш пример. Связь строк поступлений и возвратов служба не чинит: их она находит только по ссылке на строку заказа, которая в них уже записана.
- Пересчитывает полученное по каждой строке заказа: отдельно «всего в поступлениях» (включая ещё не проведённые) и «в проведённых поступлениях», минус проведённые возвраты поставщику. Считаются только документы этого заказа — те, в шапке которых указан его номер, — так же, как при их сохранении.
- Пересчитывает зафактурованное — сумма количеств из строк счетов поставщика этого заказа; кредитовые счета (возврат денег) вычитаются — так же, как при сохранении самого счёта.
- Записывает результат в строки заказа и уменьшает «в заказах» на уже полученное: в пути остаётся только разница.
После этого в строке стоит «поступило 5, зачтено 5», а из «Статусов товара» исчезает фантомное ожидание.
Параметры запуска

Единственное поле — «Заказ поставщика», выбор из справочника заказов. Штатный режим — оставить его пустым: тогда служба пересчитывает всю базу. С номером заказа она пересчитывает только товары этого заказа, но по всем заказам, где они есть, — иначе «в заказах» получилось бы заниженным; другие товары не трогает. Номер, которого нет, — отказ «Заказ на закупку не найден: …», заказ без товаров — «В этом заказе поставщику нет товаров: …».
Кнопка «Выполнить» запускает пересчёт сразу, «По расписанию» ставит его в очередь регулярных заданий — но именно этой службе регулярность не нужна (см. ниже).
Вся работа идёт одной транзакцией: если на середине случится ошибка, база останется в том же состоянии, что и была.
Типичные ситуации
После миграции или массового импорта. Это самый частый повод. Документы перенесли, а связи между строками — нет. Пересчёт восстанавливает по коду товара и позиции только связь строк счетов поставщика; строку поступления или возврата без ссылки на строку заказа служба не найдёт, и её количество в «поступило» не попадёт. Так же не попадёт документ, в шапке которого не указан заказ: ссылка строки тут не спасает.
В статусе заказа недобор. Колонка «Поступ.» меньше фактически полученного, хотя все приходные накладные проведены и подписаны.
«Статусы товара» показывают ожидание по закрытому заказу. Товар давно на складе и уже продан, а система считает, что часть ещё в пути, — такое ожидание показывают, например, Отчет статуса товара и Отчет о нехватке запасов.
«Регистр «…» общий с другой компанией: эту службу запускает только она». Заказы поставщикам, статусы товара или счета поставщиков в этой компании общие с другой — пересчитывает их служба, запущенная в главной компании. Отказ приходит до любых изменений.
Регулярно «на всякий случай» запускать не надо. Служба переписывает показатели исполнения по всей базе; это инструмент лечения, а не ежедневного обслуживания.
Куда смотреть дальше
- Заказы поставщикам — где живут числа, которые служба пересчитывает;
- Статус заказа и Отчет по заказам поставщикам — где расхождение заметно быстрее всего;
- Поступления, Счета поставщика, Возвраты поставщикам — первичные документы, из которых собираются цифры.