Универсальный реестр документов для 1С 8.3




Принцип обмена данными из 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. bashirov.rs

    Интересно для каких целей сделан данный реестр? Есть ведь журналы документов. Или я что-то не пойму?

    Reply
  2. maksa2005

    (1) bashirov.rs, в данных конфигурация нету реестра. Как им распечатать документы для сверки. Журнал просто отображает список документов. А если тебе нужно вывести счет-фактуру и к примеру заявки…то как?

    Можно нажать…все действия…вывести список…выбрать колонки…и вот он..отредактировать колонки по размеру…упорядочить по номеру и вот оно…Печать…но объясни это человеку который ждет от тебя только одну- две кнопки и чтобы был список для печати))

    Reply
  3. bashirov.rs

    (2) ну это заморочки по моему мнению. Мои пользователи так и делают как описано, если нет кнопки печать.

    Reply
  4. maksa2005

    (3) bashirov.rs, пользователи и бухгалтера разные люди!

    Reply
  5. makas
    Универсальный реестр документов для 1С 8.3. Испытано в Рознице, УТ, Бух, Управление сервисом, УНФ. За счет других конфигурации я ничего сказать не могу. Прошу писать, если у вас заработало в других конфигурациях.

    Судя по описанию, работа достойна +

    Reply
  6. olbanez

    Работает только на управляемых формах?

    Reply
  7. maksa2005

    (6) olbanez, Да.

    Reply
  8. potapovsanek

    а сортировки добавить можно?

    Reply
  9. maksa2005

    (8) potapovsanek, Учту в след. версии.

    Reply
  10. MariP

    Я не нашла, или нет возможности настроить, чтоб отчет включал все строки табличной части?

    Например, реестр документов реализации — замечательно выводит количество товаров в документе…

    но товары разные по разным ценам…

    В 7.7 DocPrint было просто — выводить табличные части…

    Reply
  11. maksa2005

    (10) MariP,

    Я не нашла, или нет возможности настроить, чтоб отчет включал все строки табличной части?

    какие строки включал?

    Например, реестр документов реализации — замечательно выводит количество товаров в документе…

    но товары разные по разным ценам…

    Вообще не понял. Какое это имеет отношение к моему отчету. Он выводит документы, а не содержание документа в ТЧ.

    В 7.7 DocPrint было просто — выводить табличные части…

    Я не работал с таким отчетом. Без понятия…

    Reply
  12. Гость

    Респект. Помогло доработать реестр для «Требование-Накладная» с выводом сумм документа.

    Reply
  13. MariP

    (11) Количество общее выводит, но это же не интересно видеть общее — нужно отдельно по товарам

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

    Reply
  14. maksa2005

    (13) MariP, учту

    Reply
  15. seva1405

    Итоговой суммы нет, можно добавить?

    Reply
  16. maksa2005

    (15) seva1405, можно

    Reply
  17. gudun_ku

    Добрый день!

    Для бух. 3 пришлось отчет дорабатывать, не учитывалось, что для неиспользуемых документов, в представление подставляются кавычки

    и скобки. Еще не учитывается возможная длина номера 0 для служебных документов. Так что на типовой бухгалтерии 3 отчет без данных доработок

    вываливается с ошибками. Поэтому считаю, что 2$m за этот отчет — слишком много.

    Отбора по организации тоже нет, правда он и не был заявлен, так что тут все ок. Кому нужно, как мне — доработают.

    Reply
  18. Anels

    Бухгалтерия предприятия, редакция 2.0 (2.0.64.37) отчет не открывается, как быть?

    Reply
  19. maksa2005

    (18) Anels, если у Вас не управляемые формы. То никак. Если нет. Сделайте скрин.

    Reply
  20. dsavinov2

    фигня. нет не отбора, не сортировки

    Reply
  21. maksa2005

    (20) dsavinov2, вы видела как и что РАБОТАЕТ.

    Reply
  22. fotonn

    есть возможность сформировать например реестр поступлений в Розничных ценах?

    Reply
  23. maksa2005

    (22)он формирует реест документов… а не с установками (в каких либо ценах)

    Reply
  24. Tyulenev

    Добрый день.

    Постеснялись бы за 2 стартмани такой отчет предлагать.

    Рядом, как оказалось лежит на самом деле универсальный и удобный всего за 1.

    http://infostart.ru/public/206555/

    Reply
  25. maksa2005

    (24)вооообще не стеснительно. Вы когда в магазин приходите так же говорите… Батон стоит 40 рублей…а в другом магазине 25… так же проводцу скажете? сомневаюсь.

    Reply
  26. CheBurator

    Как универсальный реестр — нерабочий.

    ломается. не предсумотрен отработка ситуации когда номер документа длина=0

    Reply
  27. maksa2005

    (26)можно конкретно. ошибки? фото

    Reply
  28. CheBurator

    последний унф. все виды документов.

    ломается например на документ.транспортныесообщения

    ошибка типа

    какойтотипдокумента.НомерДок… НомерДок не найден

    Reply
  29. maksa2005

    Приобретал данную систему в мае 2018

    (28)

    ф. все виды

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

    Reply
  30. CheBurator

    я не восьмерочник. коллеге помогал.

    достаточно сделать документ с номером нулевой длины.

    и проверить…

    Reply
  31. eksigo_Krd

    Серьезно?)))) Такое еще имеет место?

    Reply
  32. tramontana

    Отчет не работает. Прошу вернуть старт мани.

    Reply
  33. maksa2005

    (32)поподробнее

    Reply

Leave a Comment

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