|   |   | 
| 
 | Запрос к таблице оборотов | ☑ | ||
|---|---|---|---|---|
| 0
    
        Droning1C 01.04.19✎ 12:30 | 
        Добрый день! Есть такой вот запросик.
 ВЫБРАТЬ взПериодПоследнейЗакупки.Номенклатура КАК Номенклатура, взПериодПоследнейЗакупки.ХарактеристикаНоменклатуры, Закупки.Количество, Закупки.Стоимость, ВЫБОР КОГДА Закупки.Количество = 0 ТОГДА 0 ИНАЧЕ ВЫРАЗИТЬ(Закупки.Стоимость / Закупки.Количество КАК ЧИСЛО(15, 2)) КОНЕЦ КАК Цена, взПериодПоследнейЗакупки.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХраненияОстатков ПОМЕСТИТЬ ВТ_ПоследниеЗакупки ИЗ (ВЫБРАТЬ Закупки.Номенклатура КАК Номенклатура, МАКСИМУМ(Закупки.Период) КАК Период, Закупки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры ИЗ РегистрНакопления.Закупки КАК Закупки СГРУППИРОВАТЬ ПО Закупки.Номенклатура, Закупки.ХарактеристикаНоменклатуры) КАК взПериодПоследнейЗакупки ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки КАК Закупки ПО взПериодПоследнейЗакупки.Период = Закупки.Период И взПериодПоследнейЗакупки.Номенклатура = Закупки.Номенклатура И взПериодПоследнейЗакупки.ХарактеристикаНоменклатуры = Закупки.ХарактеристикаНоменклатуры ГДЕ взПериодПоследнейЗакупки.Период МЕЖДУ &НачалоПериода И &КонецПериода; Вопрос-Подскажите, пожалуйста, как построить такой же запрос, только обращаться при этом не к таблице Закупки, а к Оборотной таблице этого же регистра. Никак не получается правильно сделать... Не могу максимум отобрать нормально( ламер чёртов( | |||
| 1
    
        Mankubus 01.04.19✎ 12:35 | 
        (0) 
 ИЗ РегистрНакопления.Закупки.Обороты | |||
| 2
    
        Droning1C 01.04.19✎ 12:43 | 
        (1) Гениально) Это я понимаю. Может вопрос не так поставил. Как правильно задать параметры виртуальной таблицы, чтобы получить данные из последнего документа закупки каждной номенклатурной позиции?     | |||
| 3
    
        azernot 01.04.19✎ 12:45 | 
        Регистратор = &ПоследнийДокументЗакупки
 :) | |||
| 4
    
        unregistered 01.04.19✎ 12:49 | 
        (2) Для решения этой задачи лучше использовать первичную таблицу самого регистра, а не виртуальную Обороты. Обороты придётся всё равно запрашивать с периодичностью "Регистратор" или даже "Запись". А это лишние и по сути бессмысленные в данном случае накладные расходы.     | |||
| 5
    
        Droning1C 01.04.19✎ 12:57 | 
        (4) Но все же, если это делать через обороты, то как должен выглядеть текст запроса?     | |||
| 6
    
        catena 01.04.19✎ 12:58 | 
        (2)Без заранее известного последнего документа, параметрами вт данная задача не решается.     | |||
| 7
    
        Droning1C 01.04.19✎ 13:16 | 
        (6) Хмм.. А если обрисую задачу целиком... Мне нужно написать обработку, которая берет последнюю закупочную цену по номенклатуре, сравнивает ее с ценой в установке цен номенклатуры, если таковая есть на эту номенклатурную позицию, и, если цена разнится, то записывает строку в новосозданную установку цен номенклатуры.     | |||
| 8
    
        Droning1C 01.04.19✎ 13:17 | 
        Запрос = Новый Запрос;
 Запрос.Текст = "ВЫБРАТЬ | взПериодПоследнейЗакупки.Номенклатура КАК Номенклатура, | взПериодПоследнейЗакупки.ХарактеристикаНоменклатуры, | Закупки.Количество, | Закупки.Стоимость, | ВЫБОР | КОГДА Закупки.Количество = 0 | ТОГДА 0 | ИНАЧЕ ВЫРАЗИТЬ(Закупки.Стоимость / Закупки.Количество КАК ЧИСЛО(15, 2)) | КОНЕЦ КАК Цена, | взПериодПоследнейЗакупки.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХраненияОстатков |ПОМЕСТИТЬ ВТ_ПоследниеЗакупки |ИЗ | (ВЫБРАТЬ | Закупки.Номенклатура КАК Номенклатура, | МАКСИМУМ(Закупки.Период) КАК Период, | Закупки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры | ИЗ | РегистрНакопления.Закупки КАК Закупки | | СГРУППИРОВАТЬ ПО | Закупки.Номенклатура, | Закупки.ХарактеристикаНоменклатуры) КАК взПериодПоследнейЗакупки | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки КАК Закупки | ПО взПериодПоследнейЗакупки.Период = Закупки.Период | И взПериодПоследнейЗакупки.Номенклатура = Закупки.Номенклатура | И взПериодПоследнейЗакупки.ХарактеристикаНоменклатуры = Закупки.ХарактеристикаНоменклатуры |ГДЕ | взПериодПоследнейЗакупки.Период МЕЖДУ &Начало И &Конец |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Номенклатура, | ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры, | ЦеныНоменклатурыСрезПоследних.Цена, | ЦеныНоменклатурыСрезПоследних.Валюта, | ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения |ПОМЕСТИТЬ ВТ_УстЦен |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ПоследниеЗакупки.Номенклатура, | ВТ_ПоследниеЗакупки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | ВТ_ПоследниеЗакупки.ЕдиницаХраненияОстатков, | ВТ_ПоследниеЗакупки.Количество КАК КоличествоПоследнейЗакупки, | ВТ_ПоследниеЗакупки.Стоимость КАК СтоимостьПоследнейЗакупки, | ВТ_ПоследниеЗакупки.Цена КАК ЦенаРасчетнаяПоследнейЗакупки, | ЕСТЬNULL(ВТ_УстЦен.Цена, 0) КАК ЦенаУстановкиЦенНоменклатуры, | ВТ_УстЦен.Валюта КАК ВалютаУстановки |ИЗ | ВТ_ПоследниеЗакупки КАК ВТ_ПоследниеЗакупки | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_УстЦен КАК ВТ_УстЦен | ПО ВТ_ПоследниеЗакупки.Номенклатура = ВТ_УстЦен.Номенклатура | И ВТ_ПоследниеЗакупки.ХарактеристикаНоменклатуры = ВТ_УстЦен.ХарактеристикаНоменклатуры"; Запрос.УстановитьПараметр("Конец", КонецПериода); Запрос.УстановитьПараметр("Начало", НачалоПериода); ТЗ = Запрос.Выполнить().Выгрузить(); ВсегоЗаписей = ТЗ.Количество(); ТипЦенЗаказСредняя = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000006"); ВалютаРубли = Справочники.Валюты.НайтиПоКоду("643"); Счетчик = 0; //СписокТипов = Новый СписокЗначений; //СписокТипов.Добавить(ТипЦенЗаказСредняя); //ФормаУстановки = Установка.ПолучитьФорму("ФормаДокумента"); //ФормаУстановки.СписокТиповЦен = СписокТипов; Установка = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); ФормаУстановки = Установка.ПолучитьФорму("ФормаДокумента"); Установка.Дата = ТекущаяДата(); Установка.УстановитьНовыйНомер(); Установка.Комментарий = "Установлено обработкой"; Если ВсегоЗаписей > 0 Тогда Для Каждого СТрокаТЗ из ТЗ Цикл Если Окр (Число(СТрокаТЗ.ЦенаУстановкиЦенНоменклатуры),0) <> ОКр(Число(СТрокаТЗ.ЦенаРасчетнаяПоследнейЗакупки),0) Тогда НоваяСтрока = Установка.Товары.Добавить(); НоваяСтрока.Номенклатура = СТрокаТЗ.Номенклатура; Если СтрокаТЗ.ВалютаУстановки <> ВалютаРубли Тогда Курс = ПолучитьКурс(СтрокаТЗ.ВалютаУстановки); Если ЗначениеЗаполнено(Курс) Тогда Цена = Окр(СТрокаТЗ.ЦенаРасчетнаяПоследнейЗакупки/Курс,2); Иначе Сообщить("Для номенклатуры " + СТрокаТЗ.Номенклатура + " не указана валюта в Установке цен. Цена записана в рублях без учет валют."); Цена = СТрокаТЗ.ЦенаРасчетнаяПоследнейЗакупки; КонецЕсли; КонецЕсли; НоваяСтрока.Цена = Цена; Если ЗначениеЗаполнено(СТрокаТЗ.ВалютаУстановки) Тогда НоваяСтрока.Валюта = СТрокаТЗ.ВалютаУстановки; Иначе НоваяСтрока.Валюта = ВалютаРубли; КонецЕсли; НоваяСтрока.ХарактеристикаНоменклатуры =СТрокаТЗ.ХарактеристикаНоменклатуры; //Если ЗначениеЗаполнено(СТрокаТЗ.ЕдиницаИзмерения) Тогда // НоваяСтрока.ЕдиницаИзмерения = СТрокаТЗ.ЕдиницаИзмерения; //Иначе НоваяСтрока.ЕдиницаИзмерения = СтрокаТЗ.Номенклатура.ЕдиницаХраненияОстатков; //КонецЕсли; НоваяСтрока.ЕдиницаИзмерения = СтрокаТЗ.ЕдиницаХраненияОстатков; НоваяСтрока.ТипЦен = ТипЦенЗаказСредняя; Счетчик = Счетчик + 1; Сообщить("" + Счетчик + " из " + ВсегоЗаписей); КонецЕсли; КонецЦикла; СтрокаТипыЦен = Установка.ТипыЦен.Добавить(); СтрокаТипыЦен.ТипЦен = ТипЦенЗаказСредняя; Установка.Записать(РежимЗаписиДокумента.Проведение); Сообщить("Установка цен создана и проведена."); ФормаУстановки.Открыть(); Иначе Сообщить("Результат запроса по регистрам пуст."); КонецЕсли; | |||
| 9
    
        Droning1C 01.04.19✎ 13:18 | 
        Все таки, моему начальнику почему-то ну очень хочется чтобы я использовал в запросе именно виртуальную таблицу оборотов. Возможно ли это?     | |||
| 10
    
        Вася Теркин 01.04.19✎ 13:20 | 
        Вот это очень хорошо
 взПериодПоследнейЗакупки.Период МЕЖДУ &НачалоПериода И &КонецПериода | |||
| 11
    
        Droning1C 01.04.19✎ 13:22 | 
        (10) Это сарказм я так понимаю? Что с того что мне нужна последняя закупка в определенном периоде?     | |||
| 12
    
        Droning1C 01.04.19✎ 13:23 | 
        (10) Или ты про название параметров? я уже из переименовал в &НачалоПериода И &КонецПериода     | |||
| 13
    
        Вася Теркин 01.04.19✎ 13:23 | 
        (0) если тебе цены последних закупок нужны, то сначала выбери документы с максимальной датой в ВТ, потом отберешь тольк оих движения     | |||
| 14
    
        Вася Теркин 01.04.19✎ 13:24 | 
        Названия не важны, важна только Сила.     | |||
| 15
    
        Droning1C 01.04.19✎ 13:25 | 
        У меня так и отбирается же. только не по виртуальной таблице оборотов а по физической. Как сделать по виртуальной?)) или все же без заранее известного последнего документа, параметрами вт данная задача не решается?     | |||
| 16
    
        catena 01.04.19✎ 13:29 | 
        (15)Виртуальной точно так же.     | |||
| 17
    
        Вася Теркин 01.04.19✎ 13:32 | 
        Виртуальную таблицу Обороты РегистраНакопления Закупки возьми за период в разрезе регистратора. Это всё -  параметры виртуальной таблицы. И помести в ВТ_ВсеДвиженияПериода
 Потом по ней найди максимальные даты регистраторов для каждого сочетания Характеристики и Номенклатуры. И помести в другую ВТ_Максимумы Потом соедини две виртуальные таблицы, их пересечение даст тебе власть над миром. | |||
| 18
    
        Вася Теркин 01.04.19✎ 13:33 | 
        "в разрезе регистратора" - с детализацией до регистратора     | |||
| 19
    
        Вася Теркин 01.04.19✎ 13:46 | 
        Да, и тут смотря сколько оборотов в день.
 Если пятнадцать миллионов движений по закупкам ежедневно, то лучше сначала взять обороты в разрезе дней ,определить какой день тебе нужен и только потом взять обороты в разрезе полных дат за день и там определить какой документ тебе нужен. | |||
| 20
    
        Droning1C 01.04.19✎ 13:55 | 
        (17) спасибо, буду пробовать!     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |