Акт сверки взаиморасчетов с контрагентами (для Бухгалтерии Предприятия 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='\

49 Comments

  1. kompas-dm

    Спасибо, прикручу для Украины

    Reply
  2. director04

    (1) Блин, вдвойне приятно… Первый раз меня «прикручивают» до Украины. Передайте привет Балаклаве, там есть оччень приятный дайв-клуб.

    Reply
  3. vandalsvq

    А почему на форме написано «Акт сверки взаиморесчетов»…. ??? исправь 😉

    Reply
  4. annak2980

    Для Украины поменяла в схеме компоновки названия счетов в фильтре

    по счетам, все работает.

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

    по счетам «Расчеты по кредитам и займам».

    Хороший отчетик, будем использовать, Спасибо автору.

    Reply
  5. director04

    (3) Сенькс

    Reply
  6. director04

    (4) Так опубликуйте свою доработку. Если будет ссылка на первоисточник — тогда никаких возражений. Сенькс.

    Reply
  7. Mazaloff

    (2)

    да какая там Балаклава, крым то практически независимый от Украины)))

    Reply
  8. Solo1

    спасибо, удобно.

    Reply
  9. director04

    (9) «Шапка и подвал с подписЯми..» находятся в штатном документе «Акт сверки взаиморасчетов». Данный отчет предназначен для получения оперативной информации по взаиморасчетам с группой контрагентов. Каким образом вы представляете формирование данного отчета по множеству договоров и контрагентов с формированием шапок и подписЕй? Да и для чего это нужно?

    Reply
  10. director04

    (13) Сенькс

    Reply
  11. director04

    (13) Поправлено уже давно, скриншот староват ))))

    Reply
  12. director04

    (12) Буду рад если подскажете каким отчетом для этого лучше пользоваться в ТИПОВОЙ конфигурации БП 1.6 (1.6.20.6).

    Я искал, но что-то не нашел.

    Reply
  13. vadolass

    Спасибо!!! Именно то,что искал!

    Reply
  14. director04

    (17) Пожалуйста. Всегда рад.

    Reply
  15. Mx00_rewind

    всё бы ничего, но нет начального и конечного сальдо… о каком анализе (заявленом в описании) можно говорить?

    Reply
  16. director04

    (19) Коды, впринципе, открыты… Мне этого было ненужно.

    Reply
  17. lion11

    Хороший отчет! Зачет!

    Только в редакции ред. 1.6.21.6 не работает — из конфигурации убрали функцию ТиповыеОтчеты.ЭтоПроизвольныйОтчет()

    У вас есть такая функция в модуле, а почти везде в ФормаНастройкиСтруктурыОтчета вызывается из общего модуля.

    Reply
  18. director04

    (21) Поправил.

    Reply
  19. lion11

    (22) Оперативно!

    Reply
  20. Rina~

    Спасибо! удобная и нужная штука!

    Reply
  21. pmmarina

    Какой же это АКТ?

    Хорошая штучка именно как отчет, но контрагенту такой акт не предъявить. Пришлось править в печатной форме.

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

    Reply
  22. Olegusp

    😥 как исправить ошибку? редакция 1.6.25.9

    {Форма.ФормаНастройкиСтруктурыОтчета(208)}: Метод объекта не обнаружен (ЭтоПроизвольныйОтчет)

    Если ТиповыеОтчеты.ЭтоПроизвольныйОтчет(ОтчетОбъект) Тогда

    Reply
  23. director04

    (26) Видимо у вас старая версия отчета (скачивали давно). Скачайте новую версию отчета, проблем быть не должно

    Reply
  24. Olegusp

    (27) Скачивал позавчера. скачал сейчас еще раз — тоже самое.

    15.11.2010 14:22 124747 byte АктСверкиДляБП.erf

    Можете подсказать какую функцию надо использовать вместо этой?

    Reply
  25. director04

    (28) Олег, я тоже скачал отчет только что. Все работает в типовом релизе. Вызывается экспортная процедура модуля отчета. Если у вас так и не получится, готов проверить на вашей базе данных. Можете выслать базу на мой персональный ящик. (мой майл вышлю вам по личке)

    Reply
  26. director04

    (29) Ошибка исправлена, можете пользовать. Спасибо за замечание

    Reply
  27. Olegusp

    Огромное спасибо! 🙂

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

    Reply
  28. Olegusp

    Валерий, еще побеспокою — есть ли возможность добавить расчет «Итого» для последней колонки «Конечный остаток»?

    Дабы видеть сумму для определенной выборки 🙂

    Reply
  29. director04

    (32) Я долго пыхтел над этим, так и не победил. 😥

    Reply
  30. nkorkin

    В файлах уже 2.0? Не могу запустить на 8.1.15. внешний отчет не может быть прочитан текущей версией программы

    Reply
  31. alexMorozov

    Присоединяюсь к nkorkin. 8.1.15 «Внешний отчет не может быть прочитан текущей версией программы». Будьте добры, выложите для 8.1, очень хочется плюсануть)))

    Reply
  32. sbv2005

    Также присоединяюсь: 8.1.15 «Внешний отчет не может быть прочитан текущей версией программы». Будьте добры, выложите для 8.1

    Reply
  33. gala2012

    Мне тоже нужен под 8.1!

    Reply
  34. nikk

    Спасибо! для Комплексной 8.2 подходит.

    Reply
  35. Stepan_1c

    платформа 1с 8.1.15.14

    БП 1.6.29.2

    почему же пишет «внешний отчет не может быть прочитан текущей версией программы» хотя написано у вас «для 1С: Предприятие 8.1». что я делаю не так?..

    Reply
  36. director04

    (39) Да, действительно, ранее отчет предназначался для версии платформы 8.1. Позднее файлы отчета были изменены (выложены под 8.2) , а описание не отредактировано.

    Спасибо за замечание. Поправил публикацию.

    Reply
  37. Stepan_1c

    а версию для 8.1 можете выслать мне? мыло = МойНик + «@mail.ru»

    Reply
  38. director04

    (41) К сожалению на 8.1 не работаю уже пару лет. Навряд ли что сохранилось…

    Reply
  39. gala2009

    акт не фонтан, форма не та

    Reply
  40. e.kogan

    (43) «не та» — а какая? там по идее либо унифицированная, либо произвольная

    Reply
  41. lady_lace@mail.ru

    спасибо для общего обозрения удобно

    Reply
  42. gala2009

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

    Reply
  43. director04

    (46) gala2009,

    Понятие «стыда» для каждого индивида — вещь достаточно индивидуальная. В данном случае — это скорее всего вопрос эстетического восприятия действительности )))))

    Когда разрабатывал отчет, не мог себе представить: как данный отчет представить в виде акта (с обоюдной подписью сторон). Ведь данный отчет (ВЕДОМОСТЬ- сказано в анотации) формируется по множеству контрагентов.

    Вы предлагаете, чтоб все эти контрагенты ставили внизу свои подписи? По -моему, многим при этом было бы «стыдно» ))))

    Прошу прощения за флуд…

    Reply
  44. e.kogan
  45. gala2009

    (48) e.kogan,

    спасибо за инв-17! но это не то, что хотелось бы в данный момент(ни разреза договоров, ни докуметов), но буду иметь ввиду, может быть пригодиться

    Reply
  46. gala2009

    (47)

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

    Reply
  47. amistad

    Добрый день не хватает money сбросьте на email amistad2012@mail.ru, буду очень признателен .

    Reply
  48. Cemen82

    Нужный отчет. Переконвертировал на 2,0. Интересно пойдет ли на 3,0

    Reply
  49. SamJack

    Спасибо, взял за основу для разработки под Управляемые формы

    Reply

Leave a Comment

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