Имя: Пароль:
1C
1C 7.7
v7: Можно ли упростить код экспорта в *.txt?
0 Gangar
 
06.08.13
18:29
База ТиС для Украины

Обработка написана для переноса документов в Бухгалтерию.
Можно ли этот код упростить?
Пятой точкой чую, что неаккуратненько, однако.

   Счет    = СоздатьОбъект("Документ.Счет");
   Расход    = СоздатьОбъект("Документ.РасходнаяНакладная");
   Налог    = СоздатьОбъект("Документ.НалоговаяНакладная");    
   СЗ        = СоздатьОбъект("СписокЗначений");
   Текст    = СоздатьОбъект("Текст");    
   Если СФ = 1 Тогда        
       Если ПустоеЗначение(выбФирма) = 1 Тогда
           Предупреждение("Выберите фирму");
       КонецЕсли;
       Счет.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);    
       Пока Счет.ПолучитьДокумент() = 1 Цикл            
           Если Счет.Фирма = выбФирма Тогда
               Если ПустоеЗначение(выбКонтрагент) = 0 Тогда
                   Если Счет.Контрагент = выбКонтрагент Тогда
                       СЗ.ДобавитьЗначение(Счет.ТекущийДокумент());
                       СЗ.ДобавитьЗначение(Счет.Вид());
                       СЗ.ДобавитьЗначение(Счет.ДатаДок);
                       СЗ.ДобавитьЗначение(Счет.НомерДок);
                       СЗ.ДобавитьЗначение(Счет.Фирма);
                       СЗ.ДобавитьЗначение(Счет.Контрагент);
                       СЗ.ДобавитьЗначение(Счет.Контрагент.ЕГРПОУ);
                       Счет.ВыбратьСтроки();
                       Пока Счет.ПолучитьСтроку() = 1 Цикл
                           СЗ.ДобавитьЗначение(Счет.Товар.ПолнНаименование);
                           СЗ.ДобавитьЗначение(Счет.Товар.БазоваяЕдиница);
                           СЗ.ДобавитьЗначение(Счет.Количество);  
                           СЗ.ДобавитьЗначение(Счет.ЦенаБезНДС);
                       КонецЦикла;
                       Текст.ДобавитьСтроку(СЗ.ВСтрокуСРазделителями());
                       СЗ.УдалитьВсе();
                   КонецЕсли;
               Иначе
                   СЗ.ДобавитьЗначение(Счет.ТекущийДокумент());
                   СЗ.ДобавитьЗначение(Счет.Вид());
                   СЗ.ДобавитьЗначение(Счет.ДатаДок);
                   СЗ.ДобавитьЗначение(Счет.НомерДок);
                   СЗ.ДобавитьЗначение(Счет.Фирма);
                   СЗ.ДобавитьЗначение(Счет.Контрагент);
                   СЗ.ДобавитьЗначение(Счет.Контрагент.ЕГРПОУ);
                   Счет.ВыбратьСтроки();
                   Пока Счет.ПолучитьСтроку() = 1 Цикл
                       СЗ.ДобавитьЗначение(Счет.Товар.ПолнНаименование);
                       СЗ.ДобавитьЗначение(Счет.Товар.БазоваяЕдиница);
                       СЗ.ДобавитьЗначение(Счет.Количество);  
                       СЗ.ДобавитьЗначение(Счет.ЦенаБезНДС);
                   КонецЦикла;
                   Текст.ДобавитьСтроку(СЗ.ВСтрокуСРазделителями());
                   СЗ.УдалитьВсе();
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;        
   КонецЕсли;
1 Ёпрст
 
гуру
06.08.13
18:34
ну, 15 строк кода можно и выкинуть
2 Тьма
 
06.08.13
18:41
(1)Тогда текстовый файл будет больше по размеру.
3 Ёпрст
 
гуру
06.08.13
18:47
Пока Счет.ПолучитьДокумент() = 1 Цикл            
        Если Счет.Фирма <> выбФирма Тогда
            Продолжить;
        КонецЕсли;
        Если ПустоеЗначение(выбКонтрагент) = 0 Тогда
            Если Счет.Контрагент <> выбКонтрагент Тогда
                Продолжить;
            КонецЕсли;
        КонецЕсли;
        СЗ.ДобавитьЗначение(Счет.ТекущийДокумент());
        СЗ.ДобавитьЗначение(Счет.Вид());
        СЗ.ДобавитьЗначение(Счет.ДатаДок);
        СЗ.ДобавитьЗначение(Счет.НомерДок);
        СЗ.ДобавитьЗначение(Счет.Фирма);
        СЗ.ДобавитьЗначение(Счет.Контрагент);
        СЗ.ДобавитьЗначение(Счет.Контрагент.ЕГРПОУ);
        Счет.ВыбратьСтроки();
        Пока Счет.ПолучитьСтроку() = 1 Цикл
            СЗ.ДобавитьЗначение(Счет.Товар.ПолнНаименование);
            СЗ.ДобавитьЗначение(Счет.Товар.БазоваяЕдиница);
            СЗ.ДобавитьЗначение(Счет.Количество);  
            СЗ.ДобавитьЗначение(Счет.ЦенаБезНДС);
        КонецЦикла;
        Текст.ДобавитьСтроку(СЗ.ВСтрокуСРазделителями());
        СЗ.УдалитьВсе();
    КонецЦикла;
4 Тьма
 
06.08.13
19:00
(3)Признаю, был неправ :)
5 Кукуев
 
06.08.13
19:00
Интересно просто, а для чего это условие, если обработка работает дальше (после нажания ОК, конечно, а так вроде будет ждать до морковкиной заговени)?
        Если ПустоеЗначение(выбФирма) = 1 Тогда
            Предупреждение("Выберите фирму");
        КонецЕсли;
6 Gangar
 
06.08.13
20:54
Спасибо, совсем вылетел из головы оператор "<>"
7 ЧеловекДуши
 
06.08.13
20:57
(0) Можно, допиши выгрузку через DBF файлы :)