Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 сен 2024, 16:19

Доброе утро!Дайте пожалуйста дельный совет:)

Автор Лейсан, 30 ноя 2011, 09:36

0 Пользователей и 2 гостей просматривают эту тему.

Лейсан

С чем может быть связана ошибка?
Метод объекта не обнаружен (Записать)
         Док.Записать();

Klyacksa

Сорри... нужно подправить:
иначе
                 ДокСсылка=ДокСчет.НайтиПоНомеру(ТекущийНомер);
                Док=ДокСсылка.ПолучитьОбъект();


Записывать можно только объект, а НайтиПоНомеру возвращает ссылку на объект. Приходится явно получать сам объект.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Лейсан

 простите пожалуйста,мне ужасно не удобно...но у меня Ошибка при вызове метода контекста (ПолучитьОбъект)
  Док=ДокСсылка.ПолучитьОбъект();
по причине:
Элемент не выбран!

Klyacksa

Нужно отладчиком посмотреть, что же он возвращает в
ДокСчет.НайтиПоНомеру(ТекущийНомер)

Как вариант, если ТекущийНомер не задан, то должно возвращаться значение Неопределено.

Если бывают еще и пустые номера, значит, надо это тоже отрабатывать.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Лейсан

ДокСчет.НайтиПоНомеру(ТекущийНомер) не возвращает значений никаких(((

Лейсан

Функция загрузитьСчетаНаОплату()
      ДБФ = Новый XBase;
      ДБФ.ОткрытьФайл(ПутьКФайлу);
      ДБФ.Кодировка=КодировкаXBase.OEM;
      //Проверка на наличие записей
   Если ДБФ.КоличествоЗаписей() = 0 Тогда
      Сообщить("Файл данных пуст");
      ДБФ.ЗакрытьФайл();
      //Возврат                    
   КонецЕсли;
        //Переходим на первую строку файла
       ДокСчет=Документы.СчетНаОплатуПокупателю;    
    ДБФ.Первая();
    ПредыдущийНомер = 0;
   Док=Неопределено;
   
    Пока Истина Цикл

    //Создадим новый документ
         
      ТекущийНомер=ДБФ.NUMBERD;
      Если ТекущийНомер <> ПредыдущийНомер  Тогда
         
         //записываем предыдущий документ
      Если Док<>Неопределено тогда
         Док.Записать();
      КонецЕсли;   
      
    Если ДокСчет.НайтиПоНомеру(ТекущийНомер)=ДокСчет.ПустаяСсылка() тогда
        //переходим к следующему документу
        Док = ДокСчет.СоздатьДокумент();
      Док.Номер= СокрЛП(ДБФ.NUMBERD);
      Док.Дата = СокрЛП(ДБФ.DATE);
      Док.Организация = Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG));
      Док.ВалютаДокумента =Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VALD));
      Док.Контрагент=Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(ДБФ.KONTR));
       Док.СтруктурнаяЕдиница = Справочники.БанковскиеСчета.НайтиПоНаименованию(СокрЛП(ДБФ.NAMEBS));         
      ДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
      ДоговорКонтрагента.Владелец = Док.Контрагент.Ссылка;
      ДоговорКонтрагента.Наименование = СокрЛП(ДБФ.NAMED);
       ДоговорКонтрагента.Номер = СокрЛП(ДБФ.NUMBER);
      ДоговорКонтрагента.ВидДоговора = Вычислить("Перечисления.ВидыДоговоровКонтрагентов."+СокрЛП(ДБФ.VID));
      ДоговорКонтрагента.Дата = СокрЛП(ДБФ.DATED);
      ДоговорКонтрагента.ВалютаВзаиморасчетов=Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VAL));
       ДоговорКонтрагента.Организация =Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG));
      ДоговорКонтрагента.Записать();
      Док.ДоговорКонтрагента=ДоговорКонтрагента.Ссылка;
      Док.КратностьВзаиморасчетов=1;
       Банк= Справочники.Банки.СоздатьЭлемент();
       //Банк.КоррСчет=СокрЛП(ДБФ.KORS);
       //Банк.Код=СокрЛП(ДБФ.BIK);
       Банк.Наименование=СокрЛП(ДБФ.NAMEB);
       Банк.Записать();

      
       БанкСчет=Справочники.БанковскиеСчета.СоздатьЭлемент();
        БанкСчет.Владелец=Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG));
        БанкСчет.Банк=Справочники.Банки.НайтиПоКоду(ДБФ.BIK);
       БанкСчет.Наименование=СокрЛП(ДБФ.NAMEBS);
       БанкСчет.ВалютаДенежныхСредств=Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VAL));
       //БанкСчет.НомерСчета=СокрЛП(ДБФ.COUNT);
       Банк.Записать();
       БанкСчет.Записать();
   КонецЕсли;
   
     иначе
       ДокСсылка=ДокСчет.НайтиПоНомеру(ТекущийНомер);
      Док=ДокСсылка.ПолучитьОбъект();
   КонецЕсли;
   
   //Заполним табличную часть "Товары"

       НоваяСтрока=Док.Товары.Добавить();
       НоваяСтрока.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM));
       НоваяСтрока.ЕдиницаИзмерения= Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(СокрЛП(ДБФ.ED));
         НоваяСтрока.Количество=СокрЛП(ДБФ.KOL);
       НоваяСтрока.Цена=СокрЛП(ДБФ.PRICE);
       НоваяСтрока.СтавкаНДС=СокрЛП(ДБФ.NDS);
      
   //Заполним табличную часть "Оплачено"
       НоваяОплачено= Док.Оплата.Добавить();
       НоваяОплачено.ДатаОплаты=СокрЛП(ДБФ.DATEO);
       НоваяОплачено.Сумма=СокрЛП(ДБФ.SUM);
       НоваяОплачено.НомерДокумента=СокрЛП(ДБФ.NDOK);
            
   //Заполним табличную часть "Отгружено"
       НоваяОтгружено= Док.Отгрузка.Добавить();
       НоваяОтгружено.ДатаОтгрузки=СокрЛП(ДБФ.DATEOT);
       НоваяОтгружено.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM));
       НоваяОтгружено.Количество=СокрЛП(ДБФ.KOL);
       НоваяОтгружено.Цена=СокрЛП(ДБФ.PRICE);
       НоваяОтгружено.Сумма=СокрЛП(ДБФ.SUMOT);
    //иначе
    //   Док=ДокСчет.НайтиПоНомеру(ТекущийНомер);
    //конецЕсли;
    //КонецЕсли;
   Если Не ДБФ.Следующая()Тогда
         Прервать;
      КонецЕсли;
      ПредыдущийНомер = ТекущийНомер;
   КонецЦикла;
   
   //записываем последний док
   Если Док<>Неопределено тогда
      Док.Записать();
   КонецЕсли;   

Klyacksa

Как это никаких значений не возвращает? Так не может быть. Какое-то значение должно быть обязательно.
Посмотрите еще в этот момент, чему равен ТекущийНомер
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Klyacksa

Да, еще как вариант, посмотрите типы - кода документа Счета и ТекущегоНомера. Должен быть один тип
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Лейсан

ТекущийНомер равен номеру документа. кода документа Счета и ТекущегоНомера одинаковы.уже и не знаю где смотреть...

Klyacksa

Значения кода документа и ТекущегоНомера действительно могут быть на первый взгляд одинаковыми, но один может быть строкой, а другой число.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск