Как программно изменить реквизит объекта в 1С с помощью режима загрузки данных

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При переносе данных между конфигурациями (например, из «1С:Управление торговлей» в «1С:Бухгалтерию предприятия») нередко возникают ситуации, когда параметры взаиморасчетов заполняются некорректно. Типовые механизмы конфигурации блокируют интерактивное изменение ключевых реквизитов (например, признака расчетов в условных единицах в справочнике ДоговорыКонтрагентов), если по объекту уже зарегистрированы движения. Разберем, как обойти данные ограничения программно, какие инструменты для этого существуют и к каким последствиям в учете это может привести.

Причина блокировки реквизитов и суть режима загрузки

В типовых конфигурациях 1С логика работы форм и модулей объектов запрещает редактирование реквизитов, влияющих на методику бухгалтерского и налогового учета, если по договору уже созданы первичные документы. При попытке изменить реквизит вручную программа требует отменить проведение всех связанных документов.

Чтобы выполнить запись объекта без вызова прикладных проверок модуля, в платформе 1С предусмотрено свойство ОбменДанными.Загрузка. При установке этого свойства в значение Истина:

  1. Отключается выполнение обработчиков событий ПередЗаписью и ПриЗаписи в модуле объекта.
  2. Игнорируются проверки заполнения обязательных реквизитов и проверки ссылочной целостности на уровне прикладного кода.
  3. Объект записывается напрямую в базу данных в том виде, в котором он сформирован в памяти.

Программное изменение реквизита с использованием ОбменДанными.Загрузка

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


Для Каждого СсылкаНаДоговор Из МассивДоговоров Цикл
    ДоговорОбъект = СсылкаНаДоговор.ПолучитьОбъект();
    Если ДоговорОбъект <> Неопределено Тогда
        ДоговорОбъект.РасчетВУсловныхЕдиницах = Истина;
        ДоговорОбъект.ОбменДанными.Загрузка = Истина;
        ДоговорОбъект.Записать();
    КонецЕсли;
КонецЦикла;

Разберем данный код по шагам:

  1. Методом ПолучитьОбъект() получаем объектную сущность из ссылки для возможности редактирования.
  2. Устанавливаем требуемое значение реквизита (в данном примере — РасчетВУсловныхЕдиницах).
  3. Включаем флаг ДоговорОбъект.ОбменДанными.Загрузка = Истина, благодаря чему запись пройдет без ошибок валидации.
  4. Вызываем метод Записать().

Использование внешних инструментов и групповых обработок

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

  1. Комплект «Инструменты разработчика» (DevTools): специализированная групповая обработка из этого пакета содержит встроенный переключатель режима ОбменДанными.Загрузка, что позволяет массово модифицировать реквизиты любых объектов без написания кода.
  2. Типовая обработка «Групповое изменение реквизитов»: в современных версиях «1С:Бухгалтерии» на управляемых формах в меню «Дополнительные параметры» можно включить «Режим разработчика» («Изменять служебные реквизиты»), что позволяет выполнять запись служебных полей объектов.

Влияние на учет и необходимость перепроведения документов

Простая смена флага в договоре с помощью ОбменДанными.Загрузка = Истина решает только задачу изменения значения в базе данных, но создает риски расхождения бухгалтерского учета. Проанализируем, почему это происходит:

  1. Разделение счетов учета: взаиморасчеты в рублях учитываются на стандартных счетах (например, 60.01, 60.02, 62.01, 62.02), тогда как для договоров в условных единицах предусмотрены специальные субсчета (60.31, 60.32, 62.31, 62.32).
  2. Курсовые разницы: при расчетах в у.е. регламентная операция переоценки валютных остатков в процедуре «Закрытие месяца» ожидает наличия валютных сумм и соответствующих счетов расчетов. Если проводки сформированы по рублевым счетам, закрытие месяца завершится с ошибками либо рассчитает курсовые разницы неверно.
  3. Необходимость актуализации движений: после программной корректировки договора требуется открыть и перепровести зависимые документы (с перезаполнением счетов расчетов), чтобы сформировать корректные бухгалтерские проводки.

Если период уже закрыт и перепроведение документов невозможно, корректным решением является создание нового договора с правильными реквизитами и перенос задолженности на него с помощью документа КорректировкаДолга текущей открытой датой.

← На главную