<?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='\
Полезная обработка.
Нужно еще, чтобы слева от столбца «контрагет»
1. был столбец «новый» , в котором бы стояли даты реализации, если за последние 12 месяцев первая реализация прошла в пределах 6 месяцев. То есть, например, отчетный месяц март 2011, значит проверяем как давно появился контрагент за посление 12 мес .Если не было по нему реализации до октября 2010 года, значит — новый.
2. был столбец «ответственный менеджер» , в котором из справочника КОНТРАГЕНТЫ был указан менеджер, который на вкаладке как ОСНОВНОЙ менеджер
3. чтобы был отбор по менеджерам , то есть какая рентабельность продаж по конкретному менеджеру
(1) что касается 2 и 3 пунктов, через настройки отчета можно легко эту информацию получить без доработки отчета. В группировках выбираете у контрагента реквизит основной менеджер. Аналогично и в отборе можно его вытащить.
по 1му пункту, не совсем понятно зачем знать новый или не новый контрагент?
и алгоритм не совсем точный, а если все таки была реализация за последние 12 месяцев, но дольше чем 6 месяцев, почему контрагент новый?
(2) по 2 и 3 пункту поняла, сегодня скачала фойл, завтра протестирую
по 1 пункту , ну надо так, чтобы посчитать % от продаж менеджеру, такие правила у нас.
Если новый клиент, то для него особенные условия. А кого считать «новым» определило руководство фирмы, так оно определило: проверяется период последние 12 месяцев , в каком появился клиент, мож он был в мохнатом году, а после его забыли, а потом возобновили продажи ему, тогда он приравнивается к новому. А если была реализация в течение 12 месяцев хоть в одном месяце, то он уже не новый.
Пример
январ, февраль, март, апрель, май, июнь — не было реализации
июль, авг, сент, окт, нояб, дек — есть реализация — НОВЫЙ
или
январ, февраль — была реализация ,
март, апрель, май, июнь — не было реализации
июль, авг, сент, окт, нояб, дек — есть реализация — СТАРЫЙ
а почему 6 мес?
потмоу что в течение этих 6 мес рентабельность должна быть не ниже установленной нормы, тогда будут повышенные проценты.
Вот так все сложно.
Вручную проверять каждого клиента за последние 12 месяцев «новый» он или «не новый» весьма муторно, мягко говоря.
Я понимаю, что это специфическая просьба, вряд ли кому еще понадобится, потому попросила на «авось».
Если это сложно сделать, то, конечно нет вопросов, буду дальше выборку делать вручную.
(3)
Показать
Этот запрос Вам поможет выбрать новых контрагентов, его можно использовать в консоли запросов. думаю он Вам облегчит немного работу.
Его так же можно включить и в мой отчет, но я этого делать не буду, а любому прогеру это не проблема.
Вообще советую держать программиста в штате;) или хотя бы обращаться в фирмы франчи 1С. работать бы начали эффективнее. ИМХО.
Отличный отчет. мне очень понравился .насчет франчайзи. у нас их тяжеловато нормальных найти. пара всего есть нормальных. и все остальные шарлотаны…
Этот запрос Вам поможет выбрать новых контрагентов, его можно использовать в консоли запросов. думаю он Вам облегчит немного работу. Его так же можно включить и в мой отчет, но я этого делать не буду, а любому прогеру это не проблема.
Вообще советую держать программиста в штатеsmile;) или хотя бы обращаться в фирмы франчи 1С. работать бы начали эффективнее. ИМХО.
Спасибо, работает, правда почему то показывает рентабельность 100% хотя у нас 100% и не пахнет…
А что вывести список не то что надо?
Отчет на основание документов СФ, Реализация товаров и услуг, докуметов Поступления товаров и регистра партии товаров показывает информации о покупателях, продаваемых партиях, ставках НДС постуления и продажи, высчитывает % рентабельности. А на бухгалтерии он будет работать?
(8) Нет этот отчет для конфигурации УТ 10.3, будет работать на комплексной и упп (скорее всего).
А себестоимость как можно посмореть?
проверял на упралвнеии строительной организацией… и на бухгалтерии предприятием 2,0. очень хороший отчет… большое спасибо автору
(11) Nado2010, нравится, не забываем ставьплюсы 😉
Оличный отчет для использования в 1С предприятие Управление Торговлей 8, как раз такого отчета нехватало в типовом функционале 1С Предприятие Управление Торговлей 8, присоединяюсь ко всему вышесказанному, также хотелось бы более широкую описательную часть в настройке по отчету и возможность использования в 1С предприятие Бухгалтерия 8.
Будет ли работать в комплексной автоматизации?
Интересно, данный отчет работает в режиме расширенной аналитики учета затрат (РАУЗ) в управлении производственным предприятием (УПП)? Известно, что стандартный отчет «Валовая прибыль» не работает, т.к. нет себестоимости с точностью до документа реализации. Есть конечно описание, КАК сделать так, что бы увидеть в нем себестоимость, но там столько танцев с бубном, что проще или самому сделать отчет, или с этого же сайта инфостарт скачать. Конечно, себестоимость будет корректна только для прошлого месяца, где она полностью сформирована, но и ладно.
А как этот отчет себя ведет при РАУЗ?
(15) mistermp3, нет не работает в РАУЗ, данные отчет предназначен только для партионного учета.
понятно. так и предполагал
Отчет не показывает партии произведенной продукции, только поступление товаров.
(18) tiger8123, данные берутся из регистра партий. В которой в свою очередь есть документ «партии». Если в отчете отображается не так как этого Вам требуется, то это не в отчете проблема, а в программе, почему она для произведенной продукции подменяет документ партии. А должна ли? (риторический вопрос)
Спасибо за ответ. Задача была выяснить какие серии продукции была реализована в какие даты. Так как серия равна дате документа оприходования (отчет производства за смену), ошибочно решил воспользоваться этим отчетом. Документ «отчет производства за смену» действительно не делает записи в регистре «партии товаров на склада (бухгалтерский учет)».
А как в отчет добавить поле СФ полученный по документу Поступление — покопался в настройках — ничего не получилось 🙁
(21) sphomin, отчет такую информацию не выводит. Без доработки не обойтись.
Обнаружил, что отчет не работает с импортируемым товаром, сумму он считает в разных валютах, а рентабельность, как их разность. Так, товар, поступивший по 100 у.е. с ценой в реализации 10000 руб. будет иметь рентабельность 9900. Это нужно сиправлять, иначе для импортеров, ведущих партионный учет в УПП в разрезе ГТД отчет не актуален.
(23) Biochemist, спасибо за замечание. Пяовится свободное время поправлю отчет.