Имя: Пароль:
1C
 
БП 3.0. Ошибка при загрузке правил обмена из файла
0 es3000
 
16.01.15
09:50
В связке работают БП 3.0 + УТ 11.
Вчера поставил последние обновления и теперь надо обновить правила обмена.
Самая последняя версия правил - в поставке УТ.

Поэтому я попытался загрузить эти правила в план обмена в БП.
Делаю все как обычно: выбираю вариант "из файла", указываю файл "Правила обмена.zip", нажимаю "Загрузить". Но 1С-ка почему-то не грузит и выдает ошибку:
"При распаковке архива найдено несколько файлов. Должен быть только один файл с правилами."

Что это значит?
Может быть 1С как-то переделала загрузку правил?
1 es3000
 
16.01.15
09:56
Забыл сказать...
Я также пробовал распаковать из архива с правилами и загрузить отдельно файл ExchangeRules.xml - тоже выдается ошибка.
Но уже другая:
"{РегистрСведений.ПравилаДляОбменаДанными.МодульМенеджера(162)}: Значение не является значением объектного типа (Записать)
        ДвоичныеДанныеКорреспондента.Записать(ИмяВременногоФайлаКорреспондента);"
2 Поpyчик-4
 
16.01.15
10:11
(0) Вертайте конфы взад. Работало ведь, на зачем было трогать.
3 es3000
 
16.01.15
10:17
(2) ну обновления ставить надо
4 varyag
 
16.01.15
10:23
(0) а правила обмена не в xml ли должны быть?
5 varyag
 
16.01.15
10:24
+ (4) Не увидел (1)
6 varyag
 
16.01.15
10:27
Смотри какой тип у ДвоичныеДанныеКорреспондента в отладчике?
7 es3000
 
16.01.15
10:48
(4),(5) да сами правила в формате xml, но они в поставке обновления запакованы в файл "Правила обмена.zip" и раньше именно zip указывали при загрузке правил в план обмена
8 es3000
 
16.01.15
11:05
Посмотрел код.
В коде проверяется чтобы в zip-архиве был либо один либо два файла.
Это странно, ведь раньше в zip-файле всегда было три файла:
-правила обмена
-правила обмена корреспондента
-правила регистрации

Там такой код:


            Если ЭтоПравилаКонвертации Тогда
                
СписокРаспакованныхФайлов.Количество() = 2 Тогда
                    
                    Если СписокРаспакованныхФайлов[0].Имя = "ExchangeRules.xml"
                        И СписокРаспакованныхФайлов[1].Имя ="CorrespondentExchangeRules.xml" Тогда
                        
                        ДвоичныеДанные = Новый ДвоичныеДанные(СписокРаспакованныхФайлов[0].ПолноеИмя);
                        ДвоичныеДанныеКорреспондента = Новый ДвоичныеДанные(СписокРаспакованныхФайлов[1].ПолноеИмя);
                        
                    ИначеЕсли СписокРаспакованныхФайлов[1].Имя = "ExchangeRules.xml"
                        И СписокРаспакованныхФайлов[0].Имя ="CorrespondentExchangeRules.xml" Тогда
                        
                        ДвоичныеДанные = Новый ДвоичныеДанные(СписокРаспакованныхФайлов[1].ПолноеИмя);
                        ДвоичныеДанныеКорреспондента = Новый ДвоичныеДанные(СписокРаспакованныхФайлов[0].ПолноеИмя);
                        
                    Иначе
                        
                        НСтрока = НСтр("ru = 'Имена файлов в архиве не соответствуют ожидаемым. Ожидаются файлы:
                            |ExchangeRules.xml - правила конвертации для текущей программы;
                            |CorrespondentExchangeRules.xml - правила конвертации для программы-корреспондента.'");
                        ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ);
                        
                    КонецЕсли;
                    
                // Старый формат
                ИначеЕсли СписокРаспакованныхФайлов.Количество() = 1 Тогда
                    НСтрока = НСтр("ru = 'В архиве найден один файл правил конвертации. Ожидаемое количество файлов в архиве - два. Ожидаются файлы:
                        |ExchangeRules.xml - правила конвертации для текущей программы;
                        |CorrespondentExchangeRules.xml - правила конвертации для программы-корреспондента.'");
                    ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ);
                // В архиве оказалось несколько файлов, хотя должен быть один - отказываемся от загрузки.
                ИначеЕсли СписокРаспакованныхФайлов.Количество() > 1 Тогда
                    НСтрока = НСтр("ru = 'При распаковке архива найдено несколько файлов. Должен быть только один файл с правилами.'");
                    ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ);
                КонецЕсли;
                
            Иначе
                
                // Закладываем полученный файл правил обратно в двоичные данные.
                Если СписокРаспакованныхФайлов.Количество() = 1 Тогда
                    ДвоичныеДанные = Новый ДвоичныеДанные(СписокРаспакованныхФайлов[0].ПолноеИмя);
                    
                // В архиве оказалось несколько файлов, хотя должен быть один - отказываемся от загрузки.
                ИначеЕсли СписокРаспакованныхФайлов.Количество() > 1 Тогда
                    НСтрока = НСтр("ru = 'При распаковке архива найдено несколько файлов. Должен быть только один файл с правилами.'");
                    ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ);
                КонецЕсли;
                
            КонецЕсли;
9 es3000
 
19.01.15
10:30
Разобрался с этой проблемой.
Чтобы загрузить правила из поставки необходимо использовать команду "Загрузить правила", находящуюся на форме списка синхронизаций.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший