Закрытие авансов по 60 и 62 счетам на любую дату




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2025-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. gutentag

    Считайте что поставил «Минус», так как я не понимаю(бухгалтер я, а не программер), за чем надо что-то встраивать в конфигурацию, если можно сделать обработку по заполнению документа «Бухгалтерская справка» или «операция»

    Reply
  2. k_georg

    (1) Пожелание заказчика. Нужно было, что был документ и попадал в журнал регламентных. Что собственно и было сделано.

    (1) За «Плюс», специально для Вас, сделаю обработку, только решите, что нужно: «Бухгалтерская справка» или «операция» ))))))))))))))))))

    Reply
  3. gutentag

    (2) ….И как теперь заказчик обновляет конфигурацию?

    (2) Вообще, обработка делающая «закрытие и/или взаимозачеты счетов 60 и 62» — вещь полезная, знаю по себе, и «Плюс» ставлю 🙂



    Имхо стоит заполнять «Бухгалтерская справка», т.к. в ней есть кнопка «заполнить НУ».

    При закрытиях счетов 62 и 60, проводки по НУ сейчас заполнять не надо. Но сейчас и не известно что еще взбредет в голову 1С (вдруг они введут для 60 62 счетов НУ) :-/

    Reply
  4. KapasMordorov

    В 7.7 бухгалтерии есть типовые документы для закрытия авансов.

    Их и следует заполнять.

    Reply
  5. k_georg

    (3) С обновлением проблем нет никаких. И откуда им (проблемам) взяться. Думаю, что «программер» обновляющий Ваши базы, сможет Вам это объяснить.

    Данный документ был написан более 4-х лет назад, и даже на предприятиях, которые я сейчас не сопровождаю, заказчики обновляют свои конфигурации не задумываясь. (Если не просили чего-то глобального :)))) , не имеющего отношения к данному документу)

    (3) На счет 1С: откуда такой негатив? Вы на самом деле думаете, что программа, которой Вы пользуетесь (1С) — это результат того, что ИМ «взбрело» в голову 😉

    (3) Обработка для формирования «Бухгалтерской справки» Вам будет, на случай «вдруг они введут для 60 62 счетов НУ».

    (4) Или я чего-то не знаю, или Вы имеете в виду «Зачет аванса покупателя/поставщика» и «Взаимозачет» тогда Вам в помощь: http://infostart.ru/projects/4717/ , или Вы не видели результата работы данного документа 🙁

    Reply
  6. gutentag

    (4) Типовой документ работает только по одному контрагенту. А когда их сотня — замучаешься закрывать их.

    Reply
  7. gutentag

    За помощь спасибо:)

    Reply
  8. KapasMordorov

    2(6)

    Одна обработка и формирует сотни документов.

    При этом всё типовое, обработка внешняя — голова ни у кого не болит.

    Reply
  9. k_georg

    Добавил внешнюю обработку формирующую «Бухгалтерскую справку»

    Reply
  10. gutentag

    Полезная вещь получилась, спасибо!

    Reply
  11. karbofos

    Буху не понадобилась, но автору всеравно спасибо. Может еще пригодиться.

    Reply
  12. olenionok

    Доброго времени суток! Подскажите, пожалуйста, как вставить этот файл в документы. С форматом Clipboard никогда не сталкивалась. Заранее благодарю.

    Reply
  13. k_georg

    (12) olenionok, Здравствуйте!

    Следующая статья пояснит работу с утилитой clipbrd.exe

    comp-profi.com/view_post.php?id=88

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

    Reply
  14. olenionok

    Здравствуйте. Спасибо большое за пояснение, я разобралась уже. Все дело в том, что на windows7 этот функционал не работает (clipbrd). Добралась до XP, и все получилось. Так что было бы прекрасно, если бы Вы либо формат поменяли, либо коммент добавили про седьмую винду. А то вряд ли у меня одной она стоит, люди тоже могут столкнуться с этим вопросом.

    Еще раз благодарю.

    Reply
  15. antares_of

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

    Reply
  16. LPas

    СПС, очень помогла

    Reply
  17. ezupowam
    antares_of пишет:

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

    )) Хорошая мысль )) Надо составить список таких операций, которые по нажатию одной кнопки, а лучше совсем сами в «час икс», запускались бы все оптом, и на печать только комплект документов за период выводился ))

    Reply

Leave a Comment

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