|   |   | 
| 
 | v7: Периодический реквизит получить все значения | ☑ | ||
|---|---|---|---|---|
| 0
    
        ded20ded 11.05.13✎ 16:52 | 
        Добрый день
  с помощью получаю все заполненные у сотрудника ПКГ (пусть для примера подразделения) пер=создатьобъект("Периодический"); СпрСотрудники = СоздатьОбъект("Справочник.Сотрудники"); СпрСотрудники.ВыбратьЭлементы(); Пока СпрСотрудники.ПолучитьЭлемент()=1 Цикл Если СпрСотрудники.ЭтоГруппа()=0 Тогда Если СпрСотрудники.ОсновнойЭлемент=СпрСотрудники.ТекущийЭлемент() Тогда пер.ИспользоватьОбъект("ПКГ",СпрСотрудники.ТекущийЭлемент()); пер.выбратьзначения(НачДата,КонДата); Пока пер.получитьЗначение()=1 цикл Оклад=СпрСотрудники.Оклад.Получить(пер.ДатаЗнач); сообщить(СокрЛП(СпрСотрудники.ТекущийЭлемент())+" Оклад "+Оклад +" "+пер.ДатаЗнач+" Значение: "+СокрЛП(пер.Значение)+" "+пер.Значение.Родитель+" док "+пер.ТекущийДокумент()+" оклад по ПКГ "+пер.Значение.Оклад); КонецЦикла; КонецЕсли; КонецЕсли; а как получить все данные ПКГ (подразделения) и привязать к ним сотрудников и получить ПКГ СОТРУДНИКИ и ПКГ у которых не выбран ни один сотрудник? | |||
| 1
    
        Svetka 11.05.13✎ 16:57 | 
        (0) Вам нужно вывести все подразделения и кто когда в них работал/не работал?     | |||
| 2
    
        ded20ded 11.05.13✎ 16:59 | 
        Мне нужно вывести все подразделения, всех людей которые работали в этих подразделениях и если есть подразделения пустышки их тоже вывести.     | |||
| 3
    
        Svetka 11.05.13✎ 17:05 | 
        ТЗПодр - справочник подразделения
  ТЗСотр - История по сотрудникам реквизита подразделения ТЗИтог - влить ТЗПодр и ТЗСотр и свернуть по реквизиту подразделения | |||
| 4
    
        ded20ded 11.05.13✎ 17:07 | 
        пример можно?     | |||
| 5
    
        Svetka 11.05.13✎ 17:08 | ||||
| 6
    
        Svetka 11.05.13✎ 17:15 | 
        или 
  перебираешь справочник подразделения, спозиционировался, идешь в справочник сотрудники и перебираешь историю реквизита подразделения. Если совпадает - выводишь сотрудника. Т.е. придется перелопатить справочник сотрудники столько раз, сколько элементов с правочнике подразделения. | |||
| 7
    
        EvgeniuXP 11.05.13✎ 17:22 | 
        или
  заполнить одну таблицу подразделениями заполнить другую таблицу сотрудниками с историей сделать соединение двух таблиц 1С++ | |||
| 8
    
        sttt 11.05.13✎ 18:32 | 
        (6) землячка))     | |||
| 9
    
        ded20ded 11.05.13✎ 19:00 | 
        Сделал так
  Процедура Сформировать() Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); Таб.ВывестиСекцию("Шапка"); Таб.Опции(0,0,Таб.ВысотаТаблицы(),0); ТЗПКГ = СоздатьОбъект("ТаблицаЗначений"); ТЗПКГ.НоваяКолонка("Родитель",,,); ТЗПКГ.НоваяКолонка("ПКГ", "Справочник.ПКГ"); ТЗПКГ.НоваяКолонка("Оклад", "Число", 19,2); ТЗПКГСотрудник = СоздатьОбъект("ТаблицаЗначений"); ТЗПКГСотрудник.НоваяКолонка("ПКГ", "Справочник.ПКГ"); ТЗПКГСотрудник.НоваяКолонка("Родитель",,,); ТЗПКГСотрудник.НоваяКолонка("Оклад", "Число", 19,2); ТЗПКГСотрудник.НоваяКолонка("Сотрудник", "Справочник.Сотрудники"); ТЗПКГСотрудник.НоваяКолонка("ОкладС", "Число", 19,2); //оклад у сотрудника ТЗПКГСотрудник.НоваяКолонка("Дата", "Дата",,); ТЗПКГОбщий = СоздатьОбъект("ТаблицаЗначений"); ТЗПКГОбщий.НоваяКолонка("ПКГ", "Справочник.ПКГ"); ТЗПКГОбщий.НоваяКолонка("Родитель",,,); ТЗПКГОбщий.НоваяКолонка("Оклад", "Число", 19,2); ТЗПКГОбщий.НоваяКолонка("Сотрудник", "Справочник.Сотрудники"); ТЗПКГОбщий.НоваяКолонка("ОкладС", "Число", 19,2); //оклад у сотрудника ТЗПКГОбщий.НоваяКолонка("Дата", "Дата",,); пер=создатьобъект("Периодический"); СпрСотрудники = СоздатьОбъект("Справочник.Сотрудники"); СпрСотрудники.ВыбратьЭлементы(); Пока СпрСотрудники.ПолучитьЭлемент()=1 Цикл Если СпрСотрудники.ЭтоГруппа()=0 Тогда Если СпрСотрудники.ОсновнойЭлемент=СпрСотрудники.ТекущийЭлемент() Тогда пер.ИспользоватьОбъект("ПКГ",СпрСотрудники.ТекущийЭлемент()); пер.выбратьзначения(НачДата,КонДата); Пока пер.получитьЗначение()=1 цикл Оклад=СпрСотрудники.Оклад.Получить(пер.ДатаЗнач); сообщить("!!! "+СокрЛП(СпрСотрудники.ТекущийЭлемент())+" Оклад "+Оклад +" "+пер.ДатаЗнач+" Значение: "+СокрЛП(пер.Значение)+" "+пер.Значение.Родитель+" док "+пер.ТекущийДокумент()+" оклад по ПКГ "+пер.Значение.Оклад); ТЗПКГСотрудник.НоваяСтрока(); ТЗПКГСотрудник.ПКГ = СокрЛП(пер.Значение); ТЗПКГСотрудник.Родитель = СокрЛП(пер.Значение.Родитель); ТЗПКГСотрудник.Оклад = Число(пер.Значение.Оклад); ТЗПКГСотрудник.Сотрудник = СпрСотрудники.ТекущийЭлемент(); ТЗПКГСотрудник.ОкладС = Число(Оклад); ТЗПКГСотрудник.Дата = пер.ДатаЗнач; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; СпрПКГ = СоздатьОбъект("Справочник.ПКГ"); СпрПКГ.ВыбратьЭлементы(); Пока СпрПКГ.ПолучитьЭлемент() = 1 Цикл Если СпрСотрудники.ЭтоГруппа()=0 Тогда ТЗПКГ.НоваяСтрока(); ТЗПКГ.Родитель = СокрЛП(СпрПКГ.Родитель); ТЗПКГ.ПКГ = СпрПКГ; ТЗПКГ.Оклад = Число(СпрПКГ.Оклад); Сообщить("Родитель "+СпрПКГ.Родитель+" Наименование "+СпрПКГ+" Оклад "+СпрПКГ.Оклад); КонецЕсли; КонецЦикла; ТЗПКГ.Выгрузить(ТЗПКГОбщий, , ,"Родитель, ПКГ, Оклад"); ТЗПКГСотрудник.Выгрузить(ТЗПКГОбщий, , ,"Родитель, ПКГ, Оклад,Сотрудник, ОкладС, Дата"); // ТЗПКГОбщий.Свернуть("Родитель, ПКГ, Оклад","Сотрудник, ОкладС, Дата"); ТЗПКГОбщий.ВыбратьСтроки(); ННомер = 0; Пока ТЗПКГОбщий.ПолучитьСтроку() = 1 Цикл ННомер = ННомер +1; Родитель = СокрЛП(ТЗПКГОбщий.Родитель); ПКГ = СокрЛП(ТЗПКГОбщий.ПКГ); Оклад = ТЗПКГОбщий.Оклад; Сотрудник = СокрЛП(ТЗПКГОбщий.Сотрудник); ОкладС = ТЗПКГОбщий.ОкладС; ТДата =ТЗПКГОбщий.Дата; Таб.ВывестиСекцию("Строка"); КонецЦикла; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать",""); КонецПроцедуры Но все равно не вижу пустые ПКГ у которых нет привязанных сотрудников ПКГ справочник у спр. Сотрудники поле с выбором ПКГ Хочу получить весь справочник ПКГ с выбранными Сотрудниками и датой выбора | |||
| 10
    
        sttt 11.05.13✎ 19:04 | 
        у тебя есть типовая конфигурация? если есть, там есть обработка ЗначенияПериодическихРеквизитов посмотри как сделано     | |||
| 11
    
        viktor_vv 11.05.13✎ 19:07 | 
        Выгрузить для ТЗ удаляет строки из ТЗ азначения     | |||
| 12
    
        viktor_vv 11.05.13✎ 19:10 | 
        ТЗПКГ.Выгрузить(ТЗПКГОбщий, , ,"Родитель, ПКГ, Оклад"); ТЗПКГСотрудник.Выгрузить(ТЗПКГОбщий, , ,"Родитель, ПКГ, Оклад,Сотрудник, ОкладС, Дата");     | |||
| 13
    
        viktor_vv 11.05.13✎ 19:13 | 
        Выгрузи по сотрудникам, а потом в цикле добей не встречающимися в ТЗПКГСотрудник.     | |||
| 14
    
        sttt 11.05.13✎ 19:13 | 
        (12) это вообще бесполезная строка     | |||
| 15
    
        viktor_vv 11.05.13✎ 19:20 | 
        (14) Ну я и показал где косяк.
  Вообще да, выгружать никуда не надо, в ТЗПКГСотрудник добить остальными ПКГ. | |||
| 16
    
        sttt 11.05.13✎ 19:29 | 
        костыль:
  это заменить ТЗПКГ.Выгрузить(ТЗПКГОбщий, , ,"Родитель, ПКГ, Оклад"); ТЗПКГСотрудник.Выгрузить(ТЗПКГОбщий, , ,"Родитель, ПКГ, Оклад,Сотрудник, ОкладС, Дата"); // ТЗПКГОбщий.Свернуть("Родитель, ПКГ, Оклад","Сотрудник, ОкладС, Дата"); на //ТЗПКГ.Выгрузить(ТЗПКГОбщий, , ,"Родитель, ПКГ, Оклад"); ТЗПКГСотрудник.Выгрузить(ТЗПКГОбщий, , ,"Родитель, ПКГ, Оклад,Сотрудник, ОкладС, Дата"); // ТЗПКГОбщий.Свернуть("Родитель, ПКГ, Оклад","Сотрудник, ОкладС, Дата"); и в последнем цикле удалять имеющиеся в ТЗПКГ, остаток вывести после цикла | |||
| 17
    
        Svetka 11.05.13✎ 19:45 | 
        (8) ))привет     | |||
| 18
    
        sttt 11.05.13✎ 19:48 | 
        (17) эти приветы удаляют))     | |||
| 19
    
        ded20ded 11.05.13✎ 21:07 | 
        Добрый вечер
  сделал http://saveimg.ru/show-image.php?id=2ecd6bb829c6be60ac945779bb0a1bf6 но как убрать повторяющие? Процедура Сформировать() Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); Таб.ВывестиСекцию("Шапка"); Таб.Опции(0,0,Таб.ВысотаТаблицы(),0); ТЗПКГСотрудник = СоздатьОбъект("ТаблицаЗначений"); ТЗПКГСотрудник.НоваяКолонка("ПКГ",,,); ТЗПКГСотрудник.НоваяКолонка("Родитель",,,); ТЗПКГСотрудник.НоваяКолонка("Оклад", "Число", 19,2); ТЗПКГСотрудник.НоваяКолонка("Сотрудник", "Справочник.Сотрудники"); ТЗПКГСотрудник.НоваяКолонка("ОкладС", "Число", 19,2); //оклад у сотрудника ТЗПКГСотрудник.НоваяКолонка("Дата", "Дата",,); пер=создатьобъект("Периодический"); СпрСотрудники = СоздатьОбъект("Справочник.Сотрудники"); СпрСотрудники.ВыбратьЭлементы(); Пока СпрСотрудники.ПолучитьЭлемент()=1 Цикл Если СпрСотрудники.ЭтоГруппа()=0 Тогда Если СпрСотрудники.ОсновнойЭлемент=СпрСотрудники.ТекущийЭлемент() Тогда пер.ИспользоватьОбъект("ПКГ",СпрСотрудники.ТекущийЭлемент()); пер.выбратьзначения(НачДата,КонДата); Пока пер.получитьЗначение()=1 цикл Оклад=СпрСотрудники.Оклад.Получить(пер.ДатаЗнач); сообщить("!!! "+СокрЛП(СпрСотрудники.ТекущийЭлемент())+" Оклад "+Оклад +" "+пер.ДатаЗнач+" Значение: "+СокрЛП(пер.Значение)+" "+пер.Значение.Родитель+" док "+пер.ТекущийДокумент()+" оклад по ПКГ "+пер.Значение.Оклад); ТЗПКГСотрудник.НоваяСтрока(); ТЗПКГСотрудник.ПКГ = СокрЛП(пер.Значение); ТЗПКГСотрудник.Родитель = СокрЛП(пер.Значение.Родитель); ТЗПКГСотрудник.Оклад = Число(пер.Значение.Оклад); ТЗПКГСотрудник.Сотрудник = СпрСотрудники.ТекущийЭлемент(); ТЗПКГСотрудник.ОкладС = Число(Оклад); ТЗПКГСотрудник.Дата = пер.ДатаЗнач; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; СпрПКГ = СоздатьОбъект("Справочник.ПКГ"); СпрПКГ.ВыбратьЭлементы(); Пока СпрПКГ.ПолучитьЭлемент() = 1 Цикл Если СпрПКГ.ЭтоГруппа()=0 Тогда ТЗПКГСотрудник.НоваяСтрока(); ТЗПКГСотрудник.ПКГ = СокрЛП(СпрПКГ.ТекущийЭлемент()); ТЗПКГСотрудник.Родитель = СокрЛП(СпрПКГ.Родитель); ТЗПКГСотрудник.Оклад = Число(СпрПКГ.Оклад); Сообщить("Родитель "+СпрПКГ.Родитель+" Наименование "+СпрПКГ+" Оклад "+СпрПКГ.Оклад); КонецЕсли; КонецЦикла; // ТЗПКГСотрудник.Свернуть("Родитель, ПКГ, Оклад","Сотрудник, ОкладС, Дата"); ТЗПКГСотрудник.Свернуть("Родитель, ПКГ, Дата, Сотрудник","Оклад, ОкладС"); ТЗПКГСотрудник.Сортировать("Родитель, ПКГ, Сотрудник"); ТЗПКГСотрудник.ВыбратьСтроки(); ННомер = 0; Пока ТЗПКГСотрудник.ПолучитьСтроку() = 1 Цикл ННомер = ННомер +1; ПКГ = СокрЛП(ТЗПКГСотрудник.ПКГ); Родитель = СокрЛП(ТЗПКГСотрудник.Родитель); Оклад = ТЗПКГСотрудник.Оклад; Сотрудник = СокрЛП(ТЗПКГСотрудник.Сотрудник); ОкладС = ТЗПКГСотрудник.ОкладС; ТДата =ТЗПКГСотрудник.Дата; Таб.ВывестиСекцию("Строка"); КонецЦикла; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать",""); КонецПроцедуры | |||
| 20
    
        ded20ded 11.05.13✎ 21:08 | 
        три раза выводится 2 уровень, хотя должен быть 2 раза, как свернуть ТЗ при этом?     | |||
| 21
    
        viktor_vv 11.05.13✎ 21:31 | 
        Во первых - нафига ты к строке приводишь ссылочный тип даннх
  ТЗПКГСотрудник.Родитель = СокрЛП(пер.Значение.Родитель); ТЗПКГСотрудник.ПКГ = СокрЛП(пер.Значение); Оставь лучше ссылки и типизируй эти колонки при создании ТЗ, тогда Пока СпрПКГ.ПолучитьЭлемент() = 1 Цикл Если СпрПКГ.ЭтоГруппа()=0 Тогда НомСтр = ; Если ТЗПКГСотрудник.НайтиЗначение(СпрПКГ.ТекущийЭлемент(),НомСтр,"ПКГ") = 1 Тогда Продолжить ; КонецЕсли ; | |||
| 22
    
        viktor_vv 11.05.13✎ 21:32 | 
        *            НомСтр = 0 ;     | |||
| 23
    
        viktor_vv 11.05.13✎ 21:33 | 
        Либо вариант (16), но пустоые выйдут в самом конце.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |