-    # save detail record in invoice table
-    my ($invoice_id) = selectfirst_array_query($form, $dbh, qq|SELECT nextval('invoiceid')|);
+    CVar->get_non_editable_ic_cvars(form               => $form,
+                                    dbh                => $dbh,
+                                    row                => $i,
+                                    sub_module         => 'invoice',
+                                    may_converted_from => ['delivery_order_items', 'orderitems', 'invoice']);
+
+    if (!$form->{"invoice_id_$i"}) {
+      # there is no persistent id, therefore create one with all necessary constraints
+      my $q_invoice_id = qq|SELECT nextval('invoiceid')|;
+      my $h_invoice_id = prepare_query($form, $dbh, $q_invoice_id);
+      do_statement($form, $h_invoice_id, $q_invoice_id);
+      $form->{"invoice_id_$i"}  = $h_invoice_id->fetchrow_array();
+      my $q_create_invoice_id = qq|INSERT INTO invoice (id, trans_id, position, parts_id) values (?, ?, ?, ?)|;
+      do_query($form, $dbh, $q_create_invoice_id, conv_i($form->{"invoice_id_$i"}),
+               conv_i($form->{id}), conv_i($position), conv_i($form->{"id_$i"}));
+      $h_invoice_id->finish();
+    }