Имя: Пароль:
1C
1С v8
Получить ссылку документа из штрихкода?
,
0 SkillUp
 
04.09.19
11:22
Здавствуйет, подскажите как получить полноценную ссылку документа из штрихкода. Пример, получаю строку  - "d94c7b60c3e311e9baae309c2344e8cc", а как ее преобразовать эту строку с дефисами (пример - 58df113e-c7e3-4da8-7000-1e50ee4df678) ?

Мой код:
Функция ПреобразоватьДесятичноеЧислоВШестнадцатиричнуюСистемуСчисления(ДесятичноеЧисло)
              
    Результат = "";
    
    Пока ДесятичноеЧисло > 0 цикл
        ОстатокОтДеления = ДесятичноеЧисло % 16;
        ДесятичноеЧисло  = (ДесятичноеЧисло - ОстатокОтДеления) / 16;
        Результат        = Сред("0123456789abcdef", ОстатокОтДеления + 1, 1) + Результат;
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции
1 Beduin
 
04.09.19
11:26
(0) Ты из гуида хочешь ссылку на документ получить?
2 Кодер
 
04.09.19
11:26
Функция ПолучитьСсылку(Стр)
Если Стр = "d94c7b60c3e311e9baae309c2344e8cc" Тогда
  Возврат "58df113e-c7e3-4da8-7000-1e50ee4df678"
КонецЕсли;
КонецФункции
3 SSSSS_AAAAA
 
04.09.19
11:32
(0) А где тут штрихкод? А откуда взято соответствие "d94c7b60c3e311e9baae309c2344e8cc" и  58df113e-c7e3-4da8-7000-1e50ee4df678?
4 SkillUp
 
04.09.19
11:33
1 мин. )
5 SSSSS_AAAAA
 
04.09.19
11:34
(0) И с какого перепугу для работы со штрихкодами и гуидами использована функция работы с десятичным числом?
6 SkillUp
 
04.09.19
11:38
(5) Ну как, смотрю код. Чтоб в печатной форме РН, поле штрихкод заполнилось. Сначало идет преобразование 16-ти в 10 -чный, потом преобразует число в штрихкод. Т.е. мне ,чтоб получить ссылку надо все выполнить в обратном порядке.

Вот код из конфы:

Функция ЧисловойКодПоСсылке(Ссылка) Экспорт
    ШестнадчатиричноеЧисло = СтрЗаменить(Строка(Ссылка.УникальныйИдентификатор()),"-","");
    Возврат ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(ШестнадчатиричноеЧисло);
КонецФункции

Процедура ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, Знач ОбластьМакета, Ссылка) Экспорт
    
    ВыводитьШтрихкодВОтдельнуюОбласть = Ложь;
    Если Не ЕстьКартинкаШтрихкодаВОбластиМакета(ОбластьМакета) Тогда
        // Картинки штрихкода в этой области макета нет.
        
        Если Макет.Области.Найти("ОбластьШтрихкода") <> Неопределено Тогда
            
            // Проверить картинку штрихкода в области "Штрихкод"
            ОбластьМакетаШтрихкод = Макет.ПолучитьОбласть("ОбластьШтрихкода");
            Если ЕстьКартинкаШтрихкодаВОбластиМакета(ОбластьМакетаШтрихкод) Тогда
                ОбластьМакета = ОбластьМакетаШтрихкод;
                ВыводитьШтрихкодВОтдельнуюОбласть = Истина;
            Иначе
                Возврат;
            КонецЕсли;
        Иначе
            Возврат;
        КонецЕсли;
        
    КонецЕсли;
    
    Если Не ПолучитьФункциональнуюОпцию("ИспользоватьШтрихкодированиеПечатныхФормОбъектов") Тогда
        ОбластьМакета.Рисунки.Удалить(ОбластьМакета.Рисунки.КартинкаШтрихкода);
        Возврат;
    КонецЕсли;
    
    Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
    КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
    
    ПараметрыШтрихкода = Новый Структура;
    ПараметрыШтрихкода.Вставить("Ширина",          Окр(ОбластьМакета.Рисунки.КартинкаШтрихкода.Ширина / КоличествоМиллиметровВПикселе));
    ПараметрыШтрихкода.Вставить("Высота",          Окр(ОбластьМакета.Рисунки.КартинкаШтрихкода.Высота / КоличествоМиллиметровВПикселе));
    ПараметрыШтрихкода.Вставить("Штрихкод",        СокрЛП(ЧисловойКодПоСсылке(Ссылка)));
    ПараметрыШтрихкода.Вставить("ТипКода",         4); // Code128
    ПараметрыШтрихкода.Вставить("ОтображатьТекст", Ложь);
    ПараметрыШтрихкода.Вставить("РазмерШрифта",    6);
    
    ОбластьМакета.Рисунки.КартинкаШтрихкода.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
    
    Если ВыводитьШтрихкодВОтдельнуюОбласть Тогда
        ТабличныйДокумент.Вывести(ОбластьМакета);
    КонецЕсли;
    
КонецПроцедуры
7 SkillUp
 
04.09.19
11:40
Из 16 в 10 преобразую с помощью функции

Функция ПреобразоватьДесятичноеЧислоВШестнадцатиричнуюСистемуСчисления(ДесятичноеЧисло)
              
    Результат = "";
    
    Пока ДесятичноеЧисло > 0 цикл
        ОстатокОтДеления = ДесятичноеЧисло % 16;
        ДесятичноеЧисло  = (ДесятичноеЧисло - ОстатокОтДеления) / 16;
        Результат        = Сред("0123456789abcdef", ОстатокОтДеления + 1, 1) + Результат;
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции
8 SkillUp
 
04.09.19
11:40
Или я не правильно понял, как из числа, получить ссылку на документ?
9 Кодер
 
04.09.19
12:20
Никак. Делай свой регистр (порядковый номер, тип объекта, ссылка на объект), номер в EAN13 с префиксом от 20 до 29, ссылку вытаскивай из регистра.
10 Йохохо
 
04.09.19
12:27
(8) чтобы все было однозначно количество комбинаций должно быть одинаковым, у тебя 32 знака по базе 16, какая должна быть длина по основанию 10?
11 zva
 
04.09.19
12:27
Конфигурация хоть какая?
В той же УТ 11.4
// Функция - Получить ссылку по штрихкоду табличного документа
//
// Параметры:
//  Штрихкод - Строка - Штрихкод
//  Менеджеры - Массив - Менеджеры документов.
//
// Возвращаемое значение:
//  Массив - Ссылки на документы

ШтрихкодированиеПечатныхФорм.ПолучитьСсылкуПоШтрихкодуТабличногоДокумента(Штрихкод, Менеджеры)
12 SkillUp
 
04.09.19
12:47
(11) О! Блин, где ты был раньше!!?!?!?!? СПАСИБО!
Программист всегда исправляет последнюю ошибку.