1С 7.7 Запрос не работает, все забыл уже. 1С 7.7 27 платформа. Будет ли работать такая конструкция: Сотр = СоздатьОбъект("Справочник.Сотрудники"); Сотр.ВыбратьЭлементы(0); Пока Сотр.ПолучитьЭлемент()=1 Цикл Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//**{ЗАПРОС(Сформировать1) |Период с (НачДата-1000) по КонДата; |ОбрабатыватьДокументы все; |Обрабатывать НеПомеченныеНаУдаление; |Сотрудник = Документ.БольничныйЛист.Сотрудник.ОсновнойЭлемент; |БольничныйЛист = Документ.БольничныйЛист.ТекущийДокумент; |Группировка Сотрудник; |Группировка БольничныйЛист; |Условие(Сотрудник = Сотр.ТекущийЭлемент()); |"//****ЗАПРОС ; КонецЦикла; То есть в переборе сотрудников, нужно выбрать запросом все больничные сотра за период. Запрос возвращает пустой результат. Подскажите, что не так я делаю. И вообще можно ли таким образом получить результат. Спасибо. |
Сотрудник = Документ.БольничныйЛист.Сотрудник.ОсновнойЭлемент; ?? чоу за конфигурация |
1-101 > Я по разному пробовал. Пусть будет Сотрудник = Документ.БольничныйЛист.Сотрудник; ЗиК 338 |
Если на форму обработки добавляю реквизит Справочник.Сотрудники и вручную выбираю сотра, то результат есть. Но и в цикле Сотр.ТекущийЭлемент() имеет то же самое значение, но результат не выводит. |
ТекстЗапроса = "//**{ЗАПРОС(Сформировать) |Период с НачПериод по КонПериод; |Без итогов; |БольничныйЛист = Документ.БольничныйЛист.ТекущийДокумент; |Сотрудник = Документ.БольничныйЛист.Сотрудник; |Группировка БольничныйЛист; |Условие(Сотрудник = ВыбСотр); |"//****ЗАПРОС ; |
4-banzay > Ага вот так работает, а в цикле нет. |
а еще некторые ругают клюшечников за кривые запросы... а что делать если снеговики их в цикле пишут... |
да уж , понимаю когда это необходимо по смыслу ... но сначала цикл а потом запрос ;))) (0) тогда уж понапихал бы в список значений [u]в цикле[/u] сотрудников а потом условие в запросе установил |
(5) Да на тебе рабочий код Процедура Сформировать() Сотр = СоздатьОбъект("Справочник.Сотрудники"); Сотр.ВыбратьЭлементы(); Пока Сотр.ПолучитьЭлемент()=1 Цикл ВыбСотр = Сотр.ТекущийЭлемент(); //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//**{ЗАПРОС(Сформировать) |Период с НачПер по КонПер; |Без итогов; |БольничныйЛист = Документ.БольничныйЛист.ТекущийДокумент; |Сотрудник = Документ.БольничныйЛист.Сотрудник; |Группировка БольничныйЛист; |Группировка Сотрудник без групп; |Условие(Сотрудник = ВыбСотр); |"//****ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Пока Запрос.Группировка() = 1 Цикл // Заполнение полей Сформировать Сообщить("Сотр: "+ВыбСотр+" БЛ: "+Запрос.БольничныйЛист); КонецЦикла; Сообщить("==========================================="); КонецЦикла; КонецПроцедуры Пы.Сы. Согласен с Чу и 101-м. Очень нерационально. Проще цикл по БЛ, в котором заполняется ТЗ с колонками Сотрудник и Документ. А дальше делай с ней что хочешь: сортируй, выводи, обрабатывай. |
0-London > Если речь идет про ЗиК, то скачай [url]http://1c.proclub.ru/modules/mydownloads/personal.php?cid=24&lid=5048[/url] и радуйся ;) |
(9) так ведь ссылка на разработку 2005 года... очень сомневаюсь, что отчет будет работать корректно в последней конфигурации. |
(10) ну скажем так, реестры документов и так работают ЗЫ (0) а чо , штатными средствами - отчеты - печать журнала документов |
10-Hodorkovskiy > А ты попробуй. Это совсем не больно. |
+12 В данном случае (сабж) надо выбрать 2-ю вкладку (по периодам действия), задать год (или квартал, или пятилетку), поставить "галочки" в списке напротив "Больничного листа", "Больничного за счет работодателя", "по травме" - и жамкнуть ОК. Все. |
"1С 7.7 Запрос не работает, все забыл уже" а если честно - наверняка и не знал |
14-Helen1986 > Предлагаю компромисс: "Не знал, а потом забыл" ;) |
[img]http://prekolno.ru/uploads/posts/2010-04/1272190230_004.jpg[/img] |
Вот чем нравится мне этот форум, что рассмешат и обольют, и уму разуму научат. |
[img]http://jo-jo.ru/uploads/posts/2012-04/thumbs/1334146263_demotivatory_15.jpg[/img] |
За код из (0) меня бы мой научный руководитель без диплома оставил :))))) Запрос в цикле о_О |
(19) ичоу , зависит от необходимости ... у мну например есть обработка где закрывается НДС посчфактурам - отгруженный на оплаченный , дык там запрос в цикле для получения списка счфактур и выгрузка в ТЗ (причем в отдельной процедуре) потом обход списка счфактур и создание на их основе записей книг ... так как документов шоппц за отчетный период - так шо бывают и необходимости запрос в цикле (у мну правда другая процедура вызывается) |
[quote=101;33981268](19) ичоу , зависит от необходимости ... у мну например есть обработка где закрывается НДС посчфактурам - отгруженный на оплаченный , дык там запрос в цикле для получения списка счфактур и выгрузка в ТЗ (причем в отдельной процедуре) потом обход списка счфактур и создание на их основе записей книг ... так как документов шоппц за отчетный период - так шо бывают и необходимости запрос в цикле (у мну правда другая процедура вызывается) [/quote] ключевая фраза "другая процедура". Всё равно запрос в цикле - моветон. |
(21) хмм а как мне выбирать пачку документов по контрагенту, создавать другие документы ? да еще отслеживать на каком из контрагентов запнулось ... тока пачками по контрагентно с выгрузкой в ТЗ и обработкой оной ... |
>>в переборе сотрудников, нужно выбрать запросом все больничные сотра за период.<< модифицированный запрос, выполняет условие (0) без внешнего цикла по сотрудникам :) Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//**{ЗАПРОС(Сформировать) |Период с НачПер по КонПер; |Без итогов; |БольничныйЛист = Документ.БольничныйЛист.ТекущийДокумент; |Сотрудник = Документ.БольничныйЛист.Сотрудник; |Группировка Сотрудник без групп; |Группировка БольничныйЛист; //|Условие(Сотрудник = ВыбСотр); |"//****ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Пока Запрос.Группировка("Сотрудник") = 1 Цикл Сообщить(Запрос.Сотрудник); Пока Запрос.Группировка("БольничныйЛист")=1 Цикл Сообщить(" " +Запрос.БольничныйЛист); КонецЦикла; КонецЦикла; За основу взято "Работающщий запрос" by banzay убрано никчемушное условие по равенству сотра выбранному из справочника, ибо к чему гонять по справочнику пустых сотров, что без Б/Л?? и переставлены группировки, чтоб первым быбирался сотр, а по нему уже - б/л :) |
(23) все верно, при большом числе сотров в справочнике лишний раз гонять = лишнее время. Зачёт :) |
Лучше не убирать условие на =, а заменить на "в", на форме отчета хочешь реквизит "ВыбСотр", хочешь список значений, работать будет и при пустом значении, а так останется возможность отбора при необходимости. Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//**{ЗАПРОС(Сформировать) |Период с НачПер по КонПер; |Без итогов; |БольничныйЛист = Документ.БольничныйЛист.ТекущийДокумент; |Сотрудник = Документ.БольничныйЛист.Сотрудник; |Группировка Сотрудник без групп; |Группировка БольничныйЛист; |Условие(Сотрудник в ВыбСотр); |"//****ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Пока Запрос.Группировка("Сотрудник") = 1 Цикл Сообщить(Запрос.Сотрудник); Пока Запрос.Группировка("БольничныйЛист")=1 Цикл Сообщить(" " +Запрос.БольничныйЛист); КонецЦикла; КонецЦикла; |
Текущее время: 06:55. Часовой пояс GMT +3. |