1с выразить как строка максимальная длина

Обновлено: 01.07.2024

Добрый день.<br>Скажите пожалуйста, есть ли ограничение на переменную типа "Строка"? Не на реквизит, а именно на переменную.<br>Возникла проблема: при попытке передать в переменную около 2М (миллионов) символов программа выдает ошибку и падает.<br>

Для чего такое количество. Если для выгрузки/загрузки то может стоит разбить на части, и обрабатывать частями.

"Хех, студенты =)<br>В SQL-версии это ограничение не такое жесткое, как в файловой - попробуйте там.<br><br>Два миллиона символов - это круто =) Только не говорите, что это как-то связано с учетом на предприятии ;)"

Про строку в два миллиона символов в 1с скажем мягко: неэффективно, может поучить все же матчасть, есть же гора-а-а-здо более удобные приемы

Ограничение м.б. и не жесткое, но при попытках на SQL навводить в неограниченную строку кучу информации, например к каждому документу - огромный комментарий, получаем кучу глюков.

"Спасибо за ответы!<br>Однако вопрос остается - можно ли передать два миллиона символов не в поле БД (реквизит справочника или документа) а в переменную в модуле.<br>Например:<br><br>Перем Стр1;<br>Стр1 = Функция_ActiveX_возвращает_1,5_или_2_миллиона_символов_строкой;<br><br>Этот оператор работает для 500 тысяч символов.<br><br>"

Всё таки для чего такое количество? И для чего в 1 строку?

а вы не пробовали на асфальтоукладчике прокатиться из Питера в Москву? каждому предмету свое предназначение или .

Всем спасибо за ответы.<br>Вопрос закрыт, проблема решена.<br>Ответ, для чего это нужно: Хранение фотографии сотрудника в строке неограниченной длины.<br>Ответ, почему именно в строке неограниченной длины: Потому, что это реквизит справочника, он является неотъемлимой частью БД 1С, записывается и читается самой системой.<br>Использование дополнительной таблице в базе SQL c бинарным полем требует чтения/записи этой таблицы и этого поля и написания соответствующей обработки в модуле. Дополнительного чтения/записи сторонней таблицы - очень хочется избежать. Поэтому был написан activex для преобраззования файла в строку.<br><br>Несмотря на то что проблема решена, очень хочется услышать: какие именно "глюки" встречаются при использованиии (в SQL версии) строк неограниченной длины с данными на 20 - 150 Кб. Если не сложно, ответьте пожалуйста.

(24) Ну документооборот они так ведут. Что бы по номеру документа было видно какого вида это документ.
Зачем? Их так учат.
Зачем их так учат? Их учат, те кто так учился ране. А их тоже так учили т.д.
Когда не было электронного документооборота был поиск по каталогам и т.д как в библиотеке.

Я еще успел попасть на курсы бухгалтеров, где учили бумажному бухучету.
Хотя не удивлюсь, если и до сих пор учат.
(24) Второе объяснение - это независимая нумерация разных видов документов одновременно. Пропуски в нумерации не допускаются, но разные виды документов вводят и отвечают за них разные люди. При этом все кадровые документы не должны повторять номер и быть пропуски. Поэтому и ввели префиксы, суфиксы и т.д.
(24) Скоросшиватель сшивает быстро, а расшивает еще быстрее. Вот отсюда ноги и растут

Тут не нужно думать. Нужно знать, как будет сравнивать программа.

(28) Есть ещё одна причина.
Процедура нумерации подразумевает разделение бумаг с различными сроками хранения:
- Длительный: 50 или 75 лет.
- Краткосрочный: 1 или 5 лет.

Хранить весь этот хлам в архивах и дорогое и муторное занятие. Поэтому краткосрочные хранят отдельно и первой возможности утилизируют.
Но опять же это всё из библиотечного дела и хранения по каталогам.

+ к (30) В остальных документах остается нумерация без пропусков, так как изначально и не было в них документо другого вида с другим сроком хранения.

т.е. основная проблема в том что требуют некую единую уникальную нумерацию по всем кадровым документам. А по факту её нет.

(31) НЕТ и в текущей версии напишешь.

(33) Главное что бы был известен формат строки на выходе.
(31) Пусть необходимо привести номер к виду: 99999999999999/ХХ, т.е. 14 цифр номера + разделитель "/" и один символ суффикса. А по факту дополнить нулями номер, так как разделитель и один символ суффикса уже есть. Если разделитель бывает разный, то дополнить разные разделители. Если суффикс бывает длинной более одного символа, то учесть и это.

Например есть следующие номера как в (0): 100/А, 99/А, 00251200/А, 3/А. , где суффикс это всегда один символ.

Если кратко, то один алгоритм следующий.
1. Так как 14 + 1 + 1 = 16, то подготовить таблицу с цифрами от 1 до 16. Порождающий запрос на 16 - назовем это так.
2. Разбиваем строки с номерами на строки вида ниже. т.е. декартово перемножение на таблицу из 16-ти строк и беря только строку с 1 одну, с 2 одну и т.д.
Изначальный номер | НПП | символ
100/А | 1 | А
100/А | 2 | /
100/А | 3 | 0
100/А | 4 | 0
100/А | 5 | 1
100/А | 6 | 0
100/А | 7 | 0
100/А | 8 | 0
100/А | 9 | 0
100/А |10 | 0
100/А |11 | 0
100/А |12 | 0
100/А |13 | 0
100/А |14 | 0
100/А |15 | 0
100/А |16 | 0
99/А | 1 | А
99/А | 2 | /
99/А | 3 | 9
99/А | 4 | 9
99/А | 6 | 0
99/А | 5 | 0
99/А | 7 | 0
99/А | 8 | 0
99/А | 9 | 0
99/А |10 | 0
99/А |11 | 0
99/А |12 | 0
99/А |13 | 0
99/А |14 | 0
99/А |15 | 0
99/А |16 | 0
.

3. Собственно собираем обратно. Получаем на выходе для каждого номера его новый номер. Как собрать обратно у меня сразу два алгоритма в голове возникло. Так как всего 16-ть символов, то использовал бы первый:
Выбрать
.

Если много было бы, то использовал бы сложение соседних: 1+2; 3+4; 5+6; . далее перенумерация и опять сложение соседних. Десять итераций позволяет сложить 2 в десятой = строка длиной 1024 символа.

В этой статье разберем возможности приведения типов в языке запросов 1С, которые предоставляет функция «Выразить».
Рассмотрим несколько вариантов применения этой функции.
И первый вариант – округление чисел.

Для этого необходимо использовать функцию Выразить в следующем формате:

Выразить(<Число> как Число(<ДлинаЧисла>,<Точность>))

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


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



Для того что бы он работал, необходим поле неограниченной длины привести в строку с определенной длинной, делается это при помощи функции Выразить в следующем формате:

Выразить(<Строка> как Строка(<ДлинаСтроки>)

Где
ДлинаСтроки – максимальная длина, к которой будет приведена строка.
Переделаем запрос: будем в условии приводить неограниченную строку к строке с определенной длинной. Тогда ни каких ошибок не будет.


Рассмотрим последний и, я бы сказал, самый главный вариант её применения: при работе с полями составного типа.
Ниже приведены два запроса, в которых используются поля составного типа. Первый неправильный, а второй правильный.



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

Выразить(<Документ> как Документ.<ИмяТаблицы>)
Выразить(<Справочник> как Справочник.< ИмяТаблицы > ).

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

Если Вы всё еще «плаваете» в конструкциях языка запросов, и у Вас вызывают трудности даже самые простые запросы, то рекомендую вам мой курс «Запросы в 1С от новичка до профи». Где эти и многие другие вопросы рассматриваются более подробно.


В чем особенность этого курса:
• Курс рассчитан на тех, кто не знаком с языком запросов в 1С;
• Учебный материал грамотно скомпонован и прост в освоении;
• Несколько десятков уроков;
• Полезные практические примеры;
• Все уроки изложены понятным и простым языком

Для моих читателей, купон на скидку 25%: hrW0rl9Nnx

Я стараюсь как можно чаще выпускать различные интересные бесплатные статьи и видеоуроки. Поэтому буду очень рад, если Вы поддержите мой проект перечислив любую сумму:

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

One thought on “ Приведение типов в языке запросов 1С. ”

Добрый день, в 1С нельзя кастовать типы в запросе. Функция выразить используется для полей составного типа, что бы оставить один из них.

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

Длина строки 1С

В платформе 1С имеется функция, которая вычисляет длину строки – СтрДлина. Эта функция имеет единственный параметр – строку, и возвращает количество символов в этой строке, т.е. её длину. Причем считаются все символы, в том числе пробелы.

Длина строки 1С

Регистр строки 1С

В 1С имеются функции для работы с регистрами строк.

НРег – переводит строку в нижний регистр

ВРег – переводит строку в верхний регистр

ТРег – переводит строку в титульный регистр (каждое слово начинается с заглавной буквы).

Регистр строки 1С

Замечу, эти функции не изменяют строку в параметре, а создают новую строку в нужном регистре.

Убрать пробелы в строке 1С

Часто возникает, что в строке 1С в начале строки или в конце строки есть лишние пробелы, которые нужно убрать. Для этих целей служат следующие функции.

СокрЛП – убирает пробелы справа и слева строки.

Рассмотрим пример (добавлю символы перед и после функциями, чтобы было понятно как они работают).

Убрать пробелы в строке 1С

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

Сократить строку 1С

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

Лев – оставляет нужное количество символов слева. Имеет следующий синтаксис: Лев(<Cтрока>,<ЧислоСимволов>)

Прав – оставляет нужно количество символов справа. Имеет следующий синтаксис: Лев(<Cтрока>,<ЧислоСимволов>)

Сред – оставляет нужное количество символов в строке. Имеет следующий синтаксис: Лев(<Cтрока>,<НачальныйНомер>, <ЧислоСимволов>).

Функции Лев и Прав – создают новую строку, в которой оставлено слева и справа соответственно, то количество символов, которое указанно во втором параметре.

Функция Сред также создает новую строку, в которой оставлено то количество символов, которое указано в третьем параметре. Но, если предыдущие функции оставлялись символы или с начала строки, или с конца, то эта функция оставляет символы с любого места строки. Для этого во втором параметре нужно указать номер символа, с которого будут оставлены остальные символы (включая символ, номер которого мы указали).

Сократить строку в 1С

По сути, эти функции позволяют сокращать как нужно строки, но работают наоборот – они оставляют то количество символов, которое необходимо.

Найти в строке 1С

Иногда нужно найти в строке или нужный символ, или нужную группу символов. Для этих целей применятся функция СтрНайти(). Эта функция имеет следующий синтаксис.

Данная функция возвращает позицию первого знака подстроки, которая была найдена. Если 0, то ни чего не найдено.

Строка – строка, по которой осуществляется поиск;

ПодстрокаПоиска – подстрока (или символ), которая ищется в строке поиска;

НаправлениеПоиска – системное перечисление, которое задает в какую сторону осуществляется поиск. Имеет два значения: НаправлениеПоиска.Сначала, НаправлениеПоиска.Сконца. Необязательный параметр.

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

НомерВхождения – искомая подстрока (или символ) может несколько раз входить в исходную строку, этот параметр указывает, какое вхождение нас интересует. По умолчанию равен 1.

И результат работы функции

Найти в строке 1С

Т.е. когда мы ищем в строке «Иванов Сидоров Иванов» подстроку «Иванов», то при поиске без дополнительных параметров функция возвращает 1, это номер символа с которого начинается искомая подстрока. Если же мы ищем в направлении СКонца, то возвращается номер символа, с которого начинается второе вхождение подстроки в строку. В третьем случае мы искали в направлении СКонца, но указали номер символа, с которого нужно искать строку, поэтому функция вернула 1, поскольку при поиске начиная с 10 символа с конца строки, искомая подстрока находится только в начале строки. И в последнем примере, мы ищем подстроку с начала, но ищем второе вхождение этой подстроки.

Заменить в строке 1С

В платформе 1С 8.3. имеется метод, при помощи которого можно менять в строке определенные символы на другие символы.

Этот метод СтрЗаменить, и он имеете следующий синтаксис: СтрЗаменить(<Строка>,<СтрокаПоиска>,<СтрокаЗамены>)

Данные метод возвращается строку, в которой будет выполнена замена или нет, в зависимости от того найдена строка поиска или нет.

Заменить в строке 1С

Как видите, при помощи этого метода можно не только менять символы, но и вырезать не нужные символы.

Функции для многострочных строк в 1С

Из предыдущей статьи вы знаете, что в 1С можно задать многострочную строку, делается это при помощи символа «|». Сейчас мы разберем несколько функций, которые могут пригодиться при работе с многострочной строкой.

СтрЧислоСтрок(<Строка>) – позволяет узнать, сколько в строке строк.

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

В этой статье я разобрал основные функции, которые были в платформе 8.1, в платформе 8.2 и перешли в платформу 8.3 (кроме функции СтрНайти, но это улучшенная версия функция Найти, которая была в старых платформах) . В следующей статье рассмотрим функции работы со строками, которые появились в платформе 8.3:

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

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

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

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

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

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

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


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

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

Читайте также: