Как видим показания растут, но спидометр периодически может обнуляться. Необходимо одним запросом (вложенные запросы и временные таблицы допускаются) получение общего пробега за произвольный период.
Обнуление счетчика может происходить в любой день. Правильным ответом по приведенному примеру будет пробег 1000 км за весь период. При решении задачи учитывать что автомобилей может быть несколько…
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
А в чем проблема-то, непонятно...
| ВЫБРАТЬ * ИЗ РегистрыСведений.ПоказанияСпидометра КАК Т ГДЕ Т.Период МЕЖДУ НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ) И КОНЕЦПЕРИОДА(&КонецПериода,ДЕНЬ) И Т.Автомобиль В(&СписокАвтомоиблей)
Сообщение отредактировал logist - 22.04.14, 11:56
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Пользователи
Сообщений: 88
Спасибо сказали: 1 раз
Рейтинг: 0
Цитата(logist @ 22.04.14, 12:56)
А в чем проблема-то, непонятно...
| ВЫБРАТЬ * ИЗ РегистрыСведений.ПоказанияСпидометра КАК Т ГДЕ Т.Период МЕЖДУ НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ) И КОНЕЦПЕРИОДА(&КонецПериода,ДЕНЬ) И Т.Автомобиль В(&СписокАвтомоиблей)
Общий пробег не получили по этому запросу, а только выборку за период. Я сделал иначе но результат тот же. Задача получить общий пробег...
!
Правила, п.13
Я начал подумывать корректно ли поставлена задача или мне не понятен её смысл
Группа: Местный
Сообщений: 46
Спасибо сказали: 21 раз
Рейтинг: 0
На первый взгляд, задача некорректна. Пример:
День Пробег 1 100 2 200 (здесь прошло обнуление) 3 210
(в первый день наездили 100, во второй тоже 100, дальше обнулили и проехали 210)
Т.е. по предложенным данным невозможно отследить ситуацию, когда в день обнуления машина наездила столько же или чуть больше, чем накопилось до того. Вывод: нужно добавить информацию, в какие дни было обнуление. Тогда будет возможно решить такую задачу.
Сообщение отредактировал yuritch - 22.04.14, 13:21
Переделать на регистр оборотов. Когда вводим документ документ рассчитывает было обнуление или нет. И проводим не показания счетчика а прирост пробега.
Или на тот-же регистр сведений добавить ещё один ресурс - "прирост пробега".
ну если только математически ... то главное - половить перепады(пары значений) с большего значения на меньшее и взять из пары -бОльшее. потом просумировать бОльшие зн. + последнее. Как это языком запроса понятия не имею.
остальные значения - не нужны.
Сообщение отредактировал Домовик - 22.04.14, 15:06
Группа: Пользователи
Сообщений: 88
Спасибо сказали: 1 раз
Рейтинг: 0
Кое что уже получается... запрос такой...
ВЫБРАТЬ ПоказанияСпидометра.Период, ПоказанияСпидометра.Авто, ПоказанияСпидометра.Пробег ПОМЕСТИТЬ ВТдвижения ИЗ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометра ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Движения.Период КАК Период, Движения.Авто КАК Авто, Движения.Пробег КАК Пробег, СУММА(ТеЖеДвижения.Пробег) КАК ПробегНарастающийИтог ИЗ ВТдвижения КАК Движения ЛЕВОЕ СОЕДИНЕНИЕ ВТдвижения КАК ТеЖеДвижения ПО Движения.Период >= ТеЖеДвижения.Период ГДЕ Движения.Период МЕЖДУ НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ) И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ) И Движения.Авто В(&СписокАвтомоиблей)
СГРУППИРОВАТЬ ПО Движения.Период, Движения.Авто, Движения.Пробег
Вот так 1С учит новых программистов - хранение пробега в РС (вместо оборотов/остатков), а дальше соорудите аццкий запрос к базе, увеличивающий таблицу выборки в геометрической прогрессии.
Группа: Местный
Сообщений: 2908
Из: Київ, Україна
Спасибо сказали: 1159 раз
Рейтинг: 1244.5
Дебильная постановка задачи, если чесно. На коленке где-то так:
ВЫБРАТЬ ПоказанияСпидометра.Авто, ПоказанияСпидометра.Период КАК ТекПериод, ПоказанияСпидометра.Спидометр КАК ТекСпидометр, МАКСИМУМ(ПоказанияСпидометраПредыдущие.Период) КАК ПредПериод ПОМЕСТИТЬ Таб1 ИЗ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометра ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометраПредыдущие ПО ПоказанияСпидометра.Период > ПоказанияСпидометраПредыдущие.Период И ПоказанияСпидометра.Авто = ПоказанияСпидометраПредыдущие.Авто
СГРУППИРОВАТЬ ПО ПоказанияСпидометра.Период, ПоказанияСпидометра.Авто, ПоказанияСпидометра.Спидометр ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Таб1.Авто, Таб1.ТекПериод КАК ТекПериод, Таб1.ТекСпидометр, ЕСТЬNULL(ПоказанияСпидометра.Спидометр, 0) КАК ПредСпидометр, ВЫБОР КОГДА Таб1.ТекСпидометр > ЕСТЬNULL(ПоказанияСпидометра.Спидометр, 0) ТОГДА Таб1.ТекСпидометр - ЕСТЬNULL(ПоказанияСпидометра.Спидометр, 0) ИНАЧЕ Таб1.ТекСпидометр КОНЕЦ КАК Пробег ИЗ Таб1 КАК Таб1 ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометра ПО Таб1.Авто = ПоказанияСпидометра.Авто И Таб1.ПредПериод = ПоказанияСпидометра.Период
УПОРЯДОЧИТЬ ПО ТекПериод
Допрацьовую: - "Бухгалтерія для України 2.1"; - "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".
Группа: Пользователи
Сообщений: 88
Спасибо сказали: 1 раз
Рейтинг: 0
Цитата(sava1 @ 22.04.14, 16:42)
Вот так 1С учит новых программистов - хранение пробега в РС (вместо оборотов/остатков), а дальше соорудите аццкий запрос к базе, увеличивающий таблицу выборки в геометрической прогрессии.
В том то и дело что задачу ставил очень опытный программист для проверки знаний не очень опытного программиста
Цитата(Petre @ 22.04.14, 16:50)
Дебильная постановка задачи, если чесно. На коленке где-то так:
К сожалению с коленки сразу не получилось... слегка модифицировал код...
ВЫБРАТЬ ПоказанияСпидометра.Авто, ПоказанияСпидометра.Период КАК ТекПериод, ПоказанияСпидометра.Пробег КАК ТекСпидометр, МАКСИМУМ(ПоказанияСпидометраПредыдущие.Период) КАК ПредПериод ПОМЕСТИТЬ Таб1 ИЗ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометра ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометраПредыдущие ПО ПоказанияСпидометра.Период > ПоказанияСпидометраПредыдущие.Период И ПоказанияСпидометра.Авто = ПоказанияСпидометраПредыдущие.Авто ГДЕ ПоказанияСпидометра.Период МЕЖДУ &НачалоПериода И &КонецПериода И ПоказанияСпидометра.Авто = &Авто
СГРУППИРОВАТЬ ПО ПоказанияСпидометра.Период, ПоказанияСпидометра.Авто, ПоказанияСпидометра.Пробег ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Таб1.Авто, Таб1.ТекПериод КАК ТекПериод, Таб1.ТекСпидометр, ЕСТЬNULL(ПоказанияСпидометра.Пробег, 0) КАК ПредСпидометр, ВЫБОР КОГДА Таб1.ТекСпидометр > ЕСТЬNULL(ПоказанияСпидометра.Пробег, 0) ТОГДА Таб1.ТекСпидометр - ЕСТЬNULL(ПоказанияСпидометра.Пробег, 0) ИНАЧЕ Таб1.ТекСпидометр КОНЕЦ КАК Пробег ИЗ Таб1 КАК Таб1 ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометра ПО Таб1.Авто = ПоказанияСпидометра.Авто И Таб1.ПредПериод = ПоказанияСпидометра.Период
Группа: Пользователи
Сообщений: 88
Спасибо сказали: 1 раз
Рейтинг: 0
Цитата(Ardi @ 22.04.14, 20:20)
Да. Консоль без скд. Конкретно вот эта: [необходимо зарегистрироваться для просмотра ссылки]
эта консоль отрабатывает в точности как и моя, но я в результатах так и не могу получить 1000 т.е. нет нарастающего итога Авто ТекПериод ТекСпидометр ПредСпидометр Спидометр Авто1 01.01.2012 0:00:00 100 100 Авто1 02.01.2012 0:00:00 500 100 400 Авто1 03.01.2012 0:00:00 50 500 50 Авто1 04.01.2012 0:00:00 50 Авто1 05.01.2012 0:00:00 400 400 Авто1 06.01.2012 0:00:00 100 400 100
Вроде получилось... Всем ОГРОМНОЕ СПАСИБО!!! Ошибка была в данных... Итог получил. Итого, рабочий запрос.
ВЫБРАТЬ ПоказанияСпидометра.Авто, ПоказанияСпидометра.Период КАК ТекПериод, ПоказанияСпидометра.Спидометр КАК ТекСпидометр, МАКСИМУМ(ПоказанияСпидометраПредыдущие.Период) КАК ПредПериод ПОМЕСТИТЬ Таб1 ИЗ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометра ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометраПредыдущие ПО ПоказанияСпидометра.Период > ПоказанияСпидометраПредыдущие.Период И ПоказанияСпидометра.Авто = ПоказанияСпидометраПредыдущие.Авто ГДЕ ПоказанияСпидометра.Период МЕЖДУ НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ) И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ) И ПоказанияСпидометра.Авто В(&СписокАвтомоиблей)
СГРУППИРОВАТЬ ПО ПоказанияСпидометра.Период, ПоказанияСпидометра.Авто, ПоказанияСпидометра.Спидометр ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Таб1.Авто КАК Авто, Таб1.ТекПериод КАК ТекПериод, Таб1.ТекСпидометр КАК ТекСпидометр, ЕСТЬNULL(ПоказанияСпидометра.Спидометр, 0) КАК ПредСпидометр, ВЫБОР КОГДА Таб1.ТекСпидометр > ЕСТЬNULL(ПоказанияСпидометра.Спидометр, 0) ТОГДА Таб1.ТекСпидометр - ЕСТЬNULL(ПоказанияСпидометра.Спидометр, 0) ИНАЧЕ Таб1.ТекСпидометр КОНЕЦ КАК Пробег ИЗ Таб1 КАК Таб1 ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометра ПО Таб1.Авто = ПоказанияСпидометра.Авто И Таб1.ПредПериод = ПоказанияСпидометра.Период
УПОРЯДОЧИТЬ ПО ТекПериод ИТОГИ СУММА(Пробег) ПО Авто
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!