Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Связать периодический регистр сведений с рег. накопления "Пролажи"
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
alex1c
Конфигурация УПП для Украины, переделанная.
Есть регистр накопления "Продажи", в котором есть измерение "Контрагент".
Добавили периодический регистр сведений "МенеджерыКонтрагентов" (периодичность в пределах дня) в котором тоже есть измерение "Контрагент", а ресурс Менеджер.
Нужно сформировать отчет в котором бы был отбор и группировка по Менеджеру.
Подскажите есть ли такая возможность, и учитывая то что менеджер в течении выбранного периода у данного контрагента может поменяться.
logist
Переделайте отчет "Продажи" - добавьте в запрос возможность отбора и группировки по нужному регистру.
awp
Цитата(alex1c @ 17.11.10, 16:03) необходимо зарегистрироваться для просмотра ссылки
Конфигурация УПП для Украины, переделанная.
Есть регистр накопления "Продажи", в котором есть измерение "Контрагент".
Добавили периодический регистр сведений "МенеджерыКонтрагентов" (периодичность в пределах дня) в котором тоже есть измерение "Контрагент", а ресурс Менеджер.
Нужно сформировать отчет в котором бы был отбор и группировка по Менеджеру.
Подскажите есть ли такая возможность, и учитывая то что менеджер в течении выбранного периода у данного контрагента может поменяться.


Можно реализовать запрос, но выполняться он будет очень долго. Не легче ли было при проведении доков брать тек. менеджера и записывать в регистр ПРОДАЖИ ?
Vofka
Прицепите левым соединением менеджера, в чем проблема?
World1С
Предлагаю так
ВЫБРАТЬ
     Продажи.Контрагент
ИЗ
     РегистрыНакопления.Продажи.Обороты(
          &ДатаНач,
          &ДатаКон,
          ,
     Контрагент В (ВЫБРАТЬ
                      МенеджерыКонтрагентов.Контрагент
                ИЗ
                  РегистрыСведений.МенеджерыКонтрагентов.СрезПоследних(&ДатаКон, ) КАК МенеджерыКонтрагентов
                ГДЕ
                  МенеджерыКонтрагентов.Менеджер = &Менеджер)) КАК Продажи


И работать будет достаточно быстро.
awp
Цитата(Vofka @ 17.11.10, 16:14) необходимо зарегистрироваться для просмотра ссылки
Прицепите левым соединением менеджера, в чем проблема?


Менеджер в разрезе дня - Левое соединение с (выборку по датам регистра продажи + контрагентам + менеджерам) связь по максимальной дате менеджеров меньшей даты регистра продажи.
awp
Цитата(World1С @ 17.11.10, 16:16) необходимо зарегистрироваться для просмотра ссылки
Предлагаю так
ВЫБРАТЬ
Продажи.Контрагент
ИЗ
РегистрыНакопления.Продажи.Обороты(
&ДатаНач,
&ДатаКон,
,
Контрагент В (ВЫБРАТЬ
                    МенеджерыКонтрагентов.Контрагент
                    ИЗ
                    РегистрыСведений.МенеджерыКонтрагентов.СрезПоследних(&ДатаКон, ) КАК МенеджерыКонтрагентов
                    ГДЕ
                    МенеджерыКонтрагентов.Менеджер = &Менеджер)) КАК Продажи



Будет выбран только последний менеджер на дату конца. На сколько я понял необходимо выбрать менеджера на дату регистратора.
awp
Цитата(awp @ 17.11.10, 16:19) необходимо зарегистрироваться для просмотра ссылки
Будет выбран только последний менеджер на дату конца. На сколько я понял необходимо выбрать менеджера на дату регистратора.


Вернее контрагент
alex1c
Цитата(awp @ 17.11.10, 16:19) необходимо зарегистрироваться для просмотра ссылки
Будет выбран только последний менеджер на дату конца. На сколько я понял необходимо выбрать менеджера на дату регистратора.

В том то и проблема, что что до 10 числа был один менеджер а с 11 - другой, и это нужно учесть
Vofka
Цитата
В том то и проблема, что что до 10 числа был один менеджер а с 11 - другой, и это нужно учесть

Где учесть?

Я думаю как то так:

ВЫБРАТЬ
    Продажи.Контрагент,
    Менеджеры.Менеджер
ИЗ
РегистрыНакопления.Продажи.Обороты(&ДатаНач,&ДатаКон,,) КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ РегистрыСведений.МенеджерыКонтрагентов КАК Менеджеры
ПО Продажи.Контрагент = Менеджеры.Контрагент
ГДЕ
Менеджер = &Менеджер
СГРУППИРОВАТЬ ПО
Контрагент,
Менеджер
World1С
По поводу моего примера хотел уточнить

РегистрыСведений.МенеджерыКонтрагентов.СрезПоследних(&Граница, )


Цитата
РегистрСведенийМенеджер.<Имя регистра сведений> (InformationRegisterManager.<Имя регистра сведений>)
СрезПоследних (SliceLast)
Синтаксис:
СрезПоследних(<Конец периода>, <Отбор>)
Параметры:
<Конец периода> (необязательный)
Тип: Дата, МоментВремени, Граница. Определяет момент времени, заканчивая которым необходимо выбрать записи.
Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.
<Отбор> (необязательный)
Тип: Структура. Структура, содержащая отбор по измерениям и реквизитам регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры - задает отбираемое по данному измерению значение. Если параметр не указан, то отбор не используется.
Возвращаемое значение:
Тип: ТаблицаЗначений. Таблица значений, заполненная данными найденных записей регистра сведений.
Описание:
Получает наиболее поздние записи регистра, соответствующие установленным в параметрах метода значениям ключевых полей. Записи подбираются для каждого сочетания из всех имеющихся значений измерений регистра.
Примечание:
Применим только для периодических регистров сведений.


это из help

а вот что такое Граница

Цитата
Граница (Boundary)
Свойства:
ВидГраницы (BoundaryType)
Значение (Value)

Конструкторы:
На основании значения и вида

Описание:
Предназначен для получения и хранения границы некоторого интервала значений. Содержит граничное значение интервала, а также признак включения или исключения граничного значения в интервал.
Используется в качестве значений свойств и параметров методов других объектов, имеющих тип Граница.
Граница используется в тех случаях, когда важно указание включения или исключения граничного значения, например при получении остатков и оборотов регистров накопления, срезов и значений регистров сведений, для задания интервалов запросов.
Возможен обмен с сервером. Сериализуется
Batchir
Я когда-то добавлял в регистр продаж реквизит и дополнительно двигал по нему.
alex1c
В том то и дело что в РегистрыСведений.МенеджерыКонтрагентов.СрезПоследних(&Граница, ) нужно указать Границу, а это значит что мы получим менеджера актуального на "Граница" но не тех которые изменялись в этом периоде...
alex1c
Цитата(Batchir @ 17.11.10, 16:44) необходимо зарегистрироваться для просмотра ссылки
Я когда-то добавлял в регистр продаж реквизит и дополнительно двигал по нему.

в регистр Продаж добавлять не хотят.
Vofka
Цитата
но не тех которые изменялись в этом периоде...

Тогда не срез последних, а просто весь регистр РегистрыСведений.МенеджерыКонтрагентов и в условии поставьте Период Между
alex1c
Цитата(Vofka @ 17.11.10, 17:01) необходимо зарегистрироваться для просмотра ссылки
Тогда не срез последних, а просто весь регистр РегистрыСведений.МенеджерыКонтрагентов и в условии поставьте Период Между

а так не хочет Менеджера вообще ставить.
Может его как-то выражением определять?
awp
Попробуйте сделать левое соединение по РегистрыСведений.МенеджерыКонтрагентов
с условием контрагент = продажи.контрагент и началопериода(продажи.Дата,День) = началопериода(РегистрыСведений.Период,День)

в ВЫБРАТЬ добавить РегистрыСведений.МенеджерыКонтрагентов.Менеджер
alex1c
Сделал так:

    "ВЫБРАТЬ
    |    Менеджеры.Менеджер,
    |    ПродажиОбороты.Контрагент,
    |    ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
    |    ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
    |ИЗ
    |    РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, Регистратор, ) КАК ПродажиОбороты
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МенеджерыКонтрагентов.СрезПоследних(, ) КАК Менеджеры
    |        ПО ПродажиОбороты.Контрагент = Менеджеры.Контрагент
    |            И (НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ) = НАЧАЛОПЕРИОДА(Менеджеры.Период, ДЕНЬ))
    |ИТОГИ
    |    СУММА(КоличествоОборот),
    |    СУММА(СтоимостьОборот)
    |ПО
    |    ОБЩИЕ";


выводит в последней строке менеджера, а в первых нет.
World1С
Это проблема левого соединения.
Убери связь по периоду и попробуй поменять регистры местами.
alex1c
Цитата(World1С @ 17.11.10, 18:29) необходимо зарегистрироваться для просмотра ссылки
Это проблема левого соединения.
Убери связь по периоду и попробуй поменять регистры местами.

Если убрать связь по периоду выводит во всех строка последнего менеджера. А что имелось ввиду "поменять регистры местами"?
World1С
К регистру сведений сделайте левое соединение с регистром накопления.
alex1c
Цитата(World1С @ 17.11.10, 19:04) необходимо зарегистрироваться для просмотра ссылки
К регистру сведений сделайте левое соединение с регистром накопления.

Так а мне надо с регистра сведений выбирать только то что попало в регистр накопления...
alex1c
Ну если кому интересно, то у меня получилось вот как:
- регистр сведений по менеджерам выгрузил в таблицу значений и добавил туда колонку "ДатаОкончания" (до которой он является менеджером)
- используя МенеджерВременныхТаблиц соединил эту таблицу с регистром продаж указав условие
| И Продажи.Период >= Менеджеры.Период
| И Продажи.Период <= Менеджеры.ДатаОкончания";

и все получилось.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.