|
Обращение к таблице в клиент серверном режиме | ☑ | ||
---|---|---|---|---|
0
jour
02.12.13
✎
12:35
|
Всем доброе время суток. Есть обработка, нормально работающая с файлами в файл серверном варианте и совсем не работающая в клиент серверном.
Путь к файлам прописан в обработке в функции наСервере поэтому предполагал что проблем быть не должно. Вот код: &НаКлиенте Процедура Команда1(Команда) ПолучитьДанные(); КонецПроцедуры Функция ПолучитьСтрокуПодключения(Источник) Если Источник = "LogFile" Тогда СтрокаПодключения = "DSN=LogFile;DBQ=\\AVTOPROKAT\Dat\LogFile.tps\!;PWD=LogFile;Description=LogFile;Extension=tps;Oem=N;NullEmptyStr=Y;"; Иначе Сообщить("Источник указан не верно"); КонецЕсли; Возврат СтрокаПодключения; КонецФункции /// Для каждой таблицы своя структура. Функция ПолучитьСтруктуруИсточника(Источник) Структура = Новый Структура; Если Источник = "LogFile" Тогда Структура.Вставить("Таблица", 0); Структура.Вставить("Дата", 1); Структура.Вставить("Время", 2); Структура.Вставить("ОбъектИд", 3); Структура.Вставить("Наименование", 4); Структура.Вставить("Операция", 5); Структура.Вставить("Код", 6); Структура.Вставить("Примечание", 7); КонецЕсли; Возврат Структура; КонецФункции Функция ПолучитьТаблицу(Источник,CommandText) Структура = ПолучитьСтруктуруИсточника(Источник); Таблица = Новый ТаблицаЗначений(); Для Каждого Строка Из Структура Цикл Таблица.Колонки.Добавить(Строка.Ключ,Новый ОписаниеТипов("Строка"),Строка.Ключ); КонецЦикла; Connection = Новый COMОбъект("ADODB.Connection"); Command = Новый COMОбъект("ADODB.Command"); RecordSet = Новый COMОбъект("ADODB.RecordSet"); Попытка Connection.Open(СокрЛП(ПолучитьСтрокуПодключения(Источник))); Command.ActiveConnection = Connection; Command.CommandText = CommandText; RecordSet = Command.Execute(); RecordSet.MoveFirst(); Пока RecordSet.EOF = Ложь Цикл Строка = Таблица.Добавить(); Для Каждого Ст Из Структура Цикл Строка[Ст.Ключ] = RecordSet.Fields(RecordSet.Fields.Item(Ст.Значение).Name).Value; КонецЦикла; RecordSet.MoveNext(); КонецЦикла; Исключение Сообщить("Не могу подключиться к базе!!!"); КонецПопытки; Возврат Таблица; КонецФункции &НаСервере Процедура ПолучитьДанные() ИмяТаблицыИзменений = "LogFile"; ИмяТаблицыДоговоров = "DProk"; ИмяТаблицыКонтрагентов = "Clien"; ИмяТаблицыМашины = "Car"; ИмяТаблицыПлатежей = "Plat"; УсловиеДляТаблицыИзменений = "SELECT * FROM LogFile WHERE DateOp="+СтрЗаменить(Строка(Число(НачалоДня(ТекущаяДата())-Дата(1800,12,28))/86400)," ",""); СвежиеДанные = ПолучитьТаблицу(ИмяТаблицыИзменений,УсловиеДляТаблицыИзменений); Если СвежиеДанные.Количество() > 0 Тогда Сообщить("История получена!"); ///Отбираем договора проката, сворачиваем и обрабатываем. СвежиеДанные.Свернуть("Таблица,ОбъектИД,Наименование,Операция"); Отбор = Новый Структура; Отбор.Вставить("Таблица","DProk"); ДоговораАренды = СвежиеДанные.НайтиСтроки(Отбор); Если ДоговораАренды.Количество()>0 тогда //ПодключитьТаблицуДоговоров(); Для Индекс = 0 по ДоговораАренды.Количество()-1 Цикл Если ДоговораАренды[Индекс].Операция <> "Удаление договора" Тогда УсловиеДляТаблицыДоговоров = "SELECT * FROM DProk WHERE "+"NUMBER"+ "=" + СтрЗаменить(Строка(ДоговораАренды[Индекс].ОбъектИд)," ",""); //Получить целую таблицу пока не получается, нужно изучать язык запросов Clarion СтрокаТаблицыДоговоров = ПолучитьТаблицу(ИмяТаблицыДоговоров,УсловиеДляТаблицыДоговоров); УсловиеДляТаблицыКонтрагентов = "SELECT * FROM Clien WHERE " + "ClientID"+"="+СтрЗаменить(Строка(СтрокаТаблицыДоговоров[0].КлиентИД)," ",""); СтрокаТаблицыКонтрагента = ПолучитьТаблицу(ИмяТаблицыКонтрагентов,УсловиеДляТаблицыКонтрагентов); Контрагент = ЗаполнитьДанныеКонтрагента(СтрокаТаблицыКонтрагента[0]); УсловиеДляТаблицыМашины = "SELECT * FROM Car WHERE CarID="+СтрЗаменить(Строка(СтрокаТаблицыДоговоров[0].МашинаИд)," ",""); СтрокаТаблицыМашины = ПолучитьТаблицу(ИмяТаблицыМашины,УсловиеДляТаблицыМашины); Машина = НайтиМашину(СтрокаТаблицыМашины[0]); Договор = ДоговорСКонтрагетом(СтрокаТаблицыДоговоров[0], Контрагент); УсловиеТаблицыПлатежей = "SELECT * FROM Plat WHERE DOGNUMBER="+СтрЗаменить(Строка(ДоговораАренды[Индекс].ОбъектИд)," ",""); Платежи = ПолучитьТаблицу(ИмяТаблицыПлатежей,УсловиеТаблицыПлатежей); ТаблицаПлатежей = ПодготовитьТаблицуПлатежей(Платежи,СтрокаТаблицыДоговоров[0]); Документ = НайтиДокумент(Договор, ДоговораАренды[Индекс].ОбъектИд, СтрокаТаблицыДоговоров[0], Машина, ТаблицаПлатежей); Иначе Сообщить("Надо удалить договор"); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; // //////////////// //ВремТаблицаИзменений = СформироватьВременнуюТаблицу(СвежиеДанные,Источник); //////////// //ВремТаблицаДоговоров = СформироватьВременнуюТаблицу(ТаблицаДоговоров,ИмяТаблицыДоговоров); КонецПроцедуры |
|||
1
Wobland
02.12.13
✎
12:36
|
и чо?
|
|||
2
jour
02.12.13
✎
12:36
|
И как это запустить на клиент серверном варианте работы
|
|||
3
Wobland
02.12.13
✎
12:38
|
(2) предлагаю избавляться от того, что вызывает ошибку
|
|||
4
jour
02.12.13
✎
12:38
|
Я думал прописать это в регламентные задания, только вот не пашет на сервере.
|
|||
5
jour
02.12.13
✎
12:38
|
ошибку ничего не вызывает
|
|||
6
jour
02.12.13
✎
12:38
|
(3) Просто не подключается к таблице и все.
|
|||
7
Смотрящий от 1С
02.12.13
✎
12:58
|
обращение к файлам происходимт от имени пользователя, запустившего серевр. У него есть права ?
|
|||
8
jour
02.12.13
✎
13:04
|
(7) Конечно, я сам запускаю
|
|||
9
Defender aka LINN
02.12.13
✎
13:12
|
(8) Тебе (7) по слогам прочитать, что ли?
|
|||
10
Maxus43
02.12.13
✎
13:26
|
(8) ты работаешь под пользователем USR1CV82?
|
|||
11
jour
02.12.13
✎
13:30
|
(10) Нет, но доступ полный для всех пользователей
|
|||
12
Maxus43
02.12.13
✎
13:33
|
(11) отладчиком иди, или замени богомерзкие сообщить() на православные ЗаписьЖурналаРегистрации или ОбщегоНазначение.СообщитьОбОшибке();
|
|||
13
kiruha
02.12.13
✎
13:35
|
(11)
Напиши где валится Connection = Новый COMОбъект("ADODB.Connection"); или Connection.Open(СокрЛП(ПолучитьСтрокуПодключения(Источник))); или ... Неужели трудно посмотреть чтобы мы не гадали ? |
|||
14
jour
02.12.13
✎
13:43
|
(13) Connection.Open(СокрЛП(ПолучитьСтрокуПодключения(Источник)));
не работает тут |
|||
15
Maxus43
02.12.13
✎
13:44
|
&НаСервере
Функция ПолучитьТаблицу(Источник,CommandText) |
|||
16
МихаилМ
02.12.13
✎
13:46
|
(0)
сервер 1с 64 битный? |
|||
17
jour
02.12.13
✎
13:47
|
(15) я уже все в одной функции пишу.
&НаСервере Функция ПолучитьИсториюИзменений() Таблица = Новый ТаблицаЗначений(); Таблица.Колонки.Добавить("Таблица",,"Таблица"); Таблица.Колонки.Добавить("Дата",,"Дата"); Таблица.Колонки.Добавить("ОбъектИд",,"ОбъектИд"); Таблица.Колонки.Добавить("Наименование",,"Наименование"); Таблица.Колонки.Добавить("Операция",,"Операция"); Таблица.Колонки.Добавить("Код",,"Код"); Таблица.Колонки.Добавить("Примечание",,"Примечание"); ConnectionString = "DSN=LogFile;DBQ=C:\Users\dev1c\Desktop\LogFile.tps\!;PWD=LogFile;Description=LogFile;Extension=tps;Oem=N;NullEmptyStr=Y;"; Сообщить (ConnectionString); Connection = Новый COMОбъект("ADODB.Connection"); Command = Новый COMОбъект("ADODB.Command"); RecordSet = Новый COMОбъект("ADODB.RecordSet"); Условие = СтрЗаменить(Строка(Число(НачалоДня(ТекущаяДата())-Дата(1800,12,28))/86400)," ",""); Попытка Connection.Open(СокрЛП(ConnectionString)); Command.ActiveConnection = Connection; Command.CommandText = "SELECT * FROM LogFile WHERE DateOp="+Условие; RecordSet = Command.Execute(); RecordSet.MoveFirst(); |
|||
18
jour
02.12.13
✎
13:47
|
(16) да
|
|||
19
Wobland
02.12.13
✎
13:48
|
а что такое неразрывный пробел?
|
|||
20
Maxus43
02.12.13
✎
13:48
|
Текст ошибки нам озвучат? или так и будем гадать?
|
|||
21
Wobland
02.12.13
✎
13:50
|
(20) -> (5)
|
|||
22
МихаилМ
02.12.13
✎
13:50
|
(0)
откройте для себя ПодробноеПредставлениеОшибки() |
|||
23
Maxus43
02.12.13
✎
13:51
|
(21) это потому что (12), непровославное сообщить в исключении)
|
|||
24
kiruha
02.12.13
✎
13:56
|
(14)
Попробуй тот же код в общем модуле а не обработке |
|||
25
jour
02.12.13
✎
13:57
|
(22) Спасибо.
{Форма.Форма.Форма(54)}: Ошибка при вызове метода контекста (Open) Connection.Open(СокрЛП(ConnectionString)); по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application |
|||
26
Wobland
02.12.13
✎
13:57
|
алилуйя!
|
|||
27
kiruha
02.12.13
✎
13:59
|
64 бит драйвер
|
|||
28
jour
02.12.13
✎
14:00
|
и чеж блин делать...
|
|||
29
AlexASNT
02.12.13
✎
14:01
|
(22)
У тебя windows 7? Если да то там драйвер OLE другой. |
|||
30
МихаилМ
02.12.13
✎
14:06
|
(25)
тот драйвер, что я Вам прислал, работал в 64 бит. установил Ваш: и действительно - перестал работать в 64 битах. |
|||
31
jour
02.12.13
✎
14:14
|
(30) т.е. извращаться с драйверами надо.., ясно, спс
|
|||
32
jour
02.12.13
✎
14:15
|
Но вот почему в файл серверном варианте все работает.....
|
|||
33
AlexASNT
02.12.13
✎
14:16
|
(32)
ОС какая используется в файл серверном варианте? |
|||
34
jour
02.12.13
✎
14:18
|
(33) Семерка, на сервере 2008р2
|
|||
35
jour
02.12.13
✎
14:20
|
(33) Локалка кстати тоже 64х
|
|||
36
МихаилМ
02.12.13
✎
14:21
|
(32)
потому, что клинт 1с8 - 32 битный |
|||
37
AlexASNT
02.12.13
✎
14:31
|
Странно, может на локальной машине какой патч для ODBC 32 каким то боком установлен.
|
|||
38
AlexASNT
02.12.13
✎
14:31
|
точнее сам ODBC 32
|
|||
39
jour
02.12.13
✎
14:52
|
(37) на сервере точно также в файл серверном варианте нормально работает, а в клиент серверном нет, т.е. ось тут не играет значения
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |