Программное создание табличного поля в обычном приложении

1. Kutuzov 736 20.04.13 12:10 Сейчас в теме
Как в обычной (неуправляемой) форме программно добавить на форму табличное поле, в котором вывести список документов "Реализация товаров и услуг"?
Чтобы данное поле было полностью идентично тому, которое можно создать обычным способом через конструктор, указав источник данных "ДокументСписок.РеализациТоваровУслуг".
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
2. php5 25 20.04.13 12:42 Сейчас в теме
Как-то так, проверил работает:

ТабличноеПоле = ЭлементыФормы.Добавить(Тип("ТабличноеПоле"),"НовоеТП", Истина); // , ЭлементыФормы.ОсновнаяПанель

ТабличноеПоле.ТипЗначения = Новый ОписаниеТипов("ДокументСписок.РеализацияТоваровУслуг");
ТабличноеПоле.Верх = 24;
ТабличноеПоле.Лево = 6;
ТабличноеПоле.Ширина = Ширина-40;
ТабличноеПоле.Высота = Высота-50;

ТабличноеПоле.СоздатьКолонки();
TerveRus; Dr.ZIG; +2 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. php5 25 20.04.13 12:42 Сейчас в теме
Как-то так, проверил работает:

ТабличноеПоле = ЭлементыФормы.Добавить(Тип("ТабличноеПоле"),"НовоеТП", Истина); // , ЭлементыФормы.ОсновнаяПанель

ТабличноеПоле.ТипЗначения = Новый ОписаниеТипов("ДокументСписок.РеализацияТоваровУслуг");
ТабличноеПоле.Верх = 24;
ТабличноеПоле.Лево = 6;
ТабличноеПоле.Ширина = Ширина-40;
ТабличноеПоле.Высота = Высота-50;

ТабличноеПоле.СоздатьКолонки();
TerveRus; Dr.ZIG; +2 Ответить
3. Kutuzov 736 20.04.13 14:13 Сейчас в теме
(2) php5, спасибо, работает!)
4. Kutuzov 736 21.04.13 12:46 Сейчас в теме
Работает, но не до конца... Как выяснилось, реквизит "Данные" у созданного элемента формы не заполнен. Поэтому, например, нельзя отборы настроить. Далее, после некоторых поисков в интернете выяснилось, что программно создать реквизит формы, чтобы привязать его к элементу управления, НЕЛЬЗЯ. Очень печально.. Хотя на управляемых формах это сделать возможно.
8. oldfornit 07.02.14 16:59 Сейчас в теме
(4) Kutuzov, немного не понял. Привязать к элементу управления? Вам необходимо назначить какие-то обработчики табличному полю?

Если да -
НовыйЭлемент.УстановитьДействие("ПриПолученииДанных", Новый Действие("ПриПолученииДанных"));

Процедура ПриПолученииДанных(Элемент, ОформленияСтрок)
	
	КрасныйЦвет = Новый Цвет(255, 0, 0);
	ОбычныйЦвет = Новый Цвет();
	
	Для Каждого элементОформленияСтрок из ОформленияСтрок Цикл
		элементОформленияСтрок.Ячейки.Колонка1.Текст = элементОформленияСтрок.ДанныеСтроки.Номенклатура.Артикул;
		элементОформленияСтрок.Ячейки.Колонка1.ОтображатьТекст = Истина;
		элементОформленияСтрок.Ячейки.Колонка1.Выравнивание = ГоризонтальноеПоложение.Право;
		
		//цветовая маркировка незаполненного количества
		Если Не элементОформленияСтрок.ДанныеСтроки.Обработан Тогда
			элементОформленияСтрок.Ячейки.Количество.ЦветФона = КрасныйЦвет;
		Иначе 
			элементОформленияСтрок.Ячейки.Количество.ЦветФона = ОбычныйЦвет;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
5. v.a.ryag 37 16.08.13 13:44 Сейчас в теме
использовать отборы можно кстати
15. АнатолийАндреевич 2 26.12.16 15:08 Сейчас в теме
(5) Подскажите как использовать отборы в колонке табличного поля, которая была создана программно?

Создаю колонку таким кодом:

Массив = Новый Массив;
    Массив.Добавить(Тип("СправочникСсылка.Проекты"));
    ТипПроект = Новый ОписаниеТипов(Массив, , );

	КолонкаТабличногоПоля = ЭтаФорма.ЭлементыФормы.ЖурналДокументовСписок.Колонки.Добавить("ПроектНовый", ТипПроект);
	КолонкаТабличногоПоля.УстановитьЭлементУправления(Тип("ПолеВвода"));
	
	КолонкаТабличногоПоля.ПодсказкаВШапке = "";
	КолонкаТабличногоПоля.Видимость = Истина;
Показать

Отбор по "ПроектНовый" не работает.
6. tmixsam 55 07.02.14 09:05 Сейчас в теме
В форме элемента справочника Номенклатура

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

.......

Если Лев(Наименование,7) = "Барабан" Тогда
СКК_ДобавитьСтраницуДляБарабанов();
КонецЕсли;
КонецПроцедуры // ПередОткрытием()


Процедура СКК_ДобавитьСтраницуДляБарабанов()
ЭлФ = ЭтаФорма.ЭлементыФормы;
ЭлФПанель = ЭлФ.ОсновнаяПанель;
Страницы = ЭлФПанель.Страницы;
Страницы.Добавить( "ДляБарабанов", "Для Барабанов");

СтараяСтраница = ЭлФПанель.ТекущаяСтраница;
ЭлФПанель.ТекущаяСтраница = Страницы.ДляБарабанов;

ТабПоле = ЭлФ.Добавить(Тип("ТабличноеПоле"),"ТЧ_РасходПиломатериалов", Истина, ЭлФПанель );
ТабПоле.ТипЗначения = Новый ОписаниеТипов("РегистрСведенийСписок.СКК_РасходПиломатериалов");
ТабПоле.ИзменяетДанные = Истина;
ТабПоле.Доступность = Истина;
ТабПоле.ИзменятьСоставСтрок = Истина;
ТабПоле.ТолькоПросмотр = Ложь;
ТабПоле.Верх = 36;
ТабПоле.Лево = 6;
ТабПоле.Ширина = 586;
ТабПоле.Высота = 139;
ТабПоле.Подсказка = "(СКК) Расход пиломатериалов на крепление барабанов";
ТабПоле.УстановитьПривязку(ГраницаЭлементаУправления.Низ,ЭлФПанель,ГраницаЭлементаУправления.Низ);
ТабПоле.УстановитьПривязку(ГраницаЭлементаУправления.Лево,ЭлФПанель,ГраницаЭлементаУправления.Лево);
ТабПоле.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлФПанель,ГраницаЭлементаУправления.Право);
ТабПоле.СоздатьКолонки();

Колонка = ТабПоле.Колонки.Найти("Номенклатура");
Колонка.Видимость = Ложь;

ТабПоле.Значение.Отбор.Номенклатура.Использование = Истина;
ТабПоле.Значение.Отбор.Номенклатура.Значение = Ссылка;
ТабПоле.Значение.Отбор.Номенклатура.ВидСравнения = ВидСравнения.Равно;

КомПанель = ЭлФ.Добавить(Тип("КоманднаяПанель"),"КоманднаяПанельТЧ_РасходПиломатериалов", Истина, ЭлФПанель );
КомПанель.Вспомогательная = Истина;
КомПанель.Автозаполнение = Истина;
КомПанель.ИсточникДействий = ТабПоле;
КомПанель.Верх = 6;
КомПанель.Лево = 6;
КомПанель.Ширина = 586;
КомПанель.Высота = 25;

ЭлФПанель.ТекущаяСтраница = СтараяСтраница;
КонецПроцедуры
levante90; dini@bk.ru; +2 Ответить
12. Kutuzov 736 07.02.14 22:52 Сейчас в теме
(6) tmixsam, спасибо, работает.
(9) jigourt, боюсь, 12 см вам не светят :). Из вашего примера видно, что вы используете реквизиты формы (если я правильно понял). А их можно только "ручками" в конфигураторе добавлять, а программно нельзя.
13. jigourt 31 07.02.14 23:37 Сейчас в теме
(12) Kutuzov, и как вы к такому выводу пришли?? переменная ИмяРеквизитаФормы просто строка, полученная из имени константы

Процедура ПриОткрытии()
	ЭтаФорма.ЭлементыФормы.Очистить();
	КолвоПолей = 0;
	Для каждого Конст Из Метаданные.Константы Цикл
		Если Конст.Подсказка = "МояКонстанта" Тогда
			НовоеПолеВвода = ЭтаФорма.ЭлементыФормы.Добавить(Тип("ПолеВвода"),Конст.Имя);
			НовоеПолеВвода.Данные = Конст.Имя;
			НовоеПолеВвода.Значение = Константы[Конст.Имя].Получить();
			НовоеПолеВвода.Верх = 33 + КолвоПолей * 20;
			НовоеПолеВвода.Лево = 140;
			НовоеПолеВвода.Ширина = 252; 
			НовоеПолеВвода.Высота = 19;
			НовоеПолеВвода.КнопкаВыбора = Истина;
			НовоеПолеВвода.КнопкаОчистки = Истина;
			
			ДействиеОбработкаВыбора = Новый Действие("ОсновнаяОрганизацияПриИзменении");    
			НовоеПолеВвода.УстановитьДействие("ПриИзменении",ДействиеОбработкаВыбора);

			НоваяНадпись = ЭтаФорма.ЭлементыФормы.Добавить(Тип("Надпись"),"Надпись"+Конст.Имя);
			НоваяНадпись.Заголовок = Конст.Синоним;
			НоваяНадпись.Верх = 33 + КолвоПолей * 20;
			НоваяНадпись.Лево = 8;
			НоваяНадпись.Ширина = 122; 
			НоваяНадпись.Высота = 19;
			КолвоПолей = КолвоПолей + 1;
		КонецЕсли; 
	КонецЦикла; 
КонецПроцедуры
Показать


вот прицепил код целиком
14. Kutuzov 736 08.02.14 06:09 Сейчас в теме
(13) jigourt, ясно, спасибо. Но этот вариант не совсем подходит по программное создание табличных полей списков справочников и документов. Решение - см. выше.
7. tmixsam 55 07.02.14 09:43 Сейчас в теме
Или в форме списка справочника Номенклатура

выбираем мышкой нужный элемент, например "Барабан 18В"

вверху в форме списка нажимаем кнопочку "Перейти"

из выпадающего списка выбираем "(СКК) Расход пиломатериалов на крепление барабанов"

Попадаем в список регистра сведений, в котором уже задан отбор Номенклатура = "Барабан 18В".
9. jigourt 31 07.02.14 17:09 Сейчас в теме
НовоеПолеВвода = ЭтаФорма.ЭлементыФормы.Добавить(Тип("ПолеВвода"),ИмяРеквизитаФормы);
НовоеПолеВвода.Данные = ИмяРеквизитаФормы;
НовоеПолеВвода.Значение = Константы[ИмяРеквизитаФормы].Получить();
НовоеПолеВвода.Верх = 33
НовоеПолеВвода.Лево = 140;
НовоеПолеВвода.Ширина = 252; 
НовоеПолеВвода.Высота = 19;
НовоеПолеВвода.КнопкаВыбора = Истина;
НовоеПолеВвода.КнопкаОчистки = Истина;
			
ДействиеОбработкаВыбора = Новый Действие("ОсновнаяОрганизацияПриИзменении");    
НовоеПолеВвода.УстановитьДействие("ПриИзменении",ДействиеОбработкаВыбора);
Показать

это пример создания поля ввода с заполнением данные и значение
вот только жаль 12 см уже улетели
10. oldfornit 07.02.14 18:04 Сейчас в теме
(9) jigourt, хм, да я как бы за ними и не рвался. Вынесли бы вы лучше имена реквизитов из констант...
11. jigourt 31 07.02.14 18:24 Сейчас в теме
(10) oldfornit, да я тоже, но лишними бы не были ))) а по поводу имен, так это не имена реквизитов в константах, это кусок кода, который строит форму констант сам ))
16. vikad 129 26.12.16 15:39 Сейчас в теме
ЭтаФорма.ЭлементыФормы.ЖурналДокументовСписок.НастройкаОтбора.ПроектНовый.Доступность = Истина
17. АнатолийАндреевич 2 27.12.16 06:07 Сейчас в теме
(16)

{ЖурналДокументов.ДокументыКонтрагентов.Форма.ФормаСписка.Форма(73)}: Поле объекта не обнаружено (ПроектНовый)
	ЭтаФорма.ЭлементыФормы.ЖурналДокументовСписок.НастройкаОтбора.ПроектНовый.Доступность = Истина

В элементах отбора нет моей колонки.
18. vikad 129 27.12.16 10:10 Сейчас в теме
ЖурналДокументовСписок - это какой тип значения? В объекте метаданных, соответствующему этому типу значения должен быть реквизит ПроектНовый. Вы же все равно конфигурацию дорабатываете, так что выход только такой.
19. АнатолийАндреевич 2 28.12.16 10:27 Сейчас в теме
(18)
ЖурналДокументовСписок - это какой тип значения?

Это табличное поле.
Уточню задачу, возможно поможет: необходмо в журнал документов добавить колонку "Проект" (решено), заполнить ее данными (решено) и добавить возможность отбора по значению в этой колонке.
20. vikad 129 28.12.16 10:59 Сейчас в теме
ЖурналДокументовСписок - это какой тип значения?

Это табличное поле.


его данные имеют какой тип значения? У табличного поля есть свойство Данные - как я понимаю, это ЖурналДокументовСписок. У этого же табличного поля есть свойство ТипЗначения. Вот туда загляните, пожалуйста, и в объекте метаданных, соответствующему этому типу значения добавьте реквизит ПроектНовый.
И да, отбор в табличном поле возможен только по значению, которое хранится в базе данных. Если данные в колонке ПроектНовый берутся не из реквизитов документов, отбор сделать не получится
21. SlavaKron 28.12.16 16:40 Сейчас в теме
(20)
Всегда можно сделать отбор по ссылкам с имитацией отбора по полю, не имеющему привязку к данным.
22. АнатолийАндреевич 2 30.12.16 11:34 Сейчас в теме
(20)
его данные имеют какой тип значения? У табличного поля есть свойство Данные - как я понимаю, это ЖурналДокументовСписок. У этого же табличного поля есть свойство ТипЗначения.


Да, тип значения "ЖурналДокументовСписок.ДокументыКонтрагентов"


(20)
Вот туда загляните, пожалуйста, и в объекте метаданных, соответствующему этому типу значения добавьте реквизит ПроектНовый


В журнал документов я могу добавить новую графу. В графе указать необходимые реквизиты документов. Но в некоторых документах проект указан в табличной части и я не могу указать реквизит ТЧ как источник данных для этой строки. Хочу заполнить программно эту графу, но в оформлении ячейки могу поменять только текст, данные изменить нельзя (следовательно отбор нормально не работает). Пытаюсь создать столбец табличного поля программно, но тогда отбор не работает совсем. Это тупик и никак нереализуемо?
23. vikad 129 30.12.16 12:29 Сейчас в теме
Если Вы спрашивали про стандартный отбор списка - то он работает только так. Но Вам ничего не мешает над табличной частью журнала документов добавить поле фильтрации по проекту и в этом поле указывать нужный Вам проект. А отбор по журналу документов устанавливать программно, передавая в него массив ссылок, документы которых относятся к выбранному проекту (этот массив Вы можете получить запросом в тексте модуля)
24. CaSH_2004 372 24.03.20 14:58 Сейчас в теме
У меня похожий вопрос (но все таки есть отличия) поэтому решил его тут создать чтобы все в одном месте было.
Кто подскажет как программно для элемента формы ТабличноеПоле установить источник данных табличную часть обработки.
Как сделать через Конфигуратор можно увидеть на примере справочника "Пользователи" (конфигурация УТ 10.3 и БП 2.0) - там в форме списка есть страница "Пользователи ИБ" и в ней ТабличноеПоле где источник данных "ОбработкаОбъектСписокПользователейИБ.ТабличнаяЧастьПользователей"

Решил сделать внешнюю обработку с аналогичным списком пользователей что-бы можно было ее открыть как в УТ 10.3, так и в БП 2.0 - но в них одна и та же обработка названа по разному, соответственно данные нужно как то проставлять программно (и колонки заполнять).

Пробовал так в модуле формы:

Если Метаданные.Имя = "УправлениеТорговлей" Тогда
	ИмяСправочника = "СписокПользователейИБ";
ИначеЕсли Метаданные.Имя = "БухгалтерияПредприятия" Тогда
	ИмяСправочника = "СписокПользователейБД";
КонецЕсли;
ОбработкаОбъектСписокПользователейИБ = Обработки[ИмяСправочника].Создать();
ЭлементыФормы.ТаблицаПользователейИБ.ТипЗначения = Новый ОписаниеТипов("ОбработкаТабличнаяЧастьСтрока." + ИмяСправочника + ".ТабличнаяЧастьПользователей");
ЭлементыФормы.ТаблицаПользователейИБ.Данные = "ОбработкаОбъектСписокПользователейИБ.ТабличнаяЧастьПользователей";
ЭлементыФормы.ТаблицаПользователейИБ.СоздатьКолонки();
Показать

Результата нет.
Решить проблему наверное можно как-то по другому, но хотелось бы разобраться как установить Табличному полю источник табличную часть объекта обработки - раз интерактивно делается то и программно наверное как-то можно.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)