[Обмен Данными] Правила обмена между 1С:Бухгалтерия Предприятия 3.0 (3.0.48.19, 3.0.52.40, 3.0.61.47, 3.0.64.54, 3.0.66.70, 3.0.67.54, 3.0.68.61, 3.0.71.89, 3.0.74.63) для переноса в другую базу БП 3.0
1C-admin
15.12.2019
Принцип обмена данными из 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='\
Доброго дня! Для 3.0.54.20 правила можно настроить?
(1)
Добрый день. Можно, вы по этим пробовали? ошибки были?
да на 54.20 были ошибки
Нужно всеми видами документов обмениваться или нет? Типового обмена недостаточно?
(4)Можно не всеми,
(4)
А это какой типовой?
(5) Если разовый обмен, то обработкой выгрузка загрузка enterprisedata — есть в БП.
Если регулярный, настроить обмен через универсальный формат — Другая программа.
(6)каждая задача имеет свое решение, ваше решение не подходит. если надо сравнивать Контрагентов по ИНН,КПП, предусмотреть поиск договоров, предопределенных значений и т.д. Придется также править правила обмена.
Тут решается перенос из одной базы в другую документов по организации, + справочники, которые в этих документах.
Как вы будете переносить регламентные операции, ручные операции через enterprisedata ? По моему ваш комментарий «только ради комментария»
Правила через КД2.0 имеют недостаток, описанный в комментарии [1], что если изменены метаданные после обновления, могут быть ошибки, тогда тоже надо править. остается только основа.
Я пробовал разные обработки, на больших объемах самые стабильные оказалось делать через КД 2.0.
(7) Это не моё решение. Это функционал 1С. ))
Выше было моё предложение. Ну не подходит если нужны такие условия и ладно. Пусть будет КД2.
Просто в заголовке указано 3.0.48.19 — это более полугода назад. Текущая версия 3.0.54.20. Поэтому нужно как-то решать вопрос с обменом. ))
(8)
Версию обновили.
(1)Правила обновили
(9) Только почему-то 52.40, а сейчас на дворе 55.16. 😉
(11)Замечу, что ED так же старых форматов перестал поддерживаться в новой БП 3.0, хотя обещали что такого не будет и форматы будут подерживаться 😉
А правила на новую 55.16 могут не отличаться. Проверим, если будут то пару реквизитов не проблема обновить
При выгрузке данных, выбрана только Документы.Операциябух выдает:
Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7796)}: Поле объекта не обнаружено (НаборыЗначенийДоступа)
Подскажите, пожалуйста, куда копать?
конфа и обработка для 3.0.54.20
(13)Исправил. Если самим в блокноте переименовать надо в УдалитьНаборыЗначенийДоступа или просто удалить блок с табличной частью НаборыЗначенийДоступа
Вопрос снят
(15)оперативно)
(12) С последней БП 3.0 работает по-прежнему.
А где обработка обмена — в комплекте нет …
(18)Наверное: Все функции->Обработки->Универсальный обмен данными в формате XML
(18)
вот, ихз комлпекта ее пришлось убрать по правилам infostart
Можно доработать правила для версии 3.0.60.50.
На текущих правилах возникают ошибки.
(21)можно, пишите в л/с. У вас стандартные виды субконта и аналитика на счетах?
Добрый день!
А можете для БП 3.0.64.54 доработать? Готов Вас даже проспонсировать немного…) Просто срочно нужно… Или подскажите коротенько как самому поправить: я так понимаю в Конвертации вер 2. их надо править?
(23) Если владеете КД 2.1, то нужно через обработку MD83Exp выгрузить метаданные конфигураций, обновить элементы справочника «Конфигурации» в КД 2.1, после этого донастроить правила. Там часть объектов получило приставку «удалить», и появились новые объекты по ЕГАИС и ВЕТИС.
(23) Так то в 24 сообщение все правильно написали, у вас какая ошибка? может я так подравлю и вам пришлю?
Правила обмена между 1С:Бухгалтерия Предприятия 3.0 (3.0.67.54)
Правила обмена между 1С:Бухгалтерия Предприятия 3.0 (3.0.71.89)
Правила обмена между 1С:Бухгалтерия Предприятия 3.0 (3.0.74.63