|
Помогите вызвать процедуры и функции из модуля объекта в форме объекта | ☑ | ||
---|---|---|---|---|
0
pele
26.10.12
✎
10:51
|
Вот есть процедуры и функции написанные в модуле объекта помогите в форме объекта
&НаКлиенте Процедура ПрочитатьИзФайлаXML(Команда) Результат(); КонецПроцедуры Процедура Результат() Экспорт стрСодержимоеФайлаXML = ПолучитьТекстXMLССайта(); стрСодержимоеФайлаXML = СтрЗаменить(стрСодержимоеФайлаXML, "&", "'n'"); дзРезультат = РаспарситьФайлXML(стрСодержимоеФайлаXML); Сформировать(дзРезультат); КонецПроцедуры &НаСервере Функция ПолучитьТекстXMLССайта() Экспорт Попытка Соединение = Новый HTTPСоединение("krasavik.by"); Исключение Сообщить(ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; ОписаниеОшибки = ""; ОтветСервера = ПолучитьДанныеССервера(Соединение, "1corders.php?id=1300", , ОписаниеОшибки); Если ОтветСервера = Неопределено Тогда Сообщить(ОписаниеОшибки); Возврат Неопределено; КонецЕсли; Возврат ОтветСервера; КонецФункции &НаСервере Функция ПолучитьДанныеССервера(Соединение, ПараметрыЗапроса = "", Заголовки = "", ОписаниеОшибки) ИмяФайлаОтвета = ПолучитьИмяВременногоФайла(); Попытка Соединение.Получить(ПараметрыЗапроса, ИмяФайлаОтвета, СокрЛП(Заголовки)); Исключение ОписаниеОшибки = ОписаниеОшибки(); КонецПопытки; ФайлОтвета = Новый Файл(ИмяФайлаОтвета); ОтветСервера = НеОпределено; Если ФайлОтвета.Существует() Тогда ТекстОтвета = Новый ТекстовыйДокумент(); ТекстОтвета.Прочитать(ИмяФайлаОтвета); Если ТекстОтвета.КоличествоСтрок()>0 Тогда ОтветСервера = ТекстОтвета.ПолучитьТекст(); Иначе ОписаниеОшибки = ОписаниеОшибки + НСтр("ru = 'Получение данных с сервера: Получен пустой ответ сервера.'"); КонецЕсли; Иначе ОписаниеОшибки = ОписаниеОшибки + НСтр("ru = 'Получение данных с сервера: Ответ сервера не получен.'"); КонецЕсли; Попытка УдалитьФайлы(КаталогВременныхФайлов(), ИмяФайлаОтвета); Исключение КонецПопытки; Возврат ОтветСервера; КонецФункции &НаСервере Функция РаспарситьФайлXML(стрСодержимоеФайлаXML) ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.УстановитьСтроку(стрСодержимоеФайлаXML); дзРезультат = Новый ДеревоЗначений(); дзРезультат.Колонки.Добавить("Название"); дзРезультат.Колонки.Добавить("Значение"); дзРезультат.Колонки.Добавить("ЭтоУзел"); хзПриемникДанных = дзРезультат; Пока ЧтениеXML.Прочитать() Цикл Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда хзПриемникДанных = хзПриемникДанных.Строки.Добавить(); хзПриемникДанных["Название"] = ЧтениеXML.ЛокальноеИмя; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда хзПриемникДанных["Значение"] = ЧтениеXML.Значение; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда хзПриемникДанных["ЭтоУзел"] = хзПриемникДанных.Строки.Количество(); хзПриемникДанных = хзПриемникДанных.Родитель; КонецЕсли; КонецЦикла; ЧтениеXML.Закрыть(); Возврат дзРезультат; КонецФункции Процедура Сформировать(дзРезультат) Для Каждого Заказа Из дзРезультат.Строки цикл Для каждого Строка из Заказа.Строки цикл КомментарийПартнера = ""; КомментарийКонтрагента = ""; докЗаказКлиента = Документы.ЗаказКлиента.СоздатьДокумент(); Соответствие = Новый Соответствие; Индекс = 0; тз = Новый ТаблицаЗначений; тз.Колонки.Добавить("КодТовараНаСайте"); тз.Колонки.Добавить("НаименованиеТовара"); тз.Колонки.Добавить("КодКаталогаНаСайте"); тз.Колонки.Добавить("НаименованиеКаталога"); тз.Колонки.Добавить("НомерЦвета"); тз.Колонки.Добавить("НаименованиеЦвета"); тз.Колонки.Добавить("Размер"); тз.Колонки.Добавить("Цена"); тз.Колонки.Добавить("Скидка"); тз.Колонки.Добавить("Количество"); Для каждого стрЗаказы из Строка.Строки Цикл Индекс = Индекс + 1; Соответствие [Индекс] = стрЗаказы.Значение; КонецЦикла; Стр = Соответствие.Получить(7); Дата = ПолучитьДатуИзСтроки(Стр); докЗаказКлиента.Дата = Дата; РезПоискаПартнеры = Справочники.Партнеры.НайтиПоКоду(Соответствие.Получить(1)); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенты.КодНаСайте, | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.КодНаСайте = &КодНаСайте"; Запрос.УстановитьПараметр("КодНаСайте",Соответствие.Получить(5)); Выборка = Запрос.Выполнить(); ПоискКонтрагента = Выборка.Выбрать(); Если ПоискКонтрагента.Следующий() = Истина тогда РезПоискаКонтрагенты = ПоискКонтрагента.ссылка; КонецЕсли; Если РезПоискаПартнеры.Пустая() или Не ЗначениеЗаполнено(РезПоискаКонтрагенты) тогда КомментарийПартнера = "Не найден партнер с id:" + Соответствие.Получить(1); КомментарийКонтрагента = "Не найден контрагент с id:" + Соответствие.Получить(5); Иначе докЗаказКлиента.Партнер = РезПоискаПартнеры.Ссылка; докЗаказКлиента.Контрагент = РезПоискаКонтрагенты.Ссылка; КонецЕсли; Если стрЗаказы.Название= "order_details" тогда Для каждого ЭлСтрока из стрЗаказы.Строки Цикл НоваяСтрока = тз.Добавить(); Для каждого ЭлементЗаказа из ЭлСтрока.Строки Цикл Если ЭлементЗаказа.Название = "item_id" тогда НоваяСтрока.КодТовараНаСайте = ЭлементЗаказа.Значение; ИначеЕсли ЭлементЗаказа.Название = "item_name" тогда НоваяСтрока.НаименованиеТовара = ЭлементЗаказа.Значение; ИначеЕсли ЭлементЗаказа.Название = "item_catalog_id" тогда НоваяСтрока.КодКаталогаНаСайте = ЭлементЗаказа.Значение; ИначеЕсли ЭлементЗаказа.Название = "item_catalog_name" тогда НоваяСтрока.НаименованиеКаталога = ЭлементЗаказа.Значение; ИначеЕсли ЭлементЗаказа.Название = "color_id" тогда НоваяСтрока.НомерЦвета = ЭлементЗаказа.Значение; ИначеЕсли ЭлементЗаказа.Название = "color_name" тогда НоваяСтрока.НаименованиеЦвета = ЭлементЗаказа.Значение; ИначеЕсли ЭлементЗаказа.Название = "size" тогда НоваяСтрока.Размер = ЭлементЗаказа.Значение; ИначеЕсли ЭлементЗаказа.Название = "price" тогда НоваяСтрока.Цена = ЭлементЗаказа.Значение; ИначеЕсли ЭлементЗаказа.Название = "discount" тогда НоваяСтрока.Скидка = ЭлементЗаказа.Значение; ИначеЕсли ЭлементЗаказа.Название = "cnt" тогда НоваяСтрока.Количество = ЭлементЗаказа.Значение; КонецЕсли; КонецЦикла КонецЦикла; ДокументЗаказаКлиента(тз,докЗаказКлиента,КомментарийПартнера,КомментарийКонтрагента); КонецЕсли; ДокЗаказКлиента.ОбменДанными.Загрузка = Истина; ДокЗаказКлиента.Записать(); КонецЦикла; КонецЦикла; КонецПроцедуры Процедура ДокументЗаказаКлиента(тз,докЗаказКлиента,КомментарийПартнера,КомментарийКонтрагента) //ДокЗаказКлиента = Документы.ЗаказКлиента.СоздатьДокумент(); // Для каждого СтрТЗ из тз Цикл КомментарийХарактеристик = ""; КомментарийТовара = ""; тчТовары = ДокЗаказКлиента.Товары; ОбъектТовары = тчТовары.Добавить(); КоллекцияЗначений = Новый СписокЗначений(); КоллекцияЗначений.Добавить(СтрТЗ.Размер); КоллекцияЗначений.Добавить(СтрТЗ.НомерЦвета); КоллекцияЗначений.Добавить(СтрТЗ.НаименованиеЦвета); НаименованиеХарактеристик = СформироватьНаименованиеХарактеристик(КоллекцияЗначений); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.idТовараНаСайте, | Номенклатура.idКаталогаНаСайте, | Номенклатура.Ссылка, | Номенклатура.ВидНоменклатуры.ИспользованиеХарактеристик КАК ИспользованиеХарактеристик |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.idТовараНаСайте = &idТовараНаСайте | И Номенклатура.idКаталогаНаСайте = &idКаталогаНаСайте"; Запрос.УстановитьПараметр("idТовараНаСайте",СтрТЗ.КодТовараНаСайте); Запрос.УстановитьПараметр("idКаталогаНаСайте",СтрТЗ.КодКаталогаНаСайте); Выборка = Запрос.Выполнить(); ПоискНоменклатуры = Выборка.Выбрать(); Если ПоискНоменклатуры.Следующий() = Истина тогда ОбъектТовары.Номенклатура = ПоискНоменклатуры.ссылка; Иначе КомментарийТовара = "Не найден товар с кодом:"+ СтрТЗ.КодТовараНаСайте +";" + " " + "Наименование:"+ "" + СтрТЗ.НаименованиеТовара; КонецЕсли; Если ПоискНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.ИндивидуальныеДляНоменклатуры тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ХарактеристикиНоменклатуры.Ссылка, | ХарактеристикиНоменклатуры.Владелец, | ХарактеристикиНоменклатуры.Наименование |ИЗ | Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры |ГДЕ | ХарактеристикиНоменклатуры.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец",ПоискНоменклатуры.ссылка); Выборка = Запрос.Выполнить(); РезХарактеристик = Выборка.Выбрать(); Пока РезХарактеристик.Следующий() Цикл Если НаименованиеХарактеристик = РезХарактеристик.Ссылка тогда ОбъектТовары.Характеристика = РезХарактеристик.Ссылка; Иначе КомментарийХарактеристик = "Не найдена характеристика товара:" + НаименованиеХарактеристик; КонецЕсли; КонецЦикла; КонецЕсли; ОбъектТовары.Количество = СтрТЗ.Количество; ДокЗаказКлиента.Комментарий = КомментарийПартнера + Символы.ПС + КомментарийКонтрагента + Символы.ПС + КомментарийТовара + Символы.ПС + КомментарийХарактеристик + Символы.ПС; КонецЦикла; КонецПроцедуры Функция ПолучитьДатуИзСтроки(Стр) СтрокаДаты = Стр; ПС = Символы.ПС; Стр = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрокаДаты, "-", ПС), ":", ПС), " ", ПС); Дата = Дата( СтрПолучитьСтроку(Стр, 1) , СтрПолучитьСтроку(Стр, 2) , СтрПолучитьСтроку(Стр, 3) , СтрПолучитьСтроку(Стр, 4) , СтрПолучитьСтроку(Стр, 5) , СтрПолучитьСтроку(Стр, 6) ); возврат Дата; КонецФункции Функция СформироватьНаименованиеХарактеристик(КоллекцияЗначений) Строка = ""; Для каждого ЭлементКоллекции Из КоллекцияЗначений Цикл Если ЗначениеЗаполнено(ЭлементКоллекции.Значение) Тогда Строка = Строка + ЭлементКоллекции.Значение + ", "; КонецЕсли; КонецЦикла; Строка = Лев(Строка, СтрДлина(Строка) - 2); Если ПустаяСтрока(Строка) Тогда Строка = "<Свойства не назначены>"; КонецЕсли; Возврат Строка; КонецФункции |
|||
1
Godofsin
26.10.12
✎
10:58
|
Запросы в цикле - моветон. В чем проблема-то?
|
|||
2
pele
26.10.12
✎
11:00
|
нужно вызвать в модуле формы по нажатии на кнопку
|
|||
3
pele
26.10.12
✎
11:01
|
Как вызвать:
&НаКлиенте Процедура ПрочитатьИзФайлаXML(Команда) Результат(); КонецПроцедуры Процедура Результат() Экспорт стрСодержимоеФайлаXML = ПолучитьТекстXMLССайта(); стрСодержимоеФайлаXML = СтрЗаменить(стрСодержимоеФайлаXML, "&", "'n'"); дзРезультат = РаспарситьФайлXML(стрСодержимоеФайлаXML); Сформировать(дзРезультат); КонецПроцедуры |
|||
4
Ursus maritimus
26.10.12
✎
11:07
|
&НаСервере
Процедура ПрочитатьИзФайлаXML(Команда) Об = РеквизитФормыВЗначение("Объект"); Об.Результат(); КонецПроцедуры &НаКлиенте Процедура ПрочитатьИзФайлаXML(Команда) ВызватьРезультат(); КонецПроцедуры |
|||
5
Ursus maritimus
26.10.12
✎
11:08
|
Издержки копипаста. Так Надо
&НаСервере Процедура ВызватьРезультат(Команда) Об = РеквизитФормыВЗначение("Объект"); Об.Результат(); КонецПроцедуры &НаКлиенте Процедура ПрочитатьИзФайлаXML(Команда) ВызватьРезультат(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |