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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2024-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 не будет опубликован. Обязательные поля помечены *