Помощник анализа взаиморасчетов с контрагентами (предоплаты — постоплаты сч. 60 и 62) для конфигурации «Бухгалтерия Предприятия»




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

37 Comments

  1. director04

    Пока работает только для настройки конфигурации «Ведение взаиморасчетов с контрагентами «дополнительно по документам расчетов»»…..

    Reply
  2. director04

    Теперь работает и с двумя субконто на счете 60 (без документов расчетов).

    Очень жду ваших замечаний и… жалоб на ошибки. Буду оперативно исправлять.

    Reply
  3. bmnt

    Вообще неплохо было-бы файлы объедининить в 1 архив по известной всем причине

    Reply
  4. director04

    (3) По правилам форума при этом теряются все бонусы. К чему? Они в свое время заработаны за дело….. )))). Для вновь скачавших поясняю: Второй файл (Помощник) содержит в своем составе и первый.

    Reply
  5. e.kogan

    Автору: кроме расшифровки отчётами, сделайте, пожалуйста, открытие текущего значения.

    Reply
  6. e.kogan

    И ещё: там, где описание ошибки пусто — пусть пользователь сам догадается?

    Reply
  7. director04

    (5)Блин, хотя бы один плюсик поставил…. А уже требует.

    Reply
  8. e.kogan

    (7) Если вы не заметили, я:

    а) женского пола

    б) не «требую», а прошу и задаю вопросы.

    Reply
  9. director04

    (6) — скринШот прислать можно? hotel_ur@mail.ru

    Reply
  10. e.kogan

    (8) Выслала.

    Reply
  11. director04

    (9) Ну если женского (хотя я феминист) , то сделаю….

    Reply
  12. director04

    (6) Исправлено. Вроде бы…. ))))) А почему, скриншот без фото?

    Reply
  13. e.kogan

    (12) Что было, то и осталось, если вы имеете в виду Помощник.

    Reply
  14. director04

    (13) Без вашей базы видимо не обойтись

    Reply
  15. e.kogan

    (14) В таком случае сама разберусь.

    Reply
  16. director04

    (5) — сделано

    Reply
  17. e.kogan

    (16) Спасибо. Теперь буду смотреть пустые комментарии.

    Reply
  18. director04

    (17) Жду ваш резюме по ошибке в коментарии….

    Reply
  19. rasswet

    (17) чем закончилось? не понял пофиксено Ваше предложение или нет?

    Reply
  20. e.kogan

    (19) Пока занимаюсь другим, времени не было.

    Reply
  21. director04

    (19) У меня не воспроизводится….

    Reply
  22. tines

    Задумка хорошая, для проверки реализации и тестирования (если это нужно) прошу скинуть помошника на майл tines@mail.ru

    Премного благодарен

    Reply
  23. tili

    Обработка очень полезная как для аудитора так и для бухгалтера. Спасибо Автору.

    Reply
  24. gutentag

    (23) присоединяюсь к указанному выше отзыву.



    …только смотреть обработку буду после отпуска

    Reply
  25. director04

    Оптимизирован алгоритм перепроведения документов: удален отбор по 3-му субконто (документы расчетов) на счетах расчетов с контрагентами.

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

    Reply
  26. bearcat

    Очень нужная обработка, завтра попробую…

    Ставлю плюс за саму идею.

    В бух 7.7 штатный программист сделал очень хорошую обработку «Сверка счетов», в ней можно было сверить и с-до начальное и обороты и с-до конечное по 62.1 с 62.2 , 60.1 с 60.2, и главное сумму 62.2 *18/118 с суммой на 76.АВ.

    Сечас новая работа, новая программа 1С 8.1, я ее знаю плохо и пока что часами сижу и визуально сверяю 62.02 и 62.01 , да еще смотрю, через сколько дней (5 или более) отгрузка , а значит и зачет Д 62.02 К 62.01, чтобы знать делать или не делать счет-фактуру на аванс.

    Подскажите, есть ли для 8.1 обработка для сверки 62.02 с 76.АВ.

    И обработка, которая сама считает прошло 5 дней с даты аванса до отгрузки или нет. Например, выписка от 01.12.09, бухгалтер ждет 5 дней, затем на основании платежного поручения входящего делает «ввести счф на аванс», а программа ему , если была уже за эти 5 дней отгрузка не даст ввести такой счф, сообщив, что уже есть отгрузка номер ? от 04.12.09.

    Вот было бы здорово!!!

    Reply
  27. director04

    (26)Ну данная обработка не только показывает ошибочно сформированные сальдо, но и активно (самостоятельно) исправляет их.

    Что касается «отслеживания» 5 дней с момента оплаты для учета НДС: в программе имеется прекрасный помощник по учету НДС, и обработка по формированию счетов-фактур на авансы. При этом, существует возможность гибкой настройки: формировать счета — фактуры на аванс в течение 5 дней или не формировать (если аванс закрыт до конца учетного периода). Так что рекомендую просто сходить на курсы по Конфигурации Бухгалтерия Предприятия. Но учиться скорее всего нужно будет после нового года — выходит Бухгалтерия 2.0.

    По поводу дальнейшего развития функционала моей разработки: можно конечно анализировать сальдовку на счетах 60 62 и 76. Но некоторая трудность заключается в наличии валютных остатков. Я с этими счетами неработал. Если найдется грамотный (подчеркиваю еще раз слово ГРАМОТНЫЙ) постановщик задачи, то тогда доработаю и это функционал…

    Желаю удачи.

    Reply
  28. bearcat

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

    и другие тонкости 1С 8

    Как раз сегодня была на едином семинаре 1С БИТ, чтобы поучиться , заодно купила книгу Д.Чистов С. Харитонов «Хоз операции в 1С: Бух 8 Задачи, решения, результаты»

    Reply
  29. Elnek

    (27) как я Вас понимаю!!! в связи с тем, что в 1С часто формируются ошибочные данные, я также веду учет в формате Excel авансам полученным + 5 дней = счф на аванс (менее 5 дней нет счф на аванс), зачет аванса при отгрузке.

    (26) «При этом, существует возможность гибкой настройки: формировать счета — фактуры на аванс в течение 5 дней или не формировать (если аванс закрыт до конца учетного периода).»

    В теории возможность существует.

    Но при том, что в нашей 1С настройках стоит «не регистрировать счета-фактуры на авансы, зачтенные в течение 5 дней», программа неправильно понимает эту фразу в случае частичного зачета:

    1. если есть аванс 01.04.2010 сумма 100 000 руб , отгрузка 15.04.2010 на всю сумму 100 000 руб, то хотя аванс закрыт до конца налогового периода, 1С правильно в этом случае создает счет-фактуру на аванс в сумме 100 000 руб., а потом при отгрузке, как положено , в книге покупок будет зачет НДС

    2. если есть аванс 01.04.2010 сумма 100 000 руб , отгрузка 15.04.2010 на сумму 40 000 руб, то в этом случае 1С создает счет-фактуру на аванс только на сумму НЕЗАКРЫТЫТОГО АВАНСА на конец периода, то есть на сумму 60 000 руб. ЭТО НЕПРАВИЛЬНО. ТАК ДЕЛАТЬ НЕЛЬЗЯ, могут быть претензии налорганов. СЧЕТ-ФАКТУРА на аванс ДОЛЖЕН БЫТЬ НА ВСЮ СУММУ 100 000 РУБ, ПОТОМУ ЧТО ОТГРУЗКА ПОЗЖЕ 5 ДНЕЙ, а в момент отгрузки должен быть зачет аванса на 40 000 руб.

    Вот я вручную исправляю такие «косяки» 1С и , конечно, «незлым тихим словом» вспоминаю при этом разработчиков 1С.

    За Вашу разработку, конечно, плюс.

    Reply
  30. director04

    (29)

    Вот я вручную исправляю такие «косяки» 1С и , конечно, «незлым тихим словом» вспоминаю при этом разработчиков 1С.

    Я бы советовал поступать более продуктивно — сотрудничать с разработчиками. Нужна обязательная обратная связь. Поверьте, в группе разработчиков БП собрались вполне вменяемые и позитивные люди. Озвучте проблему (на форуме разработчиков или через ХотЛайн) и будете непременно услышаны.

    За Вашу разработку, конечно, плюс

    Если честно и объективно, то я не очень доволен этой своей работой. В частности: я сперва не понял, что для рядового пользователя методика работы с этой обработкой не вполне понятна и очевидна. Во-вторых, имеется пара очень принципиальных ошибок, которые сильно снижают ее эффективность.

    Поэтому готовится к выходу версия помощника 2.0 для конфигураций БП КОРП (и всех ее производных).

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

    Reply
  31. yan69

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

    Reply
  32. husky

    на УПП будет работать?

    Reply
  33. director04

    (32) Не знаю, не пробовал. Кто-то по-моему писал, что дорабатывал. Почитайте в постах. Стоит ли? На новой редакции все равно работать не будет. Посмотрите лучше Анимированный помощник для редакции 2.0

    Reply
  34. firevii

    Возможно ли использование в УПП 1.2.38.11 ?

    Reply
  35. director04

    (34) В УПП не проверялось. Есть платная разработка: http://infostart.ru/public/80171/, ее готов попробовать доточить (если будет ваше желание)

    Reply
  36. vladi2@inbox.ru

    При запуске «ПомощникПоПроверкеВзаиморасчетовСКонтрагентами_8_2» выдает ошибку «{Форма.Форма.Форма(453)}: Поле объекта не обнаружено (НДСНалоговыйПериод)

    ПериодичностьПериодаРегистрации = ?(ОшибкаПолученияУчетнойПолитики,?(ПериодРегистрации<‘20080101’,Перечисления.Периодичность.Месяц,Перечисления.Периодичность.Квартал),УчетнаяПолитика.НДСНалоговыйПериод);»

    Открывал через 1С:Предприятие 8.2 (8.2.19.83), редакция 2.0 (2.0.64.39)

    Reply
  37. Felix1

    Подскажите а для 3.0 бухгалтерия, где можно найти обработку ?

    Reply

Leave a Comment

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