Имя: Пароль:
1C
1C 7.7
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 розничных цены результатом был такой ошибка.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший