Имя: Пароль:
1C
1С v8
Таблица формы
0 KuJIT
 
05.02.14
12:02
Добрый день. Есть такой тип, как ТаблицаФормы.
Описание:

Элемент управляемой формы, предназначенный для отображения и редактирования реквизитов формы табличных типов.

Сегодня впервые с ним столкнулся. В помощнике не нашел информации по тому, как по этой таблице двигаться, т.е. менять ТекущиеДанные. Кто с этим элементом работал, подскажите, пожалуйста, можно ли это сделать и, если можно, то как?
1 jsmith82
 
05.02.14
12:02
мышкой, курсором двигаться надо
2 jsmith82
 
05.02.14
12:03
есть ещё свойство у неё ТекущаяСтрока для программного позиционирования, если таблица формы связана с ДанныеФормаКоллекция, но там с умом надо подходить
3 jsmith82
 
05.02.14
12:04
если же связана с динамическим списком, то ТекущаяСтрока не число, а тип данных основной таблицы
4 KuJIT
 
05.02.14
12:05
(2) Так ведь программно же. Вообще мне нужно конкретный элемент выцепить. С определенным названием/именем
5 jsmith82
 
05.02.14
12:05
что конкретно надо?
6 KuJIT
 
05.02.14
12:07
ТекущаяСтрока у меня Справочники.Номенклатура.
Нужно найти текущую строку с определенной номенклатурой, и получить ТекущиеДанные
7 KuJIT
 
05.02.14
12:07
(6) СправочникСсылка.номенклатура
8 Рэйв
 
05.02.14
12:07
(4)У источника по индексу бери строку
9 KuJIT
 
05.02.14
12:08
А где мне источник найти?
10 KuJIT
 
05.02.14
12:08
Это жлемент формы?
11 Рэйв
 
05.02.14
12:08
(6)>>ТекущаяСтрока у меня Справочники.Номенклатура

сам то понял что сказал?
12 KuJIT
 
05.02.14
12:09
(11) Я ж исправился -_- (7)
13 jsmith82
 
05.02.14
12:09
у тебя динамический список?
14 Рэйв
 
05.02.14
12:09
(10)Любой элемент формы долен быть с чем то связан.Чьи данные он должен отображать
15 jsmith82
 
05.02.14
12:09
или табличная часть документа / обработки
16 jsmith82
 
05.02.14
12:10
если табличная часть, то

Отбор = Новый Структура("Номенклатура", МояНоменклатура);
МассивСтрок = Объект.Товары.НайтиСтроки(Отбор);
Если МассивСтрок.Количество() > 0 Тогда
СтрокаТабЧасти = МассивСтрок[0];
КонецЕсли;
17 jsmith82
 
05.02.14
12:11
Если динамический список, то в нём невозможно найти какую-то номенклатуру, это по сути запрос. Поэтому надо делать запрос  к базе данных
18 Defender aka LINN
 
05.02.14
12:11
(6) "Нужно найти текущую строку с определенной номенклатурой"
Это вообще как?
19 KuJIT
 
05.02.14
12:11
Дело в том, что форма какая-то хитрая. На сколько я понял, та часть, где эта ТаблицаФормы живет, она создается как-то динамически. Через модуль "ДинамическоеПолеФормы"
20 KuJIT
 
05.02.14
12:13
Например свойство "ПутьКДанным" имеет значение "Ошибка чтения значения"
21 jsmith82
 
05.02.14
12:13
йопт. какие данные у таблицы формы?
22 jsmith82
 
05.02.14
12:13
реквизит формы, объекта, ДС?
23 jsmith82
 
05.02.14
12:14
а, понял
24 jsmith82
 
05.02.14
12:14
Путь к данным где смотришь? на клиенте или сервере
25 KuJIT
 
05.02.14
12:15
(24) Ну, смотрю в отладчике :D
26 HEKPOH
 
05.02.14
12:15
(19) обработка КорректировкаДвижений в БП 3.0 почти все таблички динамически создает. там можно подсмотреть, как пути прописываются и тд и тп
27 jsmith82
 
05.02.14
12:16
(25) в клиентской или серверной процедуре останов
28 KuJIT
 
05.02.14
12:16
(18) имел в виду, чтобы текущая строка стала нужной (с определенной номенклатурой
29 1Сергей
 
05.02.14
12:17
(28) сфотографируй свою 1С
30 KuJIT
 
05.02.14
12:17
(27) Клиентской
31 KuJIT
 
05.02.14
12:17
(29) Какую ее часть?
32 jsmith82
 
05.02.14
12:17
(30) останов на серверной процедуре сделай, прочитай заново
33 1Сергей
 
05.02.14
12:18
(31) самую красивую
34 jsmith82
 
05.02.14
12:19
>>чтобы текущая строка стала нужной
чтобы курсор сам прыгнул на эту строчку?
35 jsmith82
 
05.02.14
12:25
Отбор = Новый Структура("Номенклатура", МояНоменклатура);
МассивСтрок = ЭтаФорма.ДинамическиСозданнаяТаблицаЗначений.НайтиСтроки(Отбор);
Если МассивСтрок.Количество() > 0 Тогда
СтрокаТЗ = МассивСтрок[0];
НомерСтроки = СтрокаТЗ.ПолучитьИдентификатор();
Элементы.ДинамическиСозданнаяТаблицаФормы.ТекущаяСтрока = НомерСтроки;
КонецЕсли;
36 KuJIT
 
05.02.14
12:27
(34) Ну вообще мне нужно переделать типовую обработку. В типовой выбираешь из таблицы строку (двойным кликом) - происходит куча всякого полезного. Мне нужно сделать так, чтобы по кнопочке куча всякого полезного произошло с несколькими определенными элементами из этой таблицы.
37 KuJIT
 
05.02.14
12:27
(33) Так что конкретно хотите увидеть?
38 KuJIT
 
05.02.14
12:30
(32) Не нашел серверную процедуру, в которой бы жил нужный элемент =/
39 jsmith82
 
05.02.14
12:31
(36)
Отбор = Новый Структура("Номенклатура", МояНоменклатура);
МассивСтрок = ЭтаФорма.ДинамическиСозданнаяТаблицаЗначений.НайтиСтроки(Отбор);
Для Каждого Строка Из МассивСтрок Цикл
СделатьМногоПолезного(Строка);
КонецЦикла;

Процедура СделатьМногоПолезного(Строка)
Строка.Цена = 0;
КонецПроцедуры
40 jsmith82
 
05.02.14
12:33
в общем тебе осталось найти реальное название реквизита "ДинамическиСозданнаяТаблицаЗначений"
чтобы найти название, надо посмотреть путь к данным
сделай на серверной процедуре останов
если нет процедуры, напиши процедуру, которая будет вызываться из клиентской
41 jsmith82
 
05.02.14
12:33
а лучше прочитай Радченко и Разработка управляемых форм
42 KuJIT
 
05.02.14
12:35
(39) (40) Спасибо за помощь. Поковыряюсь. Последите за темой еще немножко, пожалуйста, если, вдруг, чего опять спросить придется =)
43 KuJIT
 
05.02.14
13:34
Нет нифига такого реквизита -_- ДинамическиСозданнаяТаблицаЗначений
Все по три раза пересмотрел =/
44 jsmith82
 
05.02.14
13:43
(43) плят, это я так придумал
45 jsmith82
 
05.02.14
13:43
у тебя есть таблица формы
тебе надо знать имя реквизита формы, с которой связана таблица формы
46 jsmith82
 
05.02.14
13:43
ты имя таблицы формы знаешь?
47 Infsams654
 
05.02.14
13:45
(43)прочитай еще раз 1-ю строку в (40)
48 KuJIT
 
05.02.14
14:25
(44) Ну это очеведно. Я уж скопипастил, чтобы понятно было о чем -_-
49 KuJIT
 
05.02.14
14:25
(48) Очевидно*
50 KuJIT
 
05.02.14
14:26
Имею в виду, что нет реквизита, который бы хранил в себе эту штуку. Не нашел как минимум. Хотя очень старался!
51 KuJIT
 
05.02.14
14:28
(46) Ну могу посмотреть во время отладки.
52 jsmith82
 
05.02.14
14:28
имя таблицы формы знаешь?
53 jsmith82
 
05.02.14
14:29
ну как не можешь
на клиенте напиши Элементы, вычисли
смотри имена элементов формы
54 KuJIT
 
05.02.14
14:29
И есть реквизит строковый, в котором то же самое имя написано.
55 KuJIT
 
05.02.14
14:33
Элементы.ДФФормированиеЗаказа01234567890123Список
56 KuJIT
 
05.02.14
14:33
(53) Вот это помогает. Появилась куча элементов, которых в форме не было. Видимо нужный
57 KuJIT
 
05.02.14
14:40
Это оно?)
58 jsmith82
 
05.02.14
14:57
(57) ещё в отладке вычисли ЭтаФорма и посмотри реквизиты формы
59 jsmith82
 
05.02.14
14:57
>>ДФФормированиеЗаказа01234567890123Список
Ахринеть
60 KuJIT
 
05.02.14
15:06
(59) Чего охренеть то?
61 KuJIT
 
05.02.14
15:10
(58) в ЭтаФорма есть параметр типа "динамическийсписок" с таким же именем
62 jsmith82
 
05.02.14
15:17
(61) ну молодец
нашёл, вычислил
теперь надо писать запрос
63 jsmith82
 
05.02.14
15:17
а, щас вытащи сам текст запроса
ЭтаФорма.ДФФормированиеЗаказа01234567890123Список.ТекстЗапроса
64 KuJIT
 
05.02.14
15:25
ВЫБРАТЬ РАЗЛИЧНЫЕ
    СправочникНоменклатура.Артикул КАК НоменклатураАртикул,
    СправочникНоменклатура.Наименование КАК НоменклатураНаименование,
    СправочникНоменклатура.ВидМедицинскойУслуги,
    ВЫБОР
        КОГДА СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК Лупа,
    ВЫБОР
        КОГДА СправочникНоменклатура.ЭтоГруппа = ИСТИНА
            ТОГДА 0
        КОГДА &СегментНоменклатуры <> ЗНАЧЕНИЕ(Справочник.СегментыНоменклатуры.ПустаяСсылка)
                И (НЕ СправочникНоменклатура.Ссылка В
                        (ВЫБРАТЬ
                            НоменклатураСегмента.Номенклатура
                        ИЗ
                            РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
                        ГДЕ
                            НоменклатураСегмента.Сегмент = &СегментНоменклатуры))
            ТОГДА 0
        КОГДА ЕСТЬNULL(МедУслугиСоглашения.Цена, 0) > 0
            ТОГДА МедУслугиСоглашения.Цена * ВЫБОР
                    КОГДА &ВалютаДокумента <> СоглашениеШапка.Валюта
                        ТОГДА ВЫБОР
                                КОГДА ЕСТЬNULL(КурсыСрезПоследнихВалютаСоглашения.Кратность, 0) > 0
                                        И ЕСТЬNULL(КурсыСрезПоследнихВалютаСоглашения.Курс, 0) > 0
                                        И ЕСТЬNULL(КурсыСрезПоследнихВалютаДокумента.Кратность, 0) > 0
                                        И ЕСТЬNULL(КурсыСрезПоследнихВалютаДокумента.Курс, 0) > 0
                                    ТОГДА КурсыСрезПоследнихВалютаСоглашения.Курс * КурсыСрезПоследнихВалютаДокумента.Кратность / (КурсыСрезПоследнихВалютаДокумента.Курс * КурсыСрезПоследнихВалютаСоглашения.Кратность)
                                ИНАЧЕ 0
                            КОНЕЦ
                    ИНАЧЕ 1
                КОНЕЦ
        КОГДА ЕСТЬNULL(РегистрЦен.Цена, 0) > 0
            ТОГДА РегистрЦен.Цена * ВЫБОР
                    КОГДА &ВалютаДокумента <> РегистрЦен.Валюта
                        ТОГДА ВЫБОР
                                КОГДА ЕСТЬNULL(КурсыСрезПоследнихВалютаЦены.Кратность, 0) > 0
                                        И ЕСТЬNULL(КурсыСрезПоследнихВалютаЦены.Курс, 0) > 0
                                        И ЕСТЬNULL(КурсыСрезПоследнихВалютаДокумента.Кратность, 0) > 0
                                        И ЕСТЬNULL(КурсыСрезПоследнихВалютаДокумента.Курс, 0) > 0
                                    ТОГДА КурсыСрезПоследнихВалютаЦены.Курс * КурсыСрезПоследнихВалютаДокумента.Кратность / (КурсыСрезПоследнихВалютаДокумента.Курс * КурсыСрезПоследнихВалютаЦены.Кратность)
                                ИНАЧЕ 0
                            КОНЕЦ
                    ИНАЧЕ 1
                КОНЕЦ
        ИНАЧЕ 0
    КОНЕЦ КАК Цена,
    ВЫБОР
        КОГДА СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ
            ТОГДА МедУслугиСоглашения.Исполнение
    КОНЕЦ КАК ИсполнениеУслуги,
    ВЫБОР
        КОГДА СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК ПризнакГруппы,
    ВЫБОР
        КОГДА СправочникНоменклатура.ЭтоГруппа = ИСТИНА
            ТОГДА 0
        КОГДА ОсновныеСпецификацииМедицинскихУслуг.Номенклатура ЕСТЬ NULL
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК ИмеетсяСпецификация,
    ВЫБОР
        КОГДА СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ
            ТОГДА СостоянияНоменклатуры.Состояние
    КОНЕЦ КАК СостояниеУслуги
ИЗ
    РегистрСведений.ИерархияНоменклатуры КАК ОсновнаяНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСКлиентами.МедицинскиеУслуги КАК МедУслугиСоглашения
        ПО (МедУслугиСоглашения.Ссылка = &ТекСоглашение)
            И ОсновнаяНоменклатура.Ссылка = МедУслугиСоглашения.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСКлиентами КАК СоглашениеШапка
        ПО (СоглашениеШапка.Ссылка = &ТекСоглашение)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСКлиентами.ЦеновыеГруппы КАК СоглашениеЦеновыеГруппы
        ПО (СоглашениеШапка.Ссылка = СоглашениеЦеновыеГруппы.Ссылка)
            И ОсновнаяНоменклатура.ЦеноваяГруппа = СоглашениеЦеновыеГруппы.ЦеноваяГруппа
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК РегистрЦен
        ПО ОсновнаяНоменклатура.Ссылка = РегистрЦен.Номенклатура
            И (РегистрЦен.ВидЦены = ВЫБОР
                КОГДА ЕСТЬNULL(МедУслугиСоглашения.Цена, 0) > 0
                    ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
                КОГДА МедУслугиСоглашения.ВидЦены <> ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
                        И МедУслугиСоглашения.ВидЦены ЕСТЬ НЕ NULL
                    ТОГДА МедУслугиСоглашения.ВидЦены
                КОГДА (МедУслугиСоглашения.ВидЦены = ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
                        ИЛИ МедУслугиСоглашения.ВидЦены ЕСТЬ NULL )
                        И СоглашениеЦеновыеГруппы.ВидЦен ЕСТЬ НЕ NULL
                        И СоглашениеЦеновыеГруппы.ВидЦен <> ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
                    ТОГДА СоглашениеЦеновыеГруппы.ВидЦен
                КОГДА (МедУслугиСоглашения.ВидЦены = ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
                        ИЛИ МедУслугиСоглашения.ВидЦены ЕСТЬ NULL )
                        И (СоглашениеЦеновыеГруппы.ВидЦен ЕСТЬ NULL
                            ИЛИ СоглашениеЦеновыеГруппы.ВидЦен = ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка))
                        И СоглашениеШапка.ВидЦен <> ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
                    ТОГДА СоглашениеШапка.ВидЦен
                ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
            КОНЕЦ)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияНоменклатуры.СрезПоследних(&Дата, ) КАК СостоянияНоменклатуры
        ПО ОсновнаяНоменклатура.Ссылка = СостоянияНоменклатуры.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОсновныеСпецификацииМедицинскихУслуг.СрезПоследних(&Дата, ) КАК ОсновныеСпецификацииМедицинскихУслуг
        ПО ОсновнаяНоменклатура.Ссылка = ОсновныеСпецификацииМедицинскихУслуг.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, ) КАК КурсыСрезПоследнихВалютаЦены
        ПО (КурсыСрезПоследнихВалютаЦены.Валюта = РегистрЦен.Валюта)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &ВалютаДокумента) КАК КурсыСрезПоследнихВалютаДокумента
        ПО (ИСТИНА)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &ВалютаДокумента) КАК КурсыСрезПоследнихВалютаСоглашения
        ПО (ИСТИНА)
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
        ПО ОсновнаяНоменклатура.НоменклатураИГруппы = СправочникНоменклатура.Ссылка
            И (ИСТИНА
    И ОсновнаяНоменклатура.ВладелецНоменклатуры = ЗНАЧЕНИЕ(Справочник.ВладельцыНоменклатуры.ПустаяСсылка))
            И (ОсновнаяНоменклатура.ЭтоГруппа = ЛОЖЬ)
            И (СправочникНоменклатура.ЭтоГруппа <= &ОтображатьГруппы)
            И (СправочникНоменклатура.ПометкаУдаления = ЛОЖЬ)
65 jsmith82
 
05.02.14
15:32
ну вот по команде топай в серверную процедуру, делай запрос, вытаскивай нужные строки и манипулируй данными
таблица формы в данном случае лишь динамически отображает состояние запроса, то есть для динамического списка невозможна итерация как для таблицы значений или табличной части
66 KuJIT
 
05.02.14
15:52
Ясно-понятно. Спасибо большое!
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс