В 1С немного идеалистически подходят к учёту. Так, на взгляд методистов УПП, перед закрытием месяца не должно быть отрицательных остатков материалов и регламентных затрат.
Но жизнь всегда вносит свои коррективы и отрицательные остатки всегда есть. При этом процедура расчета себестоимости выдает бешенное число итераций и накручивает огромные суммы себестоимости - миллионы и даже триллионы рублей.
Конечно, не мешало бы разработчикам в 1С самим поставить разумную защиту от отрицательных остатков, но мы не будем ждать от них милостей, а сами сделаем такую защиту.
Разработка проверялась на релизе 1.3.66.2.
1С не гарантирует корректный расчет себестоимости по РАУЗ при наличии отрицательных остатков на регистре "УчетЗатратРегл", на счетах 10.*, на регистре учета МПЗ.
Это проявляется в том, что по 20-му счету выдаются большие суммы оборотов - миллионы или даже триллионы. А также в большом количестве итераций при расчете себестоимости.
Когда впервые видите такую ситуацию, она может привести Вас к панике, т.к. совершенно непонятно, как с нею бороться, а система решения линейных уравнений в РАУЗ имеет очень сложный код, чтобы в него залазить. Поэтому я в первый раз сделал предположение, что причина такого поведения в отрицательных остатках и нужно заменить их нулями. Оно оправдалось, так и есть.
Минуса по материалам не всегда можно закрыть оприходованием, иногда ждут поступления материалов накладной в будующем.
Поэтому нужно предохранить алгоритм, заменив минус на ноль модуль "КорректировкаСтоимостиУчетЗатрат", процедура "СформироватьВременнуюТаблицуУзлыКорректировкиСтоимостиСписания":
Если НЕ Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
...
Пока Выборка.Следующий() Цикл
//Осипов 2016-02-24 корректируем минуса, заменяем их на ноль +++
//Потому что при рассчетах с минусами получаются ошибки
НовыйУзел.Количество = Макс(НовыйУзел.Количество, 0);
НовыйУзел.КоличествоНУ = Макс(НовыйУзел.КоличествоНУ, 0);
НовыйУзел.СтоимостьНУ = Макс(НовыйУзел.СтоимостьНУ, 0);
НовыйУзел.ПостояннаяРазница = Макс(НовыйУзел.ПостояннаяРазница, 0);
НовыйУзел.Стоимость = Макс(НовыйУзел.Стоимость, 0);
//Осипов 2016-02-24 корректируем минуса, заменяем их на ноль ---
КонецЦикла;
Затраты лучше списывать в ноль корректировкой регистра, но пользователей нереально научить его корректно использовать каждый месяц, пусть используют хотя бы раз в квартал, после того, как закрывают период.
Поэтому в промежуточных помесячных расчетах нужно поставить защиту от минусов по остаткам в этом регистре, модуль "КорректировкаСтоимостиУчетЗатрат", процедура "СформироватьВременнуюТаблицуУзлыКорректировкиСтоимостиСписания":
Запрос.Текст = УправлениеЗатратами.ЗаменитьКомментарииВТекстеЗапроса(Запрос.Текст, ВидОтраженияВУчете);
//Осипов - убираем отрицательные остатки по затратам 2016-04-25 +++
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"УчетЗатратОстатки.КоличествоОстаток",
" ВЫБОР КОГДА УчетЗатратОстатки.КоличествоОстаток < 0 ТОГДА 0 ИНАЧЕ УчетЗатратОстатки.КоличествоОстаток КОНЕЦ ");
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"УчетЗатратОстатки.КоличествоНУОстаток",
" ВЫБОР КОГДА УчетЗатратОстатки.КоличествоНУОстаток < 0 ТОГДА 0 ИНАЧЕ УчетЗатратОстатки.КоличествоНУОстаток КОНЕЦ ");
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"УчетЗатратОстатки.СтоимостьОстаток",
" ВЫБОР КОГДА УчетЗатратОстатки.СтоимостьОстаток < 0 ТОГДА 0 ИНАЧЕ УчетЗатратОстатки.СтоимостьОстаток КОНЕЦ ");
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"УчетЗатратОстатки.СтоимостьНУОстаток",
" ВЫБОР КОГДА УчетЗатратОстатки.СтоимостьНУОстаток < 0 ТОГДА 0 ИНАЧЕ УчетЗатратОстатки.СтоимостьНУОстаток КОНЕЦ ");
//Осипов - убираем отрицательные остатки 2016-04-25 ---
Кстати, если сделать корректировку в текущем месяце, а потом пересчитать себестоимость, для оборотов по корректировке затрат тоже будут оценены обороты, т.е. результат будет неправильным. Поэтому сначала расчет себестоимости, потом корректировка.
Выбрать дату, при этом автоматически подставится существующий документ корректировки.
Нужно ставить галочку "Распроводить имеющуюся корректировку", чтобы остатки скорректировались без учета уже существующей корректировки.
Показывать таблицу минусов - покажет таблицу минусовых остатков.
Если не ставить галочку "Формировать движения в корректировке", обработка сработает в тестовом режим, только выводят таблицу минусов.
Документ корректировки ищется по маркеру и названию организации.
Иногда минуса по 20-му счету связаны с неправильной передачей сырья на переработку.
Откройте отчет "Отчеты - Расширенная аналитика учета - Ведомость по учету затрат"
Поищите расхождения по количеству прихода и расхода. Обычно материалы в переработку отдаются по количеству в спецификации документом "Поступление товаров из переработки", а приходуют по фактическому количеству документом "Получение услуг по переработке".
После того, как известно фактическое количество, количество в документе "Поступление товаров из переработки" нужно скорректировать, чтобы оно соответствовало документу "Получение услуг по переработке", иначе возникнут минуса. Для выявления расхождений как раз можно использовать этот отчет.