Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Запрос работает неверно          
andrew76 Подменю пользователя
сообщение 04.11.21, 16:06
Сообщение #1

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Добрый вечер !

Имеется запрос на выборку данных из справочника.Вот только работает он не совсем корректно.
В выборку попадают записи,которых там быть не должно,а именно не выполняется условие (Перев_ф>=КонДата)
В отчет попадают все записи ,у которых заполнено значение поля из запроса Перев_ф,а должны попадать
записи,значение даты у которых должны быть больше или равны дате окончания периода КонДата.
В общем не выполняется последнее условие.
НачДата и КонДата -реквизиты начала и окончания периода на форме отчета.


Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Обрабатывать НеПомеченныеНаУдаление;
|Период с  НачДата по КонДата;
|Сотр       = Справочник.Данные.ТекущийЭлемент;
|Таб         = Справочник.Данные.ТекущийЭлемент.Код;  
|Прием_д  = Справочник.Данные.ТекущийЭлемент.ПриказОприеме.ДатаПриема;
|Перев_ф  = Справочник.Данные.ТекущийЭлемент.ПриказОПеревВФилиал.ДатаПеревода;
|Увол_д     = Справочник.Данные.ТекущийЭлемент.ПриказОбУвольнении.ДатаУвольнения;
|Увол_пр   = Справочник.Данные.ТекущийЭлемент.ПриказОбУвольнении;
|Без итогов;
|группировка Сотр;
|Условие((Стаж<=КонДата));
|Условие((ДатаЧисло(Увол_д)=0) или (Увол_д>=НачДата) или (Увол_д>=КонДата) или (Перев_ф>=КонДата));
|"//}}ЗАПРОС
;


Sharzem Подменю пользователя
сообщение 04.11.21, 17:23
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

Цитата(andrew76 @ 04.11.21, 17:06) *
|Условие((ДатаЧисло(Увол_д)=0) или (Увол_д>=НачДата) или (Увол_д>=КонДата) или (Перев_ф>=КонДата));

Вас здесь ничего не смущает ?


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

andrew76 Подменю пользователя
сообщение 04.11.21, 17:29
Сообщение #3

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Sharzem @ Сегодня, 20:23 * ,

Смущает то, что запрос как надо не работает.То ли скобок нет,то ли лишние скобки...

Sharzem Подменю пользователя
сообщение 04.11.21, 17:41
Сообщение #4

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

andrew76 @ Сегодня, 18:29 * ,
Хорошо.
1. Зачем: (ДатаЧисло(Увол_д)=0) ?
2. Почему: (Увол_д>=НачДата) или (Увол_д>=КонДата) 44000000.gif (Какая разница ?)
3. Считаю что нужно заменить: или на и (Перев_ф>=КонДата). Если считаете правильными свои условия с Увол_д.

Мое мнение с которым Вы можете не соглашаться: Сделайте через выборку справочника с условием. Работать будет быстрее (проверено).

Сообщение отредактировал Sharzem - 04.11.21, 17:50


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

andrew76 Подменю пользователя
сообщение 04.11.21, 17:51
Сообщение #5

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Цитата(Sharzem @ 04.11.21, 20:41) *
andrew76 @ Сегодня, 18:29 * ,
Хорошо.
1. Зачем: (ДатаЧисло(Увол_д)=0) ?
2. Почему: (Увол_д>=НачДата) или (Увол_д>=КонДата) 44000000.gif (Какая разница ?)
3. Считаю что нужно заменить: или на и (Перев_ф>=КонДата)

Мое мнение с которым Вы можете не соглашаться: Сделайте через выборку справочника с условием. Работать будет быстрее (проверено).


вообще то запрос не мною писан.и вопрос к самой организации данных тоже есть...
1.Увол_д = Справочник.Данные.ТекущийЭлемент.ПриказОбУвольнении.ДатаУвольнения;

по пункту 1.В выборку должны попадать сотрудники, у которых дата увольнения пустая-поэтому (ДатаЧисло(Увол_д)=0)
по пункту 2.Также в выборку должны попасть уволеные сотрудники ,даты увольнения которых должны быть больше или равны КонДата и больше или равны НачДата.
Также должны попадать в выборку те сотрудники у которых должно быть по условию (Перев_ф>=КонДата)

Sharzem Подменю пользователя
сообщение 04.11.21, 18:10
Сообщение #6

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

andrew76 @ Сегодня, 18:51 * ,
Тогда так:
Условие(((ДатаЧисло(Увол_д)=0) или (Увол_д>=НачДата)) или (Перев_ф>=КонДата));
Должны попадать уволенные и не уволенные, а также те кого перевели.


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Спасибо сказали: andrew76,

andrew76 Подменю пользователя
сообщение 05.11.21, 17:14
Сообщение #7

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Sharzem @ Вчера, 21:10 * ,

Запрос отработал также как и до переделки,т.е. опять не корректно, пока не переписал заново условие выборки :

|Условие(Стаж<=НачДата);
|Условие(((ДатаЧисло(Перев_ф)>0) и (Перев_ф>=КонДата)) ИЛИ ((Увол_д>=НачДата) И (ДатаЧисло(Перев_ф)=0)) ИЛИ ((ДатаЧисло(Увол_д)=0) И (ДатаЧисло(Перев_ф)=0)));

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 13:52
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!