|
Управляемые формы - передача результатов запроса | ☑ | ||
---|---|---|---|---|
0
Gobo
11.04.13
✎
04:25
|
Доброе время суток !
Создана процедура директивой сервера. В нем выполняется запроса и результат выгружается в ТЗ, методом Выгрузить(). Теперь как его в таком же виде (ТЗ) возвращать процедуру с директивой клиента ? |
|||
1
Любопытная
11.04.13
✎
04:33
|
ЗначениеВДанныеФормы (ValueToFormData)
Синтаксис: ЗначениеВДанныеФормы(<Значение>, <Объект>) Параметры: <Значение> (обязательный) Тип: Произвольный. Значение прикладного типа, для которого определено преобразование в данные формы. <Объект> (обязательный) Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура. Данные формы, имеющие совместимую структуру. Описание: Преобразует объект прикладного типа в универсальный объект данных. Доступность: Сервер, толстый клиент. |
|||
2
el-gamberro
11.04.13
✎
04:45
|
Никак, таблица значений не доступна на клиенте.
Извращенный вариант: использовать таблицу - данныеформы коллекция. И сделать ее невидимой. А вообще раз такой вопрос возник, то скорее всего проблема в архитектуре или логике программы. |
|||
3
Aleksey
11.04.13
✎
04:50
|
Преобразовать в структуру
завести реквизит на форме тип ТЗ и передавать через него |
|||
4
Aleksey
11.04.13
✎
04:53
|
(2) Т.е. нужно получить список документов с реквизитами, а так как нельзя прервать на сервере выполнения вернуться на клиента и продолжить, то приходится разбивать логику, сначало получаем данные на сервере, затем перебираем данные на клиенте и работаем с ними на сервере.
Логика была бы другое если бы можно было не только с клиента вызывать сервер, но и с сервера вызывать клиента |
|||
5
Gobo
11.04.13
✎
06:45
|
С клиента разве можно выполнить запрос ?
|
|||
6
Aleksey
11.04.13
✎
08:07
|
(5) с клиента можно вызывать серверную процедуру в которой будет запрос
|
|||
7
Птах
11.04.13
✎
08:24
|
Какие гуру-то набижали, вы еще в массив выгрузить посоветуйте :)
(2) прав, изначальный косяк в логике работы формы. |
|||
8
toypaul
гуру
11.04.13
✎
08:25
|
ТаблицаНаФорме.Загрузить(Запрос.ВЫполнить().выбрать());
|
|||
9
Defender aka LINN
11.04.13
✎
08:40
|
(4) Нахрена данные перебирать на клиенте?
|
|||
10
Aleksey
11.04.13
✎
08:41
|
(9) да потому что в результате перебора может понадобиться вопрос задать пользователю, или документ програмно не провелся, я хочу открыть его чтобы пользователь провёл руками и дальше продолжить работать
|
|||
11
Aleksey
11.04.13
✎
08:41
|
да элементарна тот же прогресс бар
|
|||
12
Aleksey
11.04.13
✎
08:42
|
я может не хочу показывать в течении получаса курсор в виде колесика, я хочу сообщить клиенту о ходе работы
|
|||
13
el-gamberro
11.04.13
✎
08:52
|
(12) это в уф делается по другому, через ОбработчикОжидания на клиенте.
|
|||
14
cw014
11.04.13
✎
08:53
|
А через временное хранилище нельзя выкинуть?
|
|||
15
Defender aka LINN
11.04.13
✎
09:35
|
(10) Точно. Давайте на клиент кучу дерьма передадим, нахерачим серверных вызовов, да побольше! И вот тогда можно будет с чистой совестью рассказывать, какое 1С тормозное гуано.
|
|||
16
Gobo
11.04.13
✎
16:16
|
(15), про Хранилище высказались ?
Получается оптимальный вариант (1) ? |
|||
17
Нуф-Нуф
11.04.13
✎
16:21
|
интересно, а зачем ТЗ на клиенте?
|
|||
18
Gobo
12.04.13
✎
06:38
|
Запрос возвращает 4 значения, ссылочного типа.
Их надо вернуть процедуру клиента. |
|||
19
Любопытная
12.04.13
✎
06:42
|
Вернуть для чего?
|
|||
20
Gobo
12.04.13
✎
06:58
|
Для добавления в табличную часть формы.
Можно объявить переменную доступный серверу и клиенту в рамках модуля этой формы ? |
|||
21
Любопытная
12.04.13
✎
07:01
|
Ты хочешь полученную ТЗ загрузить в ТЧ на форме?
|
|||
22
Gobo
12.04.13
✎
07:31
|
Да, но ТЧ форму содержит 15 колонок, из них только 4 определяется с помощью ТЗ полученным запросом, а остальное заполняется в процедуре клиента.
|
|||
23
1Сергей
12.04.13
✎
07:36
|
(22) про динамические списки не слышал, да?
|
|||
24
Любопытная
12.04.13
✎
07:38
|
Как табличная часть может заполняться на клиенте?
|
|||
25
Gobo
12.04.13
✎
07:46
|
На клиентской части идет загрузка из текстового документа.
Там есть идентификаторы поставщика. Надо найти его элементы, документы из прикладных объектов 1С и добавить в табличную часть формы. |
|||
26
Gobo
12.04.13
✎
07:50
|
После (21) этого возникла идея сделать так:
&НаСервере Функция ПоискЗаявки(БИНПост) НайденДок=""; Запрос = Новый Запрос(" |ВЫБРАТЬ РАЗРЕШЕННЫЕ | СпрПостав.Ссылка КАК Поставщик, | Заказ.Ссылка КАК Заказы, | Заявка.Ссылка КАК Заявки, | Товар.Ссылка КАК Товары |ИЗ | Справочник.Поставщики КАК СпрПостав | ЛЕВОЕ СОЕДИНЕНИЕ Документ.Заказы КАК Заказ | ПО Заказ.Поставщик = СпрПостав.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Документ.Заявка КАК Заявка | ПО Заявка.Ссылка = Заказ.СоставЗаказа.Заявка.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Товары КАК Товар | ПО Товар.Ссылка=Заказ.СоставЗаказа.Товар.Ссылка |ГДЕ | СпрПостав.БИН = &БИН"); Запрос.УстановитьПараметр("БИН",БИНПост); ТЗ = Запрос.Выполнить().Выгрузить(); Сообщить("ТЗ.Количество()="+ТЗ.Количество()); Если ТЗ.Количество()>0 Тогда Для Каждого Колонка Из ТЗ.Колонки Цикл Сообщить(Колонка.Имя); КонецЦикла; Для каждого ТЗ_тек из ТЗ Цикл ; Сообщить("111"); Сообщить(ТЗ.Поставщик); КонецЦикла; ЗначениеВДанныеФормы(ТЗ.Поставщик, Элементы.БанкКлиентКлиентПоставщик); ЗначениеВДанныеФормы(ТЗ.Заявки, Элементы.БанкКлиентЗаявкаЗаказ); Возврат 1; Иначе Возврат 0; КонецЕсли КонецФункции |
|||
27
Любопытная
12.04.13
✎
07:50
|
Ну так ты загружаешь из файла все, что можно, потом передаешь это на сервер, на сервере дозаполняешь незаполненные колонки и отдаешь обратно на клиент уже готовую ТЧ. Разве так не правильнее будет?
|
|||
28
Gobo
12.04.13
✎
07:52
|
Но выдает ошибку: Поле объекта не обнаружено (Поставщик)
Для этой строки: Сообщить(ТЗ.Поставщик); |
|||
29
Любопытная
12.04.13
✎
07:55
|
(28) Сообщить(ТЗ_тек.Поставщик)
|
|||
30
Любопытная
12.04.13
✎
07:57
|
Строку сообщай, а не всю колонку.
ЗначениеВДанныеФормы(ТЗ.Поставщик, Элементы.БанкКлиентКлиентПоставщик); - это загрузка колонки в таблицу? ЧТо-то мне кажется, что так не выйдет |
|||
31
Gobo
12.04.13
✎
08:18
|
Нельзя прочитать ТЗ ?
Почему это не выполняется ? Для каждого ТЗ_тек из ТЗ Цикл ; Сообщить(ТЗ.Поставщик); КонецЦикла; |
|||
32
Gobo
12.04.13
✎
08:19
|
Понял
Для каждого ТЗ_тек из ТЗ Цикл ; Сообщить(ТЗ_тек.Поставщик); КонецЦикла; |
|||
33
Любопытная
12.04.13
✎
08:20
|
Еще раз: Строку сообщай, а не всю колонку.
Ты же написал Для каждого ТЗ_тек из ТЗ Цикл А теперь в цикле обращайся к ТЗ_Тек, в нем хранится текущая строка твоей ТЗ. Вот из строки поставщика и сообщай |
|||
34
Gobo
12.04.13
✎
08:22
|
Не понял, как сообщать строку ?
|
|||
35
Любопытная
12.04.13
✎
08:23
|
ты уже все понял) продолжай
|
|||
36
Gobo
12.04.13
✎
08:23
|
Сейчас так,
Для Каждого ТЗ_тек из ТЗ Цикл ; ЗначениеВДанныеФормы(ТЗ_тек.Поставщик, Элементы.БанкКлиентКлиентПоставщик); КонецЦикла; Выдает ошибку о не несоответствии типов. |
|||
37
Любопытная
12.04.13
✎
08:26
|
а что такое Элементы.БанкКлиентКлиентПоставщик? Полагаю, что это ДанныеФормыСтруктура.
ЗначениеВДанныеФормы(ТЗ.Поставщик, Элементы.БанкКлиентКлиентПоставщик); Не работает? Все же считаю, что лучшим вариантом было бы на сервере собрать всю таблицу, не пришлось бы мучиться с передачей всякой хрени на клиент |
|||
38
Rovan
гуру
12.04.13
✎
08:36
|
вот как у меня работает ЭТО
(ТаблицаДокументов - это таблица на форме) &НаСервере Процедура Заполнить_на_сервере() Запрос = Новый Запрос(" |ВЫБРАТЬ |" ); ПАКЕТ = Запрос.ВыполнитьПакет(); ВыборкаЗаказов = ПАКЕТ[2].Выбрать( ОбходРезультатаЗапроса.ПоГруппировкам ); ТЗ_Реализаций = ПАКЕТ[3].Выгрузить(); Таблица_Документов = РеквизитФормыВЗначение( "ТаблицаДокументов" ); Таблица_Документов.Строки.Очистить(); Пока ВыборкаЗаказов.Следующий() Цикл нов_стр_заказ = Таблица_Документов.Строки.Добавить(); нов_стр_заказ.ЗаказКлиента = ВыборкаЗаказов.Ссылка; ... КонецЦикла; ЗначениеВРеквизитФормы( Таблица_Документов, "ТаблицаДокументов" ); |
|||
39
Gobo
12.04.13
✎
08:48
|
Спасибо Всем, особенно - Любопытная.
Решено так: ТЗ = Запрос.Выполнить().Выгрузить(); Если ТЗ.Количество()>0 Тогда нстр=Объект.БанкКлиент.Количество(); Для Каждого ТЗ_тек из ТЗ Цикл ; Объект.БанкКлиент[нстр-1].КлиентПоставщик=ТЗ_тек.Поставщик; КонецЦикла; Возврат 1; Иначе Возврат 0; КонецЕсли |
|||
40
Любопытная
12.04.13
✎
08:50
|
Ничего не поняла.
Объект.БанкКлиент[нстр-1].КлиентПоставщик=ТЗ_тек.Поставщик; Что это за конструкция? Что здесь где? Как оно работает? |
|||
41
Gobo
12.04.13
✎
10:12
|
Элементы.БанкКлиентКлиент связан с Объект.БанкКлиент.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |