Ошибки при выполнении регламентной операции «Закрытие месяца» в программе «1С:Управление нашей фирмой» (УНФ) версии 3.0 — одна из наиболее сложных и трудоемких проблем, с которыми сталкиваются как пользователи, так и технические специалисты. Ситуация часто осложняется тем, что ошибка может проявляться «плавающим» образом: например, база на одном сервере выдает сбой, а копия той же базы на другом компьютере отрабатывает корректно. В данной статье мы подробно разберем, почему так происходит, проанализируем влияние битых ссылок в спецификациях и рассмотрим пошаговый алгоритм диагностики и исправления системы.
Одной из неочевидных причин сбоя в расчете себестоимости является наличие в справочнике Спецификации ссылок на удаленные документы, в частности на ЗаказПокупателя. В 1С:УНФ спецификация может быть создана под конкретный заказ клиента (так называемые индивидуальные спецификации). Если в процессе работы заказ был удален (например, напрямую без контроля ссылочной целостности или через некорректный обмен данными), но спецификация осталась в системе, она продолжает хранить идентификатор (UUID) этого заказа.
Когда мы запускаем документ ЗакрытиеМесяца, алгоритм расчета себестоимости начинает обходить цепочки производства. Если продукция выпускалась по спецификации, имеющей ссылку на несуществующий заказ, система сталкивается с ситуацией «Объект не найден». Это критично для управленческого учета, так как программа пытается сопоставить прямые затраты с аналитикой заказа, которой больше нет в базе. В итоге расчет «зависает» или выдает неинформативное сообщение об ошибке.
Для успешного решения проблемы нам необходимо понимать, где именно хранятся данные, которые анализирует закрытие месяца. Основным «подозреваемым» при ошибках себестоимости является регистр накопления Запасы. Однако в современных версиях УНФ (3.0 и выше) ключевую роль играет регистр «Запасы и затраты».
Рассмотрим, на что нужно обратить внимание при анализе этих регистров:
Запасы образовался минус (даже по одной характеристике или партии), алгоритм расчета себестоимости не сможет корректно распределить стоимость. Программа не знает, какую цену присвоить «отсутствующему» товару. Для точечного исправления записей пригодится универсальная корректировка остатков регистра накопления.ЗапасыИЗатраты числятся остатки с заполненным измерением ЗаказПокупателя, который помечен на удаление или физически удален, расчет будет прерван. Проблему можно решить через удаление движений с пустой ссылкой в регистрах.Часто специалисты замечают странный эффект: при выгрузке базы в файл .dt и загрузке на другой компьютер расчет себестоимости проходит успешно. Это не магия, а следствие технических особенностей платформы 1С:Предприятие 8.3.
Во-первых, при загрузке данных из .dt происходит полная переиндексация таблиц и сжатие базы данных. Это может временно устранить логические ошибки в индексах таблиц 1Cv8.1CD.
Во-вторых, проблема может крыться в локальном кэше конфигурации. Кэш хранит временные копии структур данных, и если он поврежден, расчет может выдавать ошибку именно на конкретном рабочем месте. Для исправления попробуем очистить папки кэша:
%AppData%\1C\1Cv8\ (папки с длинными именами-идентификаторами следует удалить при выключенной программе).
Если мы столкнулись с ошибкой расчета себестоимости, выполним следующие действия:
Прежде всего, запустим базу в режиме Конфигуратор и выполним проверку логической и ссылочной целостности. Это поможет выявить те самые «битые ссылки» на удаленные заказы. Обязательно выберем пункты:
Важно: В настройках проверки ссылочной целостности при наличии несуществующих ссылок выберем вариант «Очищать объекты» или «Создавать объекты» (для последующего анализа), чтобы система не спотыкалась об «Объект не найден».
Посмотрим на ситуацию глазами программиста. Чтобы быстро найти спецификации, в которых поле заказа содержит битую ссылку, мы можем воспользоваться консолью запросов. Напишем простой запрос к справочнику Спецификации:
ВЫБРАТЬ
Спецификации.Ссылка КАК ПроблемнаяСпецификация,
Спецификации.ЗаказПокупателя КАК БитаяСсылка
ИЗ
Справочник.Спецификации КАК Спецификации
ГДЕ
Спецификации.ЗаказПокупателя.Номер ЕСТЬ NULL
И НЕ Спецификации.ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
Если запрос вернет строки, значит, в этих спецификациях поле ЗаказПокупателя содержит ссылку на удаленный объект. Эти ссылки необходимо очистить вручную или с помощью обработки «Поиск и замена значений».
Воспользуемся отчетом «Анализ себестоимости» или «Остатки товаров». Сформируем отчет с максимальной детализацией (до регистратора и партии). Наша задача — убедиться, что ни в одной строке нет отрицательного количества или суммы на дату закрытия месяца. Если «минусы» обнаружены, их нужно закрыть инвентаризацией или исправлением документов поступления/выпуска задним числом.
Проанализируем ситуацию с выпуском продукции. В УНФ 3.0, если выпуск продукции был оформлен без привязки к заказу, а в спецификации заказ указан, система может некорректно распределить косвенные затраты. Проверьте, чтобы аналитика в документах Производство соответствовала аналитике в используемых спецификациях.
Чтобы подобные ошибки не возникали в будущем, рекомендуем придерживаться следующих правил:
Заказ покупателя напрямую, если по ним уже были движения или на них ссылаются спецификации. Используйте стандартную процедуру «Пометка на удаление» и последующее «Удаление помеченных объектов» с контролем ссылок.shrink) и пересчет итогов, так как объем данных при расчете себестоимости в УНФ растет очень быстро.Таким образом, мы выяснили, что ошибка расчета себестоимости в 1С:УНФ чаще всего имеет под собой либо техническую почву (кэш, индексы, битые ссылки), либо логическую (отрицательные остатки в регистрах). Последовательное выполнение ТИИ, очистка кэша и проверка целостности спецификаций позволяют успешно закрыть месяц и получить корректный финансовый результат.