1. golovinaea 20.12.16 16:30 Сейчас в теме

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

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

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


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


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

Далее в форме ПриСозданииНаСервере получаете данные из заказа.
ПриОткрытии вызываете ОткрытьФорму.
И уже в обработчике ОбработкаВыбора получаете и обрабатываете.
Единственно, будет показана форма обработки. Ну, ее можно как-то получше оформить :)
30. Denis_CFO 9 21.12.16 10:14 Сейчас в теме
(1) Вот так работает?
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
	
	ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Истина, Истина);
	Оповещение1 = Новый ОписаниеОповещения("ОбработкаВыбора",ЭтаФорма);
    ОткрытьФорму("Документ.ЗаказНаСборку.ФормаВыбора", ПараметрыФормы, ЭтаФорма,,,,Оповещение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 Сейчас в теме
5. Alexey_ 23 20.12.16 16:46 Сейчас в теме
(1)Процедура ОбработкаВыбора назначена в качестве обработчика?
7. golovinaea 20.12.16 16:52 Сейчас в теме
10. Alexey_ 23 20.12.16 16:54 Сейчас в теме
11. golovinaea 20.12.16 17:00 Сейчас в теме
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 402 21.12.16 09:44 Сейчас в теме
(11) раз инициализацию прошло, то еще должно быть оповещение о выборе, чтобы в нее попало!
24. Alexey_ 23 21.12.16 09:46 Сейчас в теме
(23)платформа сама оповещает владельца
22. Xershi 402 21.12.16 09:42 Сейчас в теме
(1) а вы в форме инициализировали процедуру или скопировали?
30. Denis_CFO 9 21.12.16 10:14 Сейчас в теме
(1) Вот так работает?
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
	
	ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Истина, Истина);
	Оповещение1 = Новый ОписаниеОповещения("ОбработкаВыбора",ЭтаФорма);
    ОткрытьФорму("Документ.ЗаказНаСборку.ФормаВыбора", ПараметрыФормы, ЭтаФорма,,,,Оповещение1);
	
КонецПроцедуры
Показать

ОбработкаВыбора() Экспорт ///это обязательно
31. golovinaea 21.12.16 10:23 Сейчас в теме
(30) работает. Просит ОбработкаВыбора сделать экспортным методом. И обработку выбора отрабатывает 2 раза.
32. Denis_CFO 9 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. olgerd666 42 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_ 23 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) правильно в данном случае это открытие формы. Логика обработки на форму завязана.
В сведениях о обработке:
ДобавитьКоманду(ТаблицаКоманд,
    //"Заполнить по док. отчет производства за смену (мн.подбор)",
	"Отправить в заказ на сборку",
    "Отправить в заказ на сборку",
    //"ВызовКлиентскогоМетода",
    "ОткрытиеФормы",
    Истина);

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

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день

Консультант-аналитик 1С (ЗУП)
Санкт-Петербург
Полный день