Имя: Пароль:
1C
1С v8
Выбор последней записи по ценам из табличной части
0 Валидатор
 
21.06.13
14:29
Задание такое: Есть документ с ТЧ и с прочими реквизитами. Есть реквизит вид цен- из этого реквизита берутся цены на номенклатуру. Нужно, чтобы при открытии документа ставились автоматически последняя цена из документа, в котором вносятся ценники, самописная конфа на управляемом приложении, как получить последнюю запись в ТЧ, и потом использовать ее для подставновки в реквизит?
1 Валидатор
 
21.06.13
14:30
точнее как ее потом подставить в принципе ясно, а вот как получить последнюю запись не совсем(
2 pessok
 
21.06.13
14:31
ТЧ.Выгрузить(ТЧ.Количество()-1).ВидЦен
3 salvator
 
21.06.13
14:31
Что значит "последняя"? По номеру строки в ТЧ?
4 Валидатор
 
21.06.13
14:31
(3) по дате последней
5 Allexe
 
21.06.13
14:31
ВЫБРАТЬ ПЕРВЫЕ 1
Плюс сортировка в обратном порядке по номеру строки
6 pessok
 
21.06.13
14:31
вай.

ТЧ.Выгрузить()[ТЧ.Количество()-1].ВидЦен
7 Валидатор
 
21.06.13
14:31
и в управляемом приложении нельзя получать объект что ли? оО
8 salvator
 
21.06.13
14:32
(4) см (5) только сортировка по дате убыв
9 pessok
 
21.06.13
14:32
(4) аа, тогда (5)
10 Валидатор
 
21.06.13
14:33
эм, а в конструкторе запросов где задается сортировка по дате убыв? не могу найти(
11 pessok
 
21.06.13
14:34
(10) сортировка там идет по ПОЛЮ. Поле с датой сортируешь по убыванию
12 Валидатор
 
21.06.13
14:36
так, получил список с датами по убыванию, и как мне потом использовать первый документ из списка для того, чтобы он в реквизит встал? обходя запрос циклом?
13 pessok
 
21.06.13
14:36
(12) внимательно прочти (4)
14 pessok
 
21.06.13
14:37
т.е. (5)
15 salvator
 
21.06.13
14:37
ВЫБРАТЬ ПЕРВЫЕ 1
16 Валидатор
 
21.06.13
14:38
(15) то же ведь в запросе мы делаем эти выбрать первые 1?
17 pessok
 
21.06.13
14:38
(16) в запросе, вместо ВЫБРАТЬ пиши ВЫБРАТЬ ПЕРВЫЕ 1. Это даст только одну строку. Потом уже к ней обращаешься через выборку
18 Валидатор
 
21.06.13
14:42
Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                  |    УстановкаЦенНоменклатурыТовары.Ссылка КАК Ценник,
                  |    УстановкаЦенНоменклатурыТовары.НомерСтроки,
                  |    УстановкаЦенНоменклатурыТовары.Номенклатура,
                  |    УстановкаЦенНоменклатурыТовары.Цена,
                  |    УстановкаЦенНоменклатурыТовары.Ссылка.ВидЦены
                  |ИЗ
                  |    Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    УстановкаЦенНоменклатурыТовары.Ссылка.Дата УБЫВ";
                 
                  Результат = Запрос.Выполнить();
                  РезультатПоЦенам = Результат.Выбрать();
                  Пока РезультатПоЦенам.Следующий() Цикл
                      Объект.ВидЦен =  РезультатПоЦенам.Ценник;
                  КонецЦикла

я так понял примерно такое, только еще вопрос: пишет
{Документ.СчетНаОплатуКлиенту.Форма.ФормаДокумента.Форма(600,17)}: Тип не определен (Запрос)
   Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
в обычном приложении не надо было для запроса нчиего дописывать, а в управляемом видимо да?
19 salvator
 
21.06.13
14:43
(18) На сервере делай
20 Валидатор
 
21.06.13
14:43
ай там на клиенте на сервере долбанные, как мне тогда в функции при открытии прописать запрос? сделать ее на клиенте?
21 Валидатор
 
21.06.13
14:43
(20) на сервере*
22 Валидатор
 
21.06.13
14:45
или можно сделать 2 процедуры ПриОткрытии? одна на серваке, другая на клиенте?
23 MSII
 
21.06.13
14:45
(21) ПриСозданииНаСервере сделай, что тебе нужно.
24 salvator
 
21.06.13
14:46
На клиенте вызывай функцию с твоим запросом, которая будет выполняться на сервере и возвращать к примеру выборку.
25 Валидатор
 
21.06.13
14:47
&НаСервере
Функция ПриСоздании ()
Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                  |    УстановкаЦенНоменклатурыТовары.Ссылка КАК Ценник,
                  |    УстановкаЦенНоменклатурыТовары.НомерСтроки,
                  |    УстановкаЦенНоменклатурыТовары.Номенклатура,
                  |    УстановкаЦенНоменклатурыТовары.Цена,
                  |    УстановкаЦенНоменклатурыТовары.Ссылка.ВидЦены
                  |ИЗ
                  |    Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    УстановкаЦенНоменклатурыТовары.Ссылка.Дата УБЫВ";
                 
                  Результат = Запрос.Выполнить();
                  РезультатПоЦенам = Результат.Выбрать();
                  Пока РезультатПоЦенам.Следующий() Цикл
                      Объект.ВидЦен =  РезультатПоЦенам.Ценник;
                  КонецЦикла;
КонецФункции

и потом передавать в процедуру при открытии на клиенте:
ПриСоздании(); так?
26 salvator
 
21.06.13
14:48
Функция на то и функция, что бы что-то возвращать
27 Валидатор
 
21.06.13
14:49
(26) это то понятно, сделал я функцию, только
Функция ПриСоздании (ВидЦен)
Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                  |    УстановкаЦенНоменклатурыТовары.Ссылка КАК Ценник,
                  |    УстановкаЦенНоменклатурыТовары.НомерСтроки,
                  |    УстановкаЦенНоменклатурыТовары.Номенклатура,
                  |    УстановкаЦенНоменклатурыТовары.Цена,
                  |    УстановкаЦенНоменклатурыТовары.Ссылка.ВидЦены
                  |ИЗ
                  |    Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    УстановкаЦенНоменклатурыТовары.Ссылка.Дата УБЫВ";
                 
                  Результат = Запрос.Выполнить();
                  РезультатПоЦенам = Результат.Выбрать();
                  Пока РезультатПоЦенам.Следующий() Цикл
                      ВидЦен =  РезультатПоЦенам.Ценник;
                  КонецЦикла;
КонецФункции

то есть мы получаем как раз нашу последнюю запись тут, так?
28 Валидатор
 
21.06.13
14:50
и потом в процедуру ПриОткрытии на клиенте в конце процедуры пишу
ПриСоздании( только какой мы передаем суда параметр?) оО
29 salvator
 
21.06.13
14:53
(27)
Это не функция
30 Валидатор
 
21.06.13
14:54
возврат Вид цен перед концом функции забыл дописать?
31 MSII
 
21.06.13
14:57
(28) Зачем тебе дергать сервер лишний раз? В обработчике события управляемой формы ПриСозданииНаСервере сделай то, что тебе нужно.
32 Валидатор
 
21.06.13
15:00
(31) блин, отладчик не останавливается ни на открытии, ни на чем, тупое упр приложение, и соответственно не подставляются мои ценники в нужный мне реквизит(
33 Валидатор
 
21.06.13
15:05
было сложно, но вроде получилось, спасибо!
34 Валидатор
 
21.06.13
15:10
хотя появился еще мини вопрос, я хочу чтобы только при создании новых документов ценник вставал, раньше можно было методом типа ЭтоНовый, а в упр приложении в обработке присозданиинасервере какой метод использовать?
35 Allexe
 
21.06.13
15:19
ЭтоНовый()
36 Allexe
 
21.06.13
15:20
:)
37 Валидатор
 
21.06.13
15:23
{Документ.СчетНаОплатуКлиенту.Форма.ФормаДокумента.Форма(621)}: Метод объекта не обнаружен (ЭтоНовый)
   Если Объект.ЭтоНовый() Тогда
38 Валидатор
 
21.06.13
15:23
а если просто писать ЭтоНовый, то он тоже не понимает что это
39 salvator
 
21.06.13
15:25
(37) Что у тебя хранится в переменной Объект?
40 MSII
 
21.06.13
15:28
(37) Про доступность метода ЭтоНовый() посмотри.
41 Валидатор
 
21.06.13
15:31
(39) данныеформа структура пишет отладчик
42 Валидатор
 
21.06.13
15:33
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
ЭтоНовый (IsNew)
Синтаксис:

ЭтоНовый()
Возвращаемое значение:

Тип: Булево.
Истина - изменяется еще ни разу не записанный документ; Ложь - документ уже записан.
Описание:

Определяет, записан ли документ в базу данных.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

Если РасходнаяНакладная.ЭтоНовый() Тогда
   РасходнаяНакладная.Записать();
КонецЕсли;

То есть в обработке:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если ЭтоНовый()Тогда
...
Иначе
КонецЕсли
Конецпроцедуры
должно ведь срабатывать на это новый?
43 salvator
 
21.06.13
15:34
(41) И что непонятного?
44 Валидатор
 
21.06.13
15:35
(43) как получить тогда данный документ?
45 Валидатор
 
21.06.13
15:42
и получитьобъект() метода нет
46 salvator
 
21.06.13
15:50
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
47 Валидатор
 
21.06.13
16:09
(46) спс, получилось, а все таки с ЭтоНовый интересна ситуация, не работает он у упр приложении что ли?
48 Deon
 
21.06.13
16:17
(47) ибо это метод объекта, а не ДанныеФормыСтруктура
49 Валидатор
 
21.06.13
16:20
(48) а как получить объект в упр приложении? в обычном было обращение к документу и потом.ПолучитьОбъект() тут я такого не нашел
50 salvator
 
21.06.13
16:27
(49) Через ДанныеФормыВЗначение(Объект,Тип("ДокументОбъект.ИмяТвоегоДокумента"));
51 Валидатор
 
21.06.13
16:30
(50) понятно, жестко конечно, но спс)))
52 Deon
 
21.06.13
16:37
(50) РеквизитФормыВЗначение("Объект") попроще буит