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
| Цитата:
Всё равно запрос в цикле - моветон. | | |
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 Цикл Сообщить(" " +Запрос.БольничныйЛист); КонецЦикла; КонецЦикла; | |
| Интернет-форум Краснодарского края и Краснодара |