Полная версия этой страницы:
изменение реквизита
помогите разобраться, не работает код. после завершения обработки не сохраняются результаты вот код:
Банк=СоздатьОбъект("Справочник.БанковскиеСчета");
Банк.ВыбратьЭлементы();
Банк.НайтиПоНаименованию("Онего");
Онего = Банк.ТекущийЭлемент();
Банк.НайтиПоНаименованию("Балтийский");
Балт = Банк.ТекущийЭлемент();
Дог=СоздатьОбъект("Справочник.рДоговорРасчетов");
Контр=СоздатьОбъект("Справочник.Контрагенты");
Контр.ВыбратьЭлементы();
Пока Контр.ПолучитьЭлемент()>0 Цикл
ТекКонтр = Контр.ТекущийЭлемент();
Если (Лев(ТекКонтр.Код,1)<>"ч") и (Лев(ТекКонтр.Код,1)<>"п") Тогда
Дог.ИспользоватьВладельца(ТекКонтр);
Дог.ВыбратьЭлементы();
Пока Дог.ПолучитьЭлемент()>0 Цикл
ТекДог = Дог.ТекущийЭлемент();
Если ТекДог.Код = ТекКонтр.Код тогда
Если (ТекДог.Бюджет.Код = "4") и (ТекДог.Банк = Онего) тогда
ТекДог.Банк = Балт;
Дог.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Контр.Записать();
КонецЕсли;
КонецЦикла;
В отладчике попадаете на команды Записать()?
Пробывали
вместо Дог.Записать(); исрользовать ТекДог.Записать();
вместо Контр.Записать(); исрользовать ТекКонтр.Записать();
?
Да, суть в том, что команда метод Записать() - используется только для созданных объектов. В отладчике на команду попадает. Пока ТекДок не принимает другое значение, реквизит "Банк" остается таким как нужно, а потом - меняется обратно. Даже после метода "Записать()"
Когда получаете ссылку на договор или контрагента попробуйте заново создать объект и найти элемент этого объекта, а потом изменять его
т.е.
ТекКонтр = Контр.ТекущийЭлемент();
попробуйте заменить на что то типа
ТекКонтр = СоздатьОбъект("Справочник.Контрагенты");
ТекКонтр.НайтиЭлемент(Контр.ТекущийЭлемент());
....
ТекКонтр.Записать();
И тоже самое для договоров.
Хотя хз, я уже давно на 7.7 не программировал, подзабыл уже. Смысл в том что вы возможно сами дали ответ. Нужно получить договор(котрагента) с помощью СоздатьОбъект, а потом его записать.
Если так сделать, то получается слдующее: после того, как переменная ТекДог принимает значение "Справочник.рДоговорРасчетов", текущий элемент справочника меняет значение реквизита на то, которые было и не сохраняется. (это по отладчику), поэтому последующая команда "Записать()" смысла не имеет...
А может ТекКонтр и ТекДог записать, а не Контр и Дог?
Имелось ввиду следующее
Пока Дог.ПолучитьЭлемент()>0 Цикл
ТекДог = СоздатьОбъект("Справочник.рДоговорРасчетов");
ТекДог.НайтиЭлемент(Дог.ТекущийЭлемент());
Если ТекДог.Код = ТекКонтр.Код тогда
Если (ТекДог.Бюджет.Код = "4") и (ТекДог.Банк = Онего) тогда
ТекДог.Банк = Балт;
ТекДог.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
попробуй
ТЕ так
Цитата(abuja @ 21.10.10, 14:12) необходимо зарегистрироваться для просмотра ссылки
Банк=СоздатьОбъект("Справочник.БанковскиеСчета");
Банк.ВыбратьЭлементы();
Банк.НайтиПоНаименованию("Онего");
Онего = Банк.ТекущийЭлемент();
Банк.НайтиПоНаименованию("Балтийский");
Балт = Банк.ТекущийЭлемент();
Дог=СоздатьОбъект("Справочник.рДоговорРасчетов");
Контр=СоздатьОбъект("Справочник.Контрагенты");
Контр.ВыбратьЭлементы();
Пока Контр.ПолучитьЭлемент()>0 Цикл
Если (Лев(Контр.Код,1)<>"ч") и (Лев(Контр.Код,1)<>"п") Тогда
Дог.ИспользоватьВладельца(Контр);
Дог.ВыбратьЭлементы();
Пока Дог.ПолучитьЭлемент()>0 Цикл
Если Дог.Код = Контр.Код тогда
Если (Дог.Бюджет.Код = "4") и (Дог.Банк = Онего) тогда
Дог.Банк = Балт;
Дог.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Спасибо всем огромное за помощь! DMITER - Вам, спасибо, так заработало!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.