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