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