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




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

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 не будет опубликован. Обязательные поля помечены *