Имя: Пароль:
1C
1С v8
Запрос
,
0 Clown
 
02.03.12
17:14
Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ
       |    ПриборыУчета.Владелец.Владелец КАК Контрагент,
       |    ПриборыУчета.Владелец КАК ОбъектВодопотребления,
       |    ПриборыУчета.Ссылка КАК Водомер,
       |    ПриборыУчета.ВидРасчета КАК ВидРасчета,
       |    ЕСТЬNULL(ПоказанияПриборовУчетаСрезПоследних.Показание, 0) КАК Показание,
       |    ПоказанияПриборовУчетаСрезПоследних.Период КАК Период,
       |    ЕСТЬNULL(ПоказанияПриборовУчетаСрезПоследних.Потребление, 0) КАК Потребление
       |ИЗ
       |    Справочник.ПриборыУчета КАК ПриборыУчета
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияПриборовУчета.СрезПоследних(&Дата,) КАК ПоказанияПриборовУчетаСрезПоследних
       |        ПО (ПоказанияПриборовУчетаСрезПоследних.ПриборУчета = ПриборыУчета.Ссылка)
       |            И ПриборыУчета.Владелец.Владелец = ПоказанияПриборовУчетаСрезПоследних.Контрагент
       |
       |УПОРЯДОЧИТЬ ПО
       |    ПриборыУчета.Владелец.Владелец.Код,
       |    ПриборыУчета.Владелец.Владелец,
       |    ПриборыУчета.Ссылка,
       |    ПриборыУчета.Владелец.НаселенныйПункт.Код,
       |    ПриборыУчета.Владелец.Улица.Код,
       |    ПриборыУчета.Владелец.Дом,
       |    ПриборыУчета.Владелец.Корпус,
       |    ПриборыУчета.Владелец.Квартира";
       Запрос.УстановитьПараметр("Дата", Документ.Дата);
1 Clown
 
02.03.12
17:15
Проблема в том то что идут двойные записи по водомер,где не могу понять ошибка,подскажите плиз
2 rbcvg
 
02.03.12
17:15
молодец
3 alexandrius
 
02.03.12
17:15
красивый какой...а че собственно нужно?
4 Beduin
 
02.03.12
17:16
(0) Посказываю, двойные записи по водомер во второй таблице(которая не справочник)
5 alexandrius
 
02.03.12
17:17
может еще измерения у регистра какие есть? которые как раз записи и двоит...
6 Clown
 
02.03.12
17:17
Беру все приборы учета из справочника и смотрю последние данные по ним это показание и потребление
7 Clown
 
02.03.12
17:18
Измерения: Контрагент,приборыУчета и видрасчета
8 hhhh
 
02.03.12
17:18
(6) регистр сведений изучи, сколько у него измерений?
9 hhhh
 
02.03.12
17:19
(7) ну вот. Что ты нам мозг паришь? У тебя же еще измерение "видрасчета".
10 Clown
 
02.03.12
17:19
3
11 Beduin
 
02.03.12
17:20
(9) Он не мозг парит а зрение.
У него даже в полях, которые запрос выдаст будут видны отличия в строках.
12 Ненавижу 1С
 
гуру
02.03.12
17:22
разные виды расчета
13 Clown
 
02.03.12
17:22
так там и двоит где одинаковые поля контрагент,приборучета и вид расчета...
Значит надо так?
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияПриборовУчета.СрезПоследних(&Дата,) КАК ПоказанияПриборовУчетаСрезПоследних
       |        ПО (ПоказанияПриборовУчетаСрезПоследних.ПриборУчета = ПриборыУчета.Ссылка)
       |            И ПриборыУчета.Владелец.Владелец = ПоказанияПриборовУчетаСрезПоследних.Контрагент
       |            И ПриборыУчета.ВидРасчета = ПоказанияПриборовУчетаСрезПоследних.ВидРасчета
14 hhhh
 
02.03.12
17:23
(13) издеваешься уже. Пятница
15 alexandrius
 
02.03.12
17:24
|            И ПриборыУчета.ВидРасчета = ПоказанияПриборовУчетаСрезПоследних.ВидРасчета
эта строчка не факт что правильно отработает, если бы ВидРасчета хранился в справочнике не добавляли бы в регистр..
16 alexandrius
 
02.03.12
17:24
кидай скрин РС где записи двоятся
17 Clown
 
02.03.12
17:28
А прям сюда нельзя прикрепить картинку да?
18 КМ155
 
02.03.12
17:29
(17) прямо сюда разрешено только девушкам
19 Clown
 
02.03.12
17:30
20 Clown
 
02.03.12
17:31
там где номера первого столбца 3
21 adron
 
02.03.12
17:32
Задай конкретное значение ВидРасчета а параметрах регистра или сгруппируй отчет по ВидРасчета, если параметр не известен
22 Clown
 
02.03.12
17:35
23 alexandrius
 
02.03.12
17:39
на самом деле не совсем он сторчки двоит, а почему у тебя показания разные? если бы он их двоил то было бы одинаковые, какое правильное или должно суммироваться?
24 Clown
 
02.03.12
17:39
конкретного значения нету,Если группировать то и сумма 2 записей суммируется
25 Clown
 
02.03.12
17:40
они не суммироваться должны,должно быть последние данные на дату,т.е. какое движение по этим приборам было последние то и вносить
26 adron
 
02.03.12
17:41
ну так добавь условие соединения "И ПриборыУчета.ВидРасчета = ПоказанияПриборовУчетаСрезПоследних.ВидРасчета" и будет тебе счастье
27 Clown
 
02.03.12
17:43
в 15 ответили что не прокатит
28 Humandra
 
02.03.12
17:43
(25) Что-то подсказывает мне, что либо они таки должны суммироваться, либо должен быть отбор или соединение по виду расчета. :)
Вид расчета это что? "Общедомовой" и "квартирный"? Или что-то другое?
29 alexandrius
 
02.03.12
17:43
не факт что прокатит, может и прокатить...
30 alexandrius
 
02.03.12
17:45
(28) судя по картинке: 1) Водоснабжение 2) Водоснабжение + водоотведение
31 adron
 
02.03.12
17:45
Посмотри храниться ли ВидРасчета в справочнике. Если храниться - используй доп. условие соединения
32 Humandra
 
02.03.12
17:45
(27) У конкретного прибора - железки, которая стоит у абонента - могут быть показания одновременно по двух видам расчета?
33 Humandra
 
02.03.12
17:46
(30) А, понятно. Картинку не смотрела, сорри. Сейчас подумаю.
34 alexandrius
 
02.03.12
17:46
(29) не факт, что НЕ прокатит
35 Humandra
 
02.03.12
17:48
(34) Скорее всего - не прокатит, так как скорее всего такой признак действующего на дату вида расчета - хранится где-то еще в одном регистре сведений или что-то типа.
36 adron
 
02.03.12
17:49
(25) "они не суммироваться должны,должно быть последние данные на дату,т.е. какое движение по этим приборам было последние то и вносить"

Тут нужен вложенный запрос с группировкой по периоду, функция группировки "Максимум". А затем соединение справочника с вложенным запросом - доп. условие соединение по периоду.

Если по двум разным ВидРачета не бывает записей в один и тот же период - то вышеописанный вариант прокатит.
37 Clown
 
02.03.12
17:49
попробовал так, все хорошо но теперь показаний самих нету
38 Humandra
 
02.03.12
17:50
Короче, в твоем случае нельзя брать СрезПоследних, а надо заменять его на свой запрос поиска последнего значения.
39 Clown
 
02.03.12
17:51
по двум разным видарасчета записи есть
40 Clown
 
02.03.12
17:54
как будет выглядеть в коде че то врублюсь как пишется
41 Clown
 
02.03.12
17:54
не могу врублюсь
42 Clown
 
02.03.12
17:55
ой ,не могу короче врубиться
43 alexandrius
 
02.03.12
17:55
а вообще странно что у него записи двоятся под номером 3, т.к все 3 измерения совпадают...
может все таки покажешь скрин регистра сведений с отбором по прибору учета и контранента(без вида расчета) по строчке 3 ???
44 adron
 
02.03.12
17:57
(25) точнее вот так:

Вложенный запрос с группировкой по периоду, функция группировки "Максимум". А затем соединение ВЛОЖЕННОГО ЗАПРОСА запроса с регистром - доп. условие соединение по периоду.

Если по двум разным ВидРачета не бывает записей в один и тот же период - то вышеописанный вариант прокатит.
45 Clown
 
02.03.12
18:00
(43)так этот скрин и есть по двум
46 alexandrius
 
02.03.12
18:00
Кстати а ты в запросе замени эту строчку на такую:

 |    ПриборыУчета.ВидРасчета КАК ВидРасчета,

 |    ЕСТЬNULL(ПоказанияПриборовУчетаСрезПоследних.ВидРасчета , 0) КАК ВидРасчета ,

как мне кажется взлетит.
47 Clown
 
02.03.12
18:01
(44)записи есть на 3 видам расчета
48 Clown
 
02.03.12
18:03
(46)Это надо добавить? И ПриборыУчета.ВидРасчета = ПоказанияПриборовУчетаСрезПоследних.ВидРасчета
49 Humandra
 
02.03.12
18:04
(44) А если даже есть на одну и ту же дату две записи по разным видам расчета, то можно так:

ВЫБРАТЬ Регистр.Прибор
   , МАКСИМУМ(Регистр.Показание)
ИЗ Регистр
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
   (ВЫБРАТЬ Регистр.Прибор КАК Прибор
       , МАКСИМУМ(Регистр.Период) КАК Период
       ИЗ Регистр КАК Регистр
       СГРУППИРОВАТЬ ПО Регистр.Прибор
   ) КАК Запрос
ПО Запрос.Прибор = Регистр.Прибор
   И Запрос.Период = Регистр.Период
СГРУППИРОВАТЬ ПО Регистр.Прибор
50 Humandra
 
02.03.12
18:05
(49) Весь запрос было лень писать :), но думаю, идея понятна
51 alexandrius
 
02.03.12
18:05
(48) нет, в поле выборки где строкчка:
          ПриборыУчета.ВидРасчета КАК ВидРасчета,
заменить ее на
   |    ЕСТЬNULL(ПоказанияПриборовУчетаСрезПоследних.ВидРасчета , 0) КАК ВидРасчета ,

т.е тебе вид расчета надо тянуть из регистра, и они не должны после этого двоиться.
52 Humandra
 
02.03.12
18:06
(49) Естественно, в внутреннем запросе - ограничитель по дате
53 Humandra
 
02.03.12
18:08
ГДЕ Регистр.Период <= &Дата (или строго <, в зависимости от предметной логики)
54 Clown
 
02.03.12
18:09
(51)Не прокатило
55 alexandrius
 
02.03.12
18:09
(49) фига ты намудрил, только думаю ему это не нужно, все должно обойтись простым соединением, и ничего у него не двоится.
56 alexandrius
 
02.03.12
18:10
(54) и что совсем ничего не изменилось? все также двоит?
57 Humandra
 
02.03.12
18:12
(49) Не совсем правильно написала, кстати. Такой запрос прокатит, если надо только одно значение получить (показание).
Если более одного - то получаем
ВЫБРАТЬ Регистр.Прибор
   , МАКСИМУМ(Регистр.ВидРасчета)
ИЗ Регистр
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
   (ВЫБРАТЬ Регистр.Прибор КАК Прибор
       , МАКСИМУМ(Регистр.Период) КАК Период
       ИЗ Регистр КАК Регистр
       СГРУППИРОВАТЬ ПО Регистр.Прибор
   ) КАК Запрос
ПО Запрос.Прибор = Регистр.Прибор
   И Запрос.Период = Регистр.Период
СГРУППИРОВАТЬ ПО Регистр.Прибор

И снова соединяем с регистром уже по ПО
Запрос.Прибор = Регистр.Прибор
   И Запрос.Период = Регистр.Период
   И Запрос.ВидРасчета = Регистр.ВидРасчета
58 Clown
 
02.03.12
18:12
да,только вид расчета теперь пустые значения
59 Humandra
 
02.03.12
18:13
(55) Если я правильно понимаю задачу, то простым соединением не обойдешься, так как на одну дату могут (и скорее всего и будут) писаться начисления по одному и тому же прибору, но разным видам расчета. И если при этом надо брать только одну из строчек - то только примерно так. Ну, может как-то оптимальнее можно, надо подумать еще...
60 alexandrius
 
02.03.12
18:16
судя по документу который он заполняет(опять же на картинке) ему надо по разным Видам расчета свою строчку, а не одну.
Т.е если по прибору вид расчета в регистре:
1) водоотсчет
2) водоотвод
то в доке должно быть 2 строчки
61 Clown
 
02.03.12
18:17
Еще спалил, когда документы предыдущие делаешь не проведенными, а предпоследний остается проведенным то все норм, и все заполняется ок
62 Humandra
 
02.03.12
18:23
(60) У меня картинка его не открывается :(
Если так, то все вообще элементарно, чисто через срез последних

А если как я подумала, то полный запрос такой:


ВЫБРАТЬ Прибор.Ссылка
   , Прибор.Наименование
   , Показания.Показание
   , Показание.Период
   // и так далее
ИЗ Справочник.ПриборыУчета Прибор
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияПриборовУчета Показания
ПО Прибор.Ссылка = Показания.Прибор
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
   (ВЫБРАТЬ Регистр.Прибор
           , МАКСИМУМ(Регистр.Период) КАК Период
           , МАКСИМУМ(Регистр.ВидРасчета) КАК ВидРасчета
       ИЗ РегистрСведений.ПоказанияПриборовУчета
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ
           (ВЫБРАТЬ Регистр.Прибор КАК Прибор
               , МАКСИМУМ(Регистр.Период) КАК Период
               ИЗ РегистрСведений.ПоказанияПриборовУчета КАК Регистр
           СГРУППИРОВАТЬ ПО Регистр.Прибор
       ) КАК ПоследниеДатыПоказаний
       ПО ПоследниеДатыПоказаний.Прибор = Регистр.Прибор
           И ПоследниеДатыПоказаний.Период = Регистр.Период
       СГРУППИРОВАТЬ ПО Регистр.Прибор) Запрос
ПО Показания.Прибор = Запрос.Прибор
   И Показания.Период = Запрос.Период
   И Показания.ВидРасчета = Запрос.ВидРасчета
63 Clown
 
02.03.12
18:24
Хотя нет не должно быть за один и тот же период 2 прибора с разными видрасчета
64 Humandra
 
02.03.12
18:26
(62) На баги не тестировала, писала в блокноте :) Но вроде ничего не потеряла

(63) Мой запрос гарантированно получит именно последнюю запись (до тех пор, пока в регистре только 2 измерения, конечно). Если в сутках будет две записи по двум видам расчета, то возьмет только по одному (с максимальным идентификатором вида расчета)
65 Humandra
 
02.03.12
18:28
(64) Короче, для обоих задач мой вариант должен работать (если соединения не потеряла :)). Но если задача проще - то запрос можно упростить тоже, будет попроще и пошустрее.
66 alexandrius
 
02.03.12
18:34
(63) а от чего зависит этот Вид расчета, откуда заполняется и как часто меняется?
67 Humandra
 
02.03.12
18:49
О, наконец у меня картинка открылась :)
И я наконец обратила внимание, что в исходном запросе было так:
ВЫБРАТЬ
ПриборыУчета.ВидРасчета КАК ВидРасчета

То есть таки ВидРасчета хранится в приборе. Он изменяется? Если по прибору было ВидРасчета = "Водоснабжение", а стало "Водоснабжение, водоотведение", то в регистре показания по старым датам останется "Водоснабжение", по новым будет "Водоснабжение, водоотведение"? Так?
А если были показания по виду расчета "Водоснабжение", вид расчета в приборе изменили на "Водоснабжение, водоотведение", но новых показаний по новому виду расчета не приняли, то что мы должны увидеть? Показания по старому виду расчета, или ничего?
68 Humandra
 
02.03.12
18:52
(51) Они будут все равно двоиться, но зато покажут правильные виды расчета.
То есть если по моему примере из (67) - когда есть старые показания по старому виду расчета и новые по новому - сейчас оно показывает по одному прибору "Водоотведение" дважды, а если сделать как в (51), то оно покажет "Водоотведение" - одна строка, "Водоотведение, водоснабжение" - другая строка, и последние показания по каждому виду расчета.
69 alexandrius
 
02.03.12
19:00
в общем автор пропал, а мы гадаем как может быть, все пора бухать....всем пятницы
70 Clown
 
02.03.12
20:38
каждый прибор по своему виду расчета идет и не меняется
71 Clown
 
02.03.12
20:39
В общем я выгрузил в таблицузначений там сортировал,потом сравнивал если все 3 измерения совпадают то в табличную часть не выгружаю
72 Humandra
 
02.03.12
21:04
(71) Зачем работать с ТЗ, если быстрее и меньше памяти скушает - при работе с запросом.
Кстати, если ты выгрузил запрос из (0) и в ТЗ сортируешь его, то показания ты какие берешь? Надо брать тогда уж с максимальным периодом.

А вообще, если 100% - вид расчета не меняется вообще у прибора - то правильно будет делать таки как в (13). Но если вид расчета таки поменяется - то покажет 0 показания.
2 + 2 = 3.9999999999999999999999999999999...