Имя: Пароль:
1C
1C 7.7
v7: Експорт в XML
,
0 bananan
 
09.01.13
13:20
Данные выдает запрос... Их нужно формить в XML-файл.
Код написал такой (это понятно, только начало работы):
   ТЗ = Запр.ВыполнитьИнструкцию(ТекстЗапроса);
   ТЗ.ВыбратьСтроки();
   
   
   XMLАнализатор = СоздатьОбъект("AddIn.XMLParser");
   XMLКорневойРаздел = XMLАнализатор.СоздатьДокумент();
   ДанныеXML = XMLКорневойРаздел.СоздатьПодчиненныйЭлемент("EMPLOYEES");
   стр = 1;
   
   Пока ТЗ.ПолучитьСтроку()=1 цикл                      
       Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("ID");
       Ветка.Значение = стр;
   КонецЦикла;
Выдает ошибку: Ветка.Значение = стр;
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАРПЛАТАXML.ERT(58)}: Параметр не опциональный
Что я нетак делаю?
38 monsterZE
 
09.01.13
14:45
потолок = ?(""+ТЗ.Пол="М","М_инглишная","F");
Ветка.УстановитьАтрибут("SEX",потолок);
39 monsterZE
 
09.01.13
14:46
или кейс в запросе и там переобзывать
40 Ёпрст
 
09.01.13
14:46
(37) тут без разницы, особого выигрыша не будет
41 bananan
 
09.01.13
15:03
Ребята, а как добавить к строке (в конце) 13 символов пробел? (Извините, конечно за такую елементарщину)
42 monsterZE
 
09.01.13
15:14
вариант1
Для ъ=1 по 13 цикл
мояСтрока = мояСтрока+" ";
КонецЦикла

вариант2
мояСтрока = мояСтрока+"      тут 13 пробелов         ";
43 Ёпрст
 
09.01.13
15:21
(41)
+Формат(" ","С13");
44 bananan
 
09.01.13
16:15
(42) Оба этих ыарианта я и сам придумал, но не красиво
(43) Красиво
45 monsterZE
 
09.01.13
16:18
(44) да ты растешь =)
46 bananan
 
09.01.13
16:21
Как получить в запросе код елементы справочника сотрудники?
Написал так: $СпрСотр.Code AS Код
Ошибка:
Meta name parser error: поле таблицы не найдено "$СпрСотр.Code"
47 monsterZE
 
09.01.13
16:26
Метапарсер тут не нужен, это реальное имя столбца, убери $
48 bananan
 
09.01.13
16:34
(47) Спасибо
49 bananan
 
09.01.13
17:03
* Окзывается или я не правильно понял задачу или ее неправильно поставили... Но здесь с запросом надо будет еще поработать.
Если у меня не будет получаться - буду обращаться к вам
50 bananan
 
09.01.13
17:08
(49) Писал еще где-то с час назад - забыл отправитю...
Уже у мен возникли две проблемы:
1. Какой элемент поставить на форму чтобы пользователь там мог выбрать ОДИН конкретный документ по выплте зарплаты?
2. Как в запросе определить номер документа?
51 Ёпрст
 
09.01.13
17:10
1.реквизит диалога с нужным типом
2.посмотреть docno у _1sjourn
52 bananan
 
09.01.13
17:12
*(50) По поводу номера докуумента - пробывал:
$ДокЗП.DocNo
Ошибка:
 Meta name parser error: поле таблицы не найдено "$ДокЗП.DocNo"
Побывал
ДокЗП.DocNo
Ошибка:
 Invalid column name 'DocNo'.
53 bananan
 
09.01.13
17:12
(51) по поводу п.2 вроде понял - сейчас попробую, а вот первый пунтк - ничего я не понял :(
54 Ёпрст
 
09.01.13
17:14
1.Меню-Вставить-Реквизит Диалога-Тыркнуть в нужное место на форме-На закладке Тип указать нужный тип реквизита диалога-Задать идентификатор-Наслаждаться
55 bananan
 
09.01.13
17:21
(54) Так и сделал тип указал: Документ.ВыплтаЗПБ
Так, когда пускаю на выполнение в этом окошке выбора НИЧЕГО нет!?
56 bananan
 
09.01.13
17:21
Идентификатор тоже указал : ВыбВыплатаЗПБ
57 Ёпрст
 
09.01.13
17:21
(55) нажми на "..." - педальку, будь мужиком - выбери туда чего-нибудь САМ!
58 bananan
 
09.01.13
17:25
(57) Спасибо, не обратил я внимания на "педальку"
59 bananan
 
09.01.13
17:26
По поводу номера документа - написал так:
|SELECT
           | $ДокЗП.Сотрудник [Сотрудник $Справочник.Сотрудники],
           | _1sjourn.DocNo AS Номер,
           | $СпрСотр.Имя AS Имя
           | ,$СпрСотр.Отчество AS Отчество
           | ,$СпрСотр.ШтатНомер AS ШтатНомер
           | ,$СпрСотр.Пол [Пол $Перечисление.Пол]
           | ,$СпрСотр.ДокСерия AS ДокСерия
           | ,$СпрСотр.ДокНомер AS ДокНомер
           | ,$СпрСотр.ДокКогдаВыдан AS ДокКогдаВыдан
           | ,$СпрСотр.ДокКемВыдан AS ДокКемВыдан
           | ,$СпрСотр.ДатаРождения AS ДатаРождения
           | ,$СпрСотр.РождГород AS РождГород
           | ,$СпрСотр.ФактАдрес AS ФактАдрес
           | ,$СпрСотр.ФактИндекс AS ФактИндекс
           | ,$СпрСотр.ДатаПриема AS ДатаПриема
           | ,$СпрСотр.ТелефонДом AS ТелефонДом
           | ,$СпрСотр.ТелефонРаб AS ТелефонРаб
           | ,$СпрСотр.ИНН AS ИНН
           | ,$СпрСотр.НомерСчета AS НомерСчета
           | ,СпрСотр.Code AS Код
           |FROM
           |$ДокументСтроки.ВыплатаЗПБ as ДокЗП (nolock)
           | INNER JOIN $Справочник.Сотрудники as СпрСотр (nolock)
           |   ON $ДокЗП.Сотрудник = СпрСотр.ID
Ошибка:
 The column prefix '_1sjourn' does not match with a table name or alias name used in the query.
60 monsterZE
 
09.01.13
17:30
(59) ты как всегда =)
61 monsterZE
 
09.01.13
17:31
он присоединиться сам что-ли должен?
62 Ёпрст
 
09.01.13
17:32
|select
| $ДокЗП.Сотрудник [Сотрудник $Справочник.Сотрудники],
| Жур.DocNo AS Номер,
.........
|from $ДокументСтроки.ВыплатаЗПБ as ДокЗП (nolock)
|left join $Справочник.Сотрудники as СпрСотр (nolock)on $ДокЗП.Сотрудник = СпрСотр.ID
|left join _1sjourn as Жур (nolock) on Жур.iddoc=ДокЗП.iddoc
63 bananan
 
09.01.13
17:40
(60)-(62) Спасибо... Ну не как всегда. просто что-то голова ну совсем нераблотает
64 bananan
 
09.01.13
17:43
(62) Текчт запроса такой:
     |SELECT
           | $ДокЗП.Сотрудник [Сотрудник $Справочник.Сотрудники],
           | _1sjourn.DocNo AS Номер,
           | $СпрСотр.Имя AS Имя
           | ,$СпрСотр.Отчество AS Отчество
           | ,$СпрСотр.ШтатНомер AS ШтатНомер
           | ,$СпрСотр.Пол [Пол $Перечисление.Пол]
           | ,$СпрСотр.ДокСерия AS ДокСерия
           | ,$СпрСотр.ДокНомер AS ДокНомер
           | ,$СпрСотр.ДокКогдаВыдан AS ДокКогдаВыдан
           | ,$СпрСотр.ДокКемВыдан AS ДокКемВыдан
           | ,$СпрСотр.ДатаРождения AS ДатаРождения
           | ,$СпрСотр.РождГород AS РождГород
           | ,$СпрСотр.ФактАдрес AS ФактАдрес
           | ,$СпрСотр.ФактИндекс AS ФактИндекс
           | ,$СпрСотр.ДатаПриема AS ДатаПриема
           | ,$СпрСотр.ТелефонДом AS ТелефонДом
           | ,$СпрСотр.ТелефонРаб AS ТелефонРаб
           | ,$СпрСотр.ИНН AS ИНН
           | ,$СпрСотр.НомерСчета AS НомерСчета
           | ,СпрСотр.Code AS Код
           |FROM
           |$ДокументСтроки.ВыплатаЗПБ as ДокЗП (nolock)
           |left join $Справочник.Сотрудники as СпрСотр (nolock)on $ДокЗП.Сотрудник = СпрСотр.ID
           |left join _1sjourn as Жур (nolock) on Жур.iddoc=ДокЗП.iddoc
Ошибка:
 The column prefix '_1sjourn' does not match with a table name or alias name u
65 ДенисЧ
 
09.01.13
17:44
| _1sjourn.DocNo AS Номер,
раз
left join _1sjourn as Жур
два.

А теперь иди читай документ по скулю в области алиасов.
66 bananan
 
09.01.13
17:47
(65) Исправил текст запроса. теперь он такой:
 |SELECT
           | $ДокЗП.Сотрудник [Сотрудник $Справочник.Сотрудники],
           | $СпрСотр.Имя AS Имя
           | ,$СпрСотр.Отчество AS Отчество
           | ,$СпрСотр.ШтатНомер AS ШтатНомер
           | ,$СпрСотр.Пол [Пол $Перечисление.Пол]
           | ,$СпрСотр.ДокСерия AS ДокСерия
           | ,$СпрСотр.ДокНомер AS ДокНомер
           | ,$СпрСотр.ДокКогдаВыдан AS ДокКогдаВыдан
           | ,$СпрСотр.ДокКемВыдан AS ДокКемВыдан
           | ,$СпрСотр.ДатаРождения AS ДатаРождения
           | ,$СпрСотр.РождГород AS РождГород
           | ,$СпрСотр.ФактАдрес AS ФактАдрес
           | ,$СпрСотр.ФактИндекс AS ФактИндекс
           | ,$СпрСотр.ДатаПриема AS ДатаПриема
           | ,$СпрСотр.ТелефонДом AS ТелефонДом
           | ,$СпрСотр.ТелефонРаб AS ТелефонРаб
           | ,$СпрСотр.ИНН AS ИНН
           | ,$СпрСотр.НомерСчета AS НомерСчета
           | ,СпрСотр.Code AS Код
           |FROM
           |$ДокументСтроки.ВыплатаЗПБ as ДокЗП (nolock)
           |left join $Справочник.Сотрудники as СпрСотр (nolock)on $ДокЗП.Сотрудник = СпрСотр.ID
           |left join _1sjourn as Жур (nolock) on Жур.iddoc=ДокЗП.iddoc
Ошибка:
 Ветка.УстановитьАтрибут("SHEDULE_NUMBER", ТЗ.Жур.DocNo);        // Номер зарплатной ведомости
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАРПЛАТАXML.ERT(65)}: Поле агрегатного объекта не обнаружено (Жур)
67 ДенисЧ
 
09.01.13
17:48
Ветка.УстановитьАтрибут("SHEDULE_NUMBER", ТЗ.Жур.DocNo);

это ещё что такое????
68 ДенисЧ
 
09.01.13
17:48
| ЖУр.DocNo AS Номер,
таксложно написать было?
69 bananan
 
09.01.13
17:53
(68) Это дописал (3-я строчка после селекта)...
Ошибка:
 Ветка.УстановитьАтрибут("SHEDULE_NUMBER", ТЗ.Жур.DocNo);        // Номер зарплатной ведомости
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАРПЛАТАXML.ERT(66)}: Поле агрегатного объекта не обнаружено (Жур)
70 ДенисЧ
 
09.01.13
17:54
(69) ты не то дописал. Откуда у тебя в ТЗ Жур возьмётся??
71 Ёпрст
 
09.01.13
17:56
пилять, как ты можешь писать (66) опосля (62) ???!!!!
72 Ёпрст
 
09.01.13
17:57
там если че, правильный ответ
73 Ёпрст
 
09.01.13
17:57
ну и потом
Ветка.УстановитьАтрибут("SHEDULE_NUMBER", ТЗ.Номер);
74 bananan
 
09.01.13
18:11
(73) Так и сделал:
 Ветка.УстановитьАтрибут("SHEDULE_NUMBER", ТЗ.Номер);
Выдает ошибку:
 Ветка.УстановитьАтрибут("SHEDULE_NUMBER", ТЗ.Номер);        // Номер зарплатной ведомости
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАРПЛАТАXML.ERT(66)}: Неизвестное имя
А сейчас посмотрю (62)
Посмотрел я (62) Дык у меня вроде ве так и написано (полный текст запроса):
|SELECT
           | $ДокЗП.Сотрудник [Сотрудник $Справочник.Сотрудники],
           | ЖУр.DocNo AS Номер,
           | $СпрСотр.Имя AS Имя
           | ,$СпрСотр.Отчество AS Отчество
           | ,$СпрСотр.ШтатНомер AS ШтатНомер
           | ,$СпрСотр.Пол [Пол $Перечисление.Пол]
           | ,$СпрСотр.ДокСерия AS ДокСерия
           | ,$СпрСотр.ДокНомер AS ДокНомер
           | ,$СпрСотр.ДокКогдаВыдан AS ДокКогдаВыдан
           | ,$СпрСотр.ДокКемВыдан AS ДокКемВыдан
           | ,$СпрСотр.ДатаРождения AS ДатаРождения
           | ,$СпрСотр.РождГород AS РождГород
           | ,$СпрСотр.ФактАдрес AS ФактАдрес
           | ,$СпрСотр.ФактИндекс AS ФактИндекс
           | ,$СпрСотр.ДатаПриема AS ДатаПриема
           | ,$СпрСотр.ТелефонДом AS ТелефонДом
           | ,$СпрСотр.ТелефонРаб AS ТелефонРаб
           | ,$СпрСотр.ИНН AS ИНН
           | ,$СпрСотр.НомерСчета AS НомерСчета
           | ,СпрСотр.Code AS Код
           |FROM
           |$ДокументСтроки.ВыплатаЗПБ as ДокЗП (nolock)
           |left join $Справочник.Сотрудники as СпрСотр (nolock)on $ДокЗП.Сотрудник = СпрСотр.ID
           |left join _1sjourn as Жур (nolock) on Жур.iddoc=ДокЗП.iddoc
Что здесь не так?
75 bananan
 
09.01.13
18:26
*(74) Кто-нибудь ПОМОГИТЕ!!!!!!!!!!!!!!!!!!!!!!
76 bananan
 
09.01.13
18:34
Ошибка в этой строке:
Ветка.УстановитьАтрибут("SHEDULE_NUMBER", ТЗ.Номер);        // Номер зарплатной ведомости
Ошибка:
 Неизвестное имя
Какое имя ей неизвестно?!!
77 bananan
 
09.01.13
18:41
*(76) ТЗ.Номер дак он в запросе определяется:
|SELECT
           | $ДокЗП.Сотрудник [Сотрудник $Справочник.Сотрудники],
           | Жур.DocNo AS Номер,
           | $СпрСотр.Имя AS Имя
           | ,$СпрСотр.Отчество AS Отчество
           | ,$СпрСотр.ШтатНомер AS ШтатНомер
           | ,$СпрСотр.Пол [Пол $Перечисление.Пол]
           | ,$СпрСотр.ДокСерия AS ДокСерия
           | ,$СпрСотр.ДокНомер AS ДокНомер
           | ,$СпрСотр.ДокКогдаВыдан AS ДокКогдаВыдан
           | ,$СпрСотр.ДокКемВыдан AS ДокКемВыдан
           | ,$СпрСотр.ДатаРождения AS ДатаРождения
           | ,$СпрСотр.РождГород AS РождГород
           | ,$СпрСотр.ФактАдрес AS ФактАдрес
           | ,$СпрСотр.ФактИндекс AS ФактИндекс
           | ,$СпрСотр.ДатаПриема AS ДатаПриема
           | ,$СпрСотр.ТелефонДом AS ТелефонДом
           | ,$СпрСотр.ТелефонРаб AS ТелефонРаб
           | ,$СпрСотр.ИНН AS ИНН
           | ,$СпрСотр.НомерСчета AS НомерСчета
           | ,СпрСотр.Code AS Код
           |FROM
           |$ДокументСтроки.ВыплатаЗПБ as ДокЗП (nolock)
           |left join $Справочник.Сотрудники as СпрСотр (nolock)on $ДокЗП.Сотрудник = СпрСотр.ID
           |left join _1sjourn as Жур (nolock) on Жур.iddoc=ДокЗП.iddoc
           |";
Третья строка"!
78 bananan
 
09.01.13
18:51
И еще здесь (если я не ошибаюсь) запросу нужно передать параметр с номером документа..
Или здесь запрос вообще не нужен?
Задача такая на основе ОДНОГО документа ВыплатаЗПБ сформировать XML-файл.
В XML-файл нужны такие данные:
SHEDULE_DATE    Дата зарплатной ведомости в формате ДД/ММ/ГГГГ
SHEDULE_NUMBER    Номер зарплатной ведомости
PAYER_BANK_BRANCHID    МФО банка, в котором открыт счёт плательщика
PAYER_BANK_ACCOUNTNO    Счёт плательщика в банке (транзитный).
Примечание. Если администратор выполнил настройку системы таким образом, что транзитный счет будет определяться автоматически, то данное поле будет необязательным для заполнения
PAYER_ACCOUNTNO    Счёт для списания средств
TOTAL_SHEDULE_AMOUNT    Общая сумма зарплатной ведомости в формате ГРН,КОП
CONTRAGENT_CODEZKP    Код зарплатного проекта.
Обязательно указывается только для банков, использующих ЗКП
а также:
Информация о начисленной сотруднику сумме содержит следующие значения
IDENTIFYCODE    Идентификационный код сотрудника
TABNO    Табельный номер сотрудника.
Если в ид. коде указано значение 000000000 (сотрудник нерезидент или отказался от присвоения кода), данное поле является обязательным для заполнения
AMOUNT    Сумма для зачисления на счёт сотрудника в формате ГРН,КОП
79 bananan
 
09.01.13
19:11
А номер документа можно получить и не в запросе а так:
ВыбВыплатаЗПБ.НомерДок
А по сотрудниках - тоже, возмоэно обойтись без запроса...
80 bananan
 
09.01.13
19:24
Пробую по сотрудниках без запроса - код такой:
     Спр = СоздатьОбъект("Справочник.Сотрудники");
    Сообщить(ВыбВыплатаЗПБ.НомерДок+"- номер документа");
    Пока ВыбВыплатаЗПБ.ПолучитьСтроку() = 1 Цикл
       Сообщить("Сотрудник: "+ВыбВыплатаЗПБ.Сотрудник);
       // искать сотрудника в Справочнике?
        Ср = Спр.НайтиПоНаименованию(ВыбВыплатаЗПБ.Сотрудник, 0);
        Сообщить("Ср= "+Ср);
    КонецЦикла;
Выдает:
 АТ-0000153- номер документа
Сотрудник: Гамов
Ср= 0
Сотрудник: Красотов
Ср= 0
Ну не хочет он искать по наименованию1
81 monsterZE
 
09.01.13
20:36
(78) нах тебе вобще запрос тогда, если на основе _одного_ дока выгрузку сделать?? найди док, через создать документ / выбрать документ и выгружай.
82 monsterZE
 
09.01.13
20:40
по запросу - запрос выполняется?
в тз.ВыбратьСтроку(); столбцы присутствуют? значит все с запросом норм.
83 monsterZE
 
09.01.13
20:44
и если у тебя в докуменет в табличной части реквизит сотрудник, нах его вобще искать????? а если уж искать то через НайтиЭлемент(<?>)
84 monsterZE
 
09.01.13
20:48
Ср = Спр.НайтиПоНаименованию(ВыбВыплатаЗПБ.Сотрудник.Наименование, 0);
85 monsterZE
 
09.01.13
20:48
ты вобще кто, там, где работаешь? =)
86 bananan
 
10.01.13
12:48
(81) Запрос. я думаю таки нужен, если без запроса, то, скорее всего появится неоднозначности с Сотрудниками (Например. есть три сотрудника Иванов... - однозначно идентифицировать сотрудника можно, по коду, табельному номеру и т.д., но не по фамилии)
Или яф не прав?
87 bananan
 
10.01.13
12:58
*(86) А, скорее всего здесь надо делать комбинацию из работы с документом и запросом
88 Ёпрст
 
10.01.13
13:03
(87) для одного запроса запрос не нужен
89 bananan
 
10.01.13
13:03
Вопрос, такой код:
Пока ВыбВыплатаЗПБ.ПолучитьСтроку() = 1 Цикл
 Сообщить("Сотрудник: "+ВыбВыплатаЗПБ.Сотрудник);
 Спр.НайтиПоНаименованию(ВыбВыплатаЗПБ.Сотрудник, 0);
 Сообщить("Сотрудник= "+Спр.Наименование);
 Сообщить("Спр.Код= "+Спр.Код);
КонецЦикла;
Выдает:
АТ-0000154- номер документа
Сотрудник: Захарчук
Сотрудник=
Спр.Код=
Что я здесь не так сделал?
90 bananan
 
10.01.13
13:04
(88) А как мне однозначно найти сотрудника иванов в справочнике, если их, Ивановых в спрачочнике несколько?
91 monsterZE
 
10.01.13
13:08
ты почитай, что выше я тебе писал
92 bananan
 
10.01.13
13:13
(91) В табличной части документа есть сотрудник.
Но, я не знаю могу я через елемент Сотрудник таблицной части доступится к такому же сотруднику (тому же).
Это возможно?
Если да - то как?
93 bananan
 
10.01.13
13:16
Ко всему прочему мне нужно из этого документа (с помощью ) узнать много информации о фирме...
94 Ёпрст
 
10.01.13
13:18
ну п..ц

Пока ВыбВыплатаЗПБ.ПолучитьСтроку() = 1 Цикл
 Сообщить("Сотрудник: "+ВыбВыплатаЗПБ.Сотрудник);
 Сообщить("Сотрудник= "+ВыбВыплатаЗПБ.Сотрудник.Наименование);
 Сообщить("Спр.Код= "+ВыбВыплатаЗПБ.Сотрудник.Код);
КонецЦикла;
95 bananan
 
10.01.13
13:20
(94) Спасибо!
Я и не знал, что так можно, а попробывать - не догадался... :(
96 Никола_
Питерский
 
10.01.13
13:22
Ёпрст4 как всегда бесподобен !

Ответы лаконичные и всегда по делу.

+100500
97 bananan
 
10.01.13
14:21
Ребята, а в документе есть общая сумма или надо ее самому построчно вычислять?
98 Dolly_EV
 
10.01.13
14:23
(97) если есть галка "Итог по колонке" - реквизит (сумма) хранится в шапке дока.
Но штатными средстави обратиться только так:
Док.Итог("Сумма")
99 bananan
 
10.01.13
14:24
(98) Спасибо
100 Dolly_EV
 
10.01.13
14:25
Все хочу спросить... здесь за СП где-нить платицца?
101 Dolly_EV
 
10.01.13
14:27
0! 100!
102 bananan
 
10.01.13
14:59
Вопрос по v7plus.
Код такой:
   XMLАнализатор = СоздатьОбъект("AddIn.XMLParser");
   XMLКорневойРаздел = XMLАнализатор.СоздатьДокумент();
   ДанныеXML = XMLКорневойРаздел.СоздатьПодчиненныйЭлемент("DATAPACKET");
   Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("SCHEDULEINFO");
   Ветка.УстановитьАтрибут("SHEDULE_DATE", ВыбВыплатаЗПБ.ДатаДок);        
   Ветка.УстановитьАтрибут("SHEDULE_NUMBER", ВыбВыплатаЗПБ.НомерДок);
   Ветка.УстановитьАтрибут("PAYER_BANK_BRANCHID", ВыбВыплатаЗПБ.Фирма.РС.БанкМФО);
   Ветка.УстановитьАтрибут("PAYER_BANK_ACCOUNTNO", ВыбВыплатаЗПБ.Фирма.РС.БанкСчет);
   Ветка.УстановитьАтрибут("TOTAL_SHEDULE_AMOUNT", Строка(ВыбВыплатаЗПБ.Итог("Сумма")));// TOTAL_SHEDULE_AMOUNT - Общая сумма зарплатной ведомости в формате ГРН,КОП
   Ветка.УстановитьАтрибут("CONTRAGENT_CODEZKP", ВыбВыплатаЗПБ.Фирма.РС.Банк.ЕГРПОУ);
   
   Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEES");
   Пока ВыбВыплатаЗПБ.ПолучитьСтроку() = 1 Цикл            
       Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEE");                      
       Ветка.УстановитьАтрибут("IDENTIFYCODE", ВыбВыплатаЗПБ.Сотрудник.ИНН);// Идентификационный код сотрудника
       Ветка.УстановитьАтрибут("TABNO", ВыбВыплатаЗПБ.Сотрудник.Код);// Табельный номер сотрудника
       Ветка.УстановитьАтрибут("CARDACCOUNTNO", "123123"); // Номер карточного (или другого) счёта сотрудника.
       Ветка.УстановитьАтрибут("AMOUNT", ВыбВыплатаЗПБ.Сумма); //Сумма для зачисления на счёт сотрудника в формате ГРН,КОП
   КонецЦикла;
XMLКорневойРаздел.Записать(ИмяФайлаXML);
Так вот тут с узлами непонятное делается:
Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("SCHEDULEINFO"); - элемент создается нормально и нормально в конце файла ест закрывающий тег...
а вот:
Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEES");
так в открывающем теге сразу же после имени идет / - закрытие елемента
а у меня в елементе EMPLOYEES несколько елементов EMPLOYEE
т.е. схматично примерно так:
<EMPLOYEES>
 <EMPLOYEE .../>
 <EMPLOYEE .../>
 <EMPLOYEE .../>
 <EMPLOYEE .../>
<EMPLOYEES />
У меня же файл формируется не такой а такой:
<EMPLOYEES/>
 <EMPLOYEE IDENTIFYCODE="3376400724" TABNO="2156" CARDACCOUNTNO="123123" AMOUNT="1239.02"/>
 <EMPLOYEE IDENTIFYCODE="3376400777" TABNO="2121" CARDACCOUNTNO="123123" AMOUNT="1239.02"/>
103 monsterZE
 
10.01.13
15:22
попробуй "разделить ветки" =)
104 bananan
 
10.01.13
15:29
(103) Это как?
Вот полный код :
   XMLАнализатор = СоздатьОбъект("AddIn.XMLParser");
   XMLКорневойРаздел = XMLАнализатор.СоздатьДокумент();
   ДанныеXML = XMLКорневойРаздел.СоздатьПодчиненныйЭлемент("DATAPACKET");
   Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("SCHEDULEINFO");
   Ветка.УстановитьАтрибут("SHEDULE_DATE", ВыбВыплатаЗПБ.ДатаДок);        
   Ветка.УстановитьАтрибут("SHEDULE_NUMBER", ВыбВыплатаЗПБ.НомерДок);
   Ветка.УстановитьАтрибут("PAYER_BANK_BRANCHID", ВыбВыплатаЗПБ.Фирма.РС.БанкМФО);
   Ветка.УстановитьАтрибут("PAYER_BANK_ACCOUNTNO", ВыбВыплатаЗПБ.Фирма.РС.БанкСчет);
   Ветка.УстановитьАтрибут("TOTAL_SHEDULE_AMOUNT", Строка(ВыбВыплатаЗПБ.Итог("Сумма")));// TOTAL_SHEDULE_AMOUNT - Общая сумма зарплатной ведомости в формате ГРН,КОП
   Ветка.УстановитьАтрибут("CONTRAGENT_CODEZKP", ВыбВыплатаЗПБ.Фирма.РС.Банк.ЕГРПОУ);
       
   ДанныеXML = XMLКорневойРаздел.СоздатьПодчиненныйЭлемент("EMPLOYEES");
   Пока ВыбВыплатаЗПБ.ПолучитьСтроку() = 1 Цикл            
       Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEE");                      
       Ветка.УстановитьАтрибут("IDENTIFYCODE", ВыбВыплатаЗПБ.Сотрудник.ИНН);// Идентификационный код сотрудника
       Ветка.УстановитьАтрибут("TABNO", ВыбВыплатаЗПБ.Сотрудник.Код);// Табельный номер сотрудника
       Ветка.УстановитьАтрибут("CARDACCOUNTNO", ""); // ???? Номер карточного (или другого) счёта сотрудника.
       Ветка.УстановитьАтрибут("AMOUNT", ВыбВыплатаЗПБ.Сумма); //Сумма для зачисления на счёт сотрудника в формате ГРН,КОП
   КонецЦикла;
   XMLКорневойРаздел.Записать(ИмяФайлаXML);
105 Ёпрст
 
10.01.13
15:34
Ё...

Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEES");

...............

Ветка2 = Ветка.СоздатьПодчиненныйЭлемент("EMPLOYEE");                      
       Ветка2.УстановитьАтрибут("IDENTIFYCODE
106 Ёпрст
 
10.01.13
15:34
думай, кому чего создаешь..
107 bananan
 
10.01.13
15:49
(105) Спасибо
(106) Постараюсь
108 bananan
 
10.01.13
15:55
(105) Код такой:

   Ветка1 = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEES");
   Пока ВыбВыплатаЗПБ.ПолучитьСтроку() = 1 Цикл            
       Ветка2 = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEE");                      
           // Идентификационный код сотрудника
       Ветка2.УстановитьАтрибут("IDENTIFYCODE", ВыбВыплатаЗПБ.Сотрудник.ИНН);
           // Табельный номер сотрудника
       Ветка2.УстановитьАтрибут("TABNO", ВыбВыплатаЗПБ.Сотрудник.Код);
           // Номер карточного (или другого) счёта сотрудника.
       Ветка2.УстановитьАтрибут("CARDACCOUNTNO", ВыбВыплатаЗПБ.Сотрудник.НомерСчета);
           //Сумма для зачисления на счёт сотрудника в формате ГРН,КОП
       Ветка2.УстановитьАтрибут("AMOUNT", ВыбВыплатаЗПБ.Сумма);
   КонецЦикла;
Но на выходе все-равно не то
На выходе вот что:
<?xml version="1.0" encoding="windows-1251"?>
<DATAPACKET>
   <SCHEDULEINFO SHEDULE_DATE="2012-12-18" SHEDULE_NUMBER="АТ-0000156" PAYER_BANK_BRANCHID="333227   "
   PAYER_BANK_ACCOUNTNO="260059008            " TOTAL_SHEDULE_AMOUNT="1239.02"/>
       <EMPLOYEES/>
           <EMPLOYEE IDENTIFYCODE="3376400724" TABNO="2156" CARDACCOUNTNO="                         " AMOUNT="1239.02"/>
</DATAPACKET>
Т.е. лажа с EMPLOYEES - он сначала должен "открыться"
потом в нему идут теги EMPLOYEE
А потом он должен закрыться: </EMPLOYEES>
109 monsterZE
 
10.01.13
16:22
бананан, ты черепашку и пылесосик изучал?.. может с них надо было начать? ты вложенность не соблюдаешь.
110 Ёпрст
 
10.01.13
16:23
да п..ц
ты вообще читаешь, что тебе пишут ?
111 monsterZE
 
10.01.13
16:23
так должно получиться?
<DATAPACKET>
<SCHEDULEINFO SHEDULE_DATE="1" SHEDULE_NUMBER="2" PAYER_BANK_BRANCHID="3" CONTRAGENT_CODEZKP="4">
<EMPLOYEES>
<EMPLOYEE IDENTIFYCODE="0" TABNO="1" CARDACCOUNTNO="2" AMOUNT="3"/>
</EMPLOYEES>
</SCHEDULEINFO>
</DATAPACKET>
112 Ёпрст
 
10.01.13
16:23
Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEES");
....
Пока ВыбВыплатаЗПБ.ПолучитьСтроку() = 1 Цикл            
       Ветка2 = !!!!!!!!!!!!!!ВЕТКА!!!!!!!!!!!!!!!!!! .СоздатьПодчиненныйЭлемент("EMPLOYEE");
113 Ёпрст
 
10.01.13
16:24
так виднее ?
114 monsterZE
 
10.01.13
16:25
он похож даже не пытается =)
--
   Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("SCHEDULEINFO");
   Ветка.УстановитьАтрибут("SHEDULE_DATE", "1");        
   Ветка.УстановитьАтрибут("SHEDULE_NUMBER", "2");
   Ветка.УстановитьАтрибут("PAYER_BANK_BRANCHID", "3");

   Ветка.УстановитьАтрибут("CONTRAGENT_CODEZKP", "4");
       
   Ветка2 = Ветка.СоздатьПодчиненныйЭлемент("EMPLOYEES");
   
       Ветка3 = Ветка2.СоздатьПодчиненныйЭлемент("EMPLOYEE");                      
       Ветка3.УстановитьАтрибут("IDENTIFYCODE", "0");// Идентификационный код сотрудника

       Ветка3.УстановитьАтрибут("TABNO", "1");// Табельный номер сотрудника

       Ветка3.УстановитьАтрибут("CARDACCOUNTNO", "2"); // ???? Номер карточного (или другого) счёта сотрудника.

       Ветка3.УстановитьАтрибут("AMOUNT", "3"); //Сумма для зачисления на счёт сотрудника в формате ГРН,КОП
---
растут ветки =))
115 bananan
 
10.01.13
16:27
(113)(114) Спасибо. Я кажется понял. Сейчас попробую
116 monsterZE
 
10.01.13
16:28
первую ветку переименуй в ствол! =)) так правильней будет!
117 Mikeware
 
10.01.13
16:30
в (115) он "кажется, понял"....
интересно, чем думал работодатель, нанимая такого "работничка"...
118 oslokot
 
10.01.13
16:36
(9) да нормально работает, только что сделал обработку импорта накладных из сети аптек, все быстро. Правда xml-файлики маленькие, килобайт по сто...
119 bananan
 
10.01.13
16:55
Ребята, а как можно на форму поставить поле для выбора файла?
120 monsterZE
 
10.01.13
17:03
так же, как и с выбором документа..
тока тип строка
и в предопределенную процедуру вставляешь
Процедура ПриНачалеВыбораЗначения(ТекущийЭлемент,Флаг)
   // выбираем файл
   Если ТекущийЭлемент="ФайлCSV" Тогда
       Флаг = 0;
       СтрокаИмениФайла = ФайлCSV;              
       ИмяНачальногоКаталога = ФС.ТекКаталог();
       Если ФС.ВыбратьФайл(0, СтрокаИмениФайла, ИмяНачальногоКаталога, "Выбор файла с ГТД", "Все файлы (*.csv) |*.csv", "csv")=1 Тогда
           ФайлCSV = СтрокаИмениФайла;
           КаталогФайлаCSV = ИмяНачальногоКаталога;
       КонецЕсли;
   КонецЕсли;                            
КонецПроцедуры
121 bananan
 
10.01.13
17:25
(120) Честно говоря ни понял. А какой елемент поставить на форму чтобы в нем можно было выбрать место на диске куда сохранить файл и задать имя файла?
122 bananan
 
10.01.13
17:29
*(121) ВыбратьФайл()?
123 monsterZE
 
10.01.13
17:41
хреново..
реквизит диалога, тип строка
зы. черепашка рулит - перо опусти, перо подними, сделай шаг =)
124 bananan
 
10.01.13
17:46
(123) Опять ничего не понял:
поставил я на форму елемент с типом строка и чего - есть елемент для ввода значения,
а мне нужен елемент для выбора файла и его места на диске!
Пробывал так:
   Файл = ВыбратьФайл(1, ИмяФайлаXML, Каталог, "Зберегти в файл", "Файлы xml", "xml", 2);
выдает ошибку:
Файл = ВыбратьФайл<<?>>(1, ИмяФайлаXML, Каталог, "Зберегти в файл", "Файлы xml", "xml", 2);
{\\server12\vpktest$\ExtForms\ХМЛ новий.ert(7)}: Функция не обнаружена (ВыбратьФайл)
Это я что-то не так сделал или какие-то глюки в сети?
125 Ёпрст
 
10.01.13
17:50
(124) ФС.
126 monsterZE
 
10.01.13
17:51
ты видишь, что у меня написано?..
оно не похоже на то, что у тебя написано..
елемента для выбора файла нет =)
есть элемент строка с пидалькой
по нажатию которой можно заполнять этот элемент именем файла
127 bananan
 
10.01.13
18:39
Всем большщое спасибо!!!
А как мне определить выбрал ли пользователь документ ЗарплатаЗПБ?
128 bananan
 
10.01.13
19:06
*(127) Я сделал так:
Если СтрДлина(ВыбВыплатаЗПБ)=0 Тогда
       Возврат;
   КонецЕсли;
И, таким обрзом, дальше код не выполняется
129 monsterZE
 
10.01.13
20:38
вот тут http://www.mista.ru/tutor_1c/
есть отличный учебник.. только ты все равно его не прочитаешь.. =) может языковой барьер мешает?
130 monsterZE
 
10.01.13
20:41
даже в СП выбрал методы документа и читай..
причем тут вобще строка и документ?

Выбран()
Синтаксис:
Выбран()
Назначение:
Определение факта позиционирования объекта типа документ.
Возвращает: 1 - если документ выбран; 0 - если не выбран.
131 bananan
 
11.01.13
11:19
(130) Спасибо
А строка причем? так вот, если документ не выбран - длина строки равна 0!
132 Ёпрст
 
11.01.13
11:23
(131) а если там будет битая ссылка - то обломишься с неявным преобразованием ссылочного типа к строке.
133 Mikeware
 
11.01.13
11:25
(129) мешает не "языковой барьер", а "интеллектуальный уровень".
ну и, естественно, "закон соотношения радиусов"
134 bananan
 
11.01.13
11:49
(133) Просто, ты, не равнодушен ко мне :)
135 bananan
 
11.01.13
11:50
(132) Сделал уже как в (130) - правильно.
136 Mikeware
 
11.01.13
11:50
(134) Пит мне передал завет - дятлов считать...
я заглянул в твои темы, и тебя засчитал...
137 bananan
 
11.01.13
12:51
(136) Не скромничай; и себя не забудь посчитать...