Двойное срабатывание события при активации строки
Здравствуйте
Отрабатывает дважды событие при активации строки при проставлении отбора в компоновщик настроек.
В типовом механизме проставляется отбор с "ВидСравненияКомпоновкиДанных.Равно" я добавляю условие на то что если в выбранной строке находится группа то выполняется сравнение "ВидСравненияКомпоновкиДанных.ВИерархии" и это вызывает двойное отрабатывание события.
Проблема двойного срабатывания в том что при повторном обходе берется элемент вложенный в группу что как бы возвращает к условию "равно"
Проблема точно находится именно в этом сравнении. Если изменить на "ровно" то все отрабатывает корректно
Подскажите пожалуйста что я делаю не так?
Отрабатывает дважды событие при активации строки при проставлении отбора в компоновщик настроек.
В типовом механизме проставляется отбор с "ВидСравненияКомпоновкиДанных.Равно" я добавляю условие на то что если в выбранной строке находится группа то выполняется сравнение "ВидСравненияКомпоновкиДанных.ВИерархии" и это вызывает двойное отрабатывание события.
Проблема двойного срабатывания в том что при повторном обходе берется элемент вложенный в группу что как бы возвращает к условию "равно"
Проблема точно находится именно в этом сравнении. Если изменить на "ровно" то все отрабатывает корректно
Подскажите пожалуйста что я делаю не так?
Прикрепленные файлы:
Найденные решения
Если я правильно понял задачу, то Вам не надо делать запрос. И не надо делать условия. Просто надо заменить условие отбора: вместо "ВидСравненияКомпоновкиДанных.Равно" напишите "ВидСравненияКомпоновкиДанных.ВИерархии". Если выбрать элемент, отберется вся номенклатура этого вида; если выбрать группу, отберется вся номенклатура видов в иерархии этой группы.
Проблема в другом: при выборе Номенклатуры в отобранном списке происходит выбор вида номенклатуры в таблице видов номенклатуры. Естественно, срабатывает событие ПриАктивизацииСтроки таблицы ВидыНоменклатуры и отбор уже по виду номенклатуры, который выделился. Как я понял, Вам надо, чтобы этого не происходило. Тогда надо отключить обработчик ПриАктивизацииСтроки таблицы Номенклатуры, либо как-то по-другому обработать это событие
Проблема в другом: при выборе Номенклатуры в отобранном списке происходит выбор вида номенклатуры в таблице видов номенклатуры. Естественно, срабатывает событие ПриАктивизацииСтроки таблицы ВидыНоменклатуры и отбор уже по виду номенклатуры, который выделился. Как я понял, Вам надо, чтобы этого не происходило. Тогда надо отключить обработчик ПриАктивизацииСтроки таблицы Номенклатуры, либо как-то по-другому обработать это событие
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
1. Серверный вызов потому что в ПриАктивацииСтроки.
2. Нафига вообще вам ВИерархии, если вы всю иерархию получаете запросом и пихаете ее в отбор?
Вы либо отбор делайте "в иерархии" для реквизита формы, либо "в списке" для переданного в параметрах списка.
2. Нафига вообще вам ВИерархии, если вы всю иерархию получаете запросом и пихаете ее в отбор?
Вы либо отбор делайте "в иерархии" для реквизита формы, либо "в списке" для переданного в параметрах списка.
(8)Синтакс - помощник. ПриАктивизацииСтроки.
Синтаксис:
ПриАктивизацииСтроки()
Описание:
Вызывается при активизации строки таблицы.
Примечание:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.
Синтаксис:
ПриАктивизацииСтроки()
Описание:
Вызывается при активизации строки таблицы.
Примечание:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.
(25) в самом дин списке изменил запрос
Никак не могу найти параметр для заполнения
Подскажите пожалуйста где искать параметр который находится в {}
ВЫБРАТЬ
0 КАК ИндексКартинки,
СправочникНоменклатура.ПометкаУдаления КАК ПометкаУдаления,
СправочникНоменклатура.Ссылка КАК Ссылка,
СправочникНоменклатура.Ссылка КАК Номенклатура,
СправочникНоменклатура.Артикул КАК Артикул,
СправочникНоменклатура.Код КАК Код,
СправочникНоменклатура.Наименование КАК Наименование,
СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
СправочникНоменклатура.ИспользованиеХарактеристик КАК ИспользованиеХарактеристик,
СправочникНоменклатура.ЭтоГруппа КАК ЭтоГруппа,
СправочникНоменклатура.Родитель КАК Родитель,
ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) КАК Валюта,
0 КАК Цена,
0 КАК МаксимальнаяЦенаХарактеристики,
ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка,
СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
0 КАК ВНаличииОстаток,
0 КАК Доступно,
ЛОЖЬ КАК ХарактеристикиИспользуются,
ЛОЖЬ КАК ЭтоТовар,
ЛОЖЬ КАК ЭтоУслуга,
НЕОПРЕДЕЛЕНО КАК ВладелецХарактеристик,
СправочникНоменклатура.Качество КАК Качество
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
{ГДЕ
(СправочникНоменклатура.ВидНоменклатуры В ИЕРАРХИИ (&Родитель)) КАК Родитель}
ПоказатьНикак не могу найти параметр для заполнения
Подскажите пожалуйста где искать параметр который находится в {}
(27) что то я никак не могу найти. туплю..
изменил на
изменил на
ЛОЖЬ КАК ЭтоУслуга,
НЕОПРЕДЕЛЕНО КАК ВладелецХарактеристик,
СправочникНоменклатура.Качество КАК Качество
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ГДЕ
СправочникНоменклатура.ВидНоменклатуры В ИЕРАРХИИ (&ВидНоменклатуры)
(28)все верно.
Теперь этот параметр надо у ДС установить.
При создании на сервере установите параметр как пустая ссылка или Неопределено.
При активизации строки видов номенклатуры - устанавливайте нужное значение.
Теперь этот параметр надо у ДС установить.
При создании на сервере установите параметр как пустая ссылка или Неопределено.
При активизации строки видов номенклатуры - устанавливайте нужное значение.
ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(СписокНоменклатуры,"ВидНоменклатуры",ЗначениеПараметра,Истина);
(29)ЗначениеПараметраКомпоновкиДанных = Список.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра)); - не находит . наименование точное .
ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(СписокНоменклатура,"ВидНоменклатуры",ТекущиеДанные.ссылка,Истина); - изменил под себя.
ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(СписокНоменклатура,"ВидНоменклатуры",ТекущиеДанные.ссылка,Истина); - изменил под себя.
(28)
Вы изначально в дебри полезли... Никаких программных отборов и тому подобного не нужно. Этот запрос верный. Осталось только это:
Если вид номенклатуры выбираете из другого динамического списка, то у того может быть такой запрос:
Обратите внимание, что я использую не безликое "Ссылка" а сразу даю внятное название полю "ВидНоменклатуры" ;)
Вверху рядом с закладкой "Запрос" есть закладка "Настройки" и там в подзакладке "Порядок" указываете "ВидНоменклатуры.Наименование" = "По возрастанию"
Тогда при открытии формы курсор автоматом станет на первую строку, где вид номенклатуры не задан и вторая таблица будет пустой.
При выборе какого-нибудь элемента в первой - будет меняться вторая.
Если же нужно, чтобы по умолчанию (при выборе первой (пустой) строки) показывался ВЕСЬ список, то меняем условие ГДЕ на такое:
Если пустой вариант вообще не нужен, тогда можно сделать так (чтобы исключить ошибку):
Вы изначально в дебри полезли... Никаких программных отборов и тому подобного не нужно. Этот запрос верный. Осталось только это:
&НаКлиенте
Процедура ВидыНоменклатурыПриАктивизацииСтроки(Элемент)
СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("ВидНоменклатуры", Элементы.ВидыНоменклатуры.ТекущиеДанные.ВидНоменклатуры);
КонецПроцедуры
Если вид номенклатуры выбираете из другого динамического списка, то у того может быть такой запрос:
ВЫБРАТЬ
Значение(Справочник.ВидыНоменклатуры.ПустаяСсылка) КАК ВидНоменклатуры
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Ссылка ИЗ Справочник.ВидыНоменклатуры
Обратите внимание, что я использую не безликое "Ссылка" а сразу даю внятное название полю "ВидНоменклатуры" ;)
Вверху рядом с закладкой "Запрос" есть закладка "Настройки" и там в подзакладке "Порядок" указываете "ВидНоменклатуры.Наименование" = "По возрастанию"
Тогда при открытии формы курсор автоматом станет на первую строку, где вид номенклатуры не задан и вторая таблица будет пустой.
При выборе какого-нибудь элемента в первой - будет меняться вторая.
Если же нужно, чтобы по умолчанию (при выборе первой (пустой) строки) показывался ВЕСЬ список, то меняем условие ГДЕ на такое:
ГДЕ
&ВидНоменклатуры=Значение(Справочник.ВидыНоменклатуры.ПустаяСсылка)
ИЛИ СправочникНоменклатура.ВидНоменклатуры В ИЕРАРХИИ (&ВидНоменклатуры)
Если пустой вариант вообще не нужен, тогда можно сделать так (чтобы исключить ошибку):
&НаКлиенте
Процедура ВидыНоменклатурыПриАктивизацииСтроки(Элемент)
ВидНоменклатуры=?(Элементы.ВидыНоменклатуры.ТекущиеДанные=Неопределено,
Справочники.ВидыНоменклатуры.ПустаяСсылка(),
Элементы.ВидыНоменклатуры.ТекущиеДанные.ВидНоменклатуры);
СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("ВидНоменклатуры", ВидНоменклатуры);
КонецПроцедуры
(36) спасибо за ответ
но все же вы не ознакомились со всей веткой.
Вы в коде проставляете значение вида номенклатуры в параметр а в типомов механизме создается отбор и предложенный код :
нужно заменить на тот что указан в фото на ответе "21".
Процедура при активации строки имеет типовой функционал который я не хотел бы заменять целиком и поэтому добовлял свои корректировки уже после ее выполнения.
двойная активации происходит при абсолютно любом раскладе. Проставлял условия в отборах, параметрах, менял запрос , делал через расширения и прочие костыли но проблема возникала в любом случае если передавать несколько значений в сравнение.
Возможно я не могу корректно донести суть проблемы поэтому если у вас есть шаблон утшки на уф то вы могли бы сами увидеть суть проблемы.
В конфигураторе - Обработки - "ПодборТоваровВДокументЗакупки" - "Форма" - Модуль формы - "Процедура ВидыНоменклатурыПриАктивизацииСтроки(Элемент)".
Суть доработки в том что бы при выборе группы выводился весь список номенклатуры который относится к видам которые находятся в этой группе.
но все же вы не ознакомились со всей веткой.
Вы в коде проставляете значение вида номенклатуры в параметр а в типомов механизме создается отбор и предложенный код :
СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("ВидНоменклатуры", Элементы.ВидыНоменклатуры.ТекущиеДанные.ВидНоменклатуры);
нужно заменить на тот что указан в фото на ответе "21".
Процедура при активации строки имеет типовой функционал который я не хотел бы заменять целиком и поэтому добовлял свои корректировки уже после ее выполнения.
двойная активации происходит при абсолютно любом раскладе. Проставлял условия в отборах, параметрах, менял запрос , делал через расширения и прочие костыли но проблема возникала в любом случае если передавать несколько значений в сравнение.
Возможно я не могу корректно донести суть проблемы поэтому если у вас есть шаблон утшки на уф то вы могли бы сами увидеть суть проблемы.
В конфигураторе - Обработки - "ПодборТоваровВДокументЗакупки" - "Форма" - Модуль формы - "Процедура ВидыНоменклатурыПриАктивизацииСтроки(Элемент)".
Суть доработки в том что бы при выборе группы выводился весь список номенклатуры который относится к видам которые находятся в этой группе.
Прикрепленные файлы:
я б давно уже костыль вписал, если не хочется соблюдать рекомендации СП ))))
ввел бы реквизит формы "ИдентифиаторПредСтроки" и в ПриАктивизации вписал бы проверку что если строка не сменилась то и ничего делать не будем)) иначе запомним новый Идентификатор и выполним код))
ввел бы реквизит формы "ИдентифиаторПредСтроки" и в ПриАктивизации вписал бы проверку что если строка не сменилась то и ничего делать не будем)) иначе запомним новый Идентификатор и выполним код))
Если я правильно понял задачу, то Вам не надо делать запрос. И не надо делать условия. Просто надо заменить условие отбора: вместо "ВидСравненияКомпоновкиДанных.Равно" напишите "ВидСравненияКомпоновкиДанных.ВИерархии". Если выбрать элемент, отберется вся номенклатура этого вида; если выбрать группу, отберется вся номенклатура видов в иерархии этой группы.
Проблема в другом: при выборе Номенклатуры в отобранном списке происходит выбор вида номенклатуры в таблице видов номенклатуры. Естественно, срабатывает событие ПриАктивизацииСтроки таблицы ВидыНоменклатуры и отбор уже по виду номенклатуры, который выделился. Как я понял, Вам надо, чтобы этого не происходило. Тогда надо отключить обработчик ПриАктивизацииСтроки таблицы Номенклатуры, либо как-то по-другому обработать это событие
Проблема в другом: при выборе Номенклатуры в отобранном списке происходит выбор вида номенклатуры в таблице видов номенклатуры. Естественно, срабатывает событие ПриАктивизацииСтроки таблицы ВидыНоменклатуры и отбор уже по виду номенклатуры, который выделился. Как я понял, Вам надо, чтобы этого не происходило. Тогда надо отключить обработчик ПриАктивизацииСтроки таблицы Номенклатуры, либо как-то по-другому обработать это событие
(38) значит, вопрос решен?
Кстати, получилось без запроса и условия сделать? Если заменить условие отбора на ВидСравненияКомпоновкиДанных.ВИерархии, корректно работает?
Процедура УстановитьОтборПоВидуНоменклатуры(Форма) должна выглядеть так:
Кстати, получилось без запроса и условия сделать? Если заменить условие отбора на ВидСравненияКомпоновкиДанных.ВИерархии, корректно работает?
Процедура УстановитьОтборПоВидуНоменклатуры(Форма) должна выглядеть так:
Процедура УстановитьОтборПоВидуНоменклатуры(Форма)
ВидНоменклатуры = Форма.ВидНоменклатуры;
ЭлементыОтбора = ОбщегоНазначенияУТКлиентСервер.ПолучитьОтборДинамическогоСписка(Форма.СписокНоменклатура);
// Установить отбор по виду номенклатуры.
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(
ЭлементыОтбора,
"ВидНоменклатуры",
ВидНоменклатуры,
ВидСравненияКомпоновкиДанных.ВИерархии, //было ВидСравненияКомпоновкиДанных.Равно
"ОтборПоВидуНоменклатуры",
Истина);
КонецПроцедуры
Показать
(39) да, сделал с минемальными корректировками.
Ваш вариант лучше чем мой . я добавил код изменения отбора уже после выполнения.
Кстати этот вариант я тоже чуть выше описывал но он был с ненужным условием на "этогруппа".
но в целом сейчас будет работать вообще любой вариант так как кусок кода который вызывал активацию изменен.
Ваш вариант лучше чем мой . я добавил код изменения отбора уже после выполнения.
Кстати этот вариант я тоже чуть выше описывал но он был с ненужным условием на "этогруппа".
но в целом сейчас будет работать вообще любой вариант так как кусок кода который вызывал активацию изменен.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот