Как я реализовал проект перехода на 8.1 часть 1 (Простейший переход)




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

23 Comments

  1. spel

    Посоветуйте от чего отталкнуться:

    ТиС 7.7 ред. 8.7 релиз 877 (переписанная наглухо=)) ->

    -> УТ 8.1 ред. 10.3 =)

    PS За статейку спасибо, в мемориз схавал=)

    Reply
  2. ZZZ

    1 смортя что переписанно, если данные не затронуты, т.е. если бы была типовой то также бы данные работали или нет, если также то просто обнови до типовой и и воспользуйся стандартной обработкой перехода на УТ 8.1 в сервисе 7.7

    2. если всё же у тебя всё действительно наглухо перемалёвано, то установи УТ 8.1 настрой параметры учёта и перенеси обработками справочники из 7.7 в 8.1 посредством екселя ( могу тебе скинуть обработку) и всё на этом твоя работа по переходу в принципе закончена, а теперь гл. бух твой пусть всё просмотрит и данные занесёт документами «Ввод остатков…»…

    3. Сеть и писать обработку переноса данных исходя из дописок твоей 7.7, а лучше исходя из дописок 77 переписать типовую обработку перехода на УТ которая в СЕРВИСе 77

    4. за это дело могу взяться я за чуть-чуть копеек))

    Reply
  3. Just

    А что разве просто конвертировать УТ80 в 81 было бы не проще, чем пользоваться КД? , тем более сильно сомневаюсь,

    что созданные автоматом правила переноса могли достаточно корректно и тчно перенести данные из 80 в 81.

    Reply
  4. starkv

    Если не секрет скоко тугриков выручил, а то вроде наклевыввается похожее?

    Reply
  5. stilet

    Есть маленький ньанс. Я тоже занимаюсь переносом Бух 7.7 на 8ку. Стандартным переносом переносятся только остатки на определенную дату, а так как сегодня май на дворе, то мне придется переносить все документы с 01.01.2008 на 25.05.2008.

    Вопрос — ты что только остатки перенес из 7.7? А как они тогда будут отчетность будут сдавать?

    Reply
  6. ZZZ

    StarkV — в моём городе выручил 20 000 руб))

    stilet — посмотри лучше там не только остаткамивыгрузка идёт, но и оборотами и аналитика по всем движениям видна только она в Операциях…

    Reply
  7. igopher

    ZZZ торговля 8.7 не обновляется по последней типовой — это разные редакции, при переходе в свое время нужно было делать перенос данных.

    Reply
  8. ZZZ

    igopher — ты явно не понял что я сделал, я не ОБНОВЛЯЛ, а базу заменял посредством ЗАГРУЗКИ КОНФИГУРАЦИИ ИЗ ФАЙЛА

    Reply
  9. igopher

    ZZZ ты явно не понял, что я напесал 🙂

    торговля 8.7 — это конфигурация на 7.7, моё замечание было к п.1 сообщения №2 в этой ветке.

    Reply
  10. ZZZ

    igopher — не смеши)) возьми MD типовой 8.7 и замени им MD в переписанной и далее иди в сервис)))

    Reply
  11. stilet

    А ты не мог бы мне релиз управления торговлей старый прислать? А то у меня клиенты на 8.10.1.7 релизе Управления Торговлей сидят. И конечно надо выгружать в 10.2 переносом данных.

    Reply
  12. eagle

    Может подскажешь свои соображения по ведению внебюджетной сметы и предельным объемам финансирования??

    Reply
  13. Alav

    Поставил бы минус. Сейчас объясню за что.

    УТ не работаю, поэтому тут без комментарий, а вот про БП….

    В БП 8.1 в отличии от Бух. 7.7 разделены договора на: с покупателем, поставщиком , прочие. При переносе куда он отнесет все договора? Правильный ответ на прочие. Т.е. в документах вы этот договор не будете видить (стоит отбор). ОСВ покажет, что все нормально, но работать с такой конфой — затруднительно. И не дай бог вы вздумаете загрузить из нескольких 7-ныйх баз в одну. Это еще то шоу 🙂

    Еще одни большие грабли. — Это партионный учет, а точнее его отсутствия в 7-ке. Для учета НДС в 8-ке есть регистр НДС по партиям запаса, из которого берется информация, в случае когда нужно восстановить НДС по товару, или включить его в стоимость. При переносе остатков этот регистр не заполняется => в первое время эксплуатации будет постоянно писать («для целей учета НДС не распределилась по партиям) => некорректно будут формироваться данные при перемещении товара м/у оптом и ЕНВД.

    Вобщем за один день эти грабли не вылезут и всякие оборотки будут показывать, что данные совпадает, но проблема в том, что 8-ка для свой работы опираться не на данные БУ, а на регистры накопления. А сравнения этих данных в теме к сожалению не раскрыто

    Reply
  14. ZZZ

    Alav — изучи нормально ТИПОВЫЕ средства перехода с 77 на 8, ещё раз повторяюсь, я переносил ОСТАТКИ С ОБОРОТАМИ и у меня ни сейчас ни вначале никакие грабли не вылезают, ты вообще пробовал типовые средствами перенос сделать, если бы ты пробовал, то увидел бы что при переносе идёт отбор данных заносимых, т.е. изначально видна аналитика по ОРГАНИЗАЦИЯМ, а также корректно настраивается для каждой организации партионный учёт, также и про НДС, который корректно себя ведёт и не вызывает никаких ошибок…

    Короче…прежде чем такое писать изучите ТИПОВЫЕ КОНФИГУРАЦИИ и ИХ СРЕДСТВА ПЕРЕХОДА…

    у клиента главБух взяв БП после переноса, проверила её и немного поправив осталась довольной и через 2 дня после переноса стала работать на БП 8, не маловажный факт что они мне отдали ещё один заказ на проект…

    Reply
  15. Alav

    Переход был еще на 1.5. Выбирая м/у типовом переходом и самописным

    Reply
  16. Alav

    выбрали типовой. О чем в последствии пожалели.

    Reply
  17. Alav

    Зачастую клиент сам не знает возможности типовой 8-ки, и какие сведения необходимы для корректной работы программы, в нем еще очень долго будут сидеть «принципы 7-ки». Тем более многие привыкли, что любые косяки они могут закрыть в конце периода операциями и жить спокойно. Это 8-ка делать очень не желательно.

    8-ка это совершенно другая программа, с другим подходом в работе. Поэтому все эти переходы за полчаса – это переходы для галочки. Самое сложное объяснить бухгалтерам логику работы программы, что можно теперь делать, а что нельзя. Куда смотреть надо, когда данные не сходятся, а где смотреть бесполезно.

    Теперь по теме. Открыл правила обмена. Выгрузки документа «Ввод начальных остатков НДС по партиям» НЕТ, поэтому если у фирмы ОПТ+ЕНВД будет косяк в учете, когда они будут перемещать товар м/у складами.

    Смотрим дальше.

    Да они молодцы. В зависимости от счета учета определяют вид договора «С поставщиком», «С покупателем». НО при загрузке договора они НЕ ищут по виду, а ТОЛЬКО по наименованию, организации, владельцу и родителю. Следовательно:

    Вывод первый. Если по договору нет остатков, значит, вид его будет прочий.

    Вывод второй. Так как в 7-ке зачастую используется один договор на все случаи жизни (с поставщиком, с покупателем), то в нашем случае будет как в пословице «Кто первый встал того и тапки», т.е. кого последним будут выгружать, тот вид и будет.

    Дальше не смотрел, и так понятно, что за 2 года (переносил данные в 2005 году из кучи баз в одну БП), ничего не изменилось.

    Вывод. Типовые правила переноса есть, но это ШАБЛОН, который не избавляет от использования напильника. И если у вас все перенеслось, гладко и без ошибок, это не заслуга 1С, а ваш недостаток, что вы не знаете типовые и не видите ошибки/последствия переноса. Или у вас ларек, который на ЕНВД и у которого 1 поставщик и 3 товара.

    Reply
  18. mdzen

    Цитата:

    (17)Зачастую клиент сам не знает возможности типовой 8-ки, и какие сведения необходимы для корректной работы программы, в нем еще очень долго будут сидеть «принципы 7-ки». Тем более многие привыкли, что любые косяки они могут закрыть в конце периода операциями и жить спокойно. Это 8-ка делать очень не желательно.

    8-ка это совершенно другая программа, с другим подходом в работе. Поэтому все эти переходы за полчаса – это переходы для галочки. Самое сложное объяснить бухгалтерам логику работы программы, что можно теперь делать, а что нельзя. Куда смотреть надо, когда данные не сходятся, а где смотреть бесполезно.

    Согласен на 100%. После переходов с 7 на 8 (в основном это Бухгалтерия и УТ) юзеры еще месяц-два упорно пытаются работать «как у нас в 7-ке было», пока до них наконец-то не дойдет что «8-ка это совершенно другая программа»…

    Reply
  19. honor

    Подскажите где взять обработки для перехода с 8.0 на 8.1 вернее для переноса данных (спр, документы)?

    Reply
  20. tango

    (20) входит в состав дистрибутива КД, на каждом итсе

    Reply
  21. lalex23

    Вопрос в сабж: клиенту довлетворён по#ереными дописками УТ?

    Комментарий про переход с ТиС 8.7 на УТ 10.3: типового переноса нет, надо или КД задействовать, я бы взялся только за справочники и максимум — остатки, потому как там упр и фин учёт могут расплываться.

    Reply
  22. Vell1974

    есть 77 притом старая есть 81 я про склад и УТ есть справочники — важное номенклатура цены приход и все… нужно перевести т.е. обработки для тех кто никак и сроки ночь. 15000 наим использ 300? но нужны все, 1 поставщик.

    Че стоит такая обработка и мыло плиз там спишемся

    Reply
  23. Mr.Doors

    HELP! Другая проблема. Не могу обновить Бухгалтерию и ЗП 8.1 на новые релизы, постоянно вылетает ошибка и базы не грузятся. Хотя конфа не менялась. Думаю перетащить справочники и документы из них в самый последний релиз. Это реально? И чем? Заранее спасибо

    Reply

Leave a Comment

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