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

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

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

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

ТабличноеПоле.СоздатьКолонки();
Остальные ответы
2. Александр Плюшкин (php5) 10 20.04.13 12:42 Сейчас в теме
Как-то так, проверил работает:

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

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

ТабличноеПоле.СоздатьКолонки();
3. Илья Кутузов (Kutuzov) 153 20.04.13 14:13 Сейчас в теме
(2) php5, спасибо, работает!)
4. Илья Кутузов (Kutuzov) 153 21.04.13 12:46 Сейчас в теме
Работает, но не до конца... Как выяснилось, реквизит "Данные" у созданного элемента формы не заполнен. Поэтому, например, нельзя отборы настроить. Далее, после некоторых поисков в интернете выяснилось, что программно создать реквизит формы, чтобы привязать его к элементу управления, НЕЛЬЗЯ. Очень печально.. Хотя на управляемых формах это сделать возможно.
5. Артем Ватан (v.a.ryag) 32 16.08.13 13:44 Сейчас в теме
использовать отборы можно кстати
6. Татьяна Михайлова (tmixsam) 52 07.02.14 09:05 Сейчас в теме
В форме элемента справочника Номенклатура

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

.......

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


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

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

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

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

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

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

ЭлФПанель.ТекущаяСтраница = СтараяСтраница;
КонецПроцедуры
7. Татьяна Михайлова (tmixsam) 52 07.02.14 09:43 Сейчас в теме
Или в форме списка справочника Номенклатура

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

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

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

Попадаем в список регистра сведений, в котором уже задан отбор Номенклатура = "Барабан 18В".
8. Михаил Петухов (oldfornit) 07.02.14 16:59 Сейчас в теме
(4) Kutuzov, немного не понял. Привязать к элементу управления? Вам необходимо назначить какие-то обработчики табличному полю?

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

Процедура ПриПолученииДанных(Элемент, ОформленияСтрок)
	
	КрасныйЦвет = Новый Цвет(255, 0, 0);
	ОбычныйЦвет = Новый Цвет();
	
	Для Каждого элементОформленияСтрок из ОформленияСтрок Цикл
		элементОформленияСтрок.Ячейки.Колонка1.Текст = элементОформленияСтрок.ДанныеСтроки.Номенклатура.Артикул;
		элементОформленияСтрок.Ячейки.Колонка1.ОтображатьТекст = Истина;
		элементОформленияСтрок.Ячейки.Колонка1.Выравнивание = ГоризонтальноеПоложение.Право;
		
		//цветовая маркировка незаполненного количества
		Если Не элементОформленияСтрок.ДанныеСтроки.Обработан Тогда
			элементОформленияСтрок.Ячейки.Количество.ЦветФона = КрасныйЦвет;
		Иначе 
			элементОформленияСтрок.Ячейки.Количество.ЦветФона = ОбычныйЦвет;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
...Показать Скрыть
9. Александр Жигурт (jigourt) 23 07.02.14 17:09 Сейчас в теме
НовоеПолеВвода = ЭтаФорма.ЭлементыФормы.Добавить(Тип("ПолеВвода"),ИмяРеквизитаФормы);
НовоеПолеВвода.Данные = ИмяРеквизитаФормы;
НовоеПолеВвода.Значение = Константы[ИмяРеквизитаФормы].Получить();
НовоеПолеВвода.Верх = 33
НовоеПолеВвода.Лево = 140;
НовоеПолеВвода.Ширина = 252; 
НовоеПолеВвода.Высота = 19;
НовоеПолеВвода.КнопкаВыбора = Истина;
НовоеПолеВвода.КнопкаОчистки = Истина;
			
ДействиеОбработкаВыбора = Новый Действие("ОсновнаяОрганизацияПриИзменении");    
НовоеПолеВвода.УстановитьДействие("ПриИзменении",ДействиеОбработкаВыбора);
...Показать Скрыть

это пример создания поля ввода с заполнением данные и значение
вот только жаль 12 см уже улетели
10. Михаил Петухов (oldfornit) 07.02.14 18:04 Сейчас в теме
(9) jigourt, хм, да я как бы за ними и не рвался. Вынесли бы вы лучше имена реквизитов из констант...
11. Александр Жигурт (jigourt) 23 07.02.14 18:24 Сейчас в теме
(10) oldfornit, да я тоже, но лишними бы не были ))) а по поводу имен, так это не имена реквизитов в константах, это кусок кода, который строит форму констант сам ))
12. Илья Кутузов (Kutuzov) 153 07.02.14 22:52 Сейчас в теме
(6) tmixsam, спасибо, работает.
(9) jigourt, боюсь, 12 см вам не светят :). Из вашего примера видно, что вы используете реквизиты формы (если я правильно понял). А их можно только "ручками" в конфигураторе добавлять, а программно нельзя.
13. Александр Жигурт (jigourt) 23 07.02.14 23:37 Сейчас в теме
(12) Kutuzov, и как вы к такому выводу пришли?? переменная ИмяРеквизитаФормы просто строка, полученная из имени константы

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

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


вот прицепил код целиком
14. Илья Кутузов (Kutuzov) 153 08.02.14 06:09 Сейчас в теме
(13) jigourt, ясно, спасибо. Но этот вариант не совсем подходит по программное создание табличных полей списков справочников и документов. Решение - см. выше.
15. Анатолий Д (АнатолийАндреевич) 1 26.12.16 15:08 Сейчас в теме
(5) Подскажите как использовать отборы в колонке табличного поля, которая была создана программно?

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

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

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

Отбор по "ПроектНовый" не работает.
16. Виктория Дорохина (vikad) 26.12.16 15:39 Сейчас в теме
ЭтаФорма.ЭлементыФормы.ЖурналДокументовСписок.НастройкаОтбора.ПроектНовый.Доступность = Истина
17. Анатолий Д (АнатолийАндреевич) 1 27.12.16 06:07 Сейчас в теме
(16)

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

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

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

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


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


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


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


В журнал документов я могу добавить новую графу. В графе указать необходимые реквизиты документов. Но в некоторых документах проект указан в табличной части и я не могу указать реквизит ТЧ как источник данных для этой строки. Хочу заполнить программно эту графу, но в оформлении ячейки могу поменять только текст, данные изменить нельзя (следовательно отбор нормально не работает). Пытаюсь создать столбец табличного поля программно, но тогда отбор не работает совсем. Это тупик и никак нереализуемо?
23. Виктория Дорохина (vikad) 30.12.16 12:29 Сейчас в теме
Если Вы спрашивали про стандартный отбор списка - то он работает только так. Но Вам ничего не мешает над табличной частью журнала документов добавить поле фильтрации по проекту и в этом поле указывать нужный Вам проект. А отбор по журналу документов устанавливать программно, передавая в него массив ссылок, документы которых относятся к выбранному проекту (этот массив Вы можете получить запросом в тексте модуля)
Оставьте свое сообщение