![]() |
![]() |
![]() |
|
Вопрос по добавлению нулевой строки после запроса Волшебник, 2S, Timon1405, Доминошник, RomanYS, Tatitutu, Zamestas, p-soft, Mankubus, _Batoo, vis, Гена, H A D G E H O G s, X Leshiy, Шурик71, Franchiser, ejikbeznojek, vicof, МаленькийВопросик, PR, Чеширский, Aleksey, MWWRuza, ЕRPe, Мультук, Bigbro, igouranga, Voronve, ГдеСобакаЗарыта, FormatC, GreenLab, formista2000, b_ru, A_G, AAA, Sneer
| ☑ | ||
---|---|---|---|---|
0
Гена
гуру
26.08.25
✎
19:57
|
Коллеги, есть запрос, вот его текст:
"ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(СведенияОДоходахСтраховыеВзносы.Период, МЕСЯЦ) КАК Месяц, | СУММА(СведенияОДоходахСтраховыеВзносы.Сумма - СведенияОДоходахСтраховыеВзносы.Скидка) КАК Доход |ИЗ | РегистрНакопления.СведенияОДоходахСтраховыеВзносы КАК СведенияОДоходахСтраховыеВзносы |ГДЕ | СведенияОДоходахСтраховыеВзносы.Сотрудник = &Сотрудник | И СведенияОДоходахСтраховыеВзносы.Период МЕЖДУ &НачалоИнтервала И &КонецИнтервала | |СГРУППИРОВАТЬ ПО | НАЧАЛОПЕРИОДА(СведенияОДоходахСтраховыеВзносы.Период, МЕСЯЦ)"; Дело в том, что есть месяцы для которых в регистре нет записи. Как мне вывести ВСЕ месяцы? Если записи регистра нет, то ноль для ДОХОД. Совал ЕстьNULL в разные места - бестолку ) Или это невозможно? И когда засуну в таблицу РезультатЗапроса - то только там как-то анализировать пропуск месяца и добавлять строку с нулём дохода? |
|||
1
Voronve
26.08.25
✎
19:52
|
(0) Выстимо как. Построить таблицу месяцев и к ней левым соединением твой запрос пришпандорить.
Месяц будет даже там где нет записи |
|||
2
PR
26.08.25
✎
19:55
|
Там вроде как дополнение в тексте запроса можно же сделать
|
|||
3
Гена
гуру
26.08.25
✎
19:55
|
(1) Вот продолжение:
Запрос.УстановитьПараметр("КонецИнтервала", КонецИнтервала);
Запрос.УстановитьПараметр("НачалоИнтервала", НачалоИнтервала); Запрос.УстановитьПараметр("Сотрудник", Отчет.Сотрудник); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Отчет.ТаблицаДоходов.Очистить(); Для Каждого Строка Из РезультатЗапроса Цикл НоваяСтрока = Отчет.ТаблицаДоходов.Добавить(); НоваяСтрока.Месяц = Строка.Месяц; НоваяСтрока.Доход = Строка.Доход; КонецЦикла; Где тут левосоединить и как? |
|||
4
PR
26.08.25
✎
19:56
|
И не надо делать ветки "Ветка для всех дилетантских вопросов"
Одна ветка — один вопрос |
|||
5
Маленький Вопросик
26.08.25
✎
19:56
|
(0) сделай таблицу месяцев и соедини либо левым либо полным
|
|||
6
Гена
гуру
26.08.25
✎
19:56
|
(4) Ок
|
|||
7
Маленький Вопросик
26.08.25
✎
19:57
|
(3) так тоже можно
|
|||
8
Bigbro
26.08.25
✎
19:58
|
перед где
правое соединение месяцы по месяцы.месяц = СведенияОДоходахСтраховыеВзносы.месяц ну и месяцы туда засунуть все. |
|||
9
Гена
гуру
26.08.25
✎
19:59
|
(7) А дальше? Как нулевой доход добавить для отсутствующего в РезультатеЗапроса месяца?
|
|||
10
Гена
гуру
26.08.25
✎
20:00
|
Мне бы текст... я бы сразу и проверил. Не хочу залезать в основы работы с левыми и правыми соединениями. Мерси.
|
|||
11
Маленький Вопросик
26.08.25
✎
20:01
|
https://infostart.ru/1c/reports/1074905/ - моя древнейшая обработка по этому вопросу
|
|||
12
Voronve
26.08.25
✎
20:06
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаМесяцы.Месяц КАК Месяц |ПОМЕСТИТЬ втМесяцы |ИЗ | &ТаблицаМесяцы КАК ТаблицаМесяцы |; | |ВЫБРАТЬ РАЗРЕШЕННЫЕ | втМесяцы.Месяц КАК Месяц, | СУММА(СведенияОДоходахСтраховыеВзносы.Сумма - СведенияОДоходахСтраховыеВзносы.Скидка) КАК Доход |ИЗ | втМесяцы КАК втМесяцы | | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СведенияОДоходахСтраховыеВзносы КАК СведенияОДоходахСтраховыеВзносы | ПО втМесяцы.Месяц = НАЧАЛОПЕРИОДА(СведенияОДоходахСтраховыеВзносы.Период, МЕСЯЦ) |ГДЕ | СведенияОДоходахСтраховыеВзносы.Сотрудник = &Сотрудник | И СведенияОДоходахСтраховыеВзносы.Период МЕЖДУ &НачалоИнтервала И &КонецИнтервала | |СГРУППИРОВАТЬ ПО | втМесяцы.Месяц .... Запрос.УстановитьПараметр("ТаблицаМесяцы ", ТаблицаМесяцы); ТаблицаМесяцы - тз с месяцами |
|||
13
Маленький Вопросик
26.08.25
✎
20:05
|
(12) а че мудришь с менеджером.. собрать запросом месяцы не катит?
и зачем разрешенные? че умничаешь))) |
|||
14
Маленький Вопросик
26.08.25
✎
20:07
|
(12) тогда пиши
СведенияОДоходахСтраховыеВзносы.Сотрудник В &Сотрудник и обыграй условие в запросе, если не выбран сотрудник |
|||
15
Voronve
26.08.25
✎
20:07
|
(13) попроще пока, с входным параметром
умный - вот и умничаю )) |
|||
16
Voronve
26.08.25
✎
20:07
|
(14) Пусть сам махается с этим
|
|||
17
Гена
гуру
26.08.25
✎
20:15
|
Ничего не понял. Ладно. Придётся ждать до завтра программиста )
Я думал - мне текст дадут и я его сразу проверю ) Есть одна идея, интересная... |
|||
18
Timon1405
26.08.25
✎
20:21
|
"ВЫБРАТЬ
| ВсеДаты.Месяц КАК Месяц, | ЕСТЬNULL(СУММА(СведенияОДоходахСтраховыеВзносы.Сумма - СведенияОДоходахСтраховыеВзносы.Скидка), 0) КАК Доход |ИЗ | (ВЫБРАТЬ | НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&НачалоИнтервала, МЕСЯЦ, aa.a * 1000 + bb.a * 100 + cc.a * 10 + dd.a), МЕСЯЦ) КАК Месяц | ИЗ | (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa | СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb ПО ИСТИНА | СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК cc ПО ИСТИНА | СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК dd ПО ИСТИНА | ГДЕ | ДОБАВИТЬКДАТЕ(&НачалоИнтервала, МЕСЯЦ, aa.a * 1000 + bb.a * 100 + cc.a * 10 + dd.a) <= &КонецИнтервала | ) КАК ВсеДаты |ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СведенияОДоходахСтраховыеВзносы КАК СведенияОДоходахСтраховыеВзносы |ПО ВсеДаты.Месяц = НАЧАЛОПЕРИОДА(СведенияОДоходахСтраховыеВзносы.Период, МЕСЯЦ) | И СведенияОДоходахСтраховыеВзносы.Сотрудник = &Сотрудник | |СГРУППИРОВАТЬ ПО | ВсеДаты.Месяц | |УПОРЯДОЧИТЬ ПО | ВсеДаты.Месяц" |
|||
19
Маленький Вопросик
26.08.25
✎
20:19
|
(17) не дай бог с тобой работать...
|
|||
20
Гена
гуру
26.08.25
✎
20:19
|
Похоже проще всего в усечённую таблицу добавить отсутствующие месяцы как ТаблицаДоходов.Добавить
|
|||
21
Волшебник
26.08.25
✎
20:22
|
|
|||
22
Гена
гуру
26.08.25
✎
20:22
|
(19) Спасибо, добрый человек )
|
|||
23
Voronve
26.08.25
✎
20:22
|
(18) Жесть. У тебя подзапрос на 9999 строк выполнится такое количество раз сколько строк будет в соединении.
|
|||
24
Волшебник
26.08.25
✎
20:23
|
(22) Геннадий, сделайте временную таблицу из ваших ВЫБРАТЬ 0...9
|
|||
25
Волшебник
26.08.25
✎
20:24
|
ВЫБРАТЬ 0 ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ... ВЫБРАТЬ 9 ПОМЕСТИТЬ Цифры; далее следующий запрос |
|||
26
Гена
гуру
26.08.25
✎
20:25
|
(24) Это надо изучать основы ВТ - не хочу забивать голову )
|
|||
27
Волшебник
26.08.25
✎
20:26
|
(26) Там две строки кода. У Вас получится!
|
|||
28
Гена
гуру
26.08.25
✎
20:27
|
(27) И так видно - что в Цифры ляжет )
|
|||
29
Волшебник
26.08.25
✎
20:28
|
(28) Гена, за такой запрос Вас могут избить ногами.
|
|||
30
Гена
гуру
26.08.25
✎
20:28
|
(29) Вот я и не пишу )
|
|||
31
Timon1405
26.08.25
✎
20:28
|
(21) изначальный запрос про таблицу дат встроен в конструктор запросов ИР. там и другие полезные вещи есть
|
|||
32
Волшебник
26.08.25
✎
20:32
|
(30) Вы должны пытаться сделать хорошо. Я понимаю, что Вы отлично кликаете и разбираетесь во внутренней архитектуре чужого решения. Но теперь Вы сами себе поставили задачу выше, опубликовали первое расширение на Инфостарте. Вы явно переходите на уровень ВЫШЕ с точки зрения СЕБЯ, но с точки зрения НАС, Вы переходите на уровень НИЖЕ, на уровень запросов. И тут немного другие правила. Нужен сухой код, без повторений.
|
|||
33
Гена
гуру
26.08.25
✎
20:36
|
(32) Проще всего, похоже, взять номера месяцев от 1 до 12 (не индек строки, а именно что НомерМесяца (в году) и какого нет в таблице - просто добавить. В конце отсортировать.
Нет?
|
|||
34
Маленький Вопросик
26.08.25
✎
20:43
|
|ВЫБРАТЬ | ДАТАВРЕМЯ(2025,1,1) КАК Месяцы | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | ДАТАВРЕМЯ(2025,2,1) | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | ДАТАВРЕМЯ(2025,3,1) (31) ты просто жесть.... "полезные" вещи))) |
|||
35
Волшебник
26.08.25
✎
20:44
|
(33) Не путайте функции встроенного языка 1С и функции языка запросов 1С. Это два разных языка.
А ещё есть язык выражений СКД. Это третий язык |
|||
36
Гена
гуру
26.08.25
✎
20:47
|
(35) Да я не путаю. Раз в запросах добавлять строку сложно, то можно пойти и на вариант добавления строки в готовую таблицу. Она всегда 12 мес и их номера месяца для таблицы уникальны.
|
|||
37
Timon1405
26.08.25
✎
20:46
|
(34) браво, а сделаете теперь также с параметрами с [датаНачала] по [датаОкончания]?
|
|||
38
Маленький Вопросик
26.08.25
✎
20:47
|
(37) я это сделал уже все давным-давно в (11)
|
|||
39
Волшебник
26.08.25
✎
20:51
|
Программист 1С знает примерно 4-5 языков, которые все применяются:
- встроенный язык (иногда делится на контексты: сервер/клиент) - язык запросов - язык форматной строки - язык ограничений доступа |
|||
40
Гена
гуру
26.08.25
✎
20:56
|
Кстати, если кто не понял - леплю калькулятор расчёта пособия по безработице как нас видит биржа труда, по их данным.
Если кто собирается грохнуть Plane сервис, то всегда может выбрать себя, дату и глянуть сумму ) На всякий случай ))) |
|||
41
ЕRPe
26.08.25
✎
21:10
|
(3) По пацански колхозному без этих ваших мудренных запросов
Отчет.ТаблицаДоходов.Очистить(); ТекМесяц = НачалоМесяца(НачалоИнтервала); Пока ТекМесяц <= НачалоМесяца(КонецИнтервала) Цикл НоваяСтрока = Отчет.ТаблицаДоходов.Добавить(); НоваяСтрока.Месяц = ТекМесяц; НоваяСтрока.Доход = 0; ТекМесяц = КонецМесяца(ТекМесяц) + 1; КонецЦикла; Для Каждого Строка Из РезультатЗапроса Цикл НоваяСтрока = Отчет.ТаблицаДоходов.Добавить(); НоваяСтрока.Месяц = Строка.Месяц; НоваяСтрока.Доход = Строка.Доход; КонецЦикла; |
|||
42
Timon1405
26.08.25
✎
21:22
|
(38) в этом и ценность форума, узнать разные подходы к решению задачи. а в ссылке на не бесплатную обработку ценности, увы, мало, хотя Вы, конечно, думаете иначе.
|
|||
43
Гена
гуру
26.08.25
✎
21:23
|
(41) Хорошая идея. Получится, правда, для доходных месяцев две строки: с нулём и доходом... а в бездоходных месяцах нужная одна строка.
Потом снова прогнать третий цикл и как-то сплюсовать одномесячные строки? |
|||
44
Гена
гуру
26.08.25
✎
21:25
|
Может всё-таки как-то воспользоваться уникальным номером месяца в году?
|
|||
45
Волшебник
26.08.25
✎
21:39
|
(44) Гена, Вы недооцениваете себя
Вам эти языки как пальцем обо асфальт. Просто выражайте свою мысль на другом языке. Ведь главное это мысль! |
|||
46
X Leshiy
26.08.25
✎
21:54
|
(0) Запрос в цикле уже предлагали?)
|
|||
47
Гена
гуру
26.08.25
✎
21:55
|
(45) А... да, спасибо. Забыл, что я задачу расписал в другой ветке.
Заново. Есть 12-месячный интервал. Помесячно собрали запросом Результат как Месяц ... Доход. Из-за того, что в отдельных месяцах не было записей (и, понятно, дохода) мы имеем меньшее количество месяцев не подряд: Август 2024 ... 1564.12 Сентябрь 2024 ... 1255.00 Январь 2025 ... 5854.56 Апрель 2025 ... 45478.47 Нам надо теперь получить таблицу в нормальном 12-месячном виде: Июль 2024 ... 0 Август 2024 ... 1564.12 Сентябрь 2024 ... 1255.00 Октябрь 2024 ... 0 Ноябрь 2024 ... 0 Декабрь 2024 ... 0 Январь 2025 ... 5854.56 Февраль 2025 ... 0 Март 2025 ... 0 Апрель 2025 ... 45478.47 Май 2025 ... 0 Июнь 2025 ... 0 |
|||
48
Гена
гуру
26.08.25
✎
21:56
|
Дальше я сам разберусь с треблами, даблами и уно.
|
|||
49
Гена
гуру
26.08.25
✎
21:58
|
Может какой-то цикл по номеру месяца от 1 до 12 на проверку НомерМесяца(Месяц) и добавление при отсутствии?
|
|||
50
Timon1405
26.08.25
✎
21:59
|
(43) ТаблицаДоходов.Свернуть("Месяц","Доход");
ТаблицаДоходов.Сортировать("Месяц"); в конце (41) |
|||
51
Гена
гуру
26.08.25
✎
21:59
|
Просто, создавая ветку, я думал, что есть какой оператор для запроса, чтобы сразу 0 выводил )
|
|||
52
Timon1405
26.08.25
✎
22:02
|
(51) вспомнил, есть такое https://its.1c.ru/db/metod8dev/content/2660/hdoc
|
|||
53
Волшебник
26.08.25
✎
22:21
|
(48) по-другому и быть не может.
|
|||
54
2S
26.08.25
✎
22:53
|
Геннадий, Вам это нужно?
https://fastcode.im/Templates/6756/sozdat-vremennuyu-tabliczu-periodov-s-zadannoj-periodichnostyu Как соберете вт периодов, затем соедините левым соединением с данными |
|||
55
RomanYS
26.08.25
✎
23:26
|
Поймали программисты консультанта на своей территории и давай издеваться))
(0) В ЗУПе должно работать, но там нет измерения Сотрудник "ВЫБРАТЬ | РС.Месяц КАК Месяц, | ЕСТЬNULL(РН.СуммаОборот - РН.СкидкаОборот, 0) КАК Сумма |ИЗ | РегистрСведений.ДанныеПроизводственногоКалендаряПомесячно КАК РС | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СведенияОДоходахСтраховыеВзносы.Обороты(&Начало, &Конец, Месяц, ФизическоеЛицо = &ФизическоеЛицо) КАК РН | ПО (РС.Месяц = РН.Период) |ГДЕ | РС.Месяц МЕЖДУ НАЧАЛОПЕРИОДА(&Начало, МЕСЯЦ) И &Конец" |
|||
56
Волшебник
26.08.25
✎
23:30
|
(55) Когда делаете запросы в ЗУП к мифическим таблицам, указывайте их структуру
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |