Здравствуйте Уважаемые,
Не могу сам дойти до мысли, прошу помочь:
Внешним обработчик меняю значение Количество в проведенных документах ЗаказПокупателя. Обработчик значения меняет, но не изменяет сумму и итог Всего в документе. Как можно обновить данные таблицы проведенного документа через внешний обработчик.
---
```1c
    ПрименяютсяСтавки4и2 = Ложь;
    СуммаВключаетНДС = Документ.СуммаВключаетНДС;
    ТЧ = Документ.Метаданные().ТабличныеЧасти.Найти("Товары");
    ЕстьРеквизитВсего = НЕ (ТЧ.Реквизиты.Найти("Всего") = Неопределено);
    ЕстьИзменения = Ложь;

    ТабЧасть = Документ.Товары;

    Для Каждого СтрокаТаблицы Из ТабЧасть Цикл

    СтавкаНДС = ПолучитьСтавкуНДС(СтрокаТаблицы.СтавкаНДС, ПрименяютсяСтавки4и2);
    СуммаНДС = РассчитатьСуммуНДС(СтрокаТаблицы.Сумма, СуммаВключаетНДС, СтавкаНДС);

    Если СтрокаТаблицы.СуммаНДС = СуммаНДС Тогда
    Продолжить;
    КонецЕсли;

    ЕстьИзменения = Истина;
    СтрокаТаблицы.СуммаНДС = СуммаНДС;

    Если ЕстьРеквизитВсего Тогда
    СтрокаТаблицы.Всего = СтрокаТаблицы.Сумма + ?(Объект.СуммаВключаетНДС, 0, СтрокаТаблицы.СуммаНДС);
    КонецЕсли;
    КонецЦикла;

    Если ЕстьИзменения Тогда
    Документ.Записать(РежимЗаписиДокумента.Проведение);
    КонецЕсли;

    Функция РассчитатьСуммуНДС(Сумма, СуммаВключаетНДС, СтавкаНДС)

    Если СуммаВключаетНДС Тогда
    СуммаБезНДС = 100 * Сумма / (100 + СтавкаНДС);
    СуммаНДС = Сумма - СуммаБезНДС;
    Иначе
    СуммаБезНДС = Сумма;
    КонецЕсли;

    Если НЕ СуммаВключаетНДС Тогда
    СуммаНДС = СуммаБезНДС * СтавкаНДС / 100;
    КонецЕсли;

    Возврат СуммаНДС;

    КонецФункции // РассчитатьСуммуНДС()

    Функция ПолучитьСтавкуНДС(СтавкаНДС, ПрименяютсяСтавки4и2 = Ложь)

    Если СтавкаНДС = Перечисления.СтавкиНДС.НДС20 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
    Возврат 20;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
    Ставка = ?(ПрименяютсяСтавки4и2, 2, 10);
    Возврат Ставка;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
    Ставка = ?(ПрименяютсяСтавки4и2, 4, 18);
    Возврат Ставка;
    КонецЕсли;

    Возврат 0;

    КонецФункции
```
---
1. Надо выполнить "Записать()";
2. Запустить процедуру обработки табличной части документа. Как правило она есть в общих модулях, а вызов в конкретном документе можно подсмотреть в форме на события: изменить количество или цену.
---
а есть решение без общего модуля?
---
Конечно, скопируйте эти процедуры во внешний обработчик. Или сделайте свою - цикл по строка табличной части. Там ничего сложного. Только аккуратно с НДС.
---
```1c
    ПрименяютсяСтавки4и2 = Ложь;
    СуммаВключаетНДС = Документ.СуммаВключаетНДС;
    ТЧ = Документ.Метаданные().ТабличныеЧасти.Найти("Товары");
    ЕстьРеквизитВсего = НЕ (ТЧ.Реквизиты.Найти("Всего") = Неопределено);
    ЕстьИзменения = Ложь;

    ТабЧасть = Документ.Товары;

    Для Каждого СтрокаТаблицы Из ТабЧасть Цикл

    СтавкаНДС = ПолучитьСтавкуНДС(СтрокаТаблицы.СтавкаНДС, ПрименяютсяСтавки4и2);
    СуммаНДС = РассчитатьСуммуНДС(СтрокаТаблицы.Сумма, СуммаВключаетНДС, СтавкаНДС);

    Если СтрокаТаблицы.СуммаНДС = СуммаНДС Тогда
    Продолжить;
    КонецЕсли;

    ЕстьИзменения = Истина;
    СтрокаТаблицы.СуммаНДС = СуммаНДС;

    Если ЕстьРеквизитВсего Тогда
    СтрокаТаблицы.Всего = СтрокаТаблицы.Сумма + ?(Объект.СуммаВключаетНДС, 0, СтрокаТаблицы.СуммаНДС);
    КонецЕсли;
    КонецЦикла;

    Если ЕстьИзменения Тогда
    Документ.Записать(РежимЗаписиДокумента.Проведение);
    КонецЕсли;

    Функция РассчитатьСуммуНДС(Сумма, СуммаВключаетНДС, СтавкаНДС)

    Если СуммаВключаетНДС Тогда
    СуммаБезНДС = 100 * Сумма / (100 + СтавкаНДС);
    СуммаНДС = Сумма - СуммаБезНДС;
    Иначе
    СуммаБезНДС = Сумма;
    КонецЕсли;

    Если НЕ СуммаВключаетНДС Тогда
    СуммаНДС = СуммаБезНДС * СтавкаНДС / 100;
    КонецЕсли;

    Возврат СуммаНДС;

    КонецФункции // РассчитатьСуммуНДС()

    Функция ПолучитьСтавкуНДС(СтавкаНДС, ПрименяютсяСтавки4и2 = Ложь)

    Если СтавкаНДС = Перечисления.СтавкиНДС.НДС20 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
    Возврат 20;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
    Ставка = ?(ПрименяютсяСтавки4и2, 2, 10);
    Возврат Ставка;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
    Ставка = ?(ПрименяютсяСтавки4и2, 4, 18);
    Возврат Ставка;
    КонецЕсли;

    Возврат 0;

    КонецФункции
```
---
можно с меньшим кодом:
получить форму документа (не открывая ее), пройтись по строкам тч, меняя кол-во и вызывая процедуру формы колонки таблицы "Количество" ПриИзвенении (серверную часть) - перезаполнение произойдет как в интерактивном режиме и не надо разбираться как и что там пересчитывается.
пример для БП 3.0 изменение кол-ва в счете на оплату покупателя

```1c
    &НаКлиенте
    Процедура Команда1(Команда)
    П = Новый Структура;
    П.Вставить("Ключ", Ссылка);

    ф = ПолучитьФорму("Документ.СчетНаОплатуПокупателю.ФормаОбъекта", П);
    НалоговыйАгентПоФЗ335 = истина;
    ПокупательНалоговыйАгентПоНДС = ложь;
    ЗначениеПустогоКоличества = 1;
    Для каждого стр из ф.Объект.Товары цикл
    стр.Количество = 99;
    ОбщегоНазначенияБПКлиент.ПересчитатьСумму(стр, ф.Объект.СуммаВключаетНДС, ЗначениеПустогоКоличества,,НалоговыйАгентПоФЗ335);
    КонецЦикла;
    ф.Записать();
    КонецПроцедуры
```