Вариант отчета "Полный свод начислений, удержаний и выплат (Банк, Касса)" ЗУП.3.1.2, 3.1.4, 3.1.5 + Вариант отчета "Анализ зарплаты по сотрудникам помесячно — (Банк, Касса) (Долг за сотрудником, за организацией)" ЗУП.3.1.5, 3.1.6
1C-admin
23.04.2018
Принцип обмена данными из 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='\
Надежда, добрый день! Попыталась настроить отчет сама. Но не получилось, а хотелось бы самой настроить. Если не трудно можете подсказать, где я ошиблась. Мои настройки в файле.
Разобралась. Группировку надо на уровень выше делать. Спасибо!
(2) Замечательно!
«Полным» отчет будет, когда в нем появится информация о начисленных страховых взносах. А сейчас отчет не полный. 🙂
(4) так называется типовой отчет — в нем выводится информация о выплатах через банк и через кассу.
Название «Полный свод» — придумка не моя 🙂
Надежда, подскажите как настроить анализ зарплаты по сотрудникам, чтобы выплата делилась через банк и кассу. Не могу сообразить((
(6) в этом отчете есть информация о выплатах?
Есть сводно
(7)
В 3.1.6 нет «Полный свод…», что вместо него?
(9) Раз сообщение не удаляется — в конфигураторе это отчет АнализНачисленийИУдержаний
Подскажите как сальдо на конец развернуть по долгам за работником и предприятием как в предыдущих конфигурациях???
(6) 21/04/2018 Добавлен файл с настройкой варианта отчета «Анализ зарплаты по сотрудникам помесячно — (Банк, Касса) (Долг за сотрудником, за организацией)» ЗУП.3.1.6. Загрузить его также можно по тому же алгоритму, описанному выше — загружать этот вариант отчета нужно для отчета «Анализ зарплаты по сотрудникам помесячно».
Данный отчет настраивается точно также как и описано в тексте публикации.
Ведь «Полный свод» и «Анализ зарплаты» — это разные варианты одного и того же отчета.
(11) 21/04/2018 Добавлен файл с настройкой варианта отчета «Анализ зарплаты по сотрудникам помесячно — (Банк, Касса) (Долг за сотрудником, за организацией)» ЗУП.3.1.6. Загрузить его также можно по тому же алгоритму, описанному выше — загружать этот вариант отчета нужно для отчета «Анализ зарплаты по сотрудникам помесячно».
Анализируете сумму долга — и решаете куда его отнести.
(13) Надежда, можете добавить в Полный свод разбивку сальдо по долгам, например, Сальдо 3000 из них Долг предприятия 4000, Долг за работником -1000. Клиент хочет так. Спасибо!
Как загрузить 2 отчет? На 3.1.5 работает?
на 3.1.5 проверила — работает.
загружать также — как описано в тексте публикации — только подгружаем к отчету
«Анализ зарплаты по сотрудникам помесячно»
У данного варианта отчета есть ограничение — сальдо корректно делится на долг за сотрудником и долг за организацией — только в случае, когда отчет формируется за 1 месяц! Прошу обратить на это внимание.
Чтобы отчет был универсальным — нужно дорабатывать запрос. Если потребность в таком универсальном отчете есть — могу попытаться сделать.
(14) добавить могу, но он будет работать только в случае формирования отчета за 1 месяц. Если отчет формировать за период несколько месяцев — разделение долга «за сотрудником» и «за организацией» будет некорректным.
Чтобы отчет был корректным за любой период — нужно изменять запрос.
Добавьте, глав бух этот отчет за месяц и формирует. Спасибо!
(16) Попытайтесь пожалуйста сделать универсальным за любой период. Заранее спасибо!
Добрый день, Надежда! Можно сделать, как было в ЗУП 2.5, по выплатам была бы информация не суммарная по банку и кассе, а по ведомостям — номер, дата и сумма выплаты?
(20) да, Геннадий! Так сделать можно: в блок группировок по выплатам, за группировкой ТипВыплаты нужно добавить группировку по полю Регистратор.
Визуально должно получиться так:
Группа (там где настроен отбор по Группа Равно Выплачено)
ВидРасчета
ТипВыплаты
Регистратор
И получится так как вы написали — с расшифровкой по документам.
Добрый день, Надежда! Все получилось, огромное спасибо!
(22) Замечательно!
Кто может подскажет, не получается сделать тоже самое в варианте отчета «Расчетный лист».
Что бы выплаты разделялись банк/касса.
Надежда, анализ зарплаты на 3.1.7 не работает( помогите!
17.10.2018 16:53:23
http://v8.1c.ru/8.1/data-composition-system/settings }Settings Форма: Элемент Тип: {http://v8.1c.ru/8.1/data-composition-system/settings }Settings
Ошибка преобразования данных XDTO:
НачалоСвойства: {
по причине:
Ошибка преобразования данных XDTO
по причине:
Ошибка разбора XML: — [1075,5]
Фатальная ошибка:
Extra content at the end of the document
У меня настройки загрузились, спасибо.
(26) замечательно!
Если сменилось подразделение в середине месяца то сальдо отражается не корректно, «+» на первом подразделении, «-» на втором.
(28) Как должно быть?
Выложилаhttps://infostart.ru/public/928520/
Расчетчикам з/п очень нужна эта настройка отчета. Скачали настройку для анализа з/п помесячно, но к сожалению, на релизе ЗУП 3.1.9 и версии платформы 8.3.1616 настройка не работает.
Пользовательское поле в любом случае возвращает Неопределено.
Сделала проверку. Если для группы настройки с отбором Выплачено вывести обычную группировку Регистратор , то регистраторы Ведомость выплаты выводятся. Если добавить дополнительное поле с выражением Регистратор и включить его в группировку для группы Выплачено, то в отчет выводится пустое значение. Поэтому выражение Строка(ТипЗначения(Регистратор)) из настройки отчета возвращает Непределено в любом случае и для ведомости банка и для кассы. Какая-то проблема с пользовательскими полями, может быть проблема в платформе.
(31) проверила на версии ЗУП КОРП3.1.9.187 на платформе 8.3.12.1685 — отчет работает!
попробуйте проверить на другой платформе.
8.3.1616 — это что за версия?
(31) вы к какому отчету загружаете настройки?
Нужно к типовому отчету «Полный свод начислений, удержаний и выплат».
(33) Платформа 8.3.12.1616 ЗУП Проф . ЗУП Проф 3.1.9 187 Работает 🙂
Спасибо. Подгрузила настройку «Анализ зарплаты по сотрудникам помесячно» в отчет Полный свод начислений, теперь выплата группируется на банк и кассу правильно. По названию настройки подумала, что вторая настройка не для свода, а для типового отчета «Анализ зарплаты по сотрудникам (помесячно)»
(34) замечательно!
В инструкции по загрузке написано:
Настройки отчета можно загрузить следующим образом:
В типовом отчете «Полный свод начислений, удержаний и выплат»:
1. Нажимаем кнопку «Еще»
….
(35) В комментарии 12 вроде написано про отчет «Анализ зарплаты по сотрудникам помесячно»: «Загрузить его также можно по тому же алгоритму, описанному выше — загружать этот вариант отчета нужно для отчета «Анализ зарплаты по сотрудникам помесячно». Теперь понятно, что эта настройка работает на отчете «Полный свод».
(36) да, действительно вы правы — так у меня написано. И действительно оба этих отчета являются вариантами одного и того же отчета. Поэтому нет разницы для какого отчета вы загрузите настройки.
Проверила на ЗУП.3.1.9.187 — загрузила настройки отчета для типового отчета «Анализ зарплаты по сотрудникам» — отчет работает.
Может быть вы как-то некорректно первый раз подгрузили настройки? Попробуйте еще раз — ради эксперимента.
Помогло, спасибо! ЗУП.3.1.9.187
(38) Замечательно!
(31)
Такая же ошибка. Когда загружаю настройки, то отчет формируется. Но при ручном создании, возвращает «Неопределено». Причем для того, чтобы загруженные настройки перестали работать, достаточно перезаписать пользовательское поле. Складывается впечатление, что ошибка в платформе или конфигурации. Как-то неправильно записывается пользовательское поле.
(40) Напишите, пожалуйста, версию вашей платформы и конфигурации.