![]() |
|
Получить ссылку на документ при его первой записи | ☑ | ||
---|---|---|---|---|
0
ac13
29.04.17
✎
18:49
|
Можно ли как-то получить ссылку нового документа при его первой записи. Перед записью никак, а при записи ссылка же уже формируется, правильно? Мне надо получить ссылку при записи и записать ее в реквизит. При первой записи ссылку не записывает, а вот при повторной - все ок. А мне надо при первой
Вот мой код: Процедура ПриЗаписи(Отказ) Если Не ЗначениеЗаполнено(Реквизит) Тогда Реквизит = СокрЛП(ЧисловойКодПоСсылке(Ссылка)); КонецЕсли; КонецПроцедуры Функция ЧисловойКодПоСсылке(Ссылка) ШестнадчатиричноеЧисло = СтрЗаменить(Строка(Ссылка.УникальныйИдентификатор()),"-",""); Возврат ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(ШестнадчатиричноеЧисло); КонецФункции Функция ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(Знач Значение) Значение = НРег(Значение); ДлинаСтроки = СтрДлина(Значение); Результат = 0; Для НомерСимвола = 1 По ДлинаСтроки Цикл Результат = Результат * 16 + СтрНайти("0123456789abcdef", Сред(Значение, НомерСимвола, 1)) - 1; КонецЦикла; Возврат Формат(Результат, "ЧГ=0"); КонецФункции |
|||
1
ac13
29.04.17
✎
18:59
|
Главное саму ссылку формирует и заполняет реквизит, пока форма открыта. А когда закроешь откроешь документ - в реквизите пусто. То есть ссылку получает, но не записывает в реквизит
|
|||
2
ac13
29.04.17
✎
19:01
|
Оно ссылку получает наверное уже после того как документ записан. А как тогда быть? Мне надо получить и записать ее в реквизит при первой записи.
|
|||
3
Flip
29.04.17
✎
19:04
|
Ну есть же функция;
УстановитьСсылкуНового(Документы.МойДок.ПолучитьСсылку(Новый УникальныйИдентификатор)); |
|||
4
Flip
29.04.17
✎
19:09
|
Выполняешь эту функцию в процедуре на сервере, контекст твоей формы синхронизируется с серверным объектом формы, форма на клиенте перестраивается, и в твоем реквизите нужное значение.
|
|||
5
ac13
29.04.17
✎
19:11
|
Процедура ПриЗаписи(Отказ)
НовыйУин = Документы.ЗаявкаНаРемонт.ПолучитьСсылку(Новый УникальныйИдентификатор); ШестнадчатиричноеЧисло = СтрЗаменить(Строка(НовыйУин),"-",""); НовыйШтрихкод = ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(ШестнадчатиричноеЧисло); Если Не ЗначениеЗаполнено(Штрихкод) Тогда Штрихкод = НовыйШтрихкод); КонецЕсли; КонецПроцедуры Функция ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(Знач Значение) Значение = НРег(Значение); ДлинаСтроки = СтрДлина(Значение); Результат = 0; Для НомерСимвола = 1 По ДлинаСтроки Цикл Результат = Результат * 16 + СтрНайти("0123456789abcdef", Сред(Значение, НомерСимвола, 1)) - 1; КонецЦикла; Возврат Формат(Результат, "ЧГ=0"); КонецФункции |
|||
6
ac13
29.04.17
✎
19:12
|
Код пишу в модуле объекта.
Но че-то то же самое |
|||
7
Flip
29.04.17
✎
19:18
|
Так, в процедуре ПриЗаписи() ссылка на записываемый объект, уже должна быть в базе.
Если хочешь получить ссылку, то это надо делать ПередЗаписью() |
|||
8
Flip
29.04.17
✎
19:21
|
Типа
Процедура ПередЗаписью(Отказ) НовыйУин = Документы.ЗаявкаНаРемонт.ПолучитьСсылку(Новый УникальныйИдентификатор); ШестнадчатиричноеЧисло = СтрЗаменить(Строка(НовыйУин),"-",""); НовыйШтрихкод = ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(ШестнадчатиричноеЧисло); Если Не ЗначениеЗаполнено(Штрихкод) Тогда Штрихкод = НовыйШтрихкод); КонецЕсли; // если что-то пошло не так, то Отказ = Истина; КонецПроцедуры |
|||
9
Flip
29.04.17
✎
19:25
|
Перед записью - ссылки на новый объект еще пока нет, но платформа позволяет "выделить место" в базе под новым идентификатором объекта, с помощью метода ПолучитьСсылку(Новый УникальныйИдентификатор);
а при записи - объект уже записан в БД, как ссылка. |
|||
10
ac13
29.04.17
✎
19:28
|
(8) спасибо! так работает, единственное ссылка не такая как конечная. слишком длинный в итоге номер
|
|||
11
ac13
29.04.17
✎
19:40
|
Новая ссылка:
<Объект не найден> (24263:b8658564a8357dfd4defc7d01dc1a61f) Ссылка после записи: 1ab0a8f2-2cfa-11e7-aa50-78e3b51a8a1f Мне кажется конечный вариант ссылки никак не получить сразу. |
|||
12
ac13
29.04.17
✎
19:42
|
Либо попробовать конвертировать ссылку в уин
|
|||
13
Flip
29.04.17
✎
19:43
|
Попробуй использовать эти функции преобразования (долгих лет человеку, который их написал!! :) );
Функция Из_10_В_Любую(Знач Значение=0,Нотация=128) Экспорт Если Нотация<=0 Тогда Возврат("") КонецЕсли; Значение=Число(Значение); Если Значение<=0 Тогда Возврат("0") КонецЕсли; Значение=Цел(Значение); Результат=""; Пока Значение>0 Цикл Результат=Сред("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!" + "#$%&'()*+,-./:;<=>?@[\]^_`{|}~" + """",Значение%Нотация+1,1)+Результат; Значение=Цел(Значение/Нотация) ; КонецЦикла; Возврат Результат; КонецФункции //_________________________________________________________ Функция Из_Любой_В_10(Знач Значение="0",Нотация=128) Экспорт Если Нотация<=0 Тогда Возврат(0) КонецЕсли; Значение=СокрЛП(Значение); Если Значение="0" Тогда Возврат(0) КонецЕсли; Результат=0; Длина=СтрДлина(Значение); Для Х=1 По Длина Цикл М=1; Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла; Результат=Результат+(Найти("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!" + "#$%&'()*+,-./:;<=>?@[\]^_`{|}~" + """",Сред(Значение,Х,1))-1)*М; КонецЦикла; Возврат Окр(Результат); КонецФункции |
|||
14
Flip
29.04.17
✎
19:45
|
Я вот так преобразовываю гуид ссылки в штрихкод (сам поправишь то что нужно);
Функция УпаковатьГУИДСсылки(Ссылка) Экспорт ГУИДСсылки = Ссылка.УникальныйИдентификатор(); Если ГУИДСсылки = Неопределено Тогда ОбщегоНазначения.СообщитьОбОшибке("Не удалось определить GUID передаваемого объекта!"); Возврат ""; КонецЕсли; ГУИДСсылкиБезДефисов = СтрЗаменить(СокрЛП(ГУИДСсылки), "-",""); ГУИДСсылкиБезДефисов = "a" + ГУИДСсылкиБезДефисов; ДесятичноеПредставление = Из_Любой_В_10(ГУИДСсылкиБезДефисов, 16); СтоДвадцатиВосьмиричноеПредставление = Из_10_В_Любую(ДесятичноеПредставление, 94); Возврат СтоДвадцатиВосьмиричноеПредставление; КонецФункции Функция ПреобразоватьШтрихКодВГУИД(ПрочитанныйШтрихкод, Нотация10 = 94 , Нотация16 = 16) Экспорт ДесятичноеПредставление = Из_Любой_В_10(ПрочитанныйШтрихкод, Нотация10); ШестнадцатиричноеПредставление = Из_10_В_Любую(ДесятичноеПредставление, Нотация16); ШестнадцатиричноеПредставление = Сред(ШестнадцатиричноеПредставление, 2); ГУИД = Лев(ШестнадцатиричноеПредставление, 8)+"-"+Сред(ШестнадцатиричноеПредставление,9,4)+"-"+Сред(ШестнадцатиричноеПредставление,13,4)+"-"+Сред(ШестнадцатиричноеПредставление,17,4)+"-"+ Сред(ШестнадцатиричноеПредставление,21,12); Если ЗначениеЗаполнено(ГУИД) Тогда Возврат ГУИД; Иначе Возврат Неопределено; КонецЕсли; КонецФункции Функция Из_10_В_Любую(Знач Значение=0,Нотация=128) Экспорт Если Нотация<=0 Тогда Возврат("") КонецЕсли; Значение=Число(Значение); Если Значение<=0 Тогда Возврат("0") КонецЕсли; Значение=Цел(Значение); Результат=""; Пока Значение>0 Цикл Результат=Сред("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!" + "#$%&'()*+,-./:;<=>?@[\]^_`{|}~" + """",Значение%Нотация+1,1)+Результат; Значение=Цел(Значение/Нотация) ; КонецЦикла; Возврат Результат; КонецФункции //_________________________________________________________ Функция Из_Любой_В_10(Знач Значение="0",Нотация=128) Экспорт Если Нотация<=0 Тогда Возврат(0) КонецЕсли; Значение=СокрЛП(Значение); Если Значение="0" Тогда Возврат(0) КонецЕсли; Результат=0; Длина=СтрДлина(Значение); Для Х=1 По Длина Цикл М=1; Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла; Результат=Результат+(Найти("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!" + "#$%&'()*+,-./:;<=>?@[\]^_`{|}~" + """",Сред(Значение,Х,1))-1)*М; КонецЦикла; Возврат Окр(Результат); КонецФункции |
|||
15
ac13
29.04.17
✎
19:46
|
Не суть получить Шестнадцатиричный код
Главное, что новая ссылка перед записью и после записи разные. Вот: Процедура ПередЗаписью(Отказ) НовыйУин = Документы.ЗаявкаНаРемонт.ПолучитьСсылку(Новый УникальныйИдентификатор); Штрихкод = НовыйУин.УникальныйИдентификатор(); КонецПроцедуры Результат такой: 726fa7e1-c3a9-4bc4-bce3-9c64383e2b41 Процедура ПриЗаписи(Отказ) Штрихкод = Ссылка.УникальныйИдентификатор(); КонецПроцедуры Результат такой: 03bfa291-2cfb-11e7-aa50-78e3b51a8a1f |
|||
16
ac13
29.04.17
✎
19:47
|
Либо как вариант печатать на документе штрихкод не из ссылки документа, а из реквизита Штрихкод
|
|||
17
KAO111
29.04.17
✎
19:54
|
(15) Не хватает УстановитьСсылкуНового(НовыйУИН)
|
|||
18
ac13
29.04.17
✎
20:00
|
(17) теперь получилось.
(8), (17) спасибо вам!!! |
|||
19
Flip
29.04.17
✎
20:14
|
Пожалуйста :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |