Акт сверки взаиморасчетов для 1С:Розница 2.2 / 2.1 / 2.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='\

20 Comments

  1. suvolod

    Проверено: отчет совместим с рарусовской конфигурацией Розница 8. Магазин одежды и обуви, редакция 2.1 (2.1.8.16)

    Reply
  2. suvolod

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

    Reply
  3. vadim-d

    в акт сверки не попадает наличная оплата. розница 2.2.4.25

    Reply
  4. suvolod

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

    Reply
  5. IgorQ

    День добрый, документ «Реализация товаров» входит в обработку? Объясню, у меня есть контрагент он и поставщик, и покупатель, в акт сверки входит только поступление, а реализация почему то нет. Как быть?

    Reply
  6. suvolod

    Не входит, потому-что документ «Реализация товара» не делает движения по регистру «РасчетыСПоставщиками» (а отчет построен именно по данным этого регистра). Увы, это ограничения самой Розницы.. разработчики не посчитали нужным (а может обрезали намеренно) возможность ведения взаиморасчетов по покупателям. Если все-таки этот функционал нужен, можете написать в личку.. могу под вас доработать.

    Reply
  7. operKOT

    А почему не заполняется правая часть Акта — «по данным поставщика» ?

    Reply
  8. rickyt

    Есть возможность отдельно по магазинам его формировать или только в рамках общих юр лиц?

    Reply
  9. user833938

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

    Reply
  10. firml

    Здравствуйте Юрий!

    1С:Предприятие 8.3 (8.3.10.2561), Розница, редакция 2.2 (2.2.6.30)

    Все отлично работает, НО только по одной организации… с недавнего времени ведем две организации: ИП и ООО, в одной программе, а поставщик у них общий, по ООО отчет формируется, а по ИП пустой ((( Подскажите пожалуйста, в чем может быть причина? Можете устранить?

    Reply
  11. suvolod

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

    Reply
  12. suvolod

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

    Reply
  13. suvolod

    (8)

    о формировать или только в рамках общих юр лиц?

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

    Reply
  14. Igor981

    Здравствуйте.

    в розница МБТСС Магазин бытовой техники и средств связи, отчет формируется пустой… документы поступления есть, реализации есть, платежки ПКО и РКО тоже есть… по всем покупателям, поставщикам так…

    что может быть не так?

    Reply
  15. dimmat

    Добрый вечер!

    Поставил на 2.2.6.33 все работает. Можно ли допилить фильтр по магазину и по кассе?

    Благодарю!

    Reply
  16. MariP

    Непонятные ошибки в форме.

    Обрезаются наименования документов. Суммы без копеек.

    Reply
  17. ssn5810

    Формирует пустой отчет долги есть по Реализации и по Поступлению ЧТО не ТАК ????

    Reply
  18. ssn5810

    У Вас Акт сверки взаиморасчетов с ПОСТАВЩИКАМИ. Так и назовите, чего народ путаете ???

    Reply
  19. suvolod

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

    Reply
  20. THEBESTolo4b

    Пустой отчет выходит

    Reply

Leave a Comment

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