Как обратиться к реквизиту другой формы 1с

Обращения к реквизитам из одной формы к другой

Я
   anisa

07.09.09 — 09:23

Например в документе сделала кнопку скидка- вызываю форму, ввожу скидку, затем мне нужно обратиться к сумме документа, т.е к реквизиту другой формы…что-то не получается…обратиться..к этому элементу

  

Партнерская программа EFSOL Oblako

   SuperMario

1 — 07.09.09 — 09:32

(0) тебе к владельцу формы.

   anisa

2 — 07.09.09 — 09:38

Да получается к владельцу..

   SuperMario

3 — 07.09.09 — 09:40

Форма (Form)

ВладелецФормы (FormOwner)

Использование:

Чтение и запись.

Описание:

Тип: Форма, Элемент управления. Содержит форму или элемент управления, который является владельцем данной формы. При помощи этого свойства устанавливается связь между формой и владельцем формы. Например, форма элемента подчиненного справочника может иметь в качестве владельца форму элемента справочника владельца, из которой она была открыта. При открытии по текущей строке табличного поля в качестве владельца устанавливается табличное поле.

Недоступно на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.

Примечание:

Если у формы есть владелец, то в свойстве ЗакрыватьПриЗакрытииВладельца устанавливается необходимость закрытия данной формы при закрытии формы-владельца.

См. также:

Форма, свойство ЗакрыватьПриЗакрытииВладельца

   anisa

4 — 07.09.09 — 09:41

Процедура OkНажатие(Элемент)

   
   Если СкидкаПроцент>0 Тогда

        СуммаДок1=Документы.СметаПоБлюдам.ПолучитьЗначение(«СуммаДок»);  

        Скидка1=СуммаДок1*СкидкаПроцент/100;

   КонецЕсли;

  Документы.СметаПоБлюдам.СуммаДок=Скидка1;

   
КонецПроцедуры

Вот что я написала!!!! Что неправильно? обращение есть но говорит переменная не определена

   Mitriy

5 — 07.09.09 — 09:43

ужас…

   anisa

6 — 07.09.09 — 09:43

Не поняяятно….

   Mitriy

7 — 07.09.09 — 09:44

(6) угу… мне тоже…

   anisa

8 — 07.09.09 — 09:44

не умею к реквизитам обращаться…иначе бы не спрашивала..ичего здесь

   Mitriy

9 — 07.09.09 — 09:45

(8) к реквизитам обращаться очень просто… достаточно знать, как они обзываются…

   Heavius

10 — 07.09.09 — 09:46

я счтитаю, что прикрутить ВвестиЧисло() будет проще

   Маркетолог

11 — 07.09.09 — 09:47

Если это форма документа тогда:

СуммаДок1 = ЭтотОбъект.СуммаДок ;

или даже

СуммаДок1 = СуммаДок ;

   wise

12 — 07.09.09 — 09:48

ЭтаФорма.ВладелецФормы.СуммаДок

   MRAK

13 — 07.09.09 — 09:49

(0) делай реквизит объекта, а не формы, к нему можно обратиться по имени из любой формы этого объекта

   Mitriy

14 — 07.09.09 — 09:50

может быть тебе достаточно чего-то вроде этого?

СуммаДок=СуммаДок — СуммаДок*СкидкаПроцент/100;

   anisa

15 — 07.09.09 — 09:50

и как? )) же..

   Mitriy

16 — 07.09.09 — 09:51

или этого:
СуммаДок=СуммаДок*СкидкаПроцент/100;

   anisa

17 — 07.09.09 — 11:10

Теперь вот что:{ОбщаяФорма.СкидкаПроцент(4)}: Преобразование значения к типу Число не может быть выполнено

       СуммаДок=СуммаДок*СкидкаПроцент/100;

СкидкаПроцент- тип Число

СуммаДок- число- причем считается хорошо)…

  

anisa

18 — 07.09.09 — 11:14

Я вызываю из документа, нажатием кнопки»скидка», форму-скидка- ввожу число и делаю примечание, вводимое число- размер скидки- должен обратиться к форме документа- реквизит СуммаДок, обращение делаю не из формы документа….как можно из формы скидка обратиться к реквизу другой формы….

Форма скидка- объкт- Общие формы..Подскажите пожалуйста…

Kivals

Модератор

us
Offline Offline
Пол: Мужской

WWW

Re: Обратиться к реквизиту другой формы

« Ответ #4 : 01-07-2010 15:32 » 


Код:

Форма=ПолучитьФорму(«НазваниеФормы»);
Форма.Реквизит // получил доступ к ревизиту
// если реквизит — это простое значение, то ему можно просто присвоить что-то
= РеквизитВызывающейФормы;
// Если же это список значений — то и работаешь с ним как со списком
Форма.СписокЗначений.Очистить();

Форма.Открыть();

 0 

   

Распечатать

Форма ~ Как получить данные одной формы, находясь на другой?

Например, на 1 форме есть поле ввода. Как поместить данные этого поля ввода на форму 2, используя внешние обработки?

Самый простой способ — инициировать открытие формы программно и программно получить данные с нее после закрытия:

Код 1C v 8.х

 Форма = Справочники.Номенклатура.ПолучитьФормуСписка();
Форма.ОткрытьМодально();
Сообщить(Форма.ПолеВВода1);

Второй вариант — переподключить обработчик событий:

Код 1C v 8.х

 Форма = Справочники.Номенклатура.ПолучитьФормуСписка();
Форма.ПодключитьОбработчикИзмененияДанных("РеквизитФормы","ПриНоменклатуре");
Форма.ОткрытьМодально();

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

Стандартных способов 1С для других видов обработки событий не существует. Т.к. в 1С все процедуры-обработчики событий должны находиться в модуле этого элемента и никак иначе из внешней обработки процедуру не подключишь.

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Yakovin

Дата регистрации: 19.02.2007
Сообщений: 49

«Всем, здравствуйте! Помогите разобраться с внешней обработкой. Проблема в следующем: внешняя обработка имеет несколько форм, мне необходимо передать данные из одной в другую. Я добавил реквизиты, на основной форме работать с ними получается. Я делаю это т.о.:<br><br>Обработка = ВнешниеОбработки.Создать(«C:РабочаяComCenterComCenter.epf»);<br>Обработка.ТипФормы = «1»;<br><br>Во второй форме я также создаю объект Обработка, но реквизиты пустые. Каким образом обратиться к реквизитам из второй формы.<br><br>Если не использовать реквизиты, то другой вариант — переменные Экспорт, но как к ним обратиться я тоже не знаю.<br>Спасибо за помощь.»

BelikovS

Дата регистрации: 05.03.2007
Сообщений: 1701

«Вы создаете объекты, а надо открывать формы.<br>Обработка = ВнешниеОбработки.Создать(«C:РабочаяComCenterComCenter.epf»);<br>Форма1 = Обработка.ПолучитьФорму («ИмяФормы1»);<br>Форма2 = Обработка.ПолучитьФорму («ИмяФормы2»);<br><br>Если у форм в качестве основного реквизита стоит обработка, то обе формы будут иметь доступ к реквизитам Обработки.<br><br>Или опишите задачу иначе, а то у вас какая-то двойственность в описании: «У обработки 2 формы» и «во второй форме я также создаю объект Обработка»»

Yakovin

Дата регистрации: 19.02.2007
Сообщений: 49

«Ошибка, поле объекта не обнаружено (при попытке заполнить ТаблицуЗначений результатом запроса)<br><br>Процедура ПриОткрытии()<br> Обработка = ВнешниеОбработки.Создать(«C:РабочаяComCenterComCenter.epf»);<br> Форма1 = Обработка.ПолучитьФорму («ФормаОсновная»);<br>КонецПроцедуры<br><br>заполняю так <br>Форма1.ППВТаблЗнач = РезультатЗапроса.Выгрузить();<br><br>Задача такая: на основной форме табличное поле, в него помещаю результат запроса (выборка приходников и выписок за период), двойном щелчке на строке Табличного поля должно открыться окно элементы которого заполняются параметрами платежа (номер, дата, сумма, контрагент, договор и т.п.). Мне это необходимо для правки некоторых позиций платежа и выполнить последующую выгрузку во внешнее приложение (точнее в БД этого приложения). Для изменения результат запроса помещаю в реквизит обработки ППВТаблЗнач, тип ТаблицаЗначений<br><br>Я не понял Вашей фразы: «Если у форм в качестве основного реквизита стоит обработка, то обе формы будут иметь доступ к реквизитам Обработки.» В окне «Свойства» формы практически нет параметров для изменения.<br><br>Спасибо за помощь.<br><br>П.С. Прошу прощения если глупые вопросы, в 1С я плохо разбираюсь. Возникла необходимость связать внешнее приложение с 1С в плане платежей.»

BelikovS

Дата регистрации: 05.03.2007
Сообщений: 1701

«Интересно, ваша Процедура ПриОткрытии() где находиться?<br>Предположим, что у вас ничего нет.<br>1. Создаете внешнюю обработку<br>2. Добавляете ей форму (по умолчанию у неё имя Форма) она же станет основной формой, открываемой при открытии обработки.<br>3. Кидаете на форму таблицу (я так понимаю назвали её ППВТаблЗнач)<br>4. В модуле формы формы в Процедуре ПриОткрытии делаете заполнение таблицы: <br>ППВТаблЗнач = РезультатЗапроса.Выгрузить();<br>ЭлементыФормы.ППВТаблЗнач.СоздатьКолонки();<br>5. Создаете 2-ю форму. По-умолчанию она получит имя Форма1. <br>6. Киньте на Форму1, скажем поле ввода. (имя ПолеВвода1)<br>7. Для таблицы (на Форме) задаете событие Выбор, где пишите, что-то типа:<br>ТекСтр = ППВТаблЗнач.ТекущаяСтрока(); //Можно воспользоваться Параметрами, но я привык так<br>лФорма = ЭтотОбъект.ПолучитьФорму(«Форма1″); //»ЭтотОбъект.» можно не писать — это подразумевается.<br>лФорма.ПолеВвода1 = ТекСтр.Ссылка; //Ссылка — это колонка в таблице, я не знаю как оно у вас назывется.<br>лФорма.Открыть();<br> <br>В принципе — этого достаточно для демонстрации. Можно запускать.<br><br>p.s. Если вы зайдете на закладку Реквизиты у Формы, то увидите, что один реквизит выделен жирным (например ОбработкаОбъект) — этот реквизит основной для данной формы и она (форма) имеет полный доступ к реквизитам и экспортным функциям (процедурам) этого объекта»

Yakovin

Дата регистрации: 19.02.2007
Сообщений: 49

Огромнейшее спасибо, все получилось!!!

Показывать по
10
20
40
сообщений

ДядяВаня

5 / 4 / 1

Регистрация: 24.08.2017

Сообщений: 112

1

Обращение к реквизиту другого документа

09.11.2018, 13:31. Показов 7198. Ответов 14

Метки нет (Все метки)


Доброго дня! Стоит задача: Если доставка осуществлена в документе ЗаявкаНаОтгрузку (тип данных булево), тогда при проведении документа, в документе ЗаказКлиента автоматически меняется статус документа на СделкаЗавершена, иначе на ОжиданиеОтгрузки

1C
1
2
3
4
5
6
7
8
&НаКлиенте
Процедура ПередЗаписью(Отказ, Режим)
    
    Если Элементы._Доставка_осуществлена.ВидФлажка = Истина Тогда
 
    КонецЕсли;
    
КонецПроцедуры

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



0



1142 / 689 / 203

Регистрация: 22.04.2013

Сообщений: 5,161

Записей в блоге: 1

09.11.2018, 13:41

2

наверно плохо втихаря менять какие-то реквизиты у какого-то-там-документа
а если он в это время открыт манагером? как разрешать коллизию?
возьмите регистр сведений, запишите туда
доставка осуществлена — статус документа
и меняйте себе при открытии

Добавлено через 5 секунд
наверно



0



5 / 4 / 1

Регистрация: 24.08.2017

Сообщений: 112

09.11.2018, 13:43

 [ТС]

3

Yulunga, не я такой, ТЗ такое
Изменение статуса заказа при проведении документа:
-Если доставка осуществлена — «Сделка завершена»
-Если доставка не осуществлена — «Ожидание отгрузки»



0



1142 / 689 / 203

Регистрация: 22.04.2013

Сообщений: 5,161

Записей в блоге: 1

09.11.2018, 14:48

4

а
ну так другой коленкор
вы же проверяете в документе заказ клиента перед записью — есть ли документ заявка на отгрузку нужная вам
и вносите изменения в открытый вами документ.

на клиенте пишете обращение к процедуре, которая на сервере смотрит в ваши документы заказ клиента, находит нужный, смотрит там на галку отгрузки, возвращает да или нет. и вы уже на основании возвратного значения ставите у себя завершена или ждём-с



0



ДядяВаня

5 / 4 / 1

Регистрация: 24.08.2017

Сообщений: 112

26.11.2018, 11:20

 [ТС]

5

Yulunga, после болезни снова вернулся к этому вопросу, начал писать код, остался открытым вопрос как в коде получить реквизит СтадияЗаказа и изменить его, подскажите пожалуйста? Изменения должны производиться в документе-основании (ЗаказКлиента), из документа Отгрузка, код прописан в основном модуле формы документа Отгрузка

1C
1
2
3
4
5
6
7
8
9
10
&НаСервере
Процедура ОбработкаПроведения(Отказ, Режим)
 
    Если Объект._ДоставкаОсуществлена=Истина Тогда
 
    ИначеЕсли Объект._ДоставкаОсуществлена=Ложь Тогда
        
    КонецЕсли;
    
КонецПроцедуры



0



polax

1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,396

26.11.2018, 12:22

6

ДядяВаня,

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//&НаСервере не должно быть. ОбработкаПроведения - это модуль объекта
Процедура ОбработкаПроведения(Отказ, Режим)
 
    Если _ДоставкаОсуществлена=Истина Тогда //Обращение Объект. тоже неверно по той же причине выше
   //Устанавливаем СтадиюЗаказа для текущего дока Отгрузка
 СтадияЗаказа = Перечисления.СтадииЗаказа.СделкаЗавершена; //Перечисления привел как пример, у вас это может и др имя и, например, справочник. Конфу вы не называли
  //Установить СтадиюЗаказа для Заказа
УстановитьСтадиюЗаказаВЗаказе();
    ИначеЕсли _ДоставкаОсуществлена=Ложь Тогда
   // по аналогии     
    КонецЕсли;
    
КонецПроцедуры
 
Процедура УстановитьСтадиюЗаказаВЗаказе()
//Получаем заказ - основание текущего дока
НашЗаказ = ДокументОснование.ПолучитьОбъект();// ДокументОснование - имя реквизита текущ дока, у вас может как-то отличаться
// устанавливаем значение реквизита
НашЗаказ.СтадияЗаказа = Перечисления.СтадииЗаказа.СделкаЗавершена;
//записать заказ
НашЗаказ.Записать();
КонецПроцедуры;



0



1142 / 689 / 203

Регистрация: 22.04.2013

Сообщений: 5,161

Записей в блоге: 1

26.11.2018, 12:36

7

Цитата
Сообщение от polax
Посмотреть сообщение

ИначеЕсли _ДоставкаОсуществлена=Ложь Тогда

а ещё иначе что? блин клинтон, как так можно
просто иначе.



0



ДядяВаня

5 / 4 / 1

Регистрация: 24.08.2017

Сообщений: 112

26.11.2018, 12:40

 [ТС]

8

polax, Были ерроры, подправил код, ерроров не стало, но и не отработало

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Процедура ОбработкаПроведения(Отказ, Режим)
 
    Если Объект._ДоставкаОсуществлена=Истина Тогда
        _СтадияЗаказа = Перечисления._СтадияЗаказа._СделкаЗавершена;
        УстановитьСтадиюЗаказаВЗаказеКлиента();
    ИначеЕсли Объект._ДоставкаОсуществлена=Ложь Тогда
        _СтадияЗаказа = Перечисления._СтадияЗаказа._ОжиданиеОтгрузки;
    КонецЕсли;
    
КонецПроцедуры
 
Процедура УстановитьСтадиюЗаказаВЗаказеКлиента()
    ЗаказКлиента = Документы._ЗаказКлиента.ПолучитьОбъект();
    ЗаказКлиента.СтадияЗаказа = Перечисления._СтадияЗаказа._СделкаЗавершена;
    ЗаказКлиента.Записать();
КонецПроцедуры;



0



polax

1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,396

26.11.2018, 12:53

9

ДядяВаня,Читайте внимательно:
1. Нет в модуле объекта — Объект._ДоставкаОсуществлена есть просто _ДоставкаОсуществлена
2. По аналогии — это значит что и в противном случае в Заказ что-то пишется, у вас только в Отгрузку

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Процедура ОбработкаПроведения(Отказ, Режим)
    
    Если _ДоставкаОсуществлена=Истина Тогда
        _СтадияЗаказа = Перечисления._СтадияЗаказа._СделкаЗавершена;
        УстановитьСтадиюЗаказаВЗаказеКлиента(СтадияЗаказа);
    Иначе // уважим Юлунгу ))), прав
        _СтадияЗаказа = Перечисления._СтадияЗаказа._ОжиданиеОтгрузки;
    УстановитьСтадиюЗаказаВЗаказеКлиента(СтадияЗаказа);
    КонецЕсли;
    
КонецПроцедуры
 
Процедура УстановитьСтадиюЗаказаВЗаказеКлиента(Стадия)
    ЗаказКлиента = Документы._ЗаказКлиента.ПолучитьОбъект();
    ЗаказКлиента.СтадияЗаказа = Стадия;
    ЗаказКлиента.Записать();
КонецПроцедуры;



0



5 / 4 / 1

Регистрация: 24.08.2017

Сообщений: 112

26.11.2018, 13:13

 [ТС]

10

polax, {Документ._ЗаявкаНаОтгрузку.Форма.ФормаДокумента.Ф орма(4,7)}: Переменная не определена (_ДоставкаОсуществлена)
вот ну ругается он у меня на такое получение флажка, не хочет он так

Добавлено через 8 минут
polax, {Документ._ЗаявкаНаОтгрузку.Форма.ФормаДокумента.Ф орма(4,7)}: Переменная не определена (_ДоставкаОсуществлена)
вот ну ругается он у меня на такое получение флажка, не хочет он так



0



1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,396

26.11.2018, 13:20

11

Цитата
Сообщение от ДядяВаня
Посмотреть сообщение

Документ._ЗаявкаНаОтгрузку.Форма.ФормаДокумента.Фо рма(4,7)

КАК процедура ОбработкаПроведения попала в форму модуля? Как вообще вы реализовали, что код попадает в эту абсолютно левую процедуру? ))) Эта процедура стандартный обработчик и выполняется в МОДУЛЕ ОБЪЕКТА.



0



ДядяВаня

5 / 4 / 1

Регистрация: 24.08.2017

Сообщений: 112

26.11.2018, 13:30

 [ТС]

12

polax, да фиг его знает, я совсем недавно 1с занимаюсь и еще многого не знаю

1C
1
2
3
4
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ._ЗаявкаНаОтгрузку.МодульОбъекта(46)}: Поле объекта не обнаружено (ПолучитьОбъект)
    ЗаказКлиента = Документы._ЗаказКлиента.ПолучитьОбъект;

и вывалилось с еррором уже на стороне предприятия, не конфигуратора, 1с 8.3 у меня, может из-за разных версий ошибка?



0



1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,396

26.11.2018, 13:35

13

Цитата
Сообщение от ДядяВаня
Посмотреть сообщение

ЗаказКлиента = Документы._ЗаказКлиента.ПолучитьОбъект;

а это откуда взялось? Где это в коде? Покажите



0



5 / 4 / 1

Регистрация: 24.08.2017

Сообщений: 112

26.11.2018, 13:37

 [ТС]

14

Цитата
Сообщение от polax
Посмотреть сообщение

ЗаказКлиента = Документы._ЗаказКлиента.ПолучитьОбъект();

вот



0



polax

1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,396

26.11.2018, 13:46

15

Ну ДядяВаня, !!!!!!!!!!!!!! Поймал. Я не вдавался в подробности, как вы скопировали мой код (уж скопировать-то можно БЕЗ ошибок) и не обратил внимание на ахинеЮ ))))
Согласитесь разница между

1C
1
НашЗаказ = ДокументОснование.ПолучитьОбъект();// ДокументОснование - имя реквизита текущ дока, у вас может как-то отличаться

и вашей версией (да, потом скопированной мной неглядя)

1C
1
ЗаказКлиента = Документы._ЗаказКлиента.ПолучитьОбъект();

есть. И разница эта существенна.
ДокументОснование — это реквизит текущего документа, куда как раз записывается док основание — ваш заказ
Документы._ЗаказКлиента — это тип документа и все



0



Понравилась статья? Поделить с друзьями:
  • Как натянуть ремень гур газель бизнес 4216
  • Как защитить название компании от плагиата
  • Как обратиться к стандартным реквизитам 1с
  • Как натянуть ручник на газели бизнес видео
  • Как защищать бизнес план текст выступления