powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите разобраться с кодом
22 сообщений из 22, страница 1 из 1
Помогите разобраться с кодом
    #39893863
toreh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
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.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
Option Compare Database
Global z As Boolean

Sub Input_files()
Dim strFile As String, strFilter As String

importTable "DZKZ1", "Выберите файл ДЗ+КЗ"
importTable "Avansy1", "Выберите файл Авансы"
importTable "NachOpl1", "Выберите файл Начисления"
importTable "Oplaty", "Выберите файл Оплаты"
importTable "ROplat", "Выберите файл Реестр оплат"

If IsTable1("DZKZ") = True Then
DeleteTable "DZKZ"
End If
CurrentDb.Execute ("SELECT DISTINCT d2.[Номер договора], d1.[Специалист по расчетам], d1.[Наименование потребителя], d1.[Статус договора] , d1.[ДЗ на начало периода] , d1.[КЗ на начало периода], d2.[Номер месяца] INTO DZKZ FROM DZKZ1 AS d1 right join (select DZKZ1.[Номер договора], Min(DZKZ1.[Номер месяца]) AS [Номер месяца] from DZKZ1 GROUP BY DZKZ1.[Номер договора]) d2 on d1.[Номер договора] = d2.[Номер договора] and d1.[Номер месяца] = d2.[Номер месяца]")
DeleteTable "DZKZ1"
If IsTable1("Avansy") = True Then
DeleteTable "Avansy"
End If
CurrentDb.Execute ("SELECT Avansy1.Отделение, IIf(IsNull([Avansy1]![Номер договора]),0,CDbl([Avansy1]![Номер договора])) AS [Номер договора], Avansy1.[Начисление аванса с НДС], Avansy1.[Дата авансирования], Avansy1.[Номер месяца], Avansy1.Год, Avansy1.[Номер месяца1] INTO Avansy FROM Avansy1")
DeleteTable "Avansy1"
If IsTable1("NachOpl") = True Then
DeleteTable "NachOpl"
End If
CurrentDb.Execute ("SELECT NachOpl1.Отделение, IIf(IsNull([NachOpl1]![Номер договора]),0,CDbl([NachOpl1]![Номер договора])) AS [Номер договора], NachOpl1.[Номер месяца], NachOpl1.Год, NachOpl1.[Тип документа], Sum(NachOpl1.[Сфактурировано с НДС]) AS [Сфактурировано с НДС], NachOpl1.[Код вида реализации] INTO NachOpl FROM NachOpl1 GROUP BY NachOpl1.Отделение, IIf(IsNull([NachOpl1]![Номер договора]),0,CDbl([NachOpl1]![Номер договора])), NachOpl1.[Номер месяца], NachOpl1.Год, NachOpl1.[Тип документа], NachOpl1.[Код вида реализации];")
DeleteTable "NachOpl1"
End Sub
Sub make_mon()
Dim bd As Database
Dim dog As String
Dim m1, m2 As Double
Dim i As Integer
Dim avansy, main, nach As Recordset
Set bd = CurrentDb
CurrentDb.Execute ("delete * from Мониторинг")
CurrentDb.Execute ("INSERT INTO Мониторинг ( [№ договора], Наименование, [КЗ Начало], [ДЗ Начало], [Специалист по расчетам], [Статус договора]) SELECT DZKZ.[Номер договора], DZKZ.[Наименование потребителя], DZKZ.[КЗ на начало периода], DZKZ.[ДЗ на начало периода], DZKZ.[Специалист по расчетам], DZKZ.[Статус договора] FROM DZKZ ORDER BY DZKZ.[Номер договора];")
Set avansy = bd.OpenRecordset("Avansy")
Do Until avansy.EOF
If avansy![Номер месяца] = 12 Then
avansy.Edit
avansy![Номер месяца] = 0
avansy.Update
End If
If avansy![Номер месяца] = 11 Then
avansy.Edit
avansy![Номер месяца] = -1
avansy.Update
End If
avansy.MoveNext
Loop
z = Form_Запуск.Флажок6.Value
If IsTable1("oplatyZ") = True Then
DeleteTable "oplatyZ"
End If
If IsTable1("ROplatZ") = True Then
DeleteTable "ROplatZ"
End If

If z = True Then
CurrentDb.Execute ("SELECT Oplaty.Год, Oplaty.[Номер месяца], CDbl([Oplaty]![Номер договора]) AS Договор, Oplaty.[Всего оплаты] INTO OplatyZ FROM Oplaty where Oplaty.[Номер месяца]<month(date()) ;")
CurrentDb.Execute ("SELECT CDbl(ROplat.Договор) AS Договор, Month([ROplat]![Датаоплаты]) AS Месяц, Sum(ROplat.Суммаоплаты) AS [Oplata] INTO ROplatZ FROM ROplat GROUP BY ROplat.Договор, Month([ROplat]![Датаоплаты]) HAVING (((Month([ROplat]![Датаоплаты]))>=Month(Date())));")
Else
CurrentDb.Execute ("SELECT Oplaty.Год, Oplaty.[Номер месяца], CDbl([Oplaty]![Номер договора]) AS Договор, Oplaty.[Всего оплаты] INTO OplatyZ FROM Oplaty where Oplaty.[Номер месяца]<month(date())-1 ;")
CurrentDb.Execute ("SELECT CDbl(ROplat.Договор) AS Договор, Month([ROplat]![Датаоплаты]) AS Месяц, Sum(ROplat.Суммаоплаты) AS [Oplata] INTO ROplatZ FROM ROplat GROUP BY ROplat.Договор, Month([ROplat]![Датаоплаты]) HAVING (((Month([ROplat]![Датаоплаты]))>=Month(Date())-1));")
End If
For i = 1 To 12
CurrentDb.Execute ("update Мониторинг inner join Avansy  on Мониторинг.[№ договора] =Avansy.[Номер договора] set Мониторинг.[0" & i & " 40%] = Avansy.[Начисление аванса с НДС] where Avansy.[Номер месяца1]= " & i & " and Avansy.[Номер месяца]= " & i - 1 & " ")
CurrentDb.Execute ("update Мониторинг inner join Avansy  on Мониторинг.[№ договора] =Avansy.[Номер договора] set Мониторинг.[0" & i & " 30%] = Avansy.[Начисление аванса с НДС] where Avansy.[Номер месяца1]= " & i & " and Avansy.[Номер месяца]= " & i - 2 & " ")
CurrentDb.Execute ("update Мониторинг inner join NachOpl  on Мониторинг.[№ договора] =NachOpl.[Номер договора] set Мониторинг.[Счет-фактура 0" & i & "] = NachOpl.[Сфактурировано с НДС] where NachOpl.[Номер месяца]= " & i & " and  NachOpl.[Тип документа]= 'Счет-фактура' and NachOpl.[Сфактурировано с НДС]<>0")
CurrentDb.Execute ("update Мониторинг inner join NachOpl  on Мониторинг.[№ договора] =NachOpl.[Номер договора] set Мониторинг.[Корр СФ 0" & i & "] = NachOpl.[Сфактурировано с НДС] where NachOpl.[Номер месяца]= " & i & " and  NachOpl.[Тип документа]= 'Корректировочный счет-фактура'")
CurrentDb.Execute ("UPDATE Мониторинг inner JOIN OplatyZ ON Мониторинг.[№ договора] = OplatyZ.[Договор] SET Мониторинг.[Оплата 0" & i & "] = OplatyZ.[Всего оплаты] WHERE ((([OplatyZ]![Номер месяца])=" & i & "));")
CurrentDb.Execute ("UPDATE Мониторинг inner JOIN ROplatZ ON Мониторинг.[№ договора] = ROplatZ.[Договор] SET Мониторинг.[Оплата 0" & i & "] = ROplatZ.[Oplata] WHERE ((([ROplatZ]![Месяц])=" & i & "));")
CurrentDb.Execute ("UPDATE Мониторинг set Мониторинг.[Сальдо конец 0" & i & "] = Мониторинг.[Счет-фактура 0" & i & "] - Мониторинг.[Оплата 0" & i & "]")
Next i
End Sub
Sub mon_Output()
If Dir("C:\monitoringOutput", vbDirectory) = "" Then
MkDir "C:\monitoringOutput"
End If
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, "Мониторинг", "C:\monitoringOutput\Мониторинг " & Date & ".xls", True
Shell "explorer.exe " & Path & "C:\monitoringOutput\", vbNormalFocus
End Sub
Sub DeleteTable(tablename As String)
Dim SQLstr As String
SQLstr = "drop table [" & tablename & "];"
DoCmd.RunSQL (SQLstr)
End Sub

Public Function IsTable1(NameTable As String) As Boolean
   On Error GoTo IsTable1_Err
   Dim var
   var = DCount("*", NameTable)
   IsTable1 = True
   Exit Function
IsTable1_Err:
   Select Case Err.Number
      Case 4 ' для таблиц
         IsTable1 = False
      Case Else
        ' MsgBox Err.Number & ' ' & Err.Description
   End Select
End Function
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _
                     Optional ByVal InitialPath As String = "c:\", _
                     Optional ByVal FilterDescription As String = "Книги Excel", _
                     Optional ByVal FilterExtention As String = "*.xls*") As String
    On Error Resume Next
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        If .Show <> -1 Then Exit Function
        GetFilePath = .SelectedItems(1): PS = Application.p
    End With
End Function
Sub importTable(tablename As String, windowstring As String)
Dim strFile As String, strFilter As String
MsgBox windowstring
strFilter = "Excel(*.xlsx)|*.xlsx|"
WizHook.Key = 51488399
WizHook.GetFileName 0, "AppName", windowstring, "", strFile, "c:\", strFilter, 0, 0, 0, True
FName = strFile
If IsTable1(tablename) = True Then
DeleteTable tablename
End If
DoCmd.TransferSpreadsheet aclImport, , tablename, FName, True
End Sub


выдает ошибку 3061
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39893877
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toreh, идём по ссылке и читаем сначала Формирование строки SQL-запроса в VBA
потом Как запускать запросы из VBA

ЗЫ. Нужно пользоваться тэгами форматирования при оформлении вопроса
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39893915
toreh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а можно поподробней носом как говориться тыкнуть а то что то не понимаю)Панург,
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39893955
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toreh, у тебя проблемы с запросами. Я тебе дал две ссылки. В первой ссылке (статье) объяснено как составить правильную строку запроса, заменив ссылки на поля формы их значениями. Во второй ссылке (статье) объясняется как выполнить запрос с параметрами, которые у тебя представлены опять таки ссылками на поля формы
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39893963
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toreh, возможно я не угадал. Портянка длинная и не форматированная... Нажми на кнопку Debug и посмотри конкретное место с проблемой.
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894026
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще лучше так: при совершении действия(например:ввода в поле формы какого-то параметра/или без этого и нажатии кнопки должно произойти следующее.........)
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894362
toreh, если вылетает такая ошибка и не используются запросы со ссылками на поля форм, значит одно из перечисленных в SQL выражении полей отсутствует в таблице или написано неправильно. У вас в основной процедуре нет перехватчика ошибок, поэтому, когда вылетает сообщение - нажмите на Debug и попадете на строчку с ошибкой. Если это выполнение запроса, то скопируйте его текст в конструктор запроса и попробуйте выполнить. Тогда получите более осмысленное сообщение.
Еще по коду:
Код: vbnet
1.
Dim avansy, main, nach As Recordset

Вы в курсе, что здесь тип Recordset только у nach, а остальные - Variant? К тому же надежнее - As DAO. Recordset.
Код: vbnet
1.
Shell "explorer.exe " & Path & "C:\monitoringOutput\", vbNormalFocus

Где объявлена Path и какое в ней значение?

Если вы освоили CurrentDb.Execute, то зачем вам DoCmd.RunSQL? Если RunSQL не задает вопросов, значит у вас отключены сообщения. Так вы случайно можете удалить из БД что-нибудь полезное, и, главное, молча.
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894379
toreh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий, спасибо вам. Я понял что не разобраться просто до меня работал разработчик этого кода. Он ушел пол года назад а буквально пару дней назад перестала работать, ну, я далек видимо пускай тепрь без этого живут)
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894386
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toreh
видимо пускай теперь без этого живут

может обиженный автор оставил мину замедленного действия
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894387
toreh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, да нет он не обиженный был он наоборот на повышение ушел)
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894398
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toreh
а можно поподробней, носом как говориться тыкнуть, а то что то не понимаю)

в первую очередь проверьте в ексельках поля [Номер договора], и [Наименование потребителя] , нет ли в них апострофов
а также проверьте - все ли поля заполнены, нет ли в екселе пустых ячеек , корректны ли даты(может нет дня или месяца, только год)
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894404
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toreh,

просто я не увидела в основном коде обработчика ошибок, только во вспомогательных функциях
если есть старые месяцы - попробуйте выбрать на выполнение их
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894410
toreh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА,
хорошо он ругается на вот эту часть кода
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
CurrentDb.Execute ("update Мониторинг inner join Avansy  on Мониторинг.[№ договора] =Avansy.[Номер договора] set Мониторинг.[0" & i & " 40%] = Avansy.[Начисление аванса с НДС] where Avansy.[Номер месяца1]= " & i & " and Avansy.[Номер месяца]= " & i - 1 & " ")
CurrentDb.Execute ("update Мониторинг inner join Avansy  on Мониторинг.[№ договора] =Avansy.[Номер договора] set Мониторинг.[0" & i & " 30%] = Avansy.[Начисление аванса с НДС] where Avansy.[Номер месяца1]= " & i & " and Avansy.[Номер месяца]= " & i - 2 & " ")
CurrentDb.Execute ("update Мониторинг inner join NachOpl  on Мониторинг.[№ договора] =NachOpl.[Номер договора] set Мониторинг.[Счет-фактура 0" & i & "] = NachOpl.[Сфактурировано с НДС] where NachOpl.[Номер месяца]= " & i & " and  NachOpl.[Тип документа]= 'Счет-фактура' and NachOpl.[Сфактурировано с НДС]<>0")
CurrentDb.Execute ("update Мониторинг inner join NachOpl  on Мониторинг.[№ договора] =NachOpl.[Номер договора] set Мониторинг.[Корр СФ 0" & i & "] = NachOpl.[Сфактурировано с НДС] where NachOpl.[Номер месяца]= " & i & " and  NachOpl.[Тип документа]= 'Корректировочный счет-фактура'")
CurrentDb.Execute ("UPDATE Мониторинг inner JOIN OplatyZ ON Мониторинг.[№ договора] = OplatyZ.[Договор] SET Мониторинг.[Оплата 0" & i & "] = OplatyZ.[Всего оплаты] WHERE ((([OplatyZ]![Номер месяца])=" & i & "));")
CurrentDb.Execute ("UPDATE Мониторинг inner JOIN ROplatZ ON Мониторинг.[№ договора] = ROplatZ.[Договор] SET Мониторинг.[Оплата 0" & i & "] = ROplatZ.[Oplata] WHERE ((([ROplatZ]![Месяц])=" & i & "));")
CurrentDb.Execute ("UPDATE Мониторинг set Мониторинг.[Сальдо конец 0" & i & "] = Мониторинг.[Счет-фактура 0" & i & "] - Мониторинг.[Оплата 0" & i & "]")
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894412
toreh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА,
я понял там видимо проше заново все писать, что то у меня такое чуство)
Спасибо что ответили!
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894415
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toreh
буквально пару дней назад перестала работать

toreh
хорошо он ругается на вот эту часть кода
Код: vbnet
1.
CurrentDb.Execute ("update...


Смотри сюда
Ошибка 3340 после обновления офиса от 12.11.2019
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894426
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toreh
я понял там видимо проше заново все писать, что то у меня такое чуство)
Спасибо что ответили!

это не решения проблемы, хотя новому программисту писать с нуля -легче
но и он уйдет через месяц, другой, год, два..
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894431
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toreh,
Звони разработчику, который ушел на повышение
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894468
toreh, прислушайтесь к совету Панург, это действительно может быть из-за обновления.
Когда справитесь, можете подправить код (для красоты).
У вас есть Set bd = CurrentDb, но дальше везде CurrentDb.Execute, хотя правильнее - bd.Execute.

Код: vbnet
1.
2.
Dim dog As String
Dim m1, m2 As Double

Эти переменные не используются. Кстати, m1 тоже Variant.

И вы не ответили, что это за Path.
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894498
toreh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий,
да вот проблема в том что если цикл измениьть на 1-6 программа отрабатывает
а если цикл менять дальше 7-12 это месяца програма начинает ругаться я могу сбросить полность с данными если интересно посмотреть
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894545
toreh
если цикл измениьть на 1-6 программа отрабатывает
а если цикл менять дальше 7-12 это месяца програма начинает ругаться

Может не 7-12, а 10-12?
Вот у вас есть поле "01 40%" для первого месяца, а для 10-г получается " 0 10 40%"? Или, всё же, "10 40%"? То же и по другим полям.
toreh
я могу сбросить полность с данными если интересно посмотреть

Бросьте. Посмотрим.
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894808
toreh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий,
а куда скинуть там, архив 50метров весит,
получается у меня работает если месяца до 6 после 6 месяца все не работает
уже и не знаю что где менять
...
Рейтинг: 0 / 0
Помогите разобраться с кодом
    #39894809
toreh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий,
вроде разобрался, там в таблицах еще поменял месяца. и отработало
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите разобраться с кодом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]