Есть Буха 7.7 немного доработанная, но на далее описанную проблему никак не влияет. Система Win 7 x32
Суть проблемы вот в чем.... Есть отчет в котором отрабатывают два запроса. Первый выбирает по указанному контрагенту документы реализация товаров из которых вытягивает данные о партиях.
"//{{ЗАПРОС(Сформировать) |Период с Начдата по КонДата; |РасходнаяНакладная = Документ.РасходнаяНакладная.ТекущийДокумент; |Фирма = Документ.РасходнаяНакладная.Фирма; |Контра = Документ.РасходнаяНакладная.Контрагент; |Патриот = Документ.РасходнаяНакладная.Партия; |Кво = Документ.РасходнаяНакладная.Кво; |Функция СумКво = Сумма(Кво); |Группировка Патриот; |без Итогов; |Условие(Контра в ФКонтр); //Контрагент |Условие(Фирма в ФФирма);//Фирма |"
После чего записывает эти данные в список значений
ТЗ.выбратьстроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл СпПартий.ДобавитьЗначение(ТЗ.Патриот.Док); КонецЦикла;
Затем берется список значений и используется во втором запросе
"//{{ЗАПРОС(Сформировать) //|Период с Начдата по КонДата; |ПриходнаяНакладная = Документ.ПриходнаяНакладная.ТекущийДокумент; |Фирма= Документ.ПриходнаяНакладная.Фирма; |Товар = Документ.ПриходнаяНакладная.ТМЦ; |Контрагент = Документ.ПриходнаяНакладная.Контрагент; |Кво = Документ.ПриходнаяНакладная.Кво; |Сум = Документ.ПриходнаяНакладная.СуммаБезНДСВал; |НДС = Документ.ПриходнаяНакладная.НДС; |Функция СумКво = Сумма(Кво); |Функция СумСум = Сумма(Сум); |Группировка Контрагент; |Группировка ПриходнаяНакладная; |Группировка Товар; |Условие(ПриходнаяНакладная в СпПартий); //список с данными |Условие(Фирма в ФФирма); |"
Смысл этого запроса в том что бы выдать информацию в отчет по партиям, но суть не в этом...
Суть вот в чем, этот запрос по утверждению клиента проработал 1,5 года и тут свершилось. Вылез один контрагент который не хочет выдавать данные в отчет. Как выяснилось в дальнейшем первый запрос за указанный период находит расходные и вытягивает из них партии (две - то есть данные есть). Потом заходит во второй запрос с этим списком и не находит никаких данных. то есть результат запроса пустая таблица. Проблема была решена путем указания периода запроса, что не удовлетворило клиента по причине того, что приход может быть и ранее указанного периода (Пришлось убрать). Как мне казалось, база большая и тянется с 2002 года где-то, и тем самым он не может обработать большое количество строк. Как я проанализировал, если первый запрос выдает больше 3 строк то второй отрабатывает, а если две строки в первом запросе, тогда второй выдает пустую таблицу..... Что может помочь в правильной работе запроса и почему он может не отрабатывать при малом количестве строк????
Вы станете богаче, лишь став умнее... Чем дальше в лес, тем толще партизаны. Нельзя недооценивать, не предсказуемость тупизны...
Группа: Местный
Сообщений: 186
Спасибо сказали: 31 раз
Рейтинг: 0
Цитата(Kutuzov @ 27.08.11, 18:20)
После чего записывает эти данные в список значений
ТЗ.выбратьстроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл СпПартий.ДобавитьЗначение(ТЗ.Патриот.Док); КонецЦикла;
Как я проанализировал, если первый запрос выдает больше 3 строк то второй отрабатывает, а если две строки в первом запросе, тогда второй выдает пустую таблицу..... Что может помочь в правильной работе запроса и почему он может не отрабатывать при малом количестве строк????
А что там за две строки - такого анализа не было ? Может и строки там пустые? И сразу в список выгрузить нельзя, а если уж цикл, то чего бы на пустые значения не проверить ?
А что там за две строки - такого анализа не было ? Может и строки там пустые? И сразу в список выгрузить нельзя, а если уж цикл, то чего бы на пустые значения не проверить ?
Проблема именно с запросом №2 так как когда я поставил период выборки запроса так он сразу отработал. А передаются ссылки на документ прихода. И строки не пустые так как заглядывал в список значений.
Цитата
И сразу в список выгрузить нельзя, а если уж цикл, то чего бы на пустые значения не проверить ?
А зачем?? Если ТЗ пустая то и в список ничего не попадет (В Одессе говорят:"Кто ни купит ничего, тот получит ничего")
Вы станете богаче, лишь став умнее... Чем дальше в лес, тем толще партизаны. Нельзя недооценивать, не предсказуемость тупизны...
Группа: Местный
Сообщений: 186
Спасибо сказали: 31 раз
Рейтинг: 0
Цитата(Kutuzov @ 27.08.11, 18:53)
Проблема именно с запросом №2 так как когда я поставил период выборки запроса так он сразу отработал. А передаются ссылки на документ прихода. И строки не пустые так как заглядывал в список значений.
А зачем?? Если ТЗ пустая то и в список ничего не попадет (В Одессе говорят:"Кто ни купит ничего, тот получит ничего")
С запросами все в порядке, от количества строк в списке исполнение запроса меняться не может. Проблема в данных, которыми Вы оперируете. А выгрузить сразу в список, я имел ввиду - из запроса. Вы сначала выгружаете в ТЗ, а потом перебирая ее выгружаете в список. В этом переборе из Партии добывается еще какой то документ. Где гарантия, что дата этого документа попадает в выбранный период ? Ну или что-то подобное.
С запросами все в порядке, от количества строк в списке исполнение запроса меняться не может. Проблема в данных, которыми Вы оперируете. А выгрузить сразу в список, я имел ввиду - из запроса. Вы сначала выгружаете в ТЗ, а потом перебирая ее выгружаете в список. В этом переборе из Партии добывается еще какой то документ. Где гарантия, что дата этого документа попадает в выбранный период ? Ну или что-то подобное.
Не из партии ничего ни какой документ не добывается. Партия тут нужна для того что бы из документа приходная вытянуть данные... Перебора ТЗ нет... просто из ТЗ в список выгружаются данные....
Проблема тут в том что когда ставлю в запросе период то он выбирает данные со списком в 2 строки а когда на ставлю то список должен быть не менее 5 или лучше 10 строк. (Второй запрос или перебирает все документы за 7 лет или за указанный период)
Перем Запрос, ТекстЗапроса;
//Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с Начдата по КонДата; |РасходнаяНакладная = Документ.РасходнаяНакладная.ТекущийДокумент; |Фирма = Документ.РасходнаяНакладная.Фирма; |Контра = Документ.РасходнаяНакладная.Контрагент; |Патриот = Документ.РасходнаяНакладная.Партия; |Кво = Документ.РасходнаяНакладная.Кво; |Функция СумКво = Сумма(Кво); |Группировка Патриот; |без Итогов; |Условие(Контра в ФКонтр); |Условие(Фирма в ФФирма); |" ; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
ТЗ.выбратьстроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Пока (СокрЛП(ТЗ.Патриот) = "Партия по умолчанию" ) и (ТЗ.НомерСтроки<>0) Цикл ТЗ.УдалитьСтроку(); КонецЦикла; КонецЦикла;
ТЗ.выбратьстроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл СпПартий.ДобавитьЗначение(ТЗ.Патриот.Док); КонецЦикла;
Т = СоздатьОбъект("Таблица"); Т.ИсходнаяТаблица("КамИн"); Т.ВывестиСекцию("Шапка"); Ном=0;
Пока Запрос.Группировка("Контрагент") = 1 Цикл ПечКонтрагент = Запрос.Контрагент; Т.ВывестиСекцию("Контрагент"); Пока Запрос.Группировка("ПриходнаяНакладная") = 1 Цикл Если Запрос.ПриходнаяНакладная.Выбран() = 0 Тогда Продолжить; КонецЕсли;
Ном = Ном+1;
ПечДок = Запрос.ПриходнаяНакладная;
Если ПечДок.СчетКонтрагента = СчетПоКоду("632") Тогда ПечДокВид = "МВД"; Иначе ПечДокВид = Запрос.ПриходнаяНакладная.Вид(); КонецЕсли;
ПечНом = ""; ПечЕД = ""; Эталон = ""; Ном2 = 0; СпИмен = СоздатьОбъект("СписокЗначений"); Пока Запрос.Группировка("Товар") = 1 Цикл Если ПустоеЗначение(Запрос.Товар)=1 Тогда Продолжить; КонецЕсли;
Если Запрос.Товар.Вид()<>"ТМЦ" Тогда Продолжить; КонецЕсли;
Если ПустоеЗначение(Запрос.Товар.Наименование)=1 Тогда Продолжить; КонецЕсли;
Ном2 = Ном2+1;
Если Ном2=1 Тогда ПечНом = СокрЛП(Запрос.Товар.Наименование); ПечЕД = СокрЛП(Запрос.Товар.БазЕдиница); Эталон = ПечЕД; СпИмен.ДобавитьЗначение(ПечНом); Иначе Чува = СокрЛП(Запрос.Товар.Наименование); Если СпИмен.Принадлежит(Чува)=0 Тогда ПечНом =ПечНом+РазделительСтрок+Чува; Если Эталон <> СокрЛП(Запрос.Товар.БазЕдиница) Тогда ПечЕД =ПечЕД+РазделительСтрок+СокрЛП(Запрос.Товар.БазЕдиница); КонецЕсли; СпИмен.ДобавитьЗначение(Чува); КонецЕсли; КонецЕсли;
КонецЦикла;
Т.ВывестиСекцию("Дока");
КонецЦикла; КонецЦикла; Т.Опции(0,0,,,); Т.ТолькоПросмотр(1); Т.ПараметрыСтраницы(1,,,,,,,,,1,,); Т.Показать("Встречки по партиям","");
Вы станете богаче, лишь став умнее... Чем дальше в лес, тем толще партизаны. Нельзя недооценивать, не предсказуемость тупизны...
"Не из партии ничего ни какой документ не добывается. " СпПартий.ДобавитьЗначение(ТЗ.Патриот.Док) - Док - это не документ ?
ВыбратьСтроки(); Синтаксис: ВыбратьСтроки() Назначение: Открывает выборку строк таблицы значений. Дальнейшая выборка осуществляется при помощи метода ПолучитьСтроку. - А где тут хоть слово про перебор????
Док - это не документ это ссылка которая потом просто сравнивается при выполнение запроса
Я благодарен за помощь но копание происходит совсем не в том месте....
Запрос №2 нормально отрабатывает когда список значений больше 2-5 записей!!!!!!!! Но когда он маленький то запрос №2 не отрабатывает. Меня интересует работа запроса №2, а не то правильно ли список формируется или нет, так как список формируется в любом варианте правильно.
Вы станете богаче, лишь став умнее... Чем дальше в лес, тем толще партизаны. Нельзя недооценивать, не предсказуемость тупизны...
Группа: Местный
Сообщений: 186
Спасибо сказали: 31 раз
Рейтинг: 0
Цитата(Kutuzov @ 27.08.11, 21:25)
ВыбратьСтроки(); Синтаксис: ВыбратьСтроки() Назначение: Открывает выборку строк таблицы значений. Дальнейшая выборка осуществляется при помощи метода ПолучитьСтроку. - А где тут хоть слово про перебор????
Док - это не документ это ссылка которая потом просто сравнивается при выполнение запроса
Я благодарен за помощь но копание происходит совсем не в том месте....
Запрос №2 нормально отрабатывает когда список значений больше 2-5 записей!!!!!!!! Но когда он маленький то запрос №2 не отрабатывает. Меня интересует работа запроса №2, а не то правильно ли список формируется или нет, так как список формируется в любом варианте правильно.
Копайте дальше сами, если Вы не понимаете очевидных вопросов.
Цитата(Kutuzov @ 27.08.11, 21:25)
Открывает выборку строк таблицы значений. Дальнейшая выборка осуществляется при помощи метода ПолучитьСтроку. - А где тут хоть слово про перебор????
Выбрать и перебрать - разные термины, но суть то одна. Или Вы хотите ткнуть меня носом в невежество ? Запрос при люьрм количестве строк работает одинаково или Вы надеетесь зарегистрировать глюк созданный собственными руками.
СпПартий.ДобавитьЗначение(ТЗ.Патриот.Док);
|ПриходнаяНакладная = Документ.ПриходнаяНакладная.ТекущийДокумент; |Условие(ПриходнаяНакладная в СпПартий);
"Док - это не документ это ссылка которая потом просто сравнивается при выполнение запроса"
Вы определитесь , что Вы в условие вставляете. Тут и копайте. Других данных Вы не дали.
??????????????? Функция присутствует и без итогов? Помоему это ошибка в самой логике запроса. Уберите функцию, если итоги ненужны. Если нужны то уберите Без итогов.
Группа: Пользователи
Сообщений: 62
Спасибо сказали: 14 раз
Рейтинг: 0
Я бы пробывал как-то так
ПН = СоздатьОбъект("Документ"); Пока ТЗ.ПолучитьСтроку()=1 Цикл Пока (СокрЛП(ТЗ.Патриот.Наименование) = "Партия по умолчанию" ) и (ТЗ.НомерСтроки<>0) Цикл ТЗ.УдалитьСтроку(); КонецЦикла; КонецЦикла; ТЗ.выбратьстроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если Док.НайтиДокумент(ТЗ.Патриот.Док)=1Тогда СпПартий.ДобавитьЗначение(Док.ТекущийДокумент()); КонецЕсли КонецЦикла;
ПН = СоздатьОбъект("Документ"); Пока ТЗ.ПолучитьСтроку()=1 Цикл Пока (СокрЛП(ТЗ.Патриот.Наименование) = "Партия по умолчанию" ) и (ТЗ.НомерСтроки<>0) Цикл ТЗ.УдалитьСтроку(); КонецЦикла; КонецЦикла; ТЗ.выбратьстроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если Док.НайтиДокумент(ТЗ.Патриот.Док)=1Тогда СпПартий.ДобавитьЗначение(Док.ТекущийДокумент()); КонецЕсли КонецЦикла;
Я не вижу в этом смысла так как если запрос нашел этот документ значит он есть а лишний раз проверять не стоит...
Я еще раз говорю ЗАПРОС МЕНЯ БЕСПОКОИТ А НЕ СПИСОК ЗНАЧЕНИЙ. Запрос нормально работает при формировании списка больше двух записей, а если вся эта ботва стоит на ХР то он и при двух записях работает.... Короче говоря или базу надо переиндексировать или 7.7 к и...ням закрыть так как она с вин 7 работать нормально не может...\
Тему можно закрывать, так как лезем не в ту степь. ВСЕМ Спасибо
Вы станете богаче, лишь став умнее... Чем дальше в лес, тем толще партизаны. Нельзя недооценивать, не предсказуемость тупизны...
Группа: Местный
Сообщений: 186
Спасибо сказали: 31 раз
Рейтинг: 0
Наздоровье. "на ХР то он и при двух записях работает...." - это надо было утаивать для эффектного завершения ? Про win 7 - те базы, которые трудно перевести с 7.7 на 8, на такой ОС не работают. Хотелось еще добавить по существу, да правила не позволяют.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!