<?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='\
А почему бы особенности отчетов не выложить в качестве описания.
На сайте все вроде для этого есть 🙁
ок, сделаю чуть позже
Я как-то думал, что просроченным считается док, если ориентироваться на реквизит «дата оплаты»….
За остатки с фильтром цен огромнейший фенкс +100!!! 🙂
Хороший отчёт! Спасибо! А как сделать, что бы вместо «Код» печатать № п/п.
glazk: а какой отчет ?
Остатки ТМЦ
Замечание (3) было обойдено вниманием … 😉
Замечание (3) не было понято …;)
понравился отчет остатки с фильтром цен. Отчет по списанию тмц плачет, что не нашел в справочнике тип цен закупочная, хотя такой тип цен есть…
10) д.б. именно «Закупочная». с большой буквы. Кириллицей.
(можно скопировать из текста этого сообщения)
В отчете «Отчет по продажам (без ГП, с периодами).ert» если меняются цены закупа, то просчитывает неправильно, но при ровных ценах все прекрасно.
(12) подразумевалось так: отчет не видит изменений цен в пределах периодов. Цена берется в каждом периоде на его конец. Работает не так ?
(13) Да, он отсчитывает от одной цены . Есть еще вопрос про множественный фильтр : при выборе фильтра, например по покупателям, выскакивает окошко, но активной остается только форма отчета и выбрать покупателей невозможно. При обновлении открывается форма стандартного отчета (но это не так важно, а работа фильтра интересует очень)
(9) Штатная ТиС взаиморасчеты гасит по ФИФО в рамках договора. Зачем это считать мимо регистров…? (или я не въехал)
(9) по поводу (3)
> Просроченным считается документ, плановая дата оплаты которого превышает дату конца формирования отчета,
Например, есть Реализация N123, плановая дата оплаты = 31.01.2008 — т.е. представлена большая отсрочка…
Отчет? период задан до конца года 2007 г.
По вашей логике получается, что Реализация 123 — просрочена…?
…и вообще — странно… в зависимости от даты ВЫБОРКИ данных принимать решения по данным….?
(16) логика у вас верна )) судя по всему я ошибся в описании, или того хуже в самом отчете (что менее вероятно), посмотрю позже напишу
(15) а это уже из заголовка: «…для тех, кто не любит
возиться с восстановлением ГП»
(18) понял… т.е. типа вместо восстановить ГП и получить в отчете правильные данные делаем расчет по фифо — т.е. то же самое «восстановление ГП» но прямо в отчете…? вы уверены что вы учли все телодвижения во взаиморасчетах? продажи-возвраты-сторно-корректировки-отчеты комиссионеров-пко-рко-банк и прочее ВСЕ что имеет отношение к взаиморасчетам…? в т.ч. несовпадение валют договора и валюты документа… и проче…?
Да или нет? учли ВСЕ?
(14) по поводу невозможности работать с мн.фильтром — не смог воспроизвести описанное у себя. При добавлении покупателя в мн.фильтр открывается немодальный подбор,
при доб.свойств — уже модально. Что касается кнопок «Настройка» и «Обновить» — я с ними пардон — не заморачивался. По идее там не сложно поправить
(20) может быть это связано с модальным окном
(19) конечно не уверен ))
но пытался учесть. Если увидите ошибку — пишите, буду благодарен.
вообще, для разных валют не тестировался, работал в основном в режиме «все договоры в рублях»
(21) если сам отчет открыть модально, то такая фича появится. Но как он его открыл модально — другой вопрос.
(18) могу еще по этому поводу сказать, что учитываются оплаты введенные на основании. Т.е. если ПКО введен на основании реализации, то она считается оплаченной, независимо от того на какой позиции ФИФО она находится.
Отчетов комиссионеров там каж. нет. вводы остатков, возвраты и корректировки долга учитываются. Сторно нет. Реализация только документ вида «Реализация». Остальные нет.
В общем, конечно целиком восстановление ГП он не заменяет, надо дорабатывать.
Хотя на практике, видел я базы, где добросовестно восстанавливали эту самую ГэПэ, и в отчетах по взаиморасчетам возникали такие хитроумные переплетения кредитных документов, что диву даешься.
Спасибо за отчеты! Избавили от некоторой работы)
Очень помог ваш отчёт Ведомость по контрагентам (без ГП). В отличие от стандартного не глючит. Плюсик за щедрость вашу к всем вашим разработкам. +++++++++++++++++++++++++
(26) Еще посты можно плюсовать, чего мелочиться…
(26) спасибо-очень-приятно!
(27) бросай это дело
(29) А что, я неправ? Ты думаешь, тот что тебе все разработки плюсанул, хотя бы посмотрел на них? Ему понадобился один отчет по ТиС, а в благодарность он плюсанул еще 6. А что там у тебя в этих шести — ему по барабану. А другому, кто их будет смотреть и скачивать — не по барабану. Ты сам-то можешь аргументированно объяснить мне, тупому, в чем я неправ?
Большое спасибо за отчет по остаткам ТМЦ, можно еще 1 поправочку внести в отчет добавить форму, чтобы отслеживать документооборот товара, чтобы не пользоватся несколькими отчетами.
(31) можно скопировать формирование отчета из «Ведомость по остаткам…» (или что нибудь вроде того в ТиС). Думаю, навряд ли у меня руки дойдут в ближайшее время
Спасибо за отчеты но есть непонятный косяк не могу понять как он получается в отчете «ведомость по контрагентам» дни просрочки какие то астрономические прям неправильно считает досадно такой удобный а никто ссылочку не кинет может есть для тис 9.2 такой же отчет как для 8.7 «взаиморасчеты» буду очень благодарен.
(33) посмотрю, м.есть для 9.2. но он скорее всего с использованием 1с++
такой и нужен у меня есть реализация на 8.7 но они отличаются буду очень признателен — prostoprogrammer@list.ru
понравился отчет остатки с фильтром цен
(35) чего то я запутался, тут же как раз отчеты для 9.2
все правильно но в 8.7 прям обширные взаиморасчеты а в 9.2 только отчеты по долгам а там даже дней просрочки нет я пробовал переписывать со старой но база переполнена нестандартными регистрами черт ногу сломит вот и спрашивал может у кого есть чего нибудь подобное чтоб просрочка долги и дату на скажем недели 2 вперед можно было ставить от ТА я это делал только логическим методом обмана ато ТА ругается 🙂 если что нибудь подобное есть было бы отлично.
интересный отчет остатки тмц с минимальным остатком
Интересно, в отчете по продажам функция за день есть, а в списке нет:
сзПериодичность.ДобавитьЗначение(«??????»);
сзПериодичность.ДобавитьЗначение(«Месяц»);
сзПериодичность.ДобавитьЗначение(«Квартал»);
сзПериодичность.ДобавитьЗначение(«Год»); добавил за «день», получил то, что надо, но вот, что хот-са сделать чтобы дни в колонке, а товар по горизонтали? не подскажете?
И в отчете по контрагентам Поле агрегатного объекта ЗачтенАвансПоставщикуВал ошибка, пришлось убрать, в виду отсутствия оного.
(40) >>хот-са сделать чтобы дни в колонке, а товар по горизонтали? не подскажете?
могу сделать, пишите — договоримся