Имя: Пароль:
1C
1С v8
Получить значение из запроса
,
0 Jamiq
 
15.02.13
12:01
8.1
День добрый. Написал запросик, через консоль запросов результат есть, а вот как к результату обратиться в коде не понимаю.
Результат запроса: http://s020.radikal.ru/i723/1302/ac/c0c1a8395be6.jpg

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

   Результат = Запрос.Выполнить().Выгрузить();
1 Галахад
 
гуру
15.02.13
12:02
Для каждого стр из Результат Цикл
2 pessok
 
15.02.13
12:03
Если результат.количество() = 1 Тогда
МояСтрока = Результа[0];
ИначеЕсли результат.количество() > 1 Тогда сообщить("дофейхоа оплат, атата!!!");
иначе сообщить("нет оплата!");
конецесли
3 andreymongol82
 
15.02.13
12:03
Результат = Запрос.Выполнить().Выгрузить();
Для каждого СтрокаРезультатат из Результат Цикл...

или

  Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл

или
ПОЧИТАТЬ СП!!!
4 hhhh
 
15.02.13
12:04
Если Результат.Количество() > 0 Тогда
 Заказ = Результат[0].Заказ;
Иначе
 Заказ = Неопределено;
КонецЕсли;
5 Мыш
 
15.02.13
12:07
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда Результат=Результат.Выгрузить()[0][0]; КонецЕсли;
6 Maxus43
 
15.02.13
12:07
на крине прекрасно видно какой тип знаечния у "Результат", и работать с ними соответсвенно, неважно запросом это получено или нет
7 Jamiq
 
15.02.13
12:34
После получения значения, хочу сделать учловие:

Результат = Запрос.Выполнить().Выбрать();
   
Если НЕ ЗначениеЗаполнено(Результат) И
       Договор.КонтралироватьПредоплатуПоДоговору = Истина Тогда
       Сообщить("Контроль предоплаты - Нет документа: ""Оплата по заказу покупателя"" на данный " + Документ + "!");
       Отказ = Истина;
   КонецЕсли;
8 AlexSvt
 
15.02.13
12:38
(7) использовать Результат.Пустой(), где Результат = Запрос.Выполнить();
9 AlexSvt
 
15.02.13
12:39
как подсказали в (5)
10 Галахад
 
гуру
15.02.13
12:39
ИМХО:
Если Запрос.Выполнить() = Пустой Тогда
11 Jamiq
 
15.02.13
12:40
сейчас попробую
12 hhhh
 
15.02.13
12:44
(11) а зеленую фитюлину нажимали, которая на скрине вашем?
13 Jamiq
 
15.02.13
12:50
14 Jamiq
 
15.02.13
12:51
(8) Так?    
   
Результат = Запрос.Выполнить();
   
Если Результат.Пустой()И
      Договор.КонтралироватьПредоплатуПоДоговору = Истина Тогда
       Сообщить("Контроль предоплаты - Нет документа: ""Оплата по заказу покупателя"" на данный " + Документ + "!");
       Отказ = Истина;
   КонецЕсли;
15 AlexSvt
 
15.02.13
12:53
(14) так
16 Галахад
 
гуру
15.02.13
12:54
(14) Я правильно понимаю? Если контрагент хоть раз платил, то можно отгружать?
17 Jamiq
 
15.02.13
12:55
(15) Результат.Пустой    
{(1)}: Поле объекта не обнаружено (Пустой)
18 Галахад
 
гуру
15.02.13
12:57
(17) Код не из (14)?
19 Jamiq
 
15.02.13
12:59
из 14
20 Reset
 
15.02.13
12:59
Скобки забыл :)
21 Reset
 
15.02.13
13:00
это вот такие фитюлины --> ()
Они не просто так, это таинство
22 Jamiq
 
15.02.13
13:01
вроде стоят скобки, после Пустой
23 Jamiq
 
15.02.13
13:02
(16) Есть форма документа РасходнаяНакладная.
На ней выбираются: Контрагент, Договор и ДокументОснование (Заказ покупателя).
ПриЗаписи с помощью запроса смотрю, есть ли с такими же параметрами документ ОплатаПоЗаказу.
24 Галахад
 
гуру
15.02.13
13:02
(19) Покажи.
25 Reset
 
15.02.13
13:02
(22) В сообщении из (17) не стоят
26 Reset
 
15.02.13
13:03
И сообщение "поле" не обнаружено как бы намекает
27 Галахад
 
гуру
15.02.13
13:03
(23) В (0) может быть любая оплата по данном контрагенту.
28 Jamiq
 
15.02.13
13:03
(25) в 17 я взял из shift+F9
29 Reset
 
15.02.13
13:04
(28) Забыл скобки.
30 Reset
 
15.02.13
13:04
Короче ясно, эта тема не для моего терпения :)
31 Jamiq
 
15.02.13
13:05
вот текст кода

   Результат = Запрос.Выполнить();
   
   Если Результат.Пустой() И
       Договор.КонтралироватьПредоплатуПоДоговору = Истина Тогда
       Сообщить("Контроль предоплаты - Нет документа: ""Оплата по заказу покупателя"" на данный " + Документ + "!");
       Отказ = Истина;
   КонецЕсли;
32 Галахад
 
гуру
15.02.13
13:07
(28) А если не делать " shift+F9" ошибка есть?
33 Jamiq
 
15.02.13
13:08
Вычислить выражение: http://i051.radikal.ru/1302/f2/2e66eacd3fa7.jpg
34 Jamiq
 
15.02.13
13:08
(32) не выдает ошибку, но документ проводит
35 Галахад
 
гуру
15.02.13
13:10
(34) Отсюда вывод. Результат не пустой.
36 Тролль главный
 
15.02.13
13:15
(0) что за х.. а не запрос?
37 Peltzer
 
15.02.13
13:17
(33) Скобки забыл поставить
38 Reset
 
15.02.13
13:19
(37) Баян :)

(20)(29)
39 Jamiq
 
15.02.13
13:29
(27) Действительно, запрос берет документ Оплата другой, из-за этого результат не пустой.
Почему так происходит, я же в запросе задаю контрагента, договор и документ основание, по ним и должен смотреть, есть или нет документа Оплаты.
В консоли все нормуль работает.
40 pessok
 
15.02.13
13:30
(39) если работает в консоли, и не работает не в консоли, то бабка Дуся советует проверять параметры во втором случае
41 Jamiq
 
15.02.13
13:31
*запрос берет другой документ Заказа
42 Галахад
 
гуру
15.02.13
13:31
(39) Соединение только по контрагенту.
43 pessok
 
15.02.13
13:31
(41) это не запрос берет, а ты передаешь ему, как бэ...
44 pessok
 
15.02.13
13:32
(42) он потов в "где" это напихал же
45 Галахад
 
гуру
15.02.13
13:33
(44) И чего?
46 pessok
 
15.02.13
13:34
(45) на общую выборку накладывает, так что другие документы не вытащатся. хотя запрос запрос определенно в топку
47 pessok
 
15.02.13
13:34
(46) ааа. не общую. туплю
48 Jamiq
 
15.02.13
13:55
Сделал

   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ОплатаПоЗаказуПокупателя.Заказ
   |ИЗ
   |    Документ.РасходнаяНакладная КАК РасходнаяНакладная
   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОплатаПоЗаказуПокупателя КАК ОплатаПоЗаказуПокупателя
   |        ПО РасходнаяНакладная.Контрагент = ОплатаПоЗаказуПокупателя.Контрагент
   |            И РасходнаяНакладная.Договор = ОплатаПоЗаказуПокупателя.Договор
   |            И РасходнаяНакладная.Документ = ОплатаПоЗаказуПокупателя.Заказ
   |ГДЕ
   |    РасходнаяНакладная.Контрагент = &Контрагент
   |    И РасходнаяНакладная.Документ = &Документ
   |    И РасходнаяНакладная.Договор = &Договор";    
   Запрос.УстановитьПараметр("Контрагент", Контрагент);
   Запрос.УстановитьПараметр("Договор", Договор);
   Запрос.УстановитьПараметр("Документ", Документ);
   
   Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Заказ");
   Колонка = Результат.Получить(0);
   
   Если НЕ ЗначениеЗаполнено(Колонка) И
       Договор.КонтралироватьПредоплатуПоДоговору = Истина Тогда
       Сообщить("Контроль предоплаты - Нет документа: ""Оплата по заказу покупателя"" на данный " + Документ + "!");
       Отказ = Истина;
   КонецЕсли;
49 pessok
 
15.02.13
13:56
и?
50 Jamiq
 
15.02.13
13:57
все работает =)
51 pessok
 
15.02.13
13:57
+(49) а вообще, тебе бы использовать виртуальную таблицу ВзаиморасчетыСКонтрагентами.Остатки()
52 AlexSvt
 
15.02.13
14:01
(50) похоже сработает и для не проведенных документов.
читай (51)
53 Jamiq
 
15.02.13
14:02
Дословное задание:
"При записи должен осуществляться контроль предоплаты по договору. Если реквизит договора "Контролировать пердоплату по договору" принимает значение "Истина", то нельзя записывать документ, если ранее не был введен документ "Оплата по заказу покупателя"."

На что хватило ума, это связать два документа по контрагенту, договору и документу основание
54 Jamiq
 
15.02.13
14:03
(51) (52)  Есть один регистр накопления и он не связан ни как с этими документами.
55 AlexSvt
 
15.02.13
14:10
(53) ну раз регистров нет, то хотя бы проверяй, что документ оплаты проведен
56 Jamiq
 
15.02.13
14:21
(55) Хорошо.
Всем спасибо