Запрос к регистру сведений

1. ScareCrow92 19.06.17 08:16 Сейчас в теме
Здравствуйте! Есть задание: разработать программу, которая позволяла бы отслеживать изменения состава газопровода на определенную дату.
Вкратце, о составе конфигурации: есть два документа: Ввод в эксплуатацию (в данном документе отражается из каких компонентов состоит газопровод, и при его проведении газопровод вводится в эксплуатацию) и Акт выверки тех. характеристик (нужен для того чтобы в случае каких-то изменений или ошибок в документе ВводВЭксплуатацию (например ввели неправильный диаметр трубы или количество какой-то составляющей неверно указали) пользователь мог бы исправлять эти ошибки).
Есть также регистр сведений ИзменениеСоставаГазопровода (периодический, подчинен регистратору) куда записываются сведения по данным документам.

Вопрос заключается в следующем: нужно реализовать отчет на любой момент времени таким образом, чтобы данные по изменениям состава газопровода выводились верно, то есть: 01.01.2015 Газопровод1 ввели в эксплуатацию с опред. тех. характеристиками, затем 01.01.2016 обнаружили, что в тех характеристиках есть ошибки, сделали документ АктВыверки на эту дату и отчет по Газопроводу1 уже должен выводиться с измененными тех. характеристиками.

Я сделал отчет со след. текстом запроса:

ВЫБРАТЬ
	ИзменениеСоставаГазопроводаСрезПоследних.Газопроводы КАК Газопроводы,
	ИзменениеСоставаГазопроводаСрезПоследних.НаименованиеСоставляющей КАК НаименованиеСоставляющей,
	ИзменениеСоставаГазопроводаСрезПоследних.Материал КАК Материал,
	ИзменениеСоставаГазопроводаСрезПоследних.Исполнение КАК Исполнение,
	ИзменениеСоставаГазопроводаСрезПоследних.Длина КАК Длина,
	ИзменениеСоставаГазопроводаСрезПоследних.Диаметр КАК Диаметр,
	ИзменениеСоставаГазопроводаСрезПоследних.Количество КАК Количество
ИЗ
	РегистрСведений.ИзменениеСоставаГазопровода.СрезПоследних КАК ИзменениеСоставаГазопроводаСрезПоследних
Показать

....знаю, что работает не совсем так как требуется. Отчет с данным запросом выводит информацию, например, на 01.01.2015 в соответствии с документом ВводВЭксплуатацию, но если сформировать отчет на дату, например, 01.01.2016 (после проведения документа АктВыверки), то он выводит все записи из РС из обоих документов...

Вот хотел узнать у Вас, что нужно изменить в запросе или может быть не только в запросе дело...я пока новичок, не все просто дается, вот и обращаюсь :)

Заранее, Спасибо!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. WasiliyMay 8 19.06.17 08:23 Сейчас в теме
(1) Поставьте условие на вид документа регистратора. Не равно ввод в эксплуатацию
3. ScareCrow92 19.06.17 08:38 Сейчас в теме
(2) Спасибо, теперь стал отражать изменения! только я сейчас понял, что немного неверно описал как должен работать отчет: по документу ВводВЭксплуатацию он также должен выводить таблицу с составом газопровоода, а с таким условием он выводит пустоту. В общем в отчете нужно, чтобы наглядно были видны изменения, что 01.01.2015 состав был такой, а через пол года что-то поменяли и соответственно отчет должен быть с этими изменениями
4. WasiliyMay 8 19.06.17 08:46 Сейчас в теме
(3) Если нужно выделить только изменившиеся поля, то только запросом здесь не обойтись. Вам нужно выбрать записи регистров как выбирали, а потом в цикле сравнить соседние записи и вывести только изменившиеся данные.
5. alex-l19041 8 19.06.17 08:58 Сейчас в теме
(3) делайте первую временную таблицу по документу ВводВЭксплуатацию, вторую - по Акт выверки тех. характеристик, потом соединяете по газопроводу
7. ScareCrow92 19.06.17 09:10 Сейчас в теме
(4) Не совсем так, вывести нужно не только изменившиеся поля, а состав с учетом изменений.
(6) АктВыверки создается на основании ВводаВЭксплуатацию, т.е. попадают все записи
Прикрепленные файлы:
8. WasiliyMay 8 19.06.17 09:18 Сейчас в теме
(7) А ну почти тоже самое в любом случае придется анализировать записи, чтобы отметить изменившиеся поля
9. ipoloskov 162 19.06.17 09:42 Сейчас в теме
(7)
АктВыверки создается на основании ВводаВЭксплуатацию, т.е. попадают все записи

Тогда делаете два запроса. В первом определяете последний регистратор для данного газопровода:
ВЫБРАТЬ 
МАКСИМУМ (РС.Период) КАК Период
Поместить ВТ_ПоследниеПериоды 
ИЗ РегистрСведений.ИзменениеСоставаГазопровода КАК РС 
ГДЕ РС.Газопроводы = &Газопровод;

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

А потом выводите все записи регистра сведений по найденному регистратору
10. ScareCrow92 19.06.17 10:11 Сейчас в теме
(9) Выводить все записи регистра нужно именно отдельным запросом (т.е. создать новый набор данных-запрос) или просто нужно добавить еще один пакет запросов?
11. ScareCrow92 19.06.17 10:35 Сейчас в теме
(9) в общем я сделал следующим образом:

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	МАКСИМУМ(РС.Регистратор) КАК Регистратор
ПОМЕСТИТЬ ПоследнийРегистратор
ИЗ
	РегистрСведений.ИзменениеСоставаГазопровода КАК РС
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПоследниеПериоды КАК ПоследниеПериоды
		ПО РС.Период = ПоследниеПериоды.Период
ГДЕ
	РС.Газопроводы = &Газопроводы
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ИзменениеСоставаГазопроводаСрезПоследних.Газопроводы КАК Газопроводы,
	ИзменениеСоставаГазопроводаСрезПоследних.НаименованиеСоставляющей КАК НаименованиеСоставляющей,
	ИзменениеСоставаГазопроводаСрезПоследних.Материал КАК Материал,
	ИзменениеСоставаГазопроводаСрезПоследних.Исполнение КАК Исполнение,
	ИзменениеСоставаГазопроводаСрезПоследних.Длина КАК Длина,
	ИзменениеСоставаГазопроводаСрезПоследних.Диаметр КАК Диаметр,
	ИзменениеСоставаГазопроводаСрезПоследних.Количество КАК Количество
ИЗ
	РегистрСведений.ИзменениеСоставаГазопровода.СрезПоследних КАК ИзменениеСоставаГазопроводаСрезПоследних
Показать


но не получается все равно, он вроде выводит по последнему документу, но и из ввода в эксплуатацию тоже записи берет
13. ipoloskov 162 19.06.17 11:13 Сейчас в теме
(11) во так надо:
ВЫБРАТЬ
    МАКСИМУМ(РС.Период) КАК Период
ПОМЕСТИТЬ ПоследниеПериоды
ИЗ
    РегистрСведений.ИзменениеСоставаГазопровода КАК РС
ГДЕ
    РС.Газопроводы = &Газопроводы
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
    МАКСИМУМ(РС.Регистратор) КАК Регистратор
ПОМЕСТИТЬ ПоследнийРегистратор
ИЗ
    РегистрСведений.ИзменениеСоставаГазопровода КАК РС
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПоследниеПериоды КАК ПоследниеПериоды
        ПО РС.Период = ПоследниеПериоды.Период
ГДЕ
    РС.Газопроводы = &Газопроводы
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
    ИзменениеСоставаГазопровода.Газопроводы КАК Газопроводы,
    ИзменениеСоставаГазопровода.НаименованиеСоставляющей КАК НаименованиеСоставляющей,
    ИзменениеСоставаГазопровода.Материал КАК Материал,
    ИзменениеСоставаГазопровода.Исполнение КАК Исполнение,
    ИзменениеСоставаГазопровода.Длина КАК Длина,
    ИзменениеСоставаГазопровода.Диаметр КАК Диаметр,
    ИзменениеСоставаГазопровода.Количество КАК Количество
ИЗ
    РегистрСведений.ИзменениеСоставаГазопровода КАК ИзменениеСоставаГазопровода
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПоследнийРегистратор КАК ПоследнийРегистратор
ПО ИзменениеСоставаГазопровода.Регистратор = ПоследнийРегистратор.Регистратор
Показать
14. ScareCrow92 19.06.17 11:31 Сейчас в теме
(13) ммм...почему-то ничего вообще не выводится..
Могу скинуть dt-шник (версия конфигурации 8.3 (8.3.10.2168)), если не сложно посмотрите кто может..буду весьма благодарен!
Прикрепленные файлы:
1Cv8.dt
18. zarucheisky 19.06.17 12:29 Сейчас в теме
(13) Так, как раз, неверно.
15. zarucheisky 19.06.17 12:22 Сейчас в теме
(14) Зря Вы такой регистр сделали.
Там всё намного проще.
Зачем 2 разных документа?
Сделайте один добавьте реквизит "Операция", тип Перечисление, с двумя значениями - ВводВЭксплуатацию и Выверка.
Периодический Регистр сведений "СостояниеГазопровода" , подчинен единственному регистратору и имеет единственное
Измерение - Газопровод, кстати, не стОит называть реквизит документа "Наименование", если он не является строкой.
Назовите "Газопровод".

Тогда, отчет всегда покажет последний документ состава.
ScareCrow92; +1 Ответить
17. zarucheisky 19.06.17 12:28 Сейчас в теме
(14) Вцелом по конфигурации:
у меня лично вызывает сомнение, что Ваши сотрудники будут менять пол :D
19. ipoloskov 162 19.06.17 12:37 Сейчас в теме
(18) почему?
1. Выбираю последний регистратор.
2. Вывожу движения по этому регистратору
Что не так?
16. zarucheisky 19.06.17 12:25 Сейчас в теме
+(15) собственно, в (0) Вам как раз и надо определить последний документ, который менял состав газопровода и вывести его состав.
Вы же, сами себе усложнили задачу.
20. zarucheisky 19.06.17 12:39 Сейчас в теме
(19) Сорьки, не узрел отбор по газопроводу.
21. zarucheisky 19.06.17 12:41 Сейчас в теме
(19) Там 2 документа, которые отличаются только названием, с 3 мя табличными частями, которые так же отличаются только названием.
В общем, сыро сделано.
22. ScareCrow92 19.06.17 13:06 Сейчас в теме
(15) Спасибо за очень подробный ответ! И за советы! Есть еще вопрос: Вы говорите нужно сделать единственное измерение "Газопроводы", но тогда, если отчет делать по регистру как можно будет увидеть изменения по полям Материал составляющей, наименование составляющей, Исполнение, если они в регистр выводиться не будут?
23. ScareCrow92 19.06.17 13:17 Сейчас в теме
(21) Табличные части не совсем только названием отличаются: там состав ТЧ немного разный, поэтому пришлось создавать для каждой составляющей газопровода разные ТЧ...теперь пытаюсь сделать по Вашему совету - с одним документом и одним измерением в РС, и появляется ошибка: "Запись с такими ключевыми полями существует"...я так понимаю это связано с тем что газопровод 3 раза записывается и запись перестает быть уникальной
24. zarucheisky 19.06.17 16:29 Сейчас в теме
(22)
но тогда, если отчет делать по регистру как можно будет увидеть изменения по полям Материал составляющей, наименование составляющей, Исполнение, если они в регистр выводиться не будут?


Вестимо, что эта информация есть в документе :)
Т.е. фактически, в регистре хранится последний документ для газопровода на дату.

(23) Период с точностью до секунды поставьте и не забывайте его указывать.
25. zarucheisky 19.06.17 16:33 Сейчас в теме
(23) Смотрите, в самом справочнике СоставляющиеГазопровода отсутствует признак к какой табличной части данная составляющая относится.
Поэтому, стОит, ИМХО, пересмотреть способ хранения состава.
26. ScareCrow92 19.06.17 19:02 Сейчас в теме
(24) Поставил с точностью до секунды, он все равно ругается на запись в регистре под №2 (скриншот прилагаю)
а насчет отчета, спасибо! буду пробовать с документом вместе делать:)
Прикрепленные файлы:
27. ScareCrow92 19.06.17 19:44 Сейчас в теме
(25) Даа..тут я согласен, особенно неудобно отчет по документу с тремя ТЧ строить...как-то слишком много полей выходит, но в одну ТЧ не уместишь все..есть уникальные части для каждой составляющей газопровода
6. ipoloskov 162 19.06.17 09:04 Сейчас в теме
Какие измерения в регистре?
При проведении Акта выверки в регистр попадают все составляющие газопровода, или только измененные? При втором варианте, если какую-то составляющую мыши съели при вводе указали ошибочно, то как отмечается, что ее нет?
12. ScareCrow92 19.06.17 11:07 Сейчас в теме
Может быть я сейчас Америку не открою ни для кого, но при изменении числового параметра (диаметр, количество или длина) запись при формировании отчета заменяется (например в вводеВЭксп длина была 6 в Акте изменили на 7);
А если поменять именно текстовую запись (или и текстовую и числовую) (наименование, материал или исполнение), тогда запись при формировании отчета добавляется
28. ScareCrow92 19.06.17 21:10 Сейчас в теме
Что-то все равно ничего не выходит..переделал структуру документа: сделал одну ТЧ и поместил туда все возможные показатели составляющих газопровода, составил отчет вот таким запросом

ВЫБРАТЬ
	СоставГазопроводаСостав.Наименование КАК Наименование,
	СоставГазопроводаСостав.Материал КАК Материал,
	СоставГазопроводаСостав.ДлинаТрубы КАК ДлинаТрубы,
	СоставГазопроводаСостав.ТипКрана КАК ТипКрана,
	СоставГазопроводаСостав.ИзолирующаяПрокладкаФланца КАК ИзолирующаяПрокладкаФланца,
	СоставГазопроводаСостав.Исполнение КАК Исполнение,
	СоставГазопроводаСостав.Диаметр КАК Диаметр,
	СоставГазопроводаСостав.Количество КАК Количество
ПОМЕСТИТЬ ДокТЧ
ИЗ
	Документ.СоставГазопровода.Состав КАК СоставГазопроводаСостав
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ИзменениеСоставаГазопроводаСрезПоследних.Газопроводы КАК Газопроводы,
	ДокТЧ.Наименование КАК Наименование,
	ДокТЧ.Материал КАК Материал,
	ДокТЧ.ДлинаТрубы КАК ДлинаТрубы,
	ДокТЧ.ТипКрана КАК ТипКрана,
	ДокТЧ.ИзолирующаяПрокладкаФланца КАК ИзолирующаяПрокладкаФланца,
	ДокТЧ.Исполнение КАК Исполнение,
	ДокТЧ.Диаметр КАК Диаметр,
	ДокТЧ.Количество КАК Количество
ИЗ
	РегистрСведений.ИзменениеСоставаГазопровода.СрезПоследних КАК ИзменениеСоставаГазопроводаСрезПоследних,
	ДокТЧ КАК ДокТЧ
Показать


и нифига..
P.S. без Временных таблиц тоже делал...результат один - выводятся данные по двум документам из РС....
P.S. 2: период в отчете указываю перед формированием
29. ScareCrow92 21.06.17 09:48 Сейчас в теме
подскажите как такой запрос построить? второй день пытаюсь - не выходит
30. zarucheisky 22.06.17 17:03 Сейчас в теме
(29)

ВЫБРАТЬ
      РАЗЛИЧНЫЕ
      ИзменениеСоставаГазопроводаСрезПоследних.Газопроводы КАК Газопроводы
     ,ИзменениеСоставаГазопроводаСрезПоследних.Период  КАК Период 
     ,ИзменениеСоставаГазопроводаСрезПоследних.Регистратор КАК Регистратор
ПОМЕСТИТЬ СоставаГазопроводаСрезПоследних
ИЗ
      РегистрСведений.ИзменениеСоставаГазопровода.СрезПоследних КАК ИзменениеСоставаГазопроводаСрезПоследних
;

ВЫБРАТЬ 
       СоставаГазопроводаСрезПоследних.Газопроводы КАК Газопроводы,
       ДокТЧ.Наименование КАК Наименование,
       ДокТЧ.Материал КАК Материал,
       ДокТЧ.ДлинаТрубы КАК ДлинаТрубы,
       ДокТЧ.ТипКрана КАК ТипКрана,
      ДокТЧ.ИзолирующаяПрокладкаФланца КАК ИзолирующаяПрокладкаФланца,
      ДокТЧ.Исполнение КАК Исполнение,
      ДокТЧ.Диаметр КАК Диаметр,
      ДокТЧ.Количество КАК Количество
ИЗ
     СоставаГазопроводаСрезПоследних
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СоставГазопровода.Состав КАК ДокТЧ
ПО СоставаГазопроводаСрезПоследних.Регистратор=ДокТЧ.Ссылка
ГДЕ (СоставаГазопроводаСрезПоследних.Газопроводы ,СоставаГазопроводаСрезПоследних.Период) В (ВЫБРАТЬ  Газопроводы, MAX(Период) Период ИЗ СоставаГазопроводаСрезПоследних СГРУППИРОВАТЬ ПО Газопроводы)
;
Показать
ScareCrow92; +1 Ответить
31. zarucheisky 22.06.17 17:04 Сейчас в теме
+(30) Не знаю как вы организовали регистр сведений, посему так.
Даже если вы пишете весь состав в регистр :)
32. ScareCrow92 23.06.17 11:59 Сейчас в теме
(30) Спасибо огромное! Все работает как надо! Вы меня выручили)
Оставьте свое сообщение

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