<?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='\
Здравствуйте! Когда будет по 003 счету?
Здравствуйте!
Такого же рода отчет по переданным материалам в производство, т.е. по забалансу (МЦ,04) по МОЛ , не планируете создать??
Да и счет 002лишним не будет. Авансом плюс.
003 счет добавил
Спасибо большое! Очень нужный отчет!
тоже спрошу — а с детализацией по документам расчетов, можно такой отчет сделать для 8.3 Бух и что по цене?
Подскажите пожалуйста.Почему, когда выбираю отчет по форме МХ — 20, таблица отчета выходит пустая?
(7) dimbos_s, Надо обязательно указывать склад.
Хороший отчёт!, ждём доработок
А можно добавить группировку по счёту учёта, и выбор счетов учёта?
(9) nikaleks, Конечно добавлю, в ближайшую неделю. Думаю будет лучше.
Если сделать отбор «по всем складам» будет ли выводить по складам? Аналогично отчету «Остатки по складам» БП 3.0
И можно ли организовать вывод по складам в случае отрицательного ответа?
А как рассчитывается цена?
(12) gull22, Цена не рассчитывается, все берется из остатков по хозрасчетным оборотам. Планирую добавить иерархию по складам, и проверку на ведение учета по партиям, в ближайшее время.
(13)
Цена на конец периода?
Не работает в принципе по 10 и 41 на июль 2015, т.к.
Функция ПолучитьВыборкуПоБухДанным()
| ХозрасчетныйОстаткиИОбороты.Субконто3 = &Склад — НЕТУ СУБКОНТО 3 на этих счета
Субконто3 = Склад при методе списания ФИФО, а при среднем списание у Вас склад в Субконто2, поэтому надо чуть изменить запрос под свой метод списания ТМЦ.
(16) nata_87, Изменения в запрос (в зависимости от настроек 1с 2 субконто или 3 на счетах учета) я вносил. Видимо не обновил. Обновлю.
Добрый день. А не могли бы вы добавить группировку, чтобы в разрезе групп материалы указывались. А то я скачала, а там все в общем котле 🙁
(18) Yolochka, (18) Yolochka, Не вижу необходимости, хотя не понял куда добавить.
ВедетсяУчетПоПартиям = СпособОценкиМПЗ = Перечисления.СпособыОценки.ПоСредней; в строке 30 и тогда взлетел при расчете себестоимости по средней.
Отчёт формируется по всем складам, но когда выбираешь конкретный склад — пустая таблица.
(21)Я посмотрю, там может быть проблема каким субконто у Вас склад 2 или 3, хотя я в свое время предусматривал это надо проверить спасибо. Исправлю отправлю Вам на днях если что.
Проверил все работает.
Не проверял если партионный учет. Если не работает пишите отправлю на почту.
Добрый день !
Отбор по складу не работает, когда ставлю галочку по всем складам выводит все , а отдельно по каждому складу ничего нет пусто. С чем может быть связано ?
(25)Да, так давно это было, код исправил, куда отправить ?? Сегодня я бы все переделал, но пока оставлю.
(26) Добрый день! Тут выложена последняя версия? Можно скачивать?
(27)Коли так Давайте после праздников 10 января обновлю. Там еще улучшения внесу.
Что за хрень, на версии 3.0.69.32 если выбираю склад выводится только количество, без сумм. На версии 3.1.9.188 вообще ошибка: Форма.ФормаОтчета.Форма(519,28).Переменная не определена (БухгалтерскийУчетПереопределяемый). Не рекомендую..
(29)Извеняюсь, все работает. Только при включенной настройке Учет запасов по складам (по количеству) сумма в отчет не выводится, на этот случай никакого расчета по среднему либо данных из документов не предусмотренно(( Смысл этого отчета тогда теряется, так как если включить (по количеству и сумме) то можно те же данные получить и из оборотно-сальдовой по счету!!!