1с получить целое в запросе
1. Преобразование таблицы строк в таблицу целых чисел.
Преобразование таблицы строк в таблицу целых чисел позволяет выполнить следующий пакетный запрос. При построении запроса считается, что максимальная длина числа ограничена 17 знаками.
"ВЫБРАТЬ Дано.НомерСтроки, Дано.Строка
|ПОМЕСТИТЬ Дано
|ИЗ &Дано КАК Дано
|;
|ВЫБРАТЬ 0 С, 1 КАК П
|ПОМЕСТИТЬ Р16
|ОБЪЕДИНИТЬ ВЫБРАТЬ 1, 10
|ОБЪЕДИНИТЬ ВЫБРАТЬ 2, 100
|ОБЪЕДИНИТЬ ВЫБРАТЬ 3, 1000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 4, 10000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 5, 100000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 6, 1000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 7, 10000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 8, 100000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 9, 1000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 10, 10000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 11, 100000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 12, 1000000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 13, 10000000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 14, 100000000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 15, 1000000000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 16, 10000000000000000
|;
|ВЫБРАТЬ СУММА(А.П * Б.С) / МИНИМУМ(А.П) КАК Ответ
|ИЗ Дано, Р16 КАК А, Р16 КАК Б
|ГДЕ Б.С < 10 И ПОДСТРОКА(Дано.Строка, 17 - А.С, 1) = ПОДСТРОКА(""0123456789"", Б.С + 1, 1)
|СГРУППИРОВАТЬ ПО Дано.НомерСтроки"
В пакете всего три запроса.
Первый запрос пакета выполняет загрузку таблицы значений, содержащей исходные строковые представления чисел, и помещает ее в таблицу «Дано» с колонками «НомерСтроки» и "Строка". Второй запрос пакета формирует искусственную таблицу, содержащую номера позиций и их вес в десятичной позиционной системе счисления. Счет позиций идет справа налево.
Вся основная работа по преобразованию строки в число выполняется в последнем, третьем запросе пакета. В этом запросе таблица «Дано» умножается на таблицу весов позиций Р16 (КАК А) и еще раз на таблицу Р16 (КАК Б). В последней используется только первые десять строк первой колонки для прохода по номерам всех цифр строки «0123456789». Условие «ГДЕ» отбирает записи, в которых цифры в исходной строке и строке «0123456789» совпадают в позиции, определяемой для исходной строки строкой таблицы весов А и для строки цифр – строкой таблицы номеров цифр Б. Это дает возможность определить искомое число как сумму произведений веса позиции на номер цифры. При этом группировка идет по строкам таблицы «Дано».
Получающаяся сумма требует нормализации путем деления на минимальный вес позиции, имеющейся в числе. Это делается вместо отсчета позиций от реального правого края строки, который неизвестен в соответствующий момент.
Работа данного запроса иллюстрируется схемой на фиг.1, где показано преобразование в число строки «4957379257».
Нужно отметить, что данный алгоритм отличается высокой устойчивостью к ошибкам в исходных данных. Например, строка «123абракадабра», строка «абракадабра123», строка «так тоже123можно» одинаково хорошо преобразуются в число 123. Символы, не являющиеся цифрами, заменяются нулями или просто отбрасываются (если они справа от последней цифры) как не распознанные.
Преобразования в числа при задании различных исходных строк приведены на скриншотах, прилагаемых к статье.
2. Преобразование таблицы строк в таблицу дробных чисел.
Преобразование таблицы строк в таблицу дробных чисел можно выполнить следующим пакетным запросом.
"ВЫБРАТЬ Дано.НомерСтроки, Дано.Строка
|ПОМЕСТИТЬ Дано
|ИЗ &Дано КАК Дано
|;
|ВЫБРАТЬ 0 С, 1 КАК П
|ПОМЕСТИТЬ Р16
|ОБЪЕДИНИТЬ ВЫБРАТЬ 1, 10
|ОБЪЕДИНИТЬ ВЫБРАТЬ 2, 100
|ОБЪЕДИНИТЬ ВЫБРАТЬ 3, 1000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 4, 10000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 5, 100000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 6, 1000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 7, 10000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 8, 100000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 9, 1000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 10, 10000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 11, 100000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 12, 1000000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 13, 10000000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 14, 100000000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 15, 1000000000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 16, 10000000000000000
|;
|ВЫБРАТЬ СУММА(А.П * Б.С * ВЫБОР КОГДА ПОДСТРОКА(Строка, 1, 17 - А.С) ПОДОБНО ""%.%"" ТОГДА 10 ИНАЧЕ 1 КОНЕЦ)
|/ МИНИМУМ(ВЫБОР КОГДА НЕ ПОДСТРОКА(Строка, 1, 17 - А.С) ПОДОБНО ""%.%"" ТОГДА А.П ИНАЧЕ 100000000000000000 КОНЕЦ) КАК Ответ
|ИЗ Дано КАК Дано, Р16 КАК А, Р16 КАК Б
|ГДЕ Б.С < 10 И ПОДСТРОКА(Строка, 17 - А.С, 1) = ПОДСТРОКА(""0123456789"", Б.С + 1, 1)
|СГРУППИРОВАТЬ ПО Дано.НомерСтроки"
Данный пакетный запрос отличается от предыдущего особой обработкой позиций, находящихся справа от первой десятичной точки. Такие позиции выделяются с использованием оператора ПОДОБНО. Проверяется подобие подстроки, заканчивающейся в данной позиции и шаблона "%.%". Для позиций, находящихся правее точки, применяется дополнительный множитель 10. Также меняется определение нормализующего делителя, который находится как минимум веса позиций, не находящихся правее первой точки.
3. Преобразование таблицы строк в таблицу целых чисел с "выращиванием" таблицы весов.
В данном варианте первого запроса вместо громоздкого текста, который непосредственно определяет строки таблицы весов, используется прием выращивания (порождения) этой таблицы.
"ВЫБРАТЬ Дано.НомерСтроки, Дано.Строка
|ПОМЕСТИТЬ Дано
|ИЗ &Дано КАК Дано
|;
|ВЫБРАТЬ 0 КАК С, 1 КАК П
|ПОМЕСТИТЬ Р1
|ОБЪЕДИНИТЬ ВЫБРАТЬ 1, 10
|;
|ВЫБРАТЬ А.С + Б.С КАК С, МАКСИМУМ(А.П * Б.П) КАК П
|ПОМЕСТИТЬ Р2
|ИЗ Р1 КАК А, Р1 КАК Б
|СГРУППИРОВАТЬ ПО А.С + Б.С
|;
|ВЫБРАТЬ А.С + Б.С КАК С, МАКСИМУМ(А.П * Б.П) КАК П
|ПОМЕСТИТЬ Р4
|ИЗ Р2 КАК А, Р2 КАК Б
|СГРУППИРОВАТЬ ПО А.С + Б.С
|;
|ВЫБРАТЬ А.С + Б.С КАК С, МАКСИМУМ(А.П * Б.П) КАК П
|ПОМЕСТИТЬ Р8
|ИЗ Р4 КАК А, Р4 КАК Б
|СГРУППИРОВАТЬ ПО А.С + Б.С
|;
|ВЫБРАТЬ А.С + Б.С КАК С, МАКСИМУМ(А.П * Б.П) КАК П
|ПОМЕСТИТЬ Р16
|ИЗ Р8 КАК А, Р8 КАК Б
|СГРУППИРОВАТЬ ПО А.С + Б.С
|;
|ВЫБРАТЬ СУММА(А.П * Б.С) / МИНИМУМ(А.П) КАК Ответ
|ИЗ Дано, Р16 КАК А, Р16 КАК Б
|ГДЕ Б.С < 10 И ПОДСТРОКА(Дано.Строка, 17 - А.С, 1) = ПОДСТРОКА(""0123456789"", Б.С + 1, 1)
|СГРУППИРОВАТЬ ПО Дано.НомерСтроки"
В этом пакетном запросе семь подзапросов.
Первый запрос, как всегда, осуществляет ввод данных.
4. Преобразование таблицы строк в таблицу дат.
Преобразование таблицы строк вида «ГГГГММДД» в таблицу дат можно выполнить следующим пакетным запросом.
"ВЫБРАТЬ Дано.НомерСтроки, Дано.Строка
|ПОМЕСТИТЬ Дано
|ИЗ &Дано КАК Дано
|;
|ВЫБРАТЬ 0 Х, 0 Д, 0 М, 1000 Г
|ПОМЕСТИТЬ Формат
|ОБЪЕДИНИТЬ ВЫБРАТЬ 1, 0, 0, 100
|ОБЪЕДИНИТЬ ВЫБРАТЬ 2, 0, 0, 10
|ОБЪЕДИНИТЬ ВЫБРАТЬ 3, 0, 0, 1
|ОБЪЕДИНИТЬ ВЫБРАТЬ 4, 0, 10, 0
|ОБЪЕДИНИТЬ ВЫБРАТЬ 5, 0, 1, 0
|ОБЪЕДИНИТЬ ВЫБРАТЬ 6, 10, 0, 0
|ОБЪЕДИНИТЬ ВЫБРАТЬ 7, 1, 0, 0
|ОБЪЕДИНИТЬ ВЫБРАТЬ 8, 0, 0, 0
|ОБЪЕДИНИТЬ ВЫБРАТЬ 9, 0, 0, 0
|;
|ВЫБРАТЬ ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1,1,1,0,0,0),ДЕНЬ,СУММА(А.Д*Б.Х)-1),МЕСЯЦ,СУММА(А.М*Б.Х)-1),ГОД,СУММА(А.Г*Б.Х)-1) КАК Ответ
|ИЗ Дано, Формат КАК А, Формат КАК Б
|ГДЕ А.Х < 8 И Б.Х < 10 И ПОДСТРОКА(Дано.Строка, А.Х + 1, 1) = ПОДСТРОКА(""0123456789"", Б.Х + 1, 1)
|СГРУППИРОВАТЬ ПО Дано.НомерСтроки"
В данном запросе всего три подзапроса, причем первый из них выполняет функцию ввода таблицы строк в запрос.
Во втором запросе определяется временная таблица "Формат" с четырьмя колонками. В колонке "Х" записывается номер позиции в строке, начиная с нуля слева направо, в колонке "Д" - вес позиции при подсчете числа дней, "М" - месяцев, "Г" - лет. В последнем запросе вычисляется сумма произведений каждой колонки на номер цифры, находящейся в соответствующей позиции. Далее эти суммы произведений как число лет, месяцев и дней добавляются функцией добавить к дате сначала к "нулевому дню" '00010101', потом к результату первого добавления, а затем к результату второго. Это и дает в итоге искомую дату.
Очевидно, что переопределением таблицы "Формат" можно легко настроить запрос на нужный формат читаемых дат. Кроме того, нетрудно учесть наличие в строке значений часов, минут и секунд для ввода даты со временем.
5. Преобразование таблицы строк в таблицу дат с "выращиванием" таблицы позиций.
Текст данного запроса выглядит следующим образом.
"ВЫБРАТЬ Дано.НомерСтроки, Дано.Строка
|ПОМЕСТИТЬ Дано
|ИЗ &Дано КАК Дано
|;
|ВЫБРАТЬ 0 КАК Х
|ПОМЕСТИТЬ Р1
|ОБЪЕДИНИТЬ ВЫБРАТЬ 1
|;
|ВЫБРАТЬ А.Х + 2 * Б.Х КАК Х
|ПОМЕСТИТЬ Р2
|ИЗ Р1 КАК А, Р1 КАК Б
|;
|ВЫБРАТЬ А.Х + 4 * Б.Х КАК Х
|ПОМЕСТИТЬ Р4
|ИЗ Р2 КАК А, Р2 КАК Б
|;
|ВЫБРАТЬ ДОБАВИТЬКДАТЕ(
| ДОБАВИТЬКДАТЕ(
| ДОБАВИТЬКДАТЕ(
| ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| , ДЕНЬ
| , СУММА(ВЫБОР А.Х КОГДА 7 ТОГДА 1 КОГДА 6 ТОГДА 10 КОНЕЦ * Б.Х) - 1
| )
| , МЕСЯЦ
| , СУММА(ВЫБОР А.Х КОГДА 5 ТОГДА 1 КОГДА 4 ТОГДА 10 КОНЕЦ * Б.Х) - 1
| )
| , ГОД
| , СУММА(ВЫБОР А.Х КОГДА 3 ТОГДА 1 КОГДА 2 ТОГДА 10 КОГДА 1 ТОГДА 100 КОГДА 0 ТОГДА 1000 КОНЕЦ * Б.Х) - 1
| ) КАК Ответ
|ИЗ Дано, Р4 КАК А, Р4 КАК Б
|ГДЕ А.Х < 8 И Б.Х < 10 И ПОДСТРОКА(Дано.Строка, А.Х + 1, 1) = ПОДСТРОКА(""0123456789"", Б.Х + 1, 1)
|СГРУППИРОВАТЬ ПО Дано.НомерСтроки"
Вся основная работа выполняется в пятом запросе. Год в виде числа, месяц в виде числа и день в виде числа получаются как сумма произведений номера цифры на вес позиции. Вес позиций определяется для каждого элемента даты отдельно при помощи оператора «ВЫБОР». Определенные год, месяц и день подставляются в функции «ДОБАВИТЬКДАТЕ», что и дает в итоге искомую дату.
6. Преобразование таблицы строк в таблицу дат со временем по формату, задаваемом параметром запроса.
При анализе запроса 4 можно увидеть, что формат даты задается таблицей весов позиций года, месяца и дня «Формат». Эту таблицу можно дополнить колонками для часов, минут и секунд. При различном заполнении этой таблицы можно анализировать даты, представленные в самом различном формате. Примеры заполнения таблицы "Формат" для различных форматов даты приведены на фиг.5.
В связи с эти возникает идея: А если вообще не задавать таблицу "Формат" заранее, а построить ее внутри запроса путем анализа текстового параметра "&Формат", передаваемого в запрос и определяющего формат даты. Тогда запрос станет чрезвычайно гибким и универсальным. На этой идее построен шестой запрос.
Текст данного запроса, отличающейся универсальностью за счет управления преобразованием с помощью строкового параметра "&Формат", можно посмотреть в прилагаемой к статье обработке. Дополнительным бонусом, скачавшим обработку, будут примеры очень уместного использования (как кажется) функции "НовыйЗапрос" [//infostart.ru/public/163853/] в модуле обработки. На скриншотах, прилагаемых к статье, приведены примеры преобразований при задании различных форматов даты. В определении формата использованы русские букы "Г", "М", "Д", "Ч", "Н" и "С". Важно, что позиции минут обозначены не маленькой русской "м", а русской "н", поскольку в запросе нет возможности различить регистр символов. Для заполнения незначащих позиций можно использовать любые другие символы. Примеры задания формата: "ГГГГММДДЧЧННСС", "ДД_ММ_ГГГГ_ЧЧ:НН:СС", "ССССС - тоже работает".
Заключение.
В заключение хочется отметить, что хотя язык запросов платформы 1С:Предприятие имеет весьма слабые возможности работы со строками, использование техники искусственых таблиц отчасти компенсирует этот недостаток. С другой стороны, та же причина открывает широкий простор нашей изобретательности при написании запросов. Пользуйтесь этим!
На выходе к примеру будет число: 3,67500000540833 . Мне же необходимо его обрезать как 3.67
Если делаю выразить 15,2 то система округляет до 3,68. Как этого избежать ?
(4) Ну да. Вы же еще и цену со скидкой округляете, а не конечный результат. То есть у вас и цена изменяется, и результат разный.
Математику пытаетесь обмануть? Бесполезно.
Правильно округляет. В запросе округление только по математическим правилам. Все остальные вариации реализуйте программно на свое усмотрение.
1. Если в операции деления заранее известны порядки числителя и знаменателя, то следует по возможности избегать выполнения деления числа заведомого маленького порядка на число заведомо большого порядка. Например, вместо:
0.02 / 28346 * 9287492
0.02 * 9287492 / 28346
2. При выполнении арифметических операций в запросах к базе данных платформа 1С:Предприятия поддерживает точность вычислений до 8 разрядов дробной части. Однако, из-за особенностей работы различных СУБД в некоторых ситуациях точность результатов может отличаться от 8. Более подробно о вычислении разрядности результатов можно почитать в статье ИТС Разрядность результатов выражений и агрегатных функций в языке запросов.
Если точность результата выполнения запроса к базе данных, содержащего
арифметические операции деления,
агрегатные функции СРЕДНЕЕ,
арифметические операции умножения, если каждый из множителей может иметь дробную часть,
различается на различных СУБД, то рекомендуется к операндам и/ или результатам этих операций применять оператор явного приведения разрядности и точности числовых данных:
ВЫРАЗИТЬ(. КАК Число(m, n))
Оператор ВЫРАЗИТЬ следует применять к операндам, если на какой-нибудь СУБД точность получаемого результата недостаточна. Например, требуется 10 разрядов после запятой, а получается 6.
При этом указанная общая разрядность операндов должна быть минимальной, но не меньше той, которая достаточна для представления значений каждого из операндов. Неоправданное завышение разрядности может привести к потере точности последующих вычислений и несколько снизить скорость выполнения запроса.
Важно иметь в виду, что на разных СУБД имеются различные ограничения на максимальную разрядность десятичных чисел. Самое жесткое ограничение - это 31 разряд в целой и дробной частях. Чем меньшее значение разрядности будет указано для операндов, тем выше сможет быть точность результата. Например, если в результате требуется не менее 10 разрядов дробной части, первый операнд заведомо помещается в 15 разрядов целой части, а второй операнд заведомо помещается в 5 знаков целой части, то выражение может быть записано так:
ВЫБРАТЬ
ВЫРАЗИТЬ(Таблица.Множитель * Таблица.Числитель КАК Число(25,10)) / ВЫРАЗИТЬ(Таблица.Знаменатель КАК Число(15,10)) КАК Результат
ИЗ Таблица КАК Таблица
Оператор ВЫРАЗИТЬ следует применять к результату, если точность вычислений на всех СУБД достаточна, но на некоторых она больше, а на других меньше. При этом указанная общая разрядность результата должна быть минимальной, но не меньше той, которая достаточна для представления значений результата. Если в приведенном примере известно, что Знаменатель не может быть меньше 0.00001, то для представления результата достаточно 20 разрядов целой части. В этом случае выражение может быть записано так:
ВЫБРАТЬ
ВЫРАЗИТЬ(Таблица.Множитель * Таблица.Числитель / Таблица.Знаменатель КАК Число(30,10)) КАК Результат
ИЗ Таблица КАК Таблица
Иногда может быть целесообразно выполнить приведения к требуемой точности как операндов, так и результата. Например:
ВЫБРАТЬ
ВЫРАЗИТЬ(ВЫРАЗИТЬ(Таблица.Множитель * Таблица.Числитель КАК Число(25,10)) / ВЫРАЗИТЬ(Таблица.Знаменатель КАК Число(15,10)) КАК Число(30,10)) КАК Результат
ИЗ Таблица КАК Таблица
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени В чем разница между ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ в языке запросов 1С 10
Цитата из справки 1С: " По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной . Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое Посмотреть все результаты поиска похожих
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени В чем разница между ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ в языке запросов 1С 10
Цитата из справки 1С: " По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной . Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое Внешние источники данных 0
Почему данная возможность вызывает такой интерес? Любой человек, который программировал в 1С при этом достаточно неплохо знаком с SQL и хотя бы в общих чертах знаком с архитектурой и принципами разработки других технологических платформ для бизнес пр Посмотреть все результаты поиска похожих
Еще в этой же категории
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Оператор ВЫРАЗИТЬ, аналог методов Лев, Прав, СокрЛП в Запросе? 11
Использовать конструкцию « ВЫРАЗИТЬ »: Запрос.Текст = " … |ГДЕ | (ВЫРАЗИТЬ(ЕдиницыХранения.Владелец.Наименование КАК СТРОКА(4))) Груз" ; Запрос.УстановитьПараметр(" Груз" ," Тонн" ); С целью приведения строк неограниченной длины к строкам Посмотреть все в категории Запросы
Рассмотрим задачу, когда необходимо в запросе разделить число на целую и дробную часть.
Пример запроса:
Запрос = Новый Запрос;
| КОГДА (ВЫРАЗИТЬ(&ДробноеЧисло КАК ЧИСЛО(4, 0))) > &ДробноеЧисло
| ТОГДА (ВЫРАЗИТЬ(&ДробноеЧисло КАК ЧИСЛО(4, 0))) — 1
| ИНАЧЕ ВЫРАЗИТЬ(&ДробноеЧисло КАК ЧИСЛО(4, 0))
| КОНЕЦ КАК ЦелаяЧасть,
| КОГДА (ВЫРАЗИТЬ(&ДробноеЧисло КАК ЧИСЛО(4, 0))) = &ДробноеЧисло
| КОГДА (ВЫРАЗИТЬ(&ДробноеЧисло КАК ЧИСЛО(4, 0))) > &ДробноеЧисло
| ТОГДА 1 — ((ВЫРАЗИТЬ(&ДробноеЧисло КАК ЧИСЛО(4, 0))) — &ДробноеЧисло)
| ИНАЧЕ &ДробноеЧисло — (ВЫРАЗИТЬ(&ДробноеЧисло КАК ЧИСЛО(4, 0)))
Собственные наработки и набитые шишки в моей практике по программированию в 1С.
среда, 28 октября 2015 г.
Как найти целое число от числа в запросе
Иногда необходимо получить целое число в запросе. Аналог Цел() языка. Необходимо прибегнуть к мелким хитростям, поскольку такого метода в запросе не существет. Но не стоит огорчаться.
Вот собственно необходимо задействовать конструкцию ВЫРАЗИТЬ(). Для положительных чисел необходимо вычесть 0.5, а для отрицательных чисел прибавить 0.5. Вот пример:
ВЫБОР КОГДА ВашеЧисло > 0 ТОГДА
ВЫРАЗИТЬ(ВашеЧисло — 0.5 КАК Число(15, 0))
ИНАЧЕ
ВЫРАЗИТЬ(ВашеЧисло + 0.5 КАК Число(15, 0))
Проконсультироваться
со специалистом 1С
Код 1C v 8.х
Код 1C v 8.х
Получение целой части числа в запросе?
Код 1C v 8.х
Код 1C v 8.х
Как округлить в запросе в меньшую сторону?
Код 1C v 8.х
или
Код 1C v 8.х
© 2015 - 2022 ComputerMaker.info - Все права защищены. При копирование материала с нашего сайта обязательно приложить ссылку на статью.
Privacy Overview
Читайте также: