Версия для печати темы (https://pro1c.org.ua/index.php?s=74d791fa19c4905157a5b5f4c990d258&showtopic=56588)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Как открыть форму элемента справочника Контрагенты из формы расходной накладной в 1С 7.70.003 торговля склад для Украины?

Автор: ZUBR 24.01.20, 19:48

Здравствуйте!!!
Вопрос следующий. У меня на форме расходной накладной есть флажок Проблема. Для этого флажка в модуле формы создана процедура Проблема(). В этой процедуре я хочу написать код программы для открытия формы элемента справочника Контрагенты, который внесен в документ РасходнаяНакладная. То есть, если в поле Контрагент РасходнойНакладной записан Иваненко, и в документе ставится галочка Проблема (флажок), то тогда автоматически должен открыться справочник Контрагенты , конкретно элемент с наименованием Иваненко. Для того, чтобы в примечании элемента справочника пользователь прописал, в чем проблема этого покупателя или поставщика. Для этого в процедуре Проблема() я прописал следующий код:

Процедура Проблема()                                   
     Спр = СоздатьОбъект("Справочник.Контрагенты");
     Спр.ВыбратьЭлементы();
      Спр.НайтиПоНаименованию(Контрагент,0,1);
      Сообщить(Спр.ТекущийЭлемент());
    ОткрытьФорму(Спр.ТекущийЭлемент());
КонецПроцедуры


Но при выполнении окно с искомым элементом справочника не появляется, а появляется сообщение об ошибке:
" ОткрытьФорму(Спр.ТекущийЭлемент());
{Документ.РасходнаяНакладная.Форма.Модуль(170)}: Открытие окна в данном режиме недоступно!"

Прошу подсказать, в чем ошибка?
Строка
Сообщить(Спр.ТекущийЭлемент());
вспомогательная. Я ее потом уберу. Кстати, сообщение тоже никакое не появляется. Спасибо!

Автор: andrew76 25.01.20, 5:12

ZUBR @ Вчера, 22:48 * ,

Доброе утро !

Если реквизит документа Расходная Накладная Контрагент имеет тип Справочник.Контрагенты,тогда
код должен быть примерно таким :

Процедура Проблема()                                   
     Спр = СоздатьОбъект("Справочник.Контрагенты");
      Спр.Наименованию(Контрагент.Наименование,0,1); //
      Сообщить(Спр.ТекущийЭлемент());
    ОткрытьФорму(Спр.ТекущийЭлемент());
КонецПроцедуры

Автор: andrew76 25.01.20, 8:54

andrew76 @ Сегодня, 8:12 * ,

Извиняюсь,небольшая поправочка в коде:

Процедура Проблема()                                   
    Спр = СоздатьОбъект("Справочник.Контрагенты");
    Спр.НайтиПоНаименованию(Контрагент.Наименование,0,1); //
    Сообщить(Спр.ТекущийЭлемент());
    ОткрытьФорму(Спр.ТекущийЭлемент());
КонецПроцедуры

Автор: ZUBR 25.01.20, 18:45

andrew76 @ Сегодня, 8:54 * ,
Нет, не работает. Когда я устанавливаю флажок на форме РасходнойНакладной "Проблема", и соответственно запускается процедура Проблема, то выскакивает то же сообщение, что и раньше:

" ОткрытьФорму(Спр.ТекущийЭлемент());
{Документ.РасходнаяНакладная.Форма.Модуль(170)}: Открытие окна в данном режиме недоступно!"

Реквизит Контрагент имеет тип Справочник.Контрагенты, да.

Автор: andrew76 26.01.20, 5:14

ZUBR @ Вчера, 21:45 * ,

А команда Сообщить() выдает пустую строку ?

Если нижеуказанный код повесить на кнопку ,которая будет расположена на форме
Расходной Накладной,то все должно работать ( у меня по крайней мере работает).
Если вешать этот код на обработчик флажка,то ошибка будет вылетать.
Поэтому могу предложить другой вариант открытия формы.

Процедура Проблема()                                   
    Спр = СоздатьОбъект("Справочник.Контрагенты");
    Спр.НайтиПоНаименованию(Контрагент.Наименование,0,1); //
    Сообщить(Спр.ТекущийЭлемент());
    ОткрытьФорму(Спр.ТекущийЭлемент());
КонецПроцедуры


Отрыть форму модально: // в этом варианте все должно работать

Процедура Проблема()                                   
    Спр = СоздатьОбъект("Справочник.Контрагенты");
    Спр.НайтиПоНаименованию(Контрагент.Наименование,0,1); //
    Сообщить(Спр.ТекущийЭлемент());
    ОткрытьФормуМодально(Спр.ТекущийЭлемент());
КонецПроцедуры

Автор: ZUBR 26.01.20, 22:57

andrew76 @ Сегодня, 5:14 * , спасибо! Все заработало. Правда, не совсем понятно, чем отличается ОткрытьФормуМодально от просто ОткрытьФорму

Автор: andrew76 27.01.20, 2:52

ZUBR @ Сегодня, 1:57 * ,

Модальное окно – окно, блокирующее весь интерфейс приложения, при этом исполнение кода останавливается до момента получения ответа пользователя.

Автор: andrew76 27.01.20, 7:14

ZUBR @ 24.01.20, 22:48 * ,

После нажатия на флажок,вызывается у Вас форма справочника,после сохранения в ней информации , форма закрывается нормально ?

Автор: mut 27.01.20, 16:15

А почему не использовать сам реквизит из накладной, зачем поиск по наименованию?

Спр.НайтиЭлемент(Контрагент);

Автор: andrew76 27.01.20, 16:22

mut @ Сегодня, 19:15 * ,

можно и так.

Автор: takefive 28.01.20, 10:45

Зачем вообще поиск, когде есть ссылка?

ОткрытьФорму(Контрагент)

Автор: ZUBR 28.01.20, 18:46

andrew76 @ Вчера, 7:14 * ,
Вызываемая форма закрывается нормально

takefive @ Сегодня, 10:45 * ,
Попробую как вы предложили. О результатах сообщу. Спасибо!

Автор: ZUBR 31.01.20, 22:23

takefive @ 28.01.20, 10:45 * ,
без поиска и создания объекта не обойтись, потому что кроме открытия формы я из расходной накладной в элемент справочника переношу значение флажка Проблема:

Спр.Проблема = Проблема;

А открыть форму справочника мне нужно для того, чтобы при установлении флажка Проблема в комментарии элемента справочника контрагента вносилась запись, в чем именно состояла проблема. Например "Клиент кричал пасть порву" crazy.gif

Автор: takefive 04.02.20, 11:04

Позиционироваться также лучше по ссылке

Если Спр.НайтиЭлемент(Контрагент) = 1 Тогда

т.с. больше шансов... smile.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua