Почему в 1С:УНФ отсутствуют движения у проведенного документа и как это исправить

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

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

Разберем основную причину: Явное указание записи движений

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

Если вы добавляете движения вручную в процедуре ОбработкаПроведения, обязательно проверьте наличие следующей строки для каждого регистра:


Движения.ПредоставленныеУслуги.Записывать = Истина;
// Заполнение набора записей
НоваяСтрока = Движения.ПредоставленныеУслуги.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);

Без установки свойства Записывать в значение Истина, платформа просто проигнорирует подготовленные вами данные в памяти и не перенесет их в таблицу базы данных. Выясним, почему это иногда работает «через раз»: если в документе уже есть другие регистры, где этот флаг установлен, или используются типовые механизмы, логика записи может срабатывать по-разному в зависимости от контекста вызова.

Проанализируем работу механизмов БСП и УНФ

Современная УНФ построена на использовании Библиотеки стандартных подсистем (БСП). Проведение здесь чаще всего реализовано не «в лоб», а через специализированные модули. Посмотрим на пример кода, который часто используется в типовых решениях:


ПроведениеДокументовУНФ.ОтразитьДвижения("ПредоставленныеУслуги", ТаблицыДляДвижений, Движения, Отказ);

Эта функция — «черный ящик» для многих разработчиков. Чтобы она отработала корректно, должны быть соблюдены строгие условия, о которых мы поговорим далее. Если хотя бы одно условие нарушено, БСП «молча» пропустит формирование движений, не выдавая никаких ошибок пользователю. Для изучения логики типовых процедур и быстрого поиска готового кода можно использовать справочник по методам БСП с примерами использования.

Настроим свойства метаданных: Регистратор и Удаление движений

Прежде чем искать ошибку в коде, проверим настройки самих объектов в конфигураторе. Проанализируем два ключевых момента:

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

Выясним влияние фонового проведения документов

В 1С:УНФ реализована настройка «Фоновое проведение документов». Это одна из самых частых причин появления «пустых» проведенных документов. Рассмотрим механизм подробнее:

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

При ручном перепроведении система часто выполняет код синхронно (в текущем сеансе), поэтому движения появляются. Чтобы исключить этот фактор при отладке, временно отключите фоновое проведение в настройках программы или используйте отладку фоновых заданий на сервере. Для упрощения этого процесса можно использовать инструмент для отладки длительных операций БСП в текущем сеансе.

Подготовим данные в Модуле Менеджера

В архитектуре БСП процедура ОбработкаПроведения в модуле объекта — это лишь верхушка айсберга. Основная работа по подготовке данных должна выполняться в модуле менеджера документа. Посмотрим, как это устроено:

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

  1. Имена колонок в таблице значений должны строго совпадать с именами измерений и ресурсов регистра.
  2. Обязательно наличие технических колонок: Период, Регистратор, ВидДвижения (для регистров остатков).
  3. Типы данных в колонках таблицы должны соответствовать типам в метаданных регистра.

Если в ТаблицыДляДвижений колонка Количество будет иметь тип Строка, а в регистре это Число, механизм ОтразитьДвижения может просто пропустить эти строки без предупреждения.

Проверим наличие ручной корректировки

Еще один важный момент, который стоит рассмотреть — это флаг РучнаяКорректировка. В некоторых документах УНФ предусмотрена возможность ручной правки движений. Если этот признак установлен в Истина, то при программном или интерактивном проведении типовой механизм может полностью игнорировать код в модуле проведения, полагая, что движения уже «зафиксированы» пользователем вручную. Проверьте, нет ли в вашем документе реквизита с таким именем и не заполнен ли он случайно.

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

← На главную