1С:Предприятие Бухгалтерия переход с редакции 2.0 на 3.0. Практика перевода информационной базы для работы в управляемом приложении.




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

35 Comments

  1. Alister

    Первый коммент 🙂

    Спасибо автору, получил клиента на 3.0, у которого нет даже завалящего материального отчета, а мой в УФ не работает конечно, вот эта статья помогла пока выкрутиться.

    Reply
  2. krenefff

    НЕ представляю что делать — конфы все нетиповые у клиентов. Визгу будет. Сижу уже сейчас в поте лица и готовлю 3.0.

    Лишь бы не появилась какой -нибудь 3.1

    Reply
  3. in_nochka

    спасибо, теперь не так страшно. Клиенты все равно будут в шоке.

    Reply
  4. WildFire

    А что делать с доп. печатными формами? То же самое, что и с обработками? Но как их тогда подключать?

    Reply
  5. WildFire

    Ни у кого не вылезала следующая ошибка:

    {ОбщийМодуль.ОбменСообщениямиВнутренний.Модуль(424)}: Ошибка при вызове метода контекста (ПолучитьОбъект)

    ЭтаКонечнаяТочка = ЭтотУзел().ПолучитьОбъект();

    ?

    Reply
  6. Kosstikk

    (5) WildFire, была такая ошибка, добавлял попытку/исключение. Не помню причину, но ЭтотУзел() возвращал Неопределено.

    //2013-07-16 НАЧАЛО

    Попытка

    //2013-07-16 КОНЕЦ

    Если ПустаяСтрока(КодЭтогоУзла()) Тогда

    ЭтаКонечнаяТочка = ЭтотУзел().ПолучитьОбъект();

    ЭтаКонечнаяТочка.Код = Строка(Новый УникальныйИдентификатор());

    ЭтаКонечнаяТочка.Записать();

    КонецЕсли;

    //2013-07-16 НАЧАЛО

    Исключение

    КонецПопытки;

    //2013-07-16 КОНЕЦ

    Reply
  7. WildFire

    Я кстати сделал то же самое, только еще добавил «Сообщить» в исключения, чтобы посмотреть, что там за фигня такая вылезает. Так вот, в строке сообщений не было ничего, даже самой панели сообщений не вылезло! 8-О то ли эта строка в УФ выглядит как-то иначе, то ли я чего-то не понимаю.

    Reply
  8. Bukaska

    (2) krenefff, Скоро появится,, токо для платформы 8.3, а не 8.2))) Но пока последнее не стоит на него кидаться))) Иначе все бетаТестерами будем)

    Reply
  9. Lejlka

    (8) Bukaska, Хотелось бы по-подробнее узнать про 3.1, где можно найти такую информация? А то может пока что не стоит сильно доработанные 2.0 на 3.0 переводить?

    Reply
  10. Bukaska

    (9) Lejlka, Дело в том, что если переводить на бух3.1, то и платформу ставить 8.3

    Так что всё равно пока что на 2.0 или 3.0 придётся сидеть.. мы так всех будем переводить на треху.. у кого платформы 8.2 стоят)))

    Reply
  11. ekaterinaeon

    (9) Lejlka, бух 3.1? 😀 это не та ли что дурманила мозги прогерам лет так 14 назад? http://1c.ru/news/info.jsp?id=528

    где вообще такая инфа появилась про новую бух 3.1?

    Reply
  12. danil157

    Добрый День! Не нашел информации по этому пункту в интернете. Ткните носом плиз.

    5. Дополнительные отчеты/обработки.

    Необходимо переделать для работы в управляемом приложении (примеры на инфостарте).

    Reply
  13. Bukaska

    (9) Lejlka, Думаю можно ещё подождать.. Тем более что 2.0 оставили поддержку.

    зачем двойная нагрузка клиенту, сначала с 2.0 на 3.0, А ПОТОМ С 3.0 НА 3.1.. По сути и 3.0 недолго проживет.. в середине года 3.1 должна выйти.. она пока что ещё наверняка бетка.. доступная токо для партнеров.

    ЗУП 3.х я уже видала.. бух 3.1 — пока что нет, но знаю что будет)))

    Reply
  14. borodatii

    (13) Bukaska, скорее уж 4.0, чем 3.1 =)

    Reply
  15. webresurs

    Из-за чего может возникать такой глюк см фото?

    Reply
  16. Maxion123

    (15) webresurs, возможно из-за разрешения экрана…

    Reply
  17. Kosstikk

    (15) webresurs, размер текста и элементов в системе увеличен. В windows 7 эта настройка делается тут:

    Reply
  18. webresurs

    (17) по умолчанию 100%

    Reply
  19. asg1975

    (13) Bukaska, подскажите где подтвердить инфу о том, что поддержку 2.0 оставили?

    Reply
  20. Bukaska
  21. Skotarev

    (12) danil157, http://infostart.ru/public/76427/ всё делается по аналогии.

    Reply
  22. Skotarev

    сори, дубль

    Reply
  23. magolubev

    Даже страшно думать, как будем переходить на БП3. Много доработанных внешних форм, которые необходимо переделывать для УФ, некоторые изменения типового функционала…

    Reply
  24. xten

    Подскажите, пожалуйста, у Вас в статье написано, как я понял, что при переходе с версии 2 на 3 , если БП 3 запускать в режиме Толстого клиента, то все обработки и отчеты из БП 2 сохранятся, кроме внешних. А если все внешние отчеты и обработки поместить непосредственно через Конфигуратор в ветвь метаданных, то из БП 3 через меню можно будет их открыть? Спасибо

    Reply
  25. bahcha8

    Спасибо огромное, очень подробно описаны многие проблемы. Интересно было-бы узнать подводные камни при настройке обмена УТ10,3 — БП30. Правила конвертации и регистрации существуют, но наверняка необходимы определенные настройки.

    Reply
  26. lesenoklenok

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

    Reply
  27. WEBBY

    В нашей организации РИБ и куча внешних обработок, поэтому переход мне снится в кошмарах. Пробовала на тестовой, итог -все обработки переделывать…..

    Reply
  28. elian

    И ни у кого не возникло ошибки «Неразрешимые ссылки» при обновлении?

    Reply
  29. Bukaska

    (28) elian, Ну дай бог одно предупреждение.. и усё

    Reply
  30. Bukaska

    (27) WEBBY, Конечно есть разница.. обычное приложение или управляемое приложение.. по любому переделывать)))

    Reply
  31. Alex_E

    (25) bahcha8, Самая главная проблема это, если уже был настроен обмен с БП 2.0, обеспечить синхронизацию справочников и документов при обмене. Для обмена с 3.0 в УТ 10.3 и БП 3.0 используется другой регистр соответствия объектов при обмене, и он будет пустым 🙁

    Reply
  32. 1Service2

    Кстати, с 01.01.15 1С прекращает поддержку «1С:Бухгалтерии» версии 2.0.

    Помогаем решить вопрос перевода с 2.0 на 3.0 с любой степенью доработки имеющейся у Вас конфигурации — http://www.1service.ru/news/perehod-buhgalterija-2_0-3_0.php

    Reply
  33. Alex_E

    (32) 1Service2,

    Кстати, с 01.01.15 1С прекращает поддержку «1С:Бухгалтерии» версии 2.0.

    — устарело…

    Reply
  34. 1Service2

    (33) Alex_E, ещё не поздно — http://www.1c.ru/news/info.jsp?id=17400

    Reply
  35. Alex_E

    (35) 1Service2, Не понял? Что не поздно?

    Reply

Leave a Comment

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