Таблица значений реквизит формы с сервера на клиент

добейте кодик в через реквизит формы

МассивДобавляемыхРеквизитов = Новый Массив;

МассивУдаляемыхРеквизитов = Новый Массив;

МассивКолонок = Новый Массив;

ИдКоллекции = «Таблица»;

КоллекцияФормы = РеквизитФормыВЗначение(ИдКоллекции);

Для Каждого Колонка из КоллекцияФормы.Колонки Цикл

МассивУдаляемыхРеквизитов.Добавить(ИдКоллекции + «.» + Колонка.Имя);

КонецЦикла;

Для Каждого Колонка из ТЗ.Колонки Цикл

МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ИдКоллекции));

МассивКолонок.Добавить(Колонка.Имя);

КонецЦикла;

ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов, МассивУдаляемыхРеквизитов);

ЗначениеВРеквизитФормы(ТЗ, ИдКоллекции);

МассивУдаляемыхРеквизитов = Новый Массив;

Для Каждого Элемент из Элементы Цикл

Если Лев(Элемент.Имя, 8) = ИдКоллекции + «_» Тогда

МассивУдаляемыхРеквизитов.Добавить(Элемент);

КонецЕсли;

КонецЦикла;

Для Каждого Элемент Из МассивУдаляемыхРеквизитов Цикл

Элементы.Удалить(Элемент);

КонецЦикла;

Для Каждого Колонка из ТЗ.Колонки Цикл

НовыйЭлемент = Элементы.Добавить(ИдКоллекции + «_» + Колонка.Имя, Тип(«ПолеФормы»), Элементы.Таблица);

НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;

НовыйЭлемент.ПутьКДанным = ИдКоллекции + «.» + Колонка.Имя;

КонецЦикла;

Возврат МассивКолонок;

Содержание:

1.       Использование временного хранилища 1С

2.       Заполнение таблицы значений формы

3.       ЗначениеВСтрокуВнутр() – только для толстого клиента 1С 8.3 

1.      Использование временного хранилища 1С

Если есть необходимость передать таблицу значений с сервера на клиент в 1С можно использовать несколько вариантов. Для начала можно начать с временного хранилища 1С – самого лаконичного варианта:

ПоместитьВоВременноеХранилище(<Данные>, <Адрес>)

Где данные — это наша таблица значений, а адрес — это уникальный идентификатор или строка, куда нам нужно передать таблицу значений 1С. Например:

ПоместитьВоВременноеХранилище(ТаблицаЗначений, ЭтаФорма.УникальныйИдентификтор);

Для получения на клиенте таблицы значений достаточно будет использовать следующий код:

ПолучитьИзВременногоХранилища(ЭтаФорма.УникальныйИдентификтор);  

2.      Заполнение таблицы значений формы

Самый лаконичный способ передать на клиента таблицу значений не означает, что это самый правильный вариант. Самым правильным (судя по экзаменам платформы 1С) является вариант заполнение Таблицы значений формы. Для начала необходимо добавить в форму новый реквизит с типом «ТаблицаЗначений» и именем «ТаблицаЗначенийФормы». На сервере пишем следующий код строки 1С:

//Считаем, что тут вы получили таблицу значений, у которой необходимо передать данные на форму


ТЗ = ПолучитьТЗ();


ДобавляемыеРеквизиты = Новый Массив;


УдаляемыеРеквизиты = Новый Массив;


//Получаем уже созданную на форме Таблицу значений 1С


ИмяТФ = «ТаблицаЗначенийФормы”;


ТаблицаФормы = РеквизитФормыВЗначение(«ТаблицаЗначенийФормы»);


Для Каждого ТекКолонка из ТаблицаФормы.Колонки Цикл


УдаляемыеРеквизиты.Добавить(ТаблицаЗначенийФормы + «.» + ТекКолонка.Имя);


КонецЦикла;



Для Каждого ТекКолонка из ТЗ.Колонки Цикл


ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ТекКолонка.Имя, ТекКолонка.ТипЗначения, ИмяТФ));


КонецЦикла;



//Добавим новые, удалим старые колонки


ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты);


// Поместим значение в реквизит формы 1С


ЗначениеВРеквизитФормы(ТЗ, ИмяТФ);

После выполнения этой процедуры на форме обновится таблица значений на клиенте 1С, и вы сможете оперировать ими.  

3.      ЗначениеВСтрокуВнутр() – только для толстого клиента 1С 8.3

Третий вариант – передать таблицу значений на клиент 1С. Для этого используется ЗначениеВСтрокуВнутр(), но лучше его не использовать, ибо эта функция на данный момент доступна только на толстом клиенте 1С 8.3. Сам код похож на временное хранилище:


//Укладываем ТЗ в строку


тзВСтроке = ЗначениеВСтрокуВнутр(тз);


//Вытаскиваем ТЗ из строки


тз = ЗначениеИзСтрокиВнутр(тзВСтроке);

Есть еще много вариантов передачи таблицы значений 1С на клиента, начиная со структур, заканчивая XML, но стоит ли их использовать решать Вам. В данной статье перечислены варианты которые покроют 100% нужд.

Специалист компании «Кодерлайн»

Роман Барабанов

Передача таблицы значений с сервера на клиент

Отличия функций РеквизитФормыВЗначение и ДанныеФормыВЗначение

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

Вариант №1

Здесь все просто, обходим в цикле строки таблицы значений, данные каждой строки вставляем в структуру, а структуру добавляем в массив.


&НаСервере
Функция ПолучитьТЗКакМассивСтруктур()

МояТаблицаЗначений = СоздатьТаблицуЗначений();

МассивСтруктур = Новый Массив;
Для Каждого СтрокаТЗ Из МояТаблицаЗначений Цикл
СтрокаСтруктура = Новый Структура;
Для Каждого КолонкаТЗ Из МояТаблицаЗначений.Колонки Цикл
СтрокаСтруктура.Вставить(КолонкаТЗ.Имя, СтрокаТЗ[КолонкаТЗ.Имя]);
КонецЦикла;
МассивСтруктур.Добавить(СтрокаСтруктура);
КонецЦикла;

Возврат МассивСтруктур;

КонецФункции // ПолучитьТЗКакМассивСтруктур()

&НаКлиенте
Процедура ПолучитьДанные()

ДанныеТаблицы = ПолучитьТЗКакМассивСтруктур();

КонецПроцедуры // ПолучитьДанные()

Минус данного решения — это отсутствие тех самых полезных методов таблицы значений.

Вариант №2

Этот вариант намного сложнее, но выполнив его, считайте что к одному из пунктов экзамена на знание платформы 1С 8.2 или 8.3 «Специалист» вы подготовились. Здесь используется динамическое создание реквизитов формы. Алгоритм, примерно, такой: создается реквизит формы с типом ТаблицаЗначений, для этого реквизита создаются подчиненные реквизиты (колонки таблицы) и производиться загрузка данных таблицы значений в новый реквизит формы.

Первым делом, необходимо у формы создать реквизит ИмяТаблицыЗначений с типом ТаблицаЗначений.

Рисунок 1. Реквизит формы типа ТаблицаЗначений

А потом написать следующий код:


&НаСервере
Функция ОтправитьТаблицуЗначенийНаКлиент()

МояТаблицаЗначений = ПолучитьТаблицуЗначений();

ДобавляемыеРеквизиты = Новый Массив;
УдаляемыеРеквизиты = Новый Массив;

МассивКолонок = Новый Массив;
ИмяТаблицыФормы = "ИмяТаблицыЗначений";

ТаблицаФормы = РеквизитФормыВЗначение(ИмяТаблицыФормы);

Для Каждого ТекКолонка из ТаблицаФормы.Колонки Цикл
УдаляемыеРеквизиты.Добавить(ИмяТаблицыФормы + "." + ТекКолонка.Имя);
КонецЦикла;

Для Каждого ТекКолонка из МояТаблицаЗначений.Колонки Цикл
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ТекКолонка.Имя, ТекКолонка.ТипЗначения, ИмяТаблицыФормы));
МассивКолонок.Добавить(ТекКолонка.Имя);
КонецЦикла;

// Добавим новые, удалим старые колонки
ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты);
// Поместим значение в реквизит формы
ЗначениеВРеквизитФормы(МояТаблицаЗначений, ИмяТаблицыФормы);

Возврат МассивКолонок;

КонецФункции // ОтправитьТаблицуЗначенийНаКлиент()

Далее на клиенте можно смело обращаться к свежеиспеченной таблице значений ЭтаФорма.ИмяТаблицыЗначений…

Перейти к контенту

Перейти в раздел примеры кода 1С 8.3:

Пример 1. Передать ТЗ на клиент с сервера (через процедуру ОбщегоНазначения) в 1С 8.3:

Процедура ПередатьТаблицуЗначенийНаКлиент(Элемент) Экспорт

   ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаЗначений);

КонецПроцедуры

Пример 2. Передать ТЗ на клиент с сервера (через Временное хранилище) в 1С 8.3:

Процедура ПередатьТаблицуЗначенийНаКлиент(ТаблицаЗначений) Экспорт

   АдресХранилищаСТЗ = ПоместитьВоВременноеХранилище(ТаблицаЗначений,ЭтаФорма.УникальныйИдентификатор);
   ПереносТЗ = ПолучитьИзВременногоХранилища(АдресХранилищаСТЗ);

КонецПроцедуры

Пример 3. Передать ТЗ на клиент с сервера (через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр) в 1С 8.3:

&НаКлиенте
Процедура ПолучитьТаблицуНаСервере(Команда)

   ТЗ_Стр = ПолучитьТЗНаСервере(); // Получаем данные на сервере
   ТаблицаЗначений = ЗначениеИзСтрокиВнутр(ТЗ_Стр);

КонецПроцедуры

&НаСервере
Функция ПолучитьТЗНаСервере(ТЗ)

   Возврат ЗначениеВСтрокуВнутр(ТЗ);

КонецФункции

Пример 4. Передать ТЗ на клиент с сервера (через реквизит формы в 1С 8.3:

&НаСервере
Функция ПередатьТаблицуЗначенийНаКлиент(ОбъектСсылка, ИмяТабличнойЧасти)

   ОбъектЗначение = ОбъектСсылка.ПолучитьОбъект();
   ОбъектТЧ = ОбъектЗначение[ИмяТабличнойЧасти].Выгрузить();

   МассивРеквизитов = Новый Массив;
   МассивСтарыхРеквизитов = Новый Массив;
   МассивКолонок = Новый Массив;

   ИдКоллекции=«РеквизитФормыТЗ»; // Реквизит формы с типом Табл.Значений

   ТаблицаФормы=РеквизитФормыВЗначение(ИдКоллекции);

   Для Каждого Колонка Из ТаблицаФормы.Колонки Цикл
       МассивСтарыхРеквизитов.Добавить(ИдКоллекции+«.»+Колонка.Имя);
   КонецЦикла;

   Для Каждого Колонка Из ОбъектТЧ.Колонки Цикл
       МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя,Колонка.ТипЗначения,ИдКоллекции));
       МассивКолонок.Добавить(Колонка.Имя);
   КонецЦикла;

   // Добвляем новые и удаляем старые колонки
   ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов,МассивСтарыхРеквизитов);

   // Помещаем значение в реквизит формы
   ЗначениеВРеквизитФормы(ОбъектТЧ,ИдКоллекции);

   Возврат МассивКолонок;

КонецФункции

Пример 5. Передать ТЗ на клиент с сервера (через Массив из структур) в 1С 8.3:

// Преобразуем ТаблицуЗначений в Массив из структур.
Функция ПреобразоватьТЗвМассив(ТЗ) Экспорт

   МассивТЗ = Новый Массив;
   Для Каждого СтрокаТЗ Из ТЗ Цикл

       СтруктураТЗ = Новый Структура;
       Для Каждого ИмяКолонки Из ТЗ.Колонки Цикл
           СтруктураТЗ.Вставить(ИмяКолонки.Имя, СтрокаТЗ[ИмяКолонки.Имя]);
       КонецЦикла;

       МассивТЗ.Добавить(СтруктураТЗ);

   КонецЦикла;

   Возврат МассивТЗ;

КонецФункции

// Преобразуем Массив из структур в ТаблицуЗначений
Функция ПреобразоватьМассивВТЗ(МассивТЗ) Экспорт

   ТЗ = Новый ТаблицаЗначений;

   Для Каждого ЭлементМассива Из МассивТЗ Цикл

       // Колонки для таблицы значений
       Если ТЗ.Колонки.Количество() = 0 Тогда
           Для Каждого ЗнМассив Из ЭлементМассива Цикл
               ТЗ.Колонки.Добавить(ЗнМассив.Ключ);
           КонецЦикла;
       КонецЕсли;

       // Заполняем таблицу значений данными
       НоваяСтрока = ТЗ.Добавить();
       Для Каждого ЗнМассив Из ЭлементМассива Цикл
           НоваяСтрока[ЗнМассив.Ключ] = ЗнМассив.Значение;
       КонецЦикла;
   КонецЦикла;

   Возврат ТЗ;

КонецФункции

Copyright©, «Программист 1С в г.Минске», 22.06.2021

Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник

Навеяно публикацией на Инфостарте, с использованием передачи через XML. За идею плюс, но на мой взгляд, мудрено и многовато кода. Старый добрый способ с массивом структур прост и эффективен. Так же где то год назад добавил в копилку и успешно использую вариант с передачей на сервер копии реквизита формы, содержащего таблицу значений. Данный способ хорош тем, что при необходимости данные таблицы можно передать на сервер без остального контекста формы, не затрачивая время на перенос этих данных в тот же самый массив структур. Опять же, на стороне сервера можно использовать такие методы данной коллекции, как Выгрузить / Загрузить.

Идея в следующем: допустим, Т — реквизит формы с типом ТаблицаЗначений. Тогда процесс передачи будет выглядеть так:

&НаКлиенте
Процедура ПередатьТаблицу()
    
    ДанныеОбработки = ОбработатьТаблицуНаСервере(Т);
    
КонецПроцедуры

&НаСервереБезКонтекста
Функция ОбработатьТаблицуНаСервере(Знач Т)
    
    //Т - копия реквизита с данными, тип ДанныеФормаКоллекция
    //если необходимо, получаем таблицу значений
    ТЗ = Т.Выгрузить(); 
    
    //Обработка таблицы значений
    //...
    
    //можно вернуть результат обратно
    Т.Загрузить(ТЗ);
    
    Возврат Т;
    
КонецФункции

В качестве демонстрации набросал простую обработку. Для варианта с коллекцией формы кода получается несколько меньше, чем с массивом структур. И, как оказалось, работает побыстрее и менее затратна по передаваемому объему.

&НаКлиенте
Процедура Команда1(Команда)
 
 ДанныеТаблицы = Команда1НаСервере();
 
КонецПроцедуры

&НаКлиенте
Процедура Команда2(Команда)
 
 ДанныеТаблицы = Команда2НаСервере(Т);
 
КонецПроцедуры

&НаСервереБезКонтекста
Функция Команда1НаСервере()
 
 МассивСтрок = Новый Массив;
 ТЗ = ПолучитьТестовуюТаблицу();
 Для Каждого СтрокаТЗ Из ТЗ Цикл
  СоставСтроки = Новый Структура("Число1, Число2, Число3, Число4", СтрокаТЗ.Число1, СтрокаТЗ.Число2, СтрокаТЗ.Число3, СтрокаТЗ.Число4);
  МассивСтрок.Добавить(СоставСтроки);
 КонецЦикла;
 
 Возврат МассивСтрок;
 
КонецФункции

&НаСервереБезКонтекста
Функция Команда2НаСервере(Знач Т)
 
 Т.Загрузить(ПолучитьТестовуюТаблицу());
 Возврат Т;
 
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьТестовуюТаблицу()
 
 Запрос = Новый Запрос;
 Запрос.Текст = 
 "ВЫБРАТЬ
 | 0 КАК Число
 |ПОМЕСТИТЬ Т
 |
 |ОБЪЕДИНИТЬ ВСЕ
 |
 |ВЫБРАТЬ
 | 1
 |
 |ОБЪЕДИНИТЬ ВСЕ
 |
 |ВЫБРАТЬ
 | 2
 |
 |ОБЪЕДИНИТЬ ВСЕ
 |
 |ВЫБРАТЬ
 | 3
 |
 |ОБЪЕДИНИТЬ ВСЕ
 |
 |ВЫБРАТЬ
 | 4
 |
 |ОБЪЕДИНИТЬ ВСЕ
 |
 |ВЫБРАТЬ
 | 5
 |
 |ОБЪЕДИНИТЬ ВСЕ
 |
 |ВЫБРАТЬ
 | 6
 |
 |ОБЪЕДИНИТЬ ВСЕ
 |
 |ВЫБРАТЬ
 | 7
 |
 |ОБЪЕДИНИТЬ ВСЕ
 |
 |ВЫБРАТЬ
 | 8
 |
 |ОБЪЕДИНИТЬ ВСЕ
 |
 |ВЫБРАТЬ
 | 9
 |;
 |
 |////////////////////////////////////////////////////////////////////////////////
 |ВЫБРАТЬ
 | Т1.Число КАК Число1,
 | Т2.Число КАК Число2,
 | Т3.Число КАК Число3,
 | Т4.Число КАК Число4
 |ИЗ
 | Т КАК Т1,
 | Т КАК Т2,
 | Т КАК Т3,
 | Т КАК Т4";
 
 Возврат Запрос.Выполнить().Выгрузить();
 
КонецФункции // ПолучитьТестовуюТаблицу()

Результат замеров передачи первым и вторым способами таблицы в 10000 строк с сервера на клиент:

Время Отправлено Принято
1,31 665 4 050 476
0,47 1 749 979 452

PS: пар раз встречал упоминания, что подобный способ через копию структуры не рекомендуется, поскольку вроде как не документирован. Но конкретики, к чему это может привести, так и не увидел. Если у вас есть информация по этому поводу, будьте добры, оставьте ссылку в комментариях.

Передача таблицы значений между клиентом и сервером

Я
   NIGHTHUNTER

03.10.20 — 07:32

Тестировал под толстым клиентом все работало, но под тонким выходят эти ошибки, о невозможности передавать таблицу значений между клиентом и сервером

Подскажите наглядно пожалуйста, ряд решений этой проблемы, что бы взять их на вооружение .

  

Партнерская программа EFSOL Oblako

   NIGHTHUNTER

1 — 03.10.20 — 07:35

(0 + ) Конкретно, есть таблица значений. Полученная на сервере, как её без проблем и ошибок передать на клиент ?

   Галахад

2 — 03.10.20 — 07:36

ТаблицаЗначений

Доступность:

Сервер, толстый клиент, внешнее соединение.

   ДенисЧ

3 — 03.10.20 — 07:40

Посмотри направо. Там стенка есть…

   TormozIT

4 — 03.10.20 — 09:11

Пересадить всех на толстый клиент, либо себя заставить пользоваться реквизитом формы.

   hhhh

5 — 03.10.20 — 09:15

(1) сделай реквизит формы типа ТаблицаЗначений. И его заполняй. Тогда не надо будет передавать.

   H A D G E H O G s

6 — 03.10.20 — 10:30

(0) Не передавать таблицу на клиент.

   H A D G E H O G s

7 — 03.10.20 — 10:31

(4) хороший план, надежный как китайские часы.

   Стаканов

8 — 03.10.20 — 10:38

(0) Да передай в виде массива структур :)))

   Gbpltw

9 — 03.10.20 — 11:04

«ЗначениеВФайл()», «ЗначениеИзФайла()»

   Gbpltw

10 — 03.10.20 — 11:04

бгг

   PR

11 — 03.10.20 — 11:09

(9) LOL

   Ненавижу 1С

12 — 03.10.20 — 11:40

Зачем?

   rphosts

13 — 03.10.20 — 11:53

посмотри интервью Чистова — там этот вопрос обсуждался

   hhhh

14 — 03.10.20 — 14:17

можно еще Сериализовать — Десериализовать

   jsmith82

15 — 03.10.20 — 14:20

1. ОбщегоНазначения.ТаблицаЗначенийВМассив

2. Можно коллекцию создать в качестве реквизита формы и заполнять её, если предполагается манипуляция на клиенте, например

   NIGHTHUNTER

16 — 05.10.20 — 05:39

Создал массив, создал структуру с таблицой значений, поместил ее в массив, почему не могу передать ее на клиент?

    Запрос.УстановитьПараметр(«НачДата», Период.ДатаНачала);

    Запрос.УстановитьПараметр(«КонДата», КонецДня(Период.ДатаОкончания));

    Результат = Запрос.Выполнить();

    Если Не Результат.Пустой() Тогда

        ПолученнаяТзРТУ = Результат.Выгрузить();

        СТРУКТ.Вставить(«ТзРТУ», ПолученнаяТзРТУ);

        МАСС.Добавить(СТРУКТ);

        Возврат МАСС;

    КонецЕсли;

Возврат 0;    

КонецФункции

   NIGHTHUNTER

17 — 05.10.20 — 05:44

похоже нешльзя таблицу значений передавать вообще

   Провинциальный 1сник

18 — 05.10.20 — 05:53

(17) Как можно передать ТЗ на клиент, если на клиенте не поддерживается такой тип данных? Только изобразить её в виде, который клиент понимает. Обычно делают массив структур.

   NIGHTHUNTER

19 — 05.10.20 — 06:02

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

А как можно попроще сделать?

Если я создам таблицу как реквизит, ее тоже не получается заполнять ((((

   NIGHTHUNTER

20 — 05.10.20 — 06:22

изменил на &НаСервере где не работало

но что таблицу значений больше не буду пробовать передавать с клиента на сервер понял

то есть нужно все формировать в массив структур и передавать, и так же обрабатывать

какие есть исчерпывающие варианты?

1. массив структур

2. создать таблицу как реквизит формы, сделал, но не получилось, я ее в правом окне создавал

3. какие ещё точно варианты? наверное не делать этого вообще !!!!! Зачем я вообще с этим связываюсь не понятно! Изи есть моменты где без этого не обойтись?

тут я просто сменил на сервер и все, не хочу я возиться ни с чем этим пока .

   hhhh

21 — 05.10.20 — 06:54

(19) заполняй методом Загрузить()

где-то так

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

   NIGHTHUNTER

22 — 05.10.20 — 07:11

(21) Да я именно так пробовал. Создал ТаблицуЗначений у обработки в правом окне. Это же не реквизит формы? Или реквизит?

Реквизит в левом же. И делал как вы написали в (21) и отрабатывало. Только там не было таблицы. 2 столбца каких то. Я не понял что это и почему. Не стал разбираться.

Перенес все на сервер.

   nicxxx

23 — 05.10.20 — 07:13

передать ТЗ на клиент можно через ЗначениеВДанныеФормы()

получить ее же с клиента — ДанныеФормыВЗначение()

Книжка Хрусталевой есть? Там рассказано подробнее

   NIGHTHUNTER

24 — 05.10.20 — 08:41

почему за место таблицы там вот это http://joxi.ru/LmGO73GsJyDvZm ?

   ДенисЧ

25 — 05.10.20 — 08:42

(24) Потому что на клиенте смотришь

   ДенисЧ

26 — 05.10.20 — 08:43

(23) Книга? Издеваешься????

   NIGHTHUNTER

27 — 05.10.20 — 08:47

на сервере есть таблица значений, хочу ее вывести на клиенте

как это сделать кроме массива структур ?

так вот сделал

    ИдКоллекции = «ПоказатьТЗ»;

    ЗначениеВРеквизитФормы(ТаблицаЗначений,ИдКоллекции);

а как на клиенте получить?

   NIGHTHUNTER

28 — 05.10.20 — 08:58

так не получается, как нужно?

ДанныеФормыВЗначение(ПоказатьТЗ, Тип(«ТаблицаЗначений»))

   Evgenchik

29 — 05.10.20 — 09:00

Ты понимаешь, что на клиенте НЕТ таблицы значений?

Но есть реквизит формы Таблица значений. Ты можешь на сервере заполнить этот реквизит и с клиента обращаться к нему.

   NIGHTHUNTER

30 — 05.10.20 — 09:01

(23) пишет не определена такая процедура

   NIGHTHUNTER

31 — 05.10.20 — 09:02

(29) Я заполднил на сервере, но там вот что http://joxi.ru/LmGO73GsJyDvZm

как мне на клиенте получить данные этой таблицы значений? http://joxi.ru/5mdKGW5uex054r

   Василий Алибабаевич

32 — 05.10.20 — 09:04

(31) В ПоказатьТЗ колонки добавить не пробовал?

   VladZ

33 — 05.10.20 — 09:04

(31) Структура ТЗ фиксированная? Опиши сразу структуру.

Вытащи свою  ПоказатьТЗ на форму.

   del123

34 — 05.10.20 — 09:09

(32) Там не то что показать, там, скорее всего, колонок даже нет в реквизите таблицы значений

   NIGHTHUNTER

35 — 05.10.20 — 09:11

(32) Там без колонок

   Evgenchik

36 — 05.10.20 — 09:11

   Garykom

37 — 05.10.20 — 09:14

   Василий Алибабаевич

38 — 05.10.20 — 09:17

(35) Стесняюсь спросить — а нафига она такая (без колонок) нужна?

   NIGHTHUNTER

39 — 05.10.20 — 09:18

(38) стремился к динамичности, сейчас займусь колонками

   МимохожийОднако

40 — 05.10.20 — 09:25

(39) «стремился к динамичности»-поясни

   nicxxx

41 — 05.10.20 — 09:26

(30) Она доступна в серверных методах формы, т.е. тех, которые предваряются аннотацией &НаСервере.

Надо рассказывать про  то, что форма живет сразу в двух местах, на клиенте и сервере?

   Evgenchik

42 — 05.10.20 — 09:27

(40) Он хотел сформировать ТЗ на сервере с произвольными колонками.

(41) Он только открыл для себя использование тонкого клиента, не надо пока ему.

   NIGHTHUNTER

43 — 05.10.20 — 09:47

   Evgenchik

44 — 05.10.20 — 09:54

(43) А если тебе не скажут «ДА», то ты не станешь пробовать?

   МимохожийОднако

45 — 05.10.20 — 09:55

(43) а на форме это будет не таблица значений и коллекция

   H A D G E H O G s

46 — 05.10.20 — 10:03

Епстать, какой ты автор тяжелый.

1) таблица значений в тонком клиенте есть, но она недоступна простым человекам.

2) передача таблицы значений с сервера на клиент и обратно не поддерживается просто потому, что по концепции 1С(спорной), все манипуляции с данными ты должен проводить на сервере

3) реквизит на форме, который тебе так советуют «специлисты» служит только для Порционного отображения, он подтаскивает данные с сервера порционно, по 45 строк и, в случае большого количества данных, во первых, замучит сервер, а, во вторых, устанет позиционироваться при каждом серверном вызове в таблице значений.

  

NIGHTHUNTER

47 — 05.10.20 — 10:03

(44) я сейчас это делаю

Через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр

&НаКлиенте

Процедура ПолучитьТаблицуНаСервер(Команд а)

ТЗВСтроке = ПолучитьТЗНаСервере();

ТЗ = ЗначениеИзСтрокиВнутр(ТЗВСтроке);

КонецПроцедуры

// Функция получает данные на сервере

&НаСервере

Функция ПолучитьТЗНаСервере()

// Для примера сформируем ТЗ с данными

ТЗ = ЗаполнитьТЗДанными();

Возврат ЗначениеВСтрокуВнутр(ТЗ);

КонецФункции

Через реквизит Формы

// Создаем реквизит формы «ВремТабЗнач» с типом данных: Таблица значений

// Ревкизит будет использоваться для передачи данных с сервера на клиент.

&НаСервере

Функция ПолучитьТЧ(ОбъектСсылка,ИмяТЧ)

ЗначениеОбъекта = ОбъектСсылка.ПолучитьОбъект();

ТабРез = ЗначениеОбъекта[ИмяТЧ].выгрузить();

МассивДобавляемыхРеквизитов = Новый Массив;

МассивУдаляемыхРеквизитов = Новый Массив;

МассивКолонок = Новый Массив;

ИдКоллекции=»ВремТабЗнач»;

КоллФормы=РеквизитФормыВЗначение(ИдКоллекции);

Для каждого ТекКол из КоллФормы.Колонки Цикл

МассивУдаляемыхРеквизитов.Добавить(ИдКоллекции+».»+ТекКол.Имя);

КонецЦикла;

Для каждого ТекКол из ТабРез.Колонки Цикл

МассивДобавляемыхРеквизитов.Добавить(

Новый РеквизитФормы(ТекКол.Имя,ТекКол.ТипЗначения,ИдКоллекции));

МассивКолонок.Добавить(ТекКол.Имя);

КонецЦикла;

// Добавим новые, удалим старые колонки

ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивУдаляемыхРеквизитов);

// Поместим значение в реквизит формы

ЗначениеВРеквизитФормы(ТабРез,ИдКоллекции);

// вернем массив колонок в обрабатываемой ТЗ, например для более простого перебора

Возврат МассивКолонок;

КонецФункции

Через Временное хранилище

АдресХранилища = ПоместитьВоВременноеХранилище(МассивДанных,ЭтаФорма.УникальныйИдентификатор);

ПротоколПереноса = ПолучитьИзВременногоХранилища(АдресХранилища);

Через обычный возврат

&НаКлиенте

Процедура ПолучитьТаблицуНаСервер(Команда)

ТЗ = ЗаполнитьТЗДанными();

КонецПроцедуры

//Функция заполняет ТЗ

&НаСервере

Функция ЗаполнитьТЗДанными()

ТЗ = Новый ТаблицаЗначений;

ТЗ.Колонки.Добавить(«Поле1»);

ТЗ.Колонки.Добавить(«Поле2»);

ТЗ.Колонки.Добавить(«Поле3»);

ТЗ.Колонки.Добавить(«Поле4»);

ТЗ.Колонки.Добавить(«Поле5»);

Для i = 1 По 3 Цикл

НоваяСтр = ТЗ.Добавить();

НоваяСтр.Поле1 = i;

НоваяСтр.Поле2 = 2*i;

НоваяСтр.Поле3 = 3*i;

НоваяСтр.Поле4 = 4*i;

НоваяСтр.Поле5 = 5*i;

КонецЦикла;

Возврат ТЗ;

КонецФункции

Понравилась статья? Поделить с друзьями:
  • Техосмотр в соколе станционный переулок часы работы
  • Таймер для ограничения времени работы на компьютере
  • Тимбилдинг что это такое простыми словами в бизнесе
  • Таймыр управляющая компания фокинский район телефон
  • Тинькофф банк как посмотреть реквизиты своего счета