Как передать таблицу значений с сервера на клиент? Многие спрашиваю, как передать тз с сервера на клиент - ниже несколько вариантов как это можно реализовать:
Через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр
Код 1C v 8.3 &НаКлиенте
Процедура ПолучитьТаблицу НаСервер(Команд а)
ТЗВСтроке = ПолучитьТЗНаСер вере( ) ;
ТЗ = ЗначениеИзСтрокиВнутр( ТЗВСтрок е) ;
КонецПроцедуры
&НаСервере
Функция ПолучитьТЗНаСер вере()
ТЗ = ЗаполнитьТЗДанными( ) ;
Возврат ЗначениеВСтрокуВнутр( ТЗ) ;
КонецФункции
Через реквизит Формы
Код 1C v 8.3
&НаСервере
Функция ПолучитьТЧ(ОбъектСсылка,ИмяТЧ)
ЗначениеОбъекта = ОбъектСсылка. ПолучитьОбъект( ) ;
ТабРез = ЗначениеОбъекта[ИмяТЧ]. выгрузить( ) ;
МассивДобавляемыхРеквизитов = Новый Массив;
МассивУдаляемыхРеквизитов = Новый Массив;
МассивКолонок = Новый Массив;
ИдКоллекции= "ВремТабЗнач" ;
КоллФормы= РеквизитФормыВЗначение( ИдКоллекции) ;
Для каждого ТекКол из КоллФормы. Колонки Цикл
МассивУдаляемыхРеквизитов. Добавить( ИдКоллекции+ "." + ТекКол. Имя) ;
КонецЦикла ;
Для каждого ТекКол из ТабРез. Колонки Цикл
МассивДобавляемыхРеквизитов. Добавить(
Новый РеквизитФормы( ТекКол. Имя, ТекКол. ТипЗначения, ИдКоллекции) ) ;
МассивКолонок. Добавить( ТекКол. Имя) ;
КонецЦикла ;
ЭтаФорма. ИзменитьРеквизиты( МассивДобавляемыхРеквизитов, МассивУдаляемыхРеквизитов) ;
ЗначениеВРеквизитФормы( ТабРез, ИдКоллекции) ;
Возврат МассивКолонок;
КонецФункции
Через Временное хранилище
Код 1C v 8.3
АдресХранилища = ПоместитьВоВременноеХранилище( МассивДанных, ЭтаФорма. УникальныйИдентификатор) ;
ПротоколПереноса = ПолучитьИзВременногоХранилища( АдресХранилища) ;
Через обычный возврат
Код 1C v 8.2 УП &НаКлиенте
Процедура ПолучитьТаблицуНаСервер(Команда)
ТЗ = ЗаполнитьТЗДанными( ) ;
КонецПроцедуры
&НаСервере
Функция ЗаполнитьТЗДанными()
ТЗ = Новый ТаблицаЗначений;
ТЗ. Колонки. Добавить( "Поле1" ) ;
ТЗ. Колонки. Добавить( "Поле2" ) ;
ТЗ. Колонки. Добавить( "Поле3" ) ;
ТЗ. Колонки. Добавить( "Поле4" ) ;
ТЗ. Колонки. Добавить( "Поле5" ) ;
Для i = 1 По 3 Цикл
НоваяСтр = ТЗ. Добавить( ) ;
НоваяСтр. Поле1 = i;
НоваяСтр. Поле2 = 2 * i;
НоваяСтр. Поле3 = 3 * i;
НоваяСтр. Поле4 = 4 * i;
НоваяСтр. Поле5 = 5 * i;
КонецЦикла ;
Возврат ТЗ;
КонецФункции
Пробуйте и пишите в комментариях как делаете это Вы
Категория:
Управляемое приложение, Тонкий клиент Как заменить значение ресурса регистра сведений – универсальная процедура В том случае, когда в каком-то регистре сведений нужно заменить несколько видов значений какого-то конкретного ресурса на заданное значение, лучше использовать вот такую универсальную процедуру (при ее вызове достаточно подставить название регистра, название ресурса и передать старые заменяемые значения и новое, на которое они заменяются):
Код 1C v 8.х // Процедура выполняет в независимом регистре сведений "ИмяРегистраСведений" замену
// всех значений ресурса "ИмяИзменяемогоРесурса", // соответствующих массиву "МассивСтарыхЗначенийРесурса"
// на новое значение ресурса "НовоеЗначениеРесурса".
// В запрос можно передать дополнительное условие, ограничивающее выборку данных из регистра "ДопУсловие"
Процедура ЗаменаРесурсаНезависимогоРегистра(ИмяРегистраСведений, ИмяИзменяемогоРесурса, МассивСтарыхЗначенийРесурса, НовоеЗначениеРесурса, ДопУсловие = "")
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивСтарыхЗначенийИзмерения", МассивСтарыхЗначенийРесурса);
Запрос.УстановитьПараметр("НовоеЗначениеИзмерения", НовоеЗначениеРесурса);
// Подготовим таблицу значений для позиционирования (установки отбора) на нужных записях регистра:
Запрос.Текст =
"ВЫБРАТЬ *
|ИЗ
| РегистрСведений." + ИмяРегистраСведений + " КАК Регистр
|ГДЕ
| Регистр." + ИмяИзменяемогоРесурса + " В (&МассивСтарыхЗначенийИзмерения)" + ДопУсловие;
Сообщить("1 Приступаем к выполнению запроса к данным регистра """ + ИмяРегистраСведений + """ - " + ТекущаяДата());
ТаблицаЗаполнения = Запрос.Выполнить().Выгрузить();
Сообщить("2 Приступаем к обработке результата запроса к регистру """ + ИмяРегистраСведений + """ - " + ТекущаяДата());
// заполнение строки progress bar
ЭлементыФормы.Индикатор2.Значение = 0; // обнуляем, чтобы при повторном запуске статусбар сбросился в 0
ЭлементыФормы.Индикатор2.МаксимальноеЗначение = ТаблицаЗаполнения.Количество(); // задаем значение для 100%
// для каждой строки таблицы значений установим отбор и перезапишем регистр
Для Каждого СтрокаЗаполнения Из ТаблицаЗаполнения Цикл
ЭлементыФормы.Индикатор2.Значение = ЭлементыФормы.Индикатор2.Значение + 1; //указываем прирост внутри цикла
// попробуем через СоздатьМенеджерЗаписи()
текЗапись = РегистрыСведений[ИмяРегистраСведений].СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(текЗапись, СтрокаЗаполнения);
// прочитаем эту запись (внимание, эта команда обязательна, иначе можно ненароком очистить весь регистр!)
текЗапись.Прочитать();
Если текЗапись.Выбран() Тогда // убедились, что спозиционироваться удалось
// сообщаем, что именно и на какое значение нужно изменить в регистре
текЗапись[ИмяИзменяемогоРесурса] = НовоеЗначениеРесурса;
// записываем изменения в регистре
текЗапись.Записать();
Иначе // спозиционироваться не удалось, можно выходить
Сообщить("Возникла проблема определения " + НовоеЗначениеРесурса + " в регистре через менеджер записи " + НовоеЗначениеРесурса);
КонецЕсли;
КонецЦикла;
Сообщить("3 Окончание исправления регистра """ + ИмяРегистраСведений + """ - " + ТекущаяДата());
КонецПроцедуры // ЗаменаИзмеренияНезависимогоРегистра()
Категория:
Регистры сведений Функция выполняет пропорциональное распределение суммы в соответствии с заданными коэффициентами Код 1C v 8.х
// Функция выполняет пропорциональное распределение суммы в соответствии с заданными коэффициентами распределения
//
// Параметры:
// ИсхСумма - распределяемая сумма
// МассивКоэф - массив коэффициентов распределения
// Точность - точность округления при распределении. Необязателен.
//
// Возврат:
// МассивСумм - массив размерностью равный массиву коэффициентов, содержит
// суммы в соответствии с весом коэффициента (из массива коэффициентов)
// В случае если распределить не удалось (сумма = 0, кол-во коэф. = 0,
// или суммарный вес коэф. = 0), тогда возвращается значение Неопределено
//
Функция РаспределитьПропорционально(Знач ИсхСумма, МассивКоэф, Знач Точность = 2) Экспорт
Если МассивКоэф.Количество() = 0 Или ИсхСумма = 0 Или ИсхСумма = Null Тогда
Возврат Неопределено;
КонецЕсли;
ИндексМакс = 0;
МаксЗнач = 0;
РаспрСумма = 0;
СуммаКоэф = 0;
Для К = 0 По МассивКоэф.Количество() - 1 Цикл
МодульЧисла = ?(МассивКоэф[К] > 0, МассивКоэф[К], - МассивКоэф[К]);
Если МаксЗнач < МодульЧисла Тогда
МаксЗнач = МодульЧисла;
ИндексМакс = К;
КонецЕсли;
СуммаКоэф = СуммаКоэф + МассивКоэф[К];
КонецЦикла;
Если СуммаКоэф = 0 Тогда
Возврат Неопределено;
КонецЕсли;
МассивСумм = Новый Массив(МассивКоэф.Количество());
Для К = 0 По МассивКоэф.Количество() - 1 Цикл
МассивСумм[К] = Окр(ИсхСумма * МассивКоэф[К] / СуммаКоэф, Точность, 1);
РаспрСумма = РаспрСумма + МассивСумм[К];
КонецЦикла;
// Погрешности округления отнесем на коэффиецент с максимальным весом
Если Не РаспрСумма = ИсхСумма Тогда
МассивСумм[ИндексМакс] = МассивСумм[ИндексМакс] + ИсхСумма - РаспрСумма;
КонецЕсли;
Возврат МассивСумм;
КонецФункции
Категория:
Работа с Числами