СКД: отбор в СКД или в запросе. #426158


#0 by Andrey07070707
Добрый день, застрял я таки с отчетом из темы . пробывал уже по всякому и руками выводил, но отбор не получился, и в СКД делал, тоже с отбором проблемка осталась. у меня там комплекты по неделям выводятся, и мне нужн вывести только те комплекты где не в каждой неделе пополнения стоят. вроде посчитал через внешние функции где нет пополнений, но отбор по данному полю не работает. пробывал отобрать только те где "Дата пополнения" "Незаполнено",или "Заполнено", но проблема в том что нужно отобрать где есть хотя бы один пропуск в сопровождении. а так выбитаются где нет пополнений за весь период. есть какие-нибудь идеи?
#1 by Garkin
Есть идея, потратить полчаса чтобы внятно сформулировать задачу. Из того что я понял в запросе тебе нужно два поля Первое:  =1 если значение заполнено "Дата пополнения"         =0 Если не заполнено Второе   =1 Группируеш это все по Комплектам с  Сумма(Первое) и Сумма(Втрое). и отбираеш по Имеющее (Сумма(Первое)<>Сумма(Втрое)
#2 by Andrey07070707
спасибо. Сейчас меня выгоняют уже... дома еще помаюсь, если так и не получиться, подробно объясню задачку, с самого начала, а то чувствую просто смотрю в другую сторону и элементарного не вижу.
#3 by Andrey07070707
+Итак, Здравствуйте. Ничего нового, проблемка в запросе по всей видимости. сейчас подробно опишу что имеем и что необходимо. Имеем: 1) регистр сведений "РегистрацияДистрибутивов" в нем измерения "Дистрибутив" и "НомерКомплекта", а также Ресурсы "Контрагент", "ТочкаОбслуживания". 2) Регистр сведений "СопровождениеДистрибутивов" с измерениями "Дистрибутив" и "ТочкаОбслуживания" и ресурсом "Сопровождается". 3) Регистр сведений "СопровождениеКонтрагентовСотрудниками" с измерениями "Контрагент" и "ТочкаОбслуживания" и ресурсом "Сотрудник" теперь о логике в 1 контрагенте может быть несколько ТочекОбслуживания, в 1 точке обслуживания может быть несколько Комплектов, в 1 комплекте может быть несколько Дистрибутивов. Я написал запрос который выбирает всех контрагентов, точки обслуживания комплекты и дистрибутивы которые сопровождает сотрудник: ИЗ                И ВидОперации = &ВидОперации) КАК РегистрацииДистрибутивовСрезПоследних        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СопровождениеДистрибутивов.СрезПоследних( также в конфе есть регистр сведений "ОбновленияДистрибутивов"  с измерениями "Контрагент", "ТочкаОбслуживания", "Дистрибутив", "ИнформационныйБанк" и "ДатаПополнения" вся логика идентичная, только добавляется ИнформационныйБанк в одном дистрибутиве может быть несколько Информационных Банков. А в "ДатаПополнения" содержится Дата когда сотрудник обновлял "ИнформационныйБанк". я написал так:    ОбновленияДистрибутивовСрезПоследних.ИнформационныйБанк КАК ИнформационныйБанк, ГДЕ    ОбновленияДистрибутивовСрезПоследних.ДатаПополнения МЕЖДУ &НачДата И &КонДата Соеденил с первым запросом по контрагенту, точке обслуживания и дистрибутиву левым соединением. В отчете мне нужно представить информацию  по "сотруднику" за период. выбрать все Информационные банки которые должны сопровождаться этим сотрудником. Далее разбить период по неделям и вывести столько колонок сколько недель в периоде. в неделе должна стоять дата последнего (в этой неделе) пополнения(ДатаПополнения). также нужна информация о том сколько в каждой неделе комплектов сопровождается(если есть пополнение какого-либо ИнформационногоБанка) тогда Комплект сопровождается, иначе нет. И соответственно количество отклонений от сопровождения(если Комплект не сопровождается). это основное. и последнее это итоговая колонка в ней должно быть общее количество комплектов у данного сотрудника(сопровождаемые и не сопровождаемые). Процент сопровождаемых комплектов(сумма комплектов по неделям/ количество недель * 100). так вот сейчас у меня выводит информацию по всем дистрибутивам сотрудника, но нужно еще посчитать и вывести те "Информационные Банки",в которых небыло пополнения, или были промежутки в пополнениях. в идеале сделать отбор по "Проценту сопровождаемых комплектов". и вывести только те комплекты в которых этот процент меньше 100. Ну вот так... подробнее я не объясню. прошу помощи у Garkin и IronDemon ну и у всех кто может помочь. Заранее спасибо.
#4 by Andrey07070707
подниму, а то утонула совсем.
#5 by Garkin
Во первых  тебе нужна таблица недель содержащая все недели периода (Проще всего передать запросу или СКД заранее подготовленную таблицу). Таблицу недель полным соединением соединяешь с таблицей содержащей Сотрудник, Комплект , ИнофмационныйБанк. Полученную таблицу полным соединением соединяешь с таблицей Сотрудник, Комплект , ИнофмационныйБанк,...,Неделя, ДатаПополнения, 1 (как количествоНедельОбслуживания)   сворачиваешь по всем измерениям с ресурсом "Максимум(ДатаПополнения)","Максимум(количествоНедельОбслуживания)" Потом полученную таблицу сворачиваешь по "Сотрудник, Комплект , ИнофмационныйБанк" с ресурсами Количество(ДатаПополнения), Количество(количествоНедельОбслуживания)
#6 by Andrey07070707
спасибо. прочитал, пока не понял, попытаюсь покрутиться в данном направлении может и сработает. с таблицей содержащей недели непонятно. как ее делать через вложенный запрос? у меня в рапросах завал. особенно там где периоды и счет проходит.
#7 by Garkin
Если делаешь запросом, то таблицу недель передаешь через менеджер временных таблиц, если через СКД, то через набор данных Объект. Гугли обсуждалось не раз. Можно конечно ее получить запросом к регистру сведений "Курсы валют" или аналогичному (если он конечно заполнен), тоже обсуждалось неоднократно.
#8 by Andrey07070707
спасибо сейчас посмотрю. тут курсов валют нету. интересно, с периодами такой гемор часто возникает?
#9 by Garkin
С периодами гемор всегда, в связи с тем что дополнение периода как запрос так и СКД делает в самую последнюю очередь, те. когда все запросы, соединения, группировки уже сделаны. Если бы, была уверенность что комплект обслуживает всегда один сотрудник, то можно было бы обойтись без таблицы дат, просто посчитать количество недель в периоде и передать его параметром запроса.
#10 by sapphire
Для СКД можно использовать внешний набор данных - недели...
#11 by sapphire
Впрочем и запрос-то, я бы написал по-другому :)))))
#12 by Andrey07070707
Так ведь у меня и так количество недель всегда одинаковое. я посчитал его как ВЫРАЗИТЬ((РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) + 1) / 7 КАК ЧИСЛО(5, 0)), а сотрудник ведь тут не имеет значения(как я понимаю). если комплект в данном периоде сопровождается то он сопровождается тем сотрудником, который его сопровождает. а как? в первый вложенный запрос добавить еще информационный банк, а из второго взять только даты?
#13 by Garkin
Ну это зависит от целей отчета, если просто узнать комплект в данном периоде сопровождается или нет тогда да, а если найти виноватого в том что комплект сопровождался не полностью тогда нет (насколько я понимаю что в течении периода ответственный сотрудник может поменяться.
#14 by Andrey07070707
да нет они тут по пол года не меняются, и нужно именно понять какие комплекты не сопровождаются. так что это не проблема.
#15 by Garkin
повезло.
#16 by Andrey07070707
я тем не менее не понял как можно без таблицы обойтись. раскажи пожалуйста по подробнее.
#17 by Garkin
Таблицу Сотрудник, Комплект , ИнофмационныйБанк. полным соединением соединяешь с таблицей Сотрудник, Комплект , ИнофмационныйБанк,...,Неделя, ДатаПополнения сворачиваешь по всем измерениям с ресурсом "Максимум(ДатаПополнения)" Потом полученную таблицу сворачиваешь по "Сотрудник, Комплект , ИнофмационныйБанк" с ресурсами Количество(ДатаПополнения) Ну и отбираешь по Количество(ДатаПополнения)   ЗЫ: ВЫРАЗИТЬ((РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) + 1) / 7 КАК ЧИСЛО(5, 0))   - ИМХО - не совсем верный способ посчитать кол-во недель.
#18 by Andrey07070707
да я знаю, сначала выеживался, а потом начал спрашивать что да как в отчете должно быть, и оказалось они делают либо по 4 недели либо 8 недель. с понедельника по воскресенье. я спрашивал а что насчет перехода между месяцами, они один хрен до конца недели ставят. тут мне повезло безмерно. завтра отпишусь а то сегодня уже не успеваю. Спасибо.
#19 by Andrey07070707
Здравствуйте, Для начала Огромное спасибо Garkin у меня вроде как получаться начало, только как стоит поступить если нужны дополнительные поля из Регистра сведений "ОбновленияДистрибутивов" к примеру Период. Когда я Добавляю его в одну из таблиц, это поле автоматом добавляется в поле группировки, и тем самым портит расчеты с количеством пополнений.(в смысле на некоторых информационных банках количество пополнений становится равно 2...вместо 1). как с этим бороться? Я именно логику пе понимаю. Пробывал делать отдельный набор данных, но боюсь СКД соединяет таблицы на клиенте, а это не вариант(слишком большая выборка). Я тут сейчас парюсь и не понимаю почему так получается.
#20 by Andrey07070707
Здравствуйте, вообщем продолжу просить помощи. Благодаря Garkin-у яполучилось вывести процент пополнений в группировке Информационный банк. Но ведь возникла вот какая проблема: например у одного контрагента есть 2 комплекта... в одном комплекте 4 Информационных банка и все сопровождались каждую неделю, а во втором комплекте 1 ИнформационныйБанк, и сопровождался он только 3 раза из 5. в итоге на уровне группировки Комплект у меня стоит 100 и 60 соответственно. а на уровень контрагент уже вылетает 92. (т.к. всего ИнфБанков у меня 5, а сумма всех процентов = 460. вот и получается что считает Сумму и делит ее на 5, а мне нужно на 2) попытался вывести различные итоги по группировкам, проблемка вылезла: среднее он не берет(неверные параметры в выражении). Спасибо если кто подскажет.
#21 by Garkin
см пост - простой, аморальный выход.
#22 by Andrey07070707
так это моя тема!!:))). я так и сделал, пусть и аморально. но отбор по данному полю сделать нельзя. (это и послужило созданию этой темы.)
#23 by Andrey07070707
+ причсем я еще в одном отчете написал тоже функцию в модуле приложения, и пришол к тому что не отбираются по ним данные. и проверить с посощю консоли неполучается... вылетает в ошибку. :(
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С