|
Как можно реализовать код в 1С? | ☑ | ||
---|---|---|---|---|
0
svv1979
17.07.20
✎
08:53
|
Скинули рабочий пример
Как его можно реализовать в 1С? Пример на C#: private void button1_Click(object sender, EventArgs e) { WebClient webClient = new WebClient(); string link = @"http://dezvgr2/pls/info/REESTR_SOB_TO_1C.run?rep_user=TVERETINA&p_com=30274&p_reestr_format=xls&p_action=Start"; string downloadFileName = System.IO.Path.GetFileName("test.xls"); webClient.DownloadFile(new Uri(link), @"F:\tmp\test\" + downloadFileName); |
|||
1
ДенисЧ
17.07.20
✎
09:02
|
Попробуй через ПолучитьФайл(link, "F:\tmp\test\" + downloadFileName)
|
|||
2
Ненавижу 1С
гуру
17.07.20
✎
09:02
|
(0)
Глобальный контекст (Global context) КопироватьФайл (FileCopy) Синтаксис: КопироватьФайл(<ИмяФайлаИсточника>, <ИмяФайлаПриемника>) Параметры: <ИмяФайлаИсточника> (обязательный) Тип: Строка. Полное имя файла-источника. <ИмяФайлаПриемника> (обязательный) Тип: Строка. Полное имя файла-приемника. Описание: Копирует файл-источник в файл-приемник. Допускается перезапись файла-приемника. Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер). Примечание: Файл-приемник при создании будет иметь права доступа, аналогичные назначаемым при создании новых файлов (т.е. права доступа к файлу-источнику не копируются). Допускается использование схем http, https и ftp для адресации файлов. При использовании этих схем в адресах необходимо указывать прямые слеши '/', а не обратные '\'. Для работы метода на веб-клиенте необходимо предварительно подключить расширение работы с файлами. На веб-клиенте метод работает только с локальными файлами. Пример: КопироватьФайл("C:\Temp\Order.htm", "C:\My Documents\Order.htm"); См. также: Глобальный контекст, метод НачатьКопированиеФайла Использование в версии: Доступен, начиная с версии 8.0. |
|||
3
Garykom
гуру
17.07.20
✎
09:07
|
(0) нахрен дублировать Формирование файла по HTTP запросу ?
|
|||
4
svv1979
17.07.20
✎
09:35
|
(3) Там возвращает только страницу с параметрами
А это код на C# который отрабатывает правильно |
|||
5
svv1979
17.07.20
✎
09:38
|
(1) (2) Там внутри ссылка по ней браузер сам формирует и скачивает файл
стандартными методами HTTP WinHTTP не получалось возвращал только страницу с параметрами |
|||
6
Garykom
гуру
17.07.20
✎
09:38
|
(4) ты прочитал что я там написал? попробовал?
|
|||
7
svv1979
17.07.20
✎
09:58
|
(6) ПРобовал все так же
Там же файл формируется несколько минут а потом скачивается А здесь отрабатывает сразу и сохраняет в файл страницу с параметрами |
|||
8
Garykom
гуру
17.07.20
✎
10:06
|
(7) Извини конечно но хрень полнейшая.
Код на C# это тоже самое что код на 1С, проблема не в коде а где то у тебя косяк. |
|||
9
Garykom
гуру
17.07.20
✎
10:08
|
(8)+ Сервер к которому ты обращаешься не улавливает параметры все требуемые и не формирует сразу файл на отдачу а выкидывает тебе форму типа укажи параметры сам.
Попробуй тот же самый url "который не работает в 1С" в браузере или через curl |
|||
10
svv1979
17.07.20
✎
11:23
|
(9) Это то понятно в браузере то ссылка правильно отрабатывает
|
|||
11
svv1979
17.07.20
✎
11:42
|
(9)
HTTP = Новый HTTPСоединение("dezvgr2",); HTTPЗапрос = Новый HTTPЗапрос("/pls/info/REESTR_PERSONS_TO_1C.run?rep_user=TVERETINA"); HTTPЗапрос.Заголовки.Вставить("p_com", 30274); HTTPЗапрос.Заголовки.Вставить("p_reestr_format", "xls"); HTTPЗапрос.Заголовки.Вставить("p_action", "Start"); Ответ = HTTP.Получить(HTTPЗапрос); ДД= Ответ.ПолучитьТелоКакДвоичныеДанные(); ДД.Записать(ИмяВходящегоФайла); Пробовал так все равно не помогло |
|||
12
Garykom
гуру
17.07.20
✎
11:51
|
(11) и не поможет ибо параметры с заголовками путаете
|
|||
13
dmt
17.07.20
✎
11:55
|
может проще будет библиотекой воспользоваться http://catalog.mista.ru/public/709325/
|
|||
14
Garykom
гуру
17.07.20
✎
12:00
|
(13) лучше бы ссылку на гитхаб дал
и либа отвратная по реализации там многие коды ответа пропущены |
|||
15
svv1979
17.07.20
✎
12:19
|
(12) Можно написать что-то типа такого
ИмяВходящегоФайла1 = "\\192.168.113.7\работа\555.xls"; Ссылка = "http://dezvgr2/pls/info/REESTR_PERSONS_TO_1C.run?rep_user=TVERETINA&p_com=30274&p_reestr_format=xls&p_action=start"; WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); //WinHttpRequest WinHttp.Open("post", Ссылка, Ложь); WinHttp.Send(); Если WinHttp.Status = 200 Тогда Stream = Новый COMОбъект("ADODB.Stream"); Stream.Type = 1; Stream.Mode = 3; Stream.Open(); Stream.Write(WinHttp.ResponseBody); Stream.SaveToFile(ИмяВходящегоФайла1, 2); Stream.Close(); Stream = Неопределено; Сообщить("1"); Иначе //Сообщить("HTTP " + WinHttp.Status + " " + WinHttp.StatusText); //Возврат; КонецЕсли; Таким кодом он возвращает так же страницу с параметрами если написать получение страницы ИмяВходящегоФайла1 = "\\192.168.113.7\работа\555.xls"; Ссылка = "http://dezvgr2/pls/info/REESTR_PERSONS_TO_1C.run?rep_user=TVERETINA"; WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); //WinHttpRequest WinHttp.Open("get", Ссылка, Ложь); WinHttp.Send(); Если WinHttp.Status = 200 Тогда Потом отправить парметры и команду выполнения p_com=30274 p_reestr_format=xls p_action=start только если не сложно подскажи как |
|||
16
Serginio1
17.07.20
✎
12:20
|
А не проще http://catalog.mista.ru/public/466052/
|
|||
17
Serginio1
17.07.20
✎
12:57
|
Что типа такого
врап=новый COMОбъект("NetObjectToIDispatch45"); WebClientType=Врап.ПолучитьТипИзСборки("System.Net.WebClient","System.Net.WebClient.dll"); Path =Врап.ПолучитьТип("System.IO.Path"); link = "http://dezvgr2/pls/info/REESTR_SOB_TO_1C.run?rep_user=TVERETINA&p_com=30274&p_reestr_format=xls&p_action=Start"; downloadFileName = Path.GetFileName("test.xls"); uri= Врап.СоздатьОбъект("System.Uri",link); webClient=Врап.СоздатьОбъект(WebClientType); webClient.DownloadFile(uri, @"F:\tmp\test\" + downloadFileName); |
|||
18
Serginio1
17.07.20
✎
13:10
|
Только F:\tmp\test\" подправь на свой путь
|
|||
19
sitex
naïve
17.07.20
✎
13:42
|
(16) Лучше конечно Кроссплатформенное решение.
|
|||
20
Serginio1
17.07.20
✎
13:59
|
(19) Для кроссплатформенного есть Ъ
http://catalog.mista.ru/public/544232/ http://catalog.mista.ru/public/534901/ когда я делал не было нужды в линуксе. Нужно добавить условную компиляцию и используя данную статью https://docs.microsoft.com/ru-ru/dotnet/core/tutorials/netcore-hosting использовать dlopen (в Linux или macOS). Шаг 1. Поиск и загрузка CoreCLR Интерфейсы API среды выполнения .NET Core находятся в coreclr.dll (в Windows), в libcoreclr.so (на платформе Linux) или в libcoreclr.dylib (в macOS). Первым шагом для размещения .NET Core является загрузка библиотеки CoreCLR. Некоторые основные приложения проверяют разные пути или используют входные параметры для поиска библиотеки, пока другие могут загрузить ее по заранее определенному пути (рядом с основным приложением, например, или из известного расположения на компьютере). После обнаружения библиотека загружается с помощью LoadLibraryEx (в Windows) или dlopen (в Linux или macOS). |
|||
21
svv1979
17.07.20
✎
14:11
|
(17) -2147221005(0x800401F3): Недопустимая строка с указанием класса
|
|||
22
Serginio1
17.07.20
✎
14:27
|
Ну для начала надо зарегистрировать
Использование классов .Net в 1С для новичков Файлы все здесь https://ru.stackoverflow.com/questions/527763/Как-вызвать-метод-из-c-в-1С/527802#527802 |
|||
23
Serginio1
17.07.20
✎
14:29
|
Миста ломает свои же ссылки
Использование классов .Net в 1С для новичков |
|||
24
Serginio1
17.07.20
✎
14:30
|
По поводу регистрации Для проведения тестов нужно распаковать архив . Татем нужно зарегистрировать
Нужные DLL. Запускаем РегистрацияКомСервера.exe от имени администратораи выбираем NetObjetToIDispatch45.dll которая лежит в DLLNetObjetToIDispatch45 |
|||
25
sitex
naïve
17.07.20
✎
14:30
|
(20) Отказ от COM наступает постепенно , и ваши статья становятся актуальными. С этим не поспоришь.
|
|||
26
Garykom
гуру
17.07.20
✎
14:50
|
(22) (23) (24)
Не мечи копья но у ТС совершенно другая трабла и даже его код на C#/.Net из (0) нихрена не сработает так как ему надо! |
|||
27
Serginio1
17.07.20
✎
14:58
|
(26) Нашел твое руководство по установке. Спасибо!
II. Как установить и начать пользоваться. 1. Установить NET Framework 4.5 https://www.microsoft.com/ru-ru/download/details.aspx?id=30653 2. Регистрация NetObjetToIDispatch45.dll 2.1 Запустить РегистрацияКомСервера.exe 2.2 Нажать кнопку "Регистрация Сервера" 2.3 Выбрать файл NetObjetToIDispatch45.dll, после чего сгенерится строка вызова, необходимая для регистрации 2.4 Запустить командную строку от имени Администратора. 2.5 Скопировать строку вызова из формы в командную строку и запустить. 2.6 Убедиться, что результатом запуска стало "Типы зарегистрированы успешно" 3. Запустить обработку Универсальная_СтрокаВДату.epf 3.1 По нажатию кнопки "Пуск" все строки должны сконвертироваться в даты. |
|||
28
svv1979
21.07.20
✎
15:01
|
Проблема в сервисе была переделали p_action=Start ("Пуск" Русские буквы некорректно передавались ) и убрали зависимость от регистра
из 1С все отработало хорошо ИмяВходящегоФайла = Объект.ПутьКФайлу; HTTP = Новый HTTPСоединение(Объект.Сервер); HTTPЗапрос = Новый HTTPЗапрос(Объект.АдресЗапроса); HTTP.ОтправитьДляОбработки(HTTPЗапрос,ИмяВходящегоФайла); //POST запрос //HTTP.Получить(HTTPЗапрос,ИмяВходящегоФайла); //GET Запрос тоже |
|||
29
acht
21.07.20
✎
15:06
|
(28) > Русские буквы некорректно передавались ) и убрали зависимость от регистра
Истинный 1Сник. Продавил внесение изменений во внешнюю систему вместо исправления своих косяков. Учись, Гений 1С! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |