Имя: Пароль:
1C
 
Как программно изменить операцию документа?
0 olmarty
 
19.10.06
11:37
сабж
1 Конь в пальто
 
19.10.06
11:39
жкк
2 olmarty
 
19.10.06
11:40
жжк эпсент... :( плиз подскажите оперативно. я завел реквизиты у операции и нужно изменить их для операций конкретных доков.
3 asady
 
19.10.06
11:41
(0) а если групповое перепроведение будет?
4 olmarty
 
19.10.06
11:43
(3) речь о простом проведении дока обработкой с одновременный изменением реквизитов операции
5 IgorKa
 
19.10.06
11:44
имхо - сначала измени документ, а то потом тебя будут часто иметь!
6 olmarty
 
19.10.06
11:45
(5) таки да, но все же сабж...
7 asady
 
19.10.06
11:48
(0)
1. для начала:
НайтиОперацию(<?>)
Синтаксис:
НайтиОперацию(<Документ>)
Назначение:
осуществляет поиск операции по значению типа ''Документ''.
Возвращает: 1 - действие выполнено, операция найдена; 0 - действие не выполнено, операция не найдена.
Параметры:
<Документ> - значение типа ''Документ''.

2. Затем
Пройтись по проводкам

3. Записать операцию
8 olmarty
 
19.10.06
11:51
(7)так и делаю:
оп = СоздатьОбъект("Операция");
Если оп.НайтиОперацию(док.ТекущийДокумент()) = 1 Тогда
   оп.Реквизит = ...;
   оп.Записать();
КонецЕсли;

но пишет: Объект заблокирован ....
9 olmarty
 
19.10.06
11:55
+(8) док получается из выборки. где же тут косяк? или - принципиальное ограничение?..
10 olmarty
 
19.10.06
11:56
ап
11 Sillver
 
19.10.06
11:59
(8) выйди из документа и операции прежде чем обработку пускать.... блин...
12 NuiNu
 
19.10.06
11:59
Опер.НайтиОперацию(Таб.Док);
   Опер.ВыбратьПроводки();
   Пока Опер.ПолучитьПроводку()=1 Цикл
       Если Опер.Дебет.Счет=Сч152 Тогда
           Опер.Дебет.Счет = Сч1522;
       ИначеЕсли Опер.Дебет.Счет=Сч153 Тогда
           Опер.Дебет.Счет = Сч1532;
       ИначеЕсли Опер.Дебет.Счет=Сч154 Тогда
           Опер.Дебет.Счет = Сч1542;
       КонецЕсли;
       Если Опер.Кредит.Счет=Сч152 Тогда
           Опер.Кредит.Счет = Сч1522;
       ИначеЕсли Опер.Кредит.Счет=Сч153 Тогда
           Опер.Кредит.Счет = Сч1532;
       ИначеЕсли Опер.Кредит.Счет=Сч154 Тогда
           Опер.Кредит.Счет = Сч1542;
       КонецЕсли;
   КонецЦикла;
   Опер.Записать();
13 olmarty
 
19.10.06
12:00
(11) т.е. запихать доки в СЗ, а выборку использовать нельзя?
14 Sillver
 
19.10.06
12:01
в (8) вроде правильно....
15 olmarty
 
19.10.06
12:01
+(13) ты это хотел сказать?
16 NuiNu
 
19.10.06
12:02
т.е. закрыть документ (интерактивно), а потом запускать обработку
17 Sillver
 
19.10.06
12:02
(13) у тя может документ или операция у кого то  открыта.... он ее записать не может
18 olmarty
 
19.10.06
12:03
(16) командор, обижаешь ! :(( документ закрыт. с ним работает обработка, выбирая из выборки.. я же в монополии
19 Sillver
 
19.10.06
12:04
(18) как именно ругается?
20 olmarty
 
19.10.06
12:05
(19) Объект заблокирован <название дока> - <дата>
21 olmarty
 
19.10.06
12:07
все - сработало. кстати, не вполне очевидная фича.
22 olmarty
 
19.10.06
12:11
ругань о блокировке вылетала на попытке провести док после записи операции. не ясно в чем дело. то, что весь блок находится в транзакции вроде-бы на это влиять не должно.
23 olmarty
 
19.10.06
12:12
всем супер-спасибо за помосч!
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший