|
Помогите с выборкой | ☑ | ||
---|---|---|---|---|
0
Boudybuilder
22.10.11
✎
15:48
|
Вот запрос
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |СостояниеРемонтовСрезПоследних.Сервис, |СостояниеРемонтовСрезПоследних.Модель, |СостояниеРемонтовСрезПоследних.Склад, |СтоимостьРемонтовОстатки.ЦенаОстаток, |СтоимостьРемонтовОстатки.ЦенаУпрОстаток, |СтоимостьРемонтов.Работы |ИЗ |РегистрСведений.СостояниеРемонтов.СрезПоследних КАК СостояниеРемонтовСрезПоследних |ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьРемонтов.Остатки КАК СтоимостьРемонтовОстатки |ПО СостояниеРемонтовСрезПоследних.ID = СтоимостьРемонтовОстатки.ID |ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьРемонтов КАК СтоимостьРемонтов |ПО СостояниеРемонтовСрезПоследних.ID = СтоимостьРемонтов.ID |ГДЕ |СостояниеРемонтовСрезПоследних.ID = &ID и СостояниеРемонтовСрезПоследних.НаСкладе = &Склад и СостояниеРемонтовСрезПоследних.Состояние <> ЗНАЧЕНИЕ (Перечисление.СостоянияРемонтов.Выдан)"; Запрос.УстановитьПараметр("ID",ID); Запрос.УстановитьПараметр("Склад",Склад); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Предупреждение("Номер ремонта на текущем складе отсутствует",4); ЭлементыФормы.ID.Значение = (""); Возврат; Иначе Выборка = РезультатЗапроса.Выбрать(); Выборка.Выбрать(); Пока Выборка.Следующий() Цикл Контрагент = Выборка.Контрагент; Модель = Выборка.Модель; АКБ = Выборка.АКБ; IMEISerial = Выборка.IMEISerial; Комплектация = Выборка.Комплектация; Неисправность = Выборка.Неисправность; Комментарий = Выборка.Работы; Состояние = Выборка.Состояние; НаСкладе = Выборка.НаСкладе; ДатаДока = Выборка.Период; ГарантийныйРемонт = Выборка.ГарантийныйРемонт; Сервис = Выборка.Сервис; НачислениеЗаРемонт = Выборка.НачислениеЗаРемонт; ЦенаИсходящая = Выборка.ЦенаОстаток; КонецЦикла; КонецЕсли; |
|||
1
Boudybuilder
22.10.11
✎
15:50
|
Как сделать чтобы в ввыборке КОММЕНТАРИЙ получил все значения реквизита работы из регистра накопления?
|
|||
2
Boudybuilder
22.10.11
✎
15:51
|
Ато у меня получает только значение последней записи регистра...
|
|||
3
kosts
22.10.11
✎
15:59
|
Как то так
или так
|
|||
4
Boudybuilder
22.10.11
✎
16:02
|
Это реквизит строка , и мне надо чтоб в форму дока в поле добавило все записи.
|
|||
5
Boudybuilder
22.10.11
✎
16:04
|
Типа
1 - а 2 - б 3 - в А мне в форму заполнило не "в" , как оно щас происходит , а так : " а б в" |
|||
6
kosts
22.10.11
✎
16:09
|
|
|||
7
kosts
22.10.11
✎
16:17
|
но это не очень правильный подход.
представь что будет при открытии документа, когда в регистре миллионы записей уже будет... при каждом открытии задержки. можно индексировать по полю, но это лишнее увеличение базы... |
|||
8
kosts
22.10.11
✎
16:23
|
(7) в общем создай справочник, в котором будут перечислены варианты.
в регистре можно заменить этот реквизит на справочник или так оставить. |
|||
9
Boudybuilder
22.10.11
✎
16:46
|
Там милион записей не может быть. Максимум дае три. Я ж отбераю по идентификатору.
|
|||
10
kosts
22.10.11
✎
17:15
|
(9) во всем регистре миллион записей то будет, и он весь будет сканироваться, что бы найти два три варианта...
|
|||
11
Boudybuilder
22.10.11
✎
17:48
|
Регистр же и так отбирает несколько вариантов , там же фильтр стоит по идентификатору
|ГДЕ |СостояниеРемонтовСрезПоследних.ID = &ID; Запрос.УстановитьПараметр("ID",ID); А там всего две - три строки в которых будет реквизит "Работы". Так мне надо чтоб те записи все в одно поле закинуло... |
|||
12
Amiralnar
22.10.11
✎
18:28
|
По виртуальной таблице "Остатки" реквизит записи получить нельзя. Отсюда запрос к таблице записей РегистрНакопления.СтоимостьРемонтов (3)
В запросе конкатенация строк не делается. Отсюда итоги+перебор. |
|||
13
GROOVY
22.10.11
✎
18:40
|
(12) В запросе строки конкатенировать можно.
|
|||
14
Amiralnar
22.10.11
✎
19:09
|
(13) Если вы придираетесь к словам, и имеете ввиду, что можно писать ВЫБРАТЬ "А" + "Б" - то в чем польза вашего замечания?
Если вы подразумеваете, что можно агрегировать так, чтобы из таблицы ВЫБРАТЬ "А" ОБЪЕДИНИТЬ ВЫБРАТЬ "Б" ОБЪЕДИНИТЬ ВЫБРАТЬ "В" можно было получить "АБВ", то покажите, пожалуйста, какой оператор это сделает? |
|||
15
GROOVY
22.10.11
✎
20:05
|
(14) Я не придераюсь к словам, Вы сказали нельзя, это не так. Тот кто будет читать историю сообщений на форуме может сделать неправильные выыводы.
По поводу Вашей задачи, она решается элементарно :) ВЫБРАТЬ * ПОМЕСТИТЬ Таб ИЗ ( ВЫБРАТЬ "А" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Б" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "В" ) КАК ВложенныйЗапрос ; ВЫБРАТЬ ТабА.Поле1 + ТабА.Поле2 + Таб3.Поле1 ИЗ (ВЫБРАТЬ Таб.Поле1 КАК Поле1, Таб2.Поле1 КАК Поле2 ИЗ Таб КАК Таб СОЕДИНЕНИЕ Таб КАК Таб2 ПО Таб.Поле1 <> Таб2.Поле1) КАК ТабА СОЕДИНЕНИЕ Таб КАК Таб3 ПО ТабА.Поле1 <> Таб3.Поле1 И ТабА.Поле2 <> Таб3.Поле1 |
|||
16
Boudybuilder
22.10.11
✎
22:08
|
Может меня н понимают , или я не понимаю , опишу както попроще...
Вот запрос: |Выбрать |СтоимостьРемонтов.ID |СтоимостьРемонтов.Работы |Из РегистрНакопления.СтоимостьРемонтов КАК СтоимостьРемонтов |ГДЕ |СтоимостьРемонтов.ID = ("ADM00001"); Дает результат: ID | Работы ----------------------------- ADM00001 | Текст 1 ADM00001 | Текст 2 ADM00001 | Текст 3 ADM00001 | Текст 4 Работы это Реквизит регистра с типом строка. Хочется: Чтобы с этой таблицы я получил все значения реквизита Работы в одну строку элемента формы дока. Тоесть чтоб было так : Текст 1 , Текст 2 , Текст 3 , Текст 4. Нужно это для того , что при осуществлении ремонта , апарат попадает иногда на несколько сервисов которые по нему выполняют свои работы. В доке ПриемИзСервиса для каждого ремонта по даному апарату я ввожу что делалось в строку РАБОТЫ. Потом при выдаче апарата из ремонта оно мне сумирует себестоимость и Цену , но хочется, чтобы все работы исполненые по этому апарату тоже вывелись вместе потом в доке в одном поле , а потом уж пошли на печатную форму и клиент и я видел что делалось ... Мелочь ,но нужно... :) |
|||
17
GROOVY
22.10.11
✎
22:14
|
В (12) ответ на вопрос. Перебор результата запроса с выводом данных в результирующую строку.
|
|||
18
GROOVY
22.10.11
✎
22:14
|
+17 в запросе это сделать можно только при условии что всегда заранее известно количество работ (строк).
|
|||
19
Boudybuilder
22.10.11
✎
22:16
|
(18)
Вот и я о том же... (17) А это как сделать? Помоги на моем примере , а... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |