Имя: Пароль:
1C
1С v8
Ткните мне -что не так в запросе? Мешает семерошное мышление.
0 temsa
 
12.10.12
13:56
Есть мелкая задача. Отобрать по некоторому складу документы за период и в ТЧ переиначить плановую стоимость взятую из РС.

Нписал запррос но умом понимаю что не так я сделал. Чтоб отобрать документы может нужен отдельный запрос???

Вот код:

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

   Запрос.УстановитьПараметр("ВыбСклад", ВыбСклад);
   Запрос.УстановитьПараметр("ВыбТип", ВыбТип);

   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
1 Живой Ископаемый
 
12.10.12
13:57
что сделать надо?
чтобы в результате появились документы? строй не к срезу последних, а к физической таблице
2 Starhan
 
12.10.12
14:00
(1)строй не к срезу последних, а к физической таблице

не понятно

(0) ЦеныНоменклатурыСрезПоследних.ТипЦен = &ВыбТип вот эту строку надо параметром в виртуальную таблицу срез последних

и не хватает отбора по периоду у докуументов )
3 temsa
 
12.10.12
14:01
Мнебы вытащить из РС актуальные на дату цены по типу цен и их внести в документы ха период в ТЧ где цена не та.
4 Starhan
 
12.10.12
14:02
на дату каждого документа?
5 temsa
 
12.10.12
14:03
(2) Период по дку то вкручу нет проблема. А вот мне объязательно через ТЧ дока строить запрос и через ссылку выходить на само док. Или можно по докам делать запрос???
6 temsa
 
12.10.12
14:04
(4) нет не объязательно. по идее там цены меняли один раз в году в начале.
7 temsa
 
12.10.12
14:07
Мне бы выбрать доки за период. После того как выбрал доки протись по их табличной части и при этом заменить там плановую себестоимость и все.
8 temsa
 
12.10.12
14:19
ауууу
9 vvp91
 
12.10.12
14:19
Запрос.Текст = "
|ВЫБРАТЬ
|   Операция.Ссылка,
|   Строки.НомерСтроки,
|   Строки.Номенклатура,
|   Строки.ПлановаяСтоимость,
|   Цены.Цена
|ИЗ
|    Документ.ОтчетПроизводстваЗаСмену КАК Операция
|    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Продукция КАК Строки
|        ПО Строки.Ссылка = Операция.Ссылка
|
|    ЛЕВОЕ СОЕДИНЕНИЕ (
|        ВЫБРАТЬ
|           Цены.Период,
|           Цены.Номенклатура,
|           Цены.Цена
|        ИЗ РегистрСведений.ЦеныНоменклатуры КАК Цены
|            ВНУТРЕННЕЕ СОДИНЕНИЕ (
|                ВЫБРАТЬ
|                    МАКСИМУМ(Цены.Период) КАК Период,
|                    Цены.Номенклатура
|                ИЗ
|                    Документ.ОтчетПроизводстваЗаСмену КАК Операция
|                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Продукция КАК Строки
|                        ПО Строки.Ссылка = Операция.Ссылка
|                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК Цены
|                        ПО Цены.Номенклатура = Строки.Номенклатура
|                        И Цены.Период <= Операция.Дата
|                ГДЕ
|                    Операция.Склад = &ВыбСклад И Цены.ТипЦен = &ВыбТип
|                СГРУППИРОВАТЬ ПО
|                    Цены.Номенклатура
|        ) КАК ПериодЦены
|           ПО ПериодЦены.Период = Цены.Период И ПериодЦены.Номенклатура = Цены.Номенклатура
|   ) КАК Цены
|        ПО Цены.Номенклатура = Операция.Номенклатура
|        И Цены.Период <= Операция.Дата
|";
10 hhhh
 
12.10.12
14:21
(7) вот так можно

|ИЗ
       |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ВыбТип) КАК
11 temsa
 
12.10.12
14:24
(10) Понял учту.
(9) Спасибо попробую. Я уж думал сделать вложенные запросы.
12 temsa
 
12.10.12
14:51
(9) Пишет {Форма.Форма.Форма(50)}: Ошибка при вызове метода контекста (Выполнить)
   Результат = Запрос.Выполнить();
по причине:
{(19, 24)}: Ожидается выражение "СОЕДИНЕНИЕ"
ВНУТРЕННЕЕ <<?>>СОДИНЕНИЕ (

(((
13 vvp91
 
12.10.12
15:05
(12) ну так исправь грамматическую ошибку, напиши СОЕДИНЕНИЕ вместо СОДИНЕНИЕ.
14 temsa
 
12.10.12
15:07
(13) :))) Вот же облажался . Сенкс. Все пятница надо отдыхать.
15 vvp91
 
12.10.12
15:13
Уточненный запрос - поправлена грамматическая ошибка и, самое главное, во внутреннем запросе в группировку введена дата документа.

Запрос.Текст = "
|ВЫБРАТЬ
|   Операция.Ссылка,
|   Строки.НомерСтроки,
|   Строки.Номенклатура,
|   Строки.ПлановаяСтоимость,
|   Цены.Цена
|ИЗ
|    Документ.ОтчетПроизводстваЗаСмену КАК Операция
|    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Продукция КАК Строки
|        ПО Строки.Ссылка = Операция.Ссылка
|
|    ЛЕВОЕ СОЕДИНЕНИЕ (
|        ВЫБРАТЬ
|           ПериодЦены.Дата,
|           Цены.Номенклатура,
|           Цены.Цена
|        ИЗ РегистрСведений.ЦеныНоменклатуры КАК Цены
|            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (
|                ВЫБРАТЬ
|                    МАКСИМУМ(Цены.Период) КАК Период,
|                    Операция.Дата как Дата,
|                    Цены.Номенклатура
|                ИЗ
|                    Документ.ОтчетПроизводстваЗаСмену КАК Операция
|                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Продукция КАК Строки
|                        ПО Строки.Ссылка = Операция.Ссылка
|                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК Цены
|                        ПО Цены.Номенклатура = Строки.Номенклатура
|                        И Цены.Период <= Операция.Дата
|                ГДЕ
|                    Операция.Склад = &ВыбСклад И Цены.ТипЦен = &ВыбТип
|                СГРУППИРОВАТЬ ПО
|                    Операция.Дата, Цены.Номенклатура
|        ) КАК ПериодЦены
|           ПО ПериодЦены.Период = Цены.Период И ПериодЦены.Номенклатура = Цены.Номенклатура
|   ) КАК Цены
|        ПО Цены.Номенклатура = Операция.Номенклатура
|        И Цены.Дата = Операция.Дата
|";
16 temsa
 
12.10.12
15:26
(15) Все равно не то  думаю.
А за чем мне выборке построчно выходит номенклатура???  Как же мне в таком цыкле записывать доки? Мне же нужно что в каждой выборке отдельная ссылка к документу. А уже по выбранному доку внутри я сделаю построчный обход сам не так ли?
17 Starhan
 
12.10.12
15:29
Тебе надо выбрать документы

потом цикл по документам

где уже запрашиваешь цены на номенклатуру в доке запросом и меняешь все в доке



п.с. да простят меня за запрос в цикле
18 temsa
 
12.10.12
15:31
(17) Не хочу я запрос в цикле. Ее можно приготовить заранее и просто потом с него брать.
19 narayanan
 
12.10.12
15:53
вопрос решился?
20 temsa
 
12.10.12
15:58
Нет еще не решил. Но вот думаю. Что просто возьму и сделаю отдельных два запроса. один по документу а другой по цене. Потом обход по докам и в нутри цикл по таб части и в нем поиск нужной цены тупо и надежно.
А туту хотел увидеть изящное решение от восмерошников видимо не до меня им.
21 AAlexandra
 
12.10.12
16:12
(20) Вместо "сделаю отдельных два запроса. один по документу а другой по цене. Потом обход по докам и в нутри цикл по таб части и в нем поиск нужной цены"

получай все ОДНИМ запросом.
Сделай "ИТОГИ ПО Ссылка", потом Выборку по группировкам:

ВыборкаДокументы = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Ссылка");

Пока ВыборкаДокументы.Следующий() Цикл



КонецЦикла;
22 AAlexandra
 
12.10.12
16:16
точнее, как-то так:

Пока ВыборкаДокументы.Следующий() Цикл

       ДокОбъект = ВыборкаДокументы.Ссылка.ПолучитьОбъект();
       
   Выборка = ВыборкаДокументы.Выбрать();
       
   Пока Выборка.Следующий() Цикл
           
      //изменяем ТЧ
           
   КонецЦикла;            
       
   // Если есть изменения
   ДокОбъект.Записать(..);

КонецЦикла;
23 narayanan
 
12.10.12
16:19
Запрос ведь в цикле,не?
24 temsa
 
12.10.12
16:21
(21) (22) Вот это уже мысль. Спасибо.
25 temsa
 
15.10.12
15:18
Сегодня попробовал. Не взлетело. ((((

Как  быть? Туплю!....
26 temsa
 
15.10.12
15:21
Пробовал ВыборкаДокументы = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Ссылка");

Пишет нет такого измерения.