|   |   | 
| 
 | Помогите переконвертировать код C# в 1С | ☑ | ||
|---|---|---|---|---|
| 0
    
        Varlant1n 02.08.21✎ 09:08 | 
        Здравствуйте. Есть строки кода на C#, которые нужно перевести в 1С. То, что там чикл это я понял, но вот остальное...
 Сам код: foreach (KeyValuePair<DateTime, string> json in requestResponseList) { string messageDate = json.Key; string messageText = json.Value; } Я не понял, что нужно делать с "KeyValuePair<DateTime, string>" | |||
| 1
    
        ДенисЧ 02.08.21✎ 09:11 | 
        Это структура с двумя полями.
 А вообще - Используй ПрочитатьJSON() и перебирай его результат, там всё очевидно станет, если есть хотя бы базовые навыки владения отладчиком. | |||
| 2
    
        acces969 02.08.21✎ 09:14 | 
        (1) + если не будет читать, то читай в соответствие (по умолчанию читает в структуру, из за этого поля с именами "1", "наименование с пробелами" или "" приведет к исключению     | |||
| 3
    
        fisher 02.08.21✎ 09:16 | 
        (0) > Я не понял, что нужно делать с "KeyValuePair<DateTime, string>"
 В 1С прямой аналог - соответствие. | |||
| 4
    
        fisher 02.08.21✎ 09:18 | 
        Как уже сказали, если парсишь json, то тебе нужно добиться чтобы requestResponseList был массивом соответствий и код получится один в один.     | |||
| 5
    
        Garykom гуру 02.08.21✎ 09:52 | 
        (3) КлючИЗначение (KeyAndValue) а не Соответствие     | |||
| 6
    
        Garykom гуру 02.08.21✎ 09:53 | 
        Походу тут форум не 1Сников а C#'стов, которые 1С уже плохо знают...     | |||
| 7
    
        Почему 1С 02.08.21✎ 09:59 | 
        (5) Которое лежит в соответствии...     | |||
| 8
    
        Garykom гуру 02.08.21✎ 10:09 | 
        (7) не обязательно
 КлючИЗначение (KeyAndValue) Свойства: Значение (Value) Ключ (Key) Описание: Элемент коллекции Соответствие и Структура. Представляет собой пару из ключа и соответствующего ключу значения. Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер. Возможен обмен с сервером. Сериализуется. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: KeyAndValue. См. также: Соответствие, метод Получить КоллекцияОформленийДат, метод Получить Использование в версии: Доступен, начиная с версии 8.0. | |||
| 9
    
        Varlant1n 02.08.21✎ 10:17 | 
        Спасибо всем за ответы. Сейчас буду разбирать ваши замечания и предложения. Хорошей и удачной рабочей недели всем!     | |||
| 10
    
        fisher 02.08.21✎ 10:37 | 
        (5)(8) > не обязательно
 А у него разве есть конструктор? Как ты его в массив положишь? | |||
| 11
    
        Garykom гуру 02.08.21✎ 10:40 | 
        (10) и Структура     | |||
| 12
    
        fisher 02.08.21✎ 10:42 | 
        (11) и животноводство? :)     | |||
| 13
    
        Garykom гуру 02.08.21✎ 10:47 | 
        (12) Признай уже свой двойной косяк ))     | |||
| 14
    
        fisher 02.08.21✎ 10:49 | 
        (13) Да мне косяк признать вообще не проблема. Понять бы только в чем он, да еще и двойной.
 Хотя в шарпе не копенгаген. Если requestResponseList на самом деле не лист, а хэшсет какой-нить, тогда твой ответ в (5) обретает смысл, если соответствием будет requestResponseList | |||
| 15
    
        Garykom гуру 02.08.21✎ 10:54 | 
        (14) https://docs.microsoft.com/ru-ru/dotnet/api/system.collections.generic.list-1?view=net-5.0
 внутри List<T> могут быть любые объекты | |||
| 16
    
        fisher 02.08.21✎ 10:56 | 
        (15) Причем тут это? Если это лист а не сет, то в 1С аналогом будет или массив или список значений. А туда элементами КлючИЗначение я не представляю, как ты засунешь без обертки.     | |||
| 17
    
        Почему 1С 02.08.21✎ 12:03 | 
        (11) У структуры ключ не может быть датой, как указано в (0), хотя у учетом json это автор скорее всего перепутал местами типы ключа и значения.     | |||
| 18
    
        Varlant1n 02.08.21✎ 17:10 | 
        Ребят, еще раз всем привет. Перепробовал и с помощью соответсвия и структуры и массива, ничего не получилось( Опишу всю ситуацию, может поймете. Я на дейвайс отправляю json файл и мне надо получить ответ от дейвайса. В апи функциях есть вот эта строка:
 KeyValuePair<DateTime, string> requestResponseList Описание: The relevant request and response json logs are taken from the "requestResponseList" variable. То есть мне надо каким-то образом в 1С получить ответ (json файл) от дейвайса. Сам "GetResponseList()" я приписываю к своему ComОбъекту. Типа такого: "ConnectManager.GetResponseList()". ConnectManager - ComОбъект для подключения. И эта строка "ConnectManager.GetResponseList()" тоже становится просто ComОбъектом и я никак не могу с ней контактировать. Пробовал и в цикл вставить, там в примере из c# как раз таки цикл, но ничего не срабатывает.(((( У кого-то есть каике-то идеи? | |||
| 19
    
        Garykom гуру 02.08.21✎ 17:13 | 
        (18) не справишься
 найми уже программиста | |||
| 20
    
        ДенисЧ 02.08.21✎ 17:17 | 
        Строка ConnectManager.GetResponseList() не может стать сом-объектом. Она может вернуть тебе объект-рыбу. А у него уже есть свойства и методы получения данных     | |||
| 21
    
        Varlant1n 02.08.21✎ 17:20 | 
        (20) Да, типа такого. Но когда я через CMD прописывваю просто:
 $PD_BT.GetResponseList() <-- Sent to 192.168.55.194:2000 on Пн, 02 авг 2021 17’:’52’:’22 [ACK] --> Received from 192.168.55.194:2000 on Пн, 02 авг 2021 17’:’52’:’21 { "apiVersion": "v1.0.3", "type": "Configuration", "zippedCommunicationEnabled": true } <-- Sent to 192.168.55.194:2000 on Пн, 02 авг 2021 17’:’52’:’21 { "type": "Configuration", "zippedCommunicationEnabled": "true" } Он мне сразу возвращает в виде текста. В 1С я попробовал все варианты, но не смог получить то же самое. | |||
| 22
    
        fisher 02.08.21✎ 17:24 | 
        Так и подумал, что это логи какие-то. Что еще может быть дата плюс текст? :)
 (18) А не факт, что из 1С вообще получится через это API без прокладок. Надо смотреть в доке какой объект должен вернуть GetResponseList() и хватает ли у него методов и свойств, чтобы без итератора обойти элементы коллекции. Если можно получить количество элементов и взять элемент по номеру - тогда через это и делай. | |||
| 23
    
        Varlant1n 02.08.21✎ 17:58 | 
        (22) Когда пускаю через цикл, сразу же вылетает ошибка с итератором     | |||
| 24
    
        fisher 02.08.21✎ 18:00 | 
        (23) Да ты что! Тогда попробуй поискать на этой страничке по словосочетанию "без итератора".     | |||
| 25
    
        Varlant1n 02.08.21✎ 18:02 | 
        (24) Надеюсь, что Вы на меня не разозлитесь за вопрос, но как можно обойти коллекцию без итератора?) =(((     | |||
| 26
    
        fisher 02.08.21✎ 18:03 | 
        (25) > Если можно получить количество элементов и взять элемент по номеру - тогда через это и делай.     | |||
| 27
    
        Varlant1n 02.08.21✎ 18:22 | 
        (26) С количеством вообще не получается. Постарался еще раз перевести код из С# в 1С:
 json = Новый Структура; json.Вставить("DateTime", "string"); GetResponseList = ConnectManager.GetResponseList; Для каждого json Из GetResponseList Цикл Сообщить(Строка(json)); КонецЦикла; Код из проимера: public KeyValuePair<DateTime, string> requestResponseList; The relevant request and response json logs are taken from the "requestResponseList" variable. C# Example: foreach (KeyValuePair<DateTime, string> json in requestResponseList) { string messageDate = json.Key; string messageText = json.Value; } | |||
| 28
    
        Varlant1n 02.08.21✎ 18:22 | 
        (27) Но все равно выдает ошибку итератора. Хотя я задал и тип и наименование точно такое же     | |||
| 29
    
        acht 02.08.21✎ 18:26 | 
        (6) Здесь место встречи 1Сников, которые ни 1С не C# не знают.     | |||
| 30
    
        Garykom гуру 02.08.21✎ 18:28 | 
        (29) +100     | |||
| 31
    
        acht 02.08.21✎ 18:28 | 
        (18) А теперь еще и COM объект откуда-то возникает...     | |||
| 32
    
        Garykom гуру 02.08.21✎ 18:28 | 
        (27) Ответь что такое "ConnectManager.GetResponseList;" и откуда оно?     | |||
| 33
    
        Varlant1n 02.08.21✎ 18:35 | 
        (32) Connectmanager это COMОбъект с помощью которого идет подключение через wifi к девайсу. У него есть свои функции и процедуры по типу "connectDevice()" и тд. И в апишках есть еще "KeyValuePair<DateTime, string> requestResponseList" который нужен мне для получения ответа от дейвайса. И приписан пример для с#. Через powershell и cmd все работает на ура, а вот в 1С я никак не могу найти путь к получению ответа от девайса.     | |||
| 34
    
        Varlant1n 02.08.21✎ 18:38 | 
        (33) $PD_BT.requestResponseList
 Key Value --- ----- 02.08.2021 17:52:21 <-- Sent to 192.168.55.194:2000 on Пн, 02 авг 2021 17’:’52’:’21... 02.08.2021 17:52:21 --> Received from 192.168.55.194:2000 on Пн, 02 авг 2021 17’:’52’:’21... 02.08.2021 17:52:22 <-- Sent to 192.168.55.194:2000 on Пн, 02 авг 2021 17’:’52’:’22... 02.08.2021 17:53:51 Error :Доступ к ликвидированному объекту невозможен.... 02.08.2021 18:54:12 <-- Sent to 192.168.55.194:2000 on Пн, 02 авг 2021 18’:’54’:’12... 02.08.2021 18:54:12 --> Received from 192.168.55.194:2000 on Пн, 02 авг 2021 18’:’54’:’12... 02.08.2021 18:54:13 <-- Sent to 192.168.55.194:2000 on Пн, 02 авг 2021 18’:’54’:’13... 02.08.2021 18:56:46 Error :Доступ к ликвидированному объекту невозможен.... 02.08.2021 19:36:35 <-- Sent to 192.168.55.194:2000 on Пн, 02 авг 2021 19’:’36’:’35... 02.08.2021 19:36:35 --> Received from 192.168.55.194:2000 on Пн, 02 авг 2021 19’:’36’:’35... 02.08.2021 19:36:36 <-- Sent to 192.168.55.194:2000 on Пн, 02 авг 2021 19’:’36’:’36... Это в powershell | |||
| 35
    
        Garykom гуру 02.08.21✎ 18:45 | 
        (33) >Connectmanager это COMОбъект с помощью которого идет подключение
 
 | |||
| 36
    
        Garykom гуру 02.08.21✎ 18:46 | 
        (35) ошибку По сам исправь     | |||
| 37
    
        Garykom гуру 02.08.21✎ 18:47 | 
        (36)+
 Для НомерЭлемента = 1 По КоличествоВсего Цикл Элемент = GetResponseList[НомерЭлемента-1]; | |||
| 38
    
        Varlant1n 02.08.21✎ 18:48 | 
        (35) Пробовал подобное, но "Метод объекта не обнаружен (Count)"     | |||
| 39
    
        Varlant1n 02.08.21✎ 18:50 | 
        Кстати, в powershell выдается подсказка "System.Collections.Generic.List[string] GetResponseList()" которая мне ничего не дает конечно же, но мб кто-то что-то поймет     | |||
| 40
    
        Garykom гуру 02.08.21✎ 18:52 | 
        (38) КоличествоВсего = GetResponseList.Count;
 без скобок забыл это не метод а свойство | |||
| 41
    
        Varlant1n 02.08.21✎ 19:25 | 
        (40) Не, не прокатило. Но я в апишках еще нашел строку. Не знаю связаны ли они друг с другом:
 List<string> GetResponseList() The relevant request and response json logs are taken from this function within sorted. KeyValuePair<DateTime, string> requestResponseList The relevant request and response json logs are taken from the "requestResponseList" variable. | |||
| 42
    
        Varlant1n 02.08.21✎ 19:38 | 
        (41) Нет, они никак не связаны     | |||
| 43
    
        Serginio1 02.08.21✎ 21:13 | ||||
| 44
    
        acht 02.08.21✎ 21:48 | 
        (43) Кажется, это был контрольный из миномета.     | |||
| 45
    
        oleg_km 03.08.21✎ 00:10 | 
        (44) Да нет, в данной ситуации это самое верное решение.     | |||
| 46
    
        Varlant1n 03.08.21✎ 10:04 | 
        (43) Брат, у тебя ссылка на скачивание NetObjectToIDispatch45 недействительна(     | |||
| 47
    
        Serginio1 03.08.21✎ 10:20 | ||||
| 48
    
        Varlant1n 03.08.21✎ 10:23 | ||||
| 49
    
        Varlant1n 03.08.21✎ 10:24 | 
        (48) То есть по данной ссылке не начинается скачка     | |||
| 50
    
        Varlant1n 03.08.21✎ 10:25 | 
        Все, скачалось. Открыл в другом баруезере.     | |||
| 51
    
        Varlant1n 03.08.21✎ 10:25 | 
        Буду сейчас пробовать     | |||
| 52
    
        ДенисЧ 03.08.21✎ 10:27 | 
        (47) "Google Chrome блокирует некоторые скачивания"
 Нехорошо вирусы выкладывать ))) | |||
| 53
    
        Salimbek 03.08.21✎ 10:44 | 
        (41) "Не, не прокатило." - раздражает, когда говорят "не прокатило", но не указывают почему. Может у тебя тупо синтаксическая ошибка где-то, или дальше в коде ошибка, но нет, ничего я вам не скажу. Просто "Не прокатило".     | |||
| 54
    
        Varlant1n 03.08.21✎ 10:59 | 
        (47) Надеюсь я тебе не надоел, но так как тут сам автор, то хотелось юы спросить. Я попробовал зарегестрировать NetObjectToIDispatch45.dll:
 1) через cmd (regsvr32), 2) через powershell (C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe C:\Windows\NetObjectToIDispatch45.dll \codebase, 3) закинул dll в папку с 1С (bin) В 1С же "-2147221164(0x80040154): Класс не зарегистрирован" | |||
| 55
    
        Garykom гуру 03.08.21✎ 11:01 | 
        (54) разрядность не та     | |||
| 56
    
        Garykom гуру 03.08.21✎ 11:03 | 
        и возможно в этом и трабла что у тебя не работает
 тупо 64 битная 1С у тебя а твое только 32 бит | |||
| 57
    
        Serginio1 03.08.21✎ 11:07 | 
        Использование классов .Net в 1С для новичков
 Смотри шапку | |||
| 58
    
        Salimbek 03.08.21✎ 11:39 | 
        (57) Твоя ссылка у меня вышла какая-то кривая с ответом в виде 404 , я из нее нормальную то получил, но попробую, на всякий случай, выложить еще раз:
 Использование классов .Net в 1С для новичков | |||
| 59
    
        Varlant1n 03.08.21✎ 11:44 | 
        (57) зарегать удалось, и вот теперь я решил попробовать создать :
 Врап = новый COMОбъект("NetObjectToIDispatch45"); json2 = Врап.СоздатьОбъект("System.Collections.Generic.Dictionary`2[System.DateTime, System.String]"); Мне выдало огромное количество ошибок по типу: 1)Ошибка в методе Item Не найден метод, 2) В System.Runtype.InvokeMember и тд. и тп, 3) GetField, GetProperty, OptionalParamBinding, П.С. данные ошибки невозмлжно скопировать, поэтому не написал их польностью. Надебс, что кто-то сталкивался с подобным. | |||
| 60
    
        Garykom гуру 03.08.21✎ 11:47 | 
        (59) муахаха     | |||
| 61
    
        Garykom гуру 03.08.21✎ 11:47 | 
        ТС честно признай уже что программинг это не твое
 Пока по крайней мере ибо у тебя базовых знаний тупо нет | |||
| 62
    
        Serginio1 03.08.21✎ 12:10 | 
        (59) Зачем тебе словарь зоздавать? Судя по (27) тебе нужно вызвать метод, пройтись по коллекции и получить данные     | |||
| 63
    
        Serginio1 03.08.21✎ 12:13 | 
        62+ в любом случае в https://infostart.ru/1c/articles/448668/ описана раота со словарем
 Аналогично можно создать и словарь Dyctionary, это типизированный аналог 1С Соответствие Dictionary<String,int> Словарь= Врап.СоздатьОбъект("System.Collections.Generic.Dictionary`2[System.String,System.Int32]"); Для сч=1 По 10 Цикл Словарь.Add(строка(сч),сч); КонецЦикла; Для каждого стр Из Словарь Цикл Сообщить(стр.Key+"="+стр.Value) КонецЦикла; //Аналогично это можно достигнуть через СловарьT=Врап.ПолучитьТип("System.Collections.Generic.Dictionary`2"); Int32=Врап.ПолучитьТип("System.Int32"); СловарьT=Врап.ТипКакОбъект(СловарьT); Словарь=Врап.СоздатьОбъект(СловарьT.MakeGenericType(String,Int32)); Еще одна особенность работы с C# реализацией this[] Например, в 1С мы не можем вызвать Список[0]. Доступ осуществляется через get_Itemи set_Item Список.set_Item(0,"1С+Net"); Сообщить(Список.get_Item(0)); | |||
| 64
    
        Varlant1n 03.08.21✎ 12:21 | 
        (62) Смотри, друг. В примере, который мне скинули разработчики ПО девайса:
 foreach (KeyValuePair<DateTime, string> json in requestResponseList) { string messageDate = json.Key; string messageText = json.Value; } "KeyValuePair<DateTime, string>" - Это как я понял аналог соответсвия. С ключем "DateTime" и значением "string". И я решил создать "json" с типом, который хотел создать через твою dll`ку. | |||
| 65
    
        Garykom гуру 03.08.21✎ 12:22 | 
        (64) Ты можешь скинуть полный пример а не обрезок?
 И сам мануал? | |||
| 66
    
        Varlant1n 03.08.21✎ 12:22 | 
        (64) В powershell мне доступны подсказки для "requestResponseList" и он выдает:
 System.Collections.Generic.Dictionary[datetime,string] requestResponseList {get;set;} | |||
| 67
    
        Garykom гуру 03.08.21✎ 12:24 | 
        (66) причем тут powershell и какое отношение он имеет к примеру на C#/.Net ?     | |||
| 68
    
        Varlant1n 03.08.21✎ 12:24 | 
        (65) В мануале перечислены просто функции доступные и есть всего лишь один пример:
 KeyValuePair<DateTime, string> requestResponseList The relevant request and response json logs are taken from the "requestResponseList" variable. Пример: public KeyValuePair<DateTime, string> requestResponseList; The relevant request and response json logs are taken from the "requestResponseList" variable. C# Example: foreach (KeyValuePair<DateTime, string> json in requestResponseList) { string messageDate = json.Key; string messageText = json.Value; } | |||
| 69
    
        Varlant1n 03.08.21✎ 12:25 | 
        (67) Разработчики подключают данный аппарат через powershell. Мне же нужна интеграция с 1С. Я прописал все. Я посылаю все, что нужно в json файлах в на девайс, но мне нужно получитьь ответ от девайса. А для этого служит "KeyValuePair<DateTime, string> requestResponseList"     | |||
| 70
    
        Garykom гуру 03.08.21✎ 12:25 | 
        Наймите уже программиста     | |||
| 71
    
        Garykom гуру 03.08.21✎ 12:26 | 
        (69) ты сейчас пишешь редкостный бред     | |||
| 72
    
        Serginio1 03.08.21✎ 12:28 | 
        Получи ConnectManager и вызови 
 GetResponseList = ConnectManager.GetResponseList; Для каждого json Из GetResponseList Цикл Сообщить(""+стр.Key+"="+стр.Value) КонецЦикла; Этот | |||
| 73
    
        Varlant1n 03.08.21✎ 12:29 | 
        (71) Я написал выше о том, что в качестве примера подключения девайса, разработчики показывают все это через PowerShell. Я же хочу подключить интеграцию через 1С. Все запросы я прописал. И все работает. То есть я могу послать все, что мне нужно на девайс. Осталось только смочь получить ответы от него.     | |||
| 74
    
        Varlant1n 03.08.21✎ 12:31 | 
        (72) Вангую ругань на неопознанный итератор     | |||
| 75
    
        acht 03.08.21✎ 12:32 | 
        (72) Уже было в (27), итератор не доступен =)
 Самое смешное, что у него там уже есть какая-то COM обертка, про которою он молчит как партизан и несет ахинею про powershell. | |||
| 76
    
        Varlant1n 03.08.21✎ 12:33 | 
        (74) Да, так и есть "Итератор для значения не определен". Как я понимаю тут дело в том, что итератор в цикле должен иметь определенный тип, чтобы смочь получить данные из "requestResponseList "     | |||
| 77
    
        Serginio1 03.08.21✎ 12:44 | 
        (76) Да должен поддерживать IEnumerable. 
 Так из документации мы знаем что List<T> поддерживает интерфейс IEnumerable https://msdn.microsoft.com/ru-ru/library/system.collections.ienumerable(v=vs.100).aspx Перечислимый=Врап.ПолучитьИнтерфейс(Список,"IEnumerable"); Перечислитель=Перечислимый.GetEnumerator(); // На всякий случай приведем к Интерфейсу IEnumerator Перечислитель=Врап.ПолучитьИнтерфейс(Перечислитель,"IEnumerator"); // Теперь можем пройтись по коллекции Пока Перечислитель.MoveNext() Цикл // Врап.ВСтроку вывоит строковое представление всех типов в том числе числовые, строки, неопределено Сообщить(Врап.ВСтроку(Перечислитель.Current)); КонецЦикла; | |||
| 78
    
        fisher 03.08.21✎ 12:45 | 
        (76) Попробуй выполнить GetResponseList().ToArray()
 Выдаст ошибку или нет. (77) О. Или так. | |||
| 79
    
        Serginio1 03.08.21✎ 12:48 | 
        Посмотри https://infostart.ru/1c/articles/466196/
 Но проще на C# полную обработку данных сделать, а из 1С уже вызвать только нужные данные | |||
| 80
    
        Varlant1n 03.08.21✎ 12:52 | 
        (77) Брат, спасибо что-то получилось. Я получил ответы от девайса. Буду теперь с ними разбираться. Все же огромное вам всем спасибо! Желаю всем хорошего дня!     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |