Имя: Пароль:
1C
1С v8
Заполнение дней и часов из табеля (ЗУП)
,
0 Tanis
 
17.01.13
11:35
Добрый день! Подскажите в упорядовачинии циклов.
Имеем следующее, но это пока не заполняет.

Запрос = Новый Запрос;
       Запрос.Текст = "
       |ВЫБРАТЬ
       |    РабочееВремяРаботниковОрганизаций.Сотрудник КАК Сотрудник,
       |    СУММА(РабочееВремяРаботниковОрганизаций.Дней) КАК Дней,
       |    СУММА(РабочееВремяРаботниковОрганизаций.Часов) КАК Часов,
       |    МЕСЯЦ(РабочееВремяРаботниковОрганизаций.Период) КАК Период
       |ИЗ
       |    РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
       |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторИспользованияРабочегоВремени КАК КлассификаторИспользованияРабочегоВремени
       |        ПО РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени = КлассификаторИспользованияРабочегоВремени.Ссылка
       |ГДЕ
       |    РабочееВремяРаботниковОрганизаций.Сотрудник = &Сотрудник
       |    И РабочееВремяРаботниковОрганизаций.Период МЕЖДУ &ДатаН И &ДатаК
       |    И (РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени.Наименование = ""Явка""
       |            ИЛИ РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени.Наименование = ""Простой, не зависящий от работодателя и работника""
       |            ИЛИ РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени.Наименование = ""Ремонт 75%т.с.""
       |            ИЛИ РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени.Наименование = ""ТО 100%."")
       |
       |СГРУППИРОВАТЬ ПО
       |    РабочееВремяРаботниковОрганизаций.Сотрудник,
       |    МЕСЯЦ(РабочееВремяРаботниковОрганизаций.Период)";
   
       
       Запрос.УстановитьПараметр("Сотрудник",    Сотрудник);     //Сотрудники
       Запрос.УстановитьПараметр("ДатаН",    ПериодРасчетаСреднегоЗаработкаНачало);     //Дата
       Запрос.УстановитьПараметр("ДатаК",    ПериодРасчетаСреднегоЗаработкаОкончание);     //Дата
               
       Результат = Запрос.Выполнить();
       Выборка = Результат.Выбрать();

       
       Пока Выборка.Следующий() Цикл
           
       Период = Выборка.Период;
       Сотрудник = Выборка.Сотрудник;
       Дней = Выборка.Дней;
       Часов = Выборка.Часов;
   
           
       тзДни = Новый ТаблицаЗначений;
       тзДни.Колонки.Добавить("Период");
       тзДни.Колонки.Добавить("Сотрудник");
       тзДни.Колонки.Добавить("Дней");
       тзДни.Колонки.Добавить("Часов");
       КонецЦикла;
       
       РасчетСреднего1 = ЭтотОбъект.РасчетСреднего;
           
           
   Для Каждого СтрокаДокумента ИЗ РасчетСреднего1 Цикл
       
           Если СтрокаДокумента.ВидРасчета = ПланыВидовРасчета.СреднийЗаработок.ПоЗаработкуИндексируемые Тогда
               Продолжить;
           КонецЕсли;    
           
           ПериодРасч = Месяц(СтрокаДокумента.БазовыйПериодКонец);
           
           НайденнаяСтрока = тзДни.Найти(ПериодРасч, "Период");
           Если НайденнаяСтрока <> Неопределено Тогда
               //СтрокаДокумента.Результат        = НайденнаяСтрока.Начислено;
               СтрокаДокумента.ОтработаноДней    = НайденнаяСтрока.Дней;
           КонецЕсли;
       
       КонецЦикла;
1 Tanis
 
17.01.13
11:52
Подскажите, что где изменить...
2 fmrlex
 
17.01.13
12:06
Пока Выборка.Следующий() Цикл
           
       Период = Выборка.Период;
       Сотрудник = Выборка.Сотрудник;
       Дней = Выборка.Дней;
       Часов = Выборка.Часов;
   
           
       тзДни = Новый ТаблицаЗначений;
       тзДни.Колонки.Добавить("Период");
       тзДни.Колонки.Добавить("Сотрудник");
       тзДни.Колонки.Добавить("Дней");
       тзДни.Колонки.Добавить("Часов");
       КонецЦикла;


Что цикл то делает?
3 Tanis
 
17.01.13
12:15
Исправлен на
тзДни = Новый ТаблицаЗначений;
       
       тзДни.Колонки.Добавить("Период");
       тзДни.Колонки.Добавить("Сотрудник");
       тзДни.Колонки.Добавить("Дней");
       тзДни.Колонки.Добавить("Часов");

       
       Пока Выборка.Следующий() Цикл
           
       //Период = Выборка.Период;
       //Сотрудник = Выборка.Сотрудник;
       //Дней = Выборка.Дней;
       //Часов = Выборка.Часов;
       
       НоваяСтрока = тзДни.Добавить();
       НоваяСтрока.Период    = Выборка.Период;
       НоваяСтрока.Сотрудник    = Выборка.Сотрудник;
       НоваяСтрока.Дней    = Выборка.Дней;
       НоваяСтрока.Часов    = Выборка.Часов;

       КонецЦикла;
4 Tanis
 
17.01.13
12:16
Хочу в таблицу занести данные, потом из нее заполнить таблицу расчета.
5 fmrlex
 
17.01.13
12:18
(4) Ну вижу в цикле создаешь на каждой итерации таблицу значений и создаешь в ней колонки. А данные в таблицу засовывать собираешься?
6 Tanis
 
17.01.13
12:21
а как? он из запроса не проставляет данные?
7 Tanis
 
17.01.13
12:23
получает он там данные, и таблица нормальная выводится
8 fmrlex
 
17.01.13
12:25
тзДни как заполняется? Данными я имею в виду.
9 vah1
 
17.01.13
12:26
(0) ты лучше сразу в отчет свои данные подставляй, нафига в выборку-то тыкать
10 fmrlex
 
17.01.13
12:28
(3) а все, вижу
11 Tanis
 
17.01.13
12:32
Все, вопрос решен. Всем спасибо. Решение.

Процедура ЗаполнитьДниИЧасы(Кнопка)    
   
   Запрос = Новый Запрос;
       Запрос.Текст = "
       |ВЫБРАТЬ
       |    РабочееВремяРаботниковОрганизаций.Сотрудник КАК Сотрудник,
       |    СУММА(РабочееВремяРаботниковОрганизаций.Дней) КАК Дней,
       |    СУММА(РабочееВремяРаботниковОрганизаций.Часов) КАК Часов,
       |    МЕСЯЦ(РабочееВремяРаботниковОрганизаций.Период) КАК Период
       |ИЗ
       |    РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
       |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторИспользованияРабочегоВремени КАК КлассификаторИспользованияРабочегоВремени
       |        ПО РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени = КлассификаторИспользованияРабочегоВремени.Ссылка
       |ГДЕ
       |    РабочееВремяРаботниковОрганизаций.Сотрудник = &Сотрудник
       |    И РабочееВремяРаботниковОрганизаций.Период МЕЖДУ &ДатаН И &ДатаК
       |    И (РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени.Наименование = ""Явка""
       |            ИЛИ РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени.Наименование = ""Простой, не зависящий от работодателя и работника""
       |            ИЛИ РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени.Наименование = ""Ремонт 75%т.с.""
       |            ИЛИ РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени.Наименование = ""ТО 100%."")
       |
       |СГРУППИРОВАТЬ ПО
       |    РабочееВремяРаботниковОрганизаций.Сотрудник,
       |    МЕСЯЦ(РабочееВремяРаботниковОрганизаций.Период)";
   
       
       Запрос.УстановитьПараметр("Сотрудник",    Сотрудник);    
       Запрос.УстановитьПараметр("ДатаН",    ПериодРасчетаСреднегоЗаработкаНачало);    
       Запрос.УстановитьПараметр("ДатаК",    ПериодРасчетаСреднегоЗаработкаОкончание);
               
       Результат = Запрос.Выполнить();
       Выборка = Результат.Выбрать();

       тзДни = Новый ТаблицаЗначений;
       
       тзДни.Колонки.Добавить("Период");
       тзДни.Колонки.Добавить("Сотрудник");
       тзДни.Колонки.Добавить("Дней");
       тзДни.Колонки.Добавить("Часов");

       
       Пока Выборка.Следующий() Цикл
               
       НоваяСтрока = тзДни.Добавить();
       НоваяСтрока.Период    = Выборка.Период;
       НоваяСтрока.Сотрудник    = Выборка.Сотрудник;
       НоваяСтрока.Дней    = Выборка.Дней;
       НоваяСтрока.Часов    = Выборка.Часов;

       КонецЦикла;

       РасчетСреднего1 = ЭтотОбъект.РасчетСреднего;
           
       Для Каждого СтрокаДокумента ИЗ РасчетСреднего1 Цикл
       
           Если СтрокаДокумента.ВидРасчета <> ПланыВидовРасчета.СреднийЗаработок.ПоЗаработкуИндексируемые Тогда
               Продолжить;
           КонецЕсли;    
           
           ПериодРасч = Месяц(СтрокаДокумента.БазовыйПериодКонец);
           
           НайденнаяСтрока = тзДни.Найти(ПериодРасч, "Период");
           Если НайденнаяСтрока <> Неопределено Тогда
               СтрокаДокумента.ОтработаноДней    = НайденнаяСтрока.Дней;
               СтрокаДокумента.ОтработаноЧасов = НайденнаяСтрока.Часов;
           КонецЕсли;
       
       КонецЦикла;            
       
КонецПроцедуры
12 Tanis
 
17.01.13
12:32
В какой отчет? Выборку, чтоб выбрать...
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс