Ошибка отображения типов отсутствует отображение для типа comобъект

Не находится по наименованию элемент справочника в управляемых формах

Я

  

sidalexsandr

16.02.18 — 13:50

Пишу

&НаСервере

Функция СоздатьНовыйДокумент(ДокументРеал)

   К = Справочники.Контрагенты.НайтиПоНаименованию(«ИВАН ФЕДОРОВ»,,,);

КонецФункции

Выдает ошибку:отсутствует отображение для типа ComОбъект

  

Darych

1 — 16.02.18 — 14:08

ты что-то недоговариваешь.. и вообще темы одна за одной. а инфу из тебя клещами нужно тащить… короче иди кури

  

Рэйв

2 — 16.02.18 — 14:13

(0)А что там с COM соединением связано ты конечно, как настоящий партизан, решил утаить?

  

Lexey_

3 — 16.02.18 — 14:19

(0) «ИВАН ФЕДОРОВ»,,,

а зачем 3 запятых поставил?

  

Defender aka LINN

4 — 16.02.18 — 14:30

(0) Тут нужен для начала учебник русского языка.

Ну или внимательность, чтобы заметить, что ошибка с поиском по наименованию никак не связана.

  

sidalexsandr

5 — 16.02.18 — 14:49

(1) Вот полный тескт

&НаСервере

Функция СоздатьНовыйДокумент(ДокументРеал)

    НовРеал = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

    //НовРеал.Номер = «М0000000159»;

    НовРеал.Дата = ТекущаяДата();

    //НовРеал.СписокВидовОперацийЗначение =

    К = Справочники.Контрагенты.НайтиПоНаименованию(«ИВАН ФЕДОРОВ»,,,);

      
    //НовРеал.Контрагент = К;

    
    НовРеал.Записать();

    Возврат НовРеал.ссылка;

    
КонецФункции

  

sidalexsandr

6 — 16.02.18 — 14:53

Исходная процедура

&НаКлиенте

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

    

        
    Соединение = Новый COMОбъект(«V83.Application»);

    //База = Новый COMObject(«V82.Application»);

    //connection = Соединение.Connect(«File=»»C:1c-star-baza»»»+СокрЛП(«Старая»)+»»»;Usr=»»»+СокрЛП(«Репнин Александр»)+»»»;Pwd = «»» + СокрЛП(«9985») + «»»;»);

    //Для варианта клиент — сервер

    //СтрокаСоединения = «Srvr = «»192.168.90.113″»;Ref = «»Старая»»; Usr = Репнин Александр; Pwd = 9985″;

    //Для варианта файлового режима:

    СтрокаСоединения = «File = C:1c-star-baza; Usr = РепнинАлександр; Pwd = 9985»;

    //СтрокаСоединения = «192.168.90.113;Ref=~SQL Сервис-Центр~;usr=Репнин Александр;pwd=9985»;

    Попытка

        Соединение.Connect(СтрокаСоединения);

        Сообщить(«Подключился к базе»);

    Исключение

        Сообщение = Новый СообщениеПользователю;

        Сообщение.Текст = «Не удалось подключиться к базе» + ОписаниеОшибки(); Сообщение.Сообщить();

    КонецПопытки;

     //ДокументРеал = Подключение.Документы.РеализацияТоваровУслуг.Выбрать(‘20130101’, ‘20140110’ );

     //Подключение.Документы.РеализацияТоваровУслуг.СоздатьДокумент();

     Реал = Соединение.Документы.РеализацияТоваровУслуг;

     //Реал  = Подключение.Документы.РеализацияТоваровУслуг;

     ДокументРеал = Реал.Выбрать(‘20130101’, ‘20140110’ );

    ////ВыборкаДокументов = Документы.РеализацияТоваровУслуг.Выбрать(‘20130101’, КонецДня(ТекущаяДата()) );  09.01.2014

    //ВыборкаДокументов = Документы.РеализацияТоваровУслуг.Выбрать(‘20130101’, ‘20140110’ );

    Сообщить(«ТекДата = «+ТекущаяДата());

    Пока ДокументРеал.Следующий()=1 Цикл

         Сообщить(«Документ = «+ДокументРеал.Дата);

         МойНовыйДок = СоздатьНовыйДокумент(ДокументРеал);

    КонецЦикла;

    
КонецПроцедуры

  

Defender aka LINN

7 — 16.02.18 — 14:54

(6) А для за каким органом ты передаешь COM-объект на сервер?

  

sidalexsandr

8 — 16.02.18 — 14:59

(7) У меня управляемые формы. И я так понимаю создавать документы я могу только НаСервере. Вообще стоит задача перенисти документы РеализацияТоваровУслуг из УТ в БУХ.

  

Defender aka LINN

9 — 16.02.18 — 15:01

(8) Я не спрашивал у тебя, что ты и где создаешь. Я спросил, зачем ты передаешь на сервер объект, которым даже не пользуешься?

Ну и если стоит задача перенести данные — КД в зубы и вперед.

  

silent person

10 — 16.02.18 — 15:07

(9) он видимо выучил что с объектами БД работают только на сервере, вот и передает СОМ объект на сервер.

вот еще один такой же был http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=572492&print=1

(8) не надо ничего не куда передавать. работай с СОМ объектами на клиенте.

  

Darych

11 — 16.02.18 — 15:09

«смешались в кучу кони, люди..»

  

drcrasher

12 — 16.02.18 — 15:12

(9) дык уже лет пицот из ут в бп данные передаются «из коробки». даже кд в зубы не нужна

  

sidalexsandr

13 — 16.02.18 — 15:46

(12) У меня Ут 10 и БП 3. В стандартных обработках Ут нет Бух 3

  

drcrasher

14 — 16.02.18 — 15:51

(13) значит нужно обновиться до последней версии

  

sidalexsandr

15 — 16.02.18 — 15:52

Как НаСервере получить доступ к документам которые были выбранны НаКлиенте через Оле?

  

sidalexsandr

16 — 16.02.18 — 15:55

(14) Предыдущий программист 1с сказал, что конфигурация сильно измененная и поэтому типовыми средствами не перенести.

  

Darych

17 — 16.02.18 — 15:58

(15) выбирай на сервере или передавай на сервер с клиента нужную инфу, а не выбранные по оле объекты

  

sidalexsandr

18 — 16.02.18 — 16:11

Попробовал всю большую процедуру выполнять на сервере и убрал вызов из клиентской процедуры процедуры серверной.

В результате получилась одна большая серверная процедура, вот:

&НаСервере

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

    

        
    Соединение = Новый COMОбъект(«V83.Application»);

    //База = Новый COMObject(«V82.Application»);

    //connection = Соединение.Connect(«File=»»C:1c-star-baza»»»+СокрЛП(«Старая»)+»»»;Usr=»»»+СокрЛП(«Репнин Александр»)+»»»;Pwd = «»» + СокрЛП(«9985») + «»»;»);

    //Для варианта клиент — сервер

    //СтрокаСоединения = «Srvr = «»192.168.90.113″»;Ref = «»Старая»»; Usr = Репнин Александр; Pwd = 9985″;

    //Для варианта файлового режима:

    СтрокаСоединения = «File = C:1c-star-baza; Usr = РепнинАлександр; Pwd = 9985»;

    //СтрокаСоединения = «192.168.90.113;Ref=~SQL Сервис-Центр~;usr=Репнин Александр;pwd=9985»;

    Попытка

        Соединение.Connect(СтрокаСоединения);

        Сообщить(«Подключился к базе»);

    Исключение

        Сообщение = Новый СообщениеПользователю;

        Сообщение.Текст = «Не удалось подключиться к базе» + ОписаниеОшибки(); Сообщение.Сообщить();

    КонецПопытки;

     //ДокументРеал = Подключение.Документы.РеализацияТоваровУслуг.Выбрать(‘20130101’, ‘20140110’ );

     //Подключение.Документы.РеализацияТоваровУслуг.СоздатьДокумент();

     Реал = Соединение.Документы.РеализацияТоваровУслуг;

     //Реал  = Подключение.Документы.РеализацияТоваровУслуг;

     ДокументРеал = Реал.Выбрать(‘20130101’, ‘20140110’ );

    ////ВыборкаДокументов = Документы.РеализацияТоваровУслуг.Выбрать(‘20130101’, КонецДня(ТекущаяДата()) );  09.01.2014

    //ВыборкаДокументов = Документы.РеализацияТоваровУслуг.Выбрать(‘20130101’, ‘20140110’ );

    Сообщить(«ТекДата = «+ТекущаяДата());

    Пока ДокументРеал.Следующий()=1 Цикл

         Сообщить(«Документ = «+ДокументРеал.Дата);

        // МойНовыйДок = СоздатьНовыйДокумент(ДокументРеал.Ссылка);

        // МойНовыйДок = СоздатьНовыйДокумент();

        //*********************************************************************************

        НовРеал = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

    НовРеал.Дата = ТекущаяДата();

    Контр = ДокументРеал.Контрагент.Наименование;

    К = Справочники.Контрагенты.НайтиПоНаименованию(Контр);    

    

    НовРеал.Контрагент = К;

    Ф = Справочники.Организации.НайтиПоНаименованию(«Медресурс»);        

    НовРеал.Организация = Ф;

    НовРеал.Записать();

    КонецЦикла;

    
КонецПроцедуры

Вопросы:

1)почему на сервере не создается документ

2) какой функкцией пользоваться НаСерввере для отладки вместо функции Сообщить()?

  

Darych

19 — 16.02.18 — 16:15

1) откуда знаешь, что не создается?

2) отладчиком

  

Cyberhawk

20 — 16.02.18 — 16:16

(16) Что за предыдущий? Ты там в штате что ли?

  

sidalexsandr

21 — 16.02.18 — 16:16

(20) Да в штате.

  

sidalexsandr

22 — 16.02.18 — 16:18

Сделал

&НаСервере

Процедура ЗапуститьРаб()

     // Тест программы с Оле

КонецПроцедуры

&НаКлиенте

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

    ЗапуститьРаб();    

КонецПроцедуры    

Теперь работает

  

Вафель

23 — 16.02.18 — 16:20

Типовые средстваа можно и доработать, что гораздо легче чем свой обмен писать

  

sidalexsandr

24 — 16.02.18 — 16:39

(23) А что сложного написать. Подключился по Оле и цикл по документам и создание новых документов, а дальше в цикле заполнение у созданного документа табличной части

  

hhhh

25 — 16.02.18 — 16:51

(24) ну там у документа 50 реквизитов. И 30 в табличной части, и какждый реквизит вы должны разобрать, как его присваивать, что туда писать. Представьте каког нереального объема заполнение вы должны замутить. А типовой он уже есть, можно его использовать.

  

Cyberhawk

26 — 16.02.18 — 16:52

(24) Это когда один вид документа и правила обмена просты. А когда 500 видов справочников и 200 видов документов — зае*ешься по Оле писать ))

  

sidalexsandr

27 — 16.02.18 — 17:01

(26) Согласен. У меня ограниченное число видов документов.

  

hhhh

28 — 16.02.18 — 17:34

(27) ну даже если 10 видов документов, умножим на 80 реквизитов, получается 800 процедур вам надо написать минимум. Это если у вас на всё про всё меньше 2х месяцев, то вы подумайте.

  

Джинн

29 — 16.02.18 — 17:41

Дайте ТС яду. Пусть не мучается человек.

Ошибка отображения типов: Отсутствует отображение для типа ‘ЭлементСпискаЗначений’

Описание ошибки:
Ошибка при программировании, конфигурировании кода в 1С 8:

Ошибка отображения типов:
Отсутствует отображение для типа ‘ЭлементСпискаЗначений’
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘v’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/uobjects}v
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘value’:
форма: Элемент
имя: {http://v8.1c.ru/8.1/data/core}value

Найденные решения:

1C 8 Ошибка отображения типов: Отсутствует отображение для типа ЭлементСпискаЗначений,

Нажатие на изображении увеличит его
1C 8, Отсутствует отображение для типа ЭлементСпискаЗначений, по причине, ошибка передачи данных между клиентом и сервером, значение недопустимого типа

Возникла при написании кода индивидуальной конфигурации. Но, как оказалось, может подстерегать программиста из-за его невнимательности и при конфигурировании в других конфигурациях. Итак, в чем же причина возникновения данной ошибки. В управляемой форме был создан реквизит типа «СписокЗначений». При открытии формы по коду срабатывает обработчик заполнения этого списка значений. Т.е. в коде создается переменная с помощью конструктора «Новый СписокЗначений», значение которой потом и устанавливается реквизиту формы. Но, перед тем как это происходит, в коде список значений изменяется — в частности выполняется его дополнительная сортировка. Конечно, ошибка «Ошибка отображения типов: Отсутствует отображение для типа ‘ЭлементСпискаЗначений’» может возникнуть у Вас не только в такой ситуации. Сейчас разберемся в чем ее суть.

1С 8, Ошибка для типа ЭлементСпискаЗначений, передачи данных между клиентом и сервером, значение недопустимого типа, по причине, ошибка преобразования данных XDTO

Как было отмечено в этой частной задаче выполняется сортировка исходного заполненного списка значений. Но, т.к. в этой частной задаче не подходило использование метода «СортироватьПоЗначению(<Направление>)«, т.к. сортировка более сложная (по текстовым данным с разделителями порядка, содержащих разделитель «.», пример: 1.1, 2.2, 2.2.1, 2.2.2, 3.1, 3.2, 3.3.1, 3.3.2). Поэтому сортировка выполнялась программно с созданием новой переменной типа «СписокЗначений» и ее заполнением по данным исходного списка.

После сохранения кода и попытки проверки появилась ошибка, текст которой приведен в начале страницы. Анализ данных через предмет отладки неявно, но показал ошибку.

Нажатие на изображении увеличит его

1C 8, как устранить, исправить ошибку, ошибка преобразования данных XDTO, отсутствует отображение для типа ЭлементСпискаЗначений

Не смотря на то, что в методической информации «Синтакс-помощника» 1С 8 указано, что значение элемента списка значений может быть любым (произвольным), все-таки для случая использования в управляемой форме в качестве реквизита накладывается ограничение по типу. И нельзя в значение такого списка значений поместить «ЭлементСискаЗначений» другого списка значений.

1С 8, какие значения могут быть у списказначений, исключения для управляемой формы

Т.е. для моего случая использования списка значений в управляемой форме в качестве реквизита ошибка была в коде, где происходило заполнение значений нового списка по данным исходного при сортировке.

Нажатие на изображении увеличит его

Было выполнено исправление в коде для обращения к значениям и передачи их в качестве значений нового списка значений. 

Нажатие на изображении увеличит его
1С 8, в чем причина ошибки в форме, отсутствует отображение для типа Элемент списка значений, ошибка отображения типов

В данном случае значениями списка были значения примитивного тип «Строка», поэтому дальнейшая работа доработанного кода стала возможной. И это все-таки позволило реализовать задачу. Если у Вас будут другие типы, например ссылки, то продумывайте заранее, как будете упорядочить, возможно придется через другие универсальные объекты, например использование таблицы значений, и потом заполнять конечный список значений. Другие примитивные типы не проверялись, но предполагаю, что они так же подойдут для корректной работы в управляемой форме. в качестве значений списка. Поэтому учитывайте это, если столкнетесь с данной ошибкой при Вашем конфигурировании — подбирайте по возможности простой тип для значений списка.

Нажатие на изображении увеличит его
1С 8, в чем, причина ошибки, как устранить, Ошибка передачи данных между клиентом и сервером, отсутствует отображение для типа элемент списка значений

Таким образом на примере данной частной ситуации возникновения ошибки при конфигурировании в 1С 8 «Отсутствует отображение для типа ЭлементСпискаЗначений, по причине, ошибка передачи данных между клиентом и сервером, значение недопустимого типа» извлекаем вывод о том, что нужно быть внимательным и не заполнять значения объекта «Список значений» элементами другого списка значений. А передавать значения элемента списка значений, если одна переменная типа «СписокЗначений» заполняется за счет другой подобной.

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

16-03-2022

Журавлев А.С.
(Сайт azhur-c.ru)

Добрый день при вызове клиентской процедуры из серверной выходит ошибка {Документ.ЗаказПокупателя.Форма.ФормаДокументаУпр.Форма}: Ошибка при вызове метода контекста (ПриИзмененииНоменклатуры)    ПриИзмененииНоменклатуры(Элементы.Товары.ТекущиеДанные); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства ‘param’:    форма: Элемент    имя: { по причине: Ошибка отображения типов: Отсутствует отображение для типа ‘ДанныеФормыЭлементКоллекции’ Вот эти процедуры ///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// После отображения ошибки поле номенклатура заполняется выбранным товаром.

на толстом клиенте встречался, баг платформы, перезапуск службы помогал. какая платформа?

да причем тут баг? он передает в процедуру не тот параметр

да хз, на толстом видел такой именно баг)

платформа 8.2.14.519, конфигурация УПП 1.2 не типовая

перевожу конфу на управляемое приложение, не подскажите про параметр?

про имя процедуры и указание параметров в вызове процедуры на клиенте?

про тип параметра, пилять

теперь выдало ошибку Документ.ЗаказПокупателя.МодульОбъекта(2944)}: Поле объекта не обнаружено (Цена) Привожу саму процедуру из общего модуля

ау есть кто-нибудь? прошу помощи,помогите разобраться с ошибкой

вот что ты передаешь туда?

пытаюсь обратиться к экспортной процедуре и передать строку таб части, но так не получается СтрокаТабличной Части или Элементы.Товары.ТекущиеДанные, так не предусмотрено это в серверной части

[пытаюсь обратиться к экспортной процедуре и передать строку таб части] ну и где ты пытаешься? все что ты передаешь не Строка таб части

///////////////////////////////////////////////////////////////////////// выдает ошибку  {Документ.ЗаказПокупателя.Форма.ФормаДокументаУпр.Форма}: Недостаточно фактических параметров    МодульОбъекта.ПриИзмененииНоменклатурыТоваров; как в серверной части можно обратиться к табличной части документа?

потому что ты без параметров обращаешься

а что указать в качестве параметра?

если указать Элемент или имя табличной части то выходит ошибка

нужно передать строку таб части — очевидно же, что ни Элементы ни Имя ТЧ не являются строкой ТЧ

Для ТС — это не очевидно. Для ТС — проще спросить и ныть потом о помощи, чем подумать. p.s.: ТС уже ничего не поможет, и не знаю то ли мама с папой не старались, то ли перестарались.

, СтрокаТабличнойЧасти=Элементы.Товары.ТекущиеДанные; единственное что приходит на ум, добавить в серверной части

+ опять же СтрокаТабличнойЧасти.Номенклатура <> СтрокаТабличнойЧасти

//////////////////////////////////////////////////////////////// вышла ошибка «Ошибка при получении значения атрибута контекста (ТекущиеДанные)    СтрокаТабличнойЧасти=Элементы.Товары.ТекущиеДанные;»

объясните пожалуйста значение ошибки, дополнительно к Ошибка при получении значения атрибута контекста (ТекущиеДанные)    СтрокаТабличнойЧасти=Элементы.Товары.ТекущиеДанные; Текущие данные таблицы недоступны на сервере

ну нет на сервере текущих данных Элементов

это я тоже понял, а как можно передать параметры табличной части на сервере? через Объект?

это я тоже понял, а как можно передать параметры табличной части на сервере? через Объект?

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Данная ошибка возникает в тот момент, когда Вы пытаетесь вызвать серверный метод и передаете ему в качестве параметра управляемую форму.

Рассмотрим следующий модуль управляемой формы:

&НаСервере
Функция ТестВызоваСервера(Форма)

	Форма.ТолькоПросмотр = Истина;

КонецФункции // ТестВызоваСервера()

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
	
	//попытка передачи переменной локального контекста на сервер
	ТестВызоваСервера(ЭтаФорма);
	
КонецПроцедуры

Дело в том, что в контексте модуля управляемой формы переменная ЭтаФорма доступна всегда (как на клиенте, так и на сервере) и дополнительно ее передавать не требуется (если только вы не вызываете процедуру или функцию, перед которой указана директива &НаСервереБезКонтекста). Правильным будет следующий код:

&НаСервере
Функция ТестВызоваСервера()

	ЭтаФорма.ТолькоПросмотр = Истина;	

КонецФункции // ТестВызоваСервера()

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
	
	//вызов контекстной серверной функции
	ТестВызоваСервера();
	
КонецПроцедуры

Аналогичное замечание относится к серверным вызовам. Вы не можете передать содержимое переменной ЭтаФорма на сервер. Вы можете только запросить необходимую информацию на сервере и изменить форму в контексте клиента, либо реализовать это через серверный метод самой формы. Например, такой код работать не будет:

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
	
	//попытка передачи переменной локального контекста на сервер
	ОбщийМодульСервер.Тест(ЭтаФорма);
	
КонецПроцедуры

Подумайте сами, чем можно заменить такой вызов

Здравствуйте. В собственной конфигурации есть документ «ОбъектныйГрафик» с Тч «Задания». в которую входят реквизиты: ВыдающийОтдел — СправочникСсылка.Подразделения, Задание — СправочникСсылка.ЗаданияШаблон, ДеньВыдачи -целое число.
Справочник ЗаданияШаблон имеет структуру: Наименование содержит наименование задания, ДеньВыдачи(целое число) — порядковый номер рабочего дня выдачи задания. Хочу сделать, чтобы при добавлении строки в ТЧ при изменении реквизита «Задание» автоматически выводился День выдачи для этого задания. Делаю так:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&НаСервере
Функция ПолучитьДеньВыдачи(Отдел, СсылкаЗадание) Экспорт
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
             |  ЗаданияШаблон.ДеньВыдачи
             |ИЗ
             |  Справочник.ЗаданияШаблон КАК ЗаданияШаблон
             |ГДЕ
             |  ЗаданияШаблон.ВыдающийОтдел = &Отдел
             |          И ЗаданияШаблон.Ссылка = &Задание";
Запрос.УстановитьПараметр("Отдел",Отдел);
Запрос.УстановитьПараметр("Задание",СсылкаЗадание);
 РезультатЗапроса = Запрос.Выполнить();
    
 Возврат РезультатЗапроса.Выгрузить();
 
КонецФункции    
&НаКлиенте
Процедура ЗаданияЗаданиеПриИзменении(Элемент)
ТекущаяСтрока=Элементы.Задания.ТекущиеДанные;
ТекущаяСтрока.ДеньВыдачи=ПолучитьДеньВыдачи(ТекущаяСтрока.ВыдающийОтдел,ТекущаяСтрока.Задание);
КонецПроцедуры

В режиме предприятия я при изменении задания вылетает ошибка:
{Документ.ОбъектныйГрафик.Форма.ФормаДокумента.Фор ма(140)}: Ошибка при вызове метода контекста (ПолучитьДеньВыдачи)
ТекущаяСтрока.ДеньВыдачи=ПолучитьДеньВыдачи(Текуща яСтрока.ВыдающийОтдел,ТекущаяСтрока.Задание);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’

Что делаю не так? помогите пожалуйста.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

Сергей

Местный

Сообщений: 8
Баллов: 15
Регистрация: 26.06.2022

#10

0

28.06.2022 13:36:40

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = РаботаСоСпискамиДокументовКлиент.ПолучитьДанныеТекущейСтрокиСписка(
Элементы.Список, Элементы.Список.ТекущаяСтрока);

Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;

Если Поле = Элементы.Файлы Тогда
ОткрыватьЗакладкуФайлы=ПроверкаОткрытияЗаклФайлы(ЭтаФорма)
ПараметрыОткрытия = Новый Структура(«Ключ, ОткрытьЗакладкуФайлы», ТекущиеДанные.Ссылка, ОткрыватьЗакладкуФайлы);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
Возврат;
КонецЕсли;

Если Поле = Элементы.ПодписанЭП Тогда
ПараметрыОткрытия = Новый Структура(«Ключ, ОткрытьЗакладкуЭП», ТекущиеДанные.Ссылка, Истина);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
Возврат;
КонецЕсли;

Если Поле = Элементы.Задачи Тогда
ОткрытьФорму(«ОбщаяФорма.ПроцессыИЗадачи»,
Новый Структура(«Предмет», ТекущиеДанные.Ссылка),
ЭтаФорма);
Возврат;
КонецЕсли;

Если Поле = Элементы.ЕстьКатегории Тогда
ПараметрыОткрытия = Новый Структура(«Ключ, ОткрытьЗакладкуКатегории», ТекущиеДанные.Ссылка, Истина);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
Возврат;
КонецЕсли;

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

ПараметрыОткрытия = Новый Структура(«Ключ», ТекущиеДанные.Ссылка);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
КонецПроцедуры

bless18
24.08.2012 10:04 Прочитано: 15889

Доброе утро!
Имеется документ Списание с табличной частью, у которой колонки:
Наименование
Количество
При вводе количества нужен контроль остатков, чтобы не было отрицательных. Создаю на Сервере выборку количества из регистра накопления. И мне нужен параметр Наименование, по которому отслеживать мое количество. Но никак не могу придумать способ обратиться к элементам табличной части на сервере.
Подскажите, пожалуйста, как это сделать?
Код 1C v 8.2 УП

 	ТЗ = Объект.Списание.Выгрузить().Колонки;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Книга", ТЗ.Наименование);
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиКнигОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиКниг.Остатки КАК ОстаткиКнигОстатки
|ГДЕ
| ОстаткиКнигОстатки.Книга = &Книга";
Результат = Запрос.Выполнить().Выгрузить();

Пока такие варианты, но запрос выдает ошибку
Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ОстаткиКнигОстатки.Книга <<?>>= &Книга

Yandex
Возможно, вас также заинтересует

Реклама на портале

bless18
24.08.2012 11:59 Ответ № 1

Попробовала реализовать по-другому:
на Сервере создаю функцию КонтрольОстатков с параметром Книга и вызываю ее на клиенте:
Код 1C v 8.2 УП

 
&НаСервереБезКонтекста
Функция КонтрольОстатков(Книга) Экспорт
ТаблицаОстатков = РегистрыНакопления.ОстаткиКниг.Остатки(,Новый Структура ("Книга", Книга));
Возврат ТаблицаОстатков;
КонецФункции

&НаКлиенте
Процедура СписаниеКнигКоличествоПриИзменении(Элемент)
СтрокаТЧ = Элементы.СписаниеКниг.ТекущиеДанные;
КонтрольОстатков(СтрокаТЧ.Наименование);
КонецПроцедуры

Выходит ошибка:
{Документ.СписаниеКниг.Форма.ФормаДокумента.Форма(47)}: Ошибка при вызове метода контекста (КонтрольОстатков)
КонтрольОстатков(СтрокаТЧ.Наименование);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.

bless18
24.08.2012 12:00 Ответ № 2

А если с директивой &НаСервере создать функцию, то ошибка

{Документ.СписаниеКниг.Форма.ФормаДокумента.Форма(47)}: Ошибка при вызове метода контекста (КонтрольОстатков)
КонтрольОстатков(СтрокаТЧ.Наименование);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable *08

Adara
24.08.2012 12:45 Ответ № 3

Попробуй так:
1. Выгрузи колонку «Наименование» из ТЧ «Списание» в массив МассивКнигИЗТЧ.
2. В запросе:
Код 1C v 8.2 УП

 
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивКниг", МассивКнигИЗТЧ);
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиКнигОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиКниг.Остатки КАК ОстаткиКнигОстатки
|ГДЕ
| ОстаткиКнигОстатки.Книга В (&МассивКниг)";
Результат = Запрос.Выполнить().Выгрузить();

Получишь в «Результат» Таблицу с остатками по твоим «Наименование»…

Должно получится.


Изменено 24.08.12 12:46:45

Adara
24.08.2012 12:53 Ответ № 4

Выгрузить в массив:Код 1C v 8.2 УП

 МассивКнигИЗТЧ = Объект.Списание.Выгрузить().ВыгрузитьКолонку("Наименование");   
bless18
24.08.2012 15:26 Ответ № 5

Спасибо! Получилось!

Adara
24.08.2012 16:17 Ответ № 6


Изменено 24.08.12 17:23:12

Подсказка:Вы можете добавить любую страничку в Социальные закладки щелкнув по значку соцсетей (в вверху)

Оба типа не доступны для передачи между сервером и клиентом в Тонком клиенте. В клиентской процедуре вызываю серверную функцию которая должна вернуть XDTO объект, но получаю ошибку — Ошибка отображения типов: Отсутствует отображение для типа ‘ОбъектXDTO’. И в толстом клиенте ошибки нет. И функция-обработчик передает и принимает примитивные типы… При вызове с клиента тип будет приведен в самой функции к типу ТаблицаЗначений.

По серверной ходил. Ответ по запросу есть. Но при передаче в клиент путем Возврат, выходит ошибка. Версия 1с 8.3 Проблема: в документе у меня 2 реквизита: КонтрагентВалюты и НомерПаспорта КонтрагентВалюты — ссылочный тип на Справочник «КонтрагентыВалюты» НомерПаспорта — строка 10 знаков. Расчет производится в серверном методе ЗаполнитьТаблицуМесяцев(Год, тзМесяцыГода=Неопределено), где тзМесяцыГода имеет тип ДанныеФормыКоллекция при вызове с сервера.

Но это все очень нездоровый подход, рекомендую все таки пересмотреть архитектуру и передавать с сервера на клиент только необходимые данные, например — конечные результаты расчетов. И почему-то невозможна его передача на клиент, причем только в боевом режиме (в отладке все нормально). Я выставил в Конфигураторе запуск 1С Предприятия как Тонкий клиент. Да действительно нельзя передавать таблицу значений с сервера на клиент.

понедельник, 25 августа 2014 г.

Перед этим киврялся и пытался передать значения на другую форму. Начала выходить ошибка. Потом эту Другую форму удалил……но результат с ошибкой сохранился. Справочник.Справочник1.Форма.ФормаСписка.Форма(7)}: Ошибка при вызове метода контекста (СозданиеСписка) МойМассив = СозданиеСписка(); по причине: Ошибка передачи данных между клиентом и сервером. Выдает ошибку: «Недопустимое значение параметра (параметр номер ‘2’)». Хотя, если верить синтакс-помощнику, все вроде верно делаю…

Обычно желание передать непередаваемое сигнализирует об архитектурном промахе — что где обрабатывается, на сервере и на клиенте. Так, например, объект XDTO никак не может быть обработан на веб-клиенте. В этом примере используется глобальная фабрика конфигурации.

Я тоже рекомендую 1С все-таки организовать надежную и однозначную передачу объектов с клиента на сервер, раз уж работает она с так называемыми «объектами».

Объект — в структуру или массив? Не считая того, что там, куда будут передавать — не будет даже ссылок, которые есть здесь в объекте, — засунуть какой-либо объект в примитивы — это та еще задачка. Получается, что невозможно вернуть с Сервера на Клиент ТаблицуЗначений… Но почему в отладке всё работает???

В настройках запуска конфигурации в стартовом окне установлено запускать как Тонкий клиент). Всё ясно, на тонком клиенте ТаблицаЗначений существовать не может. Блин, а я то думал, что коли СписокЗначений существует на тонком клиенте, то и ТаблицаЗначений может существовать.

суббота, 25 февраля 2012 г.

Мутабельные переменные не передаются между серверным и клиентским контекстом. Попробуйте максимально перенести логику выполнения на сервер, а на клиенте получайте уже готовый результат.

То есть вы имеете ввиду, что можно использовать объект «Хранилище значений» для передачи таблицы значений? Не смотря на то, что на клиенте при нажатии кнопки Пересчитать в ЗаполнитьТаблицуМесяцев второй параметр не передается, но он все равно участвует в получении данных от сервера.

Думал потому что xdto схема грузится из макета, но после переноса xdto схему в конфигурацию результат остался таким же. Эти ли способы вернуть из серверной функции XDTOОбъект в клиентскую. Если же все таки очень хочется, то необходимо использовать свою собственную сериализацию. И вот пусть и сделает механизм их передачи. Вот. И что теперь делать? И в документации написано, что таблица значений сериализуется в/из XDTO. Значит, таблица должна нормально передаваться.

Чем мы можем вам сегодня помочь?

Доступность: Сервер, толстый клиент, внешнее соединение. И помнил же, что на тонком должно работать. Передача параметров происходит по ссылке, серверный код использует параметр тзМесяцыГода потом возвращает его измененного на клиента. Здесь ясно видно, что зa тем склоном трaвa более зеленaя и сочнaя. Пожaлуйстa! Есть три мaршрутa. По этому мaршруту, срaзу отвечaю, вaм идти нельзя: видите, здесь волки. Из остaвшихся двух этот короче, знaчит — вaм по нему. В кaчестве гонорaрa я зaбирaю одну овцу…

Этот подход будет работать, если при сериализации и десериализации используется одинаковая ФабрикаXDTO, знающая про типы создаваемых объектов. Вроде всюду пишут, что массив как раз можно передавать — не понимаю, в чем тогда ошибка.

Еще интересное:

Не находится по наименованию элемент справочника в управляемых формах

Я
   sidalexsandr

16.02.18 — 13:50

Пишу

&НаСервере

Функция СоздатьНовыйДокумент(ДокументРеал)

   К = Справочники.Контрагенты.НайтиПоНаименованию(«ИВАН ФЕДОРОВ»,,,);

КонецФункции

Выдает ошибку:отсутствует отображение для типа ComОбъект

   Darych

1 — 16.02.18 — 14:08

ты что-то недоговариваешь.. и вообще темы одна за одной. а инфу из тебя клещами нужно тащить… короче иди кури

   Рэйв

2 — 16.02.18 — 14:13

(0)А что там с COM соединением связано ты конечно, как настоящий партизан, решил утаить?

   Lexey_

3 — 16.02.18 — 14:19

(0) «ИВАН ФЕДОРОВ»,,,

а зачем 3 запятых поставил?

   Defender aka LINN

4 — 16.02.18 — 14:30

(0) Тут нужен для начала учебник русского языка.

Ну или внимательность, чтобы заметить, что ошибка с поиском по наименованию никак не связана.

   sidalexsandr

5 — 16.02.18 — 14:49

(1) Вот полный тескт

&НаСервере

Функция СоздатьНовыйДокумент(ДокументРеал)

    НовРеал = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

    //НовРеал.Номер = «М0000000159»;

    НовРеал.Дата = ТекущаяДата();

    //НовРеал.СписокВидовОперацийЗначение =

    К = Справочники.Контрагенты.НайтиПоНаименованию(«ИВАН ФЕДОРОВ»,,,);

      
    //НовРеал.Контрагент = К;

    
    НовРеал.Записать();

    Возврат НовРеал.ссылка;

    
КонецФункции

   sidalexsandr

6 — 16.02.18 — 14:53

Исходная процедура

&НаКлиенте

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

    
        
    Соединение = Новый COMОбъект(«V83.Application»);

    //База = Новый COMObject(«V82.Application»);

    //connection = Соединение.Connect(«File=»»C:1c-star-baza»»»+СокрЛП(«Старая»)+»»»;Usr=»»»+СокрЛП(«Репнин Александр»)+»»»;Pwd = «»» + СокрЛП(«9985») + «»»;»);

    //Для варианта клиент — сервер

    //СтрокаСоединения = «Srvr = «»192.168.90.113″»;Ref = «»Старая»»; Usr = Репнин Александр; Pwd = 9985″;

    //Для варианта файлового режима:

    СтрокаСоединения = «File = C:1c-star-baza; Usr = РепнинАлександр; Pwd = 9985»;

    //СтрокаСоединения = «192.168.90.113;Ref=~SQL Сервис-Центр~;usr=Репнин Александр;pwd=9985»;

    Попытка

        Соединение.Connect(СтрокаСоединения);

        Сообщить(«Подключился к базе»);

    Исключение

        Сообщение = Новый СообщениеПользователю;

        Сообщение.Текст = «Не удалось подключиться к базе» + ОписаниеОшибки(); Сообщение.Сообщить();

    КонецПопытки;

     //ДокументРеал = Подключение.Документы.РеализацияТоваровУслуг.Выбрать(‘20130101’, ‘20140110’ );

     //Подключение.Документы.РеализацияТоваровУслуг.СоздатьДокумент();

     Реал = Соединение.Документы.РеализацияТоваровУслуг;

     //Реал  = Подключение.Документы.РеализацияТоваровУслуг;

     ДокументРеал = Реал.Выбрать(‘20130101’, ‘20140110’ );

    ////ВыборкаДокументов = Документы.РеализацияТоваровУслуг.Выбрать(‘20130101’, КонецДня(ТекущаяДата()) );  09.01.2014

    //ВыборкаДокументов = Документы.РеализацияТоваровУслуг.Выбрать(‘20130101’, ‘20140110’ );

    Сообщить(«ТекДата = «+ТекущаяДата());

    Пока ДокументРеал.Следующий()=1 Цикл

         Сообщить(«Документ = «+ДокументРеал.Дата);

         МойНовыйДок = СоздатьНовыйДокумент(ДокументРеал);

    КонецЦикла;

    
КонецПроцедуры

   Defender aka LINN

7 — 16.02.18 — 14:54

(6) А для за каким органом ты передаешь COM-объект на сервер?

   sidalexsandr

8 — 16.02.18 — 14:59

(7) У меня управляемые формы. И я так понимаю создавать документы я могу только НаСервере. Вообще стоит задача перенисти документы РеализацияТоваровУслуг из УТ в БУХ.

   Defender aka LINN

9 — 16.02.18 — 15:01

(8) Я не спрашивал у тебя, что ты и где создаешь. Я спросил, зачем ты передаешь на сервер объект, которым даже не пользуешься?

Ну и если стоит задача перенести данные — КД в зубы и вперед.

   silent person

10 — 16.02.18 — 15:07

(9) он видимо выучил что с объектами БД работают только на сервере, вот и передает СОМ объект на сервер.

вот еще один такой же был http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=572492&print=1

(8) не надо ничего не куда передавать. работай с СОМ объектами на клиенте.

   Darych

11 — 16.02.18 — 15:09

«смешались в кучу кони, люди..»

   drcrasher

12 — 16.02.18 — 15:12

(9) дык уже лет пицот из ут в бп данные передаются «из коробки». даже кд в зубы не нужна

   sidalexsandr

13 — 16.02.18 — 15:46

(12) У меня Ут 10 и БП 3. В стандартных обработках Ут нет Бух 3

   drcrasher

14 — 16.02.18 — 15:51

(13) значит нужно обновиться до последней версии

   sidalexsandr

15 — 16.02.18 — 15:52

Как НаСервере получить доступ к документам которые были выбранны НаКлиенте через Оле?

   sidalexsandr

16 — 16.02.18 — 15:55

(14) Предыдущий программист 1с сказал, что конфигурация сильно измененная и поэтому типовыми средствами не перенести.

   Darych

17 — 16.02.18 — 15:58

(15) выбирай на сервере или передавай на сервер с клиента нужную инфу, а не выбранные по оле объекты

   sidalexsandr

18 — 16.02.18 — 16:11

Попробовал всю большую процедуру выполнять на сервере и убрал вызов из клиентской процедуры процедуры серверной.

В результате получилась одна большая серверная процедура, вот:

&НаСервере

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

    
        
    Соединение = Новый COMОбъект(«V83.Application»);

    //База = Новый COMObject(«V82.Application»);

    //connection = Соединение.Connect(«File=»»C:1c-star-baza»»»+СокрЛП(«Старая»)+»»»;Usr=»»»+СокрЛП(«Репнин Александр»)+»»»;Pwd = «»» + СокрЛП(«9985») + «»»;»);

    //Для варианта клиент — сервер

    //СтрокаСоединения = «Srvr = «»192.168.90.113″»;Ref = «»Старая»»; Usr = Репнин Александр; Pwd = 9985″;

    //Для варианта файлового режима:

    СтрокаСоединения = «File = C:1c-star-baza; Usr = РепнинАлександр; Pwd = 9985»;

    //СтрокаСоединения = «192.168.90.113;Ref=~SQL Сервис-Центр~;usr=Репнин Александр;pwd=9985»;

    Попытка

        Соединение.Connect(СтрокаСоединения);

        Сообщить(«Подключился к базе»);

    Исключение

        Сообщение = Новый СообщениеПользователю;

        Сообщение.Текст = «Не удалось подключиться к базе» + ОписаниеОшибки(); Сообщение.Сообщить();

    КонецПопытки;

     //ДокументРеал = Подключение.Документы.РеализацияТоваровУслуг.Выбрать(‘20130101’, ‘20140110’ );

     //Подключение.Документы.РеализацияТоваровУслуг.СоздатьДокумент();

     Реал = Соединение.Документы.РеализацияТоваровУслуг;

     //Реал  = Подключение.Документы.РеализацияТоваровУслуг;

     ДокументРеал = Реал.Выбрать(‘20130101’, ‘20140110’ );

    ////ВыборкаДокументов = Документы.РеализацияТоваровУслуг.Выбрать(‘20130101’, КонецДня(ТекущаяДата()) );  09.01.2014

    //ВыборкаДокументов = Документы.РеализацияТоваровУслуг.Выбрать(‘20130101’, ‘20140110’ );

    Сообщить(«ТекДата = «+ТекущаяДата());

    Пока ДокументРеал.Следующий()=1 Цикл

         Сообщить(«Документ = «+ДокументРеал.Дата);

        // МойНовыйДок = СоздатьНовыйДокумент(ДокументРеал.Ссылка);

        // МойНовыйДок = СоздатьНовыйДокумент();

        //*********************************************************************************

        НовРеал = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

    НовРеал.Дата = ТекущаяДата();

    Контр = ДокументРеал.Контрагент.Наименование;

    К = Справочники.Контрагенты.НайтиПоНаименованию(Контр);    

    
    НовРеал.Контрагент = К;

    Ф = Справочники.Организации.НайтиПоНаименованию(«Медресурс»);        

    НовРеал.Организация = Ф;

    НовРеал.Записать();

    КонецЦикла;

    
КонецПроцедуры

Вопросы:

1)почему на сервере не создается документ

2) какой функкцией пользоваться НаСерввере для отладки вместо функции Сообщить()?

   Darych

19 — 16.02.18 — 16:15

1) откуда знаешь, что не создается?

2) отладчиком

   Cyberhawk

20 — 16.02.18 — 16:16

(16) Что за предыдущий? Ты там в штате что ли?

   sidalexsandr

21 — 16.02.18 — 16:16

(20) Да в штате.

   sidalexsandr

22 — 16.02.18 — 16:18

Сделал

&НаСервере

Процедура ЗапуститьРаб()

     // Тест программы с Оле

КонецПроцедуры

&НаКлиенте

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

    ЗапуститьРаб();    

КонецПроцедуры    

Теперь работает

   Вафель

23 — 16.02.18 — 16:20

Типовые средстваа можно и доработать, что гораздо легче чем свой обмен писать

   sidalexsandr

24 — 16.02.18 — 16:39

(23) А что сложного написать. Подключился по Оле и цикл по документам и создание новых документов, а дальше в цикле заполнение у созданного документа табличной части

   hhhh

25 — 16.02.18 — 16:51

(24) ну там у документа 50 реквизитов. И 30 в табличной части, и какждый реквизит вы должны разобрать, как его присваивать, что туда писать. Представьте каког нереального объема заполнение вы должны замутить. А типовой он уже есть, можно его использовать.

   Cyberhawk

26 — 16.02.18 — 16:52

(24) Это когда один вид документа и правила обмена просты. А когда 500 видов справочников и 200 видов документов — зае*ешься по Оле писать ))

   sidalexsandr

27 — 16.02.18 — 17:01

(26) Согласен. У меня ограниченное число видов документов.

   hhhh

28 — 16.02.18 — 17:34

(27) ну даже если 10 видов документов, умножим на 80 реквизитов, получается 800 процедур вам надо написать минимум. Это если у вас на всё про всё меньше 2х месяцев, то вы подумайте.

  

Джинн

29 — 16.02.18 — 17:41

Дайте ТС яду. Пусть не мучается человек.

Автор Истребитель, 22 июл 2015, 17:48

0 Пользователей и 1 гость просматривают эту тему.

При попытке создать COM объект Excel.Application вылезает стандартная ошибка:
Ошибка получения объекта COM: -2147467262(0x80004002): No such interface support

Однако, если открыть диспетчер задач, то приложение excel.exe запускается!
Приложение excel x32, 1Cка тоже x32.
В списках классов (HKLMSoftwareClasses) класс Excel.Application присутствует.
Права на Distributed COM дал своему юзеру, перелогинился, не помогло, дал всем (Everyone), не помогло.
База файловая.


Попробуйте так


Попытка
ОбъектЭксель = ПолучитьCOMОбъект(СокрЛП(ФайлЗагрузки));//ФайлЗагрузки - путь к файлу. строка
Исключение
Сообщить("Неудачная попытка открытия файла:"+СокрЛП(ФайлЗагрузки));
Возврат;
КонецПопытки;


КомОбъектЗагрузки = ОбъектЭксель.WorkSheets(1);


Очень забавно. Если перед вызовом функции с параметрами (Путь,Excel.Application) вызвать её без указания Excel.Application то повторный вызов уже с указанием Excel.Application работает!

Т.е. так работает:

ПолучитьCOMОбъект(ИмяФайла,)
ПолучитьCOMОбъект(ИмяФайла,"Excel.Application")

Так не работает:

ПолучитьCOMОбъект(ИмяФайла,"Excel.Application")

В любом случае, в дальнейшем вылезает вообще непонятная ошибка:

{Форма.Форма.Форма(47)}: Ошибка при вызове метода контекста (ПрочитатьЛистExcel)
ПрочитатьЛистExcel(,ПолучитьCOMОбъект(ИмяФайла));
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'COMОбъект'


Поздравляю, походу вы открыли для себя впервые особенности управляемого приложения.


Ок, где мне почитать про эти «особенности» чтобы разобраться как выполнить такое простое задание, как чтение excel файла?


Путем проб и ошибок
Пробуйте «&НаСервере» всё это делать

Помогли — Скажи спасибо! Решил сам — поделись решением!
:)


Не сочтите за издевательство: http://v8.1c.ru/metod/faq2/
&НаКлиенте — это только форма, видимость,доступность, условное офомление и т.д.
&НаСервере — это работа с объектами. Добавить строки, заполнить объект и т.д.

С клиента можно вызывать сервер, наоборот — нельзя.

Все прочие особенности = интернет большой, уверен справитесь


Дааа. Простейшие вещи теперь хрен сделаешь. Почитал я это. Замечательно! Погуглил даже. Простейшая задача, неясно как решать.

Я хочу создать программно документ, заполнить его на основании данных из экселя, и открыть.

На клиенте я это сделать не могу, на клиенте «Документы» неопределена (нельзя создать документ). На сервере тоже не могу, нельзя открыть форму. На клиент нельзя передать ссылку на документ (когда пытаюсь сделать «Возврат Док», где Док это новый документ, вылезает ошибка передачи данных). Гугл «1с 8.3 передача документа с сервера на клиент» ничего не дал.

Что делать?


Остается сесть в углу и плакать.
На клиенте формируете структуры с простыми данными (строки, даты и т.д.) передаете на сервер. Создаете/ищите  документ на сервере и возвращаете ссылку на документ.


  1. При передаче результата запроса функции через Возврат в Клиент, выходит ошибка «Отсутствует отображение для типа ‘ВыборкаИзРезультатаЗапроса‘».

    При совершении таких же манипуляций с кодом, ошибок не возникало. На ошибки все проверил.
    Какой тут может быть подводный камень?

    На клиенте:

    Процедура РаскладкаПКОтПриИзменении(Элемент)
        СтрокаТабличнойЧасти = Элементы.Раскладка.ТекущиеДанные;
        ПКДо = СтрокаТабличнойЧасти.ПКОт + СтрокаТабличнойЧасти.Длина;
        Результат = РаскладкаТрубы.ПересеченияРаскладки(СтрокаТабличнойЧасти.ПКОт, ПКДо);
    КонецПроцедуры

    НаСервере

    Функция ПересеченияРаскладки(От,До)Экспорт
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ТрубаРаскладка.ПКОт,
        |    ТрубаРаскладка.ПКДо,
        |    ТрубаРаскладка.ТрубаНом,
        |    ТрубаРаскладка.ТрубаНом.Длина КАК Длина
        |ИЗ
        |    РегистрСведений.ТрубаРаскладка КАК ТрубаРаскладка
        |ГДЕ
        |    ТрубаРаскладка.ПКОт <= &ПКОт И ТрубаРаскладка.ПКДо >= &ПКОт
        |УПОРЯДОЧИТЬ ПО ТрубаРаскладка.ПКОт
        |";
                
        Запрос.УстановитьПараметр("ПКОт", От);
        Запрос.УстановитьПараметр("ПКДо", До);
        Результат = Запрос.Выполнить().Выбрать();
       
        Возврат Результат;
           
    КонецФункции

  2. alexburn

    Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    Почитайте про Выбрать() и про его область видимости — На клиенте, На сервере…

  3. А почему точно в таких же запросах из клиента в сервер все работает? Разница только в другой таблице.


  4. alexburn

    Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    Потому что:
    РезультатЗапроса (QueryResult)
    Выбрать (Select)
    Доступность:
    Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).

    ВыборкаИзРезультатаЗапроса (QueryResultSelection)
    Доступность:
    Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).

  5. Одинаковая ошибка как из Тонкого клиента, так из Толстого.


  6. alexburn

    Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    А где вы параметры запросу задаете ? Вернее их значения ?

    — Объединение сообщений, 2 июн 2016

    А, увидел

    — Объединение сообщений, 2 июн 2016

    Отладчиком проходились по серверной функции ? Попадает туда ?

  7. По серверной ходил. Ответ по запросу есть. Но при передаче в клиент путем Возврат, выходит ошибка.
    Перед этим киврялся и пытался передать значения на другую форму. Начала выходить ошибка. Потом эту Другую форму удалил……но результат с ошибкой сохранился.
    Могло это как-то повлиять?


  8. alexburn

    Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    Вроде как результат запроса на клиента нельзя передать, обрабатывайте на сервере все.


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

16.01.202013.05.2023Ошибки

Данная ошибка возникает в тот момент, когда Вы пытаетесь вызвать серверный метод и передаете ему в качестве параметра управляемую форму.

Рассмотрим следующий модуль управляемой формы:

&НаСервере
Функция ТестВызоваСервера(Форма)

	Форма.ТолькоПросмотр = Истина;

КонецФункции // ТестВызоваСервера()

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
	
	//попытка передачи переменной локального контекста на сервер
	ТестВызоваСервера(ЭтаФорма);
	
КонецПроцедуры

Дело в том, что в контексте модуля управляемой формы переменная ЭтаФорма доступна всегда (как на клиенте, так и на сервере) и дополнительно ее передавать не требуется (если только вы не вызываете процедуру или функцию, перед которой указана директива &НаСервереБезКонтекста). Правильным будет следующий код:

&НаСервере
Функция ТестВызоваСервера()

	ЭтаФорма.ТолькоПросмотр = Истина;	

КонецФункции // ТестВызоваСервера()

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
	
	//вызов контекстной серверной функции
	ТестВызоваСервера();
	
КонецПроцедуры

Аналогичное замечание относится к серверным вызовам. Вы не можете передать содержимое переменной ЭтаФорма на сервер. Вы можете только запросить необходимую информацию на сервере и изменить форму в контексте клиента, либо реализовать это через серверный метод самой формы. Например, такой код работать не будет:

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
	
	//попытка передачи переменной локального контекста на сервер
	ОбщийМодульСервер.Тест(ЭтаФорма);
	
КонецПроцедуры

Подумайте сами, чем можно заменить такой вызов

Поделиться страницей в соц.сетях

Метки: Метки Управляемые формы

  • Ошибка отображения пространства имен отсутствует отображение для префикса
  • Ошибка отображения оверлейной программы steam heroes and generals
  • Ошибка отношения к нам жизненный пример
  • Ошибка отношение уже существует postgresql
  • Ошибка открытия устройства записи audacity 9996