Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Заготовки для 1C:FAQ > Вопросы-ответы№4


Автор: Director 24.09.05, 05:33
Subj

Автор: Jureth 03.10.05, 02:35
Интерфейсы, стили
Как задать различные стили 1С:Предприятия для различных категорий пользователей?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ОсновнойИнтерфейс = ПользователиИнформационнойБазы.ТекущийПользователь().ОсновнойИнтерфейс.Имя;
    Если ОсновнойИнтерфейс = "ИнтерфейсКассира" Тогда
        ГлавныйСтиль = БиблиотекаСтилей.СтильКассира;
    ИначеЕсли ОсновнойИнтерфейс = "Планирование" Тогда
        ГлавныйСтиль = БиблиотекаСтилей.СтильПланирования;
    Иначе
        ГлавныйСтиль = БиблиотекаСтилей.Основной;
    КонецЕсли;

Автор: Jureth 03.10.05, 02:37
Есть список имен интерфейсов с пометками. Как сделать помеченные интерфейсы видимыми?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    СтрокаИменИнтерфейсов = "";
    Для Каждого ИмяИнтерфейса из СписокИнтерфесов Цикл
            Если ИмяИнтерфейса.Пометка Тогда
                   СтрокаИменИнтерфейсов = СтрокаИменИнтерфейсов + ИмяИнтерфейса + ",";
            КонецЕсли;
    КонецЦикла;
    ГлавныйИнтерфейс.ПереключитьИнтерфейс(СтрокаИменИнтерфейсов);

Автор: Jureth 03.10.05, 02:39
Как из формы обработки отключить глобальный обработчик ожиданий?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Процедура ПриНачалеРаботыСистемы()
            ПодключитьОбработчикОжидания("ПроверкаОпроса", 60);
    КонецПроцедуры
     
    Процедура ОтказОтОпроса() Экспорт
            ОтключитьОбработчикОжидания("ПроверкаОпроса");
    КонецПроцедуры
     
    ОтказОтОпроса();

Автор: Jureth 03.10.05, 02:41
Запросы, отчеты

Как получить данные из табличной части документов?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ РАЗЛИЧНЫЕ
            РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
    ИЗ
            Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары

Автор: Jureth 03.10.05, 02:54
Как получить данные из табличной части документов и представить их в иерархическом виде?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ РАЗЛИЧНЫЕ
            РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
    ИЗ
            Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ИТОГИ ПО
            Номенклатура ТОЛЬКО ИЕРАРХИЯ

Автор: Jureth 03.10.05, 02:55
Как подсчитать количество одинаковых элементов в выбираемых данных?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
        СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество
    ИЗ
        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    СГРУППИРОВАТЬ ПО
        РеализацияТоваровУслугТовары.Номенклатура

Автор: Jureth 03.10.05, 02:56
Как применять условия для отбора по значениям полей, вычисленных как результат агрегатной функции?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
        СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество
    ИЗ
        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    СГРУППИРОВАТЬ ПО
        РеализацияТоваровУслугТовары.Номенклатура
    ИМЕЮЩИЕ
        СУММА(РеализацияТоваровУслугТовары.Количество) > 10

Автор: Jureth 03.10.05, 02:57
Как ограничить выборку из виртуальной таблицы?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ПродажиОбороты.Номенклатура КАК Номенклатура
    ИЗ
        РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК ПродажиОбороты

Автор: Jureth 03.10.05, 02:58
Как просуммировать данные по одинаковым значениям одного из полей выборки?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ПродажиОбороты.Подразделение КАК Подразделение,
        ПродажиОбороты.Номенклатура КАК Номенклатура,
        ПродажиОбороты.КоличествоОборот,
        ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
    ИЗ
        РегистрНакопления.Продажи.Обороты((&ДатаНач, &ДатаКон) КАК ПродажиОбороты
    ИТОГИ СУММА(СтоимостьОборот) ПО
        Подразделение

Автор: Jureth 03.10.05, 03:00
Как получить только те записи, в которых значение определенного поля превышает указанное значение?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ПродажиОбороты.Подразделение КАК Подразделение,
        ПродажиОбороты.Номенклатура КАК Номенклатура,
        ПродажиОбороты.КоличествоОборот,
        ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
    ИЗ
        РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, , Подразделение = &Подразделение) КАК ПродажиОбороты
    ГДЕ
        ПродажиОбороты.КоличествоОборот > &Порог

Автор: Jureth 03.10.05, 03:01
Как обратиться к подчиненным полям в запросе?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ПродажиОбороты.ДоговорКонтрагента.Владелец,
        ПродажиОбороты.КоличествоОборот,
        ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
    ИЗ
        РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК ПродажиОбороты
     
    ВЫБРАТЬ
        ПродажиОбороты.ДоговорКонтрагента.Владелец,
        СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
        СУММА(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот
    ИЗ
        РегистрНакопления.Продажи.Обороты((&ДатаНач, &ДатаКон) КАК ПродажиОбороты
    СГРУППИРОВАТЬ ПО
        ПродажиОбороты.ДоговорКонтрагента.Владелец

Автор: Jureth 03.10.05, 03:04
Как объединить результаты нескольких запросов?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ РАЗЛИЧНЫЕ
        РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
    ИЗ
        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ОБЪЕДИНИТЬ
     
    ВЫБРАТЬ РАЗЛИЧНЫЕ
        РеализацияТоваровУслугВозвратнаяТара.Номенклатура
    ИЗ
        Документ.РеализацияТоваровУслуг.ВозвратнаяТара КАК РеализацияТоваровУслугВозвратнаяТара
    ОБЪЕДИНИТЬ
     
    ВЫБРАТЬ РАЗЛИЧНЫЕ
        РеализацияТоваровУслугУслуги.Номенклатура
    ИЗ
        Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги

Автор: Jureth 03.10.05, 03:06
Как выбрать данные из двух таблиц, удовлетворяющие определенному условию?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ЗаказыПокупателейОстатки.Номенклатура,
        ЗаказыПокупателейОстатки.КоличествоОстаток КАК ЗаказаноПокупателями,
        ЗаказыПоставщикамОстатки.КоличествоОстаток КАК ЗаказаноПоставщикам
    ИЗ
        РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОтч) КАК ЗаказыПокупателейОстатки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ
            РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаОтч) КАК ЗаказыПоставщикамОстатки
        ПО
            ЗаказыПокупателейОстатки.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура

Автор: Jureth 03.10.05, 03:07
Как дополнить данные одной таблицы данными, выбранными из другой таблицы по определенному условию?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
            ЗаказыПокупателейОстатки.Номенклатура,
            ЗаказыПокупателейОстатки.КоличествоОстаток КАК ЗаказаноПокупателями,
            ЗаказыПоставщикамОстатки.КоличествоОстаток КАК ЗаказаноПоставщикам
    ИЗ
            РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОтч) КАК ЗаказыПокупателейОстатки
            ЛЕВОЕ СОЕДИНЕНИЕ
                   РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаОтч) КАК ЗаказыПоставщикамОстатки
            ПО
                   ЗаказыПокупателейОстатки.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура

Автор: Jureth 03.10.05, 03:10
Как объединить данные из двух таблиц по определенному условию?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ВЫБОР
            КОГДА (ЗаказыПокупателейОстатки.Номенклатура) ЕСТЬ NULL ТОГДА ЗаказыПоставщикамОстатки.Номенклатура
            ИНАЧЕ ЗаказыПокупателейОстатки.Номенклатура
        КОНЕЦ КАК Номенклатура,
        ЗаказыПокупателейОстатки.КоличествоОстаток КАК ЗаказаноПокупателями,
        ЗаказыПоставщикамОстатки.КоличествоОстаток КАК ЗаказаноПоставщикам
    ИЗ
        РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОтч) КАК ЗаказыПокупателейОстатки
        ПОЛНОЕ СОЕДИНЕНИЕ
            РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаОтч) КАК ЗаказыПоставщикамОстатки
        ПО
            ЗаказыПокупателейОстатки.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура
     
    ВЫБРАТЬ
        ВложенныйЗапрос.Номенклатура,
        СУММА(ВложенныйЗапрос.ЗаказаноПокупателями) КАК ЗаказаноПокупателями,
        СУММА(ВложенныйЗапрос.ЗаказаноПоставщикам) КАК ЗаказаноПоставщикам
    ИЗ
        (ВЫБРАТЬ
            ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
            ЗаказыПокупателейОстатки.КоличествоОстаток КАК ЗаказаноПокупателями,
            0 КАК ЗаказаноПоставщикам
        ИЗ
        РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОтч, ) КАК ЗаказыПокупателейОстатки
        ОБЪЕДИНИТЬ
     
        ВЫБРАТЬ
            ЗаказыПоставщикамОстатки.Номенклатура,
            0,
            ЗаказыПоставщикамОстатки.КоличествоОстаток
        ИЗ
            РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаОтч, ) КАК ЗаказыПоставщикамОстатки
        ) КАК ВложенныйЗапрос
    СГРУППИРОВАТЬ ПО
        ВложенныйЗапрос.Номенклатура

Автор: Jureth 03.10.05, 03:11
Как вывести некоторое значение вместо NULL в запросе?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ЕСТЬNULL(Справочник.Номенклатура.Артикул, "---") КАК Артикул,
        Справочник.Номенклатура.Представление КАК Номенклатура

Автор: Jureth 03.10.05, 03:13
Как вместе с данными некоторой таблицы получить общие итоги из этой же таблицы?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ПродажиОбороты.Номенклатура КАК Номенклатура,
        ПродажиОбороты.СуммаОборот КАК СуммаПродаж,
        ПродажиОбороты.СуммаОборот / СовокупныеОбороты.СуммаОборот * 100 КАК ПроцентнаяДоля
    ИЗ
        РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК ПродажиОбороты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ
            РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК СовокупныеОбороты
        ПО
            ИСТИНА
    УПОРЯДОЧИТЬ ПО
        ПроцентнаяДоля УБЫВ

Автор: Jureth 03.10.05, 03:15
Как получить иерархические итоги по группе справочника?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ТоварыГруппы.Ссылка КАК Номенклатура,
        ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
    ИЗ
        (ВЫБРАТЬ
           Номенклатура.Ссылка КАК Ссылка
       ИЗ
           Справочник.Номенклатура КАК Номенклатура
       ГДЕ
           Номенклатура.Родитель В ИЕРАРХИИ(&Группа) И (Номенклатура.ЭтоГруппа = ЛОЖЬ)
       ) КАК ТоварыГруппы
       ЛЕВОЕ СОЕДИНЕНИЕ
           РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментПолучения, Номенклатура В ИЕРАРХИИ (&Группа)) КАК ТоварыНаСкладахОстатки
       ПО
           ТоварыГруппы.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
    ИТОГИ СУММА(КоличествоОстаток) ПО
       Номенклатура ТОЛЬКО ИЕРАРХИЯ

Автор: Jureth 03.10.05, 03:21
Как по состоянию на заданную дату по регистру "ОстаткиНаСкладе" найти последний документ "ПоступлениеТоваровУслуг", по которому приходила номенклатура?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ВложенныйЗапрос.Номенклатура,
        МАКСИМУМ(ТоварыНаСкладах.Регистратор) КАК Регистратор
    ИЗ
        (ВЫБРАТЬ
            ТоварыНаСкладах.Номенклатура КАК Номенклатура,
            МАКСИМУМ(ТоварыНаСкладах.Период) КАК Период
        ИЗ
            РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
        ГДЕ
            ТоварыНаСкладах.Период <= &ДатаОтчета И (ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг)
        СГРУППИРОВАТЬ ПО
            ТоварыНаСкладах.Номенклатура
        ) КАК ВложенныйЗапрос
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ
            РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
        ПО
            ВложенныйЗапрос.Номенклатура = ТоварыНаСкладах.Номенклатура И ВложенныйЗапрос.Период = ТоварыНаСкладах.Период
    ГДЕ
        (ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг)
    СГРУППИРОВАТЬ ПО
        ВложенныйЗапрос.Номенклатура

Автор: Jureth 03.10.05, 03:33
Как подсчитать количество записей с одинаковым значением некоторого поля?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        Контрагенты.ОсновнойМенеджерПокупателя,
        КОЛИЧЕСТВО(Контрагенты.Ссылка) КАК КоличествоЗакрепленных
    ИЗ
        Справочник.Контрагенты КАК Контрагенты
    ГДЕ
        (Контрагенты.ЭтоГруппа = ЛОЖЬ) И (Контрагенты.ОсновнойМенеджерПокупателя <> &НеЗаполненМенеджер)
    СГРУППИРОВАТЬ ПО
        Контрагенты.ОсновнойМенеджерПокупателя
    УПОРЯДОЧИТЬ ПО
        КоличествоЗакрепленных УБЫВ

Автор: Jureth 03.10.05, 03:35
Как в итоговых записях вывести количество различных записей?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        Контрагенты.ОсновнойМенеджерПокупателя.Представление КАК ОсновнойМенеджерПокупателя,
        Контрагенты.Представление,
        1 КАК КоличествоЗакрепленных
    ИЗ
        Справочник.Контрагенты КАК Контрагенты
    ГДЕ
        (Контрагенты.ЭтоГруппа = ЛОЖЬ)
    УПОРЯДОЧИТЬ ПО
        КоличествоЗакрепленных УБЫВ
    ИТОГИ КОЛИЧЕСТВО(КоличествоЗакрепленных) ПО
        ОсновнойМенеджерПокупателя

Автор: Jureth 03.10.05, 03:35
Как узнать количество записей в результате запроса?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Результат = Запрос.Выполнить();
    КолЗаписей = Результат.Выбрать().Количество();

Автор: Jureth 03.10.05, 03:43
Как проверить достаточность остатков товаров на складах, указанных в документе?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ВложенныйЗапрос.Номенклатура,
        ВложенныйЗапрос.Размещение КАК Склад,
        ВложенныйЗапрос.КоличествоСписываемое,
        ТоварыНаСкладахОстатки.КоличествоОстаток
    ИЗ
        (ВЫБРАТЬ
            ВнутреннийЗаказТовары.Номенклатура КАК Номенклатура,
            ВнутреннийЗаказТовары.Размещение КАК Размещение,
            СУММА(ВнутреннийЗаказТовары.Количество *ВнутреннийЗаказТовары.Коэффициент) КАК КоличествоСписываемое
        ИЗ
            Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТовары
        ГДЕ
            ВнутреннийЗаказТовары.Ссылка = &Ссылка
        СГРУППИРОВАТЬ ПО
            ВнутреннийЗаказТовары.Номенклатура,
            ВнутреннийЗаказТовары.Размещение
        ) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ
            РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментВремениДокумента,
                    Склад В (ВЫБРАТЬ РАЗЛИЧНЫЕ
                                   ВЫРАЗИТЬ(ВнутреннийЗаказТоварыДляОтбора.Размещение КАК Справочник.Склады)
                                   ИЗ
                                       Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТоварыДляОтбора
                                   ГДЕ
                                       ВнутреннийЗаказТоварыДляОтбора.Ссылка = &Ссылка
                                       И
                                       НЕ ВЫРАЗИТЬ(ВнутреннийЗаказТоварыДляОтбора.Размещение КАК Справочник.Склады) ЕСТЬ NULL)
                    И
                    Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ
                        ВнутреннийЗаказТоварыДляОтбора.Номенклатура
                    ИЗ
                        Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТоварыДляОтбора
                    ГДЕ
                        ВнутреннийЗаказТоварыДляОтбора.Ссылка = &Ссылка)) КАК ТоварыНаСкладахОстатки
        ПО
            ВложенныйЗапрос.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И ВложенныйЗапрос.Размещение = ТоварыНаСкладахОстатки.Склад

Автор: Jureth 03.10.05, 03:44
Как в запросе осуществить отбор по значению перечисления?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Запрос.Текст = "ВЫБРАТЬ
    |   ВоинскийУчетСрезПоследних.Физлицо
    |ИЗ
    |   РегистрСведений.ВоинскийУчет.СрезПоследних(&ДатаОтчета) КАК ВоинскийУчетСрезПоследних
    |ГДЕ
    |   ВоинскийУчетСрезПоследних.ОтношениеКВоинскомуУчету = &Состоит"
     
    Запрос.УстановитьПараметр("ДатаОтчета", ДатаОтчета);
    Запрос.УстановитьПараметр("Состоит", Перечисления.ОтношениеКВоинскомуУчету.Состоит);

Автор: Jureth 03.10.05, 03:46
Как получить курсы валют на две интересующие даты?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ВалютыСрезПоследних.Валюта,
        ВалютыСрезПоследних.Курс,
        &ПерваяДата Как Дата
    ИЗ
        РегистрСведений.Валюты.СрезПоследних(&ПерваяДата, ) КАК ВалютыСрезПоследних
    ОБЪЕДИНИТЬ ВСЕ
     
    ВЫБРАТЬ
        ВалютыСрезПоследних.Валюта,
        ВалютыСрезПоследних.Курс,
        &ВтораяДата
    ИЗ
        РегистрСведений.Валюты.СрезПоследних(&ВтораяДата, ) КАК ВалютыСрезПоследних

Автор: Jureth 03.10.05, 03:49
Как одним запросом получить таблицу расхождений курсов взаиморасчетов всех выписанных документов "ЗаказПокупателя" с официальным курсом?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ВложенныйЗапрос.Ссылка КАК Документ,
        ВложенныйЗапрос.ДоговорКонтрагентаВалютаВзаиморасчетов КАК ВалютаДоговора,
        ВложенныйЗапрос.КурсВзаиморасчетов,
        ВЫБОР
            КОГДА КурсыВалют.Курс ЕСТЬ NULL ТОГДА 0
            ИНАЧЕ КурсыВалют.Курс
        КОНЕЦ КАК КурсОфициальный,
        ВЫБОР
            КОГДА КурсыВалют.Курс ЕСТЬ NULL ТОГДА ВложенныйЗапрос.КурсВзаиморасчетов
            ИНАЧЕ ВложенныйЗапрос.КурсВзаиморасчетов - КурсыВалют.Курс
        КОНЕЦ КАК Превышение
    ИЗ
        (ВЫБРАТЬ
            ЗаказПокупателя.Ссылка КАК Ссылка,
            МАКСИМУМ(КурсыВалют.Период) КАК Период,
            ЗаказПокупателя.КурсВзаиморасчетов КАК КурсВзаиморасчетов,
            ЗаказПокупателя.ДоговорКонтрагента.ВалютаВзаиморасчетов КАК ДоговорКонтрагентаВалютаВзаиморасчетов
        ИЗ
            Документ.ЗаказПокупателя КАК ЗаказПокупателя
            ЛЕВОЕ СОЕДИНЕНИЕ
                РегистрСведений.КурсыВалют КАК КурсыВалют
            ПО
                ЗаказПокупателя.ДоговорКонтрагента.ВалютаВзаиморасчетов = КурсыВалют.Валюта И ЗаказПокупателя.Дата >= КурсыВалют.Период
        СГРУППИРОВАТЬ ПО
            ЗаказПокупателя.КурсВзаиморасчетов,
            ЗаказПокупателя.ДоговорКонтрагента.ВалютаВзаиморасчетов,
            ЗаказПокупателя.Ссылка
        ) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ
            РегистрСведений.КурсыВалют КАК КурсыВалют
        ПО
            ВложенныйЗапрос.ДоговорКонтрагентаВалютаВзаиморасчетов = КурсыВалют.Валюта И ВложенныйЗапрос.Период = КурсыВалют.Период

Автор: Jureth 03.10.05, 03:52
Как написать запрос таким образом, чтобы на определенном уровне иерархии запроса считались одни итоговые функции, а на другом уровне другие?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        ОстаткиТоваровКомпанииОстатки.Номенклатура КАК Номенклатура,
        ОстаткиТоваровКомпанииОстатки.Номенклатура.Представление,
        ОстаткиТоваровКомпанииОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        ОстаткиТоваровКомпанииОстатки.ХарактеристикаНоменклатуры.Представление,
        ОстаткиТоваровКомпанииОстатки.КоличествоОстаток КАК КоличествоОстаток,
        NULL как Заказ,
        0 КАК Резерв
    ИЗ
        РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК ОстаткиТоваровКомпанииОстатки
     
    ОБЪЕДИНИТЬ ВСЕ
     
    ВЫБРАТЬ
        ЗаказыПокупателейОстатки.Номенклатура,
        ЗаказыПокупателейОстатки.Номенклатура.Представление,
        ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры,
        ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры.Представление,
        0,
        ЗаказыПокупателейОстатки.ЗаказПокупателя,
        ЗаказыПокупателейОстатки.КоличествоОстаток
    ИЗ
        РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки
    ИТОГИ СУММА(КоличествоОстаток), СУММА(Резерв) ПО
        Номенклатура,
        ХарактеристикаНоменклатуры

Автор: Jureth 03.10.05, 03:54
Как получить перечень документов, приведших данные подчиненного периодического регистра сведений к определенному состоянию?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ВЫБРАТЬ
        КандидатыНаРаботу.ФизЛицо КАК ФизЛицо,
        КандидатыНаРаботу.Регистратор КАК Документ,
        КандидатыНаРаботу.Статус КАК Статус
    ИЗ
        РегистрСведений.КандидатыНаРаботу.СрезПоследних(&ДатаОтчета, ) КАК КандидатыНаРаботуСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ
            РегистрСведений.КандидатыНаРаботу КАК КандидатыНаРаботу
        ПО
            КандидатыНаРаботуСрезПоследних.ФизЛицо = КандидатыНаРаботу.ФизЛицо
    ГДЕ
        КандидатыНаРаботуСрезПоследних.Статус = &Отложен И КандидатыНаРаботу.Период <= &ДатаОтчета
    УПОРЯДОЧИТЬ ПО
        КандидатыНаРаботу.ФизЛицо.Наименование,
        Документ
    ИТОГИ МАКСИМУМ(Статус) ПО
        ФизЛицо
    АВТОУПОРЯДОЧИВАНИЕ

Автор: Jureth 03.10.05, 03:56
Как установить параметры запроса, если текст запроса заранее не известен?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Запрос = Новый Запрос("
    |ВЫБРАТЬ
    |    Номенклатура.Ссылка
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)");
     
    // Получить описание параметров запроса.
    ПараметрыЗапроса = Запрос.НайтиПараметры();
     
    Для Каждого ПараметрЗапроса Из ПараметрыЗапроса Цикл
        ЗаданноеЗначение = Неопределено;
        // Открыть диалог ввода значения данного параметра.
        Если ВвестиЗначение(ЗаданноеЗначение, "Задайте значение параметра " + ПараметрЗапроса.Имя, ПараметрЗапроса.ТипЗначения) Тогда
            Запрос.УстановитьПараметр(ПараметрЗапроса.Имя, ЗаданноеЗначение);
        Иначе
            Возврат;
        КонецЕсли;
    КонецЦикла;
     
    РезультатЗапроса = Запрос.Выполнить();

Автор: Jureth 03.10.05, 03:59
Анализ данных
Как получить данные о товарах продаваемых вместе?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Анализ = Новый АнализДанных;
    // Выбранный тип анализа как раз и указывает на то, что ищем
    // "совместно продаваемые" товары.
    Анализ.ТипАнализа = Тип("АнализДанныхПоискАссоциаций");
     
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ПродажиКомпанииОбороты.Регистратор Как ДокументПродажи,
    |    ПродажиКомпанииОбороты.Номенклатура
    |ИЗ
    |    РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, Регистратор) КАК ПродажиКомпанииОбороты
    |УПОРЯДОЧИТЬ ПО
    |    ДокументПродажи";
     
    Запрос.УстановитьПараметр("НачПериода", НачПериода);
    Запрос.УстановитьПараметр("КонПериода", КонПериода);
     
    // Получить продажи за указанный период.
    // Выбрана периодичность по Регистратору, т.к. необходимо получить
    // данные о совместных продажах в рамках одной покупки.
    Анализ.ИсточникДанных = Запрос.Выполнить();
     
    // Выполнить анализ в соответствии с указанным источником.
    РезультатАнализа = Анализ.Выполнить();
     
    // Для вывода результата анализа воспользуемся построителем
    // отчета анализа данных.
    Построитель = Новый ПостроительОтчетаАнализаДанных();
    Построитель.Макет = Неопределено;
    Построитель.ТипАнализа = Тип("АнализДанныхПоискАссоциаций");
    ТабДок = Новый ТабличныйДокумент;
     
    Построитель.Вывести(РезультатАнализа, ТабДок);
    ТабДок.Показать();

Автор: Jureth 03.10.05, 04:02
Как порекомендовать сопутствующие товары?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Анализ = Новый АнализДанных;
     
    // Найти ассоциации.
    Анализ.ТипАнализа = Тип("АнализДанныхПоискАссоциаций");
     
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ПродажиКомпанииОбороты.Регистратор КАК ДокументПродажи,
    |    ПродажиКомпанииОбороты.Номенклатура
    |ИЗ
    |    РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, Регистратор) КАК ПродажиКомпанииОбороты
    |УПОРЯДОЧИТЬ ПО
    |    ДокументПродажи";
     
    // Ассоциации ищем подокументно, это определяется поведением
    // объекта "АнализДанных" "по умолчанию" при выборе
    // периодичности виртуальной таблицы Регистратор
    Запрос.УстановитьПараметр("НачПериода", НачПериода);
    Запрос.УстановитьПараметр("КонПериода", КонПериода);
     
    Анализ.ИсточникДанных = Запрос.Выполнить();
    РезультатАнализа = Анализ.Выполнить();
     
    // Исходя из полученного анализа создать прогноз.
    МодельПрогноза = РезультатАнализа.СоздатьМодельПрогноза();
     
    // ТЗ- таблица значений, содержащая данные о том,
    // какие номенклатурные позиции вошли в "текущую" покупку.
    МодельПрогноза.ИсточникДанных = ТЗ;
     
    // ТП - элемент управления "Табличное поле" связанный через
    // свойство "Данные" с реквизитом формы "ТП" (тип ТаблицаЗначений)
    ТП = МодельПрогноза.Выполнить();
    ЭлементыФормы.ТП.СоздатьКолонки();

Автор: Jureth 03.10.05, 04:04
Как посмотреть, что будет покупаться в дальнейшем?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ТабДок = Новый ТабличныйДокумент;
    Анализ = Новый АнализДанных;
     
    // Нужно спрогнозировать цепочку событий, поэтому выбираем
    // тип анализа "Поиск последовательностей".
    Анализ.ТипАнализа = Тип("АнализДанныхПоискПоследовательностей");
     
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ПродажиКомпанииОбороты.ДоговорВзаиморасчетовПокупателя.Владелец КАК Контрагент,
    |    ПродажиКомпанииОбороты.Номенклатура,
    |    ПродажиКомпанииОбороты.Период
    |ИЗ
    |    РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, Регистратор) КАК ПродажиКомпанииОбороты";
     
    Запрос.УстановитьПараметр("НачПериода", НачПериода);
    Запрос.УстановитьПараметр("КонПериода", КонПериода);
     
    Анализ.ИсточникДанных = Запрос.Выполнить();
    Колонка = Анализ.НастройкаКолонок.Найти("Период");
     
    // Указать, что колонка "Период" имеет тип "Время",
    // что "позволит понять" хронологию событий
    Колонка.ТипКолонки = ТипКолонкиАнализаДанныхПоискПоследовательностей.Время;
     
    РезультатАнализа = Анализ.Выполнить();
    МодельПрогноза = РезультатАнализа.СоздатьМодельПрогноза();
     
    // ТЗ- таблица значений, содержащая исходные данные для прогноза
    // например, какой контрагент, какой товар закупил (исходя из чего
    // попытаемся узнать, что они еще закупят).
    МодельПрогноза.ИсточникДанных = ТЗ;
     
    // ТП - элемент управления "Табличное поле" связанный через
    // свойство "Данные" с реквизитом формы "ТП"
    //(тип ТаблицаЗначений)
    ТП = МодельПрогноза.Выполнить();
     
    ЭлементыФормы.ТП.СоздатьКолонки();
     
    // Построитель - реквизит формы, имеющий тип
    // ПостроительОтчетаАнализаДанных. Ряд табличных полей /
    / в диалоге могут быть связаны со свойствами-коллекциями
    // данного объекта
    Построитель.ТипАнализа = Тип("АнализДанныхПоискПоследовательностей");
    Построитель.Вывести(РезультатАнализа, ТабДок);
    ТабДок.Показать();

Автор: Jureth 03.10.05, 04:07
Представление результатов отчетов
Как вывести результат запроса в табличный документ?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ОстаткиТоваровКомпанииОстатки.СкладКомпании КАК СкладКомпанииСсылка,
    |    ОстаткиТоваровКомпанииОстатки.Номенклатура КАК НоменклатураСсылка,
    |    СУММА(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток) КАК Остаток,
    |    ОстаткиТоваровКомпанииОстатки.Номенклатура.Представление КАК Номенклатура,
    |    ОстаткиТоваровКомпанииОстатки.СкладКомпании.Представление КАК Склад
    |ИЗ
    |    РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&Момент) КАК ОстаткиТоваровКомпанииОстатки
    |СГРУППИРОВАТЬ ПО
    |    ОстаткиТоваровКомпанииОстатки.СкладКомпанииСсылка,
    |    ОстаткиТоваровКомпанииОстатки.НоменклатураСсылка
    |ИТОГИ СУММА(Остаток) ПО
    |    Общие,
    |    Склад";
     
    Запрос.УстановитьПараметр("Момент", Неопределено);
     
    Результат = Запрос.Выполнить();
     
    // Получить поле табличного документа, в которое будем выводить результат.
    ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
     
    // Очистить данные в табличном документе
    // (возможно данные уже выводились ранее).
    ТабДок.Очистить();
     
    Макет = ПолучитьМакет("Макет");
     
    // Получить именованные области из макета.
    ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщийИтог");
    ОбластьСклад = Макет.ПолучитьОбласть("Склад");
    ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
     
    // Получить выборку по первой итоговой группировке (первый уровень).
    ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
     
    // Запись общего итога всегда одна, поэтому можно обойтись без организации цикла.
    ВыборкаОбщийИтог.Следующий();
     
    // Произвести запись данных из полей выборки в именованные
    // области с совпадающими именами.
    ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
     
    // Включить область с заполненными параметрами в табличный документ.
    ТабДок.Вывести(ОбластьОбщийИтог);
     
    // "От" записи первого уровня получить подчиненную выборку
    // записей второго уровня (по итоговой группировке "Склад").
    ВыборкаПоСкладу = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
     
    Пока ВыборкаПоСкладу.Следующий() Цикл
        ОбластьСклад.Параметры.Заполнить(ВыборкаПоСкладу);
        ТабДок.Вывести(ОбластьСклад);
     
        // Получить подчиненную выборку, содержащую детальные записи.
        ВыборкаПоНоменклатуре = ВыборкаПоСкладу.Выбрать();
     
        Пока ВыборкаПоНоменклатуре.Следующий() Цикл
            ОбластьНоменклатура.Параметры.Заполнить(ВыборкаПоНоменклатуре);
            ТабДок.Вывести(ОбластьНоменклатура);
        КонецЦикла;
    КонецЦикла;

Автор: Jureth 03.10.05, 04:09
Как вывести данные в табличный документ с возможностью сворачивания и разворачивания данных по группировкам?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    // Перед выводом данных в табличный документ используется метод:
    ТабДок.НачатьАвтогруппировкуСтрок();
     
    // Выести область с указанием уровня.
    ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень());
     
    // В конце работы с табличным документом необходимо выполнить
    // следующий метод:
    ТабДок.ЗакончитьАвтогруппировкуСтрок();

Автор: Jureth 03.10.05, 04:10
Как при выводе данных в табличный документ свернуть все выводимые группировки?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    УровеньГруппировки = 1; //содержит индекс, с нуля
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.ПоказатьУровеньГруппировокСтрок(УровеньГруппировки);

Автор: Jureth 03.10.05, 04:10
Как при выводе данных в табличный документ произвольно определить состав свернутых и развернутых группировок?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ТабДок.Вывести(ОбластьНоменклатура, ВыборкаПоНоменклатуре.Уровень(), , Ложь);

Автор: Jureth 03.10.05, 04:11
Как выгрузить результат запроса с показом иерархии?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |       ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура,
    |       ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот
    |ИЗ
    |       РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, , ) КАК ПродажиКомпанииОбороты
    |ИТОГИ СУММА(КоличествоОборот) ПО
    |       Номенклатура ИЕРАРХИЯ";
     
    Запрос.УстановитьПараметр("НачПериода", НачПериода);
    Запрос.УстановитьПараметр("КонПериода", КонПериода);
     
    Результат = Запрос.Выполнить();
     
    // Осуществить выгрузку с сохранением иерархии.
    ЭлементыФормы.ТП.Значение = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
     
    ЭлементыФормы.ТП.СоздатьКолонки();

Автор: Jureth 03.10.05, 04:13
Где и как можно увидеть макет, автоматически генерируемый построителем отчета?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ПостроительОтчета.Макет = Неопределено;
    ПостроительОтчета.Макет.Показать()

Автор: Jureth 03.10.05, 04:14
Как из построителя отчета передать данные в сводную таблицу?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ЭлементыФормы.ДокументРезультат.ВстроенныеТаблицы.СводнаяТаблица.ИсточникДанных = ПостроительОтчетаОтчет;
    ЭлементыФормы.ДокументРезультат.ВстроенныеТаблицы.СводнаяТаблица.ОтображатьПоля = Истина;

Автор: Jureth 03.10.05, 04:18
Отчет формируется построителем отчета. Как убрать одну из колонок, поместив ее данные в расшифровку другой?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Процедура АлфавитныйПереченьКандидатовСРасшифровкой()
        ПостроительОтчета = Новый ПостроительОтчета;
        ПостроительОтчета.Текст ="ВЫБРАТЬ
        |    РегистрацияСобеседованияКандидата.ФизЛицо КАК Кандидат,
        |    РегистрацияСобеседованияКандидата.РезультатСобеседования КАК Результат,
        |    РегистрацияСобеседованияКандидата.Ссылка
        |ИЗ
        |    Документ.РегистрацияСобеседованияКандидата КАК РегистрацияСобеседованияКандидата
        |УПОРЯДОЧИТЬ ПО
        |    РегистрацияСобеседованияКандидата.ФизЛицо.Наименование";
     
        ПостроительОтчета.Выполнить();
        Макет = ПостроительОтчета.Макет;
        // Очистить области, связанные с ссылкой.
        ТекущаяОбласть = Неопределено;
        Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст("Ссылка", ТекущаяОбласть, Макет.Область());
            Если ТекущаяОбласть = Неопределено Тогда
                Прервать;
            Иначе
                ТекущаяОбласть.Очистить(Истина, Истина, Истина);
            КонецЕсли;
        КонецЦикла;
     
        // Заполнить параметр расшифровки для областей, где параметр = "Результат".
        ТекущаяОбласть = Неопределено;
        Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст("Результат", ТекущаяОбласть, Макет.Область());
            Если ТекущаяОбласть = Неопределено Тогда
                Прервать;
            Иначе
                Если ТекущаяОбласть.Параметр = "Результат" Тогда
                    ТекущаяОбласть.ПараметрРасшифровки = "Ссылка";
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
        ПостроительОтчета.Макет = Макет;
        ПостроительОтчета.Вывести();
    КонецПроцедуры

Автор: Jureth 03.10.05, 04:20
Как сохранить настройки построителя отчета до следующего открытия формы отчета?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    СохранитьЗначение("НастройкаПостроителяДляОтчетаПродажи" + Метаданные().Имя, ПостроительОтчета.ПолучитьНастройки());
     
    // До установки настроек они ранее должны были быть заполнены
    // по тексту запроса.
    ПостроительОтчета.ЗаполнитьНастройки();
     
    // Установить настройки построителя отчета.
    Настройка = ВосстановитьЗначение("НастройкаПостроителяДляОтчетаПродажи" + Метаданные().Имя);
    Если Настройка <> Неопределено Тогда
            ПостроительОтчета.УстановитьНастройки(Настройка);
    КонецЕсли;

Автор: Jureth 03.10.05, 04:23
Как организовать показ примечаний в формируемом табличном документе?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Процедура Отчет(ДатаНач, ДатаКон) Экспорт
        Запрос = Новый Запрос;
     
        // Сбор данных.
        Запрос.Текст = "ВЫБРАТЬ
        |    Событие.Ответственный КАК Ответственный,
        |    Событие.Дата,
        |    Событие.ВидСобытия,
        |    Событие.Контрагент,
        |    Событие.СодержаниеСобытия,
        |    Событие.ОписаниеСобытия
        |ИЗ
        |    Документ.Событие КАК Событие
        |ГДЕ
        |    Событие.Дата МЕЖДУ &ДатаНач И &ДатаКон И (Событие.Проведен) И Событие.СостояниеСобытия = &Завершено
        |УПОРЯДОЧИТЬ ПО
        |    Ответственный";
     
        Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
        Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
        Запрос.УстановитьПараметр("Завершено", Перечисления.СостоянияСобытий.Завершено);
     
        Результат = Запрос.Выполнить();
     
        // Сформировать табличный документ.
        Макет = ПолучитьМакет("Отчет");
        ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
        ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
        ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
        ТабДок = Новый ТабличныйДокумент;
        ОбластьЗаголовок.Параметры.ДатаНач = ДатаНач;
        ОбластьЗаголовок.Параметры.ДатаКон = ДатаКон;
        ТабДок.Вывести(ОбластьЗаголовок);
        ТабДок.Вывести(ОбластьШапкаТаблицы);
     
        ВыборкаДетали = Результат.Выбрать();
        Пока ВыборкаДетали.Следующий() Цикл
            ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
            ОбластьДетальныхЗаписей.Область("Описание").Примечание.Текст = ВыборкаДетали.СодержаниеСобытия;
            ТабДок.Вывести(ОбластьДетальныхЗаписей);
        КонецЦикла;
        ТабДок.Показать();
    КонецПроцедуры

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)