|
Как с запроса убрать лишние записи? | ☑ | ||
---|---|---|---|---|
0
SherifSP
12.07.12
✎
21:23
|
Есть такой запрос и цикл
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПродажиСебестоимость.Регистратор, | ПродажиСебестоимость.Номенклатура, | ПродажиСебестоимость.Стоимость |ИЗ | РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость |ГДЕ | ПродажиСебестоимость.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах" ; Выборка = Запрос.Выполнить().Выгрузить(); Сч = 0; Пока Сч < ТаблицаДвижений.Количество() Цикл Для Каждого Стр Из Выборка Цикл СтрокаТаблицы = ТаблицаДвижений.Получить(Сч); Если СтрокаТаблицы.Номенклатура = Стр.Номенклатура Тогда СтрокаТаблицы.СуммаУчета = Стр.Стоимость; Иначе Возврат; КонецЕсли; Сч = Сч + 1; КонецЦикла; КонецЦикла; Когда в регистре запись одна отрабатывает нормально, когда 2 и больше не отрабатывает нормально цикл, нужно как то удалить старые записи |
|||
1
Rie
12.07.12
✎
21:25
|
ВЫБРАТЬ ПЕРВЫЕ 1
... УПОРЯДОЧИТЬ ПО ... |
|||
2
SherifSP
12.07.12
✎
21:26
|
(1) Упорядочить по номенклатуре?
|
|||
3
SherifSP
12.07.12
✎
21:27
|
Я по дате по убыванию попробую
|
|||
4
Mort
12.07.12
✎
21:27
|
Хрень какая-то. Так из какого документа надо брать-то если их несколько? Рандомом?
|
|||
5
SherifSP
12.07.12
✎
21:29
|
(4) Я условие на регистратор поставил
|
|||
6
Rie
12.07.12
✎
21:29
|
(2) По номенклатуре - отобрать. Иначе получите запись для непонятно какой номенклатуры.
|
|||
7
SherifSP
12.07.12
✎
21:29
|
Все разобрался отрабатывает норм
|
|||
8
SherifSP
12.07.12
✎
21:30
|
Нет хреново отрабатывает)
|
|||
9
SherifSP
12.07.12
✎
21:41
|
(6)Не отрабатывает, только последнюю запись видить(
|
|||
10
SherifSP
12.07.12
✎
21:43
|
Есть еще варианты?
|
|||
11
Rie
12.07.12
✎
21:46
|
(9) А нужна первая? См. ключевые слова ВОЗР и УБЫВ.
|
|||
12
SherifSP
12.07.12
✎
21:57
|
Нужно выбрать ту запись которая на данный момент создалась
|
|||
13
SherifSP
12.07.12
✎
21:58
|
Их может быть и не 1, так как в табличной части может быть пару номенклатур
|
|||
14
sapphire
12.07.12
✎
21:59
|
(0) редкий бред
|
|||
15
SherifSP
12.07.12
✎
22:01
|
У меня документ делает движение сразу по нескольким регистрам, когда транзакция прошла по регистру ПродажиСебестоимость, я пытаюсь выбрать записи по регистратору
|
|||
16
SherifSP
12.07.12
✎
22:01
|
(14) Как можно лучше?
|
|||
17
SherifSP
12.07.12
✎
22:03
|
Можно таким способом?
"ВЫБРАТЬ | ВремТабДвижений.Номенклатура, | СУММА(ВремТабДвижений.СуммаУчета) КАК СуммаУчета, | СУММА(ВремТабСписания.Стоимость) КАК Стоимость |ИЗ | &ВремТабДвижений КАК ВремТабДвижений | ПОЛНОЕ СОЕДИНЕНИЕ &ВремТабСписания КАК ВремТабСписания | ПО ВремТабДвижений.Номенклатура = ВремТабСписания.Номенклатура | |СГРУППИРОВАТЬ ПО | ВремТабДвижений.Номенклатура"; |
|||
18
SherifSP
12.07.12
✎
22:03
|
Но пишет ошибку когда Соединяю эти 2 таблицы
Ожидается имя таблицы ПОЛНОЕ СОЕДИНЕНИЕ <<?>>&ВремТабСписания КАК ВремТабСписания |
|||
19
andrewks
12.07.12
✎
22:05
|
из таблицы-параметра можно выбрать только в ВТ
|
|||
20
SherifSP
12.07.12
✎
22:05
|
Тоесть мне нужно 2 виртуальные и 2 параметра таблицы?
|
|||
21
andrewks
12.07.12
✎
22:07
|
я не знаю, что тебе нужно. я объясняю, почему выдаёт ошибку
|
|||
22
SherifSP
12.07.12
✎
22:09
|
(21)А по теме есть какие предложения?
|
|||
23
andrewks
12.07.12
✎
22:10
|
(22) не совсем понятна задача. ты приводишь два абсолютно разных запроса. озвучь чётко суть задачи
|
|||
24
Ctyd
12.07.12
✎
22:10
|
вопрос: С какой целью это нужно?
или дай полный код, что ты с чем сравниваешь.. |
|||
25
SherifSP
12.07.12
✎
22:12
|
Документ делает движения по регистрам. В одном регистре запись Стоимость =34, во втором 13, суть задачи такова чтобы Стоимость второго регистра была равна стоимости первого
|
|||
26
AlexNew
12.07.12
✎
22:12
|
Хароший код, давно такого не видел, все остатки с полным соединением.
|
|||
27
AlexNew
12.07.12
✎
22:13
|
А даже не остатки, просмотрел.
|
|||
28
SherifSP
12.07.12
✎
22:14
|
// ТОВАРЫ ПО РЕГИСТРУ Продажи.
НаборДвижений = Движения.Продажи; ТаблицаДвижений = НаборДвижений.Выгрузить(); ТаблицаПоТоварамПродажи = ТаблицаПоТоварам.Скопировать(); ТаблицаПоТоварамПродажи.Колонки.НДС.Имя = "НДСРегл"; ТаблицаПоТоварамПродажи.Колонки.НДСУпр.Имя = "НДС"; Если СтруктураШапкиДокумента.ВедениеУчетаПоПроектам Тогда УправлениеПроектами.ОтразитьДвиженияПоПроектам(ТаблицаПоТоварамПродажи, ТаблицаДвижений, Проект, Дата, "Продажи"); Иначе ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТоварамПродажи, ТаблицаДвижений); КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПродажиСебестоимость.Регистратор, | ПродажиСебестоимость.Номенклатура КАК Номенклатура, | ПродажиСебестоимость.Стоимость |ИЗ | РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость |ГДЕ | ПродажиСебестоимость.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах | |УПОРЯДОЧИТЬ ПО | Номенклатура, | ПродажиСебестоимость.Период УБЫВ" ; Выборка = Запрос.Выполнить().Выгрузить(); Сч = 0; Пока Сч < ТаблицаДвижений.Количество() Цикл Для Каждого Стр Из Выборка Цикл СтрокаТаблицы = ТаблицаДвижений.Получить(Сч); Если СтрокаТаблицы.Номенклатура = Стр.Номенклатура Тогда СтрокаТаблицы.СуммаУчета = Стр.Стоимость; Иначе Возврат; КонецЕсли; Сч = Сч + 1; КонецЦикла; КонецЦикла; ТаблицаДвижений.ЗаполнитьЗначения(Ссылка , "ДокументПродажи"); ТаблицаДвижений.ЗаполнитьЗначения(Подразделение, "Подразделение"); ТаблицаДвижений.ЗаполнитьЗначения(Организация , "Организация"); НаборДвижений.мПериод = Дата; НаборДвижений.мТаблицаДвижений = ТаблицаДвижений; Если Не Отказ Тогда Движения.Продажи.ВыполнитьДвижения(); КонецЕсли; |
|||
29
SherifSP
12.07.12
✎
22:16
|
Движения по регистру продажи выполняются после движения по регистру ПродажиСебестоимость, я пытался запросом вытянуть движения и в цыкле перебором этих движений подставить Стоимость первого регистра в стоимость второго
|
|||
30
Ctyd
12.07.12
✎
22:16
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПродажиСебестоимость.Номенклатура, | ПродажиСебестоимость.Стоимость |ИЗ | РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость |ГДЕ | ПродажиСебестоимость.Регистратор =&ссылка и ПродажиСебестоимость.Номенклатура=&ном" ; запрос.установитьпараметр("ссылка",ссылка); Сч = 0; Пока Сч < ТаблицаДвижений.Количество() Цикл СтрокаТаблицы = ТаблицаДвижений.Получить(Сч); запрос.установитьпараметр("ном",СтрокаТаблицы.Номенклатура); Выборка = Запрос.Выполнить().Выполнить(); Если выборка.следующий() Тогда СтрокаТаблицы.СуммаУчета = выборка.Стоимость; КонецЕсли; Сч = Сч + 1; КонецЦикла; КонецЦикла; |
|||
31
Ctyd
12.07.12
✎
22:17
|
пробуй так
|
|||
32
Ctyd
12.07.12
✎
22:18
|
"конецЦикла" убери только
|
|||
33
SherifSP
12.07.12
✎
22:20
|
Убрал)
|
|||
34
Ctyd
12.07.12
✎
22:21
|
получилось?
|
|||
35
SherifSP
12.07.12
✎
22:23
|
(30)Да большое спс)
|
|||
36
SherifSP
12.07.12
✎
22:24
|
Сейчас буду разбераться как этот механизм работает, будут завтра спрашивать)
|
|||
37
AlexNew
12.07.12
✎
22:25
|
Что получилось? Есть Движения, возьми оттуда таблицу, сверни ее сделай что надо, если не понимаешь запросы.
Разбераться не надо, надо разбИраться. |
|||
38
SherifSP
12.07.12
✎
22:26
|
Ctyd - ПродажиСебестоимость.Регистратор =&ссылка и ПродажиСебестоимость.Номенклатура=&ном"//// Это выбирается вся номенклатура по регистраторам?
|
|||
39
SherifSP
12.07.12
✎
22:28
|
(37)А если таблица после движения пустая?
|
|||
40
Ctyd
12.07.12
✎
22:28
|
главное он достиг своей цели =)
|
|||
41
AlexNew
12.07.12
✎
22:29
|
(40) Он не достиг своей цели, а такие советы только сбивают.
|
|||
42
SherifSP
12.07.12
✎
22:29
|
(40) Да)
|
|||
43
Ctyd
12.07.12
✎
22:30
|
тогда пускай берет Мускл и учит запросы, а особенно часть про условия.
|
|||
44
SherifSP
12.07.12
✎
22:31
|
Сtyd см (38)
|
|||
45
Ctyd
12.07.12
✎
22:34
|
это выбираеться только 1 номенклатура по конкретному регистартору
|
|||
46
AlexNew
12.07.12
✎
22:35
|
(45) Что?
|
|||
47
AlexNew
12.07.12
✎
22:37
|
(45) Хотя да, там еще условие, но он же это в цикле делает. Очень криво.
|
|||
48
SherifSP
12.07.12
✎
22:37
|
Не красиво только запрос.установитьпараметр("ном",СтрокаТаблицы.Номенклатура);
В цыкле) |
|||
49
AlexNew
12.07.12
✎
22:38
|
В общем это вообще не код.
|
|||
50
SherifSP
12.07.12
✎
22:41
|
AlexNew Как бы сделал ты?
|
|||
51
Ctyd
12.07.12
✎
22:41
|
да, мне тоже интересно...
|
|||
52
Stim
12.07.12
✎
22:43
|
запрос в цикле. чему вы детей учите?
|
|||
53
Ctyd
12.07.12
✎
22:46
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПродажиСебестоимость.Номенклатура, | ПродажиСебестоимость.Стоимость |ИЗ | РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость |ГДЕ | ПродажиСебестоимость.Регистратор=&Ссылка" ; Выборка = Запрос.Выполнить().выгрузить(); Сч = 0; Пока Сч < ТаблицаДвижений.Количество() Цикл СтрокаТаблицы = ТаблицаДвижений.Получить(Сч); строк=Выборка.Найти(СтрокаТаблицы.Номенклатура,"номенклатура"); Если строк<>неопределено тогда СтрокаТаблицы.СуммаУчета = строк.Стоимость; КонецЕсли; Сч = Сч + 1; КонецЦикла; ок, а такой вариант? |
|||
54
AlexNew
12.07.12
✎
22:46
|
Если ТаблицаДвижений возвращается с Себестоимостью, то 2 таблицы в запрос, левое соединение с наименованием полей как мне надо, загрузить в таблицу, или выгрузить движения в таблицу загрузить в запрос, или перебирать и заполнять таблицу - как кому нравится.
|
|||
55
Ctyd
12.07.12
✎
22:48
|
о.. меня всегда интересовало: Как в запрос передать таблицу значений?
|
|||
56
Stim
12.07.12
✎
22:49
|
всем читать радченко и Габца. срочно
|
|||
57
AlexNew
12.07.12
✎
22:50
|
(53) Типа 2-го варианта, что я описал. Для меня - кода много. И запрос лишний - таблицу можно из Движений получить.
(55) ВЫБРАТЬ ... ПОМЕСТИТЬ втТаб ИЗ &Таб ; ВЫБРАТЬ ... ИЗ втТаб |
|||
58
Stim
12.07.12
✎
22:51
|
(57) только во втором пакете нужно указать имя таблицы, а то не взлетит)
|
|||
59
AlexNew
12.07.12
✎
22:52
|
Только таблица должна быть типизирована.
|
|||
60
Ctyd
12.07.12
✎
23:06
|
грубо говоря:
Запрос.Текст = "ВЫБРАТЬ | таб.* |поместить ВТтаб |ИЗ | &Таб КАК таб |; |ВЫБрать |//поля необходимые для загрузки регистра |Из ВТТАБ как таблица |ЛЕВОЕ Соединение (ВЫБРАТЬ ПродажиСебестоимость.номенклатура, ПродажиСебестоимость.стоимость из РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость |ГДЕ | ПродажиСебестоимость.Регистратор=&Ссылка) как себестоимость |по себестоимость.номенклатура=таблица.номенклатура |" ; |
|||
61
SherifSP
12.07.12
✎
23:11
|
(60)А дальше?)
|
|||
62
Ctyd
12.07.12
✎
23:12
|
сам не знаю...
точнее даже не знаю или он сработает.. |
|||
63
SherifSP
12.07.12
✎
23:12
|
(62)Второй код лучше 1?))
|
|||
64
Ctyd
12.07.12
✎
23:13
|
однозначно.. он хоть каждый раз не отправляет запрос в бд
|
|||
65
SherifSP
12.07.12
✎
23:16
|
(53) Ошибка при вызове метода контекста (Выполнить): {(7, 38)}: Не задано значение параметра "Ссылка"
ПродажиСебестоимость.Регистратор=<<?>>&Ссылка |
|||
66
Ctyd
12.07.12
✎
23:17
|
добавь перед запрос.выполнить.выгрузить()
запрос.установитьпараметр("ссылка",ссылка); |
|||
67
Ctyd
12.07.12
✎
23:24
|
сделал?
|
|||
68
SherifSP
12.07.12
✎
23:29
|
Да
|
|||
69
SherifSP
12.07.12
✎
23:29
|
В итоге
Если СтруктураШапкиДокумента.ВедениеУчетаПоПроектам Тогда УправлениеПроектами.ОтразитьДвиженияПоПроектам(ТаблицаПоТоварамПродажи, ТаблицаДвижений, Проект, Дата, "Продажи"); Иначе ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТоварамПродажи, ТаблицаДвижений); КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПродажиСебестоимость.Номенклатура, | ПродажиСебестоимость.Стоимость |ИЗ | РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость |ГДЕ | ПродажиСебестоимость.Регистратор=&Ссылка" ; Запрос.УстановитьПараметр("Ссылка",Ссылка); Выборка = Запрос.Выполнить().Выгрузить(); Сч = 0; Пока Сч < ТаблицаДвижений.Количество() Цикл СтрокаТаблицы = ТаблицаДвижений.Получить(Сч); Стр=Выборка.Найти(СтрокаТаблицы.Номенклатура,"Номенклатура"); Если Стр <> Неопределено Тогда СтрокаТаблицы.СуммаУчета = Стр.Стоимость; КонецЕсли; Сч = Сч + 1; КонецЦикла; ТаблицаДвижений.ЗаполнитьЗначения(Ссылка , "ДокументПродажи"); ТаблицаДвижений.ЗаполнитьЗначения(Подразделение, "Подразделение"); ТаблицаДвижений.ЗаполнитьЗначения(Организация , "Организация"); |
|||
70
Ctyd
12.07.12
✎
23:30
|
хоть ты доволен... удачи..
|
|||
71
SherifSP
12.07.12
✎
23:32
|
Спс за помощь)
|
|||
72
Ctyd
12.07.12
✎
23:35
|
Если надо завтра напишу вариант 3-й. тот что только на запрос. Сегодня уже спать
|
|||
73
SherifSP
12.07.12
✎
23:36
|
(72) Ок
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |