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

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

  • автор:

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

Добрый день, уважаемые коллеги !

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

Результат = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.ТЗ.Значение = Результат;
ЭлементыФормы.ТЗ.СоздатьКолонки();

Все выгружает , но как мне на форме выгрузить в созданные мной колонки с необходимым оформлением .

Мне нужно заполнить форму из Таблицы значений)

Может как то можно создать колонки вручную с необходимым офрмлением и потом циклом заполнить ? подскажите коллеги !

(1) Что значит в созданные тобой колонки?
Где они созданы? Что за оформление?
Конкретнее, пожалуйста.

1С 8.3 Динамический вывод Таблицы значений на форму — Программист 1С Минск. Автоматизация бизнеса.

1С 8.3 Динамический вывод Таблицы значений на форму

Данные > Примеры кода 1С > 1С 8.3 Таблица значений

ПРИМЕРЫ КОДА 1С

Перейти в основной раздел:

Выводим на форму Таблицу значений и очищаем предыдущую (структуру и данные) в 1С 8.3:

Процедура Вывести_ТЗ_в_Таблицу_на_форме ( ТЗ , ТабРеквизитФормы , ТабЭлементФормы = Неопределено) Экспорт

// Процедура позволяет выводить любое количество таблиц значений в таблицу формы
// (с различным количеством и названиями полей). При изменении выводимых данных –
// таблица на форме программно очищается и заменяется на новую с новым составом
// полей и данных соответствующей таблицы значений.

Если ТабЭлементФормы = Неопределено Тогда // проверка передан ли элемент формы
ТабЭлементФормы = ТабРеквизитФормы ;
КонецЕсли;

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

// Получаем данные (на которые элементы формы ссылаются)
// по добавленным ранее реквизитам и элементам формы
Для Каждого Элемент Из Элементы [ ТабЭлементФормы ]. ПодчиненныеЭлементы Цикл
Реквизиты_для_удаления . Добавить ( Элемент . ПутьКДанным );
Элементы_для_удаления . Добавить ( Элемент );
КонецЦикла;
// Удаляем элементы
Для Каждого УдалитьЭлемент Из Элементы_для_удаления Цикл
Элементы . Удалить ( УдалитьЭлемент );
КонецЦикла;

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

// Удаляем старые реквизиты и выводим новые реквизиты
ИзменитьРеквизиты ( Реквизиты_для_вывода , Реквизиты_для_удаления );

// Добавляем колонки из Таблицы значений
// в элементы ТабЭлементФормы (со ссылкой на колонки в ТабРеквизитФормы)
Для Каждого КолонкаТЗ Из ТЗ . Колонки Цикл
ЭлементТЗ = Элементы . Добавить ( ТабРеквизитФормы + «_» + КолонкаТЗ . Имя , Тип ( «ПолеФормы» ), Элементы [ ТабЭлементФормы ]);
ЭлементТЗ . Вид = ВидПоляФормы . ПолеНадписи ; //Или ПолеВвода, или что-то другое;
ЭлементТЗ . ПутьКДанным = ТабРеквизитФормы + «.» + КолонкаТЗ . Имя ;
КонецЦикла;

// В реквизит загружаем Таблицу значений
ЭтаФорма [ ТабРеквизитФормы ]. Загрузить ( ТЗ );

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

Добрый день, возникла такая проблема, необходимо программно вывести таблицу значений на управляемую форму, добавил на форму таблицуформы и прописал в ней путь к данным, но колонки в таблице формы не создались, хотел руками пробежать по полям таблицу значений, но не могу получить к ним доступ ни через объект, ни при помощи РеквизитФормыВЗначение, подскажите, как программно добавить колонки и указать в них путь к данным?

ТЗНаФорме = ТЗНаСервере;
весь сабж ни о чем
где код?
(0) Смотри уроки Гилева, там все подробно рассказывается

Пользователи-Табличная часть которую надо отобразить на форме в таблице формы ТаблицаПользователей

Объект.Пользователи имеет тип данные формы коллекция и не отображает состав поле табличной части

хоть ссылку на конкретный урок дайте
(4)Пользователи — я так думаю это ТЗ)
(8) а вот нифига

Еще раз
Пользователи — табличная часть документа
ТаблицаПользователей — таблица формы в которой ее надо отобразить
вопрос, как

проблема начинается в цикле, либо надо каким-то еще образом создать колонки в таблице формы, отображающие поля табличной части

где ТЗ? заявленная в сабже?
опечатался, нет тз, есть тч
(0)ЗначениеВДанныеФормы(Таб,Таблица);
(13) впредь, пожалуйста внимательнее
(14)На сервере
что есть таб в данном случае?
ну и что есть таблица соответственно
(17)Твоя Таблица Значений
(5)Базовый курс — 01 модуль — Общие механизмы платформы 1С Предприятие 8.x Версия 2 — Блок 130 — 137

но не понял, что это мне дало

(11)Таблица формы, это табличное поле?
(21)Покажи весь код
таблица формы это таблица формы

вот весь код, но на форме ничего не появилось

она сама истина ставится

не создаются у ТаблицаПользователей с помощью ЗначениеВДанныеФормы подчиненные элементы, потому и не отображается ничего

ап, вопрос в силе..

А встречный вопрос: а что табличную часть документа уже нельзя разместить на форме? Зачем извращаться?

чтобы обновлять проще, зачем же еще

собственно со своим вопросом разобрался, но появился другой, как в управляемой форме при записи записать ТЗ в ТЧ объекта?

(31) — что проще обновлять, если это отображение табличной части? — я не доезжаю до вашей степени мазохизма

(32) — Т=РеквизитФормыВЗначение(«Таб»). А дальше обычным образом (хоть загрузкой, хоть обходом. ). Естественно все на сервере

проще обновлять код, а не сравнивать формы каждый раз
(35) ну-ну — терзайте дальше. Лет через пяток дойдете до истины. Удачи

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

(0) не могу понять, причем тута таблица значений, как добавлять колонки в таблицу значений

ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить(ИмяКолонки); // прочитай про функцию добавить в СП.

Ты наверно хочешь программно добавить колонки в табличное поле на форме, я вас правильно понял?

(37) есть книга разработка управляемого интерфейса. там все описано.

тзКолонки = Новый ТаблицаЗначений(); //порядок, видимость и ширина колонок

тзКолонки.Колонки.Добавить(«Наименование»);
тзКолонки.Колонки.Добавить(«Ширина»);
тзКолонки.Колонки.Добавить(«Видимость»);

//считаем праметры колонок
Для каждого Колонка Из ЭлементыФормы.ТабличноеПоле1.Колонки Цикл
СтрокаТЗКолонок = тзКолонки.Добавить();
СтрокаТЗКолонок.Наименование = Колонка.Имя;
СтрокаТЗКолонок.Ширина = Колонка.Ширина;
СтрокаТЗКолонок.Видимость = Колонка.Видимость;

//добавляем новые колонки
Попытка
КолонкаТЗ = ТабличноеПоле1.Колонки.Добавить(«Колонка3»);
Исключение
//такая колонка уже есть
КонецПопытки;

//заполняем данными новую колонку
Сч = 0;
Для каждого СтрокаТЗ Из ТабличноеПоле1 Цикл
Сч = Сч + 1;
СтрокаТЗ[«Колонка3»] = «3.»+Сч;

ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
//ЭлементыФормы.ТабличноеПоле1.Данные = «ТабличноеПоле1»;
//ЭтаФорма.Обновить();
//ЭлементыФормы.ТабличноеПоле1.ОбновитьСтроки();
//ЭтаФорма.Обновить();

код не мой нашел в просторах интернета.

это все понятно, проблема в том, что все это в управляемых формах происходит
пробывал все делать на &НаСервереБезКонтекста или просто &НаСервере?
в управляемой форме вообще нет табличного поля, там таблица формы и методы другие

// программно создадим колонки на форме
ТипыРеквизита = Новый Массив;
ТипыРеквизита.Добавить(Тип(«Строка»));

ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита);

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

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

&НаСервере
Функция ПроверитьНаличиеРеквизита(ИмяРеквизита, Форма) Экспорт

Для каждого РеквизитФормы Из МассивРеквизитов Цикл
Если РеквизитФормы.Имя = ИмяРеквизита Тогда
Возврат Истина;
КонецЕсли;

&НаСервере
Процедура ДобавитьРеквизитТаблица(ИмяРеквизита, ТаблицаРеквизита, Форма) Экспорт

ТипРеквизита = Новый Массив;
ТипРеквизита.Добавить(Тип(«ТаблицаЗначений»));

ОписаниеТиповРеквизитов = Новый ОписаниеТипов(ТипРеквизита);

НовыйРеквизит = Новый РеквизитФормы(ИмяРеквизита,
ОписаниеТиповРеквизитов);

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

Для каждого КолонкаТаблицы Из ТаблицаРеквизита.Колонки Цикл

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

(37) — вообще-то загадками говорите вы: кроме того что вы хотите разместить таблицу в которой отображать данные табличной части документа — больше ничего. Возникает резонный вопрос: на кой это надо делать. Если хотите получать внятные ответы — удосуждесь внятно описать задачу. А так какие можно дать советы как сделать лучше. Пока только один: почитайте документацию и литературу — которой не мало в инете. И вы увидите что нужно и как делать

что непонятного-то
программно размещаю объекты на форме, чтобы при обновлении конфигурации сравнивать только модули форм, а не сами формы, вот и все, обычная практика насколько я знаю

размещаю объекты, которые сам добавил в типовые документы
в общем сейчас на форме отображается ТЧ, но почему-то строки пустые

(48) — в УФ — такая практика порочна. Размещая программно объекты вы сразу АВТОМАТОМ отключаете ОПТИМИЗАЦИЮ УФ. И как результат — форма становится работать тормознуто, а если данных много — то супер тормознуто. Обновление все равно придется делать ручками, проще по-новому закинуть табличную часть а форму повторно, чем реализовывать программную загрузку объектов

(49) — а если отображается ТЧ — то программировать ничего не надо — она записывается и считывается платформой. Если она пуста в базе — то и пуста на форме. Если вы ее хотите заполнить при открытии — то заполняйте в «ПриСозданииНаСервере» — вот и все

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

ТЧ сейчас не пуста, но при отображении на форме выводит пустые строки, делаю все, понятное дело, ПриСозданииНаСервере

(52) ну значит не буда пишите. Смотрите объекты к которым обращаетесь: если ТЧ то Объект.ТЧ, если Реквизиты формы — то РеквизитВЗначение() — изменение — ЗначениеВРеквизит(), либо доавление в Клиенте через НовСтр=ЭтаФорма.Элементы.ХХХ.Добавить(); НовСтр.Чтото=чемуто;

в общем код такой

ТЗПользователей = Новый РеквизитФормы(«ТЗПользователей», Новый ОписаниеТипов(«ТаблицаЗначений»), «», «Пользователи»);

МассивДобавляемыхРеквизитов = Новый Массив;
МассивДобавляемыхРеквизитов.Добавить(ТЗПользователей);

// создаем реквизиты
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(«Пользователь»,Новый ОписаниеТипов(«СправочникСсылка.Пользователи»),»ТЗПользователей»,»Пользователь»));

// пакетное создание и удаление
ИзменитьРеквизиты(ДобавляемыеРеквизиты);

// создаем элементы
Элемент = Элементы.Добавить(«Пользователь»,Тип(«ПолеФормы»),ТаблицаПользователей);
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.ПутьКДанным = «ТЗПользователей.Пользователь»;

видимо при создании ТЗ пользователей нужно как-то к ней подцепить колонку, чтобы при выполнении
ЗначениеВДанныеФормы(Док.Пользователи,ЭтаФорма.ТЗПользователей);

в нее записывался пользователь из ТЧ документа, но не знаю как это сделать

(54) 1 — зачем Док=РеквизитФормыВЗначение(«Объект»);
2 — Если колонки таблицы значений не определены в конфигураторе — то
Таб=РеквизитФормыВЗначение(«Пользователи»,»ТаблицаЗначений»);
НовКолонка=Таб.Колонки.Добавить(. )
. и далее определение колонок
ЗначениеВРеквизитФормы(Таб,»Пользователи»)
3 — создание элементов формы
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(. ) — далее с праметрамит по документации
ИзменитьРеквизиты(ДобавляемыеРеквизиты);

— все — структура создана — дальше можно заполнять удалять и прочее

+(55) — все объекты создаются за один заход. Добавлять с нужной подчиненность — колонки в том числе.

// создаем реквизиты
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(«ТЗПользователей», Новый ОписаниеТипов(«ТаблицаЗначений»), «», «Пользователи»));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(«Пользователь»,Новый ОписаниеТипов(«СправочникСсылка.Пользователи»),»ТЗПользователей»,»Пользователь»));

// пакетное создание и удаление
ИзменитьРеквизиты(ДобавляемыеРеквизиты);

// создаем элементы
Элемент = Элементы.Добавить(«Пользователь»,Тип(«ПолеФормы»),ТаблицаПользователей);
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.ПутьКДанным = «ТЗПользователей.Пользователь»;

но не понимаю как заполнить реквизит формы таблица пользователей

(+57) — хорошо: тогда более подробно и системно

1 — если в конфигурации таблица значений не определена как реквизит: то сначала создать реквизит таблицы и ее колонки как у вас есть
2 — создать все элементы отображения на форме как тоже создаете (включая колонки таблицы):
Элемент = Элементы.Добавить(«Пользователь»,Тип(«ПолеФормы»),ТаблицаПользователей);
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.ПутьКДанным = «ТЗПользователей.Пользователь»;

и далее также колонки

3 — все можете юзать объекты. Чтобы заполнить — теперь 2 пути:
1 — на сервере преобразовать реквизит в таблицу (РеквизитФормыВЗначение) — заполнять обычным образом, потом вернуть назад в реквизит (ЗначениеВРеквизитФормы)
либо вариант 2 — на клиенте непосредственно добавить строку в элемент формы: Нов=ЭтаФорма.Элементы.Пользователь.Добавить() — и далее заполнить поля

ок, спасибо, последний, наверное, вопрос
когда пытаюсь

говорит Недопустимое значение параметра (параметр номер ‘2’)

ну и при попытке

Недопустимое значение параметра (параметр номер ‘1’)

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

  • Передача данных из Таблицы значений на сервере в объект Таблица значений на обработке.

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

    4 4 0 0 2 Скопировано.

    3 года назад

    Недостаточно рейтинга для добавления отрицательного голоса. Шаблон будет скрыт из ваших результатов поиска.

     Переменной ТЗ присвоено значение, но оно нигде не используется Переменной ТЗрез присвоено значение, но оно нигде не используется Переменной ТЗрез присвоено значение, но оно нигде не используется Орфографическая ошибка в Номеклатура (найдено 2): Номеклатура Орфографическая ошибка в КоличестовОстаток (найдено 2): Количестов Орфографическая ошибка в данныеформывзначение: данныеформывзначение Орфографическая ошибка в данныевреквизитформы: данныевреквизитформы Орфографическая ошибка в Тзрез: Тзрез

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *