Имя: Пароль:
1C
1С v8
Склонения объектов (ЗУП)
0 Масянька
 
15.03.22
13:14
День добрый!
В ЗУП есть общий модуль СклонениеПредставленийОбъектов + РС со склонениями объектов.
Связка объекта и РС со склонениями - по хэшу.
Вопрос: почему могут не совпадать хэши?
Спасиба.
1 Жан Пердежон
 
15.03.22
13:16
Потому что разные аргументы.
Ваш Кэш.
2 Жан Пердежон
 
15.03.22
13:16
*кэп
3 Масянька
 
15.03.22
13:16
(1) Аргументы чего? Какие?
4 Жан Пердежон
 
15.03.22
13:18
Аргументы функции
5 Фрэнки
 
15.03.22
13:19
(3) хэш-функции.

Что такое сам хэш , в курсе?
6 Масянька
 
15.03.22
13:19
В документе таб. часть.
В таб. части 2 (два) сотрудника.
У одного сотрудника - норм (хэш идентичен), у другого - индейская изба.
7 Масянька
 
15.03.22
13:19
(4) См. (6).
8 Масянька
 
15.03.22
13:20
(5) Погуглила :)
9 Масянька
 
15.03.22
13:22
Аргумент - фамилия сотрудника (из регистра).
10 Масянька
 
15.03.22
13:24
Причем такая засада далеко не у всех сотрудников.
11 Масянька
 
15.03.22
13:25
При удалении строки склонения (из регистра) и записи новой - хэш формируется старый.
12 Масянька
 
15.03.22
14:08
Если из таб. части провалиться в сотрудника, а оттуда в физика - хэш выдает тот же, что и в регистре.
13 Масянька
 
15.03.22
14:10
Кусок из печ. формы:
            КадровыеДанные = ПолучитьКадровыеДанныеСотрудника(СсылкаНаДокумент, ДанныеПоСотруднику.Сотрудник);
            ПолСотрудника  = ?(ДанныеПоСотруднику.Сотрудник.Пол = Перечисления.ПолФизическогоЛица.Мужской, 1, 2);
            
Сообщить("0 - " + СокрЛП(ДанныеПоСотруднику.Сотрудник.Фамилия) + "/");            
            ФамилияСотрудника = МодульСклонениеПредставленийОбъектов.ПросклонятьФИО(СокрЛП(ДанныеПоСотруднику.Сотрудник.Фамилия), 3, , ПолСотрудника);

Кусок общего модуля склонения:
    ИмяПадежа = СоответствиеПадежей().Получить(Падеж);
    ПроверитьПараметрПадеж(Падеж, "СклонениеПредставленийОбъектов.Просклонять");
    
Сообщить("1 - " + Представление + " - " + Падеж + " - " + Объект + " - " + ПараметрыСклонения);            
    СтруктураСклоненияИзРегистра = СклоненияИзРегистра(Представление, Объект);
Сообщить("2 - " + СтруктураСклоненияИзРегистра);            

Сообщить("2 - " + СтруктураСклоненияИзРегистра); - выдает пусто (неопределенно).
Где косяк?
14 Gucci76
 
15.03.22
14:22
Раньше была ошибка, что переводили в верхний регистр и искали ХЭШ
15 Serg_1960
 
15.03.22
14:28
(9) Аргумент - ФИО физического лица.
СклонениеПредставленийОбъектов.ПриЗаписиФормыОбъектаСклонения(ЭтотОбъект, ФизическоеЛицо.ФИО, ФизическоеЛицо.Ссылка, ПараметрыСклонения);
16 Gucci76
 
15.03.22
14:30
Кстати, сегодня была ошибка в функции склонения
СклонениеПредставленийОбъектов.ПросклонятьФИО(Объект.Сотрудник.ФизическоеЛицо.Наименование,2,Объект.Сотрудник.ФизическоеЛицо,Объект.Сотрудник.ФизическоеЛицо.Пол);
Эта функция выдавала ошибку.
17 Gucci76
 
15.03.22
14:31
Ошибка была у сотрудника, у которого нет склонения в регистре сведений (ред 3.1.18.396). Включена возможность склонять Морфером.
18 Масянька
 
15.03.22
14:34
(14) Не получается.
А обратно разложить вариант?
19 Масянька
 
15.03.22
14:37
(17) Он как раз и склоняет морфером, потому что не находит запись в регистре. А она (запись) есть.
20 Масянька
 
15.03.22
14:38
(15) Еще раз: в таб. части 2 сотрудника. Оба раза передается фамилия (без пробелов). У одного сотрудника - норм, второго не находит.
21 hhhh
 
15.03.22
14:58
(20) показывайте уже вашу запись
22 Serg_1960
 
15.03.22
15:21
(20) Ещё раз :) модуль формы записи справочника "Сотрудники":

Процедура ПриСозданииНаСервере()
   СклонениеПредставленийОбъектов.ПриСозданииНаСервере(ЭтотОбъект, ФизическоеЛицо.ФИО, "ФизическоеЛицо");

Процедура ОбработкаОповещения()
   Если ИмяСобытия = "ИзмененЗаголовокФормыСотрудника" Тогда
      ПараметрыСклонения = ПараметрыСклонения(ФизическоеЛицо);
      СклонениеПредставленийОбъектовКлиент.ПросклонятьПредставление(ЭтотОбъект, ФизическоеЛицо.ФИО, ПараметрыСклонения);

Процедура ПриЗаписиНаСервере()
   ПараметрыСклонения = ПараметрыСклонения(ФизическоеЛицо);
   СклонениеПредставленийОбъектов.ПриЗаписиФормыОбъектаСклонения(ЭтотОбъект, ФизическоеЛицо.ФИО, ФизическоеЛицо.Ссылка, ПараметрыСклонения);

Процедура Склонения()
   ПараметрыСклонения = ПараметрыСклонения(ФизическоеЛицо);
   СклонениеПредставленийОбъектовКлиент.ПоказатьСклонение(ЭтотОбъект, ФизическоеЛицо.ФИО, ПараметрыСклонения);

Процедура ФИОПриИзменении(Элемент)
   ПараметрыСклонения = ПараметрыСклонения(ФизическоеЛицо);
   СклонениеПредставленийОбъектовКлиент.ПросклонятьПредставление(ЭтотОбъект, ФизическоеЛицо.ФИО, ПараметрыСклонения);
23 Serg_1960
 
15.03.22
15:23
PS:может быть всё таки стоит покопать в сторону сотрудников и физических лиц этих сотрудников?
24 Масянька
 
15.03.22
15:25
(23) А (11) и (12) - это не копание?
(22) В (11) полностью проиграла процесс склонения.
25 Serg_1960
 
15.03.22
16:23
(24) Имхо, контрольная сумма - от полного ФИО физлица (фамилия имя отчество полностью). Поэтому поиск только по фамилии всегда выдаёт СтруктураСклоненияИзРегистра = Неопределено.
26 Масянька
 
15.03.22
16:37
(25) А почему тогда у одного сотрудника работает, а у другого нет? В обоих случаях фамилии передаются.
27 Gucci76
 
15.03.22
16:42
А в регистре сведений "Склонения...." смотрели что заведено?
28 Масянька
 
15.03.22
17:22
(27) В РС фамилия не склоняется, а имя и отчество склоняются.
А в печати - фамилия склоняется, а не должна.
29 Serg_1960
 
15.03.22
17:46
У меня фамилия склоняется. Если СтруктураСклоненияИзРегистра = Неопределено, то алгоритм далее продолжает перебирает различные методы склонения и в конце концов вызывается ПолучитьСклоненияСтроки()
30 Масянька
 
16.03.22
08:33
(29) Именно так и работает.
В регистре не нашло.
И очень непонятно, зачем хэш, если объект?
31 Serg_1960
 
16.03.22
10:50
(30) Нуу... например, у человека может изменяться ФИО.
32 Gucci76
 
16.03.22
13:57
(31) В этом случае должно склонение измениться.
33 Масянька
 
16.03.22
14:03
(31) Я написала свою функцию (связка с РС по полю "Объект") - отрабатывает всё тютелька в тютельку.
Измениться может до фига всего.
Зачем нужен кэш, когда есть объект?!
35 Serg_1960
 
16.03.22
15:04
(33) Объект - один и тот же, а хэши - разные. Поэтому у регистра два измерения. Что тут не понятно?
PS: тут трое в непонятках: Я, Вы и конфигурация :))
36 Gucci76
 
16.03.22
15:05
(33) Я тоже об этом подумал, когда 1С ошибку сделала при печати сведений для БЛ (та ошибка была, что хеш искали от верхнего регистра)
А вы попробуйте отладчиком проверить исходные параметры по поиску ХЕШа.
Сохраните одно первое значение параметра , потом когда формируете со вторым параметром напишите типа того
СохраненноеЗначениеПервогоПАраметра = ЗначениеВторогоПараметра
Если Истина тогда даже не знаю что делать, а если ложь анализировать
Вдруг английская буква где или еще чего
37 Gucci76
 
16.03.22
15:06
Если туманно объяснил, то постараюсь подробнее
38 Масянька
 
16.03.22
15:17
(36) Я поняла всё.
У нас - перенос из УПП. Поэтому даже не хочу лезть анализировать... Там такого г..на напереносили...
В данной конкретной задаче - странно то, что у одного сотрудника все норм отрабатывает, а у другого нет. Причем, эта не первый (и не последний) раз.
В общем, я написала свое склонение: из РС по объекту, если результат пустой - встроенным механизмом (МодульСклонениеПредставленийОбъектов.ПросклонятьФИО).
Вроде работает.
39 Фантазер
 
16.03.22
19:06
Если вы так глубоко копали - подскажите как в функции Склонять Объект - убрать первую букву в верхнем регистре? Склоняем Подразделения, уже в РС Склонений прописали их с маленькой буквы - всё равно выдает их с большой. Мог бы я программно убрать, но есть подразделения и абревиатуры, а есть составные
40 Масянька
 
17.03.22
08:52
(39) Попробуйте: общий модуль СклонениеПредставленийОбъектов, процедура ПреобразоватьФИОДляСклонения.
Но я не уверена - там много чего понаписали... Но склонение и преобразование в этом общем модуле.