Jump to content


Productive Computing
  • Content count

  • Joined

  • Last visited

Community Reputation

0 Neutral

About PCIPal

  • Rank

Profile Information

  • Location
    San Diego County, CA, USA
  • Interests
    QuickBooks Integration, Outlook/Exchange Integration, FileMaker Hosting, FileMaker Plug-ins, FileMaker Custom Development

Contact Methods

  • Website URL

FileMaker Experience

  • Skill Level
  • FM Application
    16 Advanced

Platform Environment

  • OS Platform
  • OS Version

FileMaker Partner

  • Certification
  • Membership
    FileMaker TechNet
    FileMaker Business Alliance
    FIleMaker Platinum Member

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. PCIPal


    Hi Tim, Just putting this here for others. The issue at hand is that the plug-in installers are built to install 64-bit plug-ins in addition to 32-bit plug-ins, and those 64-bit plug-ins have 64-bit dependencies, thus the need for a 64-bit installer. When it comes to installing on a 32-bit operating system, the best workaround is to perform a manual installation; using the demo file to install the plug-in via the Install Plug-in script step, after installing the Visual C++ 2013 Redistributable Package for 32-bit, and .NET Framework 4.5, if needed. Thanks! Chris "CT"
  2. PCIPal

    splash screen shows in Runtimes

    That's correct. When the plug-in is installed via the Install Plug-in script step, it gets put into the specific version's Extensions folder (16.0 in this case). Either way, I'm glad it's working for you now! Happy to help! - Chris "CT"
  3. PCIPal

    splash screen shows in Runtimes

    Hi tomp, When the runtime initializes, even if the plug-in is disabled in the preferences for FileMaker Pro, the runtime still will have the plug-in "loaded" for the runtime; runtimes will load from their personal Extensions folder, or also from the common Extensions folders that all FileMaker Pro applications will load plug-ins from. If you want to have the runtime load without a splash screen from the plug-in, since the runtime doesn't use the plug-in's functions, you should move the plug-in file from the common Extensions folder to the Extensions folder belonging to your primary FileMaker Pro program. An example would be to move it from: C:/Users/(user)/AppData/Local/FileMaker/Extensions/PCFMBooksConnector.fmx (or .fmx64) to: C:/Users/(user)/AppData/Local/FileMaker/FileMaker Pro Advanced/16.0/Extensions/PCFMBooksConnector.fmx (or .fmx64) That way, the plug-in will only load for FileMaker Pro 16, and not for any other instance of FileMaker, runtimes included. Once the move is done, the plug-in should only be detectable by FileMaker Pro 16, and the runtime should not see any splash screen. - Chris "CT"
  4. PCIPal

    Subtotals on an Invoice

    Hello, As far as I know, QuickBooks should be able to handle subtotals in a “subtotal for all lines above it” capacity by default. As for a “subtotal by type” situation, I’m not certain if there is a way to do split up those subtotals. I would recommend that you touch base with QuickBooks support to see if there are any special tips and tricks that the QB gurus can offer. -Francis
  5. San Diego, CA - May 3, 2018 - Productive Computing, Inc., a Platinum member of the FileMaker® Business Alliance, is proud to announce it is an authorized provider of remote hosting for QuickBooks users. "We decided to become a QuickBooks hosting provider because our customers were asking us for the ability to host both FileMaker and QuickBooks Desktop side by side in the cloud and we didn’t find an authorized way to do that currently on the market. “Our QuickBooks Desktop Hosting plan will allow clients to install third-party applications within the same cloud environment that their QuickBooks file is installed within. This means users can finally run QuickBooks Desktop with FileMaker client, allowing for a seamless cloud experience for the user with the added option to use Productive Computing’s plug-in to integrate the two programs." Marc Larochelle, Chief Executive Officer, Productive Computing, Inc. Productive Computing, as an authorized standard host for QuickBooks software, offers two new hosting plans. Clients currently hosting their FileMaker files onsite or with a hosting provider can choose to host solely their QuickBooks files in the cloud or host both QuickBooks Desktop and FileMaker with Productive Computing. Both plans allow users to access their hosted QuickBooks files directly from any computer running Windows or Mac, as well as nearly any mobile device or tablet. Why host QuickBooks with Productive Computing? Access QuickBooks Desktop files and FileMaker in the cloud simultaneously Install the Productive Computing accounting plug-in to provide direct integration between FileMaker and QuickBooks Eliminate the need to manage QuickBooks IT infrastructure (server, backups, IT labor) Experience the benefits of a remote cloud environment with the power of traditional QuickBooks Desktop Install third-party applications, such as Microsoft Office QuickBooks Hosting is available for as low as $99/month per user when purchased annually. QuickBooks Hosting clients can add FileMaker hosting for as little as $99/month on an annual plan and clients have the option to add Microsoft Office for $20/month per user. All plans support QuickBooks Pro, Premier and Enterprise Desktop 2018. For more information on QuickBooks Hosting visit www.filemakerhostingservice.com or email sales@productivecomputing.com . Customers who want to upgrade to QuickBooks 2018 can contact sales@productivecomputing.com or can view our QuickBooks offerings for exclusive discounts on QuickBooks 2018 software. *** About Productive Computing, Inc. Since 1996, Productive Computing, Inc. has been helping its customers become more efficient and profitable by implementing custom software solutions using FileMaker Pro.Their certified FileMaker developers can create custom applications that a business can run on their Windows or Macintosh desktop computers, in a web browser, and on an iOS device. Productive Computing, Inc. offers FileMaker solutions and plug-ins allows developers to integrate with third-party software. In addition, Productive Computing, Inc. is a full-service FileMaker hosting company, offering shared and dedicated hosting plans and FileMaker Cloud services. Productive Computing, Inc. is proud to be a Platinum level member within the FileMaker Business Alliance and a Premier Intuit Reseller. Productive Computing, Inc. 950 Boardwalk, Suite 205 San Marcos, CA 92078 www.ProductiveComputing.com sales@productivecomputing.com (760) 510-1200
  6. PCIPal

    Pulling Received Payments from QuickBooks

    Hi Christi, It's possible that the evaluation of the request might be experiencing an error (such as a validation error or something of that nature), which would cause the response XML to still maintain the previous successful response, which would be the "all received payments" result. In that case, checking the result of PCQB_SGetStatus immediately after PCQB_RqExecute should show what is missing. I was able to successfully test pulling all received payments for a specific Customer and their Jobs using the following script (I used the "Sample Products-Based Business" company file available in QuickBooks 2016): PCQB_RqNew [Select; Results:$result; Request Type:"ReceivePaymentQuery"] PCQB_RqAddFieldWithValue [Select; Results:$result; QB Field Name:"EntityFilter::FullNameWithChildren"; Field Value:"Jacobsen, Doug"] // Doug Jacobsen has 4 received payments associated with his Jobs PCQB_RqExecute [Select; Results:$result] // Value of $result is 0 PCQB_SGetXML [Select; Results:$responseXML; XML Document Type:"Response"] // Contained the resulting XML set describing 4 received payments If you wanted to use the date range instead of a customer reference (for example, all received payments in January, 2021, since the sample file is in the future), you could structure your script like so: PCQB_RqNew [Select; Results:$result; Request Type:"ReceivePaymentQuery"] PCQB_RqAddFieldWithValue [Select; Results:$result; QB Field Name:"TxnDateRangeFilter::FromTxnDate"; Field Value:"01/01/2021"] // Start from January 1st, 2021 PCQB_RqAddFieldWithValue [Select; Results:$result; QB Field Name:"TxnDateRangeFilter::ToTxnDate"; Field Value:"01/31/2021"] // End on January 31st, 2021 PCQB_RqExecute [Select; Results:$result] // Value of $result is 0 PCQB_SGetXML [Select; Results:$responseXML; XML Document Type:"Response"] // Contained the resulting XML set describing 6 received payments within the month of January 2021 Hope this helps! - Chris
  7. PCIPal

    Handling Receive Payment Transactions

    Thank you for catching those typos, Geoffrey! Post has been updated to reflect those changes.
  8. PCIPal

    How to Push a Job

    Pushing a job is identical to pushing a Customer with one exception. You need to add the ParentRef to the request. The "ParentRef::ListID” or "ParentRef::FullName” should be included in the request to add. The request will now be a job instead of a top level customer. In the example above the ListID and FullName refer be the ListID and FullName of the parent or top level customer in QBs. You will need to obtain the existing customer List ID or customer full name from QBs. For further details on ListID and FullName fields, please reference the OSR.
  9. You can query a customer in QuickBooks based on the customer name and obtain the LIST ID by doing the following: PCQB_RqNew ( "CustomerQuery" ) PCQB_RqAddFieldWithValue( "FullName" ; CNTCT::FullName ) The ListID is returned in the response. PCQB_RsOpenFirstRecord PCQB_RsGetFirstFieldValue( "ListID" ) For a detailed list of all available or required fields in a CustomerQuery, please reference the OSR at: https://developer-static.intuit.com/qbSDK-current/Common/newOSR/index.html. You may also want to refer to the Developer's Guide for navigational tips on how to properly use the OSR.
  10. # # This script snippet demonstrates applying a received payment to multiple invoices. # It assumes that the FileMaker solution has a 'join' table between the payment and the invoice(s), and from the # join table the txn id of the invoice is accessible. # PCQB_RqNew( "ReceivePaymentAdd" ) #adding the remainder of the fields left out of this sample in the interest of brevity #ensure to add them in your script. # #now apply this payment to the invoices.. #go to the related records that indicate which invoices the current FM payment is applied to #from these records it will be necessary to have access to the invoice txn id and the amount applied to the invoice - design your fm schema accordingly # Go to Related Record..... Go to Record/Request/Page[ First ] #create the 'related records' to the request Loop # use pcqb_rqaddrelatedrecord to add an application of the payment to a transaction/invoice PCQB_RqAddRelatedRecord( "AppliedToTxnAdd" ) # # now add the transaction id for the invoice - this tells QB that this is the invoice to which we are applying part of the payment PCQB_RqAddFieldWithValue( "TxnId" ; INV_PMT::Invoice_TXNID ) #note that INV_PMT::Invoice_TXNID is a place holder for your table/field holding the txnid for the invoice # # now add the payment amount - the part of the payment applied to the invoice PCQB_RqAddFieldWithValue( "PaymentAmount" : INV_PMT::Applied_Amount ) #note that INV_PMT::Applied_Amount is a place holder for your table/field holding the amount of the current payment that is applied to the invoice # #very important! - close the related record in the request PCQB_RqCloseRelatedRecord # #and navigate to the next invoice to which the payment is to be applied Go to Record/Request/Page[ Next ; Exit After Last ] End Loop # #
  11. QuickBooks receive payment transactions can be added, queried, and deleted. This section describes the effects of sending a ReceivePaymentAdd request object to QuickBooks. Applying a Payment: In a ReceivePaymentAdd object, TotalAmount is optional. TotalAmount represents the total amount of money that is being received from the customer named in the CustomerRef. The reason TotalAmount is not required is that a ReceivePaymentAdd object can be used to set credits or discounts without receiving any payment. You can use either AppliedToTxnAdd or IsAutoApply to distribute the received payment, as described in the following sections. Distributing the Payment Explicitly: You can include one or more instances of AppliedToTxnAdd, which allows you to specify exactly how to distribute TotalAmount for this customer job. Each instance of AppliedToTxnAdd refers to a different transaction, assigning a PaymentAmount to each one. (If you include AppliedToTxnAdd aggregates with duplicate TxnIDs, you will receive a status code error.) You need to know the transaction ID of each transaction to which payment is applied. In QuickBooks, the main type of transactions that can receive payment are as follows: • Invoices • General journal debits • Checks (for example, a customer job might receive a payment reimbursing a check that was written for an expense for that customer job) • Statement charges Table 18-1 attached shows how the sum of the payment amounts relates to the TotalAmount specified. The sum of the PaymentAmount elements in all the AppliedToTxnAdd aggregates should be less than or equal to the TotalAmount (in the ReceivePaymentAdd object). Applying the Payment “Automatically”: The IsAutoApply flag is used instead of AppliedToTxnAdd. This flag allows QuickBooks to apply the payment according to its set of rules, or simply to receive the payment without applying it to a specific transaction, as follows: • If IsAutoApply is true, QuickBooks applies TotalAmount according to the following rules: > If it finds an outstanding transaction for this customer job that exactly matches TotalAmount, it applies the payment to that transaction. > If no exact match is found, the payment is applied to the outstanding transactions beginning with the oldest one. Within the QuickBooks user interface, you can set credits or discounts even when you auto-apply a payment, but you cannot do this through the SDK. • If IsAutoApply is false, QuickBooks receives the payment but does not apply it to any outstanding transaction. QuickBooks creates a credit that will appear on the customer job’s next transaction (not on the current transaction). For example, the ReceivePaymentAdd request shown in Listing 18-1 will result in a credit of $620.40 being available to the Smith:kitchen customer job account. On the next transaction involving the Smith:kitchen customer job, at least $620.40 of credit will be available. (More than $620.40 will be available if this customer job already had a credit.) Listing 18-1 ReceivePaymentAdd request with IsAutoApply set to false; creating a credit: PCQB_RqNew( “ReceivePaymentAdd” ) PCQB_RqAddFieldWithValue( “CustomerRef::FullName” ; “Smith:kitchen” ) PCQB_RqAddFieldWithValue( “ARAccountRef::FullName” ; “Accounts Receivable” ) PCQB_RqAddFieldWithValue( “TotalAmount” ; “620.40” ) PCQB_RqAddFieldWithValue( “IsAutoApply” ; “false” ) Setting Discounts: Applying a discount reduces the amount that is to be received from the customer job. The discount is debited from the account referenced by DiscountAccountRef. In the QuickBooks user interface you can also apply discounts to statement charges, but you cannot do this through the SDK. You can apply a discount to an invoice transaction by including a DiscountAmount in an AppliedToTxnAdd aggregate. You cannot set a discount if you auto-apply the payment. Setting Credits: You can set a credit (add credit to a customer job account) by including the SetCredit aggregate in an AppliedToTxnAdd aggregate. You cannot set a credit if you auto-apply the payment. If you set one or more credits in a ReceivePaymentAdd request but do not distribute a payment or set a discount, then no transaction will be created. Setting a credit merely creates links between existing transactions (for example, between a credit memo transaction and an invoice transaction), and no information about these links will be returned to you in the ReceivePaymentRet response. The AppliedToTxnRet aggregate included in the returned ReceivePaymentRet object will not refer directly to any credit that was set. If you want information about credits, you must do a query on the TxnID returned by AppliedToTxnRet. For example, if AppliedToTxnRet refers to an invoice with a particular TxnID, if you query that TxnID you can get information about credit memos that are linked to that transaction. For more information and an example of setting a credit, see “Example: Creating Links Only.” Example: Creating Links Only Listing 18-2 shows a ReceivePaymentAdd object that sets a credit but does not include a PaymentAmount or DiscountAmount element. This ReceivePaymentAdd object will create a link between a credit memo and an invoice transaction, but will not create a new transaction. The customer named Smith previously returned merchandise, and a credit memo was created for their account. A CreditMemoQueryRq query returned information about the amount and transaction ID of this credit memo (110.29 and 120-1012533559). In Listing 18-2, the full amount from the credit memo is applied to the customer job Smith:kitchen, and a link is created to the invoice with the TxnID of 24-974954. The balance of that invoice will be reduced by $110.29, and closed altogether if the previous balance was $110.29. Listing 18-2 ReceivePaymentAdd object that creates links but does not create a transaction: PCQB_RqNew( “ReceivePaymentAdd” ) PCQB_RqAddFieldWithValue( “CustomerRef::FullName” ; “Smith:kitchen” ) PCQB_RqAddRelatedRecord( “AppliedToTxnAdd” ) PCQB_RqAddFieldWithValue( “TxnID” ; “24-974954” ) PCQB_RqAddRealtedRecord( “SetCredit” ) PCQB_RqAddFieldWithValue( “CreditTxnID” ; “120-1012533559” ) PCQB_RqAddFieldWithValue( “AppliedAmount” ; “110.29” ) PCQB_RqCloseRelatedRecord //closes the SetCredit record PCQB_RqCloseRelatedRecord //closes the AppliedToTxnAdd record A ReceivePaymentAdd object that does not create a transaction will return a lean AppliedToTxnRet aggregate this page. For example, Listing 18-3 shows a ReceivePaymentRet object that could be returned from the ReceivePaymentAdd request shown in Listing 18-2. Listing 18-3 ReceivePaymentRet object returned by the ReceivePaymentAddRq shown in Listing 18-2: <ReceivePaymentAddRs> requestID="356089" statusCode="0" statusSeverity="Info" statusMessage="Status OK"> <ReceivePaymentRet> <AppliedToTxnRet> <TxnID>24-974954</TxnID> <TxnType>Invoice</TxnType> <TxnDate>2002-02-10</TxnDate> </AppliedToTxnRet> </ReceivePaymentRet> </ReceivePaymentAddRs> How to parse the object... PCQB_RsOpenFirstRecord PCQB_RsOpenFirstRelatedRecord( “AppliedToTxnRet” ) PCQB_RsGerFirstFieldValue( “TxnID” ) //The transaction id for the related transaction PCQB_RsGetFirstFieldValue( “TxnType” ) //The type for the related transaction PCQB_RsGetFirstFieldValue( “TxnDate” ) //the date for the related transaction Getting a small response such as this might prompt you to query the specified invoice further to learn about any linked transactions. For example, after receiving the response shown in Listing 18-3, you might send an InvoiceQueryRq with TxnID of 24-974954 and IncludeLinkedTxns set to true. The query would return a LinkedTxn aggregate representing a credit memo with TxnID of 120-1012533559. For more information, see “Linked Transactions,”. You can perform additional queries for links only if the affected transaction (the transaction returned in the AppliedToTxnRet) is an invoice. For example, if the TxnID 24-974954 had a TxnType of JournalEntry, it would not be possible to query the journal entry to find out about linked transactions because a JournalEntryQueryRq does not include an IncludeLinkedTxns flag. Example: Applying Payment, Credit, and Discount in One Request Listing 18-4 shows a request that applies a payment, credit, and discount. The invoice with TxnID 43-222560 has a balance of $100.00, and a payment is received for $100.00. The invoice will be closed, but there will also be an unused payment, because both a credit (for $5.00) and a discount (for $7.00) are set. QuickBooks will reduce the internal payment amount to $88.00 [$100.00 - ($5.00 + $7.00)]. This example will produce an overpayment of $12.00, so UnusedPayment will be 12.00 in the returned ReceivePaymentRet object. Listing 18-4 Applying Payment, Credit, and Discount in a ReceivePaymentAdd Request: PCQB_RqNew( “ReceivePaymentAdd” ) ... PCQB_RqAddFieldWithValue( “TotalAmount” ; “100.00” ) PCQB_RqAddRelatedRecord( “AppliedToTxnAdd” ) PCQB_RqAddFieldWithValue( “TxnID” ; “43-222560” ) PCQB_RqAddFieldWithValue( “PaymentAmount” ; “100.00” ) PCQB_RqAddRelatedRecord( “SetCredit” ) PCQB_RqAddFieldWithValue( “CreditTxnID” ; “4552-22629” ) PCQB_RqAddFieldWithValue( “AppliedAmount” ; “5.00” ) PCQB_RqCloseRelatedRecord //closes the SetCredit record PCQB_RqAddFieldWithValue( “DiscountAmount” ; “7.00” ) PCQB_RqAddFieldWithValue( “DiscountAccountRef::FullName” ; “discount” ) PCQB_RqCloseRelatedRecord //closes the AppliedToTxnAdd record
  12. PCIPal


    Hi Wendy, It looks like the call to PCQO_RqUseJSON is not storing a result in the "Results" specifier. It's possible that PCQO_RqUseJSON might be experiencing an error (such as a malformed JSON document or some other exception), which would prevent the plug-in from properly replacing the request JSON with the contents of $json.payitem; that's why the second PCQO_RqExecute is still executing the vendor query JSON from before. If you can, could you store the results of PCQO_RqUseJSON into a variable (the $result variable should work just fine), and check it to see if the result is "!!ERROR!!" or "?"? If so, PCQO_SGetStatus should help tell a little more about what could be the root of the issue. Hope this helps!
  13. PCIPal

    No of contacts not matched

    Just a quick follow-up regarding this: Apple Contacts has an automatic contact linking feature that will link contact records that come from multiple sources (such as Exchange, Facebook, iCloud, etc.) into a single contact card. That way, if there are, for instance, 3 contact records for "John Smith" with the similar information, Apple Contacts will condense the three records into one, and reference the sources in the "Links" section of the contact card. The Address Book Manipulator plug-in does not read condensed/linked contact records when accessing them in memory, and will pull three separate contact cards for "John Smith" in the example above. As a note, the data for each contact record is maintained after being linked; there is no lost information. To reconcile which contacts are linked, a developer may perform a find in FileMaker after pulling contacts and compare those duplicate records with matching records in Apple Contacts. Hopefully that helps! - PCIPal
  14. PCIPal

    No of contacts not matched

    Hi jameshoty, Someone from our team has responded to your support ticket via email with more information. - PCIPal
  15. With the holidays right around the corner, Devon 2017 feels like a long time ago. If you are missing that exciting buzz experienced at DevCon, we invite you to take a listen to FileMaker Talk’s podcast from DevCon – “ Live at DevCon in Phoenix 2017” . You need to open it up in iTunes, but it will certainly transport you right back to Phoenix (lazy river and 99-degree weather not included). The podcast starts out with Matt Navarre interviewing Jesse Barnum from 360Works. Jesse talks until about minute 11:40 and discusses their MirrorSync product, including its pricing and what’s new with version 4. Jesse’s portion of the podcast also includes an insightful discussion on 360Deploy and how that product works. After Jesse, our very own CEO, Marc Larochelle, is on from about minute 11:40 until 41:00. Marc talks about what’s new (as of July 2017) here at Productive Computing – which included discussing our latest plug-in, the Exchange Manipulator SE, and its functionality. Marc also hinted that a Google plug-in might be in the pipeline for PCI (wink) and he mentioned that we are now Intuit Authorized QuickBooks Resellers! Marc and Matt also discussed AWS (Amazon Web Services) and PCI’s hosting services, including how we manage our servers and why we use Amazon Workspaces. Lastly, they discussed PCI’s hiring and training practices (including our training program for all new hires). At minute 41:41, Nicholas Orr from Goyacomes on to talk about their flagship product, BaseElements (which now has a new annual pricing model, making it more affordable and easier to upgrade) and RESTfm (cool story – FileMaker came to Goya to discuss RESTfm when they were creating the FileMaker Data API). Nick also discusses his vendor session, which touched on the differences between RESTfm and Data API, including format flexibility and authentication flexibility. The fourth and fifth guests on the show are James (Dave) Ramsey and Todd Geist from Geist Interactive at minute 52:15. In his segment, Todd’s talks about his 2017 FileMaker Award (for Advocacy) and Dave discusses their new product – FMPerception – and what exactly it is/does (hint: FileMaker DDR analysis tool that is crazy quick). Todd also talks about his training day session and what topics that training covered. The last guest on the show is Mark Richman from Skeleton Key at 1 hour and 4 minutes. Mark discusses Skeleton Key’s extensive participation in DevCon, including the many sessions he and his staff presented during the week (Security 101 and The ABCs of reselling; 7 Tips for Getting More out of FileMaker Cloud and Introduction to SQL and ODBC; The Power of Bi-Directional Relationships and Programming for Power Users). Mark also gave his opinions on the benefits of being a one-stop shop for your clients and the benefits of reselling FileMaker software. There are some great interviews here – hope you enjoy! View the full article

Important Information

By using this site, you agree to our Terms of Use.