Имя: Пароль:
1C
1С v8
Запрос
,
0 d3N4eGG
 
01.03.12
13:13
Запрос "достает" Номер Договора из Справочника ДоговораКонтрагентор.
Но достает самый первый созданный договор, а мне нужно достать самый последний (по дате). Как это сделать?

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

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

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

   ВыборкаДетальныеЗаписи = Результат.Выбрать();
       
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       Возврат ВыборкаДетальныеЗаписи.НомерДоговора;        
   КонецЦикла;
   
КонецФункции
1 Wobland
 
01.03.12
13:13
выбрать первый один, упорядоченный по дате убыв
2 Wobland
 
01.03.12
13:18
о боже, открыл запрос, и сразу вопрос не понял
3 d3N4eGG
 
01.03.12
13:19
:D но все же получилось, спасибо
4 Assena
 
01.03.12
13:20
а цикл зачем? если тока один нужен
5 nuctoh
 
01.03.12
13:21
Вообще, приведенный запрос попахивает кривизной и избыточностью:
1. Контрагенты.Ссылка и ДоговорыКонтрагентов.Владелец - одно и то же лицо
2. Зачем вообще соединять слева контрагента с договором?
3. Если уж соединение слева - необходимость, продиктованная выбором контрагента в любом случае, а договора - при его наличии, то и условие должно ставиться именно на контрагента
6 НЕА123
 
01.03.12
13:21
(2)
че-то я поплыл...
вроде в (0)

возврат ссылка.ДоговорПоУмолчанию.НомерДоговора;

достаточно?
7 d3N4eGG
 
01.03.12
13:22
ладн, сейчас, будем исправлять, спасибо.
8 Wobland
 
01.03.12
13:23
(6) имхается мне, что ему достаточно просто читать поле ДоговорПоУмолчанию. без всяких функций
9 d3N4eGG
 
01.03.12
13:26
Я еще не до конца разобрался с запросами, поэтому так вышло.
В общем, надо из справочника ДоговорыКонтрагентов выбрать номер последнего договора этого контрагента.
как правильно запрос будет выглядить?
10 nuctoh
 
01.03.12
13:27
Этот код решает?

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

  Выборка = Запрос.Выполнить().Выбрать();

  Возврат ?(Выборка.Следующий(), Выборка.НомерДоговора, Неопределено);
   
КонецФункции
11 Assena
 
01.03.12
13:29
садись, Пять))
12 d3N4eGG
 
01.03.12
13:30
Спасибо =D
13 Wobland
 
01.03.12
13:33
(9) скажи мне, пожалуйста, номер тебе зачем? вот подозреваю отчего-то, что договор у тебя в голове представляется в виде номера, хотя правильней было бы воспринимать его как ссылку
14 palpetrovich
 
01.03.12
13:39
сорьки, офФ-топик: народ, а что такое    |ВЫБРАТЬ ПЕРВЫЕ 1 1
в чем суть?
15 Wobland
 
01.03.12
13:40
(14) возвращает только первую строку. с любовью, Капитан О
16 palpetrovich
 
01.03.12
13:41
(15) хм, таки не понял, а в чем отличие от  |ВЫБРАТЬ ПЕРВЫЕ 1 ?
17 Wobland
 
01.03.12
13:41
palpetrovich, у тебя аккаунт спёрли или это весна влияет? ;)
18 Wobland
 
01.03.12
13:42
(16) первые 1<пробел>1 синтаксически неверно
19 d3N4eGG
 
01.03.12
13:44
(13) В данном случае, номер договора - это его наименование, которое в ручную вводится. Это не внутренний идентификатор или что-то такое. Мне именно название нужно было.
20 НЕА123
 
01.03.12
13:45
(18)
"ВЫБРАТЬ ПЕРВЫЕ 1 1
|КАК Поле1
?
21 palpetrovich
 
01.03.12
13:45
(18) БП для Ураины,
Функция ПравилаКонвертацииОбъектовДляПланаОбменаЗагружены(Знач ИмяПланаОбмена) Экспорт
   
   ТекстЗапроса = "
   |ВЫБРАТЬ ПЕРВЫЕ 1 1
   |ИЗ
   |    РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными
   |ГДЕ
   |      ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов)
   |    И ПравилаДляОбменаДанными.ПравилаЗагружены
   |    И ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена
   |";
   
   Запрос = Новый Запрос;
   Запрос.Текст = ТекстЗапроса;
   Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена);
   
   Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
22 palpetrovich
 
01.03.12
13:46
(20) а, последняя "1" - это наименование поля, да?
23 НЕА123
 
01.03.12
13:48
(21)
есть хотя бы одна запись.
24 НЕА123
 
01.03.12
13:48
(22)
значение поля.
проверка, есть хотя бы одна запись.
25 Wobland
 
01.03.12
13:50
(20) согласен
26 palpetrovich
 
01.03.12
13:56
(23)(24) все равно туплю, так что-ли?
|ВЫБРАТЬ ПЕРВЫЕ 1
|1 КАК КакХочуТакИНазову
27 Wobland
 
01.03.12
14:00
(26) ну. будет тебе поле КакХочуТакИНазову, содержащее единицу. первые 1 в этом случае лишнее
28 НЕА123
 
01.03.12
14:01
(26)
ага.
29 НЕА123
 
01.03.12
14:02
+(28)
проверил - поле1 получается.
30 palpetrovich
 
01.03.12
14:04
спасибо
31 Wobland
 
01.03.12
14:05
(29) проверил, получается КакХочуТакИНазову