Внешняя печатная форма счета-фактуры с изменениями по федеральному закону от 27.07.2010 № 229-ФЗ




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

21 Comments

  1. Orland

    Насколько я понял только наименование валюты меняется, а шапка (сверху справа ссылка на закон) не должна меняться?

    И вопрос к автору, это от куда печатная форма?

    Всмысле официальная 1Ская или собственное творение?

    Reply
  2. anig99

    (1) http://infostart.ru/public/74782/

    НОВОЙ УТВЕРЖДЕННОЙ ФОРМЫ С/Ф ЕЩЁ НЕТ. 👿

    Reply
  3. Abadonna

    (0) Впереди паровоза, даже если бухи сильно хотели, бежать не стоит.

    (см. 2)

    Reply
  4. agew

    1. Хрен с ними с бухами — крупная розничная сеть рассылает письма в которых требует со 2 сентября сего года счет-фактуры вот в таком виде (в противном случае грозится не принимать товар на реализацию), в письме ссылка на закон № 229-ФЗ.

    2. Про паровоз (см. 2) — значит прихожу я к комерческому директору и говорю:

    — Иван Иванович, требования сети «Продаем все» не законны т. к. новой утвержденной формы еще нет — поэтому я ничего в системе делать не буду.

    Он мне:

    — А тогда они у нас со 2-го число товар принимать не будут.

    Я — тогда подаем на них в суд за невыполнение договора.

    Он — Ок, расходы на юриста и упущенную прибыль вычтем из твоей зарплаты.

    Я — Да нет проблем.

    Мы довольные пожимаем друг другу руки и расходимся каждый по своим делам.

    Reply
  5. anig99

    (4) Случайно крупная сеть не *АНДЕР?! Так вот… только что сегодня закончили с ними НОРМАЛЬНО разговаривать. Гл.бухгалтер местного представительства ПОЛНОСТЬЮ согласился с нашими доводами и заверил, что до официального утверждения формы товар и документы будут принимать.

    Любая сеть зависит от вашей фирмы точно также… И точно также за пустые полки в течении 2-3 дней (а быстрее они не конпенсируют закупки) регионального менеджера не погладят по головке…

    Я даже скажу больше. Опыт различных изменений в с/ф показал, что ГРУЗЧИКАМ И ТОРГОВЫМ НА….ТЬ НА МЕЛКИЕ ДЕТАЛИ ФОРМ. Главное подписи, печати и вес. ВСЕ. С остальным разбирается бухгалтерия. НИКТО ОТГРУЗКУ ОСТАНАВЛИВАТЬ НЕ БУДЕТ И МАШИНУ ВОЗВРАЩАТЬ ТОЖЕ. ПРОСТО ПОКА С/Ф НЕ БУДЕТ ОФОРМЛЕНА ПРАВИЛЬНО (без разницы кто кого заборет) СЕТЬ ПРОСТО НЕ БУДЕТ ИХ ОПЛАЧИВАТЬ.

    Reply
  6. Abadonna

    (4)

    крупная розничная сеть рассылает письма в которых требует со 2 сентября сего года счет-фактуры вот в таком виде (в противном случае грозится не принимать товар на реализацию), в письме ссылка на закон № 229-ФЗ.

    А вот бы и классно было, чтобы им никто на законном основании не посылал бы сч-факт в таком виде. Чем бы они, придурки, торговать стали? И какую неустойку заплатила бы их главбух, которая (без сомнения) и замутила все это? Слышала звон…

    Reply
  7. anig99

    (4) на будущее запомни (и как-то дай знать коммерческому), что торговые сети ничего не производят (или производят какое-нибудь г…) и на 100% зависят от ПРОИЗВОДИТЕЛЕЙ.

    Прибыль торговой сети зависит от оборачиваемости товара на полках. Пустая полка — убыток.

    Такие вот коммерческие «на откатах» и привели к ситуации, когда продавец платит покупателю за то, что он у него покупает. Ситуация бредовая (хоть и можно под неё подогнать объяснение….)

    Reply
  8. CheBurator

    (7) а вам не кажется странным что вы сети приравниваете к покупателем, а ими интересуется антимонопольный комитет? и что ставит знак равенства между «покупателем» и «покупателем-сетью» несколько …ммм неправильно…? говорю это как бывший нач.IT-отдела представителя зарубежного бренда, работающего со всеми практически значиыми сетями (кроме метро)…

    Reply
  9. rsu55

    (5) о да тандер, он же тд холдинг тот еще гиморой в части документооборота.. но в любом случае бухгалтера у нас сами между собой проблемы улаживают с документами, а кладовщики с менеджерами по-любому отгружают товар.

    Reply
  10. agew

    (5) нет это не Тандер — это другая сеть…

    (7) ну так производителей много — будешь артачится, другого найдут — более покладистого (пусть цена выше, качество хуже — все равно народ купит, все же привыкли уже ходить по пятерочкам да ашанам)

    Reply
  11. agew

    (6) а чем они придурки торгуют когда у них например гречки нет…, вот тем бы и торговали 😀

    Reply
  12. anig99

    (11) найдут, но не за 2-3 дня. А за это время постоянные покупатели могут уйти в другое место.

    Reply
  13. shuher

    В правом углу шапки надо добавить номер постановления «от 27 июля 2010г. N 229»

    Reply
  14. MagnusRed

    (13) по этому постановлению форму утверждает правительство, а покуда правительство ещё не утвердило, эта форма — подлог, а если добавить дату с номером — подделка!!! 😀

    Reply
  15. Alav

    (13) Постановления «от 27 июля 2010г. N 229» — нет такого постановления, Под таким номером и датой есть ФЗ, но это совсем не одно и тоже

    Reply
  16. shuher

    Ну я понял, у нас как обычно, кипишь с этими счет-фактурами есть, а толком не понятно что к чему…. 🙁

    Reply
  17. anig99

    (16) если внимательно просмотреть последние публикации здесь, на 1с и buh.ru, то совершенно ясно, что никаких форм не надо…кроме тех случаев, когда лень убедить крупных сетевиков в их неправоте/некомпетентности.

    Reply
  18. agew

    (17) До-о-о, и получить нелояльного клиента, который будет с тобой работать, но все время тебя гнобить (задерживать оплаты, ссылаясь на ошибки в первичке, ставить твои машины на разгрузку в самое неудобное время и т. п.). По мне так лучше потратить 15 мин. и сделать такую форму какую они хотят, чем иметь геморой на свою… . Даже если завтра придет комерческий и скажет: «Нам для крупного клиента нужно в сч-ф вставить картинку жопы» — я пойду и ее туда вставлю — главное что бы комерческому отделу хорошо жилось — тогда и у меня в кармашке будет серебро позвякивать».

    Reply
  19. anig99

    (18) странно… у нас таких проблем нет. и жопы никто не рисует.

    Reply
  20. Airlord

    Согласен с респондентами полностью. Формы «штампует» ГНИВЦ — вычцентр ФНС и порой налоговые инспекции пытаются всего лишь на основании «пробных форм» наварить проблем для налогоплательщиков! Рекомендую просматривать сайт БухСофт, где постоянно пишут о принятых и утвержденных формах!

    Reply
  21. alsen

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

    Reply

Leave a Comment

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