Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 След.
Распределить на себестоимость товаров расходы, возникающие при продаже
 

Разве расходы, возникающие при продаже, включают в себестоимость? Это разве не коммерческие расходы?

Обработка выбора в ТаблицеФормы - открыть элемент справочника
 

Исходя из новой информации, сложность ваших клиент-серверные вызовов не меняется. Можно передавать «без контекста» и два параметра:

&НаСервереБезКонтекста

Функция ВернутьКонтрагентаПоИНН(ИНН, КПП)

              …

КонецФункции

А если количество параметров будет со временем изменяться, то лучше перейти на «Структуру», в параметрах вызова серверной функции указывать Структуру, а не конкретный набор переменных:

&НаСервереБезКонтекста

&НаКлиенте

Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

              …

              ПараметрыВызова = Новый Структура;

              ПараметрыВызова.Вставить(«ИНН», …);

              ПараметрыВызова.Вставить(«КПП», …);

              …

              ПараметрыВызова.Вставить(другие параметры, …);

              КонтрагентСсылка = ВернутьКонтрагентаПоИНН(ПараметрыВызова);

              …

КонецПроцедуры

&НаСервереБезКонтекста

Функция ВернутьКонтрагентаПоИНН(ПараметрыВызова)

              …

КонецФункции

При добавлении новых параметров такой код будет проще модифицировать.

Ну, и вместо метода НайтиПоРеквизиту() вам уже запрос писать потребуется на стороне сервера.

С точки зрения оптимизации производительности написание запросов предпочтительнее даже при поиске по одному реквизиту. Т.е. запрос

              Запрос = Новый Запрос;

              Запрос.УстановитьПараметр("ИНН", ИНН);

              Запрос.Текст =

              "ВЫБРАТЬ

              |             Контрагенты.Ссылка КАК Ссылка

              |ИЗ

              |             Справочник.Контрагенты КАК Контрагенты

              |ГДЕ

              |             Контрагенты.ИНН = &ИНН";

В общем случае будет работать быстрее, чем «ВернутьКонтрагентаПоИНН(ИНН)», т.к. при использовании «Запроса» СУБД выдаст серверу 1С только ссылку контрагента, а при отработке метода «ВернутьКонтрагентаПоИНН» - ссылку и значение всех реквизитов контрагента.

Обработка выбора в ТаблицеФормы - открыть элемент справочника
 

В целом, да. Но в данном конкретном случае, с точки зрения оптимизация клиент-серверных отношений, лучше использовать «&НаСервереБезКонтекста». Для получения ссылки вам не нужен контекст всей формы, а достаточно передавать конкретный параметр «ИНН». Не понятно, какая у вас форма, но если она сложная, имеет табличные части с тысячами строк, то гонять с клиента на сервер всю ее целиком будет нецелесообразно.

Обработка выбора в ТаблицеФормы - открыть элемент справочника
 

Ну, да. Только в этому случае «клиентом» уже не отделаться, сопоставление придется делать на сервере.

Обработка выбора в ТаблицеФормы - открыть элемент справочника
 

Достаточно «показать» выбранное значение. В обработчике «Обработка выбор» одним из параметров является ВыбранноеЗначение – ссылка на выбранный элемент справочника, его непосредственно можно показать:

&НаКлиенте

              ПоказатьЗначение(,ВыбранноеЗначение);

КонецПроцедуры

Откроется Форма элемента по умолчанию.

Если нужна какая-то другая форма, то нужно открыть эту специальную форму с непосредственным указанием ее имени и передачей ссылки на открываемый элемент через параметр «Ключ»:

&НаКлиенте

Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

              ПараметрыФормы = Новый Структура;

              ПараметрыФормы.Вставить("Ключ", ВыбранноеЗначение);

              ИмяФормы = "Справочник.Контрагенты.Форма.ФормаЭлемента";

              ОткрытьФорму(ИмяФормы, ПараметрыФормы, ЭтотОбъект, Новый УникальныйИдентификатор());              

КонецПроцедуры

Можно ли фоном выполнять процедуру модуля внешней обработки
 

В состав «ПараметрыЗадания» (из п.4.2) добавить структуру с именем

·            «ПараметрыВыполнения» - в этой структуре перечислить параметры, которые необходимы целевому методу

Пример вызова экспортной процедуры внешней обработки, который должен быть размещен в обработчике регламентного задания:

              ИмяОбработки = "Пример внешней обработки в фоне";

              ПараметрыЗадания = Новый Структура();

              ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка", Истина);

              ПараметрыЗадания.Вставить("ИмяОбработки", Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяОбработки));

              ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка",(Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяОбработки)));

              ПараметрыЗадания.Вставить("ИмяМетода", "ПримерМетодаОбработкаВФоне");

              ПараметрыМетода = Новый Структура();

              ПараметрыМетода.Вставить("ПримерБулевогоПараметраМетода_ЗаданиеСтартануло", Ложь);

              ПараметрыЗадания.Вставить("ПараметрыВыполнения", ПараметрыМетода);

              АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено);

              ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки(ПараметрыЗадания, АдресХранилища);

              ЗаданиеСтартануло = ПараметрыМетода.ПримерБулевогоПараметраМетода_ЗаданиеСтартануло;

А простейшая экспортная процедура внешней обработки выгляди следующим образом:

Процедура ПримерМетодаОбработкаВФоне(ПараметрыМетода, АдресХранилища) Экспорт

              ПараметрыМетода.ПримерБулевогоПараметраМетода_ЗаданиеСтартануло = Истина;

КонецПроцедуры
Можно ли фоном выполнять процедуру модуля внешней обработки
 

Тогда достаточно вызвать требуемый метод обработки из обработчика регламентного задания. Обработка должна быть зарегистрирована в механизме «внешние отчеты и обработки».

Простейшую схему такого алгоритм можно описать следующим образом:

1.      Создать внешнюю обработку с учетом требований штатного механизма БСП «Дополнительные отчеты и обработки»

1.1.   Модуль обработки должен содержать экспортную процедуру СведенияОВнешнейОбработке()

1.2.   Обработка должна быть зарегистрирована в справочнике «Дополнительные отчеты и обработки;  здесь важно «Наименовании», с которым она будет зарегистрирована – по нему в дальнейшем будет строиться вызов ее из регламентного задания

2.      В модуль обработки поместить целевую процедуру, которую требуется выполнять в фоне

3.      В модуль обработки поместить целевую  экспортную процедуру, которую требуется выполнять в фоне (например, «ПримерМетодаОбработкаВФоне(ПараметрыМетода, АдресХранилища)»)

3.1.   Она будет вызваться регламентным заданием (п.4)

3.2.   Перечень параметров этой процедуры должен быть согласован с параметрами ее вызова (п.4)

3.3.   В теле этой процедуры построить фоновый вызов (через механизм БСП «ДлительныеОперации») целевой процедуры (п. 2)

4.      В обработчике регламентного задания построить вызов экспортной процедуры (п.3)

4.1.   Для выполнения целевой процедуры в фоне используется механизм БСП «ДлительныеОперации»

ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки(ПараметрыЗадания, АдресХранилища);

4.2.   В составе «ПараметрыЗадания» обязательно должны быть переданы следующие параметры:

·            «ЭтоВнешняяОбработка» = Истина

·            «ИмяОбработки» = в нашем примере «Пример внешней обработки в фоне» (см. п.1.2.)

o       Или непосредственно ссылка на нее в параметре «ДополнительнаяОбработкаСсылка»

ДополнительнаяОбработкаСсылка  = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяОбработки)

·            «ИмяМетода» = имя целевой экспортной процедуры в модуле обработки (см. п.3)

Изменено: BIN - 11.02.2024 18:15:26
Можно ли фоном выполнять процедуру модуля внешней обработки
 

Есть несколько способов.  Например, это зависит от того, что нужно выполнить:

·        Отправить в фон интерактивно запускаемую команду формы или же просто выполнить в фоне экспортную процедуру  модуль обработки, вызвав ее из какого-то места конфигурации.

·        Нужно ли контролировать процесс завершения фонового задания или не нужно; нужно получать результат работы обработки и как-то обрабатывать дальше или нет.

Можно ли фоном выполнять процедуру модуля внешней обработки
 
Да, платформа 1С поддерживает выполнение в фоне процедур модуля внешней обработки
Функционирование асинхронной функции
 
Цитата
Екатерина написал:
Почему пишет «Не найден экспортируемый метод: Ответ_ВыбратьФайл», хотя в модуле эта процедура есть?

Проверьте, что эта процедура выполняется на клиенте, и что она экспортная. Выглядеть должно примерно так:

&НаКлиенте

Процедура Ответ_ВыбратьФайл(Ответ, ДопПараметры) Экспорт

Страницы: Пред. 1 2 3 След.