|
НеАктивная Кнопочка на форме | ☑ | ||
---|---|---|---|---|
0
Kjifhf
21.04.12
✎
16:46
|
Здрасте. У меня такая проблема.
Есть справочник СоглашениеСКлиентом. На него я поместил кнопочку ***. Нажав на эту кнопочку появляется созданный справочник ДоговорСКонтрАгентом. А дальше должно выполняться такое условие: Если ДоговорСКонтрагеном был сохранен перед закрытием, то кнопочка *** должна стать неактивной, а если я не сохранял и закрыл то кнопочка должна быть активной, то есть ничего не изменялось. Подскажите пожалуста как мне это реализовать. Думал создать в обоих справочниках реквизит типа ссылки на ДоговорСКонтрагентом, и через него передавать сигнал если договор был сохранен. но что то не сложилось =( А у вас какие идеи будут? Благодарю за внимание. |
|||
1
Kjifhf
21.04.12
✎
19:07
|
Хорошо, тогда подскажите хотя бы это:
Как мне находясь в справочник1 изменить значение реквизита в справочник2 ?? вот я в договорСКонтрагентами. на форме кликаю кнопку, выполняется команда ***, в модуле процедура ***(команда); справочник2.реквизит = .... конецпроцедуры Но так работать не будет, а как мне правильно изменить значение ерквизита в справочник2??? |
|||
2
Extro
21.04.12
✎
19:40
|
процедура ***(команда);
Спр = справочник2.ПолучитьОбъект(); Спр.реквизит = .... Спр.Записать(); конецпроцедуры |
|||
3
mistеr
21.04.12
✎
19:46
|
Передать сигнал из одной формы в другую можно, используя свойство ВладелецФормы.При закрытии формы ДоговорСКонтрагеном вызвать процедуру в форме СоглашениеСКлиентом.
Или использовать механизм оповещений (метод Оповестить гл. контекста) |
|||
4
Kjifhf
21.04.12
✎
20:07
|
(2) так не получится, ибо выдает ошибку неизвестная переменная справочник2.
|
|||
5
Kjifhf
21.04.12
✎
20:09
|
(3) но кажется соглашениеСКлиентом не является владельцем формы ДоговорСКонтрагентом.
|
|||
6
Kjifhf
21.04.12
✎
20:26
|
Спр = Справочник.СоглашениеСКлиентом.ПолучитьОбъект();
Спр.Форма.ФормаЭлемента.СоздатьДоговор.Доступность = Ложь; Выдает ошибку: переменная не определена (Справочник) Что не так? Пытаюсь обратиться к кнопке на форме |
|||
7
CepeLLlka
21.04.12
✎
20:29
|
Справочники может стоит написать попробовать? :)
|
|||
8
CepeLLlka
21.04.12
✎
20:33
|
(6) Ой.. нет же лоло..
ПолучитьОбъект() это только если у тебя ссылка же.. Тебе нужно поступить вот так хотябы //Сначала получить ссылку на нужный тебе справочник.. СпрСсылка = Справочники.СоглашениеСКлиентом.НайтиПоКоду("000005"); // затем уже получить объект(элемент справочника) по этой ссылке СпрОбъект = СпрСсылка.ПолучитьОбъект(); Вот.. а потом уж я хз чё ты там хочешь с ним сделать.. мне кажется не получится у тебя вот это: Спр.Форма.ФормаЭлемента.СоздатьДоговор.Доступность = Ложь; Такое нужно делать в модуле формы.. в процедуре ПриСозданииНаСервере если у тебя УФ или же в ПриОткрытии если у тебя Обычные формы.. |
|||
9
CepeLLlka
21.04.12
✎
20:40
|
А по (0)
Надеюсь у тебя Справочник Договора который является подчинённым.. Если как я вижу ты планируешь что у тебя будет с контрагентом только лишь по одному договору.. (так по твоему условию) то можно сделать так... Ограничусь описанием для Обычных форм... Вобщем в процедуре ПриОткрытии() делай запрос по типа // Пишу от руки.. чтобы просто донести идею до тебя.. будут ошибки.. копипастить не надо. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |ДоговорСКонтрАгентом.Ссылка |ИЗ |Справочник.ДоговорСКонтрАгентом |ГДЕ |ДоговорСКонтрагентом.Владелец = &ТекущийКлиент"; Запрос.УстановитьПараметр(ТекущийКлиент, Объект.Ссылка); Выборка = Запрос.Выполить().Выбрать(); Если НЕ Выборка.Следующий тогда ЭлементыФормы.СоздатьДоговор.Доступность = Ложь; КонецЕсли; Вот вроде так.. идея такова.. проверяй ошибки только :) |
|||
10
CepeLLlka
21.04.12
✎
20:42
|
НЕ только нужно убрать в условии :) Ошибся..
|
|||
11
CepeLLlka
21.04.12
✎
20:43
|
И если помогло.. то отпиши тут.. я буду рад что помог тебе.
|
|||
12
mistеr
21.04.12
✎
21:20
|
(5) если из одной формы открываешь другую, то первая становится владельцем последней.
Манипулировать напрямую элементами на другой форме неверно. Нужно именно "передавать сигналы" (0). |
|||
13
kosts
21.04.12
✎
21:35
|
(0) Можно попробовать через модальные формы.
Как-то так
Но грамотнее через оповещение. С другой стороны ограничение одним договором, это не совсем удобно. Как быть в ситуации, если договор создали, а потом пометили на удаление... В типовых удобно сделано, договоров может быть множество, и можно выбрать основной, который сохраняется в контрагенте. |
|||
14
Kjifhf
21.04.12
✎
21:36
|
(8) выдает ошибку
значение не является значением объектного типа. что то ты не так пдсказал |
|||
15
CepeLLlka
21.04.12
✎
21:40
|
(14) Извини.. я старался как мог :)
|
|||
16
Kjifhf
21.04.12
✎
21:51
|
(13) так получается, чтобы кнопка стала неактивной на неё, после записи договора нужно будет ещё раз нажать?)
|
|||
17
kosts
21.04.12
✎
21:54
|
(16) Сразу недоступной должна сделаться.
|
|||
18
CepeLLlka
21.04.12
✎
22:12
|
(16) Тут да.. ты при вызове кнопки снова проверяй есть ли договор или нет.. если есть.. то просто открывай элемент этого договора.. а если нету то создавать новый..
|
|||
19
GoldenCalf
21.04.12
✎
22:41
|
ОбработкаЗаписиНовогоОбъекта - должна помочь
|
|||
20
GoldenCalf
21.04.12
✎
22:42
|
В крайнем случае ОбработкаОповещения
|
|||
21
Kjifhf
22.04.12
✎
00:00
|
я вот не пойму что надо исправить
СпрСС = Справочники.СоглашенияСКлиентами.НайтиПоКоду(Объект.Код); спрСС.Реквизит1="123"; Спрсс.Записать(); Значение не является значением объекного типа(Реквизит1). А когда реквизит1 был булевым типом, такой код не менял реквизит1 в справочнике владельце. Вот у меня просьба, напишите пожалуста как правильно чтобы шло обращение не к новому справочнику, а к справочнику владельцу. У меня ума не хватает самому запилить. Спасибо |
|||
22
mistеr
22.04.12
✎
01:22
|
(21) Может таки мой совет попробуешь?
|
|||
23
Kjifhf
22.04.12
✎
03:16
|
(22) так я и пытаюсь.
1. В соглашениеСКлиентом сздаем реквизит булевского типа со значением ИСТИНА. 2 В модуле формы договора в процедуре передЗаписью пишем код из (21) и меняем тем самым наш реквизит на ЛОЖЬ. 3. В модуле формы жлемента соглашений в обработчике кнопки пишем услвоие если реквизит ложь тогда кнопку делаем недоступной. 4 из соглашений вызываем договор. Записываем. Но у нас меняется реквизит в кааком то другом соглашении а не конткретно в соглашении-владельце. Посему и вопрос, как мне обратиться к владельцу?? Ты ведь так предлагал? |
|||
24
mistеr
22.04.12
✎
10:36
|
(23) Не так я предлагал. Взаимодействуют формы (объекты интерфейса), а не элементы справочников (объекты ИБ). Разницу понимаешь?
В п. 1) не реквизит создаешь, а экспортную процедуру в *модуле формы*. В п. 2) вызываешь ее. В этой процедуре ты можешь делать с формой все что угодно; в данном случае делаешь недоступной кнопку. П. 3), 4) нафиг. В п. 2) не забудь проверить, что владелец тот, который тебе нужен. А то форма может быть вызвана из разных мест. |
|||
25
Kjifhf
22.04.12
✎
14:27
|
(24) идея шикарна, только я в 1с совсем не давно, как мне проверить на владельца и что такое экспортная форма?
|
|||
26
mistеr
22.04.12
✎
14:40
|
(25) Ты что, притворяешься тупым, "экспортная форма"? Процедура с ключевым словом "Экспорт". Раз идея нравится, недостающие детали откопай в справке, не ленись.
|
|||
27
Kjifhf
22.04.12
✎
16:20
|
(26) Не работает =( Создал экспрт в модуле формы обозвал ***, а при записи договора пишет что метод *** не найден =(.
И вот если через реквизит. Спр = Справочники.СоглашенияСКлиентами.НайтиПоРеквизиту("Номер", Объект.Код).ПолучитьОбъект(); спр.Реквизит1=ИСТИНА; спр.Записать(); Кажется он находит не тот документ. Ибо при открытии соглашения реквизит ЛОЖЬ. При зписи должен меняться в истину, но всё равно остается ложь для этого соглашения. НО ведь у каждого соглашения свой индивидуальный номер же. Блин работал бы отладчик давно бы понял в чем соль а так тприходится вас мучить |
|||
28
kosts
22.04.12
✎
20:12
|
(27) Пригласи специалиста
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |