Передача Таблицы значений на тонкий клиент
По теме из базы знаний
- Вывод Таблицы Значений или Дерева Значений на экран управляемой формы без объявления колонок в реквизитах формы
- Универсальный конструктор отчетов СКД (управляемые формы, тонкий клиент)
- Как работают управляемые формы и тонкий клиент 1С – взгляд "из-под капота"
- Подкапотное пространство веб-клиента
- Инструменты разработчика "Инструментики" для тонкого клиента 1С
Найденные решения
(13)
Зачем тогда ТЗ (или массив структур) передавать на клиент?
Используйте временное хранилище.
В открываемой форме получаете АдресТЗ и получаете ТЗ:
задача стояла передать из формы в форму таблицу для заполнения табличной части
Зачем тогда ТЗ (или массив структур) передавать на клиент?
Используйте временное хранилище.
&НаКлиенте
Процедура ОткрытьНужнуюФорму()
АдресТЗ = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ПолучитьАдресТЗ(АдресТЗ);
// добавляете в передаваемые параметры АдресТЗ
....
КонецПроцедуры
&НаСервере
Процедура ПолучитьАдресТЗ(Адрес)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ВахтаУдержания.Дата, ДЕНЬ) КАК Дата,
| ВахтаУдержания.Удержание,
| ВахтаУдержания.Комментарий,
| ВахтаУдержания.Кто
|ИЗ
| Документ.Вахта.Удержания КАК ВахтаУдержания
|ГДЕ
| ВахтаУдержания.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
ТЗ = Запрос.Выполнить().Выгрузить();
ПоместитьВоВременноеХранилище(ТЗ, Адрес)
КонецПроцедуры
ПоказатьВ открываемой форме получаете АдресТЗ и получаете ТЗ:
ТЗ = ПолучитьИзВременногоХранилища(АдресТЗ);
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) создаете реквизит формы типа "(ТаблицаЗначений)". Обратите внимание на скобки. На самом деле это ДанныеФормыКоллекция, а не тип ТаблицаЗначений. Хотя при выборе типа нужно выбирать именно ТаблицаЗначений. Вот такой каламбур.
На сервере в новый реквизит формы можно загрузить ТЗ. Имена и тип колонок должны соответствовать.
ИмяРеквизита.Загрузить(ТЗ)
На сервере в новый реквизит формы можно загрузить ТЗ. Имена и тип колонок должны соответствовать.
ИмяРеквизита.Загрузить(ТЗ)
(10) задача стояла передать из формы в форму таблицу для заполнения табличной части - БСП нет, обработку заполнения табличной части не создать как в учебниках, поэтому таблица нужна была на клиенте и при создании на сервере второй формы сравнить ее с имеющейся табличной частью документа
ПараметрыФормы = Новый Структура;
Если ЗначениеЗаполнено(ДокументСобытий) Тогда
//добавлять в существующий документ событий
ПараметрыФормы.Вставить("Ключ", ДокументСобытий);
ПараметрыФормы.Вставить("ДополнительныеПараметры", Новый Структура("ДобавляемыеУдержания", ПолучитьМассивСтруктурУдержаний()));
&НаСервере
Функция ПолучитьМассивСтруктурУдержаний()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ВахтаУдержания.Дата, ДЕНЬ) КАК Дата,
| ВахтаУдержания.Удержание,
| ВахтаУдержания.Комментарий,
| ВахтаУдержания.Кто
|ИЗ
| Документ.Вахта.Удержания КАК ВахтаУдержания
|ГДЕ
| ВахтаУдержания.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выб = РезультатЗапроса.Выбрать();
МассивКВозврату = Новый Массив;
Пока Выб.Следующий() Цикл
СтрокуТЗВСтруктуру = Новый Структура("Дата, Удержание, Комментарий, Кто");
ЗаполнитьЗначенияСвойств(СтрокуТЗВСтруктуру, Выб);
МассивКВозврату.Добавить(СтрокуТЗВСтруктуру);
КонецЦикла;
Возврат МассивКВозврату;
КонецФункции
удобно тем что обход идет так же как таблицы значений
для каждого эл из ТЗ цикл
Эл.Дата
и т.д.
конеццикла
ПараметрыФормы = Новый Структура;
Если ЗначениеЗаполнено(ДокументСобытий) Тогда
//добавлять в существующий документ событий
ПараметрыФормы.Вставить("Ключ", ДокументСобытий);
ПараметрыФормы.Вставить("ДополнительныеПараметры", Новый Структура("ДобавляемыеУдержания", ПолучитьМассивСтруктурУдержаний()));
&НаСервере
Функция ПолучитьМассивСтруктурУдержаний()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ВахтаУдержания.Дата, ДЕНЬ) КАК Дата,
| ВахтаУдержания.Удержание,
| ВахтаУдержания.Комментарий,
| ВахтаУдержания.Кто
|ИЗ
| Документ.Вахта.Удержания КАК ВахтаУдержания
|ГДЕ
| ВахтаУдержания.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выб = РезультатЗапроса.Выбрать();
МассивКВозврату = Новый Массив;
Пока Выб.Следующий() Цикл
СтрокуТЗВСтруктуру = Новый Структура("Дата, Удержание, Комментарий, Кто");
ЗаполнитьЗначенияСвойств(СтрокуТЗВСтруктуру, Выб);
МассивКВозврату.Добавить(СтрокуТЗВСтруктуру);
КонецЦикла;
Возврат МассивКВозврату;
КонецФункции
удобно тем что обход идет так же как таблицы значений
для каждого эл из ТЗ цикл
Эл.Дата
и т.д.
конеццикла
(13)
Зачем тогда ТЗ (или массив структур) передавать на клиент?
Используйте временное хранилище.
В открываемой форме получаете АдресТЗ и получаете ТЗ:
задача стояла передать из формы в форму таблицу для заполнения табличной части
Зачем тогда ТЗ (или массив структур) передавать на клиент?
Используйте временное хранилище.
&НаКлиенте
Процедура ОткрытьНужнуюФорму()
АдресТЗ = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ПолучитьАдресТЗ(АдресТЗ);
// добавляете в передаваемые параметры АдресТЗ
....
КонецПроцедуры
&НаСервере
Процедура ПолучитьАдресТЗ(Адрес)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ВахтаУдержания.Дата, ДЕНЬ) КАК Дата,
| ВахтаУдержания.Удержание,
| ВахтаУдержания.Комментарий,
| ВахтаУдержания.Кто
|ИЗ
| Документ.Вахта.Удержания КАК ВахтаУдержания
|ГДЕ
| ВахтаУдержания.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
ТЗ = Запрос.Выполнить().Выгрузить();
ПоместитьВоВременноеХранилище(ТЗ, Адрес)
КонецПроцедуры
ПоказатьВ открываемой форме получаете АдресТЗ и получаете ТЗ:
ТЗ = ПолучитьИзВременногоХранилища(АдресТЗ);
(19) какое отображение типов? ТЗ не передается на клиент от слова совсем. Внимательно код посмотрите. Передается только адрес хранилища.
В открываемой форме, в обработчике ПриСозданииНаСервере, получается ТЗ из хранилища и заполняются данные ТЧ. Все на сервере. Никуда на клиент ТЗ не передается.
В открываемой форме, в обработчике ПриСозданииНаСервере, получается ТЗ из хранилища и заполняются данные ТЧ. Все на сервере. Никуда на клиент ТЗ не передается.
(24) получили массив структур на клиент, дальше что? На клиенте в цикле заполнять ТЧ?
Смотрите (13) : "задача стояла передать из формы в форму таблицу для заполнения табличной части - БСП нет" И приведен запрос получения таблицы. Т.е. на первой форме никакой таблицы нет в реквизитах.
Смотрите (13) : "задача стояла передать из формы в форму таблицу для заполнения табличной части - БСП нет" И приведен запрос получения таблицы. Т.е. на первой форме никакой таблицы нет в реквизитах.
Вообще все зависит от того, что дальше хотите с этими данными делать. Зачем именно ТЗ ? В зависимости от задач может оказаться, что нужно преобразовать в строку, например. Если нужно пару колонок и с ними проводить операции сортировки, например, можно использовать СписокЗначений.
Вообще не совсем понятно, нахрена это нужно. Правильные пацаны делают так:
1. Создают реквизит формы с таблицей - но лучше создать реквизит объекта, куда суют все эти колонки, которые надо потом с чем-нить сравнивать.
2. Открывают эту форму.
3. Загружают туда данные (в эту таблицу на форме или, что лучше, в реквизит объекта).
4. Открывают форму, указывая текущую форму в качестве владельца.
5. В открывшейся форме что на клиенте, что на сервере будет доступна форма-владелец и, соответственно, реквизит с таблицей.
1. Создают реквизит формы с таблицей - но лучше создать реквизит объекта, куда суют все эти колонки, которые надо потом с чем-нить сравнивать.
2. Открывают эту форму.
3. Загружают туда данные (в эту таблицу на форме или, что лучше, в реквизит объекта).
4. Открывают форму, указывая текущую форму в качестве владельца.
5. В открывшейся форме что на клиенте, что на сервере будет доступна форма-владелец и, соответственно, реквизит с таблицей.
Мой вариант такой, чтобы работало на "тонком клиенте":
На первой форме формируем массив из таблицы
и ловим готовый массив из таблицы значений на другой форме
в переменной "Товары" будет сидеть массив из структур, каждая структура - это строка таблицы
Ну конечно еще часть кода нужно написать для передачи АдресаТЗ между первой и второй формой, это может быть передано в структуре с другими параметрами
На первой форме формируем массив из таблицы
&НаКлиенте
Процедура КакаяТоПроцедураНаПервойФорме()
АдресТЗТовары = МассивИзТаблицыВХранилище("Товары");
КонецПроцедуры
&НаСервере
Функция МассивИзТаблицыВХранилище(ИмяТаблицы)
МассивИзТЗ = ТаблицаЗначенийВМассив(Объект[ИмяТаблицы].Выгрузить());
ВозвращаемыйАдрес = ПоместитьВоВременноеХранилище(МассивИзТЗ, УникальныйИдентификатор);
Возврат ВозвращаемыйАдрес;
КонецФункции
&НаСервере
Функция ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт
Массив = Новый Массив();
СтруктураСтрокой = "";
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
СтруктураСтрокой = СтруктураСтрокой + ?(СтруктураСтрокой="", "",",") + Колонка.Имя;
КонецЦикла;
Для Каждого Строка Из ТаблицаЗначений Цикл
НоваяСтрока = Новый Структура(СтруктураСтрокой);
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
Массив.Добавить(НоваяСтрока);
КонецЦикла;
Возврат Массив;
КонецФункции
Показатьи ловим готовый массив из таблицы значений на другой форме
&НаКлиенте
Процедура ОбработатьТаблицуНаКлиенте(АдресТЗТовары)
Товары = ПолучитьИзВременногоХранилища(АдресТЗТовары);
КонецПроцедуры
в переменной "Товары" будет сидеть массив из структур, каждая структура - это строка таблицы
Ну конечно еще часть кода нужно написать для передачи АдресаТЗ между первой и второй формой, это может быть передано в структуре с другими параметрами
Как в вычисляемом поле СКД передать Таблицу значений, чтобы отчет работал в тонком клиенте? Пробовал ВнешниеОтчеты.ПреобразоватьТаблицуЗначенийВМассивСтруктур(ТаблицаЗначений(Номенклатура, НадписьКол, Количество, НадписьЦен, ВЫБОР КОГДА ЦЕНА = 0 ТОГДА "-" ИНАЧЕ Формат(Цена,"ЧДЦ=2") КОНЕЦ)) При формировании отчета выдает Попытка сравнения значений, для которых не поддерживается операция сравнения
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот