Скачивание обновлений 1C 8, 7.7, Айлант ЖКХ




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

99 Comments

  1. olesha

    https://users.v8.1c.ru/ (Обновления 1С предприятие 8) не работает

    Reply ↓
  2. qwinter

    (1) olesha, очередное обновление сайта от 1с)) обновите процедуру в общем модуле UPD_ЗагрузкаКонфигураций:

    Процедура РекурсивныйПарсингСпискаКонфигураций(ДокументHTML)
    
    ТекИмяГруппы = «»;
    
    Для Каждого ЭлДок Из ДокументHTML.ДочерниеУзлы Цикл
    
    Если СокрЛП(ЭлДок.ТекстовоеСодержимое) = «Название» Тогда
    
    //количество строк в таблице дистрибутивов
    СписокУзловHTML = ЭлДок.РодительскийУзел.РодительскийУзел.РодительскийУзел.ДочерниеУзлы[1].ДочерниеУзлы;
    КолЭлементов = СписокУзловHTML.Количество();
    
    Для А=0 По КолЭлементов-1 Цикл
    
    Если СписокУзловHTML[А].ДочерниеУзлы.Количество() = 1 Тогда
    ТекИмяГруппы = СокрЛП(СписокУзловHTML[А].ДочерниеУзлы[0].ДочерниеУзлы[0].ТекстовоеСодержимое);
    Группа = НайтиСоздатьГруппу(ТекИмяГруппы, Справочники.UPD_Программы.v8, Истина);
    ИначеЕсли СписокУзловHTML[А].ДочерниеУзлы.Количество() = 2 Тогда
    ТекИмяГруппы = СокрЛП(СписокУзловHTML[А].ДочерниеУзлы[0].ДочерниеУзлы[0].ТекстовоеСодержимое);
    Группа = НайтиСоздатьГруппу(ТекИмяГруппы, Справочники.UPD_Программы.v8, Истина);
    КонецЕсли;
    
    Если СписокУзловHTML[А].ДочерниеУзлы[0].ДочерниеУзлы.Количество() > 1 Тогда
    ТекЯчейка = СписокУзловHTML[А].ДочерниеУзлы[0].ДочерниеУзлы[1];
    Если ТипЗнч(ТекЯчейка) = Тип(«ЭлементЯкорьHTML») Тогда
    
    Название = СокрЛП(ТекЯчейка.ТекстовоеСодержимое);
    ГиперСсылка = НайтиИмяФайлаПоСсылке(ТекЯчейка.ГиперСсылка);
    
    НайтиСоздатьПрограмму(Название, Группа, ГиперСсылка, ,Перечисления.UPD_СайтОбновлений.UsersV81C, ТекИмяГруппы);
    
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Возврат;
    КонецЕсли;
    
    Если ЭлДок.ЕстьДочерниеУзлы() Тогда
    
    РекурсивныйПарсингСпискаКонфигураций(ЭлДок);
    
    КонецЕсли;
    
    КонецЦикла;
    
    КонецПроцедуры

    Показать

    Reply ↓
  3. olesha

    (2) УРЯ заработало

    Reply ↓
  4. maksa2005

    А бесплатно можно скачать обновление или нужен логин и пароль?

    Reply ↓
  5. qwinter

    (4) maksa2005, нужен логин и пароль.

    Reply ↓
  6. CheBurator

    а обработка скачивает только минимально необходимый набор обновлений от текущей конфигурации (как задать версию?) до актуальной? — например — купил я коробку БП3 корп — в ней диск с весрийе аж в районе февраля — ручками пришлось скачивать все (миниамльно необходимые) обновления — 10 штук (обновлений же гораздо больше…).

    ???

    Reply ↓
  7. qwinter

    (6) CheBurator,

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

    P.S. Данное касается естественно только релизов с users.v8.1c.ru, т.к. на остальных сайтах или нет полного списка релизов.

    Reply ↓
  8. pallid

    Как работает скачивание 7.70 конфигураций?

    Их нет в списке…

    Reply ↓
  9. qwinter

    (8) white_sochi, вводите пароль от http://techsupp.1c.ru в настройках. Затем обновляете список программ. После можно установить, что будет загружаться.

    Reply ↓
  10. zato1c

    https://releases.1c.ru/total сайтом не работает

    Reply ↓
  11. qwinter

    (10) zato1c, обрадовало нас 1С обновленным сайтом)) Обновление будет сегодня-завтра.

    Reply ↓
  12. qwinter

    Выложил обновление.

    Reply ↓
  13. zato1c

    (12) эх только $ потратил, все равно не пашет, https://releases.1c.ru/ да же не показывает Релизы 8x втабл части, хотя выбор в настройках сайт появился!

    Reply ↓
  14. qwinter

    (13) zato1c, действительно ошибка в получение конфигураций.

    В общем модуле: «UPD_ЗагрузкаКонфигураций» в процедуре «РекурсивныйПарсингСпискаКонфигураций»

    Если СокрЛП(ЭлДок.ТекстовоеСодержимое) = «Название» Тогда
    
    //количество строк в таблице дистрибутивов
    СписокУзловHTML = ЭлДок.РодительскийУзел.РодительскийУзел.РодительскийУзел.ДочерниеУзлы[1].ДочерниеУзлы;
    КолЭлементов = СписокУзловHTML.Количество();
    
    Для А=0 По КолЭлементов-1 Цикл
    
    Если СписокУзловHTML[А].ДочерниеУзлы.Количество()=1 ИЛИ СписокУзловHTML[А].ДочерниеУзлы.Количество()=2 Тогда
    ТекИмяГруппы = СокрЛП(СписокУзловHTML[А].ДочерниеУзлы[0].ДочерниеУзлы[0].ТекстовоеСодержимое);
    Группа = НайтиСоздатьГруппу(ТекИмяГруппы, Справочники.UPD_Программы.v8, Истина);

    Показать

    Замените на:

    Если СокрЛП(ЭлДок.ТекстовоеСодержимое) = «Название» Тогда
    
    //количество строк в таблице дистрибутивов
    СписокУзловHTML = ЭлДок.РодительскийУзел.РодительскийУзел.РодительскийУзел.ДочерниеУзлы[2].ДочерниеУзлы;
    КолЭлементов = СписокУзловHTML.Количество();
    
    Для А=0 По КолЭлементов-1 Цикл
    
    Если СписокУзловHTML[А].ДочерниеУзлы.Количество() = 1 ИЛИ СписокУзловHTML[А].ДочерниеУзлы.Количество() = 2 Тогда
    ТекИмяГруппы = СокрЛП(СписокУзловHTML[А].ДочерниеУзлы[0].ТекстовоеСодержимое);
    Группа = НайтиСоздатьГруппу(ТекИмяГруппы, Справочники.UPD_Программы.v8, Истина);

    Показать

    Reply ↓
  15. zato1c

    {Справочник.UPD_Программы.Форма.ФормаЭлемента.Форма(37)}: Значение не является значением объектного типа (Ссылка)

    СтруктураВозвращаемыхДанных = ПолучитьТекстНовогоВВерсии(Элементы.Версии.ТекущиеДанные.Ссылка);

    там так и потянется. ладно не замарачивайся, а вот если бы вот это подшаманил (если смог бы), было бы респект http://infostart.ru/public/287082/ видно хозяин пропал, а весЧ не плоха

    Reply ↓
  16. qwinter

    (15) zato1c, замените процедуру.

    &НаКлиенте
    Процедура ВерсииПриАктивизацииСтроки(Элемент)
    
    ТекДанные = Элементы.Версии.ТекущиеДанные;
    Если ТекДанные <> Неопределено Тогда
    СтруктураВозвращаемыхДанных = ПолучитьТекстНовогоВВерсии(.Ссылка);
    Если СтруктураВозвращаемыхДанных.ФайлНайден Тогда
    Элементы.НовоеВВерсии.Видимость = Истина;
    НовоеВВерсии = СтруктураВозвращаемыхДанных.ТекстНовоеВВерсии;
    Иначе
    Элементы.НовоеВВерсии.Видимость = Ложь;
    КонецЕсли;
    КонецЕсли;
    
    КонецПроцедуры
    

    Показать

    Reply ↓
  17. qwinter

    (15) zato1c, моя конфа значительно превосходит эту обработку.

    Reply ↓
  18. qwinter

    блин в предыдущем посте ошибка. Вот правильный код.

    &НаКлиенте
    Процедура ВерсииПриАктивизацииСтроки(Элемент)
    
    ТекДанные = Элементы.Версии.ТекущиеДанные;
    Если ТекДанные <> Неопределено Тогда
    СтруктураВозвращаемыхДанных = ПолучитьТекстНовогоВВерсии(ТекДанные.Ссылка);
    Если СтруктураВозвращаемыхДанных.ФайлНайден Тогда
    Элементы.НовоеВВерсии.Видимость = Истина;
    НовоеВВерсии = СтруктураВозвращаемыхДанных.ТекстНовоеВВерсии;
    Иначе
    Элементы.НовоеВВерсии.Видимость = Ложь;
    КонецЕсли;
    КонецЕсли;
    
    КонецПроцедуры

    Показать

    Reply ↓
  19. zato1c

    Вроде начал крутится, по наблюдаем, спасибо за ранее!

    Reply ↓
  20. zato1c

    Скачал пару релизов и сказал, что все задания выполнены, так что увы!

    Reply ↓
  21. qwinter

    (20) zato1c, а Вы точно все настроили?))) Проверьте даты начала загрузок.

    Reply ↓
  22. zato1c

    Сутки крутил. Итог бухгалтерия и зуп нет! как 8,2 так 8,3 все перебрал. Было бо не плохо прописывать пути кача релизов. Люди привыкли к определенному порядку. ну и для гурманов) оповещение на @ хотя бы, что вышло и с качалось(это так на всякий))

    Reply ↓
  23. qwinter

    (22) zato1c, я не понимаю, что именно у вас вызывает такие проблемы с настройкой. У меня все прекрасно скачивается. Да и пути тоже можете прописывать какие хотите.

    Reply ↓
  24. zato1c

    молодец конечно, что написал. Но как то все живет отдельной жизнью, что качает, сколько качает, ХЗ

    Reply ↓
  25. AvtoBuhgalter

    Возник такой вопрос:

    Я не Франч и общего доступа к сайту обновлений нет.

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

    Есть такая возможность? Или возможно ли её реализовать?

    Reply ↓
  26. qwinter

    (25) AvtoBuhgalter, есть возможность ввести несколько пользователей. Для каждого пользователя будут качаться доступные ему обновления.

    Reply ↓
  27. pallid

    Обработка UPD_ПостроениеЦепочкиОбновлений

    СТР 77

    ПутьКФайлу = ЭлементСписка.Значение + «1c» + ИмяПапкиШаблона + «» + ИмяВерсии + «1cv8.cfu»;

    строка «1с» не во всех случаях такая, например у отраслевой БСО, должно быть «IMPULS-IVC»

    Reply ↓
  28. qwinter

    (27) white_sochi, если подскажите, где это можно в автоматическом режиме взять с сайта релизов 1с буду благодарен.

    Reply ↓
  29. pallid

    (28) а вот нигде к сожалению.

    Давайте в справочнике просто всем типовым проставим директорию «1С», а остальным, чтобы пользователь сам указывал где искать

    Reply ↓
  30. qwinter

    (29) white_sochi, так и сделаем) напишите почту свою, я вам обновленную версию вышлю.

    Reply ↓
  31. Snork

    Можно добавить еще скачивание релизов КАМИН?

    Сайт:

    http://www.kaminsoft.ru/component/kaminsupport/?Itemid=50

    Reply ↓
  32. Snork

    В отчете по последним версиям не хватает режима, когда выводит только измененные за последние Х дней конфигурации

    Reply ↓
  33. qwinter

    (31) Snork, у меня нет ни одной учетной записи камина, что бы даже посмотреть как там устроено.

    Reply ↓
  34. qwinter

    (32) Snork, так можно поставить отбор))

    Reply ↓
  35. EvgenURNN

    при попытке развернуть с пустой базы 1.0.3.6. пытается вполнить обновление (похоже на то, что там начальное заполнение) выдает ошибку

    {ОбщийМодуль.UPD_ОбновлениеБазыДанных.Модуль(209)}: Ошибка при вызове метода контекста (ПрочитатьXML)

    ЗаписанноеЗначение = ПрочитатьXML(ЧтениеXML);

    по причине:

    Ошибка преобразования данных XML: [sfile://C:/Users/Evgenu/AppData/Local/Temp/UPD_КонфигурацииИВерсииV8.txt][202566,3]

    Версия платформы 1С:Предприятие 8.3 (8.3.8.1933)

    Reply ↓
  36. qwinter

    (35) EvgenURNN, странно. Попробуйте на 8.3.5 развернуть начальный вариант.

    Reply ↓
  37. EvgenURNN

    (36) Поразбирался маленько, ошибка из-за того, что в конфигурации больше реквизитов: ПорядокГруппы, ВыводитьВОтчет и КаталогПоставщика. В макете нет таких реквизитов. Сериализатор валится с ошибкой из-за этого.

    Сейчас все работает.

    Reply ↓
  38. Alex_E

    (35) EvgenURNN, Та же ошибка, скачал и установил сегодня…. Автор, исправлять бум?

    Reply ↓
  39. qwinter

    (38) Alex_E, будем). просто хотел и все версии обновить в начальном заполнении, но все руки не доходят. Если срочно лечится очень просто. У справочника UPD_Программы удаляете реквизит КаталогПоставщика. И в общем модуле UPD_ОбновлениеБазыДанных в функции ВерсияКонфигурации устанавливаете версию 1.0.3.5. Запускаете 1С. Как прошло начальное заполнение накатываете конфигурацию.

    Reply ↓
  40. Alex_E

    (39) спасибо!

    Reply ↓
  41. qwinter

    (40) Alex_E, все поправил) если еще сами не делали напишите почту, я вам вышлю конфигурацию.

    Reply ↓
  42. Апрель-С

    Есть две проблемы в версии 1.0.3.7:

    1. У нас не работает обновление справочника версий. Проблема насколько я понял таиться в модуле «UPD_ЗагрузкаОбновленийV8»

    Функция ЗагрузитьКонфигурации(ПользовательСайта) Экспорт
    
    ИдентификаторСессии = UPD_ЗагрузкаОбновленийПовтИсп.НайтиИдентификаторСессииV8(ПользовательСайта);
    
    Попытка
    
    Загружено = 0;
    Запрос = Новый HTTPЗапрос;
    Запрос.Заголовки.Вставить(«Cookie», ИдентификаторСессии.JSESSIONID);
    Запрос.АдресРесурса = «/total»;
    
    Соединение2 = Новый HTTPСоединение(«releases.1c.ru»,,,,Новый ИнтернетПрокси,,Новый ЗащищенноеСоединениеOpenSSL);
    
    ОтветHTTP = Соединение2.Получить(Запрос);
    
    ЧтениеHTML = Новый ЧтениеHTML;
    ЧтениеHTML.УстановитьСтроку(ОтветHTTP.ПолучитьТелоКакСтроку());
    
    Построитель = Новый ПостроительDOM;
    ДокументHTML = Построитель.Прочитать(ЧтениеHTML);
    
    ИскатьВерсиюПлатформы = Константы.UPD_ИскатьТребуемуюВерсиюПлатформы.Получить();
    
    Если ИскатьВерсиюПлатформы Тогда
    РекурсивныйПарсингСпискаКонфигураций(ДокументHTML, ИскатьВерсиюПлатформы, ПользовательСайта);
    Иначе
    РекурсивныйПарсингСпискаКонфигураций(ДокументHTML); //АС: Здесь наверное не хватает параметра «ПользовательСайта»
    КонецЕсли;
    
    ЗагрузитьВерсииV8(ПользовательСайта);
    
    Исключение
    
    UPD_РегламентныеЗадания.ЗаписатьОшибку(ОписаниеОшибки());
    Возврат Ложь;
    
    КонецПопытки;
    
    Возврат Истина;
    
    КонецФункции

    Показать

    2. Если используется несколько пользователей для загрузки с сайта «releases.1c.ru», то выполнение кода падает с ошибкой неуникальности ключа фоновых заданий. Поэтому ключ нужно или генерировать случайный, или в разрезе пользователей сайта. А вообще лучше сначала построить список доступных ПП по разным пользователям, а уже потом парсить версии. У разных пользователей могут быть одинаковые ПП в списке. Проблемы начинаются при параллельной записи в базу новых ПП, доступ к которым есть у двух пользователей.

    Reply ↓
  43. SERJ_1CC

    (41) qwinter, Павел, Ваша конфигурация сейчас работает или нет, а то что-то не понятно по отзывам, вроде опять что-то поменялось на сайте 1С?

    Reply ↓
  44. qwinter

    (43) SERJ_1CC, работает, проблемы только у тех, кто использует несколько логинов к сайту релизов.

    Reply ↓
  45. SERJ_1CC

    (44) qwinter, Понял, спасибо, сегодня скачаю посмотрю, а вообще я имел ввиду то что сайт releases.1c.ru сейчас переделали и что теперь скачивание обновлений идет с https://dl03.1c.ru

    Reply ↓
  46. SERJ_1CC

    (45) я же Вас правильно понимаю, конфигурация парсит сайт и вытягивает файлы обновлений updsetup.exe без сторонних исполняемых компонент?

    Reply ↓
  47. qwinter

    (46) SERJ_1CC,

    а вообще я имел ввиду то что сайт releases.1c.ru сейчас переделали и что теперь скачивание обновлений идет с https://dl03.1c.ru

    все работает.

    я же Вас правильно понимаю, конфигурация парсит сайт и вытягивает файлы обновлений updsetup.exe без сторонних исполняемых компонент?

    исключительно код 1С

    Reply ↓
  48. Snork

    Что-то не работает последние 20 дней загрузка. Пароли проверил-ок. Использую и https://releases.1c.ru/, и

    http://techsupp.1c.ru/ с одинаковыми логинами и паролями

    Куда копать?

    Reply ↓
  49. qwinter

    (48) пришлите в личку вашу почту, я вам последнюю версию скину.

    Reply ↓
  50. demon3

    Здравствуйте. Не всегда скачивает обновления и список текущих релизов не загружает. Как правильно пользоваться данной конфигурацией?

    Reply ↓
  51. qwinter

    (50) Что значить «не всегда»? Доступ к сайту https://releases.1c.ru/ есть?

    Reply ↓
  52. Апрель-С
    Reply ↓
  53. Tiger77

    1с немного поменяла форму авторизации login.1c.ru и поля Куки на releases.1c.ru

    Reply ↓
  54. DIMon_ru

    День добрый.

    Почему то версии обновлений в справочнике заканчиваются 2016 годом, нет за 2017 и 2018, версия устаревшая?

    Reply ↓
  55. qwinter

    (54) так добавьте пользователя портала и обновите)

    Reply ↓
  56. DIMon_ru

    (55) День добрый.

    Пользователя конечно что же добавил, под ним на users.v8.1c.ru захожу. Через программу не обновляет версии…

    Если же снять галку Использовать фоновые задания то ошибка… как быть, может версия не совсем новая? Установлена Загрузка обновлений 1C 8, 7.7, Айлант ЖКХ (1.0.3.10)

    Reply ↓
  57. qwinter

    (56) напишите мне в личку от пользователя под которым скачивали. Я вам пришлю обновленный cf

    Reply ↓
  58. DIMon_ru

    (57) Павел, cf получили, обновили конфу, спасибо. Но что то не пойму как получаются даты обновлений, интересует Бухгалтерия 3.0 обычная, по ней почему то на 2016 году все остановилось, а вот по Бухгалтерии КОРП все ОК, свежее 2018 года. В чем может быть дело?

    Reply ↓
  59. DIMon_ru

    (58) Похоже долго идут фоновые задания… терпения надо много)))

    Reply ↓
  60. qwinter

    (59) первый раз действительно не быстро))

    Reply ↓
  61. Апрель-С

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

    Reply ↓
  62. qwinter

    (61) в модуле UPD_СлужебныйКлиентСервер вместо

    ИдентификаторСессии = UPD_ЗагрузкаОбновленийКлиентСерверПовтИсп.НайтиИдентификаторСессииV8(Пользователь, Соединение.Сервер);

    ИдентификаторСессии = UPD_ЗагрузкаОбновленийКлиентСерверПовтИсп.НайтиИдентификаторСессииV8(Пользователь, Соединение.Сервер, Запрос.АдресРесурса);

    в модуле UPD_ЗагрузкаОбновленийКлиентСерверПовтИсп вместо

    Функция НайтиИдентификаторСессииV8(ПользовательСайта, АдресСайта = «releases.1c.ru») Экспорт
    
    ИдентификаторСессии = Новый Структура(«Найден, JSESSIONID, onec_security», Ложь);
    
    Сессии = Новый Соответствие;
    
    Попытка
    
    HTTPЗапрос1 = Новый HTTPЗапрос;
    HTTPЗапрос1.Заголовки.Вставить(«Connection», «keep-alive»);

    Показать

    Функция НайтиИдентификаторСессииV8(ПользовательСайта, АдресСайта = «releases.1c.ru», АдресРезурса = «») Экспорт
    
    ИдентификаторСессии = Новый Структура(«Найден, JSESSIONID, onec_security», Ложь);
    
    Сессии = Новый Соответствие;
    
    Попытка
    
    HTTPЗапрос1 = Новый HTTPЗапрос;
    HTTPЗапрос1.Заголовки.Вставить(«Connection», «keep-alive»);
    HTTPЗапрос1.АдресРесурса = АдресРезурса;

    Показать

    Reply ↓
  63. markovki
    Reply ↓
  64. qwinter

    (63)

    Можете подсказать в чем загвоздка, что-то пока плохо получается разобраться в запросах, не могу понять, что надо сделать дальше, чтобы скачать файл?!

    Надо залогиниться на dl03.1c.ru, а вы пытаетесь использовать куки логина на releases.1c.ru. Вам надо JSESSIONID1 получать из соединения с сервером dl03.1c.ru.

    Reply ↓
  65. markovki

    (64) как же мне залогиниться на dl03.1c.ru, если на login.1c.ru мы используем форму с логином и паролем и посылаем POST-запрос (Если не ошибаюсь), понимаю, что вам это наверное покажется глупым, но на dl03.1c.ru такой формы то нет…

    Reply ↓
  66. qwinter

    (65)

    login.1c.ru это login.1c.ru.

    releases.1c.ru это releases.1c.ru.

    На releases.1c.ru формы ввода логина и пароля тоже нет)))) залогивание на dl03.1c.ru ничем не отличается от ввода логина на releases.1c.ru. Тот же пост запрос к login.1c.ru, только с куками полученными с dl03.1c.ru.

    Reply ↓
  67. markovki

    (66) спасибо, сейчас попробую! Т.е. хорошо, здесь пока ясно, пробую запросить файл по ссылке, меня перенаправляет, на login.1c.ru, я беру куки которые были в ответе при попытке получить файл с сайта dl03.1c.ru и передаю их на login.1c.ru, на тот адрес куда меня перенаправили. Дальше мне опять получать форму и логиниться с этими куками от dl03.1c.ru?

    Это вопрос номер 1.

    А второй вопрос залогинился допустим, дальше как? Сразу пробовать получить файл с куками от dl03.1c.ru? Или какие-то ещё промежуточные действия?!))

    Reply ↓
  68. qwinter

    (67) запрашиваешь страницу по ссылке на скачку на dl03.1c.ru, читаешь с нее куки. С этими куками отправляешь пост запрос к login.1c.ru полностью аналогичный как при логине с releases.1c.ru, т.к. сначала обычный запрос, оттуда читаешь форму и параметры, а затем уже пост запрос. А затем с этими куками запрашиваешь с dl03.1c.ru, там он если правильно помню несколько раз перенаправляет, т.е. если код ответа будет перенаправлением, то по реферальной ссылке надо будет еще запрашивать.

    Reply ↓
  69. markovki

    (68) ок, с куками понял, попробую по такому алгоритму!

    Reply ↓
  70. markovki
    Reply ↓
  71. Solemn

    (62)

    торСессииV8(Пользователь, Соедине

    Работает 30.03.18

    Не работает 04.05.18 🙂

    Reply ↓
  72. enschede

    Я правильно понимаю, что конфигурация умеет скачивать файлы update.exe?

    Reply ↓
  73. qwinter

    (72) да

    Reply ↓
  74. enschede

    (73) А скачивать отдельные файлы, выкладываемые на странице конфигурации? Или насколько реалистично самостоятельно реализовать такой функционал на основе имеющегося?

    Reply ↓
  75. qwinter

    (74) со странице конфигурации ничего не качается, со странице версии качаются файлы описанные в процедуре в одном из общих модулей.

    Реализовать загрузку дополнительных материалов со страницы конфигурации не думаю, что будет очень сложно.

    Reply ↓
  76. enschede

    Конфигурация не находит релизы, которые вышли в августе при выполнении команды «Обновить версии конфигураций». Для конфигурации БП 3.0 текущий релиз 3.0.64.48 от 15.08.18. В конфигурации только 3.0.64.34 от 24.07.2018. Для конфигурации БГУ 2.0 текущий релиз 2.0.57.26 от 10.08.18, в конфигурации 2.0.57.8 от 09.07.2018.

    В базе указал пользователя для проверки и скачивания обновление и каталог обновлений в настройках. Больше ничего не делал.

    Reply ↓
  77. enschede

    Скачивание релизов тоже не работает. В настройках указал дату начала скачивания обновлений «01.08.2999», чтобы не скачивались релизы всех конфигураций. Указал каталог обновлений. Добавил пользователя для проверки и скачивания обновлений. Уставонил значение «Загружать полные дистрибутивы» в Истина.

    Для одной конфигурации указал свою дату загрузки обновлений «01.01.2018», чтобы скачались обновления только этой конфигурации. Также поставил галочку «Скачивать обновления». Выполняю команду «Загрузить», где-то на десять секунд запускается фоновое задание, выключается, никаких файлов не появляется.

    Reply ↓
  78. qwinter

    (77) Одно из двух: или у пользователя нет доступа к обновлениям, или у 1С нет доступа в интернет.

    P.S. Если база серверная, то пользователь у службы должен быть с доступом в инет.

    Reply ↓
  79. enschede

    (78) Права точно есть, постоянно скачиваю под этим пользователем обновления. База файловая. Доступ в интернет должен быть, список релизов в конфигурациях же появился, хоть и не совсем актуальный. Я так понимаю, он скачивается с интернета.

    Reply ↓
  80. qwinter

    (79) список релизов по конец июля входит в текущую конфигурацию.

    Reply ↓
  81. qwinter

    (79) Если нет основного пользователя, то обновление версий идет только по конфигурациям где выставлен пользователь.

    Reply ↓
  82. enschede

    Вот что смог выяснить, к сожалению, знания не позволяют мне выяснить больше.

    Выполнение кода добирается до функции «ЗагрузитьВерсииV8ПоСсылке». Соединение выполняется (см. скриншот), ответ получен (см. скриншот), что говорит о наличии доступа в интернет.

    Из функции «ЗагрузитьВерсииV8ПоСсылке» попадаем в процедуру «РекурсивныйПарсингСпискаВерсий». И здесь происходит что-то подозрительное. Выполняется получение первого элемента:

    Для Каждого ЭлДок Из ДокументHTML.ДочерниеУзлы Цикл

    Первое условие не выполняется:

    Если СокрЛП(ЭлДок.ТекстовоеСодержимое) = «Номер версии» Тогда

    Выполнение цикла тут же прекращается. Условие, которое идет следом за циклом, тоже не выполняется:

    Если ЭлДок.ЕстьДочерниеУзлы() Тогда 

    Выполнение процедуры «РекурсивныйПарсингСпискаВерсий» заканчивается безрезультатно. Насколько я понимаю произошла неудачная попытка получения списка версий конфигурации.

    Reply ↓
  83. qwinter

    (82) Код состояния ответа неверный. Запрос возвращает на страницу авторизации. Проверьте еще раз правильность логина и пароля.

    Reply ↓
  84. enschede

    (83) Проверил. Логин и пароль набираю не с клавиатуры, а копированием/вставкой. Самостоятельно на сайт по этому логину и паролю я зайти могу. А попытка обновить версии конфигурации неудачная.

    Посмотрел функцию «НайтиИдентификаторСессииV8». В ней четыре раза встречается переменная ОтветHTTP. Посмотрел коды состояния в этой переменной: 302, 200, 401, 401. Я так понимаю, что в третий раз как раз происходит неудачная авторизация.

    Reply ↓
  85. enschede

    (83) Попробовал под другим логином и паролем. Заработало. Причина непонятна.

    Reply ↓
  86. qwinter

    (84) может с лишним пробелом копируется?

    Reply ↓
  87. qwinter

    (84)или с символом переноса.

    Reply ↓
  88. enschede

    (86) Если бы все так просто было. Я проверял переменную InviteCode, на всякий случай. В ней логин и пароль правильные. Но пока отложим эту проблему, выявились новые.

    Запускаю скачивание файлов обновлений. Иногда скачиваются нужные файлы, но чаще получаются файлы с одинаковым размеров 10КБ. Если это файл htm, то его можно открыть. В нем будет приблизительно следующее:


    1C:Обновление программ

    Главная Новости Личный кабинет О сервисе

    Указанный файл не найден

    Внимание!

    Выбранный файл не найден

    С помощью отладчика прошелся, для файлов самих обновлений получается точно такой же результат, просто он сохраняется в файл с расширением exe.

    В результате ни разу все нужные файлы не скачались, сколько бы я не запускал загрузку. Либо какая-то часть скачивается, либо ни одного.

    Reply ↓
  89. qwinter

    (88) какая то совсем ерунда. Вас опять кидает на страницу авторизации видать при скачивании почему то.

    Reply ↓
  90. qwinter

    (88) а что пишет в регистре Ошибки при загрузке обновлений?

    Reply ↓
  91. qwinter

    (88) а у второго пользователя права на эти конфигурации есть?

    Reply ↓
  92. enschede

    (90) Ничего не пишет. Случайно нашел этот регистр, сразу полез смотреть. Журнал регистрации смотрел, тоже ничего нет интересного.

    А как можно решить, отследить проблему? На стороне 1С я могу самостоятельно разбирать проблемы, но как только дело доходит до взаимодействия с сайтом 1С, тут я ничего не могу сделать. HTTP и внутренности 1совского сайта я не знаю.

    Reply ↓
  93. enschede

    (91) Да, конечно. Через сайт без проблем могу скачивать. Плюс, как я уже писал выше, иногда файлы удачно скачиваются. ПРи этом никакой логики не вижу. Совсем необязательно, что скачаются первые два файла, а остальные не скачаются. Я запускал несколько раз, каждый раз разные файлы закачивались удачно. Я установил количество потоков равное нулю, чтобы все в одном потоке выполнялось и чтобы было проще отслеживать выполнение. Поэтому имел возможность наблюдать в режиме реального времени появления файлов.

    У пользователя наблюдается внезапное кратковременное пропадание прав)

    Reply ↓
  94. enschede

    (86) Похоже определил причину проблемы. Изменил пароль у первого пользователя, оставив только латинские буквы и цифры. Стало работать. До этого в пароле использовались спецсимволы и скобки.

    На мысль навели попытки с помощью инструментов разработчика браузера посмотреть как происходит работа с сайтом. Там заметил, что в InviteCode, написание пароля отличается от самого пароля. Некоторые символы заменены. Замена похожа на замену слеша на «%2F», или замену русских букв в адресной строке не похожие наборы символов. По-видимому, из-за отсутствия подобной замены у меня и не происходила авторизация.

    Но проблема, что указанный файл не найден осталась. По-прежнему вместо нужных файлов закачиваются 10Кб страницы, как описывал выше.

    Reply ↓
  95. enschede

    Не знаю имеет ли это значение, но обратил внимание, что значение возвращаемое функцией «НайтиИдентификаторСессииV8» не кэшируется, а каждый раз вычисляется заново.

    Reply ↓
  96. qwinter

    (95) серьезно? Он же в модуле с повторным использованием на время сеанса? Не чаще чем раз в 20 минут должен вычисляться.

    Reply ↓
  97. enschede

    (96) Абсолютно. Насколько я понимаю, каждый раз когда приходит новая комбинация параметров, выполняется вычисление функции. А новая комбинация получается каждый раз, как меняется значение параметра «АдресРезурса». Задуманное это поведение или нет, я оценить не могу.

    Reply ↓
  98. gedd

    Не работает

    {ОбщийМодуль.UPD_ЗагрузкаОбновленийКлиентСервер.Модуль(81)}: Значение не является значением объектного типа (Сервер)

    Reply ↓
  99. qwinter

    (104) работает. Вопросы по не работающей конфигурации задавайте там где вы ее скачали.

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *