Здравствуйте Уважаемые,
Не могу сам дойти до мысли, прошу помочь:
Внешним обработчик меняю значение Количество в проведенных документах ЗаказПокупателя. Обработчик значения меняет, но не изменяет сумму и итог Всего в документе. Как можно обновить данные таблицы проведенного документа через внешний обработчик.
Не могу сам дойти до мысли, прошу помочь:
Внешним обработчик меняю значение Количество в проведенных документах ЗаказПокупателя. Обработчик значения меняет, но не изменяет сумму и итог Всего в документе. Как можно обновить данные таблицы проведенного документа через внешний обработчик.
По теме из базы знаний
- Методика упрощения поддержки конфигураций. Переопределение и вызов обработчиков событий для УФ 1С 8.2-8.3
- Своя индикация длительной операции во внешней обработке
- Универсальная отладка внешней обработки заполнения (типовые механизмы, без внешних файлов, расширений или вызова внешних файлов)
- Обработчик ожидания. Нюансы
- Асинхронные вызовы свойств и методов Внешних компонент. Особенности 2-х способов асинхронной работы
Найденные решения
ПрименяютсяСтавки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. Запустить процедуру обработки табличной части документа. Как правило она есть в общих модулях, а вызов в конкретном документе можно подсмотреть в форме на события: изменить количество или цену.
2. Запустить процедуру обработки табличной части документа. Как правило она есть в общих модулях, а вызов в конкретном документе можно подсмотреть в форме на события: изменить количество или цену.
ПрименяютсяСтавки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 изменение кол-ва в счете на оплату покупателя
получить форму документа (не открывая ее), пройтись по строкам тч, меняя кол-во и вызывая процедуру формы колонки таблицы "Количество" ПриИзвенении (серверную часть) - перезаполнение произойдет как в интерактивном режиме и не надо разбираться как и что там пересчитывается.
пример для БП 3.0 изменение кол-ва в счете на оплату покупателя
&НаКлиенте
Процедура Команда1(Команда)
П = Новый Структура;
П.Вставить("Ключ", Ссылка);
ф = ПолучитьФорму("Документ.СчетНаОплатуПокупателю.ФормаОбъекта", П);
НалоговыйАгентПоФЗ335 = истина;
ПокупательНалоговыйАгентПоНДС = ложь;
ЗначениеПустогоКоличества = 1;
Для каждого стр из ф.Объект.Товары цикл
стр.Количество = 99;
ОбщегоНазначенияБПКлиент.ПересчитатьСумму(стр, ф.Объект.СуммаВключаетНДС, ЗначениеПустогоКоличества,,НалоговыйАгентПоФЗ335);
КонецЦикла;
ф.Записать();
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот