Перенос авансов со счета 60.1 на 60.2




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

35 Comments

  1. Myti

    ❗ Принимайте как есть ❗

    Reply
  2. Myti

    ❗ Хоть кому нить пригодился????????

    Reply
  3. Доня

    Весч нудная, НО!

    1. Показан КОД контрагента — это неудобно — надо лезть в справочник и по КОДу смотреть Контрагента — а если их много?

    2. Не показано действие проведенной операции — что, куда, от куда?

    Т.Е. Надо все открывать, анализировать,

    а это можно и без этой обработки делать

    НО, весчь нужная…

    Reply
  4. Myti

    Я грил что она непрозрачная (ээээээ….. сырая).

    Сделал то что надо и усе……………….

    За коммент, спасибааа…………. 😀

    Reply
  5. ЛюблюТебя

    такое не интересно сидеть потом и заново все проводить, пользуюсь другой обработкой которая перепроводит выписки и ставит правильно счета

    Reply
  6. Myti

    (6) — это о чем вапче 😮

    Reply
  7. ghostishe

    Вопрос к автору (я 8-шник, тонкостей 7.7 не знаю):

    Корректно ли отрабатывает возвраты товаров от покупателей? Ведь возврат делает «СТОРНО» реализации, и отрицательный оборот по счету расчетов с контрагентом должен быть.

    Reply
  8. ghostishe

    предыдущий пост снимается. речь о поставщиках. сорри.

    Reply
  9. Myti

    😀 Ничего

    Reply
  10. poppy

    (0)

    Как правило «Выписки» заносяться на счет 60.1

    Может стоит изучить штатные возможности конфигурации?

    Выписка сама умеет распределять суммы между 60.1/60.2 и 62.1/62.2 в зависимости от текущего остатка долга.

    Обработка является ярким примером того, как плохое внедрение программы «прикрывается» программным кодом (впридачу сырым и неуниверсальным).

    Reply
  11. Myti

    (11) — Обработка является ярким примером перписанной вдоль и поперек конфигурации «Бухгалтерский учет» . За счет невозможности обновления приходиться и нетакое писать!!!!

    Не у всех все белое.

    Reply
  12. poppy

    (12) При чем здесь «невозможность обновления»?

    Может стоило в описании указать, что обработка не предназначена для типовой конфигурации?

    Reply
  13. Myti

    дя.дя. Да там вапче по 8ке стоит………..

    Виноват——освоюсь

    Reply
  14. director04

    Для автора… Может лучше попробуешь вот это: http://infostart.ru/public/21596/ ????

    Reply
  15. director04

    (15) виноват, не посмотрел что это 7.7. Но если уж писать для 7.7 то можно взять для аналогии лекарство предложенное выше.

    Reply
  16. Myti

    Господа…………….я выкладываю то, что делаю на основании служебных записок своей организации, и на окончательную боработку времени нет…

    Поэтому,,,,,,принимайте как есть…………Или вапче…..непринимайте

    Reply
  17. Adoms

    задумка классная! но к сожалению обработка не переносить в новую проводку в выписке значение второго субконто по кредиту, например «Оплата поставщику»

    Reply
  18. Adoms

    (11) Может стоит изучить штатные возможности конфигурации?

    Выписка сама умеет распределять суммы между 60.1/60.2 и 62.1/62.2 в зависимости от текущего остатка долга.

    Подскажите пожалуйста, как это делается штатными методами??? 😳

    Reply
  19. Myti

    Доработаем,,,,,,

    Reply
  20. poppy

    (20) Очень просто.

    Корр.счет указываь не надо. Статья ДДС должна быть «Выручка по обычным видам деятельности» или «Приобретение товаров, продукции, работ и услуг».

    Reply
  21. poppy

    (17) если нет времени на окончательную боработку, зачем выкладываешь здесь?

    Reply
  22. Myti

    (22) — Хочу делиться теплом и радостью с людьми…………

    Reply
  23. helpnik1

    Да очень просто

    Не заполняй поля счета …. и все.

    ну не забыть выбрать ДДС «Оплата поставщику» или «»Поступление от покупателей»

    А если еще хочется и с «изворотом» …. учи мат. часть.

    Reply
  24. poppy

    (23) Хотел как лучше, получилось — как всегда… 😥

    Обработку с таким описанием считаю вредной.

    Reply
  25. Доня

    😉 (26) Да не растраивайтесь Вы так!

    Вы же на экзамене и не в приемной комиссии.

    Каждый выражает свое мнение как умеет. иногда и не очень позитивно.

    Каждая разработка имеет право быть.

    Просто надо доработать.

    Reply
  26. Myti

    (27) — хоросе.небудю…..скоро страшную штуку суда повешу

    Reply
  27. Моха
    Как правило «Выписки» заносяться на счет 60.1 по которому в итоге образуется минусовая сумма в конце периода.

    Уже коментировали. Далеко не как правило. Я ужо промолчу про операции с у.е.

    Подскажите пожалуйста, как это делается штатными методами???

    В документах есть счет авансов. Конкретный пример могу показать для БП 8.1 (7-ки нет).

    Reply
  28. mawr41

    Моха покажи для БП 8.1, а то у нас у бухов тоже проблема на 60.01 красные минуса в кредите

    Reply
  29. Арчибальд

    «Как правило» — бред какой-то. Поскольку это неправда, все вытекающее тоже в топку.

    Reply
  30. Myti

    (31) — млять, замените «Как правило «Выписки» » на «Как правило «Выписки» у нас «

    Reply
  31. EHoTe

    Автору спасибо, пришлось правда немного перековырять под местные нужды, но спасибо.

    Reply
  32. petrovaUL

    Доработал

    Reply
  33. Myti

    молотцыыы

    Reply
  34. Nikolenka

    Автору спасибо за труд.

    Reply
  35. Myti

    вам спасибо…))) за признание )))

    Reply

Leave a Comment

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