Вариант отчета "Полный свод начислений, удержаний и выплат (Банк, Касса)" ЗУП.3.1.2, 3.1.4, 3.1.5 + Вариант отчета "Анализ зарплаты по сотрудникам помесячно — (Банк, Касса) (Долг за сотрудником, за организацией)" ЗУП.3.1.5, 3.1.6




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

41 Comments

  1. Hla

    Надежда, добрый день! Попыталась настроить отчет сама. Но не получилось, а хотелось бы самой настроить. Если не трудно можете подсказать, где я ошиблась. Мои настройки в файле.

    Reply
  2. Hla

    Разобралась. Группировку надо на уровень выше делать. Спасибо!

    Reply
  3. user_2010

    (2) Замечательно!

    Reply
  4. makas

    «Полным» отчет будет, когда в нем появится информация о начисленных страховых взносах. А сейчас отчет не полный. 🙂

    Reply
  5. user_2010

    (4) так называется типовой отчет — в нем выводится информация о выплатах через банк и через кассу.

    Название «Полный свод» — придумка не моя 🙂

    Reply
  6. Elena270586

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

    Reply
  7. user_2010

    (6) в этом отчете есть информация о выплатах?

    Reply
  8. Elena270586

    Есть сводно

    (7)

    Reply
  9. zels

    В 3.1.6 нет «Полный свод…», что вместо него?

    Reply
  10. zels

    (9) Раз сообщение не удаляется — в конфигураторе это отчет АнализНачисленийИУдержаний

    Reply
  11. user917164

    Подскажите как сальдо на конец развернуть по долгам за работником и предприятием как в предыдущих конфигурациях???

    Reply
  12. user_2010

    (6) 21/04/2018 Добавлен файл с настройкой варианта отчета «Анализ зарплаты по сотрудникам помесячно — (Банк, Касса) (Долг за сотрудником, за организацией)» ЗУП.3.1.6. Загрузить его также можно по тому же алгоритму, описанному выше — загружать этот вариант отчета нужно для отчета «Анализ зарплаты по сотрудникам помесячно».

    Данный отчет настраивается точно также как и описано в тексте публикации.

    Ведь «Полный свод» и «Анализ зарплаты» — это разные варианты одного и того же отчета.

    Reply
  13. user_2010

    (11) 21/04/2018 Добавлен файл с настройкой варианта отчета «Анализ зарплаты по сотрудникам помесячно — (Банк, Касса) (Долг за сотрудником, за организацией)» ЗУП.3.1.6. Загрузить его также можно по тому же алгоритму, описанному выше — загружать этот вариант отчета нужно для отчета «Анализ зарплаты по сотрудникам помесячно».

    Анализируете сумму долга — и решаете куда его отнести.

    Reply
  14. user917164

    (13) Надежда, можете добавить в Полный свод разбивку сальдо по долгам, например, Сальдо 3000 из них Долг предприятия 4000, Долг за работником -1000. Клиент хочет так. Спасибо!

    Reply
  15. user596680_pv_1c

    Как загрузить 2 отчет? На 3.1.5 работает?

    Reply
  16. user_2010

    на 3.1.5 проверила — работает.

    загружать также — как описано в тексте публикации — только подгружаем к отчету

    «Анализ зарплаты по сотрудникам помесячно»

    У данного варианта отчета есть ограничение — сальдо корректно делится на долг за сотрудником и долг за организацией — только в случае, когда отчет формируется за 1 месяц! Прошу обратить на это внимание.

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

    Reply
  17. user_2010

    (14) добавить могу, но он будет работать только в случае формирования отчета за 1 месяц. Если отчет формировать за период несколько месяцев — разделение долга «за сотрудником» и «за организацией» будет некорректным.

    Чтобы отчет был корректным за любой период — нужно изменять запрос.

    Reply
  18. user917164

    Добавьте, глав бух этот отчет за месяц и формирует. Спасибо!

    Reply
  19. user917164

    (16) Попытайтесь пожалуйста сделать универсальным за любой период. Заранее спасибо!

    Reply
  20. SeaWolf

    Добрый день, Надежда! Можно сделать, как было в ЗУП 2.5, по выплатам была бы информация не суммарная по банку и кассе, а по ведомостям — номер, дата и сумма выплаты?

    Reply
  21. user_2010

    (20) да, Геннадий! Так сделать можно: в блок группировок по выплатам, за группировкой ТипВыплаты нужно добавить группировку по полю Регистратор.

    Визуально должно получиться так:

    Группа (там где настроен отбор по Группа Равно Выплачено)

    ВидРасчета

    ТипВыплаты

    Регистратор

    И получится так как вы написали — с расшифровкой по документам.

    Reply
  22. SeaWolf

    Добрый день, Надежда! Все получилось, огромное спасибо!

    Reply
  23. user_2010

    (22) Замечательно!

    Reply
  24. corbenSG

    Кто может подскажет, не получается сделать тоже самое в варианте отчета «Расчетный лист».

    Что бы выплаты разделялись банк/касса.

    Reply
  25. serovadasha

    Надежда, анализ зарплаты на 3.1.7 не работает( помогите!

    17.10.2018 16:53:23

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

    НачалоСвойства: {http://v8.1c.ru/8.1/data-composition-system/settings}Settings Форма: Элемент Тип: {http://v8.1c.ru/8.1/data-composition-system/settings}Settings

    по причине:

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

    по причине:

    Ошибка разбора XML: — [1075,5]

    Фатальная ошибка:

    Extra content at the end of the document

    Reply
  26. prog-eg

    У меня настройки загрузились, спасибо.

    Reply
  27. user_2010

    (26) замечательно!

    Reply
  28. prog-eg

    Если сменилось подразделение в середине месяца то сальдо отражается не корректно, «+» на первом подразделении, «-» на втором.

    Reply
  29. user_2010

    (28) Как должно быть?

    Reply
  30. prog-eg
  31. cbhouse

    Расчетчикам з/п очень нужна эта настройка отчета. Скачали настройку для анализа з/п помесячно, но к сожалению, на релизе ЗУП 3.1.9 и версии платформы 8.3.1616 настройка не работает.

    Пользовательское поле в любом случае возвращает Неопределено.

    Сделала проверку. Если для группы настройки с отбором Выплачено вывести обычную группировку Регистратор , то регистраторы Ведомость выплаты выводятся. Если добавить дополнительное поле с выражением Регистратор и включить его в группировку для группы Выплачено, то в отчет выводится пустое значение. Поэтому выражение Строка(ТипЗначения(Регистратор)) из настройки отчета возвращает Непределено в любом случае и для ведомости банка и для кассы. Какая-то проблема с пользовательскими полями, может быть проблема в платформе.

    Reply
  32. user_2010

    (31) проверила на версии ЗУП КОРП3.1.9.187 на платформе 8.3.12.1685 — отчет работает!

    попробуйте проверить на другой платформе.

    8.3.1616 — это что за версия?

    Reply
  33. user_2010

    (31) вы к какому отчету загружаете настройки?

    Нужно к типовому отчету «Полный свод начислений, удержаний и выплат».

    Reply
  34. cbhouse

    (33) Платформа 8.3.12.1616 ЗУП Проф . ЗУП Проф 3.1.9 187 Работает 🙂

    Спасибо. Подгрузила настройку «Анализ зарплаты по сотрудникам помесячно» в отчет Полный свод начислений, теперь выплата группируется на банк и кассу правильно. По названию настройки подумала, что вторая настройка не для свода, а для типового отчета «Анализ зарплаты по сотрудникам (помесячно)»

    Reply
  35. user_2010

    (34) замечательно!

    В инструкции по загрузке написано:

    Настройки отчета можно загрузить следующим образом:

    В типовом отчете «Полный свод начислений, удержаний и выплат»:

    1. Нажимаем кнопку «Еще»

    ….

    Reply
  36. cbhouse

    (35) В комментарии 12 вроде написано про отчет «Анализ зарплаты по сотрудникам помесячно»: «Загрузить его также можно по тому же алгоритму, описанному выше — загружать этот вариант отчета нужно для отчета «Анализ зарплаты по сотрудникам помесячно». Теперь понятно, что эта настройка работает на отчете «Полный свод».

    Reply
  37. user_2010

    (36) да, действительно вы правы — так у меня написано. И действительно оба этих отчета являются вариантами одного и того же отчета. Поэтому нет разницы для какого отчета вы загрузите настройки.

    Проверила на ЗУП.3.1.9.187 — загрузила настройки отчета для типового отчета «Анализ зарплаты по сотрудникам» — отчет работает.

    Может быть вы как-то некорректно первый раз подгрузили настройки? Попробуйте еще раз — ради эксперимента.

    Reply
  38. mairon

    Помогло, спасибо! ЗУП.3.1.9.187

    Reply
  39. user_2010

    (38) Замечательно!

    Reply
  40. Kate_13

    (31)

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

    Reply
  41. user_2010

    (40) Напишите, пожалуйста, версию вашей платформы и конфигурации.

    Reply

Leave a Comment

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