|
v7: подключение занято до получения результатов | ☑ | ||
---|---|---|---|---|
0
DeMi4
06.08.12
✎
11:04
|
Как можно победить эту ошибку
ПоставщикДанных = СоздатьОбъект("ODBCDataProvider.MSSQL"); ПоставщикДанных.БазаДанных = ÑîçäàòüÎáúåêò("ODBCDatabase"); ПоставщикДанных.УстановитьТекстовыйПараметр("ÂûáÑêëàä", ÑêëàäÎêíàÂûäà÷è); ПоставщикДанных.УстановитьТекстЗапроса(ПолучитьЗапрос()); ПоставщикДанных.УстИдПоле("Товар"); ПоставщикДанных.УстКлючПорядка("Тип"); |
|||
1
DeMi4
06.08.12
✎
11:06
|
ПоставщикДанных.БазаДанных = СоздатьОбъект("ODBCDatabase");
|
|||
2
Ёпрст
06.08.12
✎
11:07
|
(0) хинты нолок в тест запроса пихай
|
|||
3
DeMi4
06.08.12
✎
11:09
|
Стоят
|
|||
4
DeMi4
06.08.12
✎
11:09
|
Запрос автообновляется каждые 10 сек.
|
|||
5
Ёпрст
06.08.12
✎
11:13
|
чего еще есть в коде ?
Нет там штатного типа НайтиПоКоду ? |
|||
6
DeMi4
06.08.12
✎
11:14
|
Нет нету
|
|||
7
Ёпрст
06.08.12
✎
11:16
|
обычно это сообщение - при 2-х открытых курсорах
|
|||
8
DeMi4
06.08.12
✎
11:17
|
Вот запрос может в нем накосячил
Запрос.Текст = " |ВЫБРАТЬ | Рег.Тип КАК [Тип $Число.1.0], | Рег.Товар КАК [Товар $Справочник.Номенклатура], | REPLACE(СОКРП($СпрН.Код),'-','') КАК [Код $Строка], | REPLACE(СОКРП($СпрН.КаталНомер),'-','') КАК [КаталожныйНомер $Строка], | $СпрНХ.ЯчейкаХранения КАК [ЯчейкаХранения $Строка], | $СпрНХ.ЯчейкаЗапас КАК [ЯчейкаЗапаса $Строка], | Рег.КВыдаче КАК [КВыдаче $Число.15.3] |ИЗ ( | ВЫБРАТЬ | РегОст.Тип КАК Тип, | РегОст.Товар КАК Товар, | СУММА(РегОст.КВыдаче) КАК КВыдаче | ИЗ ( | ВЫБРАТЬ | ВЫБОР КОГДА $СпрВР.ТипРемонта В (:ТР_ДопОборудования, :ТР_Доукомплектация) ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК Тип, | РегРезТМЦ.Товар КАК Товар, | РегРезТМЦ.КоличествоОстаток КАК КВыдаче | ИЗ | $РегистрОстатки.РезервыТМЦ(,,Склад = :ВыбСклад И (ЛЕВО(ПоСчету,4) <> :ВидДокумента.Счет~ ИЛИ ПРАВО(ПоСчету,9) = :ПустойИД) ,(Товар,ПоСчету),(Количество)) РегРезТМЦ | ЛЕВОЕ СОЕДИНЕНИЕ | Документ.ЗаказНаряд КАК ДокЗН (NoLock) ПО $ДокЗН.ТекущийДокумент = ПРАВО(РегРезТМЦ.ПоСчету,9) | ЛЕВОЕ СОЕДИНЕНИЕ | Справочник.ВидыРемонта КАК СпрВР (NoLock) ПО $ДокЗН.ВидРемонта = $СпрВР.ТекущийЭлемент | | ) КАК РегОст | СГРУППИРОВАТЬ | РегОст.Тип, РегОст.Товар | | ) КАК Рег |ЛЕВОЕ СОЕДИНЕНИЕ | Справочник.Номенклатура КАК СпрН (NoLock) ПО $СпрН.ТекущийЭлемент = Рег.Товар |ЛЕВОЕ СОЕДИНЕНИЕ | Справочник.НоменклатураХранение КАК СпрНХ (NoLock) ПО $СпрНХ.Владелец = Рег.Товар | |ГДЕ | $СпрНХ.Склад = :ВыбСклад И | Рег.КВыдаче > 0 |"; |
|||
9
Ёпрст
06.08.12
✎
11:20
|
вот это лишнее
ЛЕВОЕ СОЕДИНЕНИЕ | Документ.ЗаказНаряд КАК ДокЗН (NoLock) ПО $ДокЗН.ТекущийДокумент = ПРАВО(РегРезТМЦ.ПоСчету,9) | ЛЕВОЕ СОЕДИНЕНИЕ | Справочник.ВидыРемонта КАК СпрВР (NoLock) ПО $ДокЗН.ВидРемонта = $СпрВР.ТекущийЭлемент |
|||
10
DeMi4
06.08.12
✎
11:23
|
Почему лишнее
|
|||
11
Ёпрст
06.08.12
✎
11:23
|
(10) не участвует нигде потом - ни в селекте, ни в условии ни в группировке
|
|||
12
Ёпрст
06.08.12
✎
11:25
|
разве что соединение со справочником есть в кейсе
|
|||
13
DeMi4
06.08.12
✎
11:25
|
ВЫБОР КОГДА $СпрВР.ТипРемонта
|
|||
14
Ёпрст
06.08.12
✎
11:25
|
Хотя, это всё не важно - есть еще что помимо этого запроса ?
|
|||
15
DeMi4
06.08.12
✎
11:29
|
Фабрика = СоздатьОбъект("ФабрикаОбъектов");
ОбъектФорма = СоздатьОбъект("Форма"); ОбъектФорма.УстановитьФорму(Форма); тпРезервы = ОбъектФорма.СоздатьЭлементУправления("ТабличноеПоле","тпРезервы"); тпРезервы.ЦветТекстаВыделения = глЦветТекстаВыделения; тпРезервы.ЦветФонаВыделения = глЦветФонаВыделения; тпРезервы.ЦветФонаВыделения2 = глЦветФонаВыделения2; тпРезервы.СтильРамки = 0; тпРезервы.СтильЗаголовков = 1; тпРезервы.РежимВыделенияСтроки = 1; тпРезервы.ЦветЛиний = глЧерный; тпРезервы.ТаймаутОбновления = 10; тпРезервы.Шрифт = Фабрика.Шрифт("Основной",10,); //КОЛОНКИ Колонка = тпРезервы.Колонки.Добавить("Товар"); Колонка.Заголовок = "Товар"; Колонка.Данные = "Товар"; Колонка.ГоризонтальноеВыравнивание = 0; Колонка.Положение = 0; Колонка.Ширина = 50*6.2; Колонка = тпРезервы.Колонки.Добавить("Код"); Колонка.Заголовок = "Код"; Колонка.Данные = "Код"; Колонка.ГоризонтальноеВыравнивание = 0; Колонка.Положение = 1; Колонка.Ширина = 8*6.2; Колонка = тпРезервы.Колонки.Добавить("КаталожныйНомер"); Колонка.Заголовок = "Каталожный номер"; Колонка.Данные = "КаталожныйНомер"; Колонка.ГоризонтальноеВыравнивание = 0; Колонка.Положение = 2; Колонка.Ширина = 17*6.2; Колонка = тпРезервы.Колонки.Добавить("ЯчейкаХранения"); Колонка.Заголовок = "Ячейка хранения"; Колонка.Данные = "ЯчейкаХранения"; Колонка.ГоризонтальноеВыравнивание = 0; Колонка.Положение = 2; Колонка.Ширина = 12*6.2; Колонка = тпРезервы.Колонки.Добавить("ЯчейкаЗапаса"); Колонка.Заголовок = "Ячейка запаса"; Колонка.Данные = "ЯчейкаЗапаса"; Колонка.ГоризонтальноеВыравнивание = 0; Колонка.Положение = 2; Колонка.Ширина = 12*6.2; Колонка = тпРезервы.Колонки.Добавить("КВыдаче"); Колонка.Заголовок = "К выдаче"; Колонка.Данные = "КВыдаче"; Колонка.ГоризонтальноеВыравнивание = 0; Колонка.Положение = 0; Колонка.Формат = "Ч15.3"; Колонка.Ширина = 8*6.2; Колонка = тпРезервы.Колонки.Добавить("Тип"); Колонка.Заголовок = "Тип"; Колонка.Данные = "Тип"; Колонка.ГоризонтальноеВыравнивание = 0; Колонка.Положение = 0; Колонка.Ширина = 8*6.2; Колонка.Видимость = 0; ПоставщикДанных = СоздатьОбъект("ODBCDataProvider.MSSQL"); ПоставщикДанных.БазаДанных = СоздатьОбъект("ODBCDatabase"); ПоставщикДанных.Отладка( 0 ); ПоставщикДанных.УстановитьТекстовыйПараметр("ВыбСклад", СкладОкнаВыдачи); ПоставщикДанных.УстановитьТекстовыйПараметр("ТР_ДопОборудования", глТР.ДопОборудования); ПоставщикДанных.УстановитьТекстовыйПараметр("ТР_Доукомплектация", глТР.Доукомплектация); ПоставщикДанных.УстТекстЗапроса(ПолучитьЗапрос()); ПоставщикДанных.УстИДПоле("Товар"); ПоставщикДанных.УстКлючПорядка("Тип"); тпРезервы.ПоставщикДанных = ПоставщикДанных; //ШРИФТЫ ОсновнойШрифт = тпРезервы.Шрифт; ЖирныйШрифт = Фабрика.Шрифт(ОсновнойШрифт,,,1); тпРезервы.ОбновитьСтроки(); Вот весь кусок который выполняется |
|||
16
Ёпрст
06.08.12
✎
11:33
|
(15) И ?
как это вообще работает ?! :)) |
|||
17
Ёпрст
06.08.12
✎
11:33
|
текст запроса от класса поставщикДанных, а само отображение на обычном ТП..
|
|||
18
DeMi4
06.08.12
✎
11:34
|
А почему не должно работать
|
|||
19
DeMi4
06.08.12
✎
11:35
|
Когда был только внутренний запрос все отрабатывало и обновлялось как только увеличил сам запрос начала вываливаться эта ошибка
|
|||
20
Ёпрст
06.08.12
✎
11:37
|
(18) *_)))))))))))))))
А с какой радости должно ? Текст t-sql далеко другой синтаксис, нам нет Выбрать/По С.. там вообще нет кириллицы, если что |
|||
21
DeMi4
06.08.12
✎
11:39
|
Запрос же подгатавливается то есть весь синтаксис должен быть учтен классом
|
|||
22
Ёпрст
06.08.12
✎
11:40
|
Ага зачет, еще что упустил ?
|
|||
23
DeMi4
06.08.12
✎
11:44
|
А что еще надо учесть?
|
|||
24
Ёпрст
06.08.12
✎
11:45
|
показать всё
|
|||
25
DeMi4
06.08.12
✎
11:46
|
То есть надо реализовывать все через ПоставщикаДанных так получается что ли
|
|||
26
DeMi4
06.08.12
✎
11:49
|
В смысле показать всё
|
|||
27
Ёпрст
06.08.12
✎
11:49
|
нам отсюда не видно что у тебя на самом деле в коде.
Ошибка в (0) - это попытка открытия 2-х локальных курсоворв одновременно. |
|||
28
DeMi4
06.08.12
✎
11:54
|
Как это понять
|
|||
29
Ёпрст
06.08.12
✎
11:56
|
(28) 2 запроса одновременно, или в открытой выборке использование "штатных" запросов , типа НайтиПоКоду/Наименованию/Реквизиты..
Твой код не видать , что там у тебя на самом деле - хз. |
|||
30
Ёпрст
06.08.12
✎
12:03
|
ну и сет ноукаунт он надо
http://www.1cpp.ru/forum/YaBB.pl?num=1234869674/5#5 |
|||
31
DeMi4
06.08.12
✎
12:14
|
Проблема наверно вот в этом что я создаю объект запрос и дальше его не убиваю
Запрос = СоздатьОбъект("ПрямойЗапрос"); Запрос.РежимОтладки = 0; Запрос.БухгалтерскийУчет = 0; Запрос.ОперативныйУчет = 0; Запрос.ПериодическиеЗначения = 0; //Запрос.УстановитьТекстовыйПараметр("ВыбСклад", СкладОкнаВыдачи); //Запрос.УстановитьТекстовыйПараметр("ТР_ДопОборудования", глТР.ДопОборудования); //Запрос.УстановитьТекстовыйПараметр("ТР_Доукомплектация", глТР.Доукомплектация); Запрос.Текст = " |ВЫБРАТЬ | Рег.Тип КАК [Тип $Число.1.0], | Рег.Товар КАК [Товар $Справочник.Номенклатура], | REPLACE(СОКРП($СпрН.Код),'-','') КАК [Код $Строка], | REPLACE(СОКРП($СпрН.КаталНомер),'-','') КАК [КаталожныйНомер $Строка], | $СпрНХ.ЯчейкаХранения КАК [ЯчейкаХранения $Строка], | $СпрНХ.ЯчейкаЗапас КАК [ЯчейкаЗапаса $Строка], | Рег.КВыдаче КАК [КВыдаче $Число.15.3] |ИЗ ( | ВЫБРАТЬ | РегОст.Тип КАК Тип, | РегОст.Товар КАК Товар, | СУММА(РегОст.КВыдаче) КАК КВыдаче | ИЗ ( | ВЫБРАТЬ | ВЫБОР КОГДА $СпрВР.ТипРемонта В (:ТР_ДопОборудования, :ТР_Доукомплектация) ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК Тип, | РегРезТМЦ.Товар КАК Товар, | РегРезТМЦ.КоличествоОстаток КАК КВыдаче | ИЗ | $РегистрОстатки.РезервыТМЦ(,,Склад = :ВыбСклад И (ЛЕВО(ПоСчету,4) <> :ВидДокумента.Счет~ ИЛИ ПРАВО(ПоСчету,9) = :ПустойИД) ,(Товар,ПоСчету),(Количество)) РегРезТМЦ | ЛЕВОЕ СОЕДИНЕНИЕ | Документ.ЗаказНаряд КАК ДокЗН (NoLock) ПО $ДокЗН.ТекущийДокумент = ПРАВО(РегРезТМЦ.ПоСчету,9) | ЛЕВОЕ СОЕДИНЕНИЕ | Справочник.ВидыРемонта КАК СпрВР (NoLock) ПО $ДокЗН.ВидРемонта = $СпрВР.ТекущийЭлемент | | ) КАК РегОст | СГРУППИРОВАТЬ | РегОст.Тип, РегОст.Товар | | ) КАК Рег |ЛЕВОЕ СОЕДИНЕНИЕ | Справочник.Номенклатура КАК СпрН (NoLock) ПО $СпрН.ТекущийЭлемент = Рег.Товар |ЛЕВОЕ СОЕДИНЕНИЕ | Справочник.НоменклатураХранение КАК СпрНХ (NoLock) ПО $СпрНХ.Владелец = Рег.Товар | |ГДЕ | $СпрНХ.Склад = :ВыбСклад И | Рег.КВыдаче > 0 |"; Возврат Запрос.ПодготовитьТекстЗапроса(); |
|||
32
Ёпрст
06.08.12
✎
12:15
|
соединение с документом лишнее
|
|||
33
DeMi4
06.08.12
✎
12:16
|
Нет оно нужно там могут быть разные документы
|
|||
34
Ёпрст
06.08.12
✎
12:20
|
(33) че ?
|
|||
35
Ёпрст
06.08.12
✎
12:21
|
если был бы иннер - еще туда сюда, как фильтрация, а так - лишнее соединение с табличкой.
|
|||
36
DeMi4
06.08.12
✎
21:32
|
Ну и кому интересно косяк был здесь
ПоставщикДанных.УстКлючПорядка("Тип"); надо было сделать так ПоставщикДанных.УстКлючПорядка("Тип,Товар"); |
|||
37
Ёпрст
07.08.12
✎
09:14
|
||||
38
varelchik
07.08.12
✎
09:23
|
Сталкивался с таким.
Проблема походу в том что запрос должен вернуть 1 значение а он возвращает больше одного. Когда я перевел форму списка товаров на прямые запросы тоже периодически вываливало. У меня на каждую чтроку выводиться цена из справочника Цены. Так вот там на некоторых позициях было по 2 розничных цены результатом был такой ошибка. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |