powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как лучше организовать процедуру набора и сохранения накладной?
22 сообщений из 22, страница 1 из 1
Как лучше организовать процедуру набора и сохранения накладной?
    #32603740
Юстас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас складской учет фирмы где я работаю организован на связке Assecc2002+Связанные таблицы (mdb, архитектура файл-сервер). Набор накладных осуществляется в связанную таблицу, находящуюся на локальном компьютере пользователя. При сохранении происходит добавление данных из этой таблицы в базу данных на сервере. База и число пользователей растет и чувствую приближается день когда придется переходить на архитектуру клиент-сервер.

Думаю это будет Acces+MS SQL Server 2000. Может быть знатоки и практики подскажут как лучше организовать процедуру набора и сохрания накладных в этом случае? Буду рад любой помощи.
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32603770
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Думаю это будет Acces+MS SQL Server 2000
Имеется ввиду AccessADP?
А обязательно сначала накапливать а потом вливать?
по простому так вобще ничего не надо
накладная сразу на серверной таблице основывается
и все нормально
ну если так уж получится что два юзера
одну и туже запись исправляют
то спросит сохранят изм или нет

2) точно так же можно работать с временной таблицей
3)точно так-же можно работать с созданным рядом временным
mdb файлом
4)можно поизгалятся с оторванным ADO рекордсетом
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32603848
Юстас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ.

1. Да, это будет AccessADP.

2. Процесс набора выглядит следующим образом. Набивается шапка накладной. Потом начинается набор тела накладной: Артикул, количество. Таких позиций может быть много, но реально вряд ли больше 1000, чаще 10-100). В процессе набора происходит диалог с клиентом и, соответственно, редактирование позиций, их удаление. Процедура набора может занимать около часа (в зависимости от клиента).

>>2) точно так же можно работать с временной таблицей

Это на сервере создать? А она создается для каждого пользователя своя?
Можно немного попобробнее?


>>3)точно так-же можно работать с созданным рядом временным
mdb файлом

Я попробовал его подключить через связывание таблиц - получилось Представление, доступное только для чтения. Что делать?
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32603874
e_basil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mssql + access(mdb)

шапка накладной собирается на клиенте без таблиц - в контролы,
-детальная часть записывается в локальную (mdb) таблицу.
при сохранении шапочная часть отправляется на сервер через хп
- детальная заливается через ado UpdateBatch
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32604034
Юстас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Планирую перейти на использование mssql+Access ADP.

>>шапка накладной собирается на клиенте без таблиц - в контролы

Так и думал. Спасибо.

А вот про
>>-детальная часть записывается в локальную (mdb) таблицу.

можно поподробнее, т.к. при подключении mdb - файла через связывание таблиц - получается Представление, доступное только для чтения
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32604113
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Это на сервере создать? А она создается для каждого пользователя своя?
>Можно немного попобробнее?
у SQL есть временные таблицы таблицы начинаются с # и ##
существуют пока жив создавший их конект
с # видны только создавшему их конекту
в связи с этим у ADP клиента есть определенные проблеммы
(у него два конекта работают соотв для одного из них таблица видна не будет)
с ## видны всем поэтому с ней проще,
но придется обеспечить уникальность имени.
тонкости реализации лучше поискать на форуме по Access

с локальным MDB стоит связыватся только если необходимо
чтобы временная накладная схранялась от сеанса к сеансу

выглядит точно так же как это у тебя из под мдб происходит
только формы в ADP основываеш на руками созданном DAO рекордсете
потом через DAO выполняеш запрос к серверу на слив набора
созданный в этом же MDB-ке
MDB-к можно генерить автоматически
типа не найден то создать
запроса нет то создать

делов немного
Локальный Mdb-к юзается монопольно
так что работает все очень шустро.
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32604151
Юстас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Латук - спасибо!

>>с локальным MDB стоит связыватся только если необходимо
>>чтобы временная накладная схранялась от сеанса к сеансу

Это не требуется.

Тогда как лучше делать? Я так понял что на сервере, через временные таблицы?

А вариант через mdb ты написал для связки mssql+mdb?
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32604168
e_basil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня клиент написан на mdb, поэтому проблем со связыванием таблиц нет
если на ADP - создать рекордсет на таблице, расположенной в файле mdb и добавлять в него записи при формировании накладной. При заливке в сервер
создать 2 рекордсета
у меня так:

Код: plaintext
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.
Set prm = cmd.CreateParameter("@OrderID", adGUID, , , sOrdID)
              cmd.Parameters.Append prm
              cmd.Execute Options:=adExecuteNoRecords
              Set rstD = New ADODB.Recordset        'rst-получатель'
              rstD.CursorLocation = adUseClient
              rstD.Open "SELECT OrderID, DocNo, GoodID, [LineNo], Quantity, PriceSale, PriceBezNDS, PriceBezDiscount, PriceSaleInput, " _
                      & "PacsQuantity, PacsPriceSale, PacsPriceBezNDS, Correct, StavkaNDS, Akziz, StavkaSaleTax, " _
                      & "OridginCountry, CustomDecNo, StavkaGSM, Nalog, QNDS, QNP, Discount " _
                      & "FROM dbo.tblOrderDetails " _
                      & "WHERE orderid = null", _
                 cn, adOpenKeyset, adLockBatchOptimistic, adCmdText

              Set rstS = New ADODB.Recordset       'rst - источник'
              With rstS
                  .Open "SELECT GoodID, [LineNo], Quantity, PriceSale, PriceBezNDS, PriceBezDiscount, PriceSaleInput, " _
                      & "PacsQuantity, PacsPriceSale, PacsPriceBezNDS, Correct, StavkaNDS, Akziz, StavkaSaleTax, " _
                      & "OridginCountry, CustomDecNo, StavkaGSM, Nalog, QNDS, QNP, Discount " _
                      & "FROM tblOrderDetailsLocal " _
                      & "WHERE OrderID=" & sOrdID, _
                     CurrentProject.Connection, adOpenStatic, adLockReadOnly, adCmdText
                  If Not (.EOF And .BOF) Then
                        .MoveFirst
                        Do Until .EOF
                            rstD.AddNew
                            rstD!OrderID = sOrdID
                            rstD!DocNo =  0 
                            rstD!goodid = Nz(!goodid,  0 )
                            rstD!LineNo = Nz(!LineNo,  0 )
                            rstD!Quantity = Nz(!Quantity,  0 )
                            rstD!PriceSale = Nz(!PriceSale,  0 )
                            rstD!PriceBezNDS = Nz(!PriceBezNDS,  0 )
                            rstD!PriceBezDiscount = Nz(!PriceBezDiscount,  0 )
                            rstD!PriceSaleInput = Nz(!PriceSaleInput,  0 )
                            rstD!PacsQuantity = Nz(!PacsQuantity,  1 )
                            rstD!PacsPriceSale = Nz(!PacsPriceSale,  0 )
                            rstD!PacsPriceBezNDS = Nz(!PacsPriceBezNDS,  0 )
                            rstD!Correct = Nz(!Correct,  0 )
                            rstD!StavkaNDS = Nz(!StavkaNDS,  0 )
                            rstD!Akziz = Nz(!Akziz,  0 )
                            rstD!StavkaSaleTax = Nz(!StavkaSaleTax,  0 )
                            rstD!OridginCountry = Nz(!OridginCountry,  0 )
                            rstD!CustomDecNo = Nz(!CustomDecNo,  0 )
                            rstD!StavkaGSM = Nz(!StavkaGSM,  0 )
                            rstD!Nalog = Nz(!Nalog,  0 )
                            rstD!QNDS = Nz(!QNDS,  0 )
                            rstD!QNP = Nz(!QNP,  0 )
                            rstD!discount = Nz(!discount,  0 )
                           .MoveNext
                        Loop
                        rstD.UpdateBatch
                  End If
              End With
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32604219
Юстас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to e_basil

А как ты связываешься из mdb базы с SQL-Server'ом? Я так понял что у тебя и локальные таблицы и серверные в общем окне [Таблицы]?

Я сейчас наоборот, в проекта ADP создал форму и связал ее (через DAO.Recordset) с базой mdb. ДАнные можно редактировать и добавлять.
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32604344
e_basil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с сервером связываюсь через хп (в основном), а также через запросы к серверу и ADO-рекордсеты.
Локальные таблицы не всегда оправданы. У меня с базой работают несколько специфических клиентов (загрузка из- и в- ккм, периодическая загрузка из других баз с обработкой на клиенте, выборочный обмен данными с удаленными клиентами, конструирование спецификаций и рецептур). В некоторых случаях промежеточные данные могут сохраняться на клиенте перед загрузкой на сервер, поэтому я выбрал вариант с локальными таблицами
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32604352
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Я сейчас наоборот, в проекта ADP создал форму и связал ее (через DAO.Recordset) с базой mdb
Правильно
А переливать данные через рекордсет это моветон
так только 1С ники делают или те кто недавно с клипера пересел (без обид)

описание метода с временными табличками можно найти на форуме Access

если начал делать с локальным MDB то продолжай
ничего плохого в этом нет
еще и сервак меньше напрягается

только потом не переливай через рекордсет а создай в mdb-ке
запрос к серверу на INSERT в серверную таблицу где источником будет
локальная
и исполни его через DAO Execute

Function GetServerName() As String
'Dim strStart As String
'strStart = Mid(cnn.ConnectionString, InStr(1, cnn.ConnectionString, "Data Source=") + Len("Data Source="))
'
'GetServerName = Left(strStart, InStr(1, strStart, ";") - 1)

GetServerName = cnn.Properties(22)

End Function
Function GetDBName() As String
'Dim strStart As String
'strStart = Mid(cnn.ConnectionString, InStr(1, cnn.ConnectionString, "Initial Catalog=") + Len("Initial Catalog="))
'
'GetDBName = Left(strStart, InStr(1, strStart, ";") - 1)

GetDBName = cnn.Properties(27)

End Function

Dim dbe As DAO.DBEngine
Dim ws As DAO.Workspace
Dim db As DAO.Database
Set dbe = New DAO.DBEngine
On Error Resume Next
создаю временный MDB-k убивая старый если он есть
Kill CurrentProject.Path + "\__tmp.mdb"
Set db = dbe.Workspaces(0).CreateDatabase(CurrentProject.Path + "\__tmp.mdb", dbLangGeneral)
формирую запрос чтобы ADP-к не ругался создай фантомный объект(пустую таблицу или запрос)
на сервере с таким же именем "spq"
Set q = db.CreateQueryDef("spq")
'Вот как в ADP формируется MDB-ный конект к серверу
q.Connect = "ODBC;DRIVER={SQL Server};SERVER=" + GetServerName() + ";DATABASE=" + GetDBName() + ";Trusted_Connection=yes;dsn=;"

q.SQL = "Тело запроса"
q.Close
db.Execute "Вперед с песней" или q.Execute
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32604379
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда сохраняеш данные от сеанса к сеансу
то надо создавать MDB-к
и таблицы/запросы только если их еще нет
а при открытии накладной
если она уже есть на серваке
то открывать штатным способом
заполняя Form.RecordSource
Иначе из локальной таблицы Set Me.Recordset =
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32604395
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не стал ли этот топик ближе к форуму по Access ??
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32604430
e_basil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
метод ADO UpdateBatch - это далеко не клиппер (хотя я его не знаю, также как и 1с, к сожалению).
А работает метод очень прилично.
Стараюсь уйти от DAO где возможно, так как планирую переписать клиента на .Net
запросы к серверу использую чтобы получать с сервера наборы записей и с помощью SQL заливать их в локальные таблицы или как источник для форм readonly
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32604677
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Не стал ли этот топик ближе к форуму по Access ??
Точно с самого начала ближе некуда туды его

>так как планирую переписать клиента на .Net
Дык класический ADO к ADO.NET не особо ближе чем DAO
все равно по хорошему придется переписывать
а с гетерогенными запросами DAO шустрее справляется
но можно и через ADO
только MDB источник придется открывать
через opendatasours или openrowset
для чего придется отслеживать права учетной записи
под которой стартует сервер (чтобы она имела доступ к локальному MDB-ку)
(или она от прав юзера сработает?надо попробывать)
что ИМХО геморой
что всеравно получится гораздо быстрее чем
циклом по рекордсету
даже учитывая время на закрытие файлы открытого в монопоьльном режиме.
запрос в две строчки
вьюха на MDB источник на раздва создается мастером ADP
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32605102
Фотография vma_mnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO зачем столько заморочек.

Я делаю так

---------------
Dim CN as connection, S1 as Recordset

Set CN = Currentproject.connection
Set S1 = New Recordset

cn.execute "SELECT TOP 0 * INTO #ШапкаНакладной FROM ШапкаНакладной WHERE КодНакладной = 0"
cn.execute "SELECT TOP 0 * INTO #ДанныеНакладной FROM ДанныеНакладной WHERE КодНакладной = 0"

временные таблицы повторяют структуру основных

После создания накладной (хоть весь день пусть создают, тока бы напругу не выбило)

Cn.Execute "INSERT INTO ШапкаНакладной (Список полей) SELECT СписокПолей FROM #ШапкаНакладной"

S1.Open "SELECT @@IDENTITY AS ID",Cn

Cn.Execute "INSERT INTO ДанныеНакладной (КодШапки, Список полей) SELECT " & S1!ID & ", СписокПолей FROM #ШапкаНакладной"
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32605734
Юстас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Латук и все, кто откликнулись - спасибо. Все по делу.

to vma_mnt

Насколько я понял ты делаешь все через временные таблицы на сервере, создавая их как копии основных. Я прав?

В общем я понял что есть 2 основных идеи: Использовать локальные таблицы (mdb) или временные таблицы (на сервере). На мой взгляд проще и единообразнее использовать второй вариант. А что скажут специалисты?
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32605789
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я уже говорил
если нет необходимости сохранять временную таблицу
между сеансами то с временными таблицами мороки меньше.
хотя они и создают доп нагрузку на сервер

а с MDB это некое подобие .NET
только там вместо только там подобие этих таблиц
в памяти находится (DataSet)
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32605832
Юстас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕЩЕ РАЗ СПАСИБО ЗА ПОМОЩЬ.

Буду копаться. Вот и первый вопрос.
Сделал как сказал vma_mnt (создал временную таблицу),
но ее не видно в окошке таблиц. Хотя она создана, т.к. при повторной
попытке создания Access пишет, что такой объект уже есть. Как все-таки увидеть эту таблицу?
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32605855
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще IgorM делает так

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

после создания накладной временные строки подчищаются
для случайно отвалившихся процессов
по джобу (скажем ночью) отрабатывает сборщик мусора
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32605867
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поищи это уже обсуждалось
дело в том что таблица видна только для создавшего ее
конекта
а для окна базы access использует отдельный конект

для отладки используй таблицу с двумя ##
или постоянную
после убереш или добавиш #
...
Рейтинг: 0 / 0
Как лучше организовать процедуру набора и сохранения накладной?
    #32605965
Юстас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, разобрался. Еще раз спасибо.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как лучше организовать процедуру набора и сохранения накладной?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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