8.х торг 29

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Dmitrij, 28 сен 2010.

  1. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    подскажите как можно получить дату документа в запросе и использовать эту дату в этом же запросе

    Код:
    ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |	NULL КАК Док,
    |	NULL КАК ДатаДок, //Дата документа 
    |	NULL КАК НомерДок,
    |	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЦеныНоменклатурыСрезПоследних.Цена) КАК НачОст,
    |	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЦеныНоменклатурыСрезПоследних.Цена) КАК КонОст,
    |	СУММА(ВЫБОР
    |			КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход > 0
    |				ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) * ЦеныНоменклатурыСрезПоследних.Цена
    |			ИНАЧЕ 0
    |		КОНЕЦ) КАК Приход,
    |	СУММА(ВЫБОР
    |			КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход > 0
    |				ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) * ЦеныНоменклатурыСрезПоследних.Цена
    |			ИНАЧЕ 0
    |		КОНЕЦ) КАК Расход
    |ИЗ
    |	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата2, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних//тут использовать дату документа
    |		ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |
    |ИМЕЮЩИЕ
    |	(СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЦеныНоменклатурыСрезПоследних.Цена) <> 0
    |		ИЛИ СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЦеныНоменклатурыСрезПоследних.Цена) <> 0
    |		ИЛИ СУММА(ВЫБОР
    |				КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход > 0
    |					ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) * ЦеныНоменклатурыСрезПоследних.Цена
    |				ИНАЧЕ 0
    |			КОНЕЦ) <> 0
    |		ИЛИ СУММА(ВЫБОР
    |				КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход > 0
    |					ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) * ЦеныНоменклатурыСрезПоследних.Цена
    |				ИНАЧЕ 0
    |			КОНЕЦ) <> 0)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЦеныНоменклатурыСрезПоследних.Цена) КАК НачОст,
    |	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЦеныНоменклатурыСрезПоследних.Цена) КАК КонОст,
    |	СУММА(ВЫБОР
    |			КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход > 0
    |				ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) * ЦеныНоменклатурыСрезПоследних.Цена
    |			ИНАЧЕ 0
    |		КОНЕЦ) КАК Приход,
    |	СУММА(ВЫБОР
    |			КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход > 0
    |				ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) * ЦеныНоменклатурыСрезПоследних.Цена
    |			ИНАЧЕ 0
    |		КОНЕЦ) КАК Расход,
    |	ТоварыНаСкладахОстаткиИОбороты.Период КАК ДатаДок,
    |	ТоварыНаСкладахОстаткиИОбороты.Регистратор.Номер КАК НомерДок,
    |	ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Док
    |ИЗ
    |	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата2, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
    |		ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |
    |СГРУППИРОВАТЬ ПО
    |	ТоварыНаСкладахОстаткиИОбороты.Период,
    |	ТоварыНаСкладахОстаткиИОбороты.Регистратор.Номер,
    |	ТоварыНаСкладахОстаткиИОбороты.Регистратор
    |
    |УПОРЯДОЧИТЬ ПО
    |	ДатаДок";
    
    
    
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Dmitrij теперь еще комментарии добавьте к своему коду, ибо я не понял что хотите сделать. (оно кстати у вас работает?)
  3. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Работает. Это стандартный Торг29 из УТ просто переделал его для оптового склада
    нужна эту
    дату
    вставить
    вместо даты2
  4. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    А если результат с ДатаДок поместить во временную таблицу, а потом в периоде регистра указать эту дату? Т.е. что-то типа
    Код:
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(ВЫбрать Первые 1 ВТ.ДатаДок Из ВТ, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних//тут использовать дату документа
    
    
    
    Вобщем думаю на мысль натолкнул. Еще как вариант это использование двух запросов с менеджером временных таблиц. Это все только теория, попробовать времени нет
  5. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    никогда не сталкивался с ВТ можно пример с созданием
  6. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Использовать что-то из запроса (временной таблицы), как параметр виртуальной таблицы не получится.
    Dmitrij, читаем вот эту тему: http://www.1c-pro.ru/index.php?showtopic=26121, берем оттуда уже готовый запрос (помещаем в нем второй подзапрос также во временную таблицу).
    Далее изменяем ваш запрос: соединение к регистру цен убираем, вставляем соединение к последней временной таблице полученной в вышеуказанном запросе по номенклатуре и периоду (два условия по периоду >= и <=).
  7. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    shurikvz, т.е. получаем периоды действия цен номенклатуры, а затем берем тот период, в котором лежит нужная нам ДатаДок?
  8. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Да, именно так. Получаем периоды, дата документа нам известна, смотрим какая цена действовала на эту дату.
    Но если кто-то предложит другой алгоритм, мне бы было тоже интересно послушать.
  9. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Что то я не много не дапонял
  10. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Почему нельзя вытащить во ВТ даты из ТоварыНаСкладах а затем вытаскивать данные из ЦеныНоменклатуры и все
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    И как вы собираетесь это сделать? Ну вытащите вы во ВТ ДатыТоваров, и? Дальше то с ними как поступать будете? Вы же не можете в одном запросе получить срез из РС ЦеныНоменклатуры на даты, которые у вас будут указаны в этой ВТ.
    Нет ну можно как-то попробовать: из РС ЦеныНоменклатуры выдернуть все цены, Период которых меньше или равен Дате во ВТ и потом свернуть по Максимум(Период), но хз получится ли, тут думать еще надо.
  12. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Что то не могу разобраться с этим вариантом помогите пожалуйста.
  13. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Так как-то:
    Код:
    "ВЫБРАТЬ
    ЦеныНоменклатуры.Период КАК ПериодНачало,
    МИНИМУМ(ЦеныНоменклатурыКопия.Период) КАК ПериодКонец,
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.Цена
    ПОМЕСТИТЬ ПредварительнаяВыборка
    ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатурыКопия
    ПО ЦеныНоменклатуры.Номенклатура = ЦеныНоменклатурыКопия.Номенклатура
    И ЦеныНоменклатуры.ЕдиницаИзмерения = ЦеныНоменклатурыКопия.ЕдиницаИзмерения
    И ЦеныНоменклатуры.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКопия.ХарактеристикаНоменклатуры
    И ЦеныНоменклатуры.Валюта = ЦеныНоменклатурыКопия.Валюта
    И ЦеныНоменклатуры.ТипЦен = ЦеныНоменклатурыКопия.ТипЦен
    И ЦеныНоменклатуры.Период < ЦеныНоменклатурыКопия.Период
    ГДЕ
    ЦеныНоменклатуры.ТипЦен = &ТипЦен
    </span>
    СГРУППИРОВАТЬ ПО
    ЦеныНоменклатуры.Период,
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.Цена;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ЦеныПоПериодам.ПериодНачало КАК ПериодНачало,
    КОНЕЦПЕРИОДА(ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ЦеныПоПериодам.ПериодКонец, ДЕНЬ, -1), ДАТАВРЕМЯ(3999, 12, 31)), ДЕНЬ) КАК ПериодКонец,
    ЦеныПоПериодам.Номенклатура КАК Номенклатура,
    ЦеныПоПериодам.Цена
    ПОМЕСТИТЬ Цены
    ИЗ
    ПредварительнаяВыборка КАК ЦеныПоПериодам;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК НачОст,
    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК КонОст,
    СУММА(ВЫБОР
    КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход > 0
    ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) * ЕСТЬNULL(Цены.Цена, 0)
    ИНАЧЕ 0
    КОНЕЦ) КАК Приход,
    СУММА(ВЫБОР
    КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход > 0
    ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) * ЕСТЬNULL(Цены.Цена, 0)
    ИНАЧЕ 0
    КОНЕЦ) КАК Расход,
    ТоварыНаСкладахОстаткиИОбороты.Период КАК ДатаДок,
    ТоварыНаСкладахОстаткиИОбороты.Регистратор.Номер КАК НомерДок,
    ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Док
    ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ Цены КАК Цены
    ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = Цены.Номенклатура
    И ТоварыНаСкладахОстаткиИОбороты.Период >= Цены.ПериодНачало
    И ТоварыНаСкладахОстаткиИОбороты.Период <= Цены.ПериодКонец
    
    СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.Период,
    ТоварыНаСкладахОстаткиИОбороты.Регистратор.Номер,
    ТоварыНаСкладахОстаткиИОбороты.Регистратор
    
    УПОРЯДОЧИТЬ ПО
    ДатаДок"
    </FONT></FONT></pre>
    Используя второй запрос из первого поста. Первый я там не совсем понял для чего нужен. По аналогии уж переделаете, если что.
Похожие темы
  1. Skazi
    Ответов:
    2
    Просмотров:
    704
Загрузка...

Поделиться этой страницей