Долой бумагооборот, даешь СУБД!

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Mag_White
Сообщения: 6
Зарегистрирован: 04 фев 2008, 20:42

Интересует мнение специалистов. Возможно ли сделать в Accesse-07 следующую жизненную задачу.

Есть шкаф, в нем лежат папки с контрактами. Для каждого контракта заводится своя папка "Досье контракта". Каждая папка с контрактом хранится на своей полке (импорт, экспорт) в шкафу. В каждый контракт входит серия документов (Контракт, допсоглашения, приложения, протоколы, счета на оплату, банковские выписки, ГТД и пр.). Эти документы по мере появления вкладываются в папку с контрактом. Выполненные контракты закрываются - т.е. проверяется наличие в них основных документов и в случае, если все ОК, то папка изымается из шкафа и передается в архив, но иногда все же может потребоваться контракт поднять и представить кому-либо для проверки. В общем ужоснах.
===
Возможно ли все это хозяйство перевести на безбумажную работу с помощью создания в аццессе Базы Данных? Тупо открыл базу, ввел дату или номер контракта, появился список контрактов. Нажал на какой-либо номер контракта, тутже появляется таблица "Картотека документов" со списком прилагаемых контрактов и к каждому списку картотеки прикрепляется скан-копия документа.
===
Есть мысли, как это сделать? С чего начать? Помогите сориентироваться...
Mag_White
Сообщения: 6
Зарегистрирован: 04 фев 2008, 20:42

Прочитал я тут анадыся книжицу "Access-2007: это просто".
Много думал.
Вопрос. Допустим, я, замострячил базу данных, а как зделать так, чтобы к файлу базу данных был доступ только на просмотр? Чтобы никаких изменений и редактирований - тока тупой (или острый) просмотр...
Че делать?
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте Mag_White.
с Access-2007 я пока не работал, но думаю эти свойства в нем не отличаются от Access 97. Изменения и просмотр записей БД осуществляется с помощью форм. А в свойствах этих самых форм и задается возможность добавления, изменения, удаления, то есть редактирования. Эти и другие настройки выполняются в процессе создания БД
Удачи Вам.
Евгений.
Mag_White
Сообщения: 6
Зарегистрирован: 04 фев 2008, 20:42

Спасибо за ответ. А если серьезно, то задача, на первый взгляд простейшая, легко делалась в екселе, но как в ацессе это сделать не догоняю.
Существует ли шаблон БД, который организовывает библиотечный каталог? Только вместо книжек, хранились бы подшивки документов?
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте Mag_White.
Рекомендую Вам начать изучение БД (базы данных, не чтото другое :) ) с MS Access 97. Его преимущество в том, что сн имеет руссифицированую (возможно Вам это не важно) справочную систему в том числе раздел VBA, и приличный набор пользовательских шаблонов(неполный список в файле).
С его помощью легко изучать, получать первый практический опыт и понимание принципов работы с БД.
Минус - ядро Access97 (JET3,5) "не понимает" формат MDB JET4,0, БД Access 2000-и выше. Но все более поздние СУБД Access, могут работать с БД 97-го и во всех есть встроенные конверторы для преобразования файла БД из 97-го формата к своему.
Удачи Вам.
Евгений.
Вложения
TemplateAccess97.jpg
TemplateAccess97.jpg (26.1 КБ) 209 просмотров
Mag_White
Сообщения: 6
Зарегистрирован: 04 фев 2008, 20:42

Спасибо огромное за наводку. Сделал то, что надо.
Создал 2 таблицы:
"Контракт" - для хранения ключевой информации и "Картотека" - для хранения документов, принадлежащим контрактам. Связь через подтаблицу дает возможность увидеть, какой пакет документов к какому контракту относится. Но.. Поиск - такой геморройный (только через cntrl+f - т.к. на работе стоит офис 2003, но надеюсь убедить начальство в пользу СУБД и раскошелить на человеческий офис).
Задачу каталогизирования решил (кстати, без шаблона, нигде не нашел его в сети), но теперь другая задача - поисковый блок.
Подскажите - в каком направлении двигаться?
Нужно: на основе кнопочной формы составить окно поиска, в котором проставив 2 параметра (в идеале больше конечно, но хотябы 2 главных) я получаю форму, в которую загружается искомая запись из таблицы"Контракты" или "Картотека". Основные параметры поиска - это номер контракта(из таблицы "Контракты") и реестр_документа (из таблицы "Картотека").
Буду благодарен за практические советы.
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте Mag_White.
В пакет Office 2003 включен Access, это и есть СУБД.
Что Вы называете "человеческий офис"?
"поисковый блок" - это не задача. :) Организовать "поиск" средствами JET (Access) и VBA очень легко. Разместите на форме поле и кнопку, а в качестве источника строк формы используйте запрос с условием отбора. В условии задайте подобную строку :
Like [Forms]![ИмяВашейФормы]![ПолеПоиска] & "*"
А событию "Нажатие кнопки" подключите подобный код

Код: Выделить всё

Private Sub Кнопка1_Click()
   Me.Requery
End Sub
Я думаю Вам стоит почитать учебник по Access.
Удачи Вам.
Евгений.
Mag_White
Сообщения: 6
Зарегистрирован: 04 фев 2008, 20:42

Предложенное выше никак не могу дотумкать, не получается.... И что делаю не так - не понимаю.

Человеческий офис? Ну...э..... Имеется в виду офис 2007 с новым Аццессом.))))

Можно практический вопрос?

Как сделать так, чтобы при введении в поле19 и нажатии энтер, начинался поиск из таблицы "Контракты" по полю"Контракт", и в форму загружались данные, согласно найденного контракта, или вообще ничего не загружалось, в случае необнаружения в таблице совпадения по полю "Контракт", или бы выводилось сообщение "Такого контракта в базе данных не обнаружено, попробуйте поискать снова"
Изображение
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте Mag_White.
На форме расположен Grid - форма с табличным отображением данных.
Замените "подчиненная_форма_Контракты" на имя используемое Вами
и поместите в модуль формы подобный код

Код: Выделить всё

Private Sub Поле19_KeyPress(KeyAscii As Integer)
Dim sSql$
sSql = "SELECT * FROM Контракты"
If KeyAscii = 13 Then
    KeyAscii = 0
    If Not Поле19.Text = "" Then
        'sSql = sSql & " WHERE Контракт='" & Поле19.Text & "'" 'полное соответствие
        sSql = sSql & " WHERE Контракт Like '*' & '" & Поле19.Text & "' & '*'" 'подобие
    End If
    Me.подчиненная_форма_Контракты.Form.RecordSource = sSql
End If
End Sub
Евгений.
Mag_White
Сообщения: 6
Зарегистрирован: 04 фев 2008, 20:42

Здравствуйте, Евгений.

Есть еще один практический вопрос....
===В таблицу "Картотека" вводятся данные о документах в поля: "Контракт", "Правовая база", "реквизиты документа", "сумма по документу" и "тип расчета". В поле "Тип расчета" можно подставить 3 значения "баланс", "отгрузка", "оплата", либо это поле можно оставить пустым - чтобы показать, что сумма в документе к расчету не относится, а указана справочно.

***тип расчета "баланс" - подразумевает что сумма, указанная по этому документу показывает общую стоимость контракта, такую пометку я ставлю к одному базовому документу, для расчета процента выполнения контрактных обязательств. - это будущая тема другого вопроса.***

тип расчета "оплата" - подразумевает, что документ участвует в расчете по суммированию выплат по контракту.

тип расчета "отгрузка" - подразумевает, что документ участвует в расчете по суммированию отгрузок товара по контракту.

===Для отсечения сумм, которые в расчете не участвуют, я сделал один запрос с условием отбора записей по полю "тип расчета" содержащие пометку "отгрузка" или "оплата".

===Далее формирую отчет (мастером), с группировкой по Контракту, Правовой базе (приложение к контракту), Типу расчета, далее в одном блоке дата документа, Реквизиты документа, Сумма по документу.
=== Подтверждаю расчет итогов, выбирая Sum.

Получается не плохо в том плане, что отчет уже решает одну из главнейших задач - он отсекает только участвующие в расчете бумаги, и сортирует их по Контрактам и внутри контракта по приложениям, и даже суммирует.

Но!

Можно ли решить еще одну задачу: чтобы итоговое значение по контракту он высчитывал не прибавляя сумму по "Итоги для тип_расчета=оплата" и "Итоги для тип_расчета=отгрузка" и давал итоговую сумму одного со вторым, А ВЫЧИТАЛ ОДНО ИЗ ДРУГОГО. Т.е. промежуточный итог по части контракта (Итоги для "правовая база") и по всему контракту(Итоги для "контракт") показывал как:
= (итоги для "Тип расчета" = оплата) - (итоги для "Тип расчета" = отгрузка").

При этом, можно задать условие, имеющее смысл, что ЕСЛИ "оплата" - "отгрузка" = о, ТО печаталась строка в отчете "Обязательтва выполнены".

ЕСЛИ "оплата"-"отгрузка" >0, то строка с сообщением "Оплачено больше чем отгружено".

ЕСЛИ "оплата"-"отгрузка" <0, то строка с сообщением "Отгружено больше чем оплачено".
===
Подскажите, что нужно сделать в отчете, чтобы он стал таким как описано?

Так выглядит страница с сегодняшним отчетом:
Изображение
Ответить