Имя: Пароль:
1C
1С v8
Программно добраться до поля табличной части
,
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
вопрос снят. Все же оно вызывается при открытии. и "красит" колонки.

Всем спасибо...!!!