![]() |
![]() |
![]() |
|
Заполнить ТЗ на форме | ☑ | ||
---|---|---|---|---|
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) Я сворачиваю по последнему сообщению :о)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |