Имя: Пароль:
1C
1С v8
КД и параметры алгоритма
,
0 Wobland
 
29.10.12
16:41
продолжаю открывать для себя КД.
сделал себе алгоритм СвернутьПоНоменклатуре, при выгрузке некоторых документов он вызывается, ТЧ сворачивается, всё хорошо. а при выгрузке некоторых других документов нужен чуть другой текст запроса. что придумал: перед обработкой засовываю в Параметры флаг НужнаСтавкаНДС, а в алгоритме достаю этот флаг из Параметров и меняю текст запроса.
собссно, вопрос: а как поступают белые люди в подобных ситуациях?
1 fisher
 
29.10.12
17:10
Примерно так и делают.
Если нужны входящие параметры для алгоритмов (аналог функций), то обычно в параметры добавляется отдельный параметр для этих целей типа структура ("ПараметрыАлгоритмов", например). Через который передача и идёт.
Динамический текст запроса - тема отдельная. По возможности стараются делать так, чтобы текст базового запроса таки можно было открывать конструктором.
2 pessok
 
29.10.12
17:13
а может лучше не в структуру параметров пихать, а иметь некий глобальный обработчик, который будет проверять реквизит, а-ля. ЕстьРеквизитВТабличнойЧасти(СтрокаТабличнойЧасти)?

З.Ы. Сам не пробовал, ответ по наитию
3 Wobland
 
29.10.12
17:13
>то обычно в параметры добавляется отдельный параметр
это сейчас о чём? есть же "предопределённая" структура Параметры, её разве мало?
про запрос согласен, да. но у меня на входе семёрка
4 Wobland
 
29.10.12
17:14
(2) что приведёт к дополнительным вызовам и увеличению времени работы. при нескольких сотнях документов только поступлений в день веду борьбу за миллисекунды ;)
5 pessok
 
29.10.12
17:14
(4) ну если вопрос стоит так, то (0) самый верный вариант
6 fisher
 
29.10.12
17:33
(3) Ну и нафига корень этой структуры засорять всякой фигней? Просто вопрос удобства. Работаешь не через Параметры, а через Параметры.ПараметрыАлгоритмов. Пока один такой параметр - вроде без разницы. А завтра их может быть сотня.
7 Wobland
 
29.10.12
17:34
(6) ладно. а что живёт в Параметрах тогда? могу соврать, точно не помню, но вроде там ничего не было в перед обработкой
8 pessok
 
29.10.12
17:37
параметры - это произвольная структура, которую ты сам заполняешь вроде
9 Wobland
 
29.10.12
17:39
(8) вот я такое же представление об этом получил. но fisher придерживается другого мнения, мне непонятного
10 fisher
 
29.10.12
17:44
Я не понимаю, почему мы друг друга не понимаем. Идея-то примитивная и лежащая на поверхности - путем создания вложенной в "Параметры" структуры, выделить параметры алгоритмов в отдельное пространство имен.
Задолбали :) Юзайте как хотите.
11 acsent
 
29.10.12
17:45
НужнаСтавкаНДС = Истина;
Выполнить(Алгоритм);

Хотя так не совсем по методике 1с
12 fisher
 
29.10.12
17:47
(11) Он из 7.7 конвертит.
13 Wobland
 
29.10.12
17:48
(10) Параметры - Структура, в которой хранятся переменные доступные во всех обработчиках

зачем там ещё одна вложенная структура?
14 pessok
 
29.10.12
17:49
(13) опередил! я тоже хотел спросить зачем одну структуру помещаьт в другую в данном разрезе. или чтобы просто было наглядно?
15 fisher
 
29.10.12
18:10
Чтобы избежать потенциальных конфликтов пространств имен.
Эти ошибки очень неприятные и трудно локализуемые.
Зря, что ли, 1С пыталась отучить от глобальных переменных?
Забудешь ты рано или поздно про свои параметры алгоритмов, которые там и сям программно суешь в "Параметры". И создашь одноименный параметр для совершенно других целей. И огребешь.
А так - параметры алгоритмов изначально изолированы от всех остальных параметров.
Считай, что вместо глобального модуля ты создал специальный общий модуль. Надеюсь, что аналогия ясна. Я и так уже сказал в пять раз больше, чем собирался :)
16 GenV
 
29.10.12
18:17
(0) Стараюсь динамически текст запроса не менять - обхожусь передачей параметров в запрос или несколькими запросами.
Параметры добавляю в подструктуру с именем "Параметры_ИмяАлгоритма", если параметров много.
17 Wobland
 
29.10.12
18:25
(15) от теперь доходит ;)

(16) "Параметры_ИмяАлгоритма" - отличная иллюстрация

спасибо
18 Йохохо
 
29.10.12
18:26
(0) можно чуть изящнее
Вызов ЗаполнитьТЗСотрудникаОрганизации(Исх, Вх, Ист, Пр)
и в коде:
Сотрудник            = ИсходящиеДанные;
ДатаСобытия            = ВходящиеДанные;
АвторскийДоговор    = Источник;
ДоговорПодряда        = Приемник;
19 Wobland
 
29.10.12
18:30
(18) вижу параметры в скобках.. это типа "предопределённые"? в хелпе вроде как обо этом не говорится
20 Йохохо
 
29.10.12
18:35
да, предопределенные, в коде обращение по обычному для конвертации порядку
21 Йохохо
 
29.10.12
18:35
ЗаполнитьТЗСотрудникаОрганизации(Сотрудники.ТекущийЭлемент(), РабочаяДата());
22 Wobland
 
29.10.12
18:39
не, не вижу в хелпе. надо в букварях порыться. и на том спсибо
23 Йохохо
 
29.10.12
18:46
помойму этого нет в хелпах, алгоритмы в 7.7 выгружаются с такой декларацией
Функция ЗаполнитьТЗСотрудникаОрганизации(
           ИсходящиеДанные = "", ВходящиеДанные = "", Источник = "", Приемник = "", ТипПриемника = "", Значение = "", Выражение = "",
           Пусто = "", ВыборкаДанных = "", Объект = "", КоллекцияОбъектов = "", ОбъектКоллекции = "", ИмяПКО = "", ИмяПКОВидСубконто = "",
           НомерПКО = "", НомерПКС = "", Правило = "", КлючВыгружаемыхДанных = "", НеЗапоминатьВыгруженные = "", НеЗамещатьОбъектПриЗагрузке = "",
           ВсеОбъектыВыгружены = "", ТолькоПолучитьУзелСсылки = "", РежимЗаписи = "", РежимПроведения = "", СтандартнаяОбработка = "",
           НеЗамещать = "", НеОчищать = "", УзелСсылки = "", УзелКоллекцииОбъектов = "", УзелОбъектаКоллекции = "", УзелСвойства = "",
           ВидСубконто = "", Субконто = "", Отказ = "") Далее
24 Wobland
 
30.10.12
06:06
(23) ё-моё, сколько букв
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.