Выгрузка БЕЗ ПЕРЕНОСА НОМЕНКЛАТУРЫ Управление торговлей 10.3-Бухгалтерия предприятия 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='\

17 Comments

  1. kaizZer

    очень нужная штука

    как можно заиметь?

    Reply
  2. Поручик

    Та самая тема во вражеском лагере http://www.forum.mista.ru/topic.php?id=528729

    Действующие лица — те же.

    Reply
  3. Поручик

    Ну и по поводу реализации конспективно: вариантов «сворачиваний» номенклатуры чуть более, чем до хрена много.

    Reply
  4. informa1555
    kaizZer пишет:

    очень нужная штука

    как можно заиметь?

    Через магазин Инфостарт.

    Reply
  5. informa1555
    Eugeneer пишет:

    Сразу главный вопросы.

    Что происходит с себестоимостью?

    Себестоимость переносится в БП такая какя она есть в УТ т.е. сумма себестоимости по партиям свернутая по видам номенклатуры.

    что в БП будет при проведении документов?

    При проведении документов автоматический алгоритм проведения БП не задействуется а просто по проводкам идет себестоимость перенесенная из УТ.

    Если переносится себестоимость списания подсчитанная по движениям документов в УТ — ваш вариант мало пригоден в жизни. Нужно чтобы себестоимость списывалась своя в бухгалтерии. Т.к. в УТ может быть нескольких фирм и управленческая себестоимость ну никак не годится для переноса в БП. Что происходит у вас?

    В случае который Вы описали действительно нужно чтобы себестоимость вычислялась в БП но это как раз не те случаи для которых писались эти правила. Насчет малопригодно в жизни.. ну представьте что в УТ у вас идет учет по сериям и характеристикам которых нет в БП и можество других подобных случаев.

    Reply
  6. Поручик

    (6) Если через магазин инфостарт, то где кнопка купить и цена?

    Reply
  7. Alraune

    (6) Автор, ответьте на (8) ❗

    Reply
  8. informa1555
    Поручик пишет:

    (6) Если через магазин инфостарт, то где кнопка купить и цена?

    Хороший вопрос)) Сейчас разберусь.

    Reply
  9. VladT1969

    Жаль, что только один плюсик поставить можно)))) Купили… получили… запустили… нашли пару мелочевых жучков и ОЧЕНЬ оперативненько решили с саппортом)))

    Искренне понравилась обработка… делает всё что заявлено + искренне порадовала поддержка…

    Рекомендую…

    P.S.: Жучки просочились из-за не совсем той версии БП…

    Reply
  10. Поручик

    Себестоимость дело тонкое. А если в УТ в настройках учетной политики включено «включать НДС в стоимость партий»? Что будет переноситься в БП и кидаться на 41 счет? На 41 счете стоимость всегда без НДС. А если одна и та же позиция в УТ будет оприходована поступлением товаров, через некоторое время оприходованием, то есть без НДС? Что перенесётся в БП?

    Reply
  11. KapasMordorov

    (12)

    Это всё не проблемы.

    Для ЕНВД и УСН переносится с НДС, для общего режима налогов переносится без НДС (если что, я не про обсуждаемый сабж).

    Reply
  12. informa1555
    Поручик пишет:

    Себестоимость дело тонкое. А если в УТ в настройках учетной политики включено «включать НДС в стоимость партий»? Что будет переноситься в БП и кидаться на 41 счет? На 41 счете стоимость всегда без НДС. А если одна и та же позиция в УТ будет оприходована поступлением товаров, через некоторое время оприходованием, то есть без НДС? Что перенесётся в БП?

    Ответили: (13)

    Эти правила сделаны из типовых правил (которые на плане обмена) все что касается себестоимости полностью такое же как в типовых без изменений. Единственное отличие — то что номенклатура сворачивается по видам номенклатуры и все.

    Reply
  13. V.Nikonov

    При анализе этой ситуации пошли малость по другому пути…

    Товар сворачивался до 2-х товаров (в Бухгалтерии) Товар18% и Товар10% (может нужен и Товар0%?).

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

    Reply
  14. informa1555
    V.Nikonov пишет:

    При анализе этой ситуации пошли малость по другому пути…

    Товар сворачивался до 2-х товаров (в Бухгалтерии) Товар18% и Товар10% (может нужен и Товар0%?).

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

    У меня она тоже по НДС сворачивает также если на один вид номенклатуры есть 2 ставки НДС. А зачем корректирующая обработка по конечной себестоимости не понял?

    Reply
  15. марокко

    А как обстоят дела с границей последовательности? Т.е. если клиент периодически «залазит» в прошлый период и поэтому проблемы со стандартной выгрузкой

    Reply
  16. informa1555

    Да стандартная выгрузка регистрирует изменения документов без учета периода. Тут можно задать период выгружаемых документов — это обычная обработка «Универсальный обмен данными XML». Правда если документы из периода ссылаются на другие документы то они будут перенесены для соблюдения ссылочной целостности.

    Reply
  17. NtS

    требуется подобный перенос документов из ТиС в 2.0, возьметесь сделать?

    Reply

Leave a Comment

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