Имя: Пароль:
1C
1С v8
УПП редакция 1.3 (1.3.43.2). Web-клиент.
0 sol
 
30.10.13
12:36
Платформа - 1С:Предприятие 8.2 (8.2.19.68).
База - УПП редакция 1.3 (1.3.43.2). SQL-серверный вариант. Прилично дописанная.



Уважаемые форумчане!
Для пользователей Web-клиента написал поиск в форме справочника элементов другого справочника.
Писал в отладчике под тонким клиентом. Под тонким клиентом все работает нормально. Но, как только стал работать на Web-клиенте, то стали возникать странные ошибки. Система выдает сообщение:


Неизвестная ошибка.: gkQ.toUpperCase is not a function



Сейчас приведу текст кода (я тестирую, поэтому не удивляйтесь лишним Сообщить() и Дом = "10";):

&НаСервере
Процедура ОтборПлощадок2(BUILD_ID, Управление, Улица, Дом, Литер)
    Сообщить("BUILD_ID = "+Строка(BUILD_ID));
    Сообщить("Управление = "+Строка(Управление));
    Сообщить("Улица = "+Строка(Улица));
    Сообщить("Дом = "+Дом);
    Сообщить("Литер = "+Литер);
    
    BUILD_ID = 74370;
    Управление = Справочники.Подразделения.НайтиПоНаименованию("Управление №1");
    Улица = Справочники.пг_Улицы.НайтиПоНаименованию("Кубинская");
    Дом = "10";
    Литер = "А";
    Запрос =  Новый Запрос("ВЫБРАТЬ
                           |    пг_СвязиСOracle.ВладелецЗаписи КАК Ссылка
                           |ИЗ
                           |    РегистрСведений.пг_СвязиСOracle КАК пг_СвязиСOracle
                           |ГДЕ
                           |    пг_СвязиСOracle.ID = &ID
                           |    И ТИПЗНАЧЕНИЯ(пг_СвязиСOracle.ВладелецЗаписи) = ТИП(Справочник.лг_Площадки)
                           |    И пг_СвязиСOracle.ВладелецЗаписи.Владелец = &Владелец
                           |    И пг_СвязиСOracle.ВладелецЗаписи.ПометкаУдаления = ЛОЖЬ
                           |    И пг_СвязиСOracle.ВладелецЗаписи.Улица = &Улица
                           |    И пг_СвязиСOracle.ВладелецЗаписи.Дом = &Дом
                           |    И пг_СвязиСOracle.ВладелецЗаписи.Литер = &Литер");
    Запрос.УстановитьПараметр("ID",BUILD_ID);
    Запрос.УстановитьПараметр("Владелец",Управление);
    Запрос.УстановитьПараметр("Улица",Улица);
    Запрос.УстановитьПараметр("Дом",Дом);
    Запрос.УстановитьПараметр("Литер",Литер);
    ТЗ = Запрос.Выполнить().Выгрузить();
    МассивПлощадок = ТЗ.ВыгрузитьКолонку("Ссылка");

Сообщить("1");
    
    Список.Отбор.Элементы.Очистить();
Сообщить("2");
    ЭлементОтбора1 = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора1.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
    ЭлементОтбора1.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементОтбора1.Использование = Истина;
    ЭлементОтбора1.РежимОтображения =    РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
    ЭлементОтбора1.ПравоеЗначение = МассивПлощадок;
Сообщить("3");
    
    Список.Порядок.Элементы.Очистить();
Сообщить("4");
    ЭлементПорядка1 = Список.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
    ЭлементПорядка1.Поле = Новый ПолеКомпоновкиДанных("Наименование");
    ЭлементПорядка1.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
    ЭлементПорядка1.Использование = Истина;
Сообщить("5 при ошибке печатается");
    
КонецПроцедуры

&НаКлиенте
Процедура ТабличноеПолеАдресовПриАктивизацииСтроки(Элемент)
    Если Строка(Элемент.ТекущиеДанные) <> "" Тогда
        //ОтборПлощадок(Элемент.ТекущиеДанные.BUILD_ID, Элемент.ТекущиеДанные.Управление,Элемент.ТекущиеДанные.Улица,Элемент.ТекущиеДанные.Дом,Элемент.ТекущиеДанные.Литер);
        ОтборПлощадок2(Элемент.ТекущиеДанные.BUILD_ID, Элемент.ТекущиеДанные.Управление,Элемент.ТекущиеДанные.Улица,Элемент.ТекущиеДанные.Дом,Элемент.ТекущиеДанные.Литер);
Сообщить("6 при ошибке уже не печатается");
        //ОтборПлощадок(Элемент.ТекущиеДанные);
    КонецЕсли;
Сообщить("7");
КонецПроцедуры


Так вот на тонком клиенте это будет всегда работать. На ВЭБ-клиенте, указанный выше, фрагмент работает.
Но стоит мне закомментировать одну из строк:
1.    BUILD_ID = 74370;
2.    Управление = Справочники.Подразделения.НайтиПоНаименованию("Управление №1");
3.    Улица = Справочники.пг_Улицы.НайтиПоНаименованию("Кубинская");
4.    Дом = "10";
5.    Литер = "А";

И система в ВЭБ-клиенте тут же будет выдавать ошибку:



Неизвестная ошибка.: gkQ.toUpperCase is not a function



Хотя, я проверял в отладчике – данные те же самые. Когда возникает ошибка, то сообщение "6 при ошибке уже не печатается" не печатается, а сообщение "5 при ошибке печатается".

У кого-нибудь возникало что-нибудь подобное?
1 sikuda
 
30.10.13
12:45
Да возникали. Тонкий клиент 1С отлаживает лучше.
2 sol
 
30.10.13
13:10
(1) Но работать пользователи будут в ВЭБ-клиенте. Как же решается подобная проблема?
3 sikuda
 
30.10.13
13:21
Береш бубен, взываешь к 1С. Неистово начинаешь заклинать великую и могучую. Совершаешь мистический обряд...

Или долго комментариями пытаешься выявить что-же приводит к ошибке. Пытаясь упростить код до минимума.
Потом с нами поделись результатами.

Может быть для тебя будет сегодня открытием, но тонкий клиент и вэб клиент иногда по разному работают...
4 sol
 
30.10.13
13:23
(3) Спасибо за моральную поддержку, а то думал - шизик.
5 sikuda
 
30.10.13
13:27
6 H A D G E H O G s
 
30.10.13
13:31
(5) А зачем?
7 sol
 
30.10.13
13:32
(5) У Вас более сложный случай.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший