Имя: Пароль:
1C
1С v8
Сравнение двух реквизитов в запросе, как ?
,
0 never_be
 
26.07.13
11:27
Мне надо в запросе выбрать документы у которых 2 реквизита одинаковые, в конструкторе запроса так сделать не получается, как ?
1 Капитан О
 
26.07.13
11:27
руками
2 Cube
 
26.07.13
11:27
(0) Ты не поверишь... Просто поставь "равно"...
3 Капитан О
 
26.07.13
11:27
(2) он не знает про галку произвольное
4 Jonny_Khomich
 
26.07.13
11:28
типа связь двух таблиц?
5 never_be
 
26.07.13
11:37
(3) Знаю но ругается
Условие в запросе:
Регистратор.СуммаДокумента = Регистратор.СуммаДокументаРасчета

Посылает лесом.
6 Капитан О
 
26.07.13
11:38
(5) и правильно делает. послушай его и сделай правильно
7 Лефмихалыч
 
модератор
26.07.13
11:42
ВЫБРАТЬ
Ссылка
ИЗ Документ.Документ1
ГДЕ Реквизит1 = Реквизит2
8 Maxus43
 
26.07.13
11:47
(5) запрос в студию
9 never_be
 
26.07.13
11:54
(7) У меня чуть не так.
(8) "ВЫБРАТЬ
                       |    Хозрасчетный.Период,
                       |    Хозрасчетный.Регистратор,
                       |    Хозрасчетный.СчетДт,
                       |    Хозрасчетный.СчетКт,
                       |    Хозрасчетный.Сумма КАК Сумма
                       |ИЗ
                       |    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
                       |ГДЕ
                       |    Хозрасчетный.СчетДт = &СчетДт
                       |    И Хозрасчетный.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
                       |    И Хозрасчетный.Регистратор.СуммаДокумента = Хозрасчетный.Регистратор.СуммаДокументаРасчета
                       |
                       |УПОРЯДОЧИТЬ ПО
                       |    Сумма"

Регистратор у меня всегда 1 и тот же тип докуметов, теперь надо выбрать только с одинаковыми реквизитами.
10 Maxus43
 
26.07.13
11:55
(9) И Выразить(Хозрасчетный.Регистратор Как Документ.ТвойДок).СуммаДокумента
11 Капитан О
 
26.07.13
11:56
(9) марш читать про виртуальные таблицы
12 never_be
 
26.07.13
11:57
(10) Это где писать ? :) И не вижу сравнения (сори я нуп еще в 1с),
13 Maxus43
 
26.07.13
12:00
|    И Хозрасчетный.Регистратор Ссылка Документ.ТвойДок
|    И Выразить(Хозрасчетный.Регистратор Как Документ.ТвойДок).СуммаДокумента = Выразить(Хозрасчетный.Регистратор Как Документ.ТвойДок).СуммаДокументаРасчета
14 never_be
 
26.07.13
12:09
(13) Что-то не получается, мне отбирать конкретные типы документов не надо, они там всегда одного типа.
15 never_be
 
26.07.13
12:09
В И Выразить(Хозрасчетный.Регистратор Как дальше не знаю что писать правильно.
16 Maxus43
 
26.07.13
12:10
(14) они одного, а поле РЕГИСТРАТОР составного. Что не получается?
17 Fragster
 
модератор
26.07.13
12:10
(11) зачем тут виртуальные таблицы?
18 Maxus43
 
26.07.13
12:11
(17) ну период не помешало бы загнать туда, + периодичность Регистратор
19 Fragster
 
модератор
26.07.13
12:11
(9) без учета (13) что не работает?
20 Капитан О
 
26.07.13
12:12
(17) для оборотов
21 never_be
 
26.07.13
12:12
Вот что написал, и не работает(думаю и не должно :) )


        Запрос.Текст = "ВЫБРАТЬ
                       |    Хозрасчетный.Период,
                       |    Хозрасчетный.Регистратор,
                       |    Хозрасчетный.СчетДт,
                       |    Хозрасчетный.СчетКт,
                       |    Хозрасчетный.Сумма КАК Сумма
                       |ИЗ
                       |    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
                       |ГДЕ
                       |    Хозрасчетный.СчетДт = &СчетДт
                       |    И Хозрасчетный.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
                       |    И Хозрасчетный.Регистратор Ссылка Документы.ПлатежноеПоручениеИсходящее
                       |    И Выразить(Хозрасчетный.Регистратор Как Документы.ПлатежноеПоручениеИсходящее).СуммаДокумента = Выразить(Хозрасчетный.Регистратор Как Документы.ПлатежноеПоручениеИсходящее).СуммаДокументаРасчета
                       |УПОРЯДОЧИТЬ ПО
                       |    Сумма";
22 Fragster
 
модератор
26.07.13
12:12
(18) ну и зачем? лучше отбор по Регистратор Ссылка в (8) добавить
23 exwill
 
26.07.13
12:12
(15) Раз уж ты так мучаешься, сделай через ВТ или вложенный запрос.
24 Fragster
 
модератор
26.07.13
12:12
Регистратор Ссылка Документ.ДидДокумента
25 Fragster
 
модератор
26.07.13
12:13
(21) должно работать
26 Maxus43
 
26.07.13
12:13
(21) Текст ошибки не учили писать?
и я вроде писал что не ДокументЫ.док, а Документ.док
27 exwill
 
26.07.13
12:13
(21) ДокуменТ вместо ДокументЫ
28 Fragster
 
модератор
26.07.13
12:13
(26)(27) глазастые :) а я не заметил
29 Maxus43
 
26.07.13
12:14
Сгруппировать добавить надо бы, у дока может быть 500 проводок. зачем дубли?
30 Fragster
 
модератор
26.07.13
12:15
(29) а если в одной проводке равно, а в другой - нет?
31 Maxus43
 
26.07.13
12:15
(30) Группировка этому не помешает. А если в обоих равно - то будет 2 записи в результате, а оно не надо вроде
32 never_be
 
26.07.13
12:16
(26) {(13, 175)}: Поле не найдено "СуммаДокументаРасчета"
И Выразить(Хозрасчетный.Регистратор Как Документ.ПлатежноеПоручениеИсходящее).СуммаДокумента = Выразить(Хозрасчетный.Регистратор Как Документ.ПлатежноеПоручениеИсходящее)<<?>>.СуммаДокументаРасчета

Запрос такой:

        Запрос.Текст = "ВЫБРАТЬ
                       |    Хозрасчетный.Период,
                       |    Хозрасчетный.Регистратор,
                       |    Хозрасчетный.СчетДт,
                       |    Хозрасчетный.СчетКт,
                       |    Хозрасчетный.Сумма КАК Сумма
                       |ИЗ
                       |    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
                       |ГДЕ
                       |    Хозрасчетный.СчетДт = &СчетДт
                       |    И Хозрасчетный.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
                       |    И Хозрасчетный.Регистратор Ссылка Документ.ПлатежноеПоручениеИсходящее
                       |    И Выразить(Хозрасчетный.Регистратор Как Документ.ПлатежноеПоручениеИсходящее).СуммаДокумента = Выразить(Хозрасчетный.Регистратор Как Документ.ПлатежноеПоручениеИсходящее).СуммаДокументаРасчета
                       |УПОРЯДОЧИТЬ ПО
                       |    Сумма";
33 Maxus43
 
26.07.13
12:18
(32) Нет этого реквизита в документе
34 never_be
 
26.07.13
12:19
(33) Хм, проверил, таки была ошибка в названии, поменял, и все равно ругается.
35 Maxus43
 
26.07.13
12:19
(34) таки не врёт ошибка. Нет такого реквизита у такого документа
36 never_be
 
26.07.13
12:21
(35) Точно не врет, реквизит лежит в табличном поле в документе, на форме просто не видно этого.
37 Maxus43
 
26.07.13
12:22
(36) ты по форме реквизиты искал? марш в конфигуратор, на закладку Данные в документе
38 Галахад
 
гуру
26.07.13
12:22
(36) В табличной части?
39 never_be
 
26.07.13
12:25
(38) Угу, есть такая табличная часть Реквизиты платежа, в нем оно и лежит, хотя на форме оно в обычном окошке ввода числа.
40 exwill
 
26.07.13
12:26
(39) Оно там не лежит.
41 exwill
 
26.07.13
12:28
+(40) Не верно утверждать: "ОНО там лежит".
Верно: "ОНИ там лежат". Чувствуешь разницу?
42 never_be
 
26.07.13
12:30
Епт, ничего не понимаю, меня типовые конфы просто вгоняют в ступор. Гляньте на картинку плиз - http://i.piccy.info/i7/0b0eba3b1e227768e5ca092a026caa01/4-66-268/8099969/2013_07_26_11_27_55_am.png
Выделенным красным окошка присвоен один и тот-же реквизит !! Но когда я сохраняют документ значения в них сохраняются разными О_о
43 exwill
 
26.07.13
12:34
(42) Переключись на "списком" и все поймешь.
44 1Сергей
 
26.07.13
12:36
(42) что ты форму смотришь? ты смотри в дереве конфигурации
45 never_be
 
26.07.13
12:40
(43) (44) Ребята все равно не доганяю, вот еще картинка - http://i.piccy.info/i7/607820a0b22dbd009f035f92807781b2/4-66-268/27135431/2013_07_26_11_36_30_am.png

На обоих окошках в поле данные один и тот же реквизит, причем когда нажимаю выбрать и в дереве одно и тоже ДокументОбъект. СуммаДокумента
46 1Сергей
 
26.07.13
13:11
(45) Разницу между реквизитом объекта и реквизитом формы ощущаешь?
47 never_be
 
26.07.13
13:16
(46) Ощущая но только в контексте упр форм, тут в поле данные у меня выбран один и тот же реквизит из общего списка реквизитов и понять чем они отличаются я не могу.
48 1Сергей
 
26.07.13
13:17
(47) если в обычных формах не ощущаешь, то бегом читать литературу
49 Галахад
 
гуру
26.07.13
13:19
Гм. Я тоже вижу один и тот же реквизит.

P.S. Может в событии "ПриИзменении" чего-то происходит?
50 never_be
 
26.07.13
13:21
(48) Тыкните плиз носом куда посмотреть, на что нажать чтоб увидеть откуда берется вторая сумма, я как ни смотрю для меня это один и тот же реквизит и в поле данные у обоих полей выбран один и тот же реквизит с одного места, корня ДокументОбъект.
(49)Процедура СуммаДокументаРасчетыПриИзменении()
и Процедура СуммаДокументаПриИзменении()
51 never_be
 
26.07.13
13:23
Если подвести к окошку в сплывающем пишет для первого СуммаДокумента(СуммаДокумента), для второго СуммаДокументаРасчеты(СуммаДокумента)
52 Галахад
 
гуру
26.07.13
13:25
(50) И чего там, в этих процедурах?
53 1Сергей
 
26.07.13
13:27
(51) в табличной части есть СуммаДокумента?
54 never_be
 
26.07.13
13:29
(52) Вроде ничего особенного:

Процедура СуммаДокументаРасчетыПриИзменении(Элемент)

    СтрокаПлатеж.СуммаПлатежа=СуммаДокумента;
    
    УправлениеДенежнымиСредствами.ПересчитатьСуммуНДС(СтрокаПлатеж);
    РассчитатьПропорциональныйНДС();
    
    Если СтрокаПлатеж.СуммаВзаиморасчетов = 0 Тогда
        РассчитатьСуммуВзаиморасчетов();
    Иначе            
        РассчитатьКурсВзаиморасчетов();
    КонецЕсли;
    
    СформироватьНазначениеПлатежа();
            
КонецПроцедуры

И

    
    Если ИнвертироватьСуммы Тогда
        
        РассчитатьСуммуПлатежа();
        
        Если СтрокаПлатеж.КурсВзаиморасчетовПлан>0 Тогда
            РассчитатьСуммуПлатежаПлан();
        КонецЕсли;
        
    Иначе    
        Если РасшифровкаПлатежа.Количество()=1 Тогда
            
                СтрокаПлатеж.СуммаПлатежа=СуммаДокумента;
            
                Если ЕстьРасчетыСКонтрагентами ИЛИ ЕстьРасчетыПоКредитам Тогда
                
                    УправлениеДенежнымиСредствами.ПересчитатьСуммуНДС(СтрокаПлатеж);
                    РассчитатьПропорциональныйНДС();    
                
                    Если СтрокаПлатеж.СуммаВзаиморасчетов=0 Тогда
                        РассчитатьСуммуВзаиморасчетов();
                    Иначе            
                        РассчитатьКурсВзаиморасчетов();
                    КонецЕсли;
                    
                ИначеЕсли ВидОперации = Перечисления.ВидыОперацийППИсходящее.ПеречислениеДенежныхСредствПодотчетнику Тогда
                    
                    Если СтрокаПлатеж.СуммаВзаиморасчетов = 0 Тогда
                        РассчитатьСуммуВзаиморасчетов();
                    Иначе            
                        РассчитатьКурсВзаиморасчетов();
                    КонецЕсли;
                    
                    
                Иначе
                        
                    СтрокаПлатеж.СуммаВзаиморасчетов=СтрокаПлатеж.СуммаПлатежа;
                    
                    Если ЗначениеЗаполнено(СтрокаПлатеж.ДокументПланированияПлатежа) Тогда
                    
                        СтрокаПлатеж.СуммаПлатежаПлан=СтрокаПлатеж.СуммаПлатежа;
                    
                    КонецЕсли;
                    
                КонецЕсли;
                    
                СформироватьНазначениеПлатежа();
                        
        КонецЕсли;
        
    КонецЕсли;
55 never_be
 
26.07.13
13:30
Вижу что лежит оно в табличной части РасшифровкаПлатежа, но как оно выводиться тогда в окошки на форме если привязан для них только 1 реквизит.
56 never_be
 
26.07.13
13:31
(53) Нету.
57 never_be
 
26.07.13
13:32
(53) Есть СуммаПлатежа.
58 never_be
 
26.07.13
13:34
Понял что для певого окошка данные лежат в реквизите СуммаДокумента, а в втором в табличной части РасшифровкаПлатежа.СуммаПлатежа, но как оно попадает в второе окошко понять не могу.
59 Jonny_Khomich
 
26.07.13
13:35
(58) с регистра данные берутся
60 never_be
 
26.07.13
13:40
(59) Все равно не вижу каким образом, в общем пусть это будет для меня загадкой, не понимаю нафига так мутно писать, или это признак супер крутого программиста когда никто не понимает его код и как оно работает.

(37) Подскажите еще как сравнивать с значением из первой строки табличной части (выбран всегда 1 документ расчетов)?
61 Галахад
 
гуру
26.07.13
13:46
(60) Сгруппировать
Сумма(СуммаПлатежа)
Макс(СуммаДокумента)
62 never_be
 
26.07.13
13:57
(61) А в моем запросе ? Мне получается надо сравнивать СуммаДокумента с первой строкой РасшифровкаПлатежа, вот запрос:

        Запрос.Текст = "ВЫБРАТЬ
                       |    Хозрасчетный.Период,
                       |    Хозрасчетный.Регистратор,
                       |    Хозрасчетный.СчетДт,
                       |    Хозрасчетный.СчетКт,
                       |    Хозрасчетный.Сумма КАК Сумма
                       |ИЗ
                       |    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
                       |ГДЕ
                       |    Хозрасчетный.СчетДт = &СчетДт
                       |    И Хозрасчетный.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
                       |    И Хозрасчетный.Регистратор Ссылка Документ.ПлатежноеПоручениеИсходящее
                       |    И Выразить(Хозрасчетный.Регистратор Как Документ.ПлатежноеПоручениеИсходящее).СуммаДокумента = Выразить(Хозрасчетный.Регистратор Как Документ.ПлатежноеПоручениеИсходящее).СуммаДокументаРасчеты  
                       |УПОРЯДОЧИТЬ ПО
                       |    Сумма";

Вместо СуммаДокументаРасчеты  - РасшифровкаПлатежа[1].СуммаПлатежа ?
63 kinno
 
26.07.13
14:02
Что за конфигурация ?
64 never_be
 
26.07.13
14:05
(63) УТП 1.2
65 never_be
 
26.07.13
14:06
пробую так ругается:


        Запрос.Текст = "ВЫБРАТЬ
                       |    Хозрасчетный.Период,
                       |    Хозрасчетный.Регистратор,
                       |    Хозрасчетный.СчетДт,
                       |    Хозрасчетный.СчетКт,
                       |    Хозрасчетный.Сумма КАК Сумма
                       |ИЗ
                       |    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
                       |ГДЕ
                       |    Хозрасчетный.СчетДт = &СчетДт
                       |    И Хозрасчетный.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
                       |    И Хозрасчетный.Регистратор Ссылка Документ.ПлатежноеПоручениеИсходящее
                       |    И Выразить(Хозрасчетный.Регистратор Как Документ.ПлатежноеПоручениеИсходящее).СуммаДокумента = Выразить(Хозрасчетный.Регистратор Как Документ.ПлатежноеПоручениеИсходящее).РасшифровкаПлатежа[0].СуммаПлатежа;  
                       |УПОРЯДОЧИТЬ ПО
                       |    Сумма";
66 kinno
 
26.07.13
14:06
Возьми консоль запросов.
1) Получи запросом требуемые тебе документы  без использования регистра бухгалтерии
2) Помести во временную таблицу
3) Выбери движения из регистра бухгалтерии, с отбором по документам которые ранее были помещены во временную таблицу

Есть сильное подозрение, что можно вообще оптимизировать этот запрос, если напишешь что хочешь с помощью его получить.
67 never_be
 
26.07.13
14:11
(66) Блин да задача плевая ведь, я так думал до того как взялся, дело совсем не в регистре, если брать просто документы от этого ничего не измениться, не хочу заморачиваться с временными таблицами я там вообще потеряюсь, надо просто сравнить 2 реквизита в одном документе. Уже все получилось но поменялись обстоятельства и сравнивать надо реквизит с реквизитом из строки табличной части.
68 viktor_vv
 
26.07.13
14:17
(58) Вот так они туда попадают.

    Если (ЕстьРасчетыСКонтрагентами ИЛИ ЕстьРасчетыПоКредитам) И (НЕ Список) Тогда
        
        ЭлементыФормы.СуммаДокумента.Данные           = "ЭлементыФормы.РасшифровкаПлатежа.ТекущиеДанные.СуммаВзаиморасчетов";

То естьдля элемента формы меняется связь с данными.
69 hhhh
 
26.07.13
14:18
(67) ну, присоединяй табличную часть туда в запрос
70 never_be
 
26.07.13
14:24
(69) Пишет нельзя обращаться к таблице через поле составного типа
71 Галахад
 
гуру
26.07.13
14:30
Дальше сам.

ВЫБРАТЬ
    МойДок.Ссылка,
    СУММА(МойДок.СуммаПлатежа) КАК СуммаПлатежа,
    МАКСИМУМ(МойДок.Ссылка.СуммаДокумента) КАК СуммаДокумента
ИЗ
    Документ.ЛяЛяЛя.РасшифровкаПлатежа КАК МойДок

СГРУППИРОВАТЬ ПО
    МойДок.Ссылка
72 kinno
 
26.07.13
14:47
(71) И добавим сразу отбор

ВЫБРАТЬ
    МойДок.Ссылка,
    СУММА(МойДок.СуммаПлатежа) КАК СуммаПлатежа,
    МАКСИМУМ(МойДок.Ссылка.СуммаДокумента) КАК СуммаДокумента
ИЗ
    Документ.ЛяЛяЛя.РасшифровкаПлатежа КАК МойДок

СГРУППИРОВАТЬ ПО
    МойДок.Ссылка
ИМЕЮЩИЕ СУММА(МойДок.СуммаПлатежа) = МАКСИМУМ(МойДок.Ссылка.СуммаДокумента)
73 never_be
 
26.07.13
14:49
(71) (72)  СПАСИБО !
Основная теорема систематики: Новые системы плодят новые проблемы.