ТТН для бухгалтерии




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

32 Comments

  1. limbo

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

    подпись главбуха вылезает на сторону контрагента

    а так респект +1

    Reply
  2. victuan

    Да уже куча таких обработок! ищи поиском.

    Reply
  3. Sancha

    Limbo Сегодня проверю. Позже обновлю.

    Victuan Лень искать 🙂

    Reply
  4. Sancha

    Внес изменения, по замеченным Limbo ошибкам. Качайте.

    Reply
  5. nikitishna

    Было бы не плохо если бы в поле грузополучатель стояло полное наименование.

    Reply
  6. nikitishna

    а если грузополучатель «он же» в документе, то в бланке грузополучатель вообще пуст….

    Reply
  7. Sancha

    Исправим…

    Reply
  8. blinick

    как скачать

    Reply
  9. Душелов

    На ссылку «ТТН для бухгалтерии» трудно нажать?

    Reply
  10. ankr

    Спасибо!

    Reply
  11. Sancha

    (10) Пожалуйста

    Reply
  12. waol

    Спасибо 🙂

    Reply
  13. las_

    малось передела под бухов. А так Спасибо

    Reply
  14. panteranew

    all right pasibo

    Reply
  15. Masyanya

    Кладу файл в ExtForms открываю ТОРГ-12 -> Печать , и у меня там не отображается ТТН (((

    Что делать?

    Reply
  16. Sancha

    (15) Тебе надо положить в ExtFormsPrnForms оба файла из архива, который ты скачала ТТНБУХГАЛТЕРИЯ.ERT и ТТНБУХГАЛТЕРИЯ.EFD, и тогда будет тебе счастье 😉

    Reply
  17. sip

    Sancha !

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

    Спасибо!

    Reply
  18. Sancha

    (17) Если она не редактируется, то я поправлю это дело пустяковое, Таб.Защита(0) и все.

    Reply
  19. wmaker

    И все таки редактировать форму перед печатью нельзя (((

    И поле «Грузополучатель» заполняется некорректно. Как бы исправить эти проблемы? ) Заранее спасибо.

    Reply
  20. Sancha

    После Нового Года, выложу с исправлениями 🙂

    Что с грузополучателем не нравится?

    Reply
  21. Маруся

    форма перед печатью не редактируется 🙁

    а так все отлично, спасибо 🙂

    Reply
  22. Nick'S

    Спасибо, Sancha!

    Сэкономили время на перенос формы с Торговли+Склад и сохранили стиль программирования от 1С. Доработка формы под конкретного заказчика, как правило, требуется и имея что-то уже работающее с «привычным» скриптом, сделать это значительно проще.

    Reply
  23. Sancha

    22. Ничего не понял. За «спасибо» — спасибо 🙂

    Reply
  24. Exsecrabilis

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

    Reply
  25. 50872

    Я положила оба файла ТТНБУХГАЛТЕРИЯ.ERT и ТТНБУХГАЛТЕРИЯ.EFD в ExtFormsPrnForms.

    Но печатная форма так и не активизировалась в документе «Отгрузка товаров, продукции». Подскажите, что нужно еще сделать?

    Заранее, спасибо!

    Reply
  26. samamoiloff

    (0)Обновлять будете?

    Reply
  27. Sancha
    samamoiloff пишет:

    (0)Обновлять будете?

    А разве форма менялась?

    Reply
  28. flaks

    Спасибо! Очень, пригодилось

    Reply
  29. supershurik

    Очень нужна! Это старая или новая?

    Reply
  30. Sancha

    29. — Вопрос немного не правильный. ТТН и ТН — это две независимые формы, которые нужны для бухгалтерии.

    Введение формы Транспортной Накладной, не отменило Товарно-Транспортной Накладной 🙂

    Reply
  31. SeGUN137

    Спасибо. Очень пригодилось

    Reply
  32. dtybr

    Спасибо, за разработку.

    Reply

Leave a Comment

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