Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/26: Рейтинг темы: голосов - 26, средняя оценка - 4.96
5 / 5 / 0
Регистрация: 15.04.2010
Сообщений: 130
1C 8.x

SQL запрос из 1с

25.04.2013, 13:56. Показов 5355. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Столкнулся с проблемой на этапе переноса данных из старой программы в 1с. Обработка читает из sql представление куда попадают договора и создает соответствующие договора в 1с. Но вот вылезла проблема. Одна колонка хоть убей не хочет читаться. Вот собственно код
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Если Конект = Ложь Тогда 
        Сообщить("Подключитесь к базе!",СтатусСообщения.Важное);
        Возврат;
    КонецЕсли;
    Попытка
        cmd.CommandText="SELECT     [1C_Dogovor].KodDogovorAxapta
                        |   , [1C_Dogovor].Naimenovan
                        |   , [1C_Dogovor].Valuta
                        |   , [1C_Dogovor].VedenieVzaimoraschetov
                        |   , [1C_Dogovor].VidAgentskogoDogovora
                        |   , [1C_Dogovor].VidVzaimoraschetov
                        |   , [1C_Dogovor].VidDogovora
                        |   , [1C_Dogovor].DataDogovora
                        |   , [1C_Dogovor].Komment
                        |   , [1C_Dogovor].RaschetyVUE
                        |   , [1C_Dogovor].RealizaciyaNaEksport
                        |   , [1C_Dogovor].NomerDogovora
                        |   , [1C_Dogovor].Otvetstv
                        |   , [1C_Dogovor].Raznovidnost
                        |   , [1C_Dogovor].Soglashenie
                        |   , [1C_Dogovor].Status AS St
                        |   , [1C_Dogovor].Kontragent_ID
                        |   , [1C_kontragent].PriceGroup
                        |   FROM    [Export].[dbo].[1C_Dogovor] LEFT OUTER JOIN
                        |                         [Export].[dbo].[1C_kontragent] ON [1C_Dogovor].Kontragent_ID = [1C_kontragent].Kod";
        
        RS=cmd.execute();
    Исключение
        Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
        Возврат;
    КонецПопытки;   
    
        ДоговорыКонтрагентов.Очистить();
        
        Запрос = Новый Запрос("ВЫБРАТЬ
                              | ДоговорыКонтрагентов.Ссылка,
                              | ДоговорыКонтрагентов.ИД
                              |ИЗ
                              | Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов");
        Договоры = Запрос.Выполнить().Выгрузить();
        
        Пока не RS.EOF Цикл       
            
            Стр = ДоговорыКонтрагентов.Добавить();
            Стр.ИД = RS.fields("KodDogovorAxapta").value;
            Стр.Наименование = RS.fields("Naimenovan").value;
            
            Стр.ВалютаВзаиморасчетов = RS.fields("Valuta").value;
            Стр.ВедениеВзаиморасчетов = RS.fields("VedenieVzaimoraschetov").value;
            Стр.ВидАгентскогоДоговора = RS.fields("VidAgentskogoDogovora").value;
            Стр.ВидВзаиморасчетов = RS.fields("VidVzaimoraschetov").value;
            Стр.ВидДоговора = RS.fields("VidDogovora").value;
            Стр.ДатаДоговора = RS.fields("DataDogovora").value;
            Стр.Комментарий = RS.fields("Komment").value;
            Стр.РасчетыВУсловныхЕдиницах = RS.fields("RaschetyVUE").value;
            Стр.РеализацияНаЭкспорт = RS.fields("RealizaciyaNaEksport").value;
            Стр.ЮИ_НомерДоговора = RS.fields("NomerDogovora").value;
            Стр.ЮИ_Ответственный = RS.fields("Otvetstv").value;
            Стр.ЮИ_Разновидность = Справочники.ЮИ_РазновидностиДоговоров.НайтиПоНаименованию(RS.fields("Raznovidnost").value);
            Стр.ЮИ_Соглашение = RS.fields("Soglashenie").value;
 
            ТипЦен = СокрЛП(RS.Fields("PriceGroup").Value); 
            Если ТипЦен = "ФСИ" тогда
                Стр.ТипЦены = Справочники.ТипыЦенНоменклатуры.ФСО;
            ИначеЕсли ТипЦен = "ФСНИ" тогда
                Стр.ТипЦены = Справочники.ТипыЦенНоменклатуры.ЮИ_ЦенаРеализацииЦентровывозаПоМежгороду;
            ИначеЕсли ТипЦен = "ФСНО" тогда 
                Стр.ТипЦены = Справочники.ТипыЦенНоменклатуры.ЮИ_ЦенаРеализацииЦентровывоза;
            ИначеЕсли ТипЦен = "ОО" Тогда
                Стр.ТипЦены = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду(12);
            КонецЕсли;
 
            Статус = RS.Fields("St").Value; 
            Если Статус = "Действует" Тогда
                Стр.ЮИ_Статус = Перечисления.ЮИ_СтатусыДоговоров.Рабочий;
            ИначеЕсли Статус = "Закрыт" Тогда
                Стр.ЮИ_Статус = Перечисления.ЮИ_СтатусыДоговоров.Закрыт;
            ИначеЕсли Статус = "Не оформлен" Тогда
                Стр.ЮИ_Статус = Перечисления.ЮИ_СтатусыДоговоров.НаПодписи;
            КонецЕсли;
            // Шорох М.А. - 24.01.2013 - Конец +++
            Стр.Контрагент_ИД = СокрЛП(RS.fields("Kontragent_ID").value);
            Стр.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИД",Стр.Контрагент_ИД);
            
            Договор = Договоры.Найти(Стр.ИД,"ИД");
            Если Договор <> Неопределено Тогда
                Стр.Договор = Договор.Ссылка;
            КонецЕсли;
     
            RS.MoveNext();
            Если (ЗначениеЗаполнено(Контрагент) и Контрагент <> Стр.Контрагент) или ЗначениеЗаполнено(Стр.Договор) и не ЧитатьВсеДоговора Тогда
                ДоговорыКонтрагентов.Удалить(Стр);
            Иначе
                Состояние("Чтение договора: " + стр.НомерСтроки);
            КонецЕсли;
        КонецЦикла;
        
        ДоговорыКонтрагентов.Сортировать("ИД");
        RS.Close();
Вот код процедуры подключения
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Процедура ПодключитсяКБД() экспорт
    стрПодключения = "Driver={SQL Server};Server=srv_rmkk\mssqlserver2008;Database=Export;Uid=SA;Pwd=***;";
    Connection = Новый COMОбъект("ADODB.Connection");
    //Connection.Provider = "SQLNCLI";
    
    Connection.ConnectionString =  стрПодключения;
    
    попытка
        Connection.Open();
    исключение
        Сообщить ("Проблемы с подключением к SQL: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    
    cmd=  Новый COMОбъект("ADODB.Command");
    cmd.CommandTimeout= 360;        
    cmd.ActiveConnection=Connection;
    RS = Новый COMОбъект("ADODB.Recordset");
    RSUpdate = Новый COMОбъект("ADODB.Command");
    RSUpdate.ActiveConnection=Connection;   
    Конект = истина;
КонецПроцедуры
проблемное поле St оно же Status, тип его в sql - varchar 9, заполненно во всех строках представления
В sql menagement studio этот запрос все вытягивает, и более того в другой обработке с таким же подключением тоже все вытягивает. Если же посмотреть в отладчике RS.Fields("St").Value значение пустое тип "неопределено" , RS.Fields("St").Type = 200 (строка) RS.Fields("St").DefinedSize = 9. не читает только значение.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Процедура ЗаполнитьНажатие(Элемент)
    Если ПодключитьТаблицу(ПолеВводаБаза,ПолеВводаТаблица) Тогда
        Структура = Новый Структура;
        ТабличноеПолеВрем.Колонки.Очистить();
        ТабличноеПолеВрем.Колонки.Добавить("Номер");
        Индекс = 1;
        Пока Не RS.EOF Цикл 
            Для Сч=0 По RS.Fields.Count()-1 Цикл 
                    
                Структура.Вставить(RS.Fields(Сч).Name,RS.Fields(СЧ).Value);
                
            КонецЦикла;   
            ЗаполнитьТаблицуЗначений(Структура,ТабличноеПолеВрем,Индекс);
            RS.MoveNext();
            Индекс = Индекс + 1;
        КонецЦикла;
        ЭлементыФормы.ТабличноеПолеВрем.СоздатьКолонки();
    КонецЕсли;
    Если СтрДлина(ПолеСортировки) > 0 Тогда
        ЭлементыФормы.ТабличноеПолеВрем.Значение.Сортировать(ПолеСортировки);
    КонецЕсли;
КонецПроцедуры
 
Функция ПодключитьТаблицу(База,Таблица, НачалоПериода = Неопределено, ПолеДаты = Неопределено, КонецПериода = Неопределено) экспорт
    Если Конект = Ложь Тогда 
        Сообщить("Подключитесь к базе!",СтатусСообщения.Важное);
        Возврат ложь;
    КонецЕсли;
    Попытка
        cmd.CommandText="select * from ["+База+"].[dbo].["+Таблица+"]";
        Если ПолеДаты <> Неопределено Тогда
            cmd.CommandText = cmd.CommandText + " WHERE " + поледаты + ?(КонецПериода <> Неопределено," >", " = ") +"'" + НачалоПериода + "'" + ?(КонецПериода <> Неопределено," and " + ПолеДаты + " <'" + КонецПериода + "'", "") ;
        КонецЕсли;
        RS=cmd.execute();
    Исключение
        Сообщить("Возможно неверно указана база или таблица: "+ОписаниеОшибки(),СтатусСообщения.Важное);
        Возврат ложь;
    КонецПопытки;   
    
    Возврат истина;
КонецФункции
В чем может быть проблема?
PS кеш чистил.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2013, 13:56
Ответы с готовыми решениями:

Как посмотреть T-SQL запрос который генерирует Entity Framework запрос
как посмотреть T-SQL запрос который генерирует Entity Framework запрос в visual studio 2010, 2012

Запрос Select T-sql - Вложенный запрос вернул больше одного значения
Нужно посчитать комиссию от сделки. DealShare(комиссия) - поле таблицы agents, supplies - предложения(риелторы клиентам) deals-...

Как в sql запрос вставить еще один запрос правильно?
Есть длинный запрос, в котором можете даже не разбираться если не хотите, но выдает он следующее: Запрос: SELECT...

4
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,703
Записей в блоге: 1
25.04.2013, 14:22
А если явно указать тип в запросе?
1
858 / 657 / 111
Регистрация: 01.11.2012
Сообщений: 2,411
25.04.2013, 19:58
Лучший ответ Сообщение было отмечено как решение

Решение

CAST([1C_Dogovor].Status as char[n]) AS St



У меня в запросе так числа преобразовывались в float, а то не хотел 1С 7.7 их понимать.

Добавлено через 5 минут
Если длина n не указана при использовании функций CAST,то по умолчанию равна 30.
3
5 / 5 / 0
Регистрация: 15.04.2010
Сообщений: 130
13.05.2013, 12:08  [ТС]
Увы не помогло, но значение этого поля было везде одинаковым, и смог выкрутиться) но вот глюк перекочевал еще и на поле Kontragent_ID, теперь хз что делать, похоже что это какой-то глюк самой 1с.
0
858 / 657 / 111
Регистрация: 01.11.2012
Сообщений: 2,411
13.05.2013, 12:45
Можно стандартными средствами SQL импортнуть таблицы в другой формат (например в DBF) и тогда 1С точно прочитает через XBase.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.05.2013, 12:45
Помогаю со студенческими работами здесь

SQL запрос, работающий в MS SQL Menegment'e не работает в делфи
Требуется выполнить запрос по нажатию кнопки, запрос сначала написал в Microsoft SQL Managment, где и написал свою БД, там запрос работает,...

SQL запрос по фрагменту строки сохраненной в таблице SQL
Прошу помощи. Есть SQL таблица-1, в ней есть столбец по имени Model_Vagona с типом данных ntext Есть SQL таблица-2, в ней есть столбец...

SQL-запрос в SQL server management studio 2008 (if else)
Здравствуйте! Нужна помощь в правке условия, уже как более 8 часов не могу правильно составить условие... +1 к карме обеспечен. Вычислить...

Не работае запрос в SQL Navigator 6.0 хотя работает в 4 и SQL Plus
Добрый день. Такая вот непонятная проблемка нарисовалась на ровном месте. Установили SQL Navigator 6.0 и запрос: select (CASE WHEN...

SQL запрос на sql server management studio
Доброго времени суток. Имеется две таблицы покупателей man(name,NumberMan) и таблица продажи Sale(SaleNumber,SaleData), они связаны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru