Имя: Пароль:
1C
1С v8
Автоматическое заполнение поля
,
0 galimovmaks
 
13.09.13
12:18
Есть документ. на его основании создаю договор. Надо чтобы в поле документа автоматически подставлялось название договора при его создании. прошу помочь.
1 Fish
 
13.09.13
12:19
А что не получается?
2 galimovmaks
 
13.09.13
12:22
(1) нет. я бы не спрашивал если знал
3 Fish
 
13.09.13
12:56
(2) Имелось ввиду что конкретно не получается.
4 galimovmaks
 
13.09.13
13:01
(3) в документе  есть реквизит договор с типом "Справочники.ДоговорыКонтрагентов". и есть кнопка "Создать договор". нажимаю на кнопку, создается новый договор. наименование пользователь может ввести свое. НУЖНО при нажатии на кнопку ОК в новом договоре, наименование подставлялось в реквизит документа.
5 galimovmaks
 
13.09.13
13:01
так понятно что не получается?
6 Fish
 
13.09.13
13:17
(5) Цель понятна, непонятно, что конкретно у тебя не получается сделать. Давай код, как делаешь.
7 galimovmaks
 
13.09.13
14:32
Процедура СоздатьНовыйДоговор(НовыйДоговор) Экспорт
    
    //Создадим новый договор
           НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
        НовыйДоговор.Владелец = Контрагент;
        НовыйДоговор.Организация = Организация;
        НовыйДоговор.ВалютаВзаиморасчетов = Константы.ВалютаРегламентированногоУчета.Получить();
        НовыйДоговор.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоЗаказам;
        НовыйДоговор.ВидДоговора = ВидДоговора;
        НовыйДоговор.франТипДоговора = ТипДоговора;
        НовыйДоговор.Дата = ДатаНачалаДоговора;
        НовыйДоговор.СрокДействия = ДатаОкончанияДоговора;
        НовыйДоговор.Номер = Номер;
        НовыйДоговор.Наименование = "Договор № " + Номер + " от " + Дата;
        НовыйДоговор.ИЛ_ОсновнойМенеджер = Специалист;
        
        ОткрытьЗначение(НовыйДоговор);
        
        Если НовыйДоговор.ЭтоНовый() Тогда
             ДоговорКонтрагента = НовыйДоговор.Наименование;
        КонецЕсли;
        
КонецПроцедуры
8 galimovmaks
 
13.09.13
14:32
(6) вот. в модуле объекта документа прописываю
9 galimovmaks
 
13.09.13
14:40
(6) но ведь договор создается при нажатии ОК. вот надо этот момент поймать. не пойму как
10 Fish
 
13.09.13
14:46
(9) Например, можно открывать форму нового договора не  через  ОткрытьЗначение(НовыйДоговор);, а через получение и открытие формы. Тогда ей можно задать форму-владельца (твой док). И при записи оповещать о том, что элемент создан.
11 Fish
 
13.09.13
14:48
+(10) Хотя может, я не совсем прав и для оповещения необязательно указывать владельца. В общем кури метод Оповестить(<ИмяСобытия>, <Параметр>, <Источник>)
12 Красный рассвет
 
13.09.13
14:50
(9) Ищи "перекрестные ссылки"
13 Fish
 
13.09.13
14:50
(9) Или так:
Форма (Form)
ОповеститьОЗаписиНовогоОбъекта (NotifyWriteNewObject)
Синтаксис:

ОповеститьОЗаписиНовогоОбъекта(<Объект>)
Параметры:

<Объект> (обязательный)

Тип: Ссылка на объект информационной базы.
Добавленный объект.
Описание:

Посылает оповещение владельцу формы о записи нового объекта и передает ему ссылку на этот объект.

Доступность:

Толстый клиент.
Примечание:

Может быть использован, если добавление нового объекта при помощи подчиненной формы необходимо обработать в форме владельце.
Пример:

ОповеститьОЗаписиНовогоОбъекта(ДобавленнаяСтрока);


См. также:

Форма, событие ОбработкаЗаписиНовогоОбъекта
14 galimovmaks
 
13.09.13
15:10
(12) у них только контрагент и общий.
15 galimovmaks
 
16.09.13
07:36
(13) вот так написал
Форма=НовыйДоговор.ПолучитьФорму("ФормаЭлемента");
        
        ОткрытьФорму(Форма);
        Оповестить("ЗакрытьФорму", , Форма);

с оповестить что делать?
16 Мимохожий Однако
 
16.09.13
07:46
Конфигурация типовая?
17 galimovmaks
 
16.09.13
07:51
да ут 10.3
18 galimovmaks
 
16.09.13
07:57
(16) (13) в модуле формы написал
СоздатьДоговорСервер(НовыйДоговор);
         ЭтаФорма.ОповеститьОЗаписиНового(НовыйДоговор);
         ЭтаФорма.Объект.ДоговорКонтрагента = НовыйДоговор.Наименование;

работоет, но только если реквизит ДоговорКонтрагента строкового типа (а мне нужно СправочникСсылкаДоговорыКонтрагентов), и в момент открытия формы договора. а если пользователь изменит наименование, тогда новое не запишется.
19 galimovmaks
 
16.09.13
08:06
(18) работает и без этой строчки ЭтаФорма.ОповеститьОЗаписиНового(НовыйДоговор);

может ктонибудь подскажет как правильно этим методом воспользоваться?
20 Мимохожий Однако
 
16.09.13
08:09
В конце процедуры после записи элемента справочника Договры попробуй ДоговорКонтрагента = НовыйДоговор.Ссылка;
21 galimovmaks
 
16.09.13
08:39
(20) неа. в поле ссылка нет ни какого значения
22 cw014
 
16.09.13
08:42
роцедура СоздатьНовыйДоговор(НовыйДоговор) Экспорт
    
    //Создадим новый договор

           НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
        НовыйДоговор.Владелец = Контрагент;
        НовыйДоговор.Организация = Организация;
        НовыйДоговор.ВалютаВзаиморасчетов = Константы.ВалютаРегламентированногоУчета.Получить();
        НовыйДоговор.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоЗаказам;
        НовыйДоговор.ВидДоговора = ВидДоговора;
        НовыйДоговор.франТипДоговора = ТипДоговора;
        НовыйДоговор.Дата = ДатаНачалаДоговора;
        НовыйДоговор.СрокДействия = ДатаОкончанияДоговора;
        НовыйДоговор.Номер = Номер;
        НовыйДоговор.Наименование = "Договор № " + Номер + " от " + Дата;
        НовыйДоговор.ИЛ_ОсновнойМенеджер = Специалист;
        
        НовыйДоговор.ОткрытьФормуМодально("ФормаЭлемента");
        
        Если ЗначениеЗаполнено(НовыйДоговор.Ссылка) Тогда
             ДоговорКонтрагента = НовыйДоговор.Ссылка;
        КонецЕсли;
        
КонецПроцедуры


P.S. Самый простой вариант - с тебя 300 рублев
23 Мимохожий Однако
 
16.09.13
08:48
(21)Записать элемент справочника пробовал?
24 galimovmaks
 
16.09.13
08:50
(22) ну вот так исправил
Форма = НовыйДоговор.ПолучитьФорму("ФормаЭлемента");
        ОткрытьФормуМодально(Форма);
        
        Если ЗначениеЗаполнено(НовыйДоговор.Ссылка) Тогда
             ДоговорКонтрагента = НовыйДоговор.Ссылка;
        КонецЕсли;


по отладчику да, все работает. значение подставляется. а в пользовательском как не было ни чего, так и нет((
25 galimovmaks
 
16.09.13
08:51
(23) так пользователь сам должен записывать. вдруг он наименование изменит
26 cw014
 
16.09.13
09:01
(24) А элемент на форме "ДоговорКонтрагента" связан с твоей переменной "ДоговорКонтрагента"?
27 Мимохожий Однако
 
16.09.13
09:04
Вместо модального открытия окна элемента справочника можно задать вопрос пользователю: "Наименование нового договора?".
Когда введет ответ, тогда создать , сохранить новый договор и привязать к реквизиту документа.
28 galimovmaks
 
16.09.13
09:04
(26) конечно!
29 Мимохожий Однако
 
16.09.13
09:07
(25)Неплохо бы научить пользователя нажимать лупу рядом с полем Договор. Тогда не нужны будут извращения по заполнению наименования в момент создания договора.
30 galimovmaks
 
16.09.13
09:12
(27) мне кажется это тоже самое, только диалог возникает и все
31 cw014
 
16.09.13
09:19
(28) Значит у тебя где-то очепятка... Или одно из двух...
32 galimovmaks
 
16.09.13
09:22
(31) опечатки точно нет. проверил
33 galimovmaks
 
16.09.13
09:24
(31) а есть разница, в модуле объекта или модуле формы заполнять реквизит?
34 Мимохожий Однако
 
16.09.13
09:28
(33)Разница есть. У объекта может куча форм с одноименными реквизитами, которые связаны с  реквизитами под другим именем.
35 galimovmaks
 
16.09.13
09:30
(34) (22)  все разобрался сделал) спасибо большое за помощь
36 galimovmaks
 
16.09.13
09:33
вот как сделал. в модуле формы прописал
&НаСервере
Процедура   СоздатьДоговорСервер(НовыйДоговор)
     Документ = РеквизитФормыВЗначение("Объект");
     Параметр = Новый Структура("Ключ",Документ.СоздатьНовыйДоговор(НовыйДоговор));
     Форма = ПолучитьФорму("Справочник.ДоговорыКонтрагентов.Форма.ФормаЭлемента",Параметр,ЭтаФорма);
     ОткрытьФормуМодально(Форма);
     Если ЗначениеЗаполнено(НовыйДоговор.Ссылка) Тогда
         ЭтаФорма.Объект.ДоговорКонтрагента = НовыйДоговор.Ссылка;
     КонецЕсли;
    
КонецПроцедуры
37 cw014
 
16.09.13
09:37
(36) А, нуда, Объект.ДоговорКонтрагента = НовыйДоговор.Ссылка;

ЭтаФорма. можешь убрать
38 galimovmaks
 
16.09.13
09:45
(37) ага, точно. спасибо
39 cw014
 
16.09.13
09:46
(38) С тебя 300 рублев :)