Re: Область управления "Выполнить"

Надо мне создать отчётик с закладки "План изготовления" индивидуальный для каждого серийного номера изделия.

Написал модуль в Access для того чтобы он убирал лишние серийные номера и всёчто с ними связано.

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

При отладке с помощью макроса  start первый раз ерунда выходит, но если запустить его ещё раз ПОЛУЧАЕТСЯ СЧАСТЬЕ!!!

Что с этим можно сделать? Присоветуйте.

Re: Область управления "Выполнить"

А не слишком ли сложным путем вы пошли?
Гораздо проще в качестве источника данных взять (написать) такой SELECT, который фильтрует ваш план по серийному номеру.

Re: Область управления "Выполнить"

Ну а если очень хочется методом удаления, то сделать это надо в процедуре Implement.

Re: Область управления "Выполнить"

Максим К. писал(а):
В итоге при печати оказывается, что сперва заполняются заголовочные реквизиты а потом работает мой модуль, и у меня в реквизитах фигня всякая.

Так не должно быть, либо что-то не так делаешь либо моя ошибка. Пришли посмотреть отчет https://forum.technologics.ru/viewtopic.php?id=310

Re: Область управления "Выполнить"

А не слишком ли сложным путем вы пошли?


Дык если б я заранее знал для какого серийника печатать проблем бы не было. Я ведь сперва его спрашиваю (в модуле), а они (серийники) каждый день новые появляются! О как.

Так не должно быть, либо что-то не так делаешь либо моя ошибка. Пришли посмотреть отчет


ОК! Я только с Implement побалуюсь малость и вышлю.

Re: Область управления "Выполнить"

Уважаемые господа-товарищи! Большая просьба уважать наше время! По данной ссылке https://forum.technologics.ru/viewtopic.php?id=310 написано по пунктам что нужно нам чтобы в короткий срок разобраться с вашей проблемой. Если вы не следуете указанным пунктам, то на разбор ошибки у нас уходить больше времени, а время - ... ну вы сами понимаете.

Re: Область управления "Выполнить"

Максим К. писал(а):
Надо мне создать отчётик с закладки "План изготовления" индивидуальный для каждого серийного номера изделия.

Написал модуль в Access для того чтобы он убирал лишние серийные номера и всёчто с ними связано.

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

При отладке с помощью макроса  start первый раз ерунда выходит, но если запустить его ещё раз ПОЛУЧАЕТСЯ СЧАСТЬЕ!!!

Что с этим можно сделать? Присоветуйте.

Почему это происходит порассуждаем позже, сейчас отвечу чего делать. Замени свои следующие аксесовские процедуры:

Public Sub Form_Open(Cancel As Integer)
'
    Dim strSQL As String
    strSQL = "Select Distinct RptSheet0.P7 From RptSheet0"
    Dim rst As DAO.Recordset
    Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot, dbReadOnly)
    If rst.RecordCount > 0 Then
        Do Until rst.EOF
            Form_IND_N.ПолеСоСписком59.AddItem (rst.Fields(0).Value)
            rst.MoveNext
        Loop
    End If

End Sub

Public Sub Кнопка61_Click()
    With Form_IND_N
    .ПолеСоСписком59.SetFocus
          If .ПолеСоСписком59.Text = "" Then
            MsgBox ("Нет серийного номера")
            Else
                Dim qd As QueryDef
                Set qd = CurrentDb.CreateQueryDef("")
                qd.SQL = "delete from RptSheet0 where P7 <> '" + .ПолеСоСписком59.Text + "'"
                qd.Execute
          End If
            DoCmd.Close acForm, "IND_N"
        End With
     
End Sub

на такие:

Public Sub Form_Open(Cancel As Integer)
    Dim rst As Object
    Dim strSQL As String
    
    strSQL = "Select Distinct RptSheet0.P7 From RptSheet0"
    
    Set rst = CreateObject("ADODB.Recordset")
    rst.Open strSQL, Application.CurrentProject.Connection, adOpenKeyset
    
    If rst.RecordCount > 0 Then
        Do Until rst.EOF
            Form_IND_N.ПолеСоСписком59.AddItem (rst.Fields(0).Value)
            rst.MoveNext
        Loop
    End If
End Sub

Public Sub Кнопка61_Click()
    With Form_IND_N
    .ПолеСоСписком59.SetFocus
          If .ПолеСоСписком59.Text = "" Then
            MsgBox ("Нет серийного номера")
            Else
                Application.CurrentProject.Connection.Execute "delete from RptSheet0 where P7 <> '" + .ПолеСоСписком59.Text + "'"
          End If
            DoCmd.Close acForm, "IND_N"
        End With
End Sub

Re: Область управления "Выполнить"

Порассуждаем о причинах происходящего. У нас в форуме присутствует много жалоб на то, что в какой-то момент времени перестают формироваться отчеты и выдается ошибка типа "access violation at address 00494AF5 in module 'CSDNMain.bpl'. Read of addres 0000000", что лечится только переустановкой системы. Мы долго время не могли понять из-за чего это происходит, а так же не могли сами выйти на подобную ошибку. В итоге все-таки вышли и надеемся что поняли что происходит. При выгрузке данных в Access мы используем микрософтовскую библиотеку ADO, и так случилось что часть вызовов было к их же старой библиотеке DAO, которую Микрософт уже не развивает. И вот когда ставишь некую прогу типа корела, то она по своему разумению обновляет библиотеки и в том числе ADO, а у DAO при этом рвет крышу и это DAO перестает адекватно реагировать на вызова. Как от этого лечиться, кроме как переустановить систему, мы не знаем (мож кто подскажет). В итоге мы переписали часть своего кода и избавились от вызова функционала DAO, после чего данная ситуация не стала проявляться. Реализовано это в версии которая вскоре выйдет.

Исходя из вышеизложенного полагал бы считать невозможным в своих процедурах использовать вызовы к DAO.