Форум программистов, компьютерный форум, киберфорум
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/55: Рейтинг темы: голосов - 55, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 19
1

Внешняя обработка: не обновляется уже открытая форма после изменений в табличной части

09.11.2017, 14:35. Показов 10968. Ответов 15
Метки нет (Все метки)

Создана внешняя обработка. Добавляется кнопкой в документ в 1С ЗУП 3.1 в документах ДанныеДляРасчетаЗарплаты(создаются с помощью шаблонов). В открытой форме нажатие на кнопку вызывает обработку, делает изменения, но форма не обновляется. Ф-ция Сообщить выдает правильные результаты изменений.Чего-то не хватает, может быть знает кто-нибудь что еще нужно дописать? Если такой код запускаю в документе РазовоеНачисление - все работает, форма сразу обновляется и документ можно провести.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
   ВладелецФормы.Модифицированность = Истина;
   ОснРеквизит1 = ВладелецФормы.Объект;      
   ЗаполнитьОбъект(ОснРеквизит1);
   КопироватьДанныеФормы(ОснРеквизит1,ВладелецФормы.Объект);
КонецПроцедуры
&НаСервере
Функция ЗаполнитьОбъект(ОснРеквизит1)
   ТЧ =ОснРеквизит1.ЗначенияПоказателей; 
   Для Каждого Строка ИЗ ТЧ Цикл
      Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
         Строка.Значение = Строка.Значение +15;
                        Сообщить(Строка.Показатель);
                  Сообщить(Строка.Значение);
           КонецЕсли;
        КонецЦикла;
КонецФункции
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2017, 14:35
Ответы с готовыми решениями:

Розница 2.2.Внешняя обработка заполнения табличной части
Конфа розница 2.2, платформа 8.3.8. Как правильно заполнить ТЧ часть? Пытаюсь через Владельца...

Внешняя обработка Печать ценников: ошибка при попытке получения реквизита табличной части документа.
Хочу получить табличную часть товары документа установка цен номенклатуры. &НаКлиенте...

Обработка табличной части
Здравствуйте. Подскажите с чего начать или что нужно сделать. Есть документ, который должен...

Запрос. Условие: строка из первой табличной части равна любой строке из другой табличной части
Есть документ "РаспределениеМатериаловНаВыпуск". У этого документа имеется "Форма документа". На...

15
Эксперт 1С
475 / 413 / 92
Регистрация: 26.09.2012
Сообщений: 1,872
09.11.2017, 16:52 2
Может, владелецФормы.Обновить()?

Добавлено через 1 минуту
Еще можно попробовать все перенести на клиент
и избавиться от таких вещей как
ОснРеквизит1 = ВладелецФормы.Объект;
ТЧ =ОснРеквизит1.ЗначенияПоказателей;
А все реквизиты получать через точку, т.е работать непосредтсвенно с объектом владельца формы а не его копией.
0
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 19
09.11.2017, 21:51  [ТС] 3
говорит:{ВнешняяОбработка.ВнешняяОбработкаЗУП3102112017данны е.Форма.Форма.Форма(13)}: Метод объекта не обнаружен (Обновить)
ВладелецФормы.Обновить();

Добавлено через 3 минуты
хорошо, попробую. потом результат скажу.

Добавлено через 4 часа 52 минуты
Попробовала сделать. Код работает, значения пересчитываются, но на форме все равно нет измененных данных.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
        ВладелецФормы.Модифицированность = Истина;
               ТЧ1=ВладелецФормы.Объект.значенияПоказателей;
           Для Каждого Строка ИЗ ТЧ1 Цикл
           Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
            Строка.Значение = Строка.Значение +15;
            Сообщить(Строка.Показатель);
            Сообщить(Строка.Значение);
 
           КонецЦикла;
          ЭтаФорма.ОбновитьОтображениеДанных();
         ОтобразитьИзменениеДанных(ВладелецФормы.Объект,ВидИзмененияДанных.Изменение)  ;
КонецПроцедуры
0
Эксперт 1С
475 / 413 / 92
Регистрация: 26.09.2012
Сообщений: 1,872
09.11.2017, 22:33 4
1C
1
2
3
4
5
6
7
8
9
10
   ВладелецФормы.Модифицированность = Истина;
           Для Каждого Строка ИЗ ВладелецФормы.Объект.значенияПоказателейЦикл
           Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
            Строка.Значение = Строка.Значение +15;
            Сообщить(Строка.Показатель);
            Сообщить(Строка.Значение);
 
           КонецЦикла;
          ЭтаФорма.ОбновитьОтображениеДанных();
         ОтобразитьИзменениеДанных(ВладелецФормы.Объект,ВидИзмененияДанных.Изменение)
Добавлено через 11 секунд
а так?
0
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 19
09.11.2017, 22:47  [ТС] 5
Код изменила, но результат тот же.
Не знаю в чем разница, если этот же код работает с Документ - Разовые начисления, но структура этого документа определена в конфигурации и к нему напрямую обращаюсь, а Документ ДанныеДляРасчетаЗарплаты является общим для создания различных документов по шаблону (Шаблоны ввода исходных данных) интерактивно в 1С Предприятие. Т.е.когда захожу в журнал документов ДанныеДляРасчетаЗарплаты выбираю и кнопкой Создать новый документ, который называется Сделка, т.е. документ из шаблона. В конфигураторе именно такого документа Сделка нет, только документ ДанныеДляРасчетаЗарплаты. Может это не должно влиять, но я не могу нигде найти ответ.
0
1429 / 952 / 335
Регистрация: 16.01.2015
Сообщений: 3,964
10.11.2017, 01:08 6
khenata, Скорей всего, дело в этом (из СП)
Описание:

Копирует данные формы, обладающие совместимой структурой.
Структура форм несовместима. Реквизиты имеют одинаковое Имя? Одинаковый тип значений?
0
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 19
10.11.2017, 08:16  [ТС] 7
программно же видит реквизиты, которые созданы в 1С Предприятие. ЗначенияПоказателей- это табличная часть объекта ДанныеДляРасчетаЗарплаты, через эту табличную часть программа видит созданные мной реквизиты шаблона в 1С Предприятие, но в самом объекте Документы.ДанныеДляРасчетаЗарплаты.ЗначенияПоказателей моих реквизитов нет. Т.е. считывать данные можно, а вернуть рассчитанные значения в форму как интересно? Может есть где почитать решения для таких задач. Собственно говоря, нужно было создать специальный документ для не типового вида начисления и хотелось в некоторых столбцах производить вычисления и записывать результаты для каждой строки. Хотелось бы найти решение, т.к. это дает большую возможность гибко настраивать не стандартные виды начислений. Спасибо, что помогаете думать.
0
1429 / 952 / 335
Регистрация: 16.01.2015
Сообщений: 3,964
10.11.2017, 16:02 8
khenata,
через эту табличную часть программа видит созданные мной реквизиты шаблона в 1С Предприятие, но в самом объекте Документы.ДанныеДляРасчетаЗарплаты.ЗначенияПоказателей моих реквизитов нет.
Так о том и речь. На сервере вы форму владелец заполните без проблем, а дальше КопироватьДанныеФормы не отрабатывает.
Т.е. считайте, что вы создали структуру на владельце, условно:
("Номенклатура", Номенклатура), ("Сумма", Сумма). Если реквизит Номенклатура на форме приемник существует и тип значения одинаковый, данные перенесутся. Но если у вас поле на приемнике называется "Товар" или на источнике тип СправочникСсылка, а на приемнике Строка, то данных НЕ будет. Проверьте. Чудес-то не бывает. Раз работает с одной формой, но не работает со второй, значит дело в каком-то несоответствии во второй форме
0
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 19
10.11.2017, 16:29  [ТС] 9
не соображу как проверить и где смотреть, подскажите пожалуйста. в конфигураторе моего конкретного документа и его формы нет.
0
1429 / 952 / 335
Регистрация: 16.01.2015
Сообщений: 3,964
10.11.2017, 16:58 10
khenata, Не знаю точно, но вы говорите, что где-то существует шаблон, посмотреть в нем. Возможно дело в шаблоне?
Мысль пришла. Может так попробовать?

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
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
   ЗаполнитьНаСервере(ОбъектыНазначенияМассив [0]);
КонецПроцедуры;
 
&НаСервере
Процедура ЗаполнитьНаСервере(НашОбъект)
   Док = РеквизитФормыВЗначение("НашОбъект");
   ЗаполнитьОбъект(Док);
   ЗначениеВРеквизитФормы(Док, "НашОбъект");
КонецПроцедуры
 
 
// в модуле объекта обработки
 
 
Процедура ЗаполнитьОбъект(ОснРеквизит1) Экспорт
   ТЧ =ОснРеквизит1.ЗначенияПоказателей; 
   Для Каждого Строка ИЗ ТЧ Цикл
      Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
         Строка.Значение = Строка.Значение +15;
                        Сообщить(Строка.Показатель);
                  Сообщить(Строка.Значение);
           КонецЕсли;
        КонецЦикла;
КонецПроцедуры
0
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 19
10.11.2017, 22:02  [ТС] 11
тогда не находит Табличную часть:

{ВнешняяОбработка.ВнешняяОбработкаЗУП3102112017данные.Модуль Объекта(102)}: Поле объекта не обнаружено (ЗначенияПоказателей)
ТЧ =ОснРеквизит1.ЗначенияПоказателей;
0
1429 / 952 / 335
Регистрация: 16.01.2015
Сообщений: 3,964
10.11.2017, 22:43 12
khenata, А что отладчик показывает на значение ОбъектыНазначенияМассив [0]?
Просто не совсем пойму как работает ваша обработка Попробуйте изменить первую процедуру

1C
1
2
3
4
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
   ЗаполнитьНаСервере(ВладелецФормы.Объект);
КонецПроцедуры;
0
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 19
10.11.2017, 23:10  [ТС] 13
на ОбъектНазначенияМассив - показывает ДанныеФрормыСтруктура
0
1429 / 952 / 335
Регистрация: 16.01.2015
Сообщений: 3,964
10.11.2017, 23:13 14
khenata, Отлично! Тогда так

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
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
   ЗаполнитьНаСервере(ОбъектыНазначенияМассив [0]);
КонецПроцедуры;
 
&НаСервере
Процедура ЗаполнитьНаСервере(НашОбъект)
   Док = РеквизитФормыВЗначение("НашОбъект.Объект");
   ЗаполнитьОбъект(Док);
   ЗначениеВРеквизитФормы(Док, "НашОбъект.Объект");
КонецПроцедуры
 
 
// в модуле объекта обработки
 
 
Процедура ЗаполнитьОбъект(ОснРеквизит1) Экспорт
   ТЧ =ОснРеквизит1.ЗначенияПоказателей; 
   Для Каждого Строка ИЗ ТЧ Цикл
      Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
         Строка.Значение = Строка.Значение +15;
                        Сообщить(Строка.Показатель);
                  Сообщить(Строка.Значение);
           КонецЕсли;
        КонецЦикла;
КонецПроцедуры
0
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 19
10.11.2017, 23:23  [ТС] 15
а теперь :
ВнешняяОбработка.ВнешняяОбработкаЗУП3102112017данные.Форма.Ф орма.Форма(33)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
Док=РеквизитФормыВЗначение("НашОбъект.Объект");
по причине:
Недопустимое значение параметра (параметр номер '1')
0
1429 / 952 / 335
Регистрация: 16.01.2015
Сообщений: 3,964
11.11.2017, 00:18 16
khenata, Давайте попробуем через ДанныеФормыВЗначении. Все процедуры в модуле формы
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
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
   ЗаполнитьНаСервере(ОбъектыНазначенияМассив [0]);
КонецПроцедуры;
 
&НаСервере
Процедура ЗаполнитьНаСервере(НашОбъект)
   Док = ДанныеФормыВЗначение("НашОбъект",Тип("ДокументОбъект.ДанныеДляРасчетаЗарплаты");
   ЗаполнитьОбъект(Док.ЗначенияПоказателей);
   ЗначениеВРеквизитФормы(Док, "НашОбъект");
КонецПроцедуры
 
 
&НаСервере
Процедура ЗаполнитьОбъект(ТЧ) Экспорт
    
   Для Каждого Строка ИЗ ТЧ Цикл
      Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
         Строка.Значение = Строка.Значение +15;
                        Сообщить(Строка.Показатель);
                  Сообщить(Строка.Значение);
           КонецЕсли;
        КонецЦикла;
 
КонецПроцедуры
Добавлено через 3 минуты
Да ну на фиг. Невнимательность. Вторая процедура исправьте


1C
1
2
3
4
5
6
&НаСервере
Процедура ЗаполнитьНаСервере(НашОбъект)
   Док = ДанныеФормыВЗначение("НашОбъект",Тип("ДокументОбъект.ДанныеДляРасчетаЗарплаты");
   ЗаполнитьОбъект(Док.ЗначенияПоказателей);
   ЗначениеВДанныеФормы(Док, "НашОбъект");
КонецПроцедуры
И в третьей Экспорт не нужен

Добавлено через 11 минут
Нет не так. Сейчас напишу как надо. Уж извините, что-то туго соображаю сегодня ((

Добавлено через 8 минут
НашОбъект - без кавычек
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
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив) Экспорт
   ЗаполнитьНаСервере(ОбъектыНазначенияМассив [0]);
КонецПроцедуры;
 
&НаСервере
Процедура ЗаполнитьНаСервере(НашОбъект)
   Док = ДанныеФормыВЗначение(НашОбъект,Тип("ДокументОбъект.ДанныеДляРасчетаЗарплаты");
   ЗаполнитьОбъект(Док.ЗначенияПоказателей);
   ЗначениеВДанныеФормы(Док, НашОбъект);
КонецПроцедуры
 
 
&НаСервере
Процедура ЗаполнитьОбъект(ТЧ) Экспорт
    
   Для Каждого Строка ИЗ ТЧ Цикл
      Если СтрСравнить(Строка.Показатель, "СдельноНорма") = 0 Тогда
         Строка.Значение = Строка.Значение +15;
                        Сообщить(Строка.Показатель);
                  Сообщить(Строка.Значение);
           КонецЕсли;
        КонецЦикла;
 
КонецПроцедуры
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.11.2017, 00:18

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Экспорт в эксель табличной части подчиненной формы с учетом полей-комбобоксов в табличной части
Добрый день. Пришло пожелание от коллег выгружать информацию из табличной подформы в...

Внешняя обработка, форма внешней обработки
Есть 2 внешние обработки, каждая обработка это 1 отчет, а нужна 1 обработка с двумя отчетами, как...

Встроенная печатная форма/внешняя обработка
Прошу прощения, в абсолютном тупике. Нужно вызвать форму записи РС из справочника "Физические...

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


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

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

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