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




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

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 не будет опубликован. Обязательные поля помечены *