При доработке процедуры закрытия месяца в платформе 1С 7.7 разработчики часто сталкиваются с ситуацией, когда проводки по списанию затрат со счета 20 «Основное производство» формируются не по всей аналитике. Например, если на счете задано три субконто (Виды номенклатуры, Подразделения и Статьи затрат на производство), списываться сумма может только по двум из них, оставляя третье пустым или нескорректированным.
Рассмотрим подробно причины возникновения такой проблемы и разберем по шагам, как правильно изменить программный код модуля документа Закрытие месяца.
Проанализируем типовую структуру выборки итогов. Для того чтобы сформировать проводку с заполнением всех трех субконто по кредиту счета 20, мало просто добавить настройку фильтрации через ИспользоватьСубконто(). Необходима трехуровневая вложенность циклов обхода аналитики.
Если в коде объявлены три субконто:
БухИт20 = СоздатьОбъект("БухгалтерскиеИтоги");
БухИт20.ИспользоватьСубконто(ВидыСубконто.ВидыНоменклатуры,,,);
БухИт20.ИспользоватьСубконто(ВидыСубконто.Подразделения,,,);
БухИт20.ИспользоватьСубконто(ВидыСубконто.СтатьиЗатратНаПроизводство,,,);
БухИт20.ВыполнитьЗапрос(ДатаНач, ДатаКон, Сч20,,,,,);
То и получение данных должно происходить последовательно через три вложенных цикла с вызовом методов ВыбратьСубконто() и ПолучитьСубконто() для каждого уровня аналитики.
Структура корректного обхода выглядит следующим образом:
БухИт20.ВыбратьСубконто(ВидыСубконто.ВидыНоменклатуры);
Пока БухИт20.ПолучитьСубконто(ВидыСубконто.ВидыНоменклатуры) = 1 Цикл
БухИт20.ВыбратьСубконто(ВидыСубконто.Подразделения);
Пока БухИт20.ПолучитьСубконто(ВидыСубконто.Подразделения) = 1 Цикл
БухИт20.ВыбратьСубконто(ВидыСубконто.СтатьиЗатратНаПроизводство);
Пока БухИт20.ПолучитьСубконто(ВидыСубконто.СтатьиЗатратНаПроизводство) = 1 Цикл
СуммаСписания = БухИт20.СКД();
Если СуммаСписания <> 0 Тогда
Операция.НоваяПроводка();
Операция.НомерЖурнала = "ФР";
Операция.СодержаниеПроводки = "Списание счета 20";
Операция.Дебет.Счет = Сч90_4;
Операция.Дебет.ВидыНоменклатуры = БухИт20.Субконто(ВидыСубконто.ВидыНоменклатуры);
Операция.Кредит.Счет = Сч20;
Операция.Кредит.ВидыНоменклатуры = БухИт20.Субконто(ВидыСубконто.ВидыНоменклатуры);
Операция.Кредит.Подразделения = БухИт20.Субконто(ВидыСубконто.Подразделения);
Операция.Кредит.СтатьиЗатратНаПроизводство = БухИт20.Субконто(ВидыСубконто.СтатьиЗатратНаПроизводство);
Операция.Сумма = глОкругление(СуммаСписания, ДатаДок);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
При попытке передать в функцию расчета незавершенного производства (НЗП) третье субконто система может выдать синтаксическую ошибку при компиляции модуля:
Слишком много фактических параметров
Выясним причину этой ошибки. Она означает, что сама функция ОстатокНезавершенногоПроизводства(), объявленная в модуле документа или глобальном модуле, принимает только два входящих аргумента. Например:
Функция ОстатокНезавершенногоПроизводства(ВидНом, Подразд)
// Логика расчета
КонецФункции
Разберем по шагам, что нужно сделать для исправления ошибки:
ОстатокНезавершенногоПроизводства в модуле.Функция ОстатокНезавершенногоПроизводства(ВидНом, Подразд, СтатьяЗатрат).НезавершенноеПроизводство:
|ВидНоменклатуры = Документ.НезавершенноеПроизводство.ВидНоменклатуры;
|Подразделение = Документ.НезавершенноеПроизводство.Подразделение;
|СтатьяЗатрат = Документ.НезавершенноеПроизводство.СтатьяЗатрат;
|Группировка ВидНоменклатуры;
|Группировка Подразделение;
|Группировка СтатьяЗатрат;
Проанализируем методическую сторону вопроса. В конфигурациях 1С 7.7 субконто Статьи затрат на производство (или статьи общехозяйственных/общепроизводственных расходов) на счетах затрат часто настраивается со специальным признаком — Только обороты (оборотное субконто).
Рассмотрим важные нюансы работы с оборотными субконто:
Таким образом, для корректного закрытия счета 20 необходимо убедиться в согласовании трех составляющих: настроек Плана счетов (признак «Только обороты»), вложенности циклов БухгалтерскиеИтоги и сигнатуры вспомогательных функций расчета НЗП.