Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) ТП с поставщиком ОДБС (число прочтений - 3625 )
spenov
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 119
Зарегистрирован: 18. Января 2008
ТП с поставщиком ОДБС
06. Июня 2008 :: 07:55
Печать  
такая проблема: если список полей в поставщика добавлять только до установки текста запроса, то исчезает поле типизации колонки документ. автоудаление в 0 не дает поставить здесь.  если создавать только после установки текста запроса, то ругается на то что не заданы поля сортировки и ключа. поэтому создаю поля до и после утсановки текста запроса, но мне кажется что это криво, но по крайней мере работает Улыбка

но есть одна засада. Поставщик (или ТП?) генерит ошибочный запрос типа

select top 53

from _1SJOURN as журн (NOLOCK)
where convert(datetime,left(журн.date_time_iddoc,8),112)>='20080501'
  AND
  convert(datetime,left(журн.date_time_iddoc,8),112)<='20080531'
  AND
  журн.sp1006 in (select val from #Автор)
order by

и ТП соотв сперва выдает сообщение об ошибке. что совсем не красиво Печаль

в чем я не прав? может надо как то по другому это дело инициализировать? или запрос просто очень большой ( скл код получается под 5000 строк)


вот текст программы:

     тпДанные =_Форма.СоздатьЭлементУправления("ТабличноеПоле", "пДанные");
     тпДанные.РежимВыделенияСтроки =2;
     тпДанные.РежимВыделения =1;
     тпДанные.ЦветФонаВыделения=7479376;
     тпДанные.СтильЗаголовков =1;
     тпДанные.РазрешитьПеретаскивание = 0;
     тпДанные.РазрешитьНачалоПеретаскивания= 0;
     тпДанные.SetTextMargins(, 0, , 2);
     тпДанные.ФиксацияСлева =2;
     тпДанные.ФиксацияСправа =0;
     тпДанные.ТаймаутОбновления=5;
     //
     Источник=СоздатьОбъект("ПоставщикДанныхODBC.MSSQL");
     Источник.БазаДанных=СоздатьОбъект("ODBCDataBase");
     тпДанные.ПоставщикДанных=Источник;
     //
     ДобавитьКолонку("Документ","Документ",1,0);
     ДобавитьКолонку("ДатаВремя","Дата",1,0);
     ДобавитьКолонку("Автор","Автор",1,0);
     ДобавитьКолонку("Фирма","Фирма",1,0);
     ДобавитьКолонку("БЮ","БЮ",3,0);
     ДобавитьКолонку("Сумма","Сумма",2,0);
     ДобавитьКолонку("Валюта","Валюта",3,0);
     ДобавитьКолонку("Клиент","Контрагент",1,0);
     ДобавитьКолонку("Сделка","Договор",1,0);

           ТекстЗапроса="
           |SELECT
           |  журн.iddoc as [Документ $Документ], журн.idDocDef as [Документ_вид], журн.date_time_iddoc as [Позиция],
           |  CONVERT(char(20),dbo.get_doc_time(журн.date_time_iddoc),120 )as [ДатаВремя],
           |  журн.$ОбщийРеквизит.Автор as [Автор $Справочник.Пользователи],
           |  журн.$ОбщийРеквизит.Фирма as [Фирма $Справочник.Фирмы],
           |  журн.$ОбщийРеквизит.Проект as [БЮ $Справочник.НаправленияБизнеса],
           |  "+ЗапросНаГрафуЖурнала("Сумма")+",
           |  "+ЗапросНаГрафуЖурнала("Валюта")+",
           |  "+ЗапросНаГрафуЖурнала("Клиент")+",
           |  "+ЗапросНаГрафуЖурнала("Сделка")+"
           |FROM
           |  _1SJOURN as журн (NOLOCK)
           |"+Отбор()+"
           |";
     //сообщить(ТекстЗапроса);
    //период
     а.Получить("ПериодС"));
     са.Получить("ПериодПо"));
     //Автор
     спАвтор=спПараметрыЗапроса.Получить("Автор");
     если ПустоеЗначение(спАвтор)=0 тогда
           глГлобальный.Запрос.УложитьСписокОбъектов(спАвтор,"#Автор","Пользователи");
     конецЕсли;
     //Фирма
     спФирма=спПараметрыЗапроса.Получить("Фирма");
     если ПустоеЗначение(спФирма)=0 тогда
           глГлобальный.Запрос.УложитьСписокОбъектов(спФирма,"#Фирма","Фирмы");
     конецЕсли;
     //
     Поля=тпДанные.ПоставщикДанных.Поля;
     Поля.Добавить("Документ");
     Поля.Добавить("Документ_вид");
     Поля.Добавить("Позиция");
     Поля.Добавить("ДатаВремя");
     Поля.Добавить("Автор");
     Поля.Добавить("Фирма");
     Поля.Добавить("БЮ");
     Поля.Добавить("Сумма");
     Поля.Добавить("Валюта");
     Поля.Добавить("Клиент");
     Поля.Добавить("Сделка");
     //
     тпДанные.ПоставщикДанных.Отладка(1);
     тпДанные.ПоставщикДанных.УстТекстЗапроса(ТекстЗапроса);
     тпДанные.ПоставщикДанных.Отладка(1);
     //
     Поля=тпДанные.ПоставщикДанных.Поля;
     Поля.Добавить("Документ");
     Поля.Добавить("Документ_вид");
     Поля.Добавить("Позиция");
     Поля.Добавить("ДатаВремя");
     Поля.Добавить("Автор");
     Поля.Добавить("Фирма");
     Поля.Добавить("БЮ");
     Поля.Добавить("Сумма");
     Поля.Добавить("Валюта");
     Поля.Добавить("Клиент");
     Поля.Добавить("Сделка");
    //
     тпДанные.ПоставщикДанных.УстИдПоле("Документ");
     тпДанные.ПоставщикДанных.УстКлючПорядка("Позиция");
  
Наверх
 
IP записан
 
spenov
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 119
Зарегистрирован: 18. Января 2008
Re: ТП с поставщиком ОДБС
Ответ #1 - 06. Июня 2008 :: 08:11
Печать  
взял последнюю версию компоненты, необходимость добавления полей перед установкой текста запроса исчезла. но ошибка с генерацией неправильного запроса осталась. кстати, пользуюсь новым вариантом компоненты icpp.

еще заметил такое дело - если два раза подряд обновлять данные (т.е.  выполнить процедуру установки запроса), то вылет 1с без всяких прощальных фраз.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП с поставщиком ОДБС
Ответ #2 - 06. Июня 2008 :: 08:59
Печать  
Ну, подключай поставщика к ТП после установки текста запроса.
Эта тема обсуждается регулярно (поиск в руки).
  

De quelle planète es-tu?
Наверх
 
IP записан
 
spenov
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 119
Зарегистрирован: 18. Января 2008
Re: ТП с поставщиком ОДБС
Ответ #3 - 06. Июня 2008 :: 09:12
Печать  
не видел такого. так работает, спасибо.

осталась проблема вылета 1с при повторном выполнении этого кода(принудительное обновление данных).
правда теперь выдает сообщение об обращении к неправильному адресу.
ощущение, что если ТП обновляется (автообновление) и в этот момент выполнить этот код(сменить поставщика), то и происходит это дело.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: ТП с поставщиком ОДБС
Ответ #4 - 06. Июня 2008 :: 09:14
Печать  
ИМХО, Пока ТП не отработало нельзя менять Текст запроса
  
Наверх
ICQ  
IP записан
 
spenov
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 119
Зарегистрирован: 18. Января 2008
Re: ТП с поставщиком ОДБС
Ответ #5 - 06. Июня 2008 :: 09:19
Печать  
на сколько я понимаю, нет способа узнать выполняет в данный момент ТП обновление или нет. оно же происходит в отдельном потоке вроде как, без влияния на основной.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП с поставщиком ОДБС
Ответ #6 - 06. Июня 2008 :: 09:21
Печать  
spenov писал(а) 06. Июня 2008 :: 09:12:
осталась проблема вылета 1с при повторном выполнении этого кода(принудительное обновление данных).

Что, гарантированно вылетает раз в 5 секунд?
Не должно быть такого.
Если у тебя получится сделать простой воспроизводимый тест, обещаю посмотреть.

spenov писал(а) 06. Июня 2008 :: 09:19:
на сколько я понимаю, нет способа узнать выполняет в данный момент ТП обновление или нет. оно же происходит в отдельном потоке вроде как, без влияния на основной.

Нет, поток там тот же.
Там возможна саморекурсия, но в чем конкретно причина твоего вопроса - это надо конкретно же и смотреть.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
spenov
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 119
Зарегистрирован: 18. Января 2008
Re: ТП с поставщиком ОДБС
Ответ #7 - 06. Июня 2008 :: 09:26
Печать  
нет.работает отлично! до тех пор, пока не изменишь поставщика.

я делаю журнал доков. доки могут отбираться по определенным критериям - соответсвующие добавки в WHERE в запросе. соответственно если пользователь изменяет параметры отбора, то формируется новый текст запроса. потом создается новый поставщик, в нем все инициализируется и поставщик устанавливается в ТП. в этот момент вылет. не гарантировано. но если это делать несколько раз подряд, то на втором или третьем вылет. у меня интервал автообновления задан 5 сек. потому и предполагаю что вылет происходит если ТП в этот момент автообновляется. если не обновляется, то вылета нет.

я вот не могу понять только, если поток тотже, то два куска кода (автообновление и установка мной нового поставщика) не могут пересечься...
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП с поставщиком ОДБС
Ответ #8 - 06. Июня 2008 :: 09:31
Печать  
К сожалению, не вполне понятно, из-за чего это происходит.
По всем законам этого быть не должно.

Ну, можешь еще попробовать перед такими операциями отключать автообновление.
А может быть, еще и обнулять поставщика (ТП.ПоставщикДанных ="") перед установкой.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП с поставщиком ОДБС
Ответ #9 - 06. Июня 2008 :: 09:32
Печать  
spenov писал(а) 06. Июня 2008 :: 09:26:
я вот не могу понять только, если поток тотже, то два куска кода (автообновление и установка мной нового поставщика) не могут пересечься...

Смотря где ты его устанавливаешь.
В каком-то событии ТП?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
spenov
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 119
Зарегистрирован: 18. Января 2008
Re: ТП с поставщиком ОДБС
Ответ #10 - 06. Июня 2008 :: 09:37
Печать  
устанавливаю при нажатии на кнопку "обновить". т.е. не в событии ТП. разве что в этот момент ТП выполняет сама чтонибудь, типо отрисовки...

при начале выполнения кода обновления в ТП.Поставщик=ПолучитьПустоеЗначение() делаю, не помогает.

кстати, а запрос к СКЛ серверу случайно не в асинхронном режиме идет? предполагаю потому что при начальном заполнении данными сохраняется возможность управлять интерфейсом (типо нажимать на кнопки). у меня начальное заполнение происходит примерно 3-5 секунд, поэтому заметно
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП с поставщиком ОДБС
Ответ #11 - 06. Июня 2008 :: 09:56
Печать  
spenov писал(а) 06. Июня 2008 :: 09:37:
устанавливаю при нажатии на кнопку "обновить". т.е. не в событии ТП. разве что в этот момент ТП выполняет сама чтонибудь, типо отрисовки...

Ясно.

Теоретические мысли пока закончились.
Если решение сам не найдешь - см #6 насчет теста.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
spenov
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 119
Зарегистрирован: 18. Января 2008
Re: ТП с поставщиком ОДБС
Ответ #12 - 06. Июня 2008 :: 12:04
Печать  
сделал тестовую конфу. мучал ее по всякому. воспроизвести не удается. в 2 рабочих базах вылетает практически гарантировано. при этом чем дольше выполняется запрос, тем быстрее вылетает. т.е. на длинном запросе вылетает после 2,3,4 нажатия на обновить. на коротком запросе требуется много раз обновить но в итоге таки вылетает.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать