Генерация счетов - PullRequest
       13

Генерация счетов

2 голосов
/ 24 июня 2009

Мне нужно генерировать счета большими партиями, которые будут преобразованы в EDI и доставлены в наш штаб-квартиру. Существует таблица заказов со всеми поступающими заказами. В какой-то момент дня мне нужно взять набор (около 1 тыс.) И сгенерировать счета.

  1. Где было бы лучшее место для генерации номеров счетов? На сервере SQL Server? Или захватить пакет в приложение .NET, а затем сгенерировать там номера счетов? Номера счетов могут быть случайными, но не должны повторяться (в течение 3-4 лет). У меня есть максимум 12 цифр для игры, и я могу быть буквенно-цифровым. Где я могу найти информацию о создании номеров счетов-фактур.

Примечание. При создании счетов-фактур мне необходимо рассчитать итоговые суммы заказа и налог.

Буду признателен за ваш вклад.

Ответы [ 4 ]

4 голосов
/ 24 июня 2009

Номера счетов-фактур могут регулироваться правовыми требованиями (где я живу, они должны быть в последовательности, и я не думаю, что в последовательности могут быть пробелы).

Вы часто видите, что числа содержат элемент, который будет охватывать их во времени (например, год: 2009 03472). Таким образом вы минимизируете риск использования одного и того же номера дважды.

Вы говорите, что у вас есть ~ 1K счетов в день. Это означает, что 6-значный номер счета будет покрывать ваши потребности. Таким образом, 4-значный год, за которым следует шестизначный номер счета-фактуры с добавлением нуля, вероятно, должен помочь вам.

Я бы, вероятно, попросил базу данных сгенерировать их, чтобы они были уникальными.

1 голос
/ 24 июня 2009

Добавьте в свою базу данных таблицу, в которой будет храниться значение последнего использованного номера счета-фактуры, а также хранимую процедуру для увеличения этого значения и возврата нового значения для использования при создании счета-фактуры.

Когда вы сохраняете свой новый Счет-фактуру, позвоните в SP, чтобы получить следующий Номер счета-фактуры. Это одно из последних ваших действий - после проверки, но без перерыва перед записью на диск - чтобы попытаться минимизировать риск дыры "в вашей нумерации.

0 голосов
/ 09 ноября 2010

Я думаю, что если нет законов, ограничивающих правила создания идентификатора счета-фактуры, это может быть то, что вы хотите.

Теперь у меня есть хороший пример о:

На самом деле я программирую систему счетов-фактур, и мне пришлось последовательно генерировать свой идентификационный код, и у меня возникли некоторые пробелы, потому что, когда клиент, например, расторг контракт с компанией, я уже однажды генерировал 12 счетов-фактур.

(потому что здесь мы являемся компанией-провайдером, и контракт должен составлять 6, 12 или 24 месяца)

Я получил пробел в своей базе данных, потому что пользователи системы удалили отмененные счета. Если мне действительно нужен порядковый номер, у меня проблема с законом. И у меня есть много других ситуаций, которые дали мне пробел в моем последовательном номере счета.

Я действительно не знаю, как избежать такого рода проблем, потому что есть множество ситуаций, когда это происходит. Любая идея?

0 голосов
/ 24 июня 2009

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

Если вам не нужна нагрузка по проверке базы данных и вы можете быть уверены, что другие процессы не будут мешать, вы можете использовать DateTime.UtcNow и преобразование Base64. Действительно неуклюжая иллюстрация может выглядеть примерно так:

Convert.ToBase64String(new byte[] { (byte)DateTime.UtcNow.Year, 
                                    (byte)DateTime.UtcNow.Month,
                                    (byte)DateTime.UtcNow.Day,
                                    (byte)DateTime.UtcNow.Hour,
                                    (byte)DateTime.UtcNow.Minute,
                                    (byte)DateTime.UtcNow.Second,
                                    (byte)DateTime.UtcNow.Millisecond })

Или

Convert.ToBase64String(new byte[] { (byte)DateTime.UtcNow.Ticks })

Возможно, вас больше заинтересует преобразование Base32 (в нем используются буквы AZ и цифры 2-7), хотя нет собственного преобразования .Net, поэтому вам придется искать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...