8.х Необязательная связь

Тема в разделе "Система компоновки данных (СКД)", создана пользователем Speaker1982, 15 апр 2015.

  1. TopicStarter Overlay
    Speaker1982
    Offline

    Speaker1982 Опытный в 1С

    Регистрация:
    12 май 2011
    Сообщения:
    223
    Симпатии:
    5
    Баллы:
    29
    Добрый день,

    подскажите пожалуйста, как правильно сделать необязательную связь двух таблиц

    Первая = Фильтр
    Колонки: СчетДт, СчетКт, Подразделение, СубконтоДт1, СубконтоДт2, СубконтоКт1, СубконтоКт2
    эта таблица описывает фильтр для регистра бухгалтерии что бы собирать "СуммаОборот"
    но в ней не всегда заполнены СубконтоДт1-2 и СубконтоКт1-2

    Я делаю связь ее с регистром бухгалтерии, и если связываю по СчетДт, СчетКт и Подразделение (а они в первой таблице всегда заполнены), то все норм

    Но мне надо связать еще по субконто, причем делать связь, если субконто в таблице1 заполнено и не делать - если не заполнено, т.к. если я явно связываю Фильтр.СубконтоДт1 = Бух.СубконтоДт1 то цифры идут только по тем строкам, где оно заполнено в таблице1 и соответственно отбрасывает где пустое.

    Я побывал по разному, и выставлял флаг=булево Выбор когда Фильтр.СубконтоДт1 = Неопределено Тогда ЛОЖЬ иначе Истина --- это для примера, я тут прописывал все условия, которые может принимать это субконто, и этот флаг принимал значение ЛОЖЬ в нужном случае, но он почему то не учитывается в колонке "Условие связи" и связь все равно строится...
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Пока не задумывался глубоко над вашим вопросом.
    Что там у вас с галочкой "Обязательная связь"?
  3. TopicStarter Overlay
    Speaker1982
    Offline

    Speaker1982 Опытный в 1С

    Регистрация:
    12 май 2011
    Сообщения:
    223
    Симпатии:
    5
    Баллы:
    29
    Я не знаю задач, где бы эта галочка была снята, она тут точно не причем - установлена
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Сегодня уже не успеваю - завтр анапомните - гляну
  5. TopicStarter Overlay
    Speaker1982
    Offline

    Speaker1982 Опытный в 1С

    Регистрация:
    12 май 2011
    Сообщения:
    223
    Симпатии:
    5
    Баллы:
    29
    Код:
    ВЫБРАТЬ
       ПодразделенияУПРСписокПодразделений.Ссылка КАК ПодразделениеУПР,
       ПодразделенияУПРСписокПодразделений.Подразделение КАК ПодразделениеБУХ,
       ПодразделенияУПРСписокСчетов.Статья КАК Статья_ПиС,
       ПодразделенияУПРСписокСчетов.СчетДТ КАК СчетДТ_ПиС,
       ПодразделенияУПРСписокСчетов.СчетКТ КАК СчетКТ_ПиС,
       ПодразделенияУПРСписокСчетов.СубконтоДт1 КАК СубконтоДт1_ПиС,
       ПодразделенияУПРСписокСчетов.СубконтоДт2 КАК СубконтоДт2_ПиС,
       ПодразделенияУПРСписокСчетов.СубконтоКт1 КАК СубконтоКт1_ПиС,
       ПодразделенияУПРСписокСчетов.СубконтоКт2 КАК СубконтоКт2_ПиС
    ПОМЕСТИТЬ Фильтр
    ИЗ
       Справочник.ПодразделенияУПР.СписокПодразделений КАК ПодразделенияУПРСписокПодразделений
         ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияУПР.СписокСчетов КАК ПодразделенияУПРСписокСчетов
         ПО ПодразделенияУПРСписокПодразделений.Ссылка = ПодразделенияУПРСписокСчетов.Ссылка
    ГДЕ
       ПодразделенияУПРСписокПодразделений.Ссылка.ЭтоГруппа = ЛОЖЬ
    
    СГРУППИРОВАТЬ ПО
       ПодразделенияУПРСписокПодразделений.Ссылка,
       ПодразделенияУПРСписокСчетов.СчетДТ,
       ПодразделенияУПРСписокПодразделений.Подразделение,
       ПодразделенияУПРСписокСчетов.СубконтоКт1,
       ПодразделенияУПРСписокСчетов.Статья,
       ПодразделенияУПРСписокСчетов.СчетКТ,
       ПодразделенияУПРСписокСчетов.СубконтоДт2,
       ПодразделенияУПРСписокСчетов.СубконтоДт1,
       ПодразделенияУПРСписокСчетов.СубконтоКт2
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ РАЗЛИЧНЫЕ
       ХозрасчетныйОборотыДтКт.СуммаОборот КАК СуммаОборот,
       Фильтр.ПодразделениеУПР КАК ПодразделениеУПР,
       Фильтр.Статья_ПиС КАК Статья_ПиС,
       ПРЕДСТАВЛЕНИЕССЫЛКИ(Фильтр.ПодразделениеУПР) КАК ПодразделениеУПРПредставление,
       Фильтр.ПодразделениеУПР.Наименование КАК ПодразделениеУПРНаименование,
       ПРЕДСТАВЛЕНИЕССЫЛКИ(Фильтр.Статья_ПиС) КАК Статья_ПиСПредставление,
       Фильтр.Статья_ПиС.Наименование КАК Статья_ПиСНаименование
    ИЗ
       Фильтр КАК Фильтр
         ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода, Авто, , , , , ) КАК ХозрасчетныйОборотыДтКт
         ПО Фильтр.СчетДТ_ПиС = ХозрасчетныйОборотыДтКт.СчетДт
           И Фильтр.СчетКТ_ПиС = ХозрасчетныйОборотыДтКт.СчетКт
           И Фильтр.ПодразделениеБУХ = ХозрасчетныйОборотыДтКт.ПодразделениеДт
           И Фильтр.СубконтоДт1_ПиС = ХозрасчетныйОборотыДтКт.СубконтоДт1
           И (Фильтр.СубконтоДт2_ПиС В (ХозрасчетныйОборотыДтКт.СубконтоДт2))
           И (Фильтр.СубконтоКт1_ПиС В (ХозрасчетныйОборотыДтКт.СубконтоКт1))
           И (Фильтр.СубконтоКт2_ПиС В (ХозрасчетныйОборотыДтКт.СубконтоКт2))
    ГДЕ
       ХозрасчетныйОборотыДтКт.СуммаОборот <> 0
       И Фильтр.ПодразделениеУПР В ИЕРАРХИИ(&ПодразделениеУПР)
    
    СГРУППИРОВАТЬ ПО
       Фильтр.ПодразделениеУПР,
       Фильтр.Статья_ПиС,
       ХозрасчетныйОборотыДтКт.СуммаОборот,
       Фильтр.ПодразделениеУПР.Наименование,
       Фильтр.Статья_ПиС.Наименование
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ РАЗЛИЧНЫЕ
       ХозрасчетныйОборотыДтКт.СуммаОборот,
       Фильтр.ПодразделениеУПР,
       Фильтр.Статья_ПиС,
       ПРЕДСТАВЛЕНИЕССЫЛКИ(Фильтр.ПодразделениеУПР),
       Фильтр.ПодразделениеУПР.Наименование,
       ПРЕДСТАВЛЕНИЕССЫЛКИ(Фильтр.Статья_ПиС),
       Фильтр.Статья_ПиС.Наименование
    ИЗ
       Фильтр КАК Фильтр
         ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&П, &П2, Авто, , , , , ) КАК ХозрасчетныйОборотыДтКт
         ПО Фильтр.СчетДТ_ПиС = ХозрасчетныйОборотыДтКт.СчетДт
           И Фильтр.СчетКТ_ПиС = ХозрасчетныйОборотыДтКт.СчетКт
           И Фильтр.ПодразделениеБУХ = ХозрасчетныйОборотыДтКт.ПодразделениеКт
           И Фильтр.СубконтоДт1_ПиС = ХозрасчетныйОборотыДтКт.СубконтоДт1
           И (Фильтр.СубконтоДт2_ПиС В (ХозрасчетныйОборотыДтКт.СубконтоДт2))
           И (Фильтр.СубконтоКт1_ПиС В (ХозрасчетныйОборотыДтКт.СубконтоКт1))
           И (Фильтр.СубконтоКт2_ПиС В (ХозрасчетныйОборотыДтКт.СубконтоКт2))
    ГДЕ
       ХозрасчетныйОборотыДтКт.СуммаОборот <> 0
       И Фильтр.ПодразделениеУПР В ИЕРАРХИИ(&ПодразделениеУПР)
    
    СГРУППИРОВАТЬ ПО
       Фильтр.ПодразделениеУПР,
       Фильтр.Статья_ПиС,
       ХозрасчетныйОборотыДтКт.СуммаОборот,
       Фильтр.ПодразделениеУПР.Наименование,
       Фильтр.Статья_ПиС.Наименование
    Вот эти условия как бы использовать в скд только тогда, когда Фильтр.СубконтоДтX_ПиС имеет значение
    Код:
    И (Фильтр.СубконтоДт2_ПиС В (ХозрасчетныйОборотыДтКт.СубконтоДт2))
           И (Фильтр.СубконтоКт1_ПиС В (ХозрасчетныйОборотыДтКт.СубконтоКт1))
           И (Фильтр.СубконтоКт2_ПиС В (ХозрасчетныйОборотыДтКт.СубконтоКт2))
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Давайте поясню быстро как действует галочка свзяь обазательна - в СКД когда два на набора соединяете если галоска не стоит т.е связь не обязательна и если в СКд в выводимые поля или группировки не выводятся данные из таблицы справа в этой связи то данная таблица в звпросе не учавствует.
  7. TopicStarter Overlay
    Speaker1982
    Offline

    Speaker1982 Опытный в 1С

    Регистрация:
    12 май 2011
    Сообщения:
    223
    Симпатии:
    5
    Баллы:
    29
    Именно, но если я сниму галку - вывод запроса такой же, как будто я вообще уберу эту связь, а так цифры не правильные
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    В вашем случае данная галка смысла не имеет т.к по одним подразделениям допустим есть а по другим нет - соответвенно в выводимые данные Вам надо брать эти поля и таблицу эту отсеивать целиком нельзя
  9. TopicStarter Overlay
    Speaker1982
    Offline

    Speaker1982 Опытный в 1С

    Регистрация:
    12 май 2011
    Сообщения:
    223
    Симпатии:
    5
    Баллы:
    29
    Именно, мне надо брать по каждой строчке из Фильтра и смотреть оборот из регистра бухгалтерии, как??
  10. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Несколько строк из фильтра покажите.
    --- Объединение сообщений, 15 апр 2015 ---
    И еще вопрос: запрос к регистру бухгалтерии идет по определенной группе счетов (например: отчет пишется только для взаиморасчетных счетов 60,62,76 или отчет пишется только для счетов по запасам: 10,41) или же вообще по произвольному счету из плана счетов?
    --- Объединение сообщений, 15 апр 2015 ---
    Значения в "Фильтр" - откуда берутся?
    Последнее редактирование: 15 апр 2015
  11. TopicStarter Overlay
    Speaker1982
    Offline

    Speaker1982 Опытный в 1С

    Регистрация:
    12 май 2011
    Сообщения:
    223
    Симпатии:
    5
    Баллы:
    29
    Все это в Бух. 2.0...Есть справочник ПодразделенияУПР где 2 табл. части, одна это список подразделений из Справочник.ПодразделенияОрганизаций
    а вторая - это СписокСчетов, где есть реквизиты СчетДт, Субконт(а)Дт, СчетКт,Субконт(а)Кт и там какие то субконто заполнены а какие то нет, все субконто там = Характеристика.ВидыСубконтоХозрасчетные
    --- Объединение сообщений, 15 апр 2015 ---
    По произвольному списку, который указан в табл. части справочника
    Если я пишу запрос руками т.е. делаю выборку счетов(фильтра) по конкретному подразделению, потом когда по нему иду - делаю выборку по регистру бухгалтерии и там, в зависимости от заполненности реквизита субконто я добавляю или не добавляю в текст запроса условие по нему и тогда все красиво

    но мне надо именно на СКД, т.к. красивую иерархию и промежуточные итоги я задолбаюсь руками рисовать

    Вложения:

    Последнее редактирование: 15 апр 2015
  12. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Speaker1982 честно говоря, я не до конца понял принцип формирования фильтра и то что показано на рисунках.
    Решение предложить могу в зависимости от ответа на следующий вопрос: в связи с чем возникла необходимость делать отчет, используя два набора данных? Почему нельзя все сделать в одном наборе?
  13. TopicStarter Overlay
    Speaker1982
    Offline

    Speaker1982 Опытный в 1С

    Регистрация:
    12 май 2011
    Сообщения:
    223
    Симпатии:
    5
    Баллы:
    29
    Запрос я привел - это один набор и он отрабатывает хорошо, помимо косяка с субконто, но в нем я не знаю как сделать необязательное условие на субконто, но зато в СКД есть условие связи между двумя наборами - может быть я его не правильно использовал
    --- Объединение сообщений, 15 апр 2015 ---
    Фильтр этот руками создан, бухгалтера знают из каких проводок им нужны цифры в определенные статьи затрат - это реализация управленческого учета, где то отбор по субконто не нужен, а где то нужен...вот и вопрос возник, как средствами СКД добавлять условие типа Если Фильтр.СубконтоДт2 <> Неопределено Тогда Запрос = Запрос + ГДЕ Фильтр.СубконтоДт2 = Бух.СубконтоДт2 иначе всё)
  14. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Speaker1982 если я правильно понял что надо получить сделайте это все в одном наборе. Зачем вам несколько наборов, зачем в них какие-то соединения в принципе?
    Я напишу условно что имею ввиду:
    Код:
    ВЫБРАТЬ
    Фильтр.СчетДт,
    Фильтр.СчетКт,
    Фильтр.Субконто1,
    Фильтр.Субконто2
    Поместить ВТ_Фильтр
    ;
    Выбрать
    Хозрасчетный.СчетДт,
    Хозрасчетный.СчетКт,
    Хозрасчетный.Субконто1,
    Хозрасчетный.Субконто2,
    Хозрасчетный.СуммаОборот
    ИЗ
    РегистрыБухгалтерии.Хозрасчетный.Обороты(,, СчетДТ В (ВЫБРАТЬ Т.СчетДт ИЗ Фильтр КАК Т), СчетКТ В (ВЫБРАТЬ Т.СчетКт ИЗ Фильтр КАК Т),,,,) КАК Хозрасчетный
    
    (я без конфигуратора пишу, параметры виртуальной таблицы посмотрите, какой там какой). Т.е. Используйте данные в таблице Фильтра именно как фильтр, т.е. просто в условиях виртуальной таблицы бухгалтерского регистра.
  15. TopicStarter Overlay
    Speaker1982
    Offline

    Speaker1982 Опытный в 1С

    Регистрация:
    12 май 2011
    Сообщения:
    223
    Симпатии:
    5
    Баллы:
    29
    Хорошо, те же самые цифры, а как быть с субконто ДТ123, КТ123?
  16. TopicStarter Overlay
    Speaker1982
    Offline

    Speaker1982 Опытный в 1С

    Регистрация:
    12 май 2011
    Сообщения:
    223
    Симпатии:
    5
    Баллы:
    29
    Если в Условие пише так:
    СубконтоДт1 В
    (ВЫБРАТЬ
    Т.СубконтоДт1_ПиС
    ИЗ
    Фильтр КАК Т)
    И СубконтоДт2 В
    (ВЫБРАТЬ
    Т.СубконтоДт2_ПиС
    ИЗ
    Фильтр КАК Т)
    И СубконтоКт1 В
    (ВЫБРАТЬ
    Т.СубконтоКт1_ПиС
    ИЗ
    Фильтр КАК Т)
    И СубконтоКт2 В
    (ВЫБРАТЬ
    Т.СубконтоКт2_ПиС
    ИЗ
    Фильтр КАК Т)
    то пусто вообще
    --- Объединение сообщений, 15 апр 2015 ---
    Может надо копать в сторону настроек самой СКД, игнорировать значение NULL и роли правильно настроить?
  17. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Speaker1982 я не понимаю.
    Еще раз, как я понял условие задачи.
    Есть:
    Таблица1. Ее поля
    -СчетДт
    -СчетКт
    -Субконто1
    -Субконто2
    Эти поля всегда заполнены

    Таблица2. Ее поля
    -СчетДт
    -СчетКт
    -Субконто1
    -Субконто2
    -СуммаОборот
    Это выборка из хозрасчетного регистра, СчетДт и СчетКт также заполнены всегда, Субконто не обязательно заполнены.

    Вопрос был в том, что если Субконто в Таблице2 не заполнены то в связи учитывать только СчетДт, и СчетКт, если же Субконто заполнены, то связать Таблицу2 с Таблицей1 еще и по этим Субконто.
    Я правильно понял?


    Если да, то я не понимаю ни последний комментарий ни то, для чего вообще соединение какое-то делать или использовать зачем-то конструкцию ВЫБОР.

    Достаточно в условии виртуальной таблицы регистра бухгалтерии (Таблица2) указать отбор по полям СчетДт и СчетКт из Таблицы1, и в итоге получить на выходе то что нужно, поскольку в выборку попадут только счета удовлетворяющие СчетДт, СчетКт, а на субконто в этом случае вообще зачем какое-то условие накладывать, если по условию все равно все субконто из Таблицы2 нужны, и пустые и не пустые.
  18. TopicStarter Overlay
    Speaker1982
    Offline

    Speaker1982 Опытный в 1С

    Регистрация:
    12 май 2011
    Сообщения:
    223
    Симпатии:
    5
    Баллы:
    29
    СчетДт, СчетКт, СубконтоДт1,СубконтоДт2,СубконтоДт3, СубконтоКт1, СубконтоКт2, СубконтоКт3 ...на скрине же видно

    Наоборот, если субконто в таблице1 не заполнены, в бухгалтерии то часто все заполнены, документы ж проводки делают по правилам...

    В том то и дело, что задача нетривиальная, и тут, на мой взгляд 2 варианта, либо где то какие то ньюансты не учтены в настройке СКД или все таки писать все руками(
    --- Объединение сообщений, 16 апр 2015 ---
    Фильтр - он же говорит сам за себя, отфильтровать по каждой строчке (СчетДТ, СчетКТ, СубконтоДт1,2,3, СубконтоКт1,2,3) регистр бухгалтерии и просуммировать суммаоборот

    +я же привел текст запроса вверху, там видно же левое соединение регистрабух к фильтру
    Последнее редактирование: 16 апр 2015
  19. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    НУ что то все читать сейчас времени нет.
    Варианты какие
    1. смотрите вы писали "
    Если я пишу запрос руками т.е. делаю выборку счетов(фильтра) по конкретному подразделению, потом когда по нему иду - делаю выборку по регистру бухгалтерии и там, в зависимости от заполненности реквизита субконто я добавляю или не добавляю в текст запроса условие по нему и тогда все красиво

    но мне надо именно на СКД, т.к. красивую иерархию и промежуточные итоги я задолбаюсь руками рисовать
    "
    Из этого я так понял у Вас ручками это все реализовано. так вот берете эту реализацию. Записываете эти данные в ТЗ, эту ТЗ передаете через набор данных в ТЗ и СКД по сути дела и будет делать то что вы хотели, а имено выводить и рисовать то что вы ей передали.
    Т.е Вы обработали - получили даные - передали их в СКдона их отрисовала
    2. Вариант это при связи наборов данных поле Условие связи. СКД всегда сомтрит надо соединять или нет. это поле - это поле выражения языка СКД. как вариант там можно прописать либо через Выбор тогда проверку на NUll результат правой таблицы и от этого Истина или Ложь. Либо свою функцию в общем модуле накататькуда передавали знаяениеа оно возвращало заполено оно или нет. исходя из этого должна будет работть соединять или нет.
    Но надо проверять - на это времени пока нет
  20. TopicStarter Overlay
    Speaker1982
    Offline

    Speaker1982 Опытный в 1С

    Регистрация:
    12 май 2011
    Сообщения:
    223
    Симпатии:
    5
    Баллы:
    29
    2 вариант я весь испробывал вдоль и поперек, счас попробую первый и передавать объект в СКД....

Поделиться этой страницей