0. user5300 490 02.09.19 17:40 Сейчас в теме

Обмен данными через Web Сервисы

Ознакомительная статья о том, как загружать\выгружать данные с одной базы в другую, используя Web Сервисы.

Перейти к публикации

Лучшие комментарии
37. VPanin56 83 25.03.20 09:02 Сейчас в теме
У нас тоже активно используется Web Сервис, но помимо функций обмена есть еще и процедуры "Выполнения кода" и "Выполнения запроса"

#Область Сериализаци
Функция Десериализовать(XMLСтруктураСериализованногоОбъекта)
	ЧтениеXMLДанных = Новый ЧтениеXML;
	ЧтениеXMLДанных.УстановитьСтроку(XMLСтруктураСериализованногоОбъекта);
	ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
	ЧтениеXMLДанных.Закрыть();  
	Возврат ТЗ;
КонецФункции

Функция Сериализовать(ОбъектСериализации)
	ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
	МойXML = Новый ЗаписьXML;
	МойXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
	Возврат МойXML.Закрыть();
КонецФункции
#КонецОбласти

Функция ВыполнитьЗапрос(ТекстЗапроса, Параметры, ТипОбходаЗапроса)
		
	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса;
	
	ТабПараметры = Десериализовать(Параметры); 
	Для Каждого Стр из ТабПараметры Цикл
		Запрос.УстановитьПараметр(Стр.Ключ, ПолучитьПараметрЗапроса(Стр));
	КонецЦикла;
	
	Таб = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса[ТипОбходаЗапроса]);
	
	результат = Сериализовать(Таб);
	
	Возврат Результат;
	
	
КонецФункции

Функция ПолучитьПараметрЗапроса(Строка)
	
	Если Строка.Тип="Вычислить" тогда
		Возврат Вычислить(Строка.Значение);
	ИначеЕсли Строка.Тип="Выполнить" тогда
		ДопПараметры = Строка.ДопПараметры;
		Значение = Неопределено;
		Выполнить(Строка.Значение);
		Возврат Значение;
	Иначе
		Возврат Строка.Значение;
	КонецЕсли;	
	
КонецФункции



Функция ВыполнитьКод(ТекстКода, Параметры)
	
	Ошибка_ = Ложь;
	ТекстОшибки_ = "";
	РезультатВыполнения = Неопределено;
		
	Попытка
		Выполнить(ТекстКода);
	Исключение
		Ошибка_ = Истина;
		ТекстОшибки_ = ОписаниеОшибки();
	КонецПопытки;
	
	Возврат Сериализовать(Новый Структура("Ошибка, ТекстОшибки, Результат", Ошибка_, ТекстОшибки_, РезультатВыполнения));
	
КонецФункции

Показать


Очень удобно использовать для разных задач. Web сервис уже не переписывается, а отправляется в него то что нужно выполнит, или Запрос, или Код 1С
Andry2004; wunderland; maksal; user5300; +4 Ответить
Остальные комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. Boyborodin 03.09.19 08:18 Сейчас в теме
Советую делать один параметр входящий типа string и исходящий такой же. В строку кидать текст JSON. В JSON можно запаковывать любое количество параметров, даже таблицы значений. Без муторной работы с XDTO, а сама запаковка и распаковка занимает несколько строк кода. Так же если при доработке придется добавлять входные/выходные параметры сам web-сервис можно уже не перенастраивать.
wunderland; user774630; danjer74; duhin; ybatiaev; hakerxp; Jeka44; Lazio; kuzyara; marat3581525; TODD22; Robbi; wowik; Jokemas; TeMochkiN; Glebb_NSK; Fox-trot; user5300; +18 1 Ответить
2. user5300 490 03.09.19 08:22 Сейчас в теме
(1) Хорошая идея! Спасибо за совет !)
3. AlX0id 03.09.19 08:37 Сейчас в теме
(1)
Тут только один нюанс - в пользу использования того же XDTO - не будет автоматической проверки корректности того, что же вы запихали в этот JSON..
В принципе, сам использую похожий способ - для работы с внешними источниками - на вход беру строки xml, кодированные в base64. Не очень красиво, зато внешним кодерам удобно и понятно.
6. Boyborodin 03.09.19 09:02 Сейчас в теме
(3)

Запаковываем

	 ЗаписьJSON = Новый ЗаписьJSON;
	 ЗаписьJSON.УстановитьСтроку();
	 СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, СтруктураДанных, НазначениеТипаXML.Явное);
	 StringJS = ЗаписьJSON.Закрыть();


Распаковываем

	ЧтениеJS = Новый ЧтениеJSON;
	ЧтениеJS.УстановитьСтроку(StringJS);
	СтруктураДанных = СериализаторXDTO.ПрочитатьJSON(ЧтениеJS);
	ЧтениеJS.Закрыть();


JSON автоматически всё сериализует. Удобнее чем XML. Можно еще пожать, если данные объемные.
wunderland; duhin; ybatiaev; user5300; wowik; +5 Ответить
7. user5300 490 03.09.19 09:05 Сейчас в теме
(6) Кстати, а если структура баз отличается ? Допустим если выгрузить физ лица с ЗУП в УТ, у них же разные структуры... Реквизиты и тд., Ошибки не будет ?)
8. Boyborodin 03.09.19 09:14 Сейчас в теме
(7)

Ошибка будет. Тем более такие обмены обычно делают в нетиповых конфигурациях. Для типовых есть типовые инструменты. В структуру лучше кидать примитивные параметры: дата, число, строка, или таблицу значений из примитивных данных.

Для вашего примера:

СтруктураДанных = Новый Структура;
СтруктураДанных.Добавить("КонецПериода", КонецПериода);
СтруктураДанных.Добавить("НачалоПериода", НачалоПериода);
СтруктураДанных.Добавить("Склад", Склад);


И не забыть после успешного завершения процедуры вернуть какой-нибудь признак что всё прошло хорошо.
ybatiaev; user5300; +2 Ответить
10. AlX0id 03.09.19 09:26 Сейчас в теме
(6)
Я не про удобство - автоматического контроля состава данных внутри JSON нет.
XML, кстати, я в итоге разбираю с помощью XDTO все равно.
31. new_user 179 07.01.20 15:54 Сейчас в теме
(1) только в таком случае wsdl о том что Вы в этот входящий параметр передадите не расскажет( А вроде веб-сервис в том числе для wsdl и используется. Иначе Вам где то описание сервиса размещать надо и руками описывать что можно в этот входящий параметр положить.
user5300; +1 Ответить
4. Fox-trot 114 03.09.19 08:44 Сейчас в теме
каталог базы должен иметь полные права

как тебя понимать, саид? (с)
5. user5300 490 03.09.19 08:50 Сейчас в теме
(4) Забыл..., если база файловая- каталог базы должен иметь полные права
9. Fox-trot 114 03.09.19 09:24 Сейчас в теме
(5) может все же пользователь должен иметь полные права? тогда какой пользователь?
11. user5300 490 03.09.19 09:51 Сейчас в теме
(9)
Прикрепленные файлы:
Fox-trot; +1 Ответить
27. Сто27001 05.09.19 08:12 Сейчас в теме
(4) Если с русского перевести на русский, то "каталог базы должен иметь полные права" означает, что пользователь ОС от имени которого запущены IIS или Apache, должен иметь полные права на каталог в котором расположена публикуемая файловая база.
user5300; elizarovs; Fox-trot; +3 Ответить
12. ellavs 711 03.09.19 11:12 Сейчас в теме
Довольно часто пользуемся подобным функционалом для обмена данными между базами (только используем HTTP-сервисы). Это в основном, когда мы не хотим пускать пользователей в основную базу, но им нужно поработать с данными. Есть другая конфигурация, например, не содержащая ПДн, куда доступ предоставлен бОльшему количеству пользователей, и в ней получаем данные из основной БД через сервис.
13. logos 183 03.09.19 16:53 Сейчас в теме
А зачем в этой ситуации вообще SOAP? Зачитывание wsdl, сериализация в ХЗ, обратная десериализация. Про json уже написали, так давайте последовательно советовать и http-сервис. Передаем в одном из полей метод, в другом данные. Сериализация/десериализация отлично делается методами ПрочитатьJSON, ЗаписатьJSON. И никакого XDTO вообще не нужно.
ybatiaev; sevushka; +2 Ответить
17. Ndochp 103 04.09.19 09:16 Сейчас в теме
(13)ХДТО нужен исключительно для автоматической проверки входящих данный на соответствие формату. К джейсону такое универсально на коленке не прикрутить.
user5300; +1 Ответить
18. logos 183 04.09.19 09:18 Сейчас в теме
(17) Какая в данном сценарии может быть проверка? Описывается получение произвольных данных запросом (базовых типов). Считаю, что использование SOAP имеет смысл только при работе с "ненадежным" клиентом, от которого можно получить "непредсказуемый" input. А когда пишешь свои сервисы - это избыточная перестраховка, сильно усложняющая разработку.
ybatiaev; Fox-trot; +2 Ответить
19. Ndochp 103 04.09.19 09:36 Сейчас в теме
(18) У меня 8 видов баз под контролем. И они периодически обновляются. Вот тебе и источник непредсказуемого инпута.
Ты же не будешь правила писать для превращения документа в джейсон, правильно? ты сделаешь платформенную сериализацию.
А на стороне приёмника уже сделаешь какой-то алгоритм разбора, если базы не совпадают.

И вот, то что писали в "Реквизит" начали писать в "Реквизит подробно", а в "Реквизит" стали писать укрупненные типы.
В случае SOAP алгоритм на принимающей стороне долбанется от новых реквизитов в которые переложили нужные тебе данные и ты полезешь разбираться. А в разборе джейсона ты проигнорируешь "Реквизит подробно", привычно заберешь все из "Реквизит", и получишь неверный документ.
Vladimir Litvinenko; user5300; +2 Ответить
20. logos 183 04.09.19 12:39 Сейчас в теме
(19) Давайте всё таки на Вы. Если "левая рука" не знает, что делает правая - никто не запрещает использовать SOAP. Однако, в контексте публикации автора, http сервис и JSON сериализатор дадут более аккуратный и более быстрый код.
ybatiaev; +1 Ответить
21. Ndochp 103 04.09.19 13:00 Сейчас в теме
(20) Давайте на Вы.
Левая рука - Вы. Правая - 1С. Обмена между самописными базами я за свою карьеру не встречал, обычно нетеленка обменивается с доработанной типовой, или две доработанных между собой. В нетленка - 1С непредсказуемость только на стороне приёмника, а вот в 1С-1С - с обеих сторон.

У автора вообще контекста нет. У него есть инструмент и пример использования. Ясно, что код без проверок будет быстрее и компактнее. Как и подшипник без смазки крутится быстрее. Только вот в реальной жизни подшипники смазывают, а в коде делают проверки. И SOAP даёт для них автоматизированный инструмент, а Json оставляет все на откуп пользователю.
В итоге в реальности на до исходить из своего контекста - передача ограниченного числа слабосвязанных объектов легко делается на Jsonе, кусочек базы данных - надежнее на XDTO.
Vladimir Litvinenko; +1 Ответить
22. logos 183 04.09.19 13:44 Сейчас в теме
(21) Левая рука - клиент, правая - сервер. Я не вижу, где тут код от ООО "1С-Софт", в случае, если мы пишем свой веб-сервис. Если Вы предоставляете сервер сторонним клиентам - я обеими руками за SOAP, когда ошибка в рассинхронизации протокола - это просто ошибка разработчика(ов) информационной системы. Впрочем, настаивать не буду, хотите SOAP - я не в праве Вам этого запретить.
23. Ndochp 103 04.09.19 15:34 Сейчас в теме
(22) Код от 1С вот тут: СериализаторXDTO.ЗаписатьJSON (http://v8.1c.ru/o7/201501json/index.htm) Соответственно в поле "Значение" будет то, что написала 1С.
24. logos 183 04.09.19 16:00 Сейчас в теме
(23) А я предлагаю пользоваться другим сериализатором:
Глобальный контекст (Global context)
ЗаписатьJSON (WriteJSON)
25. Ndochp 103 04.09.19 16:13 Сейчас в теме
(24)
В формате JSON допускается записывать только значения следующих типов:
Строка,
Число,
Булево,
Дата (преобразованная в строку),
Массив,
ФиксированныйМассив,
Структура,
ФиксированнаяСтруктура,
Соответствие,
ФиксированноеСоответствие.

Успехов в передаче документов.
26. logos 183 04.09.19 16:37 Сейчас в теме
(25) Передаются структуры/соответствия и массивы. К этим типам приводятся необходимые получателю объекты. Вы же не будете утверждать, что XDTO (xsd) у Вас волшебным образом самостоятельно заполняется? Платформенным сериализатором многое не передать. В любом случае придётся заполнять "объект xdto".
30. new_user 179 07.01.20 15:49 Сейчас в теме
(13) В целом - согласен, только:

ЗаписатьJSON
- не может сериализовать таблицу значений, а:

СериализаторXDTO.ЗаписатьJSON
- может.
14. EMelihoff 03.09.19 16:55 Сейчас в теме
у меня наверное профессиональная деградация, при виде переменной "Хранилище" думал минут 5 причём тут хранилище ))
15. nbeliaev 04.09.19 06:13 Сейчас в теме
Методы, параметры веб-сервиса на кириллице.
Логин и пароль также.
Если дергать такой веб-сервис не из платформы 1С, то будут проблемы.
16. user5300 490 04.09.19 07:45 Сейчас в теме
(15) Это пример обмена между базами ) Конечно можно все переделать на латиницу для работы с другими сервисами )
28. alexeypenzin 2 09.10.19 11:08 Сейчас в теме
Статья отличная, но хочется продолжения.
На практике, в основном, нужно выгружать в базу приемник только измененные объекты. Не совсем понятно как это реализовать с помощью веб-сервисов. Как в данном обмене применить планы обмена? Когда и где очищать таблицу измененных объектов?

Коротко вопрос: На клиенте получили данные, как на сервере узнать что клиент принял данные и на сервере удалить данный объект из таблицы измененных объектов?
29. user5300 490 09.10.19 11:49 Сейчас в теме
(28) Спасибо, статья для общего ознакомления )

Выгрузку и загрузку объектов можно осуществить разными способами, в основном используется чтение\запись xml между нетиповыми конфигурациями , далее можно прикрутить планы обмена под свои задачи. Для обмена между типовыми - придется использовать расширения.

Функции веб сервиса выполняются на сервере, в случае возникновении ошибки - система сообщит об этом ) можно также добавить функцию проверки после записи либо сразу, например:
Функция ЗаписьДокумента(Параметры)
  попытка
    док = новыйДокумент;
    Док.Записать(Проведение);
    Ответ = "Создан новый док: + Док.Ссылка;
  Исключение
    Ответ = "ошибка: "  + ОписаниеОшибки();
  КонецПопытки
  Возврат Ответ;
Конецфункции
Показать

//Пример оповещения пользователя...

Возможно в будущем будет разбор более конкретной задачи с примерами и обработками ...)
32. frkbvfnjh 582 25.03.20 06:53 Сейчас в теме
На мой взгляд Web-сервисы - это самое ужасное, что можно использовать для обмена. Лично я написал на http-сервисах - куда стабильнее и более гибко. При плохом интернете или большом объеме данных web-сервис тупо умирает, часто вызывая блокировки. Web-сервисы сложны в разработке для новичков и вообще в 1С это какая то не-до-технология. Кроме того, при использовании http-сервисов, можно еще и предварительно сжать данные, я уж не знаю как вы это сделаете в web-сервисе.
33. user5300 490 25.03.20 08:05 Сейчас в теме
(32) в веб сервисе тоже можно сжимать данные типовыми средствами например )

Возврат новый ХранилищеДанных(ТабличнаяЧасть,Новый СжатиеДанных(9));
35. frkbvfnjh 582 25.03.20 08:09 Сейчас в теме
34. user5300 490 25.03.20 08:06 Сейчас в теме
(32) У каждого свои подходы для решения задач, это всего лишь пример того как можно использовать веб сервисы )
36. frkbvfnjh 582 25.03.20 08:10 Сейчас в теме
(34) да согласен, но боль от использования веб-сервисов не утихнет никогда
38. Sergik_D 17 25.03.20 18:04 Сейчас в теме
(32) У меня 1с обменивается с приложением на Android через Web-сервисы. Думал переходить на HTTP, но не нашел информации о преимуществах. Если есть такая информация, буду благодарен за ссылки. Вот это прям моё: "При плохом интернете или большом объеме данных web-сервис тупо умирает, часто вызывая блокировки"
37. VPanin56 83 25.03.20 09:02 Сейчас в теме
У нас тоже активно используется Web Сервис, но помимо функций обмена есть еще и процедуры "Выполнения кода" и "Выполнения запроса"

#Область Сериализаци
Функция Десериализовать(XMLСтруктураСериализованногоОбъекта)
	ЧтениеXMLДанных = Новый ЧтениеXML;
	ЧтениеXMLДанных.УстановитьСтроку(XMLСтруктураСериализованногоОбъекта);
	ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
	ЧтениеXMLДанных.Закрыть();  
	Возврат ТЗ;
КонецФункции

Функция Сериализовать(ОбъектСериализации)
	ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
	МойXML = Новый ЗаписьXML;
	МойXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
	Возврат МойXML.Закрыть();
КонецФункции
#КонецОбласти

Функция ВыполнитьЗапрос(ТекстЗапроса, Параметры, ТипОбходаЗапроса)
		
	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса;
	
	ТабПараметры = Десериализовать(Параметры); 
	Для Каждого Стр из ТабПараметры Цикл
		Запрос.УстановитьПараметр(Стр.Ключ, ПолучитьПараметрЗапроса(Стр));
	КонецЦикла;
	
	Таб = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса[ТипОбходаЗапроса]);
	
	результат = Сериализовать(Таб);
	
	Возврат Результат;
	
	
КонецФункции

Функция ПолучитьПараметрЗапроса(Строка)
	
	Если Строка.Тип="Вычислить" тогда
		Возврат Вычислить(Строка.Значение);
	ИначеЕсли Строка.Тип="Выполнить" тогда
		ДопПараметры = Строка.ДопПараметры;
		Значение = Неопределено;
		Выполнить(Строка.Значение);
		Возврат Значение;
	Иначе
		Возврат Строка.Значение;
	КонецЕсли;	
	
КонецФункции



Функция ВыполнитьКод(ТекстКода, Параметры)
	
	Ошибка_ = Ложь;
	ТекстОшибки_ = "";
	РезультатВыполнения = Неопределено;
		
	Попытка
		Выполнить(ТекстКода);
	Исключение
		Ошибка_ = Истина;
		ТекстОшибки_ = ОписаниеОшибки();
	КонецПопытки;
	
	Возврат Сериализовать(Новый Структура("Ошибка, ТекстОшибки, Результат", Ошибка_, ТекстОшибки_, РезультатВыполнения));
	
КонецФункции

Показать


Очень удобно использовать для разных задач. Web сервис уже не переписывается, а отправляется в него то что нужно выполнит, или Запрос, или Код 1С
Andry2004; wunderland; maksal; user5300; +4 Ответить
39. hoyo 07.04.20 09:47 Сейчас в теме
(37) Если не сложно, приведите пожалуйста пример, как вызвать "ВыполнитьЗапрос" на стороне базы, в которую мы хотим получить данные, а то не очень понятно, в каком виде должны передаваться Параметры, например.
40. VPanin56 83 07.04.20 15:34 Сейчас в теме
Вот пример куска кода из самописки по обслуживанию БАЗ. Кусок где именно вызывается "Выполнить Запрос" не нашел. Но при вызове "Выполнить Код" так же передается и текст запроса и параметры для этого запроса. Оптимально использовать именно его.
WebСервисБух - название нашего расширения подключенного в Бух базах и опубликованного.
.....
....
		Параметры = Новый СТруктура;
		Параметры.Вставить("ДатаВключенияПросрочкиПользователей", Дата("20180101"));
		Параметры.Вставить("ПросрочкаРаботыВПрограммеДоЗапрещенияВхода", Константы.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода.Получить());

		ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(Параметры);
		МойXML = Новый ЗаписьXML;
		МойXML.УстановитьСтроку();
		ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
		Параметры = МойXML.Закрыть();
		
			Пользователь = Константы.ПользовательДляПодключения.Получить();
			Пароль		 = Константы.ПарольДляПодключения.Получить();
			
			ВСОпределение = Новый WSОпределения(База.WSСсылка, Пользователь, Пароль);
			Соединение = Новый WSПрокси(ВСОпределение, "WebService1", "WebСервисБух", "WebСервисБухSoap");

			Соединение.Пользователь = Пользователь;
			Соединение.Пароль 		= Пароль;

			ОтветWS = Соединение.ВыполнитьКод(ТекстКонтрольАктивностиПользователей(), Параметры);

			ЧтениеXMLДанных = Новый ЧтениеXML;
			ЧтениеXMLДанных.УстановитьСтроку(ОтветWS);
			Ответ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
			ЧтениеXMLДанных.Закрыть();
			
			Если Ответ.Ошибка тогда
				ЗаписьЖурналаРегистрации("РегЗаписьЖурналаРегистрации", УровеньЖурналаРегистрации.Ошибка,,, СокрЛП(База)+" : "+Ответ.ТекстОшибки);
			КонецЕсли;

Функция ТекстКонтрольАктивностиПользователей() Экспорт
	
	ТекстКода = "
	|	УстановитьПривилегированныйРежим(Истина);
	|
	|	ЧтениеXMLДанных = Новый ЧтениеXML;
	|	ЧтениеXMLДанных.УстановитьСтроку(Параметры);
	|	Параметры = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
	|	ЧтениеXMLДанных.Закрыть();
	|
	|	Запрос = Новый Запрос;
	|	Запрос.Текст = ""
	|		|ВЫБРАТЬ
	|		|	Пользователи.Ссылка КАК Пользователь,
	|		|	ВЫБОР
	|		|		КОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <> &ПустаяДата
	|		|			ТОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <= &НачалоДняТекущейДатыСеанса
	|		|		ИНАЧЕ ЛОЖЬ
	|		|	КОНЕЦ КАК СрокДействияИстек
	|		|ИЗ
	|		|	Справочник.Пользователи КАК Пользователи
	|		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях
....
....
....
	|	Запрос.УстановитьПараметр(""ПустаяДата"", '00010101');
	|	Запрос.УстановитьПараметр(""НачалоДняТекущейДатыСеанса"",               	НачалоДня(ТекущаяДатаСеанса()));
	|	Запрос.УстановитьПараметр(""ДатаВключенияПросрочкиПользователей"",      	Параметры.ДатаВключенияПросрочкиПользователей);
	|	Запрос.УстановитьПараметр(""ПросрочкаРаботыПользователей"",             	Параметры.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода);
	|	Запрос.УстановитьПараметр(""ДатаВключенияПросрочкиВнешнихПользователей"",	Параметры.ДатаВключенияПросрочкиПользователей);
	|	Запрос.УстановитьПараметр(""ПросрочкаРаботыВнешнихПользователей"",        	Параметры.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода);
	|
	|   Выборка = Запрос.Выполнить().Выбрать();
	|   
	|   ИнформацияОбОшибке = Неопределено;
	|   Пока Выборка.Следующий() Цикл
	|   	Пользователь = Выборка.Пользователь;
	|	КонецЦикла;
	|
	|	РезультатВыполнения = Истина;
	|";

	Возврат ТекстКода;
	
КонецФункции

Показать
41. VPanin56 83 07.04.20 16:12 Сейчас в теме
Или вот кусок кода по формированию параметров для передачи

Таб = Новый ТаблицаЗначений;
			Таб.Колонки.Добавить("Ключ");
			Таб.Колонки.Добавить("Тип");
			Таб.Колонки.Добавить("Значение");
			Таб.Колонки.Добавить("ДопПараметры");
			
			// ОРГАНИЗАЦИЯ
			Стр = Таб.Добавить();
			Стр.Ключ = "Организация";
			Если СокрЛП(ОфициальнаяОрганизация.ВнешняяСсылка) = "" Тогда
				Стр.Тип = "Выполнить";
				Текст = "Значение = Справочники.Организации.НайтиПоНаименованию(ДопПараметры.Организация)";
				ДопПар = Новый Структура("Организация", СокрЛП(ОфициальнаяОрганизация.Наименование));
				Стр.ДопПараметры = ДопПар;
			Иначе
				Стр.Тип = "Выполнить";
				Текст = "Значение = ЗначениеИзСтрокиВнутр(ДопПараметры.ВнешняяСсылка)";
				ДопПар = Новый Структура("ВнешняяСсылка", СокрЛП(ОфициальнаяОрганизация.ВнешняяСсылка));
				Стр.ДопПараметры = ДопПар;
			КонецЕсли;
			Стр.Значение = Текст;
			
			// НачалоПериода
			Стр = Таб.Добавить();
			Стр.Ключ = "НП";
			Стр.Тип = "Дата";
			Стр.Значение = НачалоПериода;
			
			// НачалоПериода
			Стр = Таб.Добавить();
			Стр.Ключ = "КП";
			Стр.Тип = "Дата";
			Стр.Значение = КонецДня(КонецПериода);
Показать
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Разработчик 1С
Санкт-Петербург
зарплата от 140 000 руб.
Полный день

Консультант-аналитик 1С
Санкт-Петербург
зарплата от 90 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб. до 200 000 руб.
Полный день

Аналитик 1С
Москва
зарплата от 120 000 руб. до 200 000 руб.
Полный день

Программист 1С
Екатеринбург
зарплата от 80 000 руб. до 130 000 руб.
Полный день