Поиск ошибок в запросе 1с
Ошибка в запросе
Есть запрос, который ищет в заданной папке слово и заменяет его на нужное: Запрос = Новый.
Синтаксическая ошибка в запросе
Здравствуйте! Пытаемся изменить документ "Счет на оплату покупателю", его печатную форму, Для.
Ошибка в запросе СКД при откате версии
Здравствуйте. Прошу помощи в следующем вопросе. При откате в 8.2.13 на 8.2.10.77 (УПП 1.3.14.1) в.
Ошибка в запросе с конструкцией "Выбрать разрешенные"
Здравствуйте, коллеги. Есть конфигурация на основе БП. В базе есть пользователь, с правами только.
и где у тебя условие при Организация.Пустая() значение ложь?
Добавлено через 8 минут
и вообще не понимаю этого
Что ты этим хочешь получить?
Добавлено через 3 минуты
если хочешь организацию исключить/не исключать тогда вот так лучше:
Выдает ошибку
: Неопознанный оператор
| Организация">) ; (Проверка: Толстый клиент (обычное приложение))
: Ошибка в выражении
Результат = Запрос.Выполнить(>).Выбрать(); (Проверка: Толстый клиент (обычное приложение))
: Обнаружено логическое завершение исходного текста модуля
ТабДок.Вывести(ОбластьИтого);> (Проверка: Толстый клиент (обычное приложение))
это почему не поправили?
Все равно выдает ошибку
: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить().Выбрать();
по причине:
<(44, 2)>: Синтаксическая ошибка "Форма1.Дата1"
>Форма1.Дата1 = &Дата1
у тебя идет перечисление , поставь "И"
Добавлено через 19 секунд
Добавлено через 2 минуты
Подскажите как сделать, у меня есть отбор по номенклатуре, а как прописать чтобы отбор делал со всех группы а не по данной номенклатуре
в условие добавить массив номенклатур.
Добавлено через 1 минуту
И еще хотел спросить, при заполнении документа выбираем период Дата1 и Дата2, я ставлю 1 квартал, создав документы по квартал, в обработке начинаю сформировывать по кварталам все нормально выдает дату, когда ставлю данные за год то ничего не выдает, подскажите что не так?
не понимаю механику что, куда, откуда, где =( могу лишь предложить точкой остановы проверить какие данные попадают в переменные дата1 и дата2
Есть документ с реквизитом Дата1 и Дата2, тут выбираю период. Заполняется документ по кварталам, т.е в Дата1 и Дата2 ставить квартал (1, 2, 3, 4 квартал). Когда документы заполнены на целый год, т.е создана четыре документа (т.е четыре квартала), все это записывается в регистр накоплений, в регистре тоже есть реквизиты Дата1 и Дата2, куда все записывается. Начинаю сформировывать отчет в обработке по кварталам отдельно, данные выводит все нормально. Только начинаю формировать за год (я выбираю период в Дата1 и Дата2 целый год) то данных не выводит. Непонятно почему так
При отладке логики программного кода на императивных языках, т.е. описывающих последовательность операций над переменными в памяти, мы имеем естественную возможность анализа состояния переменных после выполнения каждой операции. Встроенный язык 1С относится к таким языкам.
Однако язык запросов 1С, как и родительский SQL, относятся к декларативным языкам, т.е. описывающим сразу конечное состояние (результат). В таких языках отладка логики в каждом языке очень специфична и приходится изобретать свои приемы и инструменты, т.к. внутренние алгоритмы получения результата большей частью скрыты от программиста.
Написав или изменив запрос, мы обычно проверяем его работу в консоли запросов, чтобы убедиться в соответствии выдаваемого им результата нашим ожиданиям. Рассмотрим, какими приемами можно отлаживать логику запроса 1С в консоли запросов из подсистемы Инструменты разработчика (ИР).
Пакет запросов в языке запросов - шаг в сторону императивных языков. Временные таблицы здесь играют роль переменных, а запросы пакета - роль операций над этими переменными. Поэтому в большинстве случаев начинать отладку лучше с локализации проблемных запросов пакета.
Любой подзапрос в целях отладки можно перенести в отдельный запрос пакета, создающий временную таблицу, и заменить его текст в исходном месте на выборку из этой временной таблицы. Многие консоли запросов позволяют делать это нажатием одной кнопки и консоль запросов ИР в частности.
Также в отдельные запросы пакета можно переносить и соединяемые выборки из секции “ИЗ” при наличии у них собственных отборов. Но тут уже придется делать все вручную.
Этот прием изменяет текст запроса, что может быть неудобно для внесения исправлений потом в оригинальный запрос.
Некоторые консоли запросов позволяют отлаживать подзапросы и части объединения прямо в месте их определения. Консоль запросов ИР в режиме дерева запроса так уже очень давно позволяет делать. Двойным кликом в строке дерева в ней можно выполнить любой подзапрос.
Также можно выполнить все подзапросы автоматизировано, что может быть полезно для ускорения поиска проблемных подзапросов путем анализа количества возвращаемых строк.
Если на входе в запрос все таблицы и вложенные запросы передают ожидаемые данные, то дальше встает задача поиска ошибки в значениях параметров или тексте этого запроса. Расхождение между ожидаемым и фактическим результатом запроса состоит из проблемных строк 3-х типов:
- строка с неожиданными значениями неключевых полей
- отсутствующая строка с нужными ключевыми полями
- лишняя строка
Таким образом дальше нам нужно разбираться с этими проблемными строками.
Для помощи в решении этой задачи в консоли запросов ИР имеется команда “ Расшифровать строку ” результата запроса. Она создает временный запрос в отдельном окне консоли с добавлением в тексте запроса значений всех однозначных базовых выражений для выбранной строки результата.
Рассмотрим работу этой команды на примерах.
Строка с неожиданными значениями неключевых полей
КурсыВалютТ.Валюта КАК Валюта ,
КОГДА МАКСИМУМ ( КурсыВалютТ.Курс ) > &МаксимальныйКурс
КОНЕЦ КАК КатегорияКурса
РегистрСведений.КурсыВалют КАК КурсыВалютТ
И КурсыВалютТ.Период > &ДатаНачала
выдающий для валюты USD результат КатегорияКурса=1, но мы ждали КатегорияКурса=2.
Активируем проблемную строку результата и выполним команду “Расшифровать строку”.
При этом откроется новое окно консоли запросов в режиме “Расшифровки”, о чем свидетельствует заголовок формы.
В списке запросов этого окна консоли появится одноименный исходному пакет запросов расшифровки. Если исходный запрос содержит группировку (секцию СГРУППИРОВАТЬ ПО или агрегатные функции), то первым запросом пакета будет вывод всех строк, попадающих в группировку выбранной строки. Последний запрос этого пакета всегда выводит результат исходного запроса, выполненного с отбором по всем выбранным полям исходного запроса для выбранной строки, и с встроенными в текст значениями базовых выражений после группировки. Однако эти дополнительные отборы применяются разово и сразу удаляются из текста запроса расшифровки. Он же активируется при открытии окна консоли в режиме “Расшифровки”. В тексте запроса сразу выделяется то выбранное поле, колонка которого является текущей в результате исходного запроса.
В этом примере нас интересует выбранное поле КатегорияКурса. В расшифровке его выражение выглядит так
КОГДА МАКСИМУМ ( КурсыВалютТ.Курс ) > &МаксимальныйКурс
КОНЕЦ КАК КатегорияКурса
В фигурных скобках указываются представления значений выражений, находящихся слева от этих скобок. Таким образом в нашем случае мы понимаем, что результатом агрегатной функции МАКСИМУМ(КурсыВалютТ.Курс) является число 34.58, а значением параметра &МаксимальныйКурс является число 34.
Далее мы можем активировать первый запрос расшифровки с названием “ДоГруппировки”, чтобы изучить вычисление агрегатных функций.
В этом запросе обычно будет уже много строк и потому не будет встроенных в текст запроса значений выражений. В нем также накладывается дополнительный отбор, но уже не удаляется. Также в нем выбираются дополнительно все использованные в тексте запроса поля таблиц, чтобы легче было искать проблемные строки. После обнаружения проблемной строки в результате этого запроса можно вызывать расшифровку и для нее.
Тогда мы увидим значения всех базовых выражений в тексте запроса для этой строки результата. Тем самым становится проще разобраться, как вычислялись значения сложных выражений.
Приветствую.
Пытаюсь делать внешнюю обработку. При тестировании запроса в Консоли отчетов - все работает правильно. При переносе запроса во внешнюю обработку, получаю ошибку (см. вложение). Есть ли какие то инструменты, что бы определить место ошибки?
Расставить между словами пробелы - как определить, где именно поставить пробел
Всем доброго дня. Увидел задачу: нужно убрать пробелы между словами, чтобы получился слитный текст.
Определить, встречается ли массив Vec2 в массиве Vec1, и где именно
Сгенерировать один массив Vec1 из N псевдослучайных чисел, вывести значения его элементов на.
Написать функцию, указывающая где именно находится ошибка (скобочный парсер)
есть код проверяющий правильность скобочной последовательности, а как написать функцию,указывающую.
Где ошибка в запросе?
Всем привет. Делаю запрос, вроде правильный, но update() срабатывает неверно $update = 'ТЕСТ';.
выборка.следующий() - тогда там появляются данные. их и смотри
Добавлено через 3 минуты
ну или наверно можно написать запрос выполнить выгрузить - тогда будет доступна ТЗ с данными, так вроде
всё правильно. не надо значение не значение - мало ли не так называется, не открыто для записи, ещё что непонятное (просто совет, не рекомендация)
сообщить(. количество())
вот и посмОтрите
что то я не догоняю. вот тот список полей детальных записей что в первом посте, в консоли отчетов они представлены как доступные поля, из которых я потом выбираю 5 нужных мне полей в конструкторе для получения нужных мне данных. А в обработке получается нет такого конструктора?
в консоли отчетов они представлены как доступные поля таблицы значений. Здесь тоже можно выгрузить в ТЗ: ТЗ = РезультатЗапроса.Выгрузить();
Убрал 2 условия, вернуло 101. То есть 101 запись, в ТЗ появляется вертикальный бегунок, т.е. записи добавляются, но почему то значений в полях как и самих полей в ТЗ нет.
Параметр в 1С – это некий элемент, принятый функцией. В данной статье поговорим о видах и типах параметров, а также рассмотрим, как задать параметры так, чтобы избежать ошибки «Неверные параметры» в 1С.
1. Как установить параметр в запросе?
Параметр запроса – это некоторый элемент, который находится внутри функции поиска по базе данных. Рассмотрим пример, как должны быть установлены параметры запроса. Например, пускай нам нужно получить составляющие из перечня-справочника под названием «Еда» красного, жёлтого или зелёного цвета, это будет иметь такой вид:
Рис. 1 Как установить параметр в запросе «Красный»
Рис. 2 Как установить параметр в запросе «Желтый»
Рис. 3 Как установить параметр в запросе «Зеленый»
Можно увидеть, что, по факту, все эти запросы одинаковые и разность только в цвете. Это-то и есть наш параметр – та переменная, которую не хотелось бы каждый раз повторять. В вышеуказанном примере параметр – это цвет, дадим ему имя «ВыбранныйЦвет» и поменяем значения цветов на эту переменную внутри запроса. А для того чтобы указать, что это именно параметр, нужно приписать перед именем амперсанд «&», тогда мы сможем задать параметр в запросе:
Рис. 4 Как задать параметр в запросе «ВыбранныйЦвет»
После этой процедуры пробуем выполнить наш запрос, результат будет пустым и выглядеть так:
Рис. 5 Результат неверного параметра в запросе пустой
Результат запроса пустой по причине того, что в коде не было указано само значение параметра. Выберем имя, для этого потребуется задействовать панель, которая находится над редактором запросов. Внутри данной панели размещен текст запросов:
Рис. 6 Редактор запросов – панель с текстом запросов
Система 1С уже узнала параметр внутри запроса и выделила его в соответствующей секции, но пока без значений. Меняем пустое значение запроса, например, на значение «Жёлтый».
Рис. 7 Смена пустого значения запроса на «Желтый»
Теперь запрос выполнится! Аналогично можно заполнить оставшиеся значения. Так при помощи параметра можно в одном и том же запросе получать результаты, которые отличаются. То есть, главная функция параметров внутри запросов – делать их более обобщёнными. Это особенно актуально в сложных запросах, так как достаточно будет только изменить сам параметр, не меняя весь запрос.
2. Функция параметра «Ссылка»
В этом варианте будет сравниваться в качестве ограничения для параметра не название цвета, а значение по ссылке:
Рис. 8 Ограничение для параметра – значение по ссылке
Наш параметр «ВыбранныйЦвет» из строки превратился в ссылку на какой-то элемент внутри справочника «Цвета», поэтому у пользователя есть возможность изменить параметр и его тип:
Рис. 9 Изменения типа параметра в 1С
После этого, в момент, когда ведётся выбор значения данного параметра, перед нами появится выпадающий список с перечнем цветов – это функция параметра ссылки.
3. Параметр «Дата»
Допустим, нужен запрос, который будет выбирать заказы клиентов в определённый период. Данный период будет иметь две границы – «НачалоИнтервала» и «КонецИнтервала».
Рис. 10 Параметр «Дата»
Аналогично выполняем данный запрос и видим, что 1С уже распознала, что у данного параметра тип «Дата». Пусть нам нужны заказы за январь 2014 года, тогда получим:
Рис. 11 Пример запроса по параметру «Дата»
Результат запроса с параметром «Дата» будет выглядеть следующим образом:
Рис. 12 Результат запроса с параметром «Дата»
В данной статье были рассмотрены параметры в системе 1С, видов параметр внутри запроса, параметр с типом «Дата», параметры с типом «Ссылка», аналогично проводится работа с параметрами в списках таблиц и таблиц со значениями. Ошибка в них возникает в случае задания невозможного названия, типа, их несоответствий, пунктуационных ошибок в коде программы.
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
Часто бывает, что в результате обмена данных в 1С 8.3 и 8.2 случаются ошибки, и вместо значения ссылочных данных в полях встречается «Объект не найден», то есть «битые ссылки».
Поиск битых ссылок в 1С запросом
Очень часто встает вопрос: как отобрать элементы с битыми ссылками запросом 1С?
Вопрос решается достаточно легко, рассмотрим его на примере:
необходимо отобрать документы Счет на оплату покупателю, где вместо организации установлена «битая ссылка».
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Первым отбором «НЕ СчетНаОплатуПокупателю.Организация ЕСТЬ NULL» мы определили, что ссылка установлена.
Вторым отбором СчетНаОплатуПокупателю.Организация.Код ЕСТЬ NULL, обращаясь к коду организации по точке, система строит левое соединение, но не находит в таблице организаций такой элемент — возвращает NULL.
Всё получается достаточно просто.
Определение битой ссылки в объектной модели
Если у Вас нет возможности сделать проверку запросом, рекомендую использовать два разных метода. Рассмотрим их на примере, который давали ранее:
Используя ПолучитьОбъект()
При использовании метода «ПолучитьОбъект()» битая ссылка вернет «Неопределено».
Поиск в строке
Этот метод самый простой — поиск строки «Объект не найден» в представлении элемента.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Читайте также:
- Этот сводной таблицы создан в более новой версии excel и не может быть обновлен
- Что такое ошибка 521 в браузере
- Какой из компонентов java предоставляет инструмент для отладки программы debugging tools
- 1с установить значение элемента формы
- Какие программы из перечисленных являются антивирусными doctor web avg winzip winrar