|
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
|
||||
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) Не скромничай; и себя не забудь посчитать...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |