<?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='\
Аааааааа…. не работает. выдает ошибку.
версия 8.2.18.61 конф 3.0.20.10
А так бы было здорово. Нужен реестр счетов-фактур по материалам, услугам — отдельно.
Для входящих и исходящих отдельно. Причем если нет сч-фактуры, то нужен просто документ по приходу (расходу) с пометкой счет.
(1) besks, что в сообщении об ошибке?
Здравствуйте.
При открытии формы выпадает ошибка и форма не открывается:
{Форма.ФормаОтчета.Форма(93)}: Поле объекта не обнаружено
ДокументыОснования = Метаданные.Документы[ВидСчетаФактуры].ВводитсяНаОсновании;
Это из-за того что нет значения ВидСчетаФактуры при самом первом открытии формы.
Если в процедуре ПриОткрытии() значению ВидСчетаФактурыприсвоить значение, то ошибки нет.
Вы все-таки подумайте на счет реестра полученных и выданных счетов фактур + акты без сч/ф
Заранее благодарна
(3) besks, Да, косяк! Не предусмотрел! Спасибо! Напишите, пожалуйста, по конкретней что бы Вы хотели видеть, просто я не совсем в теме! 🙂
Может я чего не понимаю, но в консоли отчетов эти отчеты пишутся за 2-3 минуты с любым количеством настроек по отборам и прочим вещам.
Мне нужен реестр по полученным счетам фактурам отдельно по материалам(товарам, оборудованию) и отдельно по услугам. Так же еще бывает поступление товаров и услуг, но без счетов фактур — тогда напротив нужно указать что это счет, а дате проставить полученного документа.
Отчет:
№ сч/ф | Дата сч/ф | Контрагент | Сумма документа|
Тоже самое нужно и по выданным — все отдельно
Заранее благодарна
(5) OBEH,
Вы конечно все правильно понимаете, но не всем даны ваши мозги 🙁
(7) besks, ну хорошо. Есть в БП 3.0 «Консоль отчетов»?
Нет.
Можно в конфе на СКД попробывать, но у меня как то пробел по соединениям таблиц.
А вообще в данном вопросе у меня самая большая проблема как услуги отделить от материалов- беда
(9) besks, а на каком счете учитываете услуги? На каком материалы?
(9) besks, Во всех стандартных конфигурациях есть консоль отчетов. И не нужно лезть в конфигуратор.
А отделение услуг от материалов решается простым движением мышки. Причем, без дополнительных вопросов, типа, «А на каком счете учитываете услуги? На каком материалы?»
И еще.
По моему, для такого отчета никаких «соединений таблиц» не требуется.
Ну что, будете смотреть консоль отчетов в БП 3.0?
(11) Овен
Конечно буду.
Только если несложно, подскажите где ее найти. В 2.хх — она на виду, а вот где в 3.хх?
(12) besks, мда…
чуток обманул.
Действительно, в БП 3.0 нет консоли отчетов. Ее почему-то убрали.
Есть убогая консоль запросов. Но это больше для программистов или для продвинутых пользователей.
Я уже и забыл, что просто выдернул ее из БП 2.0 и вставил в БП 3.0
Уже более десятка обновлений БП 3.0 сделал и даже не замечаю ее отсутствия.
Пользуюсь и все.
Не понимаю причин «изъятия» ее из 3.0.
Может быть, стоит ее из 2.0 перетащить? Это делается очень просто.
Уж очень неплохо облегчает жизнь.
В противном случае постоянно придется добавлять всякие разные отчеты, типа, «Наличие счетов-фактур для БП 3.0»
(10) извините за задержку.
У нас заведены субсчета для более наглядной аналитики по каждому счету
Реализация — 62.01:
62.01.1 — работы
62.01.2 — услуги
62.01.3 — материалы
Поступление — 60.01
60.01.1 — работы
60.01.2 — услуги
60.01.3 — материалы
(13) OBEH,
Вы просто эту обработку в конфигураторе перетащили, из 2 в тройку?
Я сейчас перетащу и буду ждать дальнейших указаний.
А из ЗП в бухгалтерию перетащится?
Да и еще…
в этой консоле отчетов очень легко удаляются отчеты пользователями. Именно поэтому я больше люблю в СКД внешним отчетом, а потом прицепить во внешние отчеты.И конфигурация цела и удаленные отчеты разыскивать раз в неделю не нужно
(15) besks, Она должна работать под УФ в 3.0.
Если не заработает, могу выслать готовую, переделанную под УФ консоль отчетов.
Возможно, я чего-то там под УФ подшаманил.
И еще только в толстом клиенте. Надеюсь, с толстым клиентом у вас в конторе нет проблем
Если ЗП у вас на УФ то, я думаю, без проблем перенесется.
Да и еще..
Чтобы эти отчеты не удалялись пользователями, нужно сделать ресурс, на котором эти отчеты будут находиться, для них только для чтения.
(16) OBEH,
Понятно.
Если не сложно, то скиньте мне на мыло besks@mail.ru
В конторе — только на толстом клиенте.
(17) besks, Сбросил.
Наверное, теперь придется писать отчет на этом самом инструменте?
(18) ОВЕН
Ну вы же мне обещали дать инструкции 🙂
Без вашей помощи никак
(19) besks, тогда подробно чего хочется от отчета.
Типа, небольшого ТЗ. Как время будет, набросаю.
То есть, если буду делать, то по универсальнее.
Кстати. Глянул сейчас в БП 3.0 ПоступлениеТоваровУслуг.
По сравнению с БП 2.0 там изменения. Удалили НомерВходящегоСчетаФактуры и, соответственно, его дату
(20) OBEH,
Изменения произошли буквально в апреле 🙁
А ТЗ — посмотрите (6) — я там написала, что хочу
(21) besks, Форма отчета уже кое-что.
А алгоритм можно написать? Это же вам надо. Вот мне, тупому программисту разжевать. Программистом я себя не считаю. Больше постановщик.
Было бы хорошо реализовать возможность отбора «С НДС» без «НДС», так как не знаю как у других, а у нас в организации счета фактуры вводят только на накладные с НДС (где в поступлении товаров сумма НДС > 0). Поэтому проверяют наличие с.ф. только на накладные с НДС. Сейчас придется по всему списку открывать и смотреть с НДС или без НДС была поставка и если «Да» то вводить с.ф.
(23)Я ничего не понимаю. У меня работает консоль отчетов и такого рода вещи пишу влет. Практически, набрасываю мышкой за 5-10 минут. Может у меня что не так?
(10)
Спасибо. На основе Вашего отчета наконец то вывела себе реестр.