Выгрузка Таблицы значений в Объект Таблица Значений на форме обработки (для передачи сервер — клиент)

Передача данных из Таблицы значений на сервере в объект Таблица значений на обработке.
&НаСервере Процедура ЗаполнитьНаСервере() // Вставить содержимое обработчика. Запрос= новый запрос; Запрос.Текст="ВЫБРАТЬ | ОстаткиНоменклатурыОстатки.Номеклатура КАК Номеклатура, | ОстаткиНоменклатурыОстатки.КоличестовОстаток КАК КоличестовОстаток, | ОстаткиНоменклатурыОстатки.СуммаОстаток КАК СуммаОстаток |ИЗ | РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки"; //выборка=запрос.Выполнить().Выбрать(); //создаем ТаблицуЗначений ТЗ ТЗ=новый ТаблицаЗначений; //Выгружаем Результат Запроса в Таблицу Значений ТЗ ТЗ=запрос.Выполнить().Выгрузить(); //создаем ТаблицуЗначений ТЗрез ТЗрез=новый ТаблицаЗначений; //в ТаблицуЗначений ТЗрез выгружаем данные с формы ТЗрез=данныеформывзначение(Объект.Результат,Тип("ТаблицаЗначений")); //В ТаблицуЗначений ТЗрез сохраняем ТЗ ТЗрез=ТЗ; //Записываем значения Таблицы ТЗрез в объект на форме. ЗначениеВданныеФормы(ТЗрез,объект.Результат); //данныевреквизитформы(Тзрез,"Результат0"); КонецПроцедуры
&НаСервере Процедура ЗаполнитьНаСервере() // Вставить содержимое обработчика. Запрос= новый запрос; Запрос.Текст="ВЫБРАТЬ | ОстаткиНоменклатурыОстатки.Номеклатура КАК Номеклатура, | ОстаткиНоменклатурыОстатки.КоличестовОстаток КАК КоличестовОстаток, | ОстаткиНоменклатурыОстатки.СуммаОстаток КАК СуммаОстаток |ИЗ | РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки"; //выборка=запрос.Выполнить().Выбрать(); //создаем ТаблицуЗначений ТЗ ТЗ=новый ТаблицаЗначений; //Выгружаем Результат Запроса в Таблицу Значений ТЗ ТЗ=запрос.Выполнить().Выгрузить(); //создаем ТаблицуЗначений ТЗрез ТЗрез=новый ТаблицаЗначений; //в ТаблицуЗначений ТЗрез выгружаем данные с формы ТЗрез=данныеформывзначение(Объект.Результат,Тип("ТаблицаЗначений")); //В ТаблицуЗначений ТЗрез сохраняем ТЗ ТЗрез=ТЗ; //Записываем значения Таблицы ТЗрез в объект на форме. ЗначениеВданныеФормы(ТЗрез,объект.Результат); //данныевреквизитформы(Тзрез,"Результат0"); КонецПроцедуры
4 4 0 0 2 Скопировано.
3 года назад
Недостаточно рейтинга для добавления отрицательного голоса. Шаблон будет скрыт из ваших результатов поиска.
Переменной ТЗ присвоено значение, но оно нигде не используется Переменной ТЗрез присвоено значение, но оно нигде не используется Переменной ТЗрез присвоено значение, но оно нигде не используется Орфографическая ошибка в Номеклатура (найдено 2): Номеклатура Орфографическая ошибка в КоличестовОстаток (найдено 2): Количестов Орфографическая ошибка в данныеформывзначение: данныеформывзначение Орфографическая ошибка в данныевреквизитформы: данныевреквизитформы Орфографическая ошибка в Тзрез: Тзрез
Таблица значений 1С
Таблица значений 1С — это универсальная коллекция значений, которую разработчик может использовать при программной разработке для реализации своих алгоритмов. По сути, таблица значений 1С представляет собой динамический набор значений, имеющих колонки и столбцы.
Работая в конфигураторе 1С, программист может создать таблицу значений, как при помощи кода, так и интерактивно на форме.
Таблица значений 1С на управляемой форме
На любой управляемой форме 1С 8.3 разработчик может разместить таблицу значений в виде реквизита формы. Для этого нужно создать новый реквизит и задать ему тип «Таблица значений».

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

Но если у Вас нет задачи, чтобы пользователь как-то интерактивно работал с таблицей значений на форме, то совсем необязательно создавать реквизит формы с типом таблица значений. Разработчик может работать с таблицей значений из встроенного языка программирования 1С.
Программное создание таблицы значений 1С
Вы можете создать таблицу значений в любом программном модуле при помощи оператора Новый.
ТЗ = Новый ТаблицаЗначений ;
Эта таблица значений будет существовать в том контексте, в котором Вы её создали: если Вы создали её в процедуре или функции, то она будет существовать до того момента пока выполняется эта процедура или функция. Если Вы её создали в программном модуле объекта, то таблица значений будет существовать пока выполняется обращение к этому объекту.
Но имейте в виду, что если вы создали таблицу значений в процедуре или функции программного модуля управляемой формы 1С 8.3, то на клиенте (под директивой &НаКлиенте) код будет выполняться только в толстом клиенте. В тонком клиенте и на веб-клиенте нельзя работать с таблицей значений. Возникнет ошибка!

Но, на тонком и веб-клиенте нельзя работать только с таблицей значений 1С, которая создана программно (с помощью оператора Новый). Если же таблица значений создана на форме в виде реквизита, то обращаться к этому реквизиту можно в любом контексте, платформа преобразует её в объект ДанныеФормыКоллекция.
Как я уже говорил, вся информация в таблице значений в платформе 1С 8.3 разбита на колонки и на строки, причем каждая колонка таблицы должна иметь свое уникальное название. В том случае, если таблица выводится на форму посредством элемента Таблица, то у данного элемента могут быть все колонки, которые имеются у соответствующего реквизита с типом таблица значений с соответствующими именами. Причем количество колонок в Таблице на форме может быть меньше, чем непосредственно в таблице значений, то есть не все колонки из таблицы значений нужно отображать в таблице.
Нет никаких ограничений на количество колонок. Количество колонок, как правило, всегда фиксировано и задается разработчиком на этапе создания нужного функционала, а количество строк переменно.
У таблиц значений есть ряд полезных методов, которые позволяют сортировать таблицу по определенным колонкам, сворачивать, получать итог по конкретной колонке, осуществлять выборку части строк по определенным параметрам и многое другое.
О работе с колонками и строками в таблицах значений 1С читайте в статьях по ссылкам:
Статьи о других универсальных коллекциях значений в 1С
Более подробно о работе с таблицами значений и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
One Reply to “Таблица значений 1С”
Евгения :
Добрый день, Ильяз! хотела поддержать проект и не смогла оплатить с Карты Маэстро.
М.б. другие варианты.
Спасибо за проект!
1С 8.3 Выводим на форму Таблицу значений — Программист 1С Минск. Автоматизация бизнеса.

ПРИМЕРЫ КОДА 1С
Перейти в основной раздел:

При открытии формы (создании на сервере) выводим Таблицу значений (&НаСервере) в 1С 8.3:
&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )
// Создаем таблицу значений
ТЗ = Новый ТаблицаЗначений ;
// Добавляем колонки в таблицу значений
ТЗ . Колонки . Добавить ( «Овощь» );
ТЗ . Колонки . Добавить ( «Цвет» );
ТЗ . Колонки . Добавить ( «Вкус» );
// Добавляем строки в таблицу значений
Стр = ТЗ . Добавить ();
Стр . Овощь = «Дыня» ;
Стр . Цвет = «Желтая» ;
Стр . Вкус = «Сладкая» ;
Стр = ТЗ . Добавить ();
Стр . Овощь = «Лук» ;
Стр . Цвет = «Зеленый» ;
Стр . Вкус = «Горький» ;
Стр = ТЗ . Добавить ();
Стр . Овощь = «Помидор» ;
Стр . Цвет = «Красный» ;
Стр . Вкус = «Сочный» ;
// ТабРеквизит — таблица значений на форме
ЗначениеВРеквизитФормы ( ТЗ , «ТабРеквизит» );
Программный вывод таблицы значений в таблицу на форму:
Пример вызова: ПрограммныйВыводТаблицыЗначенийВТаблицуНаФорму ( МодульОбъкта . ТЗИзExcel , «ТЗИзExcel» , Истина, Истина);
// Процедура — Программный вывод таблицы значений в таблицу на форму
//
// Параметры:
// ТаблицаЗначенийДляВывода — ТаблицаЗначений — ТаблицаЗначений для вывода на форму
// ИмяРеквизитаФормы — Строка — Наименование реквизита формы ДанныеФормыКоллекция
// ИспользованиеКолонкиОтметка — Булево — Вывод колокни отметка
// ТолькоКнопкаОткрытия — Булево — Отображение кнопок
//
&НаСервере
Процедура ПрограммныйВыводТаблицыЗначенийВТаблицуНаФорму ( ТаблицаЗначенийДляВывода , ИмяРеквизитаФормы , ИспользованиеКолонкиОтметка = Ложь, ТолькоКнопкаОткрытия = Истина)
// Функционал данного механизма служит для программного вывода «Таблицы значений»
// в реквизит управляемой формы с типом «ДанныеФормыКоллекция». Может быть полезен
// в задачах, где состав колонок выгружаемой таблицы значений может меняться.
// Механизм предусматривает работу как с реквизитом объекта, так и с реквизитом формы.
// Также реализована возможность быстрого добавления колонки «Отметка» и настройки доступности кнопок полей.
// Процедура должна быть размещена в модуле формы.
Если ТипЗнч ( ТаблицаЗначенийДляВывода ) = Тип ( «ТаблицаЗначений» ) Тогда
Если ТипЗнч ( ИмяРеквизитаФормы ) = Тип ( «Строка» ) Тогда
// Опрелеляем является заполняемый реквизит, реквизитом объекта или реквизитом формы
Если Объект . Свойство ( ИмяРеквизитаФормы ) И ТипЗнч ( Объект [ ИмяРеквизитаФормы ]) = Тип ( «ДанныеФормыКоллекция» ) Тогда
ПутьКДаннымФормыКоллекция = «Объект.» + ИмяРеквизитаФормы ;
ОбъектДляОтображенияНаФорме = РеквизитФормыВЗначение ( «Объект.» + ИмяРеквизитаФормы );
ЭтоРеквизитОбъекта = Истина;
ИначеЕсли ТипЗнч ( ЭтаФорма [ ИмяРеквизитаФормы ]) = Тип ( «ДанныеФормыКоллекция» ) Тогда
ПутьКДаннымФормыКоллекция = ИмяРеквизитаФормы ;
ОбъектДляОтображенияНаФорме = РеквизитФормыВЗначение ( ИмяРеквизитаФормы , Тип ( «ТаблицаЗначений» ));
ЭтоРеквизитОбъекта = Ложь;
КонецЕсли;
КонецЕсли;
МассивУдаляемыхРеквизитов = Новый Массив ;
МассивДобавляемыхРеквизитов = Новый Массив ;
МассивИсключаемыхРеквизитов = Новый Массив ;
// Формируем массив колонок для удаления
Для Каждого Колонка Из ОбъектДляОтображенияНаФорме . Колонки Цикл
МассивУдаляемыхРеквизитов . Добавить ( ПутьКДаннымФормыКоллекция + «.» + Колонка . Имя );
КонецЦикла;
// Удаляем колонки с формы
Для Каждого Колонка Из ОбъектДляОтображенияНаФорме . Колонки Цикл
ЭлементКолонки = Элементы . Найти ( ИмяРеквизитаФормы + Колонка . Имя );
Если НЕ ЭлементКолонки = Неопределено Тогда
Элементы . Удалить ( ЭлементКолонки );
КонецЕсли;
КонецЦикла;
// Добавляем колонку «Отметка»
Если ИспользованиеКолонкиОтметка Тогда
НоваяКолонка = Новый РеквизитФормы ( «Отметка» , Новый ОписаниеТипов ( «Булево» ), ПутьКДаннымФормыКоллекция );
МассивДобавляемыхРеквизитов . Добавить ( НоваяКолонка );
КонецЕсли;
// Формируем массив колонок из таблицы значений
Для Каждого Колонка Из ТаблицаЗначенийДляВывода . Колонки Цикл
Если Колонка . ТипЗначения . Типы (). Найти ( Тип ( «Тип» )) = Неопределено Тогда
НоваяКолонка = Новый РеквизитФормы ( Колонка . Имя , Новый ОписаниеТипов ( Колонка . ТипЗначения . Типы ()), ПутьКДаннымФормыКоллекция );
МассивДобавляемыхРеквизитов . Добавить ( НоваяКолонка );
Иначе
Сообщить ( «Колонка » + Строка ( Колонка . Имя ) + » с типом: не может быть выгружена» );
МассивИсключаемыхРеквизитов . Добавить ( Колонка );
КонецЕсли;
КонецЦикла;
// Обновляем реквизиты формы
ИзменитьРеквизиты ( МассивДобавляемыхРеквизитов , МассивУдаляемыхРеквизитов );
//Создаем элементы на форме для отображения колонок
ЭлементТЗ = Элементы [ ИмяРеквизитаФормы ];
// Добавляем колонку «Отметка»
Если ИспользованиеКолонкиОтметка Тогда
НовыйЭлементФормы = Элементы . Добавить ( ИмяРеквизитаФормы + «Отметка» , Тип ( «ПолеФормы» ), ЭлементТЗ );
НовыйЭлементФормы . Вид = ВидПоляФормы . ПолеФлажка ;
НовыйЭлементФормы . ПутьКДанным = ПутьКДаннымФормыКоллекция + «.» + «Отметка» ;
НовыйЭлементФормы . РежимРедактирования = РежимРедактированияКолонки . ВходПриВводе ;
КонецЕсли;
// Добавляем колонки из таблицы
Для Каждого Колонка Из ТаблицаЗначенийДляВывода . Колонки Цикл
Если МассивИсключаемыхРеквизитов . Найти ( Колонка ) = Неопределено Тогда
НовыйЭлементФормы = Элементы . Добавить ( ИмяРеквизитаФормы + Колонка . Имя , Тип ( «ПолеФормы» ), ЭлементТЗ );
НовыйЭлементФормы . Вид = ВидПоляФормы . ПолеВвода ;
// Устанавливаем доступность кнопок
Если ТолькоКнопкаОткрытия Тогда
НовыйЭлементФормы . РедактированиеТекста = Ложь;
НовыйЭлементФормы . ВыбиратьТип = Ложь;
НовыйЭлементФормы . КнопкаВыбора = Ложь;
НовыйЭлементФормы . КнопкаВыпадающегоСписка = Ложь;
НовыйЭлементФормы . КнопкаОткрытия = Истина;
НовыйЭлементФормы . КнопкаОчистки = Ложь;
Иначе
НовыйЭлементФормы . РедактированиеТекста = Истина;
НовыйЭлементФормы . ВыбиратьТип = Истина;
НовыйЭлементФормы . КнопкаВыбора = Истина;
НовыйЭлементФормы . КнопкаВыпадающегоСписка = Истина;
НовыйЭлементФормы . КнопкаОткрытия = Истина;
НовыйЭлементФормы . КнопкаОчистки = Истина;
КонецЕсли;
НовыйЭлементФормы . КнопкаРегулирования = Ложь;
НовыйЭлементФормы . КнопкаСоздания = Ложь;
НовыйЭлементФормы . КнопкаСпискаВыбора = Ложь;
НовыйЭлементФормы . ИсторияВыбораПриВводе = ИсторияВыбораПриВводе . НеИспользовать ;
НовыйЭлементФормы . БыстрыйВыбор = Ложь;
НовыйЭлементФормы . ПутьКДанным = ПутьКДаннымФормыКоллекция + «.» + Колонка . Имя ;
КонецЕсли;
КонецЦикла;
// Загружаем таблицу значений в данные формы коллекцию
Если ЭтоРеквизитОбъекта Тогда
Объект [ ИмяРеквизитаФормы ]. Загрузить ( ТаблицаЗначенийДляВывода );
Иначе
ЭтаФорма [ ИмяРеквизитаФормы ]. Загрузить ( ТаблицаЗначенийДляВывода );
КонецЕсли;
Иначе
Сообщить ( «Выводить можно только таблицу значений» );
КонецЕсли;
Исключение
ОбщегоНазначенияКлиентСервер . СообщитьПользователю ( ОписаниеОшибки ());
КонецПопытки;
Вывод таблицы значений в табличный документ
Периодически возникает потребность показать пользователю таблицу значений и в большинстве случаев нет необходимости делать отдельный макет.
Такой вывод можно реализовать с помощью ПостроителяОтчетов быстро и очень просто.
// Возвращает табличный документ на основании таблицы значений // // Параметры: // ДанныеВТабличныйДокумент - ТаблицаЗначений // &НаСервереБезКонтекста Функция ДанныеТаблицыЗначенийВТабличныйДокумент(ДанныеВТабличныйДокумент) ТабличныйДокумент = Новый ТабличныйДокумент; Построитель = Новый ПостроительОтчета; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДанныеВТабличныйДокумент); Построитель.Вывести(ТабличныйДокумент); Возврат ТабличныйДокумент; КонецФункции // ДанныеТаблицыЗначенийВТабличныйДокумент()
После того, как табличный документ был получен, мы можем показать его пользователю:
ТабличныйДокумент = ДанныеТаблицыЗначенийВТабличныйДокумент(ТаблицаЗначенийДляВывода); ТабличныйДокумент.Показать("Содержимое таблицы значений");
Похожие записи
- Позиция элемента относительно ближайшего родителя
- Сброс паролей в 1С 8.1 (в файловой версии)
- .keypress() – обработчик ввода символа с клавиатуры
- Обработчик “прокрутки” элементов документа .scroll()