При работе с современными конфигурациями на платформе 1С:Предприятие 8.3, такими как Бухгалтерия предприятия 3.0 Корп, пользователи и администраторы часто сталкиваются с необходимостью оперативной установки патчей (исправлений). Патчи позволяют быстро устранить критические ошибки релиза без полноценного обновления всей конфигурации. Однако процесс их установки через режим 1С:Предприятие иногда прерывается системной ошибкой: «Необходимо выбирать только один файл обновления».
Эта проблема может поставить в тупик, так как она возникает даже в тех случаях, когда вы действительно выбираете ровно один файл формата .zip или .cfe. В данной статье мы подробно разберем, почему механизмы платформы и Библиотеки стандартных подсистем (БСП) ведут себя подобным образом, и как найти истинную причину сбоя.
Рассмотрим типичный сценарий. Администратор скачивает актуальные патчи для релиза 3.0.130.22 и пытается загрузить их стандартным способом: через раздел Администрирование — Обслуживание — Обновление программы — Установка обновлений и патчей. При нажатии на кнопку «Установить из файла» и выборе конкретного патча система выдает предупреждение о некорректном выборе файлов.
Интересно, что при попытке установить те же самые расширения через Конфигуратор (меню Конфигурация — Расширения — Добавить из файла) процесс проходит успешно. Это сразу наводит на мысль о том, что проблема кроется не в самом файле патча или его повреждении, а в логике работы программного кода в пользовательском режиме.
Проанализируем ситуацию с точки зрения разработчика. Основная причина кроется в том, как подсистема ОбновлениеКонфигурации из состава БСП обрабатывает строковые пути к выбранным объектам. Во многих процедурах 1С для передачи списка файлов между клиентом и сервером используется одна текстовая строка, где пути разделяются знаками пунктуации, чаще всего — запятой.
Проблема возникает в тот момент, когда в самом имени каталога, где лежит патч, встречается запятая. Например, если путь выглядит так: C:\Обновления\Патчи, релиз 3.0.130.22\patch.zip.
Разберем по шагам, что происходит внутри программного кода:
C:\Обновления\Патчи и релиз 3.0.130.22\patch.zip.Если СписокФайлов.Количество() > 1 Тогда.Если вы столкнулись с подобным поведением и хотите убедиться в причине, рекомендуется воспользоваться Отладчиком. Рассмотрим, на что стоит обратить внимание. Проблема обычно локализована в модулях, отвечающих за работу с файлами обновлений. В момент выбора файла в режиме Предприятие срабатывает обработчик, который передает данные на сервер.
Попробуем проанализировать примерный алгоритм, который может приводить к ошибке:
// Пример логики, которая может содержать ошибку парсинга
Процедура ПроверитьВыбранныеФайлы(СтрокаПути)
// Если СтрокаПути содержит "C:\Work, 1C\patch.zip"
МассивФайлов = СтрРазделить(СтрокаПути, ",");
Если МассивФайлов.Количество() > 1 Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Необходимо выбирать только один файл обновления");
Возврат;
КонецЕсли;
КонецПроцедуры
В данном примере функция СтрРазделить с разделителем «запятая» является «узким местом». Если вы видите в отладке, что переменная, содержащая путь, разбивается на части именно по символу в названии вашей папки — причина подтверждена.
Для устранения ошибки не требуется вносить изменения в программный код (хотя это и является багом реализации в некоторых версиях БСП). Достаточно соблюдать правила именования каталогов и путей. Рассмотрим порядок действий:
#, %, &).C:\Temp\Patches\ или D:\1C_Updates\.1С 8.3 (особенно релизы ветки 8.3.20) может некорректно обрабатывать пути, длина которых превышает 255 символов. При обрезании строки файл просто перестанет читаться как архив.%LOCALAPPDATA%\1C\1cv8.Помимо запятой в пути, на успешность загрузки патчей в режиме Предприятие могут влиять следующие моменты:
8.3.20.2184 наблюдались специфические сложности с правами доступа к временным каталогам при распаковке .zip патчей.1С:Предприятия, должен иметь полные права на чтение и запись в папку с патчами, а также в каталог временных файлов операционной системы (%TEMP%).Важный вывод: Программисту или администратору всегда стоит начинать диагностику подобных «необъяснимых» багов с проверки самых простых вещей — имен файлов и путей к ним. Как показывает практика, даже ленивая проверка в отладчике занимает меньше времени, чем переустановка нескольких версий платформы и выполнение тестирования и исправления базы данных.
Помните: запятая в имени папки — это «мина замедленного действия» для многих внутренних механизмов 1С, использующих текстовые списки путей.