Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Опять я к Вам со своими запросами ) (http://forums.kuban.ru/f1040/opyat-_ya_k_vam_so_svoimi_zaprosami-2320107.html)

ktvofffka 11.03.2012 14:47

Опять я к Вам со своими запросами )
 
собственно вопросец возможно ли запросом 1С создать следующую таблицу
К примеру нужно построить таблицу со значениями от 1 до 100
на входе НачЗначение = 1 и КонЗначение = 100
на выходе таблица
1
2
3
...
100

Lexusss 11.03.2012 15:05

только лишь в частных случаях

VZ 11.03.2012 15:32

Зачем? Или удалять гланды через задний проход - принципиальная социально-важная задача?

bma1 11.03.2012 16:22

2(1) Можно. Даже универсальную.
ВЫБРАТЬ
НашеЧисло ИЗ (
ВЫБРАТЬ 0 КАК НашеЧисло
ОБЪЕДИНИТЬ
ВЫБРАТЬ 1
ОБЪЕДИНИТЬ
ВЫБРАТЬ 2
...
ОБЪЕДИНИТЬ
ВЫБРАТЬ 99999999999999999999999999999999999999) КАК МассивЧисел
Где МассивЧисел.НашеЧисло >= &МинЧисло
И МассивЧисел.НашеЧисло <= &МаксЧисло
УПОРЯДОЧИТЬ ПО
НашеЧисло ВОЗР

Lexusss 11.03.2012 16:30

(4) Длина запроса получится больше 40000 или что то типа того символов. Их 1С не кушает

bma1 11.03.2012 16:34

2(5) Это проблемы 1С. Юзайте пакеты и временные таблицы.

Lexusss 11.03.2012 16:38

(6) С временной таблицой все слишком легко. Генерить ее по внешней таблице значений - и всего делов.

ktvofffka 12.03.2012 08:40

(3) задачки бывают разными ) к примеру мне нужно было на заданный период на Каждый день сделать собрать таблицу с остатками. для дальнейшей ее обработки. естесно напрямую сделать это не получиться поскольку не каждый день есть обороты. Те мне нужна была подготовленная таблица где на КАЖДЫЙ день были какие то циферки ). Соответственно я хотел получить табличку со всеми датами из этого периода
ну а числа это в таблице или даты роли не играло суть одна и таже.
Конечно можно использовать и временные таблицы предварительно сформировав табличку. но меня интересовал просто способ сделать все одним запросом
В общем ладно поскольку так понял что проблему типовыми средствами не решить то задачу решил частным способом

bma1 12.03.2012 08:47

2(8) "естесно напрямую сделать это не получиться поскольку не каждый день есть обороты"
Читай про дополнение дат в запросе. Двоешник.

ktvofffka 12.03.2012 08:52

) ну как бы прочитай сперва что я писал
мне нужно была предварительная таблица ДЛЯ ДАЛЬНЕЙШЕЙ ее обработки а не вывод этой таблицы

bma1 12.03.2012 09:04

2(10) [url]http://www.kb.mista.ru/article.php?id=92[/url]

ktvofffka 12.03.2012 09:46

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

Приведите пожалуйста пример. Был бы весьма признателен
параметры запроса ДатаНач ДатаКон
Результатом запроса должна стать таблица с курсами валют скажем с 1.01.12 по 5.01.12
в регистре курсы валют указаны НЕ на каждую даты
значения по регистру
02.01.12 - 30
04.01.12 - 45


результатом должна быть таблица
01.01.12 - 0
02.01.12 - 30
03.01.12 - 30
04.01.12 - 45
05.01.12 - 45

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

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

bma1 12.03.2012 09:57

2(12) зачем эта таблица? все равно ведь будет какой-то вывод - значит можно и через дополнение дат при обходе группировки использовать.

ktvofffka 12.03.2012 10:53

ну к примеру мы занимаемся хранением товара, до скажем 10 дней храним бесплатно свыше идет оплата по объему хранения. соответственно нам на каждый день требуется понимать сколько остатков и есть ли превышение по времени хранения.. а потом это суммировать чтоб получить сумму хранения

ktvofffka 12.03.2012 10:58

можно конечно извращаться и не смотреть промежуточные данные а вводить формулы для расчета за период а не за день.. но в большом запросе это усложняет его понимание в дальнейшем
гораздо проще делать расчет на каждый день.. заодно проще отлаживать и тестить

bma1 12.03.2012 11:03

2(14) первое, зачем знать, сколько было вчера передержанного товара, если его вчера и забрали. Это как с пенями за просрочку платежа за отгрузку.
второе, нужна таблица:
Груз (сам товар как единица)
Дата постановки на хранение
Дата когда забрали (если забрали)
Дней просрочено (итого)
Сумма штрафа (как объем чего-то там * дни просрочки).
И ничего более.
Иначе, если получишь таблицу
Дата
Груз
Количество дней просрочки
Штраф (как объем чего-то там * дни просрочки).
А потом просуммируешь штрафы - получишь полную чушь.
Дата - в этой задаче лишние.

ktvofffka 12.03.2012 11:41

ты забываешь о том что груз можно забирать частично
объясняю
пусть
1 числа остаток 10 (приход)
3 числа остаток 7
7 числа остаток 4
10 числа остаток 1

оплата идет за превышение 4 дневного срока хранения
те оплата будет считаться так
5 числа сумма за 7 штучек
6 числа сумма за 7 штучек
7 числа сумма за 4
8 числа сумма за 4
9 числа сумма за 4 и
10 числа сумма за 1
сумма хранения зависит от объема. объем меняется

ktvofffka 12.03.2012 11:48

и заметь это простейший вариант )... тут все линейно... а вот к примеру чтоб на каждый день брался средневзвешенный остаток за последние Nдней.. расчеты могут быть очень разнообразны.. и гораздо удобнее хранить полноценную таблицу с которой и работать

ktvofffka 12.03.2012 11:55

В общем я думаю пора прекращать спор. ты видишь задачу локально. не думая о том что это только кусочек боле объемной задачи. Мне интересен был конкретный кусочек алгоритма... просто мало ли... может в последних релизах расширили язык запросов... каюсь не слежу за этим. К примеру на скуле ж есть реализация рекурсии.. вот я и подумал.. время есть потому и спросил.. мало ли каких свежих идей подкинут). Спасибо

Lexusss 12.03.2012 13:38

Правильнее считать как (с 5 по 6 число)* 7 штук + (с 7 по 9 число) * 4 штуки + (10 число) * 1 штука.
Такая формула легко извлекается запросом.

Lexusss 12.03.2012 13:46

Правильнее считать как (с 5 по 6 число)* 7 штук + (с 7 по 9 число) * 4 штуки + (10 число) * 1 штука.
Такая формула легко извлекается запросом.

ktvofffka 12.03.2012 14:36

(20) извини а откуда ты возьмешь 5 число? если оборотов не было по нему?
у нас скажем будет 3 партии у одной 5 дневный срок наступит 4 числа у второй 5, у третьего 6... ни по одному из дней оборотов нет соответственно выводить формулами... увольте... конечно таблицу построить можно.. но мне кажется вы запутаетесь в дальнейшем когда нужно будет что-либо допилить.. отладить какой то момент.

ktvofffka 12.03.2012 14:42

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

z1x1x 12.03.2012 14:44

Если в конфе есть РегламентированныйПроизводственныйКалендарь, то можно использовать его:
ВЫБРАТЬ
ДЕНЬ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК День
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &Дт1 И &Дт2

Lexusss 12.03.2012 15:29

(23) Ты пытаешься использовать простейшую логику при расчете, но есть и другая - более сложная, но выгодная по затратам времени и ресурсов сервера.


Текущее время: 16:38. Часовой пояс GMT +3.