8.х Модуль объекта

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Бухгалтерский чайник, 22 мар 2010.

  1. TopicStarter Overlay
    Бухгалтерский чайник
    Offline

    Бухгалтерский чайник

    Регистрация:
    23 дек 2009
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Понимаю что глупо ради такого вопроса создавать тему. Но всё же. Господа хоршие. Как обратиться к Элементам формы из Модуля Объекта.
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    По задаче ответил в прошлой теме.

    А по факту - это моветон.
    Ибо сделать можно, но вот это категорически неприемлемо.
    ЗЫ. В 8.2 такая возможность есть, т.к. там используется другая модель взаимодействия.
  3. TopicStarter Overlay
    Бухгалтерский чайник
    Offline

    Бухгалтерский чайник

    Регистрация:
    23 дек 2009
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    экспортная переменная уровня модуля - проних я знаю. Но это мой бич уже очнь долгое время. Ни как не могу понять как с ними работать надо.
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    и чего сложного в модульной экспортной переменной?

    Объявил её до процедур в теле модуля объекта и потом обращайся к ней из любого места в пределах объекта.....
  5. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Вот так
    Код:
    ФормаДокумента = ЭтотОбъект.ПолучитьФорму("Тут имя формы");
    Если ФормаДокумента = Неопределено Тогда
    Возврат;
    Иначе
    ФормаДокумента.ЭлементыФормы.<имя элемента формы>
    // и т.д.
    КонецЕсли;
    
  6. Gulnaz
    Offline

    Gulnaz Опытный в 1С

    Регистрация:
    20 сен 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте! У меня такая же необходимость в заполнении элемента формы через модуль объекта. Один документ заполняется вводом на основании.
    В основном реквизиты документа заполняются через стандартную обработку заполнения. Но реквизит Контрагент является реквизитом формы и никак не заполняется.
    Часть кода по заполнению реквизита формы:

    Код:
    Форма = ЭтотОбъект.ПолучитьФорму("ФормаЭлемента");
    Если Форма = Неопределено Тогда
    Возврат;
    Иначе
    
    Форма.ЭлементыФормы.Контрагент.Значение= ДанныеЗаполнения.Ссылка.Победитель.Ссылка;
    Сообщить(Форма.ЭлементыФормы.Контрагент.Значение);
    КонецЕсли;
    
    Что не так делаю? В окне сообщений видно как будто элемент заполнен.
  7. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а где не видно?

    если вы потом форму закрываете, то реквизит формы и не сохранится нигде
  8. Gulnaz
    Offline

    Gulnaz Опытный в 1С

    Регистрация:
    20 сен 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Все делается в процедуре:

    Код:
    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ОИТ_ТоргиЛотНаЗакупкуТМЦ") Тогда 
    
    Форма = ЭтотОбъект.ПолучитьФорму("ФормаЭлемента");
    Если Форма = Неопределено Тогда
    Возврат;
    Иначе
    
    Форма.ЭлементыФормы.Контрагент.Значение= ДанныеЗаполнения.Ссылка.Победитель.Ссылка;
    сооБЩИТЬ(Форма.ЭлементыФормы.Контрагент.Значение);
    КонецЕсли; 
    НачальникПодразделения = ДанныеЗаполнения.Ссылка.ФИО.Ссылка;
    Для Каждого ТекСтрокаПереченьТМЦ Из ДанныеЗаполнения.ПереченьТМЦ Цикл
    НоваяСтрока = Товары.Добавить();
    НоваяСтрока.ПериодПоставки =  ДанныеЗаполнения.Ссылка.СрокиВыполнения.Ссылка;
    НоваяСтрока.ЕдиницаИзмерения = ТекСтрокаПереченьТМЦ.ЕдиницаИзмерения;
    НоваяСтрока.Номенклатура = ТекСтрокаПереченьТМЦ.Наименование;
    НоваяСтрока.ЦенаБезНДС = ТекСтрокаПереченьТМЦ.ЦенаПоИтогамКонкурса;
    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры
    Форма не закрывается. Создается новый документ с данными и форма открыта.
  9. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а Контрагент разве не реквизит документа?
  10. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Реквизиты формы заполняйте не в модуле объекта, а в модуле формы в обработчике события "При открытии".
  11. Gulnaz
    Offline

    Gulnaz Опытный в 1С

    Регистрация:
    20 сен 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Да, Контрагент реквизитом документа не является. Реквизит- НаименованиеКонтрагента, куда при записи сохраняется полное наименование контрагента. Реквизиту формы присваивается требуемое значение, но почему не отображается? Функция
    Код:
    Сообщить(Форма.ЭлементыФормы.Контрагент.Значение);
    
    выдает заполненное значение ревизита.

    я пишу процедуру заполнения документа на основании другого документа. Как в модуле формы заполнить данные из другого документа?
  12. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    посмотрите в сторону обработчика ОбработкаЗаполнения

    З.Ы. а разве реквизит формы может хранить в себе значение? разве при закрытии не сбрасывается?
  13. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Потому что это разные формы - ту, которую Вы получаете
    Код:
    Форма = ЭтотОбъект.ПолучитьФорму("ФормаЭлемента");
    и та, которая в результате открывается (стандартно открывается при вводе на основании).

    Можете проверить. Напишите
    Код:
    Форма.Открыть();
    У Вас дополнительно откроется форма с заполненным реквизитом.


    При вводе на основании в свойстве формы "ПараметрОснование" (это расширение формы документа) будет находиться ссылка на документ-основание. Оттуда и возьмите значение.

    Код:
    Если ПараметрОснование <> Неопределено Тогда
    Если ТипЗнч(ПараметрОснование) = Тип("ДокументСсылка.ОИТ_ТоргиЛотНаЗакупкуТМЦ") Тогда
    Контрагент = ПараметрОснование.Победитель;
    КонецЕсли;
    КонецЕсли;
    
  14. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Верно, реквизиты формы значения не хранят. Поэтому, Gulnaz, если Вам надо, чтобы контрагент сохранялся в базе, тогда сделайте его реквизитом объекта (самого документа), а не реквизитом формы, и заполняйте его в обработке заполнения.
    Если значение хранить не надо, тогда пусть это будет реквизит формы. Заполняйте его при открытии формы по приведенному примеру (используя ПараметрОснование).

Поделиться этой страницей