| 
    
            
         
         | 
    
  | 
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). Поскольку у вас есть документы и корректировки, можно собрать все документы, а потом убрать откорректированные. Без тяжелых соединений.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |