Как преобразовать ссылку в строку 1с
Перейти к содержимому

Как преобразовать ссылку в строку 1с

  • автор:

Как преобразовать ссылку в строку 1с

Уважаемые, прошу направить на путь

Суть: Если стороннее ПО, соединяется по COM. В ПО из 1С8 передается параметр в виде GUID (пример: Путь до программы + » » + GUID). Получили в ПО ссылку на объект.

Проблемка: в файловом варианте — работает, в клиент-серверном — нет
В клиент-серверном пишет ошибку «Не удалось Мой_Документ.ПолучитьСсылку по УИД 51a1b24c-0d8f-11e8-80cd-a0d3c1fbc177»

Пошли другим путем: решили передавать в ПО ссылку на объект, ссылку передали в формате «Мой документ 94031 от 20.04.2018 9:32:12»

Теперь надо преобразовать Строку в Ссылку.

>В клиент-серверном пишет ошибку «Не удалось Мой_Документ.ПолучитьСсылку по УИД 51a1b24c-0d8f-11e8-80cd-a0d3c1fbc177»
ошибка другая

>Пошли другим путем: решили передавать в ПО ссылку на объект, ссылку передали в формате «Мой документ 94031 от 20.04.2018 9:32:12»

Преобразование типов в 1С

Разберем основные вопросы преобразования типов в 1С 8.3: из строки в число, из числа в строку, из даты в число и прочие варианты. В этой статье мы рассмотрим функции преобразования значений, и я соберу в едино все варианты преобразования примитивных типов.

Строка в число в 1С

Узнаем, как в 1С 8.3 преобразовать строку в число.

Пусть, у нас есть числа в таком виде.

СтрокаЧ1 = "120"; СтрокаЧ2 = "12.24"; СтрокаЧ3 = "12,24"; СтрокаЧ4 = "0,24"; СтрокаЧ5 = "0000001"; 

Для того, чтобы выполнить преобразование этих строк в число, необходимо воспользоваться методом Число. Этот метод преобразует параметр в число.

Ч1 = Число(СтрокаЧ1); Ч2 = Число(СтрокаЧ2); Ч3 = Число(СтрокаЧ3); Ч4 = Число(СтрокаЧ4); Ч5 = Число(СтрокаЧ5); 

Обратите внимание, что разделять дробную часть можно в строке как при помощи символа точка «.», так и при помощи символа запятая «,». Если перед каким-то числом в строке стоят нули, то они отсекаются. У нас будет следующий результат.

Строка в число в 1С

Число в строку в 1С

Рассмотрим обратную задачу, когда в 1С 8.3 нужно преобразовать число в строку. Самый простой вариант использовать метод Строка, который преобразует собственный параметр в строку.

Ч1 = 120; Ч2 = 12.24; Ч3 = 10000000000; СтрокаЧ1 = Строка(Ч1); СтрокаЧ2 = Строка(Ч2); СтрокаЧ3 = Строка(Ч3); Сообщить(СтрокаЧ1); Сообщить(СтрокаЧ2); Сообщить(СтрокаЧ3); 

И какой результат возвращает этот код:

Число в строку в 1С

У этого способа имеется недостаток: он ставит пробелы между разрядами у длинных чисел. Для того, чтобы в 1С преобразовать число в строку без пробелов нужно воспользоваться функцией Формат. Данная функция имеет два параметра: преобразуемое значение и форматную строку. Если нам нужно указать, что число преобразуется в строку без пробелов в разряде, то необходимо указать в форматной строке, что порядок разделения группировки разрядов числа или равен 0, или пустой.

Ч1 = 10000000000; СтрокаЧ1 = Формат(Ч1,"ЧГ color: red;">); Сообщить(СтрокаЧ1); 

Результат будет без разрядов:

число в строку без пробелов 1C

Строка в дату 1С

Узнаем, как преобразовать в 1С 8.3 строку в дату. Для этого необходимо использовать метод Дата, который преобразует параметр (в том числе строку ) в дату . Причем, замечу, что строка должна быть задана в таком формате «ГГГГММДДЧЧММСС».

Подробнее о форматах дат читайте в этой статье: даты в 1С.

СтрокаД1 = "20120910"; СтрокаД2 = "20120910121559"; СтрокаД3 = "00010101121559"; Дата1 = Дата(СтрокаД1); Дата2 = Дата(СтрокаД2); Дата3 = Дата(СтрокаД3); 

Строка в дату в 1С

Если мы зададим дату в не верном формате, то преобразование не произойдет и возникнет ошибка «Преобразование значения к типу Дата не может быть выполнено».

Например, этот код:

СтрокаД1 = "121559"; Дата1 = Дата(СтрокаД1) 

Приведет к ошибке:

Преобразование значения к типу Дата не может быть выполнено

Дата в строку в 1С

Преобразовать дату в строку можно несколькими способами. Первый способ: воспользоваться уже знакомым нам методом Строка.

Дата1 = Дата(2012,10,12); СтрокаД = Строка(Дата1); Сообщить(СтрокаД); 

В этом случае у нас выйдет строка в обычном «полном» формате даты.

Дата в строку в 1С

А чтобы получить дату в том формате, в каком нам нужно, необходимо воспользоваться методом Формат.

Форматов дат может быть великое множество ,все я разбирать в этой статье не буду, покажу только как можно быстро воспользоваться этой функцией.

Мы изменим предыдущий код, написав вместо метода Строка метод Формат, а в качестве второго параметра у метода Формат напишем просто две кавычки.

Дата1 = Дата(2012,10,12); СтрокаД = Формат(Дата1,""); Сообщить(СтрокаД); 

После нужно между кавычками поставить курсор, вызвать контекстное меню, и применить в нем команду Конструктор форматной строки.

Конструктор форматной строки

В этом конструкторе на закладке Дата вы можете выбрать удобный вам формат даты.

Конструктор форматной строки

И после нажатия кнопки ОК этого конструктора, нужный формат появится в виде строки.

Дата1 = Дата(2012,10,12); СтрокаД = Формат(Дата1,"ДФ=dd/MM/yy"); Сообщить(СтрокаД); 

В результате метода Формат, дата будет преобразована в строку в том виде, в каком нам необходимо.

Дата в строку в 1С

Строка в булево в 1С

При помощи метода Булево мы можем некоторые строковые представления (Да, Нет, Истина, Ложь) преобразовывать в значения Истина или Ложь.

Например, следующие переменные:

стр_Да = Булево("Да"); стр_Нет = Булево("Нет"); стр_Истина = Булево("Истина"); стр_Ложь = Булево("Ложь"); 

Будут иметь такие значения:

Строка в булево

Булево в строку в 1С

Разберем, как в 1С можно выразить тип булево строкой. Булево значение можно преобразовать в строку несколькими способами. Во-первых, можно просто воспользоваться методом Строка.

Например, как здесь:

б_Истина = Истина; б_Ложь = Ложь; СтрИстина = Строка(б_Истина); СтрЛожь = Строка(б_Ложь); Сообщить(СтрИстина); Сообщить(СтрЛожь); 

У нас будет выходить следующий результат:

Булево в строку

В этом случае, булево в строку преобразовалось согласно региональным установкам информационной базы.

Если мы, как-то по-другому хотим преобразовать булево в строку, то можно воспользоваться уже знакомым нам методом Формат.

Переделаем, предыдущий код:

б_Истина = Истина; б_Ложь = Ложь; СтрИстина = Формат(б_Истина,""); СтрЛожь = Формат(б_Ложь,""); 

Знакомым способом вызовем конструктор форматной строки, где на закладке Булево введем преставление значений Истина и Ложь.

Конструктор форматной строки Булево

После нажатия кнопки ОК конструктора, второй параметр метода Формат заполнится:

б_Истина = Истина; б_Ложь = Ложь; СтрИстина = Формат(б_Истина,"БЛ='Ни как нет'; БИ=Конечно"); СтрЛожь = Формат(б_Ложь,"БЛ='Ни как нет'; БИ=Конечно"); Сообщить(СтрИстина); Сообщить(СтрЛожь); 

И будет следующий результат:

Булево в строку

Число в булево в 1С

В 1С 8.3. мы можем преобразовать любое число в булево по следующему правилу: 0 будет преобразован в Ложь, все остальные значения в Истина.

б_Ложь = Булево(0); б_Истина = Булево(100000); 

Будет следующий результат:

Число в булево в 1С

Булево в число в 1С

Можно сделать и обратное преобразование. Булево значение в число.

Для этого нужно воспользоваться методом Число, где в качестве параметра указать булево значение. Тогда Истина будет преобразована в 1С, а Ложь – в 0.

Например, как в этом коде:

б_Истина = Истина; б_Ложь = Ложь; ч_Истина = Число(б_Истина); ч_Ложь = Число(б_Ложь); 

С таким результатом:

Булево в число

Статьи о примитивных типах в 1С:

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму
.

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Преобразование ссылки в строку и обратно

Доброго времени суток. На сервере без контекста формируется большой объем табличных данных, который впоследствии передаются на клиент в виде массива структур и заполняются в дерево формы. Делается это возвратным значением функции, которая и формирует структуру возврата. Приложение управляемое 8.2, клиент тонкий и только такой. В ячейках «таблицы» как простые типы, так и ссылки.

Начиная с 1000 строк и 20 столбцов передача на клиент занимает от 5 секунд и выше, что неблагоприятно сказывается на быстродействии сотрудников. При практически неограниченной ширине канала это недопустимо, ведь реальный объем данных не превышает одного мегабайта за редким исключением. В связи с чем мною были выполнены тесты по архивации и они довольно существенно повысили скорость передачи. Достаточно схлопнуть примитивные типы из нескольких колонок в одну строку на стороне сервера и аналогично развернуть их на клиенте — и половины столбцов как ни бывало (я думаю, это связано с xml-механизмом передачи данных между клиентом и сервером, где лишние узлы прилично весят). Но примитивные типы составляют лишь половину таблицы.

А теперь внимание, вопрос. Как мне на сервере преобразовать ссылку на справочник или документ конкретного вида так, чтобы потом на клиенте можно было получить из строки эту ссылку. ЗначениеВСтрокуВнутр() не помогает, потому что на клиенте согласно документации она недоступна.

p.s. использовать временное хранилище работает также медленно, как и передача возвратного значения в виде массива структур. Поэтому просьба не предлагать решить вопрос другим способом — нужно именно преобразовать строку в ссылку на клиенте.

Еще один «привет» из мира 1с — новые возможности языка запроса, которые нужно знать всем 1с-никам

Под конец года, я решил разместить еще одну небольшую статейку у вас на ресурсе, где рассмотрю некоторые относительно новые возможности языка запросов 1с. Надеюсь, что данная статья воспримется положительно.

Введение

Всем привет! В данном материале, я решил, что немного отойду от своего основного профиля — практической разработке и изучения возможностей библиотеке стандартных подсистем (БСП) и затрону работу программиста с языком запросов 1с.

Думаю, что материал данной статьи будет полезен всем разработчикам и программистам, а также все желающим, кто хочет разобраться в элементарных запросах платформы и приобщиться к касте 1с-ников). Так же данный материал подойдет как обычная «напоминалка» для программиста

Статья содержит только практические примеры использования вот этих функций языка запросов 1С — вот они:

 Строка(String) – преобразует в строку. Sin, Cos, Tan, ASin, ACos, ATan - тригонометрические функции (в радианах) Exp - вычисляет результат возведения основания натурального логарифма (числа e) в степень Log - натуральный логарифм числа. Log10 - десятичный логарифм числа. Pow - возведение в степень. Sqrt – квадратный корень. Окр(Round) - округляет число до нужной разрядности Цел(Int) - вычисляет целую часть числа, полностью отсекая дробную часть. ДлинаСтроки(StringLength) – длина строки. СокрЛ(TrimL) – отбрасывает пробелы слева. СокрП(TrimR) – отбрасывает пробелы справа. СокрЛП(TrimAll) – отбрасывает пробелы слева и справа. Лев(Left) – получает первые слева символы строки. Прав(Right) – получает первые справа символы строки. СтрНайти(StrFind) – находит первую позицию подстроки в строке (без учета регистра). ВРег(Upper) – преобразует символы строки в верхний регистр. НРег(Lower) – преобразует символы строки в нижний регистр. СтрЗаменить(StrReplace) – заменяет все вхождения подстроки на другую подстроку (без учета регистра). РазмерХранимыхДанных(StoredDataSize) – размер данных в байтах, которые занимают данные параметра. 

Для реализации данных примеров можно использовать типовой конструктор запросов или типовую консоль (из предприятия), 1С: Платформу 8.3.20 и мою любимую конфигурацию «Библиотека стандартных подсистем 3.1» (3.1.7.137), режим совместимости которой я поднял до 8.3.20 (без использования). Условно, я разбил эти функции на 11 групп (по одной или несколько функций близких по смыслу).

Примеры

1.Строка(String):

// с ссылками работать не умеет. // только с примитивными типами // ошибки не будет только если применить "Выразить" ВЫБРАТЬ Строка(ВЫРАЗИТЬ(_ДемоНоменклатура.Ссылка.Наименование КАК СТРОКА(100))), Строка(_ДемоНоменклатура.Цена) КАК Цена, // преобразовал число в строку Строка(ИСТИНА) КАК АА, // преобразовал булево в строку Строка(ДАТАВРЕМЯ(1,1,1)) Как ТекДата // пробразовал дату ИЗ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура

2. Sin, Cos, Tan, ASin, ACos, ATan:

// тригонометрические функции работают исключительно с примитивным типом "число" ВЫБРАТЬ SIN(1) КАК Син1, COS(1) КАК Кос2, TAN(1) КАК Тан3, ASIN(1) КАК АСин1, ACOS(0) КАК АКос2, ATAN(1) КАК АТан3, _ДемоНоменклатура.Ссылка КАК Ссылка ИЗ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура

3. Exp, Log, Log10, Pow и Sqrt:

// данные математические функции в запросе работают только с типом "число" ВЫБРАТЬ Exp(1) КАК Exp1, //2.7 Log(2.718) КАК Log1, //0.9999 Log10(10) КАК Log101, // 1 Pow(3,2) КАК Pow1, // 9 Sqrt(9) КАК Sqrt1, // 3 _ДемоНоменклатура.Ссылка КАК Ссылка ИЗ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура

4.Окр(Round) и Цел(Int):

// округление или целое число ВЫБРАТЬ ОКР(13240.345235, -2) КАК Округление, // 13200 ЦЕЛ(13240.345) КАК Цел1, // 13240 _ДемоНоменклатура.Ссылка КАК Ссылка ИЗ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура

5. ДлинаСтроки(StringLength):

// здесь определим длину стоки - длина наименования ВЫБРАТЬ ДЛИНАСТРОКИ(_ДемоНоменклатура.Ссылка.Наименование) КАК ДлинаНаименования ИЗ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура

6. СокрЛ(TrimL), СокрП(TrimR) и СокрЛП(TrimAll):

// запрос убирает пробелы слева, справа, с обеих сторон строки ВЫБРАТЬ СокрЛ(" "+_ДемоНоменклатура.Ссылка.Наименование+" ") КАК УбратьПробелыСлева, СокрП(" "+_ДемоНоменклатура.Ссылка.Наименование+" ") КАК УбратьПробелыСправа, СокрЛП(" "+_ДемоНоменклатура.Ссылка.Наименование+" ") КАК УбратьПробелы ИЗ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура 

7. Прав(Right) и Лев(Left):

// обрезаем строку и выводим результат ВЫБРАТЬ Лев(_ДемоНоменклатура.Ссылка.Наименование,5) КАК Слева5, Прав(_ДемоНоменклатура.Ссылка.Наименование,10) КАК Справа10 ИЗ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура

8. СтрНайти(StrFind):

ВЫБРАТЬ СтрНайти(_ДемоНоменклатура.Ссылка.Наименование, "коллекция") КАК Нашли1 // номер символа вхождения ИЗ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура 

9. ВРег(Upper) и НРег(Lower):

// переводим в заглавные или строчные буквы ВЫБРАТЬ Врег(_ДемоНоменклатура.Ссылка.Наименование) КАК Заглавными, Нрег(_ДемоНоменклатура.Ссылка.Наименование) КАК Прописными ИЗ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура

10. СтрЗаменить(StrReplace):

ВЫБРАТЬ СтрЗаменить(_ДемоНоменклатура.Ссылка.Наименование, "журнал","газета") КАК Нашли1 // меняем подстроку "журнал" на "газета" ИЗ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура 

11. РазмерХранимыхДанных(StoredDataSize):

ВЫБРАТЬ РазмерХранимыхДанных(_ДемоНоменклатураПрисоединенныеФайлы.ФайлХранилище) КАК ФайлХранилище // применяю к реквизиту с типом ХранилищеЗначений, хотя можно применить к любому реквизиту (размер в байтах) ИЗ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник._ДемоНоменклатураПрисоединенныеФайлы КАК _ДемоНоменклатураПрисоединенныеФайлы ПО _ДемоНоменклатура.ФайлКартинки = _ДемоНоменклатураПрисоединенныеФайлы.Ссылка

Так, ну вроде, все проверено — все работает. При строгой типизации — ошибок в применении не будет.

Выводы статьи

Спасибо за прочтение. В материале представлены практические примеры применения новых функций языка запросов 1с. Эти функции характерны для платформы 1с предприятия версии от 8.3.20. Надеюсь, что вам понравилась данная статья и вы на один шаг приблизились к миру 1С.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *