Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Создание документа из другой программы (число прочтений - 943 )
Bosma
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 16. Января 2012
Создание документа из другой программы
08. Мая 2018 :: 14:05
Печать  
Коллеги, не нашел похожей темы.
Нужно из другой программы в 1С 7.7 (SQL) создать документ.
использую ADO.
всякие запросы на чтение имеющегося - не проблема.
А вот новые документы еще не создавал.
сотрел в профайлере - 7.7 что-то много чего делает.
насколько я погтмаю надо:
1. заблокировать 1Sjornal (не знаю как)
2. получить новый максимальный IDDOC (разберусь)
3. записать документ в 1Sjornal
4. записать шапку и ТЧ документа
5. записать новый максимальный ID
6. разблокировать 1Sjornal? или блокировка сама снимается после инсерта??

тапками не кидайтесь

вопрос именно в том чтоб правильно сделать, чтоб коллизий всяких не произошло.
  
Наверх
 
IP записан
 
Bosma
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 16. Января 2012
Re: Создание документа из другой программы
Ответ #1 - 11. Мая 2018 :: 08:37
Печать  
родилось вот это, из студии работает

Код (SQL)
Выбрать все
BEGIN TRAN
exec _1sp__1SJOURN_TLockX

declare @MAXIDDOC_UIDCTL char(9)
declare @MAXIDDOC_JOURN char(9)
declare @MAXIDDOC char(9)
declare @BDCODE char(3)
declare @NewIDDOC char(9)

set @MAXIDDOC_UIDCTL='         '
set @MAXIDDOC_JOURN='         '

exec _1sp__1SUIDCTL_GetMaxID 0,@MAXIDDOC_UIDCTL output

exec _1sp__1SJOURN_MaxID @MAXIDDOC_JOURN output

select @MAXIDDOC=case when @MAXIDDOC_UIDCTL < @MAXIDDOC_JOURN then @MAXIDDOC_JOURN else @MAXIDDOC_UIDCTL end

select top 1 @BDCODE=DBSIGN from _1SSYSTEM

select @NewIDDOC=dbo.Convert10To36(dbo.Convert36To10(left(@MAXIDDOC,6))+1)+@BDCODE

declare @DOCNO char(10)

set @DOCNO=(
			SELECT
				R)-3)+1),len(DOCNUMBER)-3) NEWNUMBER
			FROM
			(
				SELECT
					ISNULL(MAX(TMP.DOCNUMBER),'ЦР-'+'0000000') DOCNUMBER
				FROM(
					SELECT
						MAX(DOCNO) AS DOCNUMBER
					FROM _1SJOURN  WITH (NOLOCK)
					WHERE IDDOCDEF = 1731
						AND left(DOCNO,3)='ЦР-'
						AND left(DATE_TIME_IDDOC,4)='2018'

					UNION ALL

					SELECT
						MAX(DOCNO)  AS DOCNUMBER
					FROM _1SDNLOCK WITH (NOLOCK)
					WHERE CAST(LEFT(DNPREFIX,10) AS Int) = 1731
						AND left(DOCNO,3)='ЦР-'
				) AS TMP
			) AS TMP2
		)
select @DOCNO

INSERT INTO _1SJOURN...

INSERT INTO DH...

exec _1sp__1SUIDCTL_SetMaxID 0,@NewIDDOC

COMMIT TRAN

 



еще графы отбора надо бы писать в _1SCRDOC, но специфика такова, что с созданными документами в 7.7 будут работать пользователи и при последующей записи 1С сама сделает, что нужно (не проверено).

коллеги, есть замечания?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать