Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: не отрабатывае запрос в 7.7
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Циган
Здравствуйте уважемые. Работаю в предприятии 7.7 релиз (7.70.027).
Проблема следующего плана: создал обработку, которая должна проверять наличие выходного дня в регистре если за этот день для определенного работки есть "приказ на работу в выходной день".
Создал вот такую процедуру, но она отрабатывает только до запроса. Сам запрос не отрабатывает, в чем может быть проблема?
Процедура Проведение() 
    сообщить("1");
    ПР = СоздатьОбъект("Документ.ПриказРабота");
    Запрос2=СоздатьОбъект("Запрос");
    ТекстЗапроса="
    |Период с Дата1 по Дата2;
    |РегСотрудник           = Регистр.Время.Сотрудник;
    |РегВремяПоДням         = Регистр.Время.ВремяПоДням;
    |РегДатаДок                = Регистр.время.датадок;
    
    |Группировка РегДатаДок;
    |Группировка РегСотрудник Без Групп;
    |Группировка РегВремяПоДням;
        
    |";                                
    
    
    Если Запрос2.Выполнить(ТекстЗапроса)=0 тогда Предупреждение("Запит не виконано!"); Возврат; КонецЕсли;
    ПР.ВыбратьДокументы(Дата1,Дата2);
    Пока ПР.ПолучитьДокумент()=1 Цикл
        сообщить("2");
        ПР.ВыбратьСтроки();
        Пока ПР.ПолучитьСтроку()=1 Цикл
            сообщить("3 "+пр.сотрудник+" дата "+пр.датадок);
            Пока Запрос2.Группировка("РегДатаДок") = 1 цикл
                сообщить("4");
                Если ПР.датадок = Запрос2.РегдатаДок тогда
                    сообщить("5");
                    Пока Запрос2.Группировка("РегСотрудник")=1 Цикл
                        сообщить("6");
                        Если запрос2.регсотрудник = пр.сотрудник тогда
                            сообщить("7");
                            Пока Запрос2.Группировка("РегВремяПоДням")=1 Цикл
                                сообщить("8");
                                Если запрос2.регвремяподням = Перечисление.ВремяПоДням.Выходные тогда
                                    сообщить("Все документы перепроведены");
                                иначе      
                                    сообщить("Документ"+пр+"не має відповідності з шляховим листом. Перевірте проведення шляхового листа");
                                КонецЕсли;
                                
                            КонецЦикла;
                        иначе
                            продолжить;
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
Конецпроцедуры
pablo
Мне кажется, что в запрос нужно параметры передать.
Циган
Цитата(pablo @ 14.10.13, 13:45) необходимо зарегистрироваться для просмотра ссылки
Мне кажется, что в запрос нужно параметры передать.

То есть параметри? можно с примером, а то я салабон еще в этом деле)))
Домовик
Интересно вы как с предупреждением сделали. раз - и вылетели.

на да. параметры Дата1, Дата2 не указаны. (если на форме обработки не указаны)
вот эту строчку попробуйте закоментить и посмотреть.
  
  |Период с Дата1 по Дата2;
Циган
"Сообщить" я вывел для того чтобы было видно на каком месте прекращается исполнение.
Домовик
не. у вас предупреждение. и оно вас к "сообщить" не допустит, пока не закроете его форму.

    Если Запрос2.Выполнить(ТекстЗапроса)=0 тогда Предупреждение("Запит не виконано!"); Возврат; КонецЕсли;


Циган
Цитата(Домовик @ 14.10.13, 13:57) необходимо зарегистрироваться для просмотра ссылки
Интересно вы как с предупреждением сделали. раз - и вылетели.

на да. параметры Дата1, Дата2 не указаны. (если на форме обработки не указаны)
вот эту строчку попробуйте закоментить и посмотреть.
  
  |Период с Дата1 по Дата2;


На форме диалога указаны Дата1 и Дата2.
Но все же закоментировал. Это ничего не дало, отрабатывается только до 3 сообщения.
pablo
Значит у вас нет подходящих заполненных документов в базе.
Домовик
с троечкой у вас сообщение выводится?


а сразу запрос сделать, чтобы не циклы в циклах? лучше так(по сотруднику таблицы связать)..


но пока посмотрите, какое сообщение при выполнении кода - последнее.
Циган
Цитата(pablo @ 14.10.13, 14:09) необходимо зарегистрироваться для просмотра ссылки
Значит у вас нет подходящих заполненных документов в базе.

Документы есть, ведь выполнение програмы выдает мне сообщение №3
сообщить("3 "+пр.сотрудник+" дата "+пр.датадок);

а вот уже группировку запроса, и дальше по коду не отрабатывается.
Регистр так же проверял, он заполнен за данный период.

Цитата(Домовик @ 14.10.13, 14:16) необходимо зарегистрироваться для просмотра ссылки
а сразу запрос сделать, чтобы не циклы в циклах? лучше так..

А как мне тогда проверять каждый день в заданном периоде? Тоесть приказы на некий день, и в этот день нужно проверить регистр.
sava1
Результат запроса не пустой? Кажется мне, что там нужна функция...
Циган
Цитата(sava1 @ 14.10.13, 15:25) необходимо зарегистрироваться для просмотра ссылки
Результат запроса не пустой? Кажется мне, что там нужна функция...

Ну мне не нужны какие нибудь значения. Мне нужно проверить тот факт, если есть документ "приказ" (пр), то в регистре "время" за этот день в этого сотрудника в одном из столбцов "ВремяПоДням" было значение "выходной", если же документ, есть а "выходного" нет, выдавать сообщение.
Домовик
стоп. а что в вашем регистре Время есть измрениями, а что ресурсами?



Домовик
попробуйте еще добавить функцию, как вам и подсказывали
        |Функция  Результат     =1 Когда (РегВремяПоДням=ПараметрВремяПоДням);



где ПараметрВремяПоДням значение нужного типа ВремяПоДням.="Выходной".


второй вариант ... убрать группировку по регВремяПоДням

а еще лучше - и функцию поставить, и группировку убрать.. проигрывайте у себя.


по хорошему, нужно все сделать одним запросом, связав таблицы документа и регистра
mister-x
Цитата(sava1 @ 14.10.13, 15:25) необходимо зарегистрироваться для просмотра ссылки
Кажется мне, что там нужна функция...

не здається, а точно - в документації по програмуванню щодо запитів по регістрах вказано, що повинна бути обов'язково функція, інакше вибірка буде пустою
Вибирай собі любу: НачОст, КонОст, Приход, Расход.
Домовик
а ще автор навів на ідею, що в і 7.7 можна в принципі організувать "регістр відомостей", використовуючи, наприклад оборотний регістр, та й регістр залишків теж..
Vofka
Цитата(Домовик @ 14.10.13, 22:10) необходимо зарегистрироваться для просмотра ссылки
а ще автор навів на ідею, що в і 7.7 можна в принципі організувать "регістр відомостей", використовуючи, наприклад оборотний регістр, та й регістр залишків теж..

Я думаю, не проблема создать тот же регистр сведений хоть с помощью справочника. Тут главные вопросы:
- эффективность работы такого "регистра сведений" (что на справочнике, что на регистре в 7.7) на уровне структуры базы данных; в т.ч. со временем использования и наполнения ИБ какими-то данными;
- удобство при работе с таким объектом со стороны программиста;
А то можно регистры вообще не использовать, делать все на документах. И да, оно таки даже будет работать. Но стоит учесть те 2 вопроса, которые я выше озвучил. smile.gif
sava1
По поводу РС на 77 идея была "обсосана" лет 10 назад: вместо ресурсов использовать реквизиты (для ускорения пересчета)
Циган
Всем спасибо. и таки правда нужна была функция. Запрос с выборкой из регистра, обязательно должен быть с функцией) Еще на одну долю стал умнее))))
Спасибо всем за помощь. icon_beer17.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.