7.7 xBase

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Arfey, 21 авг 2008.

  1. TopicStarter Overlay
    Arfey
    Offline

    Arfey

    Регистрация:
    31 июл 2008
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Код:
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса;
    
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Сумма = Документ.ПоступлениеТМЦ.Сумма;
    |Дата = Документ.ПоступлениеТМЦ.ДатаДок;
    |НомерДок = Документ.ПоступлениеТМЦ.НомерДок;
    |ТМЦ = Документ.ПоступлениеТМЦ.ТМЦ.Наименование;  
    |Группировка СтрокаДокумента;
    |";            
    
    если Запрос.Выполнить(ТекстЗапроса) = 0 тогда 
    
    возврат;
    
    КонецЕсли;
    
    ДБФ = СоздатьОбъект("XBase");          //****
    ДБФ.ДобавитьПоле("NAME", "S", 25,0);   //****
    ДБФ.ДобавитьПоле("INN", "N", 10,0); 
    ДБФ.ДобавитьПоле("NAMBER", "N", 10,0);
    ДБФ.ДобавитьПоле("DATE", "D", 10,0);	//****
    ДБФ.СоздатьФайл("d:\1C\Test1.dbf");     //****
    
    тз  = создатьобъект("ТаблицаЗначений");
    
    Запрос.Выгрузить(тз,1,0);
    
    
    тз.ВыбратьСтроки();
    
    
    Пока тз.ПолучитьСтроку() = 1 Цикл   
    
    ДБФ.Добавить(); 
    ДБФ.NAME = тз.ТМЦ; 
    ДБФ.INN = тз.Сумма;
    ДБФ.NAMBER = тз.НомерДок;
    ДБФ.DATE = тз.Дата;
    ДБФ.Записать();	
    
    КонецЦикла; 
    ДБФ.ЗакрытьФайл();
    Т.ТолькоПросмотр(1);
    Т.Показать(); 
    
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/конецпроцедуры')">КонецПроцедуры	</span>  
    
    
    и оно формирует файл - туда (непонятно как заполняет строками с "ПоступлениеТМЦ")

    а потом при выгрузке получаетьться теже 4 документа - тока даты и содержание не соответцтвуют не "ПотступлениеТМЦ" не dbf файлу .... И в dbf файле тоже странное несоотвецтвие содержания по отношению к док "ПоступлениеТМЦ"


    Код:
    Процедура Сформировать()
    
    
    
    ДокТМЦ = СоздатьОбъект("Документ.ПоступлениеТМЦ");
    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ОткрытьФайл("d:\1C\Test1.dbf");
    
    ДБФ.Первая();
    ДокТМЦ.Новый(); 
    
    Пока ДБФ.ВКонце() = 0 Цикл
    
    ДокТМЦ.НоваяСтрока();
    ДокТМЦ.Наименование = ДБФ.NAME;
    ДокТМЦ.Сумма = ДБФ.INN;
    ДокТМЦ.Номер = ДБФ.NAMBER;
    ДокТМЦ.Дата = ДБФ.DATE;
    ДБФ.Следующая();
    
    КонецЦикла;   
    
    ДокТМЦ.Записать();
    ДБФ.ЗакрытьФайл();
    
    КонецПроцедуры
    
    Почему результат есть но везде разный ... помогите с кодом я не понимаю в чём причина ...
  2. LenaSun
    Offline

    LenaSun

    Регистрация:
    24 июл 2007
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    А запрос проверяли на правильность? в таблице значений все правильно выгружается из запроса?
  3. bob
    Offline

    bob Опытный в 1С

    Регистрация:
    7 май 2008
    Сообщения:
    386
    Симпатии:
    0
    Баллы:
    26
    и как, интересно, у тебя получается загрузить несколько документов? Судя по коду, он будет один.
  4. TopicStarter Overlay
    Arfey
    Offline

    Arfey

    Регистрация:
    31 июл 2008
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Я всматривался - оно загружает в ДБФ ... но если наименование повторяеться то загружает только первое .... (например Иголки в 1 документе ...а Иголки в 2 или 3,4 уже пропускаеть )

    Сечас буду проверять)
  5. TopicStarter Overlay
    Arfey
    Offline

    Arfey

    Регистрация:
    31 июл 2008
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Вобщем оно нормально записало в .dbf но там где нименование по документам повторяються - выходит фигня:

    Факс и бумага числеться в 1 документе на сумму 150,075 грн
    и в 3 документе на сумму 1847335 грн

    а в .dbf оно встречаеться 1 раз на суму 1847335 грн и номер дока там 3


    тоже самое Набором швейных игл


    В чём может быть прикол... такого запроса?? (подскажыте групировку в запросе может неправельная ил хз - я даже не знаю что)... :unsure:
  6. bob
    Offline

    bob Опытный в 1С

    Регистрация:
    7 май 2008
    Сообщения:
    386
    Симпатии:
    0
    Баллы:
    26
    сначал группируй по документам, потом по строкам. Можно вообще без запроса, просто док выбирать....
  7. TopicStarter Overlay
    Arfey
    Offline

    Arfey

    Регистрация:
    31 июл 2008
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Сумма = Документ.ПоступлениеТМЦ.Сумма;
    |Дата = Документ.ПоступлениеТМЦ.ДатаДок;
    |НомерДок = Документ.ПоступлениеТМЦ.НомерДок;
    |ТМЦ = Документ.ПоступлениеТМЦ.ТМЦ.Наименование;
    |Группировка Документ;
    |Группировка СтрокаДокумента;
    |";

    Так уже лучше ... теперь хоть таких пропусков нет - всё выводит (нада ещё почитать про группировку)
  8. TopicStarter Overlay
    Arfey
    Offline

    Arfey

    Регистрация:
    31 июл 2008
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1

    Помогите с загрузкой .dbf в другую базу - оно мне загрузило 1 документом - а в нём все наименования

    а нада чтоб 4 докум и наименования также распределялись как и в в базе с которой создавался dbf
  9. bob
    Offline

    bob Опытный в 1С

    Регистрация:
    7 май 2008
    Сообщения:
    386
    Симпатии:
    0
    Баллы:
    26
    при переборе таблицы, смотри, когда начинается новый документ, т.е. в строке идет информация о дате и номере документа. В этот момент, записывай сформированный док и начинай заполнять новый.
    Черт, у тебя 2 темы похожих, читай обе.
  10. TopicStarter Overlay
    Arfey
    Offline

    Arfey

    Регистрация:
    31 июл 2008
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1

    Тут всё готово (тема закрыта)

    Код:
    //*******************************************
    Процедура Сформировать()
    
    
    //	Т = СоздатьОбъект("Таблица");
    ДокТМЦ = СоздатьОбъект("Документ.ПоступлениеТМЦ");
    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ОткрытьФайл("d:\1C\Test1.dbf");
    
    
    
    Сч = Number(ДБФ.NAMBER);
    ДБФ.Первая();
    
    Пока ДБФ.ВКонце() = 0 Цикл
    
    
    если Number(ДБФ.NAMBER) = Сч тогда 
    
    ДокТМЦ.Новый();
    Сч = Сч + 1; 
    
    ДокТМЦ.НоваяСтрока();
    ДокТМЦ.Наименование = ДБФ.NAME;
    ДокТМЦ.Сумма = ДБФ.INN;
    ДокТМЦ.Номер = ДБФ.NAMBER;
    ДокТМЦ.Дата = ДБФ.DATE;  
    ДокТМЦ.Записать();
    
    
    Сообщить("Создать Док"); 
    
    иначе
    
    ДокТМЦ.НоваяСтрока();
    ДокТМЦ.Наименование = ДБФ.NAME;
    ДокТМЦ.Сумма = ДБФ.INN;
    ДокТМЦ.Номер = ДБФ.NAMBER;
    ДокТМЦ.Дата = ДБФ.DATE;  
    ДокТМЦ.Записать();
    
    Сообщить("Зоздать строки Строки");
    //	Т.ВывестиСекцию("Секция_1");
    КонецЕсли;  
    
    ДБФ.Следующая(); 
    
    КонецЦикла;  
    
    ДБФ.ЗакрытьФайл();
    //Т.ТолькоПросмотр(1);
    //Т.Показать();   
    
    КонецПроцедуры
    
  11. bob
    Offline

    bob Опытный в 1С

    Регистрация:
    7 май 2008
    Сообщения:
    386
    Симпатии:
    0
    Баллы:
    26
    ты сравниваешь номер документа со счетчиком, который начинается с номера первого документа. А если номер текстовый? Если документ был создан, а потом удален? Я считаю, лучше определять начало нового документа именно по новому номеру при переборе таблицы или какому-то признаку (его можно самому придумать).

    меня тут стадо адамово пристыдило, что я бабки прошу за решение вопросов, кинь мне файл с выгрузкой и номер релиза, куда надо загрузить, я тебе сбацаю всё. :unsure:
    wizard_oleg[собака]mail.ru

Поделиться этой страницей