Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Загрузка из DBF в докумен ПоступленияТоваровИУслуг
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
azemlZX
Доброго ........!Вот така проблема!
Вигружаю ДБФ из реализации все оки , а загрузити не виходить.А конкретніше, загрузка виходить тільки в кожний документ воно ліпить тільки 1-ну позицію, а якщо в документі є 2-ві і більше позицій не виходить як загрузити всі позиції?

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    БД = Новый XBase;
       БД.ОткрытьФайл("C:\Tovaru.dbf");

    Орг = Справочники.Организации.НайтиПоКоду("000000001");

    КонтАг = Контр123;
    ДогКонт = ДогКонт123;
    сч = 0;
       
    НомерДок = БД.DATA;
        
    Пока БД.Следующая() Цикл
        
        док=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        док.Контрагент = КонтАг;
        док.Организация = Орг;
        док.ДоговорКонтрагента = ДогКонт123;
        док.Дата = БД.DATA;
        
        сч = сч +1;
        Сообщить(сч);
        
        ТабЧасТов = док.Товары.Добавить();
        ТабЧасТов.Номенклатура = БД.Nom;
        ТабЧасТов.Количество = БД.Kol;
        ТабЧасТов.Цена = БД.Price;
    
          
            док.Комментарий =БД.Koment;
            док.Записать();
            сч = сч + 1;    
            Сообщить(сч);
            КонецЦикла;
    
БД.ЗакрытьФайл();

Сообщить("---------------------------------------------------------------------");
Сообщить("Кількість завантажених документів  " + сч);
КонецПроцедуры



 ! 

Правила, п.5
 
logist
Ваш код написан так, что бы загружать только одну строку. Сначала создание документа, а потом в цикле заполнение ТЧ Товары, хотя это ответ пальцем в небо (я не знаю струтуру вашего DBF)
azemlZX
Цитата
Ваш код написан так, что бы загружать только одну строку. Сначала создание документа, а потом в цикле заполнение ТЧ Товары, хотя это ответ пальцем в небо (я не знаю струтуру вашего DBF)


В мене було 2 варианта

1 це коли є 1 DBF в ньому: номер,дата,организакия,контрагент,договор контрагента и таб часть товари номенклатура,цена количество
2 це коли є 2 DBF в одному шапка: номер,дата,организакия,контрагент,договор контрагента а в другому таб. часть товари товари номенклатура,цена количество.
Нада шоб загрузалося як і було а не з 1 докумекнта вигрузки p 3-ма позиціями виходить 3 документи =(

Коли в мене було 2 DBF то я зрівнював по номеру це був унікальний ключ ,але нічого не вийшло.
logist
В первом варианте вы выгружаете все в одну ТЗ, сворачиваете номера и даты (или только номера ели они уникальны), затем проходом по номенам берете из таблицы данные документа и создаете документы.

azemlZX
Вот спроба №2 і тож мимо icon_cuss.gif icon_cuss.gif icon_cuss.gif

    БДШ = Новый XBase;
       БДШ.ОткрытьФайл("C:\shapka.dbf");
    БД = Новый XBase;
       БД.ОткрытьФайл("C:\Tovaru.dbf");



    Орг = Справочники.Организации.НайтиПоКоду("000000001");

    КонтАг = Контр123;
    ДогКонт = ДогКонт123;
    сч = 0;
       
    НомерДок = БД.KOD;
    НомерДок1 = БДШ.KOD;
    
    Сообщить(НомерДок);
    Сообщить(НомерДок1);
        
    Пока БД.Следующая() Цикл
    Пока БДШ.Следующая() Цикл      
                
        НомерДок2 = БД.KOD;
        НомерДок3 = БДШ.KOD;
        
        Сообщить(НомерДок2);
        Сообщить(НомерДок3);

        
        док=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        док.Контрагент = КонтАг;
        док.Организация = Орг;
        док.ДоговорКонтрагента = ДогКонт123;
        док.Дата = ТекущаяДата();
        док.ОтражатьВБухгалтерскомУчете = Истина;
        док.ОтражатьВУправленческомУчете = Истина;
        док.ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("грн");
        
        сч = сч +1;
         номен = БД.Nom;
         Номенклат = Справочники.Номенклатура.НайтиПоНаименованию(номен);
         Един =  БД.ED;
         Единиц = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(Един);
        
         Если НомерДок = НомерДок1 Тогда
            
        ТабЧасТов = док.Товары.Добавить();
        ТабЧасТов.Номенклатура = Номенклат;
        ТабЧасТов.Количество = БД.Kol;
        ТабЧасТов.Цена = БД.Price;
        ТабЧасТов.ЕдиницаИзмерения = Единиц;
        ТабЧасТов.Коэффициент = "1";
          Иначе
        ТабЧасТов = док.Товары.Добавить();
        ТабЧасТов.Номенклатура = Номенклат;
        ТабЧасТов.Количество = БД.Kol;
        ТабЧасТов.Цена = БД.Price;
        ТабЧасТов.ЕдиницаИзмерения = Единиц;
        ТабЧасТов.Коэффициент = "1";

    КонецЕсли;
    док.Комментарий =БДШ.Koment;
    док.Записать();

             Сообщить(сч);
            КонецЦикла;

            КонецЦикла;
    
БД.ЗакрытьФайл();

Сообщить("---------------------------------------------------------------------");
Сообщить("Кількість завантажених документів  " + сч);



 ! 

Правила, п.12
 
logist
Вернусь к тому, что говорил выше:
Цитата(logist @ 15.12.13, 9:22) необходимо зарегистрироваться для просмотра ссылки
Сначала создание документа, а потом в цикле заполнение ТЧ Товары

Начало цикла - Создание документа - Начало вложенного цикла - Добавление в этот документ ТЧ.
У вас же так:
Начало цикла - Начало вложенного цикла - Создание документа - Добавление в ТЧ.
azemlZX
Цитата(logist @ 15.12.13, 22:42) необходимо зарегистрироваться для просмотра ссылки
Вернусь к тому, что говорил выше:

Начало цикла - Создание документа - Начало вложенного цикла - Добавление в этот документ ТЧ.
У вас же так:
Начало цикла - Начало вложенного цикла - Создание документа - Добавление в ТЧ.


    БДШ = Новый XBase;
       БДШ.ОткрытьФайл("C:\shapka.dbf");
    БД = Новый XBase;
       БД.ОткрытьФайл("C:\Tovaru.dbf");



    Орг = Справочники.Организации.НайтиПоКоду("000000001");

    КонтАг = Контр123;
    ДогКонт = ДогКонт123;
    сч = 0;
               
    Пока БД.Следующая() Цикл
    
        
        док=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        док.Контрагент = КонтАг;
        док.Организация = Орг;
        док.ДоговорКонтрагента = ДогКонт123;
        док.Дата = ТекущаяДата();
        док.ОтражатьВБухгалтерскомУчете = Истина;
        док.ОтражатьВУправленческомУчете = Истина;
        док.ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("грн");
        
        сч = сч +1;
         номен = БД.Nom;
         Номенклат = Справочники.Номенклатура.НайтиПоНаименованию(номен);
         Един =  БД.ED;
         Единиц = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(Един);
         Пока БДШ.Следующая() Цикл      
                
        НомерДок2 = БД.KOD;
        НомерДок3 = БДШ.KOD;
        
        Сообщить(НомерДок2);
        Сообщить(НомерДок3);

         Если НомерДок = НомерДок1 Тогда
            
        ТабЧасТов = док.Товары.Добавить();
        ТабЧасТов.Номенклатура = Номенклат;
        ТабЧасТов.Количество = БД.Kol;
        ТабЧасТов.Цена = БД.Price;
        ТабЧасТов.ЕдиницаИзмерения = Единиц;
        ТабЧасТов.Коэффициент = "1";
          //Иначе
        
    КонецЕсли;
    док.Комментарий =БДШ.Koment;
    док.Записать();

             Сообщить(сч);
            КонецЦикла;

            КонецЦикла;


 ! 

Правила, п.12. Последнее предупреждение.
 
Ardi
Попробуйте почитать эту книгу: необходимо зарегистрироваться для просмотра ссылки
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.