Сводный акт сверки с расшифровкой по контрагенту, договору, документу, номенклатуре.




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

33 Comments

  1. ZNW

    По части контрагентов в расшифровку попадают только суммы оплат, ошибок не выводит

    Конфигурация: Управление производственным предприятием, редакция 1.2 (1.2.19.1) 8.1 (8.1.14.72)

    Reply
  2. warrior1985

    Спасибо за отзыв. Сегодня сам попробую на УПП (хочется довести детище до ума).

    Reply
  3. rayson

    в расшифровку заполняет лишь оплаты, продажи только сумма — без Название Кол-во Цена с НДС — строки с продажами не формирует

    УТ 10.3

    Reply
  4. gulakmadam

    а для 1С:Бухгалтерия предприятия, 1.6 (1.6.22.4) 8.1 (8.1.15.14)

    будет??? ❓ ❓ Ну пожалуйста! ❗ ❗ 🙂 🙂 😳 😳

    Reply
  5. rayson

    ….космическая тишина

    Reply
  6. warrior1985

    Для УТ не пробывал, но можно. Протестю отпишусь.

    Reply
  7. rayson

    спасибо

    ждем…

    Reply
  8. gulakmadam

    мой вопрос не напечатался? или это молчаливый ответ «НЕТ» 😉

    Reply
  9. warrior1985

    Это ответ «НЕТ».

    Reply
  10. warrior1985

    Для тех у кого не выводиться номенклатура, количество, цена с НДС!!!

    При формировании отчета используются регистры ПРОДАЖИ,ЗАКУПКИ — значит в документах прихода, расхода ОБЯЗАТЕЛЬНО должен быть признак «Упр. учет».

    Если все равно не выводится — сообщите мне пожалуйста подробнее (хотя бы какими документами вноситься в базу информация).

    Reply
  11. warrior1985

    Протестировано на УПП. Работает. Немного доработанная обработка выложена.

    Reply
  12. rayson

    в УТ без изменений

    по Регистр накопления «Продажи» как и Закупки все проводится, УУ разумеется стоит

    вводим Заказ поставщику — > ПТиУ; Заказ покупателя -> РТиУ

    более того бизнес смежный

    все доки как правило имеют одну строку в ТЧ товары (диз.топливо) почему и интересен подобный актотчет

    Reply
  13. odin_wolk

    НЕ ПЕРЕСЧИТЫВАЕТ ВАЛЮТУ 👿

    Reply
  14. warrior1985

    Обновил сегодня. Протестировал под УПП и УТ — доработал. Пишите, если что не так. Также доработаны мелочи — не выбранная организация, срабатывание без указания дат, освежена форма.

    Не затачивал под валюту. Спасибо. Постараюсь учесть.

    Reply
  15. rayson

    Отлично

    «Управление торговлей», редакция 10.3 (10.3.5.1) и цены и количество теперь выводит

    2 момента:

    — «ИТОГО отгружено» выводит количество первой поставки — не сумму за период

    — в детальном акте сверки есть волшебный значек «Отмылить» кот.создает письмо с вложенным актом — возможно ли в этом создаваемом письме автоматически поставить эл.почту контра

    Большое спасибо за доработки

    Reply
  16. warrior1985

    С отмылить посмотрю, ок. А с итого отгружено/поставлено я напортачил — выводит по последнему договору — исправлю отпишусь.

    Reply
  17. rayson

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

    очень ждем …

    Reply
  18. gulakmadam

    (9) что так принципиально?

    Reply
  19. gulakmadam

    (9) или просто не умеете? 😉

    Reply
  20. warrior1985

    Уважаемая, gulakmadam. Просто это будет совсем другой отчет (с точки зрения программиста) — тем более начинающего, как я. Планы делать для Бухгалтерии 8 такой отчет у меня полностью отсутствуют. Это более управленческий отчет, чем бухгалтерский — в том виде в каком он реализован мной. Поэтому, если есть у предприятия потребность в получении управленческих данных и адекватное восприятие мира — то такое предприятие не будет использовать для этого программу Бухгалтерия 8.

    Reply
  21. БорисН

    В детальном отчете не печатается номер п/п. Так и должно быть?

    Строка из отчета: Опл. Б/Н (расх.) п/п № от 16.08.2010

    Reply
  22. Mar-ka

    Не работает в 1с81 для Казахстана выдает сообщение:

    Ошибка при вызове метода контекста(выполнить):{(14.2)}:Таблица не найдена

    «РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты»

    <<?>>РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&Начдата,&КонДата,Период.Организация=&Организация)КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты

    Reply
  23. Mar-ka

    Подробно

    {ВнешняяОбработка.АктСверкиСводный(47)}: Ошибка при вызове метода контекста (Выполнить): {(14, 2)}: Таблица не найдена «РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты»

    <<?>>РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&НачДата, &КонДата, Период, , Организация = &Организация) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты

    по причине:

    {(14, 2)}: Таблица не найдена «РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты»

    <<?>>РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&НачДат

    Reply
  24. v-s

    обработка замечательная, только, похоже, в отчет не попадают движения по дт76

    Reply
  25. warrior1985

    Отчет по регистру «ВзаиморасчетыСКонтрагентами», так что если документ не делает движения по нему то увы…

    Reply
  26. Katerina_M

    А как с возможностью отбора 1 контрагента и несколько договоров на выбор?

    Reply
  27. kirillsas

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

    Reply
  28. pvlunegov

    Я сконвектировал ваш отчет для 1С 8.2.

    Запустил под 1С 8.2 УТ.

    На закладке «Детальная» не выводится никакой информации…

    Почему так?

    Спрашиваю, потому что код запарролен, так бы сам поразбирался…

    Возможно и хорош ваш отчет, но не видно, чтобы он подробную информацию выводил.

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

    конфигурации и Тупости пользователя.

    На данный момент отчет совершенно бесполезен.

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

    Автору незачет!

    Reply
  29. ponaroshku

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

    или в лс

    Reply
  30. warrior1985

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

    Reply
  31. mari0210

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

    Reply
  32. Светлый ум

    Вобщем — лажа, нет отбора по:

    1) Контрагентам

    2) Договорам

    -1

    Reply
  33. wwizard

    УТ — Супер. Работает. День мучений и поиска подобного, напряг програмиста — чтоб писал, и тут… Нашел. СПАСИБО!!!

    Правда на некоторых контрагентах, пишет такое, как на картинке. Непонимаю что в них не так?

    Reply

Leave a Comment

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