Имя: Пароль:
1C
1С v8
Таблица умножения на СКД
0 Rousse
 
04.05.18
13:31
Добрый день
Есть задача прстроить отчет с использованием СКД
Отчет должен представлять собой таблицу, верхняя строка и левый столбец которой будут содержать числа от А до В с шагом 1, а в клетках таблицы должны содержаться произведения чисел, находящихся в верхней клетке столбца и крайней левой клетке строки, на пересечении которых находится клетка. Т.е. отчет должен представлять собой таблицу умножения.

Не знаю даже с чего начать. Какой-то ступор. Прошу помощи.
1 Волшебник
 
04.05.18
13:35
Задание на собеседовании?
2 Rousse
 
04.05.18
13:37
Да...
3 Волшебник
 
04.05.18
13:38
(2) А как же ты потом работать будешь?
4 Hans
 
04.05.18
13:40
Эту задачу пол мисты не выполнит, которые уже десятилетиями работают.
5 Hans
 
04.05.18
13:42
Даже не пол мисты. 90% не выполнит.
6 Лодырь
 
04.05.18
13:42
(4) Не верится. Задачка достаточно распространенная.
7 _Дайвер_
 
04.05.18
13:44
(5) Решить можно, просто подумать немного
8 stepan73
 
04.05.18
13:46
Ни разу не сталкивался с такой задачей. Да и необходимость как-то не очень представляю. Но, имхо, через полное соединения таблицы с самой собой. Особой проблемы нет, но лениво дальше думать :)
9 Лодырь
 
04.05.18
13:47
(8) Это ты вторую часть решения обсуждаешь, а есть еще и первая. Но тоже типовая.
10 stepan73
 
04.05.18
13:50
(9) получить таблицу? да ну, там то вообще сложностей нет... разве что извращаться еще с системами счисления
11 youalex
 
04.05.18
13:52
(0)
1) врем. таблица чисел "От А до B"
2) Cross JOIN сама с собой - на выходе три поля
3) поле произведение - в ресурсы.
4) В структуре СКД - таблица
12 stepan73
 
04.05.18
13:56
(11) учитывая что ТС - новорег, подозреваю что такого ему не хватит :)
13 NWsFF
 
04.05.18
13:57
Формируешь тч умножения передаешь в СКД как внешние данные и вуаля.
14 los_hooliganos
 
04.05.18
13:58
ВЫБРАТЬ
    1 КАК Колонье
ПОМЕСТИТЬ Колонка

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    7

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    1 КАК Поле1,
    2 КАК Поле2,
    3 КАК Поле3,
    4 КАК Поле4,
    5 КАК Поле5,
    6 КАК Поле6,
    7 КАК Поле7,
    8 КАК Поле8,
    9 КАК Поле9
ПОМЕСТИТЬ Ряд
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Колонка.Колонье,
    Ряд.Поле1*Колонка.Колонье,
    Ряд.Поле2*Колонка.Колонье,
    Ряд.Поле3*Колонка.Колонье,
    Ряд.Поле4*Колонка.Колонье,
    Ряд.Поле5*Колонка.Колонье,
    Ряд.Поле6*Колонка.Колонье,
    Ряд.Поле7*Колонка.Колонье,
    Ряд.Поле8*Колонка.Колонье,
    Ряд.Поле9*Колонка.Колонье
ИЗ
    Колонка КАК Колонка,
    Ряд КАК Ряд
15 Лодырь
 
04.05.18
14:00
(14) Мсье знает толк в извращениях. А теперь от -45345353 до 5464656456
16 xxTANATORxx
 
04.05.18
14:02
(15)тут без динамического запроса не обойтись  )
17 Xapac
 
04.05.18
14:03
ВЫБРАТЬ    1 КАК Цифер
ПОМЕСТИТЬ Вт_Циферы

ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    2
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    4
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    5
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    6
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    7
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    8
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ    9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Вт_Циферы.Цифер КАК Цифер1,
    Вт_Циферы1.Цифер КАК Цифер2,
    Вт_Циферы.Цифер * Вт_Циферы1.Цифер КАК Рез
ИЗ
    Вт_Циферы КАК Вт_Циферы,
    Вт_Циферы КАК Вт_Циферы1
18 los_hooliganos
 
04.05.18
14:04
(15) Нет там надо писать запрос, который сам себя будет множить
Но в любом случае надо сначала загнать в вирт таблицу цифры от 1 до 9
19 xxTANATORxx
 
04.05.18
14:05
(4)таблица умножения это ерунда, ты попробуй таблицу деления изобрази
20 Xapac
 
04.05.18
14:05
21 Timon1405
 
04.05.18
14:07
вообще-то, все кто решают для цифр с 1 по 9 решают не ту задачу. в условии сказано
>>содержать числа от А до В с шагом 1
22 xxTANATORxx
 
04.05.18
14:07
а вот еще хорошая задачка: с помощью СКД вывести календарь за произвольный период, в виде "привычной" таблицы (по месяцам)
23 rabbidX
 
04.05.18
14:15
Раз уж зашла речь об извращениях)
ВЫБРАТЬ ПЕРВЫЕ 1000
    Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ Спр
ИЗ
    Справочник.Номенклатура КАК Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВложенныйЗапрос.Количество + &А - 1 КАК Число
ПОМЕСТИТЬ Числа
ИЗ
    (ВЫБРАТЬ
        КОЛИЧЕСТВО(Спр1.Ссылка) КАК Количество
    ИЗ
        Спр КАК Спр
            ЛЕВОЕ СОЕДИНЕНИЕ Спр КАК Спр1
            ПО Спр.Ссылка >= Спр1.Ссылка) КАК ВложенныйЗапрос
ГДЕ
    ВложенныйЗапрос.Количество <= &В
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Числа.Число КАК Строка,
    Числа1.Число КАК Столбец
ИЗ
    Числа КАК Числа,
    Числа КАК Числа1

А произведение через вычислимое поле в СКД
24 youalex
 
04.05.18
14:18
(14) зачем усложнять, когда можно просто:
ВЫБРАТЬ 1 КАК x,  1 КАК y, 1*1 КАК m
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 1 КАК x,  2 КАК y, 1*2 КАК m
...
25 Dotoshin
 
04.05.18
14:21
Ну раз пошла такая пьянка, вот...
ВЫБРАТЬ
    1 КАК Столбец
ПОМЕСТИТЬ Столбцы

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    5
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    1 КАК Ряд
ПОМЕСТИТЬ Ряды

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    5
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Ряды.Ряд,
    Столбцы.Столбец,
    Ряды.Ряд * Столбцы.Столбец КАК Произведение
ИЗ
    Ряды КАК Ряды
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Столбцы КАК Столбцы
        ПО (ИСТИНА)
26 NWsFF
 
04.05.18
14:22
Я бы никого из вас на работу не взял, за исключением пары человек, задачу не поняли но уже успешно решают )
27 Лодырь
 
04.05.18
14:25
(26) Это называется "гибкие методики разработки" ))
28 bolobol
 
04.05.18
14:28
(26) Обязательно понимать бред заказчика, перед тем как предоставить успешное решение?
29 bolobol
 
04.05.18
14:29
А, ну да... Франч же, наверняка, а там почасовка, больше бреда - больше денег
30 Xapac
 
04.05.18
14:30
(26)Клиент не всегда знает что он хочет. Надо иногда его убедить в том что ему надо
31 rabbidX
 
04.05.18
14:31
(25) Это (17) с лишними сущностями
В идеале нужен в вариант (17) добавить 0, соединить таблицу Цифер с собой приемлемое количество раз и получить поля вида 1000*Цифер3.Цифер + 100*Цифер2.Цифер  + 10*Цифер1.Цифер + Цифер.Цифер, и уже то, что здесь получилось соединять само с собой и перемножать.
Но делать этого я, конечно, не буду.
32 DrShad
 
04.05.18
14:49
(31) у тебя в (23) ошибка в вычислении ВТ Числа
33 NWsFF
 
04.05.18
14:52
(28) Ну согласись с переменными А B это уже другого уровня задача, более интересная
34 Повелитель
 
04.05.18
14:58
(0)

ТЗ = Новый ТаблицаЗначений.

Для колонка= 1 По А Цикл
//создание колонок
Для строка= 1 По В Цикл
//создание строк
КонецЦикла;
КонецЦикла;

Потом это все поместить во временную таблицу запроса и вывести.
35 Лодырь
 
04.05.18
15:04
(34) Ты неправильно условия прочитал
36 rabbidX
 
04.05.18
15:09
(32) Ага, спасибо. Надо так
ВЫБРАТЬ
    ВложенныйЗапрос.Количество + &А - 1 КАК Число
ПОМЕСТИТЬ Числа
ИЗ
    (ВЫБРАТЬ
        КОЛИЧЕСТВО(Спр1.Ссылка) КАК Количество,
        Спр.Ссылка КАК Ссылка
    ИЗ
        Спр КАК Спр
            ЛЕВОЕ СОЕДИНЕНИЕ Спр КАК Спр1
            ПО Спр.Ссылка >= Спр1.Ссылка
    
    СГРУППИРОВАТЬ ПО
        Спр.Ссылка) КАК ВложенныйЗапрос
ГДЕ
    ВложенныйЗапрос.Количество <= &В -&А + 1
37 rabbidX
 
04.05.18
15:15
(22) "привычная" таблица - это так?
https://pastenow.ru/3204T
38 bolobol
 
04.05.18
15:15
(33) У заказчика всегда какие-то особые условия с другим уровнем. И как только выставляется счёт - задача либо умирает совсем, либо стремительно упрощается до "дважды два".
39 Franchiser
 
гуру
04.05.18
15:15
(36) причем тут СКД?
40 bolobol
 
04.05.18
15:16
(39) СамНакодилДанных...
41 bolobol
 
04.05.18
15:16
Тьфу, СамКодилДанные
42 Franchiser
 
гуру
04.05.18
15:17
Если такая постановка, то значит нужно сделать средствами СКД, т.е. несколькими наборами
43 xxTANATORxx
 
04.05.18
15:18
(37)да, типа того
44 Новиков
 
04.05.18
15:20
Числа от А до В - эти два числа, это параметры, задаваемые где-то на форме отчета?
45 rabbidX
 
04.05.18
15:21
(42) Какая на фиг разница? Я ж средства неСКД не использовал.
46 rabbidX
 
04.05.18
15:22
(43) действительно интересная задачка
47 stepan73
 
04.05.18
15:23
Я таки задумался, а есть вариант сделать универсальное решение? Т.е. без ограничения по разрядности чисел А и В. Я пока не смог придумать.
48 stepan73
 
04.05.18
15:25
(44) конечно, иначе бы было не интересно :)
49 Новиков
 
04.05.18
15:29
(48) Тогда сам запрос в (17) и вся задача сводится к тому, чтобы текст запроса сформировать динамически в диапазоне от А к Б. Или есть какой-то реальный хитрый лайфхак от Ильдаровича :)
50 lEvGl
 
гуру
04.05.18
15:29
на даты надо завязаться, типа там
ДобавитьКДате(Текущая, День, &B)
получить строки с цифрами 1, 2, 3 - уже будут "независимые" от справочников и регистров данные, полдела
51 lEvGl
 
гуру
04.05.18
15:30
(49) динамический текст это кодинг
52 stepan73
 
04.05.18
15:32
(49) надо не текст запроса динамический, а диапазон
(50) блин, точно... вот теперь дальше понятно :)
53 DrShad
 
04.05.18
15:33
(36) да не за что
твой вариант самый приемлимый

https://cdn1.savepice.ru/uploads/2018/5/4/f60687e81beb5d367394ffa2034c53be-full.png
54 DmitriyDI
 
04.05.18
15:40
https://yadi.sk/d/AEnkviq93VL83v
Что скажете)?
55 DmitriyDI
 
04.05.18
15:41
(54) результат работы
https://yadi.sk/i/01lv1a_d3VL8Ct
56 Новиков
 
04.05.18
15:44
(54), (55) Хорошее простое решение. Зачет. Даже говнокодить с запросом не стал, видимо совсем ленно.
57 DrShad
 
04.05.18
15:45
(54) у меня красивее )))
58 DmitriyDI
 
04.05.18
15:47
(57) ссылку на отчет в студию))

(56) ага) 4 минуты потребовалось)
59 g00d
 
04.05.18
15:50
(54) в общем то твое решение не чистое скд, таким образом можно было подготовить таблицу в модуле и потом уже ее просто вывести.
60 stepan73
 
04.05.18
15:51
(54) красиво :) но с "ПриКомпоновкеРезультата" не интересно
61 DmitriyDI
 
04.05.18
15:53
(59) с использованием грязных трюков))
62 lEvGl
 
гуру
04.05.18
15:59
(57) тоже кодом что ли?
63 DrShad
 
04.05.18
16:11
(62) не, как в (23)
64 Asirius
 
04.05.18
16:28
На чистом СКД при помощи фиксированного запроса для неограниченного А и Б задачу решить невозможно.
Фиксированный (не динамический) запрос содержит конечное количество исходных таблиц и конечное количество соединений.
Значит количество записей в его результате будет ограничено следующим числом: МаксивальноеКоличествоЗаписейВИсходнойТаблице^2^КоличествоСоединений
65 g00d
 
04.05.18
16:42
вот чистое скд, но до 1000, можно сделать и больше, но потребуется добавить новые порядки в таблицу чисел между А и Б
https://yadi.sk/d/i8uinjLj3VLFTN
66 DmitriyDI
 
04.05.18
17:39
(65) теперь автор может смело идти на собеседование с несколькими вариантами)
67 Rousse
 
06.05.18
05:34
Всем участникам большое спасибо за помощь!
68 Fram
 
06.05.18
05:42
(67) Ноу проблем. Ждём теперь тему "дали первую задачу ... Какой то ступор. Прошу помощи."
69 wt
 
06.05.18
08:18
70 Мимохожий Однако
 
06.05.18
08:23
процесс пошёл ))
https://iralebedeva.ru/inform7.html
71 Otark
 
07.05.18
06:09
(67)Я подозреваю, про тебя уже забыли :)
72 g00d
 
07.05.18
10:52
(71) о ком ты?
73 DrShad
 
07.05.18
11:06
(72) про ТС
74 g00d
 
07.05.18
11:27
(73) это было продолжение шутки про забытого тс