Однако вы можете сделать это только с помощью драйвера MYOB ODBC. Этот драйвер работает так, что он использует Myobp.exe в качестве посредника между ODBC и файлом .MYO.
Драйвер MYOB ODBC представляет интерфейс SQL для MYOB, однако есть некоторые предостережения. Это не настоящий интерфейс SQL к MYOB. Данные, которые вы можете получить и получить, точно соответствуют функциям импорта и экспорта, которые MYOB представляет в самой программе.
Для вывода данных с помощью интерфейса ODBC вы можете писать запросы SQL, и даже некоторые функции типа SQL могут присутствовать в этих запросах, но иногда вы можете столкнуться с некоторыми вещами, которые вас поймут.
Для получения данных в представляемом драйвере ODBC используется схема таблиц с префиксом «Import_». С этими таблицами можно только импортировать данные, и они не будут возвращать такие вещи, как номер счета, который вы только что импортировали. Это также означает, что вы не можете обновить существующие записи так же, как вы ожидаете с реальным интерфейсом SQL.
Однако при импорте некоторых данных обновляются существующие данные, если некоторые поля совпадают. Мой опыт работы с MYOB и его интерфейсом ODBC главным образом связан с получением заказов на продажу от системы, которую я написал, введенной в MYOB, поэтому некоторые вещи можно сделать.
Я написал свою первую версию этой системы в Rails, однако вы не можете использовать стандартные модели Rails, не настроив способ их работы, потому что Rails очень самоуверен в том, как ожидается, что база данных будет работать.
Позже я переписал его в Clojure и использовал рукописные запросы.
Для многострочных вставок (например, строк счета-фактуры) MYOB использует транзакцию в качестве оболочки, чтобы указать, какие строки должны быть в одном счете-фактуре.
Поэтому, если вы хотите использовать Rails, лучше всего избегать использования моделей Rails и, возможно, писать прямые SQL-запросы и взаимодействовать с ними с помощью ваших контроллеров и представлений.
Я не могу сейчас получить свой старый код, но это что-то вроде этого:
def create_myob_invoice( iso )
# We can assume we have the job
# Now, for each iso line, we add an invoice
latest_invoice_number = Sale.find( :first, :order => 'InvoiceNumber DESC' ).InvoiceNumber.to_i
if latest_invoice_number
# We need to wrap it all in a transaction so MYOB knows they're all the one invoice
MyobDatabase.transaction do
iso.lines.each do |line|
new_service_line = ImportServiceSale.new
# Map iso fields to MYOB service sale fields
# e.g. suff like:
new_service_line.Description = "#{line.sDescription}"
new_service_line.save
end
end
end
end
Вы также можете найти что-то, что вам поможет: