Ручная корректировка движений документа Отражение зарплаты в бухгалтерском учете




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

26 Comments

  1. roman77

    Обработка хорошая, однако при перепроведении документа все ручные правки слетают.

    Reply
  2. igorp

    да. слетают. Но это уж придется проведение документа переписывать

    Reply
  3. roman77

    (2) я уже понял. пришлось допиливать

    Reply
  4. Alleria

    (3) А можно получить доделанную обработку? Чтобы при проведении или записи не слетали изменения?

    Reply
  5. roman77

    (4) Я саму конфигурацию подпилил. Обработкой никак.

    Reply
  6. igorp

    Все верно. Тут надо конфу пилить

    Reply
  7. screenplayer

    Нет возможности корректировать, если ведется налоговый учет. Эти поля нен видны. При сохранении СуммаДтНУ перескакивает в постоянную разницу

    Reply
  8. igorp

    Со временем возможно допилю

    Reply
  9. Casek2012

    Не совсем понятен смысл обработки тогда. Посмотреть на свои изменения, которые слетят после проведения?

    Reply
  10. igorp

    При корректировке вносятся изменения в регистр. Смысл не посмотреть, а изменить данные

    Reply
  11. Airrobber

    Обработка работает, главное не перепроводить «Отражение ЗП в бухучете» , автору зачёт , давно такую искал.

    Reply
  12. Airrobber

    (11)

    Обработка работает, главное не перепроводить «Отражение ЗП в бухучете» , автору зачёт , давно такую искал.

    но конечно было бы здорово если бы после проведения изменения сохранялись, иначе закрытие месяца всё равно перепроводит все документы

    Reply
  13. igorp

    Спасибо на добром слове. Чтобы изменения после проведения сохранялись, придется изменять конфу..ничего не попишешь

    Reply
  14. motorkuzbassa.it

    (13) Подскажите, чем обусловлена необходимость корректировки проводок? Настройкой отражения в БУ можно загнать вплоть до Сотрудника/Вида начисления?

    Reply
  15. igorp

    (14)Сложно ответить на данный вопрос. Люди качают, значит кому то это надо

    Reply
  16. a_ska@mail.ru

    Вот бы еще НУ можно было б редактировать……

    Reply
  17. igorp

    может руки дойдут,.сделаю

    Reply
  18. user1072422

    Здравствуйте.Подскажите, возможно ли этой обработкой править движения документа: Отражение зарплаты в бухучете в БУ и В НУ? Подходит ли данная обработка для конфигурации Бухгалтерия предприятия, редакция 3.0 (3.0.65.84)? При обновлении конфигурации нужно ли приобретать новую обработку?

    Reply
  19. igorp

    Эта обработка правит движения документа. Для того и написана. Проверялась последний раз на версии БП 64.48. Думаю, что будет работать и на 65.84. Если нет, напишите

    Reply
  20. user1072422

    (19) Спасибо за ответ. Просто выше вижу переписку что руки не дошли НУ сделать. Сейчас уже все ок? Проводки, статьи и подразделения в Налоговом учете тоже можно редактировать верно?

    Reply
  21. igorp

    Сейчас вроде уже все сделал. Но может что-то пропустил. Хотя последнее время никто не жаловался

    Reply
  22. user1072422

    (21) Простите…т.е. я правлю проводки и при закрытии месяца просто все слетает как и было…А зачем тогда эта обработка для правки проводок? Просто посмотреть в ОСВ

    Reply
  23. acanta

    Вероятно использовать следует после закрытия месяца

    Reply
  24. user1072422

    (23)Бред полный.Чтобы потом после закрытия месяца еще кучу исправительных проводок к закрытию месяца делать…по вашему мнению так, видимо так.

    Reply
  25. igorp

    что ж вы хотите, друзья.. Это всего лишь внешняя обработка. И она свое отрабатывает. движения правит. А чтобы это не слетало при закрытии месяца. и при проведении документа нужно дорабатывать конфигурацию. Извиняйте

    Reply
  26. user1072422

    (25)Извиняем …1,5 тыс как с куста…конечно она не нужна в таком виде….так, потатить время на правки и красивую оборотку посмотреть если только…остальные обработки внешние, в т.ч. купленые здесь, фиксируют изменения проводок, а тут даже закрытие месяца не сделаешь.

    Reply

Leave a Comment

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