При ведении партионного учета в конфигурациях платформы 1С 7.7 (например, в «Торговля и Склад 7.7» или «Комплексная конфигурация 7.7») пользователи и администраторы нередко сталкиваются с ситуацией, когда в регистре ПартииНаличие появляется строка с пустым значением измерения Партия и отрицательным остатком (например, -2 шт.), а рядом числится конкретная партия с положительным остатком (+2 шт.). Попытки удалить такую запись напрямую средствами СУБД, процедурой «Удалить пустые» или через стандартное «Тестирование и исправление» не приносят результата. Разберем природу этой ошибки и рассмотрим правильные способы ее устранения.
Проанализируем механику работы партионного учета в 1С 7.7. Подобное состояние регистра не является техническим сбоем базы данных или повреждением таблиц MS SQL. Это классическая учетная коллизия — пересорт по партиям. Выясним основные причины ее появления:
Контроль отрицательных остатков отключен (или установлен флаг «Списывать партии при отсутствии остатков»), программа при нехватке конкретной партии списывает товар по пустому значению измерения Партия. При этом в регистре образуется отрицательное движение с фиксацией дефицита.Разберем по шагам, как выявить документы, сформировавшие некорректные движения, и исправить остатки стандартными учетными средствами.
Если период уже закрыт для редактирования и перепроводить первичные документы прошлых периодов нельзя, рассмотрим альтернативные методы исправления ситуации:
Оформляем документ «Инвентаризация ТМЦ». На его основании создаем два документа:
— «Оприходование ТМЦ» — для закрытия минуса по пустой партии;
— «Списание ТМЦ» — для списания зависшего положительного остатка с конкретной партии.
Запускаем обработку «Восстановление последовательности документов» («Партионный учет»). При автоматическом списании по методам FIFO или LIFO программа пересчитает партии по цепочке документов и закроет временные разрывы остатков.
Если требуется скорректировать остатки программно через встроенный язык 1С 7.7, используем прямое обращение к регистру через штатный объект метаданных, избегая прямых запросов к SQL-таблицам.
Посмотрим на пример кода внешней обработки для формирования корректирующего движения:
Рег = СоздатьОбъект("Регистр.ПартииНаличие");
Рег.Номенклатура = ВыбНоменклатура;
Рег.МОЛ = ВыбСклад;
Рег.Партия = ПолучитьПустоеЗначение("Справочник.Партии");
Рег.Количество = 2;
Рег.Приход();
Рассмотрим важные технические нюансы платформы 1С 7.7 при работе с SQL-версией:
RA...) и таблицы итогов (RG...) жестко связаны внутренней логикой платформы. Удаление записей через прямые SQL-запросы приведет к разрушению точки актуальности (ТА), расхождению итогов и системным ошибкам расчета себестоимости.Чтобы исключить появление подобных записей в будущем, настроим следующие правила: