Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как можно реализовать код в 1С?

Как можно реализовать код в 1С?
Я
   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)
   Ненавижу 1С
 
2 - 17.07.20 - 09:02
(0)

Глобальный контекст (Global context)
КопироватьФайл (FileCopy)
Синтаксис:
КопироватьФайл(<ИмяФайлаИсточника>, <ИмяФайлаПриемника>)
Параметры:
<ИмяФайлаИсточника> (обязательный)
Тип: Строка.
Полное имя файла-источника.
<ИмяФайлаПриемника> (обязательный)
Тип: Строка. 
Полное имя файла-приемника.
Описание:
Копирует файл-источник в файл-приемник. Допускается перезапись файла-приемника.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер).
Примечание:
Файл-приемник при создании будет иметь права доступа, аналогичные назначаемым при создании новых файлов (т.е. права доступа к файлу-источнику не копируются).
Допускается использование схем http, https и ftp для адресации файлов. При использовании этих схем в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
Для работы метода на веб-клиенте необходимо предварительно подключить расширение работы с файлами.
На веб-клиенте метод работает только с локальными файлами.
Пример:
КопироватьФайл("C:\Temp\Order.htm", "C:\My Documents\Order.htm");
См. также:
Глобальный контекст, метод НачатьКопированиеФайла
Использование в версии:
Доступен, начиная с версии 8.0.
   Garykom
 
3 - 17.07.20 - 09:07
(0) нахрен дублировать Формирование файла по HTTP запросу ?
   svv1979
 
4 - 17.07.20 - 09:35
(3) Там возвращает только страницу с параметрами
А это код на C# который отрабатывает правильно
   svv1979
 
5 - 17.07.20 - 09:38
(1) (2) Там внутри ссылка по ней браузер сам формирует и скачивает файл
стандартными методами HTTP WinHTTP не получалось возвращал только страницу с параметрами
   Garykom
 
6 - 17.07.20 - 09:38
(4) ты прочитал что я там написал? попробовал?
   svv1979
 
7 - 17.07.20 - 09:58
(6) ПРобовал все так же
Там же файл формируется несколько минут а потом скачивается

А здесь отрабатывает сразу и сохраняет в файл страницу с параметрами
   Garykom
 
8 - 17.07.20 - 10:06
(7) Извини конечно но хрень полнейшая.

Код на C# это тоже самое что код на 1С, проблема не в коде а где то у тебя косяк.
   Garykom
 
9 - 17.07.20 - 10:08
(8)+ Сервер к которому ты обращаешься не улавливает параметры все требуемые и не формирует сразу файл на отдачу а выкидывает тебе форму типа укажи параметры сам.

Попробуй тот же самый url "который не работает в 1С" в браузере или через curl
   svv1979
 
10 - 17.07.20 - 11:23
(9) Это то понятно в браузере то ссылка правильно отрабатывает
   svv1979
 
11 - 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Запрос);
ДД= Ответ.ПолучитьТелоКакДвоичныеДанные();
ДД.Записать(ИмяВходящегоФайла);

Пробовал так все равно не помогло
   Garykom
 
12 - 17.07.20 - 11:51
(11) и не поможет ибо параметры с заголовками путаете
   dmt
 
13 - 17.07.20 - 11:55
может проще будет библиотекой воспользоваться http://catalog.mista.ru/public/709325/
   Garykom
 
14 - 17.07.20 - 12:00
(13) лучше бы ссылку на гитхаб дал
и либа отвратная по реализации там многие коды ответа пропущены
   svv1979
 
15 - 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

     только если не сложно подскажи как
   Serginio1
 
16 - 17.07.20 - 12:20
   Serginio1
 
17 - 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);
   Serginio1
 
18 - 17.07.20 - 13:10
Только F:\tmp\test\" подправь на свой путь
   sitex
 
19 - 17.07.20 - 13:42
(16) Лучше конечно Кроссплатформенное решение.
   Serginio1
 
20 - 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).
   svv1979
 
21 - 17.07.20 - 14:11
(17) -2147221005(0x800401F3): Недопустимая строка с указанием класса
   Serginio1
 
22 - 17.07.20 - 14:27
   Serginio1
 
23 - 17.07.20 - 14:29
   Serginio1
 
24 - 17.07.20 - 14:30
По поводу регистрации Для проведения тестов нужно распаковать архив . Татем нужно  зарегистрировать 
Нужные DLL. Запускаем РегистрацияКомСервера.exe от имени администратораи выбираем NetObjetToIDispatch45.dll которая лежит в DLLNetObjetToIDispatch45
   sitex
 
25 - 17.07.20 - 14:30
(20) Отказ от COM  наступает постепенно , и ваши статья становятся актуальными. С этим не поспоришь.
   Garykom
 
26 - 17.07.20 - 14:50
(22) (23) (24)
Не мечи копья но у ТС совершенно другая трабла и даже его код на C#/.Net из (0) нихрена не сработает так как ему надо!
   Serginio1
 
27 - 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 По нажатию кнопки "Пуск" все строки должны сконвертироваться в даты.
   svv1979
 
28 - 21.07.20 - 15:01
Проблема в сервисе была переделали p_action=­­Start ("Пуск" Русские буквы некорректно передавались ) и убрали зависимость от регистра
 из 1С все отработало хорошо 

    ИмяВходящегоФайла = Объект.ПутьКФайлу;

    HTTP = Новый HTTPСоединение(Объект.Сервер);
    HTTPЗапрос = Новый HTTPЗапрос(Объект.АдресЗапроса);
    HTTP.ОтправитьДляОбработки(HTTPЗапрос,ИмяВходящегоФайла);  //POST запрос


    //HTTP.Получить(HTTPЗапрос,ИмяВходящегоФайла); //GET Запрос тоже
   acht
 
29 - 21.07.20 - 15:06
(28) > Русские буквы некорректно передавались ) и убрали зависимость от регистра

Истинный 1Сник. Продавил внесение изменений во внешнюю систему вместо исправления своих косяков.

Учись, Гений 1С!


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.