8.х отчет торг 29

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

  1. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

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

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    После вызова вы обрабатываете результат как пакет запросов (используете Выполнить() или ВыполнитьПакет())?
    Мне не совсем понятно назначение 3-го запроса в пакете.
  3. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    где ошибка то? ошибок нет
  4. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    ВыполнитьПакет(), как бы вы написали;

    При формировании остатки в 2 раза больше
  5. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    вы наверняка забыли соединение сделать по какому-то полю
  6. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Остатки в 2 раза больше потому что при соединении получаются для одного движения 2 строки: на начало и на конец периода. Поэтому при группировке идет удвоение.
    Я все равно не понимаю - для чего этот 3-й запрос? Что в нем получается?
  7. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    поправил остаток пошел, но проверял по датам интервал день допусти с 16 по 19 остаток идет ставлю 20 откуда то взялась 1000 руб делаю 19-21 остаток идет
    Код:
    ВЫБРАТЬ
    |	ЦеныНоменклатуры.Период КАК ПериодНачало,
    |	МИНИМУМ(ЦеныНоменклатурыКопия.Период) КАК ПериодКонец,
    |	ЦеныНоменклатуры.Номенклатура,
    |	ЦеныНоменклатуры.Цена
    |ПОМЕСТИТЬ ПредварительнаяВыборка
    |ИЗ
    |	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатурыКопия
    |		ПО ЦеныНоменклатуры.Номенклатура = ЦеныНоменклатурыКопия.Номенклатура
    |			И ЦеныНоменклатуры.ЕдиницаИзмерения = ЦеныНоменклатурыКопия.ЕдиницаИзмерения
    |			И ЦеныНоменклатуры.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКопия.ХарактеристикаНоменклатуры
    |			И ЦеныНоменклатуры.Валюта = ЦеныНоменклатурыКопия.Валюта
    |			И ЦеныНоменклатуры.ТипЦен = ЦеныНоменклатурыКопия.ТипЦен
    |			И ЦеныНоменклатуры.Период < ЦеныНоменклатурыКопия.Период
    |ГДЕ
    |	ЦеныНоменклатуры.ТипЦен = &ТипЦен
    |
    |СГРУППИРОВАТЬ ПО
    |	ЦеныНоменклатуры.Период,
    |	ЦеныНоменклатуры.Номенклатура,
    |	ЦеныНоменклатуры.Цена
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |	ЦеныПоПериодам.ПериодНачало КАК ПериодНачало,
    |	КОНЕЦПЕРИОДА(ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ЦеныПоПериодам.ПериодКонец, ДЕНЬ, -1), ДАТАВРЕМЯ(3999, 12, 31)), ДЕНЬ) КАК ПериодКонец,
    |	ЦеныПоПериодам.Номенклатура КАК Номенклатура,
    |	ЦеныПоПериодам.Цена
    |ПОМЕСТИТЬ Цены
    |ИЗ
    |	ПредварительнаяВыборка КАК ЦеныПоПериодам
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК НачОст,
    |	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК КонОст,
    |	СУММА(ВЫБОР
    |			КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход > 0
    |				ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) * ЕСТЬNULL(Цены.Цена, 0)
    |			ИНАЧЕ 0
    |		КОНЕЦ) КАК Приход,
    |	СУММА(ВЫБОР
    |			КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход > 0
    |				ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) * ЕСТЬNULL(Цены.Цена, 0)
    |			ИНАЧЕ 0
    |		КОНЕЦ) КАК Расход,
    |	ТоварыНаСкладахОстаткиИОбороты.Период КАК ДатаДок,
    |	ТоварыНаСкладахОстаткиИОбороты.Регистратор.Номер КАК НомерДок,
    |	ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Док,
    |	ТоварыНаСкладахОстаткиИОбороты.Регистратор.СуммаДокумента КАК СуммаДокумента
    |ИЗ
    |	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты
    |		ЛЕВОЕ СОЕДИНЕНИЕ Цены КАК Цены
    |		ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = Цены.Номенклатура
    |			И ТоварыНаСкладахОстаткиИОбороты.Период >= Цены.ПериодНачало
    |			И ТоварыНаСкладахОстаткиИОбороты.Период <= Цены.ПериодКонец
    |
    |СГРУППИРОВАТЬ ПО
    |	ТоварыНаСкладахОстаткиИОбороты.Период,
    |	ТоварыНаСкладахОстаткиИОбороты.Регистратор.Номер,
    |	ТоварыНаСкладахОстаткиИОбороты.Регистратор,
    |	ТоварыНаСкладахОстаткиИОбороты.Регистратор.СуммаДокумента
    |
    |УПОРЯДОЧИТЬ ПО
    |	ДатаДок
    
  8. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

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

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Параметр Дата2 - как передаете в запрос? КонецДня - не забываете указывать?
    Метод дополнения у виртуальной таблицы регистра попробуйте поставить "движения" и посмотрите что получится.
  10. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

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

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ниче не понимаю. Что должен возвращать запрос?
  12. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    В УТ есть отчет ТОРГ 29 просто там он для розничных складов работает, а мне надо для оптового и в указаном типе цен, сейчас проблема допустим формируем отчет 16-25 число, цена от 15 допустим 2 руб 17 -5 руб 19-10 руб если мы будем формировать отчет сейчас то выйдет результат по 2 руб
  13. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Только вложенным запросом
    ВЫБРАТЬ ПЕРВЫЕ
    с условие
    ГДЕ Период < &Дата

    СрезПоследних использовать нельзя, т.к. дата является параметром виртуальной таблицы, а значит задаётся для всего отчета.
  14. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    А как достать &Дата, если можно то покажите не большой пример
  15. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Никто не подскажет как решить проблему?
  16. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    это же параметр запроса

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