Имя: Пароль:
1C
1С v8
Кросс таблица для СКД
,
0 Ly_Alena
 
08.01.16
14:02
Добрый вечер! Для расшифровки данных в предопределенном макете СКД решила сделать кросс таблицу ну и как обычно начались тупняки.
Кросс таблица показывает все документы движения, которые есть в регистре. А как отсортировать, например по контрагенту?

Процедура РезультатОбработкаРасшифровки(Элемент, ВыбраннаяСтрока, Расшифровка, СтандартнаяОбработка)
...
СоответствиеОтбора = Новый Соответствие;
        //СоответствиеОтбора.Вставить("Контрагент", ВыбраннаяСтрока.Контрагент);
...
КонецПериода

Как указать колонку (параметр) в текущей строке, по которой отсортировать?
1 Ly_Alena
 
08.01.16
14:02
Процедура РезультатОбработкаРасшифровки(Элемент, ВыбраннаяСтрока, Расшифровка, СтандартнаяОбработка)

...

СоответствиеОтбора = Новый Соответствие;
        СоответствиеОтбора.Вставить("Контрагент", ВыбраннаяСтрока.Контрагент);

...
КонецПроцедуры
2 Ly_Alena
 
11.01.16
05:00
Вот это да... ни одного сообщения. Граждане хэлп! )
3 Ly_Alena
 
11.01.16
08:03
Похоже люди еще с каникул не вышли ) Печаль прямо...
4 Chameleon1980
 
11.01.16
08:19
спят ешо
5 Ly_Alena
 
11.01.16
08:34
С пятницы еще ) (4)
6 hhhh
 
11.01.16
09:26
(5) а что конкретно не получается? И почему пишешь отбор, а вопрос задаешь про сортировку? Это же разные вещи.
7 Ly_Alena
 
11.01.16
09:33
(6) не получается отобразить только те документы движения, из которых складывается цифра в отчете. у меня отображает все документы движения, которые есть в регистре.
8 Ly_Alena
 
11.01.16
09:35
(6) отбор. мне нужно отобрать по колонкам в строке, по которой щелкнули
9 Ly_Alena
 
11.01.16
09:38
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
        СтандартнаяОбработка = Ложь;
        
        Отчет = Отчеты.ОтчетСписокКроссТаблица.Создать();
                        
        СтруктураНостроек = Новый Структура;
        СтруктураНостроек.Вставить("ИмяРегистра", "ДебиторыКредиторы");
        СтруктураНостроек.Вставить("ДатаКон", ТекущаяДата());
        
        СоответствиеОтбора = Новый Соответствие;
        //СоответствиеОтбора.Вставить("Контрагент", Расшифровка.Контрагент);
        СтруктураНостроек.Вставить("Отбор",СоответствиеОтбора);
        
        СоответствиеГруппировок = Новый Соответствие;
        СоответствиеГруппировок.Вставить("Контрагент");
                
        СтруктураНостроек.Вставить("ГруппировкиСтрок", СоответствиеГруппировок);
        СтруктураНостроек.Вставить("ВыбранныеПоля",  Новый Структура("ДокументЗадолженности", "ДокументЗадолженности"));
        СтруктураНостроек.Вставить("РаскрашиватьИзмерения", Истина);
        
        Отчет.Настроить(СтруктураНостроек);
        
        ФормаОтчета = Отчет.ПолучитьФорму();
        ФормаОтчета.ОбновитьОтчет();
        ФормаОтчета.Открыть();
КонецПроцедуры


Закомментированная строка выдает ошибку:
{Форма.ФормаОтчета.Форма(12)}: Значение не является значением объектного типа (Контрагент)
        СоответствиеОтбора.Вставить("Контрагент", Расшифровка.Контрагент);
10 Ly_Alena
 
11.01.16
09:39
Как ему написать по какому полю должен быть отбор, передать из строки расшифровки?
11 Defender aka LINN
 
11.01.16
09:46
Чтобы сделать расшифровку - надо СКД не мешать. Она и сама все умеет.
12 Ly_Alena
 
11.01.16
09:47
(11) если не предопределенный макет.
13 Defender aka LINN
 
11.01.16
09:51
(12) На кой черт он нужен?
А так - в типовых (в Рознице 1 точно) есть готовый код, который из данных расшифровки выгребает значения
14 hhhh
 
11.01.16
09:55
(12) вообще-то Расшифровка это массив. Поэтому слово Расшифровка.Контрагент не прокатит по-любому. Лучше поставь там точку останова и посмотри отладчиком, что там в поле Расшифровка?
15 Ly_Alena
 
11.01.16
10:42
Понятно что Расшифровка.Контрагент не пойдет. Поэтому и спрашиваю как пойдет?
16 Ly_Alena
 
11.01.16
10:52
(13) мне нужны данные не из расшифровки, а данные отчета, чтобы расшифровка по ним была отфильтрована.
ps Для чего нужен предопределенный макет - не обсуждается.
17 Ly_Alena
 
11.01.16
12:20
Люююдиии, вы где? )
18 AceVi
 
11.01.16
14:44
Запусти отладку и смотри
1. данные расшифровки хранятся в таблице(или там дерево, не суть важно) ДанныеРашифровки.
2. Переменная Расшифровка - это просто указатель на строку в этой таблице(то ли номер строки, то ли значение колонки, посмотри через отладчик).
Соответственно - находишь строку - в строке значение расшифровки. и от туда уже через точку получишь контрагента.
19 Defender aka LINN
 
11.01.16
22:34
(14) Расшифровка - это не массив.
(18) И не таблица и не дерево.
20 Ly_Alena
 
12.01.16
08:18
Расшифровка - это поле расшифровки - которое я указала в макете.
21 Ly_Alena
 
12.01.16
08:19
(18) (19) если б через точку можно было что-то получить - я бы сюда не написала. Ошибка выходит через точку - выше писала текст.
22 Ly_Alena
 
12.01.16
08:21
(20) Пардоньте! Не поле, которое я указала - а документ регистратор.
23 Ly_Alena
 
12.01.16
08:43
Уже мне кажется весь интернет перерыла...
Все-таки как получить данные строки, в которой выполняется расшифровка ячейки в предопределенном макете?
24 AceVi
 
12.01.16
09:08
(23) Я же написал как. ты пробовала?
25 AceVi
 
12.01.16
09:09
(21)  Читай Внимательно! там написано что есть переменная с именем ДанныеРашифровки - это таблица. и далее по тексту читай. что за невнимательность.
26 Ly_Alena
 
12.01.16
09:10
(24) Конечно. Расшифровка - это документ Регистратор.
С самого начала так и пробовала через точку - выдает ошибку.
27 Ly_Alena
 
12.01.16
09:10
(25) Так... сейчас
28 Ly_Alena
 
12.01.16
09:13
(25) Не пойму, как выйти на данные расшифровки?
29 Ly_Alena
 
12.01.16
09:14
(28) если через точку ДанныеРасшифровки.Контрагент или любое другое поле - говорит что поле не обнаружено.
30 AceVi
 
12.01.16
09:19
о боже. ДанныеРасшифровки это ТАБЛИЦА. тебе в ней надо получить строку - указание на строку есть переменная Расшифровка. По крайней мере так работают стандартные отчеты на СКД. Скинь сюда значение переменной Расшифровка.
31 Ly_Alena
 
12.01.16
09:31
Значение расшифровки - Документ Платежное поручение входящее
32 Ly_Alena
 
12.01.16
09:33
(30) в Отчете нет такого значение (как платежное поручение). Это есть в регистре из которого строится кросс таблица.
33 AceVi
 
12.01.16
09:39
Это прям ты скопировала из отладчика значение переменной? у тебя там строка в которой написано  Документ Платежное поручение входящее?
Или ты не привела полное значение и там ссылка на конкретный документ?
34 AceVi
 
12.01.16
09:49
О кстати - как ты формируешь сам отчет?
в модуле отчета типа такие строки есть?

МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);
35 Ly_Alena
 
12.01.16
10:33
(33) ссылка на конкретный документ
36 Ly_Alena
 
12.01.16
10:36
(34) нет - ни одной строчки нет.
37 AceVi
 
12.01.16
10:46
Тогда понятно, как видишь, в стандартных отчетах которые придумала 1С, они при компановке макета данные расшифорвки выгружают в переменную ДанныеРасшифровки, по крайней мере так было в УПП 1.3. Ты значит, по своему как то делаешь. тут пока сам отчет не пришлешь, не понятно как ты там все настроила.
И в конце концов, тогда странно, если у тебя переменная Расшифровка - это ссылка на конкретный документ, тогда и через точку можно получать.
У тебя форма отчета обычная или управляемая?
Судя по всему обычная. и должно через точку получать значения из типа значения ссылка.
Значит что то непонятное твориться, надо глядеть на сам отчет в отладчике.
38 Ly_Alena
 
12.01.16
10:50
(37) Форма отчета обычная. Если внешнюю обработку скину - не получится. Регистр свой. Что делать?
39 Ly_Alena
 
12.01.16
11:35
(37) снова все меня покинули. Мне так нужна хоть какая-то помощь...
40 AceVi
 
12.01.16
11:41
Скидывай базу, что делать то.
Делаешь пустую базу, заводишь в регистр пару строк и скидываешь.
41 Ly_Alena
 
12.01.16
11:54
(40) Других вариантов нет? Базу не могу. И отправлять ничего не могу.
42 AceVi
 
12.01.16
12:01
(41) Ну а какие варианты, если ты утверждаешь, что переменная Расшифровка = ссылка а через точку ты получить не можешь. Либо неверное наименование реквизита через точку и там такого нет, либо твориться магия.
Если ты говоришь - что это ссылка - ну открой в отладчике и посмотри, есть там контрагент или нет.и скрин сделай.
43 Ly_Alena
 
12.01.16
12:11
(42) открывала документ и через точку ставила реквизиты, которые есть там.
Может загвоздка в том, что в расшифровке показывает документ регистратор, который в макете не участвует. Он показывает все данные из регистра, никак не связанные с выведенным отчетом. И эти данные нужно отфильтровать.
44 AceVi
 
12.01.16
13:04
(43) Не путай теплое с мягким. Если Расшифровка = ссылка то и через точку получить можно. А че там за ссылка - регистратор не регистратор, не важно.
Скрины давай.
45 Ly_Alena
 
12.01.16
13:57
Пароль везде 123
Настройка
[url=http://www.fayloobmennik.net/5661254]Настройка.JPG[/url]
46 Ly_Alena
 
12.01.16
13:58
Лучше здесь
https://dropmefiles.com/elvmz
47 Ly_Alena
 
12.01.16
14:01
https://dropmefiles.com/NM0HL - значение расшифровки
48 AceVi
 
12.01.16
15:09
(47) Давай по порядку. СКД показывать не надо.
я прошу скрин где - Покажи значение переменной расшифровка в окне "Вычислить выражение" (ставишь курсор на переменную и нажимаешь shift+f9) и раскрой, и покажи что там есть реквизит контрагент.
49 Ly_Alena
 
13.01.16
05:03
ДанныеРасшифровки https://dropmefiles.com/NM0HL
50 Ly_Alena
 
13.01.16
06:45
Короче сделала извратом:

Процедура РезультатВыбор(Элемент, Область, СтандартнаяОбработка)
    мПолеКонтрагент =Область.Верх;    
КонецПроцедуры

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
...
//Контрагент
    ПолеКонтрагент = ЭлементыФормы.Результат.Область(мПолеКонтрагент,2).Текст;
    ПолеСправочникаКонтрагенты = Справочники.Контрагенты.НайтиПоНаименованию(ПолеКонтрагент);
...
СоответствиеОтбора = Новый Соответствие;
    СоответствиеОтбора.Вставить("Контрагент", ПолеСправочникаКонтрагенты);
СтруктураНостроек.Вставить("Отбор",СоответствиеОтбора);
...

Если кто-то предложит более изящное решение - буду очень рада!
51 Mankubus
 
13.01.16
06:54
(50) а расшифровка.контрагент не работает что ли?
документ платежное поручение у тебя не ДанныеРасшифровки, а Расшифровка
52 Ly_Alena
 
13.01.16
07:06
(51) Нет
53 LordCMEPTb
 
13.01.16
08:48
(52) А в макете, который выводит область "Строка" у ячейки "Контрагент" задан параметр расшифровки?
Ну и в параметр расшифровки вроде можно несколько значений установить, лишь бы одни были в текущей группе структуры отчетов (т.е. не получилось так, что расшифровка шапки по контрагенту, который только в подчиненной группировке выбирается).
54 Ly_Alena
 
13.01.16
09:07
(53) Контрагенту не задавала параметр расшифровки... Сейчас попробую.
55 Ly_Alena
 
13.01.16
09:11
(53) не
Расшифровка - ссылка на документ платежное поручение
56 Ly_Alena
 
17.01.16
14:17
Снова я! Все прокляла! Сделала расшифровку по кросс таблице, возникла необходимость добавить Регистратор в расшифровку. А вот фиг! Выскакивает ошибка - что такое измерение не найдено. Получается в кросс-таблице можно отобразить только изменения? Или все-таки есть вариант показать документ регистратор? Товарищи знатоки хэлп!
57 Ly_Alena
 
18.01.16
13:02
up
58 Ly_Alena
 
18.01.16
13:52
(56) не изменения, а измеРения
Код:
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;

    Отчет = Отчеты.ОтчетСписокКроссТаблица.Создать();
        
    СтруктураНостроек = Новый Структура;
    СтруктураНостроек.Вставить("ИмяРегистра", "ДебиторыКредиторы");
    СтруктураНостроек.Вставить("ДатаКон", ТекущаяДата());
    
    //Контрагент
    ПолеКонтрагент = ЭлементыФормы.Результат.Область(мПолеКонтрагент,2).Текст;
    ПолеСправочникаКонтрагенты = Справочники.Контрагенты.НайтиПоНаименованию(ПолеКонтрагент);
    
    //Ответственный
    ПолеОтветственный = ЭлементыФормы.Результат.Область(мПолеКонтрагент,5).Текст;
    ПолеСправочникаОтветственный = Справочники.ФизическиеЛица.НайтиПоНаименованию(ПолеОтветственный);
    
    //Договора
    ПолеДоговор = ЭлементыФормы.Результат.Область(мПолеКонтрагент,12).Текст;
    ПолеСправочникаДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ПолеДоговор);
    //
    //Срок по договору
    //ПолеСрокПоДоговору = ЭлементыФормы.Результат.Область(мПолеКонтрагент,8).Расшифровка;
    //Если ПолеСрокПоДоговору <> "" Тогда
    //    ПолеДаты = Дата(ПолеСрокПоДоговору);
    //Иначе
    //    ПолеДаты = "";
    //КонецЕсли;
    
    
    //Договор
    //ПолеДоговор = ЭлементыФормы.Результат.Область(мПолеКонтрагент,12).Расшифровка;
    //ПолеСправочникаДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ПолеДоговор);

    СоответствиеОтбора = Новый Соответствие;
    
    СоответствиеОтбора.Вставить("Контрагент", ПолеСправочникаКонтрагенты);
    СоответствиеОтбора.Вставить("Ответственный",ПолеСправочникаОтветственный);
    //СоответствиеОтбора.Вставить("СрокПоДоговору",ПолеДаты);
    СоответствиеОтбора.Вставить("Договор",ПолеСправочникаДоговор);
    СтруктураНостроек.Вставить("Отбор",СоответствиеОтбора);
    //    
    СоответствиеГруппировок = Новый Соответствие;
    //СоответствиеГруппировок.Вставить("Контрагент");
    ////СоответствиеГруппировок.Вставить("Ответственный");
    ////СоответствиеГруппировок.Вставить("Договор");
    ////СоответствиеГруппировок.Вставить("СрокПоДоговору");
    
    СоответствиеГруппировок = Новый Соответствие;
    СоответствиеГруппировок.Вставить("ДокументЗадолженности");
    СтруктураНостроек.Вставить("ГруппировкиСтрок", СоответствиеГруппировок);
                    
        
    Отчет.Настроить(СтруктураНостроек);
        
    ФормаОтчета = Отчет.ПолучитьФорму();
    ФормаОтчета.ОбновитьОтчет();
    ФормаОтчета.Открыть();
    
КонецПроцедуры
Независимо от того, куда вы едете — это в гору и против ветра!