Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/32: Рейтинг темы: голосов - 32, средняя оценка - 4.50
176 / 15 / 2
Регистрация: 27.09.2012
Сообщений: 45
1
1C 7.x

Выполнение запросов из VBA

18.10.2012, 18:35. Показов 6236. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый!

Есть база 1Сv77 (в dbs). Пытаюсь настроиться на неё чтобы вытягивать из неё некотурую информацию... к примеру формировать журнал-ордер счета по субконто и всё это через VBA.

есть такой код - который создаёт экземпляр программы с прохождением в ней аутентификации:

Visual Basic
1
2
3
4
5
6
7
Public v7 As Object
 
Sub ConnectV77()
st = " /D" & """C:\Documents and Settings\financier\Мои документы\Копия базы\""" & " /N " & """Ильченко_АВ""" & " /P" & """334455"""
Set v7 = CreateObject("v77.Application")
result = v7.Initialize(v7.RMTrade, st, "yes_SPLASH_SHOW")
End Sub
Понимаю что дальше нужно создавать объект настройки с описанием критериев к формированию документов, получить ответ на сформированный запрос, и чудом вытянуть его туда куда необходимио и как необходимо... Прошу от знатаков хотябы пример формирования запроса через VBA, чтобы понять хотябы принципы его формирования...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2012, 18:35
Ответы с готовыми решениями:

Запуск нескольких запросов на обновление кодом VBA (часть запросов пустые т.е. без отобранных записей)
Форумчане, доброго времени суток! Прошу Вашей помощи! есть таблица со списком Заказчиков. Этот...

Выполнение запросов
Добрый Всем день. В кнопке есть шесть запросов-два на печать и 4 на добавление.Если уменьшить...

Выполнение запросов в MySQL
static MySqlCommand ConnectToMySQL(string MySQL_host, string MySQL_uid, string MySQL_pw) {...

Очередь запросов и их выполнение
Привет, есть метод вида void task(int number), и к нему делаются асинхронные запросы, но из-за свой...

21
900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
18.10.2012, 20:01 2
Цитата Сообщение от Miduza Посмотреть сообщение
формировать журнал-ордер счета по субконто
Возьмите код этого отчета, и перед всеми обращениями к объектам 1С ставьте v7.
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
18.10.2012, 22:06 3
sklads=v7.CreateObject("Справочник.МестаХранения")
sklads.НайтиПоНаименованию("Основной",0,0)
sklad=sklads.ТекущийЭлемент()
Вообще, говорят, иногда проблемы с кириллической транскрипцией
1
176 / 15 / 2
Регистрация: 27.09.2012
Сообщений: 45
19.10.2012, 20:06  [ТС] 4
Итак вот что пока работает...со справочников выгрузка идёт вродебы нормально..но только со справочников

Visual Basic
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
Public v7 As Object
 
Sub ConnectV77()
Dim i
i = 1
 
st = " /D" & """E:\Мои документы\1C7\Empty\""" & " /N " & """Иванов_ИИ""" & " /P" & """334455"""
Set v7 = CreateObject("v77.Application")
result = v7.Initialize(v7.RMTrade, st, "yes_SPLASH_SHOW")
 
If Not result Then Exit Sub
 
 
    Set spr = v7.CreateObject("Справочник.Контрагенты")
    spr.SelectItems
    
        Do While spr.GetItem() = 1
            sname = "" & spr.GetAttrib("ПолнНаименование")
            sname1 = "" & spr.GetAttrib("ЮридическийАдрес")
            
        ThisWorkbook.ActiveSheet.Range("A" & i).Value = sname
        ThisWorkbook.ActiveSheet.Range("B" & i).Value = sname1
        
        i = i + 1
        Loop
 
End Sub
Добавлено через 9 минут
Не выходит выполнить формирование даокумента с указанием параметров
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
19.10.2012, 20:50 5
? Не передаётся объект в качестве параметра? Бэйсик указатели не может передавать?
0
176 / 15 / 2
Регистрация: 27.09.2012
Сообщений: 45
19.10.2012, 21:48  [ТС] 6
В подобном амплуа я выступаю впервые и в 1С ранее не программировал, поэтому с объектной моделью как программер мало знаком...

пытаюсь к примеру создать "ЖурналОрдерСчетаПоСубконто"
просто так он не создаётся.. прописывая его как "Отчеты.ЖурналОрдерСчетаПоСубконто"
так же фэйл...
Вы можете подсказать к примеру создание данного объекта и передача ему к примеру параметра просто счёта...

Добавлено через 36 минут
Накопал такой вариант...пытаюсь его оформить

Set Rez = v7.EvalExpr("ОткрытьФормуМодально(""Отчет.ЖурналОрдерСчетаПоСубконто"",C)")
Rez.C.дата1 = "01.03.03"
Rez.C.дата2 = "01.05.03"
Rez.C.форма.Обновить (1)


В таком подходе хоть малость разумного зерна вообще имеется?
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
20.10.2012, 00:48 7
я не усмотрел зерна... А что,
Visual Basic
1
v7.ОткрытьФормуМодально("Отчет.ЖурналОрдерСчетаПоСубконто")
не катит? В 77 форму как объект не получить. В неё как-то впихиваются параметры, но пока я не помню как

Добавлено через 3 минуты
Есть АнализСчетаПоСубконто, ЖурналОрдерПоСубконто

Добавлено через 2 минуты
В типовом отчете глобальная переменная используется
1C
1
глРасшифровка
. Сомневаюсь, что
Visual Basic
1
v7.глРасшифровка
это нормально
0
176 / 15 / 2
Регистрация: 27.09.2012
Сообщений: 45
20.10.2012, 11:45  [ТС] 8
Цитата Сообщение от duk337 Посмотреть сообщение
не катит?
Не катит. форма открывается... но с параметрами по умолчанию...пока обстрагируюсь от передачи параметров при отборе и нажимаю на кнопку сформировать... что с результатом - совершенно не ясно, есть он? нет его? + ругается на typemismach

Добавлено через 13 минут
4-е сутки с учебником 1С.
есть такое как
1C
1
Расшифровка = СоздатьОбъект("СписокЗначений");
.
Вот очередная сумашедшая догадка, возможноли в 1с создавать таблицу, заполнять её любымы значениями из базы (не через форму), а потом как например при работе со справочниками (выше) просто перебирая строки вытягивать их куда нужно?

Я понимаю что при формировании документа через "Отчёт", программа сперва заполняет что-то подобное, а потом обрабатывает в печатную форму...
0
900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
20.10.2012, 12:59 9
А я не понял, Вам отчет нужно пользователю показать или просто получить данные отчета?

возможноли в 1с создавать таблицу, заполнять её любымы значениями из базы (не через форму), а потом как например при работе со справочниками (выше) просто перебирая строки вытягивать их куда нужно?
Да возможно.
0
176 / 15 / 2
Регистрация: 27.09.2012
Сообщений: 45
20.10.2012, 13:51  [ТС] 10
Цитата Сообщение от Fenomen Посмотреть сообщение
Да возможно.
Мне нужны данные...далее я с ними работаю уже в экселе. Основная и конечная задача - получение исходных данных для уже настроенных отчётов в Excel, так называемые - формы управленческой отчётности
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
20.10.2012, 13:54 11
Используйте объект 77 БухИтоги
0
176 / 15 / 2
Регистрация: 27.09.2012
Сообщений: 45
20.10.2012, 14:32  [ТС] 12
Цитата Сообщение от duk337 Посмотреть сообщение
Используйте объект 77 БухИтоги
Уже попробовал..

Visual Basic
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
Public v7 As Object
 
Sub ConnectV77_2()
Dim FДата As String
Dim FСчёт As String
 
 
FДата = ThisWorkbook.ActiveSheet.Range("C1").Value
FСчёт = ThisWorkbook.ActiveSheet.Range("C2").Value
 
Dim i
i = 4
 
st = " /D" & """C:\Documents and Settings\financier\Мои документы\Копия базы\""" & " /N " & """Ильченко_АВ""" & " /P" & """240987"""
Set v7 = CreateObject("v77.Application")
result = v7.Initialize(v7.RMTrade, st, "yes_SPLASH_SHOW")
 
 
If Not result Then Exit Sub
 
    Set it = v7.CreateObject("БухгалтерскиеИтоги")
    Set SubkontoKind = v7.ВидыСубконто.ЖивотныеПтица
    it.ИспользоватьСубконто SubkontoKind, Empty, 1
    result = it.ВыполнитьЗапрос(Empty, CDate(FДата), FСчёт)
    it.ВыбратьСубконто SubkontoKind
    Do While it.ПолучитьСубконто(SubkontoKind) = 1
        Debug.Print it.Субконто(SubkontoKind).Наименование
        
        sname = it.Субконто(SubkontoKind).Наименование
        ThisWorkbook.Sheets("БухИтоги").Range("A" & i).Value = Trim(sname)
        i = i + 1
    Loop
Set v7 = Nothing
End Sub
Но скорее всего мне бы хотелось добиться вот такого результата как в приложеном файле, однако исключительно средствами VBA.
Вложения
Тип файла: zip Выгрузка проводок.zip (16.9 Кб, 7 просмотров)
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
20.10.2012, 20:10 13
PureBasic
1
2
Опер = v7.СоздатьОбъект("Операция");
Опер.ВыбратьОперацииСПроводками(Дата1, Дата2, Фильтр, Валюта, ПланСчетов, РазделительУчета);
1
176 / 15 / 2
Регистрация: 27.09.2012
Сообщений: 45
20.10.2012, 22:26  [ТС] 14
Пробую наладить предложенный вариант,


Visual Basic
1
2
3
4
Опер = v7.CreateObject("Операция")
    Фильтр = "20,*"
    Валюта = "?(ПоВалюте=1,Валюта,"")"
    result = Опер.ВыбратьОперацииСПроводками(CDate(Дата1), CDate(Дата2), Фильтр, Валюта, ПланСчетов, РазделительУчета)
VBA ругается.. уверен что нужно задать значения для параметров и уверен что туплю на ровном месте....
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
20.10.2012, 22:53 15
1. SelectOpersAndEntries (<?>,,,,,) - может, кириллица.
2. но скорее параметры. дата: v7.Дата(CDate(Дата1)) - или что-то подобное.
3. передавать прямым значением. Валюта - д.б. объект 77 типа в7.справочник.Валюты.ТекущийЭлемент() или пропустить.
план счетов пропустить.
Разделитель учета - по конфигурации. справочник.фирмы. или пропустить
0
176 / 15 / 2
Регистрация: 27.09.2012
Сообщений: 45
21.10.2012, 00:30  [ТС] 16
Visual Basic
1
result = Опер.ВыбратьОперацииСПроводками(ДатаНач, ДатаКон, "*", "20")
Неудача

Visual Basic
1
result = Опер.SelectOpersAndEntries (ДатаНач, ДатаКон, "*", "20")
Поражение

Visual Basic
1
Опер.SelectOpersAndEntries ДатаНач, ДатаКон, "*", "20"
Отчаяние

перепробовал кучу вариантов... пока безутешно
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
21.10.2012, 00:53 17
что есть ДатаНач и датаКон? Это д.б. типы 1с77.
параметры все необязательные.
ещё попробовать отщёлкать их запятыми без значений, в т.ч. и без дат.
Опер - это объект 77, так? Метод его модифицирует, и возвращает да/нет в виде 1/0

Добавлено через 8 минут
транскрипции дат в 77:
' . . '; - (VB не сожрёт, наверное? хз...)
v7.Date(2012,01,01);

Добавлено через 56 секунд
т.е.
1C
1
'01.01.2012'
;
1
176 / 15 / 2
Регистрация: 27.09.2012
Сообщений: 45
21.10.2012, 00:56  [ТС] 18
Всё так..
Visual Basic
1
result = it.ВыполнитьЗапрос(Empty, CDate(FДата), FСчёт)
тут он даты скушал. их задаю как ссылку на значение ячейки в листе книги используя функцию CDate
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
21.10.2012, 01:00 19
Скушал как значащие, но пустые? Это отсутствие проводок
0
176 / 15 / 2
Регистрация: 27.09.2012
Сообщений: 45
21.10.2012, 01:22  [ТС] 20
отнюнь...меняю даты и вуаля..так что там он их воспринял...почему же тут не хочет?

Добавлено через 19 минут
Вот живой код.. тут даты работают... не уверен что дело в них..

Visual Basic
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
Public v7 As Object
 
Sub ConnectV77_2()
Dim FДата As String
Dim FСчёт As String
 
FДата = "01.01.2012"
FСчёт = "01.02.2012"
 
Dim i
i = 4
 
st = " /D" & """E:\Мои документы\1C7\Empty\""" & " /N " & """Ильченко_АВ""" & " /P" & """334455"""
Set v7 = CreateObject("v77.Application")
result = v7.Initialize(v7.RMTrade, st, "yes_SPLASH_SHOW")
 
If Not result Then Exit Sub
 
    Set it = v7.CreateObject("БухгалтерскиеИтоги")
    Set SubkontoKind = v7.ВидыСубконто.ЖивотныеПтица
    it.ИспользоватьСубконто SubkontoKind, Empty, 1
    
    result = it.ВыполнитьЗапрос(Empty, CDate(FДата), FСчёт)
    it.ВыбратьСубконто SubkontoKind
    
    Do While it.ПолучитьСубконто(SubkontoKind) = 1
        Debug.Print it.субконто(SubkontoKind).наименование
              
        sname = it.субконто(SubkontoKind).наименование
        ThisWorkbook.ActiveSheet.Range("A" & i).Value = Trim(sname)
        i = i + 1
    Loop
Set v7 = Nothing
End Sub
0
21.10.2012, 01:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2012, 01:22
Помогаю со студенческими работами здесь

Медленное выполнение запросов
Имеется следующая ситуация: VB-приложение обращается через DAO к БД Access на сетевом диске....

Выполнение параметрических запросов
доброго времени суток всем)) вот столкнулся с непонятной проблемой при выполнении ...

Выполнение запросов к SQLite
Возник такой вопрос, меня очень беспокоит то, что я пока не нашел на него однозначного ответа....

Последовательное выполнение запросов
Доброго времени суток! Имеется действие, добавляющее комментарий в БД и вызываемое клиентами с...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru