Имя: Пароль:
1C
1С v8
Странное поведение после вызова функции
0 alexshape
 
13.07.17
15:09
Привет Всем. Тут такая пргоблема, есть строка в коде:
ЧислоПослеОтбора = УстановитьОтборНаТаблицу(Текст,Совпадения,Объект.ДатаРождения);

где я вызываю функцию:
Совпадения - это ДанныеФормы коллекция. Остальное вроде понятно. Иток при возврате мне выдает такую ошибку:
{Справочник.Контрагенты.Форма.ФормаДобавленияФизЛица.Форма(49)}: Ошибка при установке значения атрибута контекста (Совпадения)
            ЧислоПослеОтбора = УстановитьОтборНаТаблицу(Текст,Совпадения, Объект.ДатаРождения);
по причине:
Нельзя изменять поле, содержащее объект данных формы
Я же ничего не изменяю в данных формы Совпадения

Функцию УстановитьОтборНаТаблицу(Наименование,Совпадения, ДатаРождения)
    
    Запрос = Новый Запрос;
    ПоследнийСимвол = Прав(Наименование,1);
    
    Пока ПоследнийСимвол = " " Цикл
        ДлиннаСтроки = СтрДлина(Наименование);    
        Наименование = Лев(Наименование,ДлиннаСтроки-1);
        ПоследнийСимвол = Прав(Наименование,1);
    КонецЦикла;
    
    
    Если  ДатаРождения = Дата(0001,01,01) Тогда
        
        Запрос.Текст =  "ВЫБРАТЬ
        |    Совпадения.Наименование,
        |    Совпадения.ДатаРождения
        |ИЗ
        |    &Совпадения КАК Совпадения
        |ГДЕ
        |    Совпадения.Наименование Подобно &Наименование";
    Иначе
        Запрос.Текст =
        "ВЫБРАТЬ
        |    Совпадения.Наименование,
        |    Совпадения.ДатаРождения
        |ПОМЕСТИТЬ СвопаденияВТ
        |ИЗ
        |    &Совпадения КАК Совпадения
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    СвопаденияВТ.Наименование,
        |    СвопаденияВТ.ДатаРождения
        |ИЗ
        |    СвопаденияВТ КАК СвопаденияВТ
        |ГДЕ
        |    СвопаденияВТ.Наименование = &Наименование
        |    И СвопаденияВТ.ДатаРождения = &ДатаРождения";
        
        Запрос.УстановитьПараметр("ДатаРождения", ДатаРождения);
        
    КонецЕсли;
    Запрос.УстановитьПараметр("Совпадения", Совпадения.Выгрузить());
    Запрос.УстановитьПараметр("Наименование", Наименование);
    
    Результат = Запрос.Выполнить();
    Таблица = Результат.Выгрузить();
    
    Возврат Таблица.Количество();
    
КонецФункции
1 Ёпрст
 
13.07.17
15:16
передавай Объект.Совпадения.Выгрузить() в свою процу
2 alexshape
 
13.07.17
15:21
(1) Так Совпадения это реквизит формы
3 Ёпрст
 
13.07.17
15:25
тогда передавай Совпадения.Выгрузить()
4 alexshape
 
13.07.17
15:28
Вызываю с клиента, не получается
5 Вафель
 
13.07.17
15:30
делай (Знач Совпадения)
6 alexshape
 
13.07.17
15:34
(5) не совсем понял
7 НЕА123
 
13.07.17
15:38
(0) В данном случае без сервера на клиент НайтиСтроки()
8 Имитация работы
 
13.07.17
16:07
(6) Передавай параметр не по ссылке, а по значению. ТАк понятней?
9 alexshape
 
14.07.17
08:31
(8) Теперь понял, получается. Так я же не совершаю никаких манипуляций с этой таблицей значения: "Совпадения" в процедуре куда её передаю. Единственное Это: Совпадения.Выгрузить(). Почему же ругается что я изменил эти данные?
10 Имитация работы
 
14.07.17
08:40
(9) Достаточно того, что по выходу из процедуры неявно пытаешсья присвоить реквизиту формы то же самое значение.
Попробуй еще убрать знач и передать не реквизит, а локальную переменную, которой предварительно присвоить значение реквизита.
Тогда ощутишь и поймешь (:
11 alexshape
 
14.07.17
08:50
(10) Спасибо за помощь, сделал через передачу реквизиты в переменную, и потом уже переда в параметр.

<неявно пытаешсья присвоить реквизиту формы то же самое значение. >  он ошибку выдает на атрибут контекста формы, а это:
Циата: "Атрибуты контекста Модуля формы
СтрокаДействийФормы
Форма ".