Имя: Пароль:
1C
1С v8
ЗаписьXML.ЗаписатьТекст("2"); добавляет 0
,
0 dddonnn
 
25.10.13
14:00
Формирую XML файл
При строке
ЗаписьXML.ЗаписатьТекст("2");
в файле добавляет 0 , получается 20.
Откуда 0 берется?
1 Зойч
 
25.10.13
14:04
это не весь код
2 dddonnn
 
25.10.13
14:07
ЗаписьXML.ОткрытьФайл(ИмяФайлаДанных);
            ВыборкаДетальныеЗаписи = ТаблицаДДС.Выбрать();

            ЗаписьXML.ЗаписатьНачалоЭлемента("bddsfakt");
            Записать = Истина;
            ТаблицаОшибок.Очистить();
            
            К1 = Справочники.Контрагенты.НайтиПоКоду("000000167");
            К2 = Справочники.Контрагенты.НайтиПоКоду("000000159");
            К3 = Справочники.Контрагенты.НайтиПоКоду("000000168");
            К4 = Справочники.Контрагенты.НайтиПоКоду("000000169");
            
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                ОбработкаПрерыванияПользователя();
                Префикс = НайтиПрефиксОрганизации(ВыборкаДетальныеЗаписи.Организация, ВыборкаДетальныеЗаписи.СчетОрганизации);
                Если (ВыборкаДетальныеЗаписи.Контрагент <> К1) и  (ВыборкаДетальныеЗаписи.Контрагент <> К2) и (ВыборкаДетальныеЗаписи.Контрагент <> К3) и (ВыборкаДетальныеЗаписи.Контрагент <> К4) Тогда
                    ЗаписьXML.ЗаписатьНачалоЭлемента("record");
                    
                        ЗаписьXML.ЗаписатьНачалоЭлемента("dat");
                        ЗаписьXML.ЗаписатьТекст(Формат(ВыборкаДетальныеЗаписи.Дата,"ДФ=гггг-ММ-дд"));
                        ЗаписьXML.ЗаписатьКонецЭлемента();
                        
                        ЗаписьXML.ЗаписатьНачалоЭлемента("summa");
                        //1.5
                            //Если ВыборкаДетальныеЗаписи.СтатьиЗатратКСПлюс.Код = "18" Тогда  //Статья затрат РКО
                            //    ЗаписьXML.ЗаписатьТекст(СтрокаНорм(Формат(-ВыборкаДетальныеЗаписи.СуммаПлатежа,"ЧДЦ=2; ЧРД=.")));
                            //Иначе
                            //    ЗаписьXML.ЗаписатьТекст(СтрокаНорм(Формат(ВыборкаДетальныеЗаписи.СуммаПлатежа,"ЧДЦ=2; ЧРД=.")));
                            //КонецЕсли;
                            
                            
                            Если ВыборкаДетальныеЗаписи.Ссылка.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами Тогда  //Статья затрат РКО
                                ЗаписьXML.ЗаписатьТекст(СтрокаНорм(Формат(-ВыборкаДетальныеЗаписи.СуммаПлатежа,"ЧДЦ=2; ЧРД=.")));
                            Иначе
                                ЗаписьXML.ЗаписатьТекст(СтрокаНорм(Формат(ВыборкаДетальныеЗаписи.СуммаПлатежа,"ЧДЦ=2; ЧРД=.")));
                            КонецЕсли;
//                        
                        ЗаписьXML.ЗаписатьКонецЭлемента();
                        
                        //ЗаписьXML.ЗаписатьНачалоЭлемента("stzatratid");      //1
                        //  Так как в документах "Списание с расчетного счета" и "Поступление на расчетный счет"
                        //  в форме для операций
                        //- "Перечисление подотчетному лицу"
                        //- "Прочее списание"
                        //- "Прочее поступление"
                        //- "Перечисление заработной платы"
                        //  не было поле ввода для статьи затрат.
                        //  Теперь вставим поле ввода статья затрат и без него выгрузка не будет происходить.
                        //Если Не ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.СтатьиЗатратКСПлюс.Код)  Тогда
                        //    ВидОпер            = ВыборкаДетальныеЗаписи.Ссылка.ВидОперации;
                        //    ПеречислениеНалога = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога;
                        //    ПрочиеРасчетыСКА    = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПрочиеРасчетыСКонтрагентами;
                        //    ПрочиеПоступления  = Перечисления.ВидыОперацийПоступлениеДенежныхСредств.ПрочееПоступление;
                        //    ВозвратОтПоставщика = Перечисления.ВидыОперацийПоступлениеДенежныхСредств.ВозвратОтПоставщика ;
                        //    Если ВыборкаДетальныеЗаписи.Приход = "F" Тогда
                        //        СоцСтрах = ПланыСчетов.Хозрасчетный.РасчетыПоСоциальномуСтрахованию;
                        //        Счет     = ВыборкаДетальныеЗаписи.Ссылка.СчетУчетаРасчетовСКонтрагентом;
                        //        СчетТЧ = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьФорму("ФормаДокумента").РасшифровкаПлатежа[0].СчетУчетаРасчетовСКонтрагентом;
                        //        Если ВидОпер = ПеречислениеНалога Тогда
                        //            Если СоцСтрах = Счет Или СоцСтрах= Счет.Родитель  Или СоцСтрах= Счет.Родитель.Родитель Или СоцСтрах= Счет.Родитель.Родитель.Родитель  Тогда
                        //                ЗаписьXML.ЗаписатьТекст("19");    //Это код статьи затрат - налоги        
                        //            КонецЕсли;
                        //        ИначеЕсли ВидОпер = ПрочиеРасчетыСКА Тогда
                        //            Если СоцСтрах = СчетТЧ Или СоцСтрах= СчетТЧ.Родитель  Или СоцСтрах= СчетТЧ.Родитель.Родитель Или СоцСтрах= СчетТЧ.Родитель.Родитель.Родитель  Тогда
                        //                ЗаписьXML.ЗаписатьТекст("19");    //Это код статьи затрат - налоги        
                        //            КонецЕсли;
                        //        //ИначеЕсли ВидОпер = ВозвратОтПоставщика Тогда                                    
                        //            
                        //        КонецЕсли;
                        //        
                        //    Иначе    //расход
                        //        Если ВидОпер = ВозвратОтПоставщика Тогда
                        //            РасчетыСпоставщиками = ПланыСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками;
                        //            Счет     = ВыборкаДетальныеЗаписи.Ссылка.СчетУчетаРасчетовСКонтрагентом;
                        //            СчетТЧ = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьФорму("ФормаДокумента").РасшифровкаПлатежа[0].СчетУчетаРасчетовСКонтрагентом;
                        //            Если РасчетыСпоставщиками = Счет Или РасчетыСпоставщиками= Счет.Родитель  Или РасчетыСпоставщиками= Счет.Родитель.Родитель Или РасчетыСпоставщиками= Счет.Родитель.Родитель.Родитель  Тогда
                        //                ЗаписьXML.ЗаписатьТекст("60.01");    //Это код статьи затрат - налоги        
                        //            КонецЕсли;

                        //        ИначеЕсли ВидОпер = ПрочиеПоступления Тогда
                        //            РасчетыСПодотчетнымиЛицами = ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами;
                        //            Счет     = ВыборкаДетальныеЗаписи.Ссылка.СчетУчетаРасчетовСКонтрагентом;
                        //            СчетТЧ = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьФорму("ФормаДокумента").РасшифровкаПлатежа[0].СчетУчетаРасчетовСКонтрагентом;
                        //            Если РасчетыСПодотчетнымиЛицами = Счет Или РасчетыСПодотчетнымиЛицами= Счет.Родитель  Или РасчетыСПодотчетнымиЛицами= Счет.Родитель.Родитель Или РасчетыСПодотчетнымиЛицами= Счет.Родитель.Родитель.Родитель  Тогда
                        //                ЗаписьXML.ЗаписатьТекст("71.01");    //Это код статьи затрат - налоги        
                        //            КонецЕсли;
                        //        Иначе
                        //            Строка =   ЭлементыФормы.ТаблицаОшибок.Значение.Добавить();
                        //            Строка.Ссылка       = ВыборкаДетальныеЗаписи.Ссылка;
                        //            Строка.Контрагент = ВыборкаДетальныеЗаписи.Контрагент;
                        //            Строка.Ошибка      = "Не указана статья затрат.";
                        //            Записать = Ложь;
                        //            Продолжить;
                        //        КонецЕсли;
                        //    КонецЕсли;
                        //Иначе
                        //    ЗаписьXML.ЗаписатьТекст((ВыборкаДетальныеЗаписи.СтатьиЗатратКСПлюс.Код));    
                        //КонецЕсли;
                        //
                        //ЗаписьXML.ЗаписатьКонецЭлемента();
                        
                        //  Теперь вставим поле ввода статья затрат и без него выгрузка не будет происходить.
                        //
                        ЗаписьXML.ЗаписатьНачалоЭлемента("stzatratid");      //1
                        Если Не ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.СтатьиЗатратКСПлюс.Код) Тогда
                            Строка =   ЭлементыФормы.ТаблицаОшибок.Значение.Добавить();
                            Строка.Ссылка       = ВыборкаДетальныеЗаписи.Ссылка;
                            Строка.Контрагент = ВыборкаДетальныеЗаписи.Контрагент;
                            Строка.Ошибка      = "Не указана статья затрат.";
                            Записать = Ложь;
                            Продолжить;
                        Иначе
                            ЗаписьXML.ЗаписатьТекст((ВыборкаДетальныеЗаписи.СтатьиЗатратКСПлюс.Код));    
                        КонецЕсли;
                        ЗаписьXML.ЗаписатьКонецЭлемента();

                        
                        ЗаписьXML.ЗаписатьНачалоЭлемента("firmid");        //2
                        Если Не ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Контрагент.Externail_id) Тогда
                            //Строка =   ЭлементыФормы.ТаблицаОшибок.Значение.Добавить();
                            //Строка.Ссылка = ВыборкаДетальныеЗаписи.Ссылка;
                            //Строка.Контрагент = ВыборкаДетальныеЗаписи.Контрагент;
                            //Строка.Ошибка      = "Не заполнен Externail_id в контрагенте или не указан контрагент.";
                            //Записать = Ложь;
                            //Продолжить;
                            ЗаписьXML.ЗаписатьТекст("0");    
                        Иначе
                            ЗаписьXML.ЗаписатьТекст(ВыборкаДетальныеЗаписи.Контрагент.Externail_id);    
                        КонецЕсли;
                        ЗаписьXML.ЗаписатьКонецЭлемента();
                        
                                            
                        ЗаписьXML.ЗаписатьНачалоЭлемента("pr");
                        ЗаписьXML.ЗаписатьТекст(ВыборкаДетальныеЗаписи.Приход);
                        ЗаписьXML.ЗаписатьКонецЭлемента();
                        
                        ЗаписьXML.ЗаписатьНачалоЭлемента("prim");
                        //Контрагент, ПП № от Даты (назначение платежа)
                        Текст = Префикс+": "+ВыборкаДетальныеЗаписи.Контрагент.НаименованиеПолное+", ПП №"+Строка(ВыборкаДетальныеЗаписи.Ссылка.НомерВходящегоДокумента)+" от "+Формат(ВыборкаДетальныеЗаписи.Ссылка.ДатаВходящегоДокумента,"ДФ=dd.MM.yyyy")+" ("+ВыборкаДетальныеЗаписи.НазначениеПлатежа+")" ;
                        ЗаписьXML.ЗаписатьТекст(Текст);
                        ЗаписьXML.ЗаписатьКонецЭлемента();
                        
                        ЗаписьXML.ЗаписатьНачалоЭлемента("proektid");    //3
                        Если Не ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Проекты.Код) Тогда
                            Если ВыборкаДетальныеЗаписи.Приход = "T" Тогда
                                РасчетыСПОЛ = ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами_;
                                РасчетыСПостИПод = ПланыСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками;
                                Счет     = ВыборкаДетальныеЗаписи.Ссылка.СчетУчетаРасчетовСКонтрагентом;
                                СчетТЧ = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьФорму("ФормаДокумента").РасшифровкаПлатежа[0].СчетУчетаРасчетовСКонтрагентом;
                                //Возврат командировочных
                                Если РасчетыСПОЛ = Счет Или РасчетыСПОЛ= Счет.Родитель  Или РасчетыСПОЛ= Счет.Родитель.Родитель Или РасчетыСПОЛ= Счет.Родитель.Родитель.Родитель  Тогда
                                    Если ВыборкаДетальныеЗаписи.Контрагент.Код = "000000167" Тогда
                                        ЗаписьXML.ЗаписатьТекст("0");            
                                    КонецЕсли;
                                //Возврат ошибочных денег
                                ИначеЕсли РасчетыСПостИПод = Счет Или РасчетыСПостИПод= Счет.Родитель  Или РасчетыСПостИПод= Счет.Родитель.Родитель Или РасчетыСПостИПод= Счет.Родитель.Родитель.Родитель  Тогда
                                    ЗаписьXML.ЗаписатьТекст("0");                                                                
                                Иначе
                                    Строка = ЭлементыФормы.ТаблицаОшибок.Значение.Добавить();
                                    Строка.Ссылка = ВыборкаДетальныеЗаписи.Ссылка;
                                    Строка.Контрагент = ВыборкаДетальныеЗаписи.Контрагент;
                                    Строка.Ошибка      = "Не указан проект.";
                                    Записать = Ложь;
                                    Продолжить;
                                КонецЕсли;
                            ИначеЕсли ВыборкаДетальныеЗаписи.Приход = "F" Тогда
                                ЗаписьXML.ЗаписатьТекст("0");            
                            КонецЕсли;
                        Иначе
                            ЗаписьXML.ЗаписатьТекст(ВыборкаДетальныеЗаписи.Проекты.Код);    
                        КонецЕсли;
                        ЗаписьXML.ЗаписатьКонецЭлемента();
                        Если ВыборкаДетальныеЗаписи.СуммаПлатежа = 14800 Тогда
                            Сообщить("123");
                        КонецЕсли;
                        ЗаписьXML.ЗаписатьНачалоЭлемента("napravlenieid");   //4
                        НаправлениеИД = ВыборкаДетальныеЗаписи.Проекты.Направление.Код;
                        Если ЗначениеЗаполнено(НаправлениеИД) Тогда
                            НаправлениеИД = СтрокаНорм(Число(НаправлениеИД));    
                            ЗаписьXML.ЗаписатьТекст(НаправлениеИД);
                        Иначе
                            //1.9 На тот случай, когда проект не стоит, а направление стоит
                            Направление = ВыборкаДетальныеЗаписи.Ссылка.РасшифровкаПлатежа[0].Направление;
                            Если ЗначениеЗаполнено(Направление) Тогда
                                НаправлениеИД = СтрокаНорм(Число(Направление.Код));    
                                ЗаписьXML.ЗаписатьТекст(НаправлениеИД);
                            КонецЕсли;
                                
                            ////Если ВыборкаДетальныеЗаписи.Приход = "T" Тогда
                            //    Строка =   ЭлементыФормы.ТаблицаОшибок.Значение.Добавить();
                            //    Строка.Ссылка = ВыборкаДетальныеЗаписи.Ссылка;
                            //    Строка.Контрагент = ВыборкаДетальныеЗаписи.Контрагент;
                            //    Строка.Ошибка      = "Не указано направление.";
                            //    Записать = Ложь;
                            //    Продолжить;
                            ////ИначеЕсли ВыборкаДетальныеЗаписи.Приход = "F" Тогда
                            ////    ЗаписьXML.ЗаписатьТекст("0");            
                            ////КонецЕсли;
                            ЗаписьXML.ЗаписатьТекст("0");
                        КонецЕсли;
                        
                        ЗаписьXML.ЗаписатьКонецЭлемента();

                        ЗаписьXML.ЗаписатьНачалоЭлемента("ispolnitelid");
                        ЗаписьXML.ЗаписатьТекст("0");
                        ЗаписьXML.ЗаписатьКонецЭлемента();
                        
                        ЗаписьXML.ЗаписатьНачалоЭлемента("is_nal");
                        ЗаписьXML.ЗаписатьТекст("T");
                        ЗаписьXML.ЗаписатьКонецЭлемента();
                        
                        ЗаписьXML.ЗаписатьНачалоЭлемента("use_in_bdr");
                        //1.5
                        use_in_bdr = "F";
                        Если ВыборкаДетальныеЗаписи.СтатьиЗатратКСПлюс <> Справочники.СтатьиЗатратКСПлюс.ПустаяСсылка()  Тогда
                            Если ВыборкаДетальныеЗаписи.СтатьиЗатратКСПлюс.Код = "18" или ВыборкаДетальныеЗаписи.Ссылка.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами или ВыборкаДетальныеЗаписи.Ссылка.ВидОперации = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеПодотчетномуЛицу Тогда  //Статья затрат РКО и командировочные
                            //Если ВыборкаДетальныеЗаписи.Ссылка.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами Тогда  //Статья затрат РКО
                                use_in_bdr = "T";
                            КонецЕсли;
                        КонецЕсли;
                        ЗаписьXML.ЗаписатьТекст(use_in_bdr);
                        //
                        //
                        ЗаписьXML.ЗаписатьКонецЭлемента();

        
                ЗаписьXML.ЗаписатьКонецЭлемента();
                КонецЕсли;
            КонецЦикла;
3 Зойч
 
25.10.13
14:09
к коде стопицот раз добавляется 0
4 Зойч
 
25.10.13
14:10
а вот ЗаписьXML.ЗаписатьТекст("2");  нет совсем
5 Ёпрст
 
25.10.13
14:12
СтрокаНорм.. че хоть за функция ?
6 Wobland
 
25.10.13
14:14
(4) ну ошибся человек. ЗаписьXML.ЗаписатьТекст("0") добавляет двойку
7 dddonnn
 
25.10.13
14:15
(4) в коде
НаправлениеИД = СтрокаНорм(Число(Направление.Код));    
                                ЗаписьXML.ЗаписатьТекст(НаправлениеИД);
8 dddonnn
 
25.10.13
14:16
(5)
Функция СтрокаНорм (НачСтрока,длина=неопределено) экспорт
    Перем КонСтрока;
    Попытка
        Если длина = Неопределено тогда
            КонСтрока=СтрЗаменить(Строка(НачСтрока),Символы.НПП, "");
        Иначе
            КонСтрока=Сред(СтрЗаменить(Строка(НачСтрока),Символы.НПП, ""),1,Длина);    
        Конецесли;
    Исключение
        КонСтрока="";
    КонецПопытки;
    Возврат  КонСтрока;
конецФункции
9 Зойч
 
25.10.13
14:16
открой для себя Формат
10 dddonnn
 
25.10.13
14:17
(4) пробовал вместо переменной подставлять "2" и такая же хрень
11 dddonnn
 
25.10.13
14:18
(9) где именно?
12 dddonnn
 
25.10.13
14:28
Нашел косяк, там запись лишняя была ЗаписатьТекст("0")
13 Wobland
 
25.10.13
14:29
корочен, мне лениво разбирать эту простыню, автор врёт
http://screencast.com/t/Dbeh0gy7VUE
14 Зойч
 
25.10.13
14:30
(10) вместо этого
СтрЗаменить(Строка(НачСтрока),Символы.НПП, "")
15 Serginio1
 
25.10.13
14:33
(8) Используй XMLСтрока(Число)
16 George Wheels
 
25.10.13
15:22
Здесь покопай

//1.9 На тот случай, когда проект не стоит, а направление стоит

Направление.Код наверно равно 2, а далее добавлен 0