Текущие данные таблицы недоступны на сервере

1. 1c_uZer 29.05.17 13:47 Сейчас в теме
Здравствуйте снова! Прошу помощи гуру...ситуация такая...

Внизу код процедуры

&НаСервере
Процедура НачисленияПриАктивизацииСтрокиНаСервере()
	
	ОбъектДокумента = РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.НачислениеЗарплаты"));
	Массив = ОбъектДокумента.РассчетКоэффициентов();
	Для Счетчик = 0 По Массив.Количество() - 1 Цикл
		Сообщить(Массив[Счетчик]);
	КонецЦикла;
	
	Запрос = Новый Запрос;
	
	Ссылка = Объект.Ссылка;
	
	//Ссылка = Документы.НачислениеЗарплаты.ПолучитьСсылку(Новый УникальныйИдентификатор(Ссылка));
	
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	
	Запрос.Текст =
	
	  "ВЫБРАТЬ РАЗЛИЧНЫЕ
	  |	НачислениеЗарплатыНачисления.Сотрудник КАК СотрудникВДокументеНачислениеЗП,
	  |	РаботаСотрудниковНаОбъектеДанные.Сотрудник
	  |ИЗ
	  |	Документ.РаботаСотрудниковНаОбъекте.Данные КАК РаботаСотрудниковНаОбъектеДанные
	  |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.НачислениеЗарплаты.Начисления КАК НачислениеЗарплатыНачисления
	  |		ПО (НачислениеЗарплатыНачисления.Сотрудник.Ссылка = РаботаСотрудниковНаОбъектеДанные.Сотрудник.Ссылка)
	  |ГДЕ
	  |	НачислениеЗарплатыНачисления.Ссылка = &Ссылка";
	 
	 Результат = Запрос.Выполнить().Выбрать();
	 
	 Сотр = Новый Массив;
	 
	 Пока Результат.Следующий() Цикл
		 
		Сотр.Добавить(Результат);
		 
	КонецЦикла;

	Индекс = 0;
	Для Каждого СтрокаТЧ ИЗ Объект.Начисления Цикл
		
		Если Индекс = Сотр.Количество() Тогда
			Прервать;
		КонецЕсли;
		
		Если СтрокаТЧ.Сотрудник.Наименование = Сотр[Индекс].Сотрудник.Наименование Тогда
			Элементы.Начисления.ТекущиеДанные.Результат = Элементы.Начисления.ТекущиеДанные.Результат+25632132;
			//Элементы.Начисления.ТекущиеДанные.Результат = Элементы.Начисления.ТекущиеДанные.Результат; //+20000000;
		КонецЕсли;
	Индекс = Индекс + 1;
	КонецЦикла;
	
	
	  	
КонецПроцедуры
Показать


У меня при нажатии на кнопку которая вызывает эту процедуру появляется ошибка

{Документ.НачислениеЗарплаты.Форма.ФормаДокумента.Форма(7030)}: Ошибка при получении значения атрибута контекста (ТекущиеДанные)
			Элементы.Начисления.ТекущиеДанные.Результат = Элементы.Начисления.ТекущиеДанные.Результат+25632132;
по причине:
Текущие данные таблицы недоступны на сервере


Я знаю что вот этот кусок кода

Индекс = 0;
	Для Каждого СтрокаТЧ ИЗ Объект.Начисления Цикл
		
		Если Индекс = Сотр.Количество() Тогда
			Прервать;
		КонецЕсли;
		
		Если СтрокаТЧ.Сотрудник.Наименование = Сотр[Индекс].Сотрудник.Наименование Тогда
			Элементы.Начисления.ТекущиеДанные.Результат = Элементы.Начисления.ТекущиеДанные.Результат+25632132;
			//Элементы.Начисления.ТекущиеДанные.Результат = Элементы.Начисления.ТекущиеДанные.Результат; //+20000000;
		КонецЕсли;
	Индекс = Индекс + 1;
	КонецЦикла;
Показать


должен быть по идее на клиенте но теперь не знаю как мне все исправить с минимальными изменениями и потерями, подскажите как поступить...
По теме из базы знаний
Найденные решения
4. Anchoret 60 29.05.17 16:08 Сейчас в теме
Попробуйте как-то так:


    Индекс = 0;
    Для Каждого СтрокаТЧ ИЗ ОбъектДокумента.Начисления Цикл
        
        Если Индекс = Сотр.Количество() Тогда
            Прервать;
        КонецЕсли;
        
        Если СтрокаТЧ.Сотрудник.Наименование = Сотр[Индекс].Сотрудник.Наименование Тогда
            СтрокаТЧ.Результат = СтрокаТЧ.Результат + 25632132;
            //Элементы.Начисления.ТекущиеДанные.Результат = Элементы.Начисления.ТекущиеДанные.Результат; //+20000000;
        КонецЕсли;
    Индекс = Индекс + 1;
    КонецЦикла;

ЗначениеВРеквизитФормы(ОбъектДокумента, "Объект");
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. vadim1011985 100 29.05.17 14:13 Сейчас в теме
 Элементы.Начисления.ТекущиеДанные.Результат = Элементы.Начисления.ТекущиеДанные.Результат+25632132;

Сервер ничего не знает про форму и про текущие данные

СтрокаТЧ.Результат =СтрокаТЧ.Результат+25632132;
3. DAL 29.05.17 14:22 Сейчас в теме
В серверной процедуре обычно в таких случаях пишут РеквизитФормыВЗначение или ДанныеФормыВЗначение, а в конце процедуры отдают назад.
4. Anchoret 60 29.05.17 16:08 Сейчас в теме
Попробуйте как-то так:


    Индекс = 0;
    Для Каждого СтрокаТЧ ИЗ ОбъектДокумента.Начисления Цикл
        
        Если Индекс = Сотр.Количество() Тогда
            Прервать;
        КонецЕсли;
        
        Если СтрокаТЧ.Сотрудник.Наименование = Сотр[Индекс].Сотрудник.Наименование Тогда
            СтрокаТЧ.Результат = СтрокаТЧ.Результат + 25632132;
            //Элементы.Начисления.ТекущиеДанные.Результат = Элементы.Начисления.ТекущиеДанные.Результат; //+20000000;
        КонецЕсли;
    Индекс = Индекс + 1;
    КонецЦикла;

ЗначениеВРеквизитФормы(ОбъектДокумента, "Объект");
Показать
6. 1c_uZer 30.05.17 05:06 Сейчас в теме
(4) ошибки не возникает) но и результат не изменяется)
7. Anchoret 60 31.05.17 11:12 Сейчас в теме
(6)
А условие
Если СтрокаТЧ.Сотрудник.Наименование = Сотр[Индекс].Сотрудник.Наименование Тогда
хоть раз отрабатывает в Истину?
8. 1c_uZer 31.05.17 11:23 Сейчас в теме
(7) вот я сейчас вернулся к этому и борюсь с тем чтобы хоть иногда возвращалась истина это бы знатно облегчило мне жизнь.
5. caponid 29.05.17 16:28 Сейчас в теме
А из чего собственно вызывается процедура расчета на самом сервере и в чем её смысл?
и зачем нужны ТекущиеДанные? - эта процедура должна вызываться для текущей строки? или для каждой строки таблицы?
9. Anchoret 60 31.05.17 11:40 Сейчас в теме
Попробуй для начала примерно так:
     
Пока Результат.Следующий() Цикл
         
        Сотр.Добавить(Результат);
         
    КонецЦикла;

Для Каждого ЭлементМассив Из Сотр Цикл
    СтрокаТЧ = Объект.Начисления.Найти(ЭлементМассива.Сотрудник);
    Если НЕ СтрокаТЧ = Неопределено Тогда
        СтрокаТЧ.Результат = СтрокаТЧ.Результат + 25632132;
    КонецЕсли;
КонецЦикла;
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот