Закрытие месяца в ERP. Протокол с почти 100 пунктами! В каждом из пунктов протокола формируются временные таблицы:
процедура общего модуля РасчетСебестоимости.РассчитатьВсе. Предлагаем расширение с отчетом для просмотра данных из временных таблиц протокола по результатам закрытия месяца.
Подключение функционала.
1. Подсистема поставляется в виде расширения. Подключаем расширение или копируем подсистему в требуемую конфигурацию. Состав подсистемы простой: общий модуль, константа, отчет, справочник и регистр сведений.
2. В процедуру РасчетСебестоимости.РассчитатьВсе добавляем в требуемом месте, например, после // Этап 17 (расчет фактической себестоимости) код для записи данных по временным таблицам:
...
Если ВыполняетсяЗакрытиеМесяца Тогда
ПросмотрВТ_ЗакрытиеМесяцаПросмотрВТ.ЗаписатьДанныеДляПросмотраВТ(ПараметрыРасчета.МенеджерВременныхТаблиц.Таблицы, ПараметрыРасчета.ПротоколРасчета.Идентификатор);
КонецЕсли;
...
3. В форме списка РС "ПротоколыРасчетаПартийИСебестоимости" в процедуре ПриСозданииНаСервере в конце добавляем код для выбора протокола в отчете:
Если Параметры.Свойство("РКС_РежимВыбораПротокола") Тогда
Элементы.Список.РежимВыбора = Истина;
КонецЕсли;
Подсистема встроена. Запускаем закрытие месяца. После окончания процедур закрытия отчетом можно просматривать временные таблицы.
Рекомендации.
Причина по которой было написано расширение - не закрывались временные разницы. Система сообщала, что на остатке по счету при нулевом количестве есть сумма временной разницы:
Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации "Модуль ПАО" на конец периода Февраль 2023: Организация: "Модуль ПАО"; Раздел учета: "Незавершенное производство"; Аналитика номенклатуры: "Металл листовой по 2 м2; Производство, Кофточки, 0000-2, 12.02.2023 (Заказ на производство); Материал"; Вид запасов: "Собственный товар; Группа: Материалы; Организация: Модуль ПАО"; Партия: "Заказ на производство (0000-2.1, 12.02.2023); Группа затрат: Кофточка зимняя"; Вид деятельности НДС: "Продажа облагается НДС"; Временная разница: "1 444"
Рекомендация - моделирование проблематики на небольшой демо базе. У меня не "маленькая" ИБ и процесс закрытия занимает порядка 2-4 часов. Некоторые основные временные таблицы свыше 5 млн. записей. Согласитесь - лезть в отладку непонятно в какой блок модулей закрытия - наверное, нет смысла. Понять за сжатый срок полностью весь код - не реально, по крайней мере, пока, для меня. Поэтому я смоделировал проблематику закрытия на мини демо базе - ИБ с минимальным набором данным, но полностью воспроизводящая требуемые ошибки при закрытии месяца. Далее, просмотр временных таблиц и связей вывел на код, который был "ответственен" за ошибку. И, как результат - это оказалась недоработка типовой конфигурации (у меня 1С:ERP. Управление холдингом (3.1.9.6)). Судите, сами:
РасчетСебестоимостиКорректировкаСтоимости.СкорректироватьСтоимостьСписанияНезавершенногоПроизводства22
#Область ВтТаблицаКорректировкиВрем
...
Новый релиз:
| ВЫРАЗИТЬ(
| ТаблицаКорректировки.КоличествоРегл
| * ЕСТЬNULL(СтоимостиРегл.ВременнаяРазница, 0)
| КАК ЧИСЛО(31,2)) КАК ВременнаяРазница,
Текущий релиз:
| ВЫРАЗИТЬ(
| ТаблицаКорректировки.КоличествоРегл
| * ВЫБОР
| КОГДА НЕ ТаблицаКорректировки.ПрямыеЗатратыНУ И ТаблицаКорректировки.ПринимаемыеВНУ
| ТОГДА 0
| ИНАЧЕ ЕСТЬNULL(СтоимостиРегл.ВременнаяРазница, 0) КОНЕЦ
| КАК ЧИСЛО(31,2)) КАК ВременнаяРазница,
...
Проблема успешно локализована. Закрытие месяца продолжилось.
P.S. Если просматривать данные не на демо базах. Идентификацию пакетов по временным таблицам лучше всего сделать через число и уже в запросе отбирать требуемые номера данных. Сейчас, тип измерения ИдентификаторДанных - УникальныйИдентификатор и используется объектная техника отбора по номерам таблиц. Это влияет на потребление оперативной памяти на сервере приложения.