Имя: Пароль:
1C
 
Получить последнюю цену из регистра сведений
0 tabarigen
 
02.10.15
11:10
Здравствуйте друзья.
Пробую получить цену из регистра сведений. Хотелось бы обойтись без запроса.

Полный код процедуры  такой.

&НаСервере
Процедура ДобавитьСтрокуНеИзДокумента(СсылкаНоменклатура)
    НовСтрока = Объект.Товары.Добавить();
    НовСтрока.Номенклатура = СсылкаНоменклатура;
    НовСтрока.Номер = Объект.Товары.Количество();
    НовСтрока.Производитель = СсылкаНоменклатура.Производитель;
    НовСтрока.Страна = СсылкаНоменклатура.УАС_СтранаПроизводителя;
    НовСтрока.ЕдиницаИзмерения = СсылкаНоменклатура.ЕдиницаИзмерения;
    НовСтрока.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
    НовСтрока.Количество = 1;
    //НовСтрока.Цена = 0;
    Отбор = Новый Структура;
    Отбор.Вставить("Номенклатура", СсылкаНоменклатура);
    Дата = ТекущаяДата();
    НовСтрока.Цена = РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(Дата, Отбор);
КонецПроцедуры


Однако Цена не получается. Что делаю не так?
1 eklmn
 
гуру
02.10.15
11:12
всё
2 xaozai
 
02.10.15
11:14
(0) Посмотри, что вот это возвращает:

РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(Дата, Отбор)
3 ibreiter
 
02.10.15
11:27
По этой номенклатуре в регистре есть вообще записи?
4 Maniac
 
02.10.15
11:28
РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(Дата, Отбор);

вернет массив записей. тк по этой номенклатуре может быть еще валом записей - типа разные характеристики, типы цен и так далее
5 eklmn
 
гуру
02.10.15
11:34
(4) а если у него самописка с 1 измерением? )
6 Maniac
 
02.10.15
11:35
(5) судя по тому что автор такую фигню пишет - то самописка там еще та.
7 Maniac
 
02.10.15
11:35
в любом случае метод не возвращает ни в коем случае значение ресурса. НИКАК
8 Одинесю
 
02.10.15
11:36
(4) Структуру, а не массив )
9 Альбатрос
 
02.10.15
11:37
(8) +1
10 Альбатрос
 
02.10.15
11:39
И я бы юзал СрезПоследних(), но она тоже возвращает ТЗ
11 Одинесю
 
02.10.15
11:44
Посмотри, что у тебя в РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(Дата, Отбор); в Отборе.
12 tabarigen
 
02.10.15
11:45
(11) Обработка внешняя, точка останова не срабатывает почему то.
13 Альбатрос
 
02.10.15
11:47
(12) СП открой и почитай
14 User_Agronom
 
02.10.15
11:48
(5) Всё равно массив вернёт. С одним элементом.
15 zhig75
 
02.10.15
11:50
Цены = РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(Дата, Отбор);
НоваяСтрока.Цена = Цены.Цена;
16 zhig75
 
02.10.15
11:51
+(15) ПолучитьПоследнее возвращает массив.
17 zhig75
 
02.10.15
11:52
+(16) Брррр Структуру.
18 Альбатрос
 
02.10.15
11:53
(16) Млять...

РегистрСведенийМенеджер.<Имя регистра сведений> (InformationRegisterManager.<Имя регистра сведений>)
ПолучитьПоследнее (GetLast)
Синтаксис:

ПолучитьПоследнее(<КонецПериода>, <Отбор>)
Параметры:

<КонецПериода> (необязательный)

Тип: Дата; МоментВремени; Граница.
Определяет момент времени, по который необходимо получить значения ресурсов. Может задаваться значениями типа Дата, МоментВремени или Граница. Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.
<Отбор> (необязательный)

Тип: Структура.
Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры - задает отбираемое по данному измерению значение.
Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение.
Если параметр не указан, то отбор не используется.
Возвращаемое значение:

Тип: Структура.
Возвращает структуру, содержащую значения ресурсов.
19 Maniac
 
02.10.15
11:53
Пипец. Все обкуренные чтоли.
20 zhig75
 
02.10.15
11:54
(19) Пятница!!!
21 ibreiter
 
02.10.15
11:54
(12) База на сервере?
22 tiago
 
02.10.15
12:21
(0)Может так:

РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(Дата, Отбор).ЦЕНА (или что-то там...) ?
23 tabarigen
 
02.10.15
12:52
(21) да.
24 tiago
 
02.10.15
12:58
(23) написанное в (11) читал/проверял? Что возвращает?
25 ibreiter
 
02.10.15
12:58
(23) Тогда нужна отладка на сервере или в файловой копии отлаживайте
26 tabarigen
 
02.10.15
13:17
(11) посмотрел в отладчике на файловой копии. в отборе ссылка на номенклатуру,
27 tabarigen
 
02.10.15
13:19
В возвращаемом массиве нулевая цена,
https://yadi.sk/i/XN9ZZK9yjU2YA

хотя розничная цена у него 12 руб
28 MSOliver
 
02.10.15
13:20
а может всё таки запросом...
29 tixis
 
02.10.15
13:25
(0) почему не хотите запросом?
РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(Дата, Отбор); - Это по сути тоже запрос.
30 tiago
 
02.10.15
13:26
(27) Откуда информация про 12 руб.? Может стоит в пользовательском в регистре глянуть, может хотели поставить 12, а документ(регистратор) забыли провести?
31 Одинесю
 
02.10.15
13:28
А какая структура у регистра, в самом регистре есть цена номенклатуры в 12 рублей?
32 tabarigen
 
02.10.15
13:36
(28) Запросом так запросом, просто хотелось упростить немного.
33 tabarigen
 
02.10.15
13:37
(29) Вообще без разницы как, интересно просто. Почему не получилось через регистр.
34 Альбатрос
 
02.10.15
13:39
(33) Самописка у тебя?
35 tabarigen
 
02.10.15
13:40
(34) Нет Управление Аптечной Сетью, по сути та же УТ11.
36 Одинесю
 
02.10.15
13:45
(33) А у тебя не получится и через запрос, надо с регистром разобраться и с записью в 12 рублей.
37 tabarigen
 
02.10.15
13:57
(36)И в самом деле, через запрос тоже Null дает,

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


Может из за того что Серии не указываю?
38 Альбатрос
 
02.10.15
13:58
(37) Может из-за того, что в РС действительно нет цены для этой позиции?
39 Одинесю
 
02.10.15
13:59
(37) Ты должен все измерения, которые используешь передать в запрос, поэтому и говорю - посмотри структуру регистра
40 Альбатрос
 
02.10.15
13:59
(39) Зачем?
41 tabarigen
 
02.10.15
14:00
(38) точно нет. Розничная цена ведь указана.
вот посмотрите
https://yadi.sk/i/HkJl8KjGjU644
42 tabarigen
 
02.10.15
14:01
(39) Тогда помогите передать в запрос Серию.
Надо из справочника СерииНоменклатуры, передать последнию серию. Исходные данные ссылка номенклатуры.
43 Альбатрос
 
02.10.15
14:02
(42) не надо туда ее передавать
44 Альбатрос
 
02.10.15
14:03
(41) Это точно одна и та же номенклатура?
45 1sanekmaloi1
 
02.10.15
14:03
Ветку в пятничную надо переименовать
46 Альбатрос
 
02.10.15
14:05
(45) Мне уже самому интересно, почему у него цена не выходит. Я уже даже на работе ради истины задержался
47 tabarigen
 
02.10.15
14:05
(44) одна  и та же. Без сомнений. А что не так?
48 tabarigen
 
02.10.15
14:05
(46) Залетай по тимвьюверу)
49 Одинесю
 
02.10.15
14:05
(43) Если у него несколько серий - он нескольких серий и выдаст цены
50 Альбатрос
 
02.10.15
14:06
(47) Может это дубли. Коды позиций в (41) во всех строчках одинаковые?
51 Альбатрос
 
02.10.15
14:06
(49) Он у него вообще ни одной цены не выдает. А без указаний серий должен все выдать
52 tabarigen
 
02.10.15
14:12
(51) Коды одинаковые. Видно же что в регистре цены по одному товару. Цена производителя, Цена закупки и розничная Цена.
53 tixis
 
02.10.15
14:14
(51) ты подключался по тимвиверу или предположения высказываешь?
54 Альбатрос
 
02.10.15
14:14
(53) Предположения. У нас тимвиверы запрещены
55 tixis
 
02.10.15
14:15
(52) Консоль запросов есть? Давай тимвивер
56 tixis
 
02.10.15
14:15
мне уже тоже еинтересно
57 Альбатрос
 
02.10.15
14:16
(56) Сдаю смену ))) я домой, потом зайду из дома, гляну, чего вы выяснили
58 tixis
 
02.10.15
14:17
(57) так ТС пока молчит, может тоже уже дома))
59 tabarigen
 
02.10.15
14:20
60 tabarigen
 
02.10.15
14:20
лови, я тут еще)
61 tabarigen
 
02.10.15
14:21
298 747 121
9f52px
62 tixis
 
02.10.15
14:27
Время кончилось
63 tixis
 
02.10.15
14:27
все работает
64 tixis
 
02.10.15
14:27
все показывает
65 Одинесю
 
02.10.15
14:27
(63) и че было?
66 tixis
 
02.10.15
14:28
(61) у тебя же возвращается таблица значений и первая строка тебе и показывает цеу
67 tixis
 
02.10.15
14:29
(65) все там показывает, просто Запрос.Выполнить.Выгрузить() и видать пытался сразу цену получить без обхода. Я точно не знаю, у меня тим вивер 5 минут и выкинул
68 tixis
 
02.10.15
14:32
ТС ты где, в чем проблема то? запрос же все верно возвращает
69 Одинесю
 
02.10.15
14:34
(67) Т.е. он берет первую цену в коллекции, я же говорил, что надо все измерения в отбор делать, тогда он найдет нужную.
70 tixis
 
02.10.15
14:37
(69) Я успел увидеть только то, что запрос работает, и правильно возвращает цену (12 рублей) и в результате, который получается Результат = Запрос.Выполнить.Выгрузить() одна строка с ценой 12 рублей, про какой null говорил ТС не знаю.
71 magicSan
 
02.10.15
14:39
НовСтрока.Цена = РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(Дата+1, Отбор); попробуй
72 kudlach
 
02.10.15
14:43
Интересно, в Отборе кроме Номенклатуры был ли тип цен ?...
Регистр посуточно фиксит или по времени записи ?....
Про пачку измерений сказали..
73 tabarigen
 
02.10.15
15:52
&НаСервере
Процедура ДобавитьСтрокуНеИзДокумента(СсылкаНоменклатура)
    НовСтрока = Объект.Товары.Добавить();
    НовСтрока.Номенклатура = СсылкаНоменклатура;
    НовСтрока.Номер = Объект.Товары.Количество();
    НовСтрока.Производитель = СсылкаНоменклатура.Производитель;
    НовСтрока.Страна = СсылкаНоменклатура.УАС_СтранаПроизводителя;
    НовСтрока.ЕдиницаИзмерения = СсылкаНоменклатура.ЕдиницаИзмерения;
    НовСтрока.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
    НовСтрока.Количество = 1;
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена) КАК Цена
                   |ИЗ
                   |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЗапроса, Номенклатура = &СсылкаНаНоменклатуру) КАК ЦеныНоменклатурыСрезПоследних
                   |ГДЕ
                   |    ЦеныНоменклатурыСрезПоследних.Номенклатура = &СсылкаНаНоменклатуру";
    Запрос.УстановитьПараметр("ДатаЗапроса", КонецДня(ТекущаяДата()));
    Запрос.УстановитьПараметр("СсылкаНаНоменклатуру", СсылкаНоменклатура);   // еще раз
    Результат = Запрос.Выполнить().Выгрузить();   // останови и покажи параметры которые устанавливаешь
    Если Не Результат.Количество() = 0 Тогда
        НовСтрока.Цена = Результат[0].Цена;
    Иначе
        НовСтрока.Цена = 0;
    КонецЕсли;
    
    НовСтрока.Сумма = НовСтрока.Цена * НовСтрока.Количество;
КонецПроцедуры


Всем спасибо за помощь. Расходимся))
74 Tatitutu
 
02.10.15
16:25
(73) тебя уволят. Бред написан
75 Tatitutu
 
02.10.15
16:26
(73) скриншот раскрытого регистра "ЦеныНоменклатуры" дай глянуть

зачем два условия
76 tixis
 
02.10.15
17:24
(73) нужно еще отбор на тип цен ставить,
Независимо от того, куда вы едете — это в гору и против ветра!