Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: СрезПоследних  (Прочитано 11914 раз)
0 Пользователей и 1 Гость смотрят эту тему.
muzzombie
Новенький

ru
Offline Offline

« : 31-03-2014 17:35 » 

Здравствуйте!
Имеется периодический регистр сведений. Я делаю запрос в СКД:

ВЫБРАТЬ
   МАКСИМУМ(ДержателиАрхивныхДокументовСрезПоследних.Сотрудник) КАК Сотрудник,
   ДержателиАрхивныхДокументовСрезПоследних.Документ КАК Документ,
   ДержателиАрхивныхДокументовСрезПоследних.Документ.Код КАК Код,
   ДержателиАрхивныхДокументовСрезПоследних.Документ.Наименование КАК Наименование,
   ДержателиАрхивныхДокументовСрезПоследних.Документ.РегистрационныйНомер КАК РегистрационныйНомер,
   ДержателиАрхивныхДокументовСрезПоследних.Документ.ДатаВыдачи КАК ДатаВыдачи,
   ДержателиАрхивныхДокументовСрезПоследних.Документ.ДатаОкончанияДействия КАК ДатаОкончанияДействия,
   ДержателиАрхивныхДокументовСрезПоследних.Документ.Подразделение КАК Подразделение
ПОМЕСТИТЬ ВТ
ИЗ
   РегистрСведений.ДержателиАрхивныхДокументов.СрезПоследних(, ) КАК ДержателиАрхивныхДокументовСрезПоследних

СГРУППИРОВАТЬ ПО
   ДержателиАрхивныхДокументовСрезПоследних.Документ,
   ДержателиАрхивныхДокументовСрезПоследних.Документ.Код,
   ДержателиАрхивныхДокументовСрезПоследних.Документ.Наименование,
   ДержателиАрхивныхДокументовСрезПоследних.Документ.РегистрационныйНомер,
   ДержателиАрхивныхДокументовСрезПоследних.Документ.ДатаВыдачи,
   ДержателиАрхивныхДокументовСрезПоследних.Документ.ДатаОкончанияДействия,
   ДержателиАрхивныхДокументовСрезПоследних.Документ.Подразделение
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВТ.Сотрудник КАК Сотрудник,
   ВТ.Код,
   ВТ.Наименование,
   ВТ.РегистрационныйНомер,
   ВТ.ДатаВыдачи,
   ВТ.ДатаОкончанияДействия,
   ВТ.Подразделение
ИЗ
   ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
   ВТ.Сотрудник,
   ВТ.Код,
   ВТ.Наименование,
   ВТ.РегистрационныйНомер,
   ВТ.ДатаВыдачи,
   ВТ.ДатаОкончанияДействия,
   ВТ.Подразделение

УПОРЯДОЧИТЬ ПО
   Сотрудник


Однако, в отчет попадают не последние записи по регистру. То есть, как видно из картинки, в результате должны отображаться "Жуликов" с двумя документами и "Иванов". А вместо этого "Васина" и "Иванов". Почему по элементу справочника "Акт приема-передачи" запрос правильно сработал, а по остальным двум - неправильно?


* проблема_small.jpg (310.23 Кб - загружено 1523 раз.)
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 01-04-2014 09:24 » 

Так ты же берешь МАКСИМУМ по сотруднику - и тут что тебе вернет база зависит от настроек справочника Сотрудники и от измерений твоего регистра сведений, но совсем не то, что ты описываешь.
Если тебе нужно получить последнее значение по некоему набору полей - то в первом запросе ты должен взять МАКСИМУМ по регистратору (определить максимальный документ движения), а в следующем запросе используя ВНУТРЕННЕЕ СОЕДИНЕНИЕ выбрать нужные записи из регистра - и уже с ними работать. Причем СрезПоследних по-моему лучше не использовать - лучше работай прямо с таблицей регистра
Записан
muzzombie
Новенький

ru
Offline Offline

« Ответ #2 : 01-04-2014 15:56 » 

Спасибо Вам за ответ!
Однако, моя глупость нанесла ответный удар.

Я попробовал изменить запрос в соответствии с Вашими советами:

  ВЫБРАТЬ
   ДержателиАрхивныхДокументов.Сотрудник,
   ДержателиАрхивныхДокументов.Документ
ИЗ
   (ВЫБРАТЬ
      МАКСИМУМ(ДержателиАрхивныхДокументов.Регистратор) КАК Регистратор,
      ДержателиАрхивныхДокументов.Сотрудник КАК Сотрудник,
      ДержателиАрхивныхДокументов.Документ КАК Документ
   ИЗ
      РегистрСведений.ДержателиАрхивныхДокументов КАК ДержателиАрхивныхДокументов
   
   СГРУППИРОВАТЬ ПО
      ДержателиАрхивныхДокументов.Сотрудник,
      ДержателиАрхивныхДокументов.Документ) КАК ВложенныйЗапрос
      ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДержателиАрхивныхДокументов КАК ДержателиАрхивныхДокументов
      ПО ВложенныйЗапрос.Регистратор = ДержателиАрхивныхДокументов.Регистратор
         И ВложенныйЗапрос.Сотрудник = ДержателиАрхивныхДокументов.Сотрудник
         И ВложенныйЗапрос.Документ = ДержателиАрхивныхДокументов.Документ

СГРУППИРОВАТЬ ПО
   ДержателиАрхивныхДокументов.Сотрудник,
   ДержателиАрхивныхДокументов.Документ


Теперь отчет аккуратно выводит мне все записи регистра в порядке хронологии:

* проблема2.jpg (450.86 Кб - загружено 909 раз.)
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 02-04-2014 00:47 » 

Ну по идее выводит не все, а только последние комбинации по сотрудник/документ.
ИМХО поле Сотрудник не должно присутсововать во внутреннем запросе и связи, т.е. запрос будет приблизительно такой:
Код:
ВЫБРАТЬ
ДержателиАрхивныхДокументов.Сотрудник,
ДержателиАрхивныхДокументов.Документ
ИЗ
(ВЫБРАТЬ
МАКСИМУМ(ДержателиАрхивныхДокументов.Регистратор) КАК Регистратор,
ДержателиАрхивныхДокументов.Документ КАК Документ
ИЗ
РегистрСведений.ДержателиАрхивныхДокументов КАК ДержателиАрхивныхДокументов

СГРУППИРОВАТЬ ПО
ДержателиАрхивныхДокументов.Документ) КАК ВложенныйЗапрос
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДержателиАрхивныхДокументов КАК ДержателиАрхивныхДокументов
ПО ВложенныйЗапрос.Регистратор = ДержателиАрхивныхДокументов.Регистратор
И ВложенныйЗапрос.Документ = ДержателиАрхивныхДокументов.Документ

P.S. Для кода лучше использовать тег [code][/code] (для запросов) или [code=e1cv8][/code] (для кода в 1С)
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #4 : 12-05-2014 05:38 » new

Только не "Жуликов", а "Жупиков". )))
Судя по скрину
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines