|
Ошибка в запросе? | ☑ | ||
---|---|---|---|---|
0
Me-chtatel
16.05.14
✎
11:30
|
Полный текст процедуры:
Процедура УдалитьДубли () Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | СтавкиНалогаНаИмущество.ОС, | СтавкиНалогаНаИмущество.Период, | СтавкиНалогаНаИмущество.ИнвНомер КАК ИнвНомер, | СтавкиНалогаНаИмущество.НалоговаяСтавка, | СтавкиНалогаНаИмущество.Учреждение, | СтавкиНалогаНаИмущество.ПорядокНалогообложения, | СтавкиНалогаНаИмущество.ВидИмущества, | СтавкиНалогаНаИмущество.БазоваяСтавка |ИЗ | РегистрСведений.СтавкиНалогаНаИмущество КАК СтавкиНалогаНаИмущество | |СГРУППИРОВАТЬ ПО | СтавкиНалогаНаИмущество.ОС, | СтавкиНалогаНаИмущество.ИнвНомер, | СтавкиНалогаНаИмущество.НалоговаяСтавка, | СтавкиНалогаНаИмущество.Учреждение, | СтавкиНалогаНаИмущество.ПорядокНалогообложения, | СтавкиНалогаНаИмущество.ВидИмущества, | СтавкиНалогаНаИмущество.БазоваяСтавка, | СтавкиНалогаНаИмущество.Период | |УПОРЯДОЧИТЬ ПО | ИнвНомер"; Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); НаборЗаписей = РегистрыСведений.СтавкиНалогаНаИмущество.СоздатьНаборЗаписей(); НаборЗаписей.Записать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | СобытияОССрезПоследних.ДатаСобытия |ИЗ | РегистрСведений.СобытияОС.СрезПоследних КАК СобытияОССрезПоследних |ГДЕ | СобытияОССрезПоследних.ОС = &ОС"; Запрос.УстановитьПараметр("ОС", ВыборкаДетальныеЗаписи.ОС); // Запрос.УстановитьПараметр("Событие", Перечисления.СостоянияОС.ВведеноВЭксплуатацию); ВыборкаСобытияОС = Запрос.Выполнить().Выбрать().Следующий(); ЗаписьРегистра = РегистрыСведений.СтавкиНалогаНаИмущество.СоздатьМенеджерЗаписи(); ЗаписьРегистра.ОС = ВыборкаДетальныеЗаписи.ОС; ЗаписьРегистра.ИнвНомер = ВыборкаДетальныеЗаписи.ИнвНомер; ЗаписьРегистра.Период = ВыборкаСобытияОС.Событие; ЗаписьРегистра.Учреждение = ВыборкаДетальныеЗаписи.Учреждение; ЗаписьРегистра.НалоговаяСтавка = ВыборкаДетальныеЗаписи.НалоговаяСтавка; ЗаписьРегистра.БазоваяСтавка = ВыборкаДетальныеЗаписи.БазоваяСтавка; ЗаписьРегистра.ПорядокНалогообложения = ВыборкаДетальныеЗаписи.ПорядокНалогообложения; ЗаписьРегистра.ВидИмущества = ВыборкаДетальныеЗаписи.ВидИмущества; ЗаписьРегистра.Записать(); Сообщить(Строка(ВыборкаДетальныеЗаписи.ОС)+" инв номер "+Строка(ВыборкаДетальныеЗаписи.ИнвНомер)+" "+Строка(ВыборкаДетальныеЗаписи.Учреждение)); КонецЦикла; КонецПроцедуры Суть вопроса: надо очистить регистр от дублрирующихся записей, которых там неимоверно много. Не нашел ничего лучше, как в начале первым запросом выбрать из этого регистра по одной записи для каждого ОС, затем его очистить и заного перезаполнить. Но тут вышла проблема - надо правильно задать реквизит "Период". Для этого внутри цикла создал еще 1 запрос по регистру сведений СобытияОС. Если я его проверяю через консоль запросов - все работает как надо. А как только запускаю обработку - второй запрос пустой, как не изворачивайся. Подскажите что именно я не так делаю? |
|||
1
Me-chtatel
16.05.14
✎
13:01
|
Сейчас ради эксперимента сделал такой запрос:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | СобытияОС.Период, | СобытияОС.ОС, | СобытияОС.ОС.Код, | СобытияОС.ДатаСобытия, | СобытияОС.Событие, | СобытияОС.ИнвНомер |ИЗ | РегистрСведений.СобытияОС КАК СобытияОС |ГДЕ | СобытияОС.Событие = &Событие"; Запрос.УстановитьПараметр("Событие", Перечисления.СостоянияОС.ПринятоКУчету); И опять пустой результат..... причем теперь если убрать отбор по событию - запрос работает.... Подскажите где тут собака зарыта?? уже все мозги сломал... |
|||
2
Ненавижу 1С
гуру
16.05.14
✎
13:02
|
а тип Событие точно Перечисления.СостоянияОС
|
|||
3
User_Agronom
16.05.14
✎
13:03
|
(1) А просто заглянуть в регистр не судьба?
Может там записей вообще нет. |
|||
4
Me-chtatel
16.05.14
✎
13:05
|
(2) Точно.
(3) (2) все запросы я вначале прогоняю в этой же базе через консоль запросов. И там все есть. но разумеется я заглядывал и проверял. |
|||
5
Me-chtatel
16.05.14
✎
13:07
|
(2)
причем когда в отладчике выбираешь "вычислить выражение" и "Запрос", внешне как будто все верно. Но дальше уже пустота.... |
|||
6
Me-chtatel
16.05.14
✎
13:52
|
Хелп. Почему один и тот же запрос без отбора работает, а с отбором нет???? Причем в консоле запросов работают оба.
Вот полный текст: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | СобытияОС.Период, | СобытияОС.ОС, | СобытияОС.ОС.Код, | СобытияОС.ДатаСобытия, | СобытияОС.Событие, | СобытияОС.ИнвНомер |ИЗ | РегистрСведений.СобытияОС КАК СобытияОС |ГДЕ | СобытияОС.Событие = &Событие"; Запрос.УстановитьПараметр("Событие", Перечисления.СостоянияОС.ПринятоКУчету); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); НаборЗаписей = РегистрыСведений.СтавкиНалогаНаИмущество.СоздатьНаборЗаписей(); НаборЗаписей.Записать(); ДатаПерехода = Дата("20130101000000"); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ЗаписьРегистра = РегистрыСведений.СтавкиНалогаНаИмущество.СоздатьМенеджерЗаписи(); ЗаписьРегистра.ОС = ВыборкаДетальныеЗаписи.ОС; ЗаписьРегистра.ИнвНомер = ВыборкаДетальныеЗаписи.ИнвНомер; ЗаписьРегистра.Период = ВыборкаДетальныеЗаписи.ДатаСобытия; ЗаписьРегистра.Учреждение = ВыборкаДетальныеЗаписи.Учреждение; Если ВыборкаДетальныеЗаписи.ДатаСобытия < ДатаПерехода Тогда ЗаписьРегистра.НалоговаяСтавка = 2.2; ЗаписьРегистра.БазоваяСтавка = 2.2; ЗаписьРегистра.ПорядокНалогообложения = Перечисления.ПорядокНалогообложенияИмущества.ОсобыеЛьготыНеУстановлены; ЗаписьРегистра.ВидИмущества = Перечисления.НИ_ВидыИмущества.ОсобенностиОтсутствуют; Иначе ЗаписьРегистра.НалоговаяСтавка = 0; ЗаписьРегистра.БазоваяСтавка = 0; ЗаписьРегистра.ПорядокНалогообложения = Перечисления.ПорядокНалогообложенияИмущества.НеПодлежитНалогообложению; ЗаписьРегистра.ВидИмущества = Перечисления.НИ_ВидыИмущества.ОсобенностиОтсутствуют; КонецЕсли; ЗаписьРегистра.Записать(); Если ВыборкаДетальныеЗаписи.ДатаСобытия < ДатаПерехода Тогда ЗаписьРегистра = РегистрыСведений.СтавкиНалогаНаИмущество.СоздатьМенеджерЗаписи(); ЗаписьРегистра.ОС = ВыборкаДетальныеЗаписи.ОС; ЗаписьРегистра.ИнвНомер = ВыборкаДетальныеЗаписи.ИнвНомер; ЗаписьРегистра.Период = ДатаПерехода; ЗаписьРегистра.Учреждение = ВыборкаДетальныеЗаписи.Учреждение; ЗаписьРегистра.НалоговаяСтавка = 0; ЗаписьРегистра.БазоваяСтавка = 0; ЗаписьРегистра.ПорядокНалогообложения = Перечисления.ПорядокНалогообложенияИмущества.НеПодлежитНалогообложению; ЗаписьРегистра.ВидИмущества = Перечисления.НИ_ВидыИмущества.ОсобенностиОтсутствуют; КонецЕсли; ЗаписьРегистра.Записать(); Сообщить(Строка(ВыборкаДетальныеЗаписи.ОС)+" инв номер "+Строка(ВыборкаДетальныеЗаписи.ИнвНомер)+" "+Строка(ВыборкаДетальныеЗаписи.Учреждение)); КонецЦикла; |
|||
7
Me-chtatel
16.05.14
✎
13:53
|
Если исключить этот блок:
|ГДЕ | СобытияОС.Событие = &Событие"; Запрос.УстановитьПараметр("Событие", Перечисления.СостоянияОС.ПринятоКУчету); то все работает, но мне то надо отобрать только принятые к учету.... |
|||
8
Крошка Ру
16.05.14
✎
14:00
|
(7)Вариант один: делай выборку без отбора, в отладчике смотри в выборке тип и значение поля Событие.
|
|||
9
Me-chtatel
16.05.14
✎
14:15
|
(8) Спасибо, оказалось что собития он брал не из регистра СостоянияОС, а из другого.
Но теперь вопрос, как объединить несколько условий типа "или"? (просто не разу не приходилось еще такое делать), а вариантов которое может принимать значение события как минимум 3... |
|||
10
Me-chtatel
16.05.14
✎
14:16
|
(9) отбой, кажется сам нашел ) спросил, не посмотрев конструктор
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |