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

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

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

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

Лучшие комментарии
37. VPanin56 78 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 473 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 473 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 178 07.01.20 15:54 Сейчас в теме
(1) только в таком случае wsdl о том что Вы в этот входящий параметр передадите не расскажет( А вроде веб-сервис в том числе для wsdl и используется. Иначе Вам где то описание сервиса размещать надо и руками описывать что можно в этот входящий параметр положить.
user5300; +1 Ответить
4. Fox-trot 113 03.09.19 08:44 Сейчас в теме
каталог базы должен иметь полные права

как тебя понимать, саид? (с)
5. user5300 473 03.09.19 08:50 Сейчас в теме
(4) Забыл..., если база файловая- каталог базы должен иметь полные права
9. Fox-trot 113 03.09.19 09:24 Сейчас в теме
(5) может все же пользователь должен иметь полные права? тогда какой пользователь?
11. user5300 473 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 697 03.09.19 11:12 Сейчас в теме
Довольно часто пользуемся подобным функционалом для обмена данными между базами (только используем HTTP-сервисы). Это в основном, когда мы не хотим пускать пользователей в основную базу, но им нужно поработать с данными. Есть другая конфигурация, например, не содержащая ПДн, куда доступ предоставлен бОльшему количеству пользователей, и в ней получаем данные из основной БД через сервис.
13. logos 182 03.09.19 16:53 Сейчас в теме
А зачем в этой ситуации вообще SOAP? Зачитывание wsdl, сериализация в ХЗ, обратная десериализация. Про json уже написали, так давайте последовательно советовать и http-сервис. Передаем в одном из полей метод, в другом данные. Сериализация/десериализация отлично делается методами ПрочитатьJSON, ЗаписатьJSON. И никакого XDTO вообще не нужно.
ybatiaev; sevushka; +2 Ответить
17. Ndochp 102 04.09.19 09:16 Сейчас в теме
(13)ХДТО нужен исключительно для автоматической проверки входящих данный на соответствие формату. К джейсону такое универсально на коленке не прикрутить.
user5300; +1 Ответить
18. logos 182 04.09.19 09:18 Сейчас в теме
(17) Какая в данном сценарии может быть проверка? Описывается получение произвольных данных запросом (базовых типов). Считаю, что использование SOAP имеет смысл только при работе с "ненадежным" клиентом, от которого можно получить "непредсказуемый" input. А когда пишешь свои сервисы - это избыточная перестраховка, сильно усложняющая разработку.
ybatiaev; Fox-trot; +2 Ответить
19. Ndochp 102 04.09.19 09:36 Сейчас в теме
(18) У меня 8 видов баз под контролем. И они периодически обновляются. Вот тебе и источник непредсказуемого инпута.
Ты же не будешь правила писать для превращения документа в джейсон, правильно? ты сделаешь платформенную сериализацию.
А на стороне приёмника уже сделаешь какой-то алгоритм разбора, если базы не совпадают.

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

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

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

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

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

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

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

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

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

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

Возврат новый ХранилищеДанных(ТабличнаяЧасть,Новый СжатиеДанных(9));
35. frkbvfnjh 579 25.03.20 08:09 Сейчас в теме
34. user5300 473 25.03.20 08:06 Сейчас в теме
(32) У каждого свои подходы для решения задач, это всего лишь пример того как можно использовать веб сервисы )
36. frkbvfnjh 579 25.03.20 08:10 Сейчас в теме
(34) да согласен, но боль от использования веб-сервисов не утихнет никогда
38. Sergik_D 17 25.03.20 18:04 Сейчас в теме
(32) У меня 1с обменивается с приложением на Android через Web-сервисы. Думал переходить на HTTP, но не нашел информации о преимуществах. Если есть такая информация, буду благодарен за ссылки. Вот это прям моё: "При плохом интернете или большом объеме данных web-сервис тупо умирает, часто вызывая блокировки"
37. VPanin56 78 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 78 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 78 07.04.20 16:12 Сейчас в теме
Или вот кусок кода по формированию параметров для передачи

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

Вакансии

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

Специалист 1 категории (Программист 1С ФЗД)
Фрязино
зарплата от 110 000 руб.
Полный день

Специалист 1 категории (Программист 1С)
Фрязино
зарплата от 110 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Специалист линии консультаций 1С
Санкт-Петербург
Полный день