Бухгалтерская "Крыжилка" — самый полезный инструмент Бухгалтера!




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

33 Comments

  1. AntonSm

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

    Сохраняем в макет .mxl и штатной командой «Сравнить файлы» открываем оба файла.

    Если все-таки такой команды в меню файл нет, то можно скачать бесплатную 1С: Работа с файлами.

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

    Reply
  2. user800782

    (1)Антон, Здравствуйте. Согласны с Вами, что можно и в excel сделать и другими способами, а можно и «крыжи» на бумаге ставить) Данная обработка упрощает и ускоряет процесс — для этого и существует автоматизация! Оставьте , пожалуйста, у нас заявку на сайте и мы пришлём Вам нашу обработку «Крыжилка» — сможете сами протестить!

    Reply
  3. Totoro

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

    Reply
  4. nomadon

    Раз пошла такая пьянка — режь последний огурец.

    Комментарии к публикациям. Кратчайшие сроки

    Хайпонул;)

    Reply
  5. AlexGroovy

    Этими отзывами они сделали себе только сильную антирекламу…

    Reply
  6. user800782

    (6) (7) (8)

    Всем Добрый день. А что плохого в том, что мы просим наших пользователей (например, даже не с инфостара) приходить сюда и писать отзывы, если они нам устно выразили благодарность?

    Скачайте сами и попробуйте — это же бесплатно)

    И напишите свой отзыв……

    Reply
  7. user800782

    (7)

    Здравствуйте. Будем рады видеть Вас среди наших пользователей! И получить от Вас отзыв)

    Reply
  8. user800782

    (8) Здравствуйте. Можем прислать Вам лично на почту обработку «Крыжилка» и получить от Вас отзыв! Даже антирекламный, но справедливый)

    Reply
  9. nickperel

    Актуальность делается обменом, а не сверками.

    И он, обмен, есть в каждой типовой. Фундаментальный механизм 1с.

    Что вы собираетесь делать вручную и зачем?

    Заход с юзерами защитан, тут ещё так не пробовали.

    Reply
  10. webester

    (9)

    А что плохого в том, что мы просим наших пользователей (например, даже не с инфостара) приходить сюда и писать отзывы, если они нам устно выразили благодарность?

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

    Reply
  11. user800782

    (12)

    Актуальность делается обменом, а не сверками.

    И он, обмен, есть в каждой типовой. Фундаментальный механизм 1с.

    Что вы собираетесь делать вручную и зачем?

    Заход с юзерами защитан, тут ещё так не пробовали.

    Здравствуйте. По многолетнему опыту выявлено, что после обмена данные могут расходиться по нескольким причинам:

    1. исправления данных «задним числом»,

    2. технические ошибки баз данных,

    3. перенос не всех данных и т.д.

    Поэтому к нам неоднократно обращались бухгалтера с просьбой написать обработку по автоматическому сравнению данных и выявлению расхождений. Так и появилась наша Бухгалтерская «Крыжилка»

    Reply
  12. nickperel

    (14)

    1. исправления данных «задним числом»,

    2. технические ошибки баз данных,

    3. перенос не всех данных и т.д.

    Вот какой у вас «многолетний» опыт.

    Интересно, 1с в курсе что у них оказывается много лет не все переноситься..

    Особенно, «задним» числом 🙂

    «злоупотребление доверием» у 159ой УК РФ подходит или нет? Как думаете?

    Займитесь лучше распространением акций Илона Маска, он вне юрисдиксции РФ и тут есть много в него верующих.

    Reply
  13. Bassgood

    (12) А каким образом Вы еще сможете понять все ли у вас перенеслось как положено из одной базы в другую как не сверкой различных чисел между ними?

    И почему Вы рассматриваете только типовые конфигурации (в которых собственно могут модифицироваться правила обмена)?

    Reply
  14. nickperel

    (16)

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

    акции, Алексей, лучше. 1с — скучно.

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

    Читали про билеты на ракеты?

    Reply
  15. Bassgood

    (17)

    крыжить вашей штукой 1сные базы во время обмена

    Эта штука не моя, я к ее разработке отношения не имею.

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

    Какой именно способ предлагаете Вы использовать, чтобы дать ответ на вопрос полноты (корректности) переноса набора данных из одной базы-источника в другую базу-приемник?

    Читали про билеты на ракеты?

    Причем здесь вообще ракеты?

    Reply
  16. nickperel

    «Просто не хочется, чтобы ИС превращался в хранилище велосипедов»

    Кто же это написал?

    Просто «крыжить» данные послепередсзадисбоку обмена 1С софтом о котором вы не имеете никакого представления, это хуже по деньгам чем участвовать в затеях Илона Маска с ракетами.

    К тому же весело, что вы форсите эту лажу не имея представления как работает обмен данными у 1С и почему он именно такой. Например, он такой чтобы не надо ничего «крыжить».

    Но в целом смешно получается.

    Reply
  17. Bassgood

    (19) Эта софтина предлагается за 1 СМ, если это считать деньгами, то да, есть риск неправильного вложения денег 😉

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

    Просветите меня как же именно работает обмен данными у 1С? При этом что конкретно Вы подразумеваете под 1С, я так и не понял (платформу, конфигурацию, механизм).

    p.s. И откуда Вы можете знать о чем я имею представление, а о чем нет — Вы меня собеседовали или принимали экзамен?

    Reply
  18. nickperel
    Просветите меня как же именно работает обмен данными у 1С?

    И это после «15 лет работы», про которые говорит КейСофт на своей страничке.

    Эта софтина предлагается за 1 СМ

    Предлагается сесть на мелкую бессрочную абонентку, судя по странице сайта.

    Вы можете знать о чем я имею представление

    Это кто писал: «каким образом Вы еще сможете понять все ли у вас перенеслось как положено из одной базы в другую как не сверкой различных чисел между ними»

    «Эта штука не моя, я к ее разработке отношения не имею»

    Мне вот понятно к чему вы имеете отношение и это не обмены какими-то там данными.

    FOFF

    Reply
  19. Bassgood

    (21)

    И это после «15 лет работы», про которые говорит КейСофт

    Я никакого отношения к «КейСофт» не имею и не работаю в этой компании, я задал Вам вопрос лично от себя, а не от имени «КейСофт», можете просто обстрагироваться от него и ответить конкретикой на мой вопрос, а не расплывчатыми фразами?

    Так как же все таки работают обмены 1С, раскроете секрет? Есть что сказать по существу моего вопроса, а не отписываться фразами типа «это все делается по-другому, но как я не скажу»?

    Reply
  20. nickperel

    (22)я вам ничего не должен, и что вы там не понимаете мне не интересно.

    Задайте вопрос про неактуальность данных после обмена в партнёрской конференции вендора, узнаете много нового старого.

    FOFF

    Reply
  21. Bassgood

    (23) БОльшего я и не ожидал, если Вам сказать от себя больше нечего, то считаю, что беседу можно считать завершенной.

    Reply
  22. oldcopy

    (6) И аккаунты разработчика — user800782 и «воссторженных» клиентов — user834540, user835126, user835348 сильно смахивают на авторегистрации, потому как нормальный человек, который регистрируется на сайте осознанно, при первом входе сменит стандартный ник userxxxxxx на что нибудь осмысленное.

    Ну да ладно, сам по себе такой ник не криминал, но когда все они всплывают в одной теме и все, как под копирку, выражают щенячий восторг — ну «не верю!» и все тут.

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

    Reply
  23. oldcopy

    (14) По «многолетнему опыту» могу сказать, что единственное применение «крыжилке» я вижу только тогда, когда «неожиданно» поплыли обороты и надо быстро выяснить «кто это сделал». Тогда быстро сравнивается два отчета из текущей базы и правильного бекапа, но это прекрасно делается штатным сравнением файлов.

    А вот после этого обязательно следуют «оргвыводы» и второй раз потребность в «крыжилке» обычно не возникает. Потому как такая ситуация — это прямое следствие криворукости бухгалтеров, которые пытаются подгонять задачу под ответ исправлениями задним числом и т.п. «хитрыми» методами.

    Reply
  24. toss

    А есть ли описание, на чем основан механизм обработки? Порядок действий и т.п. Видео абсолютно неинформативно.

    Скачал. Запустил. Законнектил базы. Спрашивает правила обмена. Базы нетиповые. Что дальше?

    Сам лично использую стандартное сравнение файлов.

    Reply
  25. Vovanches

    УТ 11.1, платформа 8.3.9: крыжилка не запускается.

    Reply
  26. user626980_behappy2503

    (25) а я при регистрации «промахнулась» с ником(( жутко обидно. Я так понимаю, что исправить уже низзя, да? Вопрос, скорее, риторический 🙂

    а про брезгливую усмешку понравилось — в точку!

    Reply
  27. user800782

    (28)

    УТ 11.1, платформа 8.3.9: крыжилка не запускается.

    Здравствуйте. Написал Вам в личку.

    Reply
  28. agent00mouse

    (29)Можно, попроси этих поддержку. Мне помогли.

    Reply
  29. user800782

    (29)Ирина, Здравствуйте. Написал Вам в личку

    Reply
  30. Olenevod

    Похоже на бесконечную отнималку денег, судя по одному из скриншотов. Интересно какова стоимость 10 запросов? Она может меняться со временем?

    Reply
  31. user800782

    (33)Здравствуйте. По оплате ситуация будет следующая: от 300 до 500 р./месяц абонентская плата в зависимости от периода оплаты. Это включает в себя сверку 2-х баз по всем существующим на данный момент правилам в нашей обработки. Так же правила постоянно обновляются по потребностям пользователей.

    Reply
  32. user800782

    (34)Так же количество запросов в рамках выбранных двух баз не ограничено.

    Reply
  33. SteshaSt

    (3)А как так получилось, что опыт бухгалтерский есть, а опыта пользовательского нет? Вы на счетах раньше считали?

    Reply

Leave a Comment

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