7.7 Отсеять повторяющиеся значения из DBF

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Evgii, 19 июн 2015.

  1. TopicStarter Overlay
    Evgii
    Offline

    Evgii

    Регистрация:
    19 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток, люди добрые! Помогите новичку, пожалуйста!
    Есть ДБФ-ка с двумя полями (поле-1 и поле-2) в которых повторяются значения.
    Как отсеять повторные значения из поля-2 и вывести в табличную часть?
    а) если в поле-1 и в поле-2 значение совпало- не выводить
    б) если значение есть только в поле-1- не выводить
    в) если значение есть только в поле-2- ВЫВЕСТИ в табличную часть
    для наглядности вложил скриншот
    Буфер обмена01.jpg
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.580
    Симпатии:
    717
    Баллы:
    204
    С использованием 1С: Загрузить в ТЗ и запросом выбрать нужное, выгрузить в *.DBF.
    С использованием АССЕSS: импортировать, запросом выбрать нужное, выгрузить в *.DBF
  3. TopicStarter Overlay
    Evgii
    Offline

    Evgii

    Регистрация:
    19 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    а пример кода для 1с можете написать?
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.580
    Симпатии:
    717
    Баллы:
    204
    Погорячился я на счет обработать ТЗ с помощью запроса в 7.7.....
    Простым циклом все будет решаться.

    Ну а насчет кода: в синтаксис-помощнике есть описание методов работы с *.DBF.
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Только после загрузки в ТЗ сначала сортирнуть надо....
  6. TopicStarter Overlay
    Evgii
    Offline

    Evgii

    Регистрация:
    19 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Код:
    //*******************************************
    Процедура Сформировать() 
        Таб=СоздатьОбъект("ТаблицаЗначений");
        Таб.НоваяКолонка("поле1","Строка");
        Таб.НоваяКолонка("поле2","Строка");
        ДБФ=СоздатьОбъект("XBASE");
        ДБФ.ОткрытьФайл("C:\OUT\1.dbf");
        ДБФ.Первая(); 
        Для й=1 По ДБФ.КоличествоЗаписей() Цикл
            Таб.НоваяСтрока();
           Таб.Поле1=ДБФ.ПолучитьЗначениеПоля("N1"); 
            Таб.Поле2=ДБФ.ПолучитьЗначениеПоля("N2");
            ДБФ.Следующая();
        КонецЦикла;   
    
        Т1=СоздатьОбъект("Таблица");
        Таб.ПолучитьСтроку(); 
        Таб.ВыбратьСтроки();
        Пока Таб.ПолучитьСтроку()=1 Цикл
            Т1.ВывестиСекцию("Строка");
        КонецЦикла;
        Т1.Показать("Таблица"); 
    
    КонецПроцедуры
    
    
    вывел в таблицу, как дальше быть?
  7. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.580
    Симпатии:
    717
    Баллы:
    204
    В другeю ТЗ выводи значения, потом из ТЗ сделаешь *.DBF
  8. TopicStarter Overlay
    Evgii
    Offline

    Evgii

    Регистрация:
    19 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    что-то не понял, нужно что бы поля 1 и 2 были в разных дбф?
  9. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.580
    Симпатии:
    717
    Баллы:
    204
    Нет. Результат всех этих действий со значениями какой должен быть: новый *.DBF?
  10. TopicStarter Overlay
    Evgii
    Offline

    Evgii

    Регистрация:
    19 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Отчет в exel
  11. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.580
    Симпатии:
    717
    Баллы:
    204
    Тогда Т1.Записать("c:\Отчет.xls",1);
  12. TopicStarter Overlay
    Evgii
    Offline

    Evgii

    Регистрация:
    19 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    вы меня не поняли, может я неправильно объяснил. мне нужны данные как на скрине, только те, что во второй колонке, белого цвета. пункт: "в) если значение есть только в поле-2- ВЫВЕСТИ в табличную часть"
  13. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.580
    Симпатии:
    717
    Баллы:
    204
    Табличная часть - это именно табличная часть объекта или поле табличного документа на форме объекта?
    Если второе - то вывод вы сделали.
    Для сохранения табличного документа в файл *.xls код я вам дал.
    Что еще требуется?
  14. TopicStarter Overlay
    Evgii
    Offline

    Evgii

    Регистрация:
    19 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    я вывел всю инфу из ДБФ, грубо говоря в таблице сейчас отображается, все то же самое, что и в ДБФ.
    Если взять значения как на скрине (32 строки), то должны выводиться только два адреса из поля-2 - ГЕРЦЕНА УЛИЦА д.15 и ГЛИНКИ УЛИЦА д.33/28, остальных адресов быть не должно. в этом и вопрос- как отсеять лишнее?
    --- Объединение сообщений, 19 июн 2015 ---
    нужно отразить только те адреса, которых нет в первой колонке. Список очень большой... Первая колонка намного больше второй.
    --- Объединение сообщений, 19 июн 2015 ---
    в итоге конечный результат после обработки 32-ух строк должен быть таким Буфер обмена02.jpg
    Последнее редактирование: 19 июн 2015
  15. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.580
    Симпатии:
    717
    Баллы:
    204
    Т.е. вы хотите что бы за вас придумали алгоритм "просеивания"?
    Судя по описанию:
    Выгружаем поле2 ТЗ в массив, обходим массив и сравниваем значение Поля1 строки ТЗ с текущим значением массива.
    Если значения не совпадают то выводим в Таблицу.
  16. TopicStarter Overlay
    Evgii
    Offline

    Evgii

    Регистрация:
    19 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    точно, так и нужно. Вот только представления не имею, как должен выглядеть этот кусочек кода((
  17. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Смотри метод НайтиЗначение объекта ТаблицаЗначений
  18. TopicStarter Overlay
    Evgii
    Offline

    Evgii

    Регистрация:
    19 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Код:
    //*******************************************
    Процедура Сформировать()
        Таб=СоздатьОбъект("ТаблицаЗначений");
        Таб.НоваяКолонка("поле1","Строка");
        Таб.НоваяКолонка("поле2","Строка");
        Таб3=СоздатьОбъект("ТаблицаЗначений");
        Таб3.НоваяКолонка("поле3","Строка");
        Таб3.НоваяКолонка("поле2","Строка");
        Таб3.НоваяКолонка("поле1","Строка");
        ДБФ=СоздатьОбъект("XBASE");
        ДБФ.ОткрытьФайл("C:\OUT\1.dbf");
        ДБФ.Первая();
        Пока ДБФ.ВКонце()=0 Цикл
            Таб.НоваяСтрока();
            Таб.Поле1=ДБФ.ПолучитьЗначениеПоля("N1");
            Таб.Поле2=ДБФ.ПолучитьЗначениеПоля("N2");
            ДБФ.Следующая();
        КонецЦикла;   
        Таб.Сортировать("Поле2");
        Таб.ВыбратьСтроки();
        Пока Таб.ПолучитьСтроку() = 1 Цикл
            Поз=0;
            Если Таб3.НайтиЗначение(Таб.Поле2,Поз,"Поле3")=0 Тогда
               
               
               
                Таб3.НоваяСтрока();
                Таб3.Поле3=Таб.Поле2;
                Иначе
                Таб3.ПолучитьСтрокуПоНомеру(Поз);
                Таб3.Поле3=?(Таб3.Поле1>Таб.Поле1,Таб3.Поле1,Таб.Поле1);
            КонецЕсли;
        КонецЦикла;
       
    
       
        Т1=СоздатьОбъект("Таблица");
        Таб3.Сортировать("Поле3");
        Таб3.ПолучитьСтроку();
        Таб3.ВыбратьСтроки();
        Пока Таб3.ПолучитьСтроку()=1 Цикл
            Т1.ВывестиСекцию("Строка");
        КонецЦикла;
        Т1.Показать("Таблица");
    
    КонецПроцедуры
    
    Чувствую истина где-то рядом, но не пойму. подтолкните плз, в нужное направление )
    --- Объединение сообщений, 23 июн 2015 ---
    выделил пустыми строками, где сомнения
  19. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    вот тут
    Таб3.Поле3=?(Таб3.Поле1>Таб.Поле1,Таб3.Поле1,Таб.Поле1);
    выражение Таб3.Поле1>Таб.Поле1 у вас Таб3.Поле1 вообще ни где не заполняется. Смысл сравнения?
    И зачем сравнивать строковые величины?
  20. TopicStarter Overlay
    Evgii
    Offline

    Evgii

    Регистрация:
    19 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    может подскажите тогда как грамотно написать? повторюсь я не программист по специальности. самоучка

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