К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

1С 7.7 Запрос не работает, все забыл уже.

Гость
0 - 03.02.2014 - 07:03
1С 7.7 27 платформа.
Будет ли работать такая конструкция:

Сотр = СоздатьОбъект("Справочник.Сотрудники");
Сотр.ВыбратьЭлементы(0);

Пока Сотр.ПолучитьЭлемент()=1 Цикл

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//**{ЗАПРОС(Сформировать1)
|Период с (НачДата-1000) по КонДата;
|ОбрабатыватьДокументы все;
|Обрабатывать НеПомеченныеНаУдаление;
|Сотрудник = Документ.БольничныйЛист.Сотрудник.ОсновнойЭлемент;
|БольничныйЛист = Документ.БольничныйЛист.ТекущийДокумент;
|Группировка Сотрудник;
|Группировка БольничныйЛист;
|Условие(Сотрудник = Сотр.ТекущийЭлемент());
|"//****ЗАПРОС
;
КонецЦикла;

То есть в переборе сотрудников, нужно выбрать запросом все больничные сотра за период.
Запрос возвращает пустой результат. Подскажите, что не так я делаю. И вообще можно ли таким образом получить результат.

Спасибо.



Гость
1 - 03.02.2014 - 07:59
Сотрудник = Документ.БольничныйЛист.Сотрудник.ОсновнойЭлемент;
?? чоу за конфигурация
Гость
2 - 03.02.2014 - 08:09
1-101 > Я по разному пробовал.
Пусть будет
Сотрудник = Документ.БольничныйЛист.Сотрудник;

ЗиК 338
Гость
3 - 03.02.2014 - 08:22
Если на форму обработки добавляю реквизит Справочник.Сотрудники и вручную выбираю сотра, то результат есть. Но и в цикле Сотр.ТекущийЭлемент() имеет то же самое значение, но результат не выводит.
Гость
4 - 03.02.2014 - 08:27
ТекстЗапроса =
"//**{ЗАПРОС(Сформировать)
|Период с НачПериод по КонПериод;
|Без итогов;
|БольничныйЛист = Документ.БольничныйЛист.ТекущийДокумент;
|Сотрудник = Документ.БольничныйЛист.Сотрудник;
|Группировка БольничныйЛист;
|Условие(Сотрудник = ВыбСотр);
|"//****ЗАПРОС
;
Гость
5 - 03.02.2014 - 08:40
4-banzay > Ага вот так работает, а в цикле нет.
6 - 03.02.2014 - 08:44
а еще некторые ругают клюшечников за кривые запросы... а что делать если снеговики их в цикле пишут...
Гость
7 - 03.02.2014 - 08:52
да уж , понимаю когда это необходимо по смыслу ... но сначала цикл а потом запрос ;)))
(0) тогда уж понапихал бы в список значений в цикле сотрудников а потом условие в запросе установил
Гость
8 - 03.02.2014 - 09:09
(5) Да на тебе рабочий код
Процедура Сформировать()
Сотр = СоздатьОбъект("Справочник.Сотрудники");
Сотр.ВыбратьЭлементы();
Пока Сотр.ПолучитьЭлемент()=1 Цикл
ВыбСотр = Сотр.ТекущийЭлемент();
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//**{ЗАПРОС(Сформировать)
|Период с НачПер по КонПер;
|Без итогов;
|БольничныйЛист = Документ.БольничныйЛист.ТекущийДокумент;
|Сотрудник = Документ.БольничныйЛист.Сотрудник;
|Группировка БольничныйЛист;
|Группировка Сотрудник без групп;
|Условие(Сотрудник = ВыбСотр);
|"//****ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Пока Запрос.Группировка() = 1 Цикл
// Заполнение полей Сформировать
Сообщить("Сотр: "+ВыбСотр+" БЛ: "+Запрос.БольничныйЛист);
КонецЦикла;
Сообщить("======================================== ===");
КонецЦикла;
КонецПроцедуры

Пы.Сы. Согласен с Чу и 101-м. Очень нерационально. Проще цикл по БЛ, в котором заполняется ТЗ с колонками Сотрудник и Документ. А дальше делай с ней что хочешь: сортируй, выводи, обрабатывай.
Гость
9 - 03.02.2014 - 10:06
0-London > Если речь идет про ЗиК, то скачай http://1c.proclub.ru/modules/mydownl...id=24&lid=5048 и радуйся ;)
Гость
10 - 03.02.2014 - 10:24
(9) так ведь ссылка на разработку 2005 года... очень сомневаюсь, что отчет будет работать корректно в последней конфигурации.
Гость
11 - 03.02.2014 - 10:31
(10) ну скажем так, реестры документов и так работают
ЗЫ (0) а чо , штатными средствами - отчеты - печать журнала документов
Гость
12 - 03.02.2014 - 10:37
10-Hodorkovskiy > А ты попробуй. Это совсем не больно.
Гость
13 - 03.02.2014 - 10:42
+12 В данном случае (сабж) надо выбрать 2-ю вкладку (по периодам действия), задать год (или квартал, или пятилетку), поставить "галочки" в списке напротив "Больничного листа", "Больничного за счет работодателя", "по травме" - и жамкнуть ОК. Все.
Гость
14 - 03.02.2014 - 10:48
"1С 7.7 Запрос не работает, все забыл уже"

а если честно - наверняка и не знал
Гость
15 - 03.02.2014 - 10:50
14-Helen1986 > Предлагаю компромисс: "Не знал, а потом забыл" ;)
Гость
16 - 03.02.2014 - 10:58
Гость
17 - 03.02.2014 - 12:34
Вот чем нравится мне этот форум, что рассмешат и обольют, и уму разуму научат.
Гость
18 - 03.02.2014 - 13:07
Гость
19 - 03.02.2014 - 13:58
За код из (0) меня бы мой научный руководитель без диплома оставил :))))) Запрос в цикле о_О
Гость
20 - 03.02.2014 - 14:07
(19) ичоу , зависит от необходимости ... у мну например есть обработка где закрывается НДС посчфактурам - отгруженный на оплаченный , дык там запрос в цикле для получения списка счфактур и выгрузка в ТЗ (причем в отдельной процедуре) потом обход списка счфактур и создание на их основе записей книг ... так как документов шоппц за отчетный период - так шо бывают и необходимости запрос в цикле (у мну правда другая процедура вызывается)
Гость
21 - 03.02.2014 - 14:33
Цитата:
Сообщение от 101 Посмотреть сообщение
(19) ичоу , зависит от необходимости ... у мну например есть обработка где закрывается НДС посчфактурам - отгруженный на оплаченный , дык там запрос в цикле для получения списка счфактур и выгрузка в ТЗ (причем в отдельной процедуре) потом обход списка счфактур и создание на их основе записей книг ... так как документов шоппц за отчетный период - так шо бывают и необходимости запрос в цикле (у мну правда другая процедура вызывается)
ключевая фраза "другая процедура".
Всё равно запрос в цикле - моветон.
Гость
22 - 03.02.2014 - 14:42
(21) хмм а как мне выбирать пачку документов по контрагенту, создавать другие документы ? да еще отслеживать на каком из контрагентов запнулось ... тока пачками по контрагентно с выгрузкой в ТЗ и обработкой оной ...
Гость
23 - 03.02.2014 - 14:54
>>в переборе сотрудников, нужно выбрать запросом все больничные сотра за период.<<

модифицированный запрос, выполняет условие (0) без внешнего цикла по сотрудникам :)

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//**{ЗАПРОС(Сформировать)
|Период с НачПер по КонПер;
|Без итогов;
|БольничныйЛист = Документ.БольничныйЛист.ТекущийДокумент;
|Сотрудник = Документ.БольничныйЛист.Сотрудник;
|Группировка Сотрудник без групп;
|Группировка БольничныйЛист;
//|Условие(Сотрудник = ВыбСотр);
|"//****ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Пока Запрос.Группировка("Сотрудник") = 1 Цикл
Сообщить(Запрос.Сотрудник);
Пока Запрос.Группировка("БольничныйЛист")=1 Цикл
Сообщить(" " +Запрос.БольничныйЛист);
КонецЦикла;
КонецЦикла;

За основу взято "Работающщий запрос" by banzay
убрано никчемушное условие по равенству сотра выбранному из справочника, ибо к чему гонять по справочнику пустых сотров, что без Б/Л??

и переставлены группировки, чтоб первым быбирался сотр, а по нему уже - б/л :)
Гость
24 - 03.02.2014 - 15:04
(23) все верно, при большом числе сотров в справочнике лишний раз гонять = лишнее время. Зачёт :)
Гость
25 - 03.02.2014 - 17:42
Лучше не убирать условие на =, а заменить на "в", на форме отчета хочешь реквизит "ВыбСотр", хочешь список значений, работать будет и при пустом значении, а так останется возможность отбора при необходимости.
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//**{ЗАПРОС(Сформировать)
|Период с НачПер по КонПер;
|Без итогов;
|БольничныйЛист = Документ.БольничныйЛист.ТекущийДокумент;
|Сотрудник = Документ.БольничныйЛист.Сотрудник;
|Группировка Сотрудник без групп;
|Группировка БольничныйЛист;
|Условие(Сотрудник в ВыбСотр);
|"//****ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Пока Запрос.Группировка("Сотрудник") = 1 Цикл
Сообщить(Запрос.Сотрудник);
Пока Запрос.Группировка("БольничныйЛист")=1 Цикл
Сообщить(" " +Запрос.БольничныйЛист);
КонецЦикла;
КонецЦикла;


К списку вопросов
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск




Copyright ©, Все права защищены