Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Ваши мысли по поводу задачки          
Powerman Подменю пользователя
сообщение 22.04.14, 11:26
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 88
Спасибо сказали: 1 раз
Рейтинг: 0

Уважаемые знатоки! Подскажите, что Вы думаете поп поводу данной задачки...

Задача

Есть периодический регистр сведений «Показания спидометра» с измерением «Авто» и ресурсом «Пробег, км» со следующими данными:

1. 01/01/2012 Авто1 100.00
2. 02/01/2012 Авто1 500.00
3. 03/01/2012 Авто1 50.00
4. 04/01/2012 Авто1 400.00
5. 06/01/2012 Авто1 100.00

Как видим показания растут, но спидометр периодически может обнуляться. Необходимо одним запросом (вложенные запросы и временные таблицы допускаются) получение общего пробега за произвольный период.

Обнуление счетчика может происходить в любой день.
Правильным ответом по приведенному примеру будет пробег 1000 км за весь период.
При решении задачи учитывать что автомобилей может быть несколько…

logist Подменю пользователя
сообщение 22.04.14, 11:56
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

А в чем проблема-то, непонятно...
| ВЫБРАТЬ * ИЗ РегистрыСведений.ПоказанияСпидометра КАК Т ГДЕ Т.Период МЕЖДУ НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ) И КОНЕЦПЕРИОДА(&КонецПериода,ДЕНЬ) И Т.Автомобиль В(&СписокАвтомоиблей)


Сообщение отредактировал logist - 22.04.14, 11:56


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: Powerman,

sava1 Подменю пользователя
сообщение 22.04.14, 13:01
Сообщение #3

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

(2) Проблема в расчете пробега после обнуления (запросом)

ТС. Ключевое выражение для поиска "Нарастающий итог в запросе".
А так - левое соединение таблицыс собой по периоду

Спасибо сказали: Powerman,

Powerman Подменю пользователя
сообщение 22.04.14, 13:05
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 88
Спасибо сказали: 1 раз
Рейтинг: 0

Цитата(logist @ 22.04.14, 12:56) *
А в чем проблема-то, непонятно...
| ВЫБРАТЬ * ИЗ РегистрыСведений.ПоказанияСпидометра КАК Т ГДЕ Т.Период МЕЖДУ НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ) И КОНЕЦПЕРИОДА(&КонецПериода,ДЕНЬ) И Т.Автомобиль В(&СписокАвтомоиблей)

Общий пробег не получили по этому запросу, а только выборку за период. Я сделал иначе но результат тот же. Задача получить общий пробег...


 ! 

Правила, п.13
 

Я начал подумывать корректно ли поставлена задача или мне не понятен её смысл

Сообщение отредактировал logist - 22.04.14, 13:54

yuritch Подменю пользователя
сообщение 22.04.14, 13:20
Сообщение #5

Общительный
Иконка группы
Группа: Местный
Сообщений: 46
Спасибо сказали: 21 раз
Рейтинг: 0

На первый взгляд, задача некорректна. Пример:

День Пробег
1 100
2 200
(здесь прошло обнуление)
3 210

(в первый день наездили 100, во второй тоже 100, дальше обнулили и проехали 210)

Т.е. по предложенным данным невозможно отследить ситуацию, когда в день обнуления машина наездила столько же или чуть больше, чем накопилось до того.
Вывод: нужно добавить информацию, в какие дни было обнуление. Тогда будет возможно решить такую задачу.

Сообщение отредактировал yuritch - 22.04.14, 13:21

Спасибо сказали: Powerman, Домовик,

Ardi Подменю пользователя
сообщение 22.04.14, 14:45
Сообщение #6

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Переделать на регистр оборотов.
Когда вводим документ документ рассчитывает было обнуление или нет. И проводим не показания счетчика а прирост пробега.

Или на тот-же регистр сведений добавить ещё один ресурс - "прирост пробега".


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Спасибо сказали: Powerman,

Домовик Подменю пользователя
сообщение 22.04.14, 15:05
Сообщение #7

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

ну если только математически ... то главное - половить перепады(пары значений) с большего значения на меньшее и взять из пары -бОльшее. потом просумировать бОльшие зн. + последнее.
Как это языком запроса понятия не имею.

остальные значения - не нужны.

Сообщение отредактировал Домовик - 22.04.14, 15:06

Спасибо сказали: Powerman,

Powerman Подменю пользователя
сообщение 22.04.14, 15:26
Сообщение #8

Говорящий
***
Группа: Пользователи
Сообщений: 88
Спасибо сказали: 1 раз
Рейтинг: 0

Кое что уже получается... запрос такой...

ВЫБРАТЬ
    ПоказанияСпидометра.Период,
    ПоказанияСпидометра.Авто,
    ПоказанияСпидометра.Пробег
ПОМЕСТИТЬ ВТдвижения
ИЗ
    РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометра
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Движения.Период КАК Период,
    Движения.Авто КАК Авто,
    Движения.Пробег КАК Пробег,
    СУММА(ТеЖеДвижения.Пробег) КАК ПробегНарастающийИтог
ИЗ
    ВТдвижения КАК Движения
        ЛЕВОЕ СОЕДИНЕНИЕ ВТдвижения КАК ТеЖеДвижения
        ПО Движения.Период >= ТеЖеДвижения.Период
ГДЕ
    Движения.Период МЕЖДУ НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ) И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
    И Движения.Авто В(&СписокАвтомоиблей)

СГРУППИРОВАТЬ ПО
    Движения.Период,
    Движения.Авто,
    Движения.Пробег

УПОРЯДОЧИТЬ ПО
    Авто,
    Период


Результат, такой...

Период Авто Пробег ПробегНарастающийИтог
01.01.2012 0:00:00 Авто1 100 200
02.01.2012 0:00:00 Авто1 500 1 200
03.01.2012 0:00:00 Авто1 50 1 300
05.01.2012 0:00:00 Авто1 400 1 700
06.01.2012 0:00:00 Авто1 100 1 800
07.01.2012 0:00:00 Авто1 0 1 800

Но должно быть 1000

Егор Динин Подменю пользователя
сообщение 22.04.14, 15:29
Сообщение #9

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1454
Из: Киев
Спасибо сказали: 548 раз
Рейтинг: 0

Цитата(yuritch @ 22.04.14, 13:20) *
На первый взгляд, задача некорректна. Пример:

Соглашусь с yuritch, при такой структуре задачу можно решать лишь с некоторыми допущениями.

Спасибо сказали: Powerman, Домовик,

sava1 Подменю пользователя
сообщение 22.04.14, 15:42
Сообщение #10

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Вот так 1С учит новых программистов -
хранение пробега в РС (вместо оборотов/остатков), а дальше соорудите аццкий запрос к базе, увеличивающий таблицу выборки в геометрической прогрессии.

Спасибо сказали: Powerman,

Petre Подменю пользователя
сообщение 22.04.14, 15:50
Сообщение #11

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1147 раз
Рейтинг: 1228.9

Дебильная постановка задачи, если чесно.
На коленке где-то так:
ВЫБРАТЬ
    ПоказанияСпидометра.Авто,
    ПоказанияСпидометра.Период КАК ТекПериод,
    ПоказанияСпидометра.Спидометр КАК ТекСпидометр,
    МАКСИМУМ(ПоказанияСпидометраПредыдущие.Период) КАК ПредПериод
ПОМЕСТИТЬ Таб1
ИЗ
    РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометра
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометраПредыдущие
        ПО ПоказанияСпидометра.Период > ПоказанияСпидометраПредыдущие.Период
            И ПоказанияСпидометра.Авто = ПоказанияСпидометраПредыдущие.Авто

СГРУППИРОВАТЬ ПО
    ПоказанияСпидометра.Период,
    ПоказанияСпидометра.Авто,
    ПоказанияСпидометра.Спидометр
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Таб1.Авто,
    Таб1.ТекПериод КАК ТекПериод,
    Таб1.ТекСпидометр,
    ЕСТЬNULL(ПоказанияСпидометра.Спидометр, 0) КАК ПредСпидометр,
    ВЫБОР
        КОГДА Таб1.ТекСпидометр > ЕСТЬNULL(ПоказанияСпидометра.Спидометр, 0)
            ТОГДА Таб1.ТекСпидометр - ЕСТЬNULL(ПоказанияСпидометра.Спидометр, 0)
        ИНАЧЕ Таб1.ТекСпидометр
    КОНЕЦ КАК Пробег
ИЗ
    Таб1 КАК Таб1
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометра
        ПО Таб1.Авто = ПоказанияСпидометра.Авто
            И Таб1.ПредПериод = ПоказанияСпидометра.Период

УПОРЯДОЧИТЬ ПО
    ТекПериод


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Спасибо сказали: Powerman,

Powerman Подменю пользователя
сообщение 22.04.14, 17:24
Сообщение #12

Говорящий
***
Группа: Пользователи
Сообщений: 88
Спасибо сказали: 1 раз
Рейтинг: 0

Цитата(sava1 @ 22.04.14, 16:42) *
Вот так 1С учит новых программистов -
хранение пробега в РС (вместо оборотов/остатков), а дальше соорудите аццкий запрос к базе, увеличивающий таблицу выборки в геометрической прогрессии.

В том то и дело что задачу ставил очень опытный программист для проверки знаний не очень опытного программиста 64000000.gif

Цитата(Petre @ 22.04.14, 16:50) *
Дебильная постановка задачи, если чесно.
На коленке где-то так:

К сожалению с коленки сразу не получилось...
слегка модифицировал код...

ВЫБРАТЬ
    ПоказанияСпидометра.Авто,
    ПоказанияСпидометра.Период КАК ТекПериод,
    ПоказанияСпидометра.Пробег КАК ТекСпидометр,
    МАКСИМУМ(ПоказанияСпидометраПредыдущие.Период) КАК ПредПериод
ПОМЕСТИТЬ Таб1
ИЗ
    РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометра
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометраПредыдущие
        ПО ПоказанияСпидометра.Период > ПоказанияСпидометраПредыдущие.Период
            И ПоказанияСпидометра.Авто = ПоказанияСпидометраПредыдущие.Авто
ГДЕ
    ПоказанияСпидометра.Период МЕЖДУ &НачалоПериода И &КонецПериода
    И ПоказанияСпидометра.Авто = &Авто

СГРУППИРОВАТЬ ПО
    ПоказанияСпидометра.Период,
    ПоказанияСпидометра.Авто,
    ПоказанияСпидометра.Пробег
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Таб1.Авто,
    Таб1.ТекПериод КАК ТекПериод,
    Таб1.ТекСпидометр,
    ЕСТЬNULL(ПоказанияСпидометра.Пробег, 0) КАК ПредСпидометр,
    ВЫБОР
        КОГДА Таб1.ТекСпидометр > ЕСТЬNULL(ПоказанияСпидометра.Пробег, 0)
            ТОГДА Таб1.ТекСпидометр - ЕСТЬNULL(ПоказанияСпидометра.Пробег, 0)
        ИНАЧЕ Таб1.ТекСпидометр
    КОНЕЦ КАК Пробег
ИЗ
    Таб1 КАК Таб1
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияСпидометра КАК ПоказанияСпидометра
        ПО Таб1.Авто = ПоказанияСпидометра.Авто
            И Таб1.ПредПериод = ПоказанияСпидометра.Период

УПОРЯДОЧИТЬ ПО
    ТекПериод


результат ниже...

Авто ТекПериод ТекСпидометр ПредСпидометр Пробег
Авто1 01.01.2012 0:00:00 100 0 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 0 50 0
Авто1 05.01.2012 0:00:00 400 0 400
Авто1 06.01.2012 0:00:00 100 400 100

Ardi Подменю пользователя
сообщение 22.04.14, 18:09
Сообщение #13

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Цитата(Powerman @ 22.04.14, 17:24) *
результат ниже...

У меня корректно отрабатывает запрос (в консоли запросов).


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Спасибо сказали: Powerman,

Powerman Подменю пользователя
сообщение 22.04.14, 18:22
Сообщение #14

Говорящий
***
Группа: Пользователи
Сообщений: 88
Спасибо сказали: 1 раз
Рейтинг: 0

Цитата(Ardi @ 22.04.14, 19:09) *
У меня корректно отрабатывает запрос (в консоли запросов).

Мой вариант?
у меня тоже через консоль, но что то не так... why.gif

Ardi Подменю пользователя
сообщение 22.04.14, 19:20
Сообщение #15

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Цитата(Powerman @ 22.04.14, 18:22) *
Мой вариант?

Да.
Консоль без скд.
Конкретно вот эта: [необходимо зарегистрироваться для просмотра ссылки]


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Спасибо сказали: Powerman,

Powerman Подменю пользователя
сообщение 22.04.14, 20:45
Сообщение #16

Говорящий
***
Группа: Пользователи
Сообщений: 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.ПредПериод = ПоказанияСпидометра.Период

УПОРЯДОЧИТЬ ПО
    ТекПериод
ИТОГИ
    СУММА(Пробег)
ПО
    Авто

Спасибо сказали: yuri_an,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 23.04.24, 19:27
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!