Форум программистов, компьютерный форум, киберфорум
Наши страницы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
kuza_87
0 / 0 / 0
Регистрация: 11.05.2012
Сообщений: 5
1

Внешняя печатная форма

11.05.2012, 09:31. Просмотров 2913. Ответов 9
Метки нет (Все метки)

Делал внешнюю печатная форма к ЗУП к документу "Зарплата к выплате". Там впринципе всё просто. Формирует список людей в алфавитном порядке. Расчётчики сказали мне переделать её, чтобы группировалась по подразделениям. Но тут возникла трудность. Когда выполняется запрос люди дублируются из-за подразделений, т.к. данные о подразделениях берутся из регистра, а там у людей много подразделений (были перемещения) и он отображает в каждой строчке выплату денег с каждым из подразделений.
выглядит код вот так:

+ Code
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
Функция ПечатьРеестр() Экспорт
    Запрос=Новый Запрос;
 
          Запрос.Текст = "ВЫБРАТЬ
        |    ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо КАК Физлицо,
        |    ЗарплатаКВыплатеОрганизацийЗарплата.Сумма КАК Сумма,
        |    ЕСТЬNULL(РаботникиОрганизацийСрезПоследних.Сотрудник.ПодразделениеОрганизации, ДоговорНаВыполнениеРаботСФизЛицом.ПодразделениеОрганизации) КАК СотрудникПодразделениеОрганизации,
        |    РаботникиОрганизацийСрезПоследних.Период КАК Период,
        |    ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка.Номер КАК Номер,
        |    ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка.Дата КАК Дата
        |ИЗ
        |    Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплатеОрганизацийЗарплата
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Период, ) КАК РаботникиОрганизацийСрезПоследних
        |        ПО ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо = РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДоговорНаВыполнениеРаботСФизЛицом КАК ДоговорНаВыполнениеРаботСФизЛицом
        |        ПО ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо = ДоговорНаВыполнениеРаботСФизЛицом.ФизЛицо
        |ГДЕ
        |    ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка = &Ссылка
        |
        |УПОРЯДОЧИТЬ ПО
        |ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо.Наименование,
        |Период УБЫВ
        |ИТОГИ ПО
        |    Физлицо,
        |    Сумма";
                
    Запрос.Параметры.Вставить("Период",СсылкаНаОбъект.Дата);
    Запрос.Параметры.Вставить("Ссылка",СсылкаНаОбъект.Ссылка);  //ЗНАЧЕНИЕ(Документ.ЗарплатаКВыплатеОрганизаций.ПустаяСсылка)
 
    РезультатЗапроса=Запрос.Выполнить();
    Выборка=РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);//ПоГруппировкам/Прямой
 
    //ТЗ=РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);//ПоГруппировкам/Прямой
 
    //ТЗ.ВыбратьСтроку();
 
    
    
    //формирование табличного документа с печатной формой
 
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ПолеСлева = 0;
    ТабДокумент.ПолеСправа = 0;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗарплатаКВыплатеОрганизаций_Реестр";
    
    Макет = ПолучитьМакет("Реестр");
    
    ОбластьМакетаЗаголовок        = Макет.ПолучитьОбласть("Заголовок");
    ОбластьМакетаШапка            = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакетаСтрока         = Макет.ПолучитьОбласть("Строка");
    ОбластьМакетаПодвал         = Макет.ПолучитьОбласть("Подвал");
    
    ТабДокумент.Вывести(ОбластьМакетаЗаголовок);
    ОбластьМакетаШапка.Параметры.Номер = СсылкаНаОбъект.Номер;
    ОбластьМакетаШапка.Параметры.Дата = СсылкаНаОбъект.Дата;
    ОбластьМакетаШапка.Параметры.КакВыплачено = СсылкаНаОбъект.СпособВыплаты;
    ТабДокумент.Вывести(ОбластьМакетаШапка);
 
    //добавляем массив для разбиения на страницы
 
    
    ВыводимыеОбласти = Новый Массив();
    ВыводимыеОбласти.Добавить(ОбластьМакетаСтрока);
    
    //заполняем строки
 
    Пока Выборка.Следующий()Цикл
        ВыборкаСумма = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
        Пока ВыборкаСумма.Следующий()Цикл
        ВыборкаПодразделение = ВыборкаСумма.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
        Если ВыборкаПодразделение.Следующий() тогда     
        ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаПодразделение);
        иначе ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаСумма); 
        
        КонецЕсли;
        // разбиение на страницы
 
        //ВыведеноСтрок = ВыведеноСтрок + 1;
 
        
    // Проверим, уместится ли строка на странице или надо открывать новую страницу
 
        ВывестиПодвалЛиста = Не ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти);
        
        
        
        Если ВывестиПодвалЛиста Тогда
            
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            ТабДокумент.Вывести(ОбластьМакетаШапка);
            //ВыведеноСтраниц = ВыведеноСтраниц + 1;
 
            КонецЕсли;
        
                ТабДокумент.Вывести(ОбластьМакетаСтрока);
    
    КонецЦикла;
    КонецЦикла;
            
    ВыводимыеОбласти = Новый Массив();
    ВыводимыеОбласти.Добавить(ОбластьМакетаСтрока);
    ВыводимыеОбласти.Добавить(ОбластьМакетаПодвал);
    
    
    //Пока ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, Ложь) Цикл
 
    //    ТабДокумент.Вывести(ОбластьМакетаСтрока);
 
    //КонецЦикла;
 
    
    
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    
    Возврат ТабДокумент;
 
КонецФункции
Функция Печать () Экспорт
    Возврат    ПечатьРеестр();
    
КонецФункции
Чтобы в макете люди не дублировались я сделал вот так:

+ Code
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//заполняем строки
 
    Пока Выборка.Следующий()Цикл
        ВыборкаСумма = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
        Пока ВыборкаСумма.Следующий()Цикл
        ВыборкаПодразделение = ВыборкаСумма.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
        Если ВыборкаПодразделение.Следующий() тогда     
        ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаПодразделение);
        иначе ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаСумма); 
        
        КонецЕсли;
        // разбиение на страницы
 
        //ВыведеноСтрок = ВыведеноСтрок + 1;
 
        
    // Проверим, уместится ли строка на странице или надо открывать новую страницу
 
        ВывестиПодвалЛиста = Не ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти);
        
        
        
        Если ВывестиПодвалЛиста Тогда
            
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            ТабДокумент.Вывести(ОбластьМакетаШапка);
            //ВыведеноСтраниц = ВыведеноСтраниц + 1;
 
            КонецЕсли;
        
                ТабДокумент.Вывести(ОбластьМакетаСтрока);
    
    КонецЦикла;
    КонецЦикла;
Т.е. добавил 2 цикла.
Вопрос как мне сделать так чтобы я смог сформировать список по подразделениям, и люди не двоились


в идеале можно было бы сделать это в запросе, чтобы выбиралось подразделение на такую же дату как и дата документа, но я не знаю как. Помогите кто может плиз
0
Миниатюры
Внешняя печатная форма  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2012, 09:31
Ответы с готовыми решениями:

Внешняя печатная форма
Товарищи работающие в 1С 7.7 хелп!!! =) Ни разу не работал в 7 поэтому у меня щас жуткая паника!...

Внешняя печатная форма в 1С 7.7
Всем доброго дня! Появилась необходимость добавить в 1С 7.7 Бухгалтерию внешнюю печатную форму для...

Внешняя печатная форма
У меня есть документ СчетФактураВыданный. Когда его распечатываешь то в получившейся форме есть...

Внешняя печатная форма КС-2 и КС-3
Здравствуйте, я не программист, а бухгалтер. Очень понадобились внешние печатные формы КС-2 и КС-3...

Внешняя печатная форма
Народ! Помогите, пожалуйста! Делаю ВПФ Торг12 для дока ПередачаТоваров. Конфа БП 2.0. Выскакивает...

9
wade25
145 / 145 / 3
Регистрация: 25.03.2011
Сообщений: 512
11.05.2012, 11:34 2
Сгруппировать запрос нужно.
0
kuza_87
0 / 0 / 0
Регистрация: 11.05.2012
Сообщений: 5
11.05.2012, 11:58  [ТС] 3
1C
1
2
3
4
5
6
|УПОРЯДОЧИТЬ ПО
|ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо.Наименование,
|Период УБЫВ
|ИТОГИ ПО
| Физлицо,
| Сумма";

изначально я группировал так, когда нужен был список в алфавитном порядке. Когда я группирую по подразделениям, то один и тот же человек у меня попадает в несколько подразделений (т.е. люди дублируются). т.к. данные о подразделении человека берутся из регистра сведений. А там подразделений много, и я не знаю как мне сделать так, чтобы отображалось одно подразделение, актуальное на даты составления документа

Добавлено через 12 минут
через группировку как сделать конкретно я не могу сообразить((((((((
0
wade25
145 / 145 / 3
Регистрация: 25.03.2011
Сообщений: 512
11.05.2012, 12:37 4
Упорядочить и Сгруппировать разные вещи О_о
0
11.05.2012, 12:37
kuza_87
0 / 0 / 0
Регистрация: 11.05.2012
Сообщений: 5
11.05.2012, 12:54  [ТС] 5
я это понял...но как сгруппировать-то так чтобы одни и те же люди не двоились в разных подразделениях? вот в чём был мой вопрос
0
ВВК
0 / 0 / 0
Регистрация: 11.05.2012
Сообщений: 13
11.05.2012, 13:44 6
вот суть задачи:
вводится предложение, или несколько слов которые разделены между собой пробелами. Нужно отсортировать эти слова в алфавитном порядке и вывести их в отдельном поле Memo.
задачу нужно реализовать на C++ Builder на формах (!не в консоли!)
0
Dethmontt
Модератор
Эксперт 1С
2672 / 2455 / 425
Регистрация: 10.03.2011
Сообщений: 8,793
Записей в блоге: 1
Завершенные тесты: 1
11.05.2012, 23:02 7
ВВК, Кажется ты ошибся адресом!
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
13.05.2012, 09:50 8
Цитата Сообщение от ВВК Посмотреть сообщение
вот суть задачи:
вводится предложение, или несколько слов которые разделены между собой пробелами. Нужно отсортировать эти слова в алфавитном порядке и вывести их в отдельном поле Memo.
задачу нужно реализовать на C++ Builder на формах (!не в консоли!)
Ну, в 1с система может сама всё вышеуказанное, причём несколькими способами, только Вам-то это к чему?
0
fimbulwinter
308 / 308 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
14.05.2012, 07:22 9
Сначала разберись с запросом.
Что то мне подсказывает что СрезПоследних нужно выбрать в отдельную временную таблицу. И возможно у тебя в базе несколько организаций -->>-> в условие запроса вставить организацию.
0
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
14.05.2012, 11:00 10
Цитата Сообщение от kuza_87 Посмотреть сообщение
Формирует список людей в алфавитном порядке. Расчётчики сказали мне переделать её, чтобы группировалась по подразделениям. Но тут возникла трудность. Когда выполняется запрос люди дублируются из-за подразделений, т.к. данные о подразделениях берутся из регистра, а там у людей много подразделений (были перемещения) и он отображает в каждой строчке выплату денег с каждым из подразделений.
Срез последних вернет только одно подразделение, в котором сотрудник работает на указанную дату.
Ваши проблемы:
1. Нет фильтра по организации;
2. Вы связываете таблицу по ФизЛицу. Одно физ лицо может работать в двух подразделениях.

Учитывая 2 пункт, без доработки конфигурации, задачу будет решить очень сложно.
0
14.05.2012, 11:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2012, 11:00

Внешняя печатная форма
Подскажите пожалуйста,как привязать внешнюю печатную форму к документу в 1с 8.2

Внешняя печатная форма
Народ! Такая проблема. Делаю впф Торг12 для БП 3.0! До этого уже несколько форм делал на упр...

Внешняя печатная форма
Здравствуйте. Я только знакомлюсь с «языком» 1с, поэтому решил обратиться за советом. Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru