#0
by kloptula
Есть вот такая функция, которая проверяет наличие строки в таблице значений и возвращает 1 в случае нахождения Так вот, эта функция возвращает не то, что должна. Например: нашлась строка с заданными реквизитами и функция должна вернуть 1, но если смотреть в отладчике, то сначала действительно возвращается 1, а вот потом рекурсия возвращается на предыдущий шаг и берет и возвращает 0. Че за х..ня не пойму ни как. Может сталкивался кто-нибудь с такой засадой
#4
by kloptula
Вызываю вот так Если НайтиЗначениеВТаблице(ТЗИтоговДоп, Запрос.Номенклатура, Запрос.Серия, Запрос.ЦенаПрод, НомСтр) = 0 Тогда
#8
by kloptula
Если ты про "продолжить", то после этого идет вывод строки в отчет в цикле, а я вывод этой строки пропускаю.
#14
by hhhh
чему то присвоить. Переменной какой нибудь. АП то у тебя функция выполняется просто так, результат куда-то в небо передаешь.
#15
by HeroShima
правильно возвращать значение по умолчанию вне условий, а затем ещё и проверять что вернули
#16
by hhhh
вот тут например вот где у тебя результат, ты говоришь, что 1. А он ведь в воздухе висит. Никуда потом не присваивается
#17
by kloptula
Вот так сделал. Один фиг тоже самое Функция НайтиЗначениеВТаблице(ТЗ, Номенклатура, Серия, ЦенаПрод, НомерСтроки)
#19
by HeroShima
Кому ты вернул результат? И убери рекурсию - за неё тут расстрелять нужно даже за работающую.
#33
by GANR
Замени-ка ты эту рекурсию на массив (стэк) - прерви поиск, где тебе надо и всё пучком. Этот способ гораздо гибче.
#34
by GANR
А в сабже замени это НайтиЗначениеВТаблице(ТЗ, Номенклатура, Серия, ЦенаПрод, НомерСтроки+1); Возврат НайтиЗначениеВТаблице(ТЗ, Номенклатура, Серия, ЦенаПрод, НомерСтроки+1); Неудивительно, что она 0 возвращает
#35
by Semen
Тоже не понял, почему бы просто не перебрать в цикле ТЗ до момента позиционирования на записи удовлетворяющей условию
#38
by kloptula
Работает очень медленно по сравнению с моим вариантом. Лобовое решение, но не оптимальное
#39
by Simod
Оно не может работать медленнее, потому как ПолучитьСтроку работает быстрее, чем ПолучитьСтрокуПоНомеру Функции в в принципе нерабочая, т.к. нет проверки на выход из диапазона строк (НомерСтроки > ТЗ.КоличествоСтрок) Почитайте какие-нибудь книжки по программированию.
#40
by VladZ
Я бы использовал в таком случае "ИндексированнуюТаблицу". Условия вида: (ТЗ.СерияНоменклатуры = Серия) и (ТЗ.ЦенаПрод = ЦенаПрод) фильтруется на ура. Условие (ТЗ.ДатаПартии - ДатаПоступления) < 0 обрабатывать перебором по отфильтрованной ТЗ.
#41
by kloptula
А Вы попробуйте сравнить. ПолучитьСтроку работает с выборкой всей таблицы, и пока доберешься до нужной строки можешь перебрать почти всю таблицу. А найтиЗначение и потом ПолучитьСтрокуПоНомеру позиционирует сразу на нужную строку в таблице. Иногда лучше жевать, чем говорить
#43
by ADirks
если надо высокую скорость, то можно и посложней методы применить. Например сортировка + дихотомический поиск. Ну или сразу ИТ.
#44
by kloptula
Согласен, но код сложнее будет, т. к. придется сначала таблицу "переколбасить", а по производительности меня вариант с рекурсией вполне устроил.
#45
by ADirks
Код будет сложнее всего 1 раз. Есть же такая штука, "повторное использование кода". Например:
#46
by GenAcid
//Вариант 1 Для каждого СтрокаТЗ из ТЗ Цикл ... Действительно "Иногда лучше жевать". И не мучай больше бедный стек вызовов, без особой нужды.
#47
by Stillcat
Вы не правы, Ваш вариант медленнее! Это что касается ПолучитьСтрокуи ПолучитьСтрокуПоНомеру Еще различия могут быть что сравнение по номенклатуре вынесено у Вас в отдельное условие и проверка напр. (ТЗ.ДатаПартии - ДатаПоступления) < 0) для большинства строк вообще не выполняется, Но в моём варианте условия тоже можно легко разделить.
#51
by 0xFFFFFF
7.7 проверяет условие целиком, 8.х - по сокращенной. Это один из пунктов, почему меня подташнивает от 7.7
#52
by kloptula
Чего спорить-то? Изначально сделал по Вашему варианту. Меня не устроила скорость работы отчета. Поэтому и начал извращаться.
#53
by kloptula
Такое ощущение, что для большинства присутствующих - рекурсия что-то злое и неправильное. Лучше 100500 строк дополнительного кода написать, чтобы потом никто не разобрался, как оно работает
#54
by kloptula
можно было и запросом изъеб..ться, лучше уж "мучать бедный стек вызовов", чем мучать бедный регистр остатков
#55
by Simod
Поиск с использованием А НайтиЗначение и ПолучитьСтрокуПоНомеру может быть быстрее, когда надо проверить несколько строк. Если надо проверить несколько десятков или сотен строк, то медленнее. Я так думаю, что там можно было все запросом получить и не изобретать велосипед с квадратными колесами..
#57
by ptiz
Ну и код. Если к добавить индексы на 3 поля и использовать НайтиСтроки, то будет летать с 1ой космической.
#60
by Simod
"Там в цикле проверка идет. Запрос в цикле не айс гонять" Твою ветку уже поместили сюда: Хочешь стать героем дня?
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- v7: v7 : НДС при возврате
- v7: Что нужно чтоб подключить ККМ Меркурий 112F к 1с V7 Торговля + склад
- v7: v7.7 премещение элемента справочника
- v7: v8: v7: Кто-нибудь сумел скачать комплект отчетности за I квартал 2007 года
- v7: 1С V7.7 в сети
- v7: 1C:V7 starter program (for SQL) - обнаружена ошибка
- v7: Перенос данных Бухгалтерия из v7 в v8
- v7: v7 Перехват глобального события ПриЗаписи() или ОбработкаПроведения()
В этой группе 1С
- v7: ТИС получить остаток товара
- БП опять распределение НДС почему нет счётов фактур
- Как программно проверить есть ли у регистратора "Подразделение"?
- v7: Как правильно сторнировать строки выписки банка?
- Дамп при записи документа
- Запуск 1С по сети без установки на локальный компьютер
- не происходит автоматический обмен по расписанию УТ 10.3 БП 2.0(sql)
- ActiveX в управляемых формах
- Cipher 8300 - как подключить к БГУ? у меня подставка USB,
- Кто блокирует регистр?
- Поступление на расчетный счет как связать с реализацией
- RemoteApp дебильный фокус окна.
- v8: Конвертация данных 2.1: Как выгрузить подчиненный документ?
- СКД: условие на параметр
- УТ 10.3 разраничение прав доступа по складам
- Как убрать варианты отчета у внешнего
- v7: ПУБ - выпуск из давальческого сырья, сальдо на сч.БУ 20
- v8: в каком регистре хранятся данные о логинах в систему
- Что значат галки "Сервер" и "Вызов сервера" в общем модуле?
- Сканер штрихкода на USB