В процессе эксплуатации 1С:Управление торговлей 11 нередко возникают ситуации, когда бизнес-процессы меняются "на лету". Одной из самых болезненных операций является отключение ордерной схемы документооборота на складах, по которым уже велся учет. Если на момент отключения в системе остались неполностью обработанные ордера (например, расходная накладная проведена, а расходный ордер — нет), возникают серьезные коллизии в регистрах накопления. Данные в отчетах по складу, по организациям и в помощниках продаж начинают «разъезжаться».
В этой статье мы разберем, как проанализировать ситуацию, какие регистры необходимо привести в порядок и как автоматизировать этот процесс, чтобы восстановить корректный учет без физической инвентаризации всей базы.
Проанализируем архитектуру УТ 11. В этой конфигурации складской и финансовый контуры разделены. Когда склад является ордерным:
РеализацияТоваровУслуг, ПриобретениеТоваровУслуг) делают движения по регистру ТоварыОрганизаций.ПриходныйОрдерНаТовары, РасходныйОрдерНаТовары) делают движения по регистру ТоварыНаСкладах.ТоварыКОформлениюОрдеровПриемки и ТоварыКОформлениюОрдеровОтгрузки).Если отключить использование ордеров, когда по ним есть остатки, система перестает видеть необходимость в ордерах, но записи в регистрах ТоварыНаСкладах и ТоварыОрганизаций остаются несогласованными. В результате менеджер видит товар в свободном остатке, но не может его отгрузить, так как по данным организации его «нет», или наоборот.
Выясним причину расхождений, изучив основные регистры накопления, которые отвечают за остатки. Для исправления ситуации нам потребуется работать со следующими объектами:
Важно помнить, что в новых версиях УТ 11 (начиная с 11.4.7) также активно используется регистр РаспределенныеЗапасы. Если его не учесть, правки могут не отразиться на доступности товара для заказов.
Рассмотрим два основных пути решения проблемы:
Путь А: Методически верный (через складские акты). Мы создаем документы СписаниеНедостачТоваров для обнуления текущих (неверных) остатков и ОприходованиеИзлишковТоваров для ввода актуальных данных. Этот способ хорош тем, что система автоматически пропишет движения во все связанные регистры, включая СебестоимостьТоваров и ПартииТоваровОрганизаций. Это исключит проблемы при закрытии месяца.
Путь Б: Технический (через документ Корректировка регистров). Если документов слишком много или нужно «хирургическое» вмешательство, мы можем использовать программное создание документа КорректировкаРегистров. Рассмотрим именно этот вариант, так как он чаще всего требуется программисту для массовой обработки ошибок.
Посмотрим на пример логики, которую можно реализовать в обработке. Нам необходимо выполнить три действия: получить текущие остатки, создать сторнирующие записи (обнуление) и ввести новые значения.
Сначала сформируем запрос к виртуальным таблицам остатков. Нам нужно получить данные в разрезе всей ключевой аналитики: Номенклатура, Характеристика, Склад, Организация, НомерГТД.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладах.Номенклатура КАК Номенклатура,
| ТоварыНаСкладах.Характеристика КАК Характеристика,
| ТоварыНаСкладах.Склад КАК Склад,
| ТоварыНаСкладах.ВНаличииОстаток КАК КоличествоСклад
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ТоварыНаСкладах";
Запрос.УстановитьПараметр("Период", ГраницаКорректировки);
Результат = Запрос.Выполнить().Выгрузить();
Проанализируем полученную таблицу. Для каждого найденного остатка мы должны создать запись в документе КорректировкаРегистров с противоположным знаком (Расход для положительных остатков и Приход для отрицательных), чтобы вывести регистр в «ноль».
Разберем пример кода для заполнения движений регистра ТоварыНаСкладах в документе КорректировкаРегистров:
НовыйДокумент = Документы.КорректировкаРегистров.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Комментарий = "Обнуление остатков для выравнивания ордерной схемы";
// Добавляем таблицу регистра в список корректируемых
НоваяСтрокаРегистра = НовыйДокумент.ТаблицаРегистровНакопления.Добавить();
НоваяСтрокаРегистра.Имя = "ТоварыНаСкладах";
// Заполняем движения (обнуление)
Для Каждого СтрокаОстатка Из РезультатОстатков Цикл
Движение = НовыйДокумент.Движения.ТоварыНаСкладах.ДобавитьРасход();
Движение.Период = НовыйДокумент.Дата;
Движение.Номенклатура = СтрокаОстатка.Номенклатура;
Движение.Характеристика = СтрокаОстатка.Характеристика;
Движение.Склад = СтрокаОстатка.Склад;
Движение.ВНаличии = СтрокаОстатка.КоличествоСклад;
КонецЦикла;
НовыйДокумент.Записать();
Аналогичные действия необходимо выполнить для регистров ТоварыОрганизаций и СвободныеОстатки. Обратите внимание, что для ТоварыОрганизаций обязательно нужно заполнять измерения Организация и НомерГТД, иначе остатки «повиснут» на пустой аналитике.
Проанализируем ситуацию глубже. Прямая корректировка регистров — это всегда риск для финансового результата. Рассмотрим основные «подводные камни»:
ТоварыОрганизаций, но не корректируете регистр СебестоимостьТоваров, система при закрытии месяца может выдать ошибку о наличии стоимости при нулевом количестве. Рекомендуется также очищать этот регистр в разрезе тех же позиций.ТоварыКОформлениюОрдеровПриемки и ТоварыКОформлениюОрдеровОтгрузки. Если в них остались записи, их нужно закрыть в ноль, иначе в отчетах по складу всё равно будут висеть рекомендации «Оформить ордер».ПередачаТоваровМеждуОрганизациями.ЗаказыКлиентов с резервами, регистр СвободныеОстатки может рассчитаться некорректно. Перед выполнением работ желательно отменить проведение заказов с резервами или учитывать их в расчетах.Подведем итог. Исправление регистров в УТ 11 — задача комплексная. Если есть возможность, всегда отдавайте предпочтение документам ИнвентаризацияТоваров, так как они задействуют встроенные механизмы проверки бизнес-логики 1С. Если же вы решили использовать Корректировку регистров, следуйте правилу «полного охвата»: корректируйте не только ТоварыНаСкладах, но и финансовый контур вместе с регистрами к оформлению.
После проведения корректировок обязательно выполните обработку «Исправление ошибок в данных для расчета себестоимости» и сделайте полное закрытие месяца, чтобы убедиться, что партионный учет восстановился правильно.