Регистрация Правила Главная форума Поиск |
0
- 06.05.2015 - 13:27
|
Ситуевина: Подключаюсь из 7-й базы к 7-й по OLE, для закрытия OLE-базы использую метод: ДБ.ЗавершитьРаботуСистемы(0) Подключаюсь из 8-й базы к 7-й, не работает этот метод. Как еще можно закрыть базу? | |
1
- 06.05.2015 - 13:32
| создать в 7ке функцию завершения и вызвать ее | |
2
- 06.05.2015 - 13:39
|
попробовать через оле.ExecuteBatch("ЗавершитьРаботуСистемы(0)") для "встроенных функций" желательно использовать Англоязычный синоним. 1С-Предприятие в качестве OLE Automation сервера имеет 4 метода: Initialize() - выполнить инициализацию системы 1С-Предприятие. CreateObject() - Создает объект агрегатного типа данных 1С-Предприятия и возвращает ссылку на него. EvalExpr() - Вычислить выражение системы 1С-Предприятие. ExecuteBatch() - Выполнить последовательность операторов системы 1С-Предприятие. http://www.softpoint.ru/article_prn_id90.htm | |
3
- 06.05.2015 - 13:58
|
(1) Вносить изменения в конфигу - нежелательно. Там баз под 300 шт. (2) Не прошло через ExecuteBatch. База так и осталась висеть. Причем даже после закрытия обработки в 8-ке, откуда она открывалась. В аналогичной ситуации с 7-ой, при закрытии обработки - ОЛЕ-базы закрывались сами. | |
4
- 06.05.2015 - 14:26
| (2) А сейчас сработало. Странно все как-то. | |
5
- 06.05.2015 - 14:51
|
а какая разница откуда Оле вызывать? хоть из javascript. главное правильно передавать команды и что бы принимающая сторона их понимала. | |
6
- 06.05.2015 - 15:09
|
(5) Да вот, тоже не понимаю, какая разница откуда. Но почему из 7.7 работает такой метод: Ит.ИспользоватьСубконто(,,1);//где Ит = ДБ.CreateObject("БухгалтерскиеИтоги"); А из 8.3 на этой строке прекращается выполнение процедуры? | |
7
- 06.05.2015 - 15:10
|
4-US1C > Ничего странного. Надо просто вызвать этот метод, и он сработает. Проверено. И еще надо чуточку подумать как он сработает ;) | |
8
- 06.05.2015 - 15:23
|
6-US1C > из 8.3 с какой ошибкой прекращается? повторюсь, OLE это "транспорт" и транспорт системы, поэтому лучше использовать аналоги латинские функций. | |
9
- 06.05.2015 - 15:26
|
6-US1C > При использовании OLE-компоненты надо держать в голове несколько правил. В частности, этой компоненте не доступен интерактивный контекст, который обязательно существует при вызове конфы в "штатном" режиме. И OLE-компонента не любит пропущенные аргументы. | |
10
- 06.05.2015 - 15:35
|
(8) Использовал UseSubconto. Те же яйца, вид сбоку. (9) Вот именно с такими (пропущенными) аргументами у меня работает обработка в 7.7. Такое чувство, что в 8-ке OLE-база ведет себя иначе. Например, в 7.7 канает такой вызов: Ит.ИспользоватьПланСчетов(ДБ.ПланыСчетов.Основной) ; А в 8-ке только так прошло: Ит.ИспользоватьПланСчетов(ДБ.ПланыСчетов.ЗначениеП оИдентификатору("Основной")); | |
11
- 06.05.2015 - 15:37
|
(8) перехватил ошибку: Не удалось получить обороты по счетам 1-й группы. ({Форма.Форма.Форма(336)**: Ошибка при вызове метода контекста (UseSubconto): Типы не совпадают (1)) | |
12
- 06.05.2015 - 15:38
|
8-endfilm > В принципе, можно и по русски :) Но помнить про ключ локализации при этом. Винда не обязана знать (и не знает) такие тонкости. Безопаснее, конечно, использовать команды на латинице, но и это ничего не гарантирует, ибо поисковый индекс по наименованиям в "семерке" зависит от локализации. Поэтому 1С не рекомендует OLE в роли связующего звена. P.S. При использовании клиента и сервера на локализованных виндах трудностей с русскоязычными командами не возникало. | |
13
- 06.05.2015 - 15:39
|
10-US1C > в 8ке провели унификацию. а в 7ке использовали "постановки", там был не чистый OLE, а с "препроцессором". Вот и понимала она твои переходы по объектам через "." | |
14
- 06.05.2015 - 15:41
| 11-US1C > вот тебе и ответ - пропущенный параметр (1) преобразован не пойми во что. | |
15
- 06.05.2015 - 15:44
|
12-VZ > согласен с PS. Но в отдельном случае, с исторически доставшимся обменом по ОЛЕ, натыкаюсь на то что в отладчике на русские имена ругается, и тут же на английские отвечает. Винда и там и там локализованная. | |
16
- 06.05.2015 - 15:48
| (14) А как мне передать пустой параметр (1)? Если бы какое-то конкретное значение - еще туда-сюда. Мне же нужно именно опустить значение, чтобы запрос по бухитогам собрал данные по всем субконто у требуемых счетов. | |
17
- 06.05.2015 - 15:53
|
16-US1C > 4. Методы: EvalExpr() - вычислить выражение. Синтаксис метода такой: EvalExpr(<СтрокаВыражения>), где: <СтрокаВыражения> - строковое выражение, записанное на встроенном языке 1С-Предприятия. Результатом выражения может быть число, строка, дата или значение любого агрегатного типа данных. Результат с неопределенным типом преобразуется к строковому типу. | |
18
- 06.05.2015 - 15:54
| хотя в этом случает ExecuteBatch() | |
19
- 06.05.2015 - 15:55
|
14-endfilm > Этот пропущенный параметр просто не контролирует незавершенные интерактивные сеансы. Не в этом дело. Правильно обратить внимание на предопределенную функцию (которая есть во всех типовых) ПриЗавершенииРаботыСистемы() | |
20
- 06.05.2015 - 15:55
| БазаОЛЕ.ExecuteBatch("Ит.ИспользоватьСубконто(,,1) ;"); | |
21
- 06.05.2015 - 15:57
| 19-VZ > а если не типовая? если нет так такой "предопределенной"? | |
22
- 06.05.2015 - 16:03
|
16-US1C > Нет такой сущности, как "пустой" параметр. Это кухонный язык. Правильно: "значение по умолчанию". Часто совпадает с "желаемым". Но только "часто". А если "дефолтное" хоть как-то зависит от "контекста"... В общем, OLE много имеет общего с шаманством. Бубен, заячья лапка, и бусы из CD :D | |
23
- 06.05.2015 - 16:05
| 21-endfilm > Что значит "если"? Тебе при разработке завязывают глаза? | |
24
- 06.05.2015 - 16:13
|
23-VZ > если говорить в частном случае то конечно знаешь функции конфигурации и другие ее прелести. но в рамках темы: US1C (1) Вносить изменения в конфигу - нежелательно. Там баз под 300 шт. | |
25
- 06.05.2015 - 16:19
|
(22) В данном случае именно "пустой". В нем нужно передать ВидСубконто, по которому будет сделан запрос. Мне же нужно, чтобы запрос обошел все субконто указанных счетов. (20) Попробую так. Я делал несколько иначе: Ит.ExecuteBatch("ИспользоватьСубконто(,,1)"); Не взлетело. | |
26
- 06.05.2015 - 16:24
|
(20) Спасибо. Так сработало. Теперь засел на "ВыполнитьЗапрос()". Это какая-то засада. | |
27
- 06.05.2015 - 16:35
|
24-endfilm > И не надо. Я в OLE-передачах именно для ЗавершитьРаботуСистемы() предусмотрел наличие предопределенной функции, и обошелся без модификации ГМ. Именно в этом случае это вполне возможно. И опять же: ставить параметр (0) - вредно. Это очень скверно, если прерываешь какие-то процессы. Еще: при OLE недопустимо вызывать формы. Если без этого нельзя обойтись (напр. служебная обработка задействована) изволь озаботится закрытием этой формы. И иногда нужно дать возможность завершить неконтролируемый процесс (напр. длительное перепроведение) - через задание паузы. Всякие есть методы для избежания "Не работает!". Лучший из них: выпрямление рук ;) | |
28
- 06.05.2015 - 16:44
| 26-US1C > Запрос активно использует контекст. Его специально надо конструировать, чтоб он не требовал локальных переменных. Запрос их не увидит. Напоминаю: локального контекста для OLE нет. | |
29
- 06.05.2015 - 16:44
| 27-VZ > Франч? | |
30
- 06.05.2015 - 16:45
|
26-US1C > говори что там за засада? в общем то тоже решается все достаточно элементарно. | |
31
- 06.05.2015 - 16:51
|
26-US1C > посмотри здесь пример, что бы меньше собирать по крупицам http://www.lockator.com.ua/config1s/...uhzaprole.html | |
32
- 06.05.2015 - 16:55
| 29-endfilm > Нет. Сын ошибок трудных. | |
33
- 06.05.2015 - 17:03
|
(28) Это все понятно. Говорю же, что у меня нормально работает обработка из 7.7 по сбору бух.данных из 7-х и 8-х баз. Стал делать аналогичную обработку для сбора данных из 8-ки и практически все методы работы с ОЛЕ-базами 7-ки не работают. Каждый приходится допиливать методом тыка. (30) Не работает такая конструкция: ФлагРасчитаныБИ = ДБ.ExecuteBatch("Ит.ВыполнитьЗапрос("+Объект.НачДа та+", "+Объект.КонДата+",СчетаБУ,,,,""Месяц"",);"); Если ФлагРасчитаныБИ = 0 Тогда Возврат; КонецЕсли; Это уже переделаный метод, который в 7-ке работал так: Если Ит.ВыполнитьЗапрос(НачДатаО, КонДатаО,СчетаБУ,,,,"Месяц",)=0 Тогда ФлагРасчитаныБИ = 0; Возврат; КонецЕсли; | |
34
- 06.05.2015 - 17:04
| (31) Там ничего нового не увидел. Через все это прошел раньше, когда мастырил обработку на 7.7 | |
35
- 06.05.2015 - 17:10
|
32-VZ > Хм. Тем более странно. Оле уже десятки лет и чужих граблей достаточно что бы своих ошибок не делать. Это просто "транспортный уровень управления процессом", И никак не связан с принципами работы 1С. "прерывание процессов", "открытие форм" и прочие "перепроведения и паузы" полностью на ответственности разработчика 1С, и если он берет на себя ее то сам решает что использовать. | |
36
- 06.05.2015 - 17:14
| 33-US1C > Эххх. и не запустится. | |
37
- 06.05.2015 - 17:19
|
(36) Это я уже понял. А как запустить-то? P.S. Параметр СчетаБУ подправил (вывел за кавычки). Но воз и ныне там. | |
38
- 06.05.2015 - 17:30
|
33-US1C > 1. ExecuteBatch - это просто выполнение кода. Если с возвратом значения то EvalExpr 2. связка 7.7<->7.7 имеет общие типовые объекты (строка,число,дата и тд). А если конфа единая то тем более. связка 8.х<->7.7 ничего общего не имеет, кроме числа, строки, и булево. Даже даты разные. 3. все что ты пишешь внутри кавычек ДБ.ExecuteBatch("") то выполняется на стороне оле-экземпляра. | |
39
- 06.05.2015 - 17:33
| (38) Спасибо. Буду править дальше. | |
| Интернет-форум Краснодарского края и Краснодара |