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

SQL запрос из 1с

25.04.2013, 13:56. Показов 5515. Ответов 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,701
Записей в блоге: 1
25.04.2013, 14:22
А если явно указать тип в запросе?
1
858 / 657 / 112
Регистрация: 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 / 112
Регистрация: 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
Ответ Создать тему
Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru