Имя: Пароль:
1C
1С v8
Вычисляемое поле
0 Илья1111
 
08.09.19
20:09
Доброго времени суток!
Подскажите пожалуйста. Делаю внешний отчет по изменению основного менеджера в справочнике Партнеры.В вычисляемом поле функцией из "Общего модуля" я возвращаю таблицу значений. Как из нее мне получить содержимое определенной ячейки?
1 Илья1111
 
08.09.19
20:11
(0) В отчете нужно получить все факты изменения основного менеджера в Партнере из Истории изменений по Справочнику Партнеры. А таблица значений, результат функции, это версия объекта.
2 Chameleon1980
 
08.09.19
20:17
Перебирая строки, получай через точку из очередной строки значение ячейки
3 Chameleon1980
 
08.09.19
20:18
Предысторию мог бы и не писать.
4 Chameleon1980
 
08.09.19
20:18
Ответ гуглится на раз два
5 Илья1111
 
09.09.19
20:12
(4) А в каком модуле нужно осуществить перебор строк таблицы значений?
Для этого подойдет модуль формы внешнего отчета?Внешний отчет делаю на СКД.
6 Chameleon1980
 
10.09.19
04:26
Тз оттуда видно? Вперёд. Может уже к делу?
7 ДенисЧ
 
10.09.19
04:58
Эту фигню нужно делать запросом, а не каким-то левым общим модулем и ещё более левой тз.
8 Chameleon1980
 
10.09.19
05:14
Пусть учится в т.ч. С тз работать
9 Илья1111
 
13.09.19
06:09
(6) Не получается обратиться к ТЗ из этого модуля.
10 Илья1111
 
13.09.19
06:14
(9) Пытаюсь выбрать текст из ячейки
Результат1=Менеджер.Область("R2C3").Текст;
Где Менеджер это имя поля, где хранится таблица, ошибка: Переменная не определена (Менеджер)
11 AneJIbcuH
 
13.09.19
06:33
(10) Что-то невероятное делаете. Какие исходные данные? Есть справочник "Партнеры", это понятно. Что есть история изменений? Регистр Сведений? Как отчет в итоге должен выглядеть?  

-Партнер 1
-- Изменение 1
-- Изменение 2
-- Изменение 3

-Партнер 2
-- Изменение 1
-- Изменение 2

Так?
12 Chameleon1980
 
13.09.19
07:42
аааааааааааааааа
13 Илья1111
 
13.09.19
20:41
(11) (11) Партнер 1
-- Изменение 1
-- Изменение 2
-- Изменение 3

по Основному менеджеру в Партнер1. Группировка по умолчанию должна быть установлена по Партнер1.
14 Илья1111
 
13.09.19
20:45
все данные беру из Регистр Сведений
Версии Объектов
все получилось, однако поле
ВерсииОбъектов.Объект.ОсновнойМенеджер
мне возвращает значение реквизита из последней версии (одно и то же в
-- Изменение 1
-- Изменение 2
-- Изменение 3)
15 Илья1111
 
13.09.19
20:49
(14) подумалось, что более правильный подход, вызвать готовую функцию из Общего модуля
ВерсионированиеОбъектов.ОтчетПоВерсииОбъекта(Партнер,Номер,Номер)
она возвращает результат ТабличныйДокумент. Вот из него то и хочу взять и вывести данные.
16 hhhh
 
13.09.19
20:57
(15) лучше найти функцию, которая возвращает не табличный документ. Неужели нет попроще функций?
17 Илья1111
 
15.09.19
08:08
Еще особенность: все действия нужно проводить в рамках Внешего отчета.
Т.е. конфигурацию не менять, из готовых функций Общих модулей нашел только такую.
18 Мимохожий Однако
 
15.09.19
09:19
(17) Может быть, проще написать нужную тебе функцию и не костылить?
19 Илья1111
 
15.09.19
19:22
(18) Эта функция может быть расположена в модуле Внешнего отчета?
20 ДенисЧ
 
15.09.19
19:25
(19) нет
21 Илья1111
 
15.09.19
19:57
у меня по задаче недопустимо менять конфу..то есть, кроме модуля Внешнего отчета и не где делать
22 shuhard
 
15.09.19
20:13
(21) что мешает в твоем отчете на СКД использовать ПриКомпоновкеРезультата ?
получи список Партнеров, добудь ТЗ и выведи её в отчет
вычисляемые поля для данной задачи не нужны
23 Илья1111
 
16.09.19
06:30
https://expert.chistov.pro/public/334440/ так?
т.е. добавить одно поле-колонку в таблицу, и в нее вывести (полученное запросом)?
24 shuhard
 
16.09.19
06:52
(23) да
25 Илья1111
 
16.09.19
19:17
Полю Менеджер указал тип значения ОпределяемыйТип.ФизическоеЛицо.
Запрос = Новый Запрос;

            Запрос.Текст =
    "ВЫБРАТЬ
    |    ВерсииОбъектов.Объект.ОсновнойМенеджер.Ссылка КАК ОсновнойМенеджер
    |ИЗ
    |    РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов";
    

    

    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
    Результат1 = Новый Структура("ОсновнойМенеджер",Выборка);
    Результат1.ОсновнойМенеджер = Результат1.ОсновнойМенеджер.Получить();
    СтрокаТЗ.Менеджер=Результат1.ОсновнойМенеджер;
         КонецЕсли;  
        КонецЦикла;
но почему то вылазит ошибка Поле не найдено "Менеджер"
26 Илья1111
 
21.09.19
18:46
Запрос = Новый Запрос;

            Запрос.Текст =
    "ВЫБРАТЬ
    |    ВерсииОбъектов.Объект.ОсновнойМенеджер.Ссылка КАК ОсновнойМенеджер,
    |    ВерсииОбъектов.НомерВерсии КАК Номер
    |ИЗ
    |    РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов";
        Результат = Запрос.Выполнить();
    Выборка = Результат[2].Выгрузить();
    Менеджер= Выборка.ВыгрузитьКолонку(0);Номер= Выборка.ВыгрузитьКолонку(1);  
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Менеджер", Новый ОписаниеТипов("СправочникСсылка.Пользователи"));
    ТЗ.Колонки.Добавить("Номер", Новый КвалификаторыЧисла(10,0));
    ТЗ.ЗагрузитьКолонку(Менеджер,"Менеджер");
    ТЗ.ЗагрузитьКолонку(Номер,"Номер");

    ВнешнийНаборДанных = Новый Структура;
    ВнешнийНаборДанных.Вставить("НаборДанных2", ТЗ);  
    //МакетКомпоновки = КомпоновщикМакета.Выполнить(ПолучитьМакет("Макет")
    //,КомпоновщикНастроек.ПолучитьНастройки(),ДанныеРасшифровки, );
     ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    
    ДокументРезультат.Очистить();

    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки, Истина);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);    

пишет "Получение элемента по значения по индексу не определено"
27 Илья1111
 
22.09.19
12:06
(7) В "Основная схема компоновки данных" у меня сейчас вот так:
ВЫБРАТЬ
    ВерсииОбъектов.НомерВерсии КАК Номер,
    ВерсииОбъектов.АвторВерсии КАК КтоУстановил,
    ВерсииОбъектов.Объект.Ссылка КАК Партнер,
    ВерсииОбъектов.ДатаВерсии КАК КогдаУстановил,
    ВерсииОбъектов.ВерсияОбъекта
ИЗ
    РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
ГДЕ
    ВерсииОбъектов.Объект.Ссылка = &Партнер
все поля отлично выбираются запросом, и выводятся в отчет, кроме одного единственного поля - ОсновнойМенеджер. Если его добавить в выборку,то во всех строках выводит значение этого реквизита из самой последней версии (например, 5-ой), то есть видимо,значение реквизита Объекта Справочник Партнеры. Не получается вывести в отчет основного менеджера из каждой версии нужного, установленного в ней.
28 Илья1111
 
13.10.19
14:40
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;  
    //Настройки=КомпоновщикНастроек.ПолучитьНастройки(); ДанныеРасшифровки=Новый ДанныеРасшифровкиКомпоновкиДанных;
    // ДанныеРасшифровки.Настройки=КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(
        ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"),                      // Первая схема компоновки
        ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных").НастройкиПоУмолчанию,  ДанныеРасшифровки,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;  
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
        ДокументРезультат.Очистить();
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ТаблицаРезультат = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
        
            
    ТаблицаРезультат.Колонки.Добавить("Манагер"); // Не забываем добавить поле "Манагер" и в набор данных схемы "СхемаКомпоновкиДанныхВнешняя"
            Для Н=1 По ТаблицаРезультат.Количество() Цикл
    ТаблицаРезультат.Добавить();
КонецЦикла;
            Для каждого СтрокаТЗ Из ТаблицаРезультат Цикл
            
            //Если Выборка.Следующий() Тогда
             СтрокаТЗ.Манагер = СтрокаТЗ.Менеджер.Область("R20C3").Текст;
            Если СтрокаТЗ.Менеджер.Область("R20C3").Текст="Нет"  Тогда               
                    СтрокаТЗ.Манагер=СтрокаТЗ.Менеджер.Область("R21C3").Текст;

            
                КонецЕсли;
                
                //КонецЕсли;  
        КонецЦикла;
        инд0 = ТаблицаРезультат.Колонки.Индекс(ТаблицаРезультат.Колонки.Менеджер);    
        Если ТипЗнч(инд0) = Тип("Число") Тогда  
        ТаблицаРезультат.Колонки.Удалить(инд0); КонецЕсли;
                            
    НаборДанных = Новый Структура;
    НаборДанных.Вставить("НаборДанных2", ТаблицаРезультат);  
    МакетКомпоновки = КомпоновщикМакета.Выполнить(ПолучитьМакет("СхемаКомпоновкиДанныхВнешняя")    ,КомпоновщикНастроек.ПолучитьНастройки(),ДанныеРасшифровки, );
     //ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;    
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, НаборДанных, ДанныеРасшифровки);
    //ДокументРезультат.Очистить();    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);    
    
КонецПроцедуры
29 Илья1111
 
13.10.19
14:40
(28) Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;  
    //Настройки=КомпоновщикНастроек.ПолучитьНастройки(); ДанныеРасшифровки=Новый ДанныеРасшифровкиКомпоновкиДанных;
    // ДанныеРасшифровки.Настройки=КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(
        ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"),                      // Первая схема компоновки
        ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных").НастройкиПоУмолчанию,  ДанныеРасшифровки,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;  
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
        ДокументРезультат.Очистить();
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ТаблицаРезультат = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
        
            
    ТаблицаРезультат.Колонки.Добавить("Манагер"); // Не забываем добавить поле "Манагер" и в набор данных схемы "СхемаКомпоновкиДанныхВнешняя"
            Для Н=1 По ТаблицаРезультат.Количество() Цикл
    ТаблицаРезультат.Добавить();
КонецЦикла;
            Для каждого СтрокаТЗ Из ТаблицаРезультат Цикл
            
            //Если Выборка.Следующий() Тогда
             СтрокаТЗ.Манагер = СтрокаТЗ.Менеджер.Область("R20C3").Текст;
            Если СтрокаТЗ.Менеджер.Область("R20C3").Текст="Нет"  Тогда               
                    СтрокаТЗ.Манагер=СтрокаТЗ.Менеджер.Область("R21C3").Текст;

            
                КонецЕсли;
                
                //КонецЕсли;  
        КонецЦикла;
        инд0 = ТаблицаРезультат.Колонки.Индекс(ТаблицаРезультат.Колонки.Менеджер);    
        Если ТипЗнч(инд0) = Тип("Число") Тогда  
        ТаблицаРезультат.Колонки.Удалить(инд0); КонецЕсли;
                            
    НаборДанных = Новый Структура;
    НаборДанных.Вставить("НаборДанных2", ТаблицаРезультат);  
    МакетКомпоновки = КомпоновщикМакета.Выполнить(ПолучитьМакет("СхемаКомпоновкиДанныхВнешняя")    ,КомпоновщикНастроек.ПолучитьНастройки(),ДанныеРасшифровки, );
     //ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;    
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, НаборДанных, ДанныеРасшифровки);
    //ДокументРезультат.Очистить();    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);    
    
КонецПроцедуры
30 Илья1111
 
13.10.19
14:42
Отчет генерится без ошибок, но выдает пустую таблицу.
Поля
Партнер1
Номер КтоУстановил КогдаУстановил
31 Илья1111
 
15.10.19
19:54
(24)Я могу предположить, что поле "Основной менеджер", которое мне предстоит вывести в отчет, нужно получить из каких то Виртуальных таблиц, которые связаны с Партнером...
Как мне "добраться" до них?У меня вот в этом проблема, понять, где это лежит в базе.
ВерсииОбъектов.Объект.ОсновнойМенеджер.Ссылка мне не даст то что я хочу.
Это будет ссылка на ОсновногоМенеджера, значение реквизита Партнера (установленного в последней версии).
32 Илья1111
 
16.10.19
06:17
(31) (11) Я могу предположить, что поле "Основной менеджер", которое мне предстоит вывести в отчет, нужно получить из каких то Виртуальных таблиц, которые связаны с Партнером...
Как мне "добраться" до них?У меня вот в этом проблема, понять, где это лежит в базе.
ВерсииОбъектов.Объект.ОсновнойМенеджер.Ссылка мне не даст то что я хочу.
Это будет ссылка на ОсновногоМенеджера, значение реквизита Партнера (установленного в последней версии).
33 hhhh
 
16.10.19
07:16
(32) посмотри в других отчетах, как выводится. Основной менеджер, он во всех отчетах есть.
34 Илья1111
 
14.01.20
21:24
(24) Почти готово. Партнер1 База "Электроника и бытовая техника" - нужно оставить только эти две строки, т.е. 3-ю и 4-ю, и сгруппировать по Партнер1. Как это сделать?Снимок1 это файл где видно как настроен вывод информации в виде таблицы.
35 Илья1111
 
14.01.20
21:27
(34)
Тут никак снимок не прикрепить:
Партнер1                             Номер  Когда установил    Кто установил                Менеджер
База "Электроника и бытовая техника" 1     29.09.2019 10:06:57 Орлов Александр Владимирович Королев Сергей Васильевич
База "Электроника и бытовая техника" 2     29.09.2019 10:06:57 Орлов Александр Владимирович Мазалова Ирина Львовна
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.