|
|
|
Вопрос по 1С7.7. Запрос.Товарисчи помогите... | ☑ | ||
|---|---|---|---|---|
|
0
Sych_Sych_Sych
29.09.08
✎
08:29
|
Задача стоит такая нужно отобрать номенклатуру у которой производитель "Произв" и она есть на остатках.
По отдельности эти условия в запросе работают,т.е. отдельно показать остатки номенклатуры больше 0,или отдельно показать номенклатуру с производителем "Произв" а как вместе сделать не получается. Вот мой запрос он тупо берет и все остатки мне вываливает ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Обрабатывать НеПомеченныеНаУдаление; |ЗначениеСвойства = Справочник.СвойстваНоменклатуры.ЗначениеСвойства; |Номенклатура = Справочник.СвойстваНоменклатуры.Владелец,Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; |Функция КоличествоКонОст = КонОст(Количество); |Группировка Номенклатура; |Условие((ЗначениеСвойства=Произв) И (Количество>0)); |" Подскажите что я не так делаю.Плиз |
|||
|
1
Дятелище 1с
29.09.08
✎
08:31
|
+групировка
|
|||
|
2
Дятелище 1с
29.09.08
✎
08:31
|
+групПировка
|
|||
|
3
dk
29.09.08
✎
08:31
|
1. хде дата?
2. (Количество>0) замени на (Запрос.КоличествоКонОст>0) |
|||
|
4
Sych_Sych_Sych
29.09.08
✎
08:34
|
1)Дата и не нужна он рассчитает на точку актуальности
2)(Запрос.КоличествоКонОст>0) не работает выходная ТЗ вообще пустая |
|||
|
5
Sych_Sych_Sych
29.09.08
✎
08:34
|
Дятелище 1с
|
|||
|
6
Sych_Sych_Sych
29.09.08
✎
08:34
|
Дятелище 1с
а какая +группировка по чем |
|||
|
7
dk
29.09.08
✎
08:34
|
(2) +1
|
|||
|
8
Sych_Sych_Sych
29.09.08
✎
09:05
|
Ауу, ГУРУ 1с где ВЫ?ну ооочень надо
|
|||
|
9
Темный Эльф
29.09.08
✎
09:14
|
Сделай первый запрос для получения списка номенклатуры, а затем подставь этот список во второй запрос. И вот это "Количество>0" работать не будет в принципе. Кроме того, в запросе к регистру с функцией НачОст и так получишь только те позиции, которые имеют остатки. Если, конечно будешь делать запрос только к регистру.
|
|||
|
10
Sych_Sych_Sych
29.09.08
✎
09:17
|
Я тоже уже начал подумывать чтоб разбить на два запроса,ведать в 7-ке нельзя данную задачу решить одним запросом
спасибо за совет |
|||
|
11
Ёпрст2
29.09.08
✎
09:19
|
(10) Можно. Можно одним запросом.
|
|||
|
12
Sych_Sych_Sych
29.09.08
✎
09:21
|
(11)
Подскажи буду благодарен:) |
|||
|
13
Ёпрст2
29.09.08
✎
09:23
|
(12) Если производитель - ОсновноеСвойство Номенклатуры, то просто условие, если это одно из значений Свойств Номенклатуры - внешняя функция в условии запроса.
|
|||
|
14
Sych_Sych_Sych
29.09.08
✎
09:27
|
"Производитель" это одно из свойств номенклатуры.
"внешняя функция в условии запрос" как эта фуркция должна выглядетьт |
|||
|
15
Sych_Sych_Sych
29.09.08
✎
09:27
|
"Производитель" это одно из значений свойств номенклатуры.
|
|||
|
16
Guk
29.09.08
✎
09:28
|
(0) будь здоров...
|
|||
|
17
Ёпрст2
29.09.08
✎
09:31
|
Какие ленивые все в понедельник...
Ща кофий выпью, напишу. |
|||
|
18
Sych_Sych_Sych
29.09.08
✎
09:33
|
(17)
Жду с нетерпением:) |
|||
|
19
Ёпрст2
29.09.08
✎
09:39
|
Перем Спр;
//ВыбВидСв - выбранный Элемент справочника ВидыСвойств Функция ПроверитьПроизводителя(Номенклатура) Спр.ИспользоватьВладельца(Номенклатура); Возврат Спр.НайтиПоРеквизиту("ВидСвойства",ВыбВидСв,0); КонецФункции ......... |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; |Функция КоличествоКонОст = КонОст(Количество); |Группировка Номенклатура; |Условие(ПроверитьПроизводителя(Номенклатура)=1); ........ Спр = СоздатьОбъект("СвойстваНоменклатуры"); |
|||
|
20
Ёпрст2
29.09.08
✎
09:41
|
+19 А вот по Значениям свойств, такой фокус просто так не выйдет, ибо Зн.Свойств подчиненный, и владелец у него - виды свойств....
|
|||
|
21
Sych_Sych_Sych
29.09.08
✎
09:42
|
(19)
Прикольно!спасибо, сейчас буду проверять |
|||
|
22
Ёпрст2
29.09.08
✎
09:42
|
+20 И нам отсюда не видно, откуда ты своего Произв взял.
|
|||
|
23
Sych_Sych_Sych
29.09.08
✎
09:45
|
Производитель берется с из элемента формы(Поля ввода) тип Справочник.ЗначениеСвойств
|
|||
|
24
Ёпрст2
29.09.08
✎
09:46
|
Хотя тоже можешь:
Функция ПроверитьПроизводителя(Номенклатура) Спр.ИспользоватьВладельца(Номенклатура); Возврат Спр.НайтиПоРеквизиту("ЗначениеСвойства",Произв,0); КонецФункции |
|||
|
25
Ёпрст2
29.09.08
✎
09:47
|
(23) См. 24.
|
|||
|
26
Sych_Sych_Sych
29.09.08
✎
09:48
|
ок спс
|
|||
|
27
Sych_Sych_Sych
29.09.08
✎
10:07
|
(25)
еще сделал вторым способом сейчас сравню что по скорости быстрее ТЗ=СоздатьОбъект("ТаблицаЗначений"); Список=СоздатьОбъект("СписокЗначений"); //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Обрабатывать НеПомеченныеНаУдаление; |ЗначениеСвойства = Справочник.СвойстваНоменклатуры.ЗначениеСвойства; |Номенклатура = Справочник.СвойстваНоменклатуры.Владелец; |Группировка Номенклатура; |Условие(ЗначениеСвойства=Произв); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Запрос.Выгрузить(ТЗ); ТЗ.ВыбратьСтроку(,"ТЗ 1-я с товаром по группе"); ТЗ.Выгрузить(Список,2,ТЗ.КоличествоСтрок(),1); Список.ВыбратьЗначение(,"А это уже список значений"); ТекстЗапроса ="//{{ЗАПРОС(нов) |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; |Функция КоличествоНачОст = КонОст(Количество); |Группировка Номенклатура; |Условие(Номенклатура В Список); |";//}}ЗАПРОС Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Запрос.Выгрузить(ТЗ); ТЗ.ВыбратьСтроку(,"ТЗ 2-я с товаром и остатками"); |
|||
|
28
Sych_Sych_Sych
29.09.08
✎
11:24
|
Мой способ оказался более быстрее минут 25 для 15000 номенклатуры,по сравнению с 1 способом минуты 3 для 60 ноенклатуры
Все равно спасибо,узнал как внешними ф-ми в запросе пользоваться |
|||
|
29
Mikle Shaman
29.09.08
✎
11:38
|
Вообще-то, если совсем коректно, то лучше пробежать один раз по справочнику номенклатуры и запихать в СписокЗначений все элементы, удовлетворяющие заданному условию. А в запросе просто проверять переменную на вхождение в СписокЗначений. ИМХО, так быстрее и правильнее.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |