<?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='\
Будет ли работать в Розница 2.2.6.28?
Должно, протестирую сегодня, отпишусь.
Платно? Вы что серьёзно?))
(3) Серьёзно. Хочешь бесплатно ищи или делай сам.
На ты мы не переходили. Такого рода отчетов на просторах валом и в разы лучше, по крайней мере в плане оформления, не говоря про функционал, который под вопросом. К тому же на картинках разные версии отчета (см. параметр «Период», видимо не доделан был, а денег хочется очень), хромает оформление (числовые значения целые/с одним знаком после запятой/с двумя). Вы, уважаемый, если уж продаёте, то приложите усилие к оформлению. Если дело в наборе опыта — это одно дело, выкладывай за стартмани, но если денег хочется-напрячься надо!
(5) слушай что ты меня учишь, я как хочу так и напрягусь, у меня своя стратегия, если мне нужен будет совет я к гадалке схожу
А если серьезно: Уважаемые пользователи в ближайшее время будет выпущена новая версия отчета в расширенном варианте. Текущий вариант вполне рабочий, если есть вопросы или недочеты пишите мне и я поправлю. А цену считаю вполне адекватной, да и плюс всегда есть возврат денег если что то пошло не так. А внутренняя валюта мне не нужна, я думаю правилами инфостарта не запрещено самому решать по какой цене и в какой валюте что либо выкладывать.
Целая конфигурацияhttps://infostart.ru/public/668887/ стоит 1000 р. Вы очень жадный и грубый, впрочем решать и правда Вам.
(8) Спасибо
(1) Немного изменил отчет, работать на 2.2.6.28 и более свежих будет.
(8) Поправил отчет. У них другая стратегия, конфигурация стоит 1000 рублей, а поддержка 2500.
Спасибо, работает, удобный отчет!
Добрый день!
Будет ли работать на релизе 2.2.4?
(13) Добрый! Должно, но лучше пришлите базу я проверю. cezar.j@gmail.com
Добрый день! Обработка работает, но не правильно показывает наценку в % и в некоторых местах неверно указана закупочная цена. Прикрепляю фото
(15) Наценку в % считает по отношению к розничной цене. (Розничная-Закупочная /
Розничная)*100, поправлю этот момент. А где закупочная неверно указана нужно смотреть, отчет берет последнюю цену закупки и умножает на количество, поэтому если сильно во времени цены закупки отличаются будет не очень точно. Позже переделаю отчет, чтобы цену брал закупки из приходов на каждую дату.Здравствуйте, есть ли возможность сделать фильтр по складам? Ситуация следующая: есть два склада, приходы от разных организаций приходуются на разные склады (номенклатура при этом пересекается), нужно видеть продажи раздельно по складам в ценах приходов именно на этот склад (читай от конкретного поставщика).
(17) Можно фильтр, можно и группировку. При отборе по магазину группировка по складам. Сделаю на этих выходных.
(18) Но цена получается только по последнему приходу попадает в отчет, а если было несколько приходов с разными ценами, возможно ли сделать в отчете в таком случае разбивку на несколько строк по разным ценам?
(19) Цена у меня берется не из прихода, она берется из установки цен последняя, если про закупку говорим. Только продажи берутся реальные. Для того чтобы из приходов бралась цена нужно другой отчет делать, там замороченней будет, я пока сделал простой вариант.
(20) Спасибо, тогда видимо нам он, к сожалению, не подходит.
Большое Вам спасибо, именно то чего не хватает в 1С! Куча клиентов заносят остатки через оприходование а потом требуют чтоб валовая прибыль считалась сама…
Подскажите есть база в которой позиции номенклатуры переименовываются, но клиент при этом хочет видеть корректный валовый отчет. То есть он создал позицию, поставил на нее закупочную и розничную цены. Продал, переименовал позицию и соответственно хочет увидеть правильный отчет по валовой прибыли. Но откуда ему взяться?
Ваш отчет сможет решить такую задачу?
(23) Нет и никакой не сможет, дело в том это уже не соответствует логике самой 1С. Нельзя номенклатуру переименовывать которая раньше продавалась, я так понял например был хлеб а переименовал в молоко и продает. Тут ни один отчет не поможет так просто делать нельзя. Максимум можно хлеб переименовать в хлеб дарницкий например. Просто научите его номенклатуру копированием создавать.
Спасибо. Буду учить
Доброго времени суток.
Подскажите пожалуйста, у вас написано «открытый код», разрешается изменять обработку? Вы не против?
И может быть это не корректно, но обработка вроде была по 2 стартмани? Это была скидка или просто цена поднялась? Ее можно будет в дальнейшем приобрести за 2 стартмани?
Извини есть вопрос показался мелочным.
(26) Цена поднялась, да можете изменять. Я думаю останется за 4.
(27)
Спасибо
Скажите, пожалуйста, а группировка по контрагентам есть?? (кому какой товар продан чтобы отследить)
Не сильно отличается от стандартного отчета. Моим клиентам не хватает отчета по валовой прибыли с учетом списаний, оприходований и и пересортиц. А тут единственное отличие это наценка суммой и в процентах, что особо не нужно при анализе прибыли.
(30) Вы видимо не внимательно читали, этот отчет берёт цены закупки из установок цен а не из стандартного расчета себестоимости. Вы пробовали рассчитать себестоимость в Рознице? Обычно она очень криво считается и для расчета нужно перепроводить документы. В этом основной интерес отчета, а не в том какие показатели он выводит.
(31) нет, я все внимательно прочитал: «отчет умножает последнюю цену закупки на количество фактически проданного товара». Просто всем своим клиентам сразу ставлю автономный упрощенный учет себестоимости, перепроводить приходится минимум документов.
То есть в моем случае, используя ваш отчет, получится та же валовая прибыль?
Вот если бы ваш отчет умел считать не по последней цене закупки а по всем, ну например в течение месяца, то это бы было интереснее.
(32) Не совсем правильно поняли. Вот у вас к примеру клиент, который год работает и до этого не возникало у него вопросов по расчету себестоимости или неважно какой срок месяц, два, приходит к вам и говорит мне нужно посчитать себестоимость. Вы включаете ему расчет в Рознице, далее вам нужно перепровести все документы, если до этого расчет не был включен. Многие не включают его сразу, потому что не шарят в этом. Потом вы заходите в отчет Оценка прибыли и видите что у части товаров себестоимости нет, так как в рознице при сборке-расборке и еще в некоторых случаях она вообще не рассчитывается, так у меня было.
Т.е. получается что:
1. Нужно заморачиваться с перепроведением старых документов а с этим могут быть свои проблемы, так как после перепроведения они зарегистрируются к обмену с бухгалтерией и в бухгалтерию попадет старый закрытый период и бухгалтер всех убьёт.
2. Часть документов не рассчитывает себестоимость в вашем случае.
3. При расчете себестоимости в вашем примере, закупка берется на дату каждого прихода и делается запись в регистрах о себестоимости. И закупка берется из конкретного документа прихода, в моем же случае цена закупки берется из среза последней установки цен номенклатуры, т.е. из регистра цены номенклатуры а не из табличной части документа.
4. Бывает случаи что человек переходит с другой программы, вы загрузили ему остатки в ввод остатков, а он не рассчитывает себестоимость по вашей настройке, потом у клиента идут продажи, вы выводите ему отчет Оценка валовой прибыли а там себестоимость ноль, возникают вопросы
Вот чтобы эти 4 пункта никого не смущали я сделал этот отчет, конечно он дает не точные данные, так как закупочная цена берется как срез последних на дату начала отчета, но в большинстве случаев это небольшая погрешность, так как цены закупки не сильно меняются из месяца в месяц.
Ваше пожелание по расчету себестоимости по всем ценам конечно интереснее, но такой отчет намного тяжелее сделать, так как он будет внутри себя за весь период рассчитывать среднюю себестоимость и формировать дольше будет. Я планирую такой сделать, но позже.
Здравствуйте, ваше решение будет работать на маке 1с розница? версия 8.3.14.1694?
и я правильно понял ваше решение позволяет не считать себестоимость товара, а просто считает разница между закупочной ценой и продажной?
Извините за глупый вопрос : У нас стоит 1С:Предприятие 8.3 (8.3.14.1694) конфигурация — 1С:Комплексная автоматизация 2 (2.4.6.231), будет ли корректно работать данная обработка на ней?
Нет, не будет