Имя: Пароль:
1C
1С v8
Справочник. Создается новая запись или редактируется существующая
0 dizpers
 
24.04.12
21:08
Здравствуйте!
Продолжая тему разработки решения для кинотеатра, прошу помощи в следующем. Есть справочник мест и периодический РС, в котором хранятся состояния мест (свободно, занято, ремонт, бронь).

Если в справочник мест был добавлен новый элемент, надо установить начальное состояние в РС - свободно. Если же запись редактируется, то никаких изменений в РС вносить не надо.

Вопрос в следующем - как программно узнать - редактируется запись справочника или же создается новая?
1 Aleksey
 
24.04.12
21:11
СправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>)
ЭтоНовый (IsNew)
Синтаксис:

ЭтоНовый()
Возвращаемое значение:

Тип: Булево.
Истина - изменяется еще ни разу не записанный элемент; Ложь - элемент уже записан.
Описание:

Определяет, записан ли элемент в базу данных.

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

Сервер, толстый клиент, внешнее соединение.
Пример:

Если Объект.ЭтоНовый() Тогда
   Объект.Наименование = "Новый элемент";
КонецЕсли;
2 aleks-id
 
24.04.12
21:11
этоновый
3 Aleksey
 
24.04.12
21:11
А что мешает перед записью прочитать РС и если там ничего нет (вернули 0 записей), то пишем свободно
4 CepeLLlka
 
24.04.12
21:14
(3) Да так то можно и на бумагу писать в принципе.. а потом сверять..
5 aleks-id
 
24.04.12
21:14
(3) интересно, что ты туда передашь в качестве параметра ;)
6 Oleg_Kag
 
24.04.12
21:15
Если Объект.Ссылка.Пустая() Тогда
7 dizpers
 
24.04.12
21:20
Всем спасибо за ответы!

(3) Логически идею понимаю, подскажите как реализовать.
8 dizpers
 
24.04.12
21:32
сделал вот так

Перем Добавление;

Процедура ПередЗаписью(Отказ)
   Если (Наименование = "") Тогда
       Добавление = Истина;
   КонецЕсли;
   Наименование = Зал.Наименование + "-" + Строка(Ряд) + "-" + Строка(Место);
КонецПроцедуры

Процедура ПослеЗаписи()
   Если (Добавление) Тогда
       СостояниеМест = РегистрыСведений.СостояниеМест.СоздатьМенеджерЗаписи();    
       СостояниеМест.Место = Место;
       СостояниеМест.Состояние = Перечисления.ВидыСостоянийМест.Свободно;
   КонецЕсли;
КонецПроцедуры

Добавление = Ложь;

Но тут всплыл подводный камень. С этим регистром должен уметь работать еще и документ ИзменениеСостояниеМеста. А для этого у РС установлен режим записи - подчинение регистратору.

А с таким режимом создать менеджер записи нельзя. Как решить такой вопрос?
9 Oleg_Kag
 
24.04.12
21:40
Документ.ИзменениеСостоянияМеста.ПустаяСсылка()
в качестве регистратора сработает?
10 Лоботряс
 
24.04.12
21:43
Нафига вообще при создании нового места вносить что-то в регистр состояния?
(9) не сработает
11 dizpers
 
24.04.12
21:43
(9) Не сработало


{Справочник.Места.Форма.ФормаЭлемента(12)}: Ошибка при вызове метода контекста (СоздатьМенеджерЗаписи): Менеджер записи не может быть использован для регистра с режимом записи "Подчинение регистратору"
       СостояниеМест = РегистрыСведений.СостояниеМест.СоздатьМенеджерЗаписи();    
по причине:
Менеджер записи не может быть использован для регистра с режимом записи "Подчинение регистратору"
12 dizpers
 
24.04.12
21:44
(10) Чтобы инициализировать состояние вновь добавленного места. Думаешь это лишнее?

Хм, надо подумать.
13 Oleg_Kag
 
24.04.12
21:46
Может лучше сделать реквизитом?
14 Лоботряс
 
24.04.12
21:46
Лучше в отбор списка свободных мест(где только он у тебя будет не знаю) добавь отбор по последнему состоянию "свободен" ИЛИ отсутсвию каких-либо записей
15 Лоботряс
 
24.04.12
21:48
Делается просто левым соединением справочника со срезом последних по регистру
16 dizpers
 
24.04.12
21:54
(14) и (15) - это мысль, спасибо! сейчас опробую!
17 Мимохожий Однако
 
24.04.12
23:38
Создай документ Сеанс и в нём регистрируй места. При проведении документа пиши в РС Свободные места только те, что нужно.
18 mistеr
 
25.04.12
05:43
(11) Если РС подчинен регистратору, писать нужно только документом.
Подсказка. Документ можно создать и провести программно.
Подсказка2. Но надо ли? Тем более ради одного места.
2 + 2 = 3.9999999999999999999999999999999...