|
v7: можно ли в запросе (и как) отследить временно перемещенных в др. подразделение? | ☑ | ||
---|---|---|---|---|
0
e-9
25.07.14
✎
16:04
|
Есть документ КадровыеПеремещения, которым, "в связи с производственной необходимостью", сотрудник на некий период с Начало по Окончание приписывается к другому подразделению. Делается это в обработке проведения так:
//***** УстановитьРеквизитСправочника(Сотрудник,"Подразделение",ПодразделениеНовое,Начало); УстановитьРеквизитСправочника(Сотрудник,"Подразделение",ПодразделениеСтарое,Окончание+1); В конце месяца формируются табели отработанного времени ПО ПОДРАЗДЕЛЕНИЯМ. Т.е., необходимо, чтобы такой человек попал в ОБА табеля. Если делать такой запрос: //***** ТекстЗапроса = "//{{ЗАПРОС(СотрудникиПодразделения) |Период С {НачМесяца(ДатаДок)} По {КонМесяца(ДатаДок)}; |Сотр = Справочник.Сотрудники.ТекущийЭлемент; |Подр = Справочник.Сотрудники.Подразделение; |Группировка Сотр без групп; |Условие(Подр В Подразделение); |"//}}ЗАПРОС ; то в него попадают только те, у кого на КОНЕЦ месяца Подразделение равно заданному. Т.е., например: если сотрудник был в "Бухгалтерии", его отправили на пару дней (с 30-го по 31-е) мыть посуду ("Столовая"), то этот человек попадет в табель для Столовой, а в табеле по Бухгалтерии его не будет. ЧД??? п.с. Насчет, кстати, периодики - кто-то может спросить "нафига периодика в запросе к СПРАВОЧНИКУ"; вот заранее ответ: платформа 7.7 - моя любовь, да-да!!! (д...ые запросы) |
|||
1
e-9
25.07.14
✎
16:04
|
прст!!...я вроде в ветке v7 создавал - почему в v8 попало???
речь идет о семерке |
|||
2
ДенисЧ
25.07.14
✎
16:05
|
31 запрос на каждый день.
Ибо значения периодики берутся на конец периода отчета |
|||
3
Wobland
25.07.14
✎
16:08
|
(2) наконец-то! семёрка - лох?
|
|||
4
ДенисЧ
25.07.14
✎
16:09
|
(3) Ты кого семёркой назвал???
|
|||
5
Ёпрст
25.07.14
✎
16:10
|
(2) та ну... не наш метод :)
(0) ежели группировка по подразделению не важна, а важно получить только сотрудника, то всё можно сделать в одном чорном запросе. |
|||
6
e-9
25.07.14
✎
16:10
|
"31 запрос на каждый день"
это что, шутка??? |
|||
7
e-9
25.07.14
✎
16:11
|
(5) я пытался через Группировка День Все - не оно?)
|
|||
8
e-9
25.07.14
✎
16:17
|
...
(2) это что, значит, Период С {НачМесяца(ДатаДок)} По {КонМесяца(ДатаДок)} равносильно Период С {КонМесяца(ДатаДок)} По {КонМесяца(ДатаДок)} ????????? |
|||
9
Wobland
25.07.14
✎
16:17
|
(4) будешь вредничать - клюшками обзову ;)
|
|||
10
ДенисЧ
25.07.14
✎
16:20
|
(8) Нет. Только для периодических.
|
|||
11
e-9
25.07.14
✎
16:23
|
(3,4,9) хватит заигрывать в моей теме, извращенцы
вроде вот, получилось: ТекстЗапроса = "//{{ЗАПРОС(СотрудникиПодразделения) |Период С {НачМесяца(ДатаДок)} По {КонМесяца(ДатаДок)}; |Обрабатывать НеПомеченныеНаУдаление; |ТабНомер = Справочник.Сотрудники.Код; |Сотр = Справочник.Сотрудники.ТекущийЭлемент; |Подр = Справочник.Сотрудники.Подразделение; |Группировка Сотр; |Группировка День все вошедшиевзапрос; |"//}}ЗАПРОС ; |
|||
12
e-9
25.07.14
✎
16:24
|
(11) тьфу, фальстарт
по прежнему чел не обнаруживается в подразделении, в котором он не был в конце месяца:((( (5) ну че, сказать-то сказал, а подсказать слабо?:) |
|||
13
e-9
25.07.14
✎
16:35
|
скажите уже приговор
(так все красиво было: запросом брал сотрудников подразделения, выгружал запрос в тз, добавлял в нее колонки дней месяца, заполнял их часами из графика работы, ворошил записи журнала зарплата на предмет отклонений - конфетка!... и тут, бац! "а как вы тут сделали, чтобы сотрудник в двух подразделениях в табель выводился?" - "????!!" - "ну а как же - бывает кадровое перемещение, в любой момент среди месяца...") ....через запросы, и без всяких 1с++, никак? (31 запрос не вариант, понятно) |
|||
14
Ёпрст
25.07.14
✎
16:53
|
(12) условие Подразделение.Получить(Запрос.День) в СписокПодразделений
|
|||
15
Ёпрст
25.07.14
✎
16:53
|
только вот группировку по подразделению не слепишь таким образом
|
|||
16
e-9
25.07.14
✎
17:03
|
//***
ТекстЗапроса = "//{{ЗАПРОС(СотрудникиПодразделения) |Период С {НачМесяца(ДатаДок)} По {КонМесяца(ДатаДок)}; |Сотр = Справочник.Сотрудники.ТекущийЭлемент; |Подр = Справочник.Сотрудники.Подразделение; |Группировка Сотр без групп; |Группировка День все вошедшиевзапрос; |Условие(Подр.Получить(Запрос.День) В Подразделение);"; |"//}}ЗАПРОС Вываливается ошибка: Ожидается имя переменной или ее составляющая перед 'День' |
|||
17
ДенисЧ
25.07.14
✎
17:03
|
(16) А переменная запроса как у тебя называется?
|
|||
18
e-9
25.07.14
✎
17:06
|
(17) ЗапСотр - но я сразу пробовал ЗапСотр.День, не прокатило
|
|||
19
e-9
25.07.14
✎
17:06
|
+(18) с той же ошибкой
|
|||
20
Ёпрст
25.07.14
✎
17:16
|
|Условие(Сотр.Подразделение.Получить(ЗапСотр.День) В Подразделение);";
|
|||
21
e-9
25.07.14
✎
17:20
|
(20) и? ругань-то идет на переменную перед День
то же самое, короче |
|||
22
Ёпрст
25.07.14
✎
17:22
|
(21) покажи как создаешь объект Запрос в коде
|
|||
23
e-9
25.07.14
✎
17:22
|
а если вообще просто использовать "День" - то: Ошибка в выражении 'День'
Вообще-то есть разведданные о том, что с днем, указанным в группировке, можно так вольно обращаться???? Или просто наугад? |
|||
24
e-9
25.07.14
✎
17:24
|
ЗапСотр = СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(СотрудникиПодразделения) |Период С {НачМесяца(ДатаДок)} По {КонМесяца(ДатаДок)}; |Сотр = Справочник.Сотрудники.ТекущийЭлемент; |Подр = Справочник.Сотрудники.Подразделение; |Группировка Сотр без групп; |Группировка День все вошедшиевзапрос; |"//}}ЗАПРОС ; Если (Подразделение.Выбран()=1) Тогда ТекстЗапроса = ТекстЗапроса+" |Условие(Сотр.Подразделение.Получить(ЗапСотр.День) В Подразделение);"; КонецЕсли; Если (ЗапСотр.Выполнить(ТекстЗапроса)=1) Тогда Пока (ЗапСотр.Группировка("Сотр")=1) Цикл Пока (ЗапСотр.Группировка("День")=1) Цикл сообщить(""+ ЗапСотр.ЗначениеГруппировки("День") + СимволТабуляции + ЗапСотр.Подр + СимволТабуляции + ЗапСотр.Сотр); КонецЦикла; КонецЦикла; КонецЕсли; |
|||
25
Ёпрст
25.07.14
✎
17:34
|
(24)
|Условие(Сотр.Подразделение.Получить(ЗапСотр.НачалоПериода()) В Подразделение);"; |
|||
26
an-korot
25.07.14
✎
17:41
|
запросом это не сделаешь.
делай перебор справочника. |
|||
27
an-korot
25.07.14
✎
17:42
|
(26) вернее сделаешь но только если по 1 дню шагать будешь. это тебе не восмерка.
|
|||
28
e-9
25.07.14
✎
17:43
|
(25)нет
(26,27) я уже понял((( все переделываю((((((((( |
|||
29
Ёпрст
25.07.14
✎
17:53
|
(28) че нет ?
всё работает |
|||
30
Ёпрст
25.07.14
✎
17:56
|
на форме НачДата,КонДата - элементы диалога с типом Дата,
ВыбПодразделение - тип Справочник.Подразделения наслаждайся Процедура Сформировать() Перем ТЗ; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса =" |Период с НачДата По КонДата; |Сотрудник = Справочник.Сотрудники.ТекущийЭлемент; |Условие (Сотрудник.Подразделение.Получить(Запрос.НачалоПериода()) в ВыбПодразделение); |Группировка День все ВошедшиеВЗапрос; |Группировка Сотрудник; |"; Запрос = СоздатьОбъект("Запрос"); Запрос.Выполнить(ТекстЗапроса); Запрос.Выгрузить(ТЗ); ТЗ.ВыбратьСтроку(); КонецПроцедуры |
|||
31
e-9
25.07.14
✎
18:05
|
||||
32
e-9
25.07.14
✎
18:06
|
||||
33
an-korot
25.07.14
✎
18:11
|
(31) попробуй |Условие (Сотрудник.Подразделение.Получить(НачалоПериода()) в ВыбПодразделение);
|
|||
34
an-korot
25.07.14
✎
18:16
|
(32) правильно и не получится что мы тупим, это функция команды запроса, а не функция языка запроса, понимашь?
кстати не первый раз епрст нерабочий код дает и сваливает :( сделай перебор и не парься. |
|||
35
e-9
28.07.14
✎
17:51
|
(34) ВОИСТИНУ ТАК!!!
Завещаю всем, кто пойдет по стопам моим (от программирования в нормальных системах к 1с семерке) - ф топку ее запросы!!!! Я-то, гордец, думал - мои предшественники просто не умеют запросами пользоваться, тупой перебор везде налепили... А как сам попытался в запросах учесть все нюансы за период (прием/увольнение в середине него, декретные отпуска и, наконец, временные кадровые перемещения)...Не, запросы ну никак не прокатывают. И кстати: прямой перебор достаточно шустро работает!:) |
|||
36
Ёпрст
29.07.14
✎
09:04
|
(31) п..ц
Копипасте отменили ужо ? Скопируй как в (30) без своего лисапеда (34) не свисти. |
|||
37
Ёпрст
29.07.14
✎
09:04
|
И покажи хоть одну ветку с неправильным запросом
|
|||
38
e-9
29.07.14
✎
09:59
|
(36) откуда копипасте, с модального окошка?
внимательнее, епрст, надо быть....:) не фунциклировало. (34) правильно говорит: "мы тупим, это функция команды запроса, а не функция языка запроса," |
|||
39
e-9
29.07.14
✎
10:01
|
а правильнее - "метод" запроса
|
|||
40
Ёпрст
29.07.14
✎
10:13
|
(38) еще раз, код в (30) - рабочий, скопируй его из этого поста целиком, без своего г..кода.
Твои ошибки - в картинках, это не мой код. |
|||
41
Ёпрст
29.07.14
✎
10:17
|
Для тех, кто не умеет пользоваться копипасте, проверяй
http://www.webfile.ru/f78374f5b9148756d82e1836c2113369 |
|||
42
e-9
29.07.14
✎
10:34
|
дорогой наш Ёпрст! никто не сомневается в твоем непревзойденном мастерстве и гениальности твоего великого кода!....
Но... вне контекста моего г...кода - нафига кому нужен твой шедевр??? Да, я попробовал скопипастить и запустить на очищенной от моего мерзкого контента форме - работает. Но... ровно с той же пользой, что и мой отвратительный запрос - а именно, он выбирает сотрудников только НА НАЧАЛО месяца. Если кого-то в середине месяца переместили на время из другого подразделение в нужное нам - запрос его не выведет, увы... И стОило так напрягаться, и напрягать занятых людей проверять твои уникальные творения??? |
|||
43
Ёпрст
29.07.14
✎
10:42
|
(42) уже лучше, запрос всё же работает, но не так как ты ожидал ? Это поправимо
|
|||
44
e-9
29.07.14
✎
10:53
|
оптимист, однако:)
нет уж, с меня хватит. Я уже переделал на перебор, заточил под этот вариант остальные процедуры/функции. 100% перебора по дням не избежать, даже с запросами. Но уж лучше перебрать вручную весь справочник (кроме тех, кто в папке Уволенные) сотрудников и по каждому из них, на каждый день месяца получить подразделение - чем на каждый день месяца запрос выполнять. |
|||
45
VladZ
29.07.14
✎
10:53
|
(0) Алгоритм должен быть следующий:
1. Получить сотрудников с должностями на начало периода по твоему запросу. 2. Получить изменения должности по документам КадровыеПеремещения за нужный период. |
|||
46
Ёпрст
29.07.14
✎
11:04
|
(44)
//====================================================================== Функция Вася(Сотрудник) Периодический = СоздатьОбъект("Периодический"); Периодический.ИспользоватьОбъект("Подразделение",Сотрудник); Периодический.ВыбратьЗначения(НачДата,КонДата); Пока Периодический.ПолучитьЗначение()=1 Цикл Если Периодический.Значение = ВыбПодразделение Тогда Возврат 1; КонецЕсли; КонецЦикла; Возврат 0; КонецФункции Процедура Сформировать() Перем ТЗ; СписокСотрудников = СоздатьОбъект("СписокЗначений"); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса =" |Период с НачДата По КонДата; |Сотрудник = Справочник.Сотрудники.ТекущийЭлемент; |Подразделение = Справочник.Сотрудники.Подразделение; |Условие (Вася(Сотрудник)=1); |Группировка Сотрудник; |"; Запрос = СоздатьОбъект("Запрос"); Запрос.Выполнить(ТекстЗапроса); Запрос.Выгрузить(ТЗ,1,0); ТЗ.ВыбратьСтроку(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |