Имя: Пароль:
1C
 
В Регистре сведений ЦеныНоменклатуры нет поля период, как получить срез последних цен
0 rassini
 
29.09.09
10:02
В Регистре сведений ЦеныНоменклатуры нет поля период (есть данные по документу создавшему запись в регистре), как получить

срез последних цен по документа регистраторам данного регистра?

или где еще можно найти последние установленные цены на номенклатуры?

В справочнике Номенклатуры цен нет. Справочник большой более 20тыс номенклатур
1 НЕА123
 
29.09.09
10:04
вот ведь он... кризис...
Период и тот уперли
2 Леха Дум
 
29.09.09
10:05
если рег периодический то период есть - ищи лучше
3 rassini
 
29.09.09
10:06
Регистр периодический - В пределах дня.

Используемый запрос:

Процедура КнопкаВыполнитьНажатие(Кнопка)
ЗапросПример();

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

Процедура ЗапросПример()

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

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

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

Результат: Пустое табличное поле
4 degot
 
29.09.09
10:14
попробуй убрать параметры ВТ
5 Живой Ископаемый
 
29.09.09
10:18
2(3) и из-за того что пустое табличное поле ты подумал что нет поля Период? где тебя так учили думать? если бы не было поля Период - у тебя бы просто запрос не выполнился бы.
6 Живой Ископаемый
 
29.09.09
10:20
и вообще - совет всем-всем-всем, у кого их копро-код возвращает пустой результат запроса - выполняйте его сначала в консоли и безо всяких условий и ограничений. и только если он и в таком случае не выполняется - идите на мисту и вопите что чего-то нет где-то
7 Ненавижу 1С
 
гуру
29.09.09
10:23
(3) у меня все работает, что я делаю не так
8 Ненавижу 1С
 
гуру
29.09.09
10:23
может и цен нет?
9 Ненавижу 1С
 
гуру
29.09.09
10:24
ты даты то заполняешь?
10 Живой Ископаемый
 
29.09.09
10:25
Часто 1Сники похожи на алкаша из анекдота, который что-то ищет ночью что-то под фонарем..  Унего милиционер интересуется: Что ищите, товарищ? -- Ключи, отвечает алкаш.. А де вы их потеряли - там, махает рукой куда-то в темноту.. А почему ищите здесь? Ну здесь же светло!
11 rassini
 
29.09.09
10:29
Цены есть, НачПериод и КонПериод через поля ввода данных.
12 rassini
 
29.09.09
10:35
Возможно нет соответствия между получаемыми данными и колнками табличной части?
13 Andry888
 
29.09.09
10:36
можете у тебя КонецПериода<минимального периода в регистре?
14 Ненавижу 1С
 
гуру
29.09.09
10:36
1. консоль попробуй
потом уже проверь, есть ли источник данных у элемента формы
15 Живой Ископаемый
 
29.09.09
10:37
(14)+ и да господи - открыть форму списка РС и посмотреть есть ли в нем строки.
16 rassini
 
29.09.09
10:52
и да господи - открыть форму списка РС и посмотреть есть ли в нем строки.

есть строки
17 rassini
 
29.09.09
10:53
посмотрел РС
есть там поле Период.
18 Живой Ископаемый
 
29.09.09
10:54
Значит все, твоя ветка не имеет право на существование.
19 Живой Ископаемый
 
29.09.09
10:54
и кроме того ты не сделал самого главное, что было повторено многожды.
20 DUDE
 
29.09.09
10:59
Вставлю свои 5 копеек: не стоит получать наименование объекта, если, по крайней мере, не уверен, что не может быть в справочнике дублей по нему.
+ Если уж нет желания выполнять в консоли, то хотя бы делай предварительно выгрузку в ТЗ.
21 mikecool
 
29.09.09
11:00
пробел в запросе в имени параметра убери :)
22 rassini
 
29.09.09
14:33
предварительно выгрузку в ТЗ

подсказать можете как это осуществить?
23 rassini
 
29.09.09
16:09
Процедура КнопкаВыполнитьНажатие(Кнопка)
   ЗапросПример();
   
КонецПроцедуры

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

Все работает. Но номенклатура повторяется. Через СрезПоследних выходят все записи.
24 Живой Ископаемый
 
29.09.09
16:17
понятно... значит в консоли запросов так и не посмотрел... думаешь будут продолжать подсказывать? если ты не выполняешь то, что тебе говорят?
25 rassini
 
29.09.09
16:40
Окончательный вариант рабочий.

Всем спасибо за советы: хорошие и не очень :)

Процедура КнопкаВыполнитьНажатие(Кнопка)
   ЗапросПример();
   
КонецПроцедуры

Процедура ЗапросПример()
   
   Запрос=Новый Запрос();
   Запрос.Текст="ВЫБРАТЬ
   |    ЦеныПокупкиСрезПоследних.Номенклатура,    
   |   ЦеныПокупкиСрезПоследних.Цена,
   |   ЦеныПокупкиСрезПоследних.ЕдиницаИзмерения,
   |   ЦеныПокупкиСрезПоследних.ПроцентСкидкиНаценки,
   |   ЦеныПокупкиСрезПоследних.ТипЦен
   |   ИЗ
   |   РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ) КАК ЦеныПокупкиСрезПоследних";
   
   Запрос.УстановитьПараметр("НачалоПериода",НачалоДня(НачалоПериода));
   Запрос.УстановитьПараметр("КонецПериода",КонецДня(КонецПериода));
   Результат=Запрос.Выполнить();
   ТабличноеПоле1=Результат.Выгрузить();
   ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
   КолСтрок=ТабличноеПоле1.Количество();
       
   КонецПроцедуры
26 Живой Ископаемый
 
29.09.09
16:45
То есть в принципе ничем от (3) кроме отсутствия пробела в имени парметра не отличается... По-прежнему зачем-то лишний параметр.. Так и в чем же у вас была проблема? Вот если у кого-то будет аналогичная - что вы ему подскажите?
27 rassini
 
30.09.09
08:02
Параметр НачалоПериода впринципе не нужна.

Проблема все таки осталась. При выгрузке в Excell списка было обнаржено что есть дублирующиеся записи, но с разными ценами.
28 rassini
 
30.09.09
08:18
Выдает дублирующиеся записи. С чем может быть связано что срезпоследних выдает все записи, из-за этого через обработку ЗагрузкаИзТабличного документа (через Excell файл) в табличную часть документа УстановкаЦенНоменклатуры не проходит. Контроль записей показывает не однозначные записи.
29 rasswet
 
30.09.09
08:25
(28) упорядочь и посмотри, что повторяется.
(24) (26) +100
30 rassini
 
30.09.09
08:47
Повторяются Наименования Номенклатуры.

В РС следующая картина, думаю что она правильная, хотя не с чем сравнить.

Номенклатура повторяется (приходят товары по разным ценам, цена изменяется во времени). Отличаются строки лишь регистрирующими документами.

Логично предположить что СрезПоследних должен выдать из скажем 4 повторяющихся Номенклатур одну последнюю запись (у той которой поле Период будет самой большой-поздней).

Не понимаю почему у меня СрезПоследних выдает все 4 записи (из примера) с разными полями Период (получаются в результате запроса все даты, когда происходили изменения).
31 rassini
 
30.09.09
08:48
упорядочь и посмотри, что повторяется.

Сгруппировать ПО Номенклатуа?
32 НЕА123
 
30.09.09
09:02
(31)
тип цен разный.
33 DUDE
 
30.09.09
09:15
Имхо, автору нужно немного почитать про функцию СрезПоследних, а также про структуру регистров. Функция получает последнее значение по каждой комбинации измерений регистра.
34 rassini
 
30.09.09
10:32
Что значить по комбинации?

В РС набор строк, отличающихся периодом.

тип цен разный.

Разный есть Розничные есть оптовые. ТО есть документ установка цен может установить только один тип цен?
35 ZZeRRo
 
30.09.09
10:54
У регистра Цены номенклатуры 3 измерения: Период, Номенклатура, Тип Цен - вот по каждой паре Номенклатура/ТипЦен тебе и выдается по последней записи.

Например так:
Номенклатура1, ТипЦен1, Цена1
Номенклатура1, ТипЦен2, Цена2
Номенклатура1, ТипЦен3, Цена3
Номенклатура2, ТипЦен1, Цена4
36 ZZeRRo
 
30.09.09
10:56
И еще вариант... Может у тебя номенклатура просто дублируется?
37 rassini
 
30.09.09
11:05
Т.е. РС содержит записи:

Период   Номенклатура   Цена
12.12.09 Спички           1
12.13.09 Спички           2
12.14.09 Спички           1

СрезПоследних какую запись выдаст?
38 rassini
 
30.09.09
11:07
Если перед загрузкой я укажу всем строкам тип цен один и тот же, к примеру РОзничная. Как избавится от дублирующихся записей призагрузке через обработку ЗагрузкаИзТабличногоДокумента?
39 rassini
 
30.09.09
11:52
Возможно надо установить отбор по типу цен. В помщнике смотрел ничего не нашел. Как создать отбор по типам цен в процедуре срезпоследних?
40 tsr
 
30.09.09
12:06
(0) 8.2 юзай, там можно посмотреть стандартные реквизиты
41 Zapal
 
30.09.09
12:09
парень, программирование - это не твоё
бросай пока не поздно
42 rassini
 
30.09.09
12:52
Уже поздно бросать :)

Надо сделать :) в любом случае.
43 DUDE
 
30.09.09
15:46
Если ты хочешь получать последнее движение в регистре по каждой номенклатуре "не заморачиваясь" тем, как работают регистры в 8.Х, то можно сделать так:
для каждой нужной ном-ры выбирать движения из физ. таблицы, оставляя лишь последнее (просто, просто, но некрасиво), типа

ВЫБРАТЬ ПЕРВЫЕ 1
  РС.Номенклатура,
  РС.Период,
  РС.Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры КАК РС
ГДЕ РС.Номенклатура = &ТекущаяНом
УПОРЯДОЧИТЬ ПО РС.Период УБЫВ

или

выбрать ВСЕ движения, упорядочить по периоду и сгруппировать по ном-ре, а потом в цикле обходить:

ВЫБРАТЬ
  РС.Номенклатура,
  РС.Период,
  РС.Цена
ИЗ
  РегистрСведений.ЦеныНоменклатуры КАК РС
УПОРЯДОЧИТЬ ПО РС.Период УБЫВ
ИТОГИ ПО РС.Номенклатура

...
Пока ВыборкаПоНом.Следующий() Цикл
 ВыборкаПоТекНом = ВыборкаПоНом.выбрать();
 Если ВыборкаПоТекНом.Следующий() Тогда
      // получили первую запись выборки по дан. ном-ре, обрабатываем
 КонецЦикла;
КонецЦикла;

Как-то так.
44 Живой Ископаемый
 
30.09.09
15:50
(34) Ну вот тебе и отгадка... Тип цен разный.. Был бы одинаковый - показывал бы только одну запись...
Виртуальная Таблица Срез последних выдает по одной записи на КАЖДУЮ уникальную комбинацию из измерений...
Номенклатура у тебя одна и таже, но типы цен - разные, значит у тебя присутствуют 4 уникальные комбинации... СрезПоследних честно их возвращает.
45 Живой Ископаемый
 
30.09.09
15:51
2(39) если ты пишешь отчет конструктором, то тебе нужно стать на первую закладку, в колонку посредине на таблицу и открыть параметры виртуальной таблицы... Там будет поле условие...
Наложить условие по типу цен.
46 rassini
 
30.09.09
16:14
Пишу не отчет а обработку
47 Живой Ископаемый
 
30.09.09
17:34
2(46) И что? в обработке не вызывается констурктор запросов? Что за нелепый аргумент!
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс