Форум программистов, компьютерный форум, киберфорум
1С: Типовые и стандартные решения
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 15
1
1C 8.x

Доработка отчета в Конфигурации "Менеджмент Безопасности"

09.01.2020, 10:02. Показов 3031. Ответов 2

Author24 — интернет-сервис помощи студентам
Доброго времени суток всем читающим.

Я тут недавно, поэтому если что не так пишите. (начинающий 1с программист)

Прошу помощи у более опытных программистов 1с.

Есть конфигурация 1с менеджмент безопасности (поставляется в свободном доступе).В ней есть отчет "Журнал учета ключевых документов (ФАПСИ 152 для обладателя конфиденциальной информацией)". Ну и собсно 2 основных раздела (Криптоключи и СКЗИ)

В нем НЕ заполнены 3,4, 7 и 8 колонки.
Следовательно, нужно сделать, так, чтобы данные автоматически подтягивались из справочников или документов.


Прикладываю скриншоты с процедурами, отчетом и деревом конфигурации.

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

Здесь текст функции, которая создает рабочую таблицу для криптоключей

Кликните здесь для просмотра всего текста
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
Функция ПолучитьРабочуюТаблицуКриптоключейДляЖурналовФАПСИ152() 
    // РабочаяТаблица - временная структура, в которой накапливаются данные для подготовки
    // данных в ИтоговойТаблицеОтчета
    РабочаяТаблица = Новый ТаблицаЗначений;
    РабочаяТаблица.Колонки.Добавить("КлючеваяИнформация");
    РабочаяТаблица.Колонки.Добавить("ДатаВводаВЭксплуатацию");
    РабочаяТаблица.Колонки.Добавить("ДатаВыводаИЗЭксплуатации");
    РабочаяТаблица.Колонки.Добавить("ДатаПолученияПервогоКД");   
    РабочаяТаблица.Колонки.Добавить("АктПолученияПервогоКД");
    РабочаяТаблица.Колонки.Добавить("АктУничтоженияПоследнегоКД");
    
    РабочаяТаблица.Колонки.Добавить("ТаблицаЭксплуатации");
        //                           РабочаяТаблица.Колонки.Добавить("ИС"); // я тут
        //                          РабочаяТаблица.Колонки.Добавить("АктВводаВЭксплуатациюКИ"); // я тиут
        
        //ТаблицаЭксплуатации (колонки):
    // ИС,  
    // АктВводаВэкслпутациюКИ,  
    // АктВыводаизЭкслпутацииКИ 
    
    РабочаяТаблица.Колонки.Добавить("ТаблицаКлючевыхДокументов");
    //ТаблицаКлючевыхДокументов (колонки):
    // Носитель,  
    // АктПолученияКД,
    // АктУничтоженияКД,
    // МассивАктовПередачиКД
 
    
    // [[ 1 - ОПРЕДЕЛЯЕМ СРОКИ ЭКСПЛУАТАЦИИ КИ И ТЕКУЩИЙ СТАТУС]]
    Запрос = Новый Запрос;
    Запрос.Текст ="
    |ВЫБРАТЬ
    |   ВводВЭксплуатацию.КлючеваяИнформация КАК КлючеваяИнформация,
    |   МИНИМУМ(ВводВЭксплуатацию.Период) КАК МинВводаВЭксплуатацию,
    |   МАКСИМУМ(ВводВЭксплуатацию.Период) КАК МаксВводаВЭксплуатацию,
    |   ВыводИЗЭксплуатации.МинВыводаИЗЭксплуатации КАК МинВыводаИЗЭксплуатации,
    |   ВыводИЗЭксплуатации.МаксВыводаИЗЭксплуатации КАК МаксВыводаИЗЭксплуатации,
    |   ОстаткиТаб.ЭксплуатируетсяОстаток КАК Эксплуатация
    |ИЗ
    |   РегистрНакопления.КлючеваяИнформацияСистемы КАК ВводВЭксплуатацию
    |       ПОЛНОЕ СОЕДИНЕНИЕ (
    |       ВЫБРАТЬ
    |           КлючеваяИнформацияСистемы.КлючеваяИнформация КАК КлючеваяИнформация,
    |           МИНИМУМ(КлючеваяИнформацияСистемы.Период) КАК МинВыводаИЗЭксплуатации,
    |           МАКСИМУМ(КлючеваяИнформацияСистемы.Период) КАК МаксВыводаИЗЭксплуатации
    |       ИЗ
    |           РегистрНакопления.КлючеваяИнформацияСистемы КАК КлючеваяИнформацияСистемы
    |       ГДЕ
    |           КлючеваяИнформацияСистемы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
    |       
    |       СГРУППИРОВАТЬ ПО
    |           КлючеваяИнформацияСистемы.КлючеваяИнформация) КАК ВыводИЗЭксплуатации
    |       ПО ВводВЭксплуатацию.КлючеваяИнформация = ВыводИЗЭксплуатации.КлючеваяИнформация
    |       ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |           Остатки.КлючеваяИнформация КАК КлючеваяИнформация,
    |           Остатки.ЭксплуатируетсяОстаток КАК ЭксплуатируетсяОстаток
    |       ИЗ
    |           РегистрНакопления.КлючеваяИнформацияСистемы.Остатки КАК Остатки) КАК ОстаткиТаб
    |       ПО ВводВЭксплуатацию.КлючеваяИнформация = ОстаткиТаб.КлючеваяИнформация
    |ГДЕ
    |   ВводВЭксплуатацию.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
    |СГРУППИРОВАТЬ ПО
    |   ВводВЭксплуатацию.КлючеваяИнформация,
    |   ВыводИЗЭксплуатации.МинВыводаИЗЭксплуатации,
    |   ВыводИЗЭксплуатации.МаксВыводаИЗЭксплуатации,
    |   ОстаткиТаб.ЭксплуатируетсяОстаток";
    
    Результат = Запрос.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
        
        Отбор = Новый Структура;
        Отбор.Вставить("КлючеваяИнформация", Результат.КлючеваяИнформация);       
        
        СтрокаРабочейТаблицы = Неопределено; 
        НайденныеСтроки = РабочаяТаблица.НайтиСтроки(Отбор);
    
        Если 0 =  НайденныеСтроки.Количество()  Тогда
            
            СтрокаРабочейТаблицы = РабочаяТаблица.Добавить();
            
            СтрокаРабочейТаблицы.КлючеваяИнформация = Результат.КлючеваяИнформация;
            
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации = Новый ТаблицаЗначений;
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Колонки.Добавить("ИС");
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Колонки.Добавить("АктВводаВэкслпутациюКИ");
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Колонки.Добавить("АктВыводаизЭкслпутацииКИ");
            
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов = Новый ТаблицаЗначений;
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("Носитель");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("АктПолученияКД");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("АктУничтоженияКД");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("МассивАктовПередачиКД");
            
        ИначеЕсли 1 = НайденныеСтроки.Количество() Тогда
            
            СтрокаРабочейТаблицы = НайденныеСтроки[0];
            
        Иначе
            
            Сообщить("ВНУТРЕННЯЯ ОШИБКА. Дублирования ключвой информации, при анализе эксплуатации.");
            СтандартнаяОбработка=Ложь;
            Возврат неопределено;
            
        КонецЕсли;
        
        СтрокаРабочейТаблицы.ДатаВводаВЭксплуатацию = Результат.МинВводаВЭксплуатацию;
        
        Если NULL = Результат.Эксплуатация Тогда
            СтрокаРабочейТаблицы.ДатаВыводаИЗЭксплуатации = Результат.МаксВыводаИЗЭксплуатации; 
        КонецЕсли;
        
    КонецЦикла;
 
    // [[ 2 - ОПРЕДЕЛЯЕМ ключевые документы и все что с ними связано]]
    Запрос = Новый Запрос; 
    Запрос.Текст =
    "ВЫБРАТЬ
    |   КлючевыеДокументыЛица.КлючеваяИнформация,
    |   КлючевыеДокументыЛица.Носитель,
    |   КлючевыеДокументыЛица.Лицо,
    |   КлючевыеДокументыЛица.Период КАК Период,
    |   КлючевыеДокументыЛица.Регистратор,
    |   КлючевыеДокументыЛица.ВидДвижения
    |ИЗ
    |   РегистрНакопления.КлючевыеДокументыЛица КАК КлючевыеДокументыЛица
    |
    |УПОРЯДОЧИТЬ ПО
    |   Период";
    Результат = Запрос.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
        
 
        Отбор = Новый Структура;
        Отбор.Вставить("КлючеваяИнформация", Результат.КлючеваяИнформация);       
        
        СтрокаРабочейТаблицы = Неопределено; // переменная содержит ссылку на строку соотвествующую криптоключу
        НайденныеСтроки = РабочаяТаблица.НайтиСтроки(Отбор);
        
        // Позиционируемся или добавляем КлючеваяИнформация
        Если 0 =  НайденныеСтроки.Количество()  Тогда
            
            СтрокаРабочейТаблицы = РабочаяТаблица.Добавить();
            СтрокаРабочейТаблицы.КлючеваяИнформация = Результат.КлючеваяИнформация;
            
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации = Новый ТаблицаЗначений;
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Колонки.Добавить("ИС");
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Колонки.Добавить("АктВводаВэкслпутациюКИ");
            СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Колонки.Добавить("АктВыводаизЭкслпутацииКИ");
 
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов = Новый ТаблицаЗначений;
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("Носитель");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("АктПолученияКД");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("АктУничтоженияКД");
            СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Колонки.Добавить("МассивАктовПередачиКД");
 
        ИначеЕсли 1 = НайденныеСтроки.Количество() Тогда
            
            СтрокаРабочейТаблицы = НайденныеСтроки[0];
            
        Иначе
            
            Сообщить("ВНУТРЕННЯЯ ОШИБКА. Дублирование ключевой информации.");
            СтандартнаяОбработка=Ложь;
            Возврат Неопределено;
            
        КонецЕсли;
        
        Отбор = Новый Структура;
        Отбор.Вставить("Носитель", Результат.Носитель);       
        НайденныеСтроки = СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.НайтиСтроки(Отбор);
 
        СтрокаКлючеовгоДокумента = Неопределено;
        
        // Добавляем первую жизнь КД
        Если 0 =  НайденныеСтроки.Количество()  Тогда
            
            Если Тип("ДокументСсылка.АктПолученияКлючевыхДокументов") = ТипЗнч(Результат.Регистратор) Тогда
                
                СтрокаКлючеовгоДокумента = СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Добавить();
                
                СтрокаКлючеовгоДокумента.Носитель = Результат.Носитель;
                СтрокаКлючеовгоДокумента.АктПолученияКД = Результат.Регистратор;              
                СтрокаКлючеовгоДокумента.АктУничтоженияКД = Неопределено;
                СтрокаКлючеовгоДокумента.МассивАктовПередачиКД = Новый Массив;
                
                Если Неопределено = СтрокаРабочейТаблицы.АктПолученияПервогоКД Тогда
                    СтрокаРабочейТаблицы.АктПолученияПервогоКД = Результат.Регистратор;
                    СтрокаРабочейТаблицы.ДатаПолученияПервогоКД = Результат.Регистратор.Дата;
                КонецЕсли;
                    
                Продолжить;
                
            Иначе
                Сообщить("ВНУТРЕННЯЯ ОШИБКА. Первым документом ЖЦ КД (" + СтрокаРабочейТаблицы.КлючеваяИнформация + ", "  +
                        СтрокаКлючеовгоДокумента.Носитель + ") должен быть Акт получения КД, а вместо этого - " + Результат.Регистратор);
                СтандартнаяОбработка=Ложь;
                Возврат Неопределено;
 
            КонецЕсли;
                    
        // Ситуация в которых ужеть есть возможно несколько жизней у одного КД 
        // и нужно найти правильную (или создать новую) для анализируемого документа
            
        Иначе
            
            Для каждого ЖизньКД из НайденныеСтроки Цикл
                
                ДатаДокумента = Результат.Регистратор.Дата;
                
                Если ДатаДокумента  >= ЖизньКД.АктПолученияКД.Дата Тогда
                    
                    // Если жизнь уже завершилась, првоеряем вхождение в ее диапозон
                    Если Неопределено <> ЖизньКД.АктУничтоженияКД  Тогда
                        
                        Если ДатаДокумента  >= ЖизньКД.АктУничтоженияКД.Дата  Тогда
                             Продолжить;
                        КонецЕсли;
                        
                    Иначе
                        СтрокаКлючеовгоДокумента = ЖизньКД;                      
                        Прервать;
                    КонецЕсли;
                КонецЕсли;
                
            КонецЦикла;
                
        КонецЕсли;
        
        Если Тип("ДокументСсылка.АктПолученияКлючевыхДокументов") = ТипЗнч(Результат.Регистратор) Тогда       
            
            Если Неопределено = СтрокаКлючеовгоДокумента  Тогда        
                
                    СтрокаКлючеовгоДокумента = СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов.Добавить();              
                    
                    СтрокаКлючеовгоДокумента.Носитель = Результат.Носитель;
                    СтрокаКлючеовгоДокумента.АктПолученияКД = Результат.Регистратор;              
                    СтрокаКлючеовгоДокумента.АктУничтоженияКД = Неопределено;
                    СтрокаКлючеовгоДокумента.МассивАктовПередачиКД = Новый Массив;
                    
                    СтрокаРабочейТаблицы.АктУничтоженияПоследнегоКД  = Неопределено;
                    
            Иначе
                    Сообщить("ВНУТРЕННЯЯ ОШИБКА. Дублирование анализа акт получения КД - " + Результат.Регистратор);
                    СтандартнаяОбработка=Ложь;
                    Возврат Неопределено;
            КонецЕсли;
 
        КонецЕсли;     
        
        Если Тип("ДокументСсылка.АктПередачиКлючевыхДокументов") = ТипЗнч(Результат.Регистратор) и
                 ВидДвиженияНакопления.Приход = Результат.ВидДвижения Тогда     
            СтрокаКлючеовгоДокумента.МассивАктовПередачиКД.Добавить(Результат.Регистратор);
        КонецЕсли;     
        
        Если Тип("ДокументСсылка.АктУничтоженияКлючевыхДокументов") = ТипЗнч(Результат.Регистратор) Тогда       
            СтрокаКлючеовгоДокумента.АктУничтоженияКД = Результат.Регистратор;
        КонецЕсли;
            
    КонецЦикла;
    
//////////////!!!!!!!!!!
    // Определим последний АктУничтоженияКД для КИ
    Для каждого КИ из РабочаяТаблица Цикл
        
        КИ.АктУничтоженияПоследнегоКД=Неопределено;
        
        Для каждого КД из КИ.ТаблицаКлючевыхДокументов Цикл
            Если Неопределено = КД.АктУничтоженияКД Тогда
                КИ.АктУничтоженияПоследнегоКД=Неопределено;
                Прервать;
            Иначе
                КИ.АктУничтоженияПоследнегоКД = КД.АктУничтоженияКД;
            КонецЕсли;
        КонецЦикла;
        
    КонецЦикла;
 
    // [[ 3 - ОПРЕДЕЛЯЕМ ПЕРЕЧЕНЬ АКТОВ ЭКСПЛУАТАЦИИ]]
    Запрос.Текст =
    "ВЫБРАТЬ
    |   КлючеваяИнформацияСистемы.Период КАК Период,
    |   КлючеваяИнформацияСистемы.Регистратор,
    |   КлючеваяИнформацияСистемы.ВидДвижения,
    |   КлючеваяИнформацияСистемы.КлючеваяИнформация,
    |   КлючеваяИнформацияСистемы.ИС,
    |   КлючеваяИнформацияСистемы.Эксплуатируется
    |ИЗ
    |   РегистрНакопления.КлючеваяИнформацияСистемы КАК КлючеваяИнформацияСистемы
    |
    |УПОРЯДОЧИТЬ ПО
    |   Период";
    
    Результат = Запрос.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
        
        Отбор = Новый Структура;
        Отбор.Вставить("КлючеваяИнформация", Результат.КлючеваяИнформация);       
        
        // позиционируемся на строку в рабочей таблице
        СтрокаРабочейТаблицы = Неопределено;        
        НайденныеСтроки = РабочаяТаблица.НайтиСтроки(Отбор);
        
        Если 1 =  НайденныеСтроки.Количество()  Тогда
            СтрокаРабочейТаблицы = НайденныеСтроки[0];
        Иначе
            
            Сообщить("ВНУТРЕННЯЯ ОШИБКА. При анализе этапов экслпутации не найдены строки рабочей таблицы для " + Результат.КлючеваяИнформация);
            СтандартнаяОбработка=Ложь;
            Возврат Неопределено;
 
        КонецЕсли;
        
        СтрокаЭтапаЭксплуатации = Неопределено;  
 
        Если Тип("ДокументСсылка.АктВводаВЭксплуатациюКлючевойИнформации") = ТипЗнч(Результат.Регистратор) Тогда
            СтрокаЭтапаЭксплуатации = СтрокаРабочейТаблицы.ТаблицаЭксплуатации.Добавить();
            СтрокаЭтапаЭксплуатации.ИС = Результат.ИС;
            СтрокаЭтапаЭксплуатации.АктВводаВэкслпутациюКИ = Результат.Регистратор;
            СтрокаЭтапаЭксплуатации.АктВыводаизЭкслпутацииКИ = Неопределено;
            
            Продолжить;
        КонецЕсли;
        
        Если Тип("ДокументСсылка.АктВыводаИзЭксплуатацииКлючевойИнформации") = ТипЗнч(Результат.Регистратор) Тогда
            
            Отбор = Новый Структура;
            Отбор.Вставить("ИС", Результат.ИС);       
            НайденныеСтроки = СтрокаРабочейТаблицы.ТаблицаЭксплуатации.НайтиСтроки(Отбор);        
            
            Для i = 0 по НайденныеСтроки.ВГраница() Цикл
                ЭтапЭксплуатации = НайденныеСтроки[i];
                
                Если Неопределено = ЭтапЭксплуатации.АктВыводаизЭкслпутацииКИ Тогда
                    ЭтапЭксплуатации.АктВыводаизЭкслпутацииКИ = Результат.Регистратор;
                    Прервать;
                КонецЕсли;
                
            КонецЦикла;
            
        КонецЕсли;
        
        
    КонецЦикла;
 
    Возврат РабочаяТаблица;
    
КонецФункции //ПолучитьРабочуюТаблицуКриптоключейДляЖурналовФАПСИ152


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

Кликните здесь для просмотра всего текста
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
Функция ПолучитьТаблицуКриптоключейДляЖурналаФАПСИ152ОКИ() Экспорт
    
    // ИтоговаяТаблицаОтчета - будет содержать конечные данные, передаваемые в отчет
    ИтоговаяТаблицаОтчета = Новый ТаблицаЗначений;
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка1");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка2");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка3");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка4");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка5");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка6");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка7");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка8");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка9");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка10");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка11");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка12");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка13");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка14");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка15");
 
    РабочаяТаблица = ПолучитьРабочуюТаблицуКриптоключейДляЖурналовФАПСИ152();
    
    // Cортируем рабочую таблицу по датам создания первого ключевого документа
    РабочаяТаблица.Сортировать("ДатаПолученияПервогоКД Возр");
 
    
    ///////////////////////////////
    //
    // Заполнение итоговой таблицы
 
    НомерПоПорядку = 0; 
    Для каждого СтрокаРабочейТаблицы из РабочаяТаблица Цикл
        
        НомерПоПорядку = НомерПоПорядку + 1;
        
        
        СтрокаКриптоключа = ИтоговаяТаблицаОтчета.Добавить();
        СтрокаКриптоключа.Колонка1  = НомерПоПорядку;
        СтрокаКриптоключа.Колонка2  = "Ключевая информация:"  + Символы.ПС + СтрокаРабочейТаблицы.КлючеваяИнформация;
        
        СтрокаКриптоключа.Колонка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ОКИ


Здесь текст функции для криптографической защиты

Кликните здесь для просмотра всего текста

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Функция ПолучитьТаблицуКриптоключейДляЖурналаФАПСИ152ОКЗ() Экспорт
    
    // ИтоговаяТаблицаОтчета - будет содержать конечные данные, передаваемые в отчет
    ИтоговаяТаблицаОтчета = Новый ТаблицаЗначений;
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка1");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка2");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка3");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка4");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка5");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка6");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка7");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка8");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка9");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка10");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка11");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка12");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка13");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка14");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка15");
    ИтоговаяТаблицаОтчета.Колонки.Добавить("Колонка16");
    
    РабочаяТаблица = ПолучитьРабочуюТаблицуКриптоключейДляЖурналовФАПСИ152();
    
    // Cортируем рабочую таблицу по датам создания первого ключевого документа
    РабочаяТаблица.Сортировать("ДатаПолученияПервогоКД Возр");
    
    
    ///////////////////////////////
    //
    // Заполнение итоговой таблицы
 
    НомерПоПорядку = 0; 
    Для каждого СтрокаРабочейТаблицы из РабочаяТаблица Цикл
        
        НомерПоПорядку = НомерПоПорядку + 1;
        
        
        СтрокаКриптоключа = ИтоговаяТаблицаОтчета.Добавить();
        СтрокаКриптоключа.Колонка1  = НомерПоПорядку;         
        СтрокаКриптоключа.Колонка2  = "Ключевая информация:"  + Символы.ПС + СтрокаРабочейТаблицы.КлючеваяИнформация;
        
        СтрокаКриптоключа.Колонка12 = Формат(СтрокаРабочейТаблицы.ДатаВводаВЭксплуатацию,"ДФ=dd.MM.yyyy");
        СтрокаКриптоключа.Колонка13 = Формат(СтрокаРабочейТаблицы.ДатаВыводаИЗЭксплуатации,"ДФ=dd.MM.yyyy"); 
 
        ПодНомерПоПорядку = 0;
        
        Для каждого СтрокаТаблицыКлючевыхДокументов из СтрокаРабочейТаблицы.ТаблицаКлючевыхДокументов Цикл
            ПодНомерПоПорядку = ПодНомерПоПорядку + 1;
            
            СтрокаКлючевогоДокумента = ИтоговаяТаблицаОтчета.Добавить();
            СтрокаКлючевогоДокумента.Колонка1  = "" + НомерПоПорядку + "." + ПодНомерПоПорядку;                   
            СтрокаКлючевогоДокумента.Колонка2  = " - на носителе: " + СтрокаТаблицыКлючевыхДокументов.Носитель;
            
        
            СтрокаКлючевогоДокумента.Колонка5  = "" + СтрокаТаблицыКлючевыхДокументов.АктПолученияКД.ОтветственноеЛицо + ", " 
                                                 +    СтрокаТаблицыКлючевыхДокументов.АктПолученияКД.ОтветственноеЛицо.МестоРаботы;
 
            СтрокаКлючевогоДокумента.Колонка6  = "Акт получения ключевых документов № " 
                                                 + СтрокаТаблицыКлючевыхДокументов.АктПолученияКД.Номер 
                                                 + " от " + Формат(СтрокаТаблицыКлючевыхДокументов.АктПолученияКД.Дата,"ДФ=dd.MM.yyyy");
                                                 
            Если Неопределено <> СтрокаТаблицыКлючевыхДокументов.АктУничтоженияКД Тогда                                          
                СтрокаКлючевогоДокумента.Колонка14 = Формат(СтрокаТаблицыКлючевыхДокументов.АктУничтоженияКД.Дата,"ДФ=dd.MM.yyyy");
                
                СтрокаКлючевогоДокумента.Колонка15 = "Акт уничтожения ключевых документов № "
                                                     + СтрокаТаблицыКлючевыхДокументов.АктУничтоженияКД.Номер 
                                                     + " от " + Формат(СтрокаТаблицыКлючевыхДокументов.АктУничтоженияКД.Дата,"ДФ=dd.MM.yyyy");
            КонецЕсли;
 
 
            Для i = 0 По СтрокаТаблицыКлючевыхДокументов.МассивАктовПередачиКД.ВГраница() Цикл
                
                ПодПодНомерПоПорядку = i;
                АктПередачиКД = СтрокаТаблицыКлючевыхДокументов.МассивАктовПередачиКД[i];
                
                // Для первого акта строку не добавляем
                Если 0 = i Тогда
                        СтрокаАктаПередачиКД = СтрокаКлючевогоДокумента;
                Иначе
                        СтрокаАктаПередачиКД = ИтоговаяТаблицаОтчета.Добавить();
                        СтрокаАктаПередачиКД.Колонка1 = "" + НомерПоПорядку+"."+ПодНомерПоПорядку+"."+ПодПодНомерПоПорядку;
                КонецЕсли;
                        
                СтрокаАктаПередачиКД.Колонка7 = "" + АктПередачиКД.ПринимающееЛицо + "," + АктПередачиКД.ПринимающееЛицо.МестоРаботы;
                        
                СтрокаАктаПередачиКД.Колонка8 = "Акт передачи ключевых документов № " + АктПередачиКД.Номер + " от " 
                                                    +               Формат( АктПередачиКД.Дата, "ДФ=dd.MM.yyyy" );
                    
            КонецЦикла;
                    
        КонецЦикла;
        
    КонецЦикла;
    
    Возврат ИтоговаяТаблицаОтчета;
    
КонецФункции //ПолучитьТаблицуКриптоключейДляЖурналаФАПСИ152ОКЗ
Миниатюры
Доработка отчета в Конфигурации "Менеджмент Безопасности"   Доработка отчета в Конфигурации "Менеджмент Безопасности"   Доработка отчета в Конфигурации "Менеджмент Безопасности"  

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2020, 10:02
Ответы с готовыми решениями:

Доработка типовой конфигурации
Кто может помочь с доработкой типовой конфигурации? Напишите свою почту, пожалуйста.

Доработка типовой конфигурации
Написание простеньких обработок для оформления заказа продавцом и распределение заказов логистом на...

Маленькая Доработка Конфигурации
Доброго времени суток всем. Так как я только начинаю осваивать 1с8 в плане программирования, прошу...

Ищу программиста: доработка конфигурации управление СЦ
Всем доброго дня друзья! Ищу программиста, который способен доработать конфигурация Управление...

2
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 15
09.01.2020, 13:02  [ТС] 2
Запросы менял во всех функциях описанные выше.

Добавлено через 2 часа 53 минуты
Или, кто может объяснить мне принцип работы этих функций. Может я чет не понимаю
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 15
13.01.2020, 14:11  [ТС] 3
Ребят просто создаем внешний отчет и не паримся как я.
0
13.01.2020, 14:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2020, 14:11
Помогаю со студенческими работами здесь

Доработка отчета Прайс: вывод ШК
Был готовый отчет Прайс. Надо добавить вывод шк. Все хорошо добавляется,но только все поля куда то...

Доработка отчёта на основании типовых
Всем привет. Конфа бух.3 на замке. Отчёт &quot;мат.ведомость&quot;. Пользователь хочет чтобы в отчет...

Доработка отчета в 1с Диетическое питание
Здравствуйте! Прошу помощи у опытных программистов 1с помочь разобраться с доработкой отчета ....

Доработка типового отчета Продажи
Здравствуйте. Необходимо доработать отчет Продажи. Конфигурация УТ 10.3. Необходимо добавить...

Формирование отчета в самописной конфигурации
В начале немного о конфигурации - приведу скриншоты объектов конигурации. Справочники...

Доработка отчета, вывод в табличную новый столбец
Здравствуйте. В Конфигурации Альфа-Авто 4.1 пытаюсь доработать отчет(Сводная ведомость). в...

Доработка отчета Ведомость по партиям товаров на складах, УТ 10.3
Здравствуйте, подскажите пожалуйста, возможно ли в стандартном отчете добавить вычисляемое поле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru