<?php // Полная загрузка сервисных книжек, создан 2025-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='\
А чем обработка «Расчет плановой себестоимости» плоха?
Для того. чтобы прикинуть, сколько нужно мани для покупки комплектующих, этого вполне достаточно. С полным расчетом себестоимости заморачиваться не стоит.
Обработка то что надо!!! Спасибо большое!!! В отличие от «Расчета плановой себестоимости» разузловывает все до материалов!!! спс!!!
Скачаю попозже. Думаю в эконом. отделе пригодится! Скажут спасибо, передам автору!
Если будут обнаружены глюки — сообщайте.
Проверьте правильно ли разузловываются сборки.
полезная штука однозначно! моим пользователям очень пригодится
Обработка то что надо!!! Спасибо большое!!! В отличие от «Расчета плановой себестоимости» разузловывает все до материалов!!! спс!!!
Скачал, подключил в дополнительные печатные формы, обработки, — запускаю, а там пусто, что не так?
Куда ее класть то?
Спасибо.
Прописываешь в Дополнительные внешние обработки.
Запускаешь. В форме выбираешь номенклатуру, тип цены номенклатуры.
Производится разузлование по основным спецификациям.
Можно запустить через — Файл, Открыть.
Это просто внешняя обработка.
все просто супер… было бы, если бы цены не менялись
С удовольствием скачал бы отчет, но не хватает смарт-денежек.
Ставлю плюс заранее, потому как считаю, что человек, публикующий свои наработки так или иначе помогает остальным коллегам.
Приходится писать такие дурацкие каменты, чтобы хоть чуть-чуть вышеуказанных денюшек капнуло на аккаунт.
Я так понимаю будет работать только на УПП? На Управление торговлей не получится посчитать стоимость изделия из комплектующих?
(11) jeyriko, Используется в УПП. Производится полное разузлование продукции — определяется состав изделия. В УТ нет вложенных спецификаций. Или есть?
(9) MeTANid, А какие цены нужно использовать для расчета? Сначала устанавливаются плановые цены номенклатуры, а потом рассчитывается плановая стоимость изделия по комплектующим..
Добрй день.
пасибо заа обработку, очень хорошая.
Но есть одно но, когда идет расчет количества у спецификаций ссылочного типа: спец1-спец2-спец3
То количество у первой спец1 считает корректно, а у спец2 и спец3 начинает перемножать число в общих количествах спец, на количество в исх. компликт.
Можно это как то исправить?
спасибо большое заранее
(15)
«Вам нужно для информации также выводить и количество комплектующих на 1 шт. выходного изделия? »
Да это было бы иделаьно, что бы он выводил остальные спец2 и спец3, как спец1
У нас в базе не корректные количества стоят… различаются.
Не подскажете где надо изменить?
Или если есть возможность выслать
зранее спасибо
(14) to_swim, Можно по-конкретнее, что, по-вашему, неправильно?
Если нужно определить стоимость по спецификации 2-х штук изделия, то и количество составляющих это изделие комплектующих также удваивается и стоимость также рассчитывается для этого количества. А цена показывается на 1 шт.
Вам нужно для информации также выводить и количество комплектующих на 1 шт. выходного изделия?
(16) to_swim, Интересует только количество?
Или стоимость тоже?
Стоимость чего? — Всего изделия? Всего количества изделия? Или стоимость входящих в изделие комплектующих-сборок по количеству, указанному в спецификации? или на 1 изделие?
Эта обработка позволяет определить плановую стоимость заданного количества изделия в ценах номенклатуры. Если для расчета брать количество комплектующих не по количеству изделия, то и необходимая стоимость не получится.
Или нужен только состав изделия по спецификациям комплектующих-сборок?
(17)
всего количества (которое указано в Исходных компликтующих, всех спецификациях которе связаны)…
На одно изделие.
Желательно со стоимостью, например по поступлениям… или кк средняя стоимость… Только нужна максимальная стоимость
(18) to_swim, Итак, уточним.
Имеем задачу: определить состав и рассчитать стоимость изделия по спец1. Изделие состоит из комплектующих, которые также могут быть сборками со спецификациями спец2, спец3, и т.д.
При этом хочется еще видеть состав комплектующих-сборок по спецификациям, без учета количества вхождения сборки в выходное изделие. Т.е. если в изделие сборка1 входит в количестве 3 шт., то для расчета стоимости изделия учитывается, что сборок1 — 3 шт., но еще надо видеть и состав сборки1 на 1 шт.
Посмотри вариант отчета. В нем выводится так же количество комплектующих-сборок по спецификациям сборок. Стоимость изделия считается по полной спецификации изделия. Стоимость 1 шт. сборок не считается.
Неправильно обрабатывает спецификации на продукцию и полуфабрикаты где выходное количество <> 1.
А у нас такие почти все — из за малого расхода некоторого сырья спецификации смасштабированы под выпуск 5000 кг продукции например.
Иначе теряем информацию за счет нехватки разрядов в количестве материалов и полуфабрикатов.
(20) tSirkul, У нас используется только 1 шт. выходного изделия. Поэтому вариант с <> 1 не тестировался.
А как вручную у вас обсчитывается эта ситуация? И что именно имеется в виду?
Количество продукции по головной спецификации <> 1?
Или какой-то полуфабрикат изготавливается по спецификации не в единичном количестве?
У нас была (и есть) какая-то аналогичная проблема с мелкими нормами. Решили, что если округлим до 3-го знака, то упростим себе жизнь. Так пока и считаем.
Можно выбрать другую единицу измерения.
Но, я не помню, в этом отчете пересчитываются ли единицы по коэффициенту, и хорошо ли получается. Мне кажется, что это тоже тупиковый путь.
102 строка модуля объекта улыбнуло))))
(22)
(22) Сорри, так было в оригинале. Меня тоже улыбнуло )))
Сразу в УПП не пошла, упала на попытке получить ВидВоспроизводства из узла в надежде что там СправочникСсылка.Номенклатура. Подправил. Затем — количество полуфабриката считает неверно, просто перемножая количество в полуфабрикате на количество в родительской спецификации. Это будет работать только в том случае, если полуфабрикат выпускается на 1 единицу измерения полуфабриката с коэффициентом 1. Может, в штучном производстве и так, но у нас пищевка, там все спецификации на замес сколько-то килограммов каждый раз по-разному. Если же в спецификации количество выпускаемого полуфабриката не единица — вы получите кривую распечатку с неправильными количествами. Собственно, об этом написано несколькими репликами ранее. На скорую руку дописал, но не думаю что это универсально. Еще момент — может работать неправильно, если используются параметры выпуска продукции и формулы, ничего этого в обработке не учитывается, просто берутся количества и все. Пока не знаю, буду ли с этим что-то делать или нет. Но все равно лайк, ибо сэкономлено много времени!
(25) Спасибо! Все правильно. Указанные недостатки имеют место. Не были устранены, так как отсутствуют контрольные примеры (у нас эти режимы не используются), а «придумывать» что-то абстрактное для проверки алгоритма нет времени.