Имя: Пароль:
1C
1С v8
Отбор с параметрами в справочнике
0 Vitalii72
 
06.07.16
06:45
Помогите пожалуйста разобраться, что не так делаю. В документе вставил кнопку, делаю отбор с параметрами и открываю ФормуВыбора справочника номенклатура. В отборе указываю склад и Владельца табличная часть документа. Владельца беру из формы документа при событие ОбработкиВыбора и в ФормеВыбора справочника добавил обработку Обработку Выбора.

&НаКлиенте
Процедура Подбор(Команда)
УсловияОтбора = Новый Структура;
УсловияОтбора.Вставить("Склад", Объект.Склад);
ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",УсловияОтбора,Элементы.ТЧНоменклатура);
КонецПроцедуры


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("Склад") Тогда
        Список.Параметры.УстановитьЗначениеПараметра("Склад", Параметры.Склад);
    КонецЕсли;
КонецПроцедуры


В документе

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

В ФормеВыбора справочника:
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
    ОповеститьОВыборе(ВыбранноеЗначение);
КонецПроцедуры

Отбор проходит как мне надо, а вот выбранное значения не возвращает в документ. Прочитал, что надо в ФормеВыбора справочника при событие ОбработкаОповещение вернуть ВыбранноеЗначение, пишу ВыбранноеЗначение в процедуре, он ругается.
1 DrZombi
 
гуру
06.07.16
06:55
(0) нет слова "отбор"
2 DrZombi
 
гуру
06.07.16
06:55
+(0) Код отстой все в топку
3 DrZombi
 
гуру
06.07.16
06:58
УсловияОтбора = Новый Структура;
УсловияОтбора.Вставить("Склад", Объект.Склад);

СтрПарам = Новый Структура("Отбор",УсловияОтбора);

ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",СтрПарам ,Элементы.ТЧНоменклатура);
4 DrZombi
 
гуру
06.07.16
07:00
ОповеститьОВыборе (NotifyChoice)
Синтаксис:

ОповеститьОВыборе(<ЗначениеВыбора>)
Параметры:

<ЗначениеВыбора> (обязательный)

Тип: Произвольный.
Результат выбора.
Описание:

Посылает оповещение владельцу формы о выполнении выбора или подбора, передает ему выбранное значение. Закрывает форму в соответствии со значением свойства ЗакрыватьПриВыборе. Данное действие аналогично выполнению выбора в форме, открытой для выбора в поле ввода или ячейке табличного поля.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.
Примечание:

Может применяться в случае, когда открытие формы выбора или подбора выполнено средствами языка.
5 Vitalii72
 
06.07.16
07:04
&НаКлиенте
Процедура Подбор(Команда)
УсловияОтбора = Новый Структура;
УсловияОтбора.Вставить("Склад", Объект.Склад);
СтрПарам = Новый Структура("Отбор",УсловияОтбора);
ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",СтрПарам ,Элементы.ТЧНоменклатура);

//УсловияОтбора = Новый Структура;
//УсловияОтбора.Вставить("Склад", Объект.Склад);
//ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",УсловияОтбора,Элементы.ТЧНоменклатура);
КонецПроцедуры


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("Склад") Тогда
        Список.Параметры.УстановитьЗначениеПараметра("Склад", Параметры.Отбор);
    КонецЕсли;
    
КонецПроцедуры

Не видит параметр
6 Vitalii72
 
06.07.16
07:06
(4)

Из ФормыВыбора передаю обратно

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
    ОповеститьОВыборе(ВыбранноеЗначение);
КонецПроцедуры

Что не так?
7 DrZombi
 
гуру
06.07.16
07:06
(5) Какой параметр?
При открытии справочника, отбор будет выставлен Автоматом.
8 Vitalii72
 
06.07.16
07:08
(7) Получается это можно за комментировать?

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("Склад") Тогда
        Список.Параметры.УстановитьЗначениеПараметра("Склад", Параметры.Отбор);
    КонецЕсли;
    
КонецПроцедуры
9 Vitalii72
 
06.07.16
07:10
В ФормеВыбора у меня:

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

Если ПриСозданиеНаСервере не указан Параметр, при отборе ругается.
10 DrZombi
 
гуру
06.07.16
07:10
http://1c-pro.ru/threads/kak-organizovat-podbor-na-upravljaemyx-formax.36766/

&НаКлиенте
Процедура Подбор(Команда)
//одиночный подбор
//ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", , Элементы.Материалы);
//множественный подбор
//ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе", Ложь);
//ПараметрыФормы = Новый Структура("МножественныйВыбор", Истина);

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

КонецПроцедуры
&НаКлиенте
Процедура МатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
//одиночный подбор и множественный подбор
//НоваяСтрока = Объект.Материалы.Добавить();
//НоваяСтрока.Материал = ВыбранноеЗначение;

//подбор с множественным выбором
Для Каждого ВыбранныйЭлемент Из ВыбранноеЗначение Цикл
НоваяСтрока = Объект.Материалы.Добавить();
НоваяСтрока.Материал = ВыбранныйЭлемент;
КонецЦикла;

КонецПроцедуры
11 DrZombi
 
гуру
06.07.16
07:12
(9) Жесть...
Убери

"ГДЕ
    ОстатокНоменклатурыОстаткиИОбороты.Склад = &Склад"

Так то оно конечно весело :)
Но я бы лучше сделал все это в отдельной форме :)
12 Vitalii72
 
06.07.16
07:13
(11) А как можно сделать несколько ФормВыбора в справочнике, пробовал создать ещё один, при открытие формы ругается.
13 DrZombi
 
гуру
06.07.16
07:14
(12) Кнопка добавить, выбераешь  "Форма Выбора"

И Только одна может быть форма выбора по умолчанию...

Но самих форм может быть Куева туча :)
14 DrZombi
 
гуру
06.07.16
07:14
+ Ты же в (0) Сам указать можешь, какую форму использовать :)
15 Vitalii72
 
06.07.16
07:15
ФормуВыбора добавляю, при открытие Формы указываю новое название, если оно например не Справочник.Номенклатура.ФормаВыбора а Справочник.Номенклатура.ФормаВыбора1 то ругается, хотя она физически есть
16 DrZombi
 
гуру
06.07.16
07:16
+ ""

ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаВыбора_2",УсловияОтбора,Элементы.ТЧНоменклатура);
17 DrZombi
 
гуру
06.07.16
07:17
(15) Вы хоть пользуйтесь подсказками, помогает
18 DrZombi
 
гуру
06.07.16
07:17
+ от самой 1С
19 Vitalii72
 
06.07.16
07:19
Хорошо, спасибо большое за ответы, отбор работает без Условия ГДЕ, а вот возврат значения пока не работает. Попробую вставить тот код, который вы мне скинули в ОбработкуВыбора.
20 DrZombi
 
гуру
06.07.16
07:19
(19) Смотри в (10) и Думай, что ты делал не так :)
21 DrZombi
 
гуру
06.07.16
07:21
(19) Если вставишь параметр "ТекущаяСтрока", то в Справочнике Номенклатура можно позиционироваться на нужном элементе.
22 Vitalii72
 
06.07.16
07:24
(21) Это Вы сейчас о Обработке выбора?
23 DrZombi
 
гуру
06.07.16
07:27
(22) Это доп нагрузка для информирования :)
24 DrZombi
 
гуру
06.07.16
07:27
УсловияОтбора = Новый Структура;
УсловияОтбора.Вставить("Склад", Объект.Склад);

СтрПарам = Новый Структура("Отбор, ТекущаяСтрока",УсловияОтбора, НужныйЭлемент);

ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",СтрПарам ,Элементы.ТЧНоменклатура);
25 Vitalii72
 
06.07.16
08:16
Сделал в ОбработкеВыбора

&НаКлиенте
Процедура МатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
//одиночный подбор и множественный подбор
НоваяСтрока = Объект.ТЧ.Добавить();
НоваяСтрока.ТЧНоменклатура = ВыбранноеЗначение;
КонецПроцедуры

Нефига не возвращает значение в табличную часть. И в строчке:
СтрПарам = Новый Структура("Отбор, ТекущаяСтрока",УсловияОтбора, НужныйЭлемент);
Если подставляю свой элемент, выдаёт ошибку:
СтрПарам = Новый Структура("Отбор, ТекущаяСтрока",УсловияОтбора, Элементы.ТЧНоменклатура);
26 DrZombi
 
гуру
06.07.16
08:21
(25) НужныйЭлемент - Это ссылка на элемент справочника, а не на элемент на форме :)
27 DrZombi
 
гуру
06.07.16
08:27
28 Vitalii72
 
06.07.16
10:03
(27) Всё спасибо разобрался, сам не внимательный ((
2 + 2 = 3.9999999999999999999999999999999...