:: Вопросы по 1С
И снова Загрузка операций в 1С
Равиль

Сообщений: 6604
Откуда: Уфа
Дата регистрации: 01.08.2003
Всем привет - в 1С есть штатный механизм загрузки из xml - мне показали пример для переноса из Торговли в Бухгалтерию (DTr9_Ac4.xml) - смотрю на него и грустно - немаленький файл ))
Из www.its1c.ru понял, что используются некие правила обмена описанные уже в других xml - RTr9_Ac4 и RAc4_Tr9 - их еще не видел ))
Вопрос - насколько перспективна попытка разобраться в этой кухне и из своего приложения на фоксе лепить файл обмена - никто не пробовал ?


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: И снова Загрузка операций в 1С
PaulWist

Сообщений: 14720
Дата регистрации: 01.04.2004
Равиль привет.

Для УРБД делал такой финт, в конфигурации ОбщиеМодули пишешь свой модуль для выгрузки-загрузки.

Из фокса обращение:

obj1cv8.ОбщиеМодули.МойОбщийМодуль.ПроцедураВыгрузки()


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: И снова Загрузка операций в 1С
Равиль

Сообщений: 6604
Откуда: Уфа
Дата регистрации: 01.08.2003
Паш, спасибо - это я понимаю - ты выгружаешь из одной 1С в другую - у меня же задача из своей базы крутящейся на фоксе создать такой файл, чтоб в 1С его загружали без меня ))


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: И снова Загрузка операций в 1С
Taran

Сообщений: 13774
Откуда: Красноярск
Дата регистрации: 16.01.2008
Равиль. в ветке про фокс глянь мой пост.
forum.foxclub.ru



Исправлено 1 раз(а). Последнее : Taran, 23.11.09 23:20
Ratings: 0 negative/0 positive
Re: И снова Загрузка операций в 1С
Равиль

Сообщений: 6604
Откуда: Уфа
Дата регистрации: 01.08.2003
Олег, спасибо
Правда в примере только отрывок - похоже до EndWith там еще много кода, да еще и ВО_Строки надо заполнять )))
Тоже игрался в свое время с 1С через com-объект (как и многие из нас) - такие решения симпатичны, но как показывает практика - часто требуют сопровождения на месте в случае нестандартных конфигураций у разных клиентов. К тому же неприменимы в тех случаях, когда фокс и 1С на разных компьютерах.
Хочется сделать нечто универсальное - например файл, который могли бы отослать бухгалтеру по майлу - поэтому сижу разбираюсь со структурой вышеупомянутых xml, чтобы лепить их самому ))


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: И снова Загрузка операций в 1С
Taran

Сообщений: 13774
Откуда: Красноярск
Дата регистрации: 16.01.2008
2Равиль.
Да, действительно кода не мало.
Но:
1.XML универсально, что не всегда лучше.
2.XML также требует донастройки при изменении конфы.
3.теоретически и практически ясно что на парсинг XML тратится много системных ресурсов.
4.Однозначно файл XML больше по размеру чем DBF при том же объеме данных.
Цитата:
часто требуют сопровождения на месте в случае нестандартных конфигураций у разных клиентов. К тому же неприменимы в тех случаях, когда фокс и 1С на разных компьютерах.
На разных машинах?
Ну так и делай на машине с фоксбазой - COM для формирования промежуточных файлов.
На машине с 1С-делай COM который коннектится к 1C-COM.
И на любой рабочей станции EXEшник для управления.
Данные между машинами любыми путями, по расшаренной папке например или по email.

Насчет доработок непосредственно обработки документов.
четвертый файл, который бадет задействован - непосредственно и есть обработчик всего.
Он лежит отдельным пргшником (или .TXT)
В моем примере примерно 85% повторяет синтаксис 1С, остальное доделать не вопрос через #DEFINE.
Кусок из DLL для 1С машины
*BEG:==============
*#: GetAppTask(tcFileEXT, tcSrcCode, taParam)
*D: Получает исполняемую задачу и подключает ее
*>: tcFileExt + Расширение файла - задачи
*>: tcSrcCode + Подключаемый модуль (без расширения)
*>: taParam Параметры(Название, Тип значения, Значение)
PROCEDURE SetAppTask(tcFileExt as String, tcSrcCode as String, taParam as array) as Logical
EXTERNAL ARRAY taParam
LOCAL loErr as Exception
LOCAL lcFileTask ,; && Файл для сохранения задачи
i ,; && Перебор параметров
lcEnvName ,; && Название параметра
lcValType ,; && Тип значения
l_EnvVal && Значение
lcFileTask = SYS(2015)
WITH this
.oAppTask = .F.
DO CASE
CASE VARTYPE(tcSrcCode) # 'C' OR VARTYPE(tcFileExt) # "C"
.SendMessage("ERR", 'TaskModule: Не верный параметр: файл-сценария')
RETURN .F.
*!* CASE FILE(this.DirExchange+lcFilePRG+'.FXP')
*!* TRY
*!* DO (this.DirExchange+lcFilePRG) WITH this &&, lnTypeID &&, lcMode
*!* this.SendMessage(,'END')
*!* CATCH TO loErr
*!* this.SendMessage('Ошибка подключения' +loErr.Message, 'ERR',,loErr)
*!* ENDTRY
OTHERWISE
STRTOFILE(tcSrcCode, .DirTmp+lcFileTask+"."+tcFileExt)
IF tcFileExt == "PRG"
COMPILE (.DirTmp+lcFileTask+"."+tcFileExt)
ENDIF
.SendMessage("INF", 'Подключаю задачу')
TRY
DO (.DirTmp+lcFileTask) WITH this
CATCH TO loErr
.SendMessage("ERR", "Ошибка при подключении задачи",, loErr)
ENDTRY
Кусок из отдельно лежащего PRG
PROCEDURE Init(toRemCOM as xols8mt.ExtRel)
PUBLIC LF
LF = CHR(13)+CHR(10)
SET ...
WITH this
.oRemCOM = toRemCOM
IF VARTYPE(toRemCOM.oExtBase) = "O"
.oExtBase = toRemCOM.oExtBase
IF VARTYPE(toRemCOM.oExtBase.Метаданные) = "O" AND VARTYPE(toRemCOM.oExtBase.Метаданные.Version) = "O"
.ВерсияКонфигурации = toRemCOM.oExtBase.Метаданные.Version && ВерсияКонфигурации
ENDIF
ENDIF
.КаталогРабочейБазы = toRemCOM.DirDataWrk
.КаталогОбмена = toRemCOM.DirExchange
ENDWITH
ENDPROC
и т.д.
намудрено все было до безобразия, но никакими другими путями не добиться желаемой скорости.
1С запущенная визуально конкретно занимает больше ресурсов нежели 1C-Connector. Обработка сообщений видимо и лишние модули в памяти.
Как то уже писал, повторюсь: создание и проводка документа при выгрузке из фокса через connector занимает 3-7 секунд.
Перепроводка силами 1С 15-20.
А если выгрузка раз в месяц, то это выливается в несколько часов разницы.
Плюс на время выгрузки всех надо бы выгонять из 1С, поскольку:
если на одной машине идет конкретная обработка и часто (и надолго) блокирует документы, то простые операторы получат сообщение об отказе.
Ну, а на фоксе ж элементарно вставишь тайм-аут через каждые 5 документов =20сек. (есть гдето в 1С параметр - время ожидания блокировки, часто видел установлено 20 сек.
Ну и собственно вопрос с выгоном всех из базы. Или на 30минут или на 10 часов?
!+ запуск по расписанию интегрированному в интерфейсный EXEшник.
P.S.----
не исключаю что вся проделанная работа это просто спортивный интерес и нежелание сваливать с фокса, а также игрушки в написание 1С-подобного синтаксиса и межмашинной обработки.
и еще один плюс: загружать серьезную обработку надо на машине с базой 1С (не SQL версия), а при расположении твоегоо COM а нет необходимости скакать по машинам или рулить терминал (лицензия и пр.).



Исправлено 2 раз(а). Последнее : Taran, 24.11.09 09:58
Ratings: 0 negative/0 positive
Re: И снова Загрузка операций в 1С
Равиль

Сообщений: 6604
Откуда: Уфа
Дата регистрации: 01.08.2003
Видно что в 1с Олег как рыба вводе - это хорошо - будем обращаться если что


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: И снова Загрузка операций в 1С
Taran

Сообщений: 13774
Откуда: Красноярск
Дата регистрации: 16.01.2008
Да куда ж от нее денешься. FoxPro "помирает" уж лет 20. :beer2:
Не то, чтобы я сильно знаю 1С, просто нравится делать интеграцию с внешними программами, было дело и с БЭСТом интегрировался.
Ну и конечно амбиции: Быстрее и надежнее.
Обращайся. \m/
Ratings: 0 negative/0 positive
Re: И снова Загрузка операций в 1С
oleg_km

Сообщений: 487
Откуда: СПб
Дата регистрации: 02.12.2002
Только мужики, давайте все-таки казывать версию 1С: 7.7 или 8?
Ratings: 0 negative/0 positive
Re: И снова Загрузка операций в 1С
Юрий Чувашов

Сообщений: 278
Откуда: г.Серпухов
Дата регистрации: 17.05.2005
Я вот тоже сейчас подумываю насчет переноса.
Только просматривая форум к сожалению не нашел варианта для SQL-версии 1с, и запускается 1с через терминал, а тут все как-то кулуарно.
или может при подключении к 1с не важно где находится 1с и SQL?

Сейчас работает следующая схема :
В фоксе делается таблица для 1с, а в 1с(7.7 SQL) эта таблица заливается.

А Если в фоксе загрузка в 1с идет быстрей то наверно имеет смысл заливать эти данные в фоксе.
и конечно при загрузке идет проверка, в данном случае загружаются накладные на продукцию,
Если есть накладная, то проверяется значение каждой позиции накладной, при несовпадении данных делается исправление и накладная перепроводится,
если накладной нет, то она добавляется и проводится.
Ratings: 0 negative/0 positive
Re: И снова Загрузка операций в 1С
Taran

Сообщений: 13774
Откуда: Красноярск
Дата регистрации: 16.01.2008
2 Юрий Чувашов
Насколько я понимаю, то:
если заполнение базы идет штатными средствами 1С (OLE, COM etc.) то разница в работе SQL и file-version только в строке подключения к 1С. А далее все единообразно.
Не знаю, к сожалению или нет, но я не внедрял 1С SQL и особо не тестил.
Обратную операцию твоей (2Юрий) задаче делал - перенос из 1С-SQL на фокс. Падала эска как это не парадоксально, даже по терминалом явно проигрывала в скорости. А VFP & native DBF держались.
Насчет скорости мысли такие: 1ц теряет в скорости из-за:
1.визуальной отработки во время переноса.
2.множества проверок на валидность кода и данных в стандартных процедурах переноса данных.
В своей-же процедуре ТЫ делаешь и отвечаешь "за базар". Тестишь все на этапе разработки и отдаешь "пушку".
ИМХО.

P.S.Старею... забыл. К 1С-SQL тоже цеплялся из фокса и заполнял таблицы и поля физически, а не через функции 1С-COM. Подзабыл чутка.



Исправлено 1 раз(а). Последнее : Taran, 04.12.09 20:42
Ratings: 0 negative/0 positive
Re: И снова Загрузка операций в 1С
Taran

Сообщений: 13774
Откуда: Красноярск
Дата регистрации: 16.01.2008
2Юрий Чувашов
из архива кусок. За работоспособность не отвечаю.
	*BEG:˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜#1297
	*#:	ConnectExtApp(cAppType, cAppVer)
	*D:	Выполняет подключение к внешнему коннектору (COM), например: "V81.COMConnector"
	*>:	tcAppType		Тип внешней базы данных, например "FILE"
	*>:	tcAppVer		Версия внешней базы данных, например "8.1"
	PROCEDURE ConnectExtApp(tcAppType as String, tcAppVer as String) as Logical
		LOCAL	loErr	AS Exception	
		LOCAL loApp

		WITH this
			tcAppType		= EVL(tcAppType, 'FILE')
			tcAppVer		= EVL(tcAppVer, '7.7')
			
			tcAppType		= ALLTRIM(tcAppType)
			tcAppVer		= ALLTRIM(tcAppVer)
			.ExtAppType	= tcAppType
			.ExtAppVer	= tcAppVer
			
			DO CASE
			CASE tcAppType = "FILE"
				.SendMessage("INF",	[Создаю объект "COMConnector"])
				TRY
					DO CASE
					CASE tcAppVer = "7.7"
*						loApp	= CREATEOBJECT('V1CEnterprise.Application')
*						loApp	= CREATEOBJECT('V77M.Application') && сетевая
						loApp	= CREATEOBJECT('V77.Application') && версия зависимый ключ
						IF VARTYPE(loApp) # "O"
							loApp	= CREATEOBJECT('V77L.Application') && локальная
							IF VARTYPE(loApp) # "O"
								loApp	= CREATEOBJECT('V77M.Application') && сетевая
								IF VARTYPE(loApp) # "O"
									loApp	= CREATEOBJECT('V77S.Application') && SQL
									IF VARTYPE(loApp) # "O"
										loApp	= CREATEOBJECT('V1CEnterprise.Application') && независимый ключ
									ENDIF
								ENDIF
							ENDIF
						ENDIF
						.App	= loApp
					ENDCASE
					.SendMessage("END")
				CATCH TO loErr
					.SendMessage("ERR",	"Ошибка создания внешнего коннектора",,loErr)
				ENDTRY
				
				IF VARTYPE(loErr) = 'O' OR ISNULL(.App)
					RETURN .F.
				ENDIF
			OTHERWISE
				.SendMessage("ERR",	"Неизвестный тип и версия внешнего приложения")
				RETURN .F.
			ENDCASE
		ENDWITH
	ENDPROC
	*END:¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Ratings: 0 negative/0 positive
Re: И снова Загрузка операций в 1С
alw39
Автор

Сообщений: 17
Дата регистрации: 04.12.2009
Загружал доки из фокса простой обработкой 1c используя XBase,-содал необходимый документ, из дбф получил реквизиты нашел их в объектах 1с,заполнил реквизиты документа, провел и все дела.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 1 (Гостей: 1)

© 2000-2024 Fox Club 
Яндекс.Метрика