Имя: Пароль:
1C
 
Заполнить ТЗ на форме
0 myr4ik07
 
06.07.15
10:42
Привет. Есть форма https://drive.google.com/file/d/0B_ftR73Ev7osXzd1VVd1TUZCcE0/view?usp=sharing
есть

СписокЗначений = Новый СписокЗначений;
    Для Каждого Элемент Из ВсеЦеныНоменклатуры Цикл
        СписокЗначений.Добавить(Элемент.Номенклатура);
    КонецЦикла;    
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    |    ЦеныНоменклатурыСрезПоследних.ВидЦен,
    |    ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    |            ,
    |            Номенклатура В (&Номенклатура)
    |                И ВидЦен В (&ВидЦен1, &ВидЦен2, &ВидЦен3, &ВидЦен4)) КАК ЦеныНоменклатурыСрезПоследних";
    
    Запрос.УстановитьПараметр("ВидЦен1", Справочники.ВидыЦен.НайтиПоКоду("000000001"));
    Запрос.УстановитьПараметр("ВидЦен2", Справочники.ВидыЦен.НайтиПоКоду("000000002"));
    Запрос.УстановитьПараметр("ВидЦен3", Справочники.ВидыЦен.НайтиПоКоду("000000003"));
    Запрос.УстановитьПараметр("ВидЦен4", Справочники.ВидыЦен.НайтиПоКоду("000000004"));    
    
    Запрос.УстановитьПараметр("Номенклатура", СписокЗначений);
    РезультатЗапроса = Запрос.Выполнить().Выбрать();

прошу вас подсказать, каким образом мне соответствующие ячейки заполнить?
1 Альбатрос
 
06.07.15
10:44
ТвояТЗ.Загрузить(Запрос.Выполнить.Выгрузить());
2 Альбатрос
 
06.07.15
10:45
и полей у тебя не хватает в запросе
3 myr4ik07
 
06.07.15
10:45
(1) не вариант, у меня первая колонка очищается при .Загрузить(), а это мне не нужно
4 myr4ik07
 
06.07.15
10:46
(2) не понял, для каждой колонки нужно с запроса выибирать поле?
5 Альбатрос
 
06.07.15
10:46
(3) Добавь ее в запрос
6 Альбатрос
 
06.07.15
10:47
(4) Если хочешь .Загрузить() использовать
7 myr4ik07
 
06.07.15
10:47
(6) та наверное не пойдет .Загрузить(), есть еще варианты?
8 Cyberhawk
 
06.07.15
10:48
Ну, не пойдет, так не пойдет, как скажешь
9 myr4ik07
 
06.07.15
10:48
(6) Пока Выборка.Следующий() Цикл думал но увы, не могу додумать как указать соответствующие колонки и т.д. условия, например на "если пустая цена"
10 Альбатрос
 
06.07.15
10:48
(7) Почему не пойдет-то? В запросе сформируешь окончательную выборку с учетом твоей первой колонки.
По-другому .НайтиСтроки()
11 myr4ik07
 
06.07.15
10:50
(8) если я написал, что наверное не подойдет то наверное есть нюанс, а это, нижняя ТЧ заполняется на основании верхней ТЧ, а в ней не всегда ИсходнаяЦена это Зак.Цена
12 myr4ik07
 
06.07.15
10:50
(10) о, я такого не знал, а есть пример?
13 myr4ik07
 
06.07.15
10:50
Тогда беру свои слова обратно
14 Альбатрос
 
06.07.15
10:52
(12) гугли Временные таблицы в запросе.
15 myr4ik07
 
06.07.15
10:54
(14) спасибо
16 myr4ik07
 
06.07.15
14:17
Ну, есть запрос теперь такой

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТЧ.Номенклатура КАК НоменклатураТЧ,
    |    ТЧ.ИсходнаяЦена КАК ИсходнаяЦенаТЧ
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    |    &ЦеныНоменклатуры КАК ТЧ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ.НоменклатураТЧ,
    |    ВТ.ИсходнаяЦенаТЧ,
    |    ЦеныНоменклатурыСрезПоследних.ВидЦен,
    |    ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    |    ВТ КАК ВТ
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    |                ,
    |                Номенклатура В (&СписокНоменклатуры)
    |                    И ВидЦен В (&ВидЦен1, &ВидЦен2, &ВидЦен3, &ВидЦен4)) КАК ЦеныНоменклатурыСрезПоследних
    |        ПО ВТ.НоменклатураТЧ = ЦеныНоменклатурыСрезПоследних.Номенклатура";
        
    Запрос.УстановитьПараметр("ВидЦен1", Справочники.ВидыЦен.НайтиПоКоду("000000001"));
    Запрос.УстановитьПараметр("ВидЦен2", Справочники.ВидыЦен.НайтиПоКоду("000000002"));
    Запрос.УстановитьПараметр("ВидЦен3", Справочники.ВидыЦен.НайтиПоКоду("000000003"));
    Запрос.УстановитьПараметр("ВидЦен4", Справочники.ВидыЦен.НайтиПоКоду("000000004"));
    
    Запрос.УстановитьПараметр("ЦеныНоменклатуры", ДанныеФормыВЗначение(ВсеЦеныНоменклатуры, Тип("ТаблицаЗначений")));
    Запрос.УстановитьПараметр("СписокНоменклатуры", СписокЗначений);    
    Результат = Запрос.Выполнить().Выбрать();


получаю все что надо, и как теперь поместить типа
Номенклатура Цена1 Цена2 Цена3 Цена4 ?
У меня получается только
Номенклатура Цена1
                  Цена2
                       Ценв3
                            Цена4
17 bootini
 
06.07.15
14:32
(16) объединять надо 4 запроса.
Помещай последний запрос пакета во временную таблицу, и объединяй из неё 4 запроса на каждый из которых накладывай соответствующий параметр &ВидЦен
18 myr4ik07
 
06.07.15
14:39
(17) не могу на словах вашу мысль поймать, можете кусок примера пожалуйста
19 myr4ik07
 
06.07.15
14:41
(17) т.е., мне ВидЦен В (&ВидЦен1, &ВидЦен2, &ВидЦен3, &ВидЦен4) уже не нужно, а указывать вид цен при каждом объединении, верно?
20 myr4ik07
 
06.07.15
14:52
(17) типа что то такое "дикое" должно быть

ВЫБРАТЬ
    |    ТЧ.Номенклатура КАК НоменклатураТЧ,
    |    ТЧ.ИсходнаяЦена КАК ИсходнаяЦенаТЧ
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    |    &ЦеныНоменклатуры КАК ТЧ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ.НоменклатураТЧ,
    |    ВТ.ИсходнаяЦенаТЧ,
    |    ЦеныНоменклатурыСрезПоследних.ВидЦен,
    |    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена1
    |ИЗ
    |    ВТ КАК ВТ
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    |                ,
    |                Номенклатура В (&СписокНоменклатуры)
    |                    И ВидЦен = &ВидЦен1) КАК ЦеныНоменклатурыСрезПоследних
    |        ПО ВТ.НоменклатураТЧ = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    NULL,
    |    NULL,
    |    NULL,
    |    ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    |            ,
    |            Номенклатура В (&СписокНоменклатуры)
    |                И ВидЦен = &ВидЦен2) КАК ЦеныНоменклатурыСрезПоследних
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    NULL,
    |    NULL,
    |    NULL,
    |    ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    |            ,
    |            Номенклатура В (&СписокНоменклатуры)
    |                И ВидЦен = &ВидЦен3) КАК ЦеныНоменклатурыСрезПоследних
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    NULL,
    |    NULL,
    |    NULL,
    |    ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    |            ,
    |            Номенклатура В (&СписокНоменклатуры)
    |                И ВидЦен = &ВидЦен4) КАК ЦеныНоменклатурыСрезПоследних

?
21 Лефмихалыч
 
06.07.15
14:54
РеквизитФормыВЗначение()
заполняем, как любую другую ТЗ
ЗначениеВРеквизитФормы()
22 Лефмихалыч
 
06.07.15
14:54
+(21)  если я правильно угадал, в чем печаль автора
23 bootini
 
06.07.15
14:55
(20) АГА, только потом еще раз это хозяйство поместить ВТ, чтобы сгруппировать в результирующем запросе

Как-то так:

ВЫБРАТЬ
    ЦеныКомпанииСрезПоследних.Номенклатура,
    ЦеныКомпанииСрезПоследних.ТипЦен,
    ЦеныКомпанииСрезПоследних.Цена
ПОМЕСТИТЬ ВТ_НоменклатураСоВсемиЦенами
ИЗ
    РегистрСведений.ЦеныКомпании.СрезПоследних(
            &Дата,
            Номенклатура = &Номенклатура
                И ТипЦен В (&ВидЦены1, &ВидЦены2)) КАК ЦеныКомпанииСрезПоследних
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_НоменклатураСоВсемиЦенами.Номенклатура,
    ЕСТЬNULL(ВТ_НоменклатураСоВсемиЦенами.Цена, 0) КАК Цена1,
    0 КАК Цена2
ПОМЕСТИТЬ ВТ_Объекдинение
ИЗ
    ВТ_НоменклатураСоВсемиЦенами КАК ВТ_НоменклатураСоВсемиЦенами
ГДЕ
    ВТ_НоменклатураСоВсемиЦенами.ТипЦен = &ВидЦены1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВТ_НоменклатураСоВсемиЦенами.Номенклатура,
    0,
    ЕСТЬNULL(ВТ_НоменклатураСоВсемиЦенами.Цена, 0)
ИЗ
    ВТ_НоменклатураСоВсемиЦенами КАК ВТ_НоменклатураСоВсемиЦенами
ГДЕ
    ВТ_НоменклатураСоВсемиЦенами.ТипЦен = &ВидЦены2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Объекдинение.Номенклатура,
    СУММА(ВТ_Объекдинение.Цена1) КАК Цена1,
    СУММА(ВТ_Объекдинение.Цена2) КАК Цена2
ИЗ
    ВТ_Объекдинение КАК ВТ_Объекдинение

СГРУППИРОВАТЬ ПО
    ВТ_Объекдинение.Номенклатура
24 bootini
 
06.07.15
15:08
(20) Еще этот кусок "Номенклатура В (&СписокНоменклатуры)" уже не нужен ты и так вяжешь левым соединением по номенклатуре
25 bootini
 
06.07.15
15:21
Вот:


ВЫБРАТЬ
    ТЧ.Номенклатура КАК НоменклатураТЧ,
    ТЧ.ИсходнаяЦена КАК ИсходнаяЦенаТЧ
ПОМЕСТИТЬ ВТ
ИЗ
    &ЦеныНоменклатуры КАК ТЧ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.НоменклатураТЧ,
    ВТ.ИсходнаяЦенаТЧ,
    ЦеныКомпанииСрезПоследних.ТипЦен,
    ЦеныКомпанииСрезПоследних.Цена
ПОМЕСТИТЬ ВТ_НоменклатураСоВсемиЦенами
ИЗ
    ВТ КАК ВТ
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныКомпании.СрезПоследних(&Дата, ТипЦен В (&ВидЦены1, &ВидЦены2, &ВидЦены3, &ВидЦены4)) КАК ЦеныКомпанииСрезПоследних
        ПО ВТ.НоменклатураТЧ = ЦеныКомпанииСрезПоследних.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_НоменклатураСоВсемиЦенами.НоменклатураТЧ,
    ВТ_НоменклатураСоВсемиЦенами.ИсходнаяЦенаТЧ,
    ЕСТЬNULL(ВТ_НоменклатураСоВсемиЦенами.Цена, 0) КАК Цена1,
    0 КАК Цена2,
    0 КАК Цена3,
    0 КАК Цена4
ПОМЕСТИТЬ ВТ_Объединение
ИЗ
    ВТ_НоменклатураСоВсемиЦенами КАК ВТ_НоменклатураСоВсемиЦенами
ГДЕ
    ВТ_НоменклатураСоВсемиЦенами.ТипЦен = &ВидЦены1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВТ_НоменклатураСоВсемиЦенами.НоменклатураТЧ,
    ВТ_НоменклатураСоВсемиЦенами.ИсходнаяЦенаТЧ,
    0,
    ЕСТЬNULL(ВТ_НоменклатураСоВсемиЦенами.Цена, 0),
    0,
    0
ИЗ
    ВТ_НоменклатураСоВсемиЦенами КАК ВТ_НоменклатураСоВсемиЦенами
ГДЕ
    ВТ_НоменклатураСоВсемиЦенами.ТипЦен = &ВидЦены2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВТ_НоменклатураСоВсемиЦенами.НоменклатураТЧ,
    ВТ_НоменклатураСоВсемиЦенами.ИсходнаяЦенаТЧ,
    0,
    0,
    ЕСТЬNULL(ВТ_НоменклатураСоВсемиЦенами.Цена, 0),
    0
ИЗ
    ВТ_НоменклатураСоВсемиЦенами КАК ВТ_НоменклатураСоВсемиЦенами
ГДЕ
    ВТ_НоменклатураСоВсемиЦенами.ТипЦен = &ВидЦены3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВТ_НоменклатураСоВсемиЦенами.НоменклатураТЧ,
    ВТ_НоменклатураСоВсемиЦенами.ИсходнаяЦенаТЧ,
    0,
    0,
    0,
    ЕСТЬNULL(ВТ_НоменклатураСоВсемиЦенами.Цена, 0)
ИЗ
    ВТ_НоменклатураСоВсемиЦенами КАК ВТ_НоменклатураСоВсемиЦенами
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Объединение.НоменклатураТЧ,
    ВТ_Объединение.ИсходнаяЦенаТЧ,
    МАКСИМУМ(ВТ_Объединение.Цена1) КАК Цена1,
    МАКСИМУМ(ВТ_Объединение.Цена2) КАК Цена2,
    МАКСИМУМ(ВТ_Объединение.Цена3) КАК Цена3,
    МАКСИМУМ(ВТ_Объединение.Цена4) КАК Цена4
ИЗ
    ВТ_Объединение КАК ВТ_Объединение

СГРУППИРОВАТЬ ПО
    ВТ_Объединение.НоменклатураТЧ,
    ВТ_Объединение.ИсходнаяЦенаТЧ
26 myr4ik07
 
06.07.15
16:15
может кому то будет пригодно, вийшов з ситуації таким чином

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТЧ.Номенклатура,
    |    ТЧ.ИсходнаяЦена
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    |    &ЦеныНоменклатуры КАК ТЧ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ.Номенклатура,
    |    ВТ.ИсходнаяЦена,
    |    Цена1.Цена КАК Цена1,
    |    Цена2.Цена КАК Цена2,
    |    Цена3.Цена КАК Цена3,
    |    Цена4.Цена КАК Цена4
    |ИЗ
    |    ВТ КАК ВТ
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    |                ,
    |                Номенклатура В (&СписокНоменклатуры)
    |                    И ВидЦен = &ВидЦен1) КАК Цена1
    |        ПО ВТ.Номенклатура = Цена1.Номенклатура
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    |                ,
    |                Номенклатура В (&СписокНоменклатуры)
    |                    И ВидЦен = &ВидЦен2) КАК Цена2
    |        ПО (ВТ.Номенклатура = Цена1.Номенклатура)
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    |                ,
    |                Номенклатура В (&СписокНоменклатуры)
    |                    И ВидЦен = &ВидЦен3) КАК Цена3
    |        ПО (ВТ.Номенклатура = Цена1.Номенклатура)
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    |                ,
    |                Номенклатура В (&СписокНоменклатуры)
    |                    И ВидЦен = &ВидЦен4) КАК Цена4
    |        ПО (ВТ.Номенклатура = Цена1.Номенклатура)";
        
    Запрос.УстановитьПараметр("ВидЦен1", Справочники.ВидыЦен.НайтиПоКоду("000000001"));
    Запрос.УстановитьПараметр("ВидЦен2", Справочники.ВидыЦен.НайтиПоКоду("000000002"));
    Запрос.УстановитьПараметр("ВидЦен3", Справочники.ВидыЦен.НайтиПоКоду("000000003"));
    Запрос.УстановитьПараметр("ВидЦен4", Справочники.ВидыЦен.НайтиПоКоду("000000004"));
    
    Запрос.УстановитьПараметр("ЦеныНоменклатуры", ДанныеФормыВЗначение(ВсеЦеныНоменклатуры, Тип("ТаблицаЗначений")));
    Запрос.УстановитьПараметр("СписокНоменклатуры", СписокЗначений);    
    Результат = Запрос.Выполнить().Выгрузить();
    ВсеЦеныНоменклатуры.Загрузить(Результат);
27 myr4ik07
 
06.07.15
16:16
ВсеЦеныНоменклатуры і є переобразована ТаблицаЗначения, а на формі як ДанныеФормыКоллекция
28 myr4ik07
 
06.07.15
16:18
там з соединением не то что хотелось но смысл виден
29 bootini
 
06.07.15
17:00
(27) Про это, Лефмихалыч в (21) ванговал
30 bootini
 
06.07.15
17:07
(26) бяку сделал но работать будет, 4 раза делаешь запрос к регистру.
31 ДенисЧ
 
06.07.15
17:08
Вод ведь упоротый... С ним по-русски, а он на своём лепечет...
32 Smallrat
 
06.07.15
17:11
Раз пошла такая пьянка - кто знает, как ускорить перемещение таблицы с сервера на клиент?
Таблица на сервере формируется, загоняется в реквизит через ЗначениеВРеквизитФормы(), выполнение возвращается на клиент - и вот это возвращение длится 5 секунд для простенькой таблицы из 15 колонк и 20 строк. я час уже переписываю и так и эдак, ускорить не получается((
33 Smallrat
 
06.07.15
17:13
причем только первый раз длится долго, дальше все пролетает меньше чем за секунду, но мне нужен как раз первый
34 Cyberhawk
 
06.07.15
17:24
Долго это сколько миллисекунд?
35 ДенисЧ
 
06.07.15
17:25
(34) А ты читать не умеешь... (
36 Cyberhawk
 
06.07.15
17:41
(35) Я сворачиваю по последнему сообщению :о)
Основная теорема систематики: Новые системы плодят новые проблемы.