УФ : Обработка ТЧ открытого документа по данным запроса Мне нужно обработать ТЧ "Товары" открытого документа и откорректировать его строки в соответствии с результатом запроса выполняемого по команде из формы. 1. Правильно сравнивать результат запроса с объектом на сервере или с данными в открытой форме ? 2. (если с данными в форме ) Как правильно вытащить результат запроса на клиент и что с ним делать на клиенте чтобы обработать / скорректировать строки открытой формы ? Если можно подскажите где это посмотреть приемы работы в типовых конфах |
Правильно сравнивать результат запроса с объектом на сервере |
(1) Тогда перед сравнением нужно проверять модифицированность формы как то так ? &НаКлиенте Процедура СкорректироватьКоличествоПоОрдеру(Команда) Если НЕ ЭтотОбъект.Модифицированность Тогда СкорректироватьКоличествоПоОрдеруНаСервере(Объект.Ссылка); Иначе Предупреждение("Необходимо записать документ"); КонецЕсли; КонецПроцедуры |
Как то не очень понятно. Вы хотите скорректировать объект с данными запроса, а потом спрашиваете как строить запрос. Что за задача на смысловом уровне, что с чем Вы хотите синхронизировать ? Что делает этот документ и что за кнопочка? А то мы сейчас насоветуем Вам |
Может речь про Обработку заполнения табличных частей ? Так там уже объект из формы прилетает(которого может в базе еще и не быть), что хотим то и делаем уже с ним в модуле объекта обработки. |
[quote=bvb;46377233]1. Правильно сравнивать результат запроса с объектом на сервере или с данными в открытой форме ? 2. (если с данными в форме ) Как правильно вытащить результат запроса на клиент и что с ним делать на клиенте чтобы обработать / скорректировать строки открытой формы ?[/quote] "Данные на форме", "строки открытой формы" - это и есть объект на сервере, из этого следует, что и "сравниваем", и корректируем на сервере. |
(3) (4) Да по сути это обработка табличной части только встроенная в форму. Кстати нигде не нашел вменяемый пример внешний обработки ТЧ (с формой и без) Счас я имею чтото в роде : &НаКлиенте Процедура СкорректироватьКоличествоПоОрдеру(Команда) //Не уверен что это правильно Если НЕ ЭтотОбъект.Модифицированность Тогда СкорректироватьКоличествоПоОрдеруНаСервере(Объект.Ссылка); Иначе Предупреждение("Необходимо записать документ"); КонецЕсли; КонецПроцедуры &НаСервере Процедура СкорректироватьКоличествоПоОрдеруНаСервере (Ссылка) Перем СтруктураПоиска; Запрос = Новый Запрос; Запрос.Текст = ""; Запрос.УстановитьПараметр("ССылка",Ссылка); Для Каждого Стр ИЗ ССылка.Товары Цикл //Выполняем проверку на сервере , а что дальше ? //КАк передать контекст на клиента и модифицировать данные в форме ? КонецЦикла; КонецПроцедуры |
6-bvb > вникни в (5), хотя, наверное, стоит начать с ЖКК |
(7) Если это УФ то то что отображается в форме это контекст объекта переданный с сервера. Или я что то не так понимаю ? Если мы модифицируем количество в строке формы, но не сохраняем ее а затем вызываем обработку количество в строке ТЧ на сервере не будет равно количеству в строке формы. |
6-bvb > На диске ИТС есть 100% и примеры, и документация |
8-bvb > _Или я что то не так понимаю ?_ - что-то не так понимаешь. Форма на сервере и на клиенте находятся в синхронизированном состоянии: вся форма в её текущем состоянии вместе со всеми изменениями (в том числе с изменениями данных того, что находится в реквизитах со специальным типом ДанныеФормыСтруктура) передается на сервер при каждом вызове с клиента контекстного серверного метода/функции. |
В дополнение. Отсюда сразу же следует вывод: пинг-понг контекстами между клиентом и сервером - зло. И стандарт [url]https://its.1c.ru/db/v8std#content:2149184136:hdoc[/url] |
(10) Я про это и спрашиваю : Допустим я поменял в форме данные. Ты говоришь : "вся форма в её текущем состоянии вместе со всеми изменениями (в том числе с изменениями данных того, что находится в реквизитах со специальным типом ДанныеФормыСтруктура) передается на сервер при каждом вызове с клиента контекстного серверного метода/функции." т.е. если я вызываю с клиента свою обработку как контекстный серверный вызов на сервере данные формы синхронизируются автоматически ? |
Передавать на клиента нужно объект который есть по сути и есть контекст формы Остановился на следующем : &НаКлиенте Процедура СкорректироватьКоличествоПоОрдеру(Команда) ОбъектДляЗаполнения = Объект; СкорректироватьКоличествоПоОрдеруНаСервере(ОбъектДляЗаполнения); КопироватьДанныеФормы(ОбъектДляЗаполнения, Объект); КонецПроцедуры НаСервере Процедура СкорректироватьКоличествоПоОрдеруНаСервере (ОбъектДляЗаполнения) Всякий шашхер-махер с ОбъектДляЗаполнения.Товары .... КонецПроцедуры |
(13) не нужно на сервер ничего передавать! Как только ты вызовешь с клиента серверный метод, платформа самостоятельно запакует всю форму в её текущем состоянии и передаст на сервер. Без твоего участия. И сама позаботиться о том чтоб по окончании вызова весь измененный на сервере контекст передать обратно на клиента. И обезопасит клиентскую часть от изменений формы покуда она не "вернулась" после путешествия на сервер |
(14) А как серверной процедуре понять ЧТО обрабатывать ? Пример который я сделал подглядел здесь : [url]http://qa.erpstat.ru/public/00048.html[/url] см. Код заполнения табличной части в модуле формы |
Обработка ТЧ, в отличие от формы, - это совершенно другой *программный объект*. В этом случае заботиться о передаче контекста *между разными объектами* тебе как разработчику нужно самостоятельно. Развернутая же на сервере копия формы в момент серверного вызова прекрасно знает что у неё есть реквизит "объект" и прекрасно может с ним манипулировать без дополнительных ухищрений. Аналогично самостоятельно придётся заботиться о передаче необходимой части контекста при ВНЕконтекстных вызовах |
Текущее время: 15:16. Часовой пояс GMT +3. |