Анализ продаж (по группам) для "Торговля и склад 9.2"




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

22 Comments

  1. спосибо за предоставленную программу

    Reply
  2. Veterok

    спасибо

    Reply
  3. wolfsoft

    Вам спасибо за отзывы 🙂

    Reply
  4. Плюшкин_

    О блин,хотел рейтинг поднять,а оказалось уже оценивал.В общем-хорошая разработка.Только мелочь(с НДС и без НдС)добавил и «летает» на большой базе.

    Reply
  5. CheBurator

    При обилии разработок единственное что быстро позволяет оценить необходимость разработки — это содержательные скриншоты. Ну в лом, что ли, положить?

    Reply
  6. wolfsoft

    Кому — чего, а Сhe Burashke — скриншоты 🙂

    Трафика мне жалко, он у меня лимитированный, а обработка «весит» во много раз меньше, чем скриншоты 🙂

    Reply
  7. yuva

    Полезная штука

    Reply
  8. Gendalf

    Чо та я не вкуряю в этот «Анализ».

    Открываю в ТиС9.2.4. Фильтр»поставщики» он у мня свойства открывает…

    Не вкурил, что за уровень детализации… Можно поподробнее?

    Жаль, что только по Группам.(без Номенклатуры).., все думаю за каким там артикул стоит, у групп же его нет :)…

    Фенкс! Доработай чуть-чуть.

    Выводил б номенклатуру.. цены бы ему (Анализу) не было!!

    Reply
  9. wolfsoft

    2 GENDALF:

    Открыть обработку, попробовать поменять некоторые параметры, посмотреть внимательно на галочку «только группы», много думать…

    Хотя этот отчет был сделан именно для анализа по группам. Анализ по элементам: полно типовых, также можешь посмотреть вот этот http://infostart.ru/projects/index.php?id=562&ref=987 («Анализ продаж (общий) для Торговля и склад 9.2»). По поводу фильтра по поставщикам: отчет делал для себя, поэтому отбор по «основному свойству номенклатуры» назвал «поставщик», т.к. у меня основное свойство номенклатуры — поставщик товара.

    Reply
  10. chau

    Оч. хорошая штука с точки зрения практического управления номенклатурой.

    Но есть 2 хочу:

    1) Недурставенно было бы установить возможность выбора склада ( а то а распределёнке только итого поакзывает)

    2) Было бы чудесато, если бы сушествовала возможность вывода для анализа не только Групп номенклатуры, но и Свойств номенклатуры. Для примера: У меня в практике справочник построен по производителям продукции ( Например: Проктер и Гембл, Весна и т.п.) , а свойства номенклатуры по категориям товаров установлены ( стир.порошки, шампуни, з.пасты). Т.е. сейчас я могу видеть из анализа, что Проктер продается лучше а весна хуже в объёме и в абсолюте прибыли, но наценка на Весне выше. А проанализаровать по свойствам ( т.е. по категориям товара) не могу. Т.е. выяснить какя товарная категория является основной в образовании прибыли, лидер по наценке и объёму.

    Имея эти данные можно работать в соотетствии с принципами КАТЕГОРИЙНОГО подхода к управлению ассортиментом. А это мало того что модно ещё и очень эффективно.

    По Дефектуре — ну ОООООчень долго формируется. ( Активная номенклатура около 6000 позиций. Емкость справочника в целом — от 8 до 12 тыс.)

    А в целом ещё раз СПАСИБО. Реально ПОЛЕЗНЫЕ и РАБОЧИЕ обработки.

    Reply
  11. wolfsoft

    (11)Спасибо за развернутый комментарий.

    То, что дефектура долго формируется, так это Вы еще не видели, как у нас дефектура-заказ формируется. Вот это — долго 😀

    А вообще стоит подумать над тем, чтобы добавить «галочку» — выводить последние даты продаж и закупки. Без них быстрее будет.

    PS: «Злые вы», ну что вам стоит задавать вопросы на форуме разработчика, вот хочется гонять его и туда, и сюда 🙂

    Reply
  12. gugal

    >>В противном случае — при несоответствии рейтинга количеству скачиваний — доступ к обработке будет ограничен.

    А что, если я скачал, а оказалась фигня, то я тоже должен «+» ставить?

    Reply
  13. agovitch

    При подготовке отчета вылезла вот такая штука:

    Несоответствие между выходными данными — ни выручка, ни прибыль, ни тем более наценка

    Reply
  14. wolfsoft

    (14)

    1. mxl-ки не скачиваются почему-то.

    2. Отчёт формируется по регистру «ПартииНаличие», из продаж вычитаются возвраты, коды операций продажи «Реализация», «Реализация (розница)», «Реализация (ЕНВД)», коды операций возврата «Возврат от покупателя», «Возврат от покупателя (ЕНВД)». Ищите, где могут быть расхождения с Вашим отчётом.

    3. Лучше спрашивать на форуме разработчика, там быстрее увидят Ваш вопрос.

    Reply
  15. mtn0a

    Почему в отчете указывается отрицательная выручка. Насколько я понимаю, выручка это ни что иное как оборот, т.е. доход с продажи ТМЦ, который всегда >= 0.

    Reply
  16. madonov

    Прям то, что требовал начальник! Благодарю!

    Reply
  17. korbuhK

    Супер!! 😀 Благодарю!!

    Reply
  18. Масянечка

    Отличный отчет, спасибо!

    Reply
  19. wolfsoft

    Вам спасибо 🙂

    Reply
  20. popov_i

    Группируется ли номенклатура при добавлении других параметров детализации отчета?

    Reply
  21. popov_i

    По-моему еще не хватает итого количества. Хотелось бы протестировать, жалко $m не достаточно.

    Reply
  22. MasterTonLab

    Как-то не очень понятно, что это за отчет и как он работает???

    Точнее сама идея-то очень хорошая, а вот реализация, мягко говоря, оставляет желать лучшего.

    Простой тест.

    Открываем типовую Торговлю и склад 9.2 Демо.

    Открываем стандартный отчет по продажам ТМЦ, выбираем фирма — Торговый дом «Комплексный» (Магазин), в поле ТМЦ выбираем группу Бытовая техника, ставим период с 01.01.07 по 07.05.09 и нажимаем сформировать.

    Получаем данные:

    Поступление = 204’342.28руб.

    Реализация = 230’169.13руб.

    Прибыль процент = 12.64%

    Прибыль сумма = 25’826.85руб.

    Теперь открываем этот супер Анализ продаж и формируем по тем же параметрам.

    Получаем данные:

    Выручка: 194’188.16руб.

    Прибыль: -10’154.12руб.

    Наценка, %: -4.969

    И что это за фигня? Что за прибыль такая?

    Это при проверке на типовой ТиС 9.2 релиз 980.

    На рабочей базе тоже самое. Вообще какие-то непонятные данные. Откуда он их берет?

    Не верно считает и везде расхождения с типовым отчетом по продажам.

    P.S. Автор, прежде чем брать стартмани нужно сделать рабочий отчет, проверить его и написать как он работает. И скриншоты информативные добавить.

    Пока БОЛЬШОЙ МИНУС!

    Reply

Leave a Comment

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