|
v7: Подключение через Оле | ☑ | ||
---|---|---|---|---|
0
LisaAlisa
11.05.16
✎
08:20
|
Я уже создавала тему Подключение по оле к 8.3
но почему-то сейчас не могу добавить в неё ответ, поэтому пришлось создать новую. Подключение следующее: ИБ_V8= СоздатьОбъект("V83.Application"); //Application ИмяСервера = "ИмяСервера"; ИмяБазы = "ИмяБазы"; Логин = "Логин"; Пасворд = "Пасворд"; Попытка Открыта=ИБ_V8.Connect("Srvr="""+СокрЛП(ИмяСервера)+""";Ref="""+СокрЛП(ИмяБазы)+""";Usr="""+СокрЛП(Логин)+""";Pwd = """ + СокрЛП(Пасворд) + """;"); ИБ_V8.Visible = 0; Сообщить("База 1с8 открыта!"); Исключение Предупреждение("Ошибка открытия базы V8 - "+ОписаниеОшибки()); КонецПопытки; СпрСтраны8 = ИБ_V8.Справочники.СтраныМира; ТабСтраны8 = СпрСтраны8.ТаблицаКлассификатора(); Ошибка Поле агрегатного объекта не обнаружено (ТаблицаКлассификатора) В отладчике СпрСтраны8 = ...здесь пусто... |
|||
1
LisaAlisa
11.05.16
✎
08:36
|
почему подключение происходит, но функции модуля менеджера недоступны?
|
|||
2
франц
11.05.16
✎
08:38
|
(1) а тип то ТаблицаКлассификатора СпрСтраны8 какой? OLE?..
|
|||
3
LisaAlisa
11.05.16
✎
08:40
|
(2) типзначения(СпрСтраны8) = 100
это возвращает отладчик |
|||
4
LisaAlisa
11.05.16
✎
08:44
|
Функция ТаблицаКлассификатора() Экспорт - это функция описана в модуле менеджера справочника СтраныМира. раньше всё работало, сейчас нет, обработку не меняли
|
|||
5
LisaAlisa
11.05.16
✎
08:44
|
может, какой-то dll надо зарегистрировать заново?
|
|||
6
пипец
11.05.16
✎
08:45
|
а чо тема то 7.7
|
|||
7
LisaAlisa
11.05.16
✎
08:46
|
(6) потому что подключение выполняется из 7.7
|
|||
8
HawkEye
11.05.16
✎
08:48
|
(0) база 1с8 открыта! - сообщает?
|
|||
9
LisaAlisa
11.05.16
✎
08:49
|
(8) да. сообщает
|
|||
10
пипец
11.05.16
✎
08:50
|
оууужс - писали ж - делайте наоборот )))
|
|||
11
HawkEye
11.05.16
✎
08:56
|
(9) тогда при чем тут 7.7?
|
|||
12
LisaAlisa
11.05.16
✎
09:07
|
(11) не понимаю вопроса.
Подключение выполняется из базы 7.7 к базе 8.3, чтобы синхронизировать справочники стран мира |
|||
13
elisabet
11.05.16
✎
09:24
|
(0) посмотрела уже 4 типовых конфы - везде справочник называется "КЛАССИФИКАТОРСтранМира". Что за конфа к которой подключаешься?
|
|||
14
xxTANATORxx
11.05.16
✎
09:26
|
(4)раньше это когда?
|
|||
15
Остап Сулейманович
11.05.16
✎
09:29
|
(0) Где в восьмерке находится вот это : ТаблицаКлассификатора()?
|
|||
16
Остап Сулейманович
11.05.16
✎
09:30
|
+ (15) И есть ли у него Экспорт?
|
|||
17
LisaAlisa
11.05.16
✎
09:57
|
(13) Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.43.174)
(14) три месяца назад (15) (16) Функция ТаблицаКлассификатора() Экспорт - это функция описана в модуле менеджера справочника СтраныМира |
|||
18
xxTANATORxx
11.05.16
✎
12:14
|
(17)скорее всего ВнешнееСоединение не видит твою процедуру
попробуй явно указать инструкцией препроцессора где будет исполняться твоя процедура |
|||
19
LisaAlisa
11.05.16
✎
12:34
|
На форме: 0
У обработки: 0 Хотя ТЧ совершенно точно заполнена, она заполняется в основной форме, откуда и вызывается форма сопоставления контрагентов |
|||
20
LisaAlisa
11.05.16
✎
12:34
|
опа, не в ту тему написала...
|
|||
21
LisaAlisa
11.05.16
✎
12:38
|
(18) проблема возникла в 7.7, как там описать?
|
|||
22
HawkEye
11.05.16
✎
14:09
|
(21) не в 7.7 проблема...
на конструкцию ТабСтраны8 = ИБ_V8.Справочники.СтраныМира.ТаблицаКлассификатора(); что пишет? |
|||
23
LisaAlisa
11.05.16
✎
14:45
|
(22) Поле агрегатного объекта не обнаружено (ТаблицаКлассификатора)
В отладчике СпрСтраны8 = ...здесь пусто... |
|||
24
HawkEye
11.05.16
✎
14:47
|
(23) а должно быть OLE
|
|||
25
HawkEye
11.05.16
✎
14:52
|
(23) блин... у тебя же 8.3 и наверное УФ?
|
|||
26
LisaAlisa
11.05.16
✎
14:57
|
(25) подключаюсь из 77 в 83
|
|||
27
HawkEye
11.05.16
✎
14:58
|
(26) "Если запуск происходит в управляемом режиме (а неверняка для 8.3), то через полученный OLE-объект доступно будет только то что "клиентское", ибо вызываем мы все с клиента, только он уже на сервер может прыгнуть."
|
|||
28
LisaAlisa
11.05.16
✎
15:02
|
(27) мне непонятно, что могло измениться за 2-3 месяца, если не меняли обработку 7.7 и конфигурация в этой части не менялась
|
|||
29
HawkEye
11.05.16
✎
15:24
|
(28) я конечно могу третий раз написать, что 7.7 тут не при чем, но я так понимаю тебя мало интересуют ответы, да? )
|
|||
30
hhhh
11.05.16
✎
15:27
|
(28) ну вот смотрю БП 3.0 , там нет такой функции
|
|||
31
Chameleon1980
11.05.16
✎
15:51
|
(30) модуль менеджера
// Возвращает полные данные ОКСМ классификатора. // // Возвращаемое значение: // ТаблицаЗначений - данные классификатора с колонками: // * Код - Строка - данные страны. // * Наименование - Строка - данные страны. // * НаименованиеПолное - Строка - данные страны. // * КодАльфа2 - Строка - данные страны. // * КодАльфа3 - Строка - данные страны. // // Таблица значений проиндексирована по полям "Код", "Наименование". // |
|||
32
Chameleon1980
11.05.16
✎
15:57
|
просто проблема, думаю, в том, что данная функция не доступна из внешнего соединения
вас не смущает, что выше есть #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #КонецЕсли данная функция не лежит между директивами Если Внешнее соединения Тогда КонецЕсли |
|||
33
hhhh
11.05.16
✎
16:07
|
(32) вроде лежит
|
|||
34
Chameleon1980
11.05.16
✎
16:26
|
(33)
внимательно смотрели? если что - смотрю одну из старых (наверное) 3.0.39.50 дык вот в ней. судя по всему - мимо директив. там три раза фигурирует #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда ну и дык ТаблицаКлассификатора мимо. |
|||
35
hhhh
11.05.16
✎
16:38
|
(34) внутри она. всё в порядке.
|
|||
36
Chameleon1980
11.05.16
✎
16:49
|
(35) блин ну у меня вот нет:
для интереса вот (извиняйте за портянку): #Область СлужебныйПрограммныйИнтерфейс #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда // Определяет данные страны по справочнику стран или классификатору ОКСМ. // // Параметры: // КодСтраны - Строка, Число - код ОКСМ страны. Если не указано, то поиск по коду не производится. // Наименование - Строка - наименование страны. Если не указано, то поиск по наименованию не производится. // // Возвращаемое значение: // Структура - поля: // * Код - Строка - реквизит найденной страны. // * Наименование - Строка - реквизит найденной страны. // * НаименованиеПолное - Строка - реквизит найденной страны. // * КодАльфа2 - Строка - реквизит найденной страны. // * КодАльфа3 - Строка - реквизит найденной страны. // * Ссылка - СправочникаСсылка.СтраныМира - реквизит найденной страны. // Неопределено - страна не найдена. // Функция ДанныеСтраныМира(Знач КодСтраны = Неопределено, Знач Наименование = Неопределено) Экспорт Если КодСтраны=Неопределено И Наименование=Неопределено Тогда Возврат Неопределено; КонецЕсли; НормализованныйКод = КодСтраныМира(КодСтраны); Если КодСтраны=Неопределено Тогда УсловиеПоиска = "ИСТИНА"; ФильтрКлассификатора = Новый Структура; Иначе УсловиеПоиска = "Код=" + КонтрольКавычекВСтроке(НормализованныйКод); ФильтрКлассификатора = Новый Структура("Код", НормализованныйКод); КонецЕсли; Если Наименование<>Неопределено Тогда УсловиеПоиска = УсловиеПоиска + " И Наименование=" + КонтрольКавычекВСтроке(Наименование); ФильтрКлассификатора.Вставить("Наименование", Наименование); КонецЕсли; Результат = Новый Структура("Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); Запрос = Новый Запрос(" |ВЫБРАТЬ ПЕРВЫЕ 1 | Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3 |ИЗ | Справочник.СтраныМира |ГДЕ | " + УсловиеПоиска + " |УПОРЯДОЧИТЬ ПО | Наименование |"); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ЗаполнитьЗначенияСвойств(Результат, Выборка); Иначе ДанныеКлассификатора = ТаблицаКлассификатора(); СтрокиДанных = ДанныеКлассификатора.НайтиСтроки(ФильтрКлассификатора); Если СтрокиДанных.Количество()=0 Тогда Результат = Неопределено Иначе ЗаполнитьЗначенияСвойств(Результат, СтрокиДанных[0]); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции // Определяет данные страны по классификатору ОКСМ. // // Параметры: // КодСтраны - Строка, Число - код ОКСМ страны. // // Возвращаемое значение: // Структура - поля: // * Код - Строка - реквизит найденной страны. // * Наименование - Строка - реквизит найденной страны. // * НаименованиеПолное - Строка - реквизит найденной страны. // * КодАльфа2 - Строка - реквизит найденной страны. // * КодАльфа3 - Строка - реквизит найденной страны. // Неопределено - страна не найдена. // Функция ДанныеКлассификатораСтранМираПоКоду(Знач КодСтраны) Экспорт ДанныеКлассификатора = ТаблицаКлассификатора(); СтрокаДанных = ДанныеКлассификатора.Найти(КодСтраныМира(КодСтраны), "Код"); Если СтрокаДанных=Неопределено Тогда Результат = Неопределено; Иначе Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных); КонецЕсли; Возврат Результат; КонецФункции // Определяет данные страны по классификатору ОКСМ. // // Параметры: // Наименование - Строка - наименование страны. // // Возвращаемое значение: // Структура - поля: // * Код - Строка - реквизит найденной страны. // * Наименование - Строка - реквизит найденной страны. // * НаименованиеПолное - Строка - реквизит найденной страны. // * КодАльфа2 - Строка - реквизит найденной страны. // * КодАльфа3 - Строка - реквизит найденной страны. // Неопределено - страна не найдена. // Функция ДанныеКлассификатораСтранМираПоНаименованию(Знач Наименование) Экспорт ДанныеКлассификатора = ТаблицаКлассификатора(); СтрокаДанных = ДанныеКлассификатора.Найти(Наименование, "Наименование"); Если СтрокаДанных=Неопределено Тогда Результат = Неопределено; Иначе Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных); КонецЕсли; Возврат Результат; КонецФункции // Обновляет справочник стран мира по данным макета - классификатора. // Идентификация существующих элементов в справочнике выполняется по полю Код. // // Параметры: // Добавлять - Булево - если Истина, то добавляются страны, которые есть в классификаторе, // но отсутствуют в справочнике стран мира. // Процедура ОбновитьСтраныМираПоКлассификатору(Знач Добавлять = Ложь) Экспорт ВсеОшибки = ""; Фильтр = Новый Структура("Код"); // Сравнивать в запросе нельзя из-за возможной регистронезависимости базы данных. Для Каждого СтрокаКлассификатора Из ТаблицаКлассификатора() Цикл Фильтр.Код = СтрокаКлассификатора.Код; Выборка = Справочники.СтраныМира.Выбрать(,,Фильтр); СтранаНайдена = Выборка.Следующий(); Если Не СтранаНайдена И Добавлять Тогда // Добавление страны Страна = Справочники.СтраныМира.СоздатьЭлемент(); ИначеЕсли СтранаНайдена И ( Выборка.Наименование <> СтрокаКлассификатора.Наименование Или Выборка.КодАльфа2 <> СтрокаКлассификатора.КодАльфа2 Или Выборка.КодАльфа3 <> СтрокаКлассификатора.КодАльфа3 Или Выборка.НаименованиеПолное <> СтрокаКлассификатора.НаименованиеПолное ) Тогда // Изменение страны Страна = Выборка.ПолучитьОбъект(); Иначе Продолжить; КонецЕсли; НачатьТранзакцию(); Попытка Если Не Страна.ЭтоНовый() Тогда ЗаблокироватьДанныеДляРедактирования(Страна.Ссылка); КонецЕсли; ЗаполнитьЗначенияСвойств(Страна, СтрокаКлассификатора, "Код, Наименование, КодАльфа2, КодАльфа3, НаименованиеПолное"); Страна.ДополнительныеСвойства.Вставить("НеПроверятьУникальность"); Страна.Записать(); ЗафиксироватьТранзакцию(); Исключение Инфо = ИнформацияОбОшибке(); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Ошибка записи страны мира %1 (код %2) при обновлении классификатора, %3'"), Выборка.Код, Выборка.Наименование, КраткоеПредставлениеОшибки(Инфо)); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); ВсеОшибки = ВсеОшибки + Символы.ПС + ТекстОшибки; ОтменитьТранзакцию(); КонецПопытки; КонецЦикла; Если Не ПустаяСтрока(ВсеОшибки) Тогда ВызватьИсключение СокрЛП(ВсеОшибки); КонецЕсли; КонецПроцедуры // Создает или возвращает существующую ссылку по данным классификатора. // // Параметры: // Отбор - Структура - содержит поле: // * Код - Строка - для поиска страны в классификаторе. // Данные - Структура - для заполнения одноименных оставшихся полей создаваемого объекта. // // Возвращаемое значение: // СправочникСсылка.СтраныМира - ссылка на созданный элемент. // Функция СсылкаПоДаннымКлассификатора(Знач Отбор, Знач ДополнительныеДанные = Неопределено) Экспорт // Убеждаемся, что страна есть в классификаторе. ДанныеПоиска = ДанныеКлассификатораСтранМираПоКоду(Отбор.Код); Если ДанныеПоиска=Неопределено Тогда ВызватьИсключение НСтр("ru='Некорректный код страны мира для поиска в классификаторе'"); КонецЕсли; // Проверяем на существование в справочнике по данным классификатора. ДанныеПоиска = ДанныеСтраныМира(ДанныеПоиска.Код, ДанныеПоиска.Наименование); Результат = ДанныеПоиска.Ссылка; Если Не ЗначениеЗаполнено(Результат) Тогда ОбъектСтраны = Справочники.СтраныМира.СоздатьЭлемент(); ЗаполнитьЗначенияСвойств(ОбъектСтраны, ДанныеПоиска); Если ДополнительныеДанные<>Неопределено Тогда ЗаполнитьЗначенияСвойств(ОбъектСтраны, ДополнительныеДанные); КонецЕсли; ОбъектСтраны.Записать(); Результат = ОбъектСтраны.Ссылка; КонецЕсли; Возврат Результат; КонецФункции #КонецЕсли // Возвращает флаг возможности добавления и изменения элементов. // Функция ЕстьПравоДобавления() Экспорт Возврат ПравоДоступа("Добавление", Метаданные.Справочники.СтраныМира); КонецФункции // Возвращает поля поиска в порядке предпочтения для справочника стран мира. // // Возвращаемое значение: // Массив - содержит структуры с полями: // * Имя - Строка - имя реквизита поиска. // * ШаблонПредставления - Строка - шаблон для формирования значения представления по именам реквизитов, // например: "%1.Наименование (%1.Код)". Здесь "Наименование" и "Код" - имена // реквизитов, // "%1" - заполнитель для передачи псевдонима таблицы. // Функция ПоляПоиска() Экспорт Результат = Новый Массив; СписокПолей = Справочники.СтраныМира.ПустаяСсылка().Метаданные().ВводПоСтроке; ГраницаПолей = СписокПолей.Количество() - 1; ВсеИменаСтрокой = ""; ПредставлениеРазделителя = ", "; РазделительПредставлений = " + """ + ПредставлениеРазделителя + """ + "; Для Индекс=0 По ГраницаПолей Цикл ИмяПоля = СписокПолей[Индекс].Имя; ВсеИменаСтрокой = ВсеИменаСтрокой + "," + ИмяПоля; ШаблонПредставления = "%1." + ИмяПоля; ОстальныеПоля = ""; Для Позиция=0 По ГраницаПолей Цикл Если Позиция<>Индекс Тогда ОстальныеПоля = ОстальныеПоля + РазделительПредставлений + СписокПолей[Позиция].Имя; КонецЕсли; КонецЦикла; Если Не ПустаяСтрока(ОстальныеПоля) Тогда ШаблонПредставления = ШаблонПредставления + " + "" ("" + " + "%1." + Сред(ОстальныеПоля, СтрДлина(РазделительПредставлений) + 1) + " + "")"""; КонецЕсли; Результат.Добавить( Новый Структура("Имя, ШаблонПредставления", ИмяПоля, ШаблонПредставления) ); КонецЦикла; Возврат Новый Структура("СписокПолей, ИменаПолейСтрокой", Результат, Сред(ВсеИменаСтрокой, 2)); КонецФункции // Возвращает полные данные ОКСМ классификатора. // // Возвращаемое значение: // ТаблицаЗначений - данные классификатора с колонками: // * Код - Строка - данные страны. // * Наименование - Строка - данные страны. // * НаименованиеПолное - Строка - данные страны. // * КодАльфа2 - Строка - данные страны. // * КодАльфа3 - Строка - данные страны. // // Таблица значений проиндексирована по полям "Код", "Наименование". // Функция ТаблицаКлассификатора() Экспорт Макет = Справочники.СтраныМира.ПолучитьМакет("Классификатор"); Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(Макет.ПолучитьТекст()); Возврат СериализаторXDTO.ПрочитатьXML(Чтение); КонецФункции #КонецОбласти #Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Если Не СтандартнаяОбработка Тогда // Обрабатывается в другом месте. Возврат; ИначеЕсли Не Параметры.Свойство("РазрешитьДанныеКлассификатора") Тогда // Поведение по умолчанию, подбор только справочника. Возврат; ИначеЕсли Истина<>Параметры.РазрешитьДанныеКлассификатора Тогда // Подбор классификатора отключен, поведение по умолчанию. Возврат; ИначеЕсли Не ЕстьПравоДобавления() Тогда // Нет прав на добавление страны мира, поведение по умолчанию. Возврат; КонецЕсли; // Будем имитировать поведение платформы - поиск по всем доступным полям поиска с формированием подобного списка. // Подразумеваем, что поля справочника и классификатора совпадают, за исключением отсутствующего в классификаторе поля // "Ссылка". Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; ПрефиксПараметраОтбора = "ПараметрыОтбора"; // Общий отбор по параметрам ШаблонОтбора = "ИСТИНА"; Для Каждого КлючЗначение Из Параметры.Отбор Цикл ЗначениеПоля = КлючЗначение.Значение; ИмяПоля = КлючЗначение.Ключ; ИмяПараметра = ПрефиксПараметраОтбора + ИмяПоля; Если ТипЗнч(ЗначениеПоля)=Тип("Массив") Тогда ШаблонОтбора = ШаблонОтбора + " И %1." + ИмяПоля + " В (&" + ИмяПараметра + ")"; Иначе ШаблонОтбора = ШаблонОтбора + " И %1." + ИмяПоля + " = &" + ИмяПараметра; КонецЕсли; Запрос.УстановитьПараметр(ИмяПараметра, КлючЗначение.Значение); КонецЦикла; // Дополнительные отборы Если Параметры.Свойство("ВыборГруппИЭлементов") Тогда Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда ШаблонОтбора = ШаблонОтбора + " И %1.ЭтоГруппа"; ИначеЕсли Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы Тогда ШаблонОтбора = ШаблонОтбора + " И (НЕ %1.ЭтоГруппа)"; КонецЕсли; КонецЕсли; // Источники данных Если (Параметры.Свойство("ТолькоДанныеКлассификатора") И Параметры.ТолькоДанныеКлассификатора) Тогда // Запрос только по классификатору. ШаблонЗапроса = " |ВЫБРАТЬ ПЕРВЫЕ 50 | NULL КАК Ссылка, | Классификатор.Код КАК Код, | Классификатор.Наименование КАК Наименование, | ЛОЖЬ КАК ПометкаУдаления, | %2 КАК Представление |ИЗ | Классификатор КАК Классификатор |ГДЕ | Классификатор.%1 ПОДОБНО &СтрокаПоиска | И ( | " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОтбора, "Классификатор") + " | ) |УПОРЯДОЧИТЬ ПО | Классификатор.%1 |"; Иначе // Запрос и по справочнику и по классификатору. ШаблонЗапроса = " |ВЫБРАТЬ ПЕРВЫЕ 50 | СтраныМира.Ссылка КАК Ссылка, | ЕСТЬNULL(СтраныМира.Код, Классификатор.Код) КАК Код, | ЕСТЬNULL(СтраныМира.Наименование, Классификатор.Наименование) КАК Наименование, | ЕСТЬNULL(СтраныМира.ПометкаУдаления, ЛОЖЬ) КАК ПометкаУдаления, | | ВЫБОР КОГДА СтраныМира.Ссылка ЕСТЬ NULL ТОГДА | %2 | ИНАЧЕ | %3 | КОНЕЦ КАК Представление | |ИЗ | Справочник.СтраныМира КАК СтраныМира |ПОЛНОЕ СОЕДИНЕНИЕ | Классификатор |ПО | Классификатор.Код = СтраныМира.Код | И Классификатор.Наименование = СтраныМира.Наименование |ГДЕ | (СтраныМира.%1 ПОДОБНО &СтрокаПоиска ИЛИ Классификатор.%1 ПОДОБНО &СтрокаПоиска) | И (" + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОтбора, "Классификатор") + ") | И (" + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОтбора, "СтраныМира") + ") | |УПОРЯДОЧИТЬ ПО | ЕСТЬNULL(СтраныМира.%1, Классификатор.%1) |"; КонецЕсли; ИменаПолей = ПоляПоиска(); // Код + Наименование - ключевые поля соответствия справочника классификатору. Их обрабатываем всегда. ИменаПолейСтрокой = "," + СтрЗаменить(ИменаПолей.ИменаПолейСтрокой, " ", ""); ИменаПолейСтрокой = СтрЗаменить(ИменаПолейСтрокой, ",Код", ""); ИменаПолейСтрокой = СтрЗаменить(ИменаПолейСтрокой, ",Наименование", ""); Запрос.Текст = " |ВЫБРАТЬ | Код, Наименование " + ИменаПолейСтрокой + " |ПОМЕСТИТЬ | Классификатор |ИЗ | &Классификатор КАК Классификатор |ИНДЕКСИРОВАТЬ ПО | Код, Наименование | " + ИменаПолейСтрокой + " |"; Запрос.УстановитьПараметр("Классификатор", ТаблицаКлассификатора()); Запрос.Выполнить(); Запрос.УстановитьПараметр("СтрокаПоиска", ЭкранироватьСимволыПодобия(Параметры.СтрокаПоиска) + "%"); Для Каждого ДанныеПоля Из ИменаПолей.СписокПолей Цикл Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, ДанныеПоля.Имя, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ДанныеПоля.ШаблонПредставления, "Классификатор"), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ДанныеПоля.ШаблонПредставления, "СтраныМира"), ); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда ДанныеВыбора = Новый СписокЗначений; СтандартнаяОбработка = Ложь; Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Если ЗначениеЗаполнено(Выборка.Ссылка) Тогда // Данные справочника ЭлементВыбора = Выборка.Ссылка; Иначе // Данные классификатора РезультатВыбора = Новый Структура("Код, Наименование", Выборка.Код, Выборка.Наименование ); ЭлементВыбора = Новый Структура("Значение, ПометкаУдаления, Предупреждение", РезультатВыбора, Выборка.ПометкаУдаления, Неопределено, ); КонецЕсли; ДанныеВыбора.Добавить(ЭлементВыбора, Выборка.Представление); КонецЦикла; Прервать; КонецЕсли; КонецЦикла; КонецПроцедуры #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. // Возвращает список реквизитов, которые не нужно редактировать // с помощью обработки группового изменения объектов. // Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; Результат.Добавить("*"); Возврат Результат; КонецФункции //////////////////////////////////////////////////////////////////////////////// // Загрузка данных из файла // Запрещает загрузку данных в этот справочник из подсистемы "ЗагрузкаДанныхИзФайла". // Т.к. данный справочник реализует свой метод загрузки данные из макета. // Функция ИспользоватьЗагрузкуДанныхИзФайла() Экспорт Возврат Ложь; КонецФункции #КонецЕсли #КонецОбласти #Область СлужебныеПроцедурыИФункции #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда // Приводит код страны к единому виду - строка длиной три символа. // Функция КодСтраныМира(Знач КодСтраны) Если ТипЗнч(КодСтраны)=Тип("Число") Тогда Возврат Формат(КодСтраны, "ЧЦ=3; ЧН=; ЧВН=; ЧГ="); КонецЕсли; Возврат Прав("000" + КодСтраны, 3); КонецФункции // Возвращает строку в кавычках. // Функция КонтрольКавычекВСтроке(Знач Строка) Возврат """" + СтрЗаменить(Строка, """", """""") + """"; КонецФункции #КонецЕсли // Экранирует символы для использования в функции запроса ПОДОБНО. // Функция ЭкранироватьСимволыПодобия(Знач Текст, Знач СпецСимвол = "\") Результат = Текст; СимволыПодобия = "%_[]^" + СпецСимвол; Для Позиция=1 По СтрДлина(СимволыПодобия) Цикл ТекущийСимвол = Сред(СимволыПодобия, Позиция, 1); Результат = СтрЗаменить(Результат, ТекущийСимвол, СпецСимвол + ТекущийСимвол); КонецЦикла; Возврат Результат; КонецФункции #КонецОбласти |
|||
37
Chameleon1980
11.05.16
✎
16:50
|
вставьте в конфигуратор, например, для читабельности и гляньте:
да и вообще, похоже, тс'у это уже не интересно |
|||
38
LisaAlisa
12.05.16
✎
08:33
|
(29) да я понимаю, что с 7.7 всё в порядке, пишу - на чьей стороне выявилась ошибка
|
|||
39
LisaAlisa
12.05.16
✎
08:37
|
(37) и меня извините за код. но функция МЕЖДУ директивами
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс // Определяет данные страны по справочнику стран или классификатору ОКСМ. // // Параметры: // КодСтраны - Строка, Число - код ОКСМ страны. Если не указано, то поиск по коду не производится. // Наименование - Строка - наименование страны. Если не указано, то поиск по наименованию не производится. // // Возвращаемое значение: // Структура - поля: // * Код - Строка - реквизит найденной страны. // * Наименование - Строка - реквизит найденной страны. // * НаименованиеПолное - Строка - реквизит найденной страны. // * КодАльфа2 - Строка - реквизит найденной страны. // * КодАльфа3 - Строка - реквизит найденной страны. // * Ссылка - СправочникаСсылка.СтраныМира - реквизит найденной страны. // Неопределено - страна не найдена. // Функция ДанныеСтраныМира(Знач КодСтраны = Неопределено, Знач Наименование = Неопределено) Экспорт Если КодСтраны=Неопределено И Наименование=Неопределено Тогда Возврат Неопределено; КонецЕсли; НормализованныйКод = КодСтраныМира(КодСтраны); Если КодСтраны=Неопределено Тогда УсловиеПоиска = "ИСТИНА"; ФильтрКлассификатора = Новый Структура; Иначе УсловиеПоиска = "Код=" + КонтрольКавычекВСтроке(НормализованныйКод); ФильтрКлассификатора = Новый Структура("Код", НормализованныйКод); КонецЕсли; Если Наименование<>Неопределено Тогда УсловиеПоиска = УсловиеПоиска + " И Наименование=" + КонтрольКавычекВСтроке(Наименование); ФильтрКлассификатора.Вставить("Наименование", Наименование); КонецЕсли; Результат = Новый Структура("Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); Запрос = Новый Запрос(" |ВЫБРАТЬ ПЕРВЫЕ 1 | Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3 |ИЗ | Справочник.СтраныМира |ГДЕ | " + УсловиеПоиска + " |УПОРЯДОЧИТЬ ПО | Наименование |"); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ЗаполнитьЗначенияСвойств(Результат, Выборка); Иначе ДанныеКлассификатора = ТаблицаКлассификатора(); СтрокиДанных = ДанныеКлассификатора.НайтиСтроки(ФильтрКлассификатора); Если СтрокиДанных.Количество()=0 Тогда Результат = Неопределено Иначе ЗаполнитьЗначенияСвойств(Результат, СтрокиДанных[0]); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции // Определяет данные страны по классификатору ОКСМ. // // Параметры: // Код - Строка, Число - код ОКСМ страны. // ТипКода - Строка - Варианты: КодСтраны (по умолчанию), Альфа2, Альфа3. // // Возвращаемое значение: // Структура - поля: // * Код - Строка - реквизит найденной страны. // * Наименование - Строка - реквизит найденной страны. // * НаименованиеПолное - Строка - реквизит найденной страны. // * КодАльфа2 - Строка - реквизит найденной страны. // * КодАльфа3 - Строка - реквизит найденной страны. // * Ссылка - СправочникаСсылка.СтраныМира - ссылка на // элемент справочника страны мира, если он существует. // Неопределено - страна не найдена. // Функция ДанныеКлассификатораСтранМираПоКоду(Знач Код, ТипКода = "КодСтраны") Экспорт ДанныеКлассификатора = ТаблицаКлассификатора(); Если СтрСравнить(ТипКода, "Альфа2") = 0 Тогда СтрокаДанных = ДанныеКлассификатора.Найти(ВРег(Код), "КодАльфа2"); ИначеЕсли СтрСравнить(ТипКода, "Альфа3") = 0 Тогда СтрокаДанных = ДанныеКлассификатора.Найти(ВРег(Код), "КодАльфа3"); Иначе СтрокаДанных = ДанныеКлассификатора.Найти(КодСтраныМира(Код), "Код"); КонецЕсли; Если СтрокаДанных=Неопределено Тогда Результат = Неопределено; Иначе Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3, Ссылка"); ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных); Страна = ДанныеСтраныМира(Результат.Код); Если Страна <> Неопределено Тогда Результат.Ссылка = Страна.Ссылка; КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции // Определяет данные страны по классификатору ОКСМ. // // Параметры: // Наименование - Строка - наименование страны. // // Возвращаемое значение: // Структура - поля: // * Код - Строка - реквизит найденной страны. // * Наименование - Строка - реквизит найденной страны. // * НаименованиеПолное - Строка - реквизит найденной страны. // * КодАльфа2 - Строка - реквизит найденной страны. // * КодАльфа3 - Строка - реквизит найденной страны. // Неопределено - страна не найдена. // Функция ДанныеКлассификатораСтранМираПоНаименованию(Знач Наименование) Экспорт ДанныеКлассификатора = ТаблицаКлассификатора(); СтрокаДанных = ДанныеКлассификатора.Найти(Наименование, "Наименование"); Если СтрокаДанных=Неопределено Тогда Результат = Неопределено; Иначе Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных); КонецЕсли; Возврат Результат; КонецФункции // Обновляет справочник стран мира по данным макета - классификатора. // Идентификация существующих элементов в справочнике выполняется по полю Код. // // Параметры: // Добавлять - Булево - если Истина, то добавляются страны, которые есть в классификаторе, // но отсутствуют в справочнике стран мира. // Процедура ОбновитьСтраныМираПоКлассификатору(Знач Добавлять = Ложь) Экспорт ВсеОшибки = ""; Фильтр = Новый Структура("Код"); // Сравнивать в запросе нельзя из-за возможной регистронезависимости базы данных. Для Каждого СтрокаКлассификатора Из ТаблицаКлассификатора() Цикл Фильтр.Код = СтрокаКлассификатора.Код; Выборка = Справочники.СтраныМира.Выбрать(,, Фильтр); СтранаНайдена = Выборка.Следующий(); Если Не СтранаНайдена И Добавлять Тогда // Добавление страны Страна = Справочники.СтраныМира.СоздатьЭлемент(); ИначеЕсли СтранаНайдена И ( Выборка.Наименование <> СтрокаКлассификатора.Наименование Или Выборка.КодАльфа2 <> СтрокаКлассификатора.КодАльфа2 Или Выборка.КодАльфа3 <> СтрокаКлассификатора.КодАльфа3 Или Выборка.НаименованиеПолное <> СтрокаКлассификатора.НаименованиеПолное) Тогда // Изменение страны Страна = Выборка.ПолучитьОбъект(); Иначе Продолжить; КонецЕсли; НачатьТранзакцию(); Попытка Если Не Страна.ЭтоНовый() Тогда ЗаблокироватьДанныеДляРедактирования(Страна.Ссылка); КонецЕсли; ЗаполнитьЗначенияСвойств(Страна, СтрокаКлассификатора, "Код, Наименование, КодАльфа2, КодАльфа3, НаименованиеПолное"); Страна.ДополнительныеСвойства.Вставить("НеПроверятьУникальность"); Страна.Записать(); ЗафиксироватьТранзакцию(); Исключение Инфо = ИнформацияОбОшибке(); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Ошибка записи страны мира %1 (код %2) при обновлении классификатора, %3'"), Выборка.Код, Выборка.Наименование, КраткоеПредставлениеОшибки(Инфо)); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); ВсеОшибки = ВсеОшибки + Символы.ПС + ТекстОшибки; ОтменитьТранзакцию(); КонецПопытки; КонецЦикла; Если Не ПустаяСтрока(ВсеОшибки) Тогда ВызватьИсключение СокрЛП(ВсеОшибки); КонецЕсли; КонецПроцедуры // Создает или возвращает существующую ссылку по данным классификатора. // // Параметры: // Отбор - Структура - содержит поле: // * Код - Строка - для поиска страны в классификаторе. // Данные - Структура - для заполнения одноименных оставшихся полей создаваемого объекта. // // Возвращаемое значение: // СправочникСсылка.СтраныМира - ссылка на созданный элемент. // Функция СсылкаПоДаннымКлассификатора(Знач Отбор, Знач ДополнительныеДанные = Неопределено) Экспорт // Убеждаемся, что страна есть в классификаторе. ДанныеПоиска = ДанныеКлассификатораСтранМираПоКоду(Отбор.Код); Если ДанныеПоиска=Неопределено Тогда ВызватьИсключение НСтр("ru='Некорректный код страны мира для поиска в классификаторе'"); КонецЕсли; // Проверяем на существование в справочнике по данным классификатора. ДанныеПоиска = ДанныеСтраныМира(ДанныеПоиска.Код, ДанныеПоиска.Наименование); Результат = ДанныеПоиска.Ссылка; Если Не ЗначениеЗаполнено(Результат) Тогда ОбъектСтраны = Справочники.СтраныМира.СоздатьЭлемент(); ЗаполнитьЗначенияСвойств(ОбъектСтраны, ДанныеПоиска); Если ДополнительныеДанные<>Неопределено Тогда ЗаполнитьЗначенияСвойств(ОбъектСтраны, ДополнительныеДанные); КонецЕсли; ОбъектСтраны.Записать(); Результат = ОбъектСтраны.Ссылка; КонецЕсли; Возврат Результат; КонецФункции // Возвращает флаг возможности добавления и изменения элементов. // Функция ЕстьПравоДобавления() Экспорт Возврат ПравоДоступа("Добавление", Метаданные.Справочники.СтраныМира); КонецФункции // Возвращает поля поиска в порядке предпочтения для справочника стран мира. // // Возвращаемое значение: // Массив - содержит структуры с полями: // * Имя - Строка - имя реквизита поиска. // * ШаблонПредставления - Строка - шаблон для формирования значения представления по именам реквизитов, // например: "%1.Наименование (%1.Код)". Здесь "Наименование" и "Код" - имена // реквизитов, // "%1" - заполнитель для передачи псевдонима таблицы. // Функция ПоляПоиска() Результат = Новый Массив; СписокПолей = Справочники.СтраныМира.ПустаяСсылка().Метаданные().ВводПоСтроке; ГраницаПолей = СписокПолей.Количество() - 1; ВсеИменаСтрокой = ""; ПредставлениеРазделителя = ", "; РазделительПредставлений = " + """ + ПредставлениеРазделителя + """ + "; Для Индекс=0 По ГраницаПолей Цикл ИмяПоля = СписокПолей[Индекс].Имя; ВсеИменаСтрокой = ВсеИменаСтрокой + "," + ИмяПоля; ШаблонПредставления = "%1." + ИмяПоля; ОстальныеПоля = ""; Для Позиция=0 По ГраницаПолей Цикл Если Позиция<>Индекс Тогда ОстальныеПоля = ОстальныеПоля + РазделительПредставлений + СписокПолей[Позиция].Имя; КонецЕсли; КонецЦикла; Если Не ПустаяСтрока(ОстальныеПоля) Тогда ШаблонПредставления = ШаблонПредставления + " + "" ("" + " + "%1." + Сред(ОстальныеПоля, СтрДлина(РазделительПредставлений) + 1) + " + "")"""; КонецЕсли; Результат.Добавить( Новый Структура("Имя, ШаблонПредставления", ИмяПоля, ШаблонПредставления)); КонецЦикла; Возврат Новый Структура("СписокПолей, ИменаПолейСтрокой", Результат, Сред(ВсеИменаСтрокой, 2)); КонецФункции // Возвращает полные данные ОКСМ классификатора. // // Возвращаемое значение: // ТаблицаЗначений - данные классификатора с колонками: // * Код - Строка - данные страны. // * Наименование - Строка - данные страны. // * НаименованиеПолное - Строка - данные страны. // * КодАльфа2 - Строка - данные страны. // * КодАльфа3 - Строка - данные страны. // // Таблица значений проиндексирована по полям "Код", "Наименование". // Функция ТаблицаКлассификатора() Экспорт Макет = Справочники.СтраныМира.ПолучитьМакет("Классификатор"); Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(Макет.ПолучитьТекст()); Возврат СериализаторXDTO.ПрочитатьXML(Чтение); КонецФункции #КонецОбласти #Область СлужебныеПроцедурыИФункции // Приводит код страны к единому виду - строка длиной три символа. // Функция КодСтраныМира(Знач КодСтраны) Если ТипЗнч(КодСтраны)=Тип("Число") Тогда Возврат Формат(КодСтраны, "ЧЦ=3; ЧН=; ЧВН=; ЧГ="); КонецЕсли; Возврат Прав("000" + КодСтраны, 3); КонецФункции // Возвращает строку в кавычках. // Функция КонтрольКавычекВСтроке(Знач Строка) Возврат """" + СтрЗаменить(Строка, """", """""") + """"; КонецФункции // Экранирует символы для использования в функции запроса ПОДОБНО. // Функция ЭкранироватьСимволыПодобия(Знач Текст, Знач СпецСимвол = "\") Результат = Текст; СимволыПодобия = "%_[]^" + СпецСимвол; Для Позиция=1 По СтрДлина(СимволыПодобия) Цикл ТекущийСимвол = Сред(СимволыПодобия, Позиция, 1); Результат = СтрЗаменить(Результат, ТекущийСимвол, СпецСимвол + ТекущийСимвол); КонецЦикла; Возврат Результат; КонецФункции #КонецОбласти #КонецЕсли |
|||
40
Chameleon1980
12.05.16
✎
08:54
|
(39) у вас правда - внутри
еще раз - я смотрел на 3.0.39.50 у мну снаружи |
|||
41
Chameleon1980
12.05.16
✎
09:04
|
хотя, скорее, если конструкция не обернута директивами, то, наверное подразумеваются все режимы.
директива, наверное, только ограничивает счас поем - попробую подключение |
|||
42
Chameleon1980
12.05.16
✎
09:06
|
а не пробовали из 8.х к 8.х цепляться?
|
|||
43
Chameleon1980
12.05.16
✎
09:06
|
+и пробовать эту фукнцию
|
|||
44
Chameleon1980
12.05.16
✎
09:22
|
что-то мне кажется, что именно тот факт, что у вас эта функция внутри директив у вас и приводит к ошибке.
у меня вот: //***************************************************************************** Перем V8; //***************************************************************************** Процедура Сформировать() V8 = СоздатьОбъект("V83.Application"); попытка V8.Connect("File=""D:\Базы 1С\BP 3_0_39_50 (demo)"";Usr=""Абдулов (директор)"""); Сообщить("Подключились к базе"); Исключение Сообщить("Не подключился!!!!"); КонецПопытки; Сообщить("V8: "+V8); СпрСтраны8 = V8.Справочники.СтраныМира; ТабСтраны8 = СпрСтраны8.ТаблицаКлассификатора(); Сообщить("ТабСтраны8: "+ТабСтраны8); КонецПроцедуры //***************************************************************************** Процедура ПриЗакрытии() V8=""; КонецПроцедуры //***************************************************************************** в окне: Подключились к базе V8: OLE ТабСтраны8: OLE |
|||
45
Chameleon1980
12.05.16
✎
09:23
|
для теста:
попробуйте вынести за директивы эту функцию с другим именем и ее попробовать вызвать из 7.7 что-то мне подсказывает, что тут-то собака и порылась |
|||
46
Chameleon1980
12.05.16
✎
09:34
|
даже вот это отрабатывает:
//***************************************************************************** Перем V8; //***************************************************************************** Процедура Сформировать() V8 = СоздатьОбъект("V83.Application"); попытка V8.Connect("File=""D:\Базы 1С\BP 3_0_39_50 (demo)"";Usr=""Абдулов (директор)"""); Сообщить("Подключились к базе"); Исключение Сообщить("Не подключился!!!!"); КонецПопытки; Сообщить("V8: "+V8); СпрСтраны8 = V8.Справочники.СтраныМира; // Возвращаемое значение: // ТаблицаЗначений - данные классификатора с колонками: // * Код - Строка - данные страны. // * Наименование - Строка - данные страны. // * НаименованиеПолное - Строка - данные страны. // * КодАльфа2 - Строка - данные страны. // * КодАльфа3 - Строка - данные страны. // // Таблица значений проиндексирована по полям "Код", "Наименование". ТабСтраны8 = СпрСтраны8.ТаблицаКлассификатора(); Сообщить("ТабСтраны8: "+ТабСтраны8); ТабСтраны8.ВыбратьСтроку(); КонецПроцедуры //***************************************************************************** Процедура ПриЗакрытии() V8=""; КонецПроцедуры //***************************************************************************** вот скрин: http://pastenow.ru/NQLU |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |