Не попадаю в ОбработкаВыбора

1. golovinaea 20.12.16 16:30 Сейчас в теме
Коллеги, добрый день!
Платформа 8.3.6.2237, конфигурация Управление торговлей 11.1.10.103.
Подозреваю что ошибка глупая и ответ на поверхности, но все таки.
Необходимо выбрать из общего списка заказ на сборку, чтобы отредактировать его. Делаю следующим образом.

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


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


В ОбработкаВыбора не попадаю. Скажите пожалуйста в чем проблема?
По теме из базы знаний
Найденные решения
28. spacecraft 21.12.16 10:09 Сейчас в теме
(27) правильно в данном случае это открытие формы. Логика обработки на форму завязана.
В сведениях о обработке:
ДобавитьКоманду(ТаблицаКоманд,
    //"Заполнить по док. отчет производства за смену (мн.подбор)",
	"Отправить в заказ на сборку",
    "Отправить в заказ на сборку",
    //"ВызовКлиентскогоМетода",
    "ОткрытиеФормы",
    Истина);

Далее в форме ПриСозданииНаСервере получаете данные из заказа.
ПриОткрытии вызываете ОткрытьФорму.
И уже в обработчике ОбработкаВыбора получаете и обрабатываете.
Единственно, будет показана форма обработки. Ну, ее можно как-то получше оформить :)
olexi2012; +1 Ответить
30. Denis_CFO 48 21.12.16 10:14 Сейчас в теме
(1) Вот так работает?
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
	
	ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Истина, Истина);
	Оповещение1 = Новый ОписаниеОповещения("ОбработкаВыбора",ЭтаФорма);
    ОткрытьФорму("Документ.ЗаказНаСборку.ФормаВыбора", ПараметрыФормы, ЭтаФорма,,,,Оповещение1);
	
КонецПроцедуры
Показать

ОбработкаВыбора() Экспорт ///это обязательно
olexi2012; +1 Ответить
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 20.12.16 16:45 Сейчас в теме
(1) этот код где располагается? Модуль формы обработки, документа?
Процедуру ОбработкаВыбора откуда-то скопировали?
Если указали ОткрытьФорму("Документ.ЗаказНаСборку.ФормаВыбора", ПараметрыФормы, ЭтаФорма) , то обработчик выбора должен быть всей формы.
А у нее другие параметры. Приведенный обработчик больше подходит для обработки выбора элемента формы.
golovinaea; +1 Ответить
6. golovinaea 20.12.16 16:51 Сейчас в теме
(3) код в модуле формы. Насчет обработки вы кстати правы. Поправила на
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	Сообщить(ВыбранноеЗначение);
КонецПроцедуры

но результат не изменился.
8. spacecraft 20.12.16 16:53 Сейчас в теме
(6) поправили вручную, а указать в обработчиках формы, что событие ОбработкаВыбора использует эту процедуру?
9. golovinaea 20.12.16 16:54 Сейчас в теме
(8) конечно тоже сделала.
5. Alexey_ 26 20.12.16 16:46 Сейчас в теме
(1)Процедура ОбработкаВыбора назначена в качестве обработчика?
7. golovinaea 20.12.16 16:52 Сейчас в теме
10. Alexey_ 26 20.12.16 16:54 Сейчас в теме
11. golovinaea 20.12.16 17:00 Сейчас в теме
(10)
Прикрепленные файлы:
tux; RusskyPhX; +2 Ответить
12. spacecraft 20.12.16 17:07 Сейчас в теме
(11) судя по скрину все верно. Единственное замечание, Сообщить(ВыбранноеЗначение) всегда покажет строку "Массив". Но работать должно.
Если это внешняя обработка... после редактирования и сохранения... запущенную обработку в режиме предприятия закрывали и открывали снова? Иначе будет отрабатывать старый код.
13. golovinaea 20.12.16 17:11 Сейчас в теме
(12) да, конечно перезакрывала. Вот сижу голову ломаю. Причем проблема не в отображении массива значений, он никакое Сообщить() не отрабатывает.
14. spacecraft 20.12.16 17:16 Сейчас в теме
(13) а форма выбора хоть открывается?
15. golovinaea 20.12.16 17:16 Сейчас в теме
(14)да, открывается, щелкаю по строке дважды (или кнопку Выбрать), закрывается и ... ничего.
16. spacecraft 20.12.16 17:17 Сейчас в теме
(15) прикладывайте обработку
18. spacecraft 20.12.16 17:29 Сейчас в теме
(17) это же не просто внешняя обработка, а подключаемая через ДополнительныеОтчетыИОбработки.
Так. и где не работает? Где проверяете?
23. Xershi 1479 21.12.16 09:44 Сейчас в теме
(11) раз инициализацию прошло, то еще должно быть оповещение о выборе, чтобы в нее попало!
24. Alexey_ 26 21.12.16 09:46 Сейчас в теме
(23)платформа сама оповещает владельца
22. Xershi 1479 21.12.16 09:42 Сейчас в теме
(1) а вы в форме инициализировали процедуру или скопировали?
30. Denis_CFO 48 21.12.16 10:14 Сейчас в теме
(1) Вот так работает?
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
	
	ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Истина, Истина);
	Оповещение1 = Новый ОписаниеОповещения("ОбработкаВыбора",ЭтаФорма);
    ОткрытьФорму("Документ.ЗаказНаСборку.ФормаВыбора", ПараметрыФормы, ЭтаФорма,,,,Оповещение1);
	
КонецПроцедуры
Показать

ОбработкаВыбора() Экспорт ///это обязательно
olexi2012; +1 Ответить
31. golovinaea 21.12.16 10:23 Сейчас в теме
(30) работает. Просит ОбработкаВыбора сделать экспортным методом. И обработку выбора отрабатывает 2 раза.
32. Denis_CFO 48 21.12.16 10:37 Сейчас в теме
(31)
И обработку выбора отрабатывает 2 раза
Отвяжите событие "ОбработкаВыбора" на форме.
golovinaea; +1 Ответить
34. golovinaea 21.12.16 10:59 Сейчас в теме
(32), (33) всем огромнейшее спасибо! Все заработало как надо!
33. spacecraft 21.12.16 10:40 Сейчас в теме
(31) это работает, то не так как думаете. Это две разные формы открываются.
Сначала открывается форма командой заполнения. отрабатывает и закрывается.
Потом Оповещением открывается новая форма и отрабатывает.
Почему отрабатывает 2 раза, потому что отрабатывает оповещение и стандартный обработчик ОбработкаВыбора (на момент этого обработчика форма снова доступна).
Можно в ОписаниеОповещения указать любую свою процедуру, и отключить из свойств формы обработчик ОбработкаВыбора. Тогда стандартный обработчик не будет вызываться.
Но учтите, что хранить в этой форме промежуточные данные нельзя, они будут теряться (формы на самом деле разные). Если этого не требуется, то можно использовать этот способ.
golovinaea; +1 Ответить
2. olegmedvedev 65 20.12.16 16:44 Сейчас в теме
ФормаВыбора = ОткрытьФорму("Документ.ЗаказНаСборку.Форма.ФормаВыбора", , Элемент);

так пробовали?
4. golovinaea 20.12.16 16:45 Сейчас в теме
(2) переменная Элемент не определена
19. spacecraft 20.12.16 17:32 Сейчас в теме
Если проверяете через ВыборИзСписка (тот что привязан к элементу формы), то и не будет. Нужно тогда этот обработчик использовать и переопределять поведение.

Сама же функция через ВыполнитьКоманду подключаемой внешней обработки - работает.

Правда не понятно требование МножественныйВыбор. На форме только ссылка на документ. Там не может храниться несколько ссылок.

Я кажется догадываюсь, что смутило в работе обработки.
Подключили ее как внешнюю. При ее использовании Сообщить не показывается? Так и не будет, хотя и отрабатывает. Просто форма (как и сама обработка) сразу же закрывается после отработки и сообщение не успевает показаться, так как привязана к той (уже закрытой) форме. Вот сообщения и не видно. Но ОбработкаВыбора отрабатывает нормально.
20. golovinaea 21.12.16 09:24 Сейчас в теме
(19) Смотрите, предположим, что ОбработкаВыбора отрабатывает. Дописала все, что требовалось.
В процедуру ПолучитьДанныеИзЗаказаКлиента попадаем, табличная часть обработки заполняется. А вот в процедуру ИзменитьЗаказНаСборку не попадаем. Я не понимаю...

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

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

&НаСервере
Процедура ИзменитьЗаказНаСборку (ЗаказНаСборку)
	
	ОбъектЗаказНаСборку = ЗаказНаСборку.ПолучитьОбъект();
	Для Каждого Стр Из Объект.СтрокиЗаказаКлиента Цикл
		СтрокаТЧ = ОбъектЗаказНаСборку.Продукция.Добавить();
		СтрокаТЧ.Номенклатура = Стр.Номенклатура;
		СтрокаТЧ.Количество = Стр.Количество;
		СтрокаТЧ.КоличествоУпаковок = Стр.КоличествоУпаковок;
		СтрокаТЧ.НомерЗаказа = Стр.НомерЗаказа;
	КонецЦикла;
	ОбъектЗаказНаСборку.Записать();	
	
	Сообщить("ИзменитьЗаказНаСборку");
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	//Сообщить(ВыбранноеЗначение);
	ИзменитьЗаказНаСборку(ВыбранноеЗначение);
	
КонецПроцедуры
Показать
21. Alexey_ 26 21.12.16 09:41 Сейчас в теме
(20)
предположим, что ОбработкаВыбора отрабатывает

что значит "предположим"? заходит туда отладчик или нет?
25. golovinaea 21.12.16 09:57 Сейчас в теме
26. spacecraft 21.12.16 09:58 Сейчас в теме
(20) тут проблема в том, что используете подключаемую внешнюю обработку заполнения с вызовом клиентского метода. Как хотите не сработает.
Смотрите, при запуске обработки платформа запускает клиентскую процедуру ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив).
Все что в ней отработает и она завершится(закроется). Все. Больше ничего в ней не будет работать.
Тут или переделать на открытие формы, или открывать модально. Последнее может не поддерживаться конфигурацией.
27. golovinaea 21.12.16 10:01 Сейчас в теме
(26) с открытием модально сделала, все работает. Выдается сообщение, что использование модальных окон в данном режиме запрещено, поэтому решила попробовать сделать "правильно".
28. spacecraft 21.12.16 10:09 Сейчас в теме
(27) правильно в данном случае это открытие формы. Логика обработки на форму завязана.
В сведениях о обработке:
ДобавитьКоманду(ТаблицаКоманд,
    //"Заполнить по док. отчет производства за смену (мн.подбор)",
	"Отправить в заказ на сборку",
    "Отправить в заказ на сборку",
    //"ВызовКлиентскогоМетода",
    "ОткрытиеФормы",
    Истина);

Далее в форме ПриСозданииНаСервере получаете данные из заказа.
ПриОткрытии вызываете ОткрытьФорму.
И уже в обработчике ОбработкаВыбора получаете и обрабатываете.
Единственно, будет показана форма обработки. Ну, ее можно как-то получше оформить :)
olexi2012; +1 Ответить
29. golovinaea 21.12.16 10:12 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот