Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   1С 7.7 Запрос не работает, все забыл уже. (http://forums.kuban.ru/f1040/1s_7_7_zapros_ne_rabotaet_vse_zabyl_uzhe-5346254.html)

London 03.02.2014 07:03

1С 7.7 Запрос не работает, все забыл уже.
 
1С 7.7 27 платформа.
Будет ли работать такая конструкция:

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

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

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

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

Спасибо.

101 03.02.2014 07:59

Сотрудник = Документ.БольничныйЛист.Сотрудник.ОсновнойЭлемент;
?? чоу за конфигурация

London 03.02.2014 08:09

1-101 > Я по разному пробовал.
Пусть будет
Сотрудник = Документ.БольничныйЛист.Сотрудник;

ЗиК 338

London 03.02.2014 08:22

Если на форму обработки добавляю реквизит Справочник.Сотрудники и вручную выбираю сотра, то результат есть. Но и в цикле Сотр.ТекущийЭлемент() имеет то же самое значение, но результат не выводит.

banzay 03.02.2014 08:27

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

London 03.02.2014 08:40

4-banzay > Ага вот так работает, а в цикле нет.

Чучундер 03.02.2014 08:44

а еще некторые ругают клюшечников за кривые запросы... а что делать если снеговики их в цикле пишут...

101 03.02.2014 08:52

да уж , понимаю когда это необходимо по смыслу ... но сначала цикл а потом запрос ;)))
(0) тогда уж понапихал бы в список значений [u]в цикле[/u] сотрудников а потом условие в запросе установил

banzay 03.02.2014 09:09

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

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

Пы.Сы. Согласен с Чу и 101-м. Очень нерационально. Проще цикл по БЛ, в котором заполняется ТЗ с колонками Сотрудник и Документ. А дальше делай с ней что хочешь: сортируй, выводи, обрабатывай.

VZ 03.02.2014 10:06

0-London > Если речь идет про ЗиК, то скачай [url]http://1c.proclub.ru/modules/mydownloads/personal.php?cid=24&lid=5048[/url] и радуйся ;)

Hodorkovskiy 03.02.2014 10:24

(9) так ведь ссылка на разработку 2005 года... очень сомневаюсь, что отчет будет работать корректно в последней конфигурации.

101 03.02.2014 10:31

(10) ну скажем так, реестры документов и так работают
ЗЫ (0) а чо , штатными средствами - отчеты - печать журнала документов

VZ 03.02.2014 10:37

10-Hodorkovskiy > А ты попробуй. Это совсем не больно.

VZ 03.02.2014 10:42

+12 В данном случае (сабж) надо выбрать 2-ю вкладку (по периодам действия), задать год (или квартал, или пятилетку), поставить "галочки" в списке напротив "Больничного листа", "Больничного за счет работодателя", "по травме" - и жамкнуть ОК. Все.

Helen1986 03.02.2014 10:48

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

а если честно - наверняка и не знал

VZ 03.02.2014 10:50

14-Helen1986 > Предлагаю компромисс: "Не знал, а потом забыл" ;)

101 03.02.2014 10:58

[img]http://prekolno.ru/uploads/posts/2010-04/1272190230_004.jpg[/img]

London 03.02.2014 12:34

Вот чем нравится мне этот форум, что рассмешат и обольют, и уму разуму научат.

Helen1986 03.02.2014 13:07

[img]http://jo-jo.ru/uploads/posts/2012-04/thumbs/1334146263_demotivatory_15.jpg[/img]

Programmer 03.02.2014 13:58

За код из (0) меня бы мой научный руководитель без диплома оставил :))))) Запрос в цикле о_О

101 03.02.2014 14:07

(19) ичоу , зависит от необходимости ... у мну например есть обработка где закрывается НДС посчфактурам - отгруженный на оплаченный , дык там запрос в цикле для получения списка счфактур и выгрузка в ТЗ (причем в отдельной процедуре) потом обход списка счфактур и создание на их основе записей книг ... так как документов шоппц за отчетный период - так шо бывают и необходимости запрос в цикле (у мну правда другая процедура вызывается)

Programmer 03.02.2014 14:33

[quote=101;33981268](19) ичоу , зависит от необходимости ... у мну например есть обработка где закрывается НДС посчфактурам - отгруженный на оплаченный , дык там запрос в цикле для получения списка счфактур и выгрузка в ТЗ (причем в отдельной процедуре) потом обход списка счфактур и создание на их основе записей книг ... так как документов шоппц за отчетный период - так шо бывают и необходимости запрос в цикле (у мну правда другая процедура вызывается) [/quote]
ключевая фраза "другая процедура".
Всё равно запрос в цикле - моветон.

101 03.02.2014 14:42

(21) хмм а как мне выбирать пачку документов по контрагенту, создавать другие документы ? да еще отслеживать на каком из контрагентов запнулось ... тока пачками по контрагентно с выгрузкой в ТЗ и обработкой оной ...

aka AMIGO 03.02.2014 14:54

>>в переборе сотрудников, нужно выбрать запросом все больничные сотра за период.<<

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

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

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

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

и переставлены группировки, чтоб первым быбирался сотр, а по нему уже - б/л :)

Programmer 03.02.2014 15:04

(23) все верно, при большом числе сотров в справочнике лишний раз гонять = лишнее время. Зачёт :)

Write 03.02.2014 17:42

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

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


Текущее время: 06:55. Часовой пояс GMT +3.