powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как хранить счетчик с номерами накладных
35 сообщений из 35, показаны все 2 страниц
Как хранить счетчик с номерами накладных
    #38352577
guest786
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. В данный момент пишу программу склад. В данной программе будут печататься накладные. Мне нужно чтобы при нажатии на кнопку "сформировать накладную", выводилась накладная под порядковым номером. Т.е сначала накладная номер 1, потом 2 и т.д. При этом данный номер чтоб заносился в БД. Как мне это реализовать и как сделать так чтобы при закрытии программы данный счетчик не сбивался, а наоборот сохранялся и выдавал нужный порядковый номер накладной. Заранее спасибо за ответ.

P.S. Пишу на C#.net VS2010, использую БД Access 2003.
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352594
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы через БД делал: номер накладной = номер ключевого поля - генерируется автоматически счетчиком при создании записи
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352668
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest786,

... перед выводом формы сделайте запрос к базе
Код: sql
1.
Select MAX(nomerDoc)


.. а потом ему +1
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352679
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotikguest786,

... перед выводом формы сделайте запрос к базе
Код: sql
1.
Select MAX(nomerDoc)


.. а потом ему +1

Лишь бы потом не возникло путаницы. Например, удалят из базы накладные, и max() предложит номер накладной, которая уже когда-то была. Потом мы захотим эту накладную вбить в 1с или в другую систему, а та скажет - извините, но такая накладная уже есть в системе.
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352712
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris

Лишь бы потом не возникло путаницы. Например, удалят из базы накладные, и max() предложит номер накладной, которая уже когда-то была. Потом мы захотим эту накладную вбить в 1с или в другую систему, а та скажет - извините, но такая накладная уже есть в системе.

... это у нас уже проходили, и пришли к тому, что номер должен быть уникальным для предприятия :)... но у ТС пока что хотят "раз-два-три" ...
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352763
guest786
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallaris,

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

carrotikguest786,

... перед выводом формы сделайте запрос к базе
Код: sql
1.
Select MAX(nomerDoc)


.. а потом ему +1

А как к нему прибавить +1. я подключаюсь к базе вот таким образом

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
database.Open();
            OleDbCommand SQLCommand = new OleDbCommand();
            SQLCommand.CommandText = _SQLQueryString;

            SQLCommand.Connection = database;
            int response = -1;
            response = SQLCommand.ExecuteNonQuery();
            database.Close();



Пишу запрос
Код: plsql
1.
_SQLQueryString = SELECT MAX(nomerDoc) FROM table



как теперь привязать результат к textboxу? Заранее спасибо
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352785
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest786,

вместо ExecuteNonQuery - пиши ExecuteScalar. Потом пиши textBox1.Text = response.ToString()
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352813
guest786
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallarisguest786,

вместо ExecuteNonQuery - пиши ExecuteScalar. Потом пиши textBox1.Text = response.ToString()

Спасибо большое за ответ. у меня response тип int . Студия ругается и выдает ошибку: " Не удается неявно преобразовать тип "object" в "int". Существует явное преобразование (возможно, пропущено приведение типов)"

Как ее исправить подскажите пожалуйста.Спасибо
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352815
guest786
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл добавить ругается именно на эту строчку

Код: c#
1.
response = SQLCommand.ExecuteScalar();
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352823
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно как то так.
1. Создание и инициализация таблицы.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE [dbo].[tblCounter](
	[Id] [int] NOT NULL,
	[Counter] [int] NOT NULL,
 CONSTRAINT [PK_tblCounter] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)) ON [PRIMARY]

insert into tblCounter (Id,Counter)
values(1,0)


2. Получение следующего номера, удаление промежуточных накладных ничего не испортит.

Код: sql
1.
2.
3.
4.
update tblCounter set Counter=Counter+1

select Counter from tblCounter
where Id=1
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352846
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest786Забыл добавить ругается именно на эту строчку

Код: c#
1.
response = SQLCommand.ExecuteScalar();



Ну приведи к типу:
Код: c#
1.
2.
3.
4.
5.
6.
try
{
response = (int)SQLCommand.ExecuteScalar();
}
catch
{}
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352881
guest786
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallarisguest786Забыл добавить ругается именно на эту строчку

Код: c#
1.
response = SQLCommand.ExecuteScalar();



Ну приведи к типу:
Код: c#
1.
2.
3.
4.
5.
6.
try
{
response = (int)SQLCommand.ExecuteScalar();
}
catch
{}




Пишет "Заданное приведение является недопустимым."
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352883
guest786
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВМожно как то так.
1. Создание и инициализация таблицы.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE [dbo].[tblCounter](
	[Id] [int] NOT NULL,
	[Counter] [int] NOT NULL,
 CONSTRAINT [PK_tblCounter] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)) ON [PRIMARY]

insert into tblCounter (Id,Counter)
values(1,0)


2. Получение следующего номера, удаление промежуточных накладных ничего не испортит.

Код: sql
1.
2.
3.
4.
update tblCounter set Counter=Counter+1

select Counter from tblCounter
where Id=1



Спасибо за ответ. Он значение изменяет в базе. а как его привязать к textboxу не подскажете?
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352908
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest786Пишет "Заданное приведение является недопустимым."

Ну епрст
Код: c#
1.
response = Convert.ToInt32(SQLCommand.ExecuteScalar().ToString());
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352977
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallarisguest786Пишет "Заданное приведение является недопустимым."

Ну епрст
Код: c#
1.
response = Convert.ToInt32(SQLCommand.ExecuteScalar().ToString());



ппц. дятя петя, вы дурак?

2 ТС - чего автоинкрементальное поле не используете?
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352984
guest786
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем Огромное Спасибо за помощь. Все заработало
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38352985
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winsky!ппц. дятя петя, вы дурак?

Нет, а ты?
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38353007
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallariswinsky!ппц. дятя петя, вы дурак?

Нет, а ты?
конечно!
я твой код уже на говнокод.ру запостил.
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38353009
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winsky!,

да ты крут!
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38353634
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
guest786Всем Огромное Спасибо за помощь. Все заработало
неправильно методически
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38353687
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, последовательность номеров накладных в складских задачах - это бред. Во-вторых, последовательность актуальна для счет-фактур и только. В-третьих, последовательность решается классическим инкрементом, а не макс + 1. В-четвертых, никаких удалений и быть не может, иначе будут дырки в диапазоне. Только сторнирование.
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38353733
wamaco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest786,
Номер накладной надо сохранять при записи накладной и не присваивать его при создании.
Я могу создать накл., и долго ее заполнять, а другой юзверь также создаст и заполнит быстрее, ему и номер раньше выдать надо, поэтому только при сохранении присваивать номер надо.
Как то так.
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38353799
Фотография _=ДОБРЫНЯ=_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotikPallaris

Лишь бы потом не возникло путаницы. Например, удалят из базы накладные, и max() предложит номер накладной, которая уже когда-то была. Потом мы захотим эту накладную вбить в 1с или в другую систему, а та скажет - извините, но такая накладная уже есть в системе.

... это у нас уже проходили, и пришли к тому, что номер должен быть уникальным для предприятия :)... но у ТС пока что хотят "раз-два-три" ...

+1. и не нужно придумывать и заниматься ерундой
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38532631
Neroly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wamacoguest786,
Номер накладной надо сохранять при записи накладной и не присваивать его при создании.
Я могу создать накл., и долго ее заполнять, а другой юзверь также создаст и заполнит быстрее, ему и номер раньше выдать надо, поэтому только при сохранении присваивать номер надо.
Как то так.
Согласна, что это разумнее. Не подскажете как это сделать?
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38535043
wamaco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nerolywamacoguest786,
Номер накладной надо сохранять при записи накладной и не присваивать его при создании.
Я могу создать накл., и долго ее заполнять, а другой юзверь также создаст и заполнит быстрее, ему и номер раньше выдать надо, поэтому только при сохранении присваивать номер надо.
Как то так.
Согласна, что это разумнее. Не подскажете как это сделать?

Делаете отдельную таблицу. В ней два поля. Идентификатор документа ( строка), нумератор (число).
Создаете одну запись с нач.номером. далее при записи документа присв.номер и увеличиваете нумератор на 1. Все в одной транзакции.
Все.
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38535207
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wamacoСоздаете одну запись с нач.номером. далее при записи документа присв.номер и увеличиваете нумератор на 1. Все в одной транзакции.
Все.
Отпустили 100 накладных за 10 дней. Теперь вспомнили, что нужно удалить 1-ую накладную, отпущенную в первый день. Твои действия? Не понимаю, чем тебе поможет отдельная табличка и чем она лучше хранения порядкового номера непосредственно в рабочей таблице.
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38536234
wamaco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУwamacoСоздаете одну запись с нач.номером. далее при записи документа присв.номер и увеличиваете нумератор на 1. Все в одной транзакции.
Все.
Отпустили 100 накладных за 10 дней. Теперь вспомнили, что нужно удалить 1-ую накладную, отпущенную в первый день. Твои действия? Не понимаю, чем тебе поможет отдельная табличка и чем она лучше хранения порядкового номера непосредственно в рабочей таблице.

Задним числом удалить накладную не верное решение. Снять участие в учете это можно.
Поэтому номер останется за существующей накладной, пусть и не участвующей в учете.
Второе, отдельная таблица будет хранить все нумераторы документов, это удобно.
Плюс есть возможность устанавливать нумерацию с любого номера.
Плюс легко скидывать нумерацию за периоды и т.д.
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38536298
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wamacoЗадним числом удалить накладную не верное решение. Снять участие в учете это можно.
Поэтому номер останется за существующей накладной, пусть и не участвующей в учете.
Правильно, этот процесс называется сторно, как я ранее и говорил.

wamacoВторое, отдельная таблица будет хранить все нумераторы документов, это удобно.
Плюс есть возможность устанавливать нумерацию с любого номера.
Плюс легко скидывать нумерацию за периоды и т.д.
Sequence?
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38536477
wamaco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot МСУ]wamacoSequence?

Sequence... Sequence...
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38536616
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одной строкой (начиная с SQL Server 2005), предпочтительно делать в отдельной транзакции:

Код: sql
1.
update [Sequence] set [Number] = [Number] + 1 output inserted.[Number]



Sequence -- это табличка с одним полем.
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38536790
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч,

Код: c#
1.
NEXT VALUE FOR MySequence
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38537157
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНахлобуч,

Код: c#
1.
NEXT VALUE FOR MySequence

"Не взлетит" (с)
Sequence NumbersThe sequence object generates numbers according to its definition, but the sequence object does not control how the numbers are used. Sequence numbers inserted into a table can have gaps when a transaction is rolled back, when a sequence object is shared by multiple tables, or when sequence numbers are allocated without using them in tables. When created with the CACHE option, an unexpected shutdown, such as a power failure, can lose the sequence numbers in the cache
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38537174
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvМСУНахлобуч,

Код: c#
1.
NEXT VALUE FOR MySequence

"Не взлетит" (с)
Sequence NumbersThe sequence object generates numbers according to its definition, but the sequence object does not control how the numbers are used. Sequence numbers inserted into a table can have gaps when a transaction is rolled back, when a sequence object is shared by multiple tables, or when sequence numbers are allocated without using them in tables. When created with the CACHE option, an unexpected shutdown, such as a power failure, can lose the sequence numbers in the cache

Взлетит. Выделил красным.

По поводу кэша изучаем матчасть.

МатчастьЕсли компонент Компонент Database Engine непредвиденно завершает работу (например, из-за сбоя электропитания), то последовательность перезапускается с номера, считываемого из системных таблиц (39). Все порядковые номера, выделенные в память (но не запрошенные пользователем или приложением), теряются. При такой обработке возможны пропуски в номерах, однако гарантируется, что одно значение ни в коем случае не будет дважды назначено одному объекту последовательности, если для нее не задан параметр CYCLE или не выполнен перезапуск вручную.
Кэш хранится в памяти путем отслеживания текущего значения (последнего назначенного) и количества значений, оставшихся в кэше. Таким образом, объем памяти, используемый для кэша, всегда равен размеру двух экземпляров типа данных объекта последовательности.
Если установить аргумент кэша в значение NO CACHE, то текущее значение последовательности будет записываться в системные таблицы при каждом использовании последовательности. Это может снизить производительность за счет увеличения числа обращений к диску, но снижает вероятность нежелательных пропусков номеров. Пропуски по-прежнему возможны, если номера запрашиваются с помощью функции NEXT VALUE FOR или процедуры sp_sequence_get_range, однако это означает, что пропущенные номера не используются либо используются в незафиксированных транзакциях.
Если в объекте последовательности используется параметр CACHE, то при перезапуске объекта последовательности или изменении свойств INCREMENT, CYCLE, MINVALUE, MAXVALUE или размера кэша кэш записывается в системные таблицы до выполнения изменения. Затем кэш перезагружается, начиная с текущего значения (т. е. числа не пропускаются). Изменение размера кэша вступает в силу немедленно.
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38537194
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУsphinx_mvпропущено...
"Не взлетит" (с)
пропущено...


Взлетит. Выделил красным.А роллбэк почему пропустил?
МСУПо поводу кэша изучаем матчасть.
Если стоит задача "получить номер документа без пропусков нумерациии", то на "автосчетчиках" любого вида она не решается.
Так что "не взлетит"... :)

А вот если завести табличку что-то типа "журнал регистрации документов" и брать номер документа уже из него, то может получиться...
...
Рейтинг: 0 / 0
Как хранить счетчик с номерами накладных
    #38537268
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvМСУпропущено...


Взлетит. Выделил красным.А роллбэк почему пропустил?
МСУПо поводу кэша изучаем матчасть.
Если стоит задача "получить номер документа без пропусков нумерациии", то на "автосчетчиках" любого вида она не решается.
Так что "не взлетит"... :)

А вот если завести табличку что-то типа "журнал регистрации документов" и брать номер документа уже из него, то может получиться...

Так я тоже могу руками крутануть номер в табличке и у тогда будут дырки. Точно так же и с сиквенсом. Нехрен его крутить тем, кому не нужно. Не вижу принципиальной разницы.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как хранить счетчик с номерами накладных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]