|
1c Запрос по документам исправляющим | ☑ | ||
---|---|---|---|---|
0
Cher_Novosib
17.11.23
✎
05:30
|
Добрый день. Запрос не корректно работает, помогите поправить.
Запрос = Новый Запрос; Запрос.УстановитьПараметр("ВидОбразования", ВидОбразования); Запрос.УстановитьПараметр("Сотрудник", СтрНайд.Сотрудник); Запрос.УстановитьПараметр("Дата", СтрОбр.Период); "ВЫБРАТЬ | ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка КАК Ссылка, | ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка.ИсправленныйДокумент КАК ИсправленныйДокумент |ПОМЕСТИТЬ ПервичнаяВыборка |ИЗ | Документ.ПереводНаОплатуПоСреднемуЗаработкуСписком.Сотрудники КАК ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники |ГДЕ | ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.ДатаНачала <= &Дата | И ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.ДатаОкончания >= &Дата | И ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Сотрудник = &Сотрудник | И ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка.Проведен = ИСТИНА |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПервичнаяВыборка.Ссылка КАК Ссылка, | ПервичнаяВыборка.ИсправленныйДокумент КАК ИсправленныйДокумент |ПОМЕСТИТЬ Корректировочные |ИЗ | ПервичнаяВыборка КАК ПервичнаяВыборка |ГДЕ | НЕ ПервичнаяВыборка.ИсправленныйДокумент = ЗНАЧЕНИЕ(Документ.ПереводНаОплатуПоСреднемуЗаработкуСписком.ПустаяСсылка) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПервичнаяВыборка.Ссылка КАК Ссылка, | ПервичнаяВыборка.Ссылка.ВидОбразования КАК ВидОбразования, | ПервичнаяВыборка.ИсправленныйДокумент КАК ИсправленныйДокумент |ИЗ | ПервичнаяВыборка КАК ПервичнаяВыборка | ЛЕВОЕ СОЕДИНЕНИЕ Корректировочные КАК Корректировочные | ПО (ПервичнаяВыборка.Ссылка = Корректировочные.ИсправленныйДокумент) |ГДЕ | Корректировочные.Ссылка ЕСТЬ NULL | И ПервичнаяВыборка.Ссылка.ВидОбразования = &ВидОбразования" Должны выводится документы, если по ним есть исправляющие, то выводится исправляющие, если нет то сам документ. Не срабатывает отбор по виду образования |
|||
1
Cher_Novosib
17.11.23
✎
05:33
|
1с ломается запрос в момент, когда есть документа с одним видом образования1, по нему делают исправление с другим видом образования2. Если запрос запускаю по виду образования1, он не видит что был документ корректировки и выводит этот документ в отчет
|
|||
3
Cher_Novosib
17.11.23
✎
07:35
|
Правильно работает если у исходного и корректирующего один вид образования, а если разные, то вообще что попало
|
|||
4
Гена
гуру
17.11.23
✎
07:44
|
(3) В типовой нет у дока вида образования, только у физлица. Что-то переписанное, медицина?
|
|||
5
Cher_Novosib
17.11.23
✎
08:38
|
да, собственный реквизит у документа
|
|||
6
Cher_Novosib
17.11.23
✎
09:38
|
Вроде правильно работает, но как-то по коду мне кажется не оптимально
"ВЫБРАТЬ | ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка КАК Ссылка, | ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка.ВидОбразования КАК ВидОбразования |ПОМЕСТИТЬ ПервичнаяВыборка |ИЗ | Документ.ИС_ПереводНаОплатуПоСреднемуЗаработкуСписком.Сотрудники КАК ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники |ГДЕ | ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.ДатаНачала <= &Дата | И ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.ДатаОкончания >= &Дата | И ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Сотрудник = &Сотрудник | И ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка.Проведен = ИСТИНА |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПервичнаяВыборка.Ссылка КАК Ссылка1, | ПервичнаяВыборка.ВидОбразования КАК ВидОбразования, | ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка КАК Ссылка, | ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка.ВидОбразования КАК ВидОбразования1 |ПОМЕСТИТЬ ВТ |ИЗ | Документ.ИС_ПереводНаОплатуПоСреднемуЗаработкуСписком.Сотрудники КАК ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники, | ПервичнаяВыборка КАК ПервичнаяВыборка |ГДЕ | ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка.ИсправленныйДокумент = ПервичнаяВыборка.Ссылка | |СГРУППИРОВАТЬ ПО | ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка, | ПервичнаяВыборка.Ссылка, | ПервичнаяВыборка.ВидОбразования, | ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка.ВидОбразования |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПервичнаяВыборка.Ссылка КАК Ссылка, | ВТ.Ссылка КАК Ссылка1 |ПОМЕСТИТЬ ВТ2 |ИЗ | ПервичнаяВыборка КАК ПервичнаяВыборка | ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ | ПО ПервичнаяВыборка.Ссылка = ВТ.Ссылка1 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВЫБОР | КОГДА ВТ2.Ссылка1 ЕСТЬ NULL | ТОГДА ВТ2.Ссылка | ИНАЧЕ ВТ2.Ссылка1 | КОНЕЦ КАК Поле1, | ВЫБОР | КОГДА ВТ2.Ссылка1 ЕСТЬ NULL | ТОГДА ВТ2.Ссылка.ВидОбразования | ИНАЧЕ ВТ2.Ссылка1.ВидОбразования | КОНЕЦ КАК Поле2 |ПОМЕСТИТЬ ВТ3 |ИЗ | ВТ2 КАК ВТ2 | |СГРУППИРОВАТЬ ПО | ВЫБОР | КОГДА ВТ2.Ссылка1 ЕСТЬ NULL | ТОГДА ВТ2.Ссылка | ИНАЧЕ ВТ2.Ссылка1 | КОНЕЦ, | ВЫБОР | КОГДА ВТ2.Ссылка1 ЕСТЬ NULL | ТОГДА ВТ2.Ссылка.ВидОбразования | ИНАЧЕ ВТ2.Ссылка1.ВидОбразования | КОНЕЦ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ3.Поле1 КАК Поле1, | ВТ3.Поле2 КАК Поле2 |ИЗ | ВТ3 КАК ВТ3 |ГДЕ | ВТ3.Поле1.Сотрудники.Сотрудник = &Сотрудник | И ВТ3.Поле1.Сотрудники.ДатаНачала <= &Дата | И ВТ3.Поле1.Сотрудники.ДатаОкончания >= &Дата | И ВТ3.Поле1.Проведен = ИСТИНА | И ВТ3.Поле2.Ссылка = &ВидОбразования | |СГРУППИРОВАТЬ ПО | ВТ3.Поле1, | ВТ3.Поле2" |
|||
7
Cher_Novosib
17.11.23
✎
12:19
|
может как-то можно оптимизировать?
|
|||
8
Valdis2007
17.11.23
✎
12:34
|
(6) но как-то по коду мне кажется не оптимально (7) может как-то можно оптимизировать? ..Оптимизировать можно практически -всегда...только "читаемость" кода снизится..оно тебе надо? Кто-то жаловался тебе что тормозит?
|
|||
9
Лирик
17.11.23
✎
14:43
|
Коллеги, вы меня простите, но если я правильно понял задачу, то все проще:
"ВЫБРАТЬ | ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка КАК ПервичныйДокумент, | ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка.ВидОбразования КАК ВидОбразования, | ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка.ИсправленныйДокумент КАК ИсправленныйДокумент |ПОМЕСТИТЬ ПервичнаяВыборка |ИЗ | Документ.ИС_ПереводНаОплатуПоСреднемуЗаработкуСписком.Сотрудники КАК ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники |ГДЕ | ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.ДатаНачала <= &Дата | И ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.ДатаОкончания >= &Дата | И ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Сотрудник = &Сотрудник | И ИС_ПереводНаОплатуПоСреднемуЗаработкуСпискомСотрудники.Ссылка.Проведен |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПервичнаяВыборка.ПервичныйДокумент КАК НужныйДокумент, | ПервичнаяВыборка.ВидОбразования КАК ВидОбразования |ИЗ | ПервичнаяВыборка КАК ПервичнаяВыборка |ГДЕ | НЕ ПервичнаяВыборка.ПервичныйДокумент В | (ВЫБРАТЬ | ПервичнаяВыборка.ИсправленныйДокумент КАК ИсправленныйДокумент | ИЗ | ПервичнаяВыборка КАК ПервичнаяВыборка) | И ПервичнаяВыборка.ВидОбразования = &ВидОбразования" |
|||
10
Cher_Novosib
18.11.23
✎
05:52
|
(6) Последнее условие не срабатывает, даты в запросе пустые почему-то
|ГДЕ | ВТ3.Поле1.Сотрудники.Сотрудник = &Сотрудник | И ВТ3.Поле1.Сотрудники.ДатаНачала <= &Дата | И ВТ3.Поле1.Сотрудники.ДатаОкончания >= &Дата | И ВТ3.Поле1.Проведен = ИСТИНА | И ВТ3.Поле2.Ссылка = &ВидОбразования |
|||
11
Cher_Novosib
18.11.23
✎
05:57
|
(9) не видит корректирующий документ, что есть у документа
|
|||
12
Cher_Novosib
18.11.23
✎
06:19
|
(10) Если в корректирующей документе есть такая дата по которой мы ищем, но нет сотрудника, запрос всё равно выдает результат.
|
|||
13
Гена
гуру
18.11.23
✎
07:22
|
Я вообще не понимаю стратегии. Зачем перебирать документы с подчинёнными корректировками, когда в ЗУПе с давних времён существуют соотв. РС с постфиксом в наименованиях (испр.)
Для чего они существуют? Для мгновенного возврата на старые значения регистров первичного документа БЕЗ его перепровода - в случае отмены исправления. На пальцах: в РС (испр.) прописываются все движения первички. При отмене дока-корр данный регистр обнуляется, а его движения тупо прописываются в первичном. Возвращается статус-кво. Можете проверить. Гляньте в какой РС прописывается ваш новый параметр ВидОбразования и откройте такой же, но с постфиксом (испр.) Отсюда ясно, какая должна быть наша стратегия. Самая простая. Берём соотв. РС (испр.) и запросом в несколько строк вытягиваем любую нужную нам информацию. И не надо тогда перебирать все документы, т.к. в РС (испр.) будут только те движения, те регистраторы, которые ДЕЙСТВУЮТ, т.е. заведомо есть проведённые корр-доки. |
|||
14
Cher_Novosib
18.11.23
✎
07:31
|
у меня самописный документ, который не делает движения по регистру
|
|||
15
Мимохожий Однако
18.11.23
✎
09:07
|
(14) Добавь движения по регистру. Остальное - по типовой схеме
|
|||
16
Cher_Novosib
19.11.23
✎
07:57
|
(15) этого нельзя делать
|
|||
17
Гена
гуру
19.11.23
✎
08:24
|
(16) Зачем нужен корр безрегистровому доку, когда можно его напрямую исправить?
Вы бы расписали схему - для чего понадобился этот дополнительный документ в программе? Может мы оптимизируем её. Медсестёр скопом отправили на курсы? |
|||
18
Злопчинский
19.11.23
✎
18:04
|
(17) не, программист-стоматолог, наверное...
|
|||
19
Волшебник
19.11.23
✎
18:05
|
(16) Кто запретил?
|
|||
20
Лирик
20.11.23
✎
10:56
|
(11) Возможно не видит. Скорее всего "мешает" условие по датам в формировании временной таблицы. Только вы знаете могут ли отличаться даты в корректируемом и корректирующим документе. Я просто показал вам, что есть более простой способ, чем в (6). Поскольку у вас есть документы и корректировки, можно собрать все документы, а потом убрать откорректированные. Без тяжелых соединений.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |