Рабочее место администрирования партий и документов. Версия 2.3.2




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

25 Comments

  1. Шёпот теней
    Reply
  2. anig99

    Попробуй глобальный поиск этой процедуры. У меня они в общих модулях РаботаСДиалогами с пометкой Экспорт. Если это так, то попробуй перед названием функции добавь «РаботаСДиалогами.» без кавычек

    Reply
  3. anig99

    Точнее все эти процедуры разбросаны по общим модулям разным.

    Reply
  4. CheBurator

    мдя… лучше бы последовательно вели работу по постановке учета и выяснению причин «в пределах нескольких месяцев»…

    Reply
  5. CheBurator

    как правило — такие проблемы характерны для тех организаций — где бухам/управленцам «наплевать» на учет как таковой…

    Reply
  6. AXoxol

    (4,5) а что мешает вести борьбу и параллельно устранять последствия работы «наплевальщиков» аналогичными обработками?

    Reply
  7. AXoxol

    (1) та же фигня…

    Reply
  8. CheBurator

    потому что я не сторонник закинуть на 8-ой этаж 3 тонны кирпича, а через два дня спускать его обратно… лучше усилия по закидке кирпича на 8 этаж направить на более полезную работу.. ИМХО!!!

    Reply
  9. anig99

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

    Reply
  10. Шёпот теней

    (8) … мне иногда кажется, господин ЧЕ, что Вы не из нашей жизни… или не работаете на предприятии — где, как правило, ГлавБух определеяет всю работу программиста 1С и только он знает что хорошо и что плохо и «как» надо вести учёт не взирая на всю методологию 1С … либо вас так Уважают, что ваше слово является последним… и на ваших предприятиях, вами обслуживаемых, не проводят по 50..100 раз документы причем раз 20-30 в закрытых периодах и т.д. и т.п…. и ваше образное сравнение с кирпичами, можно не только поддержать но и усилить не стесняясь…

    (9) поддерживаю… заняты тем же самым — по самые уши…

    П.С. любая система определяет свое положение в существующих отношениях — лимитирующей стадией… среднее предприятие до 500 человек, средние задачи, «не понимающие» бухи, «неадекватные» 1С прогеры, общее не понимание и в итоге: «ПОСТОЯННОЕ таскание кирпичей с этажа на этаж»…

    вооот…

    Reply
  11. CheBurator

    (9) именно к и есть… аналогичным заняты…

    (10) может быть и так… главбух определяет не всю работу программиста 1С, а только касающуюся бухучета… у нас, блин, не бухучет определяет учет на предприятии, а то что «получилось» — пытаются «притянуть» к бухучету… и приходится нам работать на стыках, лавируя, изворачиваясь и протискиваясь в разные щели.. 😉 а главбуху «пофиг» что там делается «внизу», ему главное — чтоб ему меньше было бестолковой работы… только вот нигде я не видел целенаправленной и постоянной работы бухгалтерии по поставновке и налаживанию учета… вот про что речь… я не против потаскать кирпичи месяц, два.. но не год.. вот о чем речь..

    Reply
  12. Шёпот теней

    (11) как ПРАВИЛО если не угождать ГлБуху то и проработаешь недолго… может оно и правильно — бугалтерия сдаёт все «внешнии» отчёты ей и флаг в руки — она, ГлБухия, отвечает за предприятие в конечном счёте и никто с ней связываться не будет… вот и ротируются 1С-ники в городе по разным причинам по предприятиям города… а уж качество бухгалтерии определяется качеством гл.Буха уровнем оператора пользователя … так, что выбор небольшой и система уже сложилась…

    Reply
  13. strah4

    «Рабочее место администрации партий», я аж офигел, думал добрались и до политики. Может правильней администрирования?

    Reply
  14. Арчибальд

    А я в подобном случае составлением списка «косых» документов и ограничился бы. Ну, может, + список авторов последнего проведения. Конечно, часто проще самому сделать, чем объяснить. Но! имхо НЕ бухгалтер НЕ имеет права проводить документы. Даже если одинэсник у бухгалтера в подчинении.

    (12) С ГБ бодаться не надо. Надо его воспитывать. Я вот вырастил себе главбуха из собственного оператора и прекрасно себя чувствую.

    (11) Постановка и налаживание учета для бухгалтерии не является основной задачей. Вообще, если кто не помнит, организация не обязана иметь собственную бухгалтерию. Нужность бухгалтеров определяется запутанностью учета. Если работать «как надо», добрая треть бухгалтеров без работы останется.

    Reply
  15. simol

    При ордерной системе закупок хочет препроводить например авансовые отчеты по ордеру. А на самом деле Авансовый сторнирует поступление ордера.

    Настройки:

    Порицательные партии: Да

    Reply
  16. anig99

    Это щас к чему? Это хотелки к обработке, или к УПП? Сейчас как раз переделал отбор недосписаных документов с учетом ордеров. Только запрос в этом случае дольше получаться стал. Сделал ещё одну галочку.

    Reply
  17. anig99

    Кстати, как там с глючностью платформы 8.1.13.37?

    Reply
  18. anig99

    гыыы… чуть самое главное не забыл… Обновить сам файл (:

    Reply
  19. GStiv

    Изменены вызовы процедур для соответствия платформе 8.1.13.41 и конфигурации УПП 1.2.19.1

    {Форма.Форма(2170)}: Преобразование значения к типу Дата не может быть выполнено

    КонтрольнаяДата=КонецМесяца(Результат.Дата);

    Reply
  20. anig99

    А у Вас расчитана себестоимость по бух учету?

    Reply
  21. anig99

    Точнее, вообще расчитана себестоимость???

    Reply
  22. Омский Домовой

    На счет модулей — это пипец. Москали любят перекидовать процедуры и функции по разным модулям от релиза к релизу. Так что не на всяком релизе сработает.

    Reply
  23. anig99

    Ну и пофиг (: Обработка не на простого юзера нацелена, а больше на админа. Подправить имя общего модуля для вызова процедуры недолго. Да и функции общих модулей используются вроде только при автоматическом проведении по БУ и НУ учетам.

    Reply
  24. VitalyK

    Спасибо, пригодилось.

    Reply
  25. Alex1Cnic

    Что-то не нашел новой публикации: по ссылке «более новая публикация http://infostart.ru/profile/15144/public/?PAGEN_1=3»

    А так кончно неплохая фишка

    Reply

Leave a Comment

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