Счет-фактура с 09.06.2009 (Бух 7.7 УСНО 1.3)




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

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

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

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

34 Comments

  1. victuan

    А нафик с/ф при УСНО? Там нет НДС. Можно печатать и по старой форме, налоговикам будет пополам, т.к. нет базы для возмещения НДС.

    Reply
  2. IP43

    Раз 52 раза скачали (плюсанулиб еще столькоже), значит нужны. 🙂

    Вот типа мне делать было нечего, взял и сваял СФ для УСНО., поясняю:

    1. Не знаю как у Вас, но у нас некоторые организации (в основном бюджетные) не оплачивают пока нет С/Ф (и им по барабану на какой ты системе налогообложения), и бухгалтера там такие придирчивые, такое чувство, что им лишь бы задержать платеж.

    2. Есть такие организации, что работая на УСНО все же выставляют С/Ф с НДС (не терять же клиента, если ему ни жить ни быть нужен НДС).

    Reply
  3. Evg-Al

    Извините, не совсем понял, как эту форму к документу подцепить?

    В папку ExtFormsPrnForms положил, а дальше что с ней делать?

    Reply
  4. IP43

    (3) Идти в СФ и давить кнопку печать, если СФ от 9.06.09 и позже, будет измененный вариант, если более ранне число, то будет старый вариант

    Reply
  5. IP43

    (3) в продолжение для общего развития. Если конфигураци не измененная, то в СФ прописан следующий алгоритм печати, если в ExtFormsPrnForms каталога рабочей базы лежит файлик 1cbsf283.mxl , то печатная форма беретсья из него, если этого файлика нет, то береться встроенная в конфигуратор печатная форма СФ.

    Reply
  6. Evg-Al

    Спасибо

    Reply
  7. IP43

    (6) Спасибо много, плюсик в самый раз 🙂

    Reply
  8. Evg-Al

    Пардон, каюсь, ПЛЮС

    Reply
  9. nasten-slasten

    я скопировала в папку ExtForms данный файл, но все равно с-ф не изменяется….

    Reply
  10. IP43

    (9) а надо копировать в ExtFormsPrnForms

    Reply
  11. nasten-slasten

    (10) а у меня нет такой папки PrnForms в папке ExtForms?? Мне ее нужно создать?

    Reply
  12. CheBurator

    (11) создайте и положите туда — хуже от этого не будет.

    сразу встает вопрос — а вы 1Ску откуда сперли? 😉

    Reply
  13. CheBurator

    (10) как показывает богатая статистика — наличие в профиле правдивого содержательно фото автора существенно способствует решению оперативных вопросов…

    Reply
  14. nasten-slasten

    (12) так пришла на эту работу, уже такая спертая и стояла:))))))). а денег начальство не дает на настоящую — дорого говорит. Так и мучаюсь 3 месяц.

    Reply
  15. CheBurator

    ну, значит, на адвоката даст?

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

    (14)Начальнику такому-то

    Служебная записка.

    Довожу до Вашего сведения, что риски при использовании контрафактного ПО состоят в следующем…

    У меня подействовало в свое время. За три года легализовали ВСЕ

    Reply
  17. IP43

    (13) пока не до фото 🙂 А каких оперативных вопросов?

    Reply
  18. CheBurator

    (16) долго вы.. я как пришел на рука Итотдела своего — в первую очередь легализовали все винды, сервера, акроинс, радмин. Антивирь и 1ска были правильные и до этого.

    Reply
  19. CheBurator

    (17) пока не до вопросов 😉

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

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

    Reply
  21. Godman

    Я не вижу в шапке подписи о редакции 451 от 9 июня 2009 года. Об этом нигде не написано, но быть она должна — так говорит любой опытный бухгалтер. Кроме того без этой приписки одна крупная немецкая компания попросту не платила.

    Reply
  22. Godman

    виноват, от 26.05.2009 N 451

    Reply
  23. Godman

    виноват ещё раз, всё есть, просто старый документ был 🙁

    Reply
  24. IP43

    (21) А полное и краткое наименование организации есть? или только кракое? Может смотрите на примере СФ выписанной ранее чем 09.06.09?

    Reply
  25. IP43

    Пока писал ответ уже все решиось само собой 🙂

    Reply
  26. Loo

    (5) и что делать в этом сучае? Как поменять?

    Reply
  27. IP43

    (27) Не понял вопроса, что поменять?

    1. Хочешь внешней СФ пользоваться положи в ExtFormsPrnForms каталога рабочей базы файлик 1cbsf283.mxl

    2. Не хочешь внешней СФ польоваться, удали этот файлик.

    Reply
  28. Loo

    У меня не меняется!Чего делать?

    Reply
  29. IP43

    (28)

    1. Скопируйте файл 1cbsf283.mxl в папку ExtFormsPrnForms информационной базы.

    2. У Вас случаем конфигурация не измененная?

    Reply
  30. Loo

    (29) версия 1с 7.7 для SQL (7.70.025) УСНО ред. 1.3 (7.70.153). Я в 1с не особо разбираюсь, просто попросили помочь, то что не лицензия это точно.

    Скопировал файл 1cbsf283.mxl в папку ExtFormsPrnForms информационной базы

    и не чего не меняется, а надо чтоб только в шапке счет-фактуры должно было указано «… в редакции постановлений Правительства……, от 26 мая 2009 г. № 451) и все. А у меня не меняется….. Может есть другой способ какой?

    Reply
  31. IP43

    (30) редакция древняя, хотя на дату ее выхода уже была внешняя форма СФ 1cbsf283.mxl можно предположить, что код программы изменен и строка

    ИмяФайлаПечатнойФормы = КаталогИБ() + «ExtFormsPrnForms1cbsf283.mxl»;

    просто закоментировала или удалена.

    А лицензия нелицензия тут роли не играет.

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

    Reply
  32. Loo

    (31) Был бы очень благодарен если бы Вы мне написали как можно поменять код!

    Reply
  33. IP43

    (32) Заходим в Конфигуратор, Открываем конфигурацию- Документы — СчетФактура — Кнопка «Форма» — Закладка «Модуль» — ищем процедуру Печать().

    Смотрим начало процедуры, там должно быть:

    НомерДокПечатнойФормы = глПреобразоватьНомерДок(НомерДок, 0, 0);

    // В зависимости от даты документа используются разные шаблоны печатной формы.

    // При наличии в каталоге информационной базы файла с именем

    // «ExtFormsPrnForms1cbsf*.mxl», будет использоваться шаблон печатной формы

    // размещенный в данном файле.

    Таб = СоздатьОбъект(«Таблица»);

    Если ДатаДок >= ‘30.05.2006’ Тогда

    ИмяФайлаПечатнойФормы = КаталогИБ() + «ExtFormsPrnForms1cbsf283.mxl»;

    ИмяТаблицы = «СФ283»;

    Иначе

    ИмяФайлаПечатнойФормы = КаталогИБ() + «ExtFormsPrnForms1cbsf.mxl»;

    ИмяТаблицы = «СФ84»;

    КонецЕсли;

    Reply
  34. IP43

    Если ФС.СуществуетФайл(ИмяФайлаПечатнойФормы) = 1 Тогда

    Таб.ИсходнаяТаблица(ИмяФайлаПечатнойФормы);

    Иначе

    Таб.ИсходнаяТаблица(ИмяТаблицы);

    КонецЕсли;

    Reply

Leave a Comment

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