Имя: Пароль:
1C
1С v8
Как изменить фон ячейки в макете?
0 avz07
 
25.06.13
11:10
Мне нужно изменить фон ячейки, в которой приходная цена меньше 80.
Вожусь с этим уже второй день. перепробовал разные варианты. думаю, что моя ошибка в недостаточных знаниях или навыках.
Прошу помогите написать этоту строчку кода, потому что я уже запутался.
Вот код:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Команда=Справочники.КомандыТА.НайтиПоКоду(5);

   ТабДок=Новый ТабличныйДокумент;
   Макет=ЭтотОбъект.ПолучитьМакет("КомандаСЛАВУТИЧ");
   ОблШапка=Макет.ПолучитьОбласть("ОблШапка|Наименование");
   ТабДок.Очистить();
   ОблШапка.Параметры.Команда=Команда;
   ТабДок.Вывести(ОблШапка);
   ОблШапка=Макет.ПолучитьОбласть("ОблШапка|Приходна");
   ТабДок.Присоединить(ОблШапка);
   ОблШапка=Макет.ПолучитьОбласть("ОблШапка|Базова");
   ТабДок.Присоединить(ОблШапка);

   Запрос=Новый Запрос;
   Запрос.Текст="ВЫБРАТЬ
                |    Т.Ссылка КАК Ссылка,
                |    Цены.Цена,
                |    Цены2.Цена КАК Цена1
                |ИЗ
                |    (ВЫБРАТЬ
                |        Номенклатура.Ссылка КАК Ссылка
                |    ИЗ
                |        (ВЫБРАТЬ
                |            АсортиментТАСрезПоследних.Товар.Ссылка КАК ТоварСсылка
                |        ИЗ
                |            РегистрСведений.АсортиментТА.СрезПоследних(&ТекущаяДата, ) КАК АсортиментТАСрезПоследних
                |        ГДЕ
                |            АсортиментТАСрезПоследних.Команда.Код = ""5""
                |            И АсортиментТАСрезПоследних.Активный
                |        
                |        СГРУППИРОВАТЬ ПО
                |            АсортиментТАСрезПоследних.Товар.Ссылка) КАК ВложенныйЗапрос
                |            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
                |            ПО (Номенклатура.Ссылка.Родитель.Родитель.Родитель.Родитель.Родитель = ВложенныйЗапрос.ТоварСсылка.Ссылка
                |                    ИЛИ Номенклатура.Ссылка.Родитель.Родитель.Родитель.Родитель = ВложенныйЗапрос.ТоварСсылка.Ссылка
                |                    ИЛИ Номенклатура.Ссылка.Родитель.Родитель.Родитель = ВложенныйЗапрос.ТоварСсылка.Ссылка
                |                    ИЛИ Номенклатура.Ссылка.Родитель.Родитель = ВложенныйЗапрос.ТоварСсылка.Ссылка
                |                    ИЛИ Номенклатура.Ссылка.Родитель = ВложенныйЗапрос.ТоварСсылка.Ссылка
                |                    ИЛИ Номенклатура.Ссылка = ВложенныйЗапрос.ТоварСсылка.Ссылка)) КАК Т
                |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                |            ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
                |            ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
                |        ИЗ
                |            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекущаяДата, ТипЦен.Код = ""1"") КАК ЦеныНоменклатурыСрезПоследних) КАК Цены
                |        ПО Т.Ссылка = Цены.Номенклатура
                |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                |            ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
                |            ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
                |        ИЗ
                |            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекущаяДата, ТипЦен.Код = ""2"") КАК ЦеныНоменклатурыСрезПоследних) КАК Цены2
                |        ПО Т.Ссылка = Цены2.Номенклатура
                |ИТОГИ ПО
                |    Ссылка ТОЛЬКО ИЕРАРХИЯ
                |АВТОУПОРЯДОЧИВАНИЕ";                                                                      
   Запрос.УстановитьПараметр("Код","5");
   Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
   
   Выборка=Запрос.Выполнить().Выбрать();
   ТабДок.НачатьАвтогруппировкуСтрок();
   Пока Выборка.Следующий()Цикл
       ОблНоменклатура=Макет.ПолучитьОбласть("ОблНоменклатура|Наименование");
       ОблНоменклатура.Параметры.Наименование=Выборка.Ссылка;
       ТабДок.Вывести(ОблНоменклатура,Выборка.Уровень(),,Ложь);
               
       ОблНоменклатура=Макет.ПолучитьОбласть("ОблНоменклатура|Приходна");
       ОблНоменклатура.Параметры.ЦенаПриходна=Выборка.Цена;
       Если ?(Выборка.Цена=Null,0,Выборка.Цена) > 80 Тогда
           ОблНоменклатура("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0);
           //ЭлементыФормы.ТабличноеПоле.Колонки.ТекущаяКолонка.ЦветФона=Новый Цвет(255, 0, 0);
       КонецЕсли;
       ТабДок.Присоединить(ОблНоменклатура);
           
           ОблНоменклатура=Макет.ПолучитьОбласть("ОблНоменклатура|Базова");
           ОблНоменклатура.Параметры.ЦенаБазова=Выборка.Цена1;
           ТабДок.Присоединить(ОблНоменклатура);
   КонецЦикла;
   ТабДок.ЗакончитьАвтогруппировкуСтрок();
   ТабДок.ОтображатьСетку=Ложь;
   ТабДок.Показать();
КонецПроцедуры
1 Cyberhawk
 
25.06.13
11:10
А зачем в макете, условное оформление не предлагать?
2 Cyberhawk
 
25.06.13
11:12
А, тут не отчет и не СКД, пардон
3 Cube
 
25.06.13
11:14
(0) Ну и? Какой результат выдает твой код и чем он тебя не устраивает?
4 НЕА123
 
25.06.13
11:18
ОблНоменклатураКрасный=Макет.ПолучитьОбласть("ОблНоменклатура|Приходна");
ОблНоменклатураКрасный("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0);
ОблНоменклатура=Макет.ПолучитьОбласть("ОблНоменклатура|Приходна");
       ОблНоменклатура.Параметры.ЦенаПриходна=Выборка.Цена;
       Если ?(Выборка.Цена=Null,0,Выборка.Цена) > 80 Тогда
                      ТабДок.Присоединить(ОблНоменклатураКрасный);                
Иначе
       ТабДок.Присоединить(ОблНоменклатура);        
       КонецЕсли;
5 andreymongol82
 
25.06.13
11:18
(0) А почему нельзя просто сделать две области
Например "ОблНоменклатура" и "ОблНоменклатураКрасный" и по условиям выводит / присоединять одну из них?
6 НЕА123
 
25.06.13
11:19
+(4)
и это... всякие получитьОбласть перед циклом вынести.
7 andreymongol82
 
25.06.13
11:20
(6) Да шо же такое? Как только соберусь написать меня на пару секунд кто-то оопережает :)
8 skunk
 
25.06.13
11:22
ОблНоменклатура.Область("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0);
9 Поросенок Петр
 
25.06.13
11:23
А ещё стоит поботать возвращаемое значение _функций_ Вывести и Присоединить...
10 MiniMuk
 
25.06.13
11:32
ОблНоменклатура.Области.Детали.ЦветФона = ЦветаСтиля.СтатусОтклонен;
11 avz07
 
25.06.13
11:33
НЕА123, воспользовался я вашим кодом, но у меня выбросило такую ??ошибку:
{Форма.Форма.Форма(78,9)}: Процедура или функция с указанным именем не определена (ОблНоменклатураКрасный)
       <<?>>ОблНоменклатураКрасный("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0); (Проверка: Толстый клиент (обычное приложение))
12 GANR
 
25.06.13
11:34
(0) В топку эту древность - СКД + Условное оформление.
13 Поросенок Петр
 
25.06.13
11:35
Доктор, меня все игнорят...

ОбластьЯчеек = ТабДок.Присоединить(ОблНоменклатура);

Если ?(Выборка.Цена=Null,0,Выборка.Цена) > 80 Тогда
   ОбластьЯчеек.ЦветФона = Новый Цвет(255, 0, 0);
КонецЕсли;
       
А вообще (12)+1
14 MiniMuk
 
25.06.13
11:40
(13) как минимум


цвет = ОбластьЯчеек.ЦветФона

ОбластьЯчеек = ТабДок.Присоединить(ОблНоменклатура);

Если ?(Выборка.Цена=Null,0,Выборка.Цена) > 80 Тогда
   ОбластьЯчеек.ЦветФона = Новый Цвет(255, 0, 0);
ыначеесли
  ОбластьЯчеек.ЦветФона = цвет ;
КонецЕсли;
[\1c]
(12) +1
15 НЕА123
 
25.06.13
11:59
(11)
ОблНоменклатураКрасный.ЦветФона = Новый Цвет(255, 0, 0);
16 avz07
 
25.06.13
12:06
как я понял, мне нужно создать еще одну область: ОблНоменклатураКрасный???
17 НЕА123
 
25.06.13
12:21
(16)
да.

можно и так, вроде, но не уверен.
т.е. после присоединения красить сам ТабДок.

       ТабДок.Присоединить(ОблНоменклатура);        
Если ?(Выборка.Цена=Null,0,Выборка.Цена) > 80 Тогда
           ТабДок.("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0);
           //ЭлементыФормы.ТабличноеПоле.Колонки.ТекущаяКолонка.ЦветФона=Новый Цвет(255, 0, 0);

       КонецЕсли;
18 Поросенок Петр
 
25.06.13
12:25
(14) Зачем красить в тот же цвет, в котором вывели?
19 НЕА123
 
25.06.13
12:28
(15)
не то
ОблНоменклатураКрасный.ОБЛАСТЬ("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0);
20 abjurer
 
25.06.13
12:36
Или вариант с поименнованными ячейками

Область = Макет.ПолучитьОбласть("Строка|Период");
//если период отчета не попадает на день недели маршрута, то эту ячейку красим серым
Если Период.МассивДнейНедели.Найти(ДеньНедели) = Неопределено тогда
   Область.Области.ЯчейкаСумма.ЦветФона = WebЦвета.СеребристоСерый;
КонецЕсли;
ТабличныйДокумент.Присоединить(Область);

В области "Строка|Период" именованная ячейка "ЯчейкаСумма"
21 avz07
 
25.06.13
14:16
я тоже так подумал, но к сожалению так не работает:
ТабДок.Присоединить(ОблНоменклатура);        
Если ?(Выборка.Цена=Null,0,Выборка.Цена) > 80 Тогда
           ТабДок.("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0);
           //ЭлементыФормы.ТабличноеПоле.Колонки.ТекущаяКолонка.ЦветФона=Новый Цвет(255, 0, 0);


       КонецЕсли;
выдает вот такую ??ошибку:
{Форма.Форма.Форма(78,20)}: Ожидается идентификатор
           ТабДок.<<?>>("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0); (Проверка: Толстый клиент (обычное приложение))
{Форма.Форма.Форма(78,21)}: Неопознанный оператор
           ТабДок.(<<?>>"ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0); (Проверка: Толстый клиент (обычное приложение))


а как можно получить значение ячейки (я знаю, что оно содержится в ТабДок.Присоединить (ОблНоменклатура);), но как его оттуда записать в какую-то переменную? потом можно было б так:
ОбластьФона = ТабДок.Область ("указывать переменную со значением ячейки");
    ЦветФонаОбласты = Новый Цвет (255, 0, 0);
    ОбластьФона.ЦветФона = ЦветФонаОбласты;
22 avz07
 
25.06.13
14:23
так точно работает, но мне нужно знать имена ячеек
23 skunk
 
25.06.13
14:23
еще раз

меняешь это
ОблНоменклатура("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0);

на это
ОблНоменклатура.Область("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0);


в том коде что у тебя в сабже ... и радуешься
24 avz07
 
25.06.13
14:32
сделал как посоветовали:
{Форма.Форма.Форма(70)}: Ошибка при вызове метода контекста (Область)
           ОблНоменклатура.Область("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0);
по причине:
Область не найдена: ОблНоменклатура
25 skunk
 
25.06.13
14:36
ты точно код из сабжа меняешь

ОблНоменклатура=Макет.ПолучитьОбласть("ОблНоменклатура|Приходна"); <<< здесь ты получаешь область
ОблНоменклатура.Параметры.ЦенаПриходна=Выборка.Цена;
Если ?(Выборка.Цена=Null,0,Выборка.Цена) > 80 Тогда
   ОблНоменклатура("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0); <<< а вот эту строку тебе надо заменить
   //ЭлементыФормы.ТабличноеПоле.Колонки.ТекущаяКолонка.ЦветФона=Новый Цвет(255, 0, 0);

КонецЕсли;
26 avz07
 
25.06.13
14:43
я именно так и сделал. я в недоразумении в чем ошибка. поэтому обращаюсь к вам на форум (или может в чем завтик)
27 skunk
 
25.06.13
14:46
(26)выложи свой отчет
28 kosts
 
25.06.13
14:50
Попробуй так

ОблНоменклатура.Область().ЦветФона = Новый Цвет(255, 0, 0);
29 mishgan75
 
25.06.13
14:53
(0) не парься с изменением фона, сделай в макете 2 колонки с одинаковыми параметрами но с разными цветами, и в зависимости от полученного результата присоединяй область "красную" или "белую".
ps и начни изучать СКД
30 avz07
 
25.06.13
16:23
вот так и все заработало:
ОблНоменклатура=Макет.ПолучитьОбласть("ОблНоменклатура|Приходна");
       ОблНоменклатура.Параметры.ЦенаПриходна=Выборка.Цена;
       Если ?(Выборка.Цена=Null,0,Выборка.Цена) < 80 Тогда
           //ОблНоменклатура.Область("ОблНоменклатура|Наименование").ЦветФона = Новый Цвет(255, 0, 0);
           ОблНоменклатура.ТекущаяОбласть.ЦветФона = Новый Цвет(255, 0, 0);
           //ОбластьФона = ТабДок.Область("ОблНоменклатура");
       //ЦветФонаОбласти = Новый Цвет(255, 0, 0);
       //ОбластьФона.ЦветФона = ЦветФонаОбласти;
       КонецЕсли;
       ТабДок.Присоединить(ОблНоменклатура);
31 avz07
 
25.06.13
16:23
всем спасибо за советы!