8.х Регистр сведений

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

  1. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    Имеется регистр сведений ЦеныНоменклатуры, с измерением Номенклатура (СправочникСсылка.СпрНоменклатура) и ресурсом Цена (число). Хочу из него получить последние данные по ценам, для номенклатуры, но не могу, разобраться со Структурой, как задать переменной Отбор - ключ и значение регистра сведений! Заранее спасибо!

    Вот набрасал не большой код:

    СпрНоменклатура=Справочники.СпрНоменклатура;
    Отбор=Новый Структура("Номенклатура", "Номенклатура" или Спр.Номенклатура или как то еще???);
    Дата=ТекущаяДата();
    ЗначениеРесурсов=РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(Дата,Отбор);


    ТекСтрока=ЭлементыФормы.Услуги.ТекущиеДанные;
    ТекСтрока.Цена=ЗначениеРесурсов.;
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Попробуйте так, хотя написал на коленке, нет под рукой 1С.
    ТекСтрока.Цена=ЗначениеРесурсов.Цена
  3. ximera
    Offline

    ximera Опытный в 1С

    Регистрация:
    5 фев 2008
    Сообщения:
    205
    Симпатии:
    0
    Баллы:
    26
    Код:
    Номенклатура = ВыбраннаяНоменклатура;
    Отбор = Новый Структура;
    Отбор.Вставить("Номенклатура", Номенклатура);
    ТекЦена = РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(ТекущаяДата(), Отбор);
    Сообщить (ТекЦена.Цена)
    
    
    Это для одного значения, а если несколько нужно, то советовал бы воспользоваться запросом и получить на выходе ТЗ
  4. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    А не могли бы вы пояснить по Структуре - вот
    Отбор = Новый Структура;
    Отбор.Вставить("Номенклатура", Номенклатура) -т.е. "Номенклатура" это колонка регистра, а Номенклатура - это ???
  5. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Да, лучше воспользоваться запросом. Помимо всего прочего еще тип цен надо учитывать.
    Посмотрите вот эту тему. Там примерно то, что вам надо.
    http://www.1c-pro.ru/index.php?showtopic=2...%E0%E7%E0%F2%FC
  6. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.400
    Симпатии:
    40
    Баллы:
    54
    "Номенклатура" - имя измерения регистра (смотрите метаданные этого регистра)
    Номенклатура - Значение отбора типа СправочникСсылка.Номенклатура, т.е. конкретная позиция номенклатуры.
  7. denis_msz
    Offline

    denis_msz

    Регистрация:
    15 фев 2011
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Код:
     Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    Ном=  ДанныеСтроки.Ссылка;
    Отбор = Новый Структура;
    Отбор.Вставить("Номенклатура", Ном);
    ТекЦена = РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(ТекущаяДата(), Отбор);
    
    ОформлениеСтроки.Ячейки.Цена.УстановитьТекст(ТекЦена.Цена);
    КонецПроцедуры
    
    
    Отобразит тебе в колонке "Цена" последную цену для открываемого справочника,только колонку добавить надо в справочник с именем "Цена"
  8. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.400
    Симпатии:
    40
    Баллы:
    54
    Про структуру
    "Номенклатура" - уникальное имя ключа, по нему будет искаться значение
    Номенклатура - значение

    т.е.
    Если я пишу
    Структтура = Новый Структура;
    Структтура.Вставить("Номенклатура", Номенклатура);

    ПеременнаяСНоменклатурой = Структура.Номенклатура;

    Сейчас было выполнено обращение по имени, т.е. по ключу структуры, также и платформа, по имени ключа выбирет измерение регистра сведений, т.е. имя ключа и имя регистра сведений должно совпадать, для того чтобы платформа автоматически могла их состыковать.
  9. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    Таким образом, могу ли я, задать значением структуры (Знач1=ТекСтрока.ОказаннаяУслуга),
    будущие значение, Табличной части, колонки ОказаннаяУслуга (СправочникСсылка.СпрНоменклатура),
    чтобы при выборе значения (из Справочника СпрНоменклатура) в этой колонке , находилось значение, которое находиться в Регистре Сведений?

    Код:
     ТекСтрока=ЭлементыФормы.Услуги.ТекущиеДанные;
    Знач1=ТекСтрока.ОказаннаяУслуга.Значение;
    //СпрНоменклатура=Справочники.СпрНоменклатура;
    Отбор=Новый Структура("Номенклатура",Знач1);
    Дата=ТекущаяДата();
    ЗначениеРесурсов=РегистрыСведений.ЦеныНоменклатуры.
    ПолучитьПоследнее(Дата,Отбор);
    
    ТекСтрока=ЭлементыФормы.Услуги.ТекущиеДанные;
    ТекСтрока.Цена=ЗначениеРесурсов;
    
    
    P.S. Знач1=ТекСтрока.ОказаннаяУслуга.Значение; Ошибка - Поле объекта не обнаружено (Значение) :angry:
  10. ximera
    Offline

    ximera Опытный в 1С

    Регистрация:
    5 фев 2008
    Сообщения:
    205
    Симпатии:
    0
    Баллы:
    26
    поставьте точку останова на Знач1=ТекСтрока.ОказаннаяУслуга.Значение; и посмотрите в отладчике что вообще такое ТекСтрока.ОказаннаяУслуга - его тип и доступные поля
  11. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Код:
    Знач1=ТекСтрока.ОказаннаяУслуга.Ссылка
    
    Хотя не факт, нужно смотреть как ximera посоветовал.
  12. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.400
    Симпатии:
    40
    Баллы:
    54
    Если Знач1 ссылка того же тпа что и измерение регистра "Номенклатура", то да. Другое дело я сейчас откровенно не помню цены на услуги хранятся ли в регистре цен номенклатуры.
  13. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    Спасибо всем за участие!
    Вопрос решил - Запросом. Единственное, что осталось не понятным строка (Номенклатура = &Номенклатура)

    Код:
    СтрокаТабличнойЧасти = ЭлементыФормы.Услуги.ТекущиеДанные;
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ДатаЦен", ТекущаяДата());
    Запрос.УстановитьПараметр("Номенклатура", СтрокаТабличнойЧасти.ОказаннаяУслуга);
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ЦеныНоменклатуры.Цена КАК Цена
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦен,Номенклатура = &Номенклатура) КАК ЦеныНоменклатуры";
    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
    СтрокаТабличнойЧасти.Цена = 0;
    Иначе
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
    СтрокаТабличнойЧасти.Цена = Выборка.Цена;
    КонецЦикла;
    КонецЕсли;
    
  14. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    В запрос вы передаете параметр Номенклатура, который инициализируете строчкой:
    Код:
    Запрос.УстановитьПараметр("Номенклатура", СтрокаТабличнойЧасти.ОказаннаяУслуга);
    
  15. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    А почему в запрос не передаете отбор по типу цен? Так как у вас некорректно. Представьте что для номенклатуры задано несколько цен (оптовая, розничная и т.д.), если получать данные так, как получаете их вы - в вышеуказанном случае СтрокаТабличнойЧасти.Цена будет у вас принимать произвольное значение из назначенных номенклатуре типов цен.
  16. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Походу он про это просто не знал:)
  17. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    Базу создал свою учебную, и типы цен ещё, в неё не в бил! Но все впереди! :angry:
  18. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    А не могли бы вы уточнить, почему именно Номенклатура = &Номенклатура, а не просто &Номенклатура, ведь дата описалась как просто - &Дата

    Код:
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦен,[u]Номенклатура = &Номенклатура) КАК ЦеныНоменклатуры
    
  19. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Можно и так:), главное чтобы типы совпадали.
  20. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Таков порядок.
    Первый параметр этой виртуальной таблицы это период, поэтому нет необходимости писать Дата=&ДатаЦен. Пишется просто имя параметра, которым будет задаваться дата среза.
    Второй параметр - это уже условия: там может быть условие не только по одному параметру, т.е. например
    Код:
    "РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦен,Номенклатура = &Номенклатура И Склад = &Склад И ТипЦен = &ТипЦен)"
    
    
    
    В левой части равенства - у нас находится к какому именно измерению или ресурсу регистра применяется это условие, в правой части - переменная, в которой будет задаваться собственно само значение этого условия.

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