К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

УФ : Обработка ТЧ открытого документа по данным запроса

bvb
0 - 15.01.2019 - 12:13
Мне нужно обработать ТЧ "Товары" открытого документа и откорректировать его строки в соответствии с результатом запроса выполняемого по команде из формы.

1. Правильно сравнивать результат запроса с объектом на сервере или с данными в открытой форме ?
2. (если с данными в форме ) Как правильно вытащить результат запроса на клиент и что с ним делать на клиенте чтобы обработать / скорректировать строки открытой формы ?

Если можно подскажите где это посмотреть приемы работы в типовых конфах



1 - 15.01.2019 - 12:41
Правильно сравнивать результат запроса с объектом на сервере
bvb
2 - 15.01.2019 - 12:56
(1) Тогда перед сравнением нужно проверять модифицированность формы как то так ?

&НаКлиенте
Процедура СкорректироватьКоличествоПоОрдеру(Команда)
Если НЕ ЭтотОбъект.Модифицированность Тогда
СкорректироватьКоличествоПоОрдеруНаСервере(Объект. Ссылка);
Иначе
Предупреждение("Необходимо записать документ");
КонецЕсли;
КонецПроцедуры
3 - 15.01.2019 - 15:12
Как то не очень понятно. Вы хотите скорректировать объект с данными запроса, а потом спрашиваете как строить запрос. Что за задача на смысловом уровне, что с чем Вы хотите синхронизировать ? Что делает этот документ и что за кнопочка? А то мы сейчас насоветуем Вам
4 - 15.01.2019 - 16:16
Может речь про Обработку заполнения табличных частей ?
Так там уже объект из формы прилетает(которого может в базе еще и не быть), что хотим то и делаем уже с ним в модуле объекта обработки.
Uho
5 - 15.01.2019 - 18:10
Цитата:
Сообщение от bvb Посмотреть сообщение
1. Правильно сравнивать результат запроса с объектом на сервере или с данными в открытой форме ? 2. (если с данными в форме ) Как правильно вытащить результат запроса на клиент и что с ним делать на клиенте чтобы обработать / скорректировать строки открытой формы ?
"Данные на форме", "строки открытой формы" - это и есть объект на сервере, из этого следует, что и "сравниваем", и корректируем на сервере.
bvb
6 - 15.01.2019 - 18:28
(3) (4)
Да по сути это обработка табличной части только встроенная в форму.
Кстати нигде не нашел вменяемый пример внешний обработки ТЧ (с формой и без)

Счас я имею чтото в роде :

&НаКлиенте
Процедура СкорректироватьКоличествоПоОрдеру(Команда)


//Не уверен что это правильно
Если НЕ ЭтотОбъект.Модифицированность Тогда
СкорректироватьКоличествоПоОрдеруНаСервере(Объект. Ссылка);
Иначе
Предупреждение("Необходимо записать документ");
КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура СкорректироватьКоличествоПоОрдеруНаСервере (Ссылка)
Перем СтруктураПоиска;


Запрос = Новый Запрос;

Запрос.Текст =
"";
Запрос.УстановитьПараметр("ССылка",Ссылка);



Для Каждого Стр ИЗ ССылка.Товары Цикл
//Выполняем проверку на сервере , а что дальше ?
//КАк передать контекст на клиента и модифицировать данные в форме ?
КонецЦикла;

КонецПроцедуры
Uho
7 - 15.01.2019 - 18:34
6-bvb > вникни в (5), хотя, наверное, стоит начать с ЖКК
bvb
8 - 15.01.2019 - 18:48
(7) Если это УФ то то что отображается в форме это контекст объекта переданный с сервера. Или я что то не так понимаю ?

Если мы модифицируем количество в строке формы, но не сохраняем ее а затем вызываем обработку количество в строке ТЧ на сервере не будет равно количеству в строке формы.
9 - 15.01.2019 - 22:11
6-bvb > На диске ИТС есть 100% и примеры, и документация
10 - 16.01.2019 - 09:27
8-bvb > _Или я что то не так понимаю ?_ - что-то не так понимаешь. Форма на сервере и на клиенте находятся в синхронизированном состоянии: вся форма в её текущем состоянии вместе со всеми изменениями (в том числе с изменениями данных того, что находится в реквизитах со специальным типом ДанныеФормыСтруктура) передается на сервер при каждом вызове с клиента контекстного серверного метода/функции.
11 - 16.01.2019 - 09:33
В дополнение.
Отсюда сразу же следует вывод: пинг-понг контекстами между клиентом и сервером - зло. И стандарт https://its.1c.ru/db/v8std#content:2149184136:hdoc
bvb
12 - 16.01.2019 - 17:30
(10) Я про это и спрашиваю :

Допустим я поменял в форме данные.

Ты говоришь :
"вся форма в её текущем состоянии вместе со всеми изменениями (в том числе с изменениями данных того, что находится в реквизитах со специальным типом ДанныеФормыСтруктура) передается на сервер при каждом вызове с клиента контекстного серверного метода/функции."

т.е. если я вызываю с клиента свою обработку как контекстный серверный вызов на сервере данные формы синхронизируются автоматически ?
bvb
13 - 16.01.2019 - 17:39
Передавать на клиента нужно объект который есть по сути и есть контекст формы

Остановился на следующем :

&НаКлиенте
Процедура СкорректироватьКоличествоПоОрдеру(Команда)

ОбъектДляЗаполнения = Объект;

СкорректироватьКоличествоПоОрдеруНаСервере(ОбъектД ляЗаполнения);

КопироватьДанныеФормы(ОбъектДляЗаполнения, Объект);

КонецПроцедуры

НаСервере
Процедура СкорректироватьКоличествоПоОрдеруНаСервере (ОбъектДляЗаполнения)

Всякий шашхер-махер с ОбъектДляЗаполнения.Товары ....

КонецПроцедуры
14 - 17.01.2019 - 09:15
(13) не нужно на сервер ничего передавать!
Как только ты вызовешь с клиента серверный метод, платформа самостоятельно запакует всю форму в её текущем состоянии и передаст на сервер. Без твоего участия. И сама позаботиться о том чтоб по окончании вызова весь измененный на сервере контекст передать обратно на клиента. И обезопасит клиентскую часть от изменений формы покуда она не "вернулась" после путешествия на сервер
bvb
15 - 17.01.2019 - 11:57
(14) А как серверной процедуре понять ЧТО обрабатывать ?

Пример который я сделал подглядел здесь :
http://qa.erpstat.ru/public/00048.html
см. Код заполнения табличной части в модуле формы
16 - 17.01.2019 - 12:41
Обработка ТЧ, в отличие от формы, - это совершенно другой *программный объект*. В этом случае заботиться о передаче контекста *между разными объектами* тебе как разработчику нужно самостоятельно. Развернутая же на сервере копия формы в момент серверного вызова прекрасно знает что у неё есть реквизит "объект" и прекрасно может с ним манипулировать без дополнительных ухищрений.
Аналогично самостоятельно придётся заботиться о передаче необходимой части контекста при ВНЕконтекстных вызовах


К списку вопросов
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск




Copyright ©, Все права защищены