Имя: Пароль:
1C
1С v8
Прошу помощи в доработке отчета
0 bezdarOR Enburgski
 
17.01.20
14:22
Прошу помочь в доработке уже готового отчета в конфигурации Менеджмент безопасности (бесплатная конф)

Есть отчет "Журнал учета ключевых документов для обладателя конфиденциальной информации"
По умолчанию он не полностью заполнен. Соответственно надо заполнить 3,4, 7,8 колонки

Он составлен вручную. В общем модуле есть функции "Функция ПолучитьРабочуюТаблицуКриптоключейДляЖурналовФАПСИ152()" главная функция набирает данные для отчета и формирует рабочую таблицу

эта собирает формирует итоговую таблицу и отчет Функция ПолучитьТаблицуКриптоключейДляЖурналаФАПСИ152ОКИ()

Еще прошу поделиться учебным материалом по созданию сложных отчетов на основе запросов. Или помогите разобраться в коде этих функций.

привожу код функций

// РабочаяТаблица - временная структура, в которой накапливаются данные для подготовки
    // данных в ИтоговойТаблицеОтчета
    РабочаяТаблица = Новый ТаблицаЗначений;
    РабочаяТаблица.Колонки.Добавить("КлючеваяИнформация");
    РабочаяТаблица.Колонки.Добавить("ДатаВводаВЭксплуатацию");
    РабочаяТаблица.Колонки.Добавить("ДатаВыводаИЗЭксплуатации");
    РабочаяТаблица.Колонки.Добавить("ДатаПолученияПервогоКД");    
    РабочаяТаблица.Колонки.Добавить("АктПолученияПервогоКД");
    РабочаяТаблица.Колонки.Добавить("АктУничтоженияПоследнегоКД");
    
    РабочаяТаблица.Колонки.Добавить("ТаблицаЭксплуатации");
        //                           РабочаяТаблица.Колонки.Добавить("ИС"); // я тут
        //                            РабочаяТаблица.Колонки.Добавить("АктВводаВЭксплуатациюКИ"); // я тиут
        
        //ТаблицаЭксплуатации (колонки):
    // ИС,  
    // АктВводаВэкслпутациюКИ,  
    // АктВыводаизЭкслпутацииКИ
    
    РабочаяТаблица.Колонки.Добавить("ТаблицаКлючевыхДокументов");
    //ТаблицаКлючевыхДокументов (колонки):
    // Носитель,  
    // АктПолученияКД,
    // АктУничтоженияКД,
    // МассивАктовПередачиКД

    
    // [[ 1 - ОПРЕДЕЛЯЕМ СРОКИ ЭКСПЛУАТАЦИИ КИ И ТЕКУЩИЙ СТАТУС]]
    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
                  |    ВводВЭксплуатацию.КлючеваяИнформация КАК КлючеваяИнформация,
                  |    МИНИМУМ(ВводВЭксплуатацию.Период) КАК МинВводаВЭксплуатацию,
                  |    МАКСИМУМ(ВводВЭксплуатацию.Период) КАК МаксВводаВЭксплуатацию,
                  |    ВыводИЗЭксплуатации.МинВыводаИЗЭксплуатации КАК МинВыводаИЗЭксплуатации,
                  |    ВыводИЗЭксплуатации.МаксВыводаИЗЭксплуатации КАК МаксВыводаИЗЭксплуатации,
                  |    ОстаткиТаб.ЭксплуатируетсяОстаток КАК Эксплуатация,
                  |    СтатусЭкземпляраСКЗИ.ЭкземплярСКЗИ.МодельСКЗИ,
                  |    СтатусЭкземпляраСКЗИ.ЭкземплярСКЗИ,
                  |    АктПолученияКлючевыхДокументов.Серийник
                  |ИЗ
                  |    РегистрНакопления.КлючеваяИнформацияСистемы КАК ВводВЭксплуатацию
                  |        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                  |            КлючеваяИнформацияСистемы.КлючеваяИнформация КАК КлючеваяИнформация,
                  |            МИНИМУМ(КлючеваяИнформацияСистемы.Период) КАК МинВыводаИЗЭксплуатации,
                  |            МАКСИМУМ(КлючеваяИнформацияСистемы.Период) КАК МаксВыводаИЗЭксплуатации
                  |        ИЗ
                  |            РегистрНакопления.КлючеваяИнформацияСистемы КАК КлючеваяИнформацияСистемы
                  |        ГДЕ
                  |            КлючеваяИнформацияСистемы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
                  |        
                  |        СГРУППИРОВАТЬ ПО
                  |            КлючеваяИнформацияСистемы.КлючеваяИнформация) КАК ВыводИЗЭксплуатации
                  |        ПО ВводВЭксплуатацию.КлючеваяИнформация = ВыводИЗЭксплуатации.КлючеваяИнформация
                  |        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                  |            Остатки.КлючеваяИнформация КАК КлючеваяИнформация,
                  |            Остатки.ЭксплуатируетсяОстаток КАК ЭксплуатируетсяОстаток
                  |        ИЗ
                  |            РегистрНакопления.КлючеваяИнформацияСистемы.Остатки КАК Остатки) КАК ОстаткиТаб
                  |        ПО ВводВЭксплуатацию.КлючеваяИнформация = ОстаткиТаб.КлючеваяИнформация,
                  |    РегистрСведений.СтатусЭкземпляраСКЗИ КАК СтатусЭкземпляраСКЗИ,
                  |    (ВЫБРАТЬ
                  |        КИ.Период КАК Период,
                  |        КИ.Регистратор КАК Регистратор,
                  |        КИ.НомерСтроки КАК НомерСтроки,
                  |        КИ.Активность КАК Активность,
                  |        КИ.НаименованиеСКЗИ КАК НаименованиеСКЗИ,
                  |        КИ.ОтветственныеЛицо КАК ОтветственныеЛицо,
                  |        КИ.ОтветственныеЛица КАК ОтветственныеЛица
                  |    ИЗ
                  |        РегистрСведений.КИ КАК КИ) КАК ВложенныйЗапрос
                  |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктПолученияКлючевыхДокументов КАК АктПолученияКлючевыхДокументов
                  |        ПО ВложенныйЗапрос.Регистратор = АктПолученияКлючевыхДокументов.Ссылка
                  |ГДЕ
                  |    ВводВЭксплуатацию.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    ВводВЭксплуатацию.КлючеваяИнформация,
                  |    ВыводИЗЭксплуатации.МинВыводаИЗЭксплуатации,
                  |    ВыводИЗЭксплуатации.МаксВыводаИЗЭксплуатации,
                  |    ОстаткиТаб.ЭксплуатируетсяОстаток,
                  |    СтатусЭкземпляраСКЗИ.ЭкземплярСКЗИ.МодельСКЗИ,
                  |    СтатусЭкземпляраСКЗИ.ЭкземплярСКЗИ,
                  |    АктПолученияКлючевыхДокументов.Серийник";
    
    Результат = Запрос.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
        
        Отбор = Новый Структура;
        Отбор.Вставить("КлючеваяИнформация", Результат.КлючеваяИнформация);        
        
        СтрокаРабочейТаблицы = Неопределено;
        НайденныеСтроки = РабочаяТаблица.НайтиСтроки(Отбор);
    
        Если 0 =  НайденныеСтроки.Количество()  Тогда
            
            СтрокаРабочейТаблицы = РабочаяТаблица.Добавить();
            
            СтрокаРабочейТаблицы.КлючеваяИнформация = Результат.КлючеваяИнформация;
            
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации = Новый ТаблицаЗначений;
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Колонки.Добавить("ИС");
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Колонки.Добавить("АктВводаВэкслпутациюКИ");
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Колонки.Добавить("АктВыводаизЭкслпутацииКИ");
                                    СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов = Новый ТаблицаЗначений;
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("Носитель");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("АктПолученияКД");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("АктУничтоженияКД");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("МассивАктовПередачиКД");
            
        ИначеЕсли 1 = НайденныеСтроки.Количество() Тогда
            
            СтрокаРабочейТаблицы = НайденныеСтроки[0];
            
        Иначе
            
            Сообщить("ВНУТРЕННЯЯ ОШИБКА. Дублирования ключвой информации, при анализе эксплуатации.");
            СтандартнаяОбработка=Ложь;
            Возврат неопределено;
            
        КонецЕсли;
        
        СтрокаРабочейТаблицы.ДатаВводаВЭксплуатацию = Результат.МинВводаВЭксплуатацию;
        
        Если NULL = Результат.Эксплуатация Тогда
            СтрокаРабочейТаблицы.ДатаВыводаИЗЭксплуатации = Результат.МаксВыводаИЗЭксплуатации;
        КонецЕсли;
        
    КонецЦикла;

    // [[ 2 - ОПРЕДЕЛЯЕМ ключевые документы и все что с ними связано]]
    Запрос = Новый Запрос;    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    КлючевыеДокументыЛица.КлючеваяИнформация,
    |    КлючевыеДокументыЛица.Носитель,
    |    КлючевыеДокументыЛица.Лицо,
    |    КлючевыеДокументыЛица.Период КАК Период,
    |    КлючевыеДокументыЛица.Регистратор,
    |    КлючевыеДокументыЛица.ВидДвижения
    |ИЗ
    |    РегистрНакопления.КлючевыеДокументыЛица КАК КлючевыеДокументыЛица
    |
    |УПОРЯДОЧИТЬ ПО
    |    Период";
    Результат = Запрос.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
        

        Отбор = Новый Структура;
        Отбор.Вставить("КлючеваяИнформация", Результат.КлючеваяИнформация);        
        
        СтрокаРабочейТаблицы = Неопределено; // переменная содержит ссылку на строку соотвествующую криптоключу
        НайденныеСтроки = РабочаяТаблица.НайтиСтроки(Отбор);
        
        // Позиционируемся или добавляем КлючеваяИнформация
        Если 0 =  НайденныеСтроки.Количество()  Тогда
            
            СтрокаРабочейТаблицы = РабочаяТаблица.Добавить();
            СтрокаРабочейТаблицы.КлючеваяИнформация = Результат.КлючеваяИнформация;
            
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации = Новый ТаблицаЗначений;
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Колонки.Добавить("ИС");
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Колонки.Добавить("АктВводаВэкслпутациюКИ");
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Колонки.Добавить("АктВыводаизЭкслпутацииКИ");

            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов = Новый ТаблицаЗначений;
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("Носитель");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("АктПолученияКД");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("АктУничтоженияКД");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("МассивАктовПередачиКД");
// начало для удаления
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("АктПоступленияСКЗИ");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("АктВводаСКЗИвЭксплуатацию");
            // конец для удаления

        ИначеЕсли 1 = НайденныеСтроки.Количество() Тогда
            
            СтрокаРабочейТаблицы = НайденныеСтроки[0];
            
        Иначе
            
            Сообщить("ВНУТРЕННЯЯ ОШИБКА. Дублирование ключевой информации.");
            СтандартнаяОбработка=Ложь;
            Возврат Неопределено;
            
        КонецЕсли;
        
        Отбор = Новый Структура;
        Отбор.Вставить("Носитель", Результат.Носитель);        
        НайденныеСтроки = СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.НайтиСтроки(Отбор);

        СтрокаКлючеовгоДокумента = Неопределено;
        
        // Добавляем первую жизнь КД
        Если 0 =  НайденныеСтроки.Количество()  Тогда
            
            Если Тип("ДокументСсылка.АктПолученияКлючевыхДокументов") = ТипЗнч(Результат.Регистратор) Тогда
                
                СтрокаКлючеовгоДокумента = СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Добавить();
                
                СтрокаКлючеовгоДокумента.Носитель = Результат.Носитель;
                СтрокаКлючеовгоДокумента.АктПолученияКД = Результат.Регистратор;                
                СтрокаКлючеовгоДокумента.АктУничтоженияКД = Неопределено;
                СтрокаКлючеовгоДокумента.МассивАктовПередачиКД = Новый Массив;
                
                Если Неопределено = СтрокаРабочейТаблицы.АктПолученияПервогоКД Тогда
                    СтрокаРабочейТаблицы.АктПолученияПервогоКД = Результат.Регистратор;
                    СтрокаРабочейТаблицы.ДатаПолученияПервогоКД = Результат.Регистратор.Дата;
                КонецЕсли;
                    
                Продолжить;
                
            Иначе
                Сообщить("ВНУТРЕННЯЯ ОШИБКА. Первым документом ЖЦ КД (" + СтрокаРабочейТаблицы.КлючеваяИнформация + ", "  +
                        СтрокаКлючеовгоДокумента.Носитель + ") должен быть Акт получения КД, а вместо этого - " + Результат.Регистратор);
                СтандартнаяОбработка=Ложь;
                Возврат Неопределено;

            КонецЕсли;
                    
        // Ситуация в которых ужеть есть возможно несколько жизней у одного КД
        // и нужно найти правильную (или создать новую) для анализируемого документа
            
        Иначе
            
            Для каждого ЖизньКД из НайденныеСтроки Цикл
                
                ДатаДокумента = Результат.Регистратор.Дата;
                
                Если ДатаДокумента  >= ЖизньКД.АктПолученияКД.Дата Тогда
                    
                    // Если жизнь уже завершилась, првоеряем вхождение в ее диапозон
                    Если Неопределено <> ЖизньКД.АктУничтоженияКД  Тогда
                        
                        Если ДатаДокумента  >= ЖизньКД.АктУничтоженияКД.Дата  Тогда
                             Продолжить;
                        КонецЕсли;
                        
                    Иначе
                        СтрокаКлючеовгоДокумента = ЖизньКД;                        
                        Прервать;
                    КонецЕсли;
                КонецЕсли;
                
            КонецЦикла;
                
        КонецЕсли;
        
        Если Тип("ДокументСсылка.АктПолученияКлючевыхДокументов") = ТипЗнч(Результат.Регистратор) Тогда        
            
            Если Неопределено = СтрокаКлючеовгоДокумента  Тогда        
                
                    СтрокаКлючеовгоДокумента = СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Добавить();                
                    
                    СтрокаКлючеовгоДокумента.Носитель = Результат.Носитель;
                    СтрокаКлючеовгоДокумента.АктПолученияКД = Результат.Регистратор;                
                    СтрокаКлючеовгоДокумента.АктУничтоженияКД = Неопределено;
                    СтрокаКлючеовгоДокумента.МассивАктовПередачиКД = Новый Массив;
                    
                    СтрокаРабочейТаблицы.АктУничтоженияПоследнегоКД  = Неопределено;
                    
            Иначе
                    Сообщить("ВНУТРЕННЯЯ ОШИБКА. Дублирование анализа акт получения КД - " + Результат.Регистратор);
                    СтандартнаяОбработка=Ложь;
                    Возврат Неопределено;
            КонецЕсли;

        КонецЕсли;        
        
        Если Тип("ДокументСсылка.АктПередачиКлючевыхДокументов") = ТипЗнч(Результат.Регистратор) и
                 ВидДвиженияНакопления.Приход = Результат.ВидДвижения Тогда        
            СтрокаКлючеовгоДокумента.МассивАктовПередачиКД.Добавить(Результат.Регистратор);
        КонецЕсли;        
        
        Если Тип("ДокументСсылка.АктУничтоженияКлючевыхДокументов") = ТипЗнч(Результат.Регистратор) Тогда        
            СтрокаКлючеовгоДокумента.АктУничтоженияКД = Результат.Регистратор;
        КонецЕсли;
            
    КонецЦикла;
    
//////////////!!!!!!!!!!
    // Определим последний АктУничтоженияКД для КИ
    Для каждого КИ из РабочаяТаблица Цикл
        
        КИ.АктУничтоженияПоследнегоКД=Неопределено;
        
        Для каждого КД из КИ.ТаблицаКлючевыхДокументов Цикл
            Если Неопределено = КД.АктУничтоженияКД Тогда
                КИ.АктУничтоженияПоследнегоКД=Неопределено;
                Прервать;
            Иначе
                КИ.АктУничтоженияПоследнегоКД = КД.АктУничтоженияКД;
            КонецЕсли;
        КонецЦикла;
        
    КонецЦикла;

    // [[ 3 - ОПРЕДЕЛЯЕМ ПЕРЕЧЕНЬ АКТОВ ЭКСПЛУАТАЦИИ]]
    Запрос.Текст =
    "ВЫБРАТЬ
    |    КлючеваяИнформацияСистемы.Период КАК Период,
    |    КлючеваяИнформацияСистемы.Регистратор,
    |    КлючеваяИнформацияСистемы.ВидДвижения,
    |    КлючеваяИнформацияСистемы.КлючеваяИнформация,
    |    КлючеваяИнформацияСистемы.ИС,
    |    КлючеваяИнформацияСистемы.Эксплуатируется
    |ИЗ
    |    РегистрНакопления.КлючеваяИнформацияСистемы КАК КлючеваяИнформацияСистемы
    |
    |УПОРЯДОЧИТЬ ПО
    |    Период";
    
    Результат = Запрос.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
        
        Отбор = Новый Структура;
        Отбор.Вставить("КлючеваяИнформация", Результат.КлючеваяИнформация);        
        
        // позиционируемся на строку в рабочей таблице
        СтрокаРабочейТаблицы = Неопределено;         
        НайденныеСтроки = РабочаяТаблица.НайтиСтроки(Отбор);
        
        Если 1 =  НайденныеСтроки.Количество()  Тогда
            СтрокаРабочейТаблицы = НайденныеСтроки[0];
        Иначе
            
            Сообщить("ВНУТРЕННЯЯ ОШИБКА. При анализе этапов экслпутации не найдены строки рабочей таблицы для " + Результат.КлючеваяИнформация);
            СтандартнаяОбработка=Ложь;
            Возврат Неопределено;

        КонецЕсли;
        
        СтрокаЭтапаЭксплуатации = Неопределено;    

        Если Тип("ДокументСсылка.АктВводаВЭксплуатациюКлючевойИнформации") = ТипЗнч(Результат.Регистратор) Тогда
            СтрокаЭтапаЭксплуатации = СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Добавить();
            СтрокаЭтапаЭксплуатации.ИС = Результат.ИС;
            СтрокаЭтапаЭксплуатации.АктВводаВэкслпутациюКИ = Результат.Регистратор;
            СтрокаЭтапаЭксплуатации.АктВыводаизЭкслпутацииКИ = Неопределено;
            
            Продолжить;
        КонецЕсли;
        
        Если Тип("ДокументСсылка.АктВыводаИзЭксплуатацииКлючевойИнформации") = ТипЗнч(Результат.Регистратор) Тогда
            
            Отбор = Новый Структура;
            Отбор.Вставить("ИС", Результат.ИС);        
            НайденныеСтроки = СтрокаРабочейТаблицы.ТаблицаЭксплуатации.НайтиСтроки(Отбор);        
            
            Для i = 0 по НайденныеСтроки.ВГраница() Цикл
                ЭтапЭксплуатации = НайденныеСтроки[i];
                
                Если Неопределено = ЭтапЭксплуатации.АктВыводаизЭкслпутацииКИ Тогда
                    ЭтапЭксплуатации.АктВыводаизЭкслпутацииКИ = Результат.Регистратор;
                    Прервать;
                КонецЕсли;
                
            КонецЦикла;
            
        КонецЕсли;
        
        
    КонецЦикла;

    Возврат РабочаяТаблица;
    
КонецФункции //ПолучитьРабочуюТаблицуКриптоключейДляЖурналовФАПСИ152

и вторая функция чуть поменьше

Функция ПолучитьТаблицуКриптоключейДляЖурналаФАПСИ152ОКИ() экспорт // я тут
    
    // ИтоговаяТаблицаОтчета - будет содержать конечные данные, передаваемые в отчет
    ИтоговаяТаблицаОтчета = Новый ТаблицаЗначений;
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка1");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка2");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка3");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка4");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка5");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка6");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка7");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка8");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка9");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка10");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка11");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка12");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка13");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка14");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка15");

    РабочаяТаблица = ПолучитьРабочуюТаблицуКриптоключейДляЖурналовФАПСИ152();// я тут тоже добавли
    
    // Cортируем рабочую таблицу по датам создания первого ключевого документа
    РабочаяТаблица.Сортировать("ДатаПолученияПервогоКД Возр");

    
    ///////////////////////////////
    //
    // Заполнение итоговой таблицы

    НомерПоПорядку = 0;
    Для каждого СтрокаРабочейТаблицы из РабочаяТаблица Цикл
        
        НомерПоПорядку = НомерПоПорядку + 1;
        
        
        СтрокаКриптоключа = ИтоговаяТаблицаОтчета.Добавить();
        СтрокаКриптоключа.Колонка1  = НомерПоПорядку;
        СтрокаКриптоключа.Колонка2  = "Ключевая информация:"  + Символы.ПС + СтрокаРабочейТаблицы.КлючеваяИнформация;
         СтрокаКриптоключа.Колонка3 =  СтрокаРабочейТаблицы.серийник;
        СтрокаКриптоключа.Колонка5  = "" + СтрокаРабочейТаблицы.АктПолученияПервогоКД.ОтветственноеЛицо + ", "
                                      +    СтрокаРабочейТаблицы.АктПолученияПервогоКД.ОтветственноеЛицо.МестоРаботы;

        СтрокаКриптоключа.Колонка6  = "Акту получения ключевых документов № "
                                      + СтрокаРабочейТаблицы.АктПолученияПервогоКД.Номер
                                      + " от " + Формат(СтрокаРабочейТаблицы.АктПолученияПервогоКД.Дата,"ДФ=dd.MM.yyyy");
                                                
        ПодНомерПоПорядку = -1;
        СтрокаЭтапаЭксплуатации = СтрокаКриптоключа;
        
        Для i=0 по СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Количество()-1 Цикл
            
            ЭтапаЭксплуатации = СтрокаРабочейТаблицы.ТаблицаЭксплуатации[i];
            ПодНомерПоПорядку = i;
            
            Если 0 = i  Тогда
                СтрокаЭтапаЭксплуатации = СтрокаКриптоключа;
            Иначе
                СтрокаЭтапаЭксплуатации = ИтоговаяТаблицаОтчета.Добавить();
                СтрокаЭтапаЭксплуатации.Колонка1  = "" + НомерПоПорядку + "." + ПодНомерПоПорядку;
            КонецЕсли;
            
                        
            СтрокаЭтапаЭксплуатации.Колонка9 = "" + ЭтапаЭксплуатации.АктВводаВэкслпутациюКИ.ОтветственноеЛицо + ", "
                                          + ЭтапаЭксплуатации.АктВводаВэкслпутациюКИ.ОтветственноеЛицо.МестоРаботы;
                                          
            СтрокаЭтапаЭксплуатации.Колонка10 = "Акт ввода в эксплуатацию ключевой информации № "
                                          + ЭтапаЭксплуатации.АктВводаВэкслпутациюКИ.Номер
                                          + " от " + Формат(ЭтапаЭксплуатации.АктВводаВэкслпутациюКИ.Дата,"ДФ=dd.MM.yyyy");
                                          
            СтрокаЭтапаЭксплуатации.Колонка11 = ЭтапаЭксплуатации.АктВводаВэкслпутациюКИ.ИС;
            
            Если Неопределено <> ЭтапаЭксплуатации.АктВыводаизЭкслпутацииКИ Тогда
                
                
                СтрокаЭтапаЭксплуатации.Колонка12 = Формат(ЭтапаЭксплуатации.АктВыводаизЭкслпутацииКИ.Дата,"ДФ=dd.MM.yyyy");
                
                
                
                СтрокаЭтапаЭксплуатации.Колонка13 = "" + ЭтапаЭксплуатации.АктВыводаизЭкслпутацииКИ.ОтветственноеЛицо + ", "
                                          + ЭтапаЭксплуатации.АктВыводаизЭкслпутацииКИ.ОтветственноеЛицо.МестоРаботы;
                
                СтрокаЭтапаЭксплуатации.Колонка14 = "Акт вывода из эксплуатации ключевой информации № "
                                                      + ЭтапаЭксплуатации.АктВыводаизЭкслпутацииКИ.Номер
                                                      + " от " + Формат(ЭтапаЭксплуатации.АктВыводаизЭкслпутацииКИ.Дата,"ДФ=dd.MM.yyyy");
                
            КонецЕсли;
            
        КонецЦикла;
        
        Если Неопределено <> СтрокаРабочейТаблицы.АктУничтоженияПоследнегоКД Тогда                                            
            
            Если -1 <> ПодНомерПоПорядку Тогда
                ПодНомерПоПорядку = ПодНомерПоПорядку + 1;
                СтрокаЭтапаЭксплуатации = ИтоговаяТаблицаОтчета.Добавить();
                СтрокаЭтапаЭксплуатации.Колонка1  = "" + НомерПоПорядку + "." + ПодНомерПоПорядку;
            КонецЕсли;
            
            СтрокаЭтапаЭксплуатации.Колонка12 = Формат(СтрокаРабочейТаблицы.АктУничтоженияПоследнегоКД.Дата,"ДФ=dd.MM.yyyy");
        
                
            СтрокаЭтапаЭксплуатации.Колонка13 = "" + СтрокаРабочейТаблицы.АктУничтоженияПоследнегоКД.ОтветственноеЛицо + ", "
                                          + СтрокаРабочейТаблицы.АктУничтоженияПоследнегоКД.ОтветственноеЛицо.МестоРаботы;
                
            СтрокаЭтапаЭксплуатации.Колонка14 = "Акт уничтожения ключевых документов № "
                                                + СтрокаРабочейТаблицы.АктУничтоженияПоследнегоКД.Номер
                                                + " от " + Формат(СтрокаРабочейТаблицы.АктУничтоженияПоследнегоКД.Дата,"ДФ=dd.MM.yyyy");
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат ИтоговаяТаблицаОтчета;
    
КонецФункции //ПолучитьТаблицуКриптоключейДляЖурналаФАПСИ152ОКИ
1 Asmody
 
17.01.20
14:32
хорошо
2 Масянька
 
17.01.20
14:34
(1) Что "хорошо"?
3 vicof
 
17.01.20
14:35
(2) плохо
4 Uzyf
 
17.01.20
14:35
(2) тут уже все хорошо )
5 Масянька
 
17.01.20
14:36
(3) (4) Штирлиц ничего не понял, но решил не палится.
6 vicof
 
17.01.20
14:37
(5) йайа дастиш фантастиш
7 Uzyf
 
17.01.20
14:37
(5) давайте без этих ваших фашистов
8 Uzyf
 
17.01.20
14:38
9 Масянька
 
17.01.20
14:40
(7) Нет уж.
В пятницу, почти в половину третьего вечера вываливать процедуру в 500 строк...
Только к Мюллеру... В застенки...
10 lopus
 
17.01.20
14:44
Вроде 3 колонка же заполняется
  СтрокаКриптоключа.Колонка3 =  СтрокаРабочейТаблицы.серийник;
11 Uzyf
 
17.01.20
14:46
(10) да это он сам поди добавил
12 unenu
 
17.01.20
14:48
я протестил колесико мышки - все работает.
13 VladZ
 
17.01.20
14:48
(9) А Мюллер тут при чем? Думаешь он хочет работать в пятницу после обеда?

Предлагаю кардинально решать проблему: расстрелять !!!
14 Масянька
 
17.01.20
14:50
(13) Заметьте: не я это предложил (С)
Уточнение: Мюллера, Штирлица, автора?
15 VladZ
 
17.01.20
14:50
+13. Вот даже есть пункт в правилах: 5. Не засоряйте форум бессмысленными сообщениями (вандализм).

Все же согласятся, что это вандализм?
16 bezdarOR Enburgski
 
17.01.20
14:50
А я не нашел спойлеры на данном форуме.
17 VladZ
 
17.01.20
14:51
Скиньте уже автору глобальник ЗИКа.  Пусть разбирается.
18 bezdarOR Enburgski
 
17.01.20
14:59
ТО что в пятницу. Ну извините
19 Asmody
 
17.01.20
16:53
(2) хорошо, что это не уменя
20 VladZ
 
17.01.20
16:59
Анек в тему:

Однажды Максим Горький и Владислав Ходасевич прогуливались по Кронверкскому проспекту. Вдруг на шляпу Горького упала, отделившаяся от пролетающей над ними вороны, фекалия.
-Хорошо- сказал Горький снимая шляпу и стряхивая с неё неожиданность.
-Что хорошо?- не понял Владислав.
-Хорошо, что коровы не летают!
21 Мимохожий Однако
 
17.01.20
18:27
(0) "Маловато будет!"©м/ф "Падал прошлогодний снег"
22 JeHer
 
18.01.20
07:24
(0) Если еще не обиделся, чем надо заполнять-то?
23 bezdarOR Enburgski
 
20.01.20
07:27
JeHer да какие обиды. Сам точно таким же занимался.)

А заполнять надо в отчете Серийные номера, Номера экземпляров, ФИО пользователя СКЗИ, Дата получения.

Вроде бы просто, но когда я пытаюсь прописать эти поля из документов (различные акты и прочее) то выдает ошибку "Поле не найдено"

Изменяешь запрос, (добавляешь эти самые АКты, чтобы из них он выбирал эти поля) но опять "Поле не найдено".

Ну и выходит, что выход, делать внешний отчет.

Но мне интересно, что я не так делаю?
24 catena
 
20.01.20
08:34
>>Если проблема с конкретным кодом, приведите листинг программы, но придерживайтесь принципа разумной достаточности – ошибку проще найти в небольшом листинге, чем изучать весь модуль.<<

(23)А вы не показали основное, чтобы было понятно, что там не так. "Тут я уже добавил" - нам не видно
25 bezdarOR Enburgski
 
20.01.20
08:54
"Я добавил" это мои пометки, чтобы потом я мог удалить свой код.

Весь код который я вставил сюда оригинальный.

Собсно проблема не в коде, а в том, что я не знаю как добавить дополнительные поля в отчет.

Если прописывать эти поля в функцию ПолучитьТаблицуКриптоключейДляЖурналаФАПСИ152ОКИ а именно в колонка3

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

То пишет что "поле не найдено". Если менять сам запрос, который находится в функции ПолучитьРабочуюТаблицуКриптоключейДляЖурналовФАПСИ152
он работает, но не отображает информацию в полях, и все равно выдает ошибку поле не найдено.

Поэтому главный для меня вопрос. Как добавить эти поля (Серийный номер СКЗИ, Номера Экземпляров КД, ФИО пользователя СКЗИ, Дата получения)?

Эти данные есть в АктахПолученияСКЗИ (это документ).
26 bezdarOR Enburgski
 
20.01.20
08:58
Как добавить эти поля (Серийный номер СКЗИ, Номера Экземпляров КД, ФИО пользователя СКЗИ, Дата получения) в отчет "ЖурналУчетаКлючевыхДокументовФАПСИ152ОКИ"
27 bezdarOR Enburgski
 
20.01.20
09:11
И еще один момент Отчет этот не на СКД, а "ручной" в модуле прописан.
28 Масянька
 
20.01.20
09:14
(26) Вестимо: выбрать из актов,заполнять в выборке.
29 bezdarOR Enburgski
 
20.01.20
09:18
Масянька Все равно выдает ошибку поле не найдено.
Хотя может я чет не правильно делаю.

Я встаю на основной запрос в функции ПолучитьРабочуюТаблицуКриптоключейДляЖурналовФАПСИ152, открываю конструктор запросов, добавляю в набор данных, акт получени скзи и выбираю поле Серийный номер и дату получения.
30 bezdarOR Enburgski
 
20.01.20
09:18
Масянька и если можно.

Можете подробно расписать как выбрать?
31 Масянька
 
20.01.20
09:20
(29) Там (насколько видно в (0)) три запроса.
32 Масянька
 
20.01.20
09:20
(30) Не-а.
33 bezdarOR Enburgski
 
20.01.20
09:37
Основной запрос который собирает рабочую таблицу вот

// [[ 1 - ОПРЕДЕЛЯЕМ СРОКИ ЭКСПЛУАТАЦИИ КИ И ТЕКУЩИЙ СТАТУС]]
    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
    |    ВводВЭксплуатацию.КлючеваяИнформация КАК КлючеваяИнформация,
                  |    МИНИМУМ(ВводВЭксплуатацию.Период) КАК МинВводаВЭксплуатацию,
                  |    МАКСИМУМ(ВводВЭксплуатацию.Период) КАК МаксВводаВЭксплуатацию,
                  |    ВыводИЗЭксплуатации.МинВыводаИЗЭксплуатации КАК МинВыводаИЗЭксплуатации,
                  |    ВыводИЗЭксплуатации.МаксВыводаИЗЭксплуатации КАК МаксВыводаИЗЭксплуатации,
                  |    ОстаткиТаб.ЭксплуатируетсяОстаток КАК Эксплуатация,
                  |    СтатусЭкземпляраСКЗИ.ЭкземплярСКЗИ.МодельСКЗИ,
                  |    СтатусЭкземпляраСКЗИ.ЭкземплярСКЗИ,
                  |    АктПолученияКлючевыхДокументов.Серийник
                  |ИЗ
                  |    РегистрНакопления.КлючеваяИнформацияСистемы КАК ВводВЭксплуатацию
                  |        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                  |            КлючеваяИнформацияСистемы.КлючеваяИнформация КАК КлючеваяИнформация,
                  |            МИНИМУМ(КлючеваяИнформацияСистемы.Период) КАК МинВыводаИЗЭксплуатации,
                  |            МАКСИМУМ(КлючеваяИнформацияСистемы.Период) КАК МаксВыводаИЗЭксплуатации
                  |        ИЗ
                  |            РегистрНакопления.КлючеваяИнформацияСистемы КАК КлючеваяИнформацияСистемы
                  |        ГДЕ
                  |            КлючеваяИнформацияСистемы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
                  |        
                  |        СГРУППИРОВАТЬ ПО
                  |            КлючеваяИнформацияСистемы.КлючеваяИнформация) КАК ВыводИЗЭксплуатации
                  |        ПО ВводВЭксплуатацию.КлючеваяИнформация = ВыводИЗЭксплуатации.КлючеваяИнформация
                  |        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                  |            Остатки.КлючеваяИнформация КАК КлючеваяИнформация,
                  |            Остатки.ЭксплуатируетсяОстаток КАК ЭксплуатируетсяОстаток
                  |        ИЗ
                  |            РегистрНакопления.КлючеваяИнформацияСистемы.Остатки КАК Остатки) КАК ОстаткиТаб
                  |        ПО ВводВЭксплуатацию.КлючеваяИнформация = ОстаткиТаб.КлючеваяИнформация,
                  |    РегистрСведений.СтатусЭкземпляраСКЗИ КАК СтатусЭкземпляраСКЗИ,
                  |    (ВЫБРАТЬ
                  |        КИ.Период КАК Период,
                  |        КИ.Регистратор КАК Регистратор,
                  |        КИ.НомерСтроки КАК НомерСтроки,
                  |        КИ.Активность КАК Активность,
                  |        КИ.НаименованиеСКЗИ КАК НаименованиеСКЗИ,
                  |        КИ.ОтветственныеЛицо КАК ОтветственныеЛицо,
                  |        КИ.ОтветственныеЛица КАК ОтветственныеЛица
                  |    ИЗ
                  |        РегистрСведений.КИ КАК КИ) КАК ВложенныйЗапрос
                  |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктПолученияКлючевыхДокументов КАК АктПолученияКлючевыхДокументов
                  |        ПО ВложенныйЗапрос.Регистратор = АктПолученияКлючевыхДокументов.Ссылка
                  |ГДЕ
                  |    ВводВЭксплуатацию.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    ВводВЭксплуатацию.КлючеваяИнформация,
                  |    ВыводИЗЭксплуатации.МинВыводаИЗЭксплуатации,
                  |    ВыводИЗЭксплуатации.МаксВыводаИЗЭксплуатации,
                  |    ОстаткиТаб.ЭксплуатируетсяОстаток,
                  |    СтатусЭкземпляраСКЗИ.ЭкземплярСКЗИ.МодельСКЗИ,
                  |    СтатусЭкземпляраСКЗИ.ЭкземплярСКЗИ,
                  |    АктПолученияКлючевыхДокументов.Серийник";
34 catena
 
20.01.20
11:10
(33)Ты видишь, что оно возвращает РабочаяТаблица? Вот и смотри, чтобы твои реквизиты попали в РабочаяТаблица. Включай отладчик и разбирайся построчно.
35 bezdarOR Enburgski
 
20.01.20
12:35
Catena я совсем забыл про отладчик. Спасибо Вам за совет
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший