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