Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Ошибка передачи данных между клиентом и сервером. Ошибка преобразования данных XDTO.

Ошибка передачи данных между клиентом и сервером. Ошибка преобразования данных XDTO.
Я
   Ilnazio
 
14.06.20 - 14:59
Доброго времени суток. Просьба не кидаться тухлыми помидорами, только учусь :) Т.к. учусь опишу задачу, вдруг совсем неправильно подхожу к ее решению.
Задача такая: необходимо открыть форму выбора справочника с отбором. Для этого получаю данные отбора из регистра запросом. С клиентской процедуры решил использовать функцию на сервере, которая вернет массив запроса. В последующем результат я обработаю уже на клиенте и открою форму с отбором.

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

//НачалоОшибки

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'ret':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}ret
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'Value':
    форма: Элемент
    имя: {http://v8.1c.ru/8.1/data/core}Value
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'СтрокаТаблицыЗначений'

по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'ret':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}ret
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'Value':
    форма: Элемент
    имя: {http://v8.1c.ru/8.1/data/core}Value
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'СтрокаТаблицыЗначений'

//Конецошибки

Сам код:

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

&НаКлиенте
Процедура Бит_ТоварыНоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    НайденныеСтроки = "ы";
    
    ТекДанные = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные;
    СтрокаСАлкПрод = ТекДанные.АлкогольнаяПродукция;
    СтандартаяОбработка = ложь;
    
    Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);
    
    ПараметрыОтбораФормы = Новый Структура();
    Для каждого стр из НайденныеСтроки Цикл
        Значение = стр.Номенклатура;
        ПараметрыОтбораФормы.Вставить("Номенклатура",Значение);
    КонецЦикла;
    
    ПараметрыОтбораФормы = ПолучитьИзВременногоХранилища(АдресХранилища);
    Форма = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",ПараметрыОтбораФормы);
    Форма.Открыть();    
КонецПроцедуры


ну ругайтесь, пожалуйста. облазил сколько смог перед тем как зарегаться тут
   Ilnazio
 
1 - 14.06.20 - 15:02
Да еще и код не выделился..


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

&НаКлиенте
Процедура Бит_ТоварыНоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    НайденныеСтроки = "ы";
    
    ТекДанные = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные;
    СтрокаСАлкПрод = ТекДанные.АлкогольнаяПродукция;
    СтандартаяОбработка = ложь;
    
    Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);
    
    ПараметрыОтбораФормы = Новый Структура();
    Для каждого стр из НайденныеСтроки Цикл
        Значение = стр.Номенклатура;
        ПараметрыОтбораФормы.Вставить("Номенклатура",Значение);
    КонецЦикла;
    
    ПараметрыОтбораФормы = ПолучитьИзВременногоХранилища(АдресХранилища);
    Форма = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",ПараметрыОтбораФормы);
    Форма.Открыть();    
КонецПроцедуры


   H A D G E H O G s
 
2 - 14.06.20 - 15:17
Передача Таблицы значений между сервером и клиентом недоступна
   Ilnazio
 
3 - 14.06.20 - 15:18
(2) НайденныеСтроки - массив, в отладке смотрел. Читал что вроде его передавать можно
   Cthulhu
 
4 - 14.06.20 - 15:19
Отсутствует отображение для типа 'СтрокаТаблицыЗначений'
- значения типа 'СтрокаТаблицыЗначений', 'ТаблицаЗначений' - НЕ сериализуются! (и согласно мануалу и реализации -  не существуют в клиенте, хотя в принципе можно и извратиться создать и использовать их - но это лирика не по теме)
   Cthulhu
 
5 - 14.06.20 - 15:20
(3): значит в массиве есть значение такого типа... а как ты хотел - для передачи коллекции значений сериализутся все элементы коллекции
   Ilnazio
 
6 - 14.06.20 - 15:27
(5) Действительно в массиве хранятся значения типа "СтрокаТаблицыЗначений". Какой выход из ситуации? как можно вернуть инфу на клиент?
   H A D G E H O G s
 
7 - 14.06.20 - 15:57
(6) Преобразуй в Структуру
   Ilnazio
 
8 - 14.06.20 - 17:16
(7) Преобразовал в структуру в функции на сервере, до вызова функции в процедуре объявил Переменную ПараметрыОтбораФормы, иначе ругался. В момент возвращения в процедуру значения ПараметрыОтбораФормы = неопределенно становится. По идее структуру можно же с сервера на клиент возвращать?


ПараметрыОтбораФормы = Новый Структура();
    Для каждого стр из НайденныеСтроки Цикл
        Значение = стр.Номенклатура;
        ПараметрыОтбораФормы.Вставить("Номенклатура",Значение);
    КонецЦикла;

    
    Возврат(ПараметрыОтбораФормы);    
КонецФункции

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


   RomaH
 
9 - 15.06.20 - 06:45
(8)
 Перем ПараметрыОтбораФормы; 

вот это тебя подвело 
зачем оно тебе?
   ДенисЧ
 
10 - 15.06.20 - 06:48
"ПараметрыОтбораФормы = Новый Структура();
    Для каждого стр из НайденныеСтроки Цикл
        Значение = стр.Номенклатура;
        ПараметрыОтбораФормы.Вставить("Номенклатура",Значение);
    КонецЦикла;
"

Извините, а сегодня точно не пятница, а понедельник?
   Kashey
 
11 - 15.06.20 - 09:54
(0) Можете расписать подробнее, что хотите реализовать? Есть мнение, что Ваш подход неверный в корне.
   Ilnazio
 
12 - 15.06.20 - 11:13
(10) воскресенье + неопытный я)) Дай совет дай зеленому, пожалуйста
   Ilnazio
 
13 - 15.06.20 - 11:13
(9) Перем поставил из-за того что он ругается. ошибка: Переменная не определена (ПараметрыОтбораФормы)
   ДенисЧ
 
14 - 15.06.20 - 11:21
(12) Покрасься
Надеюсь, ты понимаешь, что каждое Вставить в структуру перезаписывает существующее значение?
   Ilnazio
 
15 - 15.06.20 - 11:21
(11) В ТЧ обработке устанавливается соответствие между (АП) алкогольной продукцией(пришла из егаиса) и номенклатурой в 1С. В случае когда одной АП соответствует несколько позиции номенклатуры 1С нужно открыть форму выбора справочника номенклатура с предложенным списком вариантов на основе регистра сведений. В регистре сведений прописывается связка всех соответствии АП-номенклатура.

В табличной части где нужно выбрать номенклатуру я получил АП, далее по этому АП нашел все связки запросом и получил массив (НайденныеСтроки).
Чтобы открыть форму с отбором вроде как нужно иметь структуру с одной колонкой - нашими параметрами отбора.
На данный момент столкнулся с несколькими проблемами:
1) не могу вернуть хоть какую-то инфу серверной функцией.
2) пробовал параметры руками проставлять(тестировал смогу открыть форму выбора с желаемыми позициями или нет) - тоже не получилось задуманное.
   Ilnazio
 
16 - 15.06.20 - 11:22
(14) Да, это понимаю) в отладке сразу обратил внимание. Простого человеческого добавить нету же(
   ДенисЧ
 
17 - 15.06.20 - 11:23
(16) Куда добавить? Структура - она по определению - с уникальными ключами...
   D_E_S_131
 
18 - 15.06.20 - 11:27
1. Ищи в запросе сразу по строке "АлкогольнаяПродукция" нужную Номенклатуру.
2. Найденные значения выгружай в массив и этот массив уже возвращай на клиента.
3. На открываемую форму так же передавай свой массив в отдельный параметр.
4. В открываемой форме в ПриСозданииНаСервере сделай установку отбора на основании переданного параметра формы.
   Ilnazio
 
19 - 15.06.20 - 11:41
(17) Тогда вопрос на засыпку: Есть одномерный массив с 2-3 элементами. Как можно его превратить в структуру?)
   D_E_S_131
 
20 - 15.06.20 - 11:42
(19) Зачем тебе что-то во что-то превращать вообще?
   dezss
 
21 - 15.06.20 - 11:46
(0)
   НайденныеСтроки = РезультатЗапроса.Скопировать(ПараметрыОтбора);
   МассивСтрок = ОбщегоНазначения.ТаблицаЗначенийВМассив(НайденныеСтроки);
   dezss
 
22 - 15.06.20 - 11:47
(21) + это написать вместо 
 НайденныеСтроки = РезультатЗапроса.НайтиСтроки(ПараметрыОтбора);

Ну и возвращать МассивСтрок;
   Kashey
 
23 - 15.06.20 - 12:05
(15) По запросу - параметр "Наименование" запроса устанавливаете, а в запросе не фильтруете по нему. Выбираются все записи регистра сведений. Ещё не увидел куда результат функции возвращается на клиенте. Из результата запроса  формируете структуру с нужной номенклатурой и возвращаете на клиент. На клиенте полученую структуру помещаете в параметры отбора формы перед её открытием. Должно всё получиться.
   Ilnazio
 
24 - 15.06.20 - 12:24
(22) Спасибо большое, учту
   Ilnazio
 
25 - 15.06.20 - 12:26
(23) Спасибо. Да с запросом косяк был, переделал. Не понял немного вас:"Ещё не увидел куда результат функции возвращается на клиенте" А как нужно отобразить куда результат функции возвращается?
   Ilnazio
 
26 - 15.06.20 - 12:29
(20) При открытии формы необходима структура в качестве параметра отбора. А я получаю по сути массив... Или как-то можно массивом отвертеться?
В сп:
<Параметры> (необязательный)
Тип: Структура.
   Kashey
 
27 - 15.06.20 - 12:38
(25)  вызываете функцию, её результат нужно поместить в переменную, иначе нужно использовать процедуру. Как-то так:
НайденныеСтроки = Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);
А НайденныеСтроки потом уже обрабатывать как требуется.
   Ilnazio
 
28 - 15.06.20 - 12:51
(27) Понял, спасибо огромное Вам! Можете, пожалуйста, посмотреть (26) сообщение, может сходу идея появится какая-нибудь...
   Kashey
 
29 - 15.06.20 - 13:18
(28)Поместить список номенклатуры в список значений СЗ. Передать его как параметр отбора в форму выбора.
СтрСписок = Новый Структура("Ссылка", СЗ);
ПараметрыФормы = Новый Структура("Отбор", СтрСЗ);
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы);
   Kashey
 
30 - 15.06.20 - 13:24
Либо установить отбор в запросе динамического списка в форме выбора и передавать список номенклатуры в неё. При создании на сервере заполнять параметр запроса динамического списка.
 
 Рекламное место пустует
   Ilnazio
 
31 - 15.06.20 - 13:59
(30) Спасибо большое за советы, дошел до финала - открытие формы. Не разобрался моментом как из массива получить структуру.
МассивОтбора = Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);    ОткрытьФорму("Справочник.алкВидыАкциза.ФормаВыбора",МассивОтбора);

Бьет ошибку несоответствие типов. передается массив, ожидает увидеть структуру.
   Ilnazio
 
32 - 15.06.20 - 13:59
(18) Тоже спасибо сказал все по делу, но все-таки для открытия формы необходима структура. Массив передаю - выдает ошибку несоответствие типов(
   Ilnazio
 
33 - 15.06.20 - 14:00
(29) Вроде тут описали схему без мудреных для меня на данный момент динамических списков. Можете, пожалуйста, подробнее рассказать?
   Ilnazio
 
34 - 15.06.20 - 14:10
https://makrus.ru/chastye-voprosy-po-1s/kak-otkryt-formu-vybora-s-opredelennym-otborom-v-1s-82.html
Вот здесь хороший пример есть для обычных форм. Второй кусок кода демонстрирует проверку при отборе ВидСравнение.Всписке. То что нужно, но для УФ надо такое же(
   Kashey
 
35 - 15.06.20 - 14:16
(30) Если вариант из (29) - ваша функция должна вернуть список значений (не массив), который вы и поместите в структуру для передачи в форму подбора.
   Ilnazio
 
36 - 15.06.20 - 14:30
(35) У вас в коде или ошибка или я пробка.. я, конечно, склоняюсь ко второму варианту, но уточню:
СтрСписок = Новый Структура("Ссылка", СЗ);
ПараметрыФормы = Новый Структура("Отбор", СтрСЗ);
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы);

По коду:
СЗ - список значений. СтрСписок - теперь структура из нашего массива. ПараметрыФормы - новая структура из какого-то СтрСЗ? я связь потерял
   Ilnazio
 
37 - 15.06.20 - 14:30
(36) СтрСписок - теперь структура из нашего *СпискаЗначений*, опечатку допустил
   Kashey
 
38 - 15.06.20 - 14:35
(37) Да, ошибка. СтрСЗ = СтрСписок
   D_E_S_131
 
39 - 15.06.20 - 14:36
(32) А какой тип у параметра формы поставил? Произвольный?
   D_E_S_131
 
40 - 15.06.20 - 14:48
Хотя как рекомендовано в (29) сделать более правильно и изящнее.
   craxx
 
41 - 15.06.20 - 14:54
(0) Индексы строк передавай, а не сами строки
ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока
   Ilnazio
 
42 - 15.06.20 - 14:56
(38) (40) (41) Сделал как в 29, все отрабатывает, но уходит в типовой код и открывает совсем другую форму.

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


Видимо не достаточно что стоит стандартная обработка = ложь
   Ilnazio
 
43 - 15.06.20 - 14:58
(42) Причем открывает две формы, типовую что должна открыться и то что я вызываю, только то что я вызвал уходит в типовой код и в коде я отловил момент когда моя форма подменяется другой. По итогу открываются две формы, обе не мои)
   Kashey
 
44 - 15.06.20 - 15:03
(43) СтандартаяОбработка = ложь;
   D_E_S_131
 
45 - 15.06.20 - 15:03
(43) А что у тебя здесь - "Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод)"?
   Kashey
 
46 - 15.06.20 - 15:04
(43) Внимательно прочтите имя переменной
   Ilnazio
 
47 - 15.06.20 - 15:12
(45) Функция которая вернула СписокЗначений
&НаСервере
Функция Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.Номенклатура.Наименование КАК НоменклатураНаименование
        |ИЗ
        |    РегистрСведений.алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры КАК алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры
        |ГДЕ
        |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.АлкогольнаяПродукция.Ссылка = &Наименование
        |
        |СГРУППИРОВАТЬ ПО
        |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.Номенклатура.Наименование";
    
    Запрос.УстановитьПараметр("Наименование", СтрокаСАлкПрод);
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    СЗ = Новый СписокЗначений();
    Для Каждого стр из РезультатЗапроса Цикл
        СЗ.Добавить(стр.НоменклатураНаименование);
    КонецЦикла;
    Возврат(СЗ);    
КонецФункции

   D_E_S_131
 
48 - 15.06.20 - 15:18
"...и в коде я отловил момент когда моя форма подменяется другой." - этот код ПриОткрытии формы выбора срабатывает?
   Kashey
 
49 - 15.06.20 - 15:19
(47) Зачем наименование выбираете в запросе? Ссылка нужна. А в секции ГДЕ как раз наименование нужно, похоже, а не ссылка ))
   Ilnazio
 
50 - 15.06.20 - 15:20
(46) Да, моя невнимательность была. Теперь же форма открывается одна - моя. Точнее пытается открыться, но в процессе заменяется типовой формой другой, то есть проходит в типовую процедуру сразу же после выполнения команды открытьформу.
Заметил что как только выхожу из своей процедуры стандартная обработка автоматом проставляется "Истина"! сцуко...
Попадает в следующую процедуру:


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


Вот тут замена идет

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


   Ilnazio
 
51 - 15.06.20 - 15:21
(49) там все работает)) ну я посмотрю что вы имеете в виду)
   D_E_S_131
 
52 - 15.06.20 - 15:25
Открывай через "ОткрытьФорму("Справочник.Номенклатура.Формы.ФормаВыбора", ПараметрыФормы)", если она не заработает в режиме выбора, то придется через ПолучитьФорму() сделать и установить ей режим выбора, закрытие при выборе и т.п.
   Cthulhu
 
53 - 15.06.20 - 15:33
   Cthulhu
 
54 - 15.06.20 - 15:34
(53) - готовый код тз в структуру
   Kashey
 
55 - 15.06.20 - 15:45
(51) А форму выбора самостоятельно добавляли? Если да, то нужно указать в первом параметре ОткрытьФорму() её имя.
   Ilnazio
 
56 - 15.06.20 - 15:56
(52) Отрабатывает нормально, спасибо. Но форма выбора открывается пустой, без списка номенклатуры. Также стандартнаяобработка после выхода из моей процедуры меняется на Истину.
   Ilnazio
 
57 - 15.06.20 - 16:07
(55) Открываю самостоятельно, имя прописываю.
Если прописываю Справочник.Номенклатура.ФормаВыбора - моя форма заменяется другой.
Если же Справочник.Номенклатура.Форма.ФормаВыбора, то открывается нужная форма, но пустая

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


   D_E_S_131
 
58 - 15.06.20 - 16:10
"Но форма выбора открывается пустой, без списка номенклатуры" - смотреть отладчиком какие данные (и каких типов) получились в СЗ.

"Также стандартнаяобработка после выхода из моей процедуры меняется на Истину." - в смысле "после выхода"? Куда вышло? Может в том месте уже свой параметр СтандартнаяОбработка?
   Kashey
 
59 - 15.06.20 - 16:10
(57) См. 49, нужна ссылка
   Ilnazio
 
60 - 15.06.20 - 17:17
(59) Действительно - проблема в ссылке была. Задача решена, всем огромное спасибо. Рабочий код прилагается


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

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

 
 Рекламное место пустует
   Ilnazio
 
61 - 15.06.20 - 17:17
(59) Сколько в сфере 1с работаете если не секрет?)
   D_E_S_131
 
62 - 15.06.20 - 17:25
(60) Еще в условии "ГДЕ" ссылку сравниваешь с чем, опять со строкой?
   Ilnazio
 
63 - 15.06.20 - 17:28
(62) Нет, там ссылка приходит.
   Ilnazio
 
64 - 15.06.20 - 17:29
(59) (62) Короч нифига не все)) отбор произведен, но номенклатура не выбирается из списка.. сцуко, рано обрадовался
   D_E_S_131
 
65 - 15.06.20 - 17:57
(64) см. второй вариант в (52). :)
   Kashey
 
66 - 15.06.20 - 18:02
(64) В открываемой форме элемент формы Список - в свойствах режим выбора стоит?
   Ilnazio
 
67 - 16.06.20 - 09:55
(66) Не очень понял где смотреть. Форму которую открываю - типовая. Есть подозрения что не задана форма владельца и значение тупо не возвращается, может быть такое?
   Ilnazio
 
68 - 16.06.20 - 10:33
(66) Проблему решил, передал владельцем элемент откуда вызывалась процедура, значение возвращает. Но если же объясните что вы имели в виду будет полезно для общего развития.
Для будущих поколений: дополнил строчку открытия формы 
ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаВыбора", ПараметрыФормы,Элемент);
   D_E_S_131
 
69 - 16.06.20 - 10:39
"Есть подозрения что не задана форма владельца..." - это не подозрение, а факт судя по вашему коду. Еще так же полезно настроить режим открытия окна формы (последний параметр метода ОткрытьФорму()).
   Ilnazio
 
70 - 16.06.20 - 10:53
(69) Спасибо) Чем он помогает?
   D_E_S_131
 
71 - 16.06.20 - 11:13
(70) Ну если использовать режим БлокироватьОкноВладельца, то выбор элемента будет более естественным.
   Ilnazio
 
72 - 16.06.20 - 11:34
(71) Понял, протестирую
   Kashey
 
73 - 16.06.20 - 11:44
(66) Если коротко - есть форма списка, есть форма выбора. Поведение отличается, хотел уточнить что используете именно форму выбора. Для общего развития рекомендую изучить работу с управляемыми формами, там очень много нюансов. Нахрапом не возьмёшь, нужно именно понимание.
   Ilnazio
 
74 - 17.06.20 - 11:59
(73) Понял, изучу. спасибо большое) Есть какие-либо источники которые с уверенностью можете посоветовать?


Список тем форума
Рекламное место пустует  Рекламное место пустует
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Э. Йодан
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.