1с поле неограниченной длины в запросе

Использование реквизитов строкового типа

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

1.2. В тех случаях, когда максимальная длина строки заранее известна (например, она регламентирована), следует указывать ее в свойстве Длина (или Длина наименования для стандартного реквизита Наименование ). Например, длина строкового реквизита ИНН справочника ФизическиеЛица должна составлять 12 символов.

1.3. Если строка является конкатенацией других строк, то ее длина может быть определена как сумма длин исходных строк. Например, длина представления адреса должно равняться сумме длин полей, в которых хранятся части адреса.

1.4 Если длина строки не регламентирована, то рекомендуется выбирать такую длину, которой достаточно для хранения данных в большинстве случаев. Например, для хранения полного наименования контрагента в подавляющем большинстве случаев достаточно 250 символов, максимальная длина имени файла в большинстве файловых систем – 260, полное имя физического лица – 100 и т.п.

2. В отдельных случаях, допускается использование строк неограниченной длины:

2.1. Предполагается, что в реквизит строкового типа может быть помещен пользовательский текст, объем которого может быть значительным. Как правило, это многострочные поля на форме. Например, в поле Дополнительное описание в заказе клиента менеджер может поместить всю историю переписки с клиентом, в поле Комментарий – пользователь может ввести произвольный многострочный текст и т.п.

2.2. В строковом реквизите хранится различная техническая информация, которая генерируется программами и, чаще всего, не предназначена для чтения пользователем, а используется в различных алгоритмах обработки информации. Например, xml-документы, заголовки почтовых сообщений и т.п.

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

3.1. При необходимости сравнения значений, группировки и получения различных, такие реквизиты необходимо выражать как строку определенной длины, такой, чтобы выражение было вычислено верно.

Для этих целей в запросе рекомендуется использовать конструкцию

ВЫРАЗИТЬ КАК СТРОКА(1000)

3.2. В отчетах СКД для таких полей следует, вместо этого, задавать параметр Тип значения поля (на закладке Наборы данных ).

Следует иметь в виду, что частое приведение неограниченной строки к определенной длине в запросах и отчетах СКД может быть признаком неправильного проектного решения и служить сигналом для пересмотра типа строкового реквизита в пользу ограниченной длины строки.

3.3. В остальных случаях, урезать строку в запросах не требуется.

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

Для быстрого выявления в конфигурации всех строковых реквизитов неограниченной длины можно воспользоваться приложенной обработкой СтрокиНеограниченнойДлины.erf

Источник

Функции языка запросов 1С. Работа со строками

Функции работы со строками

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

Сложение строк

Для сложения строк в запросе используется операция «+». Складывать можно только строки ограниченной длины.

Функция Подстрока

Если длина строки меньше, чем указана во втором параметре, то функция вернет пустую строку.

Внимание! Использование функции ПОДСТРОКА() с целью приведения строк неограниченной длины к строкам ограниченной длины не рекомендуется. Вместо нее лучше использовать операцию приведения типа ВЫРАЗИТЬ().

Функция Подобно

Если нужно убедиться, что строковый реквизит соответствует определённым критериям мы его сравниваем:

А что, если нужно более хитрое сравнение? Не просто на равенство или неравенство, а на подобие определенному шаблону? Вот как раз для этого и создана функция ПОДОБНО.

ПОДОБНО — Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL.

Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.

Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:

В данном примере мы получим всех контрагентов, наименование которых начинается на букву «Г»

Источник

ВЫРАЗИТЬ КАК СТРОКА в запросе

ВЫРАЗИТЬ КАК СТРОКА в запросе

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

Синтаксис функции

ВЫРАЗИТЬ ( КАК СТРОКА( )

Никаких пробелов в конце короткой строки не добавляется.

1с поле неограниченной длины в запросе

Другие особенности использования ВЫРАЗИТЬ КАК СТРОКА

Передача NULL в качестве параметра не вызывает ошибки, но на выходе будет NULL (не строкой).
Передача для преобразования других типов вызывает ошибку «Несовместимые типы ВЫРАЗИТЬ».

Преобразовать число как строку в запросе или же ссылку как строку в данной функции (да и в любых других функциях запроса невозможно). Это отличает TSQL запрос select cast(‘321’ as numeric(10) от запроса в 1С.

Функция ПРЕДСТАВЛЕНИЕ(ЧИСЛО), может на выходе запроса выдать строку, но внутри запроса ее результат использовать невозможно даже в качестве параметра для ВЫРАЗИТЬ.

1с поле неограниченной длины в запросе

Конкантенация (сложение) строк допустима и с результатом ВЫРАЗИТЬ:

«321»+ ВЫРАЗИТЬ («Строка» КАК СТРОКА(100))

Идентификатор ссылочного объекта в запросе получить невозможно и ожидаемое многими начинающими программистами 1С в КАЧЕСТВЕ ВЫРАЗИТЬ(ССЫЛКА как СТРОКА()) не работает: ни наименования, ни кода, ни идентификатора не получится — будет ошибка несовместимости типов.

Вот такая простая функция без особых сюрпризов.

Возможно когда-нибудь в платформе 8.4 1С исправит ситуацию с преобразованиями типов в запрос, а может тут дело в поддержании совместимости всех баз данных.

Реклама — искусство превращения полуправды в полную ложь.

Источник

Ошибка SDBL: Тип неограниченной длины не допустим

Ошибка SDBL: Тип неограниченной длины не допустим

При объединении таблиц в запросах (ОБЪЕДИНИТЬ ВСЕ), если одно из полей неограниченной длины, а второе просто строкой, возникает данная ошибка.

Поведение системы

При этом выполнение программы завершается (Критическая ошибка с диалогом Закрыть/Перезапустить).

Причины и исправление

1с поле неограниченной длины в запросе

Пример поля неограниченной длины

Вариантом решения является приведение значения к определенной длине с возможной потерей данных через функцию ПОДСТРОКА(). Например,

ПОДСТРОКА(ЗатратыПоСтраховомуПокрытиюУслуги.Диагноз,1,1023) КАК Диагноз

В данном случае мы ограничили максимальную длину 1023 символами, т.к. второе объединяемое поле имеет такую же длину.

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

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

Проблема не хочет уходить

Далее, все-таки эта ошибка выскочила второй раз, но уже без завершения программы (в отчете на скд). Было найдено еще одно поле неограниченной длины, которые было выбрано в полях отчета через точку «Документ.Примечание», его не возможно было объединить автоматически.

Добавил еще одно поле выборку запроса с приведение как выше и после этого в настройках СКД изменил поле на это.

Довольно таки не явная ошибка — очень трудно было понять:

Обнаружил ошибку только, когда начал исключать эти поля из выборки в СКД

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

Источник

Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых тип

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

Подсказать можете, как исправить данную ошибку?

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

Нельзя сравнить поля неограниченной длины и несовместимых типов
Всем ХАЙ)) Тут такое дело: Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ.

Тип поля серийного номера большой длины
Добрый день, Подскажите какой лучше/правильнее выбрать тип поля для серийного номера длинной 19.

Увеличить даты из поля дата на основании поля тип и вывести в третье поле
В поле тип может быть несколько вариантов и в зависимости от значения увеличивать дату. Если тип =.

Сумма всех чисел поля, тип поля float.
Здравствуйте, я недавно начал изучать php и сейчас столкнулся с такой вот проблемой. В общем.

Добавлено через 4 минуты

Но всё равно ошибку получаю.

Буду знать на будущее, сильно не бейте. ))

Neophyte1C, да как так-то:wall:

У вас используется левое соединение, а таблица КонтактныеЛицаКонтрагентов у вас справа, в случае когда соединение не происходит, то есть в поле Объект таблицы Контактная информация не контактное лицр, а ссылка другого типа, поле КонтактныеЛицаКонтрагентов.Владелец равно NULL и сравнивать с &Владелец его нельзя, поэтому либо сделайте внутреннее соединение, либо условие

И КонтактныеЛицаКонтрагентов.Владелец = &Владелец

перенесите выше в блок ПО

GreenkA, renat_dmitriev, Если делаю так, то всё равно получаю ту же самую ошибку.

Neophyte1C, Я не обратил внимание «СсылкаНаОбъект = Справочники.Контрагенты;»

В чем смысл этого? Вы чего хотите добиться этим?

Добавлено через 34 секунды
То есть что за данные вы пытаетесь получить?

Но как только я подставляю код в процедуру формы списка справочника контрагенты, прописывая для

То получаю ошибку, показанную в 3-ем рисунке заголовка темы.

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

renat_dmitriev, объясню, на следующем рисунке показано, что я открываю нужного мне контрагента (1.), где перехожу во вкладку «Контакты», нахожу контактное лицо контрагента (2.), открываю его (3.) и вижу адрес dsdcs@dsc.r, который мне и надо вывести, вывожу запросом в заголовке темы через отладчик.

А следующим рисунком показан реквизит Владелец, к чему он относится и почему я его подставляю в условие.
В табло-1 показаны данные параметров.

Соединение с таблицей КонтактныеЛицаКонтрагентов вообще абсолютно бессмысленно. Если вы хотите выбрать контактную информацию определенного типа по конкретному контрагенту, достаточно обращения к таблице контактной информации

Только так и никак иначе. И пока вы будете пихать Справочники.Контрагенты вместо ссылки на ООО Лена, у вас ничего никогда не выйдет.

Источник

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

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