Ошибка при выполнении арифметической операции "Переполнение при преобразовании значения" При формировании отчет получили ошибку: Ошибка при выполнении арифметической операции "Переполнение при преобразовании значения"
Путем анализа запроса отчета и изучения подобных проблем в Интерент - были найдены следующие решения:
В запросе сделать проверку на деление на ноль проверить на NULL - ЕстьNULL(ВложенныйЗапрос.Стоимость,0) Если пишет: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeriс
Похожу что у вас в запросе есть что-то вида
Код 1C v 8.х ВЫРАЗИТЬ(втИтоги.КоличествоОборот / втИтоги.ПланМП1 * 100 КАК ЧИСЛО(5, 2)) КАК ПроцентВыполнения
Проблема в том, что при выполнении получается сумма в которой больше 5 знаков
Решение: ЧИСЛО(15, 2)
Категория:
Системные Ошибки Как сформировать диаграмму с типом Круговая В этом примере показано как сформировать диаграмму с типом Круговая, которая выглядит:
Настройки
Код
Код 1C v 8.х Состояние("Формирование диаграммы продаж");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа КАК НоменклатураНоменклатурнаяГруппа,
| КОЛИЧЕСТВО(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
| СУММА(0) КАК Проц
|ИЗ
| РегистрНакопления.Продажи.Обороты(
| &ND,
| &KD,
| Запись,
| Организация = &Org
| И ДоговорКонтрагента.Менеджер В ИЕРАРХИИ (&Mened)) КАК ПродажиОбороты
|
|СГРУППИРОВАТЬ ПО
| ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа
|
|УПОРЯДОЧИТЬ ПО
| НоменклатураНоменклатурнаяГруппа
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("KD",КонПериодаР);
Запрос.УстановитьПараметр("Mened", МенеджерОПР);
Запрос.УстановитьПараметр("ND", НачПериодаР);
Запрос.УстановитьПараметр("Org", ДляОрганизацииОР);
Результат = Запрос.Выполнить();
Выборка = Результат.Выгрузить();
итог = Выборка.Итог("КоличествоОборот");
Для каждого СтрокаТЗ Из Выборка Цикл
СтрокаТЗ.Проц = Окр(СтрокаТЗ.КоличествоОборот*100/итог,2);
КонецЦикла;
ДиаграммаВП = ЭлементыФормы.ДиаграммаОР;
Для Каждого СтрТраб из Выборка Цикл
Серия=ДиаграммаВП.Серии.Добавить(?(ЗначениеЗаполнено(СтрТраб.Получить(0).Наименование), СтрТраб.Получить(0).Наименование+" - "+Строка(СтрТраб.Получить(2))+"%","Без группы"));
Попытка
ДиаграммаВП.УстановитьЗначение(1,Серия,?(СтрТраб.Получить(2)=Неопределено,0,СтрТраб.Получить(2)));
Исключение
// такого не должно быть, но на всякий случай
КонецПопытки;
КонецЦикла;
Категория:
Диаграмма Подробный пример заполнения Диаграммы данными (создание, очистка, обновление) Пример создания, очистки и обновления Диаграммы График
Код 1C v 8.х Диаграмма = ЭлементыФормы.Диаграмма;
// Очистить диаграмму, возможно ранее в нее уже выводились данные.
Диаграмма.КоличествоСерий = 0;
Диаграмма.КоличествоТочек = 0;
// Количество серий будет ограничиваться (не все значения будут показываться).
Диаграмма.МаксимумСерий = МаксимумСерий.Ограничено;
Диаграмма.МаксимумСерийКоличество = 7;
Диаграмма.ВидПодписей = ВидПодписейКДиаграмме.Процент;
Диаграмма.ОбластьЗаголовка.Текст = "Обороты номенклатуры";
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.Номенклатура,
| СУММА(ПродажиКомпанииОбороты.КоличествоОборот) КАК КоличествоОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , , ) КАК ПродажиКомпанииОбороты
|СГРУППИРОВАТЬ ПО
| ПродажиКомпанииОбороты.Номенклатура";
Результат = Запрос.Выполнить();
// Запретить обновление диаграммы на время вывода данных.
Диаграмма.Обновление = Ложь;
// Установить единственную точку.
Диаграмма.КоличествоТочек = 1;
Диаграмма.Точки[0].Текст = "Количество";
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
// Количество серий, если бы не ограничивали зависело бы от результата запроса.
КоличествоСерий = Диаграмма.Серии.Количество();
Диаграмма.КоличествоСерий = КоличествоСерий + 1;
Диаграмма.Серии[КоличествоСерий].Текст = Выборка.Номенклатура;
// Установить значение "на пересечении" точки и серии.
// Первый параметр - 0 , так как в диаграмме только одна точка.
Диаграмма.УстановитьЗначение(0, КоличествоСерий, Выборка.КоличествоОборот);
КонецЦикла;
// Обновить диаграмму.
Диаграмма.Обновление = Истина;
Категория:
Диаграмма Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric Если запрос не выполняется с такой вот руганью:
{Форма.Форма.Форма(804)}: Ошибка при вызове метода контекста (Выполнить): Ошибка выполнения запроса: Ошибка при выполнении операции над данными:Microsoft SQL Server Native Client 11.0: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric.HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1
Решение следующее (если у кого будет еще что-то прошу добавлять .
1. В запросе использую расчет процента:
Код 1C v 8.х ВЫРАЗИТЬ(втИтоги.КоличествоОборот / втИтоги.ПланМП1 * 100 КАК ЧИСЛО(5, 2)) КАК ПроцентВыполнения,
Изменив выражение с (5,2) на (15,2) запрос "взлетел":
Код 1C v 8.х ВЫРАЗИТЬ(втИтоги.КоличествоОборот / втИтоги.ПланМП1 * 100 КАК ЧИСЛО(15, 2)) КАК ПроцентВыполнения,
Получается что ошибка: "Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric " нам говорит что результат вычисления процента длиной больше чем 5.
Пример обычного кода:Реквизит1 = Тип число (5,2).РасчетПроцента = 1234,56.Реквизит1 = РасчетПроцента;Реквизит1 = 999,99.
Успехов в решении проблем.С уважением, Сергей.
Категория:
1С Бухгалтерия 2.0 Универсальный отчет в прикладных решениях фирмы 1С Как настроить Универсальный отчет?
Все настройки
универсального отчета описываются в процедуре
УстановитьНачальныеНастройки :
Код 1C v 8.х Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт
// Настройка общих параметров универсального отчета
//начальный вариант оформления цветовой схемы
УниверсальныйОтчет.ВариантОформления = СтандартноеОформление.Песок;
// Содержит название отчета, которое будет выводиться в шапке.
// Тип: Строка.
// Пример:
// УниверсальныйОтчет.мНазваниеОтчета = "Название отчета";
УниверсальныйОтчет.мНазваниеОтчета = СокрЛП(ЭтотОбъект.Метаданные().Синоним);
// Содержит признак необходимости отображения надписи и поля выбора раздела учета в форме настройки.
// Тип: Булево.
// Значение по умолчанию: Истина.
// Пример:
// УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;
УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;
// Содержит имя регистра, по метаданным которого будет выполняться заполнение настроек отчета.
// Тип: Строка.
// Пример:
// УниверсальныйОтчет.ИмяРегистра = "ТоварыНаСкладах";
УниверсальныйОтчет.ИмяРегистра = "-";
// Содержит признак необходимости вывода отрицательных значений показателей красным цветом.
// Тип: Булево.
// Значение по умолчанию: Ложь.
// Пример:
// УниверсальныйОтчет.ОтрицательноеКрасным = Истина;
УниверсальныйОтчет.ОтрицательноеКрасным = Истина;
// Содержит признак необходимости вывода в отчет общих итогов.
// Тип: Булево.
// Значение по умолчанию: Истина.
// Пример:
// УниверсальныйОтчет.ВыводитьОбщиеИтоги = Ложь;
УниверсальныйОтчет.ВыводитьОбщиеИтоги = Истина;
// Содержит признак необходимости вывода детальных записей в отчет.
// Тип: Булево.
// Значение по умолчанию: Ложь.
// Пример:
// УниверсальныйОтчет.ВыводитьДетальныеЗаписи = Истина;
УниверсальныйОтчет.ВыводитьДетальныеЗаписи = Ложь;
// Содержит признак необходимости отображения флага использования свойств и категорий в форме настройки.
// Тип: Булево.
// Значение по умолчанию: Истина.
// Пример:
// УниверсальныйОтчет.мВыбиратьИспользованиеСвойств = Ложь;
УниверсальныйОтчет.мВыбиратьИспользованиеСвойств = Истина;
// Содержит признак использования свойств и категорий при заполнении настроек отчета.
// Тип: Булево.
// Значение по умолчанию: Ложь.
// Пример:
// УниверсальныйОтчет.ИспользоватьСвойстваИКатегории = Истина;
//УниверсальныйОтчет.ИспользоватьСвойстваИКатегории = ЛОЖЬ;
// Содержит признак использования простой формы настроек отчета без группировок колонок.
// Тип: Булево.
// Значение по умолчанию: Ложь.
// Пример:
// УниверсальныйОтчет.мРежимФормыНастройкиБезГруппировокКолонок = Истина;
// Дополнительные параметры, переданные из отчета, вызвавшего расшифровку.
// Информация, передаваемая в переменной ДополнительныеПараметры, может быть использована
// для реализации специфичных для данного отчета параметрических настроек.
// Описание исходного текста запроса.
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| CRM_ПредложенияОбороты.Номенклатура КАК Номенклатура,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.Номенклатура) КАК НоменклатураПредставление,
| CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры) КАК ХарактеристикаНоменклатурыПредставление,
| CRM_ПредложенияОбороты.Контрагент КАК Контрагент,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.Контрагент) КАК КонтрагентПредставление,
| CRM_ПредложенияОбороты.ДокументПредложения КАК Документ,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.ДокументПредложения) КАК ДокументПредставление,
| CRM_ПредложенияОбороты.ДокументПредложения.Ответственный КАК Ответственный,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.ДокументПредложения.Ответственный) КАК ОтветственныйПредставление,
| CRM_ПредложенияОбороты.КоличествоОборот КАК КоличествоОборот,
| CRM_ПредложенияОбороты.СтоимостьОборот КАК СтоимостьОборот,
| 0 КАК СкидкаОборот,
| 1 КАК Количество,
| CRM_ПредложенияОбороты.СтоимостьБезСкидокОборот КАК СтоимостьБезСкидокОборот
| //ПОЛЯ_СВОЙСТВА
| //ПОЛЯ_КАТЕГОРИИ
|{ВЫБРАТЬ
| Контрагент.*,
| Номенклатура.*,
| ХарактеристикаНоменклатуры.*,
| Ответственный.*,
| Документ.*,
| КоличествоОборот,
| СтоимостьОборот,
| СкидкаОборот,
| Количество,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации
| //ПСЕВДОНИМЫ_СВОЙСТВА
| //ПСЕВДОНИМЫ_КАТЕГОРИИ
|}
|ИЗ
| РегистрНакопления.CRM_Предложения.Обороты(&ДатаНач, &ДатаКон, , ) КАК CRM_ПредложенияОбороты
|{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсточникИнформацииПриОбращении.СрезПоследних(&ДатаКон) КАК ИсточникиИнформацииПриОбращении
|ПО CRM_ПредложенияОбороты.Контрагент = ИсточникиИнформацииПриОбращении.Контрагент}
|//СОЕДИНЕНИЯ
|{ГДЕ
| CRM_ПредложенияОбороты.Контрагент.* КАК Контрагент,
| CRM_ПредложенияОбороты.Номенклатура.* КАК Номенклатура,
| CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры,
| CRM_ПредложенияОбороты.ДокументПредложения.Ответственный.* КАК Ответственный,
| CRM_ПредложенияОбороты.ДокументПредложения.* КАК Документ,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации
| //УСЛОВИЯ_СВОЙСТВА
| //УСЛОВИЯ_КАТЕГОРИИ
|}
|{УПОРЯДОЧИТЬ ПО
| Контрагент.*,
| Номенклатура.*,
| ХарактеристикаНоменклатуры.*,
| Ответственный.*,
| Документ.*,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации
| //ПСЕВДОНИМЫ_СВОЙСТВА
| //ПСЕВДОНИМЫ_КАТЕГОРИИ
|}
|
|ИТОГИ
| СУММА(КоличествоОборот),
| СУММА(СтоимостьОборот),
| СУММА(СтоимостьБезСкидокОборот - СтоимостьОборот) КАК СкидкаОборот,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ(Документ)) КАК Количество
|ПО
| ОБЩИЕ
|{ИТОГИ ПО
| Контрагент.*,
| Номенклатура.*,
| ХарактеристикаНоменклатуры.*,
| Ответственный.*,
| Документ.*,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, ДЕНЬ) КАК ПериодДень,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, НЕДЕЛЯ) КАК ПериодНеделя,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, МЕСЯЦ) КАК ПериодМесяц,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, КВАРТАЛ) КАК ПериодКвартал,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, ГОД) КАК ПериодГод
| //ПСЕВДОНИМЫ_СВОЙСТВА
| //ПСЕВДОНИМЫ_КАТЕГОРИИ
|}";
// В универсальном отчете включен флаг использования свойств и категорий.
Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда
// Добавление свойств и категорий поля запроса в таблицу полей.
// Необходимо вызывать для каждого поля запроса, предоставляющего возможность использования свойств и категорий.
// УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(<ПсевдонимТаблицы>.<Поле> , <ПсевдонимПоля>, <Представление>, <Назначение>);
УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("CRM_ПредложенияОбороты.Номенклатура" , "Номенклатура", "Номенклатура", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура);
УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры" , "ХарактеристикаНоменклатуры", "Характеристика номенклатуры", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура);
УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("CRM_ПредложенияОбороты.Контрагент" , "Контрагент", "Контрагент", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура);
УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("CRM_ПредложенияОбороты.ДокументПредложения" , "Документ", "Коммерческое предложение", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Документ_CRM_КоммерческоеПредложение);
// Добавление свойств и категорий в исходный текст запроса.
УниверсальныйОтчет.ДобавитьВТекстЗапросаСвойстваИКатегории(ТекстЗапроса);
КонецЕсли;
// Инициализация текста запроса построителя отчета
УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;
// Представления полей отчета.
// Необходимо вызывать для каждого поля запроса.
// УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить(<ИмяПоля>, <ПредставлениеПоля>);
УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ХарактеристикаНоменклатуры", "Характеристика номенклатуры");
УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Документ", "Коммерческое предложение");
УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ИсточникИнформации", "Источник информации при обращении покупателя");
// Добавление показателей
// Необходимо вызывать для каждого добавляемого показателя.
// УниверсальныйОтчет.ДобавитьПоказатель(<ИмяПоказателя>, <ПредставлениеПоказателя>, <ВключенПоУмолчанию>, <Формат>, <ИмяГруппы>, <ПредставлениеГруппы>);
//УниверсальныйОтчет.ДобавитьПоказатель("Задача", "Задача", Истина,);
УниверсальныйОтчет.ДобавитьПоказатель("Количество", "Количество документов", Истина, "ЧЦ = 15 ; ЧДЦ = 3");
УниверсальныйОтчет.ДобавитьПоказатель("КоличествоОборот", "Количество номенклатуры", Истина, "ЧЦ = 15 ; ЧДЦ = 3",,);
УниверсальныйОтчет.ДобавитьПоказатель("СтоимостьОборот", "Сумма", Истина, "ЧЦ = 15 ; ЧДЦ = 2");
УниверсальныйОтчет.ДобавитьПоказатель("СкидкаОборот", "Скидка", Истина, "ЧЦ = 15 ; ЧДЦ = 2",,);
// Добавление предопределенных группировок строк отчета.
// Необходимо вызывать для каждой добавляемой группировки строки.
// УниверсальныйОтчет.ДобавитьИзмерениеСтроки(<ПутьКДанным>);
УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Контрагент");
УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Номенклатура");
// Добавление предопределенных группировок колонок отчета.
// Необходимо вызывать для каждой добавляемой группировки колонки.
// УниверсальныйОтчет.ДобавитьИзмерениеКолонки(<ПутьКДанным>);
// Добавление предопределенных отборов отчета.
// Необходимо вызывать для каждого добавляемого отбора.
// УниверсальныйОтчет.ДобавитьОтбор(<ПутьКДанным>);
УниверсальныйОтчет.ДобавитьОтбор("Контрагент");
УниверсальныйОтчет.ДобавитьОтбор("Номенклатура");
УниверсальныйОтчет.ДобавитьОтбор("Ответственный");
УниверсальныйОтчет.ДобавитьОтбор("Документ");
// Добавление предопределенных полей порядка отчета.
// Необходимо вызывать для каждого добавляемого поля порядка.
// УниверсальныйОтчет.ДобавитьПорядок(<ПутьКДанным>);
// Установка связи подчиненных и родительских полей
// УниверсальныйОтчет.УстановитьСвязьПолей(<ПутьКДанным>, <ПутьКДаннымРодитель>);
//УниверсальныйОтчет.УстановитьСвязьПолей("ТочкаМаршрута","Задача");
// Установка связи полей и измерений
// УниверсальныйОтчет.УстановитьСвязьПоляИИзмерения(<ИмяПоля>, <ИмяИзмерения>);
// Установка представлений полей
УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);
// Установка типов значений свойств в отборах отчета
УниверсальныйОтчет.УстановитьТипыЗначенийСвойствДляОтбора();
// Заполнение начальных настроек универсального отчета
УниверсальныйОтчет.УстановитьНачальныеНастройки(Ложь);
// Добавление предопределенных отборов отчета.
// Необходимо вызывать для каждого добавляемого отбора.
// УниверсальныйОтчет.ДобавитьОтбор(<ПутьКДанным>);
УниверсальныйОтчет.ДобавитьОтбор("Контрагент");
УниверсальныйОтчет.ДобавитьОтбор("Номенклатура");
УниверсальныйОтчет.ДобавитьОтбор("Ответственный");
УниверсальныйОтчет.ДобавитьОтбор("Документ");
// Добавление дополнительных полей
// Необходимо вызывать для каждого добавляемого дополнительного поля.
// УниверсальныйОтчет.ДобавитьДополнительноеПоле(<ПутьКДанным>, <Размещение>, <Положение>);
УниверсальныйОтчет.мСтруктураФорматаПолей.Вставить("ДатаВыполнения", "ДЛФ=DDT");
УниверсальныйОтчет.мСтруктураФорматаПолей.Вставить("ДатаФактическогоВыполнения", "ДЛФ=DDT");
УниверсальныйОтчет.мМинимальнаяШиринаКолонкиПоказатель = 10;
УниверсальныйОтчет.мМаксимальнаяШиринаКолонки = 80;
КонецПроцедуры // УстановитьНачальныеНастройки()
Как настроить условное оформление в Универсальном отчете?
Выравнивание значений влево :
Код 1C v 8.х ЭлементОформления = УниверсальныйОтчет.ПостроительОтчета.УсловноеОформление.Добавить("Номенклатура", "Номенклатура");
ЭлементОформления.Область.Добавить("Номенклатура", "Номенклатура", ТипОбластиОформления.Поле);
ЭлементОформления.Оформление.ГоризонтальноеПоложение.Значение = ГоризонтальноеПоложение.Лево;
ЭлементОформления.Оформление.ГоризонтальноеПоложение.Использование = Истина;
ЭлементОформления.Использование = Истина;
ЭлементОформления = УниверсальныйОтчет.ПостроительОтчета.УсловноеОформление.Добавить("ХарактеристикаНоменклатуры", "ХарактеристикаНоменклатуры");
ЭлементОформления.Область.Добавить("ХарактеристикаНоменклатуры", "ХарактеристикаНоменклатуры", ТипОбластиОформления.Поле);
ЭлементОформления.Оформление.ГоризонтальноеПоложение.Значение = ГоризонтальноеПоложение.Лево;
ЭлементОформления.Оформление.ГоризонтальноеПоложение.Использование = Истина;
ЭлементОформления.Использование = Истина;
УниверсальныйОтчет.мМинимальнаяШиринаКолонкиПоказатель = 7;
УниверсальныйОтчет.мМаксимальнаяШиринаКолонки = 50;
Изменение цвета текста и т.д.
Код 1C v 8.х // Условное оформление поля "Состояние"
ЭлементОформления = УниверсальныйОтчет.ПостроительОтчета.УсловноеОформление.Добавить("ТребуетсяЗаказать", "Требуется заказать");
ЭлементОформления.Область.Добавить("Состояние", "Состояние", ТипОбластиОформления.Поле);
ЭлементОтбора = ЭлементОформления.Отбор.Добавить("Состояние");
ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
ЭлементОтбора.Значение = 0;
ЭлементОтбора.Использование = Истина;
ЭлементОформления.Оформление.ЦветТекста.Значение = WebЦвета.Красный;
ЭлементОформления.Оформление.ЦветТекста.Использование = Истина;
ЭлементОформления.Оформление.Текст.Значение = "Требуется заказать";
ЭлементОформления.Оформление.Текст.Использование = Истина;
ЭлементОформления.Использование = Истина;
ЭлементОформления = УниверсальныйОтчет.ПостроительОтчета.УсловноеОформление.Добавить("РекомендуетсяЗаказать", "Рекомендуется заказать");
ЭлементОформления.Область.Добавить("Состояние", "Состояние", ТипОбластиОформления.Поле);
ЭлементОтбора = ЭлементОформления.Отбор.Добавить("Состояние");
ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
ЭлементОтбора.Значение = 1;
ЭлементОтбора.Использование = Истина;
ЭлементОформления.Оформление.ЦветТекста.Значение = WebЦвета.Коричневый;
ЭлементОформления.Оформление.ЦветТекста.Использование = Истина;
ЭлементОформления.Оформление.Текст.Значение = "Рекомендуется заказать";
ЭлементОформления.Оформление.Текст.Использование = Истина;
ЭлементОформления.Использование = Истина;
ЭлементОформления = УниверсальныйОтчет.ПостроительОтчета.УсловноеОформление.Добавить("НеТребуетсяЗаказывать", "Не требуется заказывать");
ЭлементОформления.Область.Добавить("Состояние", "Состояние", ТипОбластиОформления.Поле);
ЭлементОтбора = ЭлементОформления.Отбор.Добавить("Состояние");
ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
ЭлементОтбора.Значение = 2;
ЭлементОтбора.Использование = Истина;
ЭлементОформления.Оформление.ЦветТекста.Значение = WebЦвета.Зеленый;
ЭлементОформления.Оформление.ЦветТекста.Использование = Истина;
ЭлементОформления.Оформление.Текст.Значение = "Не требуется заказывать";
ЭлементОформления.Оформление.Текст.Использование = Истина;
ЭлементОформления.Использование = Истина;
ЭлементОформления = УниверсальныйОтчет.ПостроительОтчета.УсловноеОформление.Добавить("ЗонаПоСумме", "Зона По Сумме");
ЭлементОформления.Область.Добавить("ЗонаПоСумме", "ЗонаПоСумме", ТипОбластиОформления.Поле);
ЭлементОтбора = ЭлементОформления.Отбор.Добавить("ЗонаПоСумме");
ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
ЭлементОтбора.Значение = "крас";
ЭлементОтбора.Использование = Истина;
ЭлементОформления.Оформление.ЦветФона.Значение = WebЦвета.Красный;
ЭлементОформления.Оформление.ЦветФона.Использование = Истина;
ЭлементОформления.Оформление.Текст.Значение = "";
ЭлементОформления.Оформление.Текст.Использование = Истина;
ЭлементОформления.Использование = Истина;
ЭлементОформления = УниверсальныйОтчет.ПостроительОтчета.УсловноеОформление.Добавить("ЗонаПоСумме", "Зона По Сумме");
ЭлементОформления.Область.Добавить("ЗонаПоСумме", "ЗонаПоСумме", ТипОбластиОформления.Поле);
ЭлементОтбора = ЭлементОформления.Отбор.Добавить("ЗонаПоСумме");
ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
ЭлементОтбора.Значение = "зелн";
ЭлементОтбора.Использование = Истина;
ЭлементОформления.Оформление.ЦветТекста.Значение = WebЦвета.Зеленый;
ЭлементОформления.Оформление.ЦветТекста.Использование = Истина;
ЭлементОформления.Оформление.Шрифт.Значение = Новый Шрифт(,,Истина);
ЭлементОформления.Оформление.Шрифт.Использование = Истина;
ЭлементОформления.Оформление.Текст.Значение = "|||||||||||||||||";
ЭлементОформления.Оформление.Текст.Использование = Истина;
ЭлементОформления.Использование = Истина;
Для типа «Дата»:
Код 1C v 8.х ЭлементОформления = УниверсальныйОтчет.ПостроительОтчета.УсловноеОформление.Добавить("ДатаЗаписи", "Дата записи");
ЭлементОформления.Область.Добавить("ДатаЗаписи", "Дата записи", ТипОбластиОформления.Поле);
ЭлементОформления.Оформление.Формат.Значение = "ДФ=dd.MM.yyyy";
ЭлементОформления.Оформление.Формат.Использование = Истина;
ЭлементОформления.Использование = Истина;
Для типа «Булево»:
Код 1C v 8.х ЭлементОформления = УниверсальныйОтчет.ПостроительОтчета.УсловноеОформление.Добавить("Печать", "Печать");
ЭлементОформления.Область.Добавить("Печать", "Печать", ТипОбластиОформления.Поле);
ЭлементОформления.Оформление.ГоризонтальноеПоложение.Значение = ГоризонтальноеПоложение.Центр;
ЭлементОформления.Оформление.Формат.Значение = «БЛ=Нет; БИ=Напечатан»;
ЭлементОформления.Оформление.ГоризонтальноеПоложение.Использование = Истина;
ЭлементОформления.Использование = Истина;
Категория:
Прочие вопросы Округление в запросе Код 1C v 8.х "ВЫБРАТЬ
| ПродажиОбороты.Номенклатура,
| ВЫРАЗИТЬ(ПродажиОбороты.СтоимостьОборот/ПродажиОбороты.КоличествоОборот КАК ЧИСЛО(15,2))
| КАК СредняяЦенаПродажи
| ИЗ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон)
| КАК ПродажиОбороты"
Код 1C v 8.х "ВЫРАЗИТЬ(ЧислоВыбр/10 КАК ЧИСЛО(10, 0)) * 10 КАК ОкругленноеДоДесятиЧисло"
Получение целой части числа в запросе?
Код 1C v 8.х "Выразить(ЧисловоеПоле-0.5 Как Число(10))"
Код 1C v 8.х "ВЫБОР КОГДА ЧисловоеПоле >= 0 ТОГДА
| ВЫРАЗИТЬ(ЧисловоеПоле - 0.5 КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВЫРАЗИТЬ(ЧисловоеПоле + 0.5 КАК ЧИСЛО(10, 0))
| КОНЕЦ"
Как округлить в запросе в меньшую сторону?
Код 1C v 8.х Запрос = Новый Запрос("ВЫБРАТЬ РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0), ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0), СЕКУНДА, ЧислоСДробнойЧастью), СЕКУНДА) КАК ЧислоБезДробнойЧасти");
или
Код 1C v 8.х "ВЫРАЗИТЬ(Ч + 0.5 КАК ЧИСЛО(15)) - 1"
Категория:
Запросы Использование СГРУППИРОВАТЬ ПО и ИТОГИ, Виртуальные таблицы Виртуальная таблица
Виртуальная таблица применяется для обращения к итогам и автоматической свертки по нужным полям.
Например:
можно получить все итоги регистра (итоги по всем измерениям и ресурсам),
Код 1C v 8.х Выбрать * Из РегистрНакопления.Продажи.Обороты
итоги по контрагенту и ресурсу Сумма
Код 1C v 8.х Выбрать Контрагент,СуммаОборот Из РегистрНакопления.Продажи.Обороты
итоги в разрезе контрагентов и товаров по двум ресурсам
Код 1C v 8.х Выбрать Контрагент,Номенклатура,СуммаОборот,СуммаУпрОборот Из РегистрНакопления.Продажи.Обороты
Если другой информации извлекать не нужно и не нужно использовать сводные таблицы или сводные диаграммы, то в запросе НЕ НУЖНО использовать
ИТОГИ и СГРУППИРОВАТЬ ПО . Это приведет только к увеличению времени выполнения запроса и пересылки результата запроса по сети.
Сгруппировать по
Конструкция - сгруппировать по аналогично методу Свернуть для таблицы значений и слову Группировка в языке запросов 7.7. При применении этой конструкции в результате запроса остаются только группировочные записи. Это ключевое слово обычно применяется совместно с агрегатными функциями в списке полей выборки.
Код 1C v 8.х Выбрать Контрагент,Сумма(Сумма), Максимум(Сумма), Минимум(Сумма)
ИЗ РегистрНакопления.Продажи.Обороты(&ДатаС,&ДатаПо)
Сгруппировать По Контрагент
Код 1C v 8.х Итоги . . . по
Итоги применяются для построения отчетов, сводной таблицы или сводной диаграммы. Для двух последних использование ИТОГОВ обязательно!
При применении этой конструкции в результате запроса остаются детальные записи И итоговые записи (напоминает Сгруппировать По). При этом агрегатные функции перечисляются в предложении ИТОГИ, а не в списке полей ВЫБРАТЬ.
Код 1C v 8.х ВЫБРАТЬ
Номенклатура,
ПодразделениеКомпании,
СуммаПродажиОборот,
КоличествоОборот
ИЗ
РегистрНакопления.ПродажиКомпании.Обороты
ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот) ПО
ОБЩИЕ,
Номенклатура,
ПодразделениеКомпании
Категория:
Запросы Создание сводной таблицы В специальном окне «Поля сводной таблицы», которое отображается при активизации сводной таблицы, можно включать и выключать измерения и ресурсы. Если оно не отображается, то щелкните правой кнопкой на ячейке сводной таблицы и в контекстном меню выберите пункт «Отображать поля».
У табличного документа есть свойство-коллекция ВстроенныеТаблицы, которое позволяет обращаться к сводным таблицам, расположенным на нем. Через эту коллекцию можно добавлять и удалять сводные таблицы при выполнении программы.
Самое главное свойство сводной таблицы — это ИсточникДанных, которое имеет тип РезультатЗапроса или ПостроительОтчета (см. ниже). Это свойство определяет, откуда сводная таблица будет черпать данные для отображения. При использовании результата запроса его итоги становятся ресурсами (отображаются в области данных), а группировочные поля, по которым они подсчитываются, становятся измерениями.
Следующий пример выбирает данные из регистра накопления Продажи, подсчитывает общее количество и сумму по каждому контрагенту (с учетом иерархии), номенклатуре (с учетом иерархии), периодам и странам. Результат запроса помещается в сводную таблицу для анализа:
Код 1C v 8.х Запрос = Новый Запрос("
| ВЫБРАТЬ
| ПродажиОбороты.Контрагент КАК Контрагент,
| ПродажиОбороты.Номенклатура КАК Номенклатура,
| ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
| ПродажиОбороты.СуммаОборот КАК СуммаОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты(ПериодС, ПериодПо,
| Месяц,,(Контрагент, Номенклатура))
|КАК ПродажиОбороты
|ИТОГИ СУММА(КоличествоОборот) , СУММА(СуммаОборот) ПО
| Контрагент ИЕРАРХИЯ,
| Номенклатура ИЕРАРХИЯ,
| ПродажиОбороты.Период,
| ПродажиОбороты.Номенклатура.СтранаПроисхождения КАК Страна
| АВТОУПОРЯДОЧИВАНИЕ") ;
Запрос.УстановитьПараметр("ПериодС", Периоде);
Запрос.УстановитьПараметр("ПериодПо", КонецДня(ПериодПо));
Результат = Запрос.Выполнить();
ПолеТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
СводнаяТаблица = ПолеТабДок.ВстроенныеТаблицы.СводнаяТаблица!;
СводнаяТаблица.ИсточникДанных = Результат;
СводнаяТаблица.ОтображатьПоля = Истина;
Если СводнаяТаблица.Колонки.Количество() = 0 И
СводнаяТаблица.Строки.Количество() = 0 И
СводнаяТаблица.Данные.Количество() = 0 Тогда
СводнаяТаблица.Обновление = Ложь;
// Зададим начальное расположение измерений на осях
СводнаяТаблица.Колонки.Добавить("Контрагент");
СводнаяТаблица.Строки.Добавить("Номенклатура");
СводнаяТаблица.Данные.Добавить("КоличествоОборот");
СводнаяТаблица.Данные.Добавить("СуммаОборот");
СводнаяТаблица.Обновление = Истина;
КонецЕсли;
Категория:
Табличный документ Конструктор схемы компоновки данных - Закладка Набор данных - Запрос - Автозаполнение У набора данных - запрос в схеме компоновки данных есть свойство АвтоЗаполнение. В данной статье мы рассмотрим, что происходит, если данное свойство установлено.
Свойство
АвтоЗаполнение указывает, что система должна самостоятельно сделать доступными поля, описанные в запросе.
При автоматическом заполнении:
* Поля списка выборки запроса верхнего уровня становятся доступными для отбора, порядка, выбора, группировки. Заметим, что доступность поля будет определяться по его типу. Например, поле неограниченной длины не может быть использовано в качестве поля группировки.
* Поля виртуальных таблиц, на которые можно наложить условия в параметрах этих таблиц становятся доступными для отбора.
* Параметры виртуальных таблиц становятся доступными параметрами.
Разберем пример, будем рассматривать на регистре РегистрНакопления.УчетНоменклатуры у которого есть два измерения: Номенклатура и Склад и один ресурс: Количество.
Рассмотрим, какие поля и параметры будут доступны при автоматическом заполнении для следующего запроса:
Код 1C v 8.х ВЫБРАТЬ
УчетНоменклатурыОбороты.Номенклатура,
УчетНоменклатурыОбороты.КоличествоОборот,
УчетНоменклатурыОбороты.КоличествоПриход,
УчетНоменклатурыОбороты.КоличествоРасход
ИЗ
РегистрНакопления.УчетНоменклатуры.Обороты КАК УчетНоменклатурыОбороты
Поля Номенклатура, КоличествоОборот, КоличествоПриход, КоличествоРасход будут доступны для отбора, порядка, группировки, выбора.
Поле Склад, хотя явно не присутствует в запросе, будет доступно для отбора, т.к. на него можно наложить отбор в параметрах виртуальной таблицы.
В доступные параметры из данного запроса попадут параметры НачалоПериода и КонецПериода, т.к. их можно указывать в виртуальной таблице.
В случае если в запросе в виртуальной таблице указаны имена параметров, то доступны будут параметры именно с указанными именами. Например, в следующем запросе, доступными будут параметры Начало и Конец вместо НачалоПериода и КонецПериода:
Код 1C v 8.х ВЫБРАТЬ
УчетНоменклатурыОбороты.Номенклатура,
УчетНоменклатурыОбороты.КоличествоОборот,
УчетНоменклатурыОбороты.КоличествоПриход,
УчетНоменклатурыОбороты.КоличествоРасход
ИЗ
РегистрНакопления.УчетНоменклатуры.Обороты({&Начало}, {&Конец}) КАК УчетНоменклатурыОбороты
Категория:
Схема Компоновки Данных Как в запросе получить срез последних на Каждую Дату Данная задача может быть решена как с использованием вложенных запросов, так и с помощью. временных таблиц. Попробуем решить задачу, используя временные таблицы. Сначала приведем весь текст запроса, а потом кратко разберем по частям принцип его работы.
Текст запроса:
Код 1C v 8.х ВЫБРАТЬ
ПродажиОбороты.Период КАК Дата,
ПродажиОбороты.Контрагент КАК Контрагент,
ПродажиОбороты.Номенклатура КАК Номенклатура,
СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество,
СУММА(ПродажиОбороты.СтоимостьОборот) КАК Стоимость
ПОМЕСТИТЬ втБезЦены
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ПродажиОбороты
СГРУППИРОВАТЬ ПО
ПродажиОбороты.Период,
ПродажиОбороты.Контрагент,
ПродажиОбороты.Номенклатура
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Дата,
Контрагент
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
втБезЦены.Дата КАК Дата,
втБезЦены.Контрагент КАК Контрагент,
втБезЦены.Номенклатура КАК Номенклатура,
втБезЦены.Количество,
втБезЦены.Стоимость,
МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
ПОМЕСТИТЬ втМаксПериод
ИЗ
втБезЦены КАК втБезЦены
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО втБезЦены.Номенклатура = ЦеныНоменклатуры.Номенклатура
И втБезЦены.Дата >= ЦеныНоменклатуры.Период
СГРУППИРОВАТЬ ПО
втБезЦены.Дата,
втБезЦены.Контрагент,
втБезЦены.Номенклатура,
втБезЦены.Количество,
втБезЦены.Стоимость
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Дата,
Контрагент,
Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
втМаксПериод.Дата,
втМаксПериод.Контрагент,
втМаксПериод.Номенклатура,
втМаксПериод.Количество,
втМаксПериод.Стоимость,
ЦеныНоменклатуры.Цена
ИЗ
втМаксПериод КАК втМаксПериод
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО втМаксПериод.Номенклатура = ЦеныНоменклатуры.Номенклатура
И втМаксПериод.Период = ЦеныНоменклатуры.Период
ГДЕ
ЦеныНоменклатуры.ТипЦен = &ТипЦен
АВТОУПОРЯДОЧИВАНИЕ
Данный пакетный запрос содержит три подзапроса. Рассмотрим их подробнее.
Первый запрос пакета группирует данные по периоду, контрагенту и номенклатуре и помещает их во временную таблицу втБезЦены. Далее мы будем соединять эту таблицу с таблицей цен номенклатуры и получим небольшой выигрыш в том, что соединять будем уже сгруппированные данные.
Во втором подзапросе мы соединяем временную таблицу с регистром сведений «ЦеныНоменклатуры» при этом из регистра сведений мы выбираем МАКСИМАЛЬНУЮ дату из меньших или равных дат. Результат этого подзапроса также помещаем во временную таблицу (втМаксПериод). Посмотрим, какие данные попадают в эту таблицу:
Рис. 8 Временная таблица втМаксПериод
В последнем запросе пакета, мы еще раз соединяем временную таблицу с таблицей цен номенклатуры. На этот мы соединяем таблице по номенклатуре и периоду.
Итоговый результат запроса:
То же самое средсвами СКД Категория:
Запросы Как получить Срез Последних на Каждую Дату С задачей получения среза последних на каждую дату рано или поздно сталкиваются все. Безусловно, это задача достаточно просто решается запросом с соединением по максимальной дате из меньших или равных дат. Но эту же задачу можно решить и с помощью компоновки данных. Не будем рассуждать о том, какой из способов более производителен, все может зависеть от конкретной задачи.
Первый набор данных:
В качестве примера, создадим отчет по продажам, в котором отдельной колонкой будем выводить цену из прайса на дату продажи.
Создадим набор данных-запрос «ПродажиОбороты»:
Код 1C v 8.х ВЫБРАТЬ
ПродажиОбороты.Период КАК Дата,
ПродажиОбороты.Контрагент КАК Контрагент,
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК Количество,
ПродажиОбороты.СтоимостьОборот КАК Стоимость
{ВЫБРАТЬ
Дата,
Контрагент.*,
Номенклатура.*,
Количество,
Стоимость}
ИЗ
РегистрНакопления.Продажи.Обороты({(&НачалоПериода)},
{(&КонецПериода)}, День, ) КАК ПродажиОбороты
{ГДЕ
ПродажиОбороты.Период,
ПродажиОбороты.Контрагент.*,
ПродажиОбороты.Номенклатура.*,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СтоимостьОборот}
Рис. 1 Вкладка ресурсы набора данных ПродажиОбороты
Рис. 2 Настройки отчета
Сейчас наш отчет будет иметь следующий вид:
Рис. 3 Формирование отчета с одним набором данных
Теперь необходимо добавить в отчет колонку «Цена по прайсу», которая будет подтягиваться из регистра сведений «Цены номенклатуры» на дату продажи.
Второй набор данных:
Добавим второй набор данных-запрос «Цены», цены будем брать для фиксированного типа цен:
Код 1C v 8.х ВЫБРАТЬ
&Дата КАК Дата,
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
{ВЫБРАТЬ
Дата,
Номенклатура.*,
Цена}
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
&Дата,
Номенклатура = &Номенклатура
И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
{ГДЕ
(&Дата),
ЦеныНоменклатурыСрезПоследних.Номенклатура.*,
ЦеныНоменклатурыСрезПоследних.Цена}
В данном наборе данных три параметра: Дата, Номенклатура и тип цен. Из низ самые интересные Дата и Номенклатура. Они будут использованы при соединении наборов данных, причем параметр данных присутствует как в параметрах виртуальной таблицы, так и в выбранных полях.
Соединения наборов:
Приступим к основной «фишке» данного метода – соединениям наборов:
Рис. 4 Соединение наборов данных
Здесь самое основное правильно настроить параметры. Если указан параметр,то СКД передает в приемник связи параметры, указанные в соединении. Значениями этих параметров будут значения соответствующих полей источника связи.
Далее добавим поле цена в ресурсы и в выбранные поля.
Рис. 5 Вкладка ресурсы
Рис. 6 Выбранные поля
Результат:
Теперь можно формировать отчет. Проверим правильность работы отчета на примере «Дивана для отдыха».
Рис. 7 Итоговый отчет
Первоисточник
Как получить Срез Последних значений на Каждую Дату
То же самое простым запросом Категория:
Схема Компоновки Данных Получение итогов регистра накопления по иерархии элементов справочника Для получения итогов по иерархии в запросе необходимо в предложении ИТОГИ ПО указать ключевое слово ИЕРАРХИЯ после указания поля, по которому будет рассчитываться итоги. Пример отчета "Обороты номенклатуры" с получением итогов по иерархии:
Код 1C v 8.х ВЫБРАТЬ
УчетНоменклатурыОбороты.Номенклатура КАК Номенклатура,
УчетНоменклатурыОбороты.Номенклатура.Представление,
УчетНоменклатурыОбороты.КоличествоОборот КАК КоличествоОборот
ИЗ
РегистрНакопления.УчетНоменклатуры.Обороты КАК УчетНоменклатурыОбороты
ИТОГИ СУММА(КоличествоОборот) ПО
Номенклатура ИЕРАРХИЯ
В результате данного запроса будут рассчитаны итоги не только для каждой номенклатуры, но и для групп, к которым принадлежит та или иная номенклатура.
В случае, когда не нужны итоги по элементам, а нужны итоги только по группам, нам необходимо использовать в итогах конструкцию ТОЛЬКО ИЕРАРХИЯ. Пример:
Код 1C v 8.х
ВЫБРАТЬ
УчетНоменклатурыОбороты.Номенклатура КАК Номенклатура,
УчетНоменклатурыОбороты.Номенклатура.Представление,
УчетНоменклатурыОбороты.КоличествоОборот КАК КоличествоОборот
ИЗ
РегистрНакопления.УчетНоменклатуры.Обороты КАК УчетНоменклатурыОбороты
ИТОГИ СУММА(КоличествоОборот) ПО
Номенклатура ТОЛЬКО ИЕРАРХИЯ
В результате данного запроса будут итоговые записи только для групп номенклатуры.
Категория:
Регистры накопления Использование упорядочивания во вложенных запросах Для того чтобы во вложенном запросе было возможно упорядочивание, необходимо, чтобы во вложенном запросе осуществлялось ограничение по количеству получаемых записей. Т.е, вложенный запрос может содержать упорядочивание только в том случае, если он также содержит конструкцию ПЕРВЫЕ.
В качестве примера рассмотрим запрос, который получает объем продаж по пяти самым дорогим товарам. Запрос будет выглядеть следующим образом:
Код 1C v 8.х ВЫБРАТЬ
ВложенныйЗапрос.Ссылка,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СуммаОборот
ИЗ
(ВЫБРАТЬ ПЕРВЫЕ 5
Номенклатура.Ссылка КАК Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
УПОРЯДОЧИТЬ ПО
Номенклатура.ЗакупочнаяЦена УБЫВ) КАК ВложенныйЗапрос
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(,,,
Номенклатура В
(ВЫБРАТЬ ПЕРВЫЕ 5
Номенклатура.Ссылка КАК Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
УПОРЯДОЧИТЬ ПО
Номенклатура.ЗакупочнаяЦена УБЫВ)) КАК ПродажиОбороты
ПО ВложенныйЗапрос.Ссылка = ПродажиОбороты.Номенклатура
В данном запросе вложенный запрос получает пять товаров с самым большим значением поля "ЗакупочнаяЦена", во внешнем запросе полученные товары связываются с регистром продаж, из которого получается информация о продажах. Для ограничения расчета оборотов, в условие таблицы "РегистрНакопления.Продажи.Обороты" также передается список самых дорогих товаров.
Категория:
Запросы Дополнение результата запроса Датами в Установленном ПЕРИОДЕ Иногда возникает необходимость вывести в отчет информацию таким образом, чтобы некоторые итоговые значения были рассчитаны на каждую дату в заданном интервале с указанной периодичностью. Например, требуется получить обороты по неделям вне зависимости от того, были ли обороты в конкретную неделю или нет. Для решения подобной задачи в языке запросов предусмотрена конструкция ПЕРИОДАМИ. Данная конструкция указывается в предложении ИТОГИ после поля "Период". После ключевого слова ПЕРИОДАМИ в скобках указывается вид периода (одно из Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Год, Декада, Полугодие), начальная и конечные даты интересуемого периода. В случае если начальные и конечные даты не указаны, будут использованы первая и последняя даты, участвующие в результате.
Пример:
Код 1C v 8.х ВЫБРАТЬ
УчетНоменклатурыОбороты.Период КАК Период,
УчетНоменклатурыОбороты.КоличествоОборот КАК КоличествоОборот
ИЗ
РегистрНакопления.УчетНоменклатуры.Обороты(, , Неделя, ) КАК УчетНоменклатурыОбороты
УПОРЯДОЧИТЬ ПО
Период
ИТОГИ СУММА(КоличествоОборот) ПО
Период ПЕРИОДАМИ(НЕДЕЛЯ,,)
Результат данного запроса будет дополнен записями на даты начала каждой недели.
Заметим, что так как для дополненных периодов в результате запроса отсутствуют детальные записи, то дополненные записи будут получаться из выборки только в том случае, если при обходе выборки будут получаться все периоды, участвующие в запросе, что достигается установкой третьего параметра функции "Выбрать" результата запроса.
Пример:
Код 1C v 8.х ВыборкаПериод = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "ВСЕ");
Пока ВыборкаПериод.Следующий() Цикл
ОбластьПериод.Параметры.Заполнить(ВыборкаПериод);
ТабДок.Вывести(ОбластьПериод, ВыборкаПериод.Уровень());
КонецЦикла;
Категория:
Запросы Вывод результата запроса в сводную диаграмму Код 1C v 8.х Запрос = Новый Запрос( "ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
| ТоварыНаСкладахОстаткиИОбороты.Склад.Представление,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот) КАК КоличествоОборот,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстаткиИОбороты.Склад,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Склад.Представление,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление
|ИТОГИ СУММА(КоличествоПриход), СУММА(КоличествоОборот), СУММА(КоличествоРасход) ПО
| ОБЩИЕ,
| Номенклатура ИЕРАРХИЯ,
| Склад ИЕРАРХИЯ");
Диаграмма = ЭлементыФормы.СводнаяДиаграмма1;
Диаграмма.ОбластьЗаголовка.Текст = "Приход товаров";
Диаграмма.ИсточникДанных = Запрос.Выполнить();
Диаграмма.Серии.Добавить("Номенклатура");
Диаграмма.Точки.Добавить("Склад");
Диаграмма.Ресурсы.Добавить("КоличествоПриход");
Категория:
Диаграмма