Имя: Пароль:
1C
1С v8
Срез последних
,
0 BarakuzA
 
03.11.11
22:44
имеется данный запрос на определение цены номенклатуры в регистре сведений (ут 10.3)
ВЫБРАТЬ
Перемещение.Ссылка,
Перемещение.Номенклатура,
Перемещение.Количество КАК Количество,
Перемещение.Цена,
ЕСТЬNULL(ЦеныНоменклатурыСрез.Цена,0) Как ЦенаЗакупка
ИЗ
Документ.ПеремещениеТоваров.Товары КАК Перемещение
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&ДатаСреза)КАК ЦеныНоменклатурыСрез
ПО Перемещение.Номенклатура = ЦеныНоменклатурыСрез.Номенклатура
ГДЕ
Ссылка=&ТекущийДокумент

но в результат выполнения в некоторых случах: если в документе одна позиция, запрос выдает две позиции, которые отличаются ценой из регистра. в чем может быть дело???
1 GROOVY
 
03.11.11
23:07
Зачем в запросе документ?
2 rs_trade
 
03.11.11
23:08
Зачем в параметрах нет номенклатуры?
3 GROOVY
 
03.11.11
23:09
Какая периодичность у регистра?
Чему равно значение параметра "ДатаСреза"?
4 ilya_i
 
04.11.11
00:21
все просто - условий в соединении недостаточно, в регистре наверняка есть еще характеристика, единица измерения, контрагент и тип цены
5 BarakuzA
 
05.11.11
21:42
(1), так как запрос в документе перемещение и указываю на этот документ,
(3), периодичность в пределах дня,
Значение параметра ДатаСреза - равно дате документа,кот  указан в запросе
6 BarakuzA
 
05.11.11
21:43
можно поставить какое-нибудь условие,чтобы выбиралось только одно значение при левом соединении?
7 Renat11111
 
05.11.11
21:53
нет условия на тит цен в параметрах ВТ
8 Renat11111
 
05.11.11
21:53
сам пишешь ЕСТЬNULL(ЦеныНоменклатурыСрез.Цена,0) Как ЦенаЗакупка тоесть нужна закупочная цена, а получаешь все цены.
9 Renat11111
 
05.11.11
21:54
+ добавь соединение на характеристики после этого
ПО Перемещение.Номенклатура = ЦеныНоменклатурыСрез.Номенклатура
10 BarakuzA
 
05.11.11
21:55
(9) у меня нет характеристик
11 Renat11111
 
05.11.11
21:57
(10) искренне поздравляю тебя, а как на счет (8) и (9)?
12 BarakuzA
 
05.11.11
22:00
(11) можно другими словами...
13 echo77
 
05.11.11
22:00
(0) отбор сделай по типу цен. Renat11111 об этом уже писал - в параметрах ВТ добавь отбор или тебе любую первую попавшуюся цену(любого типа цен) надо?
Если не понимаешь почему так - выведи все поля из ВТ ЦеныНоменклатурыСрез
14 Renat11111
 
05.11.11
22:04
(13) ему не любую попавшуюся цену даст, а все цены.
(12) других слов у меня нет
15 BarakuzA
 
05.11.11
22:04
мне нужна последняя для данной номенклатуры, а в параметры отбор мне не надо (не откуда брать значение)
16 Renat11111
 
05.11.11
22:07
(15) ну да. тебе нужна последняя закупочная цена. следовательно нужен отбор по типу цен. скопируй запрос в консоль, там все поймешь
17 BarakuzA
 
05.11.11
22:09
(16), я уже написал что не могу добавить отбор по типу цен. запрос писашу через консоль, понимаю что у меня так пролучается из того что два вида цен
18 echo77
 
05.11.11
22:16
(17) Ты с типами цен сначала разберись, какая из двух цен тебе нужна. Если определиться не можешь - то при такой структуре регистра сврез последних будет выдавать все последние записи по разным ресурсам(типам цен, номенклатуре). Тогда тебе нужно писать вложенный запрос и самому фигачить срез но только по одному измерению
19 BarakuzA
 
05.11.11
22:20
(18)-мне нужна цена,которая позже установлена по дате, независимо от типа цен.
20 BarakuzA
 
05.11.11
22:21
(18) смысл уловил)))
21 echo77
 
05.11.11
22:21
(19) Понял тебя. Вот можно почитать: v8: Обрабатываем срез последних
22 BarakuzA
 
05.11.11
23:39
вот такое нашел, но всеравно выдает два значения.. что еще подскажите???
23 BarakuzA
 
05.11.11
23:51
ВЫБРАТЬ
   ЦеныНоменклатурыЗакупочные2.Цена,
   ЦеныНоменклатурыЗакупочные2.Номенклатура,
   ЦеныНоменклатурыЗакупочные2.Период
ИЗ
 
  (ВЫБРАТЬ
       ЦеныНоменклатурыЗакупочные.Цена             КАК Цена,
       ЦеныНоменклатурыЗакупочные.Номенклатура     КАК Номенклатура,
       МАКСИМУМ(ЦеныНоменклатурыЗакупочные.Период) КАК Период
   ИЗ
       РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыЗакупочные
   ГДЕ
      ЦеныНоменклатурыЗакупочные.Период <= &ДатаКон
   СГРУППИРОВАТЬ ПО
       ЦеныНоменклатурыЗакупочные.Номенклатура,
       ЦеныНоменклатурыЗакупочные.Цена) КАК ПоследниеПоПериоду

ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыЗакупочные2
ПО ПоследниеПоПериоду.Период         = ЦеныНоменклатурыЗакупочные2.Период
  И ПоследниеПоПериоду.Номенклатура = ЦеныНоменклатурыЗакупочные2.Номенклатура
  И ПоследниеПоПериоду.Цена         = ЦеныНоменклатурыЗакупочные2.Цена

УПОРЯДОЧИТЬ ПО
   ЦеныНоменклатурыЗакупочные2.Номенклатура.Наименование ВОЗР
24 cViper
 
06.11.11
00:02
(23)Выкинь это.
25 BarakuzA
 
06.11.11
00:09
(24) - а как ?
26 acsent
 
06.11.11
00:14
типы цен
27 BarakuzA
 
06.11.11
00:15
писал выше, что тип цен в отбор нет возможности указать
28 acsent
 
06.11.11
00:20
(27) Ну уж изыщите возможность
29 BarakuzA
 
06.11.11
00:22
(28) да вот и хочу подсказку спросить...
30 BarakuzA
 
06.11.11
00:44
нашел вот такой вариант, но как тут указать нужную мне номенклатуру:
ВЫБРАТЬ ПЕРВЫЕ 1
   ЦеныНоменклатуры.Регистратор

   
   
ПОМЕСТИТЬ ТаблицаРегистратора
ИЗ
   РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры

УПОРЯДОЧИТЬ ПО
   ЦеныНоменклатуры.Период УБЫВ;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ЦеныНоменклатурыСрезПоследних.Номенклатура,
   ЦеныНоменклатурыСрезПоследних.Цена,
   ЦеныНоменклатурыСрезПоследних.ТипЦен
ИЗ
   ТаблицаРегистратора КАК ТаблицаРегистратора
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ПО ТаблицаРегистратора.Регистратор = ЦеныНоменклатурыСрезПоследних.Регистратор;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ТаблицаРегистратора
31 BarakuzA
 
06.11.11
00:47
ВЫБРАТЬ ПЕРВЫЕ 1
   ЦеныНоменклатуры.Регистратор

   
   
ПОМЕСТИТЬ ТаблицаРегистратора
ИЗ
   РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры

УПОРЯДОЧИТЬ ПО
   ЦеныНоменклатуры.Период УБЫВ;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ЦеныНоменклатурыСрезПоследних.Номенклатура,
   ЦеныНоменклатурыСрезПоследних.Цена,
   ЦеныНоменклатурыСрезПоследних.ТипЦен
ИЗ
   ТаблицаРегистратора КАК ТаблицаРегистратора
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ПО ТаблицаРегистратора.Регистратор = ЦеныНоменклатурыСрезПоследних.Регистратор
ГДЕ ЦеныНоменклатурыСрезПоследних.Номенклатура=&Номенклатура                  ;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ТаблицаРегистратора

такой враиант вообще ничего не выводит...
32 МишельЛагранж
 
06.11.11
00:50
я понимаю, когда задача по срезу последних получить две даты....
но одну...
33 cViper
 
06.11.11
10:35
(27) Наверно имеешь ввиду что тип цен нельзя указать в параметрах виртуальной таблицы? Попробуй указать в ГДЕ. И Джойни по типу цен тоже. Покажи структуру таблицы.
34 BarakuzA
 
06.11.11
14:59
(33),да. какой именно таблицы?
35 МишельЛагранж
 
06.11.11
15:19
а вы, собственно, в демо пробовали свой запрос?
у вас что-то с настройкой регистра и недопонимание специфики ваших данных, вследствие - попадание одинаковых строк...
36 BarakuzA
 
06.11.11
15:38
(35),да. я все понимаю прекрасно,нопроблоема в том что не могу указать тип цен, поэтому и выдает два значения, которые так же отличаются датой установки. мне надо получить только одно значение цены, позднее установленное
37 cViper
 
06.11.11
19:48
(34) Структуру таблицы в которой цены.
38 Мимохожий Однако
 
06.11.11
21:20
Посмотри в общем модуле типовой конфигурации. Там наверняка есть функция ПолучитьЦену()
39 BarakuzA
 
07.11.11
08:59
(38), да, есть такая функция - но ее результат аналогичен - две записи.
40 BarakuzA
 
07.11.11
09:01
(37) - цены хранятся в регистре сведений ЦеныНоменклатурыКонтрагентов (типовая конфигурация УТ 10.3).
измерения - ТипЦен, Номенклатура, ХарактеристикаНоменклатуры,
ресурсы - ЕдиницаИзмерения, Валюта, Цена
41 hhhh
 
07.11.11
09:22
(40) ну используйте один тип цен. Зачем вам второй тип цен, если он никому не нужен?
42 BarakuzA
 
07.11.11
09:35
(41)-СОГЛАСЕН, но изменить уже не могу,много документов введено...
43 cViper
 
07.11.11
09:52
(42) В запросе из (0) выбери еще тип цены. Посмотри на результат запроса. Сделай выводы.PROFIT!!!
44 braynt
 
07.11.11
10:04
ВЫБРАТЬ
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Период
ПОМЕСТИТЬ Цены
ИЗ
   РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВложенныйЗапрос.Номенклатура,
   ВложенныйЗапрос.Период,
   Цены.Цена
ИЗ
   (ВЫБРАТЬ
       Цены.Номенклатура КАК Номенклатура,
       МАКСИМУМ(Цены.Период) КАК Период
   ИЗ
       Цены КАК Цены
   
   СГРУППИРОВАТЬ ПО
       Цены.Номенклатура) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цены КАК Цены
       ПО ВложенныйЗапрос.Номенклатура = Цены.Номенклатура
           И ВложенныйЗапрос.Период = Цены.Период
45 cViper
 
07.11.11
10:24
ВЫБРАТЬ
   Перемещение.Ссылка,
   Перемещение.Номенклатура,
   Перемещение.Количество КАК Количество,
   Перемещение.Цена,
   ЦеныНоменклатурыСрез.ТипЦен,
   ЕСТЬNULL(ЦеныНоменклатурыСрез.Цена, 0) КАК ЦенаЗакупка
ИЗ
   Документ.ПеремещениеТоваров.Товары КАК Перемещение
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&НаДату, ТипЦен = &ТипЦены) КАК ЦеныНоменклатурыСрез
       ПО Перемещение.Номенклатура = ЦеныНоменклатурыСрез.Номенклатура
           И Перемещение.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрез.ХарактеристикаНоменклатуры
ГДЕ
   Перемещение.Ссылка = &ТекущийДокумент
46 cViper
 
07.11.11
10:28
(0) Какая перед тобой стоит задача? Почему тебе нужна именно последняя цена без учета типа цен? если с учетом, то (45) тебе в помощь.
47 BarakuzA
 
07.11.11
10:31
(46), задача следующая: есть дкоумент перемещение товаров между складами нтт, в кот есть позиции номенклатуры от разных поставщиков. мне нужно опредлеить сумму этих товаров как по закупочным ценам,так и по розничным. с розничными нет проблем - они указаны в ТЧ. а вот с закупочными проблема. есть одна особенность в наименовании склада отправителя либо есть слово альфа либо нет, так же и в типе цен либо есть слово альфа либо нет. я уже незнаю, может к этому моменту привязаться, или в цикле обхода по строкам ТЧ сделать отбор и добавить стоп при нахождении этой цены закупки.
48 braynt
 
07.11.11
10:36
так чем (44) запрос не страивает?
49 BarakuzA
 
07.11.11
10:53
(48), устраивает... спасибо. не было времени протестить их в консоли,
50 dmpl
 
07.11.11
10:56
(10) Ну так в регистре же есть. Или охота получить граблями по лбу когда начнут характеристики использовать?

(47) Заведите тип цен "Учетные цены" и отбирайте по нему. Так не придется бухгалтерам каждый раз объяснять, откуда вылезла эта нереальная цена. Хотя для полной точности надо партии товаров определять - и в них будет стоимость в приходных ценах.
51 BarakuzA
 
07.11.11
12:00
(50) -характеристики не начнут использовать!!!

если я правильно понимаю - партия товара определяется после списания товара со склада,
и тогда цену можно вытащить из регистра накопления партии товаров на складах (упр учет) ???
52 BarakuzA
 
07.11.11
12:01
чтобы учитывать цены в типе цен "Учетные цены", нужно в поступлении товаров дополнительно прописать учет по этому типу цен?
53 BarakuzA
 
07.11.11
12:02
(50) - учет по характеристикам отключен...
54 dmpl
 
07.11.11
15:29
(51) 1. Может быть и не начнут. А может и начнут - и вот тут уже будут готовы грабельки. Подозреваю, что не в одном месте... А делов-то на 5 секунд - добавить 1 условие в ПО.

2. Партия товаров определяется при списании по партиям. Т.е. либо после списания товара со склада, либо в конце месяца (при проведении по партиям) - зависит от настроек (хотя, возможно, в УТ все проще, и партии списываются сразу). Из регистра, соответственно, можно вытащить стоимость, а уж по ней определить и цену, и даже документ поступления (правда, при перепроведении он вполне может поменяться).

(52) Просто заводится новый тип цен, на котором бухгалтера назначают нужную им цену. Соответственно, когда им надо сделать переоценку - они просто меняют эту цену (как обычно они назначают цены).
55 BarakuzA
 
07.11.11
21:12
а как к запросу из (44) добавить чтобы товар брался из ТЧ Товары Документа ПеремещениеТоваров?