Свертка базы 1С: Бухгалтерия предприятия 2.0




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

31 Comments

  1. Styvi

    Подскажите, чем же документ Док_Ручной_Расчёт лучше документов Поступление и Реализация в остатках?

    Reply
  2. DAnry

    (1) Styvi, поддерживаю вопрос. Я тоже не понимаю зачем сие усложнение.

    Reply
  3. SP2000

    (1) Styvi, (2) DAnry,

    Это обусловлено требованием клиента

    Reply
  4. Rustig

    (0) не сталкивались с такой ситуацией, когда после свертки Книга покупок не заполняется «как следует»? До свертки в книге покупок есть записи, а после свертки записей нет. Судя по алгоритму для попадания в книгу покупок нужны записи по оборотам регистров НДС Продажи и НДС Покупки, которых после свертки нет. Не сталкивались?

    Reply
  5. wolverine87

    На сколько большое отличие обработки с диска ИТС?

    И стандарт вроде неплохо работает.

    Но все равно спасибо за старания. +1

    Reply
  6. tisas77

    Документы до даты обрезания полностью удалаються из базы? или будут всетаки ссылки на старые документы?

    Reply
  7. i.c.h

    Хочу поделиться новостью. на users.v8.1c.ru появился апдейт обработки с диска ИТС «Свертка информационной базы» для БП 1.6 для правильной работы в БП 2.0 от октября 2014. Обработка предназначена для уменьшения размера информационных баз редакции 2.0, в том числе перед переходом на редакцию 3.0.

    Reply
  8. b-dm

    (7) i.c.h, Отличная новость, а Вы сами пробовали ?

    Reply
  9. b-dm

    Вроде скачал что то такое из 1С ного раздела но не понял чем 1С обработка отличается от http://infostart.ru/public/238692/ ?

    Reply
  10. nevvermind

    Если не сложно, киньте в меня кто—нибудь обновленной сверткой…. А то доступы потеряли на пользовательский сайт и пин-код тоже…. nevvvermind <собака> gmail.com

    Reply
  11. UralKIT

    Устанавливаю дату свёртки 31.12.14. Документы ввода остатков при этом почему то формируются на 01.01.15 o_O

    После этого в оборотно-сальдовой сальдо на начало года нулевое. Но ведь это ……

    ps Всё разобрался, после активизации документов ввода остатков через кнопку Активизировать, дата документов меняется на дату свёртки.

    Reply
  12. R_o_n_n_y
    Reply
  13. botcc

    (7) i.c.h, Где её конкретно искать так и не нашел!

    Reply
  14. tornado_storm

    Не рекомендую обрабатывать регистр сведений «УчетнаяПолитикаОрганизаций». Рекомендую делать предварительное тестирование и исправление базы.

    Reply
  15. tornado_storm

    (4) Rustig, Вы решили свою проблему? Сообщите как, если решили.

    Reply
  16. qwed557

    (7) i.c.h, где на юзерсе искать обработки?

    Reply
  17. YNik

    (16) qwed557, когда откроете БП 2.0 для платформы 8.2, то почти в самом низу странице находится:

    Апдейт обработки с диска ИТС «Свертка информационной базы» для БП 1.6 для правильной работы в БП 2.0

    Reply
  18. MakNat

    (7) i.c.h, Подскажите пожалуйста где ее там найти, В каком разделе. На итс не нашли, а в личном кабинете не могу сориентироваться.

    Reply
  19. MakNat

    (16) qwed557, Нашла спасибо.

    Reply
  20. MakNat

    (17) YNik, (11) UralKIT, помогите ночику. Каков правильный порядок работы с обработкой. ? По умолчанию, установили дату свертки 31122014 и нажали кнопочку СВЕРНУТЬ БАЗУ, база свернулась но БЕЗ остатков ОТ обороты за 2015 копейка в копейку а нач остатков нет.

    Все дело в закладке Документы ввода остатков я так понимаю. НУжно До свертки их там сформировать? а потом запустить свертку? верно?

    Reply
  21. YNik

    (20) MakNat, в обработке в правом нижнем углу есть кнопка со знаком вопроса, там подробная инструкция.

    Вы, скорее всего, не выполнили после свертки пункт 6:

    Активизировать документы ввода остатков (кнопка «Активизировать» на закладке «Документы ввода остатков»). На этом этапе документы ввода остатков переносятся в дату свертки, у движений устанавливается признак активности.

    Reply
  22. MakNat

    YNik спс. В архиве скаченном с сайта есть файлик с полным описанием всех действий.

    Reply
  23. ALLES

    Почему ни в одном документе расчета с контрагентом нет номера и даты входящего документа? Например, в бух 3.0 после свертки эти номера идут в книги покупок/продаж. Думаю в бух 2.0 логика та же..

    Reply
  24. b-dm

    А планируется ли доработка данной обработки ?) По желаниям телезрителей, пытающихся свернуть базу…

    Reply
  25. MakNat

    (24) b-dm, а в чем у вас возникла проблема со сверткой?

    Reply
  26. b-dm

    (25) — уже не помню, но если написал значит не сработала…а вы автор обработки или хотите-можете помочь со сверткой ?)

    Reply
  27. MakNat

    Обработка типовая свернули 2 базы дописанную и типовую все ок прошло в принципе. Пишите вопросы. думаю поможем)

    Reply
  28. Sherdrada

    (27) Подскажите, пожалуйста, где взять типовую обработку? есть доступ на сайт users.1c.ru но что-то не нахожу там нужного мне

    Reply
  29. YNik

    (28), см. комментарий (17)

    Reply
  30. Sherdrada

    (27) Здравствуйте. Скачала типовую обработку с сайта ИТС, сворачивала базу Бухгалтерия 2.0, ничего не свернулось, документы не удалились, регистры так и остались заполнены. В чем может быть проблема?

    Reply
  31. MakNat

    (30)Приложите скрины всех страниц с настройками указанными в обработке свертки.

    И опишите какие изменения произошли с базой, НИКАКИХ? даже оборотки все остались неизменны?

    Reply

Leave a Comment

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