![]() |
![]() |
|
Вопрос по добавлению нулевой строки после запроса | ☑ | ||
---|---|---|---|---|
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) Когда делаете запросы в ЗУП к мифическим таблицам, указывайте их структуру
|
|||
57
Гена
гуру
27.08.25
✎
07:09
|
Ну что, кто ещё не потроллил меня? )
https://www.youtube.com/watch?v=RFM_rJBq3VU Ладно, я не обидчивый, сам люблю поржать ))) |
|||
58
paramedic
27.08.25
✎
10:04
|
(43) Можно просто свернуть ТЗ
|
|||
59
DiMel_77
27.08.25
✎
10:22
|
(0) Вы же в ЗУП работаете и там такое легко делается:
Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(Запрос.МенеджерВременныхТаблиц, НачалоИнтервала, КонецИнтервала, "МЕСЯЦ"); Запрос.Текст = ВЫБРАТЬ Периоды.Период КАК Месяц, СУММА(Выбор КОГДА СведенияОДоходахСтраховыеВзносы.Период ЕСТЬ NULL ТОГДА 0 ИНАЧЕ СведенияОДоходахСтраховыеВзносы.Сумма - СведенияОДоходахСтраховыеВзносы.Скидка КОНЕЦ) КАК Доход ИЗ ВТПериоды КАК Периоды ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СведенияОДоходахСтраховыеВзносы КАК СведенияОДоходахСтраховыеВзносы ПО НАЧАЛОПЕРИОДА(СведенияОДоходахСтраховыеВзносы.Период, МЕСЯЦ) = Периоды.Период ГДЕ СведенияОДоходахСтраховыеВзносы.Сотрудник = &Сотрудник И СведенияОДоходахСтраховыеВзносы.Период МЕЖДУ &НачалоИнтервала И &КонецИнтервала СГРУППИРОВАТЬ ПО Периоды.Период Писал руками (поэтому могут быть ошибки), но смысл ясен. |
|||
60
Гена
гуру
27.08.25
✎
10:51
|
Спасибо всем.
Пришёл программист и со скоростью частоты щёлка по клавишам сразу набрал: // 3. Создаём пустую таблицу доходов на 12 месяцев (с нулями)
Отчет.ТаблицаДоходов.Очистить(); Для Месяц = 0 По 11 Цикл НоваяСтрока = Отчет.ТаблицаДоходов.Добавить(); ДатаМесяца = НачалоМесяца(ДобавитьМесяц(НачалоИнтервала, Месяц)); НоваяСтрока.Месяц = ДатаМесяца; НоваяСтрока.Доход = 0; // пока нули КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НАЧАЛОПЕРИОДА(СведенияОДоходахСтраховыеВзносы.Период, МЕСЯЦ) КАК Месяц, | СУММА(СведенияОДоходахСтраховыеВзносы.Сумма - СведенияОДоходахСтраховыеВзносы.Скидка) КАК Доход |ИЗ | РегистрНакопления.СведенияОДоходахСтраховыеВзносы КАК СведенияОДоходахСтраховыеВзносы |ГДЕ | СведенияОДоходахСтраховыеВзносы.Сотрудник.ФизическоеЛицо = &ФизЛицо | И СведенияОДоходахСтраховыеВзносы.Период МЕЖДУ &НачалоИнтервала И &КонецИнтервала | |СГРУППИРОВАТЬ ПО | НАЧАЛОПЕРИОДА(СведенияОДоходахСтраховыеВзносы.Период, МЕСЯЦ)"; Запрос.УстановитьПараметр("КонецИнтервала", КонецИнтервала); Запрос.УстановитьПараметр("НачалоИнтервала", НачалоИнтервала); Запрос.УстановитьПараметр("ФизЛицо", Отчет.Сотрудник); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Для Каждого СтрокаДоходов Из РезультатЗапроса Цикл Для Каждого СтрокаТаблицы Из Отчет.ТаблицаДоходов Цикл Если СтрокаТаблицы.Месяц = СтрокаДоходов.Месяц Тогда СтрокаТаблицы.Доход = СтрокаДоходов.Доход; Прервать; // идём к следующей строке результата КонецЕсли; КонецЦикла; КонецЦикла; Отчет.ТаблицаДоходов.Сортировать("Месяц"); Проверил. Работает. |
|||
61
Мультук
гуру
27.08.25
✎
11:31
|
(60)
Гена, может в отпуск ? Я серьезно. 1) Читаем (41) И (50) 2) В твоем коде гвоздиками прибито, что f(НачалоИнтервала, КонецИнтервала) = {Всегда 12 месяцев, P.S. Исправил про "январь первый" |
|||
62
Гена
гуру
27.08.25
✎
11:29
|
(61) Нет, всё в шоколаде. Пруф:
|
|||
63
Михаил Козлов
27.08.25
✎
11:30
|
(60) Плохое решение: не рассчитано на произвольный интервал.
|
|||
64
Волшебник
27.08.25
✎
11:32
|
(62) ну и зарплаты у вас там...
|
|||
65
Гена
гуру
27.08.25
✎
11:32
|
(63) А его никогда не будет. Биржа труда ограничивает расчёт только 12-тью месяцами до увольнения:
"в пределах 12 календарных месяцев, предшествовавших месяцу увольнения" И ей плевать, что Вы полтора года назад миллионы получали ) |
|||
66
Гена
гуру
27.08.25
✎
11:33
|
(64) Это от балды. Просто я для демки когда-то скопировал реальную базу )
|
|||
67
Михаил Козлов
27.08.25
✎
12:06
|
(65) Плохо безотносительно к условиям получения отчета. Код должен соответствовать заявленным параметрам. Тем более, что это делается просто: вместо
Для Месяц = 0 По 11 Цикл пройтись циклом по месяцам от даты начала до даты конца. |
|||
68
2S
27.08.25
✎
12:25
|
(60) Вообще не красиво.
(59) расписал то, что в (54) в качестве подсказки выдал. |
|||
69
АгентБезопасной Нацио
27.08.25
✎
12:33
|
(18) если месяцев всего 12, то можно короче:
ВЫБРАТЬ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, Бит3.Бит*8+Бит2.Бит*4+Бит1.Бит*2+Бит0.Бит ), МЕСЯЦ) КАК ДатаНачалаМесяца ИЗ (ВЫБРАТЬ 0 КАК Бит ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1) КАК Бит0, (ВЫБРАТЬ 0 КАК Бит ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1) Как Бит1, (ВЫБРАТЬ 0 КАК Бит ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1) КАК Бит2, (ВЫБРАТЬ 0 КАК Бит ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1) КАК Бит3 ГДЕ Бит3.Бит*8+Бит2.Бит*4+Бит1.Бит*2+Бит0.Бит <12 |
|||
70
Гена
гуру
27.08.25
✎
12:35
|
(68) Зато он не привязан к ЗУПу. Будет работать в любой конфигурации, где есть РН для доходов по СВ.
Убедитесь сами: откройте ту же БП и на Вас лупит глазками тот же РН СведенияОДоходахСтраховыеВзносы |
|||
71
Гена
гуру
27.08.25
✎
12:40
|
Простой критерий: если в конфе есть формирование 1С-отчётность РСВ - то разрабатываемый данный калькулятор пособия по безработице по данным ЦЗН (Центр занятости населения) выдаст на любую дату размер среднего заработка - как нас прямо сейчас видит биржа труда.
|
|||
72
СвинТуз
27.08.25
✎
13:04
|
(0)
С производственного календаря или ему подобного дерните начала месяцев уникально за нужный период. Присоедините слева выше добро. + ЕСТЬNULL (60) шаманство и колдунство? В цикле ищем? Бредятина. Дополните одно другим и сверните таблицу значений. |
|||
73
СвинТуз
27.08.25
✎
13:09
|
Если воротит от производственного календаря,
можно в цикле текст запроса набирать. Сложно для гуру? )) |
|||
74
АгентБезопасной Нацио
27.08.25
✎
13:32
|
(65) Тогда в качестве параметров нужно указывать не интервал, а только конечную дату (ну как вариант - конечную дату, и количество месяцев).
Программист в (60) - франч? |
|||
75
Гена
гуру
27.08.25
✎
13:35
|
(73) Сложно. Я запросы не изучал.
(74) В принципе - да. Непринципиально. Недавний студент, джун. Вчера на лансере нашёл. Толковый парень, как видите. Можно сколько угодно кривить нос от его кода - но он рабочий ) |
|||
76
АгентБезопасной Нацио
27.08.25
✎
13:40
|
(75) Принципиально. "правила хорошего тона". Джун, делающий не пытаясь думать - плохой джун.
|
|||
77
СвинТуз
27.08.25
✎
13:41
|
(75)
"Недавний студент" Зато человек великолепно из матриц вычеркивает столбец и строку в одном цикле. Пойдет код. |
|||
78
Гена
гуру
27.08.25
✎
13:46
|
(77) Здрасьте. Столбцы код не трогает. Гляньте лучше.
Да, код прост и незатейлив, как автомат Калашникова. Зато и ломаться там нечему. Как бы ни изгалялся пользователь. |
|||
79
АгентБезопасной Нацио
27.08.25
✎
13:45
|
(77) Ничего, Гена его и транспонировать научит... Если будет долго бить...
|
|||
80
АгентБезопасной Нацио
27.08.25
✎
13:47
|
(78) да запросто. Пользователь дату начала с датой окончания перепутает, и фффсё
|
|||
81
Михаил Козлов
27.08.25
✎
13:47
|
(72) Можно и без производственного календаря (см. 67).
|
|||
82
Гена
гуру
27.08.25
✎
13:52
|
(80) Не перепутает. В диалоге формы только три поля для выбора пользователем: Организация, Сотрудник и ДатаУвольнения
Интервал в модуле определяется как минус 11 мес от НачалоИнтервала. Да, плоховато цикл-12 в цикле-12 = 144 движения. Зато гарантия, что при любой погоде и любой платформе ВСЕ элементы будут перебраны без пропуска. |
|||
83
Гена
гуру
27.08.25
✎
13:58
|
(79) Не "бить", а учить. Студентом подрабатывал преподом по математике на платных подготовительных курсах в МИРЭА (у м.Юго-Западная). Так вот пришёл после армии парень - полный ноль в арифметике, забыл даже таблицу умножения. Минус перед скобкой из двух слагаемых не знал как раскрыть.
И ничего. Через год сдал вступительную математику на 5 баллов ) |
|||
84
АгентБезопасной Нацио
27.08.25
✎
14:01
|
(82)
ВЫБРАТЬ Периоды.ДатаНачалаМесяца КАК Период, ЕстьNULL(СведенияОДоходахСтраховыеВзносыОбороты.СуммаОборот,0) - ЕстьNULL(СведенияОДоходахСтраховыеВзносыОбороты.СкидкаОборот,0) КАК Доход ИЗ (ВЫБРАТЬ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&КонПериода, МЕСЯЦ, -(Бит3.Бит*8+Бит2.Бит*4+Бит1.Бит*2+Бит0.Бит) ), МЕСЯЦ) КАК ДатаНачалаМесяца ИЗ (ВЫБРАТЬ 0 КАК Бит ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1) КАК Бит0, (ВЫБРАТЬ 0 КАК Бит ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1) Как Бит1, (ВЫБРАТЬ 0 КАК Бит ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1) КАК Бит2, (ВЫБРАТЬ 0 КАК Бит ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1) КАК Бит3 ГДЕ Бит3.Бит*8+Бит2.Бит*4+Бит1.Бит*2+Бит0.Бит <&КоличествоМесяцев ) КАК Периоды ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СведенияОДоходахСтраховыеВзносы.Обороты(ДОБАВИТЬКДАТЕ(&КонПериода, МЕСЯЦ,-&КоличествоМесяцев), &КонПериода, Месяц,ФизическоеЛицо=&Физлицо ) КАК СведенияОДоходахСтраховыеВзносыОбороты ПО СведенияОДоходахСтраховыеВзносыОбороты.Период = Периоды.ДатаНачалаМесяца УПОРЯДОЧИТЬ ПО Периоды.ДатаНачалаМесяца Без всякого перебора |
|||
85
АгентБезопасной Нацио
27.08.25
✎
14:10
|
(83) программированию ты его не научишь. ПБУ, ЗУПу, и т.п. - ни секунды не сомневаюсь.
|
|||
86
Гена
гуру
29.08.25
✎
07:20
|
А ещё просьба.
У меня на форме выбирается сотрудник из своего справочника, а в запросе в РС измерением только ФизическоеЛицо Как мне их подружить в запросе? Вот так не получается: |ГДЕ | ВЛАДЕЛЕЦ(ДанныеОВремениДляРасчетаСреднегоФСС.ФизическоеЛицо) = &Сотрудник |
|||
87
Garykom
гуру
29.08.25
✎
07:39
|
(86) Логично что смотря как Сотрудник связан с ФизическоеЛицо
Но подозреваю что банально через Сотрудник.ФизЛицо Можно или сразу параметром передавать ФизЛицо вместо Сотрудник Или в запросе создать ВТ, выбрать в нее нужную запись из справочника Сотрудники и использовать .ФизЛицо через соединение с ВТ |
|||
88
Гена
гуру
29.08.25
✎
07:44
|
А можно просто привести строчку или строчки, чтоб работало? У меня нет задачи изучать язык 1С. Просто нужен работающий кусок кода.
(87) Вот так тоже не работает: |ГДЕ | ДанныеОВремениДляРасчетаСреднегоФСС.ФизическоеЛицо = &Сотрудник.ФизическоеЛицо Ошибка синтаксиса ) |
|||
89
Мультук
гуру
29.08.25
✎
07:57
|
(88)
Просто, дёшево, сердито. Запрос.УстановитьПараметр("Сотрудник", Сотрудник); Запрос.УстановитьПараметр("ФизическоеЛицо ", Сотрудник.ФизическоеЛицо ); Вместо богопротивной констукции "Сотрудник.ФизическоеЛицо" можете впихнуть вызов ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Сотрудник, "ФизическоеЛицо" ) |
|||
90
Гена
гуру
29.08.25
✎
08:08
|
(89) Спасибо, добавил установку параметров после текста запроса.
А в ГДЕ что написать, чтоб конкретного кекса выбирать в запросе для &Сотрудник? |
|||
91
Мультук
гуру
29.08.25
✎
08:21
|
(90)
В добавку к (89) |ГДЕ | ДанныеОВремениДляРасчетаСреднегоФСС.ФизическоеЛицо = &ФизическоеЛицо |
|||
92
Гена
гуру
29.08.25
✎
08:29
|
(91) {(10, 55)}: Не задано значение параметра "ФизическоеЛицо"
ДанныеОВремениДляРасчетаСреднегоФСС.ФизическоеЛицо = <<?>>&ФизическоеЛицо |
|||
93
Гена
гуру
29.08.25
✎
08:31
|
В принципе без ГДЕ формирует таблицу значений, но по всем рылам )
Можно будет потом выбирать. Но неужели в запросе никак? |
|||
94
Волшебник
29.08.25
✎
08:38
|
(&Сотрудник).ФизическоеЛицо
|
|||
95
Гена
гуру
29.08.25
✎
08:43
|
(94) О! Подошло. Сразу видно мастера.
Странно, что сам не сообразил оскобить - так красиво, а, следовательно, верно. На этом всё на сегодня. Мерси. |
|||
96
Волшебник
29.08.25
✎
09:14
|
(95) Я бы не сказал, что это прямо конечное решение. Конструктор запроса такие конструкции не понимает
|
|||
97
RomanYS
29.08.25
✎
09:23
|
(96) ВЫРАЗИТЬ(&Сотрудник КАК Справочник.Сотрудники).ФизическоеЛицо
так даже конструктор поймёт |
|||
98
Гена
гуру
29.08.25
✎
09:24
|
(96) Зато я понимаю. Действительно, амперсанд - это отсыл к уже вбитому в поле формы значению. Чтобы потом углубляться в его реквизиты - надо выделить скобками, иначе программа не поймёт к чему относится амперсанд.
|
|||
99
Гена
гуру
29.08.25
✎
09:26
|
(97) Я дилетант, но на уровне интуиции - зачем ВТОРИЧНО указывать, что это элемент справочника, если на форме уже его щёлкнули?
|
|||
100
Волшебник
29.08.25
✎
09:29
|
(97) Вот это получше
|
|||
101
RomanYS
29.08.25
✎
11:25
|
(99) Запрос про форму и тип параметра ничего не знает
|
|||
102
Волшебник
29.08.25
✎
11:38
|
(98) амперсанд — это отсылка к коллекции Запрос.Параметры, которая заполняется через Запрос.УстановитьПараметр()
|
|||
103
Гена
гуру
29.08.25
✎
11:35
|
(101) (102) Уговорили. Поправил.
|
|||
104
Garykom
гуру
29.08.25
✎
11:53
|
(97) Вариант рабочий но в контексте задачи не правильный
Ибо запрос по логике должен принимать как параметр не одного Сотрудника а их Список/Массив Или ни одного (пустой список или массив) - это значит делать для всех за период Это более универсально Не придется переделывать когда потребуется и не нужны запросы в цикле Естественно результат запроса возвращать так же по сотрудникам |
|||
105
Гена
гуру
29.08.25
✎
12:08
|
(104) Хорошо. Вернул:
(&Сотрудник).ФизическоеЛицо |
|||
106
RomanYS
29.08.25
✎
12:23
|
(104) Да, конечно, если сразу нужно млн сотрудников уволить и выдать справки, то лучше не напрягать систему запросом в цикле.
Тогда правильно ... ГДЕ Рег.ФизическоеЛицо в (ВЫБРАТЬ Спр.ФизическоеЛицо ИЗ Справочник.Сотрудники КАК Спр ГДЕ Спр.Ссылка В (&МассивСотрудников)) |
|||
107
Garykom
гуру
30.08.25
✎
05:40
|
(106) Эээ ты издеваешься?
Это и есть запрос в цикле, точнее подзапрос Уже написал в (87) как надо, через ВТ (куда отбираются сотрудники и физлица) и соединение с ней |
|||
108
Волшебник
30.08.25
✎
10:29
|
(106) Уволить миллион
https://vkvideo.ru/video-192634001_456239340?t=46m49s |
|||
109
RomanYS
30.08.25
✎
11:20
|
(108) 👍
(107) про уволить млн конечно издеваюсь. А подзапрос в условии вполне себе имеет право на жизнь в сферическом вакууме. Ну а в контексте данной задачи могут быть всякие нюансы: несколько организаций, физлица работающие в разных организациях и т.п. Если всё это учитывать, то вполне может и понадобиться соединение с ВТ. А для получения списка физлиц ВТ не обязательно "как надо", просто один из вариантов |
|||
110
Garykom
гуру
30.08.25
✎
13:07
|
(109) Ну подзапрос в условии он сильно зависит от своих параметров/условий
И от СУБД, умеет ли она кэшировать такое (по сути сделать один раз и запомнить вместо выполнения его заново для каждой записи основного запроса) В данном случае оно прекрасно кэшируется ибо зависит только от входящего параметра &МассивСотрудников, который не меняется для проверяемых на условие записей Но если внутри подзапроса использовать "Рег.Нечто" - будет упс, классический запрос в цикле В типовой ДО есть такие места, сильно тормозящие, там умудрились подобные подзапросы в условиях, зависящие от проверяемых записей понаписать для форм списков задач исполнителя |
|||
111
RomanYS
31.08.25
✎
12:21
|
(110) "будет упс, классический запрос в цикле"
Будет Коррелированный Запрос, обрабатываемый СУБД. Со своими рисками не оптимального выполнения. Но в любом случае это не запрос в цикле. 1С где-то в типовых использует КЗ, это новость. Прямо интересно посмотреть. |
|||
112
Garykom
гуру
31.08.25
✎
13:21
|
(111) На разных СУБД разное поведение
Но скорость резко падает |
|||
113
Злопчинский
31.08.25
✎
15:03
|
Не, конечно главбух может и за кассира посидеть, но это исключительно как форсмажор.
. Геннадий, кидайте нафиг углубления в кодирование. Умеете код читать и отлично знать предметную область и еще и понимать логику приложения - это гораздо полезнее чем кодировать. Имхо. |
|||
114
Волшебник
31.08.25
✎
15:40
|
(113) Не согласен. Умение программировать — это вторая грамотность.
|
|||
115
Злопчинский
31.08.25
✎
16:16
|
(114) полностью присоединяюсь к известной фразе:
"Как говорила моя бабушка: дай бог все уметь, не не дай бог все самой делать" . Этак Геннадий сервера начнет разворачивать и кластеры всякие подымать. Не, как хобби на пенсии - оно таки да. Но таки лучше нет. Просто потому что это бежать за скоростным поездом на дрезине... |
|||
116
Волшебник
31.08.25
✎
16:23
|
(115) С этим тоже согласен. И тем не менее, для современного программиста важно знать, в каком контексте выполняется программный код: сервер или клиент типа планшета
|
|||
117
Гена
гуру
31.08.25
✎
16:29
|
Этот ропот и насмешки
Слышит грозный атаман... |
|||
118
Волшебник
31.08.25
✎
17:28
|
(117) Гена, рассчитывайте на нас. Углубляйтесь в программный код. Вам тут будет обеспечена поддержка и мотивация. Моя гарантия
|
|||
119
Злопчинский
31.08.25
✎
21:36
|
Во как надо работать:
https://infostart.ru/marketplace/1726354/ Херак за 30 тыс - тупо обрубили хвосты всего сто не нравится... |
|||
120
Злопчинский
01.09.25
✎
11:45
|
Геннадий, не стесняйтесь, ставьте тысяч по 15-30 как минимум, а не 1см. Кому надо - сумма не такая уж и деньги, а у кого на нее нет денег - нищеброды
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |