| 
    
            
         
         | 
    
  | 
Вычисляемое поле | ☑ | ||
|---|---|---|---|---|
| 
    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 Орлов Александр Владимирович Мазалова Ирина Львовна  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |