Имя: Пароль:
1C
1С v8
Как искать в динамическом списке, если данные строк изменены программно?
,
0 ssalikoff
 
21.05.24
06:13
Здравствуйте!
Есть задача вывести в поле динамического списка конкатенированные значения строк из некой табличной части. Известно, что агрегатная функция СУММА языка запросов не умеет складывать строки. То есть в запросе динамического списка сделать такое не получится. Тогда я делаю это программно, в обработчике события «ПриПолученииДанныхНаСервере».
Я получаю строки табличной части, складываю их как мне надо, и вывожу:
Строки[Ключ].Данные.МоёПоле = КонкатенированнаяСтрока;

Всё работает как надо, за исключением поиска (его нет). Оно и понятно, поиск работает по данным из базы, а я данные меняю уже после их получения из базы.
Но как тогда можно решить мою задачу? Посоветуйте что-нибудь, накидайте идей.
1 SleepyHead
 
гуру
21.05.24
06:14
Ищи по колонкам, из которых сливаешь строку.
2 ssalikoff
 
21.05.24
07:26
(1) нет, так не пойдёт. Я хочу искать по уже объединённому значению.
3 DJ Anthon
 
21.05.24
07:39
(0) У агрегатной функции СУММА другие задачи. Вы пробовали просто сложить ваши строки в запросе динамического списка?
4 ssalikoff
 
21.05.24
07:44
(3) Что за вздор? Причём тут другие задачи? Просто 1С так не умеет. А вот MSSQL или MySQL c GROUP_CONCAT() умеет. Но вопрос не в этом. Я же написал, что в запросе динамического списка я не вижу способа соединить строки при группировке.
Я попросил предложить альтернативные варианты, если они вам известны.
5 Волшебник
 
21.05.24
08:08
(4) Как Вам вообще могло прийти в голову складывать строки с помощью агрегатной функции СУММА??
6 Ненавижу 1С
 
гуру
21.05.24
08:09
(4) вы конкатенацию с суммированием не путайте. Конкатенация, например, не коммутативна и порой важен ее порядок
7 DJ Anthon
 
21.05.24
08:12
(4) моя 1С умеет
8 ssalikoff
 
21.05.24
08:19
(5)(6)(7) Да с чего вы все взяли, что я пытаюсь 1С-ной функцией СУММА конкатенировать строки? Я не пытаюсь это сделать и знаю, как эта функция работает. Я просто для примера её назвал, и выразил сожаление, что набор функций в 1С очень скудный: минимум, максимум да количество. Не то что в других СУБД, где разных функций десятки.
И вообще, вопрос не об этом стоит, а о том, как наиболее просто и красиво можно было бы решить поставленную задачу
9 DJ Anthon
 
21.05.24
08:22
вот вам функция:
+
10 Ненавижу 1С
 
гуру
21.05.24
08:25
(8) "Да с чего вы все взяли, что я пытаюсь 1С-ной функцией СУММА конкатенировать строки?" - потому что с этого ты начал.  И 1 С не СУБД, а прикладное решение, использующее разные СУБД
11 Ненавижу 1С
 
гуру
21.05.24
08:27
(0) варианты:
1. использовать свой поиск
2. использовать таблицу значений
12 ssalikoff
 
21.05.24
08:30
(11) тема варианта 2 не раскрыта
13 Web00001
 
21.05.24
08:34
(4)> Что за вздор? Причём тут другие задачи?
А причем тут сумма? Че горит то так? Эмоционально как-то реагируешь. Я не считаю, что 1С это СУБД. Хотя и использует внутренний формат БД в файловом варианте.

(8)Невозможно искать по тому, чего нет. Или при записи объекта строки которого ты складываешь куда то записывать полученное значение(например в этот самый объект или в регистр рядом).
14 Ненавижу 1С
 
гуру
21.05.24
08:33
(12) запросом выгружаешь данные в таблицу значений, отображаемую на форме. Обновляешь данные по кнопке, при открытии и/или по времени
15 Web00001
 
21.05.24
08:34
(9)Дин поиск будет работать по этому полю?
16 ssalikoff
 
21.05.24
08:35
(14) Понял. То есть отказ от динамического списка. Не вариант.
17 ssalikoff
 
21.05.24
08:38
(13) Надеюсь я никого не оскорбил своей "эмоциональностью". Но ведь никому не нравится, когда отвечают не по существу вопроса, и даже не поняв сам вопрос.
А предложенный вами вариант мне приходил в голову, но он плох по двум причинам: во-первых, это избыточность информации, по сути её дублирование, и, во-вторых, необходимость обеспечивать её согласованность, то есть при изменении строк табличной части переписывать значение реквизита, в котором будет хранится вычисленное конкатенированное значение.
18 Волшебник
 
21.05.24
08:39
(16) Опять Вы какую-то чушь несёте. Есть же отдельная функция для соединения строк в запросах, только она работает начиная с определённого релиза.
21 ssalikoff
 
21.05.24
08:45
(20) Нисколько
(18) Было бы здорово побольше узнать о «отдельная функция для соединения строк в запросах, только она работает начиная с определённого релиза»
22 Web00001
 
21.05.24
08:51
(17)>Но ведь никому не нравится, когда отвечают не по существу вопроса
Специфика этого форума. Часто отвечают не на тот вопрос который задали, а на тот на который знают ответ
23 Ненавижу 1С
 
гуру
21.05.24
08:51
ну и третий вариант - хранить желаемые данные в базе, заполняя их по событиям записи
24 ssalikoff
 
21.05.24
08:53
(23) Да, спасибо. Этот вариант уже рассматривался в (17)
25 d4rkmesa
 
21.05.24
08:59
(0) Если у вас есть необходимость в конкатенации, то значит вы что-то неправильно делаете. Посмотрите как сделано в типовых конфигурациях (ЗУП - сотрудники текстом, ДО - статусы текстом). Как правило, это отдельный регистр сведений, рассчитываемый фоновыми заданиями, запускаемыми по регламенту или событию.
Да, СтрСоединить в запросы пока не завезли, но я бы в любом случае не торопился использовать новые функции, т.к. там много нюансов. Пару лет назад, как начал их использовать, сразу же столкнулся с ошибкой парсинга такого запроса тогдашней платформой. Хотя да, уже огромный плюс само их наличие и возможность иногда их использовать.
26 d4rkmesa
 
21.05.24
09:07
(22) Есть еще кое-что, видимо, отдельные пользователи думают, что форум - это как чат-бот для помощи джуниорам. Потом, когда действительно кому-то что-то нужно, эти пустые темы бесполезны. Ну т.е. хорошим тоном было бы и выложить решение, не важно, сам справился или нет. На infostart в этом плане чуть лучше, там ради "плюсиков" есть мотивация выложить решение (хотя, бывает и что это решение недостаточно оптимально, несмотря на 20 плюсиков).
Как бы то ни было, гуглинг Мисты мне до сих пор иногда помогает, как и ИС.
27 ssalikoff
 
21.05.24
09:24
Что же, судя по ответам, как я и предполагал, нет никакого альтернативного красивого решения. Только вычисление значения заранее и хранение в каком-то реквизите.
Спасибо всем советчикам!
28 MaximSh
 
21.05.24
09:25
(27) Работает поиск
29 MaximSh
 
21.05.24
09:25
(27) пожалуйста
30 MaximSh
 
21.05.24
09:27
ядовитый какой топикстартер
31 Web00001
 
21.05.24
09:28
(17)Не видно всей задачи в данный момент, но избыточность в этом случае имеет под собой основание она увеличивает производительность при выводе и поиске. В такого рода случаях избыточность составляет 0.1% или меньше от объекта.

>необходимость обеспечивать её согласованность
Если есть объект, то он при записи все равно записывается в базу целиком. Тут нет место где можно сэкономить.
32 Zapal
 
21.05.24
09:41
(28) твой ответ неправильный
надо такой чтобы автор оказался умным а не тупым
33 Ненавижу 1С
 
гуру
21.05.24
09:45
(28) у вас конкатенация похоже через запрос сделана, у автора через ПриПолученииДанныхНаСервере
34 MaximSh
 
21.05.24
09:48
(33) так и надо же в динамическом списке.
В теории можно всё, только работать будет медленно. Запрос по ТЧ Товары
35 ssalikoff
 
21.05.24
09:49
(28) А потом пишите, что, мол автор ядовитый.
А по факту, вопрос не понят вообще, и показана ерунда.
Конкатенация строк в группировке нужна, а не сложение двух строк плюсиком.
36 ssalikoff
 
21.05.24
09:50
(34) И в никакой теории 1С так делать не умеет. Человек в (25) верно заметил, что СтрСоединить в запросы пока не завезли
37 Zapal
 
21.05.24
09:50
(33) он бы сделал через запрос, но GROUP_CONCAT() нет же в этой вашей глупой 1С, а ответы типа (9) до него не доходят
38 Волшебник
 
21.05.24
09:52
(36) Используйте СКД, там есть СОЕДИНИТЬСТРОКИ (JOINSTRINGS)
https://1s83.info/koding/konkatenatsiya-strok-v-itogah-skd-1s.html
39 lEvGl
 
гуру
21.05.24
10:10
1с - субд? о как, завернуто
(27) приходите еще
41 ssalikoff
 
21.05.24
10:14
(38) Я думал, что функции СКД можно только в отчётах использовать. А для динамических списков это не сработает. Ведь в настройках динамического списка в конфигураторе мы ничего подобного провернуть не сможем.
42 Волшебник
 
21.05.24
10:18
(41) Сделайте отчёт. Пользователь не заметит разницы. Делов-то...
44 ssalikoff
 
21.05.24
10:20
(42) Спасибо! Я бы так и сделал, если бы поставленная задача позволяла такое решение
45 Волшебник
 
21.05.24
10:21
(44) Вы нас тут не ограничивайте своими условиями задачи. Это мы Вам ставим задачи, а не Вы нам.
46 lEvGl
 
гуру
21.05.24
10:26
(44) вы джун и вам ставят технические задачи? тогда разберитесь с этой до конца, что хочет заказчик
47 GANR
 
21.05.24
10:35
(0) Внешний источник данных с прямым запросом к БД 1С-ки внутри пробовали?
48 Волшебник
 
21.05.24
10:36
(47) Это плохая практика
49 GANR
 
21.05.24
10:47
(48) Итого, какие варианты:

1. Предподготовленные данные.
2. Вычисляемые поля СКД.
3. Внешние источники данных.

Думаю, 1 самый православный. 2 и 3, даже если взлетит, тяжеловато в прокручивающемся списке будет вычислять просто.
50 Волшебник
 
21.05.24
10:50
(49) Ну так может полнотекстовый поиск прикрутить?
51 GANR
 
21.05.24
10:55
(50) Только не это🤦
52 MaximSh
 
21.05.24
11:22
(35) дин. список, конкатенация, агрегатные функции, поиск есть. Что не так то?
53 Волшебник
 
21.05.24
11:31
(52) У Вас неправильная 1С, в которой всё есть и всё работает
54 BDA80
 
21.05.24
11:43
(52) Ему групповая функция нужна в запросе, аналог СоединитьСтроки() в СКД. А у вас просто конкатенация строк
55 ssalikoff
 
21.05.24
11:43
(52) Вам же уже писали, что нет у вас никакой конкатенации строк в группировке. Ваша конкатенация — это сложение двух строк плюсиком, а речь идёт об агрегатной функции, такой, как "СоединитьСтроки" в СКД
56 ssalikoff
 
21.05.24
11:47
(47) Так я делать не буду, но спасибо за идею!
57 MaximSh
 
21.05.24
16:16
(55) для динамического списка считать запросом что-то сложнее чем цена*количество, означает положить сервер.

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    0 КАК ё
ПОМЕСТИТЬ Р0

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    2 * Р1.ё + Р0.ё КАК ё
ПОМЕСТИТЬ Р10
ИЗ
    Р0 КАК Р1,
    Р0 КАК Р0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    4 * Р32.ё + Р10.ё КАК ё
ПОМЕСТИТЬ Р3210
ИЗ
    Р10 КАК Р32,
    Р10 КАК Р10
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    16 * Р7654.ё + Р3210.ё КАК ё
ПОМЕСТИТЬ Р76543210
ИЗ
    Р3210 КАК Р7654,
    Р3210 КАК Р3210
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    8 * Р76543210.ё + 2 * Р10.ё + Р0.ё + 1 КАК ё
ПОМЕСТИТЬ РА9876543210
ИЗ
    Р76543210 КАК Р76543210,
    Р10 КАК Р10,
    Р0 КАК Р0
ГДЕ
    8 * Р76543210.ё + 2 * Р10.ё + Р0.ё < &ШиринаКолонки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Дано.НомерСтроки КАК НомерСтроки,
    РА9876543210.ё КАК ё,
    ВЫБОР ПОДСТРОКА(Дано.а, РА9876543210.ё, 1)
        КОГДА " "
            ТОГДА "_"
        ИНАЧЕ ПОДСТРОКА(Дано.а, РА9876543210.ё, 1)
    КОНЕЦ КАК а,
    Дано.Ссылка КАК Ссылка
ПОМЕСТИТЬ Буквы
ИЗ
    Дано КАК Дано,
    РА9876543210 КАК РА9876543210
ГДЕ
    ПОДСТРОКА(Дано.а, РА9876543210.ё, 1) + "!" <> "!"
;

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

СГРУППИРОВАТЬ ПО
    Буквы.НомерСтроки,
    Буквы.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Буквы.ё + СУММА(ЕСТЬNULL(Длины.СтрДлина, 0)) КАК ё,
    Буквы.а КАК а,
    Буквы.Ссылка КАК Ссылка
ПОМЕСТИТЬ Таб
ИЗ
    Буквы КАК Буквы
        ЛЕВОЕ СОЕДИНЕНИЕ Длины КАК Длины
        ПО Буквы.НомерСтроки > Длины.НомерСтроки

СГРУППИРОВАТЬ ПО
    Буквы.НомерСтроки,
    Буквы.ё,
    Буквы.а,
    Буквы.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(Таб.ё / 2 КАК ЧИСЛО(15, 0)) КАК е,
    Таб.ё КАК ё,
    Таб.а КАК а,
    Таб.Ссылка КАК Ссылка
ПОМЕСТИТЬ Шаг
ИЗ
    Таб КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Таб
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Шаг.е КАК ё,
    МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА Шаг.а
            ИНАЧЕ ""
        КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА ""
            ИНАЧЕ Шаг.а
        КОНЕЦ) КАК а,
    Шаг.Ссылка КАК Ссылка
ПОМЕСТИТЬ Таб2
ИЗ
    Шаг КАК Шаг

СГРУППИРОВАТЬ ПО
    Шаг.е,
    Шаг.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Шаг
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(Таб.ё / 2 КАК ЧИСЛО(15, 0)) КАК е,
    Таб.ё КАК ё,
    Таб.а КАК а,
    Таб.Ссылка КАК Ссылка
ПОМЕСТИТЬ Шаг2
ИЗ
    Таб2 КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Таб2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Шаг.е КАК ё,
    МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА Шаг.а
            ИНАЧЕ ""
        КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА ""
            ИНАЧЕ Шаг.а
        КОНЕЦ) КАК а,
    Шаг.Ссылка КАК Ссылка
ПОМЕСТИТЬ Таб3
ИЗ
    Шаг2 КАК Шаг

СГРУППИРОВАТЬ ПО
    Шаг.е,
    Шаг.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Шаг2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(Таб.ё / 2 КАК ЧИСЛО(15, 0)) КАК е,
    Таб.ё КАК ё,
    Таб.а КАК а,
    Таб.Ссылка КАК Ссылка
ПОМЕСТИТЬ Шаг3
ИЗ
    Таб3 КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Таб3
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Шаг.е КАК ё,
    МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА Шаг.а
            ИНАЧЕ ""
        КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА ""
            ИНАЧЕ Шаг.а
        КОНЕЦ) КАК а,
    Шаг.Ссылка КАК Ссылка
ПОМЕСТИТЬ Таб4
ИЗ
    Шаг3 КАК Шаг

СГРУППИРОВАТЬ ПО
    Шаг.е,
    Шаг.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Шаг3
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(Таб.ё / 2 КАК ЧИСЛО(15, 0)) КАК е,
    Таб.ё КАК ё,
    Таб.а КАК а,
    Таб.Ссылка КАК Ссылка
ПОМЕСТИТЬ Шаг4
ИЗ
    Таб4 КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Таб4
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Шаг.е КАК ё,
    МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА Шаг.а
            ИНАЧЕ ""
        КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА ""
            ИНАЧЕ Шаг.а
        КОНЕЦ) КАК а,
    Шаг.Ссылка КАК Ссылка
ПОМЕСТИТЬ Таб5
ИЗ
    Шаг4 КАК Шаг

СГРУППИРОВАТЬ ПО
    Шаг.е,
    Шаг.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Шаг4
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(Таб.ё / 2 КАК ЧИСЛО(15, 0)) КАК е,
    Таб.ё КАК ё,
    Таб.а КАК а,
    Таб.Ссылка КАК Ссылка
ПОМЕСТИТЬ Шаг5
ИЗ
    Таб5 КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Таб5
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Шаг.е КАК ё,
    МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА Шаг.а
            ИНАЧЕ ""
        КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА ""
            ИНАЧЕ Шаг.а
        КОНЕЦ) КАК а,
    Шаг.Ссылка КАК Ссылка
ПОМЕСТИТЬ Таб6
ИЗ
    Шаг5 КАК Шаг

СГРУППИРОВАТЬ ПО
    Шаг.е,
    Шаг.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Шаг5
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(Таб.ё / 2 КАК ЧИСЛО(15, 0)) КАК е,
    Таб.ё КАК ё,
    Таб.а КАК а,
    Таб.Ссылка КАК Ссылка
ПОМЕСТИТЬ Шаг6
ИЗ
    Таб6 КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Таб6
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Шаг.е КАК ё,
    МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА Шаг.а
            ИНАЧЕ ""
        КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА ""
            ИНАЧЕ Шаг.а
        КОНЕЦ) КАК а,
    Шаг.Ссылка КАК Ссылка
ПОМЕСТИТЬ Таб7
ИЗ
    Шаг6 КАК Шаг

СГРУППИРОВАТЬ ПО
    Шаг.е,
    Шаг.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Шаг6
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(Таб.ё / 2 КАК ЧИСЛО(15, 0)) КАК е,
    Таб.ё КАК ё,
    Таб.а КАК а,
    Таб.Ссылка КАК Ссылка
ПОМЕСТИТЬ Шаг7
ИЗ
    Таб7 КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Таб7
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Шаг.е КАК ё,
    МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА Шаг.а
            ИНАЧЕ ""
        КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА ""
            ИНАЧЕ Шаг.а
        КОНЕЦ) КАК а,
    Шаг.Ссылка КАК Ссылка
ПОМЕСТИТЬ Таб8
ИЗ
    Шаг7 КАК Шаг

СГРУППИРОВАТЬ ПО
    Шаг.е,
    Шаг.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Шаг7
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(Таб.ё / 2 КАК ЧИСЛО(15, 0)) КАК е,
    Таб.ё КАК ё,
    Таб.а КАК а,
    Таб.Ссылка КАК Ссылка
ПОМЕСТИТЬ Шаг8
ИЗ
    Таб8 КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Таб8
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Шаг.е КАК ё,
    МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА Шаг.а
            ИНАЧЕ ""
        КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА ""
            ИНАЧЕ Шаг.а
        КОНЕЦ) КАК а,
    Шаг.Ссылка КАК Ссылка
ПОМЕСТИТЬ Таб9
ИЗ
    Шаг8 КАК Шаг

СГРУППИРОВАТЬ ПО
    Шаг.е,
    Шаг.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Шаг8
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(Таб.ё / 2 КАК ЧИСЛО(15, 0)) КАК е,
    Таб.ё КАК ё,
    Таб.а КАК а,
    Таб.Ссылка КАК Ссылка
ПОМЕСТИТЬ Шаг9
ИЗ
    Таб9 КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Таб9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Шаг.е КАК ё,
    МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА Шаг.а
            ИНАЧЕ ""
        КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА ""
            ИНАЧЕ Шаг.а
        КОНЕЦ) КАК а,
    Шаг.Ссылка КАК Ссылка
ПОМЕСТИТЬ Таб10
ИЗ
    Шаг9 КАК Шаг

СГРУППИРОВАТЬ ПО
    Шаг.е,
    Шаг.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Шаг9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(Таб.ё / 2 КАК ЧИСЛО(15, 0)) КАК е,
    Таб.ё КАК ё,
    Таб.а КАК а,
    Таб.Ссылка КАК Ссылка
ПОМЕСТИТЬ Шаг10
ИЗ
    Таб10 КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Таб10
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Шаг.е КАК ё,
    МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА Шаг.а
            ИНАЧЕ ""
        КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА ""
            ИНАЧЕ Шаг.а
        КОНЕЦ) КАК а,
    Шаг.Ссылка КАК Ссылка
ПОМЕСТИТЬ Таб11
ИЗ
    Шаг10 КАК Шаг

СГРУППИРОВАТЬ ПО
    Шаг.е,
    Шаг.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Шаг10
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(Таб.ё / 2 КАК ЧИСЛО(15, 0)) КАК е,
    Таб.ё КАК ё,
    Таб.а КАК а,
    Таб.Ссылка КАК Ссылка
ПОМЕСТИТЬ Шаг11
ИЗ
    Таб11 КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Таб11
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Шаг.е КАК ё,
    МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА Шаг.а
            ИНАЧЕ ""
        КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг.е * 2 - Шаг.ё
            КОГДА 1
                ТОГДА ""
            ИНАЧЕ Шаг.а
        КОНЕЦ) КАК а,
    Шаг.Ссылка КАК Ссылка
ПОМЕСТИТЬ Таб12
ИЗ
    Шаг11 КАК Шаг

СГРУППИРОВАТЬ ПО
    Шаг.е,
    Шаг.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ Шаг11
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(Таб.а КАК СТРОКА(600)) КАК а,
    Дано.Сумма КАК Сумма,
    Дано.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
    Дано КАК Дано
        ЛЕВОЕ СОЕДИНЕНИЕ Таб12 КАК Таб
        ПО Дано.Ссылка = Таб.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВременнаяТаблица.а КАК СуммаСтрок,
    СУММА(ВременнаяТаблица.Сумма) КАК Сумма,
    ВременнаяТаблица.Ссылка КАК Ссылка
ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица

СГРУППИРОВАТЬ ПО
    ВременнаяТаблица.Ссылка,
    ВременнаяТаблица.а
58 GANR
 
22.05.24
11:29
(56) Как Вы в итоге решили выкрутиться?