<?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='\
молодец!!!
Пора на прямые запросы переходить, а потом благодарить Ивана Берездецкого за вот это:
http://www.1cpp.ru/forum/YaBB.pl?num=1148127139/0
http://www.1cpp.ru/forum/YaBB.pl?num=1193394153/0
и это:
Отличная обработка, СПАСИБО!
Вот жаль только «Запрос не оперирует величинами типа «Строка» неопределенной длины»
Можно это как-то подправить?
to 2
Не спорю, но подобная штука полезной бывает иногда. так что плюс.
to 3
Как я помню, в запросах 1С не могут фигурировать реквизиты типа «строка» неопределенной длины
добавил строчку перед выполнением запроса Запрос.включитьSQL=1. для справки:
Синтаксис:
Объект.ВключитьSQL(парам)
Параметры:
Объект — объект типа Запрос или Регистр. Парам — число 0 или 1.
Назначение:
(По объяснению Winter-а) включает или выключает обработку запросов, с использованием SQL технологий или по более простому варианту.
Замечания:
Немного статистики (опять таки по Winter-у)
Время выполнения запроса
Запрос.ВключитьSQL(1) -> 5.5 сек.
Запрос.ВключитьSQL(0) -> 49.5 сек
Сей метод нашел Шаров, к единому мнению не пришли (это только для SQL баз или и на ДБФ работает).
Отличная штука!
Очень полезная.
Удобный и быстрый отчёт
Полезняшка
Замечательно!
однозначно плюс)
А я знаю автора! Да и сам приписку успел сделать 🙂 Мужик уже в Германии живет. У него еще много есть придумак! К прим. если кто встречал глСоздатьВыборкуТЗ(…) + еще 4 функции, Без низ работа с ТЗ в 1С это просто ничто! Я автору скинул ссылочку на ресурс 🙂 Так что ЕСТЬ АВТОР!
(11) а на какую тему приписка? случайно не про задание условий на выборку по группе справочника?
Однозначно в 7 этого не хватает, особенно при отладке
Кстати, у кого нибудь были проблемы с результатами запросов по документам (возвращалась различная подборка) при активном Dr.Web
(13) разве для дрвеба есть отличия в запросе по документам от запроса по справочникам или регистрам? ведь источники-то однотипные
Муж смутно опознал в этой разработке фрагменты своего кода 2002 примерно года (а может, и раньше), которые были затем отданы другому программисту (коллеге-франчу) на доработку и благополучно забыты. Коллегу звали Юра Мамрич (если память мужу не изменяет).
Во всяком случае, именно в то время была брошена на полдороге такая задача и тогда же муж узнал о «ВключитьSQL» и стал её использовать.
Не факт, что доделывал её именно упомянутый Мамрич, но если кому интересно — ищите его.
Просто супер
Я не понял чего тут суперного.
Ни в одной типовой конфигурации конструктор не работает.
Если он не для типовой, то нужно так и писать, а не
забивать сайт всякой фигней.
>»Я не понял чего тут суперного.
Ни в одной типовой конфигурации конструктор не работает»
по моему у тебя руки просто супер кривые.
Весч очень удобная. Cleons туда выгрузку в excel приписывал в свое время.
Если такой умный опиши как ею пользаваться для криворуких.
Генерирует отчет только для небольшой группы справочников и то если убрать комментарий из атрибутов.
Для всего остального выдает Комментарий = Документ.АвансовыйОтчет.Комментарий <<?>> ;Запрос[7] : Запрос не оперирует величинами типа «Строка» неопределенной длины
после снятия галки с атрибутов типа строка выдается сообщение:
Длина индекса превышает максимальную длину и не может быть уменьшена.
И что ты на это скажешь пряморукий.
Если я просто пользователь то плюну и выброшу эту обработку,
если программист то лучше напишу свою, чем разбираться в чужой идее.
Ну так чё?
(19) по поводу «Запрос не оперирует величинами типа «Строка» неопределенной длины» — смотри комментарий №4
по поводу длины индекса — надо смотреть:)
Спасибо большое за отчет, очень интересный
спасибо!
Спасибо!
Сам 7.7 практически не занимаюсь. А вот данные базы одной проанализировать ой как надо было.
Отличная штука!!!
Молодец, супер
Молодец !!!!!
Это с диска ИТС обработка
to shard
Дорабатывать будете? А то есть у меня несколько замечаний 🙂
выражаю благлдарность за идею. хотелось бы получить комментарии по поводу моей разработкиhttp://infostart.ru/public/60097/
Позвольте рекомендоватьhttp://infostart.ru/public/14301/ — и запросы строить позволяет, и выполнять, и произвольный код исполнить. И даже прямые запросы к SQL помогает строить «в названиях конфигурации 1С» 🙂
Полезная вещь! только вот ошибка с разрядностью по при экспорте в excel по атрибуту «количество», 120.000 превращается в 120000, по другим числовым атрибутам все экспортируется как надо.
Может кто подскажет как исправить?
(31) ага, имела место такая проблема, поправил
Хорошая идея
Хорошая работа, плюс однозначно
Молодца. Отличная штука. Беру на вооружении в работе. Респект и уважуха автору.
Спасибо, полезная штука!
СПАСИБО!
полезная штука для моего общего развития
Для недалёких (начинающих) пригодится?
Запрос по «регистру» — пусто… И ругается «Номер за пределами значения!» Я может не понимаю чё… А может это из-за конфиг-ии? у меня УСН…
Что делать-то?
(40) Gulak, в УСН регистров нема (в типовой), оптимальным запрос по бух итогам будет сделать.
(42) Я ПОКА человек далекий от программирования! Думала смогу сделать нужные мне вещи с помощью конструктора. А если конкретнее мне нужны расшифровки к балансу. Банки запрашивают каждый квартал… Обрыла всё (ну или мне так показалось, что всё) на сайте… ни чего подходящего не нашла…
В общем нужна помощь специалиста, чтоб пинка дали в нужном направлении… а то каждый квартал по 6-ти конторам расшифровки ручками делать — ЖЕСТЬ!!!