1с проверитьстроку отсутствует строка данных
Как вызвать стандартную проверку заполнения реквизитов?
Код 1C v 8.2 УП
Возвращаемое значение:
Тип: Булево. Истина - ошибок не обнаружено, Ложь - в противном случае.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент.
Код 1C v 8.2 УП
У прикладных объектов на платформе 1С Предприятие 8.2 появился новый обработчик события ОбработкаПроверкиЗаполнения, где теперь рекомендуется делать все проверки на заполненность реквизитов объекта. Рассмотрим работу с этим обработчиком. Обработчик должен быть расположен в модуле объекта (для констант в модуле менеджера значений) и имеет следующий синтаксис:
Код 1C v 8.2 УП
Здесь параметр Отказ (тип Булево) отвечает за возможность дальнейшей работы программы после проверки заполнения, а в параметре ПроверяемыеРеквизиты(тип Массив) содержатся реквизиты объекта, которые система будет проверять на заполненность. Напомним, что в версии 1С Предприятие 8.2 появилось возможность на уровне свойств реквизитов объекта устанавливать свойство Проверка заполнения. Так вот в массив ПроверяемыеРеквизиты по умолчанию система помещает реквизиты с установленным свойством «Выдавать ошибку». Однако разработчик может сам некоторые реквизиты добавить в массив или удалить из него в зависимости от каких-либо условий:
Код 1C v 8.2 УП
Как видно из примера в качестве элементов массива выступают строковые наименование реквизитов, как они заданы в конфигураторе. Для того чтобы полностью отказаться от системной проверки, необходимо очистить массив. При этом разработчик может проводить проверку реквизитов по произвольным алгоритмам, система же проверяет только на заполненность/незаполненность:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Код 1C v 8.2 УП
Далее рассмотрим, когда вызывается данный обработчик. Это зависит от типа объекта и его свойств. Так для, например, для справочника обработчик вызывается перед записью объекта; для документа: если разрешено проведение - при проведении, иначе при записи; для обработки : при вызове стандартных команд "OK", Да". Подробно это описано во встроенной справке. Но также есть возможность вызвать данный обработчик в произвольный момент, используя метод объекта ПроверитьЗаполнение(). Например, определить команду Проверить в форме документа:
Код 1C v 8.2 УП
Автор: Борис Захаров
Платформа 8.2.15.289.
На управляемой форме есть таблица значений СписокЗаказов. Задача: заполнить колонку видимых строки таблицы (т.е. пользователь через Найти (ctrl+F) выбирает нужное) значением из первой строки. Код такой.
Добавили:
anig99 (60.00 $m), alexk-is (5.00 $m), adhocprog (4.00 $m), juntatalor (3.95 $m), support (3.00 $m), antonds (2.00 $m), AlexO (1.00 $m), scorp_23 (0.05 $m), Bukaska (0.02 $m), ~gekK@~ (0.01 $m)
ну. часть проблемы разрешилась. Почитав справку до конца я понял, что отмена Поиска - это фича (документированный баг). Но все ещё необходимо найти способ обхода этой проблемы.
Через что работают пользователи, через рдпи клиента или просто на каждом компе установлена платформа?
(7) я к ним и не обращался. Просто явное non-user-friendly поведение системы, которое обычно относят к багам, тупо прокомментировали и всё.
(8) не совсем понял какой именно отбор добавить
(9) в управляемой интерфейсе для таблиц есть удобная функция быстрых пользовательских отборов по любой колонке - "Найти". Активируется ctrl-f, кнопкой на панели или тупо началом ввода с клавиатуры. Для пользователя быстро и удобно. А вот обрабатывать результаты такого отбора нужно через попу.
1) Я не нашел свойства табличного поля, где хранится этот пользовательский отбор (программный отбор остается Неопределено)
2) Единственный способ найти строки, которые попали в пользовательский отбор - это проверить их методом ПроверитьСтроку
3) Перебор строк таблицы на форме можно сделать только по индексу. Причем и тут 1с отличились. Количество() доступно только для реквизита, а не для элемента формы. Дальше интереснее. Каждый раз, как я загружаю данные в таблицу, нумерация строк на форме не начинается с начала. Т.е. если изначально было 10 строк, то их нумерация была с 0 до 9. После того, как я перезаполню эту таблицу, нумерацию строк пойдет уже с 10 номера. Приходится хранить номер первой строки в глобальной переменной.
я к ним и не обращался. Просто явное non-user-friendly поведение системы, которое обычно относят к багам, тупо прокомментировали и всё.
(8) не совсем понял какой именно отбор добавить
(9) в управляемой интерфейсе для таблиц есть удобная функция быстрых пользовательских отборов по любой колонке - "Найти". Активируется ctrl-f, кнопкой на панели или тупо началом ввода с клавиатуры. Для пользователя быстро и удобно. А вот обрабатывать результаты такого отбора нужно через попу.
1) Я не нашел свойства табличного поля, где хранится этот пользовательский отбор (программный отбор остается Неопределено)
2) Единственный способ найти строки, которые попали в пользовательский отбор - это проверить их методом ПроверитьСтроку
3) Перебор строк таблицы на форме можно сделать только по индексу. Причем и тут 1с отличились. Количество() доступно только для реквизита, а не для элемента формы. Дальше интереснее. Каждый раз, как я загружаю данные в таблицу, нумерация строк на форме не начинается с начала. Т.е. если изначально было 10 строк, то их нумерация была с 0 до 9. После того, как я перезаполню эту таблицу, нумерацию строк пойдет уже с 10 номера. Приходится хранить номер первой строки в глобальной переменной.
Табличное поле предоставляет свойства ТекущиеДанные и ТекущаяСтрока . Отличие между этими свойствами состоит в том, что свойство ТекущиеДанные содержит значения считанных данных текущей строки табличного поля, а свойство ТекущаяСтрока содержит значение, идентифицирующее строку.
Следует отметить, что свойство ТекущиеДанные содержит коллекцию значений текущей строки, соответствующую коллекции колонок отображаемого динамического списка, при этом если нужного поля нет в текущих данных, то его можно добавить в коллекцию полей списка используя метод Добавить() коллекции колонок списка.
Свойство ТекущиеДанные предназначено для получения значений колонок текущей строки, а свойство ТекущаяСтрока для получения и установки текущей строки табличного поля.
Следует понимать, что для объектных данных (Справочник, Документ и т.д.) в качестве значения свойства ТекущаяСтрока используется ссылка на объект базы данных. Соответственно при обращении к свойствам этого значения будет выполняться считывание объекта базы данных.
Типичной ошибкой является обращение к данным строки с использованием свойства ТекущаяСтрока . В этом случае будет выполняться считывание данных объекта из базы данных, что может существенно снизить производительность работы табличного поля. Например, приведенный ниже фрагмент текста программы является неэффективным:
Рекомендуется для обращения к данным объекта использовать свойство ТекущиеДанные . Правильный фрагмент приведен ниже:
Если есть идентификатор текущей строки (т.е. свойство ТекущаяСтрока ), можно получить ТекущиеДанные . И наоборот:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Здравствуйте гуру 1С, возник вопрос, как в запросе проверить строку, которой нет?
Делаю так, прописал запрос в консоли запросов, но ничего не получаю.
С таким кодом тоже пустота.
Далее практическим методом выяснил, когда показывает значение "Пустая строка", если в строке представления первым стоит пробел, а потом идёт текст.
А мне нужно вывести\узнать результат, когда строки вообще нет.
Кучу статей в инете и на данном форуме перекопал - безрезультатно.
Подскажите куда копать?
Что быстрее, проверка на null, или проверка на тип перечисления в запросе?
вопрос такой. если несколько таблиц. сходных по структуре в запросе. в первой таблице .
Проверка в запросе
Доброго времени суток! Подскажите, пож., как сделать! Использую Делфи + Аксес. Делаю запрос на.
Отклик сервера на отсутствующую страницу
Согласно рекомендации Яндекса, при отсутствии запрашиваемой страницы сервер должен выдавать.
Проверка переданного параметра в Get запросе
Есть сервлет, который слушает урл /test. Get запросом может передаваться параметр ?test=2. Как.
Phil, что-то как-то не совсем то получаю, что мне надо. По идее мне надо что-то аналогично этому запросу получать, если строки заполненной с адресом нет.
Но только нужно пройтись по всем контрагентам, а не по одному, желательно циклом. Но вроде как в запросе метод проверки Пустой() в цикле не работает?
Neophyte1C, масло какое-то масляное.
Добавлено через 11 секунд
Dethmontt, суть вопроса моего, мне нужно пройтись по всем контрагентам и проверить, есть ли в них заполненный Email 1 (Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("000000013 ")), если он не заполнен - сообщить мне об этом.
А у некоторых контрагентов эта строка вообще пустая, не заполнена - соответственно неактивная и вот тут у меня затык и возникает.
Поэтому ковырял консоль запросов со сложным запросом, где практическим методом выяснил, когда показывает значение "Пустая строка", если в строке представления первым стоит пробел, а потом идёт текст.
А мне нужно вывести\узнать результат, когда строки вообще нет.
Решение
Neophyte1C, Да чо тут думать то
1. Берем таблицу "Контактная информация" с отбором по нужному типу КИ, помещаем результат в ВТ
2. Берем таблицу контрагентов (без групп) к ней левым соединением ВТ полученную на прошлом шаге и ставим условие на NULL на поле из ВТ
Строковый тип данных — это один из базовых типов данных, поддерживаемых в языке 1С версии 7.7. Строковым типом в системе «1С:Предприятие» может задаваться любая последовательность символов, в том числе и пустая (последняя в программном коде записывается как последовательность из двух подряд идущих кавычек).
Операции со строками
Чтобы присоединить одну строку к другой, в языке 1С используется операция конкатенации. Длина результирующей строки при этом равна сумме длин соединяемых строк.
Пример конкатенации строковых значений:
При сложении нескольких строк, в случае несовпадения типа данных второго или последующих операндов со строковым типом, значения этих операндов неявно преобразуются к строковому типу в соответствии с правилами преобразования типов. Например:
В вышеприведённом примере второй операнд имеет тип " Дата " . При сложении со строкой система неявно преобразует его в строковый тип.
Строки можно сравнивать между собой и использовать в логических операциях. В языке 1С для строк определены следующие операции сравнения:
- больше ( Строка1 > Строка2 );
- больше или равно ( Строка1 >= Строка2 );
- равно ( Строка1 = Строка2 );
- не равно ( Строка1 >< Строка2 );
- меньше ( Строка1 < Строка2 );
- меньше или равно ( Строка1
Пример использования строк в логических операциях:
Строковые литералы
В строковых выражениях, наряду с переменными, могут использоваться строковые литералы, представляющие собой обычные строки, заключённые в двойные кавычки. Например:
Наряду с короткими (однострочными) литералами, синтаксис языка 1С допускает использование и многострочных конструкций, причём последние в исходном коде могут задаваться двумя способами.
Способ первый. В этом случае между фрагментами, представляющими отдельные строки многострочной константы, не должно встречаться никаких символов, за исключением пробелов, переводов строки и строк комментариев:
Способ второй. В этом случае значение литерала полностью идентично предыдущему случаю. Отличие заключается в том, что каждая отдельная составляющая (строка) не замыкается кавычками, а на каждой последующей строке помещен символ переноса строки «|» («вертикальная черта»). В таком варианте комментарии между открывающей и закрывающей кавычками (то есть внутри многострочного литерала) не допускаются.
Системные строковые константы
Данные системные константы доступны в любом программном модуле конфигурации. Они могут размещаться в правой части оператора присваивания, в выражениях, могут использоваться в качестве параметров вызываемых методов, процедур и функций.
Пример использования строковых констант:
Преобразование в строковый тип значений других базовых типов
В процессе вычисления различных выражений может возникнуть необходимость в явном или неявном преобразовании типов отдельных значений. При преобразовании значений в строковый тип система руководствуется следующими правилами:
- Если преобразуемое в строку число не имеет форматных установок, то его строковым представлением является полное представление числа в формате с фиксированной точкой.
- Дата преобразованная к строковому типу имеет вид "ДД.ММ.ГГ" , где ГГ — две цифры года, ММ — числовое обозначение месяца (01, 02, 03 и т.д.), ДД — день месяца (01, 02, 03 и т.д.).
Примечание: То, что выражение является строковым, система определяет по первому операнду. В случае несовпадения типа второго и последующих операндов со строковым типом, их значения неявно преобразуются к требуемому типу в соответствии с правилами преобразования типов. Чтобы явно указать, что выражение является строковым, следует начать его с пустой строки:
Для явного преобразования в строковый тип значений других базовых типов в программном коде используется системная функция Строка() . Англоязычный синоним имени функции — String() .
где < ПреобразуемоеЗначение >— выражение типа " Число " или " Дата " , результат вычисления которого необходимо преобразовать в строку.
Примеры использования функции:
Примечание: Даты во встроенном языке программирования 1С принято заключать в одинарные кавычки, в отличие от строк, для выделения которых используются кавычки двойные.
Системные функции для работы со строками
Проверить строку на наличие значащих символов позволяет системная (встроенная) функция ПустаяСтрока() . В качестве единственного параметра функции передаётся строковое выражение, которое необходимо проверить. Функция возвращает 1, если указанная строка пустая или содержит только пробелы, либо 0, если строка содержит значащие символы. Англоязычный синоним имени функции — IsBlankString() .
Узнать длину строки позволяет системная функция СтрДлина() . В качестве единственного параметра функции передаётся строковое выражение, результирующую длину которого необходимо узнать. Возвращаемым значением функции является число, соответствующее количеству символов в строке. Англоязычный синоним имени функции — StrLen() .
Удалить конечные пробельные символы слева, справа или с обоих концов строки сразу позволяют системные функции СокрЛ() , СокрП() и СокрЛП() соответственно. В качестве единственного параметра эти функции принимают строковое выражение, у которого необходимо удалить конечные пробельные символы. Возвращаемым значением этих функций является преобразованная строка. Англоязычные синонимы имён функций: TrimL() , TrimR() , TrimAll() .
Перевести все символы строки в верхний регистр позволяет системная функция Врег() . В качестве единственного параметра функции передаётся строковое выражение, содержащее строку которую необходимо преобразовать. Возвращаемым значением функции будет преобразованная строка. Англоязычный синоним имени функции — Upper() .
Примечание: Подобное преобразование строк обычно требуется при выполнении операций со строками, введёнными пользователем. Ведь пользователь может начать строку с заглавной буквы, может начать с маленькой, а может всю строку набрать заглавными буквами. Вышеназванная же функция позволяет привести все символы строки к единому формату.
Перевести все символы строки в нижний регистр позволяет системная функция Нрег() . В качестве единственного параметра функции передаётся строковое выражение, содержащее строку которую необходимо преобразовать. Возвращаемым значением функции будет преобразованная строка. Англоязычный синоним имени функции — Lower() .
Примечание: Подобное преобразование строк обычно требуется при выполнении операций со строками, введёнными пользователем. Ведь пользователь может начать строку с заглавной буквы, может начать с маленькой, а может всю строку набрать заглавными буквами. Вышеназванная же функция позволяет привести все символы строки к единому формату.
Преобразовать строку из DOS-кодировки в Windows-кодировку позволяет системная функция OemToAnsi() . В качестве единственного параметра функции передаётся строковое выражение, содержащее строку, которую необходимо преобразовать. Возвращаемым значением функции будет преобразованная строка. Русскоязычный синоним имени функции отсутствует.
Примечание: Подобное преобразование строк обычно требуется при работе с некоторыми файлами.
Преобразовать строку из Windows-кодировки в DOS-кодировку позволяет системная функция AnsiToOem() . В качестве единственного параметра функции передаётся строковое выражение, содержащее строку, которую необходимо преобразовать. Возвращаемым значением функции будет преобразованная строка. Русскоязычный синоним имени функции отсутствует.
Примечание: Подобное преобразование строк обычно требуется при работе с некоторыми файлами.
Системные функции для работы с подстроками
Выбрать из строки указанное количество символов слева позволяет системная функция Лев() . Возвращаемым значением функции будет подстрока из выбранных символов. Англоязычный синоним имени функции — Left() .
- < Строка >— строковое выражение, содержащее исходную строку, из которой будет выделена подстрока;
- < ЧислоСимволов >— числовое выражение, задающее число символов, которое необходимо включить в подстроку.
В вышеприведённом примере с помощью функции Найти() определяем позицию первого пробела, а затем выбираем все символы, стоящие левее этой позиции.
Выбрать из строки указанное количество символов справа позволяет системная функция Прав() . Возвращаемым значением функции будет подстрока из выбранных символов. Англоязычный синоним имени функции — Right() .
- < Строка >— строковое выражение, содержащее исходную строку, из которой будет выделена подстрока;
- < ЧислоСимволов >— числовое выражение, задающее число символов, которое необходимо включить в подстроку.
Выбрать из указанной строки подстроку указанной длины, начинающуюся с указанной позиции , позволяет системная функция Сред() . Возвращаемым значением функции будет подстрока из выбранных символов. Англоязычный синоним имени функции — Mid() .
- < Строка >— строковое выражение, содержащее исходную строку, из которой будет выделена подстрока;
- < НомерСимвола >— числовое выражение, задающее номер символа, с которого начнётся выборка подстроки (нумерация символов в строке начинается с 1);
- < ЧислоСимволов >— числовое выражение, задающее число символов, которое необходимо включить в подстроку.
Найти позицию первого вхождения подстроки в строку позволяет системная функция Найти() (англоязычный синоним — Find() ). Возвращаемым значением данной функции является число — позиция первого символа первого вхождения.
- < Строка >— строковое выражение, содержащее строку, в которой будет выполняться поиск;
- < Подстрока >— строковое выражение, содержащее подстроку, поиск которой будет выполняться.
Узнать число вхождений указанной подстроки в указанную строку позволяет системная функция СтрЧислоВхождений() . Возвращаемым значением данной функции является целое число, показывающее число вхождений подстроки в строку. Англоязычный синоним имени функции — StrCountOccur() .
- < Строка >— строковое выражение, содержащее строку, в которой будет выполняться поиск;
- < Подстрока >— строковое выражение, содержащее подстроку, поиск которой будет выполняться.
Заменить все вхождения указанной подстроки другим указанным значением позволяет системная функция СтрЗаменить() . Возвращаемым значением функции является преобразованная строка. Англоязычный синоним имени функции — StrReplace() .
- < Строка >— строковое выражение, содержащее строку, в которой будет выполняться поиск и замена подстрок;
- < СтарПодстрока >— строковое выражение, содержащее заменяемую подстроку (подстроку, поиск и замена которой будет выполняться);
- < НовПодстрока >— строковое выражение, содержащее заменяющую (новую) подстроку.
Системные функции для работы с многострочным текстом
Определить число строк в многострочном тексте (то есть в тексте, где имеются переводы строк) позволяет системная функция СтрКоличествоСтрок() . В качестве единственного параметра функции передаётся строковое выражение, содержащее исследуемый текст. Возвращаемым значением функции является целое число, соответствующее числу строк в исследуемом тексте. Англоязычный синоним имени функции — StrLineCount() .
Получить указанную строку из многострочного текста (то есть текста, где имеются переводы строк) позволяет системная функция СтрПолучитьСтроку() . Англоязычный синоним имени функции — StrGetLine() .
- < ИсходныйТекст >— строковое выражение, содержащее исходный многострочный текст;
- < НомерСтроки >— числовое выражение, содержащее порядковый номер строки, которую необходимо получить. Нумерация строк в многострочном тексте начинается с 1.
Возвращаемым значением функции будет полученная строка текста.
Системные функции для работы с символами
Преобразовать код символа в соответствующий символ позволяет системная функция Симв() . В качестве единственного параметра функции передаётся числовое выражение, содержащее код символа в кодировке Windows-1251. Возвращаемым значением функции является строковое значение — соответствующий указанному коду символ. Англоязычный синоним имени функции — Chr() .
Преобразовать символ в код символа позволяет системная функция КодСимв() . В качестве единственного параметра функции передаётся строковое выражение, содержащее символ. Возвращаемым значением функции является целое число, представляющее собой десятичный код заданного символа в кодировке Windows-1251. Англоязычный синоним имени функции — Asc() .
Читайте также: