Имя: Пароль:
1C
1С v8
Ошибка передачи данных между клиентом и сервером. Ошибка преобразования данных XDTO.
0 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
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'СтрокаТаблицыЗначений'

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

Сам код:

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

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


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



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

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

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



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

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

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

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

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

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

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

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

МассивОтбора = Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);    ОткрытьФорму("Справочник.алкВидыАкциза.ФормаВыбора",МассивОтбора);

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

СтрСписок = Новый Структура("Ссылка", СЗ);
ПараметрыФормы = Новый Структура("Отбор", СтрСЗ);
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы);

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


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


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

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



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


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


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

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


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

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

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



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

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