Универсальный реестр документов (принцип КОНСТРУКТОРА)




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

40 Comments

  1. zabaluev

    Исправь ошибку в слове «принцып», глаза режет.

    Reply
  2. Abadonna

    +(1) цыц, цыган, цыпленок, цыпочки — всего 4 слова в русском, где после «ц» пишется «ы», помню класса с третьего 😉

    P.S. Отмазка на украинский не пройдет, там тоже «принцИп» 😀

    Reply
  3. vcv

    А чем оно круче «Настраиваемого журнала документов» (unijourn.ert) с дискак ИТС? На первый взгляд только тем, что позволяет задавать условия по списку значений. А во всем остальном хуже. Может стоит доработать обработку с ИТС?

    Reply
  4. whtblck

    на первый взгляд ничё так. посмотрим…

    Reply
  5. Adoms

    да классная весчь!!! обрабатывает и табличную часть, безусловно плюс!

    Reply
  6. dobraleks

    (1), (2), исправил 😉

    (3). Открыл рекомендуемый Вами отчетик (unijourn.ert)

    Может он для кого то и более удобен, но для меня не очень. Бухгалтера они ж любят чем поменьше кнопочек нажимать, но при этом чтоб у них работало и выводило именно так как они думают и хотят.

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

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

    Для своих сделал так.

    Прошелся пообщался с каждым бухгалтером, добавил в шаблоны все что ему надо, потом кнопку «УДАЛИТЬ» заблокировал, тоесть сделал недоступной (чтоб случайно не удалили чужие настройки) и все.

    Reply
  7. vcv

    (6) Ну субъективное ощущение — это святое. Для использования простыми бухгалтерами unijourn.ert действительно обычно сложноват. Разве что 1Сник предварительно наделает для них типовых настроек.

    А достоинства не только отбора по нескольким документам. Управление столбцами (что выводится, размеры столбцов), возможность пакетной обработки выбранных документов (легко и непринужденно пишутся обработки, которые можно добавить). Впрочем, опять таки каждому своё.

    Настроить и сохранить настройки и в unijourn.ert можно.

    Я его помянул не потому, что он однозначно лучше. А потому что довольно часть люди делают что-то свое, тратя кучу трудочасов, только из-за того, что не знают штатных (диски ИТС вполне можно считать штатными) возможностей. Которые, при необходимости, зачастую можно минимальными трудозатратами заточить под себя.

    Reply
  8. dobraleks

    (7) спасиба за подсказку.

    unijourn.ert раньше в глаза не попадался, будет чуток свободного времени попробую поиграться с ним более лучше. 😉

    Reply
  9. buh356

    плюсов понаставили

    а вот чем он отличается от подлинника

    называемого seldoc.ert

    если кардинально отличается тогда ладно,

    Надо описать принцыпыальные отличия

    а то больше смахивает на плагиат

    Reply
  10. Доня

    Работает, но не эффективно

    Надо бы попроще

    Reply
  11. alreg

    прикольно, нашим бухам понравился.

    Reply
  12. dobraleks

    (9) Чем отличаеться не могу сказать, нет под рукой этого вашего seldoc.ert. Киньте в личку его, сравню..

    В самых первых строках писал.

    «»Предупреждаю сразу писалось не мной! Разрешение автора получить не удалось, поскольку где бралось уже не помниться, а в самой обработке нет данных про автора!!»»

    Reply
  13. buh356

    Но ведь вы же не с головы писали

    и интерфейс один в один

    это с чего а?

    Reply
  14. vcv

    (13)

    Во-первых, читать умеем? Вам же уже несколько раз сказали: «писалось не мной».

    Во-вторых, в описании обработки есть такая фраза «При вставке данного отчета в конфигурацию используется файл: «…ExtFormsseldoc.dat», если каталога «ExtForms» не существует, то файл сохраняется в каталоге базы данных.»

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

    Reply
  15. buh356

    Я не спорю, просто автор публикации попросил

    кинуть в личку оригинал вот и ответ

    соответствующий, pardon

    Reply
  16. vasilykushnir

    (15) Чёй-то не пойму:

    1. Автор темы чесно предупредил, что не его? — предупредил.

    2. Приблуда работает, данные не портит? — работает.

    3. Вопроссы?

    Кому нравится, тот качает и благодарит. Кому не нравится… Буде проходить мимо — ну так проходите, проходите…

    Reply
  17. Altair777

    Так нашелся автор?

    Reply
  18. lavso

    Потрібна штука. Качайте всі, кому треба.

    Reply
  19. dobraleks

    чтото сегодня день не подходящий.. 🙁

    автор нет не нашелся 🙂

    что вас всех так мутит авторство??

    Давайте возмем другой пример, вы нашли какую-то статью, очень толковую и полезную, взяли выложили здесь на ИС, указали копирайт первоисточника и все. Люди читают, плагодарят вас «+», за полезную и ценную информацию!!!

    Никто никогда не задавал вопросы, «А ты спросил у создателя сайта чтоб выложить на ИС»???

    Давайте не спорить друг с другом.

    (16) пост сказан прямо в десятку!!

    Reply
  20. bpv

    Нужно добавить возможность быстрого выделения/снятия всех полей в отчет(по вашему появляется иконка принтер), а то не удобно по каждому щелкать двойным щелчком.

    Reply
  21. Altair777

    (0) а как сделать по всем документам?

    Reply
  22. dobraleks

    (27) ? а зачем?

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

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

    Мне этот отчет и нравиться, что один раз сделал и забыл, добавил себе в шаблон, а потом вызываешь …

    (28) 🙂 .. по всем документам…

    можно использовать разрекламированный в посте (3) и (7) 😉

    Reply
  23. Sk0rp

    Не увидел на скринах галки: «Выводить итоги», её нет или просто не видно?

    Reply
  24. Altair777

    (30) А доделать тяжело под все? 😀

    Reply
  25. sicheva_Irina

    Я-бухгалтер. Мне понравился отчет.Спасибо!

    Reply
  26. O-Planet

    7.7 ЖИВА!

    Reply
  27. Altair777

    (34) Да куда она денется? 🙂

    Reply
  28. vasilykushnir

    (34) Подозреваю Олежа, что еще долго продержится. Вот мои жлобятся на 8-ку — видимо придется на 7-ке до пенсии кувыркатся.

    Reply
  29. Доня

    (35) 7.7 ! Она еще себя покажет !

    Reply
  30. dobraleks

    😮 мда интересно получается 738 скачивавших, а только 44-м помогло и поблагодарили.

    Reply
  31. Tatitutu

    (38) ты же сам написал что в (0)

    Предупреждаю сразу писалось не мной!

    Reply
  32. rjpy

    бооооольшущее спасибо!!!!

    Reply
  33. akvamar

    Спасибо!!! 😉

    Reply
  34. Advis78

    Очень помог.А то уж в ручную собрались выбирать, где НДС включен в стоимость материалов.

    Еще раз спасибо.

    Reply
  35. EugeneR1c

    Благодарю за обработку, т.к. еще не все перешли на 8-ку. Думаю еще не один раз скачают.

    Reply
  36. BurSer

    Спасибо, будем смотреть. Может в хозяйстве пригодиться.

    Reply
  37. BurSer

    Забыл добавить : пользуюсь этим отчётом с давних времен, ОЧЕНЬ полезная вещь : оформление вообще супер !

    Для простого менеджера незаменима. Не надо программёров просить создать какой-либо отчёт по продажам — всё здесь. Если чего нет — универсальный реестр документов + стандартные отчёты + ексель в помощь.

    Всем рекомендую !!!

    Reply
  38. илюшкина

    Спасибо. очень помогает в работе простому бухгалтеру.

    Reply
  39. m-xolding

    Большое спасибо! Очень удобная форма!

    Reply
  40. m-xolding

    Ещё раз большое спасибо автору! Можно сказать единственная программа «на все случаи жизни» в бухгалтерии! Универсальная программа! Я, бывший программист, а в настоящем-главный бухгалтер, пользуюсь постоянно. Поставила в меню для бухгалтеров, без проблем пользуются. Можно найти всю подробную информацию по контрагенту: какие выставлены счета и на какую номенклатуры, в 1С вы этого не найдете. У нас, и бухгалтер и менеджер-в одном лице. Для них-это «палочка-выручалочка». Спасибо!

    Reply

Leave a Comment

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