<?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='\
На FC8(32bit) работает уже две недели на пару с 8.1
А какая сборка 1С? Вылетала, кстати, когда работали две базы. В одну я переносил из семерки данные, а в другой активно конфигуратором пользовался.
>метода «УстановитьСхему» просто нет
Он есть. Только называется «Вывести»
Вывести (Put)
Синтаксис:
Вывести(<Схема>)
Параметры:
<Схема> (обязательный)
Тип: ГеографическаяСхема. Выводимая схема.
Описание:
Выводит в схему данные из макета географической схемы.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Сборка такая же — 1С:Предприятие 8.2 (8.2.9.356)
Да, «сюрпризы» есть.
Платформа 8.2.9.356
Конфа своя
Почему-то при попытке передать с сервера на веб-клиент маленькую таблицу значений выдаёт ошибку -мол такое нельзя 😥
Показать
Показать
Просто Результат нельзя передать …
(5) Я думаю, что стоит прочитать документацию и руководство разработчика. Там черным по белому написано про объекты, которые используются в тонком клиенте.
В приведенном выше примере эту проверку надо делать в контексте сервера:
Зачем нагружать обработкой клиентские машины?
А ещё есть ПередЗаписьюНаСервере()
и
ЗапросПоIP=Новый Запрос;
ЗапросПоIP.Текст=»ВЫБРАТЬ
| ФИОПользователя.IP,
| ФИОПользователя.Код,
| ФИОПользователя.Выбыл
|ИЗ
| Справочник.ФИОПользователя КАК ФИОПользователя
|ГДЕ
| ФИОПользователя.IP = &IP
| И ФИОПользователя.Код <> &Код
| И ФИОПользователя.Выбыл = &Ложь»;
ЗапросПоIP.УстановитьПараметр(«IP»,IP);
ЗапросПоIP.УстановитьПараметр(«Код»,Код);
ЗапросПоIP.УстановитьПараметр(«Ложь»,Ложь);
Результат=ЗапросПоIP.Выполнить().Выгрузить();
Возврат Результат.Количество();
я бы заменил на:
ЗапросПоIP=Новый Запрос;
ЗапросПоIP.Текст=»ВЫБРАТЬ
| ВЫБРАТЬ Первые 1 ФИОПользователя.Ссылка
|ИЗ
| Справочник.ФИОПользователя КАК ФИОПользователя
|ГДЕ
| ФИОПользователя.IP = &IP
| И ФИОПользователя.Код <> &Код
| И ФИОПользователя.Выбыл = &Ложь»;
ЗапросПоIP.УстановитьПараметр(«IP»,IP);
ЗапросПоIP.УстановитьПараметр(«Код»,Код);
ЗапросПоIP.УстановитьПараметр(«Ложь»,Ложь);
Отказ = Не ЗапросПоIP.Выполнить().Пустой();
dushelov 22.11.2009 10:51:09
>метода «УстановитьСхему» просто нет
Он есть. Только называется «Вывести»
Есть, но приложение уходит в бесконечную рекурсию.
Перед тем как написать проверь. (Проверял на тонком клиенте)
(8) Если есть возможность, дай свою конфигурацию посмотреть…
Пиши it@selenia.ru… Метода Вывести в Графической схеме нет. Есть в Географической. Я только одного не понимаю, почему 1С-ка зацикливается, вместо вывода ошибки.
(10) Отписал…
Отправил :0)
(12)
Работает :0)
(0) Фиг с ней, с этой схемой! Ты лучше расскажи как конфигуратор на Убунту запустил )))
Virtual box — хорошо виден на скриншоте. На debian lenny и из-под wine заработал. Только вылетает при создании форм. Говорит Ключ защиты больше не доступен. На Ubuntu ключа так и не видит. Интересно кто виноват wine или 1С…
P.S. 8.1 под wine не вылетает.
Структура кода должна быть определена не прикладной логикой, а логикой клиент-серверного взаимодействия
Нужно научиться мыслить клиент-серверной логикой!
Для меня один из главных сюрпризов, то что объект не хранится на сервере. При переходе с клиента на сервер объект создается заново.
При этом заполняется данными которые есть на клиенте. Но ведь на клиенте не все можно хранить. Получается, что нужно использовать временные хранилища. Вобщем гемор.
(18) А в чем проблема использования РеквизитФормыВЗначение и ЗначениеВРеквизитФормы ?
(19) Поясню на задаче.
На клиенте пользователь вводит настройки. Потом хочет получить информацию.
Для этого мы идем на сервер. Получаем данные, по ним формируем информацию и возвращаем ее.
При этом полученные данные хотелось бы сохранить, чтобы не получать снова.
В 8.1 для этого мы записывали ее в реквизиты объекта или переменные.
В 8.2. так делать нельзя, т.к. в первом случае они приедут на клиента, а во втором случае потеряются.
(16) ключ в 8.2 на ubuntu под wine заставили видеть методом тыка, хотя мистики я не понял: nethasp.ini с прописанным ip менеджера лицензий переложили из 1Cv82/conf/ в 1Cv82/8.2.9.356/bin/conf/ — и заработало сразу.
До этого стабильно ругался при запуске «Ключ защиты более недоступен»
Я сделал то же самое, но не помогло. Хотя мистики тут нет. Все просто путь поиска файла (nethasp.ini) начинается с каталога программы, потом переходит в каталог программыconf потом смотрит ConfLocation в conf.cfg
Общее (видимо для 8.1 и 8.2 +sql), относительно процедур НаКлиенте и НаСервере:
1) сначала оказывается надо передать управление общему модулю, вот там выполнятся серверные, а в модуле (скажем, объекта) не получается жонглировать взаимными вызовами из НаКлиенте процедур НаСеревер 🙁
2) отладчик не заходит в серверные процедуры (даже если я выполняю отладку на самом сервере, но это, видимо, никак не влияет и не связано).
(23) 1. Ничего не понятно.
2. Все заходит. В конфигураторе надо еще разрешить отладку.
И вообще, отлаживать серверные модули лучше в файловом режиме.
Разрешена отладка. Ещё сюрприз работы с SQL — это при запуске приложения в режиме отладки оно имеет свойство зависать на этапе заставки и нужно перезапустить всё — это только у меня?
(25) Никаких таких проблем не замечено. У нас все работает в промышленной эксплуатации с тонким и веб-клиентом.
Спасибо, помогло 🙂