diff --git a/src/stores/invoiceOutGlobal.js b/src/stores/invoiceOutGlobal.js
index cc8d86ea8..d8649753f 100644
--- a/src/stores/invoiceOutGlobal.js
+++ b/src/stores/invoiceOutGlobal.js
@@ -10,7 +10,6 @@ const { notify } = useNotify();
 
 export const useInvoiceOutGlobalStore = defineStore({
     id: 'invoiceOutGlobal',
-
     state: () => ({
         initialDataLoading: true,
         formInitialData: {
@@ -33,6 +32,7 @@ export const useInvoiceOutGlobalStore = defineStore({
         nRequests: 0,
         nPdfs: 0,
         totalPdfs: 0,
+        formData: null,
     }),
     actions: {
         async init() {
@@ -93,8 +93,6 @@ export const useInvoiceOutGlobalStore = defineStore({
         },
 
         async makeInvoice(formData, clientsToInvoice) {
-            this.invoicing = true;
-            const promises = [];
             try {
                 this.printer = formData.printer;
                 const params = {
@@ -119,11 +117,12 @@ export const useInvoiceOutGlobalStore = defineStore({
                     );
                     throw new Error("There aren't addresses to invoice");
                 }
+                this.invoicing = false;
                 this.status = 'invoicing';
-                for (let index = 0; index < this.parallelism; index++) {
-                    promises.push(this.invoiceClient(formData, index));
-                }
-                await Promise.all(promises);
+                this.formData = formData;
+                this.addressIndex = 0;
+                this.errors = [];
+                await this.invoiceClient();
             } catch (err) {
                 this.handleError(err);
             }
@@ -182,45 +181,42 @@ export const useInvoiceOutGlobalStore = defineStore({
             }
         },
 
-        async invoiceClient(formData, index) {
-            const address = this.addresses[index];
+        async invoiceClient() {
+            if (this.invoicing || this.nRequests >= this.parallelism) return;
+            const address = this.addresses[this.addressIndex];
+
             if (!address || !this.status || this.status == 'stopping') {
                 this.status = 'stopping';
                 this.invoicing = false;
                 return;
             }
             try {
+                this.invoicing = true;
                 const params = {
                     clientId: address.clientId,
                     addressId: address.id,
-                    invoiceDate: new Date(formData.invoiceDate),
-                    maxShipped: new Date(formData.maxShipped),
-                    companyFk: formData.companyFk,
-                    serialType: formData.serialType,
+                    invoiceDate: new Date(this.formData.invoiceDate),
+                    maxShipped: new Date(this.formData.maxShipped),
+                    companyFk: this.formData.companyFk,
+                    serialType: this.formData.serialType,
                 };
 
-                this.invoicing = true;
-
                 const { data } = await axios.post('InvoiceOuts/invoiceClient', params);
-
-                if (data) await this.makePdfAndNotify(data, address);
-                this.isInvoicing = false;
+                if (data) this.makePdfAndNotify(data, address);
             } catch (err) {
                 if (err?.response?.status >= 400 && err?.response?.status < 500) {
                     this.invoiceClientError(address, err.response?.data?.error?.message);
                     return;
                 } else {
-                    this.invoicing = false;
                     notify(
                         'invoiceOut.globalInvoices.errors.criticalInvoiceError',
                         'negative'
                     );
-                    throw new Error('Critical invoicing error, process stopped');
                 }
             } finally {
+                this.invoicing = false;
                 this.addressIndex++;
-                if (this.status != 'stopping')
-                    await this.invoiceClient(formData, this.addressIndex);
+                this.invoiceClient();
             }
         },
 
@@ -231,9 +227,11 @@ export const useInvoiceOutGlobalStore = defineStore({
                 const params = { printerFk: this.printer };
                 await axios.post(`InvoiceOuts/${invoiceId}/makePdfAndNotify`, params);
                 this.nPdfs++;
-                this.nRequests--;
             } catch (err) {
                 this.invoiceClientError(client, err.response?.data?.error?.message, true);
+            } finally {
+                this.nRequests--;
+                this.invoiceClient();
             }
         },