<?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='\
Скажите, а таки чем вы руководствуетесь когда называете функции «Ъ», «Ъновый» и «Ътип» ???
Чтобы было сокращенно и было созвучно с Новый , а Ътип из той же оперы.
Мне лично, так код удобнее читать.
Плюс за старания. Но по опыту скажу, если совмещать высокую нагрузку с внешними компонентами, до добра это не доводит.
Направление интересное. Пожалуй только фраза про «импортозамещение» не к месту прикреплена. Вроде Линус Торвальдс российского паспорта не получал пока. Ну и из 1с- «Энумератор» и «Врап» звучат так себе.
(3) pbazeliuk,
Проблема тут не в самой компоненте, а интерфейсе, что 1С предоставляет.
Например практически все программисты 1С используют ComОбъект.
По моей методе можно использовать
NetОбъект,NetТип
JavaОбъект,JavaТип
И эти объявления будут реально кроссплатформенны.
При это различия с ComОбъект минимальны. Имя класса равноценно комовскому ProgID. При этом нет ограничений на используемые типы.
Ты можешь написать свою библиотеку поместить в определенное место и использовать её вместо COM. Без регистрации итд. Расширять возможности 1С станет легче.
Например сейчас в конфигураторе куча функций, которые есть в стандартных библиотеках. При этом функционал 1С функций сильно недотягивает до стандартных библиотек.
Учитывая кроссплатформенность можно использовать нетовские или явовские библиотеки везде где можно. Упрощая программирование.
А что касается работы с HTTP,SMPT, JSON то эти библиотеки были задолго до того как 1С их реализовывала, при этом с ошибками и функционалом сильно недотягивающих до .Net или Java.
Стоит ли тратить время на то, что можно взять из стандартных библиотек. А ведь можно легко расширить за счет своих сборок.
При этом например нетовская библиотека весит всего 65 мегабайт, которую можно включить в дистрибутив и главное это кроссплатформенное решение. Причем нет ничего сложного передавать в параметрах и объекты 1С которые поддерживают аналогичный интерфейс. Можно пойти по пути подсчета ссылок в 1С, а доступ к объектам 1С только на время вызова метода ВК.
Например Использование сборок .NET в 1С 7.x b 8.x. Создание внешних Компонент многие бы использовали на равне с ComОбъект, но главная причина её неприменения в том, что она неинтегрирована в 1С.
Даже если 1С не хочет интегрировать .Net в 1С, то можно сделать вариант ВК под .Net и Java . Прежде всего для получения объектов ВК и передачи их в параметрах. Кроме того можно добавить доступ по индексу [], получения итератора.
(3) pbazeliuk,
Кстати сейчас нашел способ вызвать методы и свойсва для Динамиковhttps://rsdn.ru/forum/dotnet/6493695.1
и вставлю в компоненту
(4) soba,
Использование сборок .NET в 1С 7.x b 8.x. Создание внешних Компонент
Согласен, но меня на это сподвигло собеседование при поиске работы. Так как моя разработка
была мало интересна, так как не кроссплатформенна, а в разрезе «импортозамещения» сейчас требуется кроссплатформенное решение.
Сделал, но какого не то, что ажиотажа а даже простой заинтересованности не видно.
(4) soba, По поводу врап и Энумератор.
Лучше было бы по аналогии с ComОбъек писать NetОбъект.
Но так много писанины. На сче Энумератора, то не нашел лучшего перевода (перечислитель перечислимый)
Было бы проще если бы по аналогии с COM была поддержка Для Каждого
Идея +. А Java c CORBA — не рулят?
CORBA это Out Process, я предлагаю упрощенный In Process взаимодействие.
Сейчас линуксоиды используют HTTP или Web сервисы, это и есть аналог CORBA .
Java тоже можно прикрутить по аналогичной методе, если Java поддерживает экспорт методов в Native.
(0) 5. Один из основных — это нельзя вернуть и передать экземпляр ВК из методов ВК.
Я тоже писал много внешних компонент, но вот этого реально не понял. Куда надо передавать экземпляр ВК из методов ВК?
Ты статью читал?
У ВК есть методы
УстановитьСсылку Создается ВК по строковому представлению, применяется как ъ(
ПолучитьСсылку Получается Ссылка для передачи в параметрах.
(8) самое пикантное, что функция «ПолучитьЭнумератор» при этом возвращает переменную «Перечислитель». Первый звоночек — если человек не может понятно что-то назвать, то это сигнал о том, что в предметной области проблемы. Ну или несерьезное отношение.
Общее впечатление, что решается какая-то очень локальная задача, черезчур много «я», «мне», «лично». Сам придумал, сам обиделся, что 1С не такая. Направление интересное, но не больше, типа «а смотрите как я могу».
Там на самом деле два захода. Сначала получаем Энумератор, а из энумератора получаем перечислитель. Это просто проблемы перевода.
IEnumerator и IEnumerable
Смотрите не как я могу, а используй то, что я сделал. И делюсь своим опытом, на что было потрачено куча времени в том числе и на изучение предметной области.
Кроме того я просто говорю о недостатках реализации .Native ВК, которые легко исправить.
Или вообще можно интегрировать в 1С. Хуже от этого точно не будет. Но будет замена ComОбъект
(13) ётун, >> Общее впечатление, что решается какая-то очень локальная задача
Ну если использование огромного количества стандартных библиотек .Net и расширения за счет написания своих библиотек и практически замена COM это локальная задача, то что называется глобальной?
(7) Причем здесь импортозамещение, Linux интересен прежде всего тем, что не кишит всякой заразой как винда, поэтому и тренд во многих компаниях, включая ту в которой работаю я, как бонус свободный софт, как правило, бесплатен.
(17) Если ты прочитал 7 то это не мой термин. Но, что скажешь по поводу расширения функционала 1С на Linux за счет использования классов .Net?
Добави вывод типов для дженерик методов
Теперь можно не выводить отдельно метод
Показать
Сделал поддержку внешнего события
В классе создадим пле типа Action<string, string, string>
Показать
В 1С.
Показать
И не забыть в Переменных модуля установить
В VS 2015 апдейт 3 появилась возможность создавать библиотеки и приложения под .Net Core
Вкладка
Шаблоны->Windows->.Net Core
Такой проект отличается от портативного.
В тестах добавил пример создания JObject и сериализации его в Json
Про установку SDK и прочее можно посмотреть здесь
http://metanit.com/sharp/aspnet5/1.2.php
Добавил поддержку параметров по умолчанию
Тест вызова метода с параметрами по умолчанию
Показать
Все хорошо,красиво. Но мы прагматики и зададим вопрос. И он сакраментальный. Зачем?
Если 1С для Native API избрало С++ зачем использовать Net библиотеки? Есть море библиотек на С++ спокойно и хорошо работающих в ВК. Точно так же как нет смысла в СОМ на NET.
Преимуществ нет никаких,одни проблемы.
Автор проделал большую работу,теоретически интересную и прочитал я с удовольствием. Но использовать просто не для чего. Возможно,только мне лично. Без обид,просто делюсь мнением
Так ВК то тоже нужно программировать и для каждого случая своя. Да и С++ это не особо то удобный инструмент. А здесь есть одна ВК и ну и нужно знать только классы и методы. По сути то и C# знать не нужно. Только 1С.
Если бы 1С удосужились дать возможность возвращать объект типа ВК то можно было бы избавиться от Ъ, но у них своя политика.
Использование классов .Net в 1С для новичков многие используют. Ну и как я понял линукс используют единицы
Конечно в таком виде это использовать нельзя. А вот