не заполняется табличная часть в форме

1. 1c_uZer 30.05.17 12:39 Сейчас в теме
Здравствуйте! Прошу подскажите, кто знает...не заполняются и не добавляются колонки в табличной части.

	Для Каждого СтрокаТЧ из Объект.Начисления Цикл
		
		Индекс = Индекс +1;
		
		НайдСтроки = Объект.РаспределениеРезультатовНачислений.НайтиСтроки(Новый Структура("ИдентификаторСтроки",Индекс));
		
		НайдСтроки[0].Результат = НайдСтроки[0].Результат + 500000;
		
		Сообщить(НайдСтроки[0].Результат);
		
		НовСтр = Объект.РаспределениеРезультатовНачислений.Добавить();
		
		НовСтр.ИдентификаторСтроки = 1;
		
		НовСтр.СпособОтраженияЗарплатыВБухучете=НайдСтроки[0].СпособОтраженияЗарплатыВБухучете;
		
		НовСтр.СтатьяФинансирования = НайдСтроки[0].СтатьяФинансирования;
		
		//НовСтр.Записать();
		
	КонецЦикла;
Показать


На форме никаких изменений, подскажите где ошибка?
+
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
49. DAL 30.05.17 18:20 Сейчас в теме +0.2 $m
(46)

Логика:

У объекта есть, я так понимаю, табличная часть РаспределениеРезультатовНачислений.
В табличной части есть реквизиты ИдентификаторСтроки, СпособОтраженияЗарплатыВБухучете, СтатьяФинансирования.

Соответственно на форме должна быть соответствующая таблица, в которой у столбцов источники данных должен быть

Объект.РаспределениеРезультатовНачислений.ИдентификаторСтроки
Объект.РаспределениеРезультатовНачислений.СпособОтраженияЗарплатыВБухучете
Объект.РаспределениеРезультатовНачислений.СтатьяФинансирования

Если ее нет, создайте дополнительную закладку и воткните туда табличную часть.

Там все сразу и посмотрите
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. rulex* 30.05.17 12:47 Сейчас в теме
В какой процедуре выполняется данный код?
+
3. 1c_uZer 30.05.17 12:52 Сейчас в теме
(2) в самописной, &НаСервере
+
4. 1c_uZer 30.05.17 12:53 Сейчас в теме
(2) в модуле формы документа "Начисление зарплаты"
+
5. 1c_uZer 30.05.17 12:58 Сейчас в теме
(2) &НаСервере
Процедура НачисленияПриАктивизацииСтрокиНаСервере()
	
	ОбъектДокумента = РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.НачислениеЗарплаты"));
	Массив = ОбъектДокумента.РассчетКоэффициентов();
	Для Счетчик = 0 По Массив.Количество() - 1 Цикл
		Сообщить(Массив[Счетчик]);
	КонецЦикла;
	
	Запрос = Новый Запрос;
	
	Ссылка = Объект.Ссылка;
	
	//Ссылка = Документы.НачислениеЗарплаты.ПолучитьСсылку(Новый УникальныйИдентификатор(Ссылка));
	
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	
	Запрос.Текст =
	
	  "ВЫБРАТЬ РАЗЛИЧНЫЕ
	  |	НачислениеЗарплатыНачисления.Сотрудник КАК СотрудникВДокументеНачислениеЗП,
	  |	РаботаСотрудниковНаОбъектеДанные.Сотрудник
	  |ИЗ
	  |	Документ.РаботаСотрудниковНаОбъекте.Данные КАК РаботаСотрудниковНаОбъектеДанные
	  |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.НачислениеЗарплаты.Начисления КАК НачислениеЗарплатыНачисления
	  |		ПО (НачислениеЗарплатыНачисления.Сотрудник.Ссылка = РаботаСотрудниковНаОбъектеДанные.Сотрудник.Ссылка)
	  |ГДЕ
	  |	НачислениеЗарплатыНачисления.Ссылка = &Ссылка";
	 
	 Результат = Запрос.Выполнить().Выбрать();
	 
	 Сотр = Новый Массив;
	 
	 Пока Результат.Следующий() Цикл
		 
		Сотр.Добавить(Результат.Сотрудник);
		 
	КонецЦикла;
	
	Индекс =0;
	
	Для Каждого СтрокаТЧ из Объект.Начисления Цикл
		
		Индекс = Индекс +1;
		
		НайдСтроки = Объект.РаспределениеРезультатовНачислений.НайтиСтроки(Новый Структура("ИдентификаторСтроки",Индекс));
		
		НайдСтроки[0].Результат = НайдСтроки[0].Результат + 500000;
		
		Сообщить(НайдСтроки[0].Результат);
		
		НовСтр = Объект.РаспределениеРезультатовНачислений.Добавить();
		
		НовСтр.ИдентификаторСтроки = 1;
		
		НовСтр.СпособОтраженияЗарплатыВБухучете =НайдСтроки[0].СпособОтраженияЗарплатыВБухучете;
		
		НовСтр.СтатьяФинансирования = НайдСтроки[0].СтатьяФинансирования;
				
	КонецЦикла;
КонецПроцедуры
Показать


Вот код всей процедуры
+
6. Rain88 373 30.05.17 13:56 Сейчас в теме
Думаю вам нужно добавить обновление формы, данные то вы заполнили на сервере, а на клиенте их не видно.
+
7. 1c_uZer 30.05.17 14:46 Сейчас в теме
(6) а не подскажете как это реализовать? немного не понимаю...
+
8. Rain88 373 30.05.17 14:48 Сейчас в теме
 &НаКлиенте
Процедура НачисленияПриАктивизацииСтроки()
      НачисленияПриАктивизацииСтрокиНаСервере();
      ЭтаФорма.Прочитать();
КонецПроцедуры
+
9. 1c_uZer 30.05.17 14:54 Сейчас в теме
(8) сейчас попробую, спасибо.
+
12. 1c_uZer 30.05.17 16:32 Сейчас в теме
(8) к сожалению ничего не изменилось...
+
14. vadim1011985 99 30.05.17 16:37 Сейчас в теме
(12) попробуйте после заполнения через кнопку "еще" или "все действия" вызвать обновления формы вручную
+
17. 1c_uZer 30.05.17 16:51 Сейчас в теме
(14) вызвал, 0 реакции
+
19. KazanKokos 10 30.05.17 16:54 Сейчас в теме
(17) еще можно вызвать Обновить() у Формы
+
22. 1c_uZer 30.05.17 17:05 Сейчас в теме
(19) у меня точно так же как вы и сказали в модуле + на клиенте дописал ЭтаФорма.ОбновитьОтображениеДанных(); опять ничего не изменилось....
+
21. Rain88 373 30.05.17 16:56 Сейчас в теме
(17) ЗначениеВРеквизитФормы(ОбъектДокумента, "Объект") - не получается, скорее всего, потому что вы здесь "Для Каждого СтрокаТЧ из Объект.Начисления Цикл" используете Объект, а не ОбъектДокумента.
+
23. 1c_uZer 30.05.17 17:06 Сейчас в теме
(21) поменял но результат не меняется....
+
10. Plash 4 30.05.17 14:56 Сейчас в теме
Мне кажется обращение через "Объект." лишнее. Если на сервере работаете, исполльзуйте напрямую
Для Каждого СтрокаТЧ из Начисления Цикл
НайдСтроки = РаспределениеРезультатовНачислений.НайтиСтроки(Новый Структура("ИдентификаторСтроки",Индекс));
+
11. Plash 4 30.05.17 14:58 Сейчас в теме
Правда, скажу вам, в такие процедуры "НачисленияПриАктивизацииСтрокиНаСервере" такие громоздкие вычисления, лучше не совать бы.
+
13. KazanKokos 10 30.05.17 16:37 Сейчас в теме
Вернуть объект в реквизит формы забыли. ЗначениеВРеквизитФормы
+
15. KazanKokos 10 30.05.17 16:38 Сейчас в теме
ну и используйте в коде ОбъектДокумента а не Объект.
+
16. 1c_uZer 30.05.17 16:51 Сейчас в теме
(15) в конце добавил

ЗначениеВРеквизитФормы(ОбъектДокумента, "Объект");


ну и везде поставил объектдокумента

Изменений нет.
+
18. KazanKokos 10 30.05.17 16:53 Сейчас в теме
Не проверял:

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

КонецПроцедуры
Показать
+
20. Rain88 373 30.05.17 16:54 Сейчас в теме
Можно обойтись и без РеквизитФормыВЗначение, выгрузить в переменную таблицу Начисления, произвести с ней манипуляции и потом загрузить обратно.
+
24. DAL 30.05.17 17:09 Сейчас в теме
 НовСтр.ИдентификаторСтроки = 1;


А у вас все новые строки должны иметь ИдентификаторСтроки = 1?
+
25. 1c_uZer 30.05.17 17:11 Сейчас в теме
(24) на данный момент да.
+
27. DAL 30.05.17 17:18 Сейчас в теме
(25)

А что покажет нам вот это сообщение:

Индекс =0;

Сообщить(Строка(Объект.Начисления.Количество()));
    
Для Каждого СтрокаТЧ из Объект.Начисления Цикл

+
29. 1c_uZer 30.05.17 17:20 Сейчас в теме
31. 1c_uZer 30.05.17 17:23 Сейчас в теме
(27) по сути все верно на данный момент у меня 2 начисления
+
33. DAL 30.05.17 17:29 Сейчас в теме
(31)

Думаем логически, куда копать:

1. Почему может не отображаться ТЧ? - Только если данные не возвращаются или не создаются.

2. (Данные не создаются) Почему может не заполнятся ТЧ? - Только если не отрабатывает цикл
Для Каждого СтрокаТЧ из ОбъектДокумента .Начисления Цикл


3. (Данные не возвращаются) Почему? Потому что не верно передается реквизит "Объект".

Попробуйте без указания типа

ОбъектДокумента = РеквизитФормыВЗначение("Объект");
.........
ЗначениеВРеквизитФормы(ОбъектДокумента , "Объект");


-
KazanKokos; +1
35. 1c_uZer 30.05.17 17:35 Сейчас в теме
36. KazanKokos 10 30.05.17 17:36 Сейчас в теме
(35) заменили
ОбъектДокумента = РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.НачислениеЗарплаты")); 
на
ОбъектДокумента = РеквизитФормыВЗначение("Объект");
???
+
38. 1c_uZer 30.05.17 17:36 Сейчас в теме
(36) все верно) заменил)
+
37. DAL 30.05.17 17:36 Сейчас в теме
(35)

Копаем дальше.

А вот это отрабатывает?

НайдСтроки[0].Результат = НайдСтроки[0].Результат + 500000;
     
Сообщить(НайдСтроки[0].Результат);


Что пишет?
+
26. Rain88 373 30.05.17 17:17 Сейчас в теме
Пройдитесь отладчиком и проверьте, все ли у вас правильно ищется и заполняется.
+
28. 1c_uZer 30.05.17 17:18 Сейчас в теме
(26) ЗначениеВРеквизитФормы(ОбъектДокумента, "Объект") у меня тип неопределено....
+
30. DAL 30.05.17 17:23 Сейчас в теме
(28)


(28)
ЗначениеВРеквизитФормы(ОбъектДокумента, "Объект")


ОбъектДокумента = РеквизитФормыВЗначение("Объект");
.........
ЗначениеВРеквизитФормы(ОбъектДокумента , "Объект");
+
32. 1c_uZer 30.05.17 17:27 Сейчас в теме
(30) не совсем понял сути)
+
34. vadim1011985 99 30.05.17 17:34 Сейчас в теме
(32) в общем, почему бы в модуле объекта не сделать экспортную. процедуру и не проделать все действия там ?
+
39. 1c_uZer 30.05.17 17:39 Сейчас в теме
527000 все верно он прибавляет 500000 на следующей итерации 508100 опять же верно прибавляет 500000
+
40. DAL 30.05.17 17:40 Сейчас в теме
(39)
И эта процедура находится в модуле формы, так?
+
42. 1c_uZer 30.05.17 17:51 Сейчас в теме
(40) да в модуле формы, сейчас все сделаю но у меня это самая первая процедура на клиенте, точку останова ставить прям после объявления имени процедуры?
+
43. DAL 30.05.17 17:54 Сейчас в теме
(42)

Прям на строке вызова НачисленияПриАктивизацииСтрокиНаСервере();

В отладчике смотрите количество строк ТЧ, потом шаг и опять проверка количества строк ТЧ
+
44. 1c_uZer 30.05.17 18:03 Сейчас в теме
(43) Вот НовСтр.НомерСтроки сначала равен 3, потом 4 то есть я так понимаю строки он добавляет.
+
45. DAL 30.05.17 18:07 Сейчас в теме
(44)
Это, я так понимаю, трассировка сервера?

В клиенте вставьте:

Сообщить(Объект.РаспределениеРезультатовНачислений .Количество());
НачисленияПриАктивизацииСтрокиНаСервере();
Сообщить(Объект.РаспределениеРезультатовНачислений .Количество());
+
46. 1c_uZer 30.05.17 18:11 Сейчас в теме
(45) первое число 2 и второе 4
+
47. DAL 30.05.17 18:13 Сейчас в теме
(46)
Это автоматически означает, что данные с сервера вернулись и на клиенте присутствуют в уже измененном виде.

Соответственно, если не отображается на форме, смотрите, к чему привязан элемент формы
+
48. 1c_uZer 30.05.17 18:17 Сейчас в теме
(47) да тут должно заполниться табличную часть но 1с видимо решили что её не обязательно отображать на форме через конфигуратор и как отследить этот момент я не знаю)
+
50. DAL 30.05.17 18:22 Сейчас в теме
(48)
Вообще цель в итоге какая? Какой результат вам нужен?
+
51. 1c_uZer 30.05.17 18:25 Сейчас в теме
(50) да мне надо в этой тч добавить эти две строки с данными)
+
52. DAL 30.05.17 18:27 Сейчас в теме
(51)
В табличной части, как мы видели, строки добавились.

Но табличная часть, насколько я понял, не показана на форме?
+
53. 1c_uZer 30.05.17 18:29 Сейчас в теме
(52) вот к великому сожалению нет, а на форме в реквизитах даже была отключена Галка использовать всегда.
+
54. DAL 30.05.17 18:32 Сейчас в теме
(53)
Может быть данные должны показываться событийно, т.е. при каких-то условиях?
+
55. 1c_uZer 30.05.17 18:33 Сейчас в теме
(54) если включена настройка вести учет по "Статьям финансирования"
+
56. DAL 30.05.17 18:35 Сейчас в теме
(55)
Чем то еще помочь нужно?
+
57. 1c_uZer 30.05.17 18:36 Сейчас в теме
(56) и так очень помогли) сейчас попробую её отобразить и разобраться в чем может быть причина) спасибо огромное)
+
58. DAL 30.05.17 18:36 Сейчас в теме
(57)Не за что. Удачи)
+
49. DAL 30.05.17 18:20 Сейчас в теме +0.2 $m
(46)

Логика:

У объекта есть, я так понимаю, табличная часть РаспределениеРезультатовНачислений.
В табличной части есть реквизиты ИдентификаторСтроки, СпособОтраженияЗарплатыВБухучете, СтатьяФинансирования.

Соответственно на форме должна быть соответствующая таблица, в которой у столбцов источники данных должен быть

Объект.РаспределениеРезультатовНачислений.ИдентификаторСтроки
Объект.РаспределениеРезультатовНачислений.СпособОтраженияЗарплатыВБухучете
Объект.РаспределениеРезультатовНачислений.СтатьяФинансирования

Если ее нет, создайте дополнительную закладку и воткните туда табличную часть.

Там все сразу и посмотрите
+
41. DAL 30.05.17 17:44 Сейчас в теме
(39)
Встаньте в процедуре клиента до вызова серверной процедуры.
Проверьте количество строк ТЧ РаспределениеРезультатовНачислений

Потом протрассируйте и после вызова серверной процедуры проверьте количество строк.

Чтобы уже быть точно уверенными, что в табличной части строк стало больше
+
Внимание! Тема сдана в архив

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