Наличие счетов-фактур для БП 3.0




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

25 Comments

  1. besks

    Аааааааа…. не работает. выдает ошибку.

    версия 8.2.18.61 конф 3.0.20.10

    А так бы было здорово. Нужен реестр счетов-фактур по материалам, услугам — отдельно.

    Для входящих и исходящих отдельно. Причем если нет сч-фактуры, то нужен просто документ по приходу (расходу) с пометкой счет.

    Reply
  2. new_user

    (1) besks, что в сообщении об ошибке?

    Reply
  3. besks

    Здравствуйте.

    При открытии формы выпадает ошибка и форма не открывается:

    {Форма.ФормаОтчета.Форма(93)}: Поле объекта не обнаружено

    ДокументыОснования = Метаданные.Документы[ВидСчетаФактуры].ВводитсяНаОсновании;

    Это из-за того что нет значения ВидСчетаФактуры при самом первом открытии формы.

    Если в процедуре ПриОткрытии() значению ВидСчетаФактурыприсвоить значение, то ошибки нет.

    Вы все-таки подумайте на счет реестра полученных и выданных счетов фактур + акты без сч/ф

    Заранее благодарна

    Reply
  4. new_user

    (3) besks, Да, косяк! Не предусмотрел! Спасибо! Напишите, пожалуйста, по конкретней что бы Вы хотели видеть, просто я не совсем в теме! 🙂

    Reply
  5. OBEH

    Может я чего не понимаю, но в консоли отчетов эти отчеты пишутся за 2-3 минуты с любым количеством настроек по отборам и прочим вещам.

    Reply
  6. besks

    Мне нужен реестр по полученным счетам фактурам отдельно по материалам(товарам, оборудованию) и отдельно по услугам. Так же еще бывает поступление товаров и услуг, но без счетов фактур — тогда напротив нужно указать что это счет, а дате проставить полученного документа.

    Отчет:

    № сч/ф | Дата сч/ф | Контрагент | Сумма документа|

    Тоже самое нужно и по выданным — все отдельно

    Заранее благодарна

    Reply
  7. besks

    (5) OBEH,

    Вы конечно все правильно понимаете, но не всем даны ваши мозги 🙁

    Reply
  8. OBEH

    (7) besks, ну хорошо. Есть в БП 3.0 «Консоль отчетов»?

    Reply
  9. besks

    Нет.

    Можно в конфе на СКД попробывать, но у меня как то пробел по соединениям таблиц.

    А вообще в данном вопросе у меня самая большая проблема как услуги отделить от материалов- беда

    Reply
  10. new_user

    (9) besks, а на каком счете учитываете услуги? На каком материалы?

    Reply
  11. OBEH

    (9) besks, Во всех стандартных конфигурациях есть консоль отчетов. И не нужно лезть в конфигуратор.

    А отделение услуг от материалов решается простым движением мышки. Причем, без дополнительных вопросов, типа, «А на каком счете учитываете услуги? На каком материалы?»

    И еще.

    По моему, для такого отчета никаких «соединений таблиц» не требуется.

    Ну что, будете смотреть консоль отчетов в БП 3.0?

    Reply
  12. besks

    (11) Овен

    Конечно буду.

    Только если несложно, подскажите где ее найти. В 2.хх — она на виду, а вот где в 3.хх?

    Reply
  13. OBEH

    (12) besks, мда…

    чуток обманул.

    Действительно, в БП 3.0 нет консоли отчетов. Ее почему-то убрали.

    Есть убогая консоль запросов. Но это больше для программистов или для продвинутых пользователей.

    Я уже и забыл, что просто выдернул ее из БП 2.0 и вставил в БП 3.0

    Уже более десятка обновлений БП 3.0 сделал и даже не замечаю ее отсутствия.

    Пользуюсь и все.

    Не понимаю причин «изъятия» ее из 3.0.

    Может быть, стоит ее из 2.0 перетащить? Это делается очень просто.

    Уж очень неплохо облегчает жизнь.

    В противном случае постоянно придется добавлять всякие разные отчеты, типа, «Наличие счетов-фактур для БП 3.0»

    Reply
  14. besks

    (10) извините за задержку.

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

    Реализация — 62.01:

    62.01.1 — работы

    62.01.2 — услуги

    62.01.3 — материалы

    Поступление — 60.01

    60.01.1 — работы

    60.01.2 — услуги

    60.01.3 — материалы

    Reply
  15. besks

    (13) OBEH,

    Вы просто эту обработку в конфигураторе перетащили, из 2 в тройку?

    Я сейчас перетащу и буду ждать дальнейших указаний.

    А из ЗП в бухгалтерию перетащится?

    Да и еще…

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

    Reply
  16. OBEH

    (15) besks, Она должна работать под УФ в 3.0.

    Если не заработает, могу выслать готовую, переделанную под УФ консоль отчетов.

    Возможно, я чего-то там под УФ подшаманил.

    И еще только в толстом клиенте. Надеюсь, с толстым клиентом у вас в конторе нет проблем

    Если ЗП у вас на УФ то, я думаю, без проблем перенесется.

    Да и еще..

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

    Reply
  17. besks

    (16) OBEH,

    Понятно.

    Если не сложно, то скиньте мне на мыло besks@mail.ru

    В конторе — только на толстом клиенте.

    Reply
  18. OBEH

    (17) besks, Сбросил.

    Наверное, теперь придется писать отчет на этом самом инструменте?

    Reply
  19. besks

    (18) ОВЕН

    Ну вы же мне обещали дать инструкции 🙂

    Без вашей помощи никак

    Reply
  20. OBEH

    (19) besks, тогда подробно чего хочется от отчета.

    Типа, небольшого ТЗ. Как время будет, набросаю.

    То есть, если буду делать, то по универсальнее.

    Кстати. Глянул сейчас в БП 3.0 ПоступлениеТоваровУслуг.

    По сравнению с БП 2.0 там изменения. Удалили НомерВходящегоСчетаФактуры и, соответственно, его дату

    Reply
  21. besks

    (20) OBEH,

    Изменения произошли буквально в апреле 🙁

    А ТЗ — посмотрите (6) — я там написала, что хочу

    Reply
  22. OBEH

    (21) besks, Форма отчета уже кое-что.

    А алгоритм можно написать? Это же вам надо. Вот мне, тупому программисту разжевать. Программистом я себя не считаю. Больше постановщик.

    Reply
  23. trand

    Было бы хорошо реализовать возможность отбора «С НДС» без «НДС», так как не знаю как у других, а у нас в организации счета фактуры вводят только на накладные с НДС (где в поступлении товаров сумма НДС > 0). Поэтому проверяют наличие с.ф. только на накладные с НДС. Сейчас придется по всему списку открывать и смотреть с НДС или без НДС была поставка и если «Да» то вводить с.ф.

    Reply
  24. OBEH

    (23)Я ничего не понимаю. У меня работает консоль отчетов и такого рода вещи пишу влет. Практически, набрасываю мышкой за 5-10 минут. Может у меня что не так?

    Reply
  25. besks

    (10)

    Спасибо. На основе Вашего отчета наконец то вывела себе реестр.

    Reply

Leave a Comment

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