:: Вопросы по 1С
Об использовании информации 1С (8.1) в фокс приложениях
Александр Жевелев
Автор

Сообщений: 2724
Откуда: Новосибирск
Дата регистрации: 09.10.2003
PS.Вопросы предварительно были заданы В.Пирожкову, и на все вопросы были получены исчерпывающие ответы, за что ему отдельное спасибо! И по его рекомендации публикуются здесь, дабы последователи не наступали на теже грабли! Это был мой первый опыт контакта с 1С!

Исходная задача стояла таким образом:
Есть приложение, работающее с DBF таблицами в качестве исходной информацией для запроса
информация перенесена в 1С 8.1 , требуется с минимальными доработками приложения переключить на запрос информации из 1с

Исходный запрос:
SELECT UPPER(u_kart.in) as in,CHRTRAN(UPPER(u_kart.no),'H','Н') as no,CHRTRAN(UPPER(u_kml.fio),'H','Н') as fio,u_kart.st,u_kart.nap,u_kart.ost,u_kart.kn,SubsTR(u_kart.dw,1,2) as mv,SUBSTR(u_kart.dw,3,2) as gv ;
from u_kart,u_kml;
WHERE u_kart.kml=u_kml.kml;
order BY 1 INTO TABLE c:\robor\b_obort

после доработки это стало выглядеть так:
tekdt=DATE()
*cfirma='НПО "ЭЛСИБ" ОАО'
obj = CreateObject("V81.Application")
obj.Connect([Srvr="ERP";Ref="Enterprise-02";Usr="ЖевелевАГ";pwd=""])
USE IN SELECT('b_obort')
cfirma=obj.Справочники.Организации.НайтиПоКоду('000000001')
Файл=obj.NewObject('XBase')
Файл.Поля.Добавить("in","S",8,0)
Файл.Поля.Добавить("no","S",70,0)
Файл.Поля.Добавить("fio","S",31)
Файл.Поля.Добавить("st","N",18,2)
Файл.Поля.Добавить("nap","N",6,0)
Файл.Поля.Добавить("ost","N",15,2)
Файл.Поля.Добавить("kn","s",13,0)
Файл.Поля.Добавить("mv","n",2,0)
Файл.Поля.Добавить("gv","n",4,0)
NameBase = "c:\robor\b_obort.dbf"
Файл.СоздатьФайл(NameBase)
oQue=obj.NewObject('Запрос')
TEXT TO текст46 NOSHOW
ВЫБРАТЬ
МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.НаименованиеПолное КАК Наименование,
ВложенныйЗапрос.ИнвентарныйНомерРегл КАК ИнвентарныйНомер,
МЕСЯЦ(ВложенныйЗапрос.ДатаВводаВЭксплуатациюРегл) КАК МесяцВводаВЭксплуатацию,
ГОД(ВложенныйЗапрос.ДатаВводаВЭксплуатациюРегл) КАК ГодВводаВЭксплуатацию,
ВложенныйЗапрос.ПервоначальнаяСтоимостьБУ КАК ПервоначальнаяСтоимость,
ВложенныйЗапрос.ПервоначальнаяСтоимостьБУ - ВЫБОР
КОГДА СтоимостьОСБухгалтерскийУчетОстатки.АмортизацияОстаток ЕСТЬ NULL
ТОГДА 0
ИНАЧЕ СтоимостьОСБухгалтерскийУчетОстатки.АмортизацияОстаток
КОНЕЦ КАК ОстаточнаяСтоимость,
ВложенныйЗапрос.СрокПолезногоИспользованияБУ КАК СрокПолезногоИспользования,
МестонахождениеОСБухгалтерскийУчетСрезПоследних.МОЛ КАК МОЛ,
МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.АмортизационнаяГруппа КАК АмортизационнаяГруппа
ИЗ
РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&Период, ) КАК МестонахождениеОСБухгалтерскийУчетСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ВводНачальныхОстатковОСОС.ИнвентарныйНомерРегл КАК ИнвентарныйНомерРегл,
ВводНачальныхОстатковОСОС.ДатаВводаВЭксплуатациюРегл КАК ДатаВводаВЭксплуатациюРегл,
ВводНачальныхОстатковОСОС.СрокПолезногоИспользованияБУ КАК СрокПолезногоИспользованияБУ,
ВводНачальныхОстатковОСОС.ПервоначальнаяСтоимостьБУ КАК ПервоначальнаяСтоимостьБУ,
ВводНачальныхОстатковОСОС.ОсновноеСредство.Ссылка КАК ОсновноеСредствоСсылка
ИЗ
Документ.ВводНачальныхОстатковОС.ОС КАК ВводНачальныхОстатковОСОС
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПринятиеКУчетуОСОсновныеСредства.ИнвентарныйНомер,
ПринятиеКУчетуОСОсновныеСредства.Ссылка.Дата,
ПринятиеКУчетуОСОсновныеСредства.Ссылка.СрокПолезногоИспользованияБУ,
ПринятиеКУчетуОСОсновныеСредства.Ссылка.СтоимостьБУ,
ПринятиеКУчетуОСОсновныеСредства.ОсновноеСредство
ИЗ
Документ.ПринятиеКУчетуОС.ОсновныеСредства КАК ПринятиеКУчетуОСОсновныеСредства) КАК ВложенныйЗапрос
ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.Ссылка = ВложенныйЗапрос.ОсновноеСредствоСсылка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьОСБухгалтерскийУчет.Остатки(&Период, ) КАК СтоимостьОСБухгалтерскийУчетОстатки
ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = СтоимостьОСБухгалтерскийУчетОстатки.ОсновноеСредство
И МестонахождениеОСБухгалтерскийУчетСрезПоследних.Организация = СтоимостьОСБухгалтерскийУчетОстатки.Организация
ГДЕ
МестонахождениеОСБухгалтерскийУчетСрезПоследних.Организация = &Организация
УПОРЯДОЧИТЬ ПО
ИнвентарныйНомер
ENDTEXT
oQue.Текст=Текст46
oQue.УстановитьПараметр("Организация", cfirma)
oQue.УстановитьПараметр("Период", tekdt)
oRes = oQue.Выполнить().Выгрузить()
FOR EACH oRow IN oRes
Файл.Добавить()
Файл.in=oRow.ИнвентарныйНомер
Файл.no=oRow.Наименование
Файл.fio=oRow.МОЛ
Файл.st=oRow.ПервоначальнаяСтоимость
Файл.nap=oRow.СрокПолезногоИспользования
Файл.ost=oRow.ОстаточнаяСтоимость
Файл.kn=oRow.АмортизационнаяГруппа
Файл.mv=oRow.МесяцВводаВЭксплуатацию
Файл.gv=oRow.ГодВводаВЭксплуатацию
Файл.Записать()
ENDFOR
Файл.ЗакрытьФайл()
* release obj
obj.ЗавершитьРаботуСистемы(.F.)
obj=.null.
при этом на момент вопросов вместо кода выделенного жирным, стояли позиции, отмеченные курсивом
при этом получался пустой запрос
и выводилось вопрос о подтверждении закрытия 1с
разрешение этих вопросов - см. жирные строки.суть которых в следующем
в качестве значения параметра нужно передавать ссылку на найденный в базе объект (1)
а второе снимает дополнительный вопрос о закрытии 1с
по пути я сделал замеры времени до и после
было 0,56сек табла на файл-сервере
стало - коннект=8с+20с запрос=28сек сервера приложений и данных разнесены
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Саня в принципе можно было и не перегонять фирму в ссылку, хотя в ссылку будет правильнее
Можно было и так
МестонахождениеОСБухгалтерскийУчетСрезПоследних.Организация.Наименование = &Организация
...
oQue.УстановитьПараметр("Организация", cfirma)


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
Дмитрий Петров

Сообщений: 3083
Откуда: Пермь
Дата регистрации: 09.07.2001
Александр, немного не по теме, но мне показалось, что
быстрей проходит инициализация у комконнектора.. попробуй то же самое

obj1 = Createobject("V8.COMConnector")
obj = obj1.Connect([Srvr="ERP";Ref="Enterprise-02";Usr="ЖевелевАГ";pwd=""])
oQue =obj.Newobject("Запрос")

мне кажется быстрей так отрабатывает
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
Александр Жевелев
Автор

Сообщений: 2724
Откуда: Новосибирск
Дата регистрации: 09.10.2003
1)Петрову!
Цитата:
мне кажется быстрей так отрабатывает
да! спасибо!
2) то Piva
не понял, это место поподробнее пожалста, ведь написано же:
oQue.Текст=Текст46
oQue.УстановитьПараметр("Организация", cfirma)
oQue.УстановитьПараметр("Период", tekdt)
oRes = oQue.Выполнить().Выгрузить()
FOR EACH oRow IN oRes
Файл.Добавить()
Файл.in=oRow.ИнвентарныйНомер
Файл.no=oRow.Наименование
Файл.fio=oRow.МОЛ
Файл.st=oRow.ПервоначальнаяСтоимость
Файл.nap=oRow.СрокПолезногоИспользования
Файл.ost=oRow.ОстаточнаяСтоимость
Файл.kn=oRow.АмортизационнаяГруппа
Файл.mv=oRow.МесяцВводаВЭксплуатацию
Файл.gv=oRow.ГодВводаВЭксплуатацию
Файл.Записать()
ENDFOR
Файл.ЗакрытьФайл()
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Дык я к тому что можно передавать не ссылку на фирму а передавать ее название


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Некоторые вещи ограничены в использовании COMConnector поэтому приходится использовать именно Appication. Тут была задачка синхронизации двух баз (штатная синхронизаяция эээ мммм ну вобщем сломалась ) так вот получение GUID документов и справочников невозможно ни под ComConnector ни напрямую через Applicaton, пришлось использовать старые дедовские методы с переадресацией вызовов пришлось написать внешнюю обработку которая, работая в контексте COM объекта, все нормально возвращала в виде строк, из которых потом объект GUID получить запросто, но внешние доступны только в Application ;)


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
Александр Жевелев
Автор

Сообщений: 2724
Откуда: Новосибирск
Дата регистрации: 09.10.2003
что-то с названием у меня не срубило, и ты мне сам указал на то что символьную строку - это не правильно


Цитата:
надо сначала найти его как объект типа
Документы.чччч.НайтиПоКоду(или по наименованию)
полученный результат запихивать в запрос
ладно, проехали!
Попробовал по совету Д.Петрова

Цитата:
obj1 = Createobject("V8.COMConnector")
obj = obj1.Connect([Srvr="ERP";Ref="Enterprise-02";Usr="ЖевелевАГ";pwd=""])

но ругается на
Цитата:
obj.ЗавершитьРаботуСистемы(.F.)
что-то еще надо подкрутить?
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
Дмитрий Петров

Сообщений: 3083
Откуда: Пермь
Дата регистрации: 09.07.2001
Цитата:
obj.ЗавершитьРаботуСистемы(.F.)
что-то еще надо подкрутить?
АЛександр, может просто прибить объекты Rele...


Вадим, я возможно не совсем понял, но через комконнектор до символьного представления
GUID-дов я добирался как то так:

oRes = oQue.Выполнить().Выгрузить()
For Each oRow In oRes
uid= This.obj.String(oRow.Ссылка.УникальныйИдентификатор())
endfor
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Это на фоксе - да А 1C-ка при обработка из ComConnectоr
GUID=Строка(Объект.УникальныйИденификатор());

Возвращает строку "COMОбъект"
Может в 8.1 чета поменялось - не пробовал пока, Пока фигачим на 8.0


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Мануал
Цитата:
Синтаксис:
ЗавершитьРаботуСистемы(<Запрашивать возможность>)

Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Вроде нормально должен закрываться


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
Александр Жевелев
Автор

Сообщений: 2724
Откуда: Новосибирск
Дата регистрации: 09.10.2003
Цитата:
может просто прибить объекты
действительно!
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
Александр Жевелев
Автор

Сообщений: 2724
Откуда: Новосибирск
Дата регистрации: 09.10.2003
Цитата:
Вроде нормально должен закрываться
через V81.application -закрывается, а через connect ругается OLE.... ну вобщем как обычно,
а release obj решает все!
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
С точки зрения банальной эрудиции, приложение должно иметь метод типа "ВыходИзПриложения", ну а коннектор что то типа "ЗакрытСоединение". Я так думаю


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
AlexK

Сообщений: 2114
Откуда: Королев,Москва
Дата регистрации: 11.12.2000
Мое мнение - не туда идете, хотя конечно если в дальнейшем перейти в 1С
V81.application - тяжелейший объект

смотрите в сторону SQL, размещайте базу на SQL и
1. или на прямую обращайтесь к таблицам (в 8-ке есть функции возвращающие названия полей и таблиц)
2. или через Web-расширение


------------------
Береги природу, мать Вашу. Моя страничка www.genrep.net




Исправлено 2 раз(а). Последнее : AlexK, 10.09.08 10:07
Ratings: 0 negative/0 positive
Re: Об использовании информации 1С (8.1) в фокс приложениях
oleg_km

Сообщений: 487
Откуда: СПб
Дата регистрации: 02.12.2002
Александр Жевелев
Цитата:
Вроде нормально должен закрываться
через V81.application -закрывается, а через connect ругается OLE.... ну вобщем как обычно,
а release obj решает все!

Метод ЗавершитьРаботуСистемы(<Запрашивать возможность>) работает в V81.Application, т.к. в данном случае 1С запускается в виде отдельного exe, а при использовании V81.Connector в ваше приложение загружается просто dll поэтому действительно нужно просто прибить объект, хотя как я смотрел dll все равно из адресного пространства приложения все равно не выгружается
Ratings: 0 negative/0 positive


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

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

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