<?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='\
«в консоле запросов»?
Можно более быстро и без лишних движений воспользоваться Инструментами разработчика от TormozIT. Там отладить можно все что угодно
(2) Бэнни, а можете статью написать также на конкретном примере?
(4) Не, правильно Велик и могуч русский языка :))
(5) Велик могучим русский языка (с) А.Иванов. Уж если на то пошло. 😉
В худой котомк поклав ржаное хлебо,
Я ухожу туда, где птичья звон,
И вижу над собою синий небо,
Косматый облак и высокий крон.
Я дома здесь, я здесь пришел не в гости.
Снимаю кепк, одетый набекрень.
Веселый птичк, помахивая хвостик,
Высвистывает мой стихотворень.
Зеленый травк ложится под ногами,
И сам к бумаге тянется рука,
И я шепчу дрожащие губами:
«Велик могучим русский языка!»
Вспыхает небо, разбужая ветер,
Проснувший гомон птичьих голосов.
Проклинывая все на белом свете,
Я вновь бежу в нетоптанность лесов.
Шуршат зверушки, выбежнув навстречу,
Приветливыя лапками маша:
Я среди тут пробуду целый вечер,
Бессмертные творения пиша.
Но, выползя на миг из тины зыбкой,
Болотная зеленовая тварь
Сувает мне с заботливой улыбкой
Большой Орфографический словарь.
(с) Александр Иванов
Автору топика посвящается.
(2) и под УФ???
Я, видимо, пропустил релиз ИР под управляемое приложение
хорошая статья, спасибо!
(3)http://forum.infostart.ru/forum9/topic206874/message2117247/#message2117247
Что за консоль запросов такая волшебная со вставкой из XML?
(11)Стандартная консоль запросов с ИТС, в справке в этой консоли можно прочитать про кнопку «Заполнить из XML»
(12)
видимо пользовался более старой версией обработки, где не было такой функции. Скачал с ИТС новую версию. Спасибо!
Спасибо за статью! Тоже брал итоговый запрос в режиме отладки. Но остальных хитростей не знал.
(6) Где то на лурке была статья про анальную сексуальность грамар-наци. Автор написал много слов и просто сделал опечатки. )
(0) представляю какую огромную работу выполнил автор, затем приложил усилия — чтобы подробно и с картинками продемонстрировать свой метод! спасибо за труд! окупится сторицей!
(16) Спасибо за поддержку. Конечно извиняюсь за опечатки, но те, кто статьи пишет на Infostart (а не просто тролит ), знает, что там собственный редактор, где эти опечатки, ошибки не показываются, а писать сначала в Word а потом переносить на Infostart это неудобно, если статья со скриншотами, картинками. А хотелось успеть «сдать» статью до Нового года!.
(15) ОК, зетс райт. Но мину-сователи-то…
[ ] — место для дополнительного минуса
(18) Любите смотреть кино — полюбите и рекламу…
Спасибо за идею.
(6) Эт фигня.
С НАСТУПАЮЩИМ УРА !!
Он был московский алкоголец
И даже ванну не имел
Она же с роду комсомолец
И вся полна суровных дел !!
Однажды случей приключился
На 31 декабря
С друзьями в бане он на пился
И стал зелёная сопля !!
Они ехидски по шутили
Сменяв товарищу жильё
И оказался он в квартире
Прям на постели у неё !!
Она при шла и стала плакать
За что мне Боги это всё
А он воняит как собака
И маты разные несёт !!
Со рвал обои и картины
Везде на пукал на дышал
Пришол жених её ревнивный
И во своясе убежал !!
А он чего ты при ципилась
Орёт на целый Ленинград
Но тут она в него влюбилась
И даже зделала салат !!
Он бросил пить с того момента
И стал вобще как огурец
Потом на речи президента
Он ей признался на конец !!
И туд- же Боги Поднебеси
Блогословили иху связь
Потом прошол медовый месец
И дочка Лиза родилась !!
С тех пор они друг друга любят
А таг- же тёща и свекровь
Я призываю добры люди
Давайте выпьем за Любовь !!
Автор, не могли бы вы уделить 10 минут времени на то, чтобы медленно и внимательно прочитать статью и исправить орфографические ошибки и опечатки?
Статья годная, но ашипка напригаит читать сделать хароший отчёту.
(22) Исправил ошибки в тексте
Добавил возможность подгружать внешние наборы данных в консоле отчётов СКД, описано в статье.
(7) ИР выпускается в 3-х вариантах: подсистема, портативный и расширение. В управляемом приложении не работает только портативный. Но в управляемом приложении используются обычные формы.
(2) Да. В ИР такая задача решается намного проще и универсальнее. Отладчик кстати строковые значения целиком не показывает и обрезает их примерно после 300К (точнее 320000) символов. Причем от разрядности приложения это не зависит. Поэтому если снимок данных для отладки превысит этот барьер (например при наличии больших входных временных таблиц запроса или наборов данных компоновки), то отладить предложенным в статье способом не выйдет. В ИР такой проблемы нет.
16.01.2019 Добавлена в расширение для отладки отчетов функция, которая позволяет во время отладки в Конфигураторе выгрузить отлаживаемый отчет во внешний отчет (в файл) со всеми настройками в момент точки остановки
Мир этому дому! Больше решений — хороших и разных! Автору за труд спасибо. А вообще, в споре истина и рождается: читаешь комментарии и видишь разные подходы для решения одной и той-же задачи, мнения и аргументы, а порой и интересная информация просто так, мимолётом, маленьким вкраплением проскакивает. Критика и обсуждения полезны конструктивные. ИМХО.
отладка скд — быстрый способ:
1. точка останова на строке вида
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, НастройкиСКД ,,,Тип(«ГенераторМакетаКомпоновкиДанных»));
2. в отладке получаем результат функции из бсп
ОбщегоНазначения.ЗначениеВСтрокуXML(МакетКомпоновки)
3. Консоль СКД из ИТС
без скд в xml и настроек варианта сразу помещаем текст из п.2 в окно
«Макет для табличного документа XML» Выполнить в табличный документ с текущим макетом
прим: Если Тип(«ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений»)
то используем окно «Макет для коллекции XML»
Спасибо
Спасибо за труды.
(17) Неплохой прием. Спасибо за труд. Не обращайте внимание на троллей.
дойдет дело до БП 3.0 — будем разбираться
(33) БП 3.0 это пример был что в всем понятен, а так со сложными отчётами я прежде всего наоборотался в других конфигурациях в т.ч. и нетиповых, отраслевых
(3) Сделал свежее видеоhttps://youtu.be/qVGXWU8w1W0
(29) Решил попробовать ваш вариант, скачал консоль СКД , так и не понял где там есть окно «Макет для табличного документа XML» , подскажите пож, если нетрудно подробнее по 3 пункту.
(36) вот здесь
http://skrinshoter.ru/s/130319/A6XwpCYK
(29)
Мне функция вернула обрезанную строку. Ну и естественно в консоли вылезла ошибка.
Как такие варианты обыгрывать?
(38) Не понял о какой именно функции говорите. Поподробнее напишите.
(39) Я про ОбщегоНазначения.ЗначениеВСтрокуXML(МакетКомпоновки)
Получил значение этой функции в отладчике оно заканчивается вот так:
» …..
Тогда (ЕстьNull(НаборДанных1.Доход13, 0) — ЕстьNull(НаборДанных1.Вычет, 0) — ЕстьNull(НаборДанных1.ВычетСтан…»
Т.е. не вывело весь текст. Отсюда и вопрос, как-то можно получить весь, не обрезанный текст возвращаемый этой функцией?
Ну чтобы дальше уже скормить ее консоли.
(40) Скорее всего у вас очень большая схема. У отладчика есть ограничение на количество символов в строках переменных.
Думаю. вам надо обернуть эту функцию ещё в одну, которая скинет строку в текстовый файл.
Например, в общий модуль добавьте, еще одну функцию
Показать
Тогда вызов будет в отладке как-то так
(41) Понял, спасибо. Тоже пришел к выводу, что надо в файл записывать. Искал готовую функцию в ЗУПе. Не нашел. Без расширения значит никак в типовых не обойтись.
Вот эта строчка не работает: ОтладкаСКД.ПолучитьЗапросНабора(СхемаКомпоновкиДанных,КомпоновщикНастроек,»ОсновнойНабор»);
Табло отладки ругается на то, что переменная ОтладкаСКД не определена.
(43) С этим разобрался. Не подключил расширение, оказывается. Но возникла другая проблема в УТ 11.4:
Строка в табло: ОтладкаСКД.ЗапросВСтрокуXML(ОтладкаСКД.ПолучитьЗапросНабора(СхемаКомпоновкиДанных,КомпоновщикНастроек,»НаборДанных»))
Результат: {ОтладкаСКД ОбщийМодуль.ОтладкаСКД.Модуль(128)}: Значение не является значением объектного типа (Запрос)
(44) может быть ваш набор данных в схеме СКД называется не «НаборДанных» а по другому
(45) к сожалению, нет. Именно так и называется. Правлю как раз тот же отчёт в УТ 11.4, что и в презентации расширения.
На УТ 11.4.10.62 и платформе 8.3.15.1700 не работает обработка, как и писал выше. Полезное расширение. Хочется решить проблему с его работоспособностью.
(47) Сообщите строку кода, где вы делаете остановку в отладке и какой метод или что не работаете ?
(48) Отчёт ДебиторскаяЗадолженность, Модуль объекта, процедура ПриКомпоновкеРезультата, строка 64 (МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных, ДанныеРасшифровки);
)
Максим, не проверял работоспособность расширения ещё? Крутое расширение, но не работает, похоже.
(49)
(44)
Вы пытаетесть получить запрос у набора данных с именем «НаборДанных», который является не набор-запросом, а набор-объектом, поэтому и ошибка
(50) ответил вам выше в (51)
и просьба писать точнее, не «не расширение не работает», а » у меня не работает ваше расширение на моём конкретном примере, похоже я что-то делаю не так или не разобрался»
(52) просьба быть внимательнее. Именно расширение не работает, пока не доказано обратное. Я выполнил все инструкции по подключению. Версию платформы и конфигурации я так же указывал. И не разобрались с вопросом именно Вы или в том числе как минимум.
(51) Ваше расширение не работает для версии отчёта в УТ 11.4, получается. Либо нужно менять передаваемые параметры каким-то образом.
(53)я проверил на УТ 11.4 последней версии, все работает
(55) хорошо, я понял. Думаю, есть смысл уточнить в инструкции, как подключать набор-объект кроме набора-запроса.