Имя: Пароль:
1C
1С v8
УТ 10.3: Проблема с запросом
0 _stay true_
 
19.07.13
11:42
Здравствуйте. Суть проблемы в следующем: добавили в справочник "договоры контрагентов" реквизит "СумМакс"(максимальная сумма, тип число, длина 15 точность 2 неотрицательное). Теперь нужно в обработчике события "ПередЗаписью" документа "РеализацияТоваровУслуг" сравнивать значение реквизита СумМакс со значением реквизита "СуммаДокумента".

Дописал процедуру, вылетает ошибка Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(3224)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
       Если ВыборкаДетальныеЗаписи.СумМакс < ВыборкаДетальныеЗаписи.СуммаДокумента Тогда

Типы у обоих число, но когда в конфигураторе ставишь точку останова и вычисляешь выражение СумМакс, выдает Тип "Неопределно" или переменная неопределена. Помогите пожалуйста молодому начинающему чайнику разобраться что к чему, с УТ 10.3 первый раз работаю.

Код процедуры:



Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    РеализацияТоваровУслуг.Ссылка,
       |    РеализацияТоваровУслуг.СуммаДокумента,
       |    РеализацияТоваровУслуг.ДоговорКонтрагента.Ссылка КАК Ссылка2,
       |    РеализацияТоваровУслуг.ДоговорКонтрагента.СумМакс КАК СумМакс
       |ИЗ
       |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
       |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
       |        ПО РеализацияТоваровУслуг.ДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка
       |ГДЕ
       |    РеализацияТоваровУслуг.Ссылка = &Ссылка
       |    И РеализацияТоваровУслуг.ДоговорКонтрагента.Ссылка = &Ссылка";

   Запрос.УстановитьПараметр("Ссылка", Ссылка);

   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();
   
       Если ВыборкаДетальныеЗаписи.СумМакс < ВыборкаДетальныеЗаписи.СуммаДокумента Тогда
           
           Отказ = Истина;
           Сообщить("Превышена максимально возможная сумма по договору");
           
       
       КонецЕсли;
1 hhhh
 
19.07.13
11:47
(0) почитай про Следующий(). И больше не пугай нас.
2 _stay true_
 
19.07.13
11:55
(1) Прочитал. Сделал так:

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       
     Если ВыборкаДетальныеЗаписи.СумМакс < ВыборкаДетальныеЗаписи.СуммаДокумента Тогда
           Отказ = Истина;
           Сообщить("Превышена максимально возможная сумма по договору");
           
   КонецЕсли;
КонецЦикла;



Ставлю на строке с ЕСЛИ точку останова - вообще туда не попадает...
3 НаборДанных
 
19.07.13
11:57
(2)Может меньше времени уйдет, чтобы посмотреть значения СумМакс  и СуммаДокумента в отладчике, чем написать сюда?
4 НаборДанных
 
19.07.13
11:58
И накуа там левое соединение, если ты суммы через точки все выбрал из документа?
5 Галахад
 
гуру
19.07.13
12:00
Я чо-та не понял. Ссылка это документ или справочник?
6 _stay true_
 
19.07.13
12:01
(4) Левое соединение я забыл убрать. Теперь убрал:)

В отладчике посмотрел: по идее, должно быть сумма документа 5900, максимальная по договору 5000. (5) документ
7 НаборДанных
 
19.07.13
12:02
(6)Смотри (5), думай на       |    РеализацияТоваровУслуг.Ссылка = &Ссылка
       |    И РеализацияТоваровУслуг.ДоговорКонтрагента.Ссылка = &Ссылка";

   Запрос.УстановитьПараметр("Ссылка", Ссылка);
8 НаборДанных
 
19.07.13
12:03
(6)А не по идее? В табло религия посмотреть не позволяет?
9 _stay true_
 
19.07.13
12:04
(8) Да посмотрел я: СумМакс - Переменная не определена. Сумму документа корректно вытягивает.
10 НаборДанных
 
19.07.13
12:10
(9)Надеюсь, ты скопировал в табло так ВыборкаДетальныеЗаписи.СумМакс
И
ВыборкаДетальныеЗаписи.СуммаДокумента
И точка останова у тебя ПОСЛЕ ВыборкаДетальныеЗаписи.Следующий()???
11 _stay true_
 
19.07.13
12:15
(10) Именно так я и сделал. Точка останова после стоит. Только вот туда не попадает никак. В цикл попадает, а в условие - никак
12 _stay true_
 
19.07.13
12:16
ВыборкаДетальныеЗаписи.Следующий(): поле объекта не обнаружено
13 НаборДанных
 
19.07.13
12:16
Если СуммаДокумента > ДоговорКонтрагента.СумМакс Тогда
...
КонецЕсли;
Без всяких запросов.
14 НаборДанных
 
19.07.13
12:17
(12)Так напиши, и прекрати мучить запросы.
15 Csar
 
19.07.13
12:23
Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    РеализацияТоваровУслуг.Ссылка,
       |    РеализацияТоваровУслуг.СуммаДокумента,
       |    РеализацияТоваровУслуг.ДоговорКонтрагента.Ссылка КАК Ссылка2,
       |    РеализацияТоваровУслуг.ДоговорКонтрагента.СумМакс КАК СумМакс
       |ИЗ
       |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
       |ГДЕ
       |    РеализацияТоваровУслуг.Ссылка = &Ссылка";

   Запрос.УстановитьПараметр("Ссылка", Ссылка);

   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();
   
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
       Если ВыборкаДетальныеЗаписи.СумМакс < ВыборкаДетальныеЗаписи.СуммаДокумента Тогда
           
           Отказ = Истина;
           Сообщить("Превышена максимально возможная сумма по договору");
       КонецЕсли;
КонецЕсли;
16 Csar
 
19.07.13
12:24
+(15), где Ссылка - это ссылка на документ Реализации
17 _stay true_
 
19.07.13
12:26
Csar и НаборДанных: даже не знаю, как вас благодарить. Заработало как надо.  Спасибо вам большое. И всех вам благ.
18 _stay true_
 
19.07.13
12:28
Жаль, что вы от меня далеко - я бы вам вискарика проставил)))
19 Csar
 
19.07.13
12:33
(18) =)
20 НаборДанных
 
19.07.13
12:35
(18)Город какой? Выезжаю.
21 _stay true_
 
19.07.13
12:53
(20)Город-герой колыбель русского флота Воронеж
22 Ненавижу 1С
 
гуру
19.07.13
12:57
(21) только в России колыбель флота находится за сотни километров от моря
23 _stay true_
 
19.07.13
13:08
(22) до Джубги примерно 800км
24 hhhh
 
19.07.13
13:51
(22) не, в чехии не только колыбель, но и сам флот.
Программист всегда исправляет последнюю ошибку.