Как после заполнения табличной части внешней обработкой пересчитать итоги документа?

1. Ceboo 10 22.05.17 07:24 Сейчас в теме
Доброго времени суток сообщество! Прошу помощи в следующем:
Дано: платформа 8.3.9, конфа "Розница 2.2.5.27", внешняя обработка заполнения документа "ЧекККМ", таблица значений "ТЗдляЧека"
&НаКлиенте
Процедура СоздатьДокументЧек(Команда)
    //Защита от пустой ТЗ
    Если ТЗдляЧека.Количество() = 0 Тогда
         Сообщить("НЕ прочитан документ Заказ-Наряд!");
         Возврат;
    КонецЕсли;
    //Получаем форму нового документа
    ФормаЧека = ПолучитьФорму("Документ.ЧекККМ.ФормаОбъекта");
    //В переменную передаем данных полученой формы (так как напрямую их менять нельзя)
    ДанныеФормыЧека = ФормаЧека.Объект;
    //Заполняем форму чека данными
    ЗаполнитьЧекНаСервере(ДанныеФормыЧека);
    //копируем заполненные данные в исходную форму
    КопироватьДанныеФормы(ДанныеФормыЧека, ФормаЧека.Объект);
    
    //показываем форму нового заполненного документа пользователю
    ФормаЧека.Открыть();    
КонецПроцедуры

&НаСервере
Функция ЗаполнитьЧекНаСервере(ДанныеФормыЧека);
    // преобразуем данные формы ЧекККМ в документ ЧекККМ
    ДокументЧек = ДанныеФормыВЗначение(ДанныеФормыЧека, Тип("ДокументОбъект.ЧекККМ"));
    
    //Заполним титульную часть документ данными
    ДокументЧек.КассаККМ     = Справочники.КассыККМ.НайтиПоКоду("00-000001");
    ДокументЧек.Магазин         = Справочники.Магазины.НайтиПоКоду("00-000001");
    ДокументЧек.Организация    = Справочники.Организации.НайтиПоКоду("00-000001");
    
    //подготовка данных для общих процедур 
    СтруктураДействий = Новый Структура;
    СтруктураДействий.Вставить("ПересчитатьСумму");

    //Заполним табличную часть документа
    Для Каждого СтрокаТЗ Из ТЗдляЧека Цикл
        СтрокаЧека = ДокументЧек.Товары.Добавить();
        СтрокаЧека.Номенклатура = СпроситьНоменклатуру(СтрокаТЗ.guid);
        СтрокаЧека.КоличествоУпаковок    = СтрокаТЗ.Количество;
        СтрокаЧека.Цена            = СтрокаТЗ.Цена;
        СтрокаЧека.СтавкаНДС    = Перечисления.СтавкиНДС.БезНДС;
        СтрокаЧека.Склад        = Справочники.Склады.НайтиПоКоду("00-000001");
        
        //Вызов общей процедуры
        ОбработкаТабличнойЧастиТоварыСервер.ОбработатьСтрокуТЧСервер(СтрокаЧека, СтруктураДействий, Неопределено);
    КонецЦикла;
        
    // преобразуем документа обратно в данные формы
    ЗначениеВДанныеФормы(ДокументЧек, ДанныеФормыЧека);
КонецФункции

Показать

Документ создаётся, заполняется, но, не вычисляются итоги, на форме они нулевые.
Если после открытия произвести какие либо действия с таблицей товары, как например перемещение строк стрелочками или попытку редактирования любой ячейки то всё рассчитываться - запускается процедурка формы "ОбновитьИтоговыеПоказатели" или "ОбновитьИтоговыеПоказателиСервер".
Вопрос первый как из внешней обработки после открытия формы запустить одну их этих процедур?
Вопрос второй, как из внешней обработки получить доступ к реквизиту формы, допустим к "СкидкиНаценкиИтогСумма"
чтобы заработал код (взял из процедуры "ОбновитьИтоговыеПоказатели")
    СуммаРучнойСкидки = Объект.Товары.Итог("СуммаРучнойСкидки");
    СуммаАвтоматическойСкидки = Объект.Товары.Итог("СуммаАвтоматическойСкидки");
    СуммаСкидкиОплатыБонусом = Объект.Товары.Итог("СуммаСкидкиОплатыБонусом");
    СкидкиНаценкиИтогСумма = СуммаАвтоматическойСкидки + СуммаРучнойСкидки + СуммаСкидкиОплатыБонусом;

По теме из базы знаний
Найденные решения
7. Ceboo 10 22.05.17 10:03 Сейчас в теме
Спасибо Вам Елена и Николай!!!!

Решение методом Елена:
Добавил в процедуру "СоздатьДокументЧек" после ФормаЧека.Открыть();
строчку ФормаЧека.ОповещениеВыдатьПодаркиНаВыбор(Неопределено, Неопределено);
И уже через контекст формы выполнилась процедурка "ОбновитьИтоговыеПоказатели"
всё великолепно считается и документ готов к употреблению, НО будут выходить сообщения "Скидки (наценки), Скидки (наценки) рассчитаны" что может смутить рядового кассира...

Решение методом Елена&Николай:
Добавил расширение конфигурации.
загнал туда форму документа "ЧекККМ"
в расширении, в модуле формы документа "ЧекККМ" написал
&НаКлиенте
Процедура ОбновитьИтоговыеПоказателиЭкспорт () Экспорт
    ОбновитьИтоговыеПоказатели();    
КонецПроцедуры


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

Вывод, справедливо для УФ:
1) Из внешней обработки фиг доберёшься до реквизитов формы, доступ есть только до реквизитов документа!
2) Из внешней обработки любые другие действия с формой возможны только если "дергать" экспортные методы этой формы, или создавать свои экспортные процедурки через расширение и "дергать" уже их.
4. PhoenixAOD 62 22.05.17 07:44 Сейчас в теме
(1)Может воспользоваться расширениями конфигурации. http://v8.1c.ru/o7/201603module/index.htm
5. lenochka-semicova 22.05.17 09:13 Сейчас в теме
(0) Если суть не важна, то можно дернуть любой экспортный метод формы
Например:
ФормаЧека.ОповещениеВыдатьПодаркиНаВыбор(Неопределено, Неопределено);
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. PhoenixAOD 62 22.05.17 07:44 Сейчас в теме
(1)Может воспользоваться расширениями конфигурации. http://v8.1c.ru/o7/201603module/index.htm
2. tritus 22.05.17 07:33 Сейчас в теме
1) прописать в процедурах Экспорт и пользоваться ими
2) Никак вроде.
3. Ceboo 10 22.05.17 07:39 Сейчас в теме
Уточнение - Конфигурация не редактируется.
5. lenochka-semicova 22.05.17 09:13 Сейчас в теме
(0) Если суть не важна, то можно дернуть любой экспортный метод формы
Например:
ФормаЧека.ОповещениеВыдатьПодаркиНаВыбор(Неопределено, Неопределено);
6. lenochka-semicova 22.05.17 09:16 Сейчас в теме
(5) Соответственно - исполнение снова уйдет в форму и все там как надо сделает
т.е. выполнит уже в контексте формы код процедуры оповещения после выдачи подарков, а там как раз идет обновление всех итогов и прочие пересчеты

ОбработкаТабличнойЧастиТоварыКлиентСервер.ОбновитьСтатусыСерийИПодарочныхСертификатов(Объект.Подарки);
ОбновитьИтоговыеПоказатели();

ПоказатьОповещениеПользователя(
7. Ceboo 10 22.05.17 10:03 Сейчас в теме
Спасибо Вам Елена и Николай!!!!

Решение методом Елена:
Добавил в процедуру "СоздатьДокументЧек" после ФормаЧека.Открыть();
строчку ФормаЧека.ОповещениеВыдатьПодаркиНаВыбор(Неопределено, Неопределено);
И уже через контекст формы выполнилась процедурка "ОбновитьИтоговыеПоказатели"
всё великолепно считается и документ готов к употреблению, НО будут выходить сообщения "Скидки (наценки), Скидки (наценки) рассчитаны" что может смутить рядового кассира...

Решение методом Елена&Николай:
Добавил расширение конфигурации.
загнал туда форму документа "ЧекККМ"
в расширении, в модуле формы документа "ЧекККМ" написал
&НаКлиенте
Процедура ОбновитьИтоговыеПоказателиЭкспорт () Экспорт
    ОбновитьИтоговыеПоказатели();    
КонецПроцедуры


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

Вывод, справедливо для УФ:
1) Из внешней обработки фиг доберёшься до реквизитов формы, доступ есть только до реквизитов документа!
2) Из внешней обработки любые другие действия с формой возможны только если "дергать" экспортные методы этой формы, или создавать свои экспортные процедурки через расширение и "дергать" уже их.
8. user1439284 20.01.24 00:18 Сейчас в теме
вопрос старый, но решил поделится, может кому то поможет - делал сейчас обработку в УТ 11.5.14.74.
Для расчета итоговой суммы чека ККМ я добавил строку:
СтрокаЧека.Сумма = СтрокаТЗ.Количество * СтрокаТЗ.Цена;
И при открытие формы чека ККМ ФормаЧека.Открыть(); - сумма итоговая будет уже рассчитана...

и еще в УТ надо добавить строку:
СтрокаЧека.Продавец = Справочники.Пользователи.НайтиПоНаименованию(ИмяПользователя);

и НДС берем из справочника:
СтрокаЧека.СтавкаНДС = Справочники.СтавкиНДС.БезНДС;
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот