8.х Справочник и регистр сведений

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Павел, 11 янв 2008.

  1. TopicStarter Overlay
    Павел
    Offline

    Павел

    Регистрация:
    28 сен 2007
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Итак, мне нужно создатьб справочник "валюта" так, чтобы курс валюты выбирался из периодического регистра сведений.

    1. Создал регистр свединий(период 1сек).
    2. Создал справочник с нужными реквизитами.

    3. создал Общий модуль: РаботаСоСправочниками в тексте модуля написал:

    Код:
    Функция АктуальныйКурсВалюты(АктуальнаяДата, ЭлементВалюта) Экспорт
    
    //создать вспомогательный объект Отбор
    
    Отбор = Новый Структура("Валюта",ЭлементВалюта);
    
    //получить актуальные значения ресурсов регистра
    
    ЗначенияРесурсов = РегистрыСведений.Валюта.ПолучитьПоследнее(АктуальнаяДата, Отбор);
    
    Возврат ЗначенияРесурсов.Цена; 
    
    КонецФункции
    
    4. В модуле справочника написал:


    Процедура НаименованиеПриИзменении(Элемент)
    // Вставить содержимое обработчика.

    Элементыформы.Курс = АктуальныйКурсВалюты(Дата, Элементыформы.Наименование);

    КонецПроцедуры

    Вышла ошибка

    {Справочник.Валюта.Форма.ФормаЭлемента(5,43)}: Переменная не определена (Дата)
    Элементыформы.Курс = АктуальныйКурсВалюты(<<?>>Дата, Элементыформы.Наименование);


    Почему?
  2. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Потому, что переменная Дата не определена перед вызовом процедуры.
    Попробуй сделать так:
    Дата = ТекущаяДата();
    Элементыформы.Курс = АктуальныйКурсВалюты(Дата, Элементыформы.Наименование);

    При этом ты должен быть уверен, что локальная дата компьютера выставленна верно.

    Но лучше, создай в справочнике реквизит Курс, и используй конструкцию
    Курс = АктуальныйКурсВалюты(Дата,Элементыформы.Наименование);
  3. TopicStarter Overlay
    Павел
    Offline

    Павел

    Регистрация:
    28 сен 2007
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Немного изменил модуль РаботаСоСправочниками:


    Код:
    Функция АктуальныйКурсВалюты(АктуальнаяДата, ЭлементВалюта) Экспорт
    //создать вспомогательный объект Отбор
    Отбор = Новый Структура("Валюта",ЭлементВалюта);
    //получить актуальные значения ресурсов регистра
    ЗначенияРесурсов = РегистрыСведений.Валюта.ПолучитьПоследнее(АктуальнаяДата, Отбор);
    Возврат ЗначенияРесурсов.курс; 
    КонецФункции
    
    

    В модуле справочника написал:

    Код:
    Процедура НаименованиеПриИзменении(Элемент)
    
    Дата = ТекущаяДата();
    
    сообщить(Дата);
    сообщить(Элементыформы.Наименование.Значение);
    сообщить(АктуальныйКурсВалюты(Дата, Элементыформы.Наименование.Значение));        
    
    КонецПроцедуры
    
    
    Выдает:

    12.01.2008 13:16:43
    Доллар
    0


    В чем может быть причина? Уже пол дня не могу разобраться
  4. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Дуй в регистр сведений Валюта, и создай там запись с значением Валюта = Доллар, датой регистрации меньшей текущей даты и не нулевой Ценой.
  5. TopicStarter Overlay
    Павел
    Offline

    Павел

    Регистрация:
    28 сен 2007
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Я регистр заполнил еще 9 января. Сегодня 12е. Все равно не работает. Почему?
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Код:
    сообщить(АктуальныйКурсВалюты(Дата, Элементыформы.Наименование.Значение));
    
    Автор, в регистре ты тоже строку хранишь?
  7. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Я бы на самом деле не напрягался, а глянул бы типовую УТ, как там все сделано :)
    Ну и еще - не стал бы пользоваться методами, а запрос написал бы.
  8. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    В типовой сделано через метод, а автор пытается передать строку вместо ссылки...
  9. TopicStarter Overlay
    Павел
    Offline

    Павел

    Регистрация:
    28 сен 2007
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Я только учусь. Можно сказать я вообще ничего не знаю. Помогите разобраться с этим вопросом
  10. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    В типовой, надо смотреть релиз конечно, но то, что видел я - это общая процедура, которая вызывает запрос.

    Почему я рекомендую запрос - потому что конструктором запросов сразу станет видно какие типы данных используются в регистре сведений и как получить срез последний и установить параметры.
  11. TopicStarter Overlay
    Павел
    Offline

    Павел

    Регистрация:
    28 сен 2007
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1

    Приведи решение с помощью запроса с поянениями. Мне нужно сделать и нужно в этом разобраться
  12. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Автор, обрати внимание, что передается, как валюта.
    Нужно передать туда ссылку на элемент справочника валюты, а ты пытаешься передать туда строку с названием валюты. Это два разных понятия!

    Проще говоря, тебе надо поучить ссылку на твою валюту, т.е. нечто типа:
    Код:
    Валюта = Справочники.Валюты.НайтиПоНаименованию("доллар");
    
  13. TopicStarter Overlay
    Павел
    Offline

    Павел

    Регистрация:
    28 сен 2007
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1

    Большо спасибо. Получилось

Поделиться этой страницей