<?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='\
Сейчас в .Net широко применяют оператор await. Он применяется к методам возвращающие Task или Task<TResult>.
Task это задача представляет асинхронную операцию. Доступ к результату осуществляется через свойство Result.
В 1С можно использовать либо синхронный вариант например
Но для того, что бы этот метод выполнить асинхронно я создал класс с помощью которого легко использовать эти методы асинхронно.
Показать
Вызываем задачу так
Вторым параметром можно передавать любые данные, что бы понять какая задача выполнена и что с ней делать, так одновременно может работать множество задач
Например
Интересная статья. Надо будет запомнить для задач интеграции. Жаль, что приводится то что не очень надо 🙁 А хотелось бы иметь под рукой библиотеку функций допустим для работы с зависшими процессами (фоновыми задачами), многими функциями ОС итд.
Кстати насчет времени до миллисекунд вроде стандартная консоль запросов содержит строчку на JavaScript для записи текущего времени.
Вернее автору статьи (и знающим людям) вопрос по-другому: я могу вызвать API-функции Винды смотря справочник через данные объекты просто смотря справочник, передавать в функции и принимать от них данные в формате винды (или в универсальном формате). Я когда-то давно начинал с делфи, даже на ассемблере чуток писал для аппаратуры, но сейчас это в прошлом. Тогда только через стандарные компоненты делфи работал.
Чтоб не было голословно приходилось писать только на досовском C++ Может навык пригодится для хотя бы понимания как обратиться к современным библиотекам на C# .net или что там
(2) Ну эта статья для начинающих. Посмотри мои другие статьи. Там много других примеров. Все написать невозможно. Показан принцип работы с классами .Net . Просто нужно найти нужный, а примеров в инете правда на C# полно.
(3) Не понял?
(4) это большой плюс что Вы описали в двух словах «как запустить». Тем более я в этой технологии и есть «начинающий». Хотелось бы узнать кратно что можно и нужно делать через .net если:
1. Такой технологии НЕТ в 1С.
2. Стандартные методы сложны, глючны и малоэффективны.
На что в общем стоит обратить внимание.
(5) Я бы посоветовал начать с азов. От простого к сложному.
http://metanit.com/sharp/general.php
http://professorweb.ru/my/csharp/charp_theory/level1/infonet.php
Для начала просмотреть, а уже на конкретных задачах углубляться.
(2) kostyaomsk, ТекущаяУниверсальнаяДатаВМиллисекундах(), вполне подходит для получения мс
Интересно!, а есть простые примерчики применения?
Например
http://infostart.ru/public/434345/
http://1c.mista.ru/topic.php?id=764437#5
http://1c.mista.ru/topic.php?id=764375#14
http://forum.infostart.ru/forum86/topic136695/
http://1c.mista.ru/topic.php?id=689926&page=1#18
http://forum.infostart.ru/forum86/topic145878/
http://infostart.ru/public/238584/
итд. Ты можешь сам напридумывать. Библиотека .net Framework огромна
Недавно столкнулся с преобразование типов, за 5 минут задачу решить не получилось)
Оставлю здесь подсказку.
Преобразовании типов 1С в типы Net
Г
Показать
можно еще так преобразовать тип 1С в тип Net
бывает что получаешь ошибку «Неизвестная ошибка» или метод не найдет, проверьте параметр который передаете.
— так отрабатывает нормально.
а так выдает ошибку — ТипДесЧерезПарсе = Врап.ПолучитьТип(«System.Decimal»).Parse(«0.000001»);
Простите, а как узнать длину строки через свойство Length переменной типа String?
Я создал строку:
Отработало нормально, в переменной стр находится «abc»
Теперь добавляю
и получаю ошибку:
«Значение не является значением объектного типа (Length)»
(11) Как я писал в статье для таких случаев нужно использовать CultureInfo
(12) В статье писал про это
Следует учесть, что в 1С числовые типы, дата строки, булево, массивы этих типов и Com объекты возвращаются как родные.
Поэтому если использовать объектные методы, например, String нужно обернуть его.
Например
Получилось так:
В ДлСтр значение 8
При попытке посмотреть отладчиком 1С структуру объекта стр, система ругается на множество сборок.
Не успел прочитать ответ, увидел в статье и тут же попробовал.
О результате сообщил постом выше.
Спасибо!
Через МИСТА, по ссылке на яндекс-диск, получил проект (исходники) от NetObjectToIDispatch.dll версии 2.0
А можно ли где-то взять проект (исходники) NetObjectToIDispatch45.dll ?
Ну, очень интересная тема.
Спасибо. Получил.
Если, вдруг, потребуются «соучастники» в проект, готов поработать.
Под Вашим руководством 🙂
(19) Спасибо. Буду иметь ввиду. Но самое лучшее это писать статьи какhttp://infostart.ru/public/434345/
Буду пытаться. Благодарю Вас за совет.
Да и Вы, если вдруг захотите расширить аудиторию, милости
просим в авторы блога на сайт http://www.programmist1c.ru
(21) Спасибо буду иметь ввиду
Добрый день, Сергей.
Тестирую Вашу обработку ТестВКУФ.erf
Захватывающе! Особенно с окном на WPF.
Очень хочется посмотреть исходники того, что упаковано в двоичный макет.
Можно?
И вот, ещё, встретил в статье след. предложение:
— «Также добавил возможность показать окно семерки созданное через Новый COMОбъект(«V77.Application»)
А это в каком примере можно увидеть?
Прошу прощения, если что-то пропустил, но, вроде бы читал внимательно.
При повторном, начиная с третьего, открытии обработки, через Файл -> Открыть … Появляется сообщение:
— «Неизвестное имя формы: ХХХХХХХХХХХХХХХХХХХХХХХХ.Form»
Пока не разобрался, в чем дело.
Предполагаю, что-то связанное с кэшем.
(23) Я же давал ссылку в 18. Исходники лежат в папке ТестВК
Только там в public partial class Window1 : Window
нужно добавить
26+ Исходник есть в этой статьеhttp://infostart.ru/public/457898/
(25)
Да, спасибо. Нашел эту папку.
(26)
Спасибо, понял.
Сейчас попытаюсь.
(27)
Да, все получилось. Метод СоздатьОкно(dynamic модуль1С, dynamic Object1C)
работает отлично.
Ошибка с диагнозом
«Неизвестное имя формы: ХХХХХХХХХХХХХХХХХХХХХХХХ.Form»
не появляется при запуске в тонком клиенте.
(30) Большое спасибо за использование и тестирование. Помню в 7 ке окно показывалось в списке окон, но при нажатии 1С вылетала. Видно 1С смотрит дочерние окна, но чужое окно она разрулить не может. Посмотрю.
Спасибо за Ваш труд.
Никак не наиграюсь 🙂
От перспектив захватывает дух.
Кстати, на *NIX-ах надо бы попробовать.
Вероятно, на Linux должно пойти, через Mono?
Или Mono не увидит под собой технологическую базу для Com Interop?
Хотя, вот тут говорят, что можно …
Надо потестировать.
Эта библиотека основана на преобразование .Net объектов в IDispatch через Ireflect. На линуксе не взлетит
Очень часто приходится использовать битовую операци OR
например
или
Поэтому добавил метод OR. Теперь те же операции можно вызвать
или
Пример алгоритма сжатия строки и результат в Base64 и обратный процесс
Показать
и обратный процесс
Показать
(32) Это вызов натива из манагед.
CLR Hosting API
А вот обратно нужно что типа
(36) Пытался провернуть такое на .NET Compact Framework 3.5 …
Не взлетело.
(37) Сейчас в фавореUniversal Windows Platform
(38) Приходится работать с CF3.5, так как на ТСД Motorola Symbol (все остальные бренды — копии той или иной степени копийности) в основном установлены Windows CE или Windows Mobile. Пока только китайские китайцы пытаются клепать ТСД и прочие POS девайсы на Windows Phone 8 и даже Windows 10. Нет желающих переделывать отлаженные логистические цепочки под использование экспериментальных образцов. Нет заказчиков — нет разработок.
(39) Согласен у самого под рукой Casio под Win CE. C Compact FW конечно пришлось повозиться. Но когда появились наработки затем писать уже намного легче.
(40) И, может быть, хорошо, что в промышленном оборудовании (ТСД например) нет такого стремительного мелькания техники и технологий, как в товарах группы «Б». Иначе бы все рухнуло. Доля консерватизма необходима в группе «А», не может быть базис текучим и непредсказуемым.
Понадобилоссь прописать дефолтный принтер в 7 ке
Показать
Добрый день.
врап=новый COMОбъект(«NetObjectToIDispatch45»);
1С-ка пишет
Ошибка при вызове конструктора (COMОбъект)
врап=новый COMОбъект(«NetObjectToIDispatch45»);
по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класса
какие библиотеки нужно доустановить? спасибо
(44) не получается. можно для тех кто в бронепоезде черным по белому написать.спасибо
Вторая ссылка в шапке все написано
Для таких же как и я в подвоной лодке, для начала работы, скачиваете и распаковываете файл ФайлыNetObjectToIDispatch
далее в папке DLLNetObjetToIDispatch45 запускаем RegAsm.bat
либо из корня скаченного файла запускаем РегистрацияКомСервера.exe и выбираем NetObjetToIDispatch45.dll которая лежит в DLLNetObjetToIDispatch45
Взгляд со стороны, без обид:
у автора очень интересный и нужный контент, но подача просто швахт, разбираться в этом адском количестве ссылок и каше неразложенной инфы …
(47) В пианиста просим не стрелять — он играет как умеет.
Сергей Смирнов, спасибо! Библиотека очень полезная, и у меня почти работает)))
Объекты HttpClient и HttpRequestMessage создаются.
А дальше нужно добавить к запросу Method и RequestUri — это не получается.
(В C# аналогичный код работает)
ХТТПЗапрос.RequestUri = Врап.СоздатьОбъект(«System.Uri», адрес);
HttpMethod = Врап.ПолучитьТипИзСборки(«System.Net.Http.HttpMethod», «System.Net.Http.dll»);
ХТТПЗапрос.Method = HttpMethod.Get;
И в 1-й и в 2-й строках одинаковая ошибка:
Произошла исключительная ситуация (mscorlib): Exception has been thrown by the target of an invocation.
Получение System.Uri видел у Вас здесь и в других публикациях, скопировал. HttpMethod попробовал методом тыка.
Что я делаю не так? Заранее спасибо!
Ты бы показал весь код на C#/ .
Например для WebRequest RequestUri только для чтения.
Посмотри примерыКак вызвать метод из C# в 1С?
Там последние версии компонент и куча примеров. .Net Framework 4.6.1
Пытаюсь подключить dll, не являющуюся COM-видимой.
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(13)}: Ошибка при вызове метода контекста (ПолучитьТипИзСборки)
Infrascturcture=Врап.ПолучитьТипИзСборки(«ZGuard.ZG_CTR_EV_TYPE»,»C:SDK GuardGuard.dll»);
по причине:
Произошла исключительная ситуация (mscorlib): Не удалось загрузить файл или сборку «file:///C:SDK GuardGuard.dll» либо одну из их зависимостей. Ожидалось, что модуль содержит манифест сборки.
Понимаю, что она не является NET-сборкой. Можно ли это исправить, если есть исходник на C#?
Следует оговориться, что C# не владею (((
Я так понимаю, вопрос отсюдаhttp://www.forum.mista.ru/topic.php?id=787047
Очень интересно!
Расширяет возможности интеграции
(53) Если интересно то есть еще цикл статей1С, Linux, Excel, Word, OpenXML, ADO, Net Core
(52) Верно, Сергей. Главное, удалось, все-таки, перекомпилировать dll, после чего dll стала NET сборкой. Удалось достучаться до типов внутри. Сегодня попрактикуюсь вечером. Может и до контроллера достучусь.
Заслуженная звезда.
Вот вопрос…
Код Dll:
Показать
т.е. вызов будет выглядеть как:
получаю Метод объекта не обнаружен (ZG_SearchDevices)
не понял, как добраться до методов??? Вроде он объявлен public.
А точно ZG_SearchDevices это метод объекта?
Может это статический метод?
Нужно обязательно передавать параметры, так как из-за перегрузок метод ищется по количеству и типам параметров
Приведи код на C#
Это метод класса (ключевое слово static). То есть нужно согласно объявлению
вызвать
pParams — непонятно. Вообще, в этом месте предполагается callBack функция, возвращающая найденные контроллеры.
Вот пример кода на C#, обращающийся к данной функции:
Показать
Ясно. С этим сложнее. Нужно создавать свои классы обертки с событиями и подключаться к ним через.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия
как пример можно посмотреть здесь
1C Messenger для отправки сообщений, файлов и обмена данными между пользователями 1С, вэб страницы, мобильными приложениями а ля Skype, WhatsApp
Вообще, до конца неясно с dll. Дома стоит VC, попробую внимательно проверить и пересобрать библиотеку.
Попытка зарегистрировать DLL вываливается в ненайденную точку входа.
Кроме того обращение к функции инициализации библиотеки без параметров:
вв = ZGIntf.ZG_GetVersion();//она единственная без параметров точно
вываливается с ошибкой «Адресат вызова вызвал исключение.mscorelib System.EntryPointNotFoundException
Вот-вот… С обертками я как раз и слаб пока))) Только-только типы научился брать.
Либо при запуске формировать в некий список и из него уже выбирать контроллеры.
Её не надо регистрировать. NetObjectToIDispatch45 как раз оборачивает .Net объекты через COM класс.
Для начала запусти примеры на C#. Потом двигайся к 1С.
т.е. на стороне DLL предложить уже найденные контроллеры?
(64) предположим, создать свою функцию в DLL, обращение к которой, с серийным номером контроллера выполнит его поиск и даст его HANDLE ?
Тем более есть рабочий пример такой функции на C#
А System.EntryPointNotFoundException говорит о том, что не нашла она в нативной DLL метод ZG_GetVersion
(67) Лучше дописать библиотеку под свои нужды.
Прошу прощения за возможно глупый вопрос… но не могу до конца понять как происходит работа с массивами (.Net) со стороны 1С 7.7
Т.е. объявить «.Net» массив возможно, но прямое чтение и прямую запись элементов провести не получилось.
Конечно же можно исхитриться , создать
наполнить его:
и после — выгрузить в массив
Но хотелось бы иметь под рукой инструменты прямого чтения и прямой записи элементов массива.
(70) Там в примерах к статье есть примеры для 7.7. Проблема в том, что в 7.7 нет целых чисел. Все числа это double и нужно приводить к int.
https://infostart.ru/public/238584/
Посмотри примеры в
Например есть метод
А так как в C# есть перегрузка методов, то передаваемые параметры должны соответствовать типам метода
(71)
Ar.SetValue(glWrap.ToInt(2), glWrap.ToInt(4)); // выдает ошибку : Не найден метод System.Int32[]SeValue mscorlib
Зн1 = Ar.GetValue(glWrap.ToInt(1));
Всё заработало!
СПАСИБО!
К сожалению не могу скачать скачать файл примеров «ФайлыNetObjectToIDispatch.zip».
А может у Вашего проекта есть свой сайт?
(72)https://ru.stackoverflow.com/questions/527763/Как-вызвать-метод-из-c-в-1С/527802#527802
(73) Спасибо! очень информативно! Но еще есть вопросы.
https://msdn.microsoft.com/ru-ru/library/microsoft.analysisservices.attributeusage.aspx
Например — работа с .Net — перечислениями.
Вот пример:
U = glWrap.СоздатьОбъект(«Microsoft.AnalysisServices.AttributeUsage»); //работает
вид перечисления создается.
Но как создать значение перечисления, а именно:
Microsoft.AnalysisServices.AttributeUsage.Key
Microsoft.AnalysisServices.AttributeUsage.Parent
Microsoft.AnalysisServices.AttributeUsage.Regular
?
(74)
Вопрос снимается….
Всё просто…
СПАСИБО автору!!! Шикарная компонента
(75) Но… лучше было бы иметь не только:
Но хотелось бы еще, чтобы был метод типа: «ПолучитьПоИдентификатору», чтобы работало:
А может уже есть что-то подобное?
Создаю объекты криптографии,
в этом варианте объект создается корректно
Показать
Здесь получаю ошибку. Подскажите, какой текст кода будет правильным для данного варианта?
(78) В первом случае происходит инициализация нового экземпляра класса X509Certificate2, во втором — конструктор SignedCms() создает экземпляр класса SignedCms.
подскажите что делаю не так:
Показать
метод Encode отрабатывает, токен генерится, а Decod возвращает ошибку (скриншоты)
Jose-JWT
сама либа тут
пример на C# выглядит так:
Показать
Добавь еще null. К сожалению в Com варианте не добавляются параметры с дефолтными значениями
Рез = типJWT.Decode(Токен2, ключ, неопределено);
По 78,79 конкретно какая ошибка?
Возможно загрузить сборку
Кстати можешь посмотреть пример подписи
(82)
Ошибка создания типа, при создании объекта компонента выводит диалоговое окно: «Неверный тип System.Security.Cryptography.Pkcs.SignedCms»
На строке
Получаю ошибку «Ошибка при вызове метода контекста (загрузитьСборку): Произошла исключительная ситуация (mscorlib): Не удалось загрузить файл или сборку «file:///C:Program Files (x86)1cv8commonSystem.Security.dll» либо одну из их зависимостей. Не удается найти указанный файл.»
(84) А так
(85) Работает, благодарю!
(85) Объект SignedCms создал и видны его свойства, но метод Decode не выполняется
пишет «Ошибка в методе Decode Не найден метод «System.Security.Cryptography.Pkcs.SignedCms.Decode». mscorlib»
Как заставить работать?)
А как получаешь encodedSignedCms
(88)
Но ругается на то, что метод Decode не найден, а не на содержимое параметра.
Он метод Decode не может найти по типу параметра.
Можешь для интереса через отладчик посмотреть
Да
должно работать
Для интереса проверь методы
врап.ПолучитьМетоды(ТипSignedCms)
(91) Метода Decode нет в списке
Там получаешь список. Нужно еще для Каждого пройтись
(93) Да, в элементах списка метод «Decode» есть.
Показать
(93) Метод «Decode» есть, куда дальше копать? Проблема в передаваемом в метод параметре?
(1) Подскажите, пожалуйста, как можно отменить запущенную длительную задачу (или хотя бы отписаться от события её завершения)?
У меня есть управляемая форма, в которой запускается Task. У пользователя есть возможность закрыть форму ещё до завершения задачи (задача при этом продолжает выполняться). При завершении задачи возникает ошибка «Поле недоступно для чтения». Я так понимаю, что это возникает из-за того, что форму уже удалена.
Исключение:
ClassForEvent.cs:строка 188
System.Runtime.InteropServices.COMException (0x000003E9): {Документ.ДоговорТеплоснабжения.Форма.ФормаДокумента.Форма(98)}: Поле объекта недоступно для чтения
в System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
в NetObjectToIDispatch45.IВрапперДляАсинхронныйВыполнитель.ПриОкончанииВыполненияЗадачи(Object Задача, Object ДанныеКЗадаче)
в NetObjectToIDispatch45.АсинхронныйВыполнитель.<>c__DisplayClass8_0.<Оповестить>b__0(Object d) в D:Vs2015ProgramsNetObjetToIDispatch45NetObjetToIDispatch45
(97) Наверное
УдалитьОбработчик Выполнитель.ПриОкончанииВыполненияЗадачи, ПриОкончанииВыполнения;
(98)
Добавил строку
УдалитьОбработчик Выполнитель.ПриОкончанииВыполненияЗадачи, ПриОкончанииВыполнения;
в событие «ПередЗакрытием» управляемой формы.
Оператор выполняется, форма закрывается, но через несколько секунд выходит ошибка .Net:
ClassForEvent.cs:строка 188
************** Текст исключения **************
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в NetObjectToIDispatch45.АсинхронныйВыполнитель.<>c__DisplayClass8_0.<Оповестить>b__0(Object d) в D:Vs2015ProgramsNetObjetToIDispatch45NetObjetToIDispatch45
(99) Да тма ошибокчка
Нужно сделать проверку на null. Ну и в Catch завернуть.
Сейчас пока нет времени выложить новый
Как получить массив из компоненты?
Показать
array=Врап.ПолучитьИнтерфейс(Список<<?>>,»IEnumerable»);
{***ТЕСТОВАЯ.ERT(24)}: Переменная не определена (Список)
Для array<<?>>.MoveNext() цикл
{***ТЕСТОВАЯ.ERT(32)}: Ожидается символ ‘=’