Всем привет,
есть поле ввода на УФ;
оно составного типа (или пробовала через ограничение типов программно, поведение аналогичное);
поэтому сначала пользователь выбирает тип документа из двух, а потом выбирает конкретный документ.
Есть обработчик события ОбработкаВыбора.
Конечная цель - показывать пользователю документы с отбором по поставщику, а у разных документов в ERP отбор идет либо по контрагенту, либо по партнеру, поэтому пришлось городить такой огород.
Когда пользователь добавляет первый документ, то отладкой видно, что один раз проходим процедуру на клиенте и один раз на сервере - при выборе типа; а при выборе конкретного документа уже не попадаем в обработку выбора. И получаем пустую ссылку, хотя документ выбрали.
А когда добавляем второй документ, то попадаем в этот обработчик оба раза - и при выборе типа, и при выборе документа, и всё хорошо, выбранный документ виден в этом поле.
При каждом следующем тоже все хорошо, 2 раза вызывается обработчик и виден документ.
То есть проблемы только с первым разом.
Как будто какое-то свойство меняется у поля ввода или где-то еще.
Но я выгрузила в список и сравнила свойства поля ввода после первого и второго раза - не вижу отличий.
Почему же в первый раз обработчик выбора не вызывается при выборе конкретного документа?
Помогите, пожалуйста, буду благодарна за любые мысли.
есть поле ввода на УФ;
оно составного типа (или пробовала через ограничение типов программно, поведение аналогичное);
поэтому сначала пользователь выбирает тип документа из двух, а потом выбирает конкретный документ.
Есть обработчик события ОбработкаВыбора.
Конечная цель - показывать пользователю документы с отбором по поставщику, а у разных документов в ERP отбор идет либо по контрагенту, либо по партнеру, поэтому пришлось городить такой огород.
Когда пользователь добавляет первый документ, то отладкой видно, что один раз проходим процедуру на клиенте и один раз на сервере - при выборе типа; а при выборе конкретного документа уже не попадаем в обработку выбора. И получаем пустую ссылку, хотя документ выбрали.
А когда добавляем второй документ, то попадаем в этот обработчик оба раза - и при выборе типа, и при выборе документа, и всё хорошо, выбранный документ виден в этом поле.
При каждом следующем тоже все хорошо, 2 раза вызывается обработчик и виден документ.
То есть проблемы только с первым разом.
Как будто какое-то свойство меняется у поля ввода или где-то еще.
Но я выгрузила в список и сравнила свойства поля ввода после первого и второго раза - не вижу отличий.
Почему же в первый раз обработчик выбора не вызывается при выборе конкретного документа?
Помогите, пожалуйста, буду благодарна за любые мысли.
&НаКлиенте
Процедура Документ1СОбработкаВыбора(Элемент, ВыбранноеЗначение, ДополнительныеДанные, СтандартнаяОбработка)
Документ1СОбработкаВыбораНаСервере(ВыбранноеЗначение);
КонецПроцедуры
&НаСервере
Процедура Документ1СОбработкаВыбораНаСервере(ВыбранноеЗначение)
НоваяСвязь = Неопределено;
Если ВыбранноеЗначение = Тип("ДокументСсылка.ЗаявкаНаРасходованиеДенежныхСредств") Тогда
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Контрагент", "Запись.Вендор");
ИначеЕсли ВыбранноеЗначение = Тип("ДокументСсылка.ПриобретениеТоваровУслуг") Тогда
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Партнер", "Партнер");
КонецЕсли;
Если НоваяСвязь <> Неопределено Тогда
НовыйМассив = Новый Массив;
НовыйМассив.Добавить(НоваяСвязь);
НовыеСвязи = Новый ФиксированныйМассив(НовыйМассив);
Элементы.Документы1СДокумент1С.СвязиПараметровВыбора = НовыеСвязи;
КонецЕсли;
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Диалог выбора цвета с возможностью определения составляющих цвета RGB для УФ.
- Управляемая консоль запросов, отчетов 3.9.0 (расширение, внешняя обработка)
- Форма выбора (подбор) в управляемых формах
- Универсальная обработка корректировки справочников, документов и регистров (движений документов) 1С. УФ
- Быстрый и удобный выбор периода (включая периоды финансового года)
Найденные решения
(9) Обработка выбора срабатывает два раза - первый раз - при выборе типа, второй раз - при выборе значения. Соответственно, в первый раз вы ей не даете нормально отработать, бегаете на сервер и т.д. - тут уже не до второго выбора. Но во второй раз тип уже выбран и открывается сразу форма выбора нужного документа, так? Поэтому и нужно ловить событие при изменении. Это раз.
Два (синтакс-помощник): В обработчике данного события (то есть ОбработкаВыбора) нельзя использовать серверные методы формы с директивой компиляции &НаСервере, а также изменять свойства, которые могут привести к серверному вызову.
Два (синтакс-помощник): В обработчике данного события (то есть ОбработкаВыбора) нельзя использовать серверные методы формы с директивой компиляции &НаСервере, а также изменять свойства, которые могут привести к серверному вызову.
в УТ(ЕРП, КА) есть метод
он вызывается в обработчиках начало выбора
Например Справочник.КлассификаторОрганизацийСАТУРН.ФормаЭлемента
Вроде, вообще ничего не нужно детализировать. Событие на элемент пришить и все.
Метод сам распарсит типы.
СобытияФормИСКлиент.ПолеСоставногоТипаОбработкаВыбора(Форма, Элемент, ВыбранноеЗначение, СтандартнаяОбработка)он вызывается в обработчиках начало выбора
Например Справочник.КлассификаторОрганизацийСАТУРН.ФормаЭлемента
&НаКлиенте
Процедура ОрганизацияКонтрагентСтрокойОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ПолеСоставногоТипаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПолеСоставногоТипаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СобытияФормИСКлиент.ПолеСоставногоТипаОбработкаВыбора(ЭтотОбъект, Элемент, ВыбранноеЗначение, СтандартнаяОбработка);
КонецПроцедуры
ПоказатьВроде, вообще ничего не нужно детализировать. Событие на элемент пришить и все.
Метод сам распарсит типы.
(17) Почему нерешаемая? Во-первых, еще раз: связи можно устанавливать ПриИзменении - кто запрещает-то?
Во-вторых - в обработке выбора можно вызвать метод Оповестить и в обработке оповещения устанавливать связи с вызовом сервера.
Но нет, проще запилить отдельную форму.
Во-вторых - в обработке выбора можно вызвать метод Оповестить и в обработке оповещения устанавливать связи с вызовом сервера.
Но нет, проще запилить отдельную форму.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
смутно понял, подозреваю, что при первом выборе
ВыбранноеЗначение = Неопределено
добавьте ветку
ВыбранноеЗначение = Неопределено
добавьте ветку
ИначеЕсли ВыбранноеЗначение = Неопределено Тогда
Сообщить("ку-ку"); // думаем, о связи по умолчанию
КонецЕсли;
Если я правильно понял, что есть два реквизита и надо после выбора первого настроить параметры выбора второго.
Тогда можно вместо Документ1СОбработкаВыбора попробовать использовать событие Документ1СПриИзменении.
Тогда можно вместо Документ1СОбработкаВыбора попробовать использовать событие Документ1СПриИзменении.
(3)
Эх, криво объяснила, сорян)
Реквизит один - это поле ввода документа, только там надо сначала тип выбрать, а потом сам документ.
Ладно бы каждый раз криво выбирался.
Смущает, что при первой попытке выбора можно выбрать тип, а выбор документа не начинается;
а при второй и следующих попытках нормально выбираем тип и потом собственно документ.
Если я правильно понял, что есть два реквизита и надо после выбора первого настроить параметры выбора второго.
Эх, криво объяснила, сорян)
Реквизит один - это поле ввода документа, только там надо сначала тип выбрать, а потом сам документ.
Ладно бы каждый раз криво выбирался.
Смущает, что при первой попытке выбора можно выбрать тип, а выбор документа не начинается;
а при второй и следующих попытках нормально выбираем тип и потом собственно документ.
во-первых, спасибо, что отвечаете на мой вопрос, да еще и не совсем понятный, оказывается))))
Не выбранное значение очень даже определено;
при выборе типа - это тип,
а при выборе конкретной ссылки - это ДокументСсылка.
А проблема в том, что при первом клике не доходит до второго выбора.
ВыбранноеЗначение = Неопределено
Не выбранное значение очень даже определено;
при выборе типа - это тип,
а при выборе конкретной ссылки - это ДокументСсылка.
А проблема в том, что при первом клике не доходит до второго выбора.
потом пользователь выбирает конкретный документ и тогда ВыбранноеЗначение - это ДокументСсылка
Прикрепленные файлы:
Я вижу выбор пользователя и по нему строю связь параметров выбора.
Если пользователь выбрал тип "поступление товаров", то связь параметров выбора одна,
если заявка - то связь другая.
Мне надо видеть выбранное значение, поэтому обработка выбора.
Не?
(8)
Если пользователь выбрал тип "поступление товаров", то связь параметров выбора одна,
если заявка - то связь другая.
Мне надо видеть выбранное значение, поэтому обработка выбора.
Не?
(8)
(9) Обработка выбора срабатывает два раза - первый раз - при выборе типа, второй раз - при выборе значения. Соответственно, в первый раз вы ей не даете нормально отработать, бегаете на сервер и т.д. - тут уже не до второго выбора. Но во второй раз тип уже выбран и открывается сразу форма выбора нужного документа, так? Поэтому и нужно ловить событие при изменении. Это раз.
Два (синтакс-помощник): В обработчике данного события (то есть ОбработкаВыбора) нельзя использовать серверные методы формы с директивой компиляции &НаСервере, а также изменять свойства, которые могут привести к серверному вызову.
Два (синтакс-помощник): В обработчике данного события (то есть ОбработкаВыбора) нельзя использовать серверные методы формы с директивой компиляции &НаСервере, а также изменять свойства, которые могут привести к серверному вызову.
(11) вроде внеконтекстные вызовы допустимы, если на параметры не заругает
ПолеСвязей = Элементы.Документы1СДокумент1С;
&НаСервереБезКонтекста
Процедура Документ1СОбработкаВыбораНаСервере(ВыбранноеЗначение, ПолеСвязей)
НоваяСвязь = Неопределено;
Если ВыбранноеЗначение = Тип("ДокументСсылка.ЗаявкаНаРасходованиеДенежныхСредств") Тогда
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Контрагент", "Запись.Вендор");
ИначеЕсли ВыбранноеЗначение = Тип("ДокументСсылка.ПриобретениеТоваровУслуг") Тогда
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Партнер", "Партнер");
КонецЕсли;
Если НоваяСвязь <> Неопределено Тогда
НовыйМассив = Новый Массив;
НовыйМассив.Добавить(НоваяСвязь);
НовыеСвязи = Новый ФиксированныйМассив(НовыйМассив);
ПолеСвязей.СвязиПараметровВыбора = НовыеСвязи;
КонецЕсли;
КонецПроцедуры Показать
(11)
Вот это "несущая" мысль.
В синтаксис-помощнике это сказано, а при сохранении/обновлении ошибки нет.
Я часто бегаю в синтаксис-помощник, а здесь вот факап получился.
В обработчике данного события (то есть ОбработкаВыбора) нельзя использовать серверные методы формы с директивой компиляции &НаСервере, а также изменять свойства, которые могут привести к серверному вызову.
Вот это "несущая" мысль.
В синтаксис-помощнике это сказано, а при сохранении/обновлении ошибки нет.
Я часто бегаю в синтаксис-помощник, а здесь вот факап получился.
&НаКлиенте
Процедура Документ1СОбработкаВыбора(Элемент, ВыбранноеЗначение, ДополнительныеДанные, СтандартнаяОбработка)
Документ1СОбработкаВыбораНаСервере(ВыбранноеЗначение);
ОбновитьОтображениеДанных();
КонецПроцедурыможет так или обновляем только поле с типом, если работает общее обновление
ОбновитьОтображениеДанных(Элементы.Документы1СДокумент1С);
в УТ(ЕРП, КА) есть метод
он вызывается в обработчиках начало выбора
Например Справочник.КлассификаторОрганизацийСАТУРН.ФормаЭлемента
Вроде, вообще ничего не нужно детализировать. Событие на элемент пришить и все.
Метод сам распарсит типы.
СобытияФормИСКлиент.ПолеСоставногоТипаОбработкаВыбора(Форма, Элемент, ВыбранноеЗначение, СтандартнаяОбработка)он вызывается в обработчиках начало выбора
Например Справочник.КлассификаторОрганизацийСАТУРН.ФормаЭлемента
&НаКлиенте
Процедура ОрганизацияКонтрагентСтрокойОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ПолеСоставногоТипаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПолеСоставногоТипаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СобытияФормИСКлиент.ПолеСоставногоТипаОбработкаВыбора(ЭтотОбъект, Элемент, ВыбранноеЗначение, СтандартнаяОбработка);
КонецПроцедуры
ПоказатьВроде, вообще ничего не нужно детализировать. Событие на элемент пришить и все.
Метод сам распарсит типы.
Резюме такое:
Эта задача нерешаемая.
С одной стороны, параметры связи можно установить тольк на сервере (тут как раз ругается и не дает иначе сделать), а с другой стороны, ОбработкаВыбора возможна только на клиенте.
Поэтому пришлось пилить отдельную форму (некий аналог формы выбора), т.к. типов документов может быть много, по некоторым хитрые связи, по некоторым нормальные, а по некоторым их нет вообще.
Зато клиент доволен, уже потестировали)
Еще раз всем спасибо!
Я бы еще долго без вас ковырялась.
Эта задача нерешаемая.
С одной стороны, параметры связи можно установить тольк на сервере (тут как раз ругается и не дает иначе сделать), а с другой стороны, ОбработкаВыбора возможна только на клиенте.
Поэтому пришлось пилить отдельную форму (некий аналог формы выбора), т.к. типов документов может быть много, по некоторым хитрые связи, по некоторым нормальные, а по некоторым их нет вообще.
Зато клиент доволен, уже потестировали)
Еще раз всем спасибо!
Я бы еще долго без вас ковырялась.
(17) Почему нерешаемая? Во-первых, еще раз: связи можно устанавливать ПриИзменении - кто запрещает-то?
Во-вторых - в обработке выбора можно вызвать метод Оповестить и в обработке оповещения устанавливать связи с вызовом сервера.
Но нет, проще запилить отдельную форму.
Во-вторых - в обработке выбора можно вызвать метод Оповестить и в обработке оповещения устанавливать связи с вызовом сервера.
Но нет, проще запилить отдельную форму.
(18) ПриИзменении не подходит, так как мне надо узнать, какой тип документа выбрал пользователь и после этого установить связи параметров выбора.
А вот метод Оповестить - а ведь это мысль! Спасибо большое!
Запилила отдельную форму, ибо надо было вотпрямщас, а опыта, как видимо, не много, до оповещения не додумалась)
А вот метод Оповестить - а ведь это мысль! Спасибо большое!
Запилила отдельную форму, ибо надо было вотпрямщас, а опыта, как видимо, не много, до оповещения не додумалась)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот
