|
v7: Проблема с запросом | ☑ | ||
---|---|---|---|---|
0
ЮлияКорж
11.01.12
✎
13:57
|
Проверка на вероятное дублирование доков совпадение по полям не могли бы подсказать правильна ли логика запроса выдает, мне необходима комбинацию полей проверит на повторение в доках приема
Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |ОбрабатыватьДокументы Все; |ПриказОПриеме = Документ.ПриказОПриеме.ТекущийДокумент; |Сотр = Документ.ПриказОПриеме.Сотрудник.Наименование; |ДатаПриема = Документ.ПриказОПриеме.Сотрудник.ДатаНачалаДействия; |Подразделение = Документ.ПриказОПриеме.Сотрудник.Подразделение; |НомерПриказа = Документ.ПриказОПриеме.НомерПриказа; |Группировка ПриказОПриеме упорядочить по ПриказОПриеме.ФИО; |Группировка ДатаПриема; |Группировка НомерПриказа; |Группировка Подразделение; |Функция СчётчикПриказ=Счётчик(ПриказОПриеме,Сотр,ДатаПриема,Подразделение,НомерПриказа); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл Таб.ВывестиСекцию("ПриказОПриеме"); Пока Запрос.Группировка(2) = 1 Цикл Таб.ВывестиСекцию("ДатаПриема"); Пока Запрос.Группировка(3) = 1 Цикл Таб.ВывестиСекцию("НомерПриказа"); Пока Запрос.Группировка(4) = 1 Цикл Таб.ВывестиСекцию("Подразделение"); КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; // Заполнение полей "Итого" //Таб.ВывестиСекцию("Итого"); // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры |
|||
1
filh
11.01.12
✎
14:02
|
(0) да уж...
|
|||
2
Rie
11.01.12
✎
14:06
|
(0) Совпадение каких полей Вы собираетесь проверять (и у чего совпадение полей Вы будете проверять)? Считается ли совпадением одинаковое значение во всех проверяемых полях или одинаковое значение хотя бы в одном из проверяемых полей?
|
|||
3
ЮлияКорж
11.01.12
✎
14:23
|
В семерке дублировались доки приема по таким полям на одного сотрудника два одинаковых дока приемы совпадающим по значениям в полях указанных в запросе мне надо выдать реестр сотрудников,у которых дублируются доки приема, я думала путем запроса выбрать совпадающие поля по значениям и поставить счетчик на комбинацию этих полей, только я не знаю как правильно это прописать у меня выдает запрос все единицы напротив комбинации
|
|||
4
filh
11.01.12
✎
14:25
|
Тебе надо посмотреть, кого 2 раза принимали на работу?
|
|||
5
ЮлияКорж
11.01.12
✎
14:27
|
Да
|
|||
6
Rie
11.01.12
✎
14:28
|
(3) Если Вам надо посмотреть, на каких сотрудников по два (или более) документов приёма - то и группируйте сначала по сотрудникам.
А потом при обходе запроса смотрите - в какой группировке по сотруднику имеется куча документов. |
|||
7
ЮлияКорж
11.01.12
✎
16:51
|
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |ОбрабатыватьДокументы Все; |Сотр = Документ.ПриказОПриеме.Сотрудник; |ДатаПриема = Документ.ПриказОПриеме.Сотрудник.ДокументНачала; |Группировка Сотр упорядочить по Сотр.Код, Сотр.Наименование; |Группировка ДатаПриема упорядочить по ДатаПриема.ДатаДок; |Функция Счет=Счётчик(Сотр,ДатаПриема); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Сотр Таб.ВывестиСекцию("Сотр"); Пока Запрос.Группировка(2) = 1 Цикл // Заполнение полей ДатаПриема Таб.ВывестиСекцию("ДатаПриема"); КонецЦикла; КонецЦикла; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", "") |
|||
8
ЮлияКорж
11.01.12
✎
16:53
|
Все равно я уже по сотруднику отбираю он не может быть в один день два раза принят и все равно счетчик 1 пишет
|
|||
9
Rie
11.01.12
✎
17:17
|
ТекстЗапроса =
"Док = Документ.ПриказОПриеме.ТекущийДокумент; |Сотрудник = Документ.ПриказОПриеме.Сотрудник; |Группировка Сотрудник; |Группировка Док;" ; //... Пока Запрос.Группировка("Сотрудник")=1 Цикл УжеБыл = 0; Пока Запрос.Группировка("Док")=1 Цикл Если УжеБыл=1 Тогда Сообщить("Попался! "+Сотрудник+" "+Док); УжеБыл = 1; КонецКсли; КонецЦикла; КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |