Закрытие долгов. ЗКГУ 3.1, ЗУП 3.1




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

51 Comments

  1. UFOPITER

    Спасибо! Задолженности «ушли». Делала перенос на конец 2015 года.

    Reply
  2. GeterX

    Обработке цены бы не было, если бы закрывала еще и регистры по НДФЛ.

    Reply
  3. ccserg

    (2)какие ? могу добавить

    Reply
  4. uchet

    (3) Регистр «Расчеты налогоплательщика с бюджетом по НДФЛ» закрыть в ноль ОЧЕНЬ нужно.

    И еще вопрос: закроет ли Ваша обработка «развернутый» остаток по регистру «Взаиморасчеты с сотрудниками» если, к примеру, по одной статье финансирования +100, а по другой -100 ???

    Reply
  5. ccserg

    (4)добавил этот регистр ,

    если что то не так будет , пишите

    на вопрос : Да .Закрывает в разрезе по статьям

    Reply
  6. favia

    Здравствуйте! Мы закрываем долги через начальную задолженность по зарплате, раньше делали через перенос данных (два регистра: взаимозарасчеты с сотрудниками и зарплата к выплате). через документ этот удобнее, т.к. по нужным регистрам проводит сам и подразделение по выбранному сотруднику сам проставляет, заполняем сумму и статью 🙂

    Reply
  7. ccserg

    (6) у меня ничего сам не заполняет ,

    и выбирать вручную надо ,

    какой там секрет ?

    Reply
  8. favia

    (7) Секрета нет ) может разница в версии у нас сейчас 3.1.2.105. При выборе сотрудника из списка, подразделение встает текущее. Потом если нужно уже корректируем.

    Reply
  9. ccserg

    (8)аа , подразделение только )) плохо прочитал

    Reply
  10. kyts

    для 3.1 эта обработка подойдет?

    Reply
  11. ccserg

    должна работать

    (10)

    Reply
  12. MashaX

    Сергей, здравствуйте!

    Буду проверять обработку завтра. Работу в ЗКГУ 3 начали с 01.01.17, данные перенесли из 7.7 из 2015 — 2016. Подскажите, пожалуйста, как лучше: закрывать долги на начало каждого месяца (так делали в «единице») или можно только на 01.01.17?

    Reply
  13. ccserg

    (12)

    долги достаточно один раз закрыть , на начало года

    сделайте сохраненку перед закрытием

    Reply
  14. Dim4ik

    Для ЗУП 3.1 не подойдет?

    Reply
  15. ccserg

    (14)должна работать

    Reply
  16. 27272

    (6)

    Здравствуйте! Мы закрываем долги через начальную задолженность по зарплате, раньше делали через перенос данных (два регистра: взаимозарасчеты с сотрудниками и зарплата к выплате). через документ этот удобнее, т.к. по нужным регистрам проводит сам и подразделение по выбранному сотруднику сам проставляет, заполняем сумму и статью 🙂

    Подскажите, а как быть если сальдо +/- по подразделениям? Например по АУП 7000, по сторожам -5000. В анализ зарплаты по сотрудникам встаёт одна строка АУП 2000

    Reply
  17. 27272

    (16) Вроде разобрался, в отчёте по-умолчанию подразделение (на конец). Заменил на подразделение — стало красиво

    Reply
  18. MBM89

    (15) Добавьте пожалуйста в обработку запись лога в журнал регистрации или подскажите как это сделать?!

    Reply
  19. ccserg

    (18) ок , подумаю , добавлю если возможно , отпишусь

    Reply
  20. ccserg

    (18)добавил

    код такой :

    ЗаписьЖурналаРегистрации(«Закрытие долгов»,

    УровеньЖурналаРегистрации.Информация,

    Метаданные.Документы.ПереносДанных,

    Док.Ссылка,

    «Закрытие долгов внешней обработкой»,

    );

    Reply
  21. Elena7

    (6)

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

    А в следующем, месяце суммы опять появляются.

    Reply
  22. infosoft

    Обработка немного некорректно закрывает, период возникновения взаиморасчетов , нужно записывать тот в котором возникла проблемы, потом ведомость на выплату не корректно отрабатывает, если были возвраты ндфл

    Reply
  23. ccserg

    (22) не понятно в чем некорректность

    Reply
  24. tena

    Добрый день. Подскажите, пожалуйста, с чем может быть связано, что после обнуления взаиморасчетов обработкой, в ведомость на выплату з/пл предыдущие (не выплаченные) месяца все равно попадают.

    Скины прилагаю

    Reply
  25. ccserg

    (24)

    в документе Перенос данных попробуйте изменить даты на 31.12.2017

    или закрыть долги заново с этой датой

    Reply
  26. tena

    (25) закрыть с новой датой не помогает, в док-те проставляется 01.12.17, если вручную исправить на 31.12.17, то при записи изменяется на 01.12.17

    Reply
  27. ccserg

    (26)

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

    вообще так сложно понять откуда долг идёт

    Reply
  28. tena

    (27) это уже 150ый вариант, что только не пробовали. В этом варианте да, декабрь начислен. Просто подумали, может обработка именно в конце года обнуляет остатки.

    Если закрывать на декабрь, то в выплате картина такая же, только вместо декабря ноябрь(

    Reply
  29. ccserg

    (28) я бы разобрался , но надо базу видеть

    Reply
  30. tena

    (29) залью на файлообменник, скину в личку ссылку

    Спасибо!

    Reply
  31. tena

    Теперь все работает, большое спасибо!!!

    Reply
  32. Жискар

    Применил на 1С:Зарплата и кадры образовательной организации, редакция 3.1 (3.1.2.494).

    Сделана на основе ЗКГУ.

    К сожалению чуда не произошло. Никакого документа не создано.

    4 организации. Лезет всякая грязь из прошлого в самые неожиданные моменты. Борюсь с переменным успехом. Руками заполняю регистры накопления. Думаю, в этой жизни не закончу.

    Может посмотрите на мою базу?

    Спасибо.

    Reply
  33. ccserg

    (33)

    ошибки пишет?

    документ там не мог не создастся …

    можете прислать базу ,в личку

    Reply
  34. ccserg

    (33)

    1-проверьте наличие документа

    2- попробуйте закрыть долги концом года 31.12.2017

    Reply
  35. Жискар

    Ошибок нет, Документа тоже нет.

    Как прислать базу не вижу.

    Reply
  36. Жискар

    Классная обработка. Сегодня применил её в организации. Пока не убили.

    Сергей, спасибо тебе огромное.

    Reply
  37. brvg

    Добрый день.А можно чтобы закрывалось и Бухгалтерское сальдо в регистре накопления Бухгалтерские взаиморасчеты с сотрудникам??

    Reply
  38. kosta2013

    Скачал. На форме обработки нет флажка закрытия Бухгалтерские взаимозачеты с сотрудниками.

    Reply
  39. Жискар

    Прекрасная обработка, очень полезная, регулярно пользуюсь.

    Когда есть несколько источников финансирования и сотрудник принят-уволен несколько раз, остаётся много грязи. Часто по физическому лицу итог = 0, а по источникам финансирования, подразделениям и сотрудникам целый букет долгов. Все должны всем.

    Просьба – предложение. Добавить возможность закрывать долги по физ. лицу (или списку). Пользователь выбирает физ. лицо, а обработка закрывает его во всех его проявлениях ().

    Сейчас руками удаляю лишних.

    Спасибо.

    Reply
  40. ccserg

    Добавил отбор по ФИзлицу

    (40)

    Reply
  41. Жискар

    Спасибо. Теперь я могу лечить одного человечка.

    Reply
  42. Kruzo

    Очень нужная обработка для восстановления базы. Может быть у вас есть планы и для БП 3.0 такую же сделать? Регистры те же. Может попробуете?

    Reply
  43. ccserg

    (43) закрытие долгов вы имеете ввиду ?

    Reply
  44. Irina_Grin

    Сергей, добрый день!

    У меня нет подписки на инфостарт, возможно как-то приобрести вашу обработку?

    Reply
  45. EZENAZ

    спасибо автору, нужная обработка, здорово помогла!

    Reply
  46. AndreyP63

    Кто нибудь знает em@il автора ? оч нужно

    Reply
  47. ccserg

    (47)в личку пишите

    Reply
  48. AndreyP63

    В личку не даёт писать (((

    Reply
  49. ukkonen

    Автор, напиши, пожалуйста в личку. Не могу тебе сообщение отправить

    Reply
  50. Nalis

    Есть вопросы по обработке???topgeer$yandex.ru

    Reply
  51. user1024932

    Добрый день. Нужна такая обработка. Сергей а можно ее как-нибудь приобрести? Нет подписки на инфостарте(

    Reply

Leave a Comment

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