Имя: Пароль:
1C
1С v8
Проблемы с построением отчета на СКД
0 Ayatori
 
09.06.16
04:28
Здравствуйте!
Я в 1С новичок, возникла задача построить простой отчет на СКД, который я, с горем пополам, реализовал.
Набор данных один, данные получаются следующим запросом из одного документа:
"ВЫБРАТЬ
    АктМонтажаПсевдоним.ПроцентВЗарплату,
    АктМонтажаПсевдоним.ДатаМонтажа,
    АктМонтажаПсевдоним.Ссылка,
    АктМонтажаПсевдоним.Монтажники.(
        ФИО.Наименование
    )
ИЗ
    Документ.АктМонтажа КАК АктМонтажаПсевдоним
ГДЕ
    АктМонтажаПсевдоним.ДатаМонтажа >= &НачалоПериода
    И АктМонтажаПсевдоним.ДатаМонтажа <= &КонецПериода"
Параметры "НачалоПериода" и "КонецПериода" проброшены на форму и заполняются пользователем. Сам отчет выводится таблицей, выглядит он так: http://screencast.com/t/oktKoihLzWp
Теперь встала другая задача - появился новый документ с похожей структурой, реквизиты для отображения в отчете те же, нужно добавить его в отчет так, чтобы внешне отчет не изменился, добавить данные и поля, но макет оставить как есть(то есть, чтобы в колонку "ПроцентВЗарплату" попадали данные с обоих документов, и т.д.)
Пытался разобраться самостоятельно, но нет понимания изначально - как, например, получать данные - двумя наборами, одним запросом, объединением? Как добавить новые поля и добиться сохранения макета? Подскажите, пожалуйста
1 Cube
 
09.06.16
04:59
(0) Для начала прекрати выбирать табличную часть в качестве поля запроса:

    АктМонтажаПсевдоним.Монтажники.(
        ФИО.Наименование
    )

Чтобы от этого уйти, тебе нужно выбирать не документ, а саму табличную часть. Примерно, так:

"ВЫБРАТЬ
    АктМонтажаМонтажники.Ссылка.ПроцентВЗарплату,
    АктМонтажаМонтажники.Ссылка.ДатаМонтажа,
    АктМонтажаМонтажники.Ссылка,
    АктМонтажаМонтажники.ФИО.Наименование
ИЗ
    Документ.АктМонтажа.Монтажники КАК АктМонтажаМонтажники
ГДЕ
    АктМонтажаПсевдоним.ДатаМонтажа >= &НачалоПериода
    И АктМонтажаПсевдоним.ДатаМонтажа <= &КонецПериода"


Дальше, неплохо было бы, добавить проверку на проведенность документа (если он не проводится, то проверку на пометку удаления) и, заодно заменить условие по периоду на более красивый:

"ВЫБРАТЬ
    АктМонтажаМонтажники.Ссылка.ПроцентВЗарплату,
    АктМонтажаМонтажники.Ссылка.ДатаМонтажа,
    АктМонтажаМонтажники.Ссылка,
    АктМонтажаМонтажники.ФИО.Наименование
ИЗ
    Документ.АктМонтажа.Монтажники КАК АктМонтажаМонтажники
ГДЕ
    АктМонтажаМонтажники.Ссылка.ДатаМонтажа МЕЖДУ &НачалоПериода И &КонецПериода
    И АктМонтажаМонтажники.Ссылка.Проведен"


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

"ВЫБРАТЬ
    АктМонтажаМонтажники.Ссылка.ПроцентВЗарплату,
    АктМонтажаМонтажники.Ссылка.ДатаМонтажа,
    АктМонтажаМонтажники.Ссылка,
    АктМонтажаМонтажники.ФИО.Наименование
ИЗ
    Документ.АктМонтажа.Монтажники КАК АктМонтажаМонтажники
ГДЕ
    АктМонтажаМонтажники.Ссылка.ДатаМонтажа МЕЖДУ &НачалоПериода И &КонецПериода
    И АктМонтажаМонтажники.Ссылка.Проведен

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВторойДокументИмяТЧ.Ссылка.ПроцентВЗарплату,
    ВторойДокументИмяТЧ.Ссылка.ДатаМонтажа,
    ВторойДокументИмяТЧ.Ссылка,
    ВторойДокументИмяТЧ.ФИО.Наименование
ИЗ
    Документ.ВторойДокумент.ИмяТЧ КАК ВторойДокументИмяТЧ
ГДЕ
    ВторойДокументИмяТЧ.Ссылка.ДатаМонтажа МЕЖДУ &НачалоПериода И &КонецПериода
    И ВторойДокументИмяТЧ.Ссылка.Проведен"


Вуаля.
И в заключении хотелось бы сказать: правильным решением в данной ситуации будет создать регистр накопления с видом "Обороты", измерением "Монтажник" и ресурсом "ПроцентВЗарплату". Пишем в этот регистр накопления с обоих документов и считываем простым запросом (без документов с группировкой по дням):

"ВЫБРАТЬ
    ИмяРегистраОбороты.ПроцентВЗарплату
    ИмяРегистраОбороты.Период КАК ДатаМонтажа,
    ИмяРегистраОбороты.Физлицо.Наименование КАК ФИОНаименование
ИЗ
    РегистрНакопления.ИмяРегистра.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ИмяРегистраОбороты"


Или таким (с документами без группировки по дням, аналогично твоему изначальному запросу):

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


И, когда есть регистр, то тебе пофиг, сколько ещё документов будут в него писать - отчет переделывать не придется. Регистры для этого и придуманы.
2 Ayatori
 
09.06.16
07:17
(1) Спасибо большое, переписал запрос, следуя рекомендациям - документы попадают в отчет, только строчка почему-то пустая:
http://screencast.com/t/XXuADLuL6
Причем по клику открывается нужный документ, как должно быть, и дата попадает в требуемый диапазон, но в отчете не прописывается, не подскажете, куда заглянуть?
3 Ayatori
 
09.06.16
08:22
(1) Поправил, поля с датами назывались по-разному, теперь все отлично, спасибо!
Основная теорема систематики: Новые системы плодят новые проблемы.