<?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='\
Эта… А как теперь код выделить в тексте?!… Какими тегами?…
Показать полностью
Хорошая статья, для меня даже своевременная 😉
(2) Если бы как раньше, я бы не спрашивал! )
Вот смотри, первый запрос в теги заключил — толку ноль! (
(4) Предлагаю по этому поводу наябедничать Доржи 😉
Отлично!
А про программное управление СКД (ПроцессорКомпановки, ОбработкаРасшифровки и тд) где можно поподробней почитать?
(6) «1С:Предприятие от 8.0 к 8.1», у Хрусталевой тоже говорят про СКД хорошо написано (правда я всё бумажного варианта не дождусь), ну и диски ИТС.
7 Про СКД то говорят, а вот про программное управление мало чего есть 🙁
Но и меня сейчас на клюшках подзагрузили, 8-кой пока в фоновом режиме занимаюсь.
(8) Тут главное понять механизм, а уж нюансы реализации можно и в СП уточнить! )
по больше бы таких подробных статей. мегареспект!
побольше бы таких подробных статей. мегареспект!
(8)как уже было сказано: «…у Хрусталёвой хорошо написано…»
http://ifolder.ru/9620253
книгу (эл. вариант) не очень хорошего качества, но читаемо, можно взять отсюда
(7) тоже жду, можешь пока посмотреть эл.вариант(качество не очень, но читать можно). ссылка выше
(13) Спасибо! Электронный вариант у меня давно есть… 😉
Не люблю просто с монитора читать…
+(14) А вообще, на курсы по СКД записался, в общеобразовательных целях так сказать… )
(11) Лучше бы мегаплюс поставил! 😀 А то на первую страницу так и не вылезет статья… )
(16) фаерфокс притупливает, ещё и но-скрипт 🙂
З.ы. Мегаплюс ставлю!
Поставил +, себя не вижу.
У меня колонка «Остаток внешние данные» выводится как целое число, хотя в табличной части «ВнешниеДанные» «ОстатокВнешняяБаза» описал как Число(15,3).
Вот появился после комментария.
(18) Нужно в наборе данных указывать для поля тип значения.
(19) Это с кэшем тут всё эксперементируют! )
(20) Это противоречит «мягкой типизации» 1С. Вообще-то я могу не знать типа, который получаю.
(21) Почему же противоречит?… Если ты указываешь тип в наборе данных, то значения в строках приводятся именно к этому типу, если нет — то тип любой. Это как с ТаблицейЗначений, можно добавлять колонки уже типизированными, а можно и нет… Я просто хочу сказать, что тип в колонке таблицы из которой загружаем набор данных, роли не играет. Важен именно тип в наборе.
Еще бы во внешние наборы источники данных ADO добавили — цены бы им не было))
А так — приходится извращаться через подсовывание виртуальных таблиц…
(23) Я думаю, дальнейшее развитие СКД пойдет как раз по такому пути. Недаром ведь кроме наборов, есть «Источники данных», где пока редактируется только имя.
(0) Делаю НаборДанных — Объект , передаю ТаблицуЗначений
При вызеве процедуры Процедура ВывестиОтчет()
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровки) — в этом месте ошибка «Не найден внешний набор данных ВнешниеДанные» в чем дело?
(25) Так написано же по-русски все! ) «Не найден внешний набор данных ВнешниеДанные» Что здесь еще можно добавить?… Нет его в структуре ВнешниеНаборыДанных.
Можно ли во внешних наборах, использовать характеристики также, как они используются в наборе данных — запрос?
(27) Да. Если тип значения поля задан, то оно также будет связываться с описанием характеристик.
(28) А как же тогда описать характеристики в этом случае?
Точно так же.
Принцип действия характеристик заключается в следующем:
Мы как бэ говорим компоновке: вот поле с типом значения «СправочникСсылка.Номенклатура» и вот описания его характеристик. После этого компоновка для все полей с таким типом даст возможность выбора характеристик. Т.е. характеристики привязываются не к конкретному полю/полям из наборов данных а к типу значения.
(30) Проблема в том, что в запросе есть ключевое слово «ХАРАКТЕРИСТИКИ» и харакетристики описываются в наборе данных-запрос, а в самой компоновке они не описываются. Если описать 2 источника и в наборе данных запрос описать только характеристики — они подхватятся и для набора-объект?
(31) Нет. Опишите типы полей для набора данных объект и опишите характеристики ТОЧНО ТАК ЖЕ как и для набора данных запрос.
(32) А можно точно ткнуть — где это сделать? )) В конструкторе СКД не нашел, где можно для набора-объект описать характеристики
(33) Это я туплю )))) нельзя блин..
(34) А может можно как-то в наборе-запрос использовать таблицу значений, например через временные таблицы или еще как хитро? )))
вообще я думаю что если сделать набор-заглушку с описанием характеристик то возможно в наборе объект подхватиться..
Ошибка. Нужно задать схему компановки данных. иначе не находит куда вставлять внешнийнаборданных и вываливается с ошибкой.
Большое спасибо
То что надо а я думал все кодом делать (Сверку 1С и Биллинга)
Прикольно то прикольно. Только возвращаемое значение из внешней базы COM-объект. Неудобно блин. Особенно когда с документами нужно работать
А в строке:
что нужно передавать в переменную ДанныеРасшифровки?
в 8.2.14 добавили метаданные «внешние данные»
=======
С учетом этого, определим для поля табличного документа «Результат», процедуру «ОбработкаРасшифровки»:
=======
А не подскажете, как это сделать в неуправляемой форме? На какие кнопки нажимать? 🙂
день добрый! coder1cv8 перезалейте пожалуйста скрины в статью. Похоже фотохостинг http://www.picamatic.com «закруглился». Спасибо.