Простой и Удобный Универсальный отчет (СКД) v 2.6




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

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

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

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

69 Comments

  1. xten

    Очень заинтересовал Ваш отчет. Скажите, пожалуйста, я правильно понимаю, что с помощью Вашего отчета можно в удобной форме выбирать нужные данные из реквизитов и табличных частей справочников, документов, регистров и по аналогии с СКД все это дело группировать, выстраивать и т.п.? Если так, то как можно задавать различные ограничения на условия, в СКД с помощью встроенного языка все это делается, а в Вашем отчете как?

    Reply ↓
  2. kser87

    (1) xten, вы все правильно понимаете, но есть пара моментов:

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

    2) Ограничения не реализованы.

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

    По поводу ограничений ничего не могу сказать т.к. не понимаю, как их в данном отчете можно использовать.

    Reply ↓
  3. xten

    Но ограничений на «хитрость» и разнообразие условий нет, так?

    Reply ↓
  4. kser87

    (3) xten, не совсем понял, что вы имеете в виду под «хитростью условий») если вы имеете в виду отбор, то он такой же, как здесь: http://infostart.ru/public/189338/ Плюс при сложной настройке СКД есть возможность задавать условия для каждой группировки.

    Reply ↓
  5. xten

    понял, спасибо

    Reply ↓
  6. xten

    Хотел еще пару моментов уточнить:

    Он только под УФ или для обычного приложения тоже?

    При формировании отчета где-нибудь генерируется код запроса?

    Есть ли возможность сохранить вариант отчета в виде внешнего отчета, никак не зависящего от данной разработки?

    Спасибо!

    Reply ↓
  7. kser87

    (6) xten, только для УФ. Для обычного уже реализовано несколько вариантов. Средствами встроенного языка 1С создать независимый внешний отчет программно невозможно. Можно сохранять схему компоновки данных и грузить ее вручную в созданный в конфигураторе отчет

    Reply ↓
  8. neurotechnic

    В УТ 3.0 для Украины работать будет же?

    Reply ↓
  9. kser87

    (8) neurotechnic, должна работать

    Reply ↓
  10. Светлый ум

    Где кнопки группировок?

    Reply ↓
  11. kser87

    (10) Светлый ум, не очень понял вопрос. Может, вы хотите знать как задавать группировки? Это можно увидеть на 37-ой секунде видео. Если я вас понял неправильно, то распишите подробнее пожалуйста

    Reply ↓
  12. elsee

    Хорош отчет, надо будет купить

    Reply ↓
  13. AlX0id

    (7)

    Для обычного уже реализовано несколько вариантов.

    Для УФ также есть вариант от 1С — в БП 3.0.

    Reply ↓
  14. kser87

    (13) AlX0id, спасибо, я в курсе, что в БП 3.0 есть «Универсальный отчет по метаданным». Функционал уже и он совсем не универсальный. Его нельзя использовать как внешний

    Reply ↓
  15. OBEH

    Странно, а я каким пользуюсь? У меня более универсальный отчет и работает с бОльшим функционалом, чем представленный тут платный экземпляр.

    Поэтому фразы, типа, «Хорош отчет, надо будет купить» не совсем понимаю. Или это пиарство, якобы, под видом благодарного пользователя?

    Reply ↓
  16. kser87

    (15) OBEH, ну продемонстрируйте свой бесплатный отчет с бОльшим функционалом.

    Reply ↓
  17. Гость

    Можно мне с вами побеседовать на тему одного отчета?

    напишите мне на tuktuk7@bk.ru ЖДУ

    Reply ↓
  18. shoy

    (15) OBEH, Эх, не дождался я бесплатного отчета! А на платный не потяну! А так хотелось! (

    Reply ↓
  19. yurank

    Купил данный отчет. В целом доволен, но очень хотелось бы добавить регистры. Это как-то отдельно надо оплачивать или можно будет получить в качестве обновления?

    Reply ↓
  20. kser87

    (19) yurank, Регистры добавлю. Получите в качестве обновления

    Reply ↓
  21. kser87

    (19) yurank, Добавил регистры. Пока что без виртуальных таблиц, но в ближайшее время сделаю и это. Обработка должна была прийти вам на e-mail. Если не пришла — пишите адрес в личку

    Reply ↓
  22. Kashemir

    Хороший отчет для работы с одной таблицей, но это для совсем нетребовательных пользователей 🙂

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

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

    Поскольку после реализации базового функционала постоянно появлялись новые хотелки (постановщиком у нас была талантливая и очень настойчивая девушка 🙂 ) есть также несколько доп. фишек отчета:

    — возможность указывать регистры сведений для расшифровки по значениям полей текущего уровня данных

    — возможность вывода в шаблон (созданную пользователем печатную форму)

    — есть режим отладки, фактический исполняемых запрос (запросы для нескольких наборов) можно поглядеть и даже экспортировать в консоль запросов вместе с параметрами

    Поглядеть реализацию можно в конфе здесь http://infostart.ru/public/298367/

    Конечно на новой работе лично я сейчас использую только «прямой режим редактирования» и никому не говорю что есть «непрямой» 😉 поскольку написать инструкцию для подобного продукта — адский труд, да и пользователей такого уровня здесь нет 🙂

    Reply ↓
  23. Патриот

    (22) Kashemir,

    может «всё» без конфигуратора и запросов

    — смутно могу себе представить, чем такой отчёт будет легче в изучении для юзверей, чем консоль запросов, если их функционал примерно равен, с ваших слов… Надо будет глянуть как-нибудь. Ещё непонятно, что этот отчёт делает в конфе для изучения ин-язов… И почему он не удостоился отдельной публикации…

    Reply ↓
  24. kser87

    (23) Патриот, ссылка непонятно на что дана. Долгое время она вообще не работала

    Reply ↓
  25. KRIHA

    Мне нравятся универсальные решения.

    Reply ↓
  26. kser87

    (25) KRIHA, мне тоже=) я их сам умею делать при этом

    Reply ↓
  27. OBEH

    Действительно, что-то я выпал. За это время уже понапродано, наверное этого «универсального решения»?

    Может быть как-то показать видео, как работает(причем, повторюсь, с гораздо бОльшим функционалом)? Есть возможность какая-то это дело записать и на каком-либо ресурсе выложить?

    Reply ↓
  28. kser87

    (27) OBEH, к публикации прикреплено видео. Вам его недостаточно?

    Reply ↓
  29. OBEH

    (28) Я про то, чтобы показать возможность бесплатного.

    А прикрепленное видео не смотрел. Может быть, его использовать для показа?

    Ну я к тому, чтобы показать по аналогии.

    Reply ↓
  30. kser87

    (29) OBEH, с какой целью в пишите здесь?

    Reply ↓
  31. OBEH

    Показать, что есть бесплатная и более совершенная обработка.

    Reply ↓
  32. kser87

    (31) OBEH, покажите, что вам мешает?

    Reply ↓
  33. Tata7772

    Добрый день!

    Скажите, пожалуйста, я правильно понимаю, что я могу сформировать практически Отчет по проводкам любого документа?

    В каком релизе Обработка работает? Или она подойдет для любого релиза 8.3?

    Можно ли купить обработку и попробовать ее?

    Спасибо!

    Reply ↓
  34. kser87

    (33) Tata7772,

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

    Обработка работает без ограничений на любой конфигурации на Управляемом приложении любого релиза на платформах 8.3 и 8.2.

    Если у вас обычное приложение, то ее нужно будет включить в конфигурацию (могу отдельно проконсультировать как это делать в случае необходимости)

    Конечно, обработку можно купить и попробовать. Если она вам по каким-то причинам не подойдет, то вы всегда можете оформить возврат покупки. Но таких еще не было=)

    Reply ↓
  35. Tata7772

    Добрый вечер! Спасибо большое за ответ!

    Очень извиняюсь. А у меня у одной звук не работает на видео? И через YouTube попробовала…. ничего не слышно. Можно попросить, пожалуйста, проверить))))

    Заранее приношу извинения за беспокойство!

    Спасибо!

    Reply ↓
  36. kser87

    (35) Tata7772, звук не работает потому, что его нет)) да я и не понимаю, что там можно рассказывать. Все просто

    Reply ↓
  37. Tata7772

    Скажу честно! Вам- может быть и просто!

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

    Мне нужны обработки для облегчения работы и возможности формировать необходимую информацию в удобном виде )))

    Reply ↓
  38. kser87

    (37) Tata7772, понятно. вы всегда можете задать вопрос по отчету сюда, в личные сообщения или на почту. Я не оставлю его без ответа

    Reply ↓
  39. vinik1005

    Добрый день!

    Сразу прошу прощения, но я совсем не программист, далеко не программист…

    В общем скачала отчет, добавила его в список внешних, открываю, а там ничего…Данные никаких нет, есть возможность только настраивать сам внешний вид отчета. Может необходимо какие-то еще манипуляции совершить? Помогите пожалуйста! Еще раз прошу прощения!

    Reply ↓
  40. kser87

    (39) vinik1005, добрый день! У вас обычное приложение или управляемое?

    Reply ↓
  41. vinik1005

    Обычное приложение (если я правильно поняла, то это стационарно установленная программа).

    Reply ↓
  42. kser87

    (41) vinik1005, в таком случае отчет нужно включить в конфигурацию. Внешние отчеты на упр.приложении в обычном не запускаются. Пишите в личку почту, я дам инструкцию

    Reply ↓
  43. vinik1005

    (42) скинула почту

    Reply ↓
  44. 7OH

    А за СМ никак не сделать ? (10, 20 SM).

    Тут вроде и нормального отчета нигде нет и за 2000 пробовать не охота.

    Такой (http://infostart.ru/public/281400) уже скачал, но там настройка совсем слабая.

    Reply ↓
  45. kser87

    (44) 7OH, извините, но никак

    Reply ↓
  46. vis_tmp

    Не могу понять, где в публикации видео?

    Reply ↓
  47. kser87

    (46) пропало( восстановлю

    Reply ↓
  48. kser87

    (44) последовал вашему совету

    Reply ↓
  49. VZhulanov

    Можно ли доработать данный универсальный отчет чтобы он мог принимать как параметр уже готовый макет СКД ?

    В таком варианте он будет использоваться как форма для задания параметров, настройки СКД и работы с результатом отчета.

    У меня возникла необходимость работать с присланными из вне готовыми макетами СКД, но нужна возможность их настраивать, задавать параметры отбора и сортировки.

    И это сложные макеты с несколькими наборами данных, с внешними источниками данных (таблицы значений).

    Reply ↓
  50. leosoft

    А ссылочка на видео имеется?

    Reply ↓
  51. kser87

    (50) отчёт интуитивно понятный, видео нет. Показывать особо нечего

    Reply ↓
  52. leosoft

    А как в запрос параметры передавать?

    Reply ↓
  53. leosoft

    При выходе пишет ошибка формата объекта настроек.

    Даже если просто открыть и закрыть обработку.

    Reply ↓
  54. kser87

    (53) ошибка на функционал не влияет. поправлю в обозримом будущем

    Reply ↓
  55. mrx2012

    (54) Просим параметры для произвольного запроса)

    Reply ↓
  56. kser87

    (55) должна появиться вкладка «параметры» слева

    Reply ↓
  57. mrx2012

    (56)Не появляется..

    Reply ↓
  58. kser87

    (57) нажмите «Вариант отчета»-«изменить вариант»

    Reply ↓
  59. mrx2012

    (58)запрос тот же:

    Reply ↓
  60. kser87

    (59) текст покажите

    Reply ↓
  61. mrx2012

    (60)

    Reply ↓
  62. kser87

    (61) поставьте отборы

    Reply ↓
  63. mrx2012

    (62)Отборов нет, параметров нет

    Reply ↓
  64. kser87

    (63) выберите в запросе все поля ,по которым надо ставить отбор

    Reply ↓
  65. mrx2012

    (64)

    ля ,по которым надо ставить отбор

    А если это не поле а параметр виртуальной таблицы?

    Reply ↓
  66. kser87

    (65) надо отчетик поправить тогда

    Reply ↓
  67. mrx2012

    (66)Если будет время и возможность поправьте , пожалуйста.

    Отчет по произвольному запросу это единственная фишка вашего отчета , которая меня интересует. Остальное есть в встроенном отчете.

    Reply ↓
  68. wunderland

    >> 2.3

    >> -Исправлена ошибка, не позволяющая запускать отчет в обычном приложении.

    что-то не запускается в обычном, в управляемом — все супер

    Reply ↓
  69. kser87

    (68) для работы в обычном приложении нужно встроить отчет в конфигурацию

    Reply ↓

Leave a Comment

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