|
Программно добраться до поля табличной части | ☑ | ||
---|---|---|---|---|
0
MiracMC
05.05.20
✎
14:09
|
Добрый день.
В документе Табель Учета Рабочего Времени Организации (УТП/УПП) есть табличная часть. В ней много колонок. Но часть из них - это реквизиты табличной части, а часть - текстовые поля в табличной части. Как программно, создавая документ, обратиться к этим полям что не реквизиты табличной части? Есть колонка в табличной части с именем "День10". В поле "данные" этой колонки пусто. При ручном создании документа ЭлементыФормы.ОтработанноеВремя.День10 а как программно? Заранее спасибо! |
|||
1
ДенисЧ
05.05.20
✎
14:32
|
Нужно смотреть, отуда в приотрытии туда заполняется значение
|
|||
2
RomanYS
05.05.20
✎
14:33
|
(0) посмотри как в эту ячейку собирается текст в ОтработанноеВремяПриПолученииДанных, или как разбираются введенные данные ОтработанноеВремяДеньОкончаниеВводаТекста. Станет понятнее.
Сам текст тебе не нужен для программного создания документа |
|||
3
MiracMC
05.05.20
✎
15:07
|
(1)(2) все что я нашел это обращение вот в таком виде
ЭлементыФормы.ОтработанноеВремя.Колонки["День"+Строка(ДеньМесяца)]; т.е. через ЭлементыФормы. Но создавая прораммно документ я же не могу попасть на ЭлементыФормы..... |
|||
4
MiracMC
05.05.20
✎
15:11
|
я делаю вот так
НС["День" + Строка(ТабельСотрудников[стр].Число)] = Строка(ТабельСотрудников[стр].значение); При этом получаю ошибку {ВнешняяОбработка.multi.Форма.Форма.Форма(3686)}: Поле об`єкту не виявлено (День8) НС["День" + Строка(ТабельСотрудников[стр].Число)] = Строка(ТабельСотрудников[стр].значение); |
|||
5
Cthulhu
05.05.20
✎
15:12
|
универсальный ответ на вопрос "как мне программно для объекта использовать значение реквизита его формы, который не является (не связан прямо с) реквизитом объекта?":
1) в форме выяснить - как вычисляется значение этого реквизита формы 2) в добавить в нужное место, оперирующее с данными объекта, код, который выясненным образом (см.п.1) вычисляет нужное значение. |
|||
6
MiracMC
05.05.20
✎
15:13
|
забыл уточнить что там
ТУРВО = Документы.ТабельУчетаРабочегоВремениОрганизации.СоздатьДокумент(); НС = ТУРВО.ОтработанноеВремя.Добавить(); НС["День" + Строка(ТабельСотрудников[стр].Число)] = Строка(ТабельСотрудников[стр].значение); При этом получаю ошибку {ВнешняяОбработка.multi.Форма.Форма.Форма(3686)}: Поле об`єкту не виявлено (День8) НС["День" + Строка(ТабельСотрудников[стр].Число)] = Строка(ТабельСотрудников[стр].значение); |
|||
7
RomanYS
05.05.20
✎
15:31
|
(6) То, что ты видишь на форме - это представление, формируемое программно... из имеющихся данных.
Тебе надо заполнить правильно данные, представление само нарисуется при открытии формы. Что бы понять как правильно - или разобраться в коде процедур в (2), или посмотреть на примерах. |
|||
8
user-ok
05.05.20
✎
15:50
|
(7) +1
Заполни табель руками, отбери нужную табличную часть в "Универсальную обработку....", поставь галку "показывать все колонки" и смотри что тебе нужно нарисовать программно |
|||
9
MiracMC
05.05.20
✎
22:53
|
Коллеги. Это все понятно. Сделал как советовали в (5) и (7). Нашел, Разобрался... заполнил...
Действительно заполнив данные в реквизитах эти текстовые колонки заполняются сами... Но не все так просто... Есть еще вот такая конструкция при заполнении этих текстовых колонок // Устанавливаем заголовки дней месяца БледноКрасныйЦвет = Новый Цвет(255, 176, 176); СерыйЦвет = Новый Цвет(234, 229, 216); Запрос = Новый Запрос; Запрос.УстановитьПараметр("НачалоМесяца",НачалоМесяца(ПериодРегистрации)); Запрос.УстановитьПараметр("КонецМесяца",КонецМесяца(ПериодРегистрации)); Запрос.Текст = "ВЫБРАТЬ | РегламентированныйПроизводственныйКалендарь.ВидДня, | ДЕНЬНЕДЕЛИ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК ДеньНедели |ИЗ | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь |ГДЕ | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоМесяца И &КонецМесяца | |УПОРЯДОЧИТЬ ПО | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря"; Результат = Запрос.Выполнить(); Данные = Результат.Выгрузить(); ЦветВыходного = Новый Цвет(153, 51, 0); // Темно-красный ЦветПредпразничногоДня = Новый Цвет( 0, 0, 186); // Темно-синий Для ДеньМесяца = 1 по День(КонецМесяца(ПериодРегистрации)) Цикл Колонка = ЭлементыФормы.ОтработанноеВремя.Колонки["День"+Строка(ДеньМесяца)]; Колонка.ТекстШапки = Строка(ДеньМесяца) + Символы.ПС + ДниНедели[Данные[ДеньМесяца - 1].ДеньНедели]; ВидДня = Данные[ДеньМесяца - 1].ВидДня; Если ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник Тогда Колонка.ЦветТекстаШапки = ЦветВыходного; Колонка.ШрифтШапки = ШрифтыСтиля.ШрифтВажнойНадписи; ИначеЕсли ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье Тогда Колонка.ЦветТекстаШапки = ЦветВыходного; Колонка.ШрифтШапки = ШрифтыСтиля.ШрифтВажнойНадписи; ИначеЕсли ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота Тогда Колонка.ЦветТекстаШапки = ЦветВыходного; Колонка.ШрифтШапки = ШрифтыСтиля.ШрифтВажнойНадписи; ИначеЕсли ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный Тогда Колонка.ЦветТекстаШапки = ЦветПредпразничногоДня; Колонка.ШрифтШапки = ШрифтыСтиля.ШрифтВажнойНадписи; Иначе Колонка.ЦветТекстаШапки = Новый Цвет(); Колонка.ШрифтШапки = Новый Шрифт(); КонецЕсли; КонецЦикла; Тут оно в заголовке текстового поля ТЧ проставляет день недели и "красит" его в нужный цвет... Так вот, хоть это и парадоксально, после заполнения документа программно при его открытии это все не происходит "само"... иными словами.. этот кусок выполняется тогда когда в документе сменили диапазон дат и больше нигде и ничем не вызывается. Как Вы уже догадались все что я пишу - внешняя обработка.. и вносить изменения в код конфы мне никто не разрешит... как тут быть? как это проделать программно? |
|||
10
MiracMC
05.05.20
✎
23:06
|
вопрос снят. Все же оно вызывается при открытии. и "красит" колонки.
Всем спасибо...!!! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |