При переносе данных из конфигурации 1С:Бухгалтерия 7.7 в 1С:Зарплата и Кадры 7.7 пользователи и разработчики могут столкнуться с критической ошибкой выполнения обработки:
{Обработка.ВыгрузкаДанныхИсполняющая.Форма.Модуль(271)}: Повторное использование вида субконто "Контрагенты" в запросе!
Разберем детально механизм возникновения данной ошибки платформы 1С:Предприятие 7.7, проанализируем возможные причины и рассмотрим по шагам способы её устранения.
Платформа 1С 7.7 накладывает жесткие ограничения на формирование запросов к бухгалтерским итогам с помощью объекта БухгалтерскиеИтоги:
БухгалтерскиеИтоги нельзя вызвать метод ИспользоватьСубконто() с одним и тем же видом субконто несколько раз подряд до выполнения расчета или пересоздания объекта.гБухИтоги) или используется циклически, все ранее переданные виды субконто сохраняются в его контексте.Рассмотрим типовой фрагмент кода обработки выгрузки, на котором происходит сбой:
гБухИтоги.ИспользоватьСубконто(Счет.ВидСубконто(Инд));
Если в теле цикла или алгоритме обхода субконто значение переменной Инд не инкрементируется перед следующим вызовом, в метод ИспользоватьСубконто() повторно передается одно и то же значение (например, ВидыСубконто.Контрагенты).
Разберем по шагам, как исправить эту ошибку:
ВыгрузкаДанныхИсполняющая.ert через Конфигуратор 1С 7.7.
Для Инд = 1 По Счет.КоличествоСубконто() Цикл
ВидСубк = Счет.ВидСубконто(Инд);
Если ПустоеЗначение(ВидСубк) = 0 Тогда
гБухИтоги.ИспользоватьСубконто(ВидСубк);
КонецЕсли;
КонецЦикла;
Если цикл организован через оператор Пока ... Цикл, проверим наличие строки инкремента Инд = Инд + 1; перед завершением итерации.
Если выгрузка обрабатывает несколько счетов подряд в одном глобальном объекте, между обработками счетов необходимо очищать состояние объекта. Для этого выполним пересоздание экземпляра перед установкой нового набора фильтров:
гБухИтоги = СоздатьОбъект("БухгалтерскиеИтоги");
Это полностью сбрасывает дерево аналитики и позволяет безопасно накладывать новые условия по субконто.
Если требуется сделать отбор по нескольким конкретным значениям одного вида субконто (например, по нескольким контрагентам), нельзя вызывать метод ИспользоватьСубконто() для каждого элемента отдельно. Посмотрим на правильный вариант реализации через СписокЗначений:
СписокКонтрагентов = СоздатьОбъект("СписокЗначений");
СписокКонтрагентов.ДобавитьЗначение(ВыбКонтрагент1);
СписокКонтрагентов.ДобавитьЗначение(ВыбКонтрагент2);
// Третий параметр 2 означает отбор по списку значений
гБухИтоги.ИспользоватьСубконто(ВидыСубконто.Контрагенты, СписокКонтрагентов, 2);
Если ошибка возникает даже при корректном коде цикла, проанализируем план счетов информационной базы:
Если выгрузка требуется исключительно для синхронизации плана счетов без выгрузки проводок и остатков, можно воспользоваться альтернативными решениями:
ExpPlan.ert из каталога ExtForms, которая переносит только описания счетов без построения срезов итогов.