7.7 Обойти элементы справочника в группе

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем punkyklan, 8 май 2013.

  1. TopicStarter Overlay
    punkyklan
    Offline

    punkyklan Опытный в 1С

    Регистрация:
    12 дек 2012
    Сообщения:
    119
    Симпатии:
    0
    Баллы:
    26
    Мне необходимо получить данные из справочника сотрудники, у данного справочника есть группировки.делаю так:

    Спр = СоздатьОбъект("Справочник.Сотрудники");
    Спр.ВыбратьЭлементы(1);
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Спр1 = СоздатьОбъект("Справочник.Сотрудники");
    Спр1.ИспользоватьВладельца(спр.Наименование);
    Спр1.ВыбратьЭлементы(1);
    Пока Спр1.ПолучитьЭлемент() = 1 Цикл
    Фамилия1= строка(Спр1.Фамилия);
    конеццикла;
    конеццикла;

    При работе в отладчике, строки получает, видит владельца, но вот все данные пустые, как такое возможно?!
  2. Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    этот метод не сработает, потому что "спр.Наименование" - это не элемент справочника, а уже текст.
    нужно так:


    Код:
    Спр1.ИспользоватьВладельца(спр.ТекущийЭлемент())
    но в любом случае вся эта ваша конструкция очень странная. что вам нужно сделать конкретно?
  3. TopicStarter Overlay
    punkyklan
    Offline

    punkyklan Опытный в 1С

    Регистрация:
    12 дек 2012
    Сообщения:
    119
    Симпатии:
    0
    Баллы:
    26
    Выгрузить данные справочника в excel, для запроса данных слишком много, он не отрабатывает его, уже пыталась, теперь пробую перебором выгрузить данные
  4. TopicStarter Overlay
    punkyklan
    Offline

    punkyklan Опытный в 1С

    Регистрация:
    12 дек 2012
    Сообщения:
    119
    Симпатии:
    0
    Баллы:
    26
    У справочника Сотрудники есть группировки, мне нужно перебрать все элементы справочника, а для этого как я понимаю мне необходимо сначала перебирать группировки, а в них элементы справочника, вот это я и пытаюсь сделать
  5. Vlan
    Offline

    Vlan Гость Гость

    Не очень понятно, чего вы хотите добиться. Группировать можно и средствами Excel, а в выгрузке просто перебрать все элементы справочника, не забывая проверять, не группа ли это (Спр.ЭтоГруппа()), а также сохранять атрибуты (Спр.Родитель, Спр.Владелец). Только не забывайте выгружать не объект, а текст, то есть добавляйте атрибутам Наименование.
  6. Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    группировки, в смысле - группы? тогда ИспользоватьВладельца() здесь совсем не подходит.

    одного цикла вполне достаточно:

    Код:
    Спр = СоздатьОбъект("Справочник.Сотрудники");
    Спр.ВыбратьЭлементы(1);
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
    КонецЦикла;
    если группы не нужны в выгрузке, то в этом цикле сделаете проверку на ЭтоГруппа() и пропускаете их, если они попадаются.

    и почему запросом не получилось? может быть вы его просто не правильно написали? Пример запроса можно?
  7. TopicStarter Overlay
    punkyklan
    Offline

    punkyklan Опытный в 1С

    Регистрация:
    12 дек 2012
    Сообщения:
    119
    Симпатии:
    0
    Баллы:
    26
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =

    "//{{ЗАПРОС(Сформировать)
    |Родитель = Справочник.Сотрудники.Родитель;
    |ТабНомер = Справочник.Сотрудники.ТабНомер;
    |Фамилия = Справочник.Сотрудники.Фамилия;
    |Имя = Справочник.Сотрудники.Имя;
    |Отчество = Справочник.Сотрудники.Отчество;
    |ДатаПриема = Справочник.Сотрудники.ДатаПриема;
    |ДатаПриемаВГК = Справочник.Сотрудники.ДатаПриемаВГК;
    |ДатаУвольнения = Справочник.Сотрудники.ДатаУвольнения;
    |ДатаРождения = Справочник.Сотрудники.ДатаРождения;
    |Владелец = Справочник.Сотрудники.МестоРаботы.Владелец;
    |ДолжностьПрофессия = Справочник.Сотрудники.ДолжностьПрофессия;

    |Группировка Родитель Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ТабНомер Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка Фамилия Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка Имя Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка Отчество Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ДатаПриема Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ДатаПриемаВГК без упорядочивания без групп;
    |Без Итогов;
    |Группировка ДатаРождения Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ДатаУвольнения Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка Владелец Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ДолжностьПрофессия Без Групп Без Упорядочивания;
    |Без Итогов;
    |"//}}ЗАПРОС ;
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Предупреждение(ОписаниеОшибки()+"Не выполнен запрос!");
    Возврат;
    КонецЕсли;

    ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
    Если Запрос.Выгрузить(ТабЗнач)=0 Тогда
    Предупреждение(ОписаниеОшибки()+"Не удалось выгрузить запрос в таблицу");
    Возврат;
    КонецЕсли;
    н=1;

    ТабЗнач.ВыбратьСтроки();
    Пока Запрос.Группировка() = 1 Цикл
    Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
    //группа сотрудника
    Лист.cells(1+н,1).NumberFormat = "@";
    Лист.cells(1+н,1).value =строка(ТабЗнач.Родитель);
    Лист.Cells(1+н,1).Font.Name = "Times New Roman";
    Лист.Cells(1+н,1).Font.Size = "10";
    Лист.Cells(1+н,1).HorizontalAlignment = -4108;
    Лист.Cells(1+н,1).Borders.Linestyle =1;
    Лист.Cells(1+н,1).WrapText=1;
    ..............................................
    конеццикла;
    конеццикла;


    Данный запрос отрабатывается и все отлично выгружает
  8. TopicStarter Overlay
    punkyklan
    Offline

    punkyklan Опытный в 1С

    Регистрация:
    12 дек 2012
    Сообщения:
    119
    Симпатии:
    0
    Баллы:
    26
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =

    "//{{ЗАПРОС(Сформировать)
    |Родитель = Справочник.Сотрудники.Родитель;
    |ТабНомер = Справочник.Сотрудники.ТабНомер;
    |Фамилия = Справочник.Сотрудники.Фамилия;
    |Имя = Справочник.Сотрудники.Имя;
    |Отчество = Справочник.Сотрудники.Отчество;
    |ДатаПриема = Справочник.Сотрудники.ДатаПриема;
    |ДатаПриемаВГК = Справочник.Сотрудники.ДатаПриемаВГК;
    |ДатаУвольнения = Справочник.Сотрудники.ДатаУвольнения;
    |ДатаРождения = Справочник.Сотрудники.ДатаРождения;
    |Владелец = Справочник.Сотрудники.МестоРаботы.Владелец;
    |ДолжностьПрофессия = Справочник.Сотрудники.ДолжностьПрофессия;

    |Группировка Родитель Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ТабНомер Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка Фамилия Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка Имя Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка Отчество Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ДатаПриема Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ДатаПриемаВГК без упорядочивания без групп;
    |Без Итогов;
    |Группировка ДатаРождения Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ДатаУвольнения Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка Владелец Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ДолжностьПрофессия Без Групп Без Упорядочивания;
    |Без Итогов;
    |"//}}ЗАПРОС ;
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Предупреждение(ОписаниеОшибки()+"Не выполнен запрос!");
    Возврат;
    КонецЕсли;

    ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
    Если Запрос.Выгрузить(ТабЗнач)=0 Тогда
    Предупреждение(ОписаниеОшибки()+"Не удалось выгрузить запрос в таблицу");
    Возврат;
    КонецЕсли;
    н=1;

    ТабЗнач.ВыбратьСтроки();
    Пока Запрос.Группировка() = 1 Цикл
    Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
    //группа сотрудника
    Лист.cells(1+н,1).NumberFormat = "@";
    Лист.cells(1+н,1).value =строка(ТабЗнач.Родитель);
    Лист.Cells(1+н,1).Font.Name = "Times New Roman";
    Лист.Cells(1+н,1).Font.Size = "10";
    Лист.Cells(1+н,1).HorizontalAlignment = -4108;
    Лист.Cells(1+н,1).Borders.Linestyle =1;
    Лист.Cells(1+н,1).WrapText=1;
    ..............................................
    конеццикла;
    конеццикла;


    Данный запрос отрабатывается и все отлично выгружает



    Но если в запрос добавить еще строки
    |ПериодДопОтпуск_С= Справочник.Сотрудники.ПериодДопОтпуск_С;
    |ПериодДопОтпуск_По= Справочник.Сотрудники.ПериодДопОтпуск_По;
    |ПериодОтпуск= Справочник.Сотрудники.ПериодОтпуск;
    |ПериодОтпуск_По= Справочник.Сотрудники.ПериодОтпуск_По;
    |ДатаНачалаПоУходу= Справочник.Сотрудники.ДатаНачалаПоУходу;
    |ДатаОкончанияПоУходу= Справочник.Сотрудники.ДатаОкончанияПоУходу;
    |ПериодНенормОтпуск_С= Справочник.Сотрудники.ПериодНенормОтпуск_С;
    |ПериодСложОтпуск_С= Справочник.Сотрудники.ПериодСложОтпуск_С;

    |Группировка ПериодДопОтпуск_СБез Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ПериодДопОтпуск_ПоБез Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ПериодОтпуск Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ПериодОтпуск_По Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ДатаНачалаПоУходу Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ДатаОкончанияПоУходу Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ПериодНенормОтпуск_С Без Групп Без Упорядочивания;
    |Без Итогов;
    |Группировка ПериодСложОтпуск_С Без Групп Без Упорядочивания;
    |Без Итогов;

    Запрос не отрабатывается, зависает, но если попробовать два запроса отработать отдельно, то есть сначала один, потом его убрать и сделать другой, то все работает прекрасно
  9. Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    Наворотили вы.....
    вам группы нужны выгружать?

    Если только сотрудников, то текст запроса примерно такой:

    Код:
    |Сотрудник				   = Справочник.Сотрудники.ТекущийЭлемент;
    |ТабНомер		            = Справочник.Сотрудники.ТабНомер;
    |Фамилия					 = Справочник.Сотрудники.Фамилия;
    |Имя             			     = Справочник.Сотрудники.Имя;
    |Отчество					 = Справочник.Сотрудники.Отчество;
    |ДатаПриема			    = Справочник.Сотрудники.ДатаПриема;
    |ДатаПриемаВГК		  = Справочник.Сотрудники.ДатаПриемаВГК;
    |ДатаУвольнения		 = Справочник.Сотрудники.ДатаУвольнения;
    |ДатаРождения			 = Справочник.Сотрудники.ДатаРождения;
    |Владелец					 = Справочник.Сотрудники.МестоРаботы.Владелец;
    |ДолжностьПрофессия = Справочник.Сотрудники.ДолжностьПрофессия;
    |Группировка Сотрудник Без Групп Без Упорядочивания;
    т.е. не нужно делать миллион группировок, достаточно одной - Сотрудник.

    если есть периодические реквизиты, то период еще добавьте в текст запроса. и не нужно никакой промежуточной таблицы значений, в которую вы выгружаете запрос. Дальше в цикле по группировке обращаетесь к переменным запроса и выводите в Excel.
  10. TopicStarter Overlay
    punkyklan
    Offline

    punkyklan Опытный в 1С

    Регистрация:
    12 дек 2012
    Сообщения:
    119
    Симпатии:
    0
    Баллы:
    26
    Работает, спасибо

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