Имя: Пароль:
1C
1С v8
Передача результата запроса в внешней обработке ??
,
0 1С_Обезьян
 
20.08.13
11:10
Пишу обработку берет из   exel файле номер в первой колонке ищет в заказах в 1с .

вобщем вот код  суть вопроса как передать результат запроса и серверной функции  в клиентскую процедуру  

вываливает ошибка

{Форма.Форма.Форма(89)}: Ошибка при вызове метода контекста (ДокЗапр)
       Рез = ДокЗапр();
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'ret':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}ret
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'РезультатЗапроса'
1 1С_Обезьян
 
20.08.13
11:11
&НаКлиенте
Процедура загрузить(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);

ДиалогОткрытияФайла.ПолноеИмяФайла  = "";
Фильтр = "Текст(*,xls)|*.xls";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок   = "Выберите файл";

Если ДиалогОткрытияФайла.Выбрать() Тогда
    ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
    
КонецЕсли    
КонецПроцедуры

&НаСервере

Функция ДокЗапр();
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказПоставщику.Номер,
        |    ЗаказПоставщику.Товары.(
        |        Номенклатура.Вес,
        |        Количество,
        |        Цена
        |    )
        |ИЗ
        |    Документ.ЗаказПоставщику КАК ЗаказПоставщику";

    РезльтатЗапроса = Запрос.Выполнить();
    
    


    
     Возврат РезльтатЗапроса;    
    
    
КонецФункции

    
               &НаКлиенте

Процедура ЗаписатьВФайл(Команда)
    


    
    
Док = ПолучитьCOMОбъект(ПутьКФайлу);
КоличествоСтраниц = 1;

Для ТекНомер  = 1 По КоличествоСтраниц Цикл
    Номер = Док.Sheets(ТекНомер).Cells(1,1).Value;
    Наименование = Док.Sheets(ТекНомер).Cells(1,2).Value;
    Вес            = Док.Sheets(ТекНомер).Cells(2,3).Value;
    Количество            = Док.Sheets(ТекНомер).Cells(2,4).Value;
    Цена            = Док.Sheets(ТекНомер).Cells(2,5).Value;

    счСтроки = 3;
    Сообщить( Номер+""+Наименование+""+Вес+""+Количество+""+Цена);
    
    
          



    Пока СокрЛП(Номер) <> "" Цикл    // можно использовать другой признак
                                         // окончания данных на листе
        Номер = Док.Sheets(ТекНомер).Cells(СчСтроки,1).Value;
                                
        Наименование = Док.Sheets(ТекНомер).Cells(СчСтроки,2).Value;
        Вес  = Док.Sheets(ТекНомер).Cells(СчСтроки,3).Value;
        Количество  = Док.Sheets(ТекНомер).Cells(СчСтроки,4).Value;
              Цена  = Док.Sheets(ТекНомер).Cells(СчСтроки,4).Value;

        
        Сообщить(Номер);
        
        счСтроки = счСтроки + 1;
        
       Рез = ДокЗапр();
      
       выборка = Рез.Выбрать();
       Пока выборка.Следующий() Цикл
          
           Сообщить (Выборка.Цена);
           КонецЦикла;
                 
   КонецЦикла;

КонецЦикла;    

Док.Application.Quit();    
КонецПроцедуры
2 ДенисЧ
 
20.08.13
11:12
РезультатЗапроса на клиент не полезет...
Обрабатывай на сервер
3 1С_Обезьян
 
20.08.13
11:13
каким макаром передают результат запроса в внешних обработках?  кто подскажет
4 1С_Обезьян
 
20.08.13
11:13
а на сервере   остальной кусок кода не работает .вот получается путаница
5 Euguln
 
20.08.13
11:16
(2) + 1
или передавай тип, который можно передать, список значений, например.
6 1С_Обезьян
 
20.08.13
11:18
Euguln а подробнее моно?   я же запрос в список не выгружу  для чего мне список ?
7 Rie
 
20.08.13
11:20
(6) Есть ТаблицаЗначений.
8 1С_Обезьян
 
20.08.13
11:21
Rie  есть . а если документов до хрена . не буду же я все в таблицу выгружать для обработки ?
9 Зойч
 
20.08.13
11:25
Поместить во временное хранилище
10 1С_Обезьян
 
20.08.13
11:26
Зойч  или подсмотреть как это делают в типовых сами 1с
11 Rie
 
20.08.13
11:26
(8) Обработай на сервере. Передай клиенту только то, что ему нужно (всё равно ведь передавать-то).
Причём можно и по кусочкам передавать.
12 1С_Обезьян
 
20.08.13
11:27
они делают связь у низ запрос не в функции обработки .а в общем модуле аж.)
13 1С_Обезьян
 
20.08.13
11:28
Rie  клеинт не  не видит тип

Ошибка отображения типов:
Отсутствует отображение для типа 'РезультатЗапроса'
14 Rie
 
20.08.13
11:29
(13) А я разве говорил результат запроса передавать?
Обработай на сервере. Сформируй таблицу значений. Отправь её клиенту.
15 1С_Обезьян
 
20.08.13
11:32
Rie тоесть  обработаю запрос вгружу его в таблицу  таблицу передам  клиенту   .а если данных туево кукуево  и сколько в таблицу грузить тогда?  база не вылетит?
16 alexei366
 
20.08.13
11:34
(15) Ты что клиенту должен вернуть , какой результат?
17 Rie
 
20.08.13
11:37
(15) Если данные клиенту нужны - их же всё равно ему придётся передавать, сколько бы их не было, не так ли?
Если очень боишься - передай по частям.
18 1С_Обезьян
 
20.08.13
11:39
alexei366  результат запроса номер докум  вес цена  наименование
19 Ork
 
20.08.13
11:39
Какие проблемы завести у обработки реквизит ТабличнаяЧасть? И заполнять ее на сервере? Все ее данные вполне отображаются на клиенте. В чем трудность?
20 1С_Обезьян
 
20.08.13
11:40
Ork  ты будешь  5 тыс документов  заполнять в таб часть?
21 Rie
 
20.08.13
11:42
(20) Если тебе они нужны - тебе всё равно придётся их передать. Тем или иным способом - но придётся.
22 Ork
 
20.08.13
11:43
(20) Я вам дал вполне работоспособную альтернативу. Ваш вариант с РезльтатЗапроса или ТаблицаЗначений при вашей постановке неработоспособны. Нельзя передать с сервера на клиент ни одно, ни другое. Даже не для 5 тыс документов. Даже для одного нельзя.
23 1С_Обезьян
 
20.08.13
11:45
Ork реквезит с каким типом ?   еще раз пожайлоста реквизит ТабличнаяЧасть
24 Ork
 
20.08.13
11:45
+ (22) И потом - я сомневаюсь, что вам действительно нужно отображать на клиенте табличные части 5 тыс документов. А обрабатывать вполне можно на сервере. Отображать уже готовый результат.
25 alexei366
 
20.08.13
11:46
Да все мужики, ща автор ещё повыпендривается, ну а потом сделает через реквизит формы "ТаблицаЗначений" или вообще ТабДок будет заполнять.
26 1С_Обезьян
 
20.08.13
11:46
Rie   да частями возможно моно будет. опробуем
27 1С_Обезьян
 
20.08.13
11:47
alexei366 а ты чето дельное можешь сказать или ухмылятсья в кулачок?
28 1С_Обезьян
 
20.08.13
11:49
Ork вот  мне и надо передать этот готовый результат  из 5 т документов в клиент и там уже обработать  условием
29 Ork
 
20.08.13
11:49
30 Ork
 
20.08.13
11:50
(28) Почему не передать условие для обработки на сервер?
31 1С_Обезьян
 
20.08.13
11:53
Ork щас попробуем следую вашему совету
32 alexei366
 
20.08.13
11:57
(27) Я те ток одно скажу, если будешь тягать резудьтат в таблицу и заполнять её в цикле на Клиенте, то вызывай серверную без контекста, а то задержки будут хорошие))
33 1С_Обезьян
 
20.08.13
11:59
Функция ДокЗапр();
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказПоставщику.Номер,
        |    ЗаказПоставщику.Товары.(
        |        Номенклатура.Вес,
        |        Количество,
        |        Цена
        |    )
        |ИЗ
        |    Документ.ЗаказПоставщику КАК ЗаказПоставщику";

    РезльтатЗапроса = Запрос.Выполнить();
    
      Выборка= РезльтатЗапроса.Выбрать();


      Пока Выборка.Следующий() Цикл
          
          Если Номер = Выборка.Номер Тогда  //Номер клиент
              
            Сообщить("РРР ура!");  
КонецЕсли;    
    КонецЦикла;
    
КонецФункции
34 1С_Обезьян
 
20.08.13
11:59
клиентские переменные на сервер   .не удалось вызвать
35 1С_Обезьян
 
20.08.13
12:00
alexei366 хорошо . воспользуюсь советом
36 Ork
 
20.08.13
12:07
(33) Это : "Если Номер = Выборка.Номер Тогда" что?
Почему не вставить условие в запрос? Что б не лопатить все документы. А просто взять с правильным номером.
37 1С_Обезьян
 
20.08.13
12:08
Ork я в запрос не вставлю условие только потому.что я Номер получаю из exel  и делаю это в клиенте
38 1С_Обезьян
 
20.08.13
12:11
тогда Сообщить(" ура!");   номер в доке совпал с номером в колjнке exel  файла   это просто здорво)
39 Ork
 
20.08.13
12:14
(37) И что?
Конструкции типа :

&НасервереБезКонтекста
Функция ДокЗапр( НомерДляПоиска )
...
КонецФункции;

&Наклиенте
...
ДокЗапр( НомерИзExcel );

уже в 1С запрещены?
40 alexei366
 
20.08.13
12:15
(39) я так и предлагал, раз не хош данные с экселя во временную таблицу или массив пихать чтоб в целом на сервак кинуть, то цикл на клиенте с безконтекстными вызовами
41 1С_Обезьян
 
20.08.13
12:17
ща проверим ваши предложения
42 Ork
 
20.08.13
12:18
+ (39) Непонятно назначение Функции, которая ничего никому никогда не возвращает. Традиции С++?
43 1С_Обезьян
 
20.08.13
12:20
Ork  результат обработки запроса возвращет
44 1С_Обезьян
 
20.08.13
12:26
короче ,короче,склифацовзкие  из вас тут толком никто ни чего не знает  ,сделаю я сам   глядя на типовую как эталон 1с .

вот мой вам ответ .уж простите  меня . спасибо за советы . вчера уже их все опробовал .   а с таб значений  щас еще повожусь.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший