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

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

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

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

Документ создаётся, заполняется, но, не вычисляются итоги, на форме они нулевые.
Если после открытия произвести какие либо действия с таблицей товары, как например перемещение строк стрелочками или попытку редактирования любой ячейки то всё рассчитываться - запускается процедурка формы "ОбновитьИтоговыеПоказатели" или "ОбновитьИтоговыеПоказателиСервер".
Вопрос первый как из внешней обработки после открытия формы запустить одну их этих процедур?
Вопрос второй, как из внешней обработки получить доступ к реквизиту формы, допустим к "СкидкиНаценкиИтогСумма"
чтобы заработал код (взял из процедуры "ОбновитьИтоговыеПоказатели")
	СуммаРучнойСкидки = Объект.Товары.Итог("СуммаРучнойСкидки");
	СуммаАвтоматическойСкидки = Объект.Товары.Итог("СуммаАвтоматическойСкидки");
	СуммаСкидкиОплатыБонусом = Объект.Товары.Итог("СуммаСкидкиОплатыБонусом");
	СкидкиНаценкиИтогСумма = СуммаАвтоматическойСкидки + СуммаРучнойСкидки + СуммаСкидкиОплатыБонусом;
По теме из базы знаний
Найденные решения
7. Ceboo 9 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 9 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 9 22.05.17 10:03 Сейчас в теме
Спасибо Вам Елена и Николай!!!!

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

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

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

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

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

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

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