в запросе с предложениями различные или объединить нельзя использовать поля неограниченной длины
v8: Ошибка в запросе с предложениями РАЗЛИЧНЫЕ и ОБЪЕДИНИТЬ
В СКД сделал запрос с вложенными завпросами. Все нормально отображается. При использовании данного запроса программно выдает ошибку «В запросе с предложениями РАЗЛИЧНЫЕ и ОБЪЕДИНИТЬ нельзя использовать вложенные таблицы»
ВЫБРАТЬ РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(ЗаказНаряд.Дата, ДЕНЬ) КАК Дата, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказНаряд.Номер) КАК Номер, СУММА(ВложенныйЗапрос.ВсегоНчасыФакт) КАК ВсегоНчасыФакт ИЗ (ВЫБРАТЬ ЗаказНарядУслуги.Ссылка КАК Ссылка, ЗаказНарядУслуги.ВсегоНчасыФакт КАК ВсегоНчасыФакт ИЗ Документ.ЗаказНаряд.Услуги КАК ЗаказНарядУслуги) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказНаряд КАК ЗаказНаряд ПО ВложенныйЗапрос.Ссылка = ЗаказНаряд.Ссылка
СГРУППИРОВАТЬ ПО НАЧАЛОПЕРИОДА(ЗаказНаряд.Дата, ДЕНЬ)
Пробовал разбить запрос на три подзапроса:
ЗапросЗавершенныеНормочасы.Текст = » | ВЫБРАТЬ | ЗаказНарядУслуги.Ссылка КАК Ссылка, | ЗаказНарядУслуги.Номенклатура.Наименование КАК НоменклатураНаименование, | ЗаказНарядУслуги.Сумма КАК Сумма, | ЗаказНарядУслуги.Работа.Мойка КАК РаботаМойка, | ЗаказНарядУслуги.ВсегоНчасыФакт КАК ВсегоНчасыФакт | ПОМЕСТИТЬ Твр1 | ИЗ | Документ.ЗаказНаряд.Услуги КАК ЗаказНарядУслуги; | | ВЫБРАТЬ РАЗЛИЧНЫЕ | ЗаказНаряд.ДатаЗавершен КАК ДатаЗавершен, | ЗаказНаряд.Номер КАК Номер, | ЗаказНаряд.Ссылка КАК Ссылка, | Твр1.НоменклатураНаименование КАК НоменклатураНаименование, | Твр1.Сумма КАК Сумма, | Твр1.ВсегоНчасыФакт КАК ВсегоНчасыФакт | ПОМЕСТИТЬ Твр2 | ИЗ | Документ.ЗаказНаряд КАК ЗаказНаряд | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Твр1 КАК Твр1 ПО ЗаказНаряд.Ссылка = Твр1.Ссылка; | | ВЫБРАТЬ РАЗЛИЧНЫЕ | НАЧАЛОПЕРИОДА(Твр2.ДатаЗавершен, ДЕНЬ) КАК ДатаЗавершенМойка, | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Твр2.Номер) КАК НомерМойка, | СУММА(Твр2.ВсегоНчасыФакт) КАК ВсегоНчасыФакт | ИЗ Твр2 КАК Твр2 | СГРУППИРОВАТЬ ПО | НАЧАЛОПЕРИОДА(Твр2.ДатаЗавершен, ДЕНЬ)»;
Использование реквизитов строкового типа
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
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
В запросе с предложениями различные или объединить нельзя использовать поля неограниченной длины
ВЫБРАТЬ РАЗЛИЧНЫЕ КонтактнаяИнформация.Объект, ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(1024)) КАК Представление ИЗ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация ГДЕ КонтактнаяИнформация.Объект ССЫЛКА Справочник.Контрагенты И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
но это топорно
Всего записей: 500 | Зарегистр. 19-10-2010 | Отправлено:12:51 07-08-2015
niko7
Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ZloyBrawler Работает так: ВЫБРАТЬ РАЗЛИЧНЫЕ ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(30)) КАК Email ИЗ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация ГДЕ ТИПЗНАЧЕНИЯ(КонтактнаяИнформация.Объект) = ТИП(Справочник.Контрагенты) И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
Если добавляю строчку КонтактнаяИнформация.Объект то Email повторяются т.к. у разных организаций есть одинаковые Email. Как сделать чтобы Email был уникальным, а КонтактнаяИнформация.Объект выводилась только для одного уникального Email?
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору niko7 по моим вразумениям
результат работы приведенного мной запроса такой
так и должно в запросе отображаться, а вот если вам нужно отобразить это в виде
ya.ru Рога и копыта АО Ромашка АО
то это уже делается при выводе информации на экран, в СКД проще всего, настроил группировки и доволен, а если самому вывод данных делать, то сначала нужно получить данные в виде таблицы
потом из таблицы выгрузить колонку Почта, свернуть ее, чтобы были только уникальные записи. потом в цикле для каждой почты искать Конторы (в таблице что получили ранее) с такой же почтой и выводить их сразу за Почтой куда вам нужно.
И вообще я может не понял, что вы имели ввиду, так как мне сложно переварить это «Как сделать чтобы Email был уникальным, а КонтактнаяИнформация.Объект выводилась только для одного уникального Email»
Я понимаю, задачка для школьников, но учитесь как нить сами пожалуйста путем проб и ошибок, это лучше всего.
Всего записей: 500 | Зарегистр. 19-10-2010 | Отправлено:15:25 07-08-2015
niko7
Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ZloyBrawler Спасибо за помощь
Цитата:
а вот если вам нужно отобразить это в виде ya.ru Рога и копыта АО Ромашка АО
Нужно даже проще. Почта и первая контора у которой есть такой Email. Для примера:
Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору dmitronn я не гуру 7.7, вообще можно сказать не шарю, но это мне не мешает порыться в инете парук минут и выйти на это «Компонента V7Plus. Анализатор XML-документов.» Примерно так http://1cdlasebya.blogspot.ru/2013/10/xml-1-77.html юзают ее А еще вариант есть через «XML_DOM=CreateObject(«MSXML2.DOMDocument.4.0″);» и в бой http://infostart.ru/public/84783/
Всего записей: 500 | Зарегистр. 19-10-2010 | Отправлено:07:53 11-08-2015
zaicev1989
Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Всем привет. Подскажите, какая версия 1с: Документооборот подойдет для УПП на платформе 8.2. А то всё что не скачивал, всё для 8.3. Буду особо благодарен, если скинете ссылку на эту версию.
Всего записей: 2 | Зарегистр. 08-09-2012 | Отправлено:13:44 11-08-2015
наткнулся я на такой вот запрос: —————————————————- ВЫБРАТЬ СпрНом.Ссылка Номенклатура, СпрНом.Артикул Артикул, Остатки.КоличествоОстаток Остаток, Резервы.КоличествоОстаток Резерв Цены.Цена Цена
ИЗ Справочник.Номенклатура СпрНом
в инете читал несколько статей, где рекомендуется не делать соединения с различными ВТ (Виртуальными Таблицами, типа Остатки, Обороты, ОстаткиИОбороты, СрезПервых, СрезПоследних) и заменять такие соединения на пакетные запросы, где в основном запросе уже идет соединение с результатом пакетных запросов. говорят, что такие запросы работают быстрее. я переписал этот запрос, используя пакетный вариант: —————————————————- ВЫБРАТЬ Ссылка Номенклатура, Артикул
ИНДЕКСИРОВАТЬ ПО Номенклатура
ВЫБРАТЬ Номенклатура, КоличествоОстаток Количество
ИНДЕКСИРОВАТЬ ПО Номенклатура
ВЫБРАТЬ Номенклатура, КоличествоОстаток Количество
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки Остатки Остатки.Номенклатура = СпрНом.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Резервы Резервы Резервы.Номенклатура = СпрНом.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Цены Цены Цены.Номенклатура = СпрНом.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки Остатки Остатки.Номенклатура = СпрНом.Номенклатура —————————————————-
проверил скорость выполнения обоих запросов. мой вариант оказался существенно медленнее =( почему? может я что-то не так понял из статей по оптимизации запросов?
Всего записей: 7 | Зарегистр. 13-04-2011 | Отправлено:15:03 13-08-2015
verucik
Ошибка SDBL: Тип неограниченной длины не допустим
Ошибка SDBL: Тип неограниченной длины не допустим
При объединении таблиц в запросах (ОБЪЕДИНИТЬ ВСЕ), если одно из полей неограниченной длины, а второе просто строкой, возникает данная ошибка.
Поведение системы
При этом выполнение программы завершается (Критическая ошибка с диалогом Закрыть/Перезапустить).
Причины и исправление
Пример поля неограниченной длины
Вариантом решения является приведение значения к определенной длине с возможной потерей данных через функцию ПОДСТРОКА(). Например,
ПОДСТРОКА(ЗатратыПоСтраховомуПокрытиюУслуги.Диагноз,1,1023) КАК Диагноз
В данном случае мы ограничили максимальную длину 1023 символами, т.к. второе объединяемое поле имеет такую же длину.
Не рекомендуется использовать поля, которые будут использоваться в запросах с неограниченной длинной, тут мной была совершена ошибка, на этапе создания документа, т.к. совместное использование таких полей усложняется.
Специфика медицинской сферы требовала длинных диагнозов, но надо было также сделать и конечными, либо использовать другие варианты хранения (несколько полей, справочники, разделение на краткий диагноз и полный).
Проблема не хочет уходить
Далее, все-таки эта ошибка выскочила второй раз, но уже без завершения программы (в отчете на скд). Было найдено еще одно поле неограниченной длины, которые было выбрано в полях отчета через точку «Документ.Примечание», его не возможно было объединить автоматически.
Добавил еще одно поле выборку запроса с приведение как выше и после этого в настройках СКД изменил поле на это.
Довольно таки не явная ошибка — очень трудно было понять:
Обнаружил ошибку только, когда начал исключать эти поля из выборки в СКД
Сущность хорошей рекламы не в том, чтобы возбуждать надежду, а в том, чтобы распалять жадность.
v8: Запрос. выбор различных элементов.
Выдает повторяющиеся элементы, а нужны различные. Если пишу ВЫБРАТЬ РАЗЛИЧНЫЕ, то выпадает ошибка:
<Форма.ФормаОтчета(74)>: Ошибка при вызове метода контекста (Выполнить): <(7, 2)>: В запросе с предложениями РАЗЛИЧНЫЕ или ОБЪЕДИНИТЬ нельзя использовать поля неограниченной длины
>ПаспортныеДанныеФизЛиц.ДокументКемВыдан, ВыборкаДляОтчет = Запрос.Выполнить().Выбрать(); по причине:
<(7, 2)>: В запросе с предложениями РАЗЛИЧНЫЕ или ОБЪЕДИНИТЬ нельзя использовать поля неограниченной длины
Вот код процедуры, в которой используется запрос:
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Сколько существует различных деревьев поиска, состоящих из N различных элементов? дерево поиска — это двоичное дерево, для любой вершины которого выполняется следующее условие: все.
ACCESS запрос на выбор даты и запрос Число прокатов Здравствуйте, как правильно написать в SQL,чтобы в окошке не показалось «ДатаВремя», а «Введите.
Выбор различных дат из файла Необходима помощь. Дан файл f, содержащий различные даты.Каждая дата-это число, месяц, год.Найти.
Выбор безплатного хостинга с множеством различных CMS Всем привет. Посоветуйте мне бесплатный хостинг с множеством различных CMS.