Имя: Пароль:
1C
1С v8
Обработка табл. части дока. обновление данных Владельца формы
0 sdfqwe
 
09.12.19
12:11
ЗУП 3.1 Документ. ТабельУчетаРабочегоВремени

Не могу увидеть и изменить данные владельца формы (ФормаДокумента). Код:

&НаСервере
Функция ПолучитьФИОСотра(Сотр)
    Возврат Сотр.Наименование;
КонецФункции

&НаСервере
Функция ПолучитьВидыВремен()
    СтрОтв = Новый Структура;
    СтрОтв.Вставить("Явка", Справочники.ВидыИспользованияРабочегоВремени.Явка);
    СтрОтв.Вставить("Ночь", Справочники.ВидыИспользованияРабочегоВремени.РаботаНочныеЧасы);
    Возврат СтрОтв;
КонецФункции

&НаСервере
Функция ПолучитьСписокСотровДока(ТаблДока)
    Сотры = ТаблДока.Выгрузить();
    Сотры.Свернуть("Сотрудник");
    Возврат Сотры.ВыгрузитьКолонку("Сотрудник");
КонецФункции

&НаКлиенте
Процедура ПослеЗакрытияВопросаВыполнитьУборку(Результат, Параметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        ВылиИзменения = Ложь;
        ВидыВремени = ПолучитьВидыВремен();
        Явка = ВидыВремени.Явка;
        Ночь = ВидыВремени.Ночь;
        ОбДока = ВладелецФормы.Объект;
        ДанныеОВремени = ОбДока.ДанныеОВремени;
        Сотры = ПолучитьСписокСотровДока(ДанныеОВремени);
        МассивНочных = Новый Массив;
        Отбор = Новый Структура;
        Для каждого СтрСотры из Сотры Цикл
            Отбор.Очистить();
            Отбор.Вставить("Сотрудник", СтрСотры);
            НайдСтрокиВремСотра = ДанныеОВремени.НайтиСтроки(Отбор);
            МассивНочных.Очистить();
            Для СчДней = 1 По 31 Цикл
                БылаДобавленаНочь = Ложь;
                Для каждого СтрНайдСтрокиВремСотра из НайдСтрокиВремСотра Цикл
                    Если СтрНайдСтрокиВремСотра["ВидВремени"+Строка(СчДней)] = Ночь Тогда
                        БылаДобавленаНочь = Истина;
                        МассивНочных.Добавить(СтрНайдСтрокиВремСотра["Часов"+Строка(СчДней)]);
                    КонецЕсли;
                КонецЦикла;
                Если НЕ БылаДобавленаНочь Тогда
                    МассивНочных.Добавить(0);
                КонецЕсли;
            КонецЦикла;
            Для СчДней = 1 По 31 Цикл
                Для каждого СтрНайдСтрокиВремСотра из НайдСтрокиВремСотра Цикл
                    
                    Если СтрНайдСтрокиВремСотра["ВидВремени"+Строка(СчДней)] = Явка Тогда
                        ЧасовЯвки = СтрНайдСтрокиВремСотра["Часов"+Строка(СчДней)];
                        Если ЧасовЯвки < МассивНочных[СчДней-1] Тогда
                            Сообщить(ПолучитьФИОСотра(СтрСотры)+" на дне "+Строка(СчДней)+" имеет меньше Общих часов чем ночных. Вычитание по этому дню Не выполнено!");
                        Иначе
                            РасчКолвоЧасов = ЧасовЯвки - МассивНочных[СчДней-1];
                            СтрНайдСтрокиВремСотра["Часов"+Строка(СчДней)] = РасчКолвоЧасов;
                            СтрНайдСтрокиВремСотра["Время"+Строка(СчДней)+"Представление"] = "Я "+Строка(РасчКолвоЧасов);
                            Если ЧасовЯвки <> РасчКолвоЧасов Тогда
                                ВылиИзменения = Истина;
                            КонецЕсли;
                        КонецЕсли;
                    КонецЕсли;
                КонецЦикла;
            КонецЦикла;
        КонецЦикла;
        Если ВылиИзменения Тогда
            КопироватьДанныеФормы(ОбДока, ВладелецФормы.Объект);
            ВладелецФормы.Прочитать();
            ВладелецФормы.Модифицированность = Истина;
        КонецЕсли;
        ПоказатьПредупреждение(,"Готово",1);
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопросаВыполнитьУборку", ЭтаФорма);
    ПоказатьВопрос(Оповещение, "Данные о времени будут изменены. Продолжить?", РежимДиалогаВопрос.ДаНет, 0);
КонецПроцедуры

///////
КопироватьДанныеФормы(ОбДока, ВладелецФормы.Объект);
ВладелецФормы.Прочитать();

Не помогают.
Туплю.
1 sdfqwe
 
09.12.19
13:57
Убрал:
КопироватьДанныеФормы(ОбДока, ВладелецФормы.Объект);
ВладелецФормы.Прочитать();

Вместо:
                            СтрНайдСтрокиВремСотра["Часов"+Строка(СчДней)] = РасчКолвоЧасов;
                            СтрНайдСтрокиВремСотра["Время"+Строка(СчДней)+"Представление"] = "Я "+Строка(РасчКолвоЧасов);
Следующее:
                        ВладелецФормы.Объект.ДанныеОВремени.Получить(ДанныеОВремени.Индекс(СтрНайдСтрокиВремСотра))["Часов"+Строка(СчДней)] = РасчКолвоЧасов;
ВладелецФормы.Объект.ДанныеОВремени.Получить(ДанныеОВремени.Индекс(СтрНайдСтрокиВремСотра))["Время"+Строка(СчДней)+"Представление"] = "Я "+Строка(РасчКолвоЧасов);

.......
Есть другие способы решения.