Как вывести тз на форму 1с
Но, не бросив первоначальную идею и потратив вечер на поиск, как это правильно сделать, натыкался только на программное создание элементов на форме, что в конце-концов и пришлось сделать, но упростив для себя модуль. Я заранее вывожу нужные реквизиты на форму, чтобы это не определять программно, и точно видеть, где потом отобразятся мои данные.
Хотя на форме ТЗ и не видна, так как нет ни одной колонки, но после выполнения все встает на свои места.
В итоге предлагаю два варианта вывода ТЗ на Форму через ТЗ и через Табличный документ (чтобы можно было скопировать).
Модуль выполняется &НаСервере в форме объекта.
P.S. Здесь после всех своих поисков наткнулся на похожую статью
Специальные предложения
На примере вывода в реквизит с типом "ТаблицаЗначений" я написал всего одну процедуру и теперь ее могут использовать без допилов все желающие в любом коде, а код для вывода нужной ТЗ на нужную форму теперь состоит всего из 2-х строк.
smsfor1c; factor0; Capitullo; Famza; isteroid; Gadzhalik; esqado; ircKotlas; igee12; olololeg; SamS; sp18s; urukk; yad; Krasnyj; DrVitaly; Dr.ZIG; cheburashka; Гарин; TreeDogNight; nbv8608; infostart user; wolfsoft; premierex; IgorS; Ali1976; Plasma; korppinen; ojiojiowka; karpik666; + 30 – Ответить
1С 8.3 Программное создание таблицы значений на форме в управляемом приложении
&НаСервере
Процедура ПриОткрытииНаСервере ()
// Описание таблицы значений как реквизита
МассивТипа = Новый Массив ;
МассивТипа . Добавить ( Тип ( "ТаблицаЗначений" ));
// Добавление ТаблицыЗначений в массив реквизитов
ОписаниеТипа = Новый ОписаниеТипов ( МассивТипа );
МассивРеквизитовФормы = Новый Массив ;
МассивРеквизитовФормы . Добавить (Новый РеквизитФормы ( "ТаблицаСотрудников" , ОписаниеТипа , "" , "ТЗСотр" ));
// Создание ТаблицыЗначений с описанием колонок
КвалификаторыСтроки = Новый КвалификаторыСтроки ( 10 );
ОписаниеСтроки_10 = Новый ОписаниеТипов ( "Строка" , , КвалификаторыСтроки );
ОписаниеСотрудника = Новый ОписаниеТипов ( "СправочникСсылка.Сотрудники" );
ТЗ = Новый ТаблицаЗначений ;
ТЗ . Колонки . Добавить ( "Код" , ОписаниеСтроки_10 );
ТЗ . Колонки . Добавить ( "Сотрудник" , ОписаниеСотрудника );
// ТЗ.Колонки.Добавить - можно и в цикле
// Добавление в массив реквизитов колонок ТаблицыЗначений
Для Каждого Колонка Из ТЗ . Колонки Цикл
МассивРеквизитовФормы . Добавить (Новый РеквизитФормы ( Колонка . Имя , Колонка . ТипЗначения , "ТаблицаСотрудников" ));
КонецЦикла;
// Удаление - если таблица существует
ЭлементТаблица = Элементы . Найти ( "ТаблицаСотрудников" );
Если ЭлементТаблица <> Неопределено Тогда
Элементы . Удалить ( ЭлементТаблица );
Иначе
ИзменитьРеквизиты ( МассивРеквизитовФормы );
КонецЕсли;
// Добавление ТаблицыЗначений на форму
ТаблицаПолейВыбора = Элементы . Добавить ( "ТЗСотр" , Тип ( "ТаблицаФормы" ));
ТаблицаПолейВыбора . ПутьКДанным = "ТаблицаСотрудников" ;
ТаблицаПолейВыбора . Отображение = ОтображениеТаблицы . Список ;
ТаблицаПолейВыбора . ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы . Нет ; // Отключение командной панели
Для Каждого Колонка Из ТЗ . Колонки Цикл
НовыйЭлемент = Элементы . Добавить ( Колонка . Имя , Тип ( "ПолеФормы" ), ТаблицаПолейВыбора );
НовыйЭлемент . Вид = ВидПоляФормы . ПолеВвода ;
НовыйЭлемент . ПутьКДанным = "ТаблицаСотрудников." + Колонка . Имя ;
НовыйЭлемент . Ширина = 10 ;
// Заполнение ТаблицыЗначений
Запрос = Новый Запрос ;
Запрос . Текст =
"ВЫБРАТЬ
| Сотрудники.Код КАК Код,
| Сотрудники.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
| Сотрудники.Ссылка КАК Ссылка,
| Сотрудники.Наименование КАК Наименование
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|
|УПОРЯДОЧИТЬ ПО
| Наименование" ;
РезультатЗапроса = Запрос . Выполнить ();
ВыборкаДетальныеЗаписи = РезультатЗапроса . Выбрать ();
Пока ВыборкаДетальныеЗаписи . Следующий () Цикл
Строка = ТЗ . Добавить ();
Строка . Код = ВыборкаДетальныеЗаписи . Код ;
Строка . Сотрудник = ВыборкаДетальныеЗаписи . Ссылка ;
КонецЦикла;
// Передача ТаблицыЗначений в реквизит формы
ЗначениеВРеквизитФормы ( ТЗ , "ТаблицаСотрудников" );
1С 8.3 Динамический вывод Таблицы значений на форму
Процедура Вывести_ТЗ_в_Таблицу_на_форме ( ТЗ , ТабРеквизитФормы , ТабЭлементФормы = Неопределено) Экспорт
// Процедура позволяет выводить любое количество таблиц значений в таблицу формы
// (с различным количеством и названиями полей). При изменении выводимых данных –
// таблица на форме программно очищается и заменяется на новую с новым составом
// полей и данных соответствующей таблицы значений.
Если ТабЭлементФормы = Неопределено Тогда // проверка передан ли элемент формы
ТабЭлементФормы = ТабРеквизитФормы ;
КонецЕсли;
Реквизиты_для_удаления = Новый Массив ;
Элементы_для_удаления = Новый Массив ;
Реквизиты_для_вывода = Новый Массив ;
// Получаем данные (на которые элементы формы ссылаются)
// по добавленным ранее реквизитам и элементам формы
Для Каждого Элемент Из Элементы [ ТабЭлементФормы ]. ПодчиненныеЭлементы Цикл
Реквизиты_для_удаления . Добавить ( Элемент . ПутьКДанным );
Элементы_для_удаления . Добавить ( Элемент );
КонецЦикла;
// Удаляем элементы
Для Каждого УдалитьЭлемент Из Элементы_для_удаления Цикл
Элементы . Удалить ( УдалитьЭлемент );
КонецЦикла;
// Добавляем колонки из Таблицы значений в реквизит ТабРеквизитФормы
Для Каждого КолонкаТЗ Из ТЗ . Колонки Цикл
Реквизиты_для_вывода = Новый РеквизитФормы ( КолонкаТЗ . Имя , КолонкаТЗ . ТипЗначения , ТабРеквизитФормы , КолонкаТЗ . Заголовок );
Реквизиты_для_вывода . Добавить ( Реквизиты_для_вывода );
КонецЦикла;
// Удаляем старые реквизиты и выводим новые реквизиты
ИзменитьРеквизиты ( Реквизиты_для_вывода , Реквизиты_для_удаления );
// Добавляем колонки из Таблицы значений
// в элементы ТабЭлементФормы (со ссылкой на колонки в ТабРеквизитФормы)
Для Каждого КолонкаТЗ Из ТЗ . Колонки Цикл
ЭлементТЗ = Элементы . Добавить ( ТабРеквизитФормы + "_" + КолонкаТЗ . Имя , Тип ( "ПолеФормы" ), Элементы [ ТабЭлементФормы ]);
ЭлементТЗ . Вид = ВидПоляФормы . ПолеНадписи ; //Или ПолеВвода, или что-то другое;
ЭлементТЗ . ПутьКДанным = ТабРеквизитФормы + "." + КолонкаТЗ . Имя ;
КонецЦикла;
// В реквизит загружаем Таблицу значений
ЭтаФорма [ ТабРеквизитФормы ]. Загрузить ( ТЗ );
// Процедура - Программный вывод таблицы значений в таблицу на форму
//
// Параметры:
// ТаблицаЗначенийДляВывода - ТаблицаЗначений - ТаблицаЗначений для вывода на форму
// ИмяРеквизитаФормы - Строка - Наименование реквизита формы ДанныеФормыКоллекция
// ИспользованиеКолонкиОтметка - Булево - Вывод колокни отметка
// ТолькоКнопкаОткрытия - Булево - Отображение кнопок
//
&НаСервере
Процедура ПрограммныйВыводТаблицыЗначенийВТаблицуНаФорму ( ТаблицаЗначенийДляВывода , ИмяРеквизитаФормы , ИспользованиеКолонкиОтметка = Ложь, ТолькоКнопкаОткрытия = Истина)
// Функционал данного механизма служит для программного вывода "Таблицы значений"
// в реквизит управляемой формы с типом "ДанныеФормыКоллекция". Может быть полезен
// в задачах, где состав колонок выгружаемой таблицы значений может меняться.
// Механизм предусматривает работу как с реквизитом объекта, так и с реквизитом формы.
// Также реализована возможность быстрого добавления колонки «Отметка» и настройки доступности кнопок полей.
// Процедура должна быть размещена в модуле формы.
Если ТипЗнч ( ТаблицаЗначенийДляВывода ) = Тип ( "ТаблицаЗначений" ) Тогда
Если ТипЗнч ( ИмяРеквизитаФормы ) = Тип ( "Строка" ) Тогда
// Опрелеляем является заполняемый реквизит, реквизитом объекта или реквизитом формы
Если Объект . Свойство ( ИмяРеквизитаФормы ) И ТипЗнч ( Объект [ ИмяРеквизитаФормы ]) = Тип ( "ДанныеФормыКоллекция" ) Тогда
ПутьКДаннымФормыКоллекция = "Объект." + ИмяРеквизитаФормы ;
ОбъектДляОтображенияНаФорме = РеквизитФормыВЗначение ( "Объект." + ИмяРеквизитаФормы );
ЭтоРеквизитОбъекта = Истина;
ИначеЕсли ТипЗнч ( ЭтаФорма [ ИмяРеквизитаФормы ]) = Тип ( "ДанныеФормыКоллекция" ) Тогда
ПутьКДаннымФормыКоллекция = ИмяРеквизитаФормы ;
ОбъектДляОтображенияНаФорме = РеквизитФормыВЗначение ( ИмяРеквизитаФормы , Тип ( "ТаблицаЗначений" ));
ЭтоРеквизитОбъекта = Ложь;
КонецЕсли;
КонецЕсли;
МассивУдаляемыхРеквизитов = Новый Массив ;
МассивДобавляемыхРеквизитов = Новый Массив ;
МассивИсключаемыхРеквизитов = Новый Массив ;
// Формируем массив колонок для удаления
Для Каждого Колонка Из ОбъектДляОтображенияНаФорме . Колонки Цикл
МассивУдаляемыхРеквизитов . Добавить ( ПутьКДаннымФормыКоллекция + "." + Колонка . Имя );
КонецЦикла;
// Удаляем колонки с формы
Для Каждого Колонка Из ОбъектДляОтображенияНаФорме . Колонки Цикл
ЭлементКолонки = Элементы . Найти ( ИмяРеквизитаФормы + Колонка . Имя );
Если НЕ ЭлементКолонки = Неопределено Тогда
Элементы . Удалить ( ЭлементКолонки );
КонецЕсли;
КонецЦикла;
// Добавляем колонку "Отметка"
Если ИспользованиеКолонкиОтметка Тогда
НоваяКолонка = Новый РеквизитФормы ( "Отметка" , Новый ОписаниеТипов ( "Булево" ), ПутьКДаннымФормыКоллекция );
МассивДобавляемыхРеквизитов . Добавить ( НоваяКолонка );
КонецЕсли;
// Формируем массив колонок из таблицы значений
Для Каждого Колонка Из ТаблицаЗначенийДляВывода . Колонки Цикл
Если Колонка . ТипЗначения . Типы (). Найти ( Тип ( "Тип" )) = Неопределено Тогда
НоваяКолонка = Новый РеквизитФормы ( Колонка . Имя , Новый ОписаниеТипов ( Колонка . ТипЗначения . Типы ()), ПутьКДаннымФормыКоллекция );
МассивДобавляемыхРеквизитов . Добавить ( НоваяКолонка );
Иначе
Сообщить ( "Колонка " + Строка ( Колонка . Имя ) + " с типом: не может быть выгружена" );
МассивИсключаемыхРеквизитов . Добавить ( Колонка );
КонецЕсли;
КонецЦикла;
// Обновляем реквизиты формы
ИзменитьРеквизиты ( МассивДобавляемыхРеквизитов , МассивУдаляемыхРеквизитов );
//Создаем элементы на форме для отображения колонок
ЭлементТЗ = Элементы [ ИмяРеквизитаФормы ];
// Добавляем колонки из таблицы
Для Каждого Колонка Из ТаблицаЗначенийДляВывода . Колонки Цикл
Если МассивИсключаемыхРеквизитов . Найти ( Колонка ) = Неопределено Тогда
НовыйЭлементФормы = Элементы . Добавить ( ИмяРеквизитаФормы + Колонка . Имя , Тип ( "ПолеФормы" ), ЭлементТЗ );
НовыйЭлементФормы . Вид = ВидПоляФормы . ПолеВвода ;
// Устанавливаем доступность кнопок
Если ТолькоКнопкаОткрытия Тогда
НовыйЭлементФормы . РедактированиеТекста = Ложь;
НовыйЭлементФормы . ВыбиратьТип = Ложь;
НовыйЭлементФормы . КнопкаВыбора = Ложь;
НовыйЭлементФормы . КнопкаВыпадающегоСписка = Ложь;
НовыйЭлементФормы . КнопкаОткрытия = Истина;
НовыйЭлементФормы . КнопкаОчистки = Ложь;
Иначе
НовыйЭлементФормы . РедактированиеТекста = Истина;
НовыйЭлементФормы . ВыбиратьТип = Истина;
НовыйЭлементФормы . КнопкаВыбора = Истина;
НовыйЭлементФормы . КнопкаВыпадающегоСписка = Истина;
НовыйЭлементФормы . КнопкаОткрытия = Истина;
НовыйЭлементФормы . КнопкаОчистки = Истина;
КонецЕсли;
НовыйЭлементФормы . КнопкаРегулирования = Ложь;
НовыйЭлементФормы . КнопкаСоздания = Ложь;
НовыйЭлементФормы . КнопкаСпискаВыбора = Ложь;
НовыйЭлементФормы . ИсторияВыбораПриВводе = ИсторияВыбораПриВводе . НеИспользовать ;
НовыйЭлементФормы . БыстрыйВыбор = Ложь;
НовыйЭлементФормы . ПутьКДанным = ПутьКДаннымФормыКоллекция + "." + Колонка . Имя ;
КонецЕсли;
КонецЦикла;
// Загружаем таблицу значений в данные формы коллекцию
Если ЭтоРеквизитОбъекта Тогда
Объект [ ИмяРеквизитаФормы ]. Загрузить ( ТаблицаЗначенийДляВывода );
Иначе
ЭтаФорма [ ИмяРеквизитаФормы ]. Загрузить ( ТаблицаЗначенийДляВывода );
КонецЕсли;
Иначе
Сообщить ( "Выводить можно только таблицу значений" );
КонецЕсли;
Исключение
ОбщегоНазначенияКлиентСервер . СообщитьПользователю ( ОписаниеОшибки ());
КонецПопытки;
при разработке на обычных формах было удобно выводить результат запроса используя метод СоздатьКолоки():
В управляемом приложении метод СоздатьКолоки() не доступен, ниже представлена процедура, которая отображает на управляемой форме содержимое таблицы значений переданное ей в качестве параметра:
Код вывода результата запроса на управляемую форму:
Похожие FAQ
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени PostgreSQL: установка, настройка, обслуживание 11
PostgreSQL напрямую "из коробки" применяться для использования с 1С Предприятем не может. Необходима именно адаптированная версия от 1С, превращающая PostgreSQL в блокировочник, причем нужно понимать, что блокировки будут накладываться на всю таблиц Посмотреть все результаты поиска похожих
Еще в этой же категории
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П Как открыть внешнюю обработку или отчет программно 1С УП? 6
В версии 8.2 и старше: приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере. Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий: Ввод по строке - поиск по первым символам или в любом месте наименования 6
При разработке конфигурации, для упрощении ввода документов потребовалось настроить ввод номенклатуры по совпадению любой части наименования! В 1С 8.3 по умолчанию настройки справочника номенклатуры такие: При такой настройке, механизм поиска в Как передать таблицу значений с сервера на клиент? 5
Многие спрашиваю, как передать тз с сервера на клиент - ниже несколько вариантов как это можно реализовать: Через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр НаКлиенте Процедура ПолучитьТаблицу НаСервер(Команд а) ТЗВСтроке = ПолучитьТЗНаС РеквизитФормыВЗначение() и ДанныеФормыВзначение() - Описание и примеры использования 2
gvk2009 подробно и доходчиво описал разницу методов, за что ему огромное спасибо: В Синтаксис-Помощнике очень скупо написано о процедуре ДанныеФормыВЗначение (), чуть побольше - о РеквизитФормыВЗначение (). И совсем нет примеров использования. Посмотреть все в категории Управляемое приложение, Тонкий клиент
Читайте также: