0
- 15.01.2019 - 12:13
|
Мне нужно обработать ТЧ "Товары" открытого документа и откорректировать его строки в соответствии с результатом запроса выполняемого по команде из формы. 1. Правильно сравнивать результат запроса с объектом на сервере или с данными в открытой форме ? 2. (если с данными в форме ) Как правильно вытащить результат запроса на клиент и что с ним делать на клиенте чтобы обработать / скорректировать строки открытой формы ? Если можно подскажите где это посмотреть приемы работы в типовых конфах | |
1
- 15.01.2019 - 12:41
| Правильно сравнивать результат запроса с объектом на сервере | |
2
- 15.01.2019 - 12:56
|
(1) Тогда перед сравнением нужно проверять модифицированность формы как то так ? &НаКлиенте Процедура СкорректироватьКоличествоПоОрдеру(Команда) Если НЕ ЭтотОбъект.Модифицированность Тогда СкорректироватьКоличествоПоОрдеруНаСервере(Объект. Ссылка); Иначе Предупреждение("Необходимо записать документ"); КонецЕсли; КонецПроцедуры | |
3
- 15.01.2019 - 15:12
| Как то не очень понятно. Вы хотите скорректировать объект с данными запроса, а потом спрашиваете как строить запрос. Что за задача на смысловом уровне, что с чем Вы хотите синхронизировать ? Что делает этот документ и что за кнопочка? А то мы сейчас насоветуем Вам | |
4
- 15.01.2019 - 16:16
|
Может речь про Обработку заполнения табличных частей ? Так там уже объект из формы прилетает(которого может в базе еще и не быть), что хотим то и делаем уже с ним в модуле объекта обработки. | |
5
- 15.01.2019 - 18:10
| "Данные на форме", "строки открытой формы" - это и есть объект на сервере, из этого следует, что и "сравниваем", и корректируем на сервере. | |
6
- 15.01.2019 - 18:28
|
(3) (4) Да по сути это обработка табличной части только встроенная в форму. Кстати нигде не нашел вменяемый пример внешний обработки ТЧ (с формой и без) Счас я имею чтото в роде : &НаКлиенте Процедура СкорректироватьКоличествоПоОрдеру(Команда) //Не уверен что это правильно Если НЕ ЭтотОбъект.Модифицированность Тогда СкорректироватьКоличествоПоОрдеруНаСервере(Объект. Ссылка); Иначе Предупреждение("Необходимо записать документ"); КонецЕсли; КонецПроцедуры &НаСервере Процедура СкорректироватьКоличествоПоОрдеруНаСервере (Ссылка) Перем СтруктураПоиска; Запрос = Новый Запрос; Запрос.Текст = ""; Запрос.УстановитьПараметр("ССылка",Ссылка); Для Каждого Стр ИЗ ССылка.Товары Цикл //Выполняем проверку на сервере , а что дальше ? //КАк передать контекст на клиента и модифицировать данные в форме ? КонецЦикла; КонецПроцедуры | |
7
- 15.01.2019 - 18:34
| 6-bvb > вникни в (5), хотя, наверное, стоит начать с ЖКК | |
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 | |
12
- 16.01.2019 - 17:30
|
(10) Я про это и спрашиваю : Допустим я поменял в форме данные. Ты говоришь : "вся форма в её текущем состоянии вместе со всеми изменениями (в том числе с изменениями данных того, что находится в реквизитах со специальным типом ДанныеФормыСтруктура) передается на сервер при каждом вызове с клиента контекстного серверного метода/функции." т.е. если я вызываю с клиента свою обработку как контекстный серверный вызов на сервере данные формы синхронизируются автоматически ? | |
13
- 16.01.2019 - 17:39
|
Передавать на клиента нужно объект который есть по сути и есть контекст формы Остановился на следующем : &НаКлиенте Процедура СкорректироватьКоличествоПоОрдеру(Команда) ОбъектДляЗаполнения = Объект; СкорректироватьКоличествоПоОрдеруНаСервере(ОбъектД ляЗаполнения); КопироватьДанныеФормы(ОбъектДляЗаполнения, Объект); КонецПроцедуры НаСервере Процедура СкорректироватьКоличествоПоОрдеруНаСервере (ОбъектДляЗаполнения) Всякий шашхер-махер с ОбъектДляЗаполнения.Товары .... КонецПроцедуры | |
14
- 17.01.2019 - 09:15
|
(13) не нужно на сервер ничего передавать! Как только ты вызовешь с клиента серверный метод, платформа самостоятельно запакует всю форму в её текущем состоянии и передаст на сервер. Без твоего участия. И сама позаботиться о том чтоб по окончании вызова весь измененный на сервере контекст передать обратно на клиента. И обезопасит клиентскую часть от изменений формы покуда она не "вернулась" после путешествия на сервер | |
15
- 17.01.2019 - 11:57
|
(14) А как серверной процедуре понять ЧТО обрабатывать ? Пример который я сделал подглядел здесь : http://qa.erpstat.ru/public/00048.html см. Код заполнения табличной части в модуле формы | |
16
- 17.01.2019 - 12:41
|
Обработка ТЧ, в отличие от формы, - это совершенно другой *программный объект*. В этом случае заботиться о передаче контекста *между разными объектами* тебе как разработчику нужно самостоятельно. Развернутая же на сервере копия формы в момент серверного вызова прекрасно знает что у неё есть реквизит "объект" и прекрасно может с ним манипулировать без дополнительных ухищрений. Аналогично самостоятельно придётся заботиться о передаче необходимой части контекста при ВНЕконтекстных вызовах | |
| Интернет-форум Краснодарского края и Краснодара |