"Не выбран документ!" при Записать()

1. bEGEM0t77 09.11.07 18:03 Сейчас в теме
предисловие.
в поиске был. может плохо был, тогда, плиз, прямую ссылка на топик в студию (сижу через gprs перерывать весь форум нет возможности)
есть топик http://infostart.ru/forum/read.php?23,9722,9762,quote=1,ref=18940 , но этот вариант не подходит: там просто ошибка была в самом коде. а предложение заключить часть кода в транзакцию, конечно, хорошо, но как это может помочь в данном случае представляю себе плохо (на всякий случай проверил, как и ожидалось - не помогло).

возникла необходимость в таком коде (док задается на форме)
Процедура Сформировать()
//// вариант 1
//стр = "Документ."+Док.Вид();
//текДок = создатьобъект(стр);
//текДок = Док;
//текДок.ВыбратьСтроки();
//Пока текДок.ПолучитьСтроку()=1 Цикл
// текДок.Коэффициент = текДок.Номенклатура.БазоваяЕдиница.Коэффициент;
//КонецЦикла;
//текДок.Записать();

// вариант 2
док.ВыбратьСтроки();
Пока док.ПолучитьСтроку()=1 Цикл
док.Коэффициент = док.Номенклатура.БазоваяЕдиница.Коэффициент;
КонецЦикла;
док.Записать();
КонецПроцедуры

выдается:
док.Записать();
{путь\имя.ERT(18)}: Не выбран документ!

при любом варианте (ну номера строк меняются).
подскажите, пожалуйста, что я забыл или неправильно делаю?
---------------------------
извини, не нашел как удалить тему
вопрос решил. просто полетела база ТиС на одном из подразделений, напрягся, перенервничал. сходил, покурил, вспомнил как надо программировать на 1с
правильный вариант, конечно:
стр = "Документ."+Док.Вид();
текДок = создатьобъект(стр);
Если текДок.НайтиДокумент(Док)=1 Тогда
текДок.ВыбратьСтроки();
Пока текДок.ПолучитьСтроку()=1 Цикл
текДок.Коэффициент = текДок.Номенклатура.БазоваяЕдиница.Коэффициент;
КонецЦикла;
текДок.Записать();
Иначе
Сообщить("док не нашли");
КонецЕсли;
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. CheBurator 2684 10.11.07 01:45 Сейчас в теме
Пиши проще.
а то от таких писателей код превращается не в елочку а в сибирскую тайгу.
я бы написал так
Код
Если текДок.НайтиДокумент(Док)=0 Тогда 
  Сообщить("док не нашли"); 
  Возврат; //или продолжить или еще что-нить
КонецЕсли;

текДок.ВыбратьСтроки(); 
Пока текДок.ПолучитьСтроку()=1 Цикл 
текДок.Коэффициент = текДок.Номенклатура.БазоваяЕдиница.Коэффициент; 
КонецЦикла; 
текДок.Записать(); 
Показать полностью
3. GreyK 288 10.11.07 23:54 Сейчас в теме
Чёт я не заметил объявления нового документа, команда ТекДок.Новый()
4. poppy 11.11.07 01:10 Сейчас в теме
Serjant Написал:
-------------------------------------------------------
> Чёт я не заметил объявления нового документа,
> команда ТекДок.Новый()

В поставленной задаче этого не требуется...
5. GreyK 288 11.11.07 01:56 Сейчас в теме
Так и поиска документа тоже нет, а изменять документ можно только если: Док=СоздатьОбъект("Документ");
//Док.Новый();ну или
Док.найтидокумент(Текдок);
А вообще есть Синтаксис-Помощник.
6. bEGEM0t77 12.11.07 11:30 Сейчас в теме
2Сhe Burashka бесспорно Ваш вариант оформления элегантнее, но смысл кода все равно не меняется. расширяться код тоже не будет, так что мой вариант без "возврат" также имеет право на жизнь ;)
а про елочку, если Вы имеете ввиду, что нет ведущих табов, то увы и ах :( при копи-пасте они потерялись, а какие коды (BB-Code и прочие) используются на данном форуме не прочитал

2Serjant извините, но будьте проще ;) все в коде и предистории есть.
1. Док - задается на форме
2. текДок - создается в коде:
стр = "Документ."+Док.Вид();
текДок = создатьобъект(стр);
3. поиска документа в первом варианте действительно не было. ну забыл я, что прямое присваивание (текДок = Док) в данном случае неприемлимо. но в третьем варианте (в добавленной области) поиск уже есть:
Если текДок.НайтиДокумент(Док)=1 Тогда
4. Синтаксис-Помощник действительно есть ;) но вот к примеру в статье о "Записать()" ни слова не сказано, что метод применим только к объектам, созданным "создатьобъект". и о том, что нельзя напрямую работать с документом, выбранном на форме, там тоже ни слова нет. а это, вообще говоря, не очевидно.
7. CheBurator 2684 12.11.07 11:51 Сейчас в теме
То что табы потерялись при копи-пасте - это понятно.
Имхо: если вложенность если/Цикл больше 3-х - однозначно надо применять варианты улучшения читабельности кода, типа моего...
8. danser 3 20.11.07 12:42 Сейчас в теме
Посмотри что скажет на Сообщить(текДок);, ну и спозицианироваться на нём тоже было бы не плохо(На всякий случай). А так Отладчик тебе в помощь!
Оставьте свое сообщение

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