Помогите понять работу СрезПоследних на конкретном примере

1. smirnovsrg 09.07.15 16:40 Сейчас в теме
В общем, на скорую руку набрасываю кадровикам ВПФ и вдруг попадаю в ступор.
Нужно в макет выдать должность на момент перевода сотрудника до 01.07.2015.
В ТЧ ее нет, там только та на которую назначают 01.07.2015.
Пытаюсь выдернуть ее из РаботникиОрганизацийСрезПоследних и не могу. Почему?
ЗапросДолж = Новый Запрос("ВЫБРАТЬ
                          |	РаботникиОрганизацийСрезПоследних.Должность
                          |ИЗ
                          |     РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Дата,)                                                                                                
                          |     КАК РаботникиОрганизацийСрезПоследних
	                  |ГДЕ
                          |	РаботникиОрганизацийСрезПоследних.Сотрудник = &Сотрудник");
        ЗапросДолж.УстановитьПараметр("Сотрудник", Сотрудник);
	мДата = НачалоДня(СсылкаНаОбъект.Дата)-1;
	ЗапросДолж.УстановитьПараметр("Дата", мДата);
	Сообщить(мДата);
	АктуалДолжность = Запрос.Выполнить().Выбрать();
	Пока АктуалДолжность.Следующий() Цикл
        	КомОбъект.Variables.Item(ИмяПараметра).Value = АктуалДолжность.Должность;
        	Сообщить(АктуалДолжность.Должность);
	КонецЦикла;
Показать


Прикрепляю картинку с регистром и сообщением пользователю
Прикрепленные файлы:
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. AlexO 135 09.07.15 17:11 Сейчас в теме
(1) smirnovsrg, вы с данными разберитесь. У вас что на входе в &Дата?
Вам запрос и возвращает данные на последнюю секунду предыдущего дня (30.06), как и просили в
НачалоДня(СсылкаНаОбъект.Дата)-1
. Следующая секунда - уже относится к секунде следующего дня (01.07).
"Дата Минус 1" - вы как это поняли, когда писали?
(2) sommid,
а не через конструкцию ГДЕ
Это "всего лишь" оптимизация выполнения запроса, на данные не влияет. В данном случае без разницы - отберет сотрудников, и по ним СрезПоследних, или сначала СрезПоследних по событиям всех сотрудников, а потом - среди них отберет нужного.
На первый взгляд должно работать
Да хоть "на десятый взгляд" - работает так, какая дата указано на входе. Или - не работает, как хочет автор.
5. Allexe8.1 09.07.15 17:18 Сейчас в теме
(4) AlexO,
Это "всего лишь" оптимизация выполнения запроса, на данные не влияет.
Вы что-то путаете, наверное..
Какая разница между срезом отфильтрованных записей и фильтром среза?
+
6. AlexO 135 09.07.15 17:19 Сейчас в теме
(5) Allexe8.1,
Какая разница между срезом отфильтрованных записей и фильтром среза?
Вашу тру-одноэсовую интерпретацию моих слов я подробно описал в (4 ).
Вот как там написано, так и работает )
+
11. Allexe8.1 09.07.15 17:28 Сейчас в теме
(6) AlexO, Вы не поняли, своим вопросом "какая разница" - я лишь пытаюсь Вас натолкнуть на мысль, что разница - она все-таки есть, и существенная, о чем и сказано в моей "тру-одноэсовой" интерпретации
+
14. AlexO 135 09.07.15 17:31 Сейчас в теме
(11) Allexe8.1,
что разница - она все-таки есть
Есть, но не в данном конкретном случае.
Отобрать сотрудников и выбрать последнее событие на дату, или выбрать последние события по всем ведущим измерениям, и взять сотрудника - вернет здесь одно и то же.
+
18. Allexe8.1 09.07.15 17:34 Сейчас в теме
(14) AlexO,
вернет здесь одно и то же.

только в том случае, если сотрудник один. в противном же случае - в срезе будет сотрудник с датой последней записи, и не факт, что это будет искомый сотрудник.
+
22. sommid 09.07.15 17:38 Сейчас в теме
(18)теперь и я не согласен. Разве срез последних не возвращает комбинацию всех измерений на искомую дату?
Allexe8.1; AlexO; +2
28. Allexe8.1 09.07.15 17:52 Сейчас в теме
(22) sommid, (23)
Да, соглашусь, по всем. Причем, независимо, от того, используются ли измерения в запросе
+
29. AlexO 135 09.07.15 17:55 Сейчас в теме
(28) Allexe8.1,
Причем, независимо, от того, используются ли измерения в запросе
Вы не понимаете 1С совсем )
Измерения - ИСПОЛЬЗУЮТСЯ, т.к - СРЕЗПОСЛЕДНИХ!
Правда, в вашу защиту надо сказать - что именно этого в тру-желтых книжках и не написано )
Хотя вы и так их не читаете ))
+
30. sommid 09.07.15 17:57 Сейчас в теме
(29)я думаю имелось ввиду явное использование в тексте запроса
+
33. AlexO 135 09.07.15 17:59 Сейчас в теме
(30) sommid,
я думаю имелось ввиду явное использование в тексте запроса
Это получение полей.
А измерения используются в любом случае, т.к. мы пользуем "типа встроенные" в регистр механизмы, которые на использовании измерений и построены )
+
32. Allexe8.1 09.07.15 17:58 Сейчас в теме
(29) AlexO,
Измерения - ИСПОЛЬЗУЮТСЯ, т.к - СРЕЗПОСЛЕДНИХ!


По такой же логике, и таблица оборотов должна группироваться - по всем измерениям,а не только по тем, которые используются.
+
34. AlexO 135 09.07.15 18:00 Сейчас в теме
(32) Allexe8.1,
По такой же логике, и таблица оборотов должна группироваться - по всем измерениям
В РС появилась таблица оборотов? ))
+
35. Allexe8.1 09.07.15 18:03 Сейчас в теме
(34) AlexO, не в РС, а в 1С. а еще и таблица остатков представь, и .. нет, пока хватит на этом.
+
37. AlexO 135 09.07.15 18:07 Сейчас в теме
(35) Allexe8.1,
не в РС, а в 1С
Да, уже написал запрос:
ВЫБРАТЬ
                          |    РаботникиОрганизацийСрезПоследних.Должность
                          |ИЗ
                          |     1С.РаботникиОрганизаций.СрезПоследних(&Дата,)                                                                                                
                          |     КАК РаботникиОрганизацийСрезПоследних
                      |ГДЕ
                          |    РаботникиОрганизацийСрезПоследних.Сотрудник = &Сотрудник"

Признайтесь, это же ваша мечта - написать "1С.ДайЧеНитьСейчасИЗдесь" - и 1С выложит вам обратно все, что вы предполагали в данный момент получить, в зависимости от контекста вашего желания ))
а еще и таблица остатков представь
Да, представил таблицу остатков в РС.
"1С.РаботникиОрганизаций.ДайТаблицуОстатков! Что это?! Ты еще и остатки будешь за меня не только формировать, но и сразу списывать!?"
+
38. Allexe8.1 09.07.15 18:24 Сейчас в теме
(37)
это же ваша мечта - написать "1С.ДайЧеНитьСейчасИЗдесь"

Было бы неплохо, если бы можно было вирт. таблицы самому создавать, например вирт. таблицу СрезПоследнихНаКаждуюДату(), или ОстаткиНаКаждуюДату(), или СрезПоследнихПоИзмерениям()
+
40. AlexO 135 10.07.15 11:28 Сейчас в теме
(38) Allexe8.1,
Было бы неплохо, если бы можно было вирт. таблицы самому создавать
Это невозможно в концепции и в рамках существующей платформы 1С.
Быстрее 1С свою СУБД напишет, чем такое введет ))
+
36. AlexO 135 09.07.15 18:05 Сейчас в теме
(32) Allexe8.1,
а не только по тем, которые используются.
Вы, работая с 1С, не поймете главного - у 1С нет логики, нет единого понимания, что и как и где должно работать.
У неё "закон", и "понимание" - в каждом конкретном случае: вот так написали в платформе, и баста. Вот так - для РС, а так - для РН. И не волнует 1С, что это названо "регистры", и у них как-бы должна быть единая схема реакции на "раздражители" со стороны программиста, если он дергает за "одинаковые" (с его стороны) ниточки - будь то "измерения", какие-то менеджеры, добавление и удаление записей...
+
19. sommid 09.07.15 17:34 Сейчас в теме
(11)(14) так не о чем спорить, никто и не говорил, что результат будет иным. Отличаться будет только быстродействие. И вообще использовать параметры виртуальной таблицы - правило хорошего тона. С этим хоть согласны? )
+
25. AlexO 135 09.07.15 17:44 Сейчас в теме
(19) sommid,
никто и не говорил, что результат будет иным. Отличаться будет только быстродействие.
Так я так и писал. И не возражал сам себе ))
И вообще использовать параметры виртуальной таблицы - правило хорошего тона.
Это не "правила хорошего тона" а - крайняя необходимость, жестко детерминированная "супер любимой платформой".
Исползуешь - работает, не используешь - сидишь, куришь, пьешь чай. Ждешь. Снова пьешь чай, куришь.
Но, елки, несколько часов подряд беспрерывно пить чай - это слишком! )))
+
7. AlexO 135 09.07.15 17:20 Сейчас в теме
(5) Allexe8.1,
отфильтрованных записей и фильтром среза?
Надо же, чего не придумают тру-одноэсники, чтобы не делать правильно.
Ну, или делать хотя бы так, как платформа принуждает ))
+
8. sommid 09.07.15 17:23 Сейчас в теме
(4) непонятен минус ваш :)
там было явно отмечено, что это всего лишь
совет
, относящийся к написанию запроса

И к тому же сами себе противоречите. Срез последних должен был вернуть никак не энергетика, а в результате Сообщить() выдало именно его. Так что это вам "-" ;)

(3) значит с запросом все верно, проверяйте отладчиком параметры, обход результата запроса.. где-то там ошибка
+
10. AlexO 135 09.07.15 17:26 Сейчас в теме
(8) sommid,
там было явно отмечено, что это всего лишь
Ну, если не согласны на минус за
На первый взгляд должно работать

- то могу убрать ))
Минус за это был.
+
12. sommid 09.07.15 17:28 Сейчас в теме
(10) понятно, да не, оставляйте. Это ж ваше мнение ).
"Должно работать" - относилось к запросу и как подтвердил автор - он действительно работает как и задумано
+
21. AlexO 135 09.07.15 17:37 Сейчас в теме
(12) sommid,
он действительно работает как и задумано
А вот тут вы не правы. И автор с вами не согласен по поводу "так и задумано" ))
(1) smirnovsrg,
Пытаюсь выдернуть ее из РаботникиОрганизацийСрезПоследних и не могу. Почему?

Так что - он задумал одно, а получил - другое ))
+
24. sommid 09.07.15 17:40 Сейчас в теме
(21) опять спутываете что к чему относилось.
повторяюсь "работает как и задумано" - относится к запросу
"Пытаюсь выдернуть ее из РаботникиОрганизацийСрезПоследних и не могу. Почему?" - потому что, на мой взгляд, ошибка в последующей обработке, либо в передаче параметров в запрос, НО не в самом тексте запроса
+
27. AlexO 135 09.07.15 17:47 Сейчас в теме
(24) sommid,
потому что, на мой взгляд, ошибка в последующей обработке, либо в передаче параметров в запрос
А куда автор-то пропал?
НО не в самом тексте запроса
Нет, ну запрос "рабочий" в том плане, что что-то делает, и не валится с криками "помогите! ниче не работает!". Другое дело - автора это не устраивает ))
А, вроде как, "задумано" могло быть только автором, а не "задумано запросом". 1С-запросы "думать" еще не научились.
Наоборот, одноэсников - отучают думать )))
+
13. AlexO 135 09.07.15 17:29 Сейчас в теме
(8) sommid,
Срез последних должен был вернуть никак не энергетика
Отчего ж, у 1С большие проблемы с переходом даты.
До сих пор тру-одноэсники ломают копьё - что такое "00:00:00": конец предыдущего дня, или начало следующего.
1С, например, интерпретирует как хочет, в зависимости от ситуации. Что не добавляет копьям тру-одноэсников долгой службы ))
+
15. sommid 09.07.15 17:31 Сейчас в теме
(13) ну в данном случае врядли в этом дело. Ведь видно явно, что дата в регистре 01.07, а в запрос передана 30.06
+
17. AlexO 135 09.07.15 17:34 Сейчас в теме
(15) sommid,
а в запрос передана 30.06

а что на самом деле передано в
СсылкаНаОбъект.Дата
?
+
20. sommid 09.07.15 17:36 Сейчас в теме
(17) не понял какая разница.. главное, что в запросе используется именно 30.06
+
23. AlexO 135 09.07.15 17:39 Сейчас в теме
(20) sommid,
не понял какая разница.. главное, что в запросе используется именно 30.06
непонятно, что приходит в запрос в "СсылкаНаОбъект.Дата".

(18) Allexe8.1,
в срезе будет сотрудник с датой последней записи
Так и будут по всем сотрудникам "срез на указанную дату", если не указано иное дополнительное условие. А уже по ним - отбор "ГДЕ" будет наложен.
Разве срез последних не возвращает комбинацию всех измерений на искомую дату?
Совершенно верно. Видите, растете даже в рамках одного топика ))
+
16. AlexO 135 09.07.15 17:32 Сейчас в теме
(13)
что такое "00:00:00": конец предыдущего дня, или начало следующего.
Да, на самом деле - нужно рассматривать этот переход как две "даты" (начало и конец) по отношению к документам, и как одну - по отношению ко времени.
Но это не в силах понять в 1С ))
+
9. AlexO 135 09.07.15 17:24 Сейчас в теме
(1) smirnovsrg, если вас смущает, что с 30.06 "приехала" должность "Энергетик" - то возьмите срез на более раннюю дату.
Т.е. считаю, что у вас согласно исходной дате все и выбирается.
+
2. sommid 09.07.15 16:54 Сейчас в теме
какая структура регистра? Сотрудник - измерение?
Совет: отбор по измерениям при использовании виртуальных таблиц нужно делать по параметрам виртуальной таблицы (
.СрезПоследних(&Дата, Сотрудник = &Сотрудник)
), а не через конструкцию ГДЕ

Попробуйте посмотреть консолью запросов в предприятии.. будет ли там все нормально. На первый взгляд должно работать
3. smirnovsrg 09.07.15 17:08 Сейчас в теме
(2) sommid, в параметрах виртуальной таблицы та же песня была.
Думал, из-за этого некорректно показывает, поэтому и вытащил условие наружу.
сыграл в консоли отчетов УПП - результат тот что надо.
Вопрос - почему в ВПФ не отрабатывает как положено?
Прикрепленные файлы:
+
26. sommid 09.07.15 17:44 Сейчас в теме
теперь ждем пока автор прольет свет )
+
31. AlexO 135 09.07.15 17:58 Сейчас в теме
(26) sommid,
теперь ждем пока автор прольет свет
Видимо, автор ушел в ступор, когда его попросили посмотреть, что на входе в запрос ))
+
39. smirnovsrg 10.07.15 11:12 Сейчас в теме
Народ, не понимаю, о чем вы тут развели такую долгую дискуссию???
Я же в 3 посте привел отработку запроса в консоли отчетов.
Итак, еще раз вопрос, почему код - дату присваиваю ЯВНО
ЗапросДолж = Новый Запрос("ВЫБРАТЬ
				                          |	РаботникиОрганизацийСрезПоследних.Период,
				                          |	РаботникиОрганизацийСрезПоследних.Сотрудник,
				                          |	РаботникиОрганизацийСрезПоследних.Должность
				                          |ИЗ
				                          |	РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Дата, ) КАК РаботникиОрганизацийСрезПоследних
				                          |ГДЕ
				                          |	РаботникиОрганизацийСрезПоследних.Сотрудник = &Сотрудник");
				ЗапросДолж.УстановитьПараметр("Сотрудник", Сотрудник);
				ЗапросДолж.УстановитьПараметр("Дата", '20150630000000');
Показать

Дает при формировании ВПФ запрос возвращает "энергетик", а в консоли отчетов "Заместитель начальника ..."?????
Запрос 1 к 1 - скопирован.
В регистре запись "Заместитель начальника ..." датирована 01.02.2015
а запись "энергетик" 01.07.2015.
+
41. AlexO 135 10.07.15 11:30 Сейчас в теме
(39) smirnovsrg,
Дает при формировании ВПФ запрос возвращает "энергетик", а в консоли отчетов "Заместитель начальника ..."?????
Тогда быть того не может.
А вы точно - даете картинки состояния РС именно той базы, к которой обращаетесь по COM? Или это картинки текущей или другой тестовой?
Дает при формировании ВПФ запрос возвращает "энергетик"
Может, вы ВПФ запускаете в текущей базе, а запрос - он обращается ведь совсем к другой?
+
42. sommid 10.07.15 11:31 Сейчас в теме
(39) отладчиком смотрели именно результат выполнения запроса? чтобы отсеять ошибки при обходе, заполнении и т.п.
+
43. smirnovsrg 10.07.15 12:15 Сейчас в теме
Я пишу ВПФ есс-но в тестовой, но вешаю ее и смотрю результат в боевой.
И консоль в боевой.
Текст запроса в ВПФ я сделал точно такой же, как и в консоли отчетов. Один в один.
Результат разный.
Как такое может быть?
Может, чистить кэш???
+
45. igel9780 171 10.07.15 12:29 Сейчас в теме
Скорее всего, регистр сведений является периодическим в пределах дня. Приведение вашей даты-времени к дате происходит на сервере SQL. Попробуйте привести дату так:

мДата = НачалоДня(НачалоДня(СсылкаНаОбъект.Дата)-1);
+
46. AlexO 135 10.07.15 13:37 Сейчас в теме
(45) igel9780,
Приведение вашей даты-времени к дате происходит на сервере SQL
Приведение даты в РС и по "НачалоДня" - все это на 1С делается.
Никаких "Приведение вашей даты-времени к дате происходит на сервере SQL". В таблицах SQL нет таких функций контроля, да и вообще - нет регистров сведений.
SQL-сервер вообще не участвует в подобных "делах" 1С.
(44) Serginio, А причем тут СКД и консоль отчетов, если smirnovsrg утверждает, что запрос везде один, никаких лишних параметров не вводил в консоли?
но вешаю ее и смотрю результат в боевой
Зачем вы ВПФ "вешаете"?
А подключение из ВПФ в тестовой - точно к "боевой" базе, или еще какой другой тестовой по COM происходит?
+
47. smirnovsrg 10.07.15 13:40 Сейчас в теме
Народ, у всех прошу прощения за то что ввел вас в заблуждение!!!
в моем первом посте в листинге 1-я строка
ЗапросДолж = Новый Запрос

А потом внизу
АктуалДолжность = Запрос.Выполнить().Выбрать();


Таким образом, как я с бубном не танцевал, выполнялся совсем другой запрос.
Жаль столько потраченного времени из-за своей невнимательности ((
+
48. AlexO 135 10.07.15 13:47 Сейчас в теме
(47) smirnovsrg,
выполнялся совсем другой запрос
О чем и речь. Я вас вел к этому уже постов 20.
А т.к. даже никто и не подумал, что вы до сих пор не посмотрели результат "АктуалДолжность" в табло - то мало ли что у вас там написано, написано много, а может быть - еще больше и что угодно.
Поэтому на расхождения в коде внимания никто не обращал - у вас же вообще не указаны, какие данные и что-откуда берется.
Все и так поняли, что вы выдрали кусок кода с "мясом" и попавшими кусками, и так и вставили ))
+
51. starik-2005 3036 10.07.15 14:30 Сейчас в теме
(47) smirnovsrg, точно ))) Как же это уважаемый AlexO не заметил, что наименования переменной разные ))) Я уж было хотел отписаться, но заставил себя дочитать до конца )))

ТруАдинэснеги идут курить и пить чай)))
+
52. AlexO 135 10.07.15 14:34 Сейчас в теме
(51) starik-2005,
Как же это уважаемый AlexO не заметил, что наименования переменной разные
Там, вообще-то, "винегрет" из кода.
Если уважаемые тру-одноэсники так и пишут - что ж, на то они и тру-одноэсники.
А я, действительно, "винегреты" редко-редко когда рассматриваю.
Вот вам не привыкать, вы сразу "родное" увидели ))
Chernika80; +1
53. AlexO 135 10.07.15 15:14 Сейчас в теме
(47) smirnovsrg,
Жаль столько потраченного времени из-за своей невнимательности
Кстати, а вы все-таки поняли работу РС на конкретном примере или нет?
Я просто так спрашиваю, а то вон тру-одноэсникам винегрет в коде важнее смысла написания самого кода ))
+
49. darksoul 10.07.15 13:57 Сейчас в теме
если разный запрос, наверняка тип данных в консоле запросов отличается от типа данных в запросе
+
50. AlexO 135 10.07.15 14:18 Сейчас в теме
(49) darksoul,
наверняка тип данных в консоле запросов отличается от типа данных в запросе
С чего бы это? Тип данных один и там и там - выдуманный одноэсом "тип Запрос". Или "ВыборкаИзЗапроса".
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот