Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
К курсу →
в цикле-то проще. и по коду и в принципе... одна загвоздка - на скуле эти циклы работают долго, дольше обычного черного запроса, а база работает на скуле
Собрать запросами данные в ТЗ, и свернуть можно...
Лучше прямым запросом, конечно.
Лучше прямым запросом, конечно.
Так запросом только заявки можно вытащить, а подчиненные и их свойства все равно надо анализировать - хоть по результатам запроса, хоть прямым перебором
Полагаю, что подчиненных документов используется 1-2 вида. Например, все реализации можно получить одним запросом.Так запросом только заявки можно вытащить, а подчиненные и их свойства все равно надо анализировать - хоть по результатам запроса, хоть прямым перебором
Должно быть быстрее, чем по каждому документу открывать выборку ВыбратьПодчиненныеДокументы.
если прет запросом тогда можно так - хотя это скрещение ежа с ужом
Функция ЕстьПодчиненные(Док)
ДокПодч = СоздатьОбъект("документ");
ДокПодч.ВыбратьПодчиненныеДокументы(,,Док);
ЕстьПодч = 0;
Пока ДокПодч.ПолучитьДокумент() = 1 Цикл
Если докПодч.Проведен() = 1 Тогда
ЕстьПодч = 1;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Естьподч;
КонецФункции
Процедура Запросик()
блаблабла
ТекстЗапроса = "Период с выбнач по выбкон;
|Обрабатывать все;
|ОбрабатыватьДокументы проведенные;
|Заявка = Документ.заявкаПокупателя.ТекущийДокумент;
|группировка Заявка;
|Условие (ЕстьПодчиненные(Заявка) = 0);";
бла
КонецПРоцедуры
Фича семерки - возможность вставки в запрос функции из модуля - как это работает - хз. Кстати - я функции в условия не вставлял, но как суммовое поле катило. Плюс надо в функцию защиту от рекурсии добавить.
Функция ЕстьПодчиненные(Док)
ДокПодч = СоздатьОбъект("документ");
ДокПодч.ВыбратьПодчиненныеДокументы(,,Док);
ЕстьПодч = 0;
Пока ДокПодч.ПолучитьДокумент() = 1 Цикл
Если докПодч.Проведен() = 1 Тогда
ЕстьПодч = 1;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Естьподч;
КонецФункции
Процедура Запросик()
блаблабла
ТекстЗапроса = "Период с выбнач по выбкон;
|Обрабатывать все;
|ОбрабатыватьДокументы проведенные;
|Заявка = Документ.заявкаПокупателя.ТекущийДокумент;
|группировка Заявка;
|Условие (ЕстьПодчиненные(Заявка) = 0);";
бла
КонецПРоцедуры
Фича семерки - возможность вставки в запрос функции из модуля - как это работает - хз. Кстати - я функции в условия не вставлял, но как суммовое поле катило. Плюс надо в функцию защиту от рекурсии добавить.
Мне кажется, что сначала выполняется запрос без функций, а потом функции платформа выполняет вне запроса:ya_lamo: Но это только предположение.Фича семерки - возможность вставки в запрос функции из модуля - как это работает - хз.
Как там может рекурсия получиться?Плюс надо в функцию защиту от рекурсии добавить.
Как там может рекурсия получиться?
лягко - два документа, у обоих в шапке ссылка на соседа. При выборке подчиненного для 2 выбирается 1, потом 2 ( так как в 2 есть ссылка на 1) , потом опять 1,потом опять 2 и понеслась - пока память не кончится ;-)
Ой блин - это я для стандартного механизма написал, типа вывод дерева подчиненных. Ну хорошо - для такого алгоритму покатит ссылка в шапке документа на самого себя. А может и не покатит.... запутался. :ya_lamo:
1. Я аналогичную задачу решал лет 8 назад (определение незакрытых заявок), когда еще практически не владел механизмом запросов.
И если внешняя обработка работает СЕКУНДЫ даже за большой период, зачем огород городить ?
2. Похожая ситуация сейчас. В самописной конфигурации надо собрать документы (похожие на оказание услуг) и определить неоплаченные и просроченные.
Оплата определяется по сложной схеме, так что все равно внутри запроса надо обрабатывать каждый документ.
Запрос и перебор документов работают практически с одинаковой скоростью (тут уже 2-3 минуты для периода год).
Перебор в цикле люблю больше, ибо легче косяки ловить
И если внешняя обработка работает СЕКУНДЫ даже за большой период, зачем огород городить ?
2. Похожая ситуация сейчас. В самописной конфигурации надо собрать документы (похожие на оказание услуг) и определить неоплаченные и просроченные.
Оплата определяется по сложной схеме, так что все равно внутри запроса надо обрабатывать каждый документ.
Запрос и перебор документов работают практически с одинаковой скоростью (тут уже 2-3 минуты для периода год).
Перебор в цикле люблю больше, ибо легче косяки ловить
Выбор подчиненных - это уже перебор в переборе. Должно долго работать))
Простая выборка иногда работает дольше запроса, иногда - быстрее.
Простая выборка иногда работает дольше запроса, иногда - быстрее.
Экспериментально проверил. Медленную работу вешал на перебор. Сделал запрос - стало еще хуже
в файловой - факт! как то на бухе написал запросом толи выбор справочников толи доков, не помню уже - работало минут 10. переписал под цикл - работало секунд 30. но в скульной версии черный запрос по факту быстрее работает.Экспериментально проверил. Медленную работу вешал на перебор. Сделал запрос - стало еще хуже
http://forum.mista.ru/topic.php?id=181682
Но речь-то не о том. Чтоб выбрать подчиненные нужно много отдельных выборок.
Добавлено: И сколько уже можно обсуждать? Напиши уже что-нибудь, и выкладывай замер:blush:
Но речь-то не о том. Чтоб выбрать подчиненные нужно много отдельных выборок.
Добавлено: И сколько уже можно обсуждать? Напиши уже что-нибудь, и выкладывай замер:blush:
unknown181538, уже че-нить написал. запросом получаю заявки, а потом таки перебор((( но пока фиг с ним - пусть так остается
Так и первый-то вопрос был в том, как запросом отобрать заявки с подчиненными ?
Боюсь, что в запросе это не решается
Боюсь, что в запросе это не решается
Прошло полтора года и теперь в этот отчет, с которым я долбался и мучил всех тут, необходимо добавить отбор по свойству товара. В прошлый раз я действительно сделал 2 отдельных запроса - один был по Регистру ПартииНаличие, а второй по справочнику СвойстваНоменклатуры.
Теперь же нужно чтобы пользователь на форме выбрал к примеру товарную группу и значение свойства (к примеру Производитель) ну и на выходе получил номенклатуру из выбранной группы, но только ту, в которой указан выбранный в форме производитель. Помогите пожалуйста с условиями запроса - не могу разобраться как составить запрос таким образом чтобы он правильно работал в случае когда выбрана и номенклатура и вид свойства. Заранее благодарю
Вот сейчас смотрю отчет ВедомостьПоПартиямТМЦ. В этом отчете можно выбрать товар по свойству и запрос идет вроде как только по регистру ПартииНаличие, а как осуществляется отбор - никак не пойму...
Теперь же нужно чтобы пользователь на форме выбрал к примеру товарную группу и значение свойства (к примеру Производитель) ну и на выходе получил номенклатуру из выбранной группы, но только ту, в которой указан выбранный в форме производитель. Помогите пожалуйста с условиями запроса - не могу разобраться как составить запрос таким образом чтобы он правильно работал в случае когда выбрана и номенклатура и вид свойства. Заранее благодарю
Код:
"//{{ЗАПРОС(Сформировать)
|Период с НачДата по КонДата;
|Без итогов;
|Номенклатура = Регистр.ПартииНаличие.Номенклатура;
|Поставщик = Регистр.ПартииНаличие.Партия.Поставщик;
|КодОперации = Регистр.ПартииНаличие.КодОперации;
|Количество = Регистр.ПартииНаличие.Количество;
|Владелец = Справочник.СвойстваНоменклатуры.Владелец;
|ВидСвойства = Справочник.СвойстваНоменклатуры.ВидСвойства;
|СвойствоИмя = Справочник.СвойстваНоменклатуры.ТекущийЭлемент;
|ЗначениеСвойства = Справочник.СвойстваНоменклатуры.ЗначениеСвойства;
|Функция НачОстК = НачОст(Количество);
|Функция ПриходК = Приход(Количество) Когда ((КодОперации <> глКО.Перемещение) И (КодОперации <> глКО.Перемещение) И (КодОперации <> глКО.ПередачаВРозницу) И (КодОперации <> глКО.ВозвратИзРозницы));
|Функция РасходК = Расход(Количество) Когда ((КодОперации <> глКО.Перемещение) И (КодОперации <> глКО.Перемещение) И (КодОперации <> глКО.ПередачаВРозницу) И (КодОперации <> глКО.ВозвратИзРозницы));
|Функция КонОстК = КонОст(Количество);
|Группировка Номенклатура упорядочить по Номенклатура.Артикул без Групп;
|Условие (ВидСвойства = СпрСвойств.текущийЭлемент());
|Условие (ЗначениеСвойства = Производство);
|Условие(Номенклатура в товар);
|Условие(Владелец в товар);"
;
Вот сейчас смотрю отчет ВедомостьПоПартиямТМЦ. В этом отчете можно выбрать товар по свойству и запрос идет вроде как только по регистру ПартииНаличие, а как осуществляется отбор - никак не пойму...
На группу условие |Условие(Номенклатура.Родитель в ВыбРодитель);
на свойство - |Условие (ЗначениеСвойства = Производство);
как-то так. Может еще стоит махнуть
|Условие (ВидСвойства = СпрСвойств.текущийЭлемент())
зы
наврал про родителя - сколько там уровней?
Насколько я помню - в семерке не было условия в иерархии, значит надо изгаляться.
на свойство - |Условие (ЗначениеСвойства = Производство);
как-то так. Может еще стоит махнуть
|Условие (ВидСвойства = СпрСвойств.текущийЭлемент())
зы
наврал про родителя - сколько там уровней?
Насколько я помню - в семерке не было условия в иерархии, значит надо изгаляться.
Ещё по теме
4
Поделиться: