[БП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='\

57 Comments

  1. Mamakan

    Файл не найден или был удален ?

    Reply
  2. Alex_E

    (1) Mamakan, И правда файла не было — залил по новой.

    Reply
  3. Dvornik

    Отличная штука, спасибо, очень пригодилось! Обычная форма, для того чтобы обработка работала и в бухгалтерии 2?

    Reply
  4. Alex_E

    (3) Dvornik, Обычная форма — это из исходной обработки http://infostart.ru/public/114979/. Можно сделать чтобы и там и там работала одна обработка (в смысле и в 2.0 и в 3.0), только стало жалко времени, а форму не удалил, может будет досуг — сделаю.

    Reply
  5. Spektr

    Бухгалтерия предприятия, редакция 3.0 (3.0.39.51) (http://v8.1c.ru/buhv8/)

    Copyright (С) ООО «1C», 2009 — 2015. Все права защищены

    (http://www.1c.ru)

    При попытке печати ошибка: «Индекс находится за границами массива»

    Виноват, не выбрал шаблон печатной формы.

    Reply
  6. Alex_E

    (5) Spektr, Я уж испугался 🙂

    Reply
  7. qasdfrg

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

    Reply
  8. Alex_E

    (7) qasdfrg, Честно говоря причину искать сейчас некогда, но использовать встроенную в обработку печать вовсе необязательно, можно просто открыть список актов сверки штатно, выделить нужные и распечатать оттуда… Интересно, а там какой порядок получится?

    Reply
  9. disla

    при запуске под правами бухгалтера выдаёт ошибку, что нет прав доступа к «Плану обмена. Розница, редакция 1.0». БУХ 3.0.43.52, платформа 8.3.6.2390

    при запуске под правами администратора такой ошибки нет, акты создаются нормально.

    Reply
  10. Alex_E

    (9) disla, В сведениях о обработке нужно поставить безопасный режим — Ложь…будет время выложи такую версию — сейчас нет возможности

    Reply
  11. Alex_E

    (9) disla, Выложил новую версию (спасибо за сообщение, если нужно — пришлю на почту, пишите в личку)

    Reply
  12. automatizator

    Хорошо бы отбор по списку контрагентов. А так — плюс.

    Reply
  13. Alex_E

    (12) automatizator, Реализовать список можно, времени сейчас нету…

    Reply
  14. nataly109

    и как сформировать акт сверки только по контрагентам у которых остатки по счету 62

    Reply
  15. Alex_E

    (14) В этой обработке нет отбора по счетам. Если овпрос про документ, то в нём есть закладка «Счета учета расчетов» , где можно оставить только галку 62 счета…

    Reply
  16. nataly109

    Почему попадает только одна организация, напишите инструкцию как ей пользоваться

    Reply
  17. Alex_E

    (16) Попадает организация, выбранная в форме, состав реквизитов формы повторяет состав реквизитов документа, что ещё написать в качестве инструкции даже не знаю….

    Reply
  18. nataly109

    в обработке нет счетов учета, про какой документ вы пишите, как его заполнять вообще не понятно, у меня автоматом попала только одна организация

    Reply
  19. nataly109

    Контрагенты как автоматом попадают в этот документ, вы же пишите это это групповая обработка

    Reply
  20. nataly109

    обработку как загружать в 1с?

    Reply
  21. Alex_E

    (19) Даже странно, я Вам отвечаю, но такое ощущение, что ответы Вы не читаете

    (14) В этой обработке нет отбора по счетам.
    про какой документ вы пишите

    про документ — Акт сверки взиморасчетов, потому что я не понял Ваш вопрос

    и как сформировать акт сверки только по контрагентам у которых остатки по счету 62

    — акт сверки — единственное число, и подумал Вы спрашиваете про документ…

    Контрагенты как автоматом попадают в этот документ, вы же пишите это это групповая обработка

    — контрагенты попаают из бухгалтерских оборотов и итогов, если задать дополнительный отбор в поле «Контрагент», выбрав там группу — то заполнятся документы будут только по контрагентам этой группы.

    И да — обработка групповая)))))

    Reply
  22. nataly109

    у меня не заполняется акт сверки, напишите как его загрузить может я не правильно его открыла

    Reply
  23. Alex_E

    (20)

    обработку как загружать в 1с?

    — стандартно: Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки — Там Создать и Загрузить из файла.

    Reply
  24. Alex_E

    (19)

    Контрагенты как автоматом попадают в этот документ, вы же пишите это это групповая обработка

    — это не документ — это обработка, которая создает документа «Акт сверки……» группой — потому и групповая))))

    Давайте по порядку: более подробное описание есть по ссылке в публикации, т.к. это аналог обработки для БП 2.0 с точно таким же функционалом, Вы его читали?

    Reply
  25. nataly109

    ок, я по другому загружала файл открыть

    Reply
  26. Alex_E

    (25) Разницы нет, и так и так открывается одна и та же обработка….

    Reply
  27. nataly109

    Загрузила, сейчас где найти этот документ

    Reply
  28. Alex_E

    (27) Ещё раз — ЭТО НЕ ДОКУМЕНТ — это обработка, которая предназначена для создания документов. При подключении её в дополнительные Вы сами должны указать в каком разделе она будет доступна, и пользователей, которым она будет доступна.

    Reply
  29. nataly109

    нашла документ

    Reply
  30. nataly109

    (28) а вы можете доработать чтобы формировалось только у кого есть остатки по счетам

    Reply
  31. Alex_E

    (30) Поясните, разве сейчас не так формируется?

    Reply
  32. Alex_E

    Всех с прошедшими, и Наступающим!!!

    Наступил новый год, народу срочно занадобились акты сверки…

    Выложил новую версию обработки группового создания актов сверки, в которой реализовал некоторые хотелки из обсуждения, убрал модальность, пропущенную ранее в вызове выбора списка печатных форм, добавил возможность печати не всех созданных документов, а только тех, в которых зафиксирована задолженность.

    Reply
  33. user872972

    Скачали Вашу обработку, все ОК. Нельзя ли реализовать возможность печати таблицы с контрагентами и остатками (либо сохранения в Excel с числовым форматом данных)?

    Reply
  34. Alex_E

    (34) Что имеется ввиду под

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

    ? Печать стандартно усеет сохранять отчет и отсылать по почте, или имеется ввиду список с самой обработке? Дайте пример, какой список Вы хотите видеть — сделать можно всё, если точно знать что делать)))))))))))).

    Reply
  35. Alex_E

    (34) Выложил новую версию с печатью свода.

    Reply
  36. user872972

    Спасибо! То, что нужно!

    Reply
  37. Alex_E

    (37) Пожалуйста!

    Reply
  38. Term22

    Подскажите, предусмотрено ли в этой обработке заполнение табличной части «По данным контрагента»? У меня заполняется только по данным организации.

    Reply
  39. Alex_E

    (39) Нет, не предусмотрено.

    Reply
  40. Term22

    (40) Жаль. Будем доделывать сами. Там же наверное аналогично заполнению первой таблицы.

    Reply
  41. Alex_E

    (41) Не думаю, что это проблема.

    Reply
  42. user839433

    Версия 3.0.2.1 не формирует акты сверки сводно по контрагенту, только раздельно по договорам.

    Reply
  43. Alex_E

    (43) Посмотрю — давно не обновлял — в БП много изменений. А не формирует как — ошибку выдаёт?

    Reply
  44. user839433

    (44)Прошу прощения, посмотрел код, разобрался, все ок.

    Reply
  45. Alex_E

    (45) Ну вот…всё нормально?

    Reply
  46. user839433

    (46)Да. Теперь не хватает групповой рассылки по e-mail))))

    Reply
  47. Alex_E

    (47) Будет досуг — нарисую, сейчас невпротык….

    Reply
  48. PtizaPtiza

    Скажите, а почему у меня не выходят сверки по филиалу? В договоре стоит основное предприятие.

    Reply
  49. Alex_E

    (49) Пишите в личку — могу посмотреть по АА…а так — информации в вопросе нет, я же не вижу, что Вы делаете, может Вы период выбрали прошлого века?

    Reply
  50. PtizaPtiza

    (50) У нас есть обособленное подразделение и головное предприятие, мы учет ведем по обособленному подразделению(филиалу) и я сверку хочу сделать по нему, но обработка не видит расчетов, хотя они есть.

    Reply
  51. Alex_E

    (51) У Вас КОРП? Дайте посмотреть, повторяю — мне отсюда не видно, что у Вас не получается….

    Reply
  52. PtizaPtiza

    (52) У нас КОРП. Программа не видит документы по филиалу, потому что все документы висят на договоре основного предприятия. Посмотреть по АА это как?

    Reply
  53. Alex_E

    Вы скачиваете программу ammyy admin, запускаете её, сообщаете мне я подключаюсь и смотрим. И да — писал на БП в КОРП не проверял…

    Reply
  54. PtizaPtiza

    (54) админы запрещают удаленку((( спасибо и на этом. буду другую искать

    Reply
  55. Alex_E

    (55) не за что…привет админам, а Вы попросите их посмотреть, раз по удалёнке нельзя))))

    Reply
  56. PtizaPtiza

    (56) Хорошо)))

    Reply
  57. pdimas

    Отличная обработка, возьму на заметку

    Reply

Leave a Comment

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