Подстановка соглашения 1С УТ в заказ клиента по произвольному алгоритму Битрикс

1. LazyRedPanda 28.02.24 15:07 Сейчас в теме
Добрый день
В При выполнении кода реквизит "Соглашение" в заказе клиента остается пустым.
Помогите пожалуйста, что не так в коде.

Требуется
При заказе от Физиков подставлять "Розничная для интернет магазина",
а елли Юр. лица "Типовое соглашение для оптовиков"

Стандартные алгоритмы не могут это, насколько я понимаю. Может кто подскажет?


СОГЛОПТ = новый запрос;
СОГЛОПТ.Текст = "ВЫБРАТЬ
|	СоглашенияСКлиентами.Ссылка КАК Ссылка
| ИЗ
|	Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами
| ГДЕ 
|	СоглашенияСКлиентами.Наименование ПОДОБНО &СтрокаПоиска";
СОГЛОПТ.УстановитьПараметр("СтрокаПоиска", "Типовое соглашение для оптовиков");


СОГЛРОЗН = новый запрос;
СОГЛРОЗН.Текст = "ВЫБРАТЬ
|	СоглашенияСКлиентами.Ссылка КАК Ссылка
| ИЗ
|	Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами
| ГДЕ 
|	СоглашенияСКлиентами.Наименование ПОДОБНО &СтрокаПоиска";
СОГЛРОЗН.УстановитьПараметр("СтрокаПоиска", "Розничная для интернет магазина");





Если [Документ].Контрагент.ИНН <> "Неопределено" Тогда
 [Результат]  = СОГЛОПТ.Выполнить();
Иначе
 [Результат]  = СОГЛРОЗН.Выполнить();
КонецЕсли;
Показать
Найденные решения
4. unknown181538 154 28.02.24 15:57 Сейчас в теме
(3) [Результат] = Выборка.Ссылка;
Результатом должна быть ссылка, а у вас - результат запроса.
Т.к. , возможно, что вы и не программист вовсе, то я подскажу, как я предполагаю.

Если ЗначениеЗаполнено([Документ].Контрагент.ИНН)Тогда
 Выборка = СОГЛОПТ.Выполнить().Выбрать();
Если выборка.Следующий() Тогда
[Результат]  = Выборка.Ссылка;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. unknown181538 154 28.02.24 15:46 Сейчас в теме
А как должно быть - наименование в точности равно "Типовое соглашение для оптовиков" ? (вообще в этом случае ПОДОБНО не нужно, можно просто = использовать) И вам сложно будет подсказать, т.к. вероятно в базе есть какой-то шаблон, как этот код должен выглядеть. Действительно ли достаточно результат запроса получить?

Если [Документ].Контрагент.ИНН <> "Неопределено" Тогда вот это явно не правильно ИНН не может быть равен "Неопределено". Если речь о заполненности - можно использовать ЗначениеЗаполнено()
3. LazyRedPanda 28.02.24 15:54 Сейчас в теме
(2)
//Параметр на  создаваемый/редактируемый документ происходит через параметр [Документ]
// Параметр на создаваемую новую строку документа [НоваяСтрока] Если ее нет(шапка заполняется), то Неопределено
// Глобальные настройки в параметре [СтруктураНастроек] 
//
// Параметр, возвращающий результат [Результат]
// 
// Параметр на данные документа  ИЗ XML [ДокументXML]
// Параметр, на данные строки товаров Из XML [СтрокаXML]. Если ее нет, то Неопределено

Соответственно если нет XML такого поля, то передаёт "Неопределено" - как я понял.
Как я понимаю, нужна ссылка на соглашение. 
Проблема в том, что особо документации нет.

Вот пример нашел.
Для каждого стр из [ДокументXML].ЗначенияРеквизитов Цикл
Если стр.Наименование = "Код контрагента" Тогда
Если значениеЗаполнено(стр.Значение) Тогда	
//Убираем лидирующие нули
	Номер = стр.Значение;
	Пока Лев(Номер,1)="0" Цикл
		Номер = Прав(Номер,СтрДлина(Номер)-1);
	КонецЦикла;
	//запросом получаем всех партнеров с похожим кодом
	Запрос = новый запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	Партнеры.Ссылка КАК Ссылка,
	|	Партнеры.Код КАК Код
	|ИЗ
	|	Справочник.Партнеры КАК Партнеры
	|ГДЕ
	|	Партнеры.Код ПОДОБНО &Код";
	Запрос.УстановитьПараметр("Код","%"+Номер);
	Выборка = Запрос.Выполнить().Выбрать();
	Пока выборка.Следующий() Цикл
		//теперь убираем лидирующие нули у полученного кода
		НомерКода = выборка.Код;
		Пока Лев(НомерКода,1)="0" Цикл
			НомерКода = Прав(НомерКода,СтрДлина(НомерКода)-1);
		КонецЦикла;
		//Если оба кода без нулей полностью идентичны, значит это нужный нам партнер
		Если НомерКода = Номер Тогда
			[Результат] = Выборка.Ссылка;
			Прервать;
		КонецЕсли;
	КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Показать
4. unknown181538 154 28.02.24 15:57 Сейчас в теме
(3) [Результат] = Выборка.Ссылка;
Результатом должна быть ссылка, а у вас - результат запроса.
Т.к. , возможно, что вы и не программист вовсе, то я подскажу, как я предполагаю.

Если ЗначениеЗаполнено([Документ].Контрагент.ИНН)Тогда
 Выборка = СОГЛОПТ.Выполнить().Выбрать();
Если выборка.Следующий() Тогда
[Результат]  = Выборка.Ссылка;
5. LazyRedPanda 28.02.24 16:06 Сейчас в теме
(4) Спасибо тебе добрый человек. Всё получилось.

Я не программист 1С. Первый раз вижу код 1С )
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот