<?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) Возможно! Но почему то не нашел когда искал пару недель назад…
Если есть возможность — «ссылки в студию»…
По поводу аналогов: недавно появилась обработка «Отчет по валовой прибыли УПП» (http://infostart.ru/public/68586/) . Данный отчет отличается отсутствием выбора конкретного типа цены и, что самое главное, по ценам берется «срез последних». В предлагаемом мной отчете цены расчитываются на дату документа продажи, т.е. в расчете будет учавствовать именно та цена которая была на момент продажи, что, ИМХО, более правильно.
видимо что-то с поиском на сайте.
http://www.google.ru/search?hl=ru&lr=&newwindow=1&q=site:infostart.ru+валовая+прибыль&start=20&sa=N
вот так работает:
(4) может я как то не так ищу? данный поиск не дал ссылок на какие-либо обработки с подобным функционалом (правда я платные разработки не смотрел). Из бесплатных — самая приближенная по смыслу разработка описана в посте 3 (там же и отличия). Возможно я что-то пропустил, если есть возможность, Eugeneer и mir1m, наставьте на путь истинный…
(3) Тоже не нашел и тоже сомневаюсь, что вы имеете ввиду бесплатную обработку 😉
почти 100 скачиваний и всего 3 комента …. 😥
Если кому то надо добавить возможность пересчета в выбранной валюте — сообщите
не подцепляет цены товара если ведётся учёт по характеристикам номенклатуры, а цены на отдельные характеристики не заданы
и в итогах зачем то пишет цену расчёта
(9) хм… вообще то по поводу цен с характеристиками — согласен, что может быть и такое, когда характеристики ведутся, а цены устанавливаются без учета характеристик…
В принципе особо страшного ничего нет — пишите в личку… расмотрим варианты доработки…
По поводу цены расчета в итогах — выводится максимальная встреченная цена по обходу запроса — это сделано для упрощения вывода цены расчета из запроса — вообще эта колонка носит больше информативный характер и вывожу ее лишь для удобства. Т.е. все группировки (в т.ч. по номенклатуре/группам номенклатуры) показывают лишь максимальную цену в пределах данной группировки. Передо мной не стояла задача показать по каким ценам были продажи, поэтому отдельной группировки по ценам не ведется. Расчет же выполняется корректно.
он просто считает что цены не установлены… со всеми вытекающими
(11) я прекрасно понимаю что в этом случае не считает 🙂
(11) тут вариантов несколько:
1) доработать отчет самим (код открыт)
2) ждать когда у меня дойдут руки до этого
как вариант — если отчет для вас интересен, при небольшой денежной стимуляции я скорее всего пересмотрю сроки решения данной задачи…
Отчет работает на РАУЗ?
Спасибо за отчет, что раньше считал в ручную , то в твоём отчете прям на экран выскакивает.Мне очень подравилось совмещение стандартого отчета Валовая прибыль и твоего блока Валовая прибыль по ТЦ.При наличии распределения доп.услуг на поступление товаров в стандартом отчете показывается реальная себестоимость, а вот посмотреть реализацию в цене закупа не посмотришь.У тебя и то и то видно…Спасибо!
У меня УПП, и проблема с себестоимостью, какой тут принцип расчета?! откуда берется себестоимость?
У меня переменной себестоимостью является сумма затраты на выпуск, можете для меня сделать этот же самый отчет только в место вашей себестоимости поставить себестоимость из вот такого документа «Отчет производства за смену 00000000001», и в место рентабельности рассчитывать маржинальную прибыль. ???
У меня УПП, и проблема с себестоимостью, какой тут принцип расчета?! откуда берется себестоимость?
Этот отчет не показывает себестоимость в прямом виде.В отчете можно отразить валовую прибыль на один и тот же товар , но в двух типах цен, к примеру цена закупа и цена продажи.Если цена закупа и есть себестоимость(если не было других накладных расходов при осуществлении сделки),то это и есть себестоимость.Если при сделке пришлось доставить товар до покупателя, то эти расходы, я лично распределяю на накладную закупа документом «Услуги сторонних орг.», себестоимость перераспределяется или по сумме (деньги) или по кол-ву…,себестоимость товара увеличивается,валовая прибыль уменьшается…
Спасибо за отчет!!! Весьма помог! От начальства поступило как раз на разработку аналогичного отчета. по неведомым причинам стандартный отчет не подходил. так что спасли можно так сказать!!!!!
(19) ну… я рад, что отчет пригодился 🙂
кстати, если кому надо такой отчет, но по оплате — пишите в личку…
На РАУЗе работает?
(21) нет
спасибо за отчет)))
Неплохой отчет помог, только кое-что пришлось переделать изменить тип цен, не номенклатуры, а номенклатуры контрагентов, а так помог, использовал для Комплексной автоматизации редакция 1.1.9.1 по РАУЗу валовая не формируется да и вообще типовой отчет Валовая прибыль в КА кривой, позже познакомился с произвольными отчетами в типовой демо версии КА получилось еще быстрее, спасибо!
(28) не совсем понял что имелось ввиду
а это под 8.1 или 8.2 отчет?
(30) изначально писалось для 8.1, чтобы на 8.2 заработало — просто конвертируй в 8.2
До сих пользую этот отчет, еще раз спасибо!
ага__спасибо))конвертировала!!все нормально работает))
Спасибо за отчет. Весьма полезен будет. А то стандартный «Валовая прибыль» вообще не годится.
Как можно сделать сохранения выбора типа цены,постоянно приходиться показывать какую цену надо считать?
Отчет хороший вот только партий не учитываются. Мне так кажется это не совсем правильно.
(8)
эдак вы одним отчетом и мультивалютность реализуете в УПП и УТ? 🙂
(37) что значит «партий не учитываются»? Себестоимость считается как раз по партиям. Это по сути — типовой отчет «Валовая прибыль» с доп. колонками пересчета стоимости в соответствии с выбранным типом цены.
(38) посмотрите наhttp://infostart.ru/public/69323/ — это по сути немного переделанный вариант текущей разработки — там есть вариант с пересчетом в выбранной валюте…
(39) Типовой отчет считает все верно, а вот дополнительные колонки не совсем или я что-то не догоняю и хочу разобраться.
Примеры писать не очень хочется, но посмотрим …
Цены рассчитываются на дату документа продажи! что есть не совсем правильно так как товар может быть из более ранней партии и его закупочная цена не равна той цене которая стоит в день его продажи.
Хотя по большому счету.
(41) не совсем понимаю ход ваших мыслей… складывается впечатление что вы хотите в колонке пересчета от цены получить реальную себестоимость по партии… зачем? Реальная себестоимость у нас есть в колонке «Себестоимость», и она считается как в типовом отчете — по партиям. Колонки пересчета от типа цен сделаны для другого — это средство анализа продаж от типа цены. Бывает такие ситуации когда реальный закуп пляшет с большим разбросом, но тип цены закупа не меняется (закупили товар у другого поставщика по бросовой цене (возможно даже нулевой) и т.д.). В этом случае по партиям данный товар будет давать разную себестоимость и как результат — различную валовую прибыль. Это бывает не совсем удобно когда необходимо оценить результативность отдела продаж (особенно когда ЗП отдела продаж зависит от заработанной маржи), посмотреть среднюю наценку и т.д. В этом случае можно воспользоваться текущим отчетом и рассчитать данные в пересчете от выбранного типа цены. Повторюсь — это средство анализа — не надо в этих колонках искать себестоимость и т.д.
(0) ценный отчет! спасибо автору )
Спасибо, очень пригодилось — взял отчёт как основу для своего!