Почему сверка взаиморасчетов в 1С:УТ 11.4 не видит ввод начальных остатков после обновления и как это исправить?

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

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

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

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

Для того чтобы понять, откуда возникла эта ошибка, нам нужно заглянуть под капот конфигурации «1С:Управление торговлей». Начиная с версии 11.4, разработчики фирмы 1С активно внедряли и оптимизировали так называемый механизм онлайн-взаиморасчетов. Его суть заключается в мгновенном распределении платежей по накладным и формировании аналитики непосредственно в момент проведения документов, без необходимости запуска сложных регламентных процедур в конце месяца.

В рамках этого архитектурного изменения регистры расчетов стали жестко требовать заполнения реквизита СуммаУпр (сумма в валюте управленческого учета). В старых версиях УТ 11 (например, в некоторых сборках 11.3 и ранних 11.4.1) этот реквизит в документах ввода остатков мог оставаться незаполненным или заполнялся по облегченной схеме.

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

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

Давайте разберем по шагам, как решить эту проблему различными методами.

Решение 1. Проверка и принудительный запуск отложенного обновления

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

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

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

Решение 2. Программное заполнение реквизитов через групповую обработку

Если отложенные обработчики обновления не помогли или они вовсе отсутствуют в списке, нам придется заполнить скрытый реквизит самостоятельно. Для этого отлично подойдет встроенный инструмент 1С — «Групповое изменение реквизитов».

Рассмотрим этот процесс по шагам:

  1. Откроем обработку через раздел НСИ и администрирование -> Обслуживание -> Корректировка данных -> Групмовое изменение реквизитов.
  2. В поле «Изменять» выберем объект: Ввод начальных остатков.
  3. Нам обязательно нужно настроить отбор, чтобы случайно не перезаписать лишние документы. Нажмем ссылку «Все элементы» и добавим условие: Проведен Равно Да, а также при необходимости отфильтруем по типу операции (например, только расчеты с клиентами или поставщиками).
  4. Нажмем кнопку Дополнительные параметры внизу формы и установим флаг «Показывать служебные реквизиты». Без этого флага мы просто не увидим скрытые технические поля табличных частей.
  5. В списке реквизитов найдем табличную часть, отвечающую за расчеты (например, РасчетыСКлиентами или ДанныеПродаж).
  6. Найдем в этой табличной части колонку СуммаУпр (Сумма упр. учета) и установим для нее вариант заполнения. Если у нас валюта регламентированного учета совпадает с валютой управленческого учета (например, рубли), мы можем просто скопировать значение из реквизита Сумма.
  7. Если ручное копирование формулой недоступно в стандартном интерфейсе групповой обработки, мы можем временно установить значение, равное основной сумме, либо запустить выполнение простого алгоритма.
  8. После настройки нажмем кнопку Изменить реквизиты. Обработка запишет изменения напрямую в базу данных.

Решение 3. Программный скрипт для заполнения СуммаУпр (для программистов)

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

Давайте рассмотрим пример программного кода, который выбирает проведенные документы ввода остатков по взаиморасчетам, рассчитывает недостающую сумму упр. учета по курсу и записывает документы:


Выборка = Документы.ВводНачальныхОстатков.Выбрать(,, Новый Структура("Проведен", Истина));

Пока Выборка.Следующий() Цикл
    
    ОбъектДок = Выборка.ПолучитьОбъект();
    Модифицирован = Ложь;
    
    // Проверим табличную часть РасчетыСКлиентами
    Если ОбъектДок.Метаданные().ТабличныеЧасти.Найти("РасчетыСКлиентами") <> Неопределено Тогда
        Для Каждого СтрокаТЧ Из ОбъектДок.РасчетыСКлиентами Цикл
            Если Не ЗначениеЗаполнено(СтрокаТЧ.СуммаУпр) И ЗначениеЗаполнено(СтрокаТЧ.Сумма) Тогда
                // Заполняем СуммаУпр значением рублевого эквивалента или рассчитываем по курсу
                СтрокаТЧ.СуммаУпр = СтрокаТЧ.Сумма; 
                Модифицирован = Истина;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    
    // Аналогично обработаем табличную часть РасчетыСПоставщиками
    Если ОбъектДок.Метаданные().ТабличныеЧасти.Найти("РасчетыСПоставщиками") <> Неопределено Тогда
        Для Каждого СтрокаТЧ Из ОбъектДок.РасчетыСПоставщиками Цикл
            Если Не ЗначениеЗаполнено(СтрокаТЧ.СуммаУпр) И ЗначениеЗаполнено(СтрокаТЧ.Сумма) Тогда
                СтрокаТЧ.СуммаУпр = СтрокаТЧ.Сумма;
                Модифицирован = Истина;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    
    // Записываем объект без вызова лишних проверок проведения, чтобы обойти ошибку формы
    Если Модифицирован Тогда
        ОбъектДок.ОбменДанными.Загрузка = Истина;
        ОбъектДок.Записать(РежимЗаписиДокумента.Запись);
        
        // После успешной записи проводим документ для формирования новых движений в регистрах взаиморасчетов
        Попытка
            ОбъектДок.Записать(РежимЗаписиДокумента.Проведение);
            Сообщить("Успешно обработан и проведен документ: " + ОбъектДок);
        Исключение
            Сообщить("Не удалось провести документ: " + ОбъектДок + " Ошибка: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
    
КонецЦикла;

Обратите внимание на использование свойства ОбменДанными.Загрузка = Истина перед обычной записью. Это важнейший момент! Этот флаг позволяет временно отключить жесткие проверки платформы при перезаписи объекта, что позволяет нам гарантированно поместить значение в реквизит СуммаУпр. После того как транзакция записи завершена, мы спокойно проводим документ в штатном режиме, и ошибка о незаполненном поле больше не появляется.

Решение 4. Вывод скрытой колонки через «Изменение формы» (для единичных исправлений)

Если проблемных документов ввода остатков в вашей базе совсем немного (буквально несколько штук) и вы хотите исправить их вручную без использования программирования и внешних обработок, применим стандартную возможность интерфейса «Такси».

Разберем этот несложный алгоритм:

  1. Откроем мешающий проведению документ Ввод начальных остатков.
  2. В правом верхнем углу окна программы нажмем кнопку Ещё и выберем пункт Изменить форму....
  3. В появившемся дереве элементов формы найдем нашу табличную часть (например, «Расчеты с клиентами»).
  4. Раскроем ветку этой таблицы и найдем элемент с именем Сумма (упр.) (в метаданных это поле СуммаУпр).
  5. Установим напротив него флажок видимости и нажмем кнопку ОК.
  6. Теперь колонка физически отображается на экране! Мы увидим, что ячейки в этой колонке пусты. Перенесем в них значения из основной колонки «Сумма» вручную или воспользуемся стандартным перевыбором валюты в строке (при изменении валюты туда-обратно алгоритмы формы сами пересчитают скрытые поля).
  7. Нажмем кнопку Провести и закрыть. Документ успешно проведется!

Важный шаг: Контроль ключей аналитики взаиморасчетов

После того как все документы ввода остатков перезаписаны и успешно проведены, настоятельно рекомендуем выполнить дополнительную проверку. Из-за незавершенных обновлений в базе УТ 11 часто происходит «разобщение» ключей аналитики расчетов с партнерами, из-за чего в ведомостях могут одновременно висеть одинаковые суммы долга по дебету и кредиту одного контрагента.

Чтобы окончательно привести систему в порядок, выполним следующие действия:

Применяя предложенные нами методики, вы сможете быстро локализовать проблему с незаполненными управленческими суммами, восстановить корректное формирование «Сверки взаиморасчетов» и вернуть ведение учета в стабильное русло!

← На главную