Имя: Пароль:
1C
1С v8
Передать ТЗ с сервера на клиент
,
0 bebibo
 
23.10.20
08:06
Всем здравствуйте!
Как будет правильнее передать ТЗ на клиент?
Мне нужно заполнить табличную часть документа по кнопке на форме.
Нажимаю кнопку, выполняется запрос, загружаются данные в ТЧ.
Вот запрос выполняется на сервере, как ПРАВИЛЬНЕЕ мне результат этого запроса передать обратно на клиент и заполнить им мою табличную часть?)
1 BalBess
 
23.10.20
08:11
(0) передавать не нужно, нужно сразу заполнять табличную часть, на сервере
2 bebibo
 
23.10.20
08:16
(1) Так ТЧ же на форме - значит это клиент. Как заполнить её на сервере?
3 BalBess
 
23.10.20
08:23
(2) ТЧ на форме просто отображает данные, которые хранятся на сервере
примерно так    
МояФорма=РеквизитФормыВЗначение("Объект");
МояФорма.МояТЧ.Загрузить(Запрос.Выполнить().Выгрузить());
ЗначениеВРеквизитФормы(МояФорма, "Объект");
4 bebibo
 
23.10.20
08:31
(3) Спасибо, я попробую.
5 bebibo
 
23.10.20
08:55
А отбор можно как то в ней сделать перед загрузкой?
6 bebibo
 
23.10.20
08:56
Думаю использовать НайтиСтроки() - но возвратит массив..А не ТЗ
7 BalBess
 
23.10.20
09:00
(5) отбор лучше делать сразу в запросе
а вообще
мояТЗ = Запрос.Выполнить().Выгрузить();
мояТЗ.Отобрать();
МояФорма.МояТЧ.Загрузить(мояТЗ);
8 Мимохожий Однако
 
23.10.20
09:02
(7) Метод Отобрать() мне нравится
9 fisher
 
23.10.20
09:02
(6) У метода Скопировать() есть вариант вызова со структурой отбора - вернет копию таблицы со строками отвечающими фильтру. Или еще в запросе фильтровать.
Судя по теме, ты новичок в УФ. Рекомендую к прочтению: http://catalog.mista.ru/1c/articles/198766/
Только читать лучше на инфостарте - там оформление более читабельное.
10 bebibo
 
23.10.20
09:19
А теперь я передаю "ВладелецФормы.Объект" с клиента в серверную процедуру, ругается:
Ошибка при установке значения атрибута контекста
по причине:
Нельзя изменять поле, содержащее объект данных формы
- это из-за того, что надо ссылку передавать? Если да, то как мне её получить?
11 BalBess
 
23.10.20
09:30
(9) >> есть вариант вызова со структурой отбора
как отобрать, если не точное значение, а например "количество > 100" ?
(10)  - зачем ? попробуй ВладелецФормы.Ссылка )) или по Значению (ЗНАЧ)
12 ГдеСобака Зарыта
 
23.10.20
09:31
Нужно просто в форме документа вызвать процедуру с дерективой &НаСервере. В ней выполнить запрос и заполнить свою ТЧ
Объект.МояТЧ.Загрузить(Запрос.Выполнить.Выгрузить());
13 hhhh
 
23.10.20
09:35
(12) нету у него Объект. Это внешняя обработка заполнения ТЧ, наверно. Тут похоже через массив структур надо.
14 bebibo
 
23.10.20
09:35
(12) Да, но как обратиться к моей ТЧ?
Объект.МояТЧ.Загрузить(Запрос.Выполнить.Выгрузить()); - не работает

Например на клиенте я так меняю ТЧ:
ВладелецФормы.Объект.Товары.Очистить();
15 bebibo
 
23.10.20
09:35
(13) Вы правы, у меня нет объекта..
16 ДенисЧ
 
23.10.20
09:36
А куда объект ВнешняяОбработка дели?
17 ДенисЧ
 
23.10.20
09:36
Как полимеры?
18 ГдеСобака Зарыта
 
23.10.20
09:37
(13) В (0) "заполнить табличную часть документа по кнопке на форме". Про внешнюю обработку или чего еще ни слова
19 bebibo
 
23.10.20
09:37
Получается, как говорил изначально:
Нажимаю кнопку - с клиента идем на сервер - выполняем запрос - выгружаем в ТЗ - Через массив структур передаем на клиент и заполняем? ТАк надо что ли?
20 bebibo
 
23.10.20
09:37
(18) Да, извините, моя ошибка.
21 ГдеСобака Зарыта
 
23.10.20
09:40
(19) Вот в итерации "с клиента идем на сервер" можно перейти как с контекстом формы так и без. Непонятно что ты делаешь там.
22 bebibo
 
23.10.20
09:42
(21) Просто с процедуры &НаКлиенте иду в функцию &НаСервере
23 ГдеСобака Зарыта
 
23.10.20
09:42
Ты какую то другую форму открываешь для подбора или что?
24 ГдеСобака Зарыта
 
23.10.20
09:44
(22) Ну (12) в ней работает. Сто раз так делал.
25 bebibo
 
23.10.20
09:46
(24) Объект.Товары.Загрузить(ТаблицаТовары);
Поле объекта не обнаружено (Товары)
26 ГдеСобака Зарыта
 
23.10.20
09:49
А что отладчик говорит про Объект?
27 bebibo
 
23.10.20
09:52
(26) Отладки то нет) Внешняя обработка то, подключена через Администрирование..
28 bebibo
 
23.10.20
09:53
(26) Через сообщить - сказал что ДанныеФормыСтруктура
29 ГдеСобака Зарыта
 
23.10.20
09:55
30 bebibo
 
23.10.20
09:58
(29) Я знаю как обратиться к ним на клиенте. НО как НА СЕРВЕРЕ - нет(
31 bebibo
 
23.10.20
10:01
стоп
32 fisher
 
23.10.20
10:03
(11) > как отобрать, если не точное значение, а например "количество > 100"
Через Скопировать() - никак. Но если ТС устроили возможности отбора в НайтиСтроки(), то устроят и в Скопировать()
33 bebibo
 
23.10.20
10:04
Я нашел там ответ!!
В общем если кому пригодится:

ОбъектДокумента = ВладелецФормы.Объект;
    
ЗафигачитьНаСервере(ОбъектДокумента); - тут заполняем ТЧ из ТЗ
    
КопироватьДанныеФормы(ОбъектДокумента, ВладелецФормы.Объект);
ВладелецФормы.Модифицированность = Истина

РЕШЕНИЕ НАЙДЕНО! СПАСИБО ДОРОГИЕ ЛЮДИ))
34 fisher
 
23.10.20
10:07
(33) Не, спасибо. Такого не надо.
35 bebibo
 
23.10.20
10:32
(34) Почему?
36 bebibo
 
23.10.20
10:33
(35) По другому никак!
37 fisher
 
23.10.20
10:42
(35) Не люблю такие фокусы с полной перегрузкой контекста. Обосновать не могу, но каким-то запашком от этого тянет.
С другой стороны, твой случай действительно "неудобный". Альтернатива - переливать ТЧ на клиенте, что тоже выглядит так себе решением для больших ТЗ.
Так что, пожалуй, готов взять свои слова назад.
38 VladZ
 
23.10.20
10:46
(33) Зачем так сложно?

РезультатЗапросаТЗ = запрос.Выполнить().Выгрузить();
объект.<моя табличная часть>.Загрузить(РезультатЗапросаТЗ);

И всё.
39 fisher
 
23.10.20
10:50
(38) ТС потом ниже раскололся, что ему нужно из формы своей обработки загружать ТЗ в ТЧ формы-владельца.
40 fisher
 
23.10.20
10:54
И проблема в том, что ты не можешь выполнить код в серверном контексте другой формы.
41 lodger
 
23.10.20
10:56
(40) в смысле код формы владельца нельзя ковырять?
42 fisher
 
23.10.20
10:57
(41) Я так понял что да. Иначе к чему весь сыр-бор :)
43 fisher
 
23.10.20
11:09
Если ковырять владельца можно, тогда самое простое что приходит в голову - передать ТЗ через временное хранилище и на стороне владельца штатно из него загрузиться.
44 Индиго
 
23.10.20
11:16
(0)
1.Можно сделать ТЗ реквизитом формы и заполнять на сервере с контекстом. Но не забывать, что форма со всеми кишками будет ходить туда-сюда на сервер с клиента и обратно.
2.Можно сделать из ТЗ массив структур и нормально вернуть на клиенте, его обход ничем не будет отличасться от обхода ТЗ
примерно так
//-------------
    мТЗ=Новый Массив;
    
    Для каждого Стр Из ТЗ Цикл
        струкСтрока=Новый Структура;
        Для каждого Кол Из ТЗ.Колонки Цикл
            СтрукСтрока.Вставить(Кол.Имя,Стр[Кол.Имя]);
        КонецЦикла;    
        мТЗ.Добавить(струкСтрока);
    КонецЦикла;
    
    Возврат мТЗ
45 Said_We
 
23.10.20
11:17
До чего дошел прогресс.....
Раньше обсуждали какие данные верные для заполнения ТЧ. Где их лучше взять. Как правильне взять.

А сейчас прогресс!
Сами данные уже никого не интересуют. Главное запихать что-то в ТЧ. А самое главное как технически эту ТЧ заполнить. Что там куда передать и через что. Потрясающе!
46 Сергиус
 
23.10.20
11:31
(0)Можно передавать не ТЗ, а массив структур. На клиенте уже обрабатывать.
47 fisher
 
23.10.20
11:33
(45) А чего ты ждал? Старые мрут, молодые приходят. Все по спирали.
48 Said_We
 
23.10.20
11:43
(47) Да не... Это же просто поразительно. Что не ветка, то никого не интересует правильность данных и т.д. Вопрос содержащейся информации в данных вообще никого не интересует.
Всех интересует как с клиента на сервер и обратно данные пихнуть, и форму перерисовать.
Потрясающе....
49 Kesim
 
23.10.20
11:45
(0) Передай на сервер ссылку на документ, там получи его тч и заполни.
по поводу отборов и количество <100 и тд  -  а случаем не для этого ты запрос делал?
50 Индиго
 
23.10.20
11:53
(48)Так вопрос правильности данных должен автора волновать. Мы ему подсказываем методы,а утирать нос и проверять насколько верны данные- это уже извините за отдельные деньги
51 Web00001
 
23.10.20
12:08
(45)Что за бред. Отвечают на поставленный вопрос. Что раньше, что сейчас. Просто появились технические нюансы которых не было раньше(если у тебя файловая база, то не было проблемы передать тз с сервера на клиента) поэтому и вопросов таких не было тоже.
52 fisher
 
23.10.20
12:21
(48) И что не так? У тебя разве было иначе? Технические проблемы - внеочередные. С ними разбираешься в первую очередь.
53 Web00001
 
23.10.20
12:31
(48)Представил диалог
- Мне нужно передать данные
- Нет нет нет давай сначала разберемся где ты их взял.
- Да пользователь ввел.
- А где пользователь их взял? А правильно ли он их ввел? Что это уже никого не интересует? Потрясающе...
54 Индиго
 
23.10.20
12:34
(53) +1
55 Said_We
 
23.10.20
13:09
(53), (54) Да уж....
Вы меня абсолютно, т.е. совсем не поняли. Вопрос же в другом совсем.

Посмотришь ветки десятилетней давности - народ на форуме решает проблемы ближе к постановке задачи и реализации какой-то функции. 20 лет назад примерно так же было.
Сейчас больше половины веток, это решения вопроса с какими-то "рюшечками". Или как куда, что передать с сервера на клиент и обратно.
Вот сижу и гадаю, как нас до такого Прогресс довел?
56 lodger
 
23.10.20
13:12
"реализации какой-то функции" = "как куда, что передать с сервера на клиент и обратно".
57 Garykom
 
гуру
23.10.20
13:13
(55) Типовые (или отраслевые) покрывают 90% функционала
58 Garykom
 
гуру
23.10.20
13:14
(57)+ Сча новыми разработками обычно "проектные офисы" занимаются - там задачу низзя на левый сайт
59 Said_We
 
23.10.20
13:20
Лет 20 назад была у всех мысль: "В то время как программисты всего мира пишут программы для отправке ракет в космос, мы на 1С бухгалтерский баланс сводим".
А теперь даже баланс не сводим  :-)
Чем вообще мы заняты?
60 fisher
 
23.10.20
15:02
(59) Дядько... Походу у тебя трава зазеленела :)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший