Имя: Пароль:
1C
1С v8
Изменить текст выведенной ячейки табличного документа
0 ZloyProger
 
30.07.12
09:11
Доброго времени суток всем!
Столкнулся с проблемой изменения текста в уже выведенной ячейке таблиного документа.
//ТабДок - результириющий табличный документ, тип - ПолеТабличногоДокумента, расположен на форме обработки
//СтрокаОтдел - строка макета, для вывода итогов по отделам, собственно с ней и есть проблема - в ней надо указать текст из нижележащего уровня группировки(
//Начало - строка макета, для вывода начальной инфы по отделам
//Муж - строка макета для вывода по мужчинам
//Жен -//- по женщинам
Собственно текст.
ТабДок           = ЭлементыФормы.ПолеТДТикеты;
Макет           = ПолучитьМакет("МойМакет");
Шапка           = Макет.ПолучитьОбласть("Шапка");
СтрокаОтдел       = Макет.ПолучитьОбласть("СтрокаОтдел");
Начало           = Макет.ПолучитьОбласть("Начало");
Муж               = Макет.ПолучитьОбласть("Муж");
Жен           = Макет.ПолучитьОбласть("Жен");
ТабДок.Очистить();
ТабДок.Вывести(Шапка);
Пока ВыборкаОтделы.Следующий() Цикл
   ТабДок.Вывести(СтрокаОтдел); //вывод итоговой секции
//для обновления отчета передаю позицию для разворота нужной строки
   Если Позиция = 0 Тогда
       ТабДок.НачатьГруппуСтрок("Отдел", Ложь);
   Иначе
       Если ТабДок.ВысотаТаблицы = Позиция Тогда
           ТабДок.НачатьГруппуСтрок("Отдел", Истина);
       Иначе
           ТабДок.НачатьГруппуСтрок("Отдел", Ложь);
       КонецЕсли;
   КонецЕсли;
   Выборка = ВыборкаОтделы.Выбрать(); //открываю детализирующую выборку
   КолЗап  = 1;
   Пока Выборка.Следующий() Цикл
//первую детальную строку надо вывести без изменений, остальные в зависимости от параметра
       Если КолЗап = 1 Тогда
           ТекОбласть        = ТабДок.Область("R" + ТабДок.Верх + "C5:R" + ТабДок.Верх + "C5"); //получаю нужную ячейку в строке с отделом
           ТекОбласть.Защита = Ложь; //убираю защиту специально..
           ТекОбласть.Текст  = Выборка.Описание; //присваиваю текст, в отладке - все шоколадно
           Начало.Параметры.Заполнить(Выборка);
           Начало.Область("R1C1:R1C8").ЦветФона = ЦветФона;
           ТабДок.Вывести(Начало);
       Иначе
           Если Выборка.Пол = Муж Тогда
               Муж.Параметры.Заполнить(Выборка);
               Муж.Область("R1C1:R1C8").ЦветФона = ЦветФона;
               ТабДок.Вывести(Муж);
           Иначе
               Жен.Параметры.Заполнить(Выборка);
               Жен.Область("R1C1:R1C8").ЦветФона = ЦветФона;
               ТабДок.Вывести(Жен);
           КонецЕсли;
       КонецЕсли;
       КолЗап = КолЗап + 1;
   КонецЦикла;
   ТабДок.ЗакончитьГруппуСтрок();
КонецЦикла;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.АвтоМасштаб    = Истина;
ТабДок.Показать("Отделы");
Чую где-то ипотека зарылась - понять где - не могу( v8: Изменить значение в поле табличного документа прочитал до дыр, много думал, все равно не помогло.. Защита - снимал и в самих свойствах ячейки и программно снимал, область - прямоугольная, СодержитЗначение - Ложь (и в свойствах стоит, и в отладчике смотрел). Решение, конечно нашел, сделал как в v8: Параметры макета посоветовал многоуважаемый Марсель, однако заноза недовольства таки осталась, знатоки, поделитесь идеями пожалуйста.
ЗЫ. Платформа - 8.1.15.14, конфиг - самописка.
1 AaNnDdRrEeYy
 
30.07.12
09:38
Обращаться к ячейкам R1C1:R1C8 некашерно, после вывода в табДок они меняют свое имя.
2 ZloyProger
 
30.07.12
12:22
С чего вдруг они меняют свое имя? Табличный документ - как таблица excel - если есть ячейка с адресом R1C1 она и в Африке ей останется (если только ты не будешь использовать присоединение областей/объединение областей/вставку других табличных документов, хотя опять-таки Присоединить/Объединить/Вставить область дадут в результате табличный документ в котором опять-таки будут ячейки R1C1:R1C8 просто поменять строку/колонку сообразно изменениям).Как раз если по именам обращаться - есть вероятность запутаться между макетом и самим табличным документом. И потом - как раз этот кусок кода срабатывает так,как и должен, т.е. красит нужные мне ячейки (если обращаться по имени - краситься абсолютно вся строка, что как раз таки и есть некошерно). И, наконец (без обид), какое отношение имеет твой ответ к сути вопроса?
3 х86
 
30.07.12
12:26
(2)изменится высота шапки в макете и нужно будет код править
4 ZloyProger
 
30.07.12
12:52
(3) Начало.Область("R1C1:R1C8") - абсолютно пофиг на высоту шапки, т.к. это область вывода секции, ТабДок.Область("R" + ТабДок.Верх + "C5:R" + ТабДок.Верх + "C5") аналогично из-за наличия конструкции ТабДок.Верх (на момент применения метода это высота таблицы, т.е. последняя выведенная ячейка). Хотя и вы безусловно кое в чем правы - абсолютно уверенным нельзя быть ни в чем)) И все же ближе к телу, как говаривал старина Г.Д. Мопассан, почему текст не меняется? Просто гипотетически интересно, т.к. задачу уже решил.