Имя: Пароль:
1C
1C 7.7
v7: Периодический в соседнем справочнике
0 sunnmas
 
08.04.14
11:42
Есть 2 справочника ЭКЛЗ и СписокККМ
У справочника СписокККМ реквизит периодический.
Пытаюсь определить в какой кассе установлена ЭКЛЗ

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

В ЭК пусто, не могу получить доступ к периодическому реквизиту справочника СписокККМ. Помогите пожалуйста. Использовать владельца не буду.
1 sunnmas
 
08.04.14
11:44
Кстати, ГдеУстановлена() вызывается из модуля справочника ЭКЛЗ
2 vinogradъ
 
08.04.14
11:54
После ЭК = Касса.ЭКЛЗ.Получить() ЭК.ТекущийЭлемент() не прокатит, по-моему.
Сделай периодическим реквизит с типом Справочник.СписокККМ у справочника ЭКЛЗ.
3 viktor_vv
 
08.04.14
12:13
На всякий случай в явном виде датц поставь.

Касса.ЭКЛЗ.Получить(ТекущаяДата());

Какие траблы у меня были, если дату не указывать.
4 viktor_vv
 
08.04.14
12:13
*дату
5 Ujcnm99
 
08.04.14
12:29
Касса.ЭКЛЗ - будет работать, если было "Касса.ИспользоватьДату"

Период.ИспользоватьОбъект(,Касса)

Зачем вообще Период

Может так?
ЭКЛЗ = ТекущийЭлемент();
Кассы = СоздатьОбъект("Справочник.Кассы");
Кассы.ИспользоватьДату('08.04.2014');
Кассы.ВыбратьЭлементы();
Пока Кассы.ПолучитьЭлемент() = 1 Цикл
    Если Кассы.ЭКЛЗ = ЭКЛЗ Тогда
        Возврат;
    КонецЕсли;
КонецЦикла;
6 sunnmas
 
08.04.14
12:49
Ujcnm99, спасибо, заманчиво и красиво но не то что мне нужно. Я хочу знать все ЭКЛЗ которые были когда либо установлены в ККМ (их меняют каждый год). Потом смотрим ЭКЛЗ лежит. Шеф: че блят* за ЭКЛЗ. А я ГдеУстановлена() и говорю это ИП Пупкина В.В. старая 2011 года выпуска и т.д. и т.п.
ВОбщем нужно чтобы реквизит ЭКЛЗ был периодическим, а ГдеУстановлена() проверяла бы всю историю для каждой кассы.

На текущий момент дело такое. Программа проигрывается до строки
Пока Период.ПолучитьЗначение()=1 Цикл
и вылетает с ошибкой {Справочник.ЭКЛЗ.Форма.Модуль(35)}: Перед выполнением операции нужно вызвать 'ИспользоватьОбъект'!

Пробывал такие вариации:
Период.ИспользоватьОбъект(,ЭК.ТекущийЭлемент());
Период.ИспользоватьОбъект(,ЭК);
Период.ИспользоватьОбъект("",ЭК);
Период.ИспользоватьОбъект("Справочник.СписокККМ.ЭКЛЗ",ЭК);
Период.ИспользоватьОбъект("ЭКЛЗ",ЭК);

Вообще справка по этой функции очень размыта. Я не понимаю 1  параметр. Написано <ИмяРеквизита> - строка с названием периодического реквизита справочника или периодической константы;

Если из контекста самого справочника то реквизит ЭКЛЗ, а если из контекста справочника ЭКЛЗ я пробовал бредовый вариант "Справочник.СписокККМ.ЭКЛЗ".

Кто разобрался с данной функцией проясните пожалуйста ситуацию. А еще она не ругается непосредственно на стоку с вызовом ИспользоватьОбъект, а вылетает уже после.
7 Builder
 
08.04.14
12:59
(6) Чего не понятного с ИспользоватьОбъект ?
ИспользоватьОбъект("Имя твоего реквизита","Твой текущий элемент справочника").
У тебя похоже будет что то типа
Период.ИспользоватьОбъект("ЭКЛЗ",Касса);
8 Builder
 
08.04.14
13:02
И дальше перебираешь все ЭКЛЗ на твоей кассе.
Период.ИспользоватьОбъект("ЭКЛЗ",Касса);
       Период.ВыбратьЗначения();
          Пока Период.ПолучитьЗначение()=1 Цикл
               сообщить(""+Период.Значение);
        КонецЦикла;
9 Builder
 
08.04.14
13:10
+(8) Но это ты получишь все ЭКЛЗ на кассе. Если тебе надо на какой кассе был данный ЭКЛЗ, будет что то типа этого:

ВыбЭКЛЗ - элемент на форме, либо передавай в функцию.

Функция ГдеУстановлена()
    Кассы = СоздатьОбъект("Справочник.СписокККМ");
    Кассы.ВыбратьЭлементы();
    Пока Кассы.ПолучитьЭлемент() = 1 Цикл
        Касса = Кассы.ТекущийЭлемент();
        Период = СоздатьОбъект("Периодический");
        Период.ИспользоватьОбъект("ЭКЛЗ",Кассы.ТекущийЭлемент());
        Период.ВыбратьЗначения();
          Пока Период.ПолучитьЗначение()=1 Цикл
            Если Период.Значение = ВыбЭКЛЗ Тогда
                сообщить("здесь - "+Кассы);
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
// Ну и вернуть надо что то, функция же...
Возврат "";
КонецФункции
10 sunnmas
 
08.04.14
13:20
Чуваки, вы все просто супер! Спасибо