|
8.2. Ошибка при вызове процедуры общего модуля. | ☑ | ||
---|---|---|---|---|
0
Pro-tone
28.07.11
✎
09:30
|
Пытаюсь мутировать на 8.2.14. Решил сделать задачу по УТ на упр. формах.
Ставлю отбор на форме при открытии. &НаКлиенте Процедура ПриОткрытии(Отказ) //Вставить содержимое обработчика ВыбНоменклатураСсылка = Серверный.ПолучитьВсеДокументы("РасходнаяНакладная"); Список.Параметры.УстановитьЗначениеПараметра("ВыбНоменклатураСсылка",ВыбНоменклатураСсылка); КонецПроцедуры "Серверный" - общий модуль. Стоят галки "Сервер" и "Вызов сервера". При открытии заданной формы вываливает: {Документ.РасходнаяНакладная.Форма.ФормаСписка.Форма(20)}: Ошибка при вызове метода контекста (ПолучитьВсеДокументы) ВыбНоменклатураСсылка = Серверный.ПолучитьВсеДокументы("РасходнаяНакладная"); по причине: Ошибка при вызове серверного метода. по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType по причине: Ошибка отображения типов: Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable' Как лечить ? |
|||
1
Stepa86
28.07.11
✎
09:32
|
Перенеси этот код в ПриСозданииНаСервере(
Клиентские методы формы могут вызывать только методы этой формы |
|||
2
Ненавижу 1С
гуру
28.07.11
✎
09:33
|
на форме из клиентского метода нельзя напрямую вызывать серверные объекты, надо передать управление в серверный метод формы и оттуда все делать
почему так они решили? политика партии ща куча набежит и скажет, что это правильно )) |
|||
3
Stepa86
28.07.11
✎
09:36
|
(2) еси чо, меня тоже выбешивает писать методы СделатьЧтоТо и СделатьЧтоТо_Сервер( только изза того, что напрямую сервер нельзя позвать из обработчика команды
|
|||
4
Pro-tone
28.07.11
✎
09:37
|
(1) сделал так как ты сказал, убрал из ПриОткрытии():
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //Вставить содержимое обработчика ВыбНоменклатураСсылка = Серверный.ПолучитьВсеДокументы("РасходнаяНакладная"); Список.Параметры.УстановитьЗначениеПараметра("ВыбНоменклатураСсылка",ВыбНоменклатураСсылка); КонецПроцедуры та же самая ошибка (( |
|||
5
Ненавижу 1С
гуру
28.07.11
✎
09:38
|
(3) ну значит есть братья по разуму ))
|
|||
6
Stepa86
28.07.11
✎
09:39
|
(4) ВыбНоменклатураСсылка не список значений случаем?
|
|||
7
Pro-tone
28.07.11
✎
09:41
|
(6) таблица значений
|
|||
8
Pro-tone
28.07.11
✎
09:43
|
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине: Ошибка преобразования данных XDTO: НачалоСвойства: v Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType по причине: Ошибка преобразования данных XDTO: НачалоСвойства: QueryParam Форма: Элемент Тип: {http://v8.1c.ru/8.1/data-composition-system/core}ParameterValue по причине: Ошибка преобразования данных XDTO: НачалоСвойства: value Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType по причине: Ошибка отображения типов: Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable' |
|||
9
Stepa86
28.07.11
✎
09:45
|
ты в дин. список таблицу суешь??? я бы тоже огорчился
|
|||
10
Defender aka LINN
28.07.11
✎
09:46
|
(1)(2) Чего курили?
(7) Молодец. |
|||
11
Pro-tone
28.07.11
✎
09:47
|
(9) ну да, отбор запросом дин списка
ВЫБРАТЬ ДокументРасходнаяНакладная.Ссылка, ДокументРасходнаяНакладная.ПометкаУдаления, ДокументРасходнаяНакладная.Номер, ДокументРасходнаяНакладная.Дата, ДокументРасходнаяНакладная.Проведен, ДокументРасходнаяНакладная.Контрагент, ДокументРасходнаяНакладная.Проект, ДокументРасходнаяНакладная.Товары.( Ссылка, НомерСтроки, Номенклатура ), ДокументРасходнаяНакладная.МоментВремени ИЗ Документ.РасходнаяНакладная КАК ДокументРасходнаяНакладная ГДЕ ДокументРасходнаяНакладная.Товары.Ссылка В(&ВыбНоменклатураСсылка) |
|||
12
Pro-tone
28.07.11
✎
09:47
|
(9)(10) а как правильно ?
|
|||
13
Stepa86
28.07.11
✎
09:48
|
(10) свое надо иметь...
(11) массивом передавай, и есть подозрение, что в ТЗ лежит что то мутабельное |
|||
14
Sarmen
28.07.11
✎
09:48
|
Список значений туда передавай, а не таблицу значений.
|
|||
15
Sarmen
28.07.11
✎
09:49
|
Да ещё табличную часть зачем выбираешь в запросе?
|
|||
16
Stepa86
28.07.11
✎
09:49
|
(14) периодически вылезает гемор со списком, лично я его между методами не передаю
|
|||
17
Sarmen
28.07.11
✎
09:50
|
Делай запрос по табличной части, а не по таблице расходной накладной.
|
|||
18
Defender aka LINN
28.07.11
✎
09:51
|
(13) Не, у тебя лучше. Это, ять, ТаблицаЗначений! Ты знаешь такой тип в тонком клиенте? Я - нет.
|
|||
19
Pro-tone
28.07.11
✎
09:51
|
(13) ппц, ок ща попробую. Что означает "мутабельное" ?
(15) это как бы сам 1 с софрмировал такой запрос, я только условие поставил в запрос |
|||
20
Sarmen
28.07.11
✎
09:54
|
ВЫБРАТЬ
Товары.Ссылка.Ссылка, Товары.Ссылка.Номер, Товары.Ссылка.Дата, Товары.Ссылка.ПометкаУдаления, Товары.Ссылка.Проведен, Товары.Ссылка.СуммаПоДокументу, Товары.Ссылка.МоментВремени ИЗ Документ.РасходнаяНакладная.Товары КАК Товары ГДЕ Товары.Номенклатура В (&СписокЗначений) примерно так ... |
|||
21
Stepa86
28.07.11
✎
09:54
|
(19) мутабельное, грубо говоря это то, что нельзя с сервера на клиент передавать и обратно... подробнее в гугле
ТЧ порежь лучше, и для таких отборов лучше критерий отбора заюзать |
|||
22
Pro-tone
28.07.11
✎
09:55
|
(13) передал массивом стало работать ! спасибо ! Где об этом написано что таблица значений недоступна в запросе по динсписку формы клиента ?
|
|||
23
Pro-tone
28.07.11
✎
09:57
|
(21) ща попробую через критерий отбора
|
|||
24
Ненавижу 1С
гуру
28.07.11
✎
10:00
|
(10) почему?
|
|||
25
BigRoma
28.07.11
✎
10:00
|
Между клиентом и сервером нельзя передавать таблицу значений.
Когда делаете Список.Параметры.УстановитьЗначениеПараметра("ВыбНоменклатураСсылка",ТаблицаЗначений); метод развалится, но не сразу, а при передаче формы на клиента. |
|||
26
Mort
28.07.11
✎
10:04
|
(24) Вот транслятор свой напишешь, сразу догадаешься.
|
|||
27
BigRoma
28.07.11
✎
10:06
|
(26) вообще он прав, нельзя на тонком клиенте работать с северными объектами. Например, ДокументОбъект на клиенте не существует, таблица значений на тонком клиенте не существует.
|
|||
28
Ненавижу 1С
гуру
28.07.11
✎
10:07
|
(27) так и не надо, достаточно в тонком клиенте хранить только ссылки на них, а пусть они живут на далеком сервере
|
|||
29
H A D G E H O G s
28.07.11
✎
10:11
|
(28) Так так и сделано
|
|||
30
BigRoma
28.07.11
✎
10:12
|
ну... не обязательно ссылки, часть данных хранится в сериализуемых типах самой формы (данныеформыструктура, данныеформыколлеция).
|
|||
31
Mort
28.07.11
✎
10:12
|
(28) Ссылки и так есть. ТЗ на формах тоже нормально хранятся в коллециях. Чо не нравится-то? То что нельзя на клиенте Ссылка.реквизит написать? Дай такую возможность, сейчас бы 1Сники такого г0внокода написали, все бы от УФ крутили носом.
|
|||
32
Ненавижу 1С
гуру
28.07.11
✎
10:14
|
ладно, пошел писать свою платформу
|
|||
33
Mort
28.07.11
✎
10:15
|
(32) Блэк джек не забудь впилить. И шлюх.
|
|||
34
Ненавижу 1С
гуру
28.07.11
✎
10:17
|
(33) главное Неопределено выпилить, оставить только NULL
|
|||
35
Pro-tone
28.07.11
✎
10:17
|
Как я понимаю через критерий отбора (опять же в серверном модуле через вызов сервера с уф) будет примерно так:
Функция ОтборСерверная() МассивСсылок = КритерииОтбора.ПоНоменклатуре.Найти(ВыбНоменклатура); Для Каждого Ссылка Из МассивСсылок Цикл Сообщить(Ссылка); КонецЦикла; Возврат МассивСсылок; КонецФункции |
|||
36
H A D G E H O G s
28.07.11
✎
10:17
|
(32) good speed
|
|||
37
Pro-tone
28.07.11
✎
10:17
|
Функция ОтборСерверная(ВыбНоменклатура) конечно же
|
|||
38
Stepa86
28.07.11
✎
10:19
|
(35) вообще то я предлагал прям в запросе обращение к критерию сделать и передавать туда номенклатуру... тока не уверен, что в дин. списке это нормально выглядеть будет
|
|||
39
Pro-tone
28.07.11
✎
10:23
|
(38)
запрос к дин.списку ВЫБРАТЬ ДокументРасходнаяНакладная.Ссылка, ДокументРасходнаяНакладная.ПометкаУдаления, ДокументРасходнаяНакладная.Номер, ДокументРасходнаяНакладная.Дата, ДокументРасходнаяНакладная.Проведен, ДокументРасходнаяНакладная.Контрагент, ДокументРасходнаяНакладная.Проект, ДокументРасходнаяНакладная.Товары.( Ссылка, НомерСтроки, Номенклатура ), ДокументРасходнаяНакладная.МоментВремени ИЗ Документ.РасходнаяНакладная КАК ДокументРасходнаяНакладная ГДЕ ДокументРасходнаяНакладная.Товары.Номенклатура В(&ВыбНоменклатураСсылка) И после еще (по нажатию на кнопку ОтборПоНоменклатуре на форме списка) &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) //Вставить содержимое обработчика Список.Параметры.УстановитьЗначениеПараметра("ВыбНоменклатураСсылка",КритерииОтбора.ПоНоменклатуре.Найти(ВыбНоменклатура)); КонецПроцедуры |
|||
40
Mort
28.07.11
✎
10:23
|
Если подходить к коду грамотно, практически никогда не возникает конструкций СделатьЧтоТо и СделатьЧтоТо_Сервер
|
|||
41
Pro-tone
28.07.11
✎
10:25
|
(38) фиг там, критерий отбора не живет на клиенте (
все равно опять тот же гемор к его получению через серверный модуль |
|||
42
Stepa86
28.07.11
✎
10:31
|
(40) если у меня есть метод в серверном модуле, который делает то, что мне надо, как мне "Грамотно" написать команду, которая его вызывает?
|
|||
43
BigRoma
28.07.11
✎
10:33
|
(42) ВызватьСерверныйМетод(Параметры)
а ещё лучше, по возможности ВызватьСерверныйМетодБезКонтекста(Параметры) |
|||
44
Stepa86
28.07.11
✎
10:34
|
(43) а вот (40) говорит, что так не грамотно
|
|||
45
BigRoma
28.07.11
✎
10:36
|
(44) честно говоря не понял о чем (4) говорил
|
|||
46
BigRoma
28.07.11
✎
10:36
|
(44) честно говоря не понял о чем (40) говорил
|
|||
47
Mort
28.07.11
✎
10:39
|
(44) Да, так не грамотно. Имя функции должно отражать ЧТО она делает, а не где.
|
|||
48
Mort
28.07.11
✎
10:39
|
С "ГДЕ" прекрасно справляются директивы.
|
|||
49
Stepa86
28.07.11
✎
10:41
|
есть серверный модуль Серверный и там процедура СоздатьПодчиненныйДокумент(пОсновнойДокумент)
Добавляя кнопку на форму хочу написать: &НаКлиенте Процедура СоздатьПодчиненныйДокумент() Если Не Объект.Ссылка.Пустая() Тогда Серверный.СоздатьПодчиненныйДокумент(Объект.Ссылка); КонецЕсли; КонецПроцедуры а приходится писать так: &НаКлиенте Процедура СоздатьПодчиненныйДокумент() СоздатьПодчиненныйДокумент_Сервер(Объект.Ссылка); КонецПроцедуры &НаСервере Процедура СоздатьПодчиненныйДокумент_Сервер() Если Не Объект.Ссылка.Пустая() Тогда Серверный.СоздатьПодчиненныйДокумент(Объект.Ссылка); КонецЕсли; КонецПроцедуры если я правильно понял (40), то он утверждает, что при грамотной разработке проксирующий метод не нужен... вот мне и интересно как тут грамотно? |
|||
50
Mort
28.07.11
✎
10:43
|
(49) Да, грамотно поставить галку "Вызов сервера" на модуль.
|
|||
51
Mort
28.07.11
✎
10:44
|
А ссылку на пустое значение проверять, например, методом ЗначениеЗаполнено()
|
|||
52
Stepa86
28.07.11
✎
10:44
|
+(49) Условия можно избежать, если сделать командой на объекте, а не на форме, тем более что в тонком клиенте она отвалится с ошибкой
|
|||
53
BigRoma
28.07.11
✎
10:44
|
(49) а вот это уже странно, я всегда писал по первому варианту. Можете объяснить, почему он не работает? Казалось бы Объект.Ссылка имеет ссылочный тип и нормально сериализуется.
|
|||
54
Stepa86
28.07.11
✎
10:45
|
(50) у кого? клиентские методы не видят экспортные серверные методы ни с галочкой ни без
|
|||
55
Stepa86
28.07.11
✎
10:46
|
(53) Тонкий и веб не видят модуля Серверный
|
|||
56
Defender aka LINN
28.07.11
✎
10:46
|
(49) а потому что не хочешь ты думать.
|
|||
57
Defender aka LINN
28.07.11
✎
10:47
|
(55) А галку "вызов сервера"-то ты поставил?
|
|||
58
Pro-tone
28.07.11
✎
10:49
|
(34) я вижу у тебя особая страсть к 2м типам "Неопределено" и "Null" =))
|
|||
59
Stepa86
28.07.11
✎
10:49
|
(56) да даже если без условия, то все равно падает (падало во всяком случае), условие тут не главное
(57) да |
|||
60
BigRoma
28.07.11
✎
10:51
|
(59) а процедуру экспортной сделал? )
|
|||
61
Ненавижу 1С
гуру
28.07.11
✎
11:01
|
(58) и пустым ссылкам ))
|
|||
62
BigRoma
28.07.11
✎
11:03
|
(61) кста вопрос порой задают на собеседованиях чем отличается NULL от Неопределено.
|
|||
63
Defender aka LINN
28.07.11
✎
11:08
|
(59) У меня не падает. ЧЯДНТ?
|
|||
64
Stepa86
28.07.11
✎
11:10
|
(63) тонкий клиент клиент-сервера? и какая версия платформы
|
|||
65
Pro-tone
28.07.11
✎
11:15
|
(61) и неизвестному объекту еще тогда ))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |