Анализ продаваемой номенклатуры … и как "Я" его понимаю …




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

47 Comments

  1. Alraune

    Отлично получилось. Да, и в УПП работает. Вполне заменяет часть штатных отчетов, вроде как «несколько в одном». Тем более, что в нем не только АВС, но и аналог XYZ-классификации имеется.

    А вот насчет ценообразования — если бы в отчете предлагалось не только наименование и количество, а еще и цена номенклатуры? Возможно такое? Вроде информации для этого здесь достаточно.

    Reply
  2. alexk-is

    Было бы неплохо указать для каких конфигураций этот отчет предназначен не только в тексте, но и в параметрах публикации. Тогда его можно будет найти по классификатору.

    Еще можно добавить скриншоты.

    Reply
  3. Шёпот теней

    (1) ценообразование … дааа … проблема … то же думал об этом … )))

    (2) сделал …

    + добавил:

    1. изменил названия колонок в отчёте с типа «ОстатокНач» на «Остаток начальный»

    2. добавил в «заголовок» даты отчёта и в «подвал» — пользователя

    … вот …

    Reply
  4. Ish_2

    ЕСЛИ БЫ у меня было УТ или УПП — я БЫ раздраконил твой отчет.

    Но у меня нет УТ и УПП , поэтому искренне пожелаю тебе дальнейших успехов.

    Reply
  5. Шёпот теней

    (4) … жаль … очень … что у тебя НЕт УТ или УПП …

    … но Вы можете поставить себе УТ «демо» … и …. и раздраконить мой отчЁт …

    … ВоооТ …

    Reply
  6. AKV77

    Спасибо, отдам маркетологам тестировать.

    Reply
  7. alexk-is

    Вот я и говорю — нужны скриншоты для тех у кого нет УТ и УПП

    Reply
  8. Alraune

    А почему может возникать такая ситуация?

    Если сначала сделать отбор Номенклатура Равно …

    Потом этот отбор снять и попытаться сформировать без отбора, то выдает вот такую ошибку:

    Reply
  9. Шёпот теней

    (7) … хм … скриншоты … ? … сейчас сделаю …

    (8) … уфф … вот ведь … сейчас подумаем …

    п.с. у меня нормально работает …

    … вот …

    Reply
  10. AlexanderSM

    Очень нужный отчет. Много полезных показателей в одном месте.

    Респект +

    Reply
  11. Alraune

    (9) У меня тоже нормально, но ИНОГДА выдает такое. Или еще — когда меняется период.

    Reply
  12. tango

    (8),(9)

    Т8_Итоговая.НормаХраненияМульт

    Reply
  13. Шёпот теней

    (11) … исправил … посмотри …

    (12) … так и есть … !

    … вот …

    Reply
  14. Alraune

    (13) А теперь, после изменений, можно формировать отчет только не раньше 2010 года. Так и было задумано?

    Reply
  15. Шёпот теней

    (14) … уффф… исправил …

    это я специально сделал для своих …

    или скачай или в форме «ВыборПериода» в

    Процедура ПредыдущийГодНажатие(Элемент)

    ТекГод = Число(ЭлементыФормы.Год.Заголовок) — 1;

    Если ТекГод < 2010 Тогда

    ТекГод = 2010;

    КонецЕсли;

    ЭлементыФормы.Год.Заголовок = Формат(ТекГод, «ЧГ=»);

    КонецПроцедуры

    закомментируй «Если» …

    Reply
  16. Alraune

    (15) да, теперь нормально

    Reply
  17. tango

    (18) посмотрел ваш профиль, не нашел, о какой разработке речь?

    пардон, сообразил.

    Reply
  18. Alraune

    (19) Все необходимое описание — формулы и т.д. — кстати, есть в справке к отчету. Стоит ли выносить все это сюда?

    Reply
  19. Alraune

    (24) Ну, может быть, в этом Вы и правы, что надо добавить.

    Reply
  20. Шёпот теней

    … этим отчЁтом в той или иной форме занимаюсь больше полугода …

    именно такое такое наличие колонок оправдано для нашё организации …

    … раньше был отчЁт раза в два с большим количеством колонок

    при работе с этим отчётом и по его данным видно что ОН делает заказ для организации гораздо лучше человека … это видно по сверкам как расчитал отчет и как сделал это человек …

    … пределу совершенства нет … условно «открытой» код позволяет его подогнать под нужды своей организации …

    непонятно при чЁм тут «планирование» … ? … данный отчЁт работает только по факту и даёт соОтветствующие цифры …

    в «моЁм понимание» требуется добавить ценообразование … чтобы как-то назначать цену не с потолка …

    … вотТАКмнеКАЖЕТСЯ …

    Reply
  21. alexk-is

    Ура, скриншоты…

    Reply
  22. Ish_2

    Шепот , вот видишь (17)-(20) . И без меня обошлось.

    Reply
  23. Шёпот теней

    (29) … Ish_2 … ты всЁ время ЗАбываешь … что важно ТВОЁ мнение …

    … вот …

    Reply
  24. Шёпот теней

    хотелось бы конечно по ценообразованию цто-нибудь придумать …

    например есть моя статья (в качестве не только рекламы) — http://infostart.ru/public/68862/ + там же ссылка на усебник …

    в этой статье — тезисно выбраны всЁ основные факторы влияющие на ценообразование … КАК всё это оформить в «формулу» получения цены ума не приложу …

    … вотКТОбыПодсказалБЫ …

    п.с. наберите в яндексе что-нибудь на тему ценообразования и вы увидите там Мания1С на первой странице … ОН конечно мог бы наверное просвятить … НО! … но ОН скажет покупайте …

    … ВОТ …

    Reply
  25. tango

    усебник.. хи-хи.. Арсипалтя-сан и Сепота-сан 🙂

    Reply
  26. Шёпот теней

    (32) … а что … ? в чЁм тонкий юмор … ? … вотНЕпонятка …

    Reply
  27. Romka1984

    В УТ работает. однозначно плюс.

    Один момент. Сравнил данные вашего отчета и отчета по валовой прибыли из УТ.

    Кажется надо итоги по рентабельности и эффективности расчитать следующим образом:

    ВЫБОР

    КОГДА СУММА(Выручка) = 0

    ТОГДА 0

    ИНАЧЕ ВЫРАЗИТЬ(СУММА(Доход) * 100 / СУММА(Выручка) КАК ЧИСЛО(15, 2))

    КОНЕЦ

    и

    ВЫБОР

    КОГДА СУММА(Себестоимость) = 0

    ТОГДА 0

    ИНАЧЕ ВЫРАЗИТЬ(СУММА(Доход) * 100 / СУММА(Себестоимость) КАК ЧИСЛО(15, 2))

    КОНЕЦ

    соответсвенно.

    Reply
  28. Шёпот теней

    (36) … обязательно посмотрю и сравню … ! вот…

    Reply
  29. Шёпот теней

    (35) категорически НЕсогласен … даже удивлЁн … и это говорит Eugeneer … !

    поясню … есть ещЁ хузе …

    1. можно выбрать простой вариант — «Затратный метод» — тогда всЁ элементарно …

    2. можно выбрать разные стратегии и методы и статистику и сезонность и параметрический ряд и эластичность и приоритет и много ещЁ чего …

    и тогда всЁ не просто …

    затратный метод можно даже и не обсуждать … ну разве только в сложных производствах его расчёт и не обходим и сложен ..

    а вот обсуждать выбор нескольких парАметров важных для ценообразования и можно и нужно … и пытаться реализовать …

    … вотТакаяМысль …

    Reply
  30. Alraune

    (38) Допустим, выбрали несколько параметров.

    Основа цены — себестоимость? Т.е. не расматриваем вопрос продажи себе в убыток?

    Тогда задача будет стоять — определить процент наценки с учетом выбранных параметров и каких-то (как их определять — непонятно) коэффициентов. То есть если выбрали параметры приоритет, рентабельность и эффективность, то полученная цена должна расчитываться по такому алгоритму:

    Себестоимость + х1*приоритет + х2*рентабельность + х3*эффективность ?

    А где брать эти коэффициенты, х1, х2, х3?

    И вообще, невозможно высчитать цену с точностью до копейки, об этом уже говорилось.

    Reply
  31. Шёпот теней

    (40) .. хм ..

    Себестоимость + х1*приоритет + х2*рентабельность + х3*эффективность ?

    как получать коэфф. Х1, Х2 и Х3 … ?

    самое простое это в основу ценообразования положить:

    1. затратный метод (самый простой и понятный)

    2. статистические данные за исторический период (с учётом инфляции)

    2.1. максимизация прибыли

    2.2. инвариантность цены

    2.3. сезонность

    2.4. приоритет оборачиваемости

    2.5. эластичность и всЁ что с ней свзано …

    … ?

    политика предприятия … ?

    прибыль:

    1 … с цены или

    2. … с оборота …

    3. … или максимизация прибыли (среднее) … ?

    1-2-3 зависит от загрузки мощностей … если производство … !!!

    и естественно сырья … стоимость … объёмы … и т.д. и + стоимость предельная … !

    + стоимость предельная = стоимость на изготовления товаров сверх нормы …

    + стоимость еще, зависящая от рынка … и не только …

    … ? …

    … вотГДЕтоКАтоВот …

    Reply
  32. Alraune

    (40) Такой отчет вряд ли сможет быть универсальным, его надо писать для конкретного предприятия, учитывая именно его условия. Но, если исходить из того, что универсальность — это зло, тогда, возможно, и получится учесть столько всего, и вывести какую-то формулу, во всяком случае, с известной долей приближения.

    Reply
  33. Арчибальд

    (33) Это подразумевается, что все, кроме нас с тобой, игнорируют учебники. Одни — потому, что читать лень, другие — потому, что читать не умеют…

    Reply
  34. Шёпот теней

    (42) … )))))

    … ужжж …

    … хотя бы бы определения … ! чтобы америк не открывать и чтоб понятно было …

    … (((ВОТ))) …

    Reply
  35. Арчибальд

    (43)

    А я б Америку закрыл,

    почистил

    и открыл бы снова (с) Маяковский

    Обычный большевистский синдром в условиях развивающегося капитализма. Классовое сознание выше знаний…

    Reply
  36. Ish_2

    (42) Арчибальд с Шепотом читают(читали ?) учебники.

    Это , конечно, вызывает уважение … по нынешним временам.

    С выходом ,Арчибальд !

    Reply
  37. Арчибальд

    (45) Я не вышел, а зашел 😀

    Выйду через неделю — мало не покажется 👿

    Reply
  38. Abadonna

    (44)

    А я б Америку закрыл,

    В детстве читал книжку, почти точная цитата:


    Ученики класса 6Б на Совете Отряда решили закрыть Америку, потому как толку он нее все равно нет. Освободившуюся часть карты использовали под стенгазету

    😀

    Reply
  39. CheBurator

    Много комментов и нету у меня 8-ки, но имхается вместо непонятного «вероятности продаж» — на чем базируется/считается — нипанятно, былбы введен XYZ критерий «стабильность продаж» — и разложить по матице 3-3 с автораскрывом по щелчку….

    Reply
  40. Шёпот теней

    (48) а зачем …. ?

    п.с. нуууу, разве что только для понта …

    … вОт …

    … Есть «1С 7» и Есть «1С 8» … «стоимость» разная а «результат» один …. дык зачем же горадить огород … )))

    Reply
  41. CheBurator

    «Понты» — это как удобно представить (матрицей/списком/итд)… 😉

    .

    А насчет XYZ пристегнуть…? соображения?

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

    .

    Кстати, кто посоветует достойные материалы по планированию закупок/управлению складскими запасами (инет, книжки) — всякие там оборачиваемости/ликвидности/заполняемости/дниприсутсвия/итд?????

    Reply
  42. Шёпот теней

    ЧЕ … я вполне серьЁзно …

    1. делать ЧНЯ анализ дело хлопотное … а полученная цифра будет коррелироваться с количеством отгрузок … ! … проверено ! … именно поэтому я и отказался от этого анализа в пользу отгрузок …

    а считать количество отгрузок просто … !

    2. также коэфОборочиваемости — количество / перод … здесь это есть … !

    3. ликвидность — здесь отражён как приоритет … !

    4. заполняемость — здесь как Достаток и ДостатокПроцент … !

    5. здесь НормаХранения …

    и т.д.

    важный показатель ешЁ это эластичность … но здесь нужна уже и дисциплина и ответственность и желание ЕЁ установить … тогда откроются новые горизонты управления ценой …

    сезонный фактор — проще … нужна только статистика …

    обязательно нужен расчЁт Инфляци для корректировки основных показателей и их сравнения по различным периодам …

    дальше! … дальше! только научное, математическое ЦеноОбразование … это уже и высший пилотаж и архи сложная задача … как комплексное решение дисциплины, творчества, мужества и политической воли … но результат — видимо стоит затраченных усилий …

    например … уже писал … у нас на некоторые товары были снижены цены на 15% … что привело к увеличению оборота на 27% а прибыли на 11% … ВОТ …! но не всЁ так радужно … конечно … но повод задуматься огромный …

    … ВОТ …

    Reply
  43. huse

    (40) вот где то здесь в ходе рассуждений закралась ошибка:

    «самое _простое_ это в основу ценообразования положить:»

    если цель простота — зафиксируйте цены — «все по 5 (или по 10, или…)»

    если цель эффективность — исключите стратегии простоты и меряйте эффективностью. правда для этого придется цель сформулировать… насколько помню это у вас прибыль. только вот есть проблема — одной и той же прибыли можно достичь совершенно разными путями. И у каждого пути свое ценообразование.

    PS А если честно мне кажется, что Вам просто мат.моделирование нравится.

    Reply
  44. Шёпот теней

    (52) … дык от него и отказываемся …

    мат.моделирование —

    ЭКОНОМИКО-МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ [economic-mathematical modelling, economic modelling] — описание экономических процессов и явлений в виде экономико-математических моделей. (Иногда тем же термином обозначают также реализацию экономико-математической модели на ЭВМ, т. е. искусственный эксперимент или машинную имитацию, машинное решение экономико-математической задачи — однако это может вводить в заблуждение.)

    Как и всякое моделирование, Э.-м. м. основывается на принципе аналогии, т. е. возможности изучения объекта (почему-либо трудно доступного для исследований) не непосредственно, а через рассмотрение другого, подобного ему и более доступного объекта, его модели. В данном случае таким более доступным объектом является экономико-математическая модель. При построении моделей те или иные теории или гипотезы благодаря формализации и квантификации становятся обозримыми, уточняются, и это способствует лучшему пониманию изучаемых проблем. Моделирование оказывает и обратное влияние на исследователей, требуя четкости формулировки исследовательской задачи, строгой логичности в построении гипотез и концепций.

    Практическими задачами моделирования являются, во-первых, анализ экономических объектов; во-вторых, экономическое прогнозирование, предвидение развития хозяйственных процессов; в-третьих, выработка управленческих решений на всех уровнях хозяйственной иерархии.

    … разве ЦеноОбразование не от Затратного механизма не есть МатМоделирование (найти подходящее уровнение, систему функций описывающих реальную модель) …

    … вот …

    Reply
  45. huse

    (53) сорри не прочитал до конца

    Reply
  46. italmix

    круто! Молодец!

    Reply
  47. Shade

    Спасибо! Прикручу, поверчу 🙂 Подход серьезный

    Reply

Leave a Comment

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