Как исправить ошибку повторного использования вида субконто в запросе в 1С 7.7

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При переносе данных из конфигурации 1С:Бухгалтерия 7.7 в 1С:Зарплата и Кадры 7.7 пользователи и разработчики могут столкнуться с критической ошибкой выполнения обработки:

{Обработка.ВыгрузкаДанныхИсполняющая.Форма.Модуль(271)}: Повторное использование вида субконто "Контрагенты" в запросе!

Разберем детально механизм возникновения данной ошибки платформы 1С:Предприятие 7.7, проанализируем возможные причины и рассмотрим по шагам способы её устранения.

Механика работы объекта БухгалтерскиеИтоги и причины сбоя

Платформа 1С 7.7 накладывает жесткие ограничения на формирование запросов к бухгалтерским итогам с помощью объекта БухгалтерскиеИтоги:

  1. Ограничение на дублирование видов субконто: В рамках одного экземпляра объекта БухгалтерскиеИтоги нельзя вызвать метод ИспользоватьСубконто() с одним и тем же видом субконто несколько раз подряд до выполнения расчета или пересоздания объекта.
  2. Отсутствие метода сброса параметров: У объекта нет встроенной функции очистки фильтров. Если объект объявлен как глобальная переменная (например, гБухИтоги) или используется циклически, все ранее переданные виды субконто сохраняются в его контексте.
  3. Ошибки в циклах перебора аналитики счета: При обходе субконто счета (в 1С 7.7 их максимум три) разработчики часто используют цикл с переменной-инкрементом. Если счетчик цикла не увеличивается, метод вызывается дважды для одного и того же первого субконто счета, что вызывает исключение.
  4. Некорректная структура плана счетов: Если в плане счетов на каком-либо счете по ошибке дважды назначен один и тот же вид субконто (например, на первом и втором уровне), попытка инициализировать аналитику счета в запросе приведет к аналогичной ошибке.

Способ 1. Проверка и исправление счетчика в цикле модуля обработки

Рассмотрим типовой фрагмент кода обработки выгрузки, на котором происходит сбой:

гБухИтоги.ИспользоватьСубконто(Счет.ВидСубконто(Инд));

Если в теле цикла или алгоритме обхода субконто значение переменной Инд не инкрементируется перед следующим вызовом, в метод ИспользоватьСубконто() повторно передается одно и то же значение (например, ВидыСубконто.Контрагенты).

Разберем по шагам, как исправить эту ошибку:

  1. Откроем модуль внешней обработки ВыгрузкаДанныхИсполняющая.ert через Конфигуратор 1С 7.7.
  2. Перейдем к строке, указанной в тексте ошибки (в примере — строка 271).
  3. Проанализируем цикл обхода субконто счета. Убедимся, что счетчик субконто увеличивается на каждой итерации:

Для Инд = 1 По Счет.КоличествоСубконто() Цикл
    ВидСубк = Счет.ВидСубконто(Инд);
    Если ПустоеЗначение(ВидСубк) = 0 Тогда
        гБухИтоги.ИспользоватьСубконто(ВидСубк);
    КонецЕсли;
КонецЦикла;

Если цикл организован через оператор Пока ... Цикл, проверим наличие строки инкремента Инд = Инд + 1; перед завершением итерации.

Способ 2. Переинициализация объекта бухгалтерских итогов

Если выгрузка обрабатывает несколько счетов подряд в одном глобальном объекте, между обработками счетов необходимо очищать состояние объекта. Для этого выполним пересоздание экземпляра перед установкой нового набора фильтров:

гБухИтоги = СоздатьОбъект("БухгалтерскиеИтоги");

Это полностью сбрасывает дерево аналитики и позволяет безопасно накладывать новые условия по субконто.

Способ 3. Передача списка значений для одного вида субконто

Если требуется сделать отбор по нескольким конкретным значениям одного вида субконто (например, по нескольким контрагентам), нельзя вызывать метод ИспользоватьСубконто() для каждого элемента отдельно. Посмотрим на правильный вариант реализации через СписокЗначений:


СписокКонтрагентов = СоздатьОбъект("СписокЗначений");
СписокКонтрагентов.ДобавитьЗначение(ВыбКонтрагент1);
СписокКонтрагентов.ДобавитьЗначение(ВыбКонтрагент2);

// Третий параметр 2 означает отбор по списку значений
гБухИтоги.ИспользоватьСубконто(ВидыСубконто.Контрагенты, СписокКонтрагентов, 2);

Способ 4. Аудит структуры плана счетов информационной базы

Если ошибка возникает даже при корректном коде цикла, проанализируем план счетов информационной базы:

  1. Откроем информационную базу в режиме 1С:Предприятие или Конфигуратор.
  2. Перейдем в меню Операции -> План счетов.
  3. Внимательно проверим нестандартные, забалансовые и добавленные пользователями счета.
  4. Убедимся, что ни на одном счете вид субконто Контрагенты не указан одновременно в нескольких колонках (например, «Субконто 1» и «Субконто 2»). При обнаружении задвоения удалим лишнее субконто со счета.

Альтернативный перенос структуры плана счетов в ЗиК

Если выгрузка требуется исключительно для синхронизации плана счетов без выгрузки проводок и остатков, можно воспользоваться альтернативными решениями:

  1. Использовать специализированную типовую обработку ExpPlan.ert из каталога ExtForms, которая переносит только описания счетов без построения срезов итогов.
  2. В конфигурации Зарплата и Кадры временно изменить константу Программа бухучета на значение Другая программа бухучета, вручную откорректировать счета и субконто, после чего вернуть константу в исходное состояние.
← На главную