Имя: Пароль:
1C
1С v8
Как поставить условие в отчете на СКД
,
0 Oleg102
 
24.07.13
12:43
Всем привет! Помогите настроить отчет. Всю голову сломал. Есть отчет по проживающим в общежитие. Мне надо настроить отчет определенным образом.

Как сейчас:
У меня есть документ "Карточка заселения" где указываются данные
1. "Проживающий"
2. "Дата заселения"
3. "Дата выселения"

Так вот человек заселяется указывается кто он и ставится "Дата заселения" и такой нюанс, что "Дата выселения" ставится только тогда когда он выезжает по факту. ТАК ВОТ

Сейчас сделал отчет который показывает:

---------------------------------------------------------------------
Проживающий         |Дата заселения|Дата выселения| Кол. дней  |
Иванов Иван Иванович|  02.07.2013  |              |            |
---------------------------------------------------------------------

Дата выселения ставится в отчете тогда когда, если есть в документе движение с проставленной "Дата выселения" или если нет движения и указывается в отчете "&КонецПериода", то тогда в пустых датах выселения проставляется дата конца периода от чего и считается уже кол дней прожитых.

Вот такой вид имеет:

Начало периода - 01.07.2013
Конец периода - 31.07.2013
---------------------------------------------------------------------
Проживающий         |Дата заселения|Дата выселения| Кол. дней  |
Иванов Иван Иванович|  02.07.2013  | 31.07.2013   |    29      |
---------------------------------------------------------------------

Теперь к самому главному:

Мне надо как то сделать вид отчета такой.
Человек как видно выше "Иванов Иван Иванович" заселился "02.07.2013" и дата выселения в документе "карточка заселения" не стоит. Прошел месяц с тех пор был сформирован отчет за месяц, который тоже находится выше.
Теперь начинается месяц "Август" и число у нас например "15.08.2013" и человек до сих пор живет. НО мне надо подсчитать, сколько он прожил (Период с "01.08.2013" до "15.08.2013"). Мне в данном отчете нужно, что бы когда я ставлю "Дата начала" и "дату конца", выбрало и добавило в отчет только тех людей у кого не проставлена "Дата выселения" в документе "карточка зеселения" и дата уже отсчета в отчете стояла с "01.08.2013"

Имел такой вид:

Начало периода - 01.08.2013
Конец периода - 15.08.2013
---------------------------------------------------------------------
Проживающий         |Дата заселения|Дата выселения| Кол. дней  |
Иванов Иван Иванович|  01.08.2013  | 15.08.2013   |    15      |
---------------------------------------------------------------------

А если стоит "Дата выселения" в документе то устанавливалась в отчете его реальная "дата выселения" по документу, но считала опять же количество дней уже исходя из "Начала периода", так как это новый месяц уже и считать количество прожитых дней надо с начало нового месяца.

Как это все сделать просто незнаю и вообще возможно ли. Думал делать закрытия месяца, но это все так трудоемка, так как нужно сделать очень много документов движения. Это сделать выезд проживающего, как будто сдача белья и много дополнительных услуг которые присутствуют в документе и после создать новый с датой первого числа нового месяца.

Подскажите как это можно реализовать в отчете! Уже голова болит. Может у кого есть какие идеи. Спасибо.
1 Oleg102
 
24.07.13
13:04
Кто нибудь. Хелпппппппппп
2 Rovan
 
гуру
24.07.13
13:06
ВЫБОР КОГДА датавыселения = ДАТАВРЕМЯ(1,1,1)
ТОГДА КонецПериода
ИНАЧЕ датавыселения
КОНЕЦ
3 Oleg102
 
24.07.13
13:09
(2) У меня такое уже условие стоит на Дата выселения где проставляется дата конца периода. Я же написал в вопросе. Или создать еще один свой реквизит в запросе отчета?
4 Oleg102
 
24.07.13
13:25
Походу ни у кого нет идей. =(
5 Oleg102
 
24.07.13
15:54
Подскажите Можно как то сделать 2-а движениея в одном документе. Это "Приход" и "Расход" По определным условиям. Например статус. Если стоит статус "выполняется" то приход если закрыт и провести "то расход". Возможно так сделать. что то пробовал не получается.
6 Oleg102
 
24.07.13
15:56
т.е. мне хочется сделать что бы не делать дополнительный документ выезд проживающего. А поставить дату окончания и статус закрыт. И сделалось движение по документу расход. Что бы было смотришь в регистр сведений и было видно что был приход +, а потом был расход -
7 Oleg102
 
29.07.13
08:53
Люди добрые помогите кто нибудь
9 PuhUfa
 
29.07.13
08:59
когда датазаселения < началопериода
тогда начлопериода
иначе датазаселения
конец
10 Oleg102
 
29.07.13
09:05
(9) это в условие добавить? Или в реквизит свой создать
11 Oleg102
 
29.07.13
09:11
У меня  дата начало проставляется. Мне надо как то этих людей перенести на следующий месяц получается. Когда я ставлю дату начало периода то в отчет документы не попадают которые были созданы в предыдущем месяце. Мне надо как сделать так что бы люди эти отображались  и в следующем месяце по определенным условиям. Статус "выполняется" или "закрыт"
12 Oleg102
 
29.07.13
09:11
Статус документа
13 Oleg102
 
29.07.13
09:15
Хочется спросить вообще как то это возможно сделать? Что то мне кажется это не реально сделать в отчете, так как надо даже если поменяется статус на закрыт данный проживающий все равно должен отображаться в этом месяце
14 Asmody
 
29.07.13
09:15
(0) гляди в сторону регистров расчета. Если не сломаешь мозг, будет тебе счастье
15 Asmody
 
29.07.13
09:17
(13) если есть доступ к типовым, посмотри как в ЗУПе сделано состояние работника
16 Asmody
 
29.07.13
09:22
И еще: строить отчеты по документам — последнее дело. Отчет надо строить по регистрам.
17 be-may
 
29.07.13
09:23
(11) а какие движения делает твой документ ?
в отчете идет обращение к регистру или к табличной части самих документов?

и вообще, давай уже текст запроса, а то очень сложно понять твою писанину в (0)
18 Oleg102
 
29.07.13
09:45
Ребята я с планшета сижу. Инета на работе нет до 1 августа. А собираю я данные не с документов а с регистров тоже. Я походу понял как сделать спасибо за идею asmody по регистру расчетов.  Буду пробовать делать.  Позже выкину свой запрос
19 Oleg102
 
29.07.13
09:48
У меня просто организация платит за проживание полностью и оплату за проживание хотя есть и цена за сутки и сумма рассчитывалась уже в отчете поэтому даже не рассматривал оплату и расчет в документе. Если делать оплату по факту тогда будет и движение документов в нужные моменты времени. Думаю должно должно будет получится. Позже отпишу результат как получится
20 Oleg102
 
01.08.13
14:29
Решил данный вопрос. Сделал в настройках отчета СКД, на НачалоПериода поставил выражение "ДобавитьКДате(&ДатаНачала,"Месяц",-1)" т.е. уже вытягиваю с прошлого месяца людей на следующий месяй по условию статуса документа "Выполняется" после когда сдается отчет в конце месяца. делается как бы закрытие месяца с помощью "Групповой обработки документов" по условиям отбираются люди которые уже выселены и статус стоит "выполняется" ставим им статус "закрыт" и проводим. тем самым. Уже этих людей в следующий месяц не включаем, а кто проживает переносим на следующий месяц. Помогите решить другую проблему у меня в этот отчет выходят одно движение которое должно замещатся другим.

Как сейчас:
Есть документ "Карточка заселения" и из этого документа выходят данные в мой отчет. и Есть документ "перемещение проживающего", где человек перемещается между комнатами и есть отдельные отчет где это отражается. но исходя из этого документа попадают в в мой отчет где идет уже идентичная первой строчки. т.е. происходит задвоение.

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

Мне нужно как то сделать условие, но не получается почему то , пишет ошибки и ошибки. Может как то не правильно делаю. Свой код запроса отчета прилагаю

////////////////////////////////////////////////////////////
ВЫБРАТЬ
    УчетПроживающихОстаткиИОбороты.Проживающий КАК Проживающий,
    УчетПроживающихОстаткиИОбороты.Проживающий.Подразделение КАК Подразделение,
    УчетПроживающихОстаткиИОбороты.Проживающий.Должность КАК Должность,
    УчетПроживающихОстаткиИОбороты.Проживающий.Организация КАК Организация,
    УчетПроживающихОстаткиИОбороты.Категория,
    УчетПроживающихОстаткиИОбороты.КойкоМесто КАК КойкоМесто,
    УчетПроживающихОстаткиИОбороты.КойкоМесто.Родитель КАК Вагон,
    ВЫБОР
        КОГДА УчетПроживающихОстаткиИОбороты.КойкоМесто.Родитель ЕСТЬ НЕ NULL
            ТОГДА "Зав. №" + " " + "[" + УчетПроживающихОстаткиИОбороты.КойкоМесто.Родитель.ЗаводскойНомер + "]" + " " + "Инд. №" + " " + "[" + УчетПроживающихОстаткиИОбороты.КойкоМесто.Родитель.ИндНомер + "]"
        ИНАЧЕ 0
    КОНЕЦ КАК НомерВагона,
    УчетПроживающихОстаткиИОбороты.КойкоМесто.Родитель.Родитель КАК Общежитие,
    СУММА(УчетПроживающихОстаткиИОбороты.КоличествоМестПриход) КАК КоличествоПроживающих,
    МАКСИМУМ(ВЫБОР
            КОГДА НАЧАЛОПЕРИОДА(СведенияОДоговорахСрезПоследних.ДатаНачала, ДЕНЬ) <= &ДатаНачала
                ТОГДА &ДатаНачала
            ИНАЧЕ НАЧАЛОПЕРИОДА(СведенияОДоговорахСрезПоследних.ДатаНачала, ДЕНЬ)
        КОНЕЦ) КАК ДатаЗаселения,
    МАКСИМУМ(ВЫБОР
            КОГДА НАЧАЛОПЕРИОДА(СведенияОДоговорахСрезПоследних.ДатаОкончания, ДЕНЬ) <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                ТОГДА НАЧАЛОПЕРИОДА(СведенияОДоговорахСрезПоследних.ДатаОкончания, ДЕНЬ)
            ИНАЧЕ &КонецПериода
        КОНЕЦ) КАК ДатаВыселения,
    СУММА(СведенияОДоговорахСрезПоследних.СуммаЗаСутки) КАК СуммаЗаСутки,
    ВЫБОР
        КОГДА ПаспортныеДанныеФизЛиц.ФизЛицо ЕСТЬ НЕ NULL
            ТОГДА ПаспортныеДанныеФизЛиц.ДокументСерия + " " + ПаспортныеДанныеФизЛиц.ДокументНомер
        ИНАЧЕ 0
    КОНЕЦ КАК ПаспортныеДанные,
    СведенияОДоговорахСрезПоследних.СостояниеДоговора
ПОМЕСТИТЬ ВТ_Данные
{ВЫБРАТЬ
    Проживающий.*,
    КойкоМесто.*,
    Общежитие.*,
    КоличествоПроживающих}
ИЗ
    РегистрНакопления.УчетПроживающих.ОстаткиИОбороты КАК УчетПроживающихОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОДоговорах.СрезПоследних КАК СведенияОДоговорахСрезПоследних
        ПО (СведенияОДоговорахСрезПоследних.Договор = УчетПроживающихОстаткиИОбороты.Договор)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц
        ПО (ПаспортныеДанныеФизЛиц.ФизЛицо = УчетПроживающихОстаткиИОбороты.Проживающий)
ГДЕ
    УчетПроживающихОстаткиИОбороты.СуммаПриход <> 0

СГРУППИРОВАТЬ ПО
    УчетПроживающихОстаткиИОбороты.Проживающий,
    УчетПроживающихОстаткиИОбороты.КойкоМесто,
    УчетПроживающихОстаткиИОбороты.КойкоМесто.Родитель.Родитель,
    УчетПроживающихОстаткиИОбороты.Проживающий.Подразделение,
    УчетПроживающихОстаткиИОбороты.Проживающий.Должность,
    УчетПроживающихОстаткиИОбороты.Проживающий.Организация,
    УчетПроживающихОстаткиИОбороты.КойкоМесто.Родитель,
    ВЫБОР
        КОГДА УчетПроживающихОстаткиИОбороты.КойкоМесто.Родитель ЕСТЬ НЕ NULL
            ТОГДА "Зав. №" + " " + "[" + УчетПроживающихОстаткиИОбороты.КойкоМесто.Родитель.ЗаводскойНомер + "]" + " " + "Инд. №" + " " + "[" + УчетПроживающихОстаткиИОбороты.КойкоМесто.Родитель.ИндНомер + "]"
        ИНАЧЕ 0
    КОНЕЦ,
    ВЫБОР
        КОГДА ПаспортныеДанныеФизЛиц.ФизЛицо ЕСТЬ НЕ NULL
            ТОГДА ПаспортныеДанныеФизЛиц.ДокументСерия + " " + ПаспортныеДанныеФизЛиц.ДокументНомер
        ИНАЧЕ 0
    КОНЕЦ,
    УчетПроживающихОстаткиИОбороты.Категория,
    СведенияОДоговорахСрезПоследних.СостояниеДоговора
;

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