8.х Как достать данные из регистра сведений?

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Skyrim, 30 ноя 2010.

  1. TopicStarter Overlay
    Skyrim
    Offline

    Skyrim Опытный в 1С

    Регистрация:
    1 ноя 2010
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    В обработчике события при изменения поля номенклатура в поле цена должна заноситься значение цены из регистра сведений ЦеныНоменклатуры. Написал такой код:


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


    Но значение из регистра сведений не записывается в поле.
    Что я неправильно сделал? и как нужно правильно написать?
  2. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Регистр сведений, я надеюсь, непериодический?

    Код:
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
    СтрокаТабличнойЧасти.Цена = Выборка.Цена;
    КонецЕсли;
    
    
  3. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Эт че эт вы тут делаете?
    1) Не "РегистрСведений.ЦеныНоменклатуры", а "РегистрСведений.ЦеныНоменклатуры.СрезПоследних"
    2) В параметры виртуальной таблицы "СрезПоследних" добавить "Дату" и "Тип цен".
  4. TopicStarter Overlay
    Skyrim
    Offline

    Skyrim Опытный в 1С

    Регистрация:
    1 ноя 2010
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Requin, Спасибо. Работает как надо
  5. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    [off]Да не за что. Для спасибо кнопка есть :angry:[/off]

    По регистру сведений все же уточнить:
    Регистр непериодический (хранится только одно значение цены по каждой номенклатуре)?
    Конфигурация, я так понимаю, нетиповая?
  6. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Requin правильно написал то, как забить цену в нужную ячейку.
    Однако запрос у вас некорректен. shurikvz прав. Надо использовать "РегистрСведений.ЦеныНоменклатуры.СрезПоследних", т.к в регистре хранится вся история изменения цен, а вам надо получить актуальную цену на сегодняшний день (поэтому нужен параметр "Дата"). И цену соответствующего типа (например "Розничная"). (Параметр "Тип цен")
  7. TopicStarter Overlay
    Skyrim
    Offline

    Skyrim Опытный в 1С

    Регистрация:
    1 ноя 2010
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Спс прийму к сведению и переделаю
  8. 1cUserAndrew
    Offline

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

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

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    ну или

    Таблица = Запрос.Выполнить().Выгрузить();
    Если Таблица.Количество()=0 Тогда
    СтрокаТабличнойЧасти.Цена = 0;
    Иначе
    СтрокаТабличнойЧасти.Цена = Таблица[0].Цена;
    КонецЕсли;
  10. Pavel2009
    Offline

    Pavel2009 Опытный в 1С

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

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

    Ученик1c

    Регистрация:
    3 дек 2010
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Номенклатура = &Номенклатура - это параметр РегистраСведений.ЦеныНоменклатуры.СрезПоследних, то есть ты отбираешь только ту Номенклатуру из регистра, которая есть у тебя в табличной части - Запрос.УстановитьПараметр("Номенклатура", СтрокаТабличнойЧасти.ОказаннаяУслуга);
  12. mihailo
    Offline

    mihailo

    Регистрация:
    22 янв 2014
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте! Не подскажете тупню один момент, у меня имеется регистр сведений. А также справочник ТипЦен. Данный код работает прекрасно, если у меня один выбор типа цен. А если мне требуется выбрать цену закупки и цену продажи, да чтобы они заносились в регистр сведений как две строчки (одинаковая номенклатура, но разный типцены и сама цена), как мне это осуществить, подскажите, пожалуйста. Вот код, который работает, если у меня идет выбор только одного параметра ТипЦен. Я только начинаю разбираться в этом.

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

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Вам ТипЦен нужно загонять в СПИСОК значений, который будет параметром отбора. Сделайте этот отчет на СКД, делов на 5 минут.
  14. nbIpKuH_BaH9I
    Offline

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Добавлю. Это походу не отчет. Там событие при изменении.
    Код:
    ТипЦен В (&ТипЦен)
    И в параметры устанавливайте список значений.

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