|
Запрос. Ограничение остатков по регистратору или получение остатка по документу | ☑ | ||
---|---|---|---|---|
0
fantomrik
04.09.13
✎
20:01
|
Доброго времени суток.
Вобщем есть "кривой" запрос по УАТ. Кривой, потому что заказчик решил, что если Путевой лист сделан 31.07 а закрыт 01.01 то эту наработку мы закрываем 31 числом, а в регистр данные попадают датой закрытия. Пришлось для отчета данные брать не только с регистров но и связывать их с документами. Все работает за исключением остатков на начало месяца и конец месяца. Если попадается путевой лист от 31.07 который закрывается 01.08, то он Остатком топлива своим "сбивает" начальный остаток по регистру. Пол дня сегодня бился с этим отчетом, так и не придумал как победить. Если есть такой путевой лист (как описал выше), то остаток из остатка топлива на начало месяца нужно вычесть остаток топлива в такой машине. Этот остаток должен попадать на конец пред месяца. теоретически по каждой машинке если взять самый первый и последний в периоде путевой лист, то в нем мы увидем нужный нам остаток ГСМ на машине, но как это условие вписать в запрос для отчета СКД ума не приложу ... Собственно запрос ВЫБРАТЬ уатПутевойЛист.ТранспортноеСредство КАК ТС, уатПутевойЛист.ТранспортноеСредство.ГосударственныйНомер КАК ГосНомер, уатПутевойЛист.ТранспортноеСредство.ОсновноеСредство.Код КАК ИнвентарныйНомер, уатПутевойЛист.ТранспортноеСредство.ГаражныйНомер КАК ГарНомер, уатОстаткиГСМнаТСОстаткиИОбороты.КоличествоНачальныйОстаток КАК ГСМнач, ВЫБОР КОГДА уатОборотыПоЗаправкамГСМОбороты.ВидЗаправки = ЗНАЧЕНИЕ(перечисление.уатВидыДвиженияГСМ.ЗаправкаСклад) ТОГДА уатОборотыПоЗаправкамГСМОбороты.КоличествоОборот ИНАЧЕ 0 КОНЕЦ КАК СоСклада, ВЫБОР КОГДА уатОборотыПоЗаправкамГСМОбороты.ВидЗаправки <> ЗНАЧЕНИЕ(перечисление.уатВидыДвиженияГСМ.ЗаправкаСклад) ТОГДА уатОборотыПоЗаправкамГСМОбороты.КоличествоОборот ИНАЧЕ 0 КОНЕЦ КАК Другие, СУММА(уатПутевойЛистРасходГСМ.РасходПоНорме) КАК РасходПоНорме, СУММА(уатПутевойЛистРасходГСМ.ОстатокПриВыезде) КАК ОстатокПриВыезде, уатОстаткиГСМнаТСОстаткиИОбороты.КоличествоКонечныйОстаток КАК ГСМкон, СУММА(ВЫБОР КОГДА уатПутевойЛист.РаботаНаДвухВидахТоплива ТОГДА уатПутевойЛистРасходГСМ.Пробег ИНАЧЕ ВЫБОР КОГДА уатПутевойЛист.ТранспортноеСредство.Модель.НаличиеСпидометра ТОГДА уатПутевойЛистВыработкаТС.Количество ИНАЧЕ уатПутевойЛистВыработкаТС.Количество / 3600 КОНЕЦ КОНЕЦ) КАК Пробег, МИНИМУМ(уатПутевойЛист.СпидометрВыезда) КАК СпидометрВыезда, МАКСИМУМ(уатПутевойЛист.СпидометрВозвращения) КАК СпидометрВозвращения, уатПутевойЛистРасходГСМ.ГСМ КАК ГСМ, СУММА(уатПутевойЛистРасходГСМ.РасходПоФакту) КАК РасходПоФакту, СУММА(уатПутевойЛистРасходГСМ.Выдано) КАК Выдано, СУММА(уатПутевойЛистРасходГСМ.ОстатокПриВозвращении) КАК ОстатокПриВозвращении, СУММА(ВЫБОР КОГДА уатПутевойЛистРасходГСМ.РасходПоНорме > уатПутевойЛистРасходГСМ.РасходПоФакту ТОГДА уатПутевойЛистРасходГСМ.РасходПоНорме - уатПутевойЛистРасходГСМ.РасходПоФакту ИНАЧЕ 0 КОНЕЦ) КАК Экономия, СУММА(ВЫБОР КОГДА уатПутевойЛистРасходГСМ.РасходПоНорме < уатПутевойЛистРасходГСМ.РасходПоФакту ТОГДА уатПутевойЛистРасходГСМ.РасходПоФакту - уатПутевойЛистРасходГСМ.РасходПоНорме ИНАЧЕ 0 КОНЕЦ) КАК Пережог, уатПутевойЛист.ТранспортноеСредство.Модель, уатПутевойЛист.ТранспортноеСредство.Подразделение, уатОстаткиГСМнаТСОстаткиИОбороты.ГСМ КАК ГСМОстатки, уатОборотыПоЗаправкамГСМОбороты.ГСМ КАК ГСМОбороты ПОМЕСТИТЬ ВТ ИЗ Документ.уатПутевойЛист КАК уатПутевойЛист {ЛЕВОЕ СОЕДИНЕНИЕ Документ.уатПутевойЛист.РасходГСМ КАК уатПутевойЛистРасходГСМ ПО (уатПутевойЛистРасходГСМ.Ссылка = уатПутевойЛист.Ссылка) И (уатПутевойЛистРасходГСМ.ТС = уатПутевойЛист.ТранспортноеСредство) ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ уатПутевойЛистВыработкаТС1.Ссылка КАК Ссылка, уатПутевойЛистВыработкаТС1.ТС КАК ТС, уатПутевойЛистВыработкаТС1.ПараметрВыработки КАК ПараметрВыработки, СУММА(уатПутевойЛистВыработкаТС1.Количество) КАК Количество ИЗ Документ.уатПутевойЛист.ВыработкаТС КАК уатПутевойЛистВыработкаТС1 ГДЕ (уатПутевойЛистВыработкаТС1.ТС.Модель.НаличиеСпидометра И уатПутевойЛистВыработкаТС1.ПараметрВыработки = ЗНАЧЕНИЕ(Справочник.уатПараметрыВыработки.ПробегОбщий) ИЛИ НЕ уатПутевойЛистВыработкаТС1.ТС.Модель.НаличиеСпидометра И уатПутевойЛистВыработкаТС1.ПараметрВыработки = ЗНАЧЕНИЕ(Справочник.уатПараметрыВыработки.ВремяВРаботе)) СГРУППИРОВАТЬ ПО уатПутевойЛистВыработкаТС1.Ссылка, уатПутевойЛистВыработкаТС1.ТС, уатПутевойЛистВыработкаТС1.ПараметрВыработки) КАК уатПутевойЛистВыработкаТС ПО (уатПутевойЛистВыработкаТС.Ссылка = уатПутевойЛист.Ссылка) И (уатПутевойЛистВыработкаТС.ТС = уатПутевойЛист.ТранспортноеСредство)} ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.уатОстаткиГСМнаТС.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , ) КАК уатОстаткиГСМнаТСОстаткиИОбороты ПО уатПутевойЛист.ТранспортноеСредство = уатОстаткиГСМнаТСОстаткиИОбороты.ТС ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСоставТС КАК уатСоставТС {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС.СрезПоследних(&НачалоПериода, ) КАК уатСчетчикиТССрезПоследних_Нач ПО уатСоставТС.ТС = уатСчетчикиТССрезПоследних_Нач.ТС} ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС.СрезПоследних(&КонецПериода, ) КАК уатСчетчикиТССрезПоследних_Кон ПО уатСоставТС.ТС = уатСчетчикиТССрезПоследних_Кон.ТС ПО уатПутевойЛист.ТранспортноеСредство = уатСоставТС.ВСоставе ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.уатОборотыПоЗаправкамГСМ.Обороты(&НачалоПериода, &КонецПериода, , ) КАК уатОборотыПоЗаправкамГСМОбороты ПО уатПутевойЛист.ТранспортноеСредство = уатОборотыПоЗаправкамГСМОбороты.ТС ГДЕ уатПутевойЛист.Дата МЕЖДУ &НачалоПериода И &КонецПериода И уатПутевойЛист.Рассчитан И уатПутевойЛист.Проведен И уатПутевойЛистРасходГСМ.Активен И уатПутевойЛист.ТранспортноеСредство.Подразделение = &Подразделение СГРУППИРОВАТЬ ПО уатПутевойЛистРасходГСМ.ГСМ, уатПутевойЛист.ТранспортноеСредство, уатПутевойЛист.ТранспортноеСредство.ГосударственныйНомер, уатПутевойЛист.ТранспортноеСредство.ГаражныйНомер, уатПутевойЛист.ТранспортноеСредство.ОсновноеСредство.Код, уатОстаткиГСМнаТСОстаткиИОбороты.КоличествоНачальныйОстаток, уатОстаткиГСМнаТСОстаткиИОбороты.КоличествоКонечныйОстаток, ВЫБОР КОГДА уатОборотыПоЗаправкамГСМОбороты.ВидЗаправки <> ЗНАЧЕНИЕ(перечисление.уатВидыДвиженияГСМ.ЗаправкаСклад) ТОГДА уатОборотыПоЗаправкамГСМОбороты.КоличествоОборот ИНАЧЕ 0 КОНЕЦ, ВЫБОР КОГДА уатОборотыПоЗаправкамГСМОбороты.ВидЗаправки = ЗНАЧЕНИЕ(перечисление.уатВидыДвиженияГСМ.ЗаправкаСклад) ТОГДА уатОборотыПоЗаправкамГСМОбороты.КоличествоОборот ИНАЧЕ 0 КОНЕЦ, уатСчетчикиТССрезПоследних_Кон.Значение, уатСчетчикиТССрезПоследних_Нач.Значение, уатПутевойЛист.ТранспортноеСредство.Модель, уатПутевойЛист.ТранспортноеСредство.Подразделение, уатОстаткиГСМнаТСОстаткиИОбороты.ГСМ, уатОборотыПоЗаправкамГСМОбороты.ГСМ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.ГосНомер, ВТ.ИнвентарныйНомер, ВТ.ГарНомер, ВТ.ГСМнач, ВТ.СоСклада, ВТ.Другие, ВТ.РасходПоНорме, ВТ.РасходПоФакту, ВТ.ГСМкон, ВТ.Пробег, ВТ.СпидометрВыезда, ВТ.СпидометрВозвращения, ВТ.ТранспортноеСредствоМодель, ВТ.ТранспортноеСредствоПодразделение, ВТ.ГСМОстатки, ВТ.ГСМОбороты, ВТ.ТС, ВТ.ГСМ ИЗ ВТ КАК ВТ |
|||
1
vyaz
04.09.13
✎
20:05
|
...не вдаваясь в подробности и не претендуя на истину... а может движения документа от 1 числа проще в предыдущую дату писать?
|
|||
2
fantomrik
04.09.13
✎
20:08
|
(1)не понял мысль вашу
|
|||
3
vyaz
04.09.13
✎
20:11
|
(2)
> потому что заказчик решил, что если Путевой лист сделан > 31.07 а закрыт 01.01 то эту наработку мы закрываем 31 > числом, а в регистр данные попадают датой закрытия допилите конфигурацию, чтобы движения документа попадали в регистр НУЖНОЙ ВАМ датой |
|||
4
Бабло
04.09.13
✎
20:23
|
Укажи явно папаметр таблицы остатков, есть там принедительный спецсимвол
|
|||
5
fantomrik
05.09.13
✎
09:15
|
(3) Логичное решение, просто не хотелось бы ломать документ, уже отчет уж исковеркать до конца под задачу.
(4) не понимаю о чем вы |
|||
6
fantomrik
05.09.13
✎
09:39
|
Мб пойти тогда таким путем - выбрать самый ближайший путевой лист к &НачалоПериода и взять из него остаток. Но если в случае 1 машинки можно отсортировать ПЛ по дате и взять первый, то как такое же реализовать без отбора по машинам, что бы соединить с таблицей других данных?
|
|||
7
fantomrik
05.09.13
✎
22:35
|
(6) Сделал так - основной запрос оставил без изменений, результат в ВТ. В др ВТ отобрал документы с датой документа < НачалоПериода и датой регистрации в регистре > НачалоПериода. Соединил таблицы в от Суммы начала месяца отнимаю сумму из 2ой ВТ. Наверняка далеко не оптимальное решение, но работает...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |