Имя: Пароль:
1C
1С v8
ВнешняяОбработка (не выходит изменить строки ТЧ документа)
,
0 IBTM
 
21.11.11
12:21
ЗУП 8. Сделал простейшую внешнию обработку. Пытаюсь изменить строку ТЧ документа "КадровоеПеремещениеОрг." Объект получил, цикл проходит удачно т.е. в отладчике вижу изменение ячейки. но сама ТЧ не меняется. Я уверен что мой косяк:). Что-там не так с кодом? Зарание спасибо!

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   Оклад = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням;
   
   Док = СсылкаНаОбъект.ПолучитьОбъект();
   
   ТЧН = Док.ОсновныеНачисления;
       
   Для Каждого Стр Из ТЧН Цикл
       Если Стр.ВидРасчета = Оклад Тогда
           Стр.Действие = ВидДействия;
           Стр.Показатель1 = Стр.Показатель1 * Коэффициент;
       КонецЕсли;
   КонецЦикла;
   
КонецПроцедуры
1 PLUT
 
21.11.11
12:22
(0) Док.Записать(....

не?
2 Еклмн
 
21.11.11
12:22
а ты потом записываешь объект?
3 IBTM
 
21.11.11
12:32
(1) да я его и в обработке записывал и сам заполняю тч, записываю док, потом запускаю обработку. Или что-то не так вообще?

(2) нет, в принципе зачем...?
4 IBTM
 
21.11.11
12:34
(2) тч я в отладчике вижу...
5 PLUT
 
21.11.11
12:40
(4) добавь после цикла

Док.Записать();
6 IBTM
 
21.11.11
12:48
(5) неа, я даж ща условие в цикле убрал, чтоб наверника.

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   Оклад = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням;
   
   Док = СсылкаНаОбъект.ПолучитьОбъект();
       
   ТЧН = Док.ОсновныеНачисления;
       
   Для Каждого Стр Из ТЧН Цикл
       //Если Стр.ВидРасчета = Оклад Тогда
           Стр.Действие = ВидДействия;
           Стр.Показатель1 = Стр.Показатель1 * Коэффициент;
       //КонецЕсли;
   КонецЦикла;
   
   Док.Записать();
   
КонецПроцедуры
7 hhhh
 
21.11.11
12:52
а как узнал, что не получилось?
8 IBTM
 
21.11.11
12:52
Тоже самое делаю в самом документе, выходит. Через ВнешОбр пока хочет:).
9 dva1c
 
21.11.11
12:54
(6) Док.Записать() спас?
10 Rizhij_Nikitos
 
21.11.11
12:54
(8) должно работать, Как ты ссылка на объект получаешь?
11 dka80
 
21.11.11
12:55
Для Каждого Стр Из Док.ОсновныеНачисления
12 IBTM
 
21.11.11
12:59
(7) Ребят спасибо, кажись вышло. Только в чём загвозтка была надо док закрыть и открыть. А разве нельзя както это увидеть без этих действий?
13 IBTM
 
21.11.11
13:10
Что ваще бред спросил:(? В доке есть такая кнопка как "перечитать данные", я так понел то что нужно, возможно как-то это использовать с помощью обработки?
14 IBTM
 
21.11.11
13:26
up!

Вы пробуете или вам уже не интересно?!
15 Шапокляк
 
21.11.11
13:28
(13) ДокументОбъект.Прочитать() не?
16 Reset
 
21.11.11
13:38
(14) Получить форму по ссылке, если форма уже открыта, сделать в её контексте (15).

Но это будет работать только в том же сеансе, где ты запускаешь обработку. Если открыли в другом сеансе, простого решения, кроме как закрыть-открыть вручную, нет.
17 IBTM
 
21.11.11
14:33
(16) Спасибо. А не подскажите как сделать форму в контексте? Синтаксис-помошник мне не помог, но думаю ни так искал...
18 Reset
 
21.11.11
15:16
(17) "как сделать форму в контексте" - не понимаю вопроса.

Форма=СсылкаНаОбъект.ПолучитьФорму();
Если Форма.Открыта() тогда
Форма.ЭтотОбъект.Прочитать();
КонецЕсли;
19 Шапокляк
 
21.11.11
16:11
(17) Форму в контексте? В (16) "в её контексте" - значит в контексте формы, т.е. в открытой форме. Вы, как я понимаю, что-то сделали с объектом из его открытой формы и при этом результат не отразился в форме. Вот и прочитайте заново основной реквизит формы, т.е. (15) в данном случае и есть программный вызов действия "Перечитать".
(18) не взлетит, т.к. у формы нет метода ЭтотОбъект.
20 IBTM
 
21.11.11
17:24
Не выходит
   Оклад = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням;
   
   Док = СсылкаНаОбъект.ПолучитьОбъект();
       
   ТЧН = Док.ОсновныеНачисления;
   
   УдаляемыеСтроки = Новый Массив;
   
   ВидДействия    = Перечисления.ВидыДействияСНачислением.Изменить;
   
   Для Каждого Стр Из ТЧН Цикл
       Если Стр.ВидРасчета = Оклад Тогда
           Стр.Действие = ВидДействия;
           Стр.Показатель1 = Стр.Показатель1 * Коэффициент;
       Иначе
           УдаляемыеСтроки.Добавить(Стр);
       КонецЕсли;
   КонецЦикла;
       
   Для Каждого Стр Из УдаляемыеСтроки Цикл
       ТЧН.Удалить(Стр);
   КонецЦикла;
   
   Док.Записать();
   
   Док = СсылкаНаОбъект.ПолучитьОбъект();
   
   Док.Прочитать();
       
       Док.Записать();
21 hhhh
 
21.11.11
17:39
ПолучитьОбъект(); получает каждый раз новый объект. ТО есть в конце у тебя 3 разных объекта образовалось в оперативной памяти.
22 IBTM
 
21.11.11
17:48
(21) немного не понел откуда был 3-ий :)...? Поправил. Сейчас-то вроде объект один(вроде), но всёже не выходит!

   Оклад = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням;
   
   Док = СсылкаНаОбъект.ПолучитьОбъект();
       
   ТЧН = Док.ОсновныеНачисления;
   
   УдаляемыеСтроки = Новый Массив;
   
   ВидДействия    = Перечисления.ВидыДействияСНачислением.Изменить;
   
   Для Каждого Стр Из ТЧН Цикл
       Если Стр.ВидРасчета = Оклад Тогда
           Стр.Действие = ВидДействия;
           Стр.Показатель1 = Стр.Показатель1 * Коэффициент;
       Иначе
           УдаляемыеСтроки.Добавить(Стр);
       КонецЕсли;
   КонецЦикла;
       
   Для Каждого Стр Из УдаляемыеСтроки Цикл
       ТЧН.Удалить(Стр);
   КонецЦикла;
   
       Док.Записать();
   
       Док.Прочитать();
       
   
23 Шапокляк
 
21.11.11
17:49
(22) Это код внешней обработки, вызываемой из формы документа?
24 Рыцарь
 
21.11.11
17:52
это не тонкий клиент?)
25 IBTM
 
21.11.11
17:54
(23)Один из вариантов что я пробою, да (сделал через внешние печатные формы). Также пробую открываю сам форму документа (как обычно), а обработку через файл-открыть. Указываю СсылкуНаОбъект через реквизит обработки и собственно... Она работает если док не открывать!

(24) точно нет!
26 Шапокляк
 
21.11.11
18:04
(25) Попробуйте изучить создание внешних обработок по заполнению табличных частей.  Ваша независимая внешняя обработка работает в любом случае, просто, если форма открыта, то изменения не отображаются. Чтоб отображались, попробуйте во внешнюю обработку дописать

Форма=СсылканаОбъект.ПолучитьФорму();
Форма.Закрыть();
Форма.открыть();

метод, конечно, через задний проход...
27 hhhh
 
21.11.11
18:11
(22) третий это тот, который на экране. Теперь 2 у тебя: который на экране и который ПолучитьОбъект().
28 Рыцарь
 
21.11.11
18:13
В форме обработке оповещение делаешь, а в форме документа ловишь оповещение и для объекта формы(ДокументОбъект) заново получаешь объект.
29 Рыцарь
 
21.11.11
18:13
После записи документа конечно))
30 Шапокляк
 
21.11.11
18:15
Дык если он форму дорабатывать будет (для отлавливания оповещений), то сразу бы и встроил процедурку в форму. Тут ведь, как я понимаю, весь цимес в том чтоб код в конфе не дописывать...
31 IBTM
 
21.11.11
18:20
(30) бинго! (29) Это и без всяких оповещений в ФормеДокумента. Короче я так понел, что не меняя конфу никак. Только, как был совет в (25) через обработки ТЧ, ни хотел я их пока трогать, но чувствую придется. И Форма.Закрыть не прокатит, объекта нет, только сылка. Печалька.
32 IBTM
 
21.11.11
18:22
Всё равно всем спасибо за участие, черпнул немного знаний:).
33 Шапокляк
 
21.11.11
18:24
"И Форма.Закрыть не прокатит, объекта нет, только сылка. Печалька"
я фигею
34 IBTM
 
21.11.11
18:32
(33)??
35 Шапокляк
 
21.11.11
18:37
(34) Какого объекта нет, если есть ссылка? Печалька, блин!!!
36 Reset
 
21.11.11
18:39
(19) "т.к. у формы нет метода ЭтотОбъект"
Это к чему было? Ты отличаешь метод от свойства(реквизита)?
37 Шапокляк
 
21.11.11
18:43
(36) Ну отличаю... Извини, в терминах ошиблась, надо было написать "т.к. у формы нет свойства(реквизита) ЭтотОбъект". Теперь понятнее к чему это было?
38 Reset
 
21.11.11
18:48
(37) Это свойства "Шапокляк" у формы документа нет. А "ЭтотОбъект" есть. Не пиши ерунду.
39 Шапокляк
 
21.11.11
18:56
(38) Извини, есть такое свойство. Но это не повод хамить.
40 IBTM
 
23.11.11
10:26
Всё таки можем подитожить!? Точто в (31) это так и есть?
41 IBTM
 
23.11.11
10:30
+ к (40), я про то что либо использовать ВО ТЧ, либо пилить конфу.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший