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

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

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

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

Лейсан


Klyacksa

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

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

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

Лейсан

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

Исправила на :Если ДокСчет.НайтиПоНомеру(ТекущийНомер,Дата) !Теперь говорит,{Форма.Форма.Форма(221)}: Значение не является значением объектного типа (Товары)
НоваяСтрока=Док.Товары.Добавить();

Klyacksa

Как это не доходит до НайтиПоНомеру? Так куда все-таки доходит?

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

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

Лейсан

Сделала так:)работает:)спасибо вам огромное:)   

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

    //Создадим новый документ
         
      ТекущийНомер=ДБФ.NUMBERD;
     Дата=ДБФ.DATE;
      Если ТекущийНомер <> ПредыдущийНомер  Тогда
         
         //записываем предыдущий документ
      Если Док<>Неопределено тогда
         Док.Записать();
      КонецЕсли;   
     
    Если ДокСчет.НайтиПоНомеру(ТекущийНомер,Дата)=ДокСчет.ПустаяСсылка() тогда
        //переходим к следующему документу
      Док = ДокСчет.СоздатьДокумент();
      Док.Номер= СокрЛП(ДБФ.NUMBERD);
      Док.Дата = Дата;
      Док.Организация = Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.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

Поиск