Имя: Пароль:
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)}: Параметр не опциональный
Что я нетак делаю?
1 Privalov
 
09.01.13
13:25
Откуда взял "значение"?
3 bananan
 
09.01.13
13:32
(1) Структура XVL такая:
<?xml version="1.0" encoding="windows-1251"?>
<DATAPACKET Version="2.0">
<EMPLOYEES>
<EMPLOYEE ID="1"  IDENTIFYCODE="1234567890" LASTNAME="Фамилия" FIRSTNAME="Имя" MIDDLENAME="Отчество" EMBOSSIGLI="FAMILIA"  SEX="M" PASSPORTNO="ББ111111" PASSPORTISSUEDATE="01/01/2000" PASSPORTISSUEPLACE="РОГУ МВД У" BIRTHDAY="01/01/1980" BIRTHPLACE="Город" CITIZENSHIP="804" ADDRESS="Город, улица, дом" ADDR_COUNTRYID="804" ADDR_POSTCODE="61000" ADDR_REGION="Область" ADDR_DISTRICT="Район" ADDR_CITY="Город" ADDR_STREET="Улица" ADDR_HOUSENO="01" ADDR_FLAT="01" JURADDR_COUNTRYID="804" JURADDR_POSTCODE="61000" JURADDR_REGION="Область"  JURADDR_DISTRICT="Район" JURADDR_CITY="Город" JURADDR_STREET="Улица" JURADDR_HOUSENO="01"  JURADDR_FLAT="01" ACCEPTANCEDATE="01/01/2008" HOMEPHONE="+380571112233" WORKPHONE="+380574445566" MOBILEPHONE="+380507778899" />

</EMPLOYEES>
Вот я для элемента ID и задаю знчение (в данном случае - порядковый номер)...
4 Ёпрст
 
09.01.13
13:38
(0)Открой для себя
FOR XML
...
и забей на AddIn.XMLParser
5 Mikeware
 
09.01.13
13:39
(4) это уже колдунство!
6 Надсмотрщик
 
09.01.13
13:41
(4) AddIn.XMLParser работает как часы
7 monsterZE
 
09.01.13
13:44
вот тебе кусечек =)
--
   Если ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"v7plus.dll") <> 1 Тогда
       Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"\bin\"+"v7plus.dll") <> 1 Тогда
           Предупреждение("Компонента v7plus.dll не найдена!");
           Возврат;
       КонецЕсли;
   КонецЕсли;
   
   ХМЛАнализатор = СоздатьОбъект("AddIn.XMLParser");    
   ХМЛДокумент = ХМЛАнализатор.СоздатьДокумент();

   Файл = ХМЛДокумент.СоздатьПодчиненныйЭлемент("Файл");
   Файл.УстановитьАтрибут("ИдФайл",ИмяФайла);
   Файл.УстановитьАтрибут("ВерсФорм","5.02");
   СвУчДокОбор = Файл.СоздатьПодчиненныйЭлемент("СвУчДокОбор");
   СвУчДокОбор.УстановитьАтрибут("ИдОтпр",ИдОтпр);        
   СвУчДокОбор.УстановитьАтрибут("ИдПок",ИдПок);          
...
8 Ёпрст
 
09.01.13
13:49
(6) ну-ну..
9 Ёпрст
 
09.01.13
13:50
это худшее, что есть для xml в клюшках.
10 monsterZE
 
09.01.13
13:51
(9) а что в нем плохого?
11 Попытка1С
 
09.01.13
13:53
12 Попытка1С
 
09.01.13
13:54
13 Гефест
 
09.01.13
13:54
(6) лучше бы он работал как парсер
14 Ёпрст
 
09.01.13
13:54
(10)
1.медленный
2.падение при больших xml
3.ест много памяти
15 Надсмотрщик
 
09.01.13
13:55
(9) Ты просто не умеешь его готовить
16 bananan
 
09.01.13
13:56
C XML вроде как разобрался. Но вот что, мне нужно установить атрибут "LASTNAME" (Фамиля сотрудника). Пишу так:
   Ветка.УстановитьАтрибут("LASTNAME", ТЗ.Сотрудник);
Выдает:
Ветка.УстановитьАтрибут("LASTNAME", ТЗ.Сотрудник);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАРПЛАТАXML.ERT(67)}: Плохой тип переменной
К ТЗ.Мотрудник это: $ДокЗП.Сотрудник [Сотрудник $Справочник.Сотрудники]
Тут как-то по-другому надо к нему обратиться?
17 Попытка1С
 
09.01.13
13:57
Ветка.УстановитьАтрибут("LASTNAME", ТЗ.Сотрудник.Наименование);
18 Надсмотрщик
 
09.01.13
13:58
(16) Ветка.УстановитьАтрибут("LASTNAME", Строка(ТЗ.Сотрудник));
19 Ёпрст
 
09.01.13
13:59
(15) :))
Как думаешь, почему в КД2 используется домдокумент, а не v7plus ?
20 bananan
 
09.01.13
14:00
(17) Спасибо. работает!
21 Надсмотрщик
 
09.01.13
14:01
(19) v7plus на снеговике?
22 monsterZE
 
09.01.13
14:04
(14) ну мелкий какашняк выгружать - почему нет?.. =)
23 Ёпрст
 
09.01.13
14:04
(21) почему бы и нет ?
24 bananan
 
09.01.13
14:10
У нас в справочнике Сотрудники, поле Пол - перечисление.
в XML мне нужен Атрибут SEX
Здесь надо делать изменения в тексте запроса добавить Inner JOIN?
25 Ёпрст
 
09.01.13
14:12
(24) нет
26 bananan
 
09.01.13
14:14
(25) А как?
27 Ёпрст
 
09.01.13
14:16
(26) просто типизировать поле с перечислением в тексте запроса . и усё.
28 bananan
 
09.01.13
14:17
(27) А это CASE?
29 Ёпрст
 
09.01.13
14:17
select
  $Спр.ВидМужикаБаба as [Пол $Перечисление.ВидМужикаБаба]
30 monsterZE
 
09.01.13
14:20
(28) case это условия, привести к типу это cast.. и convert
31 bananan
 
09.01.13
14:21
(29) В коде запроса сделал правки - запрос работает, но выдает:
Ветка.УстановитьАтрибут("SEX", ТЗ.Пол);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАРПЛАТАXML.ERT(73)}: Плохой тип переменной
Там в данном XML нужно записывать либо M либо F
32 monsterZE
 
09.01.13
14:22
=) потому что тз.пол типизирована
33 Ёпрст
 
09.01.13
14:23
Ну так воткни
Ветка.УстановитьАтрибут("SEX",""+ТЗ.Пол);
34 bananan
 
09.01.13
14:38
(33) Спасибо, - работает, но выдает М или Ж, а надо M либо F, тутуж таки case нужен?
35 bananan
 
09.01.13
14:39
*(34) И где этот касе вставляыть?
36 Ёпрст
 
09.01.13
14:40
(34) если в самом запросе, то case, если в результатах, то и ?(,,) хватит
37 bananan
 
09.01.13
14:42
(36) А как лучше - в запросе или в результатах?
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) Не скромничай; и себя не забудь посчитать...
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.