![]() |
![]() |
![]() |
|
Вопрос по добавлению нулевой строки после запроса Somebody, ndrv, Михаил_, Timon1405, Михаил Козлов, piter3, АгентБезопаснойНацио, sikuda, PuhUfa, Гена, 2S, СвинТуз, Terrixus, Мультук, Волшебник, nick86, Valdis2007, RomanYS, Djelf, denk32, Шурик71, Silgis, Franchiser, Redag, ptiz, viraboy, banco, phabeZ, bmitkin, vicof, Kuzmich123, Vstur, DemonShinji2, Lazy Stranger, SleepyHead, Доминошник, Rovan, arsik, Prog_man, Redaktor, Ногаминебить, Fedor-1971, orakool, X Leshiy, Расим, nAPACEHAK, ilou, Anton1307, Kigo_Kigo, unenu, nshrek, formista2000, pasha_d, Гипервизор, DiMel_77, ldo6, Skylark, Simod, paramedic, DimR_71, aka MIK, Dmitrii, evorle145, mikecool, craxx, вым, Hawk_1c, Crusher, KoZuB, hunter76, lubitelxml, scanduta, BOOL, Voronve, takefive, ЕRPe, alexela, Fish, Homer, obs191, serpentt, МаленькийВопросик, Климов Сергей, PR, dedmoroz777, denk, pavlika, Кир Пластелинин, Maestro2020, yurikmellon2, Sneer, maxar, Ненавижу 1С, zzz_zzz_zzz, Amra, DimVad, vyaz, segn, dva1c, Kobol, ads55
| ☑ | ||
---|---|---|---|---|
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) программированию ты его не научишь. ПБУ, ЗУПу, и т.п. - ни секунды не сомневаюсь.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |