Имя: Пароль:
1C
1С v8
Ошибка преобразования данных XDTO: Текст: false
,
0 XiPyPg2012
 
18.10.13
17:14
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Текст: false

Листинг:
&НаСервере
Функция ВыполнитьПроверкуСПоступлениемТоваров(ЭтотОбъект,ЗадатьВопрос)

    //ЗадатьВопрос = "Не задавать";
    ЭтотОбъект = ЭтотОбъект.ПолучитьОбъект();
    если ТипЗнч(этотОбъект.Распоряжение) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") тогда
    ТоварыПО = ЭтотОбъект.Товары.Выгрузить();
    запрос = новый запрос;
    запрос.Текст = "ВЫБРАТЬ
                   |    ТоварыПО.Номенклатура,
                   |    ТоварыПО.Количество,
                   |    ТоварыПО.Характеристика
                   |ПОМЕСТИТЬ ТоварыПО
                   |ИЗ
                   |    &ТоварыПО КАК ТоварыПО
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ТоварыПО.Номенклатура,
                   |    СУММА(ТоварыПО.Количество) КАК Количество,
                   |    ТоварыПО.Характеристика,
                   |    СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество1,
                   |    ЕСТЬNULL(ПоступлениеТоваровУслугТовары.Номенклатура, ЛОЖЬ) КАК Номенклатура1
                   |ИЗ
                   |    ТоварыПО КАК ТоварыПО
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                   |        ПО (ПоступлениеТоваровУслугТовары.Номенклатура = ТоварыПО.Номенклатура)
                   |            И (ПоступлениеТоваровУслугТовары.Характеристика = ТоварыПО.Характеристика)
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ТоварыПО.Номенклатура,
                   |    ТоварыПО.Характеристика,
                   |    ЕСТЬNULL(ПоступлениеТоваровУслугТовары.Номенклатура, ЛОЖЬ)";
    
    //Запрос.УстановитьПараметр ("Ссылка",ЭтотОбъект.Ссылка);
    Запрос.УстановитьПараметр ("ТоварыПО",ТоварыПО);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Пока выборка.следующий() Цикл
    
        Если выборка.Номенклатура1 = ложь Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "В приходном ордере присутствует номенклатура " + выборка.номенклатура + " которая отсутствует в поступлении.";
            Сообщение.Сообщить();
            ЗадатьВопрос = истина;
        иначеесли выборка.Количество > выборка.Количество1 тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "В приходном ордере у номенклатуры " + выборка.Количество + " а в поступление " + выборка.количество1;
            Сообщение.Сообщить();
            ЗадатьВопрос = истина;
        КонецЕсли;
    
    КонецЦикла;
    КонецЕсли;
Возврат ЗадатьВопрос;

КонецФункции // ВыполнитьПроверкуСПоступлениемТоваров()

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    //<< Горбенко В.В. 18.10.2013
    ЗадатьВопрос = Ложь;
    задатьВопрос = ВыполнитьПроверкуСПоступлениемТоваров(Объект.Ссылка, ЗадатьВопрос);    
    Если задатьВопрос = "Задать вопрос" Тогда
         Режим = РежимДиалогаВопрос.ДаНет;
         Текст = "Желаете все равно провести документ?";
         Ответ = Вопрос(НСтр(Текст), Режим, 0);
         Если Ответ = КодВозвратаДиалога.Нет Тогда
                       Отказ = истина;
         иначе
                     Отказ = Ложь;
         КонецЕсли;
    КонецЕсли;
    //>> Горбенко В.В.
КонецПроцедуры


Как с этим бороться ?
1 H A D G E H O G s
 
18.10.13
17:19
Перепиши
задатьВопрос = ВыполнитьПроверкуСПоступлениемТоваров(Объект.Ссылка, ЗадатьВопрос);
на
задатьВопрос = ВыполнитьПроверкуСПоступлениемТоваров(Объект.Ссылка);
2 H A D G E H O G s
 
18.10.13
17:20
Горбенко В.В. , вы пишите странный код.
3 XiPyPg2012
 
18.10.13
17:20
(1) тоже самое, первоначально так и было
4 XiPyPg2012
 
18.10.13
17:21
и в чем же его странность?
5 XiPyPg2012
 
18.10.13
17:22
(2) первоначально проверка была в модуле документа, в связи с необходимостью сделать вопрос, пришлось перенести в модуль документа
6 H A D G E H O G s
 
18.10.13
17:24
Вот здесь кусочек копрокота
ЭтотОбъект = ЭтотОбъект.ПолучитьОбъект();

(5) Прекрасно. Великолепные УФ заставляют чесать тыкву и выгребать авгиевые конюшни. Как и предсказывалось.
7 XiPyPg2012
 
18.10.13
17:29
хоть просто пытаешь передать параметр истина или ложь чтото типа -

Если задатьВопрос = истина Тогда

       Возврат Истина;
   иначе
       возврат ложь;

КонецЕсли;

таже ерунда, вобще не пойму что случилось
8 H A D G E H O G s
 
18.10.13
17:35
(7) Давай я попробую. Даже интересно.
9 mrDSide
 
18.10.13
21:36
(2) +
10 mrDSide
 
18.10.13
21:37
смущает "ЭтотОбъект". это используется в модуле объекта. Если в форме - должно быть "Объект".
11 mrDSide
 
18.10.13
21:39
т.е. если у Вас все одном общем модуле (и директивы "&НаСервере" и "&НаКлиенте"), то работать точно не будет.
выносите в отдельные модули с вызовом сервера, чтоб код выполнялся на клиенте... как-то так.
12 XiPyPg2012
 
21.10.13
08:27
у меня в модуле формы, и на УФ все запросы выполняются ток в процедурах и функциях на сервере...Так что в функция которая выполняется на сервере, передается ссылка на объект а там по ссылке он получается если есть такая необходимость, ну и соответственно потом возвращаешь что тебе нужно.

А щас что-то я глючу и не могу понять в чем косяк.
13 1Сергей
 
21.10.13
08:37
попробуй

Функция ВыполнитьПроверкуСПоступлениемТоваров(парЭтотОбъект,ЗадатьВопрос)

ЭтотОбъект = парЭтотОбъект.ПолучитьОбъект();