<?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) кстати, да. попробуйте указать начальную дату, должно помочь
Не помогло!
(3) можете сформулировать вопрос словами, а не картинкой? что не так в отчете?
Во первых откуда взялась цифра 71 на начало отчета если товара пришло 100шт 30.07.13. После мы наблюдаем что какимто волшебным образом их стало 58шт хотя движений не было! После мы делаем перемещение и их по прежднему остается 58шт, но в следующей строке мы наблюдаем что их стало уже 104шт. потом мы продаем 1шт и остается опять 104шт. Потом делаем перемещение 10шт и у нас становится 99шт))) ну и т.д.
(5) кстати только что в УТ11.1 такую же фигню наблюдаю в ВедомостьПоТоварамНаСкладахВЦенахНоменклатуры если делаешь группировку по дням, а по складам не группируешь, такой же неадекват)))
(5) а что показывает типовой отчет «Ведомость по товарам на складах» при такой же настройке?
При аналогичной настройке я вижу другую картину
Тут тоже куча ошибок! Например Возврат товаров поставщику 6-1=5 а отчет считает 4
Вот что показывает стандартный отчет:
(7) acapulco, ну и тоже там лажа, ведомость по складам, а склад и не отбираете и группировку не делаете, толку смотреть на перемещения например: с одного склада минус столько же на другой плюс, а если без склада то лажа какая то
(8) обновил отчет
Вот теперь почти все ок! Осталось поправить ошибку с резервом. Резерв Завышает аж в 4 раза и вообще не понятно откуда он формирует эти цифры. Хорошо бы видеть документы резерва. т.е. добавить колонку свободный остаток и в резерве. Точнее в резерве уже есть колонка но она врет
(12) резервы еще в работе
С нетерпением ждем!
И еще один косяк нашел: Когда в настройках настроишь отчет как тебе нужно, сформируешь его, а после решишь поставить какую нибудь галочку справа настройки слетают. Например добавляется группировка склад и исчезает группировка документ движения, а также появляется иерархия.
(15) отчет обновлен (убрал «закравшееся» событие по установке начальных настроек при изменении флажка «только нулевые остатки», допилил резервы)
Куда теперь делись начальный и конечный остаток?
и еще не совсем понимаю для чего сделано тип цен и цена на дату. было бы на много полезней если бы была галочка отображать цену и сумму на дату документа
(17) для группировки «регистратор» построчные остатки будут недоступны
(18) так изначально поставлена задача (установка цен фиксирует только повышение)
Чето не совсем мне понятно зачем он мне будет показывать розничную цену в документе поступления да еще и не соответствующую дате документа????
— это окончательный вердикт?
Нужно хотябы чтобы конечный остаток показывал, а то отчет весь смысл теряет. В предыдущей версии же когда резерв не работал все отображалось…
(21) думаю, вам больше подойдет этот отчетhttp://infostart.ru/public/178202/
Это тоже очень хороший отчет, но не то что нужно! Задача в твоем отчете отследить движение товара т.е. сколько пришло товара, сколько поставили в резерв, сколько ушло и сколько осталось в итоге. Цены впринципе вообще не интересуют
(23) для регистра «ТоварыВРезервеНаСкладах» нельзя получить регистратор, отсюда и выливается ограничение отчета. Без регистратора все прекрасно видно
Раньше пользовался 7кой тотже самый отчет был по умолчанию и все работало. в 8ке же добится этого отчета не могу
(25) обновил отчет, добавил конечные остатки по регистраторам
Ну вот а говорил что не возможно. Но вот только нужно чтобы в колонке резерв отображалось не количество зарезервированного по документу, а общее(накопительное) количество зарезервированного товара. А то по этому отчету не понять сколько в резерве а сколько свободного остатка товара. Для примера воспользуйся скриншотом с 7ки.
Судя по переписке можно видеть резервы в отчете. Предлагаю автору добавить или обновить скриншоты. А так «+»
(28) gull22, Все верно! Резервы в отчете были изначально. Был скоррективан их вывод для регистраторов
Захотел только один резерв вывести — не дало.
Отличный отчет! «+» Однозначно, Правда я не тривиально ее использовал, но все равно отчет полезный!
(31) leha.mos, спасибо!))
Что за космические остатки??? Отчет точно рабочий?
Еще и цену поднял! Протестируйте сначала отчет.
(33) IDija, за какой период вы смотрите ведомость и на какую дату остатки? Проверьте настройки отчета
(34) acapulco, 01.01.15 — 24.06.15. Дата остатков 24.06.15
(35) IDija, к сожалению, у меня нет возможности отладить отчет на вашей базе. В демо-базе подобного не наблюдается.
Здравствуйте, при установке отбора по складам, отчет выдает пустое поле( настройки на скриншоте, УТ 10.3.29.1), если же включить «показывать нулевые остатки» то отчет поазывает все позиции без движений и остатков, хотя они присутствуют.
(37) ВладимирГ, кроме склада у вас еще установлен отбор по группе номенклатуры. Попробуйте изменить условия отбора.
Покрутил по разному… при включенном отборе по складам — не работает. Без отбора по складам с включенным отображением нулевых остатков и с группировка по складам — общие движения по фирме показывает, по складам — данные не группируются. То есть со складами всё-таки какой то косяк, или подскажите, как его заставить выдать данные по 1или нескольким складам?
(39) ВладимирГ, попробуйте группировку по складу сделать в строке
С группировкой в строке тоже не работает. Выдает только шапку отчета.
(41) ВладимирГ, прикладываю скрины из актуальной рабочей базы (похожие есть и в описании публикации) с отбором по складу.
Данные выводятся в отчет.
Сможете перезалить отчет на сайт? кажется тут висит другая его версия, и название отличается и в шапке отчета нет настроек: Организация, Склад, Номенклатура. Скриншот скаченного прикрепляю.
(43) ВладимирГ, отчеты идентичные. Название для клиента и сайта разные, а если быть точнее, то для сайта название расширенное.
Скачал, потом только почитал комментарии. Отчет был бы хороший, если бы формировал правильно. При идентичных настройках стандартный отчет и этот показывают совершенно разные остатки. Извините, но до 3см он недоработан
Либо доделай и отправь, либо верни стартмани, а то что-то много стоит, а не работает!!! Остатки по складам показывает не верно. Если есть необходимость могу рассказать подробнее.
На скриншоте этот и стандартный отчет. Отборы одинаковые.
(46) avalakh, настройки, как минимум, различаются группировками: в типовом вывод в разрезе серий, с ведомости — без.
Корректность вывода для серий в этом отчете не проверялась.
в отличие типового отчета «Ведомость по товарам на складах», который строит остатки на основании регистра «ТоварыНаСкладах»
этот отчет формирует остатки на основании регистров накопления «ТоварыВРезервеНаСкладах» и «ТоварыОрганизаций»
если вы не используете резервирование и у вас больше одного места хранения, для вас он будет бесполезен.