ДОРАБОТАННАЯ конвертация обработок и ВНЕШНИХ ОТЧЕТОВ из 8.1 в 8.2




Принцип обмена данными из 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='\

30 Comments

  1. luns
    Не остается ни кодов, ни форм

    может просто расширение меняется с скажем .erf на .epf?

    Или наоборот. Так можно и руками сделать.

    Берем любой внешний отчет меняем расширение. Он работать будет, но в конфигураторе не будет видно ни форм ни кода.

    И просьба убрать комментарий про 1с — слишком много экспрессии. 😉

    Reply
  2. vladismi

    Помнится на диске ИТС была обработка КонвертацияВнешнихОбработок.epf. Она кривая?

    Reply
  3. kote

    (1) расширение не меняется, его кривой код написанный в 1С меняет — оно ВСЕ что есть в справочнике ВнешниеОбработки сохраняет с расширением .epf

    re: Берем любой внешний отчет меняем расширение. Он работать будет, но в конфигураторе не будет видно ни форм ни кода.

    ===

    У меня, на версии платформы 8.2.12.92, оно не работает (может потому, что после конвертации).

    Reply
  4. kote

    (2) У нас в саму конфигурацию встроена обработка Конвертиция внешних обработок 8.2.. на ИТС даже не смотрел. Но конфигурация обновляется почти каждый месяц — запарились уже.. по моему разумению, она тоже должна быть свежей (последнее обновление в конце прошлого месяца делал)

    Reply
  5. AlexO

    А зачем обработка эта нужна — чтобы сохранился код во внешних отчетах при переходе из 8.1 в 8.2?

    Reply
  6. kote

    (5) Да.

    Reply
  7. Winston Kent

    (6) Я сначала долго парился с этими конвертациями, внешние отчеты тоже умирали напрочь после стандартной конвертации как рекомендует делать 1С (кстати, у них косяк — если админская учетка с паролем обработка виснет напроч, если пароль админа временно убрать — запускается и конвертирует), но потом сделал следующее — в конфигураторе просто открыл внешнюю обработку, конфигуратор спросил «Конвертировать?», я ему ответил «да, фигли…». И все! Наступило чудо! Подключаю этот сконвертированный отчет как обычно, и он работает…

    З.Ы. Мне повезло, конвертить надо было только один внешний отчет, как сделать это быстро и для кучки отчетов не знаю, но если кому не лень и делать не много — тогда этот способ оптимальный, имхо…

    Reply
  8. sergey_mur

    Присоединяюсь к (7). Внешних отчетов у меня хватает,а типовая обработка их криво конвертирует. Опробовал предложенный вариант. Респект и уважуха разработчику, избавил от гемороя 😀 .

    Reply
  9. Alexey55

    Спасибо! очень удобная вещь!

    Reply
  10. BalanceLuga

    Нужная штука. Спасибо!

    Reply
  11. madamonika

    Очень хорошая обработка, она у меня конвертирует и отчеты из 8.0 в 8.2. Я как бухгалтер, не обладаю знаниями программиста, но с этим отчетом подружилась. 5+

    Reply
  12. bearcat

    11. madamonika, прошу подсказать, поскольку Вы «подружились» с этой обработкой. А я не такой кпродвинутый пользователь, несколько раз прочитала и ничего не поняла как нужно делать . Я попробую «перевести» аннотацию к обработке, подскажите что не так.

    1. «Восстанавливаем архив 81» — то есть попросту запускаем 1С 8.1 ?

    2. «там открываем обработку заканчивающуюся на 81» — у меня , например, в 1С 8.1 нет ни одной обработки, которая бы заканчивались на 81, расширение у них у всех.epf — видимо имелось ввиду, что открываем обработку с расширением «epf » для 8.1 ?

    3. «ВЫГРУЖАЕМ все обработки и отчеты» — ВСЕ по очереди, наверное? Т.к. если выше читаем «открываем обработку»,значит ее одну, которую открыли и выгружаем, и так с каждой последующей?

    4. «в УКАЗАННЫЙ НА ФОРМЕ КАТАЛОГ» — где указанный и в какой форме?

    А может быть автор хотел сказать, что нужно сначала загрузить его обраьотку в 8.1, там ее открыть и через указанный в ней КАТАЛОГ выгрузить все обработки из 1С 8.1?

    5. «Все выгруженные обработки/отчеты открываем в конфигураторе 82» — как именно это нужно сделать?

    6. «Открывает обработку заканчивающуюся на 82 в СООТВЕТСТВУЮЩЕй сконвертированной БД (режим пользователя) и указываем ТОТ ЖЕ КАТАЛОГ» — кто открывает? где открывает? в какой соответствующей сконвертироыванной БД ? Что специально для этого нужно еще одну базу конвертировать?

    Reply
  13. kote

    (12) Для того, что бы понимать, как использовать эту обработку, нужно, для начала, понять, как использовать стандартную обработку 1С (та, что встроена в конфигурацию — меню Сервис, если не ошибаюсь).

    Если нет понимания там — здесь тоже ничего не получится понять.

    PS Простите за мой албанский.. Объяснил, как умею

    Reply
  14. bearcat

    13, я пользуюсь обработками ИНФОСТАРТ уже года три, всегда сразу все понимала. А эту не понимаю.

    Reply
  15. Yashazz

    Солидарен с (12) на 100%

    Не обработка, а полная фигня. Сырьё, полуфабрикат. Выкладывать такое на ИС — совсем пользователей не уважать.

    Ни справки, ни защиты от ошибки, ни показа хода действий — ничего.

    bearcat совершенно права, без вдумчивого разглядывания кода понять, как этой обработкой правильно пользоваться, просто невозможно.

    Я вот запустил и получил фигню — свалку из файлов в каталоге, где лежала эта, запущенная. И после — ни конвертация не срабатывает, ни даже открыть эти файлы под 8.2 не выходит. Тупик на полдороге.

    Ладно, я-то разобрался, но что будет делать нормальный юзверь, кроме как плеваться и приглашать франчей?

    А делов-то — пройти по справочнику, выгрузить двоичные данные в файлы, запустить пакетную конвертацию, загрузить обратно; ну или просто отработать каталог. Почему, ну по-че-му нельзя было сделать эти элементарные операции по-человечески, в виде действительно достойного продукта? И почему за эту сомнительную поделку без зазрения совести принимаются плюсы, я искренне не понимаю.

    p.s. Возможно, автору неведомо, но designer — это устаревший, хотя и ещё поддерживаемый, ключ. Уж давно используется config.

    UPD: В Бухгалтерии 1.6, по крайней мере, в табличной части тоже есть ХранилищеВнешнейОбработки, про это автор вообще благополучно забыл.

    Reply
  16. konstruktiv

    Столкнулся с аналогичной проблемой, требовалось быстрое решение, и эта обработка просто спасла, с тем как ее использовать, разобрался сразу, не изучая кода, так что автору большое-пребольшое спасибо!

    Reply
  17. jeniav

    Хорошая обработка! очень помогла при переходе на 8.2

    Reply
  18. kote

    (16) Мне главное проблему решить было — просто ситуация была очень западлянская.. «прочувствовал всеми фибрами», аж проснулся от прилива адреналина, как обнаружил, что все самопальные отчеты просто перестали работать!:) Потом как то собрался и решил проблему таким вот образом.. как то не до дизайнерских изысков было, простите уж..

    Да, а почему бы Вам не доделать её — как надо, и не порадовать народ новым шедевром?? Я не против — берите и допиливайте..

    Reply
  19. bearcat

    (19) если бя могла допилить…

    Понятно, что Вы для себя сделали и решили с народом поделиться. Прошу понять меня правильно. У меня много обработок, которые я с июля 2009 года не просто тупо скачивала из Инфостарт, а вела учет какие скачала, какие нужно скачать и протестировать. И когда создала уже для 7.7 хорошую подборку, решили перейти на 8.1

    cтала заново искать аналогичные , но для 8.1

    Создала подборочку для 8.1, а тут и на 8.2 нужно переходить.

    Поэтому очень обрадовалась, когда увидела вашу обработку.

    yо я не могу понять как ею пользоваться.

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

    А вашу обработку как пользовать? Также из 1С предприятие? Или нужно открыть конфигуратор 1С 8.2, затем что? и как? Пожалуйста, набросайте миниинструкцию, очень Вас прошу.

    Reply
  20. razrazraz

    У меня была проблема с конвертацией обработок с 8.1 на 8.2.

    Я прочитал много постов на форумах — но ничего не помогло .

    А суть решения была в следующем на 8.1 можно было неявно назначить форму для обработки а в 8.2 нужно обязательно чтобы в поле форма была — определенная форма — и после создания и указания формы в КАЖДОЙ обработке они стали открываться и работать под 8.2

    Reply
  21. liliych

    Я не программист , но отчетом воспользовалась. Спасибо.

    Reply
  22. SiviS

    Подскажите, у меня есть обработка с расширение ert, чтобы открыть ее в 8.2 что нужно сделать? Данная конвертация обработок поможет или искать другую?

    Reply
  23. itit

    хотелось бы иметь такую отбработку

    Reply
  24. kote

    (23) Ваша обработка не может быть конвертирована — она для платформы 1С:7.7 предназначена. Во вторых — она написана для конфигурации на 7ке, а эти конфигурации не конвертированы, строго говоря, на 8ю платформу.. они с нуля написаны — поэтому конвертировать Вашу обработку все равно не имеет смысла.

    Reply
  25. Hantinka

    Обработка во многом была полезна, но вот самое важное (увы!) не удалось сконвертировать. Внешнюю обработку для банка-клиента никаким способом спасти не удалось. Пришлось править ручками(((

    Reply
  26. Elena87

    Я тоже не смогла конвертнуть

    Reply
  27. razrazraz

    Когда у меня была проблема с конвертацией такие обработки мне не помогли . У меня проблема была в форме разработанной под 8.1

    Reply
  28. scanner1980

    А чем не устраивает режим запуска конфигуратора:

    /ConvertFiles <имя файла|путь> — параметр пакетной конвертации файлов 1С:Предприятия 8.x.

    <имя файла|путь> — имя фала или каталога (обязательный параметр)

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

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

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

    Примеры:

    Конвертация файла:

    1cv8.exe /ConvertFilesd:/base/ExtProcessing.epf

    Конвертация каталога:

    1cv8.exe /ConvertFilesd:/base

    Показать

    Reply
  29. RUS63

    «И просьба убрать комментарий про 1с — слишком много экспрессии.» я бы сказпл жестче. Автор, убери эту фразу про 1с.

    Reply
  30. Ed111111

    Мне понравилась — спасибо большое

    Reply

Leave a Comment

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