Удобная настройка оборотно-сальдовой ведомости для 1С:Бухгалтерии 1.6




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

18 Comments

  1. Ish_2

    Ваша настройка для ОСВ была включена в файл поставки

    Тема http://infostart.ru/public/18838/

    Буду рад услышать замечания , если таковые появятся.

    Reply
  2. RayCon

    (1) Спасибо за помощь конечному пользователю — ради него мы, в конечном итоге, и работаем.

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

    Reply
  3. Ish_2

    (2) Ок

    Reply
  4. AnryMc

    А можно обработкой с ИТС UploadToXML — ВыгрузкаЗагрузкаДанныхXML.epf сохранить в ИксЭмЭл справочник «Сохраненные настройки» и регистр сведений «Сохраненые настройки» с отбором по проделанной выше работе???

    Затем загрузить в другую базу и скопировать для всех пользователей.

    Это я как настоящий лентяй. К сожалению, мне не поможет — план счетов другой 😥

    Reply
  5. el_diaz

    спасибо! но почему-то настройки не сохраняются 🙁

    1С 8.2 Комплексная автоматизация

    Reply
  6. dyolga

    Подскажите, как воспользоваться? Через папку не открывается, на внешнюю обработку не похоже. Подскажите пожалуйста, я бухгалтер, мне очень пригодится. Работаю на Бухгалтерия 8.1

    Reply
  7. RayCon

    (6) Это были просто примеры скриншотов, как надо настраивать ОСВ. Но раз уж настраивать отчёт по образцу, как всегда, времени не хватает, я попросил AnryMc выложить на Инфостарте обработку для переноса настроек отчетов из одной базы в другую. Он любезно согласился это сделать, за что ему огромное спасибо! 🙂

    После этого я написал подробную пошаговую инструкцию по подключению из 11-ти пунктов. Надеюсь, теперь с настройкой ОСВ ни у кого проблем не будет.

    P.S. Скриншоты с примерами настроек удалил, т.к. теперь они уже не нужны.

    Reply
  8. RayCon

    (5) См. пункты 10 и 11 пошаговой инструкции по подключению.

    Reply
  9. el_diaz

    1. Скачайте прилагаемый файл настроек RayCon_ОСВ.fsa.

    а куда он приложен??? В архиве только скриншоты 😥

    Reply
  10. RayCon

    (9) Да, действительно. Файл исчез. 🙁

    Пытался сейчас выложить, но никакие танцы с бубнами к успеху не привели. 🙁

    Буду писать в техподдержку…

    Reply
  11. RayCon

    (9) Благодаря техподдержке теперь файл можно скачивать.

    Успешной работы! 🙂

    Reply
  12. el_diaz

    (11) Спасибо!

    но при открытии настроек в 8,2 счета на закладке «Развернутое сальдо» пустые, хотя галочки и значения субконто есть. 🙁

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

    Reply
  13. RayCon

    (12) Подозреваю, что у Вас конфигурация не БП. Как сказал AnryMc, автор разработки ПереносНастроекОтчета_v2.epf, выгрузка сильно завязана на конфигурацию. Иными словами, файл RayCon_ОСВ.fsa, выгруженный из БП, может некорректно загружаться в КА и в УПП. Похоже, мне придётся настраивать ОСВ в каждой из трёх различных конфигураций: БП, КА, УПП, а затем выгрузить настройки в три разных файла *.fsa и выкладывать их сюда.

    Reply
  14. el_diaz

    (13) Вы правы, у меня комплексная автоматизация.

    Я, главное, принцип понял, теперь сам всё сделаю. большое спасибо.

    Reply
  15. RayCon

    (14) Обещаю, что найду время, и сделаю настройки для КА и для УПП. К сожалению, не могу обещать, что сделаю это быстро.

    Если вдруг Вы сделаете настройку для КА быстрее меня, с удовольствием выложу её здесь с указанием авторства. 🙂

    Reply
  16. el_diaz

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

    Reply
  17. AleksSF

    К сожалению у меня в БП 2.0 пункта нет

    5. Выберите в строке «Отчет для переноса настроек» значение

    «ОборотноСальдоваяВедомостьХозрасчетный».

    Есть только «ОборотноСальдоваяВедомость»

    И при формировании отчета по пункту 9. Чтобы загруженные настройки вступили в силу, нажмите в ОСВ кнопку «Сформировать».

    Выдает ошибку:

    {ОбщийМодуль.СтандартныеОтчеты.Модуль(3074)}: Значение не является значением объектного типа (ПоказателиОтчета)

    Для Каждого ЭлементСтруктуры Из ФормаОтчета.ДанныеОтчета.ПоказателиОтчета Цикл

    В чем проблема??? Конфа стандартная ПРОФ. 2.0.19.9

    Reply
  18. AB3012

    спасибо! но почему-то настройки не сохраняются

    1С 8.2 Комплексная автоматизация

    Reply

Leave a Comment

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