Как изменить проект в документе реализации в 1С:Комплексная автоматизация 1.1, чтобы данные корректно отображались в отчетах

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

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

Выясним причину проблемы: составной тип данных и кэширование аналитики

Первая причина некорректного поведения системы кроется в определении реквизита Проект. В КА 1.1 этот реквизит имеет составной тип данных. Обычно он включает в себя СправочникСсылка.Проекты и СправочникСсылка.ВидыРаспределенияПоПроектам.

Когда мы используем стандартную «Групповую обработку справочников и документов», она иногда некорректно заполняет ссылку, если не указан точный тип значения. В результате в поле записывается строковое представление или «битая» ссылка, которая визуально похожа на название проекта, но объектная связь не устанавливается. Именно поэтому при нажатии на кнопку выбора программа не понимает, какой справочник открывать, и предлагает выбор из двух типов.

Вторая и более важная причина — отсутствие обновленных движений в регистрах накопления. В 1С данные для отчетов берутся не из шапки документа, а из специальных таблиц — регистров (например, Продажи или УчетЗатрат). Если вы изменили реквизит в документе, но не выполнили его проведение, старые записи в регистрах со старым проектом сохраняются.

Способ 1. Групповая обработка в два этапа (для открытых периодов)

Если период редактирования не закрыт, самым простым и надежным способом будет использование стандартной обработки «Групповая обработка справочников и документов». Проанализируем правильный алгоритм действий:

  1. Откроем обработку, выберем тип объекта «Документ» и конкретный вид — «Реализация товаров и услуг».
  2. Настроим отбор по нужным документам (например, по организации или дате).
  3. Перейдем на вкладку «Обработка». Нажмем кнопку «Настройка» и убедимся, что установлены флаги «Разрешить изменение реквизитов объектов» и «Выполнять в транзакции».
  4. Этап 1: Смена реквизита. Выберем действие «Изменить реквизит [Проект]», укажем нужное значение проекта и нажмем «Выполнить».
  5. Этап 2: Перепроведение. После того как реквизит изменен, не закрывая обработку, сменим действие на «Провести». Это критически важно, так как именно в момент проведения 1С сформирует новые записи в регистрах с актуальным проектом.

Рассмотрим ситуацию, когда ручное перепроведение «не помогает». Это может быть связано с тем, что форма документа при открытии перехватывает управление и не дает изменить аналитику без перезаполнения определенных табличных частей. В таких случаях проведение через групповую обработку (которое вызывает процедуру Объект.Записать(РежимЗаписиДокумента.Проведение)) работает эффективнее.

Способ 2. Использование универсальной обработки с произвольным кодом

Для более тонкой настройки процесса, когда нужно гарантировать запись правильного типа данных, лучше использовать «Универсальный подбор и обработку объектов». Здесь мы можем написать небольшой фрагмент кода, который выполнит задачу программно. Посмотрим на пример алгоритма:


// Пример кода для обработки "Произвольный алгоритм"
ОбъектДок = Объект.ПолучитьОбъект();
// Явно указываем ссылку на проект из справочника
НовыйПроект = Справочники.Проекты.НайтиПоНаименованию("Наш Проект");

// Устанавливаем значение в шапке
ОбъектДок.Проект = НовыйПроект;

// Записываем документ с проведением, чтобы обновить регистры
Попытка
    ОбъектДок.Записать(РежимЗаписиДокумента.Проведение);
    Сообщить("Документ " + ОбъектДок + " успешно обновлен.");
Исключение
    Сообщить("Ошибка проведения документа: " + ОписаниеОшибки());
КонецПопытки;

Этот метод позволяет избежать проблем с составным типом, так как мы передаем в реквизит Проект конкретную ссылку типа СправочникСсылка.Проекты.

Способ 3. Изменение проекта в закрытых периодах (без перепроведения)

Часто требуется исправить аналитику за прошлые годы, когда период уже закрыт для редактирования и сдачи отчетности, и перепроведение документов недопустимо, так как оно может изменить себестоимость или суммы НДС. Выясним, как действовать в такой ситуации.

Для решения задачи нам потребуется изменить данные в двух местах: в самом документе (для визуального отображения) и в наборах записей регистров (для отчетов).

Проанализируем программный метод с использованием флага ОбменДанными.Загрузка. Этот флаг позволяет записывать объекты без выполнения проверок и без запуска обработчиков событий, которые обычно инициируют пересчеты. Рассмотрим пример кода:


// 1. Меняем реквизит в самом документе
ОбъектДок = СсылкаНаДокумент.ПолучитьОбъект();
ОбъектДок.ОбменДанными.Загрузка = Истина; // Отключаем проверки
ОбъектДок.Проект = НужныйПроект;
ОбъектДок.Записать(РежимЗаписиДокумента.Запись);

// 2. Меняем проект в регистре накопления "Продажи"
НаборЗаписей = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
НаборЗаписей.Прочитать();

Для Каждого Запись Из НаборЗаписей Цикл
    Запись.Проект = НужныйПроект;
КонецЦикла;

НаборЗаписей.ОбменДанными.Загрузка = Истина;
НаборЗаписей.Записать();

Особенности РАУЗ (Расширенная аналитика учета затрат)

Если в вашей базе включен режим РАУЗ, задача усложняется. В этом режиме проект записывается не напрямую в записи регистра, а входит в состав так называемого Ключа аналитики. Разберем этот момент подробнее:

В регистрах группы УчетЗатрат (например, «Учет затрат (управленческий учет)») вместо набора измерений используется одно измерение — АналитикаВидаУчета или АналитикаРаспределенияЗатрат. Каждая уникальная комбинация (Склад + Номенклатура + Проект + ...) имеет свой уникальный ключ (элемент справочника «Ключи аналитики учета затрат»).

Чтобы изменить проект в отчетах по затратам без перепроведения, вам придется:

  1. Найти или создать новый элемент в справочнике ключей аналитики, в котором указан новый проект.
  2. Программно заменить старый ключ на новый во всех записях регистра УчетЗатрат по данному документу.

Важное предупреждение: Прямая правка регистров — это крайняя мера. Если в будущем кто-то случайно нажмет кнопку «Провести» в таком документе, система заново сгенерирует движения на основе данных в шапке документа, и ваши ручные правки в регистрах могут быть затерты (если данные в шапке и регистрах не будут совпадать). Поэтому всегда меняйте проект одновременно и в документе, и в движениях.

Резюме

Для корректного изменения проекта мы рекомендуем сначала убедиться, что вы используете правильный тип ссылки в групповой обработке. Если период открыт — используйте двухшаговое проведение (изменение + проведение). Если период закрыт — используйте программную запись с флагом ОбменДанными.Загрузка = Истина для документа и всех связанных с ним регистров (Продажи, НДС, Учет затрат).

← На главную