Имя: Пароль:
1C
1С v8
Можно ли это сделать запросом (продолжение)?
0 happysan
 
20.10.23
19:40
Доброго времени суток!
В продолжение темы Можно ли это сделать запросом?: задача усложняется тем, что нужно добавить колонку "Номер заказа", которая будет браться из "Документ.Тарификация.Номер" (пример формата "М-567897") и к этой колонке по каждой строке с однотипной номенклатурой нужно добавлять постфикс "-1", "-2"... в зависимости от количества товара, которое было изначально в первоначальной таблице до расслоения строк по количеству номенклатуры. Должно получиться, в итоге, так:
Номер заказа      Номенклатура      Количество
М-567897-1          Помидор              1
М-567897-2          Помидор              1
М-567897-3          Помидор              1
...............
М-567897-7          Помидор              1

М-567897-1          Огурец               1
М-567897-1          Огурец               1

Запрос используется для доработки такой же как и из предыдущей темы:

ВЫБРАТЬ
    0 КАК Числа
ПОМЕСТИТЬ РядЧисел

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

ВЫБРАТЬ
    1

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

ВЫБРАТЬ
    2

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

ВЫБРАТЬ
    3

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

ВЫБРАТЬ
    4

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

ВЫБРАТЬ
    5

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

ВЫБРАТЬ
    6

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

ВЫБРАТЬ
    7

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

ВЫБРАТЬ
    8

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

ВЫБРАТЬ
    9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РядЧисел2.Числа * 100 + РядЧисел1.Числа * 10 + РядЧисел.Числа + 1 КАК Числа
ПОМЕСТИТЬ ВТ_РядЧисел
ИЗ
    РядЧисел КАК РядЧисел,
    РядЧисел КАК РядЧисел1,
    РядЧисел КАК РядЧисел2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПеремещениеТовары.Номенклатура,
    1 КАК Количество
ИЗ
    ВТ_РядЧисел КАК ВТ_РядЧисел
        СОЕДИНЕНИЕ Документ.ТОРГ_Перемещение.Товары КАК ТОРГ_ПеремещениеТовары
        ПО ТОРГ_ПеремещениеТовары.Количество => ВТ_РядЧисел.Числа
ГДЕ
    ТОРГ_ПеремещениеТовары.Ссылка = &Ссылка
1 happysan
 
20.10.23
19:41
*Поправка:

М-567897-1          Огурец               1
М-567897-2          Огурец               1
2 happysan
 
20.10.23
19:43
Как-то может прикрутить можно АВТОНОМЕРЗАПИСИ()?
3 ejikbeznojek
 
20.10.23
19:52
А номер строки нельзя прилепить вместо этого к номеру заказа?
4 ejikbeznojek
 
20.10.23
19:53
(3) А вижу, нельзя. Там же количество тоже раскладываться должно
5 happysan
 
20.10.23
19:54
(3) Номер строки же из ТЧ одного документа. Получиться сквозная нумерация для разных номенклатур.
6 Смотрящий
 
20.10.23
19:56
(2) Можно
7 H A D G E H O G s
 
20.10.23
20:00
Такие вещи надо делать кодом
8 Смотрящий
 
20.10.23
20:04
(7) При сколь-нибудь большой выборке код не канает
9 happysan
 
20.10.23
21:20
(6) Просветишь каким образом? Понятно, что нужно будет соединение с "Документ.Тарификация.Номер"...
10 happysan
 
20.10.23
21:24
(7) Кодом есть понимание как делать, а вот в запросе пока в размышлениях...
11 happysan
 
21.10.23
02:30
Добавил в выборку поле нужное "ВТ_РядЧисел.Числа КАК Постфикс", но затем возникают общеизвестные затруднения с преобразованием в строку числа, чтобы произвести конкатенацию со строковым полем номера документа. Придётся добивать в СКД.
12 Гена
 
гуру
21.10.23
09:22
Ахинея.
ТС стопудово не так понял клиента и теперь сооружает полную чушь, за которую заказчик закидает его помидорами с постфиксами 2, 3 и 6
13 Гена
 
гуру
21.10.23
09:38
Приведите здесь первоначально поставленную клиентом задачу без своих размышлений для Родена.
Надеюсь, это не общепит?
14 Valdis2007
 
21.10.23
09:43
(0) используй - "пораждающий запрос"
15 happysan
 
21.10.23
14:13
(12), (13) - не по теме.
16 happysan
 
21.10.23
14:15
(14) Что ты имеешь в виду? Есть понятие вложенный запрос, но в крайнем случае "порОждающий", не "порАждающий", хотя нет такого понятия в запросах)
17 АгентБезопасной Нацио
 
21.10.23
14:31
(16) Зелен ты еще...
18 happysan
 
21.10.23
17:53
(17) Кроме как переходить на личности с некорректными сообщениями, есть другие идеи?
19 happysan
 
21.10.23
17:57
Если вы об этом https://infostart.ru/1c/tools/90367/, то это понятие неофициальное.
20 happysan
 
21.10.23
17:59
И об этом я давно читал, но громоздко и не совсем то, что надо.
21 Конструктор1С
 
21.10.23
18:27
(0) ЗАЧЕМ это делать запросом? Получается какая-то нечитаемая хуита
22 Гена
 
гуру
21.10.23
18:53
(20) Приведите, пожалуйста, первоначально поставленную клиентом задачу, для которой и понадобился данный код.
23 happysan
 
21.10.23
20:28
(21)Если не получится, то сделаем в СКД.
24 happysan
 
21.10.23
20:31
(22) Геннадий, там долгая история, уже и бизнес-аналитик собирал информацию, там какие-то договорённости с поставщиками и т.д. Попросили сделать внешний отчёт. Не хотелось бы сейчас акцентироваться на здравомыслии заказчика, а пусть останется лишь спортивный интерес как для тестовой задачки)
25 Смотрящий
 
22.10.23
07:30
(9) Табличку брал вида
Номер(строка)     Номенклатура(строка)    Количество(Число)
М-567897        Помидор            1
М-567897        Помидор            1
М-567897        Помидор            1
М-567897        Помидор            1
М-567897        Огурец            1
М-567897        Огурец            1
М-567897        Огурец            1
М-567898        Киаи            1
М-567898        Киаи            1
М-567898        Помидор            1
М-567898        Помидор            1

ПОехали ...

ВЫБРАТЬ
    0 КАК Числа,
    "0" КАК Строки
ПОМЕСТИТЬ РядЧисел

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РядЧисел2.Числа * 100 + РядЧисел1.Числа * 10 + РядЧисел.Числа КАК Числа,
    ВЫБОР
        КОГДА РядЧисел2.Числа * 100 + РядЧисел1.Числа * 10 + РядЧисел.Числа < 100
        ТОГДА ""
        ИНАЧЕ РядЧисел2.Строки
    КОНЕЦ +
    ВЫБОР
        КОГДА РядЧисел2.Числа * 100 + РядЧисел1.Числа * 10 + РядЧисел.Числа < 10
        ТОГДА ""
        ИНАЧЕ РядЧисел1.Строки
    КОНЕЦ + РядЧисел.Строки КаК Строки
ПОМЕСТИТЬ ВТ_РядЧисел
ИЗ
    РядЧисел КАК РядЧисел,
    РядЧисел КАК РядЧисел1,
    РядЧисел КАК РядЧисел2
ГДЕ
    НЕ (РядЧисел2.Числа * 100 + РядЧисел1.Числа * 10 + РядЧисел.Числа) = 0
;

ВЫБРАТЬ
    ТЗДанные.Номер,
    ТЗДанные.Номенклатура,
    ТЗДанные.Количество,
    АВТОНОМЕРЗАПИСИ() КАК Индекс
ПОМЕСТИТЬ втДанные
ИЗ
    &ТЗДанные КАК ТЗДанные
;

ВЫБРАТЬ
    втДанные.Номер,
    МИНИМУМ(втДанные.Индекс)
ПОМЕСТИТЬ втДанныеМинимум
ИЗ
    втДанные КАК втДанные
СГРУППИРОВАТЬ ПО
    втДанные.Номер
;

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

ВЫБРАТЬ
    втТбличнаяЧасть.Номер + "-" + ВТ_РядЧисел.Строки,
    втТбличнаяЧасть.Номенклатура,
    втТбличнаяЧасть.Количество
ИЗ
    втТбличнаяЧасть КАК втТбличнаяЧасть
    
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_РядЧисел КАК ВТ_РядЧисел
    ПО втТбличнаяЧасть.НомерСтроки = ВТ_РядЧисел.Числа
УПОРЯДОЧИТЬ ПО
    втТбличнаяЧасть.Номер + "-" + ВТ_РядЧисел.Строки
26 majkk
 
22.10.23
07:53
(24) Отчет - это не обязательно запрос
27 Конструктор1С
 
22.10.23
10:21
(23) ради чего? Чтобы у пришедшего после тебя глаза кровоточили? В коде твоя поделкаполучилась бы простой и понятной. В запросе получается какой-то невнятный зашквар. Через год ты и сам уже перестанешь понимать, что пытался изобразить этим запросом-месивом
28 happysan
 
22.10.23
12:41
(26) Об этом я уже выше сообщал)
(27) Всё относительно...
(25) Благодарю за пример,но изначальная таблица у тебя уже расслоена по количеству на несколько одинаковых строк по количеству 1 в каждой, а в моем примере это не совсем так. И мне нет смысла использовать таблицу значений в СКД, мне проще сделать это в вычисляемых полях-я уже предполагал твой вариант,но он хуже, чем вычисляемые поля в СКД.
29 Смотрящий
 
22.10.23
16:55
(28) Это не пример а рабочий вариант твоей задачи из (0). Осталось вместо ТЗ подсунуть запрос/временную таблицу с расслоением
30 happysan
 
22.10.23
19:32
(29) Хорошо, спасибо, на днях протестирую)
31 Zapal
 
23.10.23
09:46
я думаю в этом случае "помощь клуба" скорее вредит
товарищ вместо того чтобы подумать и сделать нормальную архитектуру данных начитает этот изврат с запросами

этот расчёт по-любому должен вестись в какой-то документе и его результаты фиксироваться и сохраняться, а не генерироваться заново всякий раз при запуске отчёта
32 АгентБезопасной Нацио
 
23.10.23
09:56
(31) это вполне может быть печатная форма - какой-нибудь "сборочный лист" или типа того.
33 happysan
 
23.10.23
12:48
Товарищи, всем спасибо за участие, обдумаю варианты.
34 happysan
 
23.10.23
12:49
Мне тоже эти "костыли" не по нраву)
35 happysan
 
25.10.23
15:50
(25) Вот засада: АВТОНОМЕРЗАПИСИ() В СКД выдаёт ошибку на этапе открытия конструктора запросов, платформа старая или совместимость отсутствует. Как аналогичное организовать в СКД?
36 АгентБезопасной Нацио
 
25.10.23
17:13
(35) ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Ссылка КАК Реализация,
    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
    РеализацияТоваровУслугТовары.Количество КАК Количество
ПОМЕСТИТЬ ВТ_Реализации
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка В(&Ссылки)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Количество(Различные ВТ_РЕализации2.Номенклатура) КАК Индекс,
    ВТ_РЕализации.Реализация КАК Реализация,
    ВТ_РЕализации.Номенклатура КАК Номенклатура
ИЗ
    ВТ_РЕализации КАК ВТ_Реализации
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Реализации КАК ВТ_Реализации1
        ПО ВТ_РЕализации.Реализация >= ВТ_РЕализации1.Реализация
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Реализации КАК ВТ_Реализации2
        ПО
         ВТ_Реализации.Номенклатура >= ВТ_Реализации2.Номенклатура
СГРУППИРОВАТЬ ПО
    ВТ_РЕализации.Реализация,
    ВТ_РЕализации.Номенклатура
37 happysan
 
25.10.23
17:43
Заказчик поменял условие. Должна получиться сквозная нумерация у разных номенклатур в рамках одного документа:
Должно получиться, в итоге, так:
Номер заказа      Номенклатура      Количество
М-567897-1          Помидор              1
М-567897-2          Помидор              1
М-567897-3          Помидор              1
...............
М-567897-7          Помидор              1

М-567897-8          Огурец               1
М-567897-9          Огурец               1
38 happysan
 
25.10.23
17:46
Лучше, наверное, использовать НомерСтроки.
39 happysan
 
25.10.23
19:18
Хотя нет...
40 happysan
 
25.10.23
21:48
(36) Спасибо)
41 happysan
 
26.10.23
11:59
(36) Кстати, не даёт нужный результат.