Внешняя печатная форма РКО Расходный Кассовый Ордер




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

14 Comments

  1. pho

    Где же она?

    Зачем же она?

    Reply
  2. Grekk

    Да вот же она!

    Например если бух распечатывает много РКО и ручное заполнение строки Получил занимает много времени, можно туда скопировать СуммаПрописью и получить то что нужно. Конечно можно внести изменения в конфигурацию, но…

    Reply
  3. Alav

    Никогда не думал почему 1С до сих пор этого не сделало?

    Правила выдачи наличных денежных средств из кассы организаций, а также правила оформления при этом расходных кассовых ордеров регулируются «Порядком ведения кассовых операций в Российской Федерации», утвержденным решением Совета Директоров Центробанка России от 22 сентября 1993 года N 40.

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

    Расписка же в получении денег, как это определено в пункте 15 Порядка, может быть сделана получателем только собственноручно чернилами или шариковой ручкой с указанием полученной суммы: рублей — прописью, копеек — цифрами.

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

    Reply
  4. Alav

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

    Reply
  5. gutentag

    (3) > Расписка же в получении денег, как это определено в пункте 15 Порядка, может быть сделана получателем только собственноручно чернилами или шариковой ручкой с указанием полученной суммы: рублей — прописью, копеек — цифрами.

    ….И какое наказание за это предусмотрено? статью/ законодательства пожалуйста в студию.

    ——

    В банках, где я обслуживаюсь, все документы (по наличным деньгам) от клиентов оформляют только через компьютер :-/

    Reply
  6. Alav

    По факту, оформленные с нарушением требований Порядка ведения кассовых операций РКО можно считать первичными документами, не имеющими надлежащей юридической силы (см., например, пункты 2.5 и 2.6 «Положения о документах и документообороте в бухгалтерском учете», утвержденного приказом Минфина СССР от 29 июля 1983 года N 105).

    Т.е. проверяющий может отнести случаи составления первичных документов, не имеющих надлежащей юридической силы к отсутствию первичных учетных документов. А это уже 120 статья НК РФ. (грубое нарушение правил учета доходов и расходов и объекта налогообложения, под которым понимается, в том числе и отсутствие первичных документов.) Что влечет за собой взыскание штрафа в размере 5 000 рублей, если деяния совершены в течение одного налогового периода, в размере 15 000 рублей, если такие деяния совершены в течение более одного налогового периода, и в размере 10 процентов от суммы неуплаченного налога, но не менее 15 000 рублей, если такие деяния повлекли за собой занижение налоговой базы.

    Reply
  7. Alav

    На деле же мы имеем следующую картину.

    Кассовую дисциплину проверяют банки. они не будут портить отношения с клиентом, так как клиент может в любой момент уйти в другой банк. Поэтому зачастую они закрывают глаза на мелкие и несущественные нарушения. Максимум сделают устное предупреждение.

    Налоговики кассовую дисциплину практически не проверяют, вот и получается что в жизни многие «забивают» на это. Но если налоговикам при проверки нужно будет к чему-то прицепиться, но напечатанная сумма прописью будет отличным способом наложить штраф по ст 120НК.

    Reply
  8. gutentag

    (7) из моей практики: лучше пусть все будет пропечататно, чем заполнено с ошибками 😎

    Reply
  9. bearcat

    (8) по жизни gutentag прав, потому что обязательно пока сотрудник заполнит РКО, пару раз испортит, а чуть повыше рангом сотрудники вообще не пишут прописью сумму, им же некогда, вот кассир сам за них за всех и пишет, а так уже готовая сумма, осталось только подпись поставить.

    (7) ну, насчет применения 120 статьи ,это вы переплюнули налоргов. Да, есть нарушение, но ведь подпись сотрудника имеется. Поэтому вряд ли судьи станут на сторону налоргов, что документ отсутствует, если он есть.

    А вот согласно п. 27 процитированного вами Порядка, «попасть» может кассир, который по таким РКО выдает деньги.

    «27. Выдача денег из кассы, не подтвержденная распиской получателя в расходном кассовом ордере или другом заменяющем его документе, в оправдание остатка наличных денег в кассе не принимается. Эта сумма считается недостачей и взыскивается с кассира. Наличные деньги, не подтвержденные приходными кассовыми ордерами, считаются излишком кассы и зачисляются в доход предприятия.»

    Понятно, что «Порядок» устарел еще в прошлом веке, что нуждается в изменениях, но на сегодняшний день именно он регулирует ведение КАССОВЫХ ОПЕРАЦИЙ В РФ.

    Так что еще неизвестно , что хуже пропечатанная сумма или сумма , вписанная почерком кассира.

    На самом деле , Вы правы, еще никто и никогда не цеплялся к этому нарушению, ни банк ни налорги. Но кто знает, все еще может быть.

    http://www.dmpmos.ru/buhmethods/vshow.asp?id=11432

    Reply
  10. Arhh

    Срочно нужно было подправить печатную форму, а конфигурация была девственно типовая:) Спасибо автору за сэкономленное время:)

    Reply
  11. ryabov_d

    Та же ситуация. Изменить нужно к «вчера», а тут готовое есть. Спасибо

    Reply
  12. allexe

    Спасибо, то что нужно. Я думаю пригодится для определенных целей.

    Reply
  13. Cemen82

    Правила выдачи наличных денежных средств из кассы организаций, а также правила оформления при этом расходных кассовых ордеров регулируются «Порядком ведения кассовых операций в Российской Федерации», утвержденным решением Совета Директоров Центробанка России от 22 сентября 1993 года N 40.

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

    Расписка же в получении денег, как это определено в пункте 15 Порядка, может быть сделана получателем только собственноручно чернилами или шариковой ручкой с указанием полученной суммы: рублей — прописью, копеек — цифрами.

    Reply
  14. galoks

    спасибо автору! как раз нужна была готовая форма и очень срочно.

    Reply

Leave a Comment

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