В практике разработки на платформе 1С:Предприятие 8.3, особенно в конфигурациях вроде Управление нашей фирмой (УНФ), программисты часто сталкиваются с загадочной ситуацией: документ успешно проводится, флаг Проведен установлен в «Истина», но при просмотре движений по регистрам пусто. При этом повторное ручное перепроведение («просто нажать кнопку еще раз») внезапно решает проблему, и движения появляются. Рассмотрим подробно, почему это происходит и как настроить систему так, чтобы движения формировались стабильно с первого раза.
Самая простая и распространенная причина кроется в коде модуля проведения. В платформе 1С для того, чтобы записи попали в базу данных, недостаточно просто заполнить набор записей. Системе нужно явно указать, что этот набор необходимо записать в транзакции проведения. Проанализируем стандартный подход, который часто забывают новички при дописке типовых документов.
Если вы добавляете движения вручную в процедуре ОбработкаПроведения, обязательно проверьте наличие следующей строки для каждого регистра:
Движения.ПредоставленныеУслуги.Записывать = Истина;
// Заполнение набора записей
НоваяСтрока = Движения.ПредоставленныеУслуги.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
Без установки свойства Записывать в значение Истина, платформа просто проигнорирует подготовленные вами данные в памяти и не перенесет их в таблицу базы данных. Выясним, почему это иногда работает «через раз»: если в документе уже есть другие регистры, где этот флаг установлен, или используются типовые механизмы, логика записи может срабатывать по-разному в зависимости от контекста вызова.
Современная УНФ построена на использовании Библиотеки стандартных подсистем (БСП). Проведение здесь чаще всего реализовано не «в лоб», а через специализированные модули. Посмотрим на пример кода, который часто используется в типовых решениях:
ПроведениеДокументовУНФ.ОтразитьДвижения("ПредоставленныеУслуги", ТаблицыДляДвижений, Движения, Отказ);
Эта функция — «черный ящик» для многих разработчиков. Чтобы она отработала корректно, должны быть соблюдены строгие условия, о которых мы поговорим далее. Если хотя бы одно условие нарушено, БСП «молча» пропустит формирование движений, не выдавая никаких ошибок пользователю. Для изучения логики типовых процедур и быстрого поиска готового кода можно использовать справочник по методам БСП с примерами использования.
Прежде чем искать ошибку в коде, проверим настройки самих объектов в конфигураторе. Проанализируем два ключевых момента:
ПредоставленныеУслуги). Перейдите на вкладку «Регистраторы» и убедитесь, что флаг напротив вашего документа (например, ЗаказПокупателя) установлен. Если документ не является регистратором, программная попытка записи в этот регистр из его модуля проведения будет заблокирована платформой.В 1С:УНФ реализована настройка «Фоновое проведение документов». Это одна из самых частых причин появления «пустых» проведенных документов. Рассмотрим механизм подробнее:
Когда опция включена, при нажатии кнопки «Провести» система лишь помечает документ как проведенный и ставит задачу в очередь фоновых заданий. Пользователь видит галочку проведения сразу, но фоновое задание может:
При ручном перепроведении система часто выполняет код синхронно (в текущем сеансе), поэтому движения появляются. Чтобы исключить этот фактор при отладке, временно отключите фоновое проведение в настройках программы или используйте отладку фоновых заданий на сервере. Для упрощения этого процесса можно использовать инструмент для отладки длительных операций БСП в текущем сеансе.
В архитектуре БСП процедура ОбработкаПроведения в модуле объекта — это лишь верхушка айсберга. Основная работа по подготовке данных должна выполняться в модуле менеджера документа. Посмотрим, как это устроено:
Обычно вызывается функция подготовки таблиц, например ИнициализироватьДанныеДокумента. Если вы добавляете свой регистр, вам необходимо убедиться, что в структуре ТаблицыДляДвижений есть таблица с именем вашего регистра. Разберем требования к этой таблице:
Период, Регистратор, ВидДвижения (для регистров остатков).Если в ТаблицыДляДвижений колонка Количество будет иметь тип Строка, а в регистре это Число, механизм ОтразитьДвижения может просто пропустить эти строки без предупреждения.
Еще один важный момент, который стоит рассмотреть — это флаг РучнаяКорректировка. В некоторых документах УНФ предусмотрена возможность ручной правки движений. Если этот признак установлен в Истина, то при программном или интерактивном проведении типовой механизм может полностью игнорировать код в модуле проведения, полагая, что движения уже «зафиксированы» пользователем вручную. Проверьте, нет ли в вашем документе реквизита с таким именем и не заполнен ли он случайно.
Подводя итог, для стабильного появления движений необходимо обеспечить связку: корректные метаданные (регистратор) + явная команда записи в коде + соответствие структуры таблиц требованиям БСП. Проанализируйте каждый из этих пунктов, и проблема «исчезающих» движений будет решена.