Как обновить итоги на форме документа в 1С:Управление торговлей 11 после заполнения из внешней обработки

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

Рассмотрим частую задачу, с которой сталкиваются разработчики при создании внешних обработок заполнения для конфигурации «1С:Управление торговлей 11» (УТ 11.3, 11.4, 11.5). Вы написали обработку заполнения табличной части документа ЗаказКлиента, строки успешно добавляются, однако итоговые надписи на форме (общая сумма, НДС, вес, объем) не пересчитываются или остаются пустыми. В форме документа при этом может не быть доступной экспортной процедуры пересчета.

Разберем причины возникновения этой проблемы и рассмотрим практические способы ее решения.

Выясним причину проблемы

В управляемом интерфейсе 1С данные формы и данные в базе разделены. Итоговые надписи в документах УТ 11 рассчитываются динамически или обновляются при вызове определенных событий. Причинами несоответствия итогов обычно становятся следующие факторы:

  1. Программное изменение без вызова событий: При добавлении строк в табличную часть Объект.Товары напрямую из кода не срабатывают интерактивные события элементов формы (такие как ПриИзменении), к которым привязан пересчет сумм.
  2. Изменение объекта в базе данных: Если обработка перезаписывает документ на сервере в обход открытой управляемой формы, визуальные элементы формы не знают о произошедших изменениях.

Способ 1. Вызов стандартного оповещения формы (Решение из темы)

В типовых управляемых формах документов УТ 11 предусмотрен обработчик события ОбработкаОповещения. В форме документа ЗаказКлиента присутствует следующая логика:


Если ИмяСобытия = "ОбновитьДокументИБПослеЗаполнения" Тогда
    ЭтаФорма.Прочитать();
КонецЕсли;

Чтобы заставить форму документа перечитать данные из базы и обновить все итоговые показатели, из клиентского контекста внешней обработки достаточно вызвать процедуру Оповестить():

Оповестить("ОбновитьДокументИБПослеЗаполнения");

После отправки этого оповещения форма документа перехватит событие, выполнит метод Прочитать() и заново закрузит актуальные данные и итоги из базы данных.

Способ 2. Использование платформенного метода ОповеститьОИзменении()

Если внешняя обработка изменила и записала объект в базе данных на сервере, можно воспользоваться стандартным платформенным механизмом уведомления о модификации данных. На клиенте вызовем процедуру:

ОповеститьОИзменении(СсылкаНаДокумент);

Платформа 1С автоматически уведомит все открытые формы, связанным объектом которых является данный документ, и форма обновит свое содержимое.

Способ 3. Принудительное обновление отображения данных

Если табличная часть заполняется непосредственно в контексте открытой формы (модифицируется реквизит Объект.Товары без немедленной записи в базу данных), повторное чтение из БД с помощью Прочитать() использовать нельзя, так как оно сбросит несохраненные изменения. В таком случае на клиенте вызовем метод обновления визуальной части:

ВладелецФормы.ОбновитьОтображениеДанных();

Этот метод принудительно обновляет связи данных и элементов формы без обращения к серверу и базе данных.

Способ 4. Вызов серверных и клиентских модулей пересчета УТ 11

В конфигурации «Управление торговлей 11» логика пересчета сумм, НДС и скидок вынесена в специализированные общие модули. Если требуется программно пересчитать строки и итоги несохраненного документа, проанализируем вызов процедур из общих модулей, таких как ЗаказКлиентаКлиентСервер или ОбработкаТабличнойЧастиКлиентСервер.

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

Важные ограничения и особенности

  1. Работа с новыми документами: Метод формы Прочитать() корректно работает только с уже записанными документами. Для нового, еще не записанного в базу объекта вызов метода Прочитать() приведет к ошибке или полной очистке введенных пользователем данных.
  2. Заполнение через БСП: Если обработка подключается через подсистему дополнительных отчетов и обработок БСП, рекомендуется возвращать структуру РезультатЗаполнения с параметрами закрытия формы или выполнения клиентского оповещения.
← На главную