Имя: Пароль:
1C
1С v8
Передача данных с клиента на сервер.
0 GreenDay1986
 
22.09.22
13:26
Здравствуйте. УФ. Получаю данные(реквизиты) в клиентской функции(через соединение с базой SQL, пробовал то же самое в серверной процедуре, соединение не устанавливается). Необходимо заполнить данные существующей формы на основании этих реквизитов.
Как это сделать в клиентской процедуре? Либо каким способом переместить эти данные с клиента на сервер, для последующего заполнения реквизитов?
1 Жан Пердежон
 
22.09.22
13:28
смотри параметры в ОткрытьФорму()
2 GreenDay1986
 
22.09.22
13:30
(1) Данные после заполнения записать можно будет?
3 Ryzeman
 
22.09.22
13:31
(1) 3 раза перечитал (0)... Как ты вообще понял что у него за проблема?

>>Как это сделать в клиентской процедуре? Либо каким способом переместить эти данные с клиента на сервер, для последующего заполнения реквизитов?

(0)У тебя проблема перетащить с клиента на сервер или с сервера на клиент? В рамках одной обработки\ в контексте одной формы?
4 Мигрень
 
22.09.22
13:33
(0) код "соединения с базой SQL" любопытственно было бы глянуть
5 Галахад
 
гуру
22.09.22
13:36
Хм. А нельзя что-ли:
Объект.А = Б;
6 GreenDay1986
 
22.09.22
13:36
(3) Данные получаю на клиенте. Проблема или перетащить их с клиента на сервер. Или каким-то образом изменить реквизиты формы на соновании этих данных. Записать их в реквизиты в клиенте. Но. Реквизиты на клиенте недоступны. Поэтому видимо перетащить их из клиента на сервер.
Образно. Подключение на клиенте получаю данные ТипВключения и ТипУстановки через SQL-соединение с внешней базой(не 1С). Задача эти данные записать в реквизиты справочника.
7 Ryzeman
 
22.09.22
13:36
(4) Да 99% что через COMОбъект. Там как раз не особо интересно)
8 GreenDay1986
 
22.09.22
13:38
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ЗаводскойНомер = ПолучитьНомер(ПараметрКоманды);
    
    UdlФайл = Новый Файл(КаталогПрограммы() + "ConnectionPoint.udl");    
    Если Не UdlФайл.Существует() Тогда
        ПоказатьПредупреждение(Неопределено, "Не найден файл подключения к БД '" + КаталогПрограммы() + "ConnectionPoint.udl" + "'");
    Иначе
        СтрокаСоединенияССерверомElArchive   =  "File Name=" + КаталогПрограммы() + "\ConnectionPoint.udl" ;
        Сообщить(СтрокаСоединенияССерверомElArchive);
        Соединение = Новый COMОбъект("ADODB.Connection");
        
        Соединение.ConnectionString = (СтрокаСоединенияССерверомElArchive);
        МассивФайлов = Новый Массив;  
        Попытка
            Соединение.Open();
            РекордСет=Новый COMОбъект("ADODB.REcordset");
            Поток=Новый COMОбъект("ADODB.Stream");
            Поток.Type=1;
            Поток.Mode=3;
            Поток.Open();
            РекордСет.ActiveConnection=Соединение;
            РекордСет.CurSorLocation=3;
            Попытка
                                
                РекордСет.Open("Select Address, PhasesCount, Place, TypeOn, PlaceType, CounterTypeName From dbo.Counters_ForBuh Where CounterSerialNumber='"+СокрЛП(ЗаводскойНомер)+"'",Соединение);
                Если РекордСет.RecordCount=0 Тогда
                    ПоказатьПредупреждение(Неопределено, "По ОС № "+СокрЛП(ЗаводскойНомер)+" данные не найдены");
                Иначе
                    РекордСет.MoveFirst();
                    Попытка
                        УдалитьФайлы(КаталогВременныхФайлов(),"*.bmp");
                    Исключение
                        Сообщить(ОписаниеОшибки());
                    КонецПопытки;
                    Пока РекордСет.EOF()=0 Цикл
                        Адрес=РекордСет.Fields("Address").Value;    
                        ЧислоФаз=РекордСет.Fields("PhasesCount").Value;
                        МестоУстановки = РекордСет.Fields("Place").Value;
                        ТипВключения = РекордСет.Fields("TypeOn").Value;
                        ТипМестности = РекордСет.Fields("PlaceType").Value;
                        НаименованиеТипаСчетчика = РекордСет.Fields("CounterTypeName").Value;
                        
                        Сообщить(Адрес +" "+Строка(ЧислоФаз)+" "+МестоУстановки+" "+ТипВключения+" "+ТипМестности+" "+НаименованиеТипаСчетчика);        
                        
                        РекордСет.MoveNext();
                    КонецЦикла;
                    
                КонецЕсли;
                
            Исключение Сообщить(ОписаниеОшибки());
            КонецПопытки;
            Поток.Close();
            РекордСет.Close();
            Соединение.Close();
            МассивФайлов.Очистить();
                    
        Исключение
            Сообщить("Не могу подключиться к базе!!! ");
        КонецПопытки;
    КонецЕсли;
КонецПроцедуры
9 GreenDay1986
 
22.09.22
13:40
В (8) в клиенте записи получаю, на сервере не получаю. Собственно и вопрос, как дальше действовать, чтобы записать полученные данные в реквизиты справочника.
10 1Сергей
 
22.09.22
13:40
(9) см (5)
11 lubitelxml
 
22.09.22
13:42
(8) в чем проблема? эта процедура где выполняется? возьми полученные данные, передай их на сервер, там получи объект и запищи его. Если это в контексте справочника, то просто как в (5) тебе написали
12 GreenDay1986
 
22.09.22
13:44
(11) Я и спрашиваю как передать их на сервер с клиента.
13 Мигрень
 
22.09.22
13:45
(11) проблема в том, что мы пока не разобрались, что хочет записать ТС:  реквизиты формы или реквизиты объекта
14 lubitelxml
 
22.09.22
13:46
(12) где у тебя располагается эта команда?
15 GreenDay1986
 
22.09.22
13:47
(13) Реквизиты объекта. Следовательно нужно передать данные с клиента на сервер каким-то образом.
16 GreenDay1986
 
22.09.22
13:47
(14) На форме справочника
17 Мигрень
 
22.09.22
13:49
(15) я бы разобрался, почему на сервере твой код соединения с sql не работает, а не городил бы костыли с передачей данных с клиента на сервер
18 GreenDay1986
 
22.09.22
13:51
(17) попробую.
19 kubik_live
 
22.09.22
13:56
(0) "Читаю... немцы какие-то..." ©

То: КаталогПрограммы() + "\ConnectionPoint.udl"
В другом месте: КаталогПрограммы() + "ConnectionPoint.udl"

А зачем в каталог программы пихать?
20 Ryzeman
 
22.09.22
13:59
(16) На форме элемента справочника доступны основные реквизиты элемента. У формы есть обязательный реквизит "Объект". При записи из формы элемента все данные записанные в него записываются непосредственно в объект справочника.

Если же это не форма объекта, то сериализуй получаемые данные во что нибудь что может прожевать 1с (например, структура) и внутри цикла добавляй в неё элементы, через ЗаполнитьЗначенияСвойств, например.
Переноси на сервер параметром и делай что хочешь
21 GreenDay1986
 
22.09.22
14:00
(19) исправил, пытался просто прописать путь - всё одно. На клиенте соединение устанавливается, на сервере нет.
22 kubik_live
 
22.09.22
14:01
(21) Отладчик что говорит?
23 kubik_live
 
22.09.22
14:05
(21) Вангую: файл ConnectionPoint.udl не обнаружен
24 Ryzeman
 
22.09.22
14:08
(23) да что угодно может быть. Компоненту не установили на серваке, нет доступа относительный путь к расшаренной папке
25 Kassern
 
22.09.22
14:11
(21) "На клиенте соединение устанавливается, на сервере нет." - потому что сервер может вообще не иметь файла по пути клиента.
26 kubik_live
 
22.09.22
14:14
(25) +1
27 GreenDay1986
 
22.09.22
14:19
(25) Файл есть. Пробовал через дфс \\watt\1CV83\8.3.19.1522\bin\ConnectionPoint.udl также не доступен с сервера. С сервера приложений файл виден, доступ к нему есть.
28 lubitelxml
 
22.09.22
14:21
(27) ну тогда либо права настраивай, либо в (20) все четко разжевано как сделать
29 kubik_live
 
22.09.22
14:21
(27) Юзай через временное хранилище, Примеров в инете масса
30 Kassern
 
22.09.22
14:30
(27) "С сервера приложений файл виден, доступ к нему есть." - доступ есть у кого? У вас под юзвером Петя, или пользователя, который запускает службу 1с?
31 1Сергей
 
22.09.22
14:37
(23) (25) Потому что на сервере линух
гыгыгы)
32 GreenDay1986
 
22.09.22
14:39
(30) Спасибо. С этим моментом затупил. Админы придут проверим.
33 Kassern
 
22.09.22
15:01
(32) ПоместитьВоВременноеХранилище решит этот вопрос, без ожидания админов
34 rudnitskij
 
22.09.22
16:12
(0) Передавать эти данные как параметры серверной процедуры, которую будете вызывать с клиента - вариант неприемлемый, потому что слишком простой?