Вызов окна выбора вида номенклатуры

1. Parud 04.01.24 00:48 Сейчас в теме
Добрый день!
Проблема в следующем. Выгрузив Номенклатура.xml в дерево значений, заношу номенклатуру в справочник. Не все ВидыНоменклатуры совпадают с имеющимися в справочнике. Пока юзаю ФормуВыбора справочника ВидыНоменклатуры.
В процедуре (&НаСервере), после проверки Вида на соответствие
Если НомЭ.ВидНоменклатуры = Справочники.ВидыНоменклатуры.ПустаяСсылка() Тогда
					 ВыборВидаНом(СтрокаНом.ВидНоменклатуры);
   КонецЕсли;

, вызываю функцию для окна Выбора и передаю в виде текста ВидНоменклатуры

Функция ВыборВидаНом(Строка)
	 ФормаВыб = Справочники.ВидыНоменклатуры.ПолучитьФорму("ФормаВыбора");
	 ФормаВыб.Заголовок = "Выберите замену " + Строка;
	 ФормаВыб.Открыть();
КонецФункции


Такой формат работает только в режиме толстого клиента (да, пока вываливается кучка окошек и не обрабатывается результат выбора, но это на следующем шаге).
Если указываю для функции (&На клиенте), то говорит, что переменная ФормаВыб не определенна, что понятно (на клиенте не заполнить переменную).
Если переношу эту строку в процедуру, а потом передаю в функцию полученную форму, то не могу указать в функции эту переменную.
Если в обычном режиме запускаю (не толстый), и без указания для функции НаКлиенте, то Интерактивные операции недоступны.
Уже мозги закипают, ткните пожалуйста, что не так?
Тест на 8.3.18 и УТ 11.4.12
По теме из базы знаний
Найденные решения
6. dhurricane 06.01.24 01:43 Сейчас в теме
(5) Функция работы с диалогом "ВыборВидаНом" однозначно должна быть с диррективой "НаКлиенте". Т.к. Вы работаете с управляемыми формами, Вам теперь необходимо спроектировать свою обработку таким образом, чтобы диалоги с пользователем были на клиенте (в процедурах и функциях с диррективой "НаКлиенте"), а работа с объектами базы данных - на сервере. Инициатор вызова сервера всегда клиент.

В самом простом случае - обходить дерево на клиенте, открывать диалоги (формы выбора) там же, а если нужен доступ к объектам в базе, вызывать необходимые серверные процедуры и функции.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. spacecraft 06.01.24 06:21 Сейчас в теме
(1) посмотрите как уже сделано в типовой.
Пример: обработка ЗагрузкаЦенПоставщикаИзВнешнихФайлов.
Делаете сопоставление загружаемы данных с элементами справочника. Несопоставленные данные выводите пользователю для ручного сопоставления.
9. Parud 06.01.24 15:34 Сейчас в теме
(7)Спасибо за подсказку!
Примерно понял алгоритм работы данной обработки.
Сложно разбирать типовые коды, уж очень 1с-ники любят размазать код:(
2. dhurricane 05.01.24 15:27 Сейчас в теме
На клиенте форма выбора открывается так:
ОткрытьФорму("Справочник.ВидыНоменклатуры.ФормаВыбора", , ЭтотОбъект);

Третьим параметром здесь указывается форма-владелец открываемого диалога выбора вида номенклатуры. Не знаю, как именно Вы планируете в итоге построить взаимодействие с пользователем, но скорее всего Вам потребуется реализовать еще и обработчик выбора значения из формы. Это может быть обработчик "ОбработкаВыбора" как для формы, если указали "ЭтотОбъект" как в примере выше, так и например обработчик самого дерева значений, если скажем вместо "ЭтотОбъект" указать таблицу формы (Элементы.ИмяДереваЗначений).
3. Parud 05.01.24 21:42 Сейчас в теме
(2) Спасибо Вам за ответ, но не помогло решить проблему.
Да, подготовил форму для выбора (с выбором необходимого значения и флажком для последующих совпадений видов номенклатуры с найденным(чтоб не переспрашивал при таком же виде). Но она также не заработала, поэтому решил вызывать типовую форму (вдруг я в форме накосячил).
Насколько смог уяснить для себя, что вызов клиента с сервера невозможен. Поэтому если для функции указывать НаКлиенте, то ошибка вызова функции.
Немного уточню информацию по создаваемому коду. Пишу в созданной обработке, в модуле формы.
Изменять что либо в типовой конфигурации не хочу.
Пишу для себя, пытаюсь разобраться по ходу пьесы.
4. dhurricane 06.01.24 00:12 Сейчас в теме
(3)
но не помогло решить проблему.
А какую именно проблему-то? Пока Вы только обозначили, что не знаете как открыть форму выбора. Я подсказал. Разве форма не открылась? Другой вопрос, что с ней дальше делать, но для этого нужно сформулировать следующую проблему. Я же ее не знаю.

вызов клиента с сервера невозможен. Поэтому если для функции указывать НаКлиенте, то ошибка вызова функции.
Да, с сервера вызов клиента не возможен.
5. Parud 06.01.24 00:43 Сейчас в теме
(4)
(4)
А какую именно проблему-то?

Прошу прощения за косноязычность, но проблема в том, что при запуске обработки в режиме отладки (кроме толстого клиента) вываливаются ошибки, которые не дают возможности выбора ВидаНоменклатуры.
Указывал в старт-топике, что могу запустить в толстом клиенте, но при этом "куча окошек" - это как раз вываливаются окна выбора ВидаНоменклатуры для каждого ненайденного вида.
Разве форма не открылась?

Если указываю для функции операнд НаКлиенте
то синтакс говорит
Процедура или функция с указанным именем не определена (ВыборВидаНом)
<<?>>ВыборВидаНом(СтрокаНом.ВидНоменклатуры); (Проверка: Сервер)


Если без операнда, то
Процедура или функция с указанным именем не определена (ОткрытьФорму)
<<?>>ОткрытьФорму("Справочник.ВидыНоменклатуры.ФормаВыбора", , ЭтотОбъект); (Проверка: Сервер)
6. dhurricane 06.01.24 01:43 Сейчас в теме
(5) Функция работы с диалогом "ВыборВидаНом" однозначно должна быть с диррективой "НаКлиенте". Т.к. Вы работаете с управляемыми формами, Вам теперь необходимо спроектировать свою обработку таким образом, чтобы диалоги с пользователем были на клиенте (в процедурах и функциях с диррективой "НаКлиенте"), а работа с объектами базы данных - на сервере. Инициатор вызова сервера всегда клиент.

В самом простом случае - обходить дерево на клиенте, открывать диалоги (формы выбора) там же, а если нужен доступ к объектам в базе, вызывать необходимые серверные процедуры и функции.
8. Parud 06.01.24 13:32 Сейчас в теме
(6)
Чтобы не править весь код заново, проще всего строки, у которых неопределённы ВидыНоменклатуры, скидывать в реквизит формы. А потом по кнопке обходить данный реквизит с вызовом создания номенклатуры на сервере? Правильно ли Вас понял?
Спасибо большое за помощь!
Оставьте свое сообщение

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