Option Compare Database Sub Расчет()



Me.Сумма_без_учета_НДС__руб_коп = _ Me.Количество_принято * Me.Цена__руб_коп

snds = Me.Сумма_НДС__руб_коп

otv = MsgBox("Пересчитать НДС по ставке 18%?", _ vbYesNo, "Вопрос к пользователю:")

If otv = 6 Then ' ответ Да Me.Сумма_НДС__руб_коп = _

Me.Сумма_без_учета_НДС__руб_коп * 0.18 End If

Me.Всего_с_учетом_НДС_руб_коп = _ Me.Сумма_без_учета_НДС__руб_коп + Me.Сумма_НДС__руб_коп

NN = Me.[№ ордера]

Me.Refresh

' обновить данные формы

Dim rs As New ADODB.Recordset

' текст SQL-запроса с группировкой данных для расчета сумм ордера:

sq = "SELECT DISTINCTROW [Товары ордера].[№ ордера], " + _

"Sum([Товары ордера].[Сумма без учета НДС, руб коп]) " + _

"AS sbn, Sum([Товары ордера].[Сумма НДС, руб коп]) " + _ "ASsn, Sum([Товарыордера].[ВсегосучетомНДСрубкоп])"+_ "AS ssn, Sum([Товары ордера].[Количество принято]) " + _

"AS sk FROM [Список ордеров] INNER JOIN [Товары ордера] " + _ "ON[Списокордеров].[№ордера]=[Товарыордера].[№ордера]"+_ "GROUP BY [Товары ордера].[№ ордера], " + _

"[Список ордеров].[№ ордера] " + _

"HAVING ((([Товары ордера].[№ ордера])= " & NN & "))"

Rs.Open sq, CurrentProject.Connection, adOpenDynamic, _ adLockOptimistic

' присваиваем полученные в запросе значения

' полям формы главной таблицы Список ордеров

Me.Parent.Количество_всего = rs!sk Me.Parent.Сумма_без_НДС_всего = rs!sbn Me.Parent.Сумма_НДС_всего = rs!sn Me.Parent.Сумма_с_НДС_всего = rs!ssn Me.Refresh

End Sub

Private Sub Количество_принято_AfterUpdate() If Me.Цена__руб_коп > 0 Then

Call Расчет

' рассчитываем суммы в строке таблицы товаров

Me.Количество_принято.SetFocus

End If End Sub

Private Sub Сумма_без_учета_НДС__руб_коп_AfterUpdate() Сall Расчет

End Sub

Private Sub Сумма_НДС__руб_коп_AfterUpdate() If IsNull(Me.Сумма_НДС__руб_коп) Then _

Me.Сумма_НДС__руб_коп = 0 Call Расчет

End Sub

Private Sub Цена__руб_коп_AfterUpdate() If Me.Количество_принято > 0 Then

Call Расчет Me.Цена__руб_коп.SetFocus

End If End Sub

В этом тексте все названия полей после Me. выбираются из всплывающего списка, как показано на рисунке 31.4 (более корректно было бы после каждого имени поля приписывать свойство Value, но система прекрасно работает со значениями полей с указанием только их имени, как показано в программе).

Рис. 1.4. Всплывающие списки в редакторе VBA

 

Текст SQL-запроса можно получить с использованием режима Создание – Запросы – Мастер запросов в системе Access.

Расчет будет выполняться для событий AfterUpdate (после обновления) для полей формы [Количество принято], [Сумма без учета НДС, руб коп], [Сумма НДС, руб коп] и [Цена, руб коп].

Вид формы после расчета показан на рисунке 1.5.

 

Рис. 1.5. Форма после расчета по программе

 

Пример 2. Импорт данных в таблицы базы из внешних источников

В системе Access на вкладке ленты Внешние данные – Импорт и связи есть возможность добавить в базу данных информацию из Excel, других баз данных, текстового и XML-файлов, но нет импорта из документов Word. Рассмотрим такую возможность – разработку программы чтения данных из таблиц файлов *.doc или *.docx с перенесением этих данных в существующие таблицы базы данных. Предположим, для предыдущего примера Приходного ордера в документе Word есть 2 таблицы (таблица 31.5).

Программу импорта данных следует написать, как процедуру обработки события Нажатие кнопки (Click) для новой кнопки с именем Импорт, которую можно разместить на существующей форме.

 

Таблица 1.5.

Таблицы файла d:\asg\Приходный ордер.docx

№ ордера Дата составления Структурное подразделение
115 2.03.2013 1

 

Наименование Ед-цы измерения Кол-во по док Цена
Доска необрезная 25х6000 м3 1 3500.00
Доска необрезная 50х6000 м3 1.5 4800.00
Вагонка 1145Х20 2.0-6.0 м2 50 300.00
Евровагонка 12,5х96 2.0-4.0 м2 100 200.00

 

Текст процедуры импорта данных может быть следующий:

Private Sub Импорт_Click()

'On Error Resume Next

' использовать в окончательном варианте


Дата добавления: 2018-02-18; просмотров: 572; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!