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