Имя: Пароль:
1C
1С v8
v8: Открыть форму записи регистра сведений с ключом уникальности.
0 vladenoff
 
28.03.12
15:40
Всем доброго времени суток.
При получении формы записи регистра сведений у меня всегда генерируется новый экземпляр формы, несмотря на одинаковый уникальный идентификатор формы:
//...
//...
Form = InformationRegisters.BookkeepingCostArticles.GetForm("RecordForm",ThisForm,"1");
//функция Form.IsOpen() всегда тут в значении False
Form.Open();
//...
//...
1 vladenoff
 
28.03.12
15:54
куда копать?
2 vladenoff
 
29.03.12
18:28
или вот пример из типовой:
...

   ВыборкаРегистра = РегистрыСведений.УчетнаяПолитикаБухгалтерскийУчет.Выбрать();
   Если ВыборкаРегистра.Следующий() Тогда
       Форма = ВыборкаРегистра.ПолучитьМенеджерЗаписи().ПолучитьФорму(,ЭтаФорма, "1");
       Сообщить(Форма.Открыта());
       Форма.Открыть();
   КонецЕсли;

....


Всегда "Форма.Открыта()" возвращает Ложь. форма всегда открывается новая.
3 vladenoff
 
29.03.12
18:56
неужели, никто не подскажет как открыть форму записи регистра с контролем ее уникальности ?
4 Мизантроп
 
29.03.12
18:58
не устаешь латиницей код писать?
5 vladenoff
 
29.03.12
19:02
(4) требования заказчиков )
6 Мизантроп
 
29.03.12
19:03
(5) первый раз о таких бредовых требованиях слышу
7 acsent
 
29.03.12
19:07
для формы записи нужно задавать ключ записи иначе это новая запись
8 vladenoff
 
30.03.12
11:09
(7) а как же мне задать этот самый ключ для формы?
9 vladenoff
 
30.03.12
12:52
Вот так реализуется данная задача на 8.2:
...
Функция ПолучитьКлючЗаписиРегистраСведений(ДатаТекущая, ИзмерениеЗначение)
   Отбор1 = Новый Структура;
   Отбор1.Вставить("Период", ДатаТекущая);
   Отбор1.Вставить("Организация", ИзмерениеЗначение);
   
   Рег = РегистрыСведений.УчетнаяПолитикаБухгалтерскийУчет;
   
   Возврат Рег.СоздатьКлючЗаписи(Отбор1);
КонецФункции

Procedure PressExecuteButton(Button)
   ВыборкаРегистра = РегистрыСведений.УчетнаяПолитикаБухгалтерскийУчет.Выбрать();
   Если ВыборкаРегистра.Следующий() Тогда
       Ключ = ПолучитьКлючЗаписиРегистраСведений(ВыборкаРегистра.Период, ВыборкаРегистра.Организация);
       ПараметрыФормы = Новый Структура("Ключ", Ключ);
       ОткрытьФорму("РегистрСведений.УчетнаяПолитикаБухгалтерскийУчет.ФормаЗаписи", ПараметрыФормы,ЭтаФорма);
   КонецЕсли;
   
EndProcedure
....

а чем заменить мне строку 'ОткрытьФорму("РегистрСведений.УчетнаяПолитикаБухгалтерскийУчет.ФормаЗаписи", ПараметрыФормы,ЭтаФорма);' в 1С:П-тие 8.1???
10 zladenuw
 
30.03.12
13:04
<Ключ уникальности> (необязательный)
Тип: Произвольный. В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм.
При поиске учитываются значения свойств открытых форм соответствующим значениям параметров метода. Если найдена открытая форма (по совпадению всех параметров), то она будет возвращена вместо новой формы.
Если из некой формы (один и тот же владелец) требуется открывать новые экземпляры другой формы, то при каждом вызове метода значение данного параметра должно быть уникально (в рамках соответствующих значений свойств открытых форм).
Значение параметра присваивается свойству открываемой формы КлючУникальности.
Следует учитывать, что при получении формы из "объекта" система получает форму для конкретного экземпляра объекта с учетом совокупности переданных параметров, в то время как для "ссылки" всегда существует только один объект в базе данных и форма получается одна (для одинаковой совокупности параметров).
11 zladenuw
 
30.03.12
13:05
ПолучитьМенеджерЗаписи (GetRecordManager)
Синтаксис:
ПолучитьМенеджерЗаписи()
Возвращаемое значение:
Тип: РегистрСведенийМенеджерЗаписи. Менеджер записи регистра сведений.
Описание:
Получает объект для модификации, записи и удаления записи регистра сведений, на которой в данный момент спозиционирована выборка.
12 zladenuw
 
30.03.12
13:05
и читаем теперь
Следует учитывать, что при получении формы из "объекта" система получает форму для конкретного экземпляра объекта с учетом совокупности переданных параметров, в то время как для "ссылки" всегда существует только один объект в базе данных и форма получается одна (для одинаковой совокупности параметров).
13 vladenoff
 
30.03.12
13:09
а можно с примером ?
14 vladenoff
 
30.03.12
13:10
как же мне открыть форму записи зная ключ. При этом проконтролировать уникальность открытой формы?
15 zladenuw
 
30.03.12
13:23
может через ссылку ? тогда контроль уникальности будет. тебя для чего ?
16 vladenoff
 
30.03.12
13:33
из одной формы обработки зная период записи и все ее значение измерений. надо открыть форму редактирования этой записи. Причем проконтролировать уникальность формы. Обращаю внимание что в посте (9) я привожу уже найденное решение для 8,2. теперь надо найти решение для 8.1 и обойти конструкцию "ОткрытьФорму(..."
17 zladenuw
 
30.03.12
13:49
тогда может только так.
РегистрСведенийМенеджер.<Имя регистра сведений>.СоздатьКлючЗаписи (InformationRegisterManager.<Имя регистра сведений>.CreateRecordKey)
РегистрСведенийМенеджер.<Имя регистра сведений> (InformationRegisterManager.<Имя регистра сведений>)
СоздатьКлючЗаписи (CreateRecordKey)
Синтаксис:
СоздатьКлючЗаписи(<Значения ключа>)
Параметры:
<Значения ключа> (обязательный)
Тип: Структура. Структура, содержащая значения для заполнения свойств ключа записи.
Имена элементов структуры должны соответствовать именам ключевых полей.
Возвращаемое значение:
Тип: РегистрСведенийКлючЗаписи.
Описание:
Создает ключ записи по переданной структуре.
Пример:
Отбор = Новый Структура;
Отбор.Вставить("Подразделение", ВыбПодразделение);
Отбор.Вставить("Должность", ВыбДолжность);
Рег = РегистрыСведений.СведенияОШтатныхЕдиницах;
КлючЗаписи = Рег.СоздатьКлючЗаписи(Отбор);
// ШтатныеЕдиницы - табличное поле для отображения списка
// записей регистра сведений
ЭлементыФормы.ШтатныеЕдиницы.ТекущаяСтрока = КлючЗаписи;
18 vladenoff
 
30.03.12
13:51
(17) нет.

остается не понятным что делать с этим ключом записи.

Кстати в посте (9) я и так использую такой ключ, только проку с него мало в 8.1. Форма открывается всегда новая.
19 zladenuw
 
30.03.12
13:53
ну так есть параметры. в 8.1 этого нету. поэтому пляски с бубном
20 vladenoff
 
30.03.12
13:56
в посте (17) нету решение открытия формы записи регистра. Тут хоть с бубном хоть без (
21 zladenuw
 
30.03.12
14:02
22 vladenoff
 
30.03.12
14:16
(21) Решение карявое.

тут ОткрытьМодально() ничем кроме незнания не оправдывается.

А если использовать Открыть() то не будет сохранятся уникальность формы. То есть, при исполнении кода повторно всегда будет открываться новая форма одной и той же записи.
23 zladenuw
 
30.03.12
14:21
так если даже так.
Все равно форму новую открывает.
Процедура КнопкаВыполнитьНажатие(Кнопка)
       
   Форма = ПолучитьОбщуюФорму("Форма",ЭтаФорма,1);
   Сообщить(форма.Открыта());    
   форма.Открыть();
КонецПроцедуры

Бред блин
24 vladenoff
 
30.03.12
14:24
(23) так понятное дело что бред.

пример в посте (2) тоже форму открывает. если бы это подходило - то и эту тему развивать не надо было(
25 zladenuw
 
30.03.12
15:50
то зачем тебе контроль открывания?
Перем Форма;
Процедура КнопкаВыполнитьНажатие(Кнопка)
       
    ВыборкаРегистра = РегистрыСведений.РегистрСведений1.Выбрать();
   Пока ВыборкаРегистра.Следующий() Цикл
       ЗаполнитьЗначенияСвойств(Форма,ВыборкаРегистра);
       Если Форма.открыта() Тогда
           Сообщить(Форма.Открыта());
       Иначе
           Сообщить(Форма.Открыта());
           Форма.Открыть();    
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры

Форма = РегистрыСведений.РегистрСведений1.ПолучитьФормуРедактированияЗаписи("ФормаЗаписи",ЭтаФорма);
26 vladenoff
 
30.03.12
17:19
(25) опять таки, решение ограничивает пользователя на открытие двух форм разных записей регистров. Логического смысла в этом нету.

У меня возникла мысль что в 8.1 этого невозможно сделать "+1" к переводу клиента на 8.2
27 hhhh
 
30.03.12
17:27
(2) в (2) у тебя по-любому не получится, потому что ПолучитьМенеджерЗаписи() у тебя каждый раз создается новый менеджер.
28 vladenoff
 
30.03.12
17:55
(27) да это понятно. в том и вопрос.