Здравствуйте! Есть задание: разработать программу, которая позволяла бы отслеживать изменения состава газопровода на определенную дату.
Вкратце, о составе конфигурации: есть два документа: Ввод в эксплуатацию (в данном документе отражается из каких компонентов состоит газопровод, и при его проведении газопровод вводится в эксплуатацию) и Акт выверки тех. характеристик (нужен для того чтобы в случае каких-то изменений или ошибок в документе ВводВЭксплуатацию (например ввели неправильный диаметр трубы или количество какой-то составляющей неверно указали) пользователь мог бы исправлять эти ошибки).
Есть также регистр сведений ИзменениеСоставаГазопровода (периодический, подчинен регистратору) куда записываются сведения по данным документам.
Вопрос заключается в следующем: нужно реализовать отчет на любой момент времени таким образом, чтобы данные по изменениям состава газопровода выводились верно, то есть: 01.01.2015 Газопровод1 ввели в эксплуатацию с опред. тех. характеристиками, затем 01.01.2016 обнаружили, что в тех характеристиках есть ошибки, сделали документ АктВыверки на эту дату и отчет по Газопроводу1 уже должен выводиться с измененными тех. характеристиками.
Я сделал отчет со след. текстом запроса:
....знаю, что работает не совсем так как требуется. Отчет с данным запросом выводит информацию, например, на 01.01.2015 в соответствии с документом ВводВЭксплуатацию, но если сформировать отчет на дату, например, 01.01.2016 (после проведения документа АктВыверки), то он выводит все записи из РС из обоих документов...
Вот хотел узнать у Вас, что нужно изменить в запросе или может быть не только в запросе дело...я пока новичок, не все просто дается, вот и обращаюсь :)
Заранее, Спасибо!
Вкратце, о составе конфигурации: есть два документа: Ввод в эксплуатацию (в данном документе отражается из каких компонентов состоит газопровод, и при его проведении газопровод вводится в эксплуатацию) и Акт выверки тех. характеристик (нужен для того чтобы в случае каких-то изменений или ошибок в документе ВводВЭксплуатацию (например ввели неправильный диаметр трубы или количество какой-то составляющей неверно указали) пользователь мог бы исправлять эти ошибки).
Есть также регистр сведений ИзменениеСоставаГазопровода (периодический, подчинен регистратору) куда записываются сведения по данным документам.
Вопрос заключается в следующем: нужно реализовать отчет на любой момент времени таким образом, чтобы данные по изменениям состава газопровода выводились верно, то есть: 01.01.2015 Газопровод1 ввели в эксплуатацию с опред. тех. характеристиками, затем 01.01.2016 обнаружили, что в тех характеристиках есть ошибки, сделали документ АктВыверки на эту дату и отчет по Газопроводу1 уже должен выводиться с измененными тех. характеристиками.
Я сделал отчет со след. текстом запроса:
ВЫБРАТЬ
ИзменениеСоставаГазопроводаСрезПоследних.Газопроводы КАК Газопроводы,
ИзменениеСоставаГазопроводаСрезПоследних.НаименованиеСоставляющей КАК НаименованиеСоставляющей,
ИзменениеСоставаГазопроводаСрезПоследних.Материал КАК Материал,
ИзменениеСоставаГазопроводаСрезПоследних.Исполнение КАК Исполнение,
ИзменениеСоставаГазопроводаСрезПоследних.Длина КАК Длина,
ИзменениеСоставаГазопроводаСрезПоследних.Диаметр КАК Диаметр,
ИзменениеСоставаГазопроводаСрезПоследних.Количество КАК Количество
ИЗ
РегистрСведений.ИзменениеСоставаГазопровода.СрезПоследних КАК ИзменениеСоставаГазопроводаСрезПоследних
Показать....знаю, что работает не совсем так как требуется. Отчет с данным запросом выводит информацию, например, на 01.01.2015 в соответствии с документом ВводВЭксплуатацию, но если сформировать отчет на дату, например, 01.01.2016 (после проведения документа АктВыверки), то он выводит все записи из РС из обоих документов...
Вот хотел узнать у Вас, что нужно изменить в запросе или может быть не только в запросе дело...я пока новичок, не все просто дается, вот и обращаюсь :)
Заранее, Спасибо!
По теме из базы знаний
- Выборка в запросе из периодического регистра сведений данных на дату из строки запроса
- Запросы к регистрам сведений с реквизитом "ПериодЗавершения"
- Регистры сведений 1С. Как это устроено.
- Доработка проведения в ERP 2.5. (Регистры накопления, Регистры сведений)
- Как спроектировать структуру регистра сведений
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Спасибо, теперь стал отражать изменения! только я сейчас понял, что немного неверно описал как должен работать отчет: по документу ВводВЭксплуатацию он также должен выводить таблицу с составом газопровоода, а с таким условием он выводит пустоту. В общем в отчете нужно, чтобы наглядно были видны изменения, что 01.01.2015 состав был такой, а через пол года что-то поменяли и соответственно отчет должен быть с этими изменениями
(7)
Тогда делаете два запроса. В первом определяете последний регистратор для данного газопровода:
А потом выводите все записи регистра сведений по найденному регистратору
АктВыверки создается на основании ВводаВЭксплуатацию, т.е. попадают все записи
Тогда делаете два запроса. В первом определяете последний регистратор для данного газопровода:
ВЫБРАТЬ
МАКСИМУМ (РС.Период) КАК Период
Поместить ВТ_ПоследниеПериоды
ИЗ РегистрСведений.ИзменениеСоставаГазопровода КАК РС
ГДЕ РС.Газопроводы = &Газопровод;
ВЫБРАТЬ
МАКСИМУМ(РС.Регистратор) КАК Регистратор
Поместить ВТ_ПоследниеРегистраторы
ИЗ РегистрСведений.ИзменениеСоставаГазопровода КАК РС
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ПоследниеПериоды КАК ВТ_ПоследниеПериоды
ПО РС.Период = ВТ_ПоследниеПериоды.Период
ГДЕ РС.Газопроводы = &Газопровод
ПоказатьА потом выводите все записи регистра сведений по найденному регистратору
(9) в общем я сделал следующим образом:
но не получается все равно, он вроде выводит по последнему документу, но и из ввода в эксплуатацию тоже записи берет
ВЫБРАТЬ
МАКСИМУМ(РС.Период) КАК Период
ПОМЕСТИТЬ ПоследниеПериоды
ИЗ
РегистрСведений.ИзменениеСоставаГазопровода КАК РС
ГДЕ
РС.Газопроводы = &Газопроводы
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
МАКСИМУМ(РС.Регистратор) КАК Регистратор
ПОМЕСТИТЬ ПоследнийРегистратор
ИЗ
РегистрСведений.ИзменениеСоставаГазопровода КАК РС
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПоследниеПериоды КАК ПоследниеПериоды
ПО РС.Период = ПоследниеПериоды.Период
ГДЕ
РС.Газопроводы = &Газопроводы
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ИзменениеСоставаГазопроводаСрезПоследних.Газопроводы КАК Газопроводы,
ИзменениеСоставаГазопроводаСрезПоследних.НаименованиеСоставляющей КАК НаименованиеСоставляющей,
ИзменениеСоставаГазопроводаСрезПоследних.Материал КАК Материал,
ИзменениеСоставаГазопроводаСрезПоследних.Исполнение КАК Исполнение,
ИзменениеСоставаГазопроводаСрезПоследних.Длина КАК Длина,
ИзменениеСоставаГазопроводаСрезПоследних.Диаметр КАК Диаметр,
ИзменениеСоставаГазопроводаСрезПоследних.Количество КАК Количество
ИЗ
РегистрСведений.ИзменениеСоставаГазопровода.СрезПоследних КАК ИзменениеСоставаГазопроводаСрезПоследних
Показатьно не получается все равно, он вроде выводит по последнему документу, но и из ввода в эксплуатацию тоже записи берет
(11) во так надо:
ВЫБРАТЬ
МАКСИМУМ(РС.Период) КАК Период
ПОМЕСТИТЬ ПоследниеПериоды
ИЗ
РегистрСведений.ИзменениеСоставаГазопровода КАК РС
ГДЕ
РС.Газопроводы = &Газопроводы
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
МАКСИМУМ(РС.Регистратор) КАК Регистратор
ПОМЕСТИТЬ ПоследнийРегистратор
ИЗ
РегистрСведений.ИзменениеСоставаГазопровода КАК РС
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПоследниеПериоды КАК ПоследниеПериоды
ПО РС.Период = ПоследниеПериоды.Период
ГДЕ
РС.Газопроводы = &Газопроводы
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ИзменениеСоставаГазопровода.Газопроводы КАК Газопроводы,
ИзменениеСоставаГазопровода.НаименованиеСоставляющей КАК НаименованиеСоставляющей,
ИзменениеСоставаГазопровода.Материал КАК Материал,
ИзменениеСоставаГазопровода.Исполнение КАК Исполнение,
ИзменениеСоставаГазопровода.Длина КАК Длина,
ИзменениеСоставаГазопровода.Диаметр КАК Диаметр,
ИзменениеСоставаГазопровода.Количество КАК Количество
ИЗ
РегистрСведений.ИзменениеСоставаГазопровода КАК ИзменениеСоставаГазопровода
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПоследнийРегистратор КАК ПоследнийРегистратор
ПО ИзменениеСоставаГазопровода.Регистратор = ПоследнийРегистратор.Регистратор
Показать
(14) Зря Вы такой регистр сделали.
Там всё намного проще.
Зачем 2 разных документа?
Сделайте один добавьте реквизит "Операция", тип Перечисление, с двумя значениями - ВводВЭксплуатацию и Выверка.
Периодический Регистр сведений "СостояниеГазопровода" , подчинен единственному регистратору и имеет единственное
Измерение - Газопровод, кстати, не стОит называть реквизит документа "Наименование", если он не является строкой.
Назовите "Газопровод".
Тогда, отчет всегда покажет последний документ состава.
Там всё намного проще.
Зачем 2 разных документа?
Сделайте один добавьте реквизит "Операция", тип Перечисление, с двумя значениями - ВводВЭксплуатацию и Выверка.
Периодический Регистр сведений "СостояниеГазопровода" , подчинен единственному регистратору и имеет единственное
Измерение - Газопровод, кстати, не стОит называть реквизит документа "Наименование", если он не является строкой.
Назовите "Газопровод".
Тогда, отчет всегда покажет последний документ состава.
(15) Спасибо за очень подробный ответ! И за советы! Есть еще вопрос: Вы говорите нужно сделать единственное измерение "Газопроводы", но тогда, если отчет делать по регистру как можно будет увидеть изменения по полям Материал составляющей, наименование составляющей, Исполнение, если они в регистр выводиться не будут?
(21) Табличные части не совсем только названием отличаются: там состав ТЧ немного разный, поэтому пришлось создавать для каждой составляющей газопровода разные ТЧ...теперь пытаюсь сделать по Вашему совету - с одним документом и одним измерением в РС, и появляется ошибка: "Запись с такими ключевыми полями существует"...я так понимаю это связано с тем что газопровод 3 раза записывается и запись перестает быть уникальной
(22)
Вестимо, что эта информация есть в документе :)
Т.е. фактически, в регистре хранится последний документ для газопровода на дату.
(23) Период с точностью до секунды поставьте и не забывайте его указывать.
но тогда, если отчет делать по регистру как можно будет увидеть изменения по полям Материал составляющей, наименование составляющей, Исполнение, если они в регистр выводиться не будут?
Вестимо, что эта информация есть в документе :)
Т.е. фактически, в регистре хранится последний документ для газопровода на дату.
(23) Период с точностью до секунды поставьте и не забывайте его указывать.
Какие измерения в регистре?
При проведении Акта выверки в регистр попадают все составляющие газопровода, или только измененные? При втором варианте, если какую-то составляющуюмыши съели при вводе указали ошибочно, то как отмечается, что ее нет?
При проведении Акта выверки в регистр попадают все составляющие газопровода, или только измененные? При втором варианте, если какую-то составляющую
Может быть я сейчас Америку не открою ни для кого, но при изменении числового параметра (диаметр, количество или длина) запись при формировании отчета заменяется (например в вводеВЭксп длина была 6 в Акте изменили на 7);
А если поменять именно текстовую запись (или и текстовую и числовую) (наименование, материал или исполнение), тогда запись при формировании отчета добавляется
А если поменять именно текстовую запись (или и текстовую и числовую) (наименование, материал или исполнение), тогда запись при формировании отчета добавляется
Что-то все равно ничего не выходит..переделал структуру документа: сделал одну ТЧ и поместил туда все возможные показатели составляющих газопровода, составил отчет вот таким запросом
и нифига..
P.S. без Временных таблиц тоже делал...результат один - выводятся данные по двум документам из РС....
P.S. 2: период в отчете указываю перед формированием
ВЫБРАТЬ
СоставГазопроводаСостав.Наименование КАК Наименование,
СоставГазопроводаСостав.Материал КАК Материал,
СоставГазопроводаСостав.ДлинаТрубы КАК ДлинаТрубы,
СоставГазопроводаСостав.ТипКрана КАК ТипКрана,
СоставГазопроводаСостав.ИзолирующаяПрокладкаФланца КАК ИзолирующаяПрокладкаФланца,
СоставГазопроводаСостав.Исполнение КАК Исполнение,
СоставГазопроводаСостав.Диаметр КАК Диаметр,
СоставГазопроводаСостав.Количество КАК Количество
ПОМЕСТИТЬ ДокТЧ
ИЗ
Документ.СоставГазопровода.Состав КАК СоставГазопроводаСостав
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ИзменениеСоставаГазопроводаСрезПоследних.Газопроводы КАК Газопроводы,
ДокТЧ.Наименование КАК Наименование,
ДокТЧ.Материал КАК Материал,
ДокТЧ.ДлинаТрубы КАК ДлинаТрубы,
ДокТЧ.ТипКрана КАК ТипКрана,
ДокТЧ.ИзолирующаяПрокладкаФланца КАК ИзолирующаяПрокладкаФланца,
ДокТЧ.Исполнение КАК Исполнение,
ДокТЧ.Диаметр КАК Диаметр,
ДокТЧ.Количество КАК Количество
ИЗ
РегистрСведений.ИзменениеСоставаГазопровода.СрезПоследних КАК ИзменениеСоставаГазопроводаСрезПоследних,
ДокТЧ КАК ДокТЧ
Показатьи нифига..
P.S. без Временных таблиц тоже делал...результат один - выводятся данные по двум документам из РС....
P.S. 2: период в отчете указываю перед формированием
(29)
ВЫБРАТЬ
РАЗЛИЧНЫЕ
ИзменениеСоставаГазопроводаСрезПоследних.Газопроводы КАК Газопроводы
,ИзменениеСоставаГазопроводаСрезПоследних.Период КАК Период
,ИзменениеСоставаГазопроводаСрезПоследних.Регистратор КАК Регистратор
ПОМЕСТИТЬ СоставаГазопроводаСрезПоследних
ИЗ
РегистрСведений.ИзменениеСоставаГазопровода.СрезПоследних КАК ИзменениеСоставаГазопроводаСрезПоследних
;
ВЫБРАТЬ
СоставаГазопроводаСрезПоследних.Газопроводы КАК Газопроводы,
ДокТЧ.Наименование КАК Наименование,
ДокТЧ.Материал КАК Материал,
ДокТЧ.ДлинаТрубы КАК ДлинаТрубы,
ДокТЧ.ТипКрана КАК ТипКрана,
ДокТЧ.ИзолирующаяПрокладкаФланца КАК ИзолирующаяПрокладкаФланца,
ДокТЧ.Исполнение КАК Исполнение,
ДокТЧ.Диаметр КАК Диаметр,
ДокТЧ.Количество КАК Количество
ИЗ
СоставаГазопроводаСрезПоследних
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СоставГазопровода.Состав КАК ДокТЧ
ПО СоставаГазопроводаСрезПоследних.Регистратор=ДокТЧ.Ссылка
ГДЕ (СоставаГазопроводаСрезПоследних.Газопроводы ,СоставаГазопроводаСрезПоследних.Период) В (ВЫБРАТЬ Газопроводы, MAX(Период) Период ИЗ СоставаГазопроводаСрезПоследних СГРУППИРОВАТЬ ПО Газопроводы)
;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот