Имя: Пароль:
1C
1С v8
Выбран() = Ложь или что такое "уровнь разделения НезависимоИСовместно"
0 fishb1
 
09.07.15
08:14
Добрый день!

Есть следующий код:

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

В некоторых случаях, при точно существующих записях по отбираемому измерению, не попадаю в условие, поскольку Выбран() возвращает Ложь.

В СП по методу Прочитать() есть такие строки:

"Описание:
Считывает запись регистра сведений по установленным значениям ключевых полей, включая разделители с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. При этом, если указать значение разделителя, отличное от используемого в сеансе или не указать не используемое в сеансе, Выбран вернет Ложь."

Может кто-нибудь мне расшифровать это послание? Умоляю!!!
1 hhhh
 
09.07.15
09:14
делайте через набор записей
2 ИсчадиеADO
 
09.07.15
09:35
разделители - это общие реквизиты, могут использоваться, например, когда в 1 базе ведется учет по нескольким не связанным фирмам. С помощью разделителя можно разделить доступ на объекты конфигурации
3 ИсчадиеADO
 
09.07.15
09:36
4 fishb1
 
09.07.15
09:46
(1) Я запросом сделал.

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    ИзмененияОбъектов.Создал,
        |    ИзмененияОбъектов.ДатаСоздания,
        |    ИзмененияОбъектов.ОбъектСсылка
        |ИЗ
        |    РегистрСведений.ИзмененияОбъектов КАК ИзмененияОбъектов
        |ГДЕ
        |    ИзмененияОбъектов.ОбъектСсылка = &ОбъектСсылка
        |
        |УПОРЯДОЧИТЬ ПО
        |    ИзмененияОбъектов.Период";
    
    Запрос.УстановитьПараметр("ОбъектСсылка", Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Менеджер = РегистрыСведений.ИзмененияОбъектов.СоздатьМенеджерЗаписи();
    Менеджер.Период = ТекущаяДата();
    Менеджер.ОбъектСсылка = Ссылка;

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

Просто я залип на этом описании. Теперь спать не буду, пока не пойму. :)
5 fishb1
 
09.07.15
09:48
(2) Спасибо большое за объяснение.

Теперь осталось понять, почему у меня происходит разделение набора записей.
6 hhhh
 
09.07.15
09:50
Менеджер.Период = ТекущаяДата(); - вот это что? прямо затекущую секунду проверяете?
7 fishb1
 
09.07.15
10:00
(6) Это новая запись создается. Там дальше еще код идет.
И вообще мопед не мой, попросили пофиксить. :)
8 fishb1
 
09.07.15
10:21
(6) И вообще, я тут немного поковырялся. Изначально регистр был непериодический (по сути так и должно быть). Потом из него попытались сделать космический корабль и на этом весь механизм сломался.
9 hhhh
 
09.07.15
10:41
(8) конечно, ели указывете период Текущая секунда, и ожидаете Что Выбран() за эту секунду уже будет Истина.
10 fishb1
 
09.07.15
10:48
(9) Ну, СП оптимисты писали.

Пример:

Курс = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Курс.Валюта = ВыбВалюта;
Курс.Период = ТекущаяДата();
Курс.Прочитать();
Если Не Курс.Выбран() Тогда
    Курс.Период = ТекущаяДата();
    Курс.Валюта = ВыбВалюта;
    Курс.Курс = 41.35;
    Курс.Кратность = 1;
КонецЕсли;
Если ВвестиЧисло(Курс.Курс, "Введите курс на сегодня",15,5) Тогда
    Курс.Записать();
КонецЕсли;
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс