Форум программистов, компьютерный форум, киберфорум
Наши страницы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Виктория1992
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
1

Соединить результат хранимой процедуры из ms sql и запрос из 1С

19.07.2018, 13:24. Просмотров 1000. Ответов 16
Метки нет (Все метки)

Добрый день, подскажите пожалуйста как соединить результат выполнения хранимой процедуры из ms sql с запросом из 1С.
Имеется хранимая процедуры которая считает количество произведенной продукции по различным линиям оборудования.
И запрос из 1С о простоях линий оборудования.
Необходимо как-то соединить эти два результата , для выполнения математических расчетов и вывода их в табличную часть.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2018, 13:24
Ответы с готовыми решениями:

Результат хранимой процедуры
Есть хранимая процедура на SQL Server, которая принимает два параметра - логин и пароль. и если...

Присвоить результат хранимой процедуры
Добрый день, зада состоит в следующем нужно присвоить таблице результат хранимой процедуры но так...

Возвращаю результат хранимой процедуры и.....
Возвращаю результат хранимой процедуры. В хранимой проге делаю select из временной таблицы и...

Вывести результат хранимой процедуры в DataGridView
Почитал несколько сайтов, но, видимо, я совсем пенек и не понял, как же всё таки в DataGridView...

Как отобразить результат хранимой процедуры на странице?
У меня есть хранимая процедура, которая вытаскивает данные из БД. Вот так я ее вызываю: ...

16
_ЕГОР_
Тест
Эксперт 1С
378 / 160 / 55
Регистрация: 26.02.2010
Сообщений: 1,206
19.07.2018, 13:52 2
циклом перенести данные из одной таблицы в другую
0
Виктория1992
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
19.07.2018, 14:07  [ТС] 3
_ЕГОР_,вот вывожу данные в табличную часть, можешь подсказать как дальше сделать?
1C
1
2
3
4
5
6
7
8
9
10
    
    Пока ADORecordSet.EOF = Ложь Цикл       
        лкСтр=ТабЧ.Добавить(); 
        лкСтр.марка=ADORecordSet.Fields(ADORecordSet.Fields.Item(0).Name).Value;
        лкСтр.диаметр=ADORecordSet.Fields(ADORecordSet.Fields.Item(1).Name).Value;
        лкСтр.длина=ADORecordSet.Fields(ADORecordSet.Fields.Item(2).Name).Value;
        лкСтр.Соединение=ADORecordSet.Fields(ADORecordSet.Fields.Item(3).Name).Value;
        лкСтр.Номенклатура=ADORecordSet.Fields(ADORecordSet.Fields.Item(4).Name).Value;
    ADORecordSet.MoveNext();
    КонецЦикла;
а то я вообще не соображу как это реализовать
0
Yulunga
475 / 342 / 86
Регистрация: 22.04.2013
Сообщений: 2,309
Записей в блоге: 1
Завершенные тесты: 1
19.07.2018, 14:11 4
ну так есть ТЧ - значит её можно записать в какой-то документ, к примеру, "колич произведённой продукции по ..."
ну а потом соединять с тем запросом из 1С, который уже есть
0
19.07.2018, 14:11
_ЕГОР_
Тест
Эксперт 1С
378 / 160 / 55
Регистрация: 26.02.2010
Сообщений: 1,206
19.07.2018, 14:18 5
Виктория1992, после того как заполните ТабЧ, а в ту тз где лежит результат запроса 1с добавляете данные из ТабЧ, типа:
1C
1
2
3
4
5
6
7
Для каждого стр из ТабЧ цикл
нс = результат1с.добавить();
нс.МоеНазваниеКолонки = стр.марка;
//и так далее для всех полей. если название колонок одинаковое и тип одинаковый то можете так:
//ЗаполнитьЗначенияСвойств(нс, стр);
 
конеццикла
0
Виктория1992
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
19.07.2018, 14:25  [ТС] 6
Yulunga, а как из этого документа потом соеденить запрос из 1с? и какой документ использовать ? временный?

Добавлено через 2 минуты
а примера нет никакого случайно?

Добавлено через 36 секунд
_ЕГОР_, а если мне нужно их соеденить по определенному полю?
0
_ЕГОР_
Тест
Эксперт 1С
378 / 160 / 55
Регистрация: 26.02.2010
Сообщений: 1,206
19.07.2018, 14:27 7
Виктория1992, вам одну таблицу в другую перенести нужно или что? я не совсем понимаю
0
Виктория1992
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
19.07.2018, 14:32  [ТС] 8
_ЕГОР_, Есть таблица А(с результатом выполнения процедуры ms sqL) , которая содержит количество выпущенной продукции по линиям ( линия№1,линия№2,линия№3 и т.д) и есть Таблица Б с запрос из 1с , который возвращает количество часов простоя линий (линия№1 - 80ч , линия№2- 90ч и т.д) , нужно соединить эти два результата в табличную часть, где будет выведена итоговая информация.
0
_ЕГОР_
Тест
Эксперт 1С
378 / 160 / 55
Регистрация: 26.02.2010
Сообщений: 1,206
19.07.2018, 14:35 9
а есть какое то сопоставление линий где либо?
0
Yulunga
475 / 342 / 86
Регистрация: 22.04.2013
Сообщений: 2,309
Записей в блоге: 1
Завершенные тесты: 1
19.07.2018, 14:41 10
Цитата Сообщение от Виктория1992 Посмотреть сообщение
вот вывожу данные в табличную часть
отлично
вопрос где решаем ? в 1с ?
так как вопрос на нашем форуме, то считаю что да и отвечаю как думаю :
создаём внешний отчёт/обработку
там получаем твои данные, итого
есть таблица А
есть таблица Б

создаём запрос в 1с , где берём соединяем так, как надо, выводим то, что надо,
в ТЧ нашего внешнего отчёта. смотрим.

или как обычно я ничего не понял
0
Виктория1992
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
19.07.2018, 14:54  [ТС] 11
_ЕГОР_, конкретно сейчас нету. я просто понять не могу как мне эти два запроса в одну кучу свалить и уже там я сопоставлю их по ключам
0
_ЕГОР_
Тест
Эксперт 1С
378 / 160 / 55
Регистрация: 26.02.2010
Сообщений: 1,206
19.07.2018, 14:56 12
Ну тогда по циклу который я описал выше, только сначала ищите строку с нужной линейкой и берете эту строку, вместо добавления новой
0
Виктория1992
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
19.07.2018, 14:57  [ТС] 13
Yulunga, все так.
как мне выгрузить результат из процедуры ms sql в таблицу , из которой я потом смогу запросом выдернуть данные ? нужно как-то создать временную таблицу ? или как это сделать?
0
_ЕГОР_
Тест
Эксперт 1С
378 / 160 / 55
Регистрация: 26.02.2010
Сообщений: 1,206
19.07.2018, 15:06 14
Допустим наша таблица из 1с состоит из колонок Линейка, ВремяПростоя и КолВо. После того как все таблицы заполнены пишем типа такого
1C
1
2
3
4
5
6
7
8
9
Для каждого стр из ТабЧ цикл
Отбор = Новый структура;
Отбор.Вставить("Линейка", Справочники.МойСправочникСЛинейками.НайтиПонаименованию(стр.марка)); // я так понял марка это линейка, если нет то вместо марки нужно поставить колонка где лежит 
 
НайденаяСтрока = результат1с.найтистроки(Отбор); // если найдет линейку в таблице то вернет найденные строки
 
//предположим что все хорошо совпало и нашлось
НайденаяСтрока[0].КолВо = стр.ВремяПростоя; 
конеццикла
1
Yulunga
475 / 342 / 86
Регистрация: 22.04.2013
Сообщений: 2,309
Записей в блоге: 1
Завершенные тесты: 1
19.07.2018, 15:07 15
1C
1
тз = новая таблицазначений;
а в запросе её как параметр указываете
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |   блаблабла
        |ИЗ
        |   блаблабла
        |ГДЕ
        |   Сотрудники.ФизическоеЛицо = &ФизическоеЛицо";
        
        Запрос.УстановитьПараметр("ФизическоеЛицо", ФизЛицо);
        
        РезультатЗапроса = Запрос.Выполнить();   
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();   
        Если ВыборкаДетальныеЗаписи.Следующий() Тогда
1
Dethmontt
Модератор
Эксперт 1С
2741 / 2498 / 443
Регистрация: 10.03.2011
Сообщений: 9,104
Записей в блоге: 1
Завершенные тесты: 1
19.07.2018, 20:14 16
Лучший ответ Сообщение было отмечено Виктория1992 как решение

Решение

Цитата Сообщение от Виктория1992 Посмотреть сообщение
нужно как-то создать временную таблицу ?
ВЕРНО!

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Создаешь временную таблицу (типизированную)
ВременнаяТаблица = Новый ТаблицаЗначений;
ВременнаяТаблица.Колонки.Добавить("марка", Новый ОписаниеТипов("Строка"));
ВременнаяТаблица.Колонки.Добавить("диаметр", Новый ОписаниеТипов("Число"));
ВременнаяТаблица.Колонки.Добавить("длина", Новый ОписаниеТипов("Число"));
ВременнаяТаблица.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("Строка"));
 
//Заполняешь эту таблицу через рекордсет данными из скульной таблицы
//.........................
 
//Потом передаешь ее в запрос
 
 
 
Запрос = Новый Запрос("ВЫБРАТЬ ТЗ.марка, ТЗ.диаметр, ТЗ.длина, ТЗ.Номенклатура ПОМЕСТИТЬ ВТ_ТЗ ИЗ &ТЗ КАК ТЗ");
Запрос.УстановитьПараметр("ТЗ", ВременнаяТаблица);
//МВТ = Новый МенеджерВременныхТаблиц;
//Запрос.МенеджерВременныхТаблиц = МВТ; //Если нужно ВТ_ТЗ куда-то передать для выполнения другого запроса - там будет доступна ВТ_ТЗ через переменную МВТ
 
//Теперь или же в этом запросе (добавляешь новый пакет запроса) или же через МВТ юзаешь таблицу ВТ_ТЗ в своем запросе
Добавлено через 5 минут
Виктория1992, а лучше почитай про внешние источники
Ссыль
1
Виктория1992
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
20.07.2018, 09:27  [ТС] 17
Dethmontt, Спасибо,именно то что нужно)
0
20.07.2018, 09:27
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2018, 09:27

Как получить результат хранимой процедуры MSSQL?
Делаю так: Set cm=Server.CreateObject("ADODB.Command") Set cm.ActiveConnection = conn ...

Передать результат Select как параметр хранимой процедуры
Есть хранимая процедура usp_GetCostumer в которую необходимо передать два параметра :OperatorID –...

Как результат работы хранимой процедуры вытащить в переменную в Дельфи?
Приветствую. Есть такая проблема, на серваке в MySql висит хранимая процедура CREATE...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.