powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Нумерация строк
28 сообщений из 28, показаны все 2 страниц
Нумерация строк
    #39623161
alexxx69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Использую:ADO, SQL, Access. Помогите решить проблему.
В таблице есть поле NomerAkta:
01/18
02/18
03/18
и т. д.
(.../18 - это год, dm.ADOQueryNomerAkta.AsString+'/'+FormatDateTime('yy', now))

При ручном вводе номера акта, надо искать последний номер в таблице и вводить следующий номер.

Как сделать, чтобы при нажатии на кнопку номер акта увеличивался на+1 автоматически и
при смене года нумерация начиналась заново (01/18, 02/18, 03/18...... 01/19, 02/19, 03/19....)?????
...
Рейтинг: 0 / 0
Нумерация строк
    #39623163
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexxx69,

А что, в Access счетчиков нет?
...
Рейтинг: 0 / 0
Нумерация строк
    #39623169
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexxx69,

Если просто - SELECT MAX(NomerAkta) FROM ... . А если подумать - то тебе нужно внимательно почитать про бездырочную нумерацию документов - статьи в инете есть. И еще вопрос - NomerAkta у тебя хранимое поле или вычисляемое?
...
Рейтинг: 0 / 0
Нумерация строк
    #39623171
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenkoalexxx69,

А что, в Access счетчиков нет?

Вопрос через месяц будет - "удалили документ, сбилась нумерация" :)
...
Рейтинг: 0 / 0
Нумерация строк
    #39623172
alexxx69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko,
Есть, счетчик считает при добавлении новой строки, мне строку добавлять не надо, а поставить номер акта в имеющейся строке (она привязана к оборудованию) , а номера актов меняются
...
Рейтинг: 0 / 0
Нумерация строк
    #39623173
alexxx69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster,
хранимое
...
Рейтинг: 0 / 0
Нумерация строк
    #39623178
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexxx69Gerasimenko,
Есть, счетчик считает при добавлении новой строки, мне строку добавлять не надо, а поставить номер акта в имеющейся строке (она привязана к оборудованию) , а номера актов меняются
И как спасет твое
Код: sql
1.
SELECT MAX(NomerAkta) FROM 

при удалении не самого последнего документа?
Есть счетчик, и есть привязанный/не привязанный к конкретному состоянию счетчика документ. Все остальное: фантазии.
...
Рейтинг: 0 / 0
Нумерация строк
    #39623180
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasteralexxx69,

Если просто - SELECT MAX(NomerAkta) FROM ... . А если подумать - то тебе нужно внимательно почитать про бездырочную нумерацию документов - статьи в инете есть. И еще вопрос - NomerAkta у тебя хранимое поле или вычисляемое?А если режим многопользовательский, то вааще ахтунг будет :)
...
Рейтинг: 0 / 0
Нумерация строк
    #39623196
alexxx69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko,

В базе есть таблица "оборудование" - поля: год выпуска, год поступления, характеристики и т.д.

Это оборудование ставится и снимается, при установке пишется акт, который распечатывается и в программе не хранится кроме номера акта и даты установки. При снятии оборудования номер акта и дата установки из программы удаляются. На каждое установленное оборудование пишется акт

При следующей установки этого оборудования пишется новый акт ну и т.д.

база локальная
...
Рейтинг: 0 / 0
Нумерация строк
    #39623212
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexxx69Gerasimenko,

В базе есть таблица "оборудование" - поля: год выпуска, год поступления, характеристики и т.д.

Это оборудование ставится и снимается, при установке пишется акт, который распечатывается и в программе не хранится кроме номера акта и даты установки. При снятии оборудования номер акта и дата установки из программы удаляются. На каждое установленное оборудование пишется акт

При следующей установки этого оборудования пишется новый акт ну и т.д.

база локальная
Делаешь отдельную таблицу: счетчик.
При смене года обнуляешь ее.
Собственно: все.
...
Рейтинг: 0 / 0
Нумерация строк
    #39623220
alexxx69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko,

Мысль хорошая, а как при смене года обнулять??? Можно код?
...
Рейтинг: 0 / 0
Нумерация строк
    #39623223
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenko,

А я и не говорю, что SELECT MAX() хорошее решение :) Наоборот - толкаю ТС почитать статьи по его тематике.
...
Рейтинг: 0 / 0
Нумерация строк
    #39623232
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexxx69Gerasimenko,

Мысль хорошая, а как при смене года обнулять??? Можно код?
Я не знаю, как это делается в Access, но в SQL можно сделать Truncate
...
Рейтинг: 0 / 0
Нумерация строк
    #39623233
alexxx69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster,

номер акта не должен повторятся за год, оборудование сняли номер акта удалился,
оборудование ставится - присваивается новый номер акта (нумерация дырочная)
...
Рейтинг: 0 / 0
Нумерация строк
    #39623239
alexxx69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster,
SELECT MAX() для локальной базы хорошее решение.

Вопрос в том как в коде написать автоматическое увеличение номера акта (+1) от последнего максимального, хранящегося в поле таблицы и в новом году начинать новую нумерацию
...
Рейтинг: 0 / 0
Нумерация строк
    #39623259
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexxx69,

Если нумерация дырочная - то № акта у тебя будет равен значению счетчика. При смене года - старые данные отправляешь в таблицу-архив, оперативную таблицу чистишь и устанавливаешь счетчик обратно в 0. Собственно все...
...
Рейтинг: 0 / 0
Нумерация строк
    #39623300
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
номер акта(NomerAkta) хранить в отдельном поле, год акта(GodAkt) в отдельном
SELECT MAX(NomerAkta) FROM ...
WHERE GodAkt=2018(текущий год)
получилось Null значит номер акта будет 1
иначе результат +1
...
Рейтинг: 0 / 0
Нумерация строк
    #39623328
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81,

Выше почитай. Если будет несколько пользователей, заводящих акты - будет возможность выдачи одного и того же номера разным актам, что плохо. Я изначально говорил, что SELECT MAX() - плохо.
...
Рейтинг: 0 / 0
Нумерация строк
    #39623432
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster Если будет несколько пользователей, заводящих акты - будет возможность выдачи одного и того же номера разным актам, что плохо.
нужно формировать номер при сохранении записи, и не будет такой проблемы
...
Рейтинг: 0 / 0
Нумерация строк
    #39623473
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81,

Код покажи, как ты этот код формировать будешь. Для одновременной работы 100+ пользователей.
...
Рейтинг: 0 / 0
Нумерация строк
    #39623594
alexxx69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster,

Выше написал, что база локальная, пользователей-1- это я, программу делаю для себя
...
Рейтинг: 0 / 0
Нумерация строк
    #39623598
alexxx69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexer81,

дату использую системную и следовательно поле "год" не нужно.

Трудность с кодом ,
как прописать что с 01.01.2019, 01.01.2020, 01.01.2021 .....(системная дата) поле "номер акта" очищается и нумерация начинается с акта №1
...
Рейтинг: 0 / 0
Нумерация строк
    #39623611
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Плохо даже если действие в одной транзакции? Я про MSSQL 2012
...
Рейтинг: 0 / 0
Нумерация строк
    #39623647
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexxx69,

авторТрудность с кодом ,
как прописать что - не как, а где
...
Рейтинг: 0 / 0
Нумерация строк
    #39624984
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если хранить счетчик в отдельной таблице(файле)?
...
Рейтинг: 0 / 0
Нумерация строк
    #39624990
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bilovDarkMaster,

Плохо даже если действие в одной транзакции? Я про MSSQL 2012

Ну а подумать? Например у тебя 10 клиентов, заполняющих что-то там. Стартуем у каждого транзакцию - получаем 10 транзакций - у каждого клиента своя транзакция. Делаем SELECT MAX(). Получаем у КАЖДОГО клиента одинаковое значение для MAX(). Дальше обьяснять?
...
Рейтинг: 0 / 0
Нумерация строк
    #39624998
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Откройте для себя каунтеры и "select from final table".
И транзакции блокирующие не понадабятся.
...
Рейтинг: 0 / 0
Нумерация строк
    #39625759
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Понятно. К счастью эта вещь у меня стоит не для айдишника а для отображаемы номеров, один раз в год совпадет не страшно, и к тому же создают их не так часто. Хотел на более многочисленные документы поставить, теперь ещё подумаю. У меня раньше этот номер был уникальным в пределах года. И каждый год начинался с 1. Теперь наверное лучше всего сохранять и сам год в отдельном поле таблицы заголовков документов и поставить по этой паре полей уникальный индекс. В очень редких случаях будет вылетать с ошибкой ключа, не страшно. Это наверное 2-3 раза в год будет.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
CREATE UNIQUE NONCLUSTERED INDEX [NonClusteredIndex-20180404-215712] ON [dbo].[RetProvActN]
(
	[ActN] ASC,
	[NYear] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
go

create TRIGGER [dbo].[RetProvActN_FOR_INSERT]
   ON  [dbo].[RetProvActN]
   FOR INSERT
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	DECLARE @ActN int, @Y int
	set @Y = Year(GetDate())
	Select @ActN=isnull(Max(ActN),0) from RetProvActN where Year(D_Reg)=@Y  

    update RetProvActN SET D_Reg = GetDate(), ActN=i.N, NYear = @Y
    from RetProvActN d join
	(
	select i.ID, i.idVer, @ActN + Row_Number() OVER (ORDER BY i.ID asc) N  
	from RetProvActN d join	
        INSERTED i on d.ID = i.ID
	) i
	
    on d.ID = i.ID

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


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