Имя: Пароль:
1C
1С v8
Внешняя компонента склонения не работает на серверной базе
,
0 TatyanaArb
 
09.02.12
14:40
В файловой базе ПодключитьВнешнююКомпоненту возврашает Истина;
в серверной базе  - возвращает Ложь.

Если ПодключитьВнешнююКомпоненту("ОбщийМакет._КомпонентаСклонения", "Скл",ТипВнешнейКомпоненты.COM) Тогда
   Компонента = Новый ("AddIn.Скл.NameDeclension");                
КонецЕсли;

Нашла следующие сведения:
http_://its.1c.ru/db/v8doc#content:722:1:IssOgl1_31.3. Особенности работы на сервере
> При работе на сервере «1С:Предприятия» допустимо использовать только компоненты, разработанные по технологии Native API, которые могут быть как отдельными файлами, так и упакованными в специальные ZIP-архивы.

Каким образом тогда можно решить задачу склонения на серверной базе?
1 TatyanaArb
 
14.02.12
09:01
up
2 Fish
 
14.02.12
09:03
Взять всем известную процедурку, которая не использует никаких компонент и склоняет гораздо правильнее :)))
3 PowerBoy
 
14.02.12
09:10
(2) +1
4 rasswet
 
14.02.12
09:54
у меня работает..но не помню как заставил работать.
5 TatyanaArb
 
14.02.12
17:03
(2) Можно ссылку на всем известную процедурку?)))
(4) Было бы здорово, если бы вспомнил)))
6 Fish
 
14.02.12
17:11
(5) http://www.superjur.narod.ru/padeg.htm Там ссылка для 7.7, но в 8.х работает на ура.
7 andrewks
 
14.02.12
17:11
вот хорошая для 7.7 (проверял в работе)
http://www.superjur.narod.ru/padeg20110728.rar

в принципе, недолго портировать под 8

или, вот, от самого Г1С :)  (не проверял в работе)
http://infostart.ru/public/115909/
8 andrewks
 
14.02.12
17:12
(6) чё, даже без правки под 8-кой работает?
9 Стальная Крыса
 
14.02.12
17:12
я так понял из:
"в серверной базе  - возвращает Ложь. "
что код отрабатывает на сервере ?

если да, то предположу что сервер 1С 64-х разрядный ?
10 Fish
 
14.02.12
17:13
(8) Ага, там код универсальный :)))
11 TatyanaArb
 
15.02.12
09:13
(9) сервер 1С 64-х разрядный - именно так
12 TatyanaArb
 
15.02.12
11:30
(6) а для 8.2 есть?
13 Fish
 
15.02.12
11:59
(12) Я же написал. Там код универсальный. Работает нормально и в 7.7 и в 8.0 и в 8.2 :))
// (c) Jurer Production Begin ( Start )
// В случае, если программа окажется для Вас полезной, и Вы представляете только свои интересы, а не интересы фирмы,
// автор будет весьма признателен, если Вы перечислите ему, то есть мне, некую сумму на Ваше усмотрение
// Счет для я-деньги: 4100131343416 - будьте ж несдержаней в своих инициативах
//
// http://superjur.narod.ru
//
// Удаление этих строк незнаконно!
// Гарантия 91 года и 1 месяц!!!
// Послегарантийное обслуживание - бесплатно!!!
// Круглосуточная поддержка - все 48 часов в бою!
// Ссылка на источник обязательна!
// Эти программы защищены законом об авторских правах. Запрещается перепродажа данной программы.
// ПРОВЕРЕНО! ВИРУСОВ НЕТ!!! АНТИВИРУСОВ ТОЖЕ!!!
// Смотри Милячуша в творительном !!
// скупой слепой тупой - пропой!!
// !№№!
// !56! укратил
// !55! Падежи - для оглы и кызы
// !54!
// !53! Очередное сокращение кода
// !51! Прегромадное спасибо Олегу Дубровскому за оказанную моральную, информационную и материальную поддержку сего проекта.
//      Сергею Толкачёву за напоминание о том, что в русском языке всегда есть место исключениям!
// !50! П:Ответственный за электрохозяйство  Ф:Ацута Груша  
// !48! исправлена ошибка при склонении фамилий (спасибо, Mario).
// !47! исправлена ошибка при склонении профессий ( спасибо, Павел Ковалев).
// !46! оптимизация + четвертый параметр задает, что вернуть - фамилия, имя или отчество или всё сразу в нужном падеже
// !42! Осел + Соловей + Воробей + Немец + Кормилец + Силиец
// !41! отчества оканчивающиеся на "ы" считаются женскими ?
// Функция для склонения одного слова!!!
// z1 - само слово
// z2 - номер падежа
// z3 - пол
// z4 - 1-склонять как фамилию, 2-имя, 3-отчество
Функция ПадежС(z1,Знач z2=2,Знач z3="*",z4=0) Экспорт
 z5=Найти(z1,"-");
 z6=?(z5=0,"","-"+ПадежС(Сред(z1,z5+1,СтрДлина(z1)-z5+1),z2,z3,z4));
 z1=НРег(?(z5=0,z1,Лев(z1,z5-1)));
 z7=Прав(z1,3);z8=Прав(z7,2);z9=Прав(z8,1);
 z5=СтрДлина(z1);
 za=Найти("ая ия ел ок яц ий па да ца ша ба та га ка",z8);
 zb=Найти("аеёийоуэюяжнгхкчшщ",Лев(z7,1));
 zc=Макс(z2,-z2);
 zd=?(za=4,5,Найти("айяь",z9));
 zd=?((zc=1)или(z9=".")или((z4=2)и(Найти("оиеу"+?(z3="ч","","бвгджзклмнпрстфхцчшщъ"),z9)>0))или((z4=1)и(Найти("мия мяэ лия кия жая лея",z7)>0)),9,?((zd=4)и(z3="ч"),2,?(z4=1,?(Найти("оеиую",z9)+Найти("их ых аа еа ёа иа оа уа ыа эа юа яа",z8)>0,9,?(z3<>"ч",?(za=1,7,?(z9="а",?(za>18,1,6),9)),?(((Найти("ой ый",z8)>0)и(z5>4)и(Прав(z1,4)<>"опой"))или((zb>10)и(za=16)),8,zd))),zd)));
 ze=Найти("лец вей бей дец пец мец нец рец вец аец иец ыец бер",z7);
 zf=?((zd=8)и(zc<>5),?((zb>15)или(Найти("жий ний",z7)>0),"е","о"),?(z1="лев","ьв",?((Найти("аеёийоуэюя",Сред(z1,z5-3 ,1))=0)и((zb>11)или(zb=0))и(ze<>45),"",?(za=7,"л",?(za=10,"к",?(za=13,"йц",?(ze=0,"",?(ze<12,"ь"+?(ze=1,"ц",""),?(ze<37,"ц",?(ze<49,"йц","р"))))))))));
//  zf=?((zd=9)или((z4=3)и(z3="ы")),z1,Лев(z1,z5-?((zd>6)или(zf<>""),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2)));
 zf=?((zd=9)или((z4=3)и(Прав(z1,1)="ы")),z1,Лев(z1,z5-?((zd>6)или(zf<>""),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2)));
Возврат ?(""=z1,"",?(z4>0,ВРег(Лев(zf,1))+?((z2<0)и(z4>1),".",Сред(zf,2)),zf)+z6);
КонецФункции
//_____________________________________________________________________________
// z1 - фамилия имя отчество например Железняков Юрий Юрьевич
// z2 - Падеж ( по  умолчанию = 2 - родительный)
// 2 - родительный  ( нет кого?    ) Железнякова Юрия Юрьевича    
// 3 - дательный    ( кому?        ) Железнякову Юрию Юрьевичу
// 4 - винительный  ( вижу кого?   ) Железнякова Юрия Юрьевича  
// 5 - творительный ( кем?         ) Железняковым Юрием Юрьевичем    
// 6 - предложный   ( о ком?       ) Железнякове Юрии Юрьевиче
// Если задать Z2 меньше 0, то на выходе получим от -1=Железняков Ю. Ю. до -6=Железнякове Ю. Ю.
// z3 - параметр Пол может не указываться, но при наличии фамилий с
// инициалами точное определение пола невозможно, поэтому предлагается задавать пол этим
// параметром  1 - мужской 2 - женский  
// ДЛЯ СКЛОНЕНИЯ ПРОФЕССИЙ ИСПОЛЬЗУЙТЕ ФУНКЦИЮ ПАДЕЖП И БУДЕТ ВАМ СЧАСТЬЕ!
// ---------------------------------------------------------------------------------------
// Бибик Галушка Цой Николайчик Наталия Петровна Герценберг Кривошей Капица-Метелица
// Если Падеж(Фио ,1 ,3),       то на выходе получим Фамилия Имя Отчество и т.д.
// Если Падеж(Фио ,1 ,3,"1" ),  то                   Фамилия
// Если Падеж(Фио ,1 ,3,"2" ),  то                   Имя
// Если Падеж(Фио ,1 ,3,"3" ),  то                   Отчество
// Если Падеж(Фио, 1 ,3,"12" ), то                   Фамилия Имя
// Если Падеж(Фио, 1 ,3,"23" ), то                   Имя Отчество
// Если Падеж(Фио,-1 ,3,"231" ),то                   И. О. Фамилия
// Если Падеж(Фио,-1 ,3,"23" ), то                   И. О.  
// 10-11-2003 3-20

Функция Падеж(z1,z2=2,z3=3,z4="123",z5=1) Экспорт
   z6=Нрег(Прав(СокрП(z1),4));
   z7=Прав(z6,1);
 Возврат?(z5<4,Падеж(СокрЛП(СтрЗаменить(Сред(z1,Найти(z1+" "," ")+1),".",". ")),z2,z3,СтрЗаменить(z4,z5,ПадежС(?((z5=3)и(z7="ы"),z1,Лев(z1,Найти(z1+" "," ")-1)),z2,Сред("ча"+z7,?(z3=3,?(z6="оглы",1,?(z6="кызы",1,3)),z3),1),z5)+" "),z5+1),z4);
КонецФункции

Функция ПадежП(Знач z1,Знач z2,z3=0) Экспорт
 z1=СокрЛП(z1);z4=Найти(z1+" "," ")+1;z5=Лев(z1,z4-2);z6=Прав(z5,2);
 z7=?((Найти("ая ий ый",z6)>0)и(Найти("ющий нный",Сред(z1,z4-5,4))=0)и(z3=0),"1","*");
Возврат НРег(?((z6="ая")или(Прав(z6,1)="а"),ПадежС(z5,z2,z7,1)+" "+ПадежС(Сред(z1,z4),z2),ПадежС(z5,z2,"ч",1)+?((z6="ий")и(Найти(z1," ")=0),""," "+?(z7="1",ПадежП(Сред(z1,z4),z2,Число(z7)),Сред(z1,z4)))));
КонецФункции
14 ПиН
 
15.02.12
12:07
(0) терминальный доступ?
15 TatyanaArb
 
15.02.12
12:21
(14) на машине пользователя добавлена информационная база, расположенная на сервере
16 ПиН
 
15.02.12
12:40
(15) как добавлена-то? если 1с вызываетс яна локальной машине - значит надо првоерить регистрацию длл и пути на локальной, если все-таки терминальный доступ - на сервере проверить + при терминальном доступе в 1с-го пользователя нет прав на регитсрацию длл...
17 TatyanaArb
 
15.02.12
13:29
(16) добавлена в список информационных баз в окне Запуск 1С:Предприятия.
1с вызывается на локальной машине.
Компонента склонения загружена в ОбщийМакет.
Если база файловая, то склонение работает даже без регистрации длл,
если серверная - то не работает ни с регистрацией ни без.
18 TatyanaArb
 
15.02.12
13:32
+ (17) также пробовала через терминальный доступ, не работает(
19 Стальная Крыса
 
15.02.12
17:41
(11)(16) я же не зря поинтересовался, что сервер x64  :)
ну не работают x32 DLL-ки в приложении x64.

но проделав некоторые шаманские манипуляции на x64 сервере можно заставить все-таки работать x32 COM-объекты в x64 приложении.

методику сего шаманства можно найти в тырнете.

могу скинуть пошаговую инструкцию, специально для себя написал... уже несколько раз пригодилась :)
(автор идеи не я - просто расписал себе пошагово)
20 LamerSuper
 
15.02.12
17:44
(19)Инструкция не помешала бы.
21 Стальная Крыса
 
15.02.12
19:31
Вот:
Еще раз говорю: идея не моя, ссылку на тырнет не сохранил.
Инструкция описана для Windows Server 2008 R2 x64 (в других версиях может быть что-то по-другому, но общий смысл наверное такой же)

Запуск x32 COM-объектов из x64 приложения
(создание "COM+ обертки")
Например для вызова V82.ComConnector на стороне 64-битного сервера 1С.
Это происходит потому, что 64 битные приложения не могут запускать 32 битные DLL которые активируются при запуске 32 битного COM объекта 1С. Для решения проблемы нужно воспользоваться оберткой COM+ которая являясь 64 битным приложением может взаимодействовать с 32 битными библиотеками.
Для это необходимо выполнить следующие шаги:
1. Запускаем консоль "Службы компонентов" (например: Пуск -> Администрирование -> Службы компонентов.
2. В ветке Приложения COM+ добавляем новое приложение: Создать -> Приложение
3. На вопрос "Установка или создание нового приложения" - выбираем "Создать новое приложение".
4. Имя нового приложения лучше написать чтобы было понятно о чем речь: V8_ComConnector, способ активации - "серверное приложение".
5. Учетная запись для запуска приложения: выбираем учетку под которой стартует сервер 1С.
6. В ветке созданного приложения переходим на ветку "Роли" открываем роль "CreatorOwner" и далее в разделе "Пользователи" создаем пользователя - учетную запись под которой работает сервер 1С.
7. В ветке созданного приложения переходим на ветку "Компоненты" и создаем компонент: Создать -> Компонент
8. Выбираем "Установка новых компонентов", и в диалоге выбираем нужную DLL-ку (comcntr.dll)
9. Открываем свойства только что созданного компонента, идем на вкладку "Безопасность", проверяем в списке "Явно установленные для выделенных объектов роли" стоит ли "птичка" напротив роль CreatorOwner - если нет, тогда устанавливаем эту "птичку".
22 andrewks
 
15.02.12
20:07
(21) оформил бы лучше статью в http://www.kb.mista.ru/
23 TatyanaArb
 
16.02.12
09:45
(21) Спасибо за подробную инструкцию.
Могли бы пояснить пункт 5.Учетная запись для запуска приложения: выбираем учетку под которой стартует сервер 1С.
Что нужно выбрать, если сервер 1С стартует под системной учетной записью?
24 Стальная Крыса
 
16.02.12
11:14
(23) значит "системную" и надо указывать
25 TatyanaArb
 
16.02.12
11:23
там имеется:
Системная учетная запись:
- текущий пользователь
- локальная служба
- сетевая служба.
Уже попробовала со всеми перечисленными, ПодключитьВнешнююКомпоненту() по-прежнему = Ложь (((
26 Стальная Крыса
 
16.02.12
11:42
(22) оформил: Книга знаний: Вызов 32-битных COM-объектов на стороне 64-битного сервера 1С  :)

(25) может быть именно с "внешней компонентой" задействуются еще какие-то "внутренние" механизмы.
а в ПодключитьВнешнююКомпоненту() указывали имя объекта COM+ ?
27 Fish
 
16.02.12
11:44
(25) Блин, давно бы уже взяла (13) и не парилась с левыми компонентами.
28 Стальная Крыса
 
16.02.12
11:45
(27) поддерживаю  :)
29 TatyanaArb
 
16.02.12
11:48
(25) Да уже прикрутила (13), большое спасибо)))
Но хочется, чтобы и внешняя компонента заработала)
30 Стальная Крыса
 
16.02.12
11:57
(29) в вашем случае - ну ее ...  :)
Закон Брукера: Даже маленькая практика стоит большой теории.