Отчет по продажам поставщика




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

26 Comments

  1. r.resh39

    Спасибо. Отличный отчет: удобный и крайне полезный.

    Reply
  2. 342300

    Здравствуйте, подскажите пожалуйста что сделать чтобы отчет по продажам поставщика заработал на 1С:Предприятие 8.2 (8.2.18.61) «Управление торговлей для Украины», редакция 2.3.

    Спасибо.

    Reply
  3. Temniy

    (2) 342300, Отчет предназначен для конфигурации 1С: Розница редакции 2

    Reply
  4. bvk1

    Для Розницы 1.0 нет такого отчета?

    Reply
  5. Temniy

    Нет для розницы 1 такого отчета нет

    Reply
  6. arsen81

    Добрый день! Отчет можно формировать без указания конкретного поставщика?

    Reply
  7. Temniy

    (6) arsen81,

    Добрый! нет нельзя надо допиливать

    Reply
  8. SerSinelnik

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

    Т.е. завышает обороты.

    Для такого отчета (Отчет по продажам Поставщика) — это критично!

    Зря потратился.

    Reply
  9. user676977_slkruto

    Добрый день!

    Есть возможность по нескольним поставщикам формировать отчет?

    Reply
  10. Temniy

    (9)Прошу прощения, но я не помню.

    Reply
  11. Temniy

    Нет нельзя по нескольким — надо допиливать

    Reply
  12. fenixland

    Добрый день подскажите пожалуйста, отчет некорректно отображает суммы начального и конечного остатка.

    1С:Предприятие 8.3 (8.3.9.2170)

    Розница, редакция 2.2 (2.2.5.22)

    Reply
  13. Temniy

    к сожалению не помогу. Надо смотреть Вашу базу.

    (12)

    Reply
  14. r.resh39

    (12) Дмитрий, добрый вечер. Посмотрел скриншот, не понял в чём ошибка. По кол-ву всё сходится вроде. Или вопрос в суммах?

    Вы недавно обновились и появилась ошибка или впервые воспользовались отчетом уже на этом релизе и обнаружили замечания?

    Reply
  15. andrius2006

    Добрый день. Подскажите пожалуйста, будет ли работать данный отчет в 1С Розница 2.2.6.18?

    Reply
  16. Чужой

    (14) Суммы считает некорректно. Даже на вашем скриншоте это видно. Например строка № 4. На начало 712 приход 542 расход 813 на конец опять 712. Согласитесь, математика не идет.

    Reply
  17. held88

    А ничего похожего в Рознице 2 среди стандартных отчетов нет?

    Reply
  18. Temniy

    (16)Да где- то ошибка

    Reply
  19. user858803

    человек бросил своё детище

    Reply
  20. shyurik

    Появился сервис «1С-Товары»: http://rozn.info/

    «1С-Товары. Каталог товаров»

    Включает в себя загрузку каталога товаров со штрихкодами в программу 1С из каталога «1С-Товары».

    Предоставляется бесплатно на один год. Есть ограничение в 6 000 скачанных карточек (для пользователей с лицензией «Автозаказ» или «Аналитика продаж» — это ограничение увеличено до 20 000).

    «1С-Товары». Автозаказ для магазина

    Загрузка каталога товаров со штрихкодами в программу 1С.

    Контроль товарных остатков и автоматический заказ товаров.

    Стоимость: 1 000 руб. в месяц за один подключенный магазин.

    «1С-Товары». Аналитика продаж для магазина

    Загрузка каталога товаров со штрихкодами в программу 1С.

    Анализ работы розничного магазина или сети магазинов.

    Стоимость: 1 000 руб. в месяц за один подключенный магазин.

    Reply
  21. user818648

    Отчет не учитывает ХАРАКТЕРИСТИКИ товаров (веса, размер и прочее) ???

    Можно ли произвести разбивку по номенклатурным группам (товарным группам) ???

    Спасибо.

    Reply
  22. user694793_cloudia4

    (3)Доброго времени суток. Можете ли доработать Ваш отчет для УТ 11.4?

    Reply
  23. Temniy

    (22) ДА можно. Но это платно по стоимости в личку

    Reply
  24. dbolotin

    (12) Добрый Вечер! Не ждите от этого отчета формирования сумм начального и конечного остатков. Сумма начального остатка рассчитывается из данных регистра закупки. Аналогично рассчитывается иэ этого регистра сумма конечного остатка. Сумма расхода рассчитывается из данных регистра продажи.

    Reply
  25. dbolotin

    (16) Здесь математика не работает. Здесь такая логика работы этого отчета.

    Reply
  26. Axe

    нужен такой же отчет для УТ 11.4 кто-нибудь встречал на просторах ?

    Reply

Leave a Comment

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