7.7 Объединение двух справочников (в запросе)

Тема в разделе "Типовые решения "1С:Предприятие 7.7"", создана пользователем nestov, 2 фев 2012.

  1. TopicStarter Overlay
    nestov
    Offline

    nestov Опытный в 1С

    Регистрация:
    25 апр 2011
    Сообщения:
    65
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте! У меня вот такая проблема: имеются два справочника (не подчиненные не к чему): ДоплатыЗаУченуюСтепень и ДоплатыЗаУченуюСтепень, и есть справочник КадровыеДанные, откуда нужно брать сотрудников (в частности поля степень и звание). Нужно вывести все звания и степени человек с суммарными ставками и по каждой степень и по каждому званию указать соответствующую ставку1гоРазряда. Но у меня не получается обьединить справочники ДоплатыЗаУченуюСтепень и ДоплатыЗаУченуюСтепень, значение выводятся отдельно, не группируются (т.е. не в одной строке), вот скрин: Посмотреть вложение 10078
    Как мне обьединить поля, через запрос, чтобы выводилась, например, строка: Профессор, Доктор наук, 8 (ставки), 4 и 6 (ставки 1-го разряда) в одной строке?
    вот мой код:

    Код:
    Процедура Сформировать()
    Перем Запрос, Сумма,сумма2, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |УченоеЗвание = Справочник.КадровыеДанные.УченоеЗвание, Справочник.ДоплатыЗаУченыеЗвания.УченоеЗвание;
    |УченаяСтепень = Справочник.КадровыеДанные.УченаяСтепень.УченаяСтепень, Справочник.ДоплатыЗаУченуюСтепень.УченаяСтепень;
    |ЧислоСтавокДляППС = Справочник.ДоплатыЗаУченуюСтепень.ЧислоСтавокДляППС;
    |ЧислоСтавокДляППС1 = Справочник.ДоплатыЗаУченыеЗвания.ЧислоСтавокДляППС;
    |Владелец = Справочник.КадровыеДанные.Владелец.Ставка;
    |Функция ВладелецСумма = Сумма(Владелец);
    |Группировка УченоеЗвание;
    |Группировка УченаяСтепень;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
    Пока Запрос.Группировка(2) = 1 Цикл
    //Здесь потом еще просто будет умножение на число
    ЧислоСтавокДляППС=запрос.ЧислоСтавокДляППС;//* 1400
    ЧислоСтавокДляППС1=запрос.ЧислоСтавокДляППС1;//*1200
    // 
    Таб.ВывестиСекцию("УченаяСтепень");
    КонецЦикла;
    КонецЦикла;
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
    КонецПроцедуры
    
    

    Вложения:

    • Исход_.jpg
      Исход_.jpg
      Размер файла:
      53,1 КБ
      Просмотров:
      75
  2. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Опишите тут ваше задание, а не вариант решения. Что-то мне подсказывает, что тут надо делать по другому.
  3. TopicStarter Overlay
    nestov
    Offline

    nestov Опытный в 1С

    Регистрация:
    25 апр 2011
    Сообщения:
    65
    Симпатии:
    0
    Баллы:
    26
    ну я же написал: нужно вывести в отчете Степени и Звания, которые принадлежат человеку, с суммарными ставками (по всем у кого есть такие звания и степени) и чтобы уже в этой же строке отображалось число Ставок1-гоРазряда (из других неподчиненных справочников). У меня это все выводится, но в одну строку не получается сгруппировать, чтобы, например, отображалось Звание-Степень-Ставки-ЧислоСт1-гоРазряда (последнее поле, как показано на картинке, в одной строке не отображается)
  4. TopicStarter Overlay
    nestov
    Offline

    nestov Опытный в 1С

    Регистрация:
    25 апр 2011
    Сообщения:
    65
    Симпатии:
    0
    Баллы:
    26
    помогите пожалуйста как решить эту проблему
  5. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Ну, например, лично я не понимаю, что такое
    Чем отличаются 2 справочника с одинаковым идентификатором? (или он все же разный, но я эту разницу не заметил).

    Так же хотелось бы видеть структуру (т.е. МДшник).

    Кто мешает эту информацию получить отдельно (например, в ТЗ), а потом при выводе отчета пользоваться ею?
  6. TopicStarter Overlay
    nestov
    Offline

    nestov Опытный в 1С

    Регистрация:
    25 апр 2011
    Сообщения:
    65
    Симпатии:
    0
    Баллы:
    26
    ой, сорри: имеются справочники: ДоплатыЗаУченуюСтепень и доплатыЗаУченоеЗвание - они разные. там в коде написаны.
    через запрос можно ли как-нибудь обьединить, чтобы в одной строке все выводилось, а не так как на картинке?
  7. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Видимо будем долго биться :D

    Повторю еще раз.
    1. Опиши конкретную цель, которую хочешь добиться (по шагам, подробно). Обычно после этого, такие вопросы снимаются сами.
    2. Если все же вопрос не отпал, то меняй направление мысли - откажись от запроса, или раздели его на несколько частей.

    Если хочешь, что бы тебе кто-то помог, так дай больше информации, последовательной, структурной. (Для примера, попроси кого-нить из "своих" прочитать твой вопрос и пояснить, что в нем написано... если придется на пальцах рассказывать, что имелось в виду - значит вопрос построен не верно)
  8. Ankaen
    Offline

    Ankaen Опытный в 1С

    Регистрация:
    13 окт 2011
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    Кроме мд'шника ещё бы хотелось видеть ожидаемый результат (итоговую форму отчёта)
  9. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    чтобы понять как объединить справочники в запросе, надо понять через чего их вообще можно соединить, для этого надо знать структуру справочников
  10. TopicStarter Overlay
    nestov
    Offline

    nestov Опытный в 1С

    Регистрация:
    25 апр 2011
    Сообщения:
    65
    Симпатии:
    0
    Баллы:
    26
    Вот я приблизительно знаю, через что их можно соединить. Есть справочник КадровыеДанные, которые содержит такие же поля как и мои другие два справочника. В тексте, в коде запроса можно все это понять. посмотрите
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вы же в запросе не включаете функцию по ставкам.... Поэтому так и получается в отчете.
  12. TopicStarter Overlay
    nestov
    Offline

    nestov Опытный в 1С

    Регистрация:
    25 апр 2011
    Сообщения:
    65
    Симпатии:
    0
    Баллы:
    26
    Добавляю функции и ничего совершенно не изменяется. Так же выводится отчет.
    Мои Ставки1-гоРазряда почему выводятся только в тех строках, где имеется только одно звание или степень.
  13. TopicStarter Overlay
    nestov
    Offline

    nestov Опытный в 1С

    Регистрация:
    25 апр 2011
    Сообщения:
    65
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |УченоеЗвание = Справочник.КадровыеДанные.УченоеЗвание, Справочник.ДоплатыЗаУченыеЗвания.УченоеЗвание;
    |УченаяСтепень = Справочник.КадровыеДанные.УченаяСтепень.УченаяСтепень, Справочник.ДоплатыЗаУченуюСтепень.УченаяСтепень;
    |ЧислоСтавокДляППС = Справочник.ДоплатыЗаУченуюСтепень.ЧислоСтавокДляППС;
    |ЧислоСтавокДляППС1 = Справочник.ДоплатыЗаУченыеЗвания.ЧислоСтавокДляППС;
    |Владелец = Справочник.КадровыеДанные.Владелец.Ставка;
    |Функция ВладелецСумма = Сумма(Владелец);
    |Функция ЧислоСтавокДляППССумма = Сумма(ЧислоСтавокДляППС);
    |Функция ЧислоСтавокДляППС1Сумма = Сумма(ЧислоСтавокДляППС1);
    |Группировка УченаяСтепень;
    |Группировка УченоеЗвание;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
    // Заполнение полей УченаяСтепень
    
    Пока Запрос.Группировка(2) = 1 Цикл
    // Заполнение полей УченоеЗвание
    Таб.ВывестиСекцию("УченоеЗвание");
    КонецЦикла;
    КонецЦикла;
    // Заполнение полей "Итого"
    
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
    КонецПроцедуры
    
    вот что получается
    Посмотреть вложение 10348
    а нужно чтобы эти ставки выводились на свои места в одной строке.
    Может быть что-то можно прописать дополнительно, чтобы соединить, свернуть в единое все...

    Вложения:

    • 1с.jpg
      1с.jpg
      Размер файла:
      75,1 КБ
      Просмотров:
      51
  14. TopicStarter Overlay
    nestov
    Offline

    nestov Опытный в 1С

    Регистрация:
    25 апр 2011
    Сообщения:
    65
    Симпатии:
    0
    Баллы:
    26
    Через ТаблицуЗначений тоже выводит все не в одной строке :(
  15. TopicStarter Overlay
    nestov
    Offline

    nestov Опытный в 1С

    Регистрация:
    25 апр 2011
    Сообщения:
    65
    Симпатии:
    0
    Баллы:
    26
    Я заметил, что если я возьму только два справочника в запросе, например, КадровыеДанные и ДоплатыЗаЗвание (или КадровыеДанные и ДоплатыЗаСтепень), то у меня все сгруппирует как положено! А когда беру все три справочника, то не соединяет все, не группирует :(
  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Попробуйте добавить в запрос Без итогов
  17. TopicStarter Overlay
    nestov
    Offline

    nestov Опытный в 1С

    Регистрация:
    25 апр 2011
    Сообщения:
    65
    Симпатии:
    0
    Баллы:
    26
    ничего не изменилось :(
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Стукните в аську. Гляну онлайн
  19. TopicStarter Overlay
    nestov
    Offline

    nestov Опытный в 1С

    Регистрация:
    25 апр 2011
    Сообщения:
    65
    Симпатии:
    0
    Баллы:
    26
    написал в аську
    попробовал через ТЗ, в кратце получается вот так:

    Код:
     КадрДанные.ИспользоватьВладельца(СпрСотр.ТекущийЭлемент());
    КадрДанные.ВыбратьЭлементы();
    Пока кадрДанные.ПолучитьЭлемент()=1 цикл
    Таб.НоваяСтрока();
    Таб.Степень=КадрДанные.УченаяСтепень.ученаястепень;
    Таб.Звание=КадрДанные.УченоеЗвание;
    Таб.Ставка=?(ПустоеЗначение(ПрикДл.Приказ.ВнСовместитель)=1,СпрСотр.Ставка,ПрикДл.Приказ.ВнСовместитель.Ставка.Получить(ДатаОт));			   
    Таб.Совместитель=ПрикДл.Приказ.ВнСовместитель;
    ДопУчЗв.НайтиЭлемент(КадрДанные.УченоеЗвание);
    Таб.ЧислоСтавокДляППС=ДопУчЗв.ЧислоСтавокДляППС.Получить(ДатаОт);
    
    ДопУчСт.НайтиЭлемент(КадрДанные.УченаяСтепень);
    Таб.ЧислоСтавокНеППС=ДопУчСт.ЧислоСтавокНеППС;
    КонецЦикла;
    ...
    Таб.Свернуть("Звание,Степень,ЧислоСтавокНеППС,ЧислоСтавокДляППС","Ставка");
    Но все-равно не хочет выводить.
  20. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104

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