Хитрости при работе с 1С 8 |
Эта статья позволит Вам съэкономить много времени и избежать лишних усилий при решении некоторых вопросов. Копирование текста запроса между текстом модуля и консолью запросов. Привычное "скопировать - вставить" осложняется тем, что в модуле каждая из строчек запроса начинается с "|": Для решения этой проблемы необходимо: в модуле вызвать "Конструктор запроса" и в нем нажать кнопку "Запрос": В открывшемся окне нажать кнопку, разрешающую редактирование текста запроса: Скопировать текст запроса - он будет без символа "|" и вставить его в консоль запросов. Копирование в обратную сторону осуществляется аналогично - копируем в консоли, вставляем в это окно. Совмещение программной модификации текста запроса и конструктора запросов. При создании сложных отчетов, печатных форм нередко возникает необходимость программного формирования или изменения текста запроса. Например, печать накладной по форме ТОРГ-12 из документа "Реализация товаров, услуг" в типовой конфигурации "Управление торговлей": При этом значение "ТоварКод" (т.е. фактически используемое поле) определяется так: К сожалению, конструктором запросов такой запрос не открыть. Это осложняет разработку - бывает, что текст запрос занимает несколько страниц, и поиск простой синтаксической ошибки отнимает кучу времени. А ведь решение есть. Перепишем запрос, приведенный выше, следующим образом: Параметр "ТоварКод" мы будем устанавливать вот так: Результат достигнут - запрос открывается и редактируется конструктором и в то же время его текст изменяется программно. Конструктор запросов удаляет точку с запятой в конце текста запроса Когда часть запроса формируется текстом, а часть, программно, бывает, что текстовая вставка должна завершаться символом ";". Например: сТекстЗапроса = Если бКакоеТоУсловие Тогда Однако, если такой текстовую часть открыть конструктором, то после окончания редактирования эта ";" пропадет. Так как конструктор не знает, что дальше должно идти что-то еще. И потом не понимаешь, откуда пошли ошибки. В такой ситуации лучше написать так: сТекстЗапроса = Обратите внимание на выделенный фрагмент. Если бКакоеТоУсловие Тогда Тогда открытие запроса конструктором уже ни на что не повлияет. Разница в сортировке и при использовании агрегатных функций При использовании полей типа "СправочникСсылка", "ДокументСсылка" в запросе, для правильной (привычной пользователю сортировки по этим полям необходимо добавлять ключевое клово "АВТОУПОРЯДОЧИВАНИЕ": ВЫБРАТЬ ИЗ УПОРЯДОЧИТЬ ПО Но вот агрегатные функции (МАКСИМУМ, МИНИМУМ) такого ключевого слован не имеют и работают аналогично сортировке без "АВТОУПОРЯДОЧИВАНИЯ". Это может привести к неправильным результатам. Допустим, что используется типовая конфигурация "Управление торговлей 8", ред. 10.2 или 10.3 и нам необходимо по каждой серии номенклатуры получить комментарий из документа "Поступление товаров услуг", которым она первый раз поступила на определенный склад. Кажется совершенно естественным написать запрос: ВЫБРАТЬ ПОМЕСТИТЬ ПриходСерий ИЗ ГДЕ СГРУППИРОВАТЬ ПО ////////////////////////////////////////////////////////////////////////////////////////ВЫБРАТЬ ИЗ и получить неправильный результат. Имено из-за того, что "МИНИМУМ" работает не по "АВТОУПОРЯДОЧИВАНИЮ". Правильный запрос: ВЫБРАТЬ ПОМЕСТИТЬ ПриходСерийПериод ИЗ ГДЕ СГРУППИРОВАТЬ ПО //////////////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПОМЕСТИТЬ ПриходСерий ИЗ ГДЕ СГРУППИРОВАТЬ ПО //////////////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ИЗ Теперь будет показан комментарий из "Поступления товаров услуг" с минимальной датой. |
Обновлено 24.12.2011 10:54 |