Вход | Регистрация
 
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 или кнопку "Обновить" в браузере.