ТаблицаЗначений в тонком клиенте.

1. 14 05.05.15 11:03 Сейчас в теме
Написал вот такую функцию.

&НаСервере
Функция ПолучитьКонтрагентов()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Наименование,
| Контрагенты.НаименованиеПолное,
| Контрагенты.ИНН,
| Контрагенты.КПП,
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты";


ТЗ = Запрос.Выполнить().Выгрузить();
Возврат ТЗ
КонецФункции

Но в тонком клиенте не работает ТаблицаЗначений.
Так как получить список всех контрагентов??? Для последующей обработки.
УТ 11.1
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 05.05.15 11:09 Сейчас в теме
(1) furman2000, сначала РеквизитФормыВЗначение, потом ЗначениеВРеквизитФормы
5. SaschaL 05.05.15 11:19 Сейчас в теме
(1) furman2000, Привожу свой кусок кода как я такие ситуации обходил
&НаСервере
Процедура ОбновитьДокументыПоКонтрагенту()
	ОбъектСправочник = РеквизитФормыВЗначение("Объект", Тип("СправочникОбъект.Котрагенты"));
	ТекущийКонтрагент = ОбъектСправочник.Ссылка;
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	РеализацияТоваровРаботУслуг.Ссылка,
	               |	РеализацияТоваровРаботУслуг.Контрагент,
	               |	РеализацияТоваровРаботУслуг.Примечание
				   //|	РеализацияТоваровРаботУслуг.Товары.(
				   //|		Сумма(Сумма) как СуммаТовары
				   //|	),
				   //|	РеализацияТоваровРаботУслуг.Услуги.(
				   //|		Сумма(Сумма) как СуммаУслуги
				   //|	)
	               |ИЗ
	               |	Документ.РеализацияТоваровРаботУслуг КАК РеализацияТоваровРаботУслуг
	               |ГДЕ
	               |	РеализацияТоваровРаботУслуг.Контрагент = &Контрагент";
	Запрос.УстановитьПараметр("Контрагент", ТекущийКонтрагент);
	Выборка = Запрос.Выполнить().Выбрать();
	
	Если  Выборка.Количество()> 0 тогда
		Пока Выборка.Следующий() цикл
			НовСтрока = ОбъектСправочник.ОказаниеУслуг.Добавить();
			НовСтрока.Документ = Выборка.Ссылка;
			//НовСтрока.СуммаДокумента = Выборка.СуммаТовары + Выборка.СуммаУслуги;
		КонецЦикла;
	КонецЕсли;
	
	ЗначениеВРеквизитФормы(ОбъектСправочник, "Объект");
КонецПроцедуры
Показать
furman2000; +1 Ответить
7. dj_serega 380 06.05.15 14:55 Сейчас в теме
(5) SaschaL, Непонятно зачем использовать РеквизитФормыВЗначение() если мы уже находимся в объекте?
Достаточно:
НовСтрока = Объект.ОказаниеУслуг.Добавить();
9. spacecraft 06.05.15 18:19 Сейчас в теме
(7) dj_serega, ТЗ может не быть реквизитом объекта. Да и в общем случае, на клиенте могли изменить в ней значения.
Но конечно нужно понять, зачем она там.
11. dj_serega 380 06.05.15 20:43 Сейчас в теме
(9) spacecraft,
ТЗ может не быть реквизитом объекта
так темболее не нужно если это есть реквизит формы :) просто не нужно злоупотреблять возможностями :) вот я к чему.
3. spezc 717 05.05.15 11:10 Сейчас в теме
1. добавить реквизит управляемой формы с типом ТаблицаЗначений, и заполнять ее.
2. передавать массив структур
METAL; BratPazak; +2 Ответить
4. spezc 717 05.05.15 11:11 Сейчас в теме
и вопрос - зачем на клиенте необходима обработка подобной таблицы значений?
6. furman2000 14 05.05.15 11:38 Сейчас в теме
(4) spezc, Вы наверно правы. А зачем на клиенте это нужно.
Нафик не нужно. На клиенте нужно результат получить.
Правильно. Запихаю все переборки на сервер, и верну только то, что нужно получить.
8. dusha0020 1013 06.05.15 15:27 Сейчас в теме
(6) furman2000, Очень правильный подход. И мой Вам совет на будущее - посылайте лесом всех, кто будет объяснять на пальцах как извратиться и обработать на клиенте то, что стандартами языка к обработке на клиенте не предназначено.
10. spacecraft 06.05.15 18:25 Сейчас в теме
(8) dusha0020, а Вы господь бог и точно знаете, что будет обрабатываться и как? Я вот не знаю.
И как вариант, когда оправдано хранение ТЗ на клиенте, для последующей обработки в другом сеансе &НаСервере.
Или еще вариант, как показать данные, получаемые сложным запросом? Динамический список тут бессилен. Или ТЗ, или дерево.
12. dusha0020 1013 07.05.15 09:18 Сейчас в теме
(10) spacecraft, "Вы" можно было бы написать с маленькой, а вот "господь бог" нужно обязательно с заглавных. А то обижусь:(
А если по сути вопроса...
ТЗ на клиенте хранить не нужно никогда. Для этого есть хранилище значений. Передавайте адрес в серверную процедуру с клиента и помещайте туда на сервере, а потом передаете адрес в новый вызов сервера. Носить ТЗ с сервера на клиент, а потом обратно на сервер вместо идентификатора - это из пушки по воробьям.
По отображению сложных запросов. Я их отображаю на сервере, передав контекст формы вывода. Этот велосипед называется "ЗначениеВРеквизитФормы()"
vovan_victory; +1 Ответить
13. a0212 12.09.21 05:17 Сейчас в теме
(12) А если мне необходимо из текстовых файлов, которые находятся на клиенте, взять информацию в ТаблицуЗначений, обработать, предоставить выбор юзеру из результатов организованных в список значений, тогда как быть?
Т.е. база данных вообще не при делах, обработка данных идёт тех которые локально у клиента лежат - гнать файлы на сервер и обрабатывать там чтоли..
14. FatPanzer 14 12.09.21 11:05 Сейчас в теме
(13) Передавайте текст файла с клиент на сервер и там обрабатывайте.
15. dusha0020 1013 14.09.21 10:07 Сейчас в теме
(13)
взять информацию в ТаблицуЗначений, обработать

Вот здесь и кроется ответ:)
В идеологии клиент-серверной работы ввод-вывод данных - это задача клиента, обработка - сервера.
Передавайте данные для обработки на сервер и возвращайте результат обработки на клиент.
Впрочем, в (14) Вам так и подсказали.
Предвижу возражение, что текста в файлах может быть очень много и не разумно его пересылать на сервер. Но еще менее разумно обрабатывать большие объемы данных на клиенте, который может практически не иметь вычислительной мощности.
16. a0212 14.09.21 15:46 Сейчас в теме
(15)
который может практически не иметь вычислительной мощности.
но ведь может же и иметь ))
имхо, неразумно было не давать в 7.7 обрабатывать данные на сервере, только на клиенте.
но не менее не разумно в 8.3 не давать обрабатывать данные на клиенте, только на сервере.

разрабы 1с, на мой взгляд бросаются из крайности в крайность )
куда правильнее было бы давать возможность делать выбор разработчику конфигурации где обрабатывать данные.
17. Sashares 19 14.09.21 16:03 Сейчас в теме
(16)Да обрабатывайте где хотите, хоть на клиенте, хоть на сервере.
Только учитывайте ограничения тонкого клиента.
Что касается таблицы значений, то вы можете создать в форме обработки, в которой выполняете задачу, реквизит формы - ТаблицуЗначений и использовать ее.
18. a0212 14.09.21 21:39 Сейчас в теме
(17) так на клиенте же нельзя, хоть хоти хоть нет??

Если я правильно понял то реквизит формы тоже будет находиться на сервере, на клиенте лишь отображение этого реквизита - ТЗ в данном случае - ДанныеФормыКоллекция или что-то подобное, точно не помню как оно там называется )
19. Sashares 19 14.09.21 21:59 Сейчас в теме
(18)
ТЗ в данном случае - ДанныеФормыКоллекция

Да, реквизит формы с типом ТаблицаЗначений по сути имеет тип ДанныеФормыКоллекция. Он имеет большинство возможностей таблицы значений и с ним можно работать на клиенте.
В том числе на клиенте можно добавлять строки в такую таблицу и заполнять их значениями.

(18)
Если я правильно понял то реквизит формы тоже будет находиться на сервере, на клиенте лишь отображение этого реквизита


Нет, реквизиты есть на клиенте.
20. a0212 15.09.21 07:53 Сейчас в теме
(19)
Нет, реквизиты есть на клиенте.

физически область памяти в которой находится реквизит расположен на сервере или на клиенте?
если мы возьмём на клиенте с локального диска и в реквизит запишем двоичные данные какой-нибудь фильм например гигов на 10 - он будет копироваться на сервер или так и останется на клиенте?

я так всегда думал что только локальные переменные существуют на клиенте, всё остальное только на сервере..
21. Sashares 19 15.09.21 09:57 Сейчас в теме
(20)
я так всегда думал что только локальные переменные существуют на клиенте, всё остальное только на сервере..


Так почитайте книги по управляемым формам, узнаете много нового.
22. spacecraft 15.09.21 10:36 Сейчас в теме
(20) все зависит от того, какой это реквизит.
Если рассматривать ДанныеФормыКоллекция, то она не будет целиком передана на клиент, если там много данных.
Далее, еще будет зависеть от того, будет колонка выводится на форму для показа или установлен для нее флаг "ИспользоватьВсегда".
Если выводится или установлен флаг, то данные на клиент будут передаваться партиями. Своего рода паджинация.
Но в любом случае, если с клиент будет обращение к этим самым 10Гб, то они получатся на клиенте (если памяти и времени получения хватит), так и передадутся на сервер, при первом же контекстном вызове сервера.
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист 1С
Новосибирск
зарплата от 90 000 руб.
Полный день

Программист 1С
Екатеринбург
зарплата от 100 000 руб. до 150 000 руб.
Полный день

Программист 1С
Москва
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Программист 1С
Москва
зарплата от 100 000 руб. до 140 000 руб.
Полный день

Программист 1С
Хабаровск
зарплата от 130 000 руб. до 160 000 руб.
Полный день