Филиппов Олег | Руководитель Управления ИТ | WiseAdvice

«Коллаборация. Методики и инструменты организации эффективного взаимодействия внутри команды»

- Про "я здесь начальник" придётся забыть. - Общие цели и ценности как основа успеха. - Почему коммуникации важны, почему на это важно и нужно тратить время. - Инструментарий: - Платформы для чатов (Slack, Telegram, HipChat) - Корпоративные Wiki (Confluence, MS SharePoint Wiki, DokuWiki) - Управление задачами (Redmine, Jira, BaseCamp, Trello) - Работа с кодом (GitLab, GitHub, MS TFS)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.......

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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


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


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


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

Вакансии

Бизнес-аналитик 1С
Санкт-Петербург
зарплата от 80 000 руб. до 100 000 руб.
Полный день

Руководитель проектов по внедрению 1С документооборота
Санкт-Петербург
зарплата от 100 000 руб. до 130 000 руб.
Полный день

Руководитель по сопровождению и внедрению 1С
Санкт-Петербург
зарплата от 100 000 руб. до 120 000 руб.
Полный день

Программист 1С
Санкт-Петербург
Полный день

Ведущий специалист 1С
Москва
Полный день