Вход | Регистрация


1С:Предприятие ::

Метки:документы, Запросы и построители

v8: Вопрос по СКД: Как задать условное оформление..

Я
   MoneG
 
01.10.08 - 09:27
Как задать условное оформление конкретной строки результата СКД? Строка не обязательно детельная.
Например, строки - документ и номенклатура (в иерархии), и ресурс - сумма по документу. Для номенклатуры эта сумма лишена смысла, но в табдок выведется.
1
8
33
 
 
   Иван Таранов
 
1 - 01.10.08 - 09:30
(0) выбираешь область, ставишь отбор, задаешь оформление. Все.
   MoneG
 
2 - 01.10.08 - 09:40
не совсем всё. пример: (2 варианта порядка группировок)
1)                        и 2)
док,ном  | сумма            ном,док  | сумма
-----------------           -----------------
 
док1     | 50 #             ном1     |  
  ном1   | 50 *               док1   | 50 #  
  ном2   | 50 *             ном2     |  
-----------------           -----------------
* - не нужно
# - нужно

 
суть в чем. если в случае 1) затереть *, то всё красиво.
НО в случае 2) при том же отборе будет вообще всё затерто.

как однозначно "добраться" до конкретной строки ?
8
   Иван Таранов
 
3 - 01.10.08 - 09:47
Что-то я не догоняю. какой отбор?
   MoneG
 
4 - 01.10.08 - 09:50
макс, что можно вытянуть, это отбор типа "Док Заполнено"
6
   MoneG
 
5 - 01.10.08 - 09:54
и еще одна интересная вещь. Области, где "Ном Заполнено" выделяются верно, но вот областей, где "Ном НеЗаполнено" вообще типа нет :). Если бы "НеЗаполнено" сработало, проблему решил бы..
   Иван Таранов
 
6 - 01.10.08 - 09:54
(4) для поля сумма ставь оформление в завис. от полей документ и номенклатуры.
   MoneG
 
7 - 01.10.08 - 09:56
Иван, так и делаю. но существует НО, если порядок строк изменить
   Гаркин
8 - 01.10.08 - 10:40
(0)(2) Не там ищешь решение.
Смотри в настройках ресурса, по каким группировкам его нужно считать. Делать это через условное оформрение тоже можно, но, имхо, изврат.
33
   MoneG
 
9 - 01.10.08 - 10:50
с ресурсами всё ок. два набора данных - сумма только для дока и номенклатура. Однако, соединение их выдает дублирование и по номенклатуре. (Сумма по доку иная, чем сумма всей номенклатуры в документе)
   Гаркин
10 - 01.10.08 - 11:00
"сумма только для дока и номенклатура" - Зачем нужна сумма для "номенклатура" ?
 
 
   MoneG
 
11 - 01.10.08 - 11:02
вот вот. для номенклатуры нужно наименование, а не сумма. Суть в том, что сумма для дока дублируется для поля Номенклатура при объединении компоновщиком
   MoneG
 
12 - 01.10.08 - 12:01
up
   Гаркин
13 - 01.10.08 - 12:08
Нет счас 8 рядом, если не разберешься апни вечером.
   MoneG
 
14 - 01.10.08 - 15:36
"невывод" лишнего можно только при отображении результата, поскольку результат запроса будет дублировать сумму (конкретному доку соответствует одновременно номенклатура и сумма по доку). Вывод результата СКД обрабатывает не построчно, а только поэлементно, что не дает однозначный доступ к конкретной строке. Не нашел никакого способа это обойти. Видел тему с такой же ситуацией по колонкам.
Имхо, 1С стоит подумать над этим..

Ап-аю
   MoneG
 
15 - 01.10.08 - 18:47
up
   MoneG
 
16 - 02.10.08 - 07:52
up
   MoneG
 
17 - 02.10.08 - 09:23
Эксперимент: В отборе условного оформления ставлю "Номенклатура НеРавно Справочники.Номенклатура.ПустаяСсылка" - закрасить в красный.
Результат: Строки номенклатуры в ТабДоке красные, все остальные - обычные.

Вывод: Как закрасить оставшиеся в другой цвет (чему равно Номенклатура в оставшихся строках) ?
20
   Garkin
 
18 - 02.10.08 - 10:07
Давай сначала. Если "Сумма" это ресурс и в отчете нет детальных записей, тогда все решается установкой флажков в поле "Расчитывать по ..." в закладке "Ресурсы".
   Garkin
 
19 - 02.10.08 - 10:22
Чтобы однозначно идентифицировать Групировку в условном оформлении можно  создать дополнительное вычисляемое поле и ресурс по нему (С расчетом только по этой группировке )со значением к примеру "Номенклатура"
23
   AquaKosh
 
20 - 02.10.08 - 11:47
(17) Юзай для этого Заполнено/Не заполнено, т.е. в твоём случае будет "Номенклатура Заполнено НужныйТебеЦвет".
   MoneG
 
21 - 02.10.08 - 11:56
AquaKosh, не катит. Ситуация такова, что если номенклатура в верхнем уровне группировки "Заполнено", то в нижнем она тоже "Заполнено", хотя и не выводится.

Garkin, попробую. думаю, ты прав.
23
   Staryi
 
22 - 02.10.08 - 12:10
Как разблокировать конфигурацию заблокированную средствами управления распределенной ИБ? 1С Розница 8. Надо поставить производителя в ценник,а конфигурация заблокирована.
   AquaKosh
 
23 - 02.10.08 - 15:08
(19)(21) Стоп, стоп, подождите, зачем такие сложности!? В настройке структуры отчёта, т.е. там, где задаётся порядок группировок, прямо для конкретной группировки и задаётся условное оформление, вот и будет однозначная идентификация группировки.
   MoneG
 
24 - 02.10.08 - 15:12
AquaKosh, поясни..
25
   AquaKosh
 
25 - 02.10.08 - 15:19
(24) Условное оформление можно задать как для всего отчёта, так и для конкретной группировки ещё на этапе проектирования группировок. Что конкретно-то не понятно?
   MoneG
 
26 - 02.10.08 - 15:21
понял. проверил. то, что хочется добиться. НО при смене порядка группировок настройки сбрасываюся :(
27
   AquaKosh
 
27 - 02.10.08 - 15:34
(26) Есть такое. А если сделать несколько предопределённых группировок, а потом из отчёта выбирать нужный блок группировок... так не покатит?
   MoneG
 
28 - 02.10.08 - 15:39
вот есть 5 группировок и юзер... прикинь, сколько вариантов настроек будет? была такая идея, но я её сразу откинул
   MoneG
 
29 - 03.10.08 - 15:39
в общем, никаких решений, не ограничивающихся самим СКД, не нашел.
ПРИШЛОСЬ работать РУКАМИ с ТабДоком через одну-единственную зацепку. Это идентификатор расшифровки. После вывода идентификатор расшифровки СКД дублируется у каждой ячейки ТабДока, для которой это имеет смысл. Одно не понял, почему-то существует смещение на 2.. Так вот, кроме идентификатора из структуры СКД выцепляю название группировки. НО! чтобы однозначно понять, что это за группировка, необходимо знать порядок группировок при текущем раскладе. Однако, это не тот Порядок, что есть в СКД. Поэтому, ПРИШЛОСЬ отдельно формировать упорядоченный список группировок, затем программно "догадываться", какому названию_из_СКД соответствует реальное_название.
Всё бы хорошо, но снова НО! Повторяющиеся группировки на одном уровне СКД вообще никак не именует! снова РУКАМИ использую Отступ из ТабДока...

В итоге, на весь отчет оформляю строки Номенклатура с белым текстом, программно вывожу в ТабДок и добавляю такое:

//вычисляю по тексту в ТабДоке "координаты"
 
//
 
//НомерНачала - первая строка после Шапки таблицы
 
//НомерКонца - посл строка в таблице
 
//...
 
Для ИндСтр = НомерНачала По НомерКонца Цикл
                
    Ячейка = ТабДок.Область(ИндСтр,1); //вывожу все группировки в одной колонке, поэтому 1
 
    ID = Ячейка.Расшифровка;
    Расшифровка = ДанныеРасшифровки.Элементы[ID-2]; //про эту 2-ку писал выше
 
    Попытка     //к сожалению, не всегда в структуре есть .Группировка (!)
 
        Группировка = Расшифровка.Группировка;
    Исключение
        Группировка="";
    КонецПопытки;
    
    Если     ПоказыватьЗаписи(Группировка) // самописная - определяю соответствие 
 
                            //Группировка_из_СКД типа "Группировка2" и 
 
                            //Реальная_группировка типа "Документ"
 
        ИЛИ Ячейка.Отступ = Отступ Тогда //также приходится отслеживать повторяющиеся группировки
 
        
        Строка = Ячейка.Верх;
        Отступ = Ячейка.Отступ;
        ОбластьРедактирования = ТабДок.Область(Строка,Колонка);
        ОбластьРедактирования.ЦветТекста = Новый Цвет(0, 0, 0); //"проявляю" нужные записи
 
    КонецЕсли;
           
КонецЦикла;

Если кто понял, пользуйтесь.. Поскольку это всё извращение (работающее), думаю, тема не закрыта.

P.S. Координаты шапки всё равно вычислять, поэтому сразу "привинтил" ФиксациюСверху и ПовторятьПриПечатиСтроки - полезно.
   MoneG
 
30 - 03.10.08 - 18:11
Есть идеи по-проще?
   MoneG
 
31 - 04.10.08 - 17:53
UP
кто реальное шарит в СКД, поделитесь идеями!
   MoneG
 
32 - 06.10.08 - 07:07
up
   Filippov
 
33 - 07.10.08 - 11:30
(0) Гаркин в (8) давал правильное решение. Я делел так. Об этом написано и в статье о ресурсах СКД на ИТС. И никакого кодирования не требуется - такого, например, как описано для случая Построителя отчетов в "Профессиональной разработке"
34
 
 
   MoneG
 
34 - 07.10.08 - 13:14
(33) Тогда подробней расскажите
   MoneG
 
35 - 08.10.08 - 11:04
Поясните, пока книжки нет..
up
36
   Гаркин
36 - 08.10.08 - 13:19
(35) Идея в том, что поле может быть выбрано в ресурсах несколько раз, с различными формулами для различных групировок.
   MoneG
 
37 - 09.10.08 - 09:01
Идея понятна; не понятно, как ей пользоваться..
   Гаркин
38 - 09.10.08 - 13:23
Ыыы..

В ресурсах щелкаешь по полю "Сумма", поле появляется в списке ресурсов.
В формуле ставишь "1", в "Рассчитывать по ..."  устанавливаешь птицу напротив "Номенклатура", все остальные снимаешь.

Еще раз щелкаешь по полю "Сумма", в списке ресурсов появляется еще одно поле "Сумма".
В формуле ставишь "2", в "Рассчитывать по ..."  устанавливаешь птицу напротив "Документ", все остальные снимаешь.

Проверяешь.
39
40
45
55
   MoneG
 
39 - 09.10.08 - 14:25
(38) Спасибо, за идею! В дальнейшем буду учитывать. Но это не решение, к сожалению. Проверил в теории и на практике.. Объясню суть еще раз.
В простейшем случае есть 2 группировки - Документ и Номенклатура - и один схожий ресурс Сумма. При этом Сумма для Документ НЕ есть сумма всей его номенклатуры.
Для понимания происходящего примем Сумма_по_документу = 0 (не отображается).
Пусть порядок вывода группировок "Документ, Номенклатура", и нужные галочки в "Рассчитывать по ..." поставлены правильно. Тогда:

Док,Ном | СуммаНом | СуммаДок |
--------|----------|----------|
Док     |     -    |    10    |
  Ном1  |     1    |    10    |
  Ном2  |     4    |    10    |
===============================
 
Итог    |     5    |    10    |

Как видно, не смотря на то что у ресурса СуммаДок "Рассчитывать по ..." напротив Номенклатура пустая галочка, в колонке СуммаДок значение продублировалось и для группировки Номенклатура. Такие записи в колонке СуммаДок не имеют смысла. При помощи условного оформления (для всего отчета) по группировке Номенклатура "убираем" некорректные значения:

Док,Ном | СуммаНом | СуммаДок |
--------|----------|----------|
Док     |     5    |    10    |
  Ном1  |     1    |     -    |
  Ном2  |     4    |     -    |
===============================
 
Итог    |     5    |    10    |

Но давайте изменим порядок группировок на "Номенклатура, Документ", Тогда при уже заданном условном оформлении для группировки Номенклатура увидим:

Ном,Док | СуммаНом | СуммаДок |
--------|----------|----------|
Ном1    |     1    |     -    |
 Док   |     1    |     -    |
Ном2    |     4    |     -    |
  Док   |     4    |     -    |
===============================
 
Итог    |     5    |    10    |

Как видно, группировка Документ тоже "затерлась" ! (Уровень Док больше уровня Ном, поэтому на уровне Док  "Заполнено(Ном) = Истина").

Вариант условного оформления группировок не для всего отчета не решение. Ибо при каждой смене порядка группировок оформление сбрасывается.

Вариант с хитростями в "Рассчитывать по... " не решение. Ибо "(Уровень Док больше уровня Ном, поэтому на уровне Док  "Заполнено(Ном) = Истина")".

----------------------------------------------
Как без "ручек" решить такую проблему в простейшем отчете?
40
   Гаркин
40 - 09.10.08 - 14:55
(39) читай внимательно (38)
   MoneG
 
41 - 09.10.08 - 15:01
Гаркин, прекрасно тебя понял, спасибо за идею. Проверил. Не то :(

P.S.
>Для понимания происходящего примем Сумма_по_документу = 0 (не отображается).
Читать как "".
42
   Гаркин
42 - 09.10.08 - 15:38
(41) Проверь еще раз.

P.S. Кстати какая платформа?
43
55
56
   MoneG
 
43 - 09.10.08 - 15:40
(42) 11.67
в аську? либо я тебя не понимаю, либо ты меня
44
   Гаркин
44 - 09.10.08 - 15:59
(43) Вечером
   MoneG
 
45 - 10.10.08 - 10:06
Так, парни, помогайте дальше.
Если сделать по (38) - то есть прописывать "0" по группировке Ном, всё красиво, за неким исключением:
1) при выводе номенклатуры в иерархии верхние ее уровни остаются без "изменений";
2) если по колонке СуммаДок вывести "СуммаДок.ПроцентОбщий", в таблице будет "Деление на 0", что логично - ведь сумма ресурса по группировке Ном = 0.
---------------------------------------
Какие могут быть решения?
   MoneG
 
46 - 10.10.08 - 12:16
умным людям UP
   MoneG
 
47 - 13.10.08 - 09:43
ап
   Garkin
 
48 - 13.10.08 - 10:03
1) с иерархией действительно облом, пиши условное оформление на условие Номенклатура.ЭтоГруппа=Истина
2) условное оформление по условию СуммаДок=0
49
50
55
56
   MoneG
 
49 - 13.10.08 - 10:22
(48) - 1) если написать, а потом номенклатуру перед документом поставить, то снова сабж :(
51
 
 
   MoneG
 
50 - 13.10.08 - 10:34
(48) - 2) тоже облом. Почему-то не во всех строках срабатывает и, если сумма по итогу =0, то название колонки тоже примет заданное оформление :(
51
   Garkin
 
51 - 13.10.08 - 12:37
(49) Добавь "СуммаДок" в ресурсы еще раз, в  "Рассчитывать по ..."  ничего не меняй. :)

(50)  С этим проблема, воспроизвести не смог, у меня все работает.
   MoneG
 
52 - 13.10.08 - 13:42
Думаю, ветку можно закрывать.
Выводы (в упрощенном варианте):
1) на вкладке Ресурсы задаю 2 поля:
   Поле    | Выражение      | Рассчитывать по...
  =========|================|==================
    ...    | ...            | ...
    СуммаДок| Сумма(СуммаДок)| Документ
    СуммаДок| 0              | Номенклатура

 
2) на вкладке Настройки - Условное оформление задаю оформление на случай иерархии:
    Область | Отбор                              | Оформление
   =========|====================================|==================
    СуммаДок| Номенклатура.ЭтоГруппа Равно Истина| \/ Текст <>

 
3) нулевой итог не обойти никак. Дописал:

Процедура ОбновитьТаблицу()
    ТабДок = ЭлементыФормы.Результат;
    
    Область = ТабДок.НайтиТекст("СуммаДок");
    Если Область = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Колонка         = Область.Лево;
    НомерНачала     = Область.Низ+2;
    
    //при куче строк без этого никак
 
    ТабДок.ФиксацияСверху = НомерНачала-1;
    
    Область = ТабДок.НайтиТекст("Итого",,,Ложь); //нижние итоги
 
    НомерКонца = Область.Верх;

    //если подобных колонок не одна (например, еще выводится ПроцентОбщий)
 
    КолвоКолонок = ВычислитьКолВоКолонок(НомерНачала-1,Колонка);

    Для ИндСтр = НомерНачала По НомерКонца Цикл
        Для ИндКол=0 По КолвоКолонок Цикл
            Область = ТабДок.НайтиТекст("Деление",ТабДок.Область(ИндСтр,Колонка));
            Если Область <> Неопределено Тогда
                 Область.Текст = "";
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;    
КонецПроцедуры

Пользуйтесь на здоровье!

Величайшее спасибо Гаркину за содействие!!
53
   Garkin
 
53 - 13.10.08 - 13:50
(52)
Знаешь чем отличается хороший программист от плохого.
Плохой напишет
3) нулевой итог не обойти никак.

Хороший сформулирует это следующим образом:
3) нулевой итог обойти можно, но я незнаю как.
54
58
   MoneG
 
54 - 13.10.08 - 13:55
(53) как ты красиво системное поле обойдешь, которое автоматически вычисляется? только дебагом внутренностей СКД. В рамках того, чем приходится довольствоваться - никак, но руками обойти можно :)
   Garkin
 
55 - 13.10.08 - 14:08
Ну вопервых это системное поле можно имитировать через вычисляемые поля
Примерно так
СуммаДок/Вычислить("Сумма(СуммаДок)","Группировка","ОбщийИтог") -  для процента по группе, но это так к слову.

Если к нашим баранам, то мы стобой договорильсь что группировку "Номенклатура" однозначно можно определить методом из (38) + (48), что мешает написать условное оформление затирающее деление на ноль даже если (42) п.2 не катит?
56
57
58
   Garkin
 
56 - 13.10.08 - 14:14
+(55)
"если (42) п.2 не катит?" читать как "если (48) п.2 не катит?"
58
   MoneG
 
57 - 13.10.08 - 14:52
(55) Ладно, ты не злись. "Не обойти" - это о системных процентах. 1Сники эту ситуацию просто выкидывают в результат и .. как говорится, конем оно. Можно было как-то более деликатно сделать.
58
   Garkin
 
58 - 13.10.08 - 15:13
(57) как ты определил что я злюсь?
+(53) :)
+(55) :)
+(56) :)
+(58) :P)
58

 

Список тем форума

 
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.