|
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), но пустоые выйдут в самом конце.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |