Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   УФ : Обработка ТЧ открытого документа по данным запроса (http://forums.kuban.ru/f1040/uf_obrabotka_tch_otkrytogo_dokumenta_po_dannym_zaprosa-8793676.html)

bvb 15.01.2019 12:13

УФ : Обработка ТЧ открытого документа по данным запроса
 
Мне нужно обработать ТЧ "Товары" открытого документа и откорректировать его строки в соответствии с результатом запроса выполняемого по команде из формы.

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

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

roma n 15.01.2019 12:41

Правильно сравнивать результат запроса с объектом на сервере

bvb 15.01.2019 12:56

(1) Тогда перед сравнением нужно проверять модифицированность формы как то так ?

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

USSR 15.01.2019 15:12

Как то не очень понятно. Вы хотите скорректировать объект с данными запроса, а потом спрашиваете как строить запрос. Что за задача на смысловом уровне, что с чем Вы хотите синхронизировать ? Что делает этот документ и что за кнопочка? А то мы сейчас насоветуем Вам

Jimbo 15.01.2019 16:16

Может речь про Обработку заполнения табличных частей ?
Так там уже объект из формы прилетает(которого может в базе еще и не быть), что хотим то и делаем уже с ним в модуле объекта обработки.

Uho 15.01.2019 18:10

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

"Данные на форме", "строки открытой формы" - это и есть объект на сервере, из этого следует, что и "сравниваем", и корректируем на сервере.

bvb 15.01.2019 18:28

(3) (4)
Да по сути это обработка табличной части только встроенная в форму.
Кстати нигде не нашел вменяемый пример внешний обработки ТЧ (с формой и без)

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

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


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

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

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


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

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



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

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

Uho 15.01.2019 18:34

6-bvb > вникни в (5), хотя, наверное, стоит начать с ЖКК

bvb 15.01.2019 18:48

(7) Если это УФ то то что отображается в форме это контекст объекта переданный с сервера. Или я что то не так понимаю ?

Если мы модифицируем количество в строке формы, но не сохраняем ее а затем вызываем обработку количество в строке ТЧ на сервере не будет равно количеству в строке формы.

МимохожийОднако 15.01.2019 22:11

6-bvb > На диске ИТС есть 100% и примеры, и документация

roma n 16.01.2019 09:27

8-bvb > _Или я что то не так понимаю ?_ - что-то не так понимаешь. Форма на сервере и на клиенте находятся в синхронизированном состоянии: вся форма в её текущем состоянии вместе со всеми изменениями (в том числе с изменениями данных того, что находится в реквизитах со специальным типом ДанныеФормыСтруктура) передается на сервер при каждом вызове с клиента контекстного серверного метода/функции.

roma n 16.01.2019 09:33

В дополнение.
Отсюда сразу же следует вывод: пинг-понг контекстами между клиентом и сервером - зло. И стандарт [url]https://its.1c.ru/db/v8std#content:2149184136:hdoc[/url]

bvb 16.01.2019 17:30

(10) Я про это и спрашиваю :

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

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

т.е. если я вызываю с клиента свою обработку как контекстный серверный вызов на сервере данные формы синхронизируются автоматически ?

bvb 16.01.2019 17:39

Передавать на клиента нужно объект который есть по сути и есть контекст формы

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

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

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

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

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

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

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

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

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

roma n 17.01.2019 09:15

(13) не нужно на сервер ничего передавать!
Как только ты вызовешь с клиента серверный метод, платформа самостоятельно запакует всю форму в её текущем состоянии и передаст на сервер. Без твоего участия. И сама позаботиться о том чтоб по окончании вызова весь измененный на сервере контекст передать обратно на клиента. И обезопасит клиентскую часть от изменений формы покуда она не "вернулась" после путешествия на сервер

bvb 17.01.2019 11:57

(14) А как серверной процедуре понять ЧТО обрабатывать ?

Пример который я сделал подглядел здесь :
[url]http://qa.erpstat.ru/public/00048.html[/url]
см. Код заполнения табличной части в модуле формы

roma n 17.01.2019 12:41

Обработка ТЧ, в отличие от формы, - это совершенно другой *программный объект*. В этом случае заботиться о передаче контекста *между разными объектами* тебе как разработчику нужно самостоятельно. Развернутая же на сервере копия формы в момент серверного вызова прекрасно знает что у неё есть реквизит "объект" и прекрасно может с ним манипулировать без дополнительных ухищрений.
Аналогично самостоятельно придётся заботиться о передаче необходимой части контекста при ВНЕконтекстных вызовах


Текущее время: 15:16. Часовой пояс GMT +3.