Имя: Пароль:
1C
 
Продолжаю тему про xml и сsv . Набросал код, есть явные ошибки?
0 Филипп Остырко
 
28.12.18
13:58
Запрос = Новый Запрос;
Запрос.Текст =
          "ВЫБРАТЬ
         |    ЗаявкаНаОткрытиеСчетов.Дата,
         |    ЗаявкаНаОткрытиеСчетов.Номер,
         |    ЗаявкаНаОткрытиеСчетов.Организация.Наименование,
         |    ЗаявкаНаОткрытиеСчетов.Организация.ИНН
         |ИЗ
         |    Документ.ЗаявкаНаОткрытиеСчетов КАК ЗаявкаНаОткрытиеСчетов" ;
    Результат = Запрос.Выполнить();
    ТЗ = Результат.Выгрузить();
  
    ТД = Новый ТекстовыйДокумент;
    СтрокаШапки = " СчетаПК_Id,ДатаФормирования,НомерДоговора,НаименованиеОрганизации,ИНН,РасчетныйСчетОрганизации,БИК,ИдПервичногоДокумента";
    ТД.ДобавитьСтроку(СтрокаШапки+Символы.ВК);
Разделитель = ";";
Для каждого ТекСтрока из ТЗ Цикл
     Если ТекСтрока = 0 Тогда
                Продолжить;
     КонецЕсли;
      СтрокаТекста =  ТекСтрока.Дата +
            + разделитель + ТекСтрока.Номер
            + разделитель + ТекСтрока.Организация.Наименование
            + разделитель + ТекСтрока.Организация.ИНН
            + Символы.ПС;
      ТД.ДобавитьСтроку(СтрокаТекста);
КонецЦикла;
  ТД.Записать(КаталогВременныхФайлов()+".csv", КодировкаТекста.ANSI);
1 Филипп Остырко
 
28.12.18
13:59
для теста взял только 4 реквизита
2 dka80
 
28.12.18
14:00
Запускал?
3 Ёпрст
 
28.12.18
14:01
чего уж там, пиши сразу в json
4 Филипп Остырко
 
28.12.18
14:02
(2) запустил. выдал ошибку "Преобразование значения к типу Число не может быть выполнено
      СтрокаТекста =  ТекСтрока.Дата +"
5 RomanYS
 
28.12.18
14:02
(2) а вдруг миста не одобрит?
6 Филипп Остырко
 
28.12.18
14:04
ошибка вроде  здесь   "Если ТекСтрока = 0 Тогда
" ,НО это не точно
7 RomanYS
 
28.12.18
14:09
(6) тебе же в (4) прямым текстом написано, что не умеет к дате строки прибавлять
8 IOANNscrp
 
28.12.18
14:14
Разделитель = ";";
СтрокаТекста  = "";
Либо
СтрокаТекста =""+  ТекСтрока.Дата +
            + разделитель + ТекСтрока.Номер
            + разделитель + ТекСтрока.Организация.Наименование
            + разделитель + ТекСтрока.Организация.ИНН
            + Символы.ПС;
9 IOANNscrp
 
28.12.18
14:16
ТД.ДобавитьСтроку(СтрокаТекста); и так добавляет перенос строки, а Вы еще свой лепите
ТД.ДобавитьСтроку(""+ ТекСтрока.Дата +
            + разделитель + ТекСтрока.Номер
            + разделитель + ТекСтрока.Организация.Наименование
            + разделитель + ТекСтрока.Организация.ИНН);
10 Филипп Остырко
 
28.12.18
14:27
исправил. не ругается, но и файл не сохраняет никакой
11 IOANNscrp
 
28.12.18
14:28
Имя дайте файлу)
12 IOANNscrp
 
28.12.18
14:28
КаталогВременныхФайлов()+"test.csv"
13 Филипп Остырко
 
28.12.18
14:29
(12) ну Вы ванга, мой файл назывался "тест"
14 IOANNscrp
 
28.12.18
14:30
(13) ¯ \ _ (ツ) _ / ¯
15 Mikeware
 
28.12.18
14:32
"он настоящий!"
16 Филипп Остырко
 
28.12.18
14:35
нет файла
17 Филипп Остырко
 
28.12.18
14:35
не сохраняет
18 Так мало знающий
 
28.12.18
14:40
аталогВременныхФайлов()+"\test.csv" а так?
19 13_Mult
 
28.12.18
14:42
(17) Как проверял?
20 Филипп Остырко
 
28.12.18
14:48
(18) даже так E:\Desktop\test.csv
21 13_Mult
 
28.12.18
14:48
(19) + C:\Users\ФилиппОстырко\AppData\Local\Temp\
Там смотрел?
22 Филипп Остырко
 
28.12.18
14:49
(19) выбираю папку для выгрузки, отмечаю нужны данные, нажимаю "выгрузить"
23 IOANNscrp
 
28.12.18
14:50
Локальная база и серверная?
24 Филипп Остырко
 
28.12.18
14:51
(21) для меня будет приятно,если  в мою честь windods будет папки создавать
25 Филипп Остырко
 
28.12.18
14:52
(23) локальная
26 IOANNscrp
 
28.12.18
14:52
Создаст, если будет пользователь такой заведён ..(24)
27 13_Mult
 
28.12.18
14:52
(22) (24) Ты троль что ли?
28 Филипп Остырко
 
28.12.18
14:54
(27) нет,с чего вы взяли
29 Дмитрий
 
28.12.18
14:54
а где xml?
30 IOANNscrp
 
28.12.18
14:55
тек = ПолучитьИмяВременногоФайла("csv");
    тет = новый ТекстовыйДокумент;
    тет.Записать(тек,КодировкаТекста.ANSI);
    ЗапуститьПриложение(тек);
Если не откроет, то троль
31 IOANNscrp
 
28.12.18
14:55
надеюсь через проводник проверяете наличие файла, а не через выбор папки с фильтром = видимость только папок
32 13_Mult
 
28.12.18
14:59
(28) Выполни вот это
ГдеИскать = КаталогВременныхФайлов();
Сообщить(ГдеИскать);
И посмотри что в сообщении прилетело.
33 Филипп Остырко
 
28.12.18
15:02
(30) (32) сохранилось оказывается, но только совсем в другом месте. всех благодарю за участие
34 Мимохожий Однако
 
28.12.18
15:07
Кто-нибудь заставит ТС пользоваться отладчиком, мозгом и СП?
35 Филипп Остырко
 
28.12.18
15:07
(31) сохранялось под именем test.csv на рабочий стол ,а я проверял в папке "test".
36 Дмитрий
 
28.12.18
15:09
(34) так он путь к файлу может только написать, а не прочитать: (20)
37 IOANNscrp
 
28.12.18
15:09
(35)  бесценный опыт
38 Мимохожий Однако
 
28.12.18
15:11
(35) ..." в огороде бузина" ))
39 Филипп Остырко
 
28.12.18
15:14
(38) да понятно
40 Филипп Остырко
 
28.12.18
15:17
если вы думаете, что я дебил, то я соглашусь с вами
41 Скиурус
 
28.12.18
16:33
Колонки ТЗ будут вот так называться, если их в явном виде в запросе не обозвать:

    СтрокаТекста =  "" + ТекСтрока.Дата +
            + разделитель + ТекСтрока.Номер
            + разделитель + ТекСтрока.ОрганизацияНаименование
            + разделитель + ТекСтрока.ОрганизацияИНН
            + Символы.ПС;



А зачем нужно:

     Если ТекСтрока = 0 Тогда
                Продолжить;
     КонецЕсли;
Что ты этим кодом хотел сказать?
42 Филипп Остырко
 
29.12.18
07:56
(41) Спасибо за первое замечание, а то ругался ,что (организация) не определено.
Я составил код из нескольких примеров, поэтому поставил, там везде был этот момент
Если ТекСтрока = 0 Тогда
                Продолжить;
     КонецЕсли;
43 Лодырь
 
29.12.18
07:58
(42) У тебя ТекСтрока имеет тип СтрокаТаблицыЗначений и она никогда не будет равна Числу 0
44 Филипп Остырко
 
29.12.18
08:54
(43) Благодарю, я убрал эту часть совсем
45 IOANNscrp
 
29.12.18
08:55
Зря, это вносило изюминку в код(44)
46 Филипп Остырко
 
29.12.18
09:34
тут новая проблема. я собираю строку : реквизиты с типом строка собирает, а типом число -нет. как тут быть?

СтрокаТекста =  "" + ТекСтрока.Дата +
            + разделитель + ТекСтрока.Номер
47 Kigo_Kigo
 
29.12.18
09:37
(46) Строка должна быть строкой- всегда, преобразуй типы в строку
48 IOANNscrp
 
29.12.18
09:43
(46) Строка(ТекСтрока.Номер) или в запросе выразить как строка
49 Филипп Остырко
 
29.12.18
09:52
(48) ": Преобразование значения к типу Число не может быть выполнено
    ТД.ДобавитьСтроку(""+ Строка(ТекСтрока.НомерДоговора)"
50 IOANNscrp
 
29.12.18
09:56
полную строчку кода в студию (49)
51 Филипп Остырко
 
29.12.18
09:59
(50)  ТД.ДобавитьСтроку(""+ Строка(ТекСтрока.НомерДоговора)
             + разделитель + ТекСтрока.ОрганизацияНаименование,
             + разделитель + ТекСтрока.ОрганизацияИНН,
              + разделитель + ТекСтрока. Дата
            + Символы.ПС);
52 IOANNscrp
 
29.12.18
10:00
Эм, это что еще такое?ТекСтрока.ОрганизацияНаименование,
53 IOANNscrp
 
29.12.18
10:01
(51) ТД.ДобавитьСтроку(""+ Строка(ТекСтрока.НомерДоговора)
             + разделитель + ТекСтрока.ОрганизацияНаименование
             + разделитель + ТекСтрока.ОрганизацияИНН
              + разделитель + ТекСтрока. Дата
            + Символы.ПС);
54 Филипп Остырко
 
29.12.18
10:03
(52) ОрганизацияНаименование -реквизит. он у меня отражается правильно в файле
55 Скиурус
 
29.12.18
10:11
(54) Он про то, что у тебя откуда-то взялись запятые.
И лишний пробел вырос в ТекСтрока. Дата
56 Филипп Остырко
 
29.12.18
10:14
(53) (55)  спасибо, проблема решена
57 Филипп Остырко
 
29.12.18
10:17
а нет, не решена, хоть ошибку не выдает, но в файле номер договора не отражается
58 IOANNscrp
 
29.12.18
10:22
(57) а он заполнен?))) в договоре
59 13_Mult
 
29.12.18
10:29
(57) У тебя в (0) нет "НомерДоговора", а есть "Номер".
И нет "ОрганизацияНаименование", а есть "Организация.Наименование".
И убери приведение к строке у Номера оно там уже не нужно.
60 IOANNscrp
 
29.12.18
10:30
(59) может задача поменялась и запрос уже изменен на нужные реквизиты, так бы уже ругалось на поля
61 13_Mult
 
29.12.18
10:33
(60) Пусть выложит тогда текущий вариант :)
62 Филипп Остырко
 
29.12.18
10:35
(61) ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);

        Запрос = Новый Запрос;
Запрос.Текст =
          "ВЫБРАТЬ
          |    ЗаявкаНаОткрытиеСчетов.НомерДоговора,
          |    ЗаявкаНаОткрытиеСчетов.Организация.Наименование,
          |    ЗаявкаНаОткрытиеСчетов.Организация.ИНН,
          |    ЗаявкаНаОткрытиеСчетов.Дата
          |ИЗ
          |    Документ.ЗаявкаНаОткрытиеСчетов КАК ЗаявкаНаОткрытиеСчетов" ;
    Результат = Запрос.Выполнить();
    ТЗ = Результат.Выгрузить();
    ТД = Новый ТекстовыйДокумент;
    ИмяФайла = "test" +".csv" ;
    Если ДиалогВыбораФайла.Выбрать() Тогда
        ФайлНаДиске = Новый Файл(ДиалогВыбораФайла.Каталог + "\" + ИмяФайла);

    СтрокаШапки = " СчетаПК_Id,ДатаФормирования,НомерДоговора,НаименованиеОрганизации,ИНН,РасчетныйСчетОрганизации,БИК,ИдПервичногоДокумента";
    ТД.ДобавитьСтроку(СтрокаШапки+Символы.ПС);
    Разделитель = "|";
    Для каждого ТекСтрока из ТЗ Цикл

    
    ТД.ДобавитьСтроку(""+ Строка(ТекСтрока.НомерДоговора)
            
             + разделитель + ТекСтрока.ОрганизацияНаименование
             + разделитель + ТекСтрока.ОрганизацияИНН
             + Символы.ПС);
        КонецЦикла;
        //ТД.Записать(КаталогВременныхФайлов() + "test.txt", КодировкаТекста.ANSI);
ТД.Записать(ФайлНаДиске.ПолноеИмя, КодировкаТекста.ANSI);    
        Сообщить("Сформирован файл: " + ФайлНаДиске.ПолноеИмя);
КонецЕсли;
63 IOANNscrp
 
29.12.18
10:36
ИмяФайла = "test" +".csv"; красотище
64 Филипп Остырко
 
29.12.18
10:37
(63) главное, что сохраняет. это для теста сойдет
65 IOANNscrp
 
29.12.18
10:39
Если не значениеЗаполнено(ТекСтрока.НомерДоговора) Тогда
Сообщить("Не заполнен номер договора "+ТекСтрока.ОрганизацияНаименование)
КонецЕсли ТД.ДобавитьСтроку() в цикле и запускайте для проверки
66 IOANNscrp
 
29.12.18
10:39
(64) еще бы он не сохранил))
67 13_Mult
 
29.12.18
10:39
(62) Значит реквизит "НомерДоговора" не заполнен в документах "ЗаявкаНаОткрытиеСчетов "
68 Филипп Остырко
 
29.12.18
10:42
(67) понятно. хотя этот реквизит есть ,так и назывался "НомерДоговора"
69 13_Mult
 
29.12.18
10:44
(68) Ну Всё, теперь я тоже всё понял. ))
70 Eiffil123
 
29.12.18
10:45
Для новичка нормально. Но вот это на самом деле плохо:


1. В запросе от одного поля 2 раза получаешь реквизиты через точку. При этом система создаст неявно 2 левых соединения. Возможны проблемы с производительностью (хотя это большей частью только в теории):
         |    ЗаявкаНаОткрытиеСчетов.Организация.Наименование,
         |    ЗаявкаНаОткрытиеСчетов.Организация.ИНН

2. Выгрузка результатов запроса в ТЗ  ТЗ = Результат.Выгрузить()
. Это неоптимально для больших выборок данных. Обычно лучше делать Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() <тут уже работаем с выборкой> КонецЦикла;
71 Филипп Остырко
 
29.12.18
10:50
(70) Принял к сведению,спасибо
72 Филипп Остырко
 
29.12.18
10:59
(66) Ваш код мне помог, номердоговора и правда оказался не заполненным
73 Михаил Иванович
 
29.12.18
10:59
(27) Конечно.
74 IOANNscrp
 
29.12.18
11:02
(73) хорошо держится, однако
75 Филипп Остырко
 
29.12.18
11:13
(73) я вроде бы говорил,что я начинающий в 1с. или вы считаете, что способности программировать загружаются в мозг как в фильме Матрица ?
76 Филипп Остырко
 
29.12.18
11:15
я за 2 дня неплохо подрос в понимании кода, до этого код был для меня иероглифом
77 Михаил Иванович
 
29.12.18
11:28
(76) т.е. образования нет?
78 Филипп Остырко
 
29.12.18
11:37
(77) В общем, меня приняли на работу после прохождения ученического курса при франчайзи продолжительностью в один месяц, в ходе которого мне нужно было решить все их задачи и сдать ПРОФ. я с этим справился. теперь я стажер, и мне попробовали дать реальную задачу. образование высшее, но к 1с отношения не имеет
79 Филипп Остырко
 
29.12.18
11:38
(77) компания самая сильная в регионе, поэтому ,наверно, могут себе позволить принимать с нуля