Отражение зарплаты в регламентированном учете с расширенной детализацией (ЗУП 2.5, обычное приложение)




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

31 Comments

  1. Olyunchik

    У меня скачивается без расширения… Или я не там его пытаюсь использовать?

    Reply
  2. MRAK

    (1) походу/, сайт отсекает… перезалил

    Reply
  3. popkovsf65

    Жалько чё только для зарегистрированных, понятно чё очки надоть зарабатывать.

    Дык как же можно проверить твовой отчет (обработку) если только раз в день можно скачать «нищим зарегитрированным» -> у которых мене 30 очков.

    Желаю удачи!

    Reply
  4. MRAK

    (3) открыл

    Reply
  5. popkovsf65

    ОК!!!!!!

    Я тута тоже кое-чё по Бух 8.1 выложил, если чё надо сигнализируй!

    Reply
  6. didkovskij

    Ошибка при выполнении файловой операции ‘E:DownLoadОтражениеЗарплатыВРегУчетеДетализированный1.erf’

    по причине:

    Неверный формат хранилища данных ‘file://E:/DownLoad/ОтражениеЗарплатыВРегУчетеДетализированный1.erf’

    что может быть?

    Reply
  7. didkovskij

    Разобрался. Это архив rar. Только не понятно почему расширение erf.

    Reply
  8. didkovskij

    Отчет работает некорректно!!!

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

    ГДЕ

    БУОсновныеНачисления.Регистратор.Дата МЕЖДУ &НачалоПериода И &КонецПериода

    Если сравнить с типовым отчетом на демо базе — отчёты разные. Для примера:

    ООО Ромашки, февраль 2007 года д28 к70

    Reply
  9. MRAK

    (7) перезалил… действительно, в запарке накосячил.

    Reply
  10. MRAK

    (8) к сожалению, у меня нет вашей демобазы «ООО Ромашки».

    но претензии понятны, переделаю в ближайшее время, как оно (свободное) будет…

    Reply
  11. MRAK

    (8) теперь по периоду регистрации

    Reply
  12. Alex Y

    При попытке запуска под УПП 1.2.22.3 выдает:

    {ВнешнийОтчет.ОтражениеЗарплатыВРегУчетеСРазбивкойПоВидамНачислений(89)}: Ошибка при установке значения атрибута контекста (СхемаКомпоновкиДанных): Ошибка в схеме компоновки данных

    по причине:

    {ВнешнийОтчет.ОтражениеЗарплатыВРегУчетеСРазбивкойПоВидамНачислений(89)}: Ошибка при установке значения атрибута контекста (СхемаКомпоновкиДанных): Ошибка в схеме компоновки данных

    по причине:

    Ошибка в схеме компоновки данных

    по причине:

    Ошибка получения информации набора данных

    по причине:

    Ошибка в запросе набора данных

    по причине:

    {(18, 23)}: Поле не найдено «БУОсновныеНачисления.СчетКтУСН»

    БУОсновныеНачисления.<<?>>СчетКтУСН КАК СчетКтУСН,

    Reply
  13. MRAK

    (12) делалось для ЗУП

    Reply
  14. IP43

    Спасибо большое, а то чуть мозг не вывихнул почему сумма между подразделениями поменялась. А тут раз и сразу видно сотрудник то не отсюда 🙂

    Reply
  15. Anson

    В ЗУП 2.5.31.4 к сожелению отчет не работает 🙁

    Reply
  16. Валентина

    Что бы отчет работал в 2.5.35.3 в начале модуля объекта добавила

    Функция ПолучитьПараметрыИсполненияОтчета() Экспорт

    СтруктураНаcтроек = Новый Структура();

    Возврат СтруктураНаcтроек;

    КонецФункции

    СПАСИБО огромное за отчет очень выручил!

    Еще нужен Отражение зарплаты в регламентированном учете с подбором списка сотрудников.

    Reply
  17. ФОТИМА

    {ОбщийМодуль.ТиповыеОтчеты.Модуль(4765)}: Метод объекта не обнаружен (ПолучитьПараметрыИсполненияОтчета)

    ПараметрыИсполненияОтчета = ОтчетОбъект.ПолучитьПараметрыИсполненияОтчета();

    РЕЛИЗ 2,5,39,1

    Reply
  18. el.comarova

    Да Спасибо за отчет. Правда без добавления функции Функция ПолучитьПараметрыИсполненияОтчета() Экспорт

    СтруктураНаcтроек = Новый Структура();

    Возврат СтруктураНаcтроек;

    КонецФункции

    не работал под 8.2. Теперь хорошо

    Reply
  19. leshachkudo

    Спасибо!

    Reply
  20. Veduin

    Спасибо! Пригодился!

    el.comarova хорошее замечание, а то сходу и не сообразили!

    Reply
  21. vovkakursk

    Спасибо! Очень пригодился.

    Reply
  22. capshow

    Хороший отчет! Вот бы еще такой под УПП. Там разработчики по какой то им одним известной причине регистр сделали, а отчет по нему нет

    Reply
  23. uroboros

    Спасибо, отчет, конечно, пригодится!

    Хотелось бы только без доработки со стороны внимательных коллег!

    Reply
  24. Risa

    Спасибо, отчет очень полезный. На 2.5.45.3 работает отлично без каких-либо доработок «напильником». Сразу помог вычленить непонятные суммы.

    Reply
  25. MRAK

    (23) внес изменения

    Reply
  26. natalika1601

    Хороший отчет, только хотелось бы, чтобы для 8.2. среди реквизитов было бы ПодразделениеДт

    Reply
  27. higs

    Отлично, большое спасибо! На 2.5.54 отработал без вопросов. Разрезы наличествуют именно те, что мне и нужно. Еще раз огромное спасибо, помогло уменьшить мою работу!!!!

    Что касается настроек, то использование СКД очень увеличивает гибкость отчета. Чего не хватает, достаточно просто добавить самому!!!

    Reply
  28. prodines

    Отчет супер, просто спасение от экономистов.

    Небольшое замечание: надо заменить все вызовы «ОбщегоНазначения.» на «ОбщегоНазначенияЗК.».

    Reply
  29. prodines

    У этого отчета имеется недостаток: выводятся только те проводки, где по кредиту стоит счет 70. Хотелось бы также видеть проводки по взносам — с Кт 69.х — чтобы получить аналог свода проводок из 7.7.

    Reply
  30. stas1kbob

    Удержания не показывает. допилить бы. а то в заголовке есть, а в отчете нет

    Reply
  31. Nad_ya

    Да, нашла то, что искала, для экономистов. Заменила все вызовы «ОбщегоНазначения» на «ОбщегоНазначенияЗК». Все работает. Спасибо.

    Reply

Leave a Comment

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