Имя: Пароль:
1C
 
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). Поскольку у вас есть документы и корректировки, можно собрать все документы, а потом убрать откорректированные. Без тяжелых соединений.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn