Имя: Пароль:
1C
1C 7.7
v7: Перенумерация документов SQL запросом
0 zenik
 
24.05.16
11:19
Категорически приветствую. Предыстория: каким то образом в одном из доков нумератор пропустил 7000 номеров (предполагаю или рабочей датой прошлого года или перетащили док из прошлого года - не суть). Был номер ТИнв1-9999, потом ТИнв1-1000. И теперь все новые доки ТИнв1-1000 и естественно при попытке записать - номер не уникальный. Поле номера пользователю не доступно.
Вот думаю как малой кровью перенумеровать... Поискал обработки, но они все "УстановитьНовыйНомер" и "Записть"... Не пойдет, так как документ будет перепроводиться при записи, а это долго.
Решил я напрямую заменить номера в SQL. Думаю это не сильно аморально?
Так вот, рассчитать новые номера у меня ума хватило, а вот сделать update результатами из другой таблицы - я такого не делал и не представляю.
Собсно запрос:

DECLARE @TABLE TABLE
(
    IDENT INT IDENTITY NOT NULL,
    DOCNO varchar(10) NULL,
    ROW_ID INT NOT NULL
)
INSERT INTO @TABLE (ROW_ID)

SELECT
    ROW_ID
FROM
    dbo._1SJOURN AS T1
WHERE
    T1.IDDOCDEF = 1434
    AND LEFT(T1.DATE_TIME_IDDOC,4) = '2016'
    AND LEFT(T1.DOCNO,1) = 'Т'
ORDER BY
    T1.DATE_TIME_IDDOC

UPDATE @TABLE SET DOCNO = 'ТИнв1-'+RIGHT('0000000000'+CAST(IDENT AS varchar(4)),4)

SELECT * FROM @TABLE

В итоге в @TABLE в DOCNO у нас новый номер документа его надо записать в DOCNO в dbo._1SJOURN. Как ?
1 ДенисЧ
 
24.05.16
11:21
ПриЗаписиПерепроводить(0) уже не модно?
2 zenik
 
24.05.16
11:23
Я хотел без правки конфы обойтись :\
3 Злопчинский
 
24.05.16
11:24
(0) "УстановитьНовыйНомер" и "Записть"... Не пойдет, так как документ будет перепроводиться при записи, а это долго."
- ты не поверишь, но программная запись объекта-документа не вызывает его проведение.
4 zenik
 
24.05.16
11:24
там и приЗаписи() хватает делов...
5 Злопчинский
 
24.05.16
11:25
(2) используй штатную "Универсальный подбор объектов" и с ее помощью перенумеруй как сочтешь нужным. Со штатным перенумератором могут быть проблемы в том случае если для номера использован нумератор, который задействован в нескольких видах документов
6 zenik
 
24.05.16
11:26
(5) К этому виду документа нумератор не привязан.
7 zenik
 
24.05.16
11:30
UPDATE dbo._1SJOURN SET dbo._1SJOURN.DOCNO = T.DOCNO FROM @TABLE AS T WHERE dbo._1SJOURN.ROW_ID = T.ROW_ID
И все получилось. Спасибо за внимание :)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший