Имена файлов подписей имен файлов данных. Из переданных имен файлов выделяются имена файлов данных и имена файлов их подписей.
// Из переданных имен файлов выделяются имена файлов данных и имена файлов их подписей.
// Сопоставление происходит по правилам формирования имени подписи и расширения файла подписи (p7s).
// Например:
// Имя файла данных: "example.txt"
// имя файла подписи: "example-Ivanov Petr.p7s"
// имя файла подписи: "example-Ivanov Petr (1).p7s".
//
// Параметры:
// ИменаФайлов - Массив - имена файлов типа Строка.
//
// Возвращаемое значение:
// Соответствие - содержит:
// * Ключ - Строка - имя файла.
// * Значение - Массив - имена файлов подписей типа Строка.
//
Функция ИменаФайловПодписейИменФайловДанных(ИменаФайлов) Экспорт
РасширениеДляФайловПодписи = ЭлектроннаяПодпись.ПерсональныеНастройки().РасширениеДляФайловПодписи;
Результат = Новый Соответствие;
// Разделяем файлы по расширению.
ИменаФайловДанных = Новый Массив;
ИменаФайловПодписей = Новый Массив;
Для Каждого ИмяФайла Из ИменаФайлов Цикл
Если СтрЗаканчиваетсяНа(ИмяФайла, РасширениеДляФайловПодписи) Тогда
ИменаФайловПодписей.Добавить(ИмяФайла);
Иначе
ИменаФайловДанных.Добавить(ИмяФайла);
КонецЕсли;
КонецЦикла;
// Отсортируем имена файлов данных по убыванию числа символов в строке.
Для ИндексА = 1 По ИменаФайловДанных.Количество() Цикл
ИндексМАКС = ИндексА; // Считаем что текущий файл имеет самое большое число символов.
Для ИндексБ = ИндексА+1 По ИменаФайловДанных.Количество() Цикл
Если СтрДлина(ИменаФайловДанных[ИндексМАКС-1]) > СтрДлина(ИменаФайловДанных[ИндексБ-1]) Тогда
ИндексМАКС = ИндексБ;
КонецЕсли;
КонецЦикла;
своп = ИменаФайловДанных[ИндексА-1];
ИменаФайловДанных[ИндексА-1] = ИменаФайловДанных[ИндексМАКС-1];
ИменаФайловДанных[ИндексМАКС-1] = своп;
КонецЦикла;
// Поиск соответствий имен файлов.
Для Каждого ИмяФайлаДанных Из ИменаФайловДанных Цикл
Результат.Вставить(ИмяФайлаДанных, НайтиИменаФайловПодписей(ИмяФайлаДанных, ИменаФайловПодписей));
КонецЦикла;
// Оставшиеся файлы подписей не распознаны как подписи относящиеся к какому то файлу.
Для Каждого ИмяФайлаПодписи Из ИменаФайловПодписей Цикл
Результат.Вставить(ИмяФайлаПодписи, Новый Массив);
КонецЦикла;
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
СохранитьДанныеВместеСПодписьюПослеПолученияФайлов (БСП)
ПрефиксыИменОбластейСПодписьюИПечатью (БСП)
СохранитьДанныеВместеСПодписьюПослеСохраненияФайлаДанных (БСП)
СохранитьФайлВместеСПодписью (БСП)
СохранитьДанныеВместеСПодписьюПослеПодключенияРасширенияРаботыСФайлами (БСП)
СохранитьДанныеВместеСПодписьюЦиклВнутреннийЦиклПослеИнициализацииФайла (БСП)
СохранитьДанныеВместеСПодписьюЦиклВнутреннийЦиклПослеПроверкиСуществованияФайла (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)