Помогите понять работу СрезПоследних на конкретном примере
В общем, на скорую руку набрасываю кадровикам ВПФ и вдруг попадаю в ступор.
Нужно в макет выдать должность на момент перевода сотрудника до 01.07.2015.
В ТЧ ее нет, там только та на которую назначают 01.07.2015.
Пытаюсь выдернуть ее из РаботникиОрганизацийСрезПоследних и не могу. Почему?
Прикрепляю картинку с регистром и сообщением пользователю
Нужно в макет выдать должность на момент перевода сотрудника до 01.07.2015.
В ТЧ ее нет, там только та на которую назначают 01.07.2015.
Пытаюсь выдернуть ее из РаботникиОрганизацийСрезПоследних и не могу. Почему?
ЗапросДолж = Новый Запрос("ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Должность
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Дата,)
| КАК РаботникиОрганизацийСрезПоследних
|ГДЕ
| РаботникиОрганизацийСрезПоследних.Сотрудник = &Сотрудник");
ЗапросДолж.УстановитьПараметр("Сотрудник", Сотрудник);
мДата = НачалоДня(СсылкаНаОбъект.Дата)-1;
ЗапросДолж.УстановитьПараметр("Дата", мДата);
Сообщить(мДата);
АктуалДолжность = Запрос.Выполнить().Выбрать();
Пока АктуалДолжность.Следующий() Цикл
КомОбъект.Variables.Item(ИмяПараметра).Value = АктуалДолжность.Должность;
Сообщить(АктуалДолжность.Должность);
КонецЦикла;
ПоказатьПрикрепляю картинку с регистром и сообщением пользователю
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) smirnovsrg, вы с данными разберитесь. У вас что на входе в &Дата?
Вам запрос и возвращает данные на последнюю секунду предыдущего дня (30.06), как и просили в . Следующая секунда - уже относится к секунде следующего дня (01.07).
"Дата Минус 1" - вы как это поняли, когда писали?
(2) sommid,
Вам запрос и возвращает данные на последнюю секунду предыдущего дня (30.06), как и просили в
НачалоДня(СсылкаНаОбъект.Дата)-1
"Дата Минус 1" - вы как это поняли, когда писали?
(2) sommid,
а не через конструкцию ГДЕ
Это "всего лишь" оптимизация выполнения запроса, на данные не влияет. В данном случае без разницы - отберет сотрудников, и по ним СрезПоследних, или сначала СрезПоследних по событиям всех сотрудников, а потом - среди них отберет нужного.
На первый взгляд должно работать
Да хоть "на десятый взгляд" - работает так, какая дата указано на входе. Или - не работает, как хочет автор.
(11) Allexe8.1,
Отобрать сотрудников и выбрать последнее событие на дату, или выбрать последние события по всем ведущим измерениям, и взять сотрудника - вернет здесь одно и то же.
что разница - она все-таки есть
Есть, но не в данном конкретном случае.
Отобрать сотрудников и выбрать последнее событие на дату, или выбрать последние события по всем ведущим измерениям, и взять сотрудника - вернет здесь одно и то же.
(28) Allexe8.1,
Измерения - ИСПОЛЬЗУЮТСЯ, т.к - СРЕЗПОСЛЕДНИХ!
Правда, в вашу защиту надо сказать - что именно этого в тру-желтых книжках и не написано )
Хотя вы и так их не читаете ))
Причем, независимо, от того, используются ли измерения в запросе
Вы не понимаете 1С совсем )
Измерения - ИСПОЛЬЗУЮТСЯ, т.к - СРЕЗПОСЛЕДНИХ!
Правда, в вашу защиту надо сказать - что именно этого в тру-желтых книжках и не написано )
Хотя вы и так их не читаете ))
(30) sommid,
А измерения используются в любом случае, т.к. мы пользуем "типа встроенные" в регистр механизмы, которые на использовании измерений и построены )
я думаю имелось ввиду явное использование в тексте запроса
Это получение полей.
А измерения используются в любом случае, т.к. мы пользуем "типа встроенные" в регистр механизмы, которые на использовании измерений и построены )
(35) Allexe8.1,
Признайтесь, это же ваша мечта - написать "1С.ДайЧеНитьСейчасИЗдесь" - и 1С выложит вам обратно все, что вы предполагали в данный момент получить, в зависимости от контекста вашего желания ))
"1С.РаботникиОрганизаций.ДайТаблицуОстатков! Что это?! Ты еще и остатки будешь за меня не только формировать, но и сразу списывать!?"
не в РС, а в 1С
Да, уже написал запрос:
ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Должность
|ИЗ
| 1С.РаботникиОрганизаций.СрезПоследних(&Дата,)
| КАК РаботникиОрганизацийСрезПоследних
|ГДЕ
| РаботникиОрганизацийСрезПоследних.Сотрудник = &Сотрудник"
Признайтесь, это же ваша мечта - написать "1С.ДайЧеНитьСейчасИЗдесь" - и 1С выложит вам обратно все, что вы предполагали в данный момент получить, в зависимости от контекста вашего желания ))
а еще и таблица остатков представь
Да, представил таблицу остатков в РС.
"1С.РаботникиОрганизаций.ДайТаблицуОстатков! Что это?! Ты еще и остатки будешь за меня не только формировать, но и сразу списывать!?"
(37)
Было бы неплохо, если бы можно было вирт. таблицы самому создавать, например вирт. таблицу СрезПоследнихНаКаждуюДату(), или ОстаткиНаКаждуюДату(), или СрезПоследнихПоИзмерениям()
это же ваша мечта - написать "1С.ДайЧеНитьСейчасИЗдесь"
Было бы неплохо, если бы можно было вирт. таблицы самому создавать, например вирт. таблицу СрезПоследнихНаКаждуюДату(), или ОстаткиНаКаждуюДату(), или СрезПоследнихПоИзмерениям()
(32) Allexe8.1,
У неё "закон", и "понимание" - в каждом конкретном случае: вот так написали в платформе, и баста. Вот так - для РС, а так - для РН. И не волнует 1С, что это названо "регистры", и у них как-бы должна быть единая схема реакции на "раздражители" со стороны программиста, если он дергает за "одинаковые" (с его стороны) ниточки - будь то "измерения", какие-то менеджеры, добавление и удаление записей...
а не только по тем, которые используются.
Вы, работая с 1С, не поймете главного - у 1С нет логики, нет единого понимания, что и как и где должно работать.
У неё "закон", и "понимание" - в каждом конкретном случае: вот так написали в платформе, и баста. Вот так - для РС, а так - для РН. И не волнует 1С, что это названо "регистры", и у них как-бы должна быть единая схема реакции на "раздражители" со стороны программиста, если он дергает за "одинаковые" (с его стороны) ниточки - будь то "измерения", какие-то менеджеры, добавление и удаление записей...
(19) sommid,
Исползуешь - работает, не используешь - сидишь, куришь, пьешь чай. Ждешь. Снова пьешь чай, куришь.
Но, елки, несколько часов подряд беспрерывно пить чай - это слишком! )))
никто и не говорил, что результат будет иным. Отличаться будет только быстродействие.
Так я так и писал. И не возражал сам себе ))
И вообще использовать параметры виртуальной таблицы - правило хорошего тона.
Это не "правила хорошего тона" а - крайняя необходимость, жестко детерминированная "супер любимой платформой".
Исползуешь - работает, не используешь - сидишь, куришь, пьешь чай. Ждешь. Снова пьешь чай, куришь.
Но, елки, несколько часов подряд беспрерывно пить чай - это слишком! )))
(4) непонятен минус ваш :)
там было явно отмечено, что это всего лишь
И к тому же сами себе противоречите. Срез последних должен был вернуть никак не энергетика, а в результате Сообщить() выдало именно его. Так что это вам "-" ;)
(3) значит с запросом все верно, проверяйте отладчиком параметры, обход результата запроса.. где-то там ошибка
там было явно отмечено, что это всего лишь
совет
, относящийся к написанию запроса
И к тому же сами себе противоречите. Срез последних должен был вернуть никак не энергетика, а в результате Сообщить() выдало именно его. Так что это вам "-" ;)
(3) значит с запросом все верно, проверяйте отладчиком параметры, обход результата запроса.. где-то там ошибка
(21) опять спутываете что к чему относилось.
повторяюсь "работает как и задумано" - относится к запросу
"Пытаюсь выдернуть ее из РаботникиОрганизацийСрезПоследних и не могу. Почему?" - потому что, на мой взгляд, ошибка в последующей обработке, либо в передаче параметров в запрос, НО не в самом тексте запроса
повторяюсь "работает как и задумано" - относится к запросу
"Пытаюсь выдернуть ее из РаботникиОрганизацийСрезПоследних и не могу. Почему?" - потому что, на мой взгляд, ошибка в последующей обработке, либо в передаче параметров в запрос, НО не в самом тексте запроса
(24) sommid,
А, вроде как, "задумано" могло быть только автором, а не "задумано запросом". 1С-запросы "думать" еще не научились.
Наоборот, одноэсников - отучают думать )))
потому что, на мой взгляд, ошибка в последующей обработке, либо в передаче параметров в запрос
А куда автор-то пропал?
НО не в самом тексте запроса
Нет, ну запрос "рабочий" в том плане, что что-то делает, и не валится с криками "помогите! ниче не работает!". Другое дело - автора это не устраивает ))
А, вроде как, "задумано" могло быть только автором, а не "задумано запросом". 1С-запросы "думать" еще не научились.
Наоборот, одноэсников - отучают думать )))
(8) sommid,
До сих пор тру-одноэсники ломают копьё - что такое "00:00:00": конец предыдущего дня, или начало следующего.
1С, например, интерпретирует как хочет, в зависимости от ситуации. Что не добавляет копьям тру-одноэсников долгой службы ))
Срез последних должен был вернуть никак не энергетика
Отчего ж, у 1С большие проблемы с переходом даты.
До сих пор тру-одноэсники ломают копьё - что такое "00:00:00": конец предыдущего дня, или начало следующего.
1С, например, интерпретирует как хочет, в зависимости от ситуации. Что не добавляет копьям тру-одноэсников долгой службы ))
(20) sommid,
(18) Allexe8.1,
не понял какая разница.. главное, что в запросе используется именно 30.06
непонятно, что приходит в запрос в "СсылкаНаОбъект.Дата".
(18) Allexe8.1,
в срезе будет сотрудник с датой последней записи
Так и будут по всем сотрудникам "срез на указанную дату", если не указано иное дополнительное условие. А уже по ним - отбор "ГДЕ" будет наложен.
Разве срез последних не возвращает комбинацию всех измерений на искомую дату?
Совершенно верно. Видите, растете даже в рамках одного топика ))
(13)
Но это не в силах понять в 1С ))
что такое "00:00:00": конец предыдущего дня, или начало следующего.
Да, на самом деле - нужно рассматривать этот переход как две "даты" (начало и конец) по отношению к документам, и как одну - по отношению ко времени.
Но это не в силах понять в 1С ))
какая структура регистра? Сотрудник - измерение?
Совет: отбор по измерениям при использовании виртуальных таблиц нужно делать по параметрам виртуальной таблицы ( ), а не через конструкцию ГДЕ
Попробуйте посмотреть консолью запросов в предприятии.. будет ли там все нормально. На первый взгляд должно работать
Совет: отбор по измерениям при использовании виртуальных таблиц нужно делать по параметрам виртуальной таблицы (
.СрезПоследних(&Дата, Сотрудник = &Сотрудник)
Попробуйте посмотреть консолью запросов в предприятии.. будет ли там все нормально. На первый взгляд должно работать
(2) sommid, в параметрах виртуальной таблицы та же песня была.
Думал, из-за этого некорректно показывает, поэтому и вытащил условие наружу.
сыграл в консоли отчетов УПП - результат тот что надо.
Вопрос - почему в ВПФ не отрабатывает как положено?
Думал, из-за этого некорректно показывает, поэтому и вытащил условие наружу.
сыграл в консоли отчетов УПП - результат тот что надо.
Вопрос - почему в ВПФ не отрабатывает как положено?
Прикрепленные файлы:
Народ, не понимаю, о чем вы тут развели такую долгую дискуссию???
Я же в 3 посте привел отработку запроса в консоли отчетов.
Итак, еще раз вопрос, почему код - дату присваиваю ЯВНО
Дает при формировании ВПФ запрос возвращает "энергетик", а в консоли отчетов "Заместитель начальника ..."?????
Запрос 1 к 1 - скопирован.
В регистре запись "Заместитель начальника ..." датирована 01.02.2015
а запись "энергетик" 01.07.2015.
Я же в 3 посте привел отработку запроса в консоли отчетов.
Итак, еще раз вопрос, почему код - дату присваиваю ЯВНО
ЗапросДолж = Новый Запрос("ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Период,
| РаботникиОрганизацийСрезПоследних.Сотрудник,
| РаботникиОрганизацийСрезПоследних.Должность
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Дата, ) КАК РаботникиОрганизацийСрезПоследних
|ГДЕ
| РаботникиОрганизацийСрезПоследних.Сотрудник = &Сотрудник");
ЗапросДолж.УстановитьПараметр("Сотрудник", Сотрудник);
ЗапросДолж.УстановитьПараметр("Дата", '20150630000000');
ПоказатьДает при формировании ВПФ запрос возвращает "энергетик", а в консоли отчетов "Заместитель начальника ..."?????
Запрос 1 к 1 - скопирован.
В регистре запись "Заместитель начальника ..." датирована 01.02.2015
а запись "энергетик" 01.07.2015.
(39) smirnovsrg,
А вы точно - даете картинки состояния РС именно той базы, к которой обращаетесь по COM? Или это картинки текущей или другой тестовой?
Дает при формировании ВПФ запрос возвращает "энергетик", а в консоли отчетов "Заместитель начальника ..."?????
Тогда быть того не может.
А вы точно - даете картинки состояния РС именно той базы, к которой обращаетесь по COM? Или это картинки текущей или другой тестовой?
Дает при формировании ВПФ запрос возвращает "энергетик"
Может, вы ВПФ запускаете в текущей базе, а запрос - он обращается ведь совсем к другой?
Я пишу ВПФ есс-но в тестовой, но вешаю ее и смотрю результат в боевой.
И консоль в боевой.
Текст запроса в ВПФ я сделал точно такой же, как и в консоли отчетов. Один в один.
Результат разный.
Как такое может быть?
Может, чистить кэш???
И консоль в боевой.
Текст запроса в ВПФ я сделал точно такой же, как и в консоли отчетов. Один в один.
Результат разный.
Как такое может быть?
Может, чистить кэш???
Скорее всего, регистр сведений является периодическим в пределах дня. Приведение вашей даты-времени к дате происходит на сервере SQL. Попробуйте привести дату так:
мДата = НачалоДня(НачалоДня(СсылкаНаОбъект.Дата)-1);
мДата = НачалоДня(НачалоДня(СсылкаНаОбъект.Дата)-1);
(45) igel9780,
Никаких "Приведение вашей даты-времени к дате происходит на сервере SQL". В таблицах SQL нет таких функций контроля, да и вообще - нет регистров сведений.
SQL-сервер вообще не участвует в подобных "делах" 1С.
(44) Serginio, А причем тут СКД и консоль отчетов, если smirnovsrg утверждает, что запрос везде один, никаких лишних параметров не вводил в консоли?
А подключение из ВПФ в тестовой - точно к "боевой" базе, или еще какой другой тестовой по COM происходит?
Приведение вашей даты-времени к дате происходит на сервере SQL
Приведение даты в РС и по "НачалоДня" - все это на 1С делается.
Никаких "Приведение вашей даты-времени к дате происходит на сервере SQL". В таблицах SQL нет таких функций контроля, да и вообще - нет регистров сведений.
SQL-сервер вообще не участвует в подобных "делах" 1С.
(44) Serginio, А причем тут СКД и консоль отчетов, если smirnovsrg утверждает, что запрос везде один, никаких лишних параметров не вводил в консоли?
но вешаю ее и смотрю результат в боевой
Зачем вы ВПФ "вешаете"?
А подключение из ВПФ в тестовой - точно к "боевой" базе, или еще какой другой тестовой по COM происходит?
Народ, у всех прошу прощения за то что ввел вас в заблуждение!!!
в моем первом посте в листинге 1-я строка
А потом внизу
Таким образом, как я с бубном не танцевал, выполнялся совсем другой запрос.
Жаль столько потраченного времени из-за своей невнимательности ((
в моем первом посте в листинге 1-я строка
ЗапросДолж = Новый Запрос
А потом внизу
АктуалДолжность = Запрос.Выполнить().Выбрать();
Таким образом, как я с бубном не танцевал, выполнялся совсем другой запрос.
Жаль столько потраченного времени из-за своей невнимательности ((
(47) smirnovsrg,
А т.к. даже никто и не подумал, что вы до сих пор не посмотрели результат "АктуалДолжность" в табло - то мало ли что у вас там написано, написано много, а может быть - еще больше и что угодно.
Поэтому на расхождения в коде внимания никто не обращал - у вас же вообще не указаны, какие данные и что-откуда берется.
Все и так поняли, что вы выдрали кусок кода с "мясом" и попавшими кусками, и так и вставили ))
выполнялся совсем другой запрос
О чем и речь. Я вас вел к этому уже постов 20.
А т.к. даже никто и не подумал, что вы до сих пор не посмотрели результат "АктуалДолжность" в табло - то мало ли что у вас там написано, написано много, а может быть - еще больше и что угодно.
Поэтому на расхождения в коде внимания никто не обращал - у вас же вообще не указаны, какие данные и что-откуда берется.
Все и так поняли, что вы выдрали кусок кода с "мясом" и попавшими кусками, и так и вставили ))
(51) starik-2005,
Если уважаемые тру-одноэсники так и пишут - что ж, на то они и тру-одноэсники.
А я, действительно, "винегреты" редко-редко когда рассматриваю.
Вот вам не привыкать, вы сразу "родное" увидели ))
Как же это уважаемый AlexO не заметил, что наименования переменной разные
Там, вообще-то, "винегрет" из кода.
Если уважаемые тру-одноэсники так и пишут - что ж, на то они и тру-одноэсники.
А я, действительно, "винегреты" редко-редко когда рассматриваю.
Вот вам не привыкать, вы сразу "родное" увидели ))
(47) smirnovsrg,
Я просто так спрашиваю, а то вон тру-одноэсникам винегрет в коде важнее смысла написания самого кода ))
Жаль столько потраченного времени из-за своей невнимательности
Кстати, а вы все-таки поняли работу РС на конкретном примере или нет?
Я просто так спрашиваю, а то вон тру-одноэсникам винегрет в коде важнее смысла написания самого кода ))
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот