|
Как связать СЗ и Справочник в 8.1? | ☑ | ||
---|---|---|---|---|
0
wishma
27.03.13
✎
06:26
|
Доброго всем утра!
Подскажите начинающему - как связать СписокЗначений и записи Справочники.СтатьиРасходов.Код ? Сутки уже придумать не могу... На форме СЗ к ТипуЗначения - привязывал, но в лучшем случае получается выбрать только Справочники.СтатьиРасходов как ещё это можно сделать? нужно чтобы в форме при нажатии кнопки выпадал СЗ с позициями из справочника по Коду. Заранее всем спасибо. |
|||
1
Wobland
27.03.13
✎
06:27
|
заранее заполнить свой СЗ нужными строковыми данными подойдёт?
|
|||
2
wishma
27.03.13
✎
06:53
|
ещё как подойдёт!
Вы бы сразу написали, как его заполнить именно записями из Справочника? в первом сообщении ошибся - там Справочники.СтатьиРасходов.КодРегистраНУ кажется получается, а не просто Код. Код - это то чем надо заполнить СЗ. |
|||
3
Wobland
27.03.13
✎
07:02
|
"выбрать код из твой справочник", СписокОрганизаций=Новый СписокЗначений;
СписокОрганизаций.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0)); |
|||
4
wishma
27.03.13
✎
07:08
|
а если нужны только конкретные позиции? 10 штук допустим,
вида: 00142 42395 12845 ? |
|||
5
Wobland
27.03.13
✎
07:09
|
(4) а вот если б у тебя был некий список со всеми методами и свойствами, тебе бы было легче?
|
|||
6
Wobland
27.03.13
✎
07:10
|
(5) методами и свойствами СЗ
|
|||
7
wishma
27.03.13
✎
07:21
|
(5) да конечно , было бы легче
предлагаете выгрузить весь справочник в СЗ, а потом уже в нём выбрать нужные мне значения? |
|||
8
Wobland
27.03.13
✎
07:24
|
(7) я предлагаю приобрести СП. до конца марта акция - скидка 20%
|
|||
9
wishma
27.03.13
✎
08:19
|
(8) спасибо за предложение, но СП есть и встроенный, а отдельно книжку ещё на курсах купил
я не вижу смысла наизусть знать все функции и их методы, особенно когда только начинаешь конфигурировать, всё приходит с опытом? я так понял что Вы намекаете на создание запроса, который будет доставать из справочников нужную инфу и будет вставлять её в СЗ, сейчас попробую, спасибо за подсказку) |
|||
10
1Сергей
27.03.13
✎
08:21
|
(9) можно и без запроса. Почитай уже СП, всё там написано
|
|||
11
cw014
27.03.13
✎
08:22
|
(9) я не вижу смысла наизусть знать все функции и их методы, особенно когда в это время можно потусить на мисте
|
|||
12
Starhan
27.03.13
✎
08:44
|
(9) "я не вижу смысла наизусть знать все функции и их методы"
Тебя никто и не просит зубрить. СП тебе предлагают почитать что бы предстовлять возможности 1С. |
|||
13
wishma
27.03.13
✎
09:29
|
ну что вы все накинулись с этим СП - я им и так регулярно пользуюсь, по мере необходимости
подсказали бы лучше как эту задачку решить в свою очередь обещаю не плодить новых тем без изучения СП от корки до корки срочно надо отчёт переделать, а уже сутки ничё не клеится :-( |
|||
14
Maxus43
27.03.13
✎
09:32
|
(13) тебе намекают что необходимость вроде настала, и открыв СП на описаниии Списка Значений - ты увидишь то, что тебе надо. Или нет?
|
|||
15
Wobland
27.03.13
✎
09:35
|
я вот не знаю посимвольно, что нужно писать для (4), а в СП лезть не хочу. пускай автор лезет
|
|||
16
Maxus43
27.03.13
✎
09:40
|
Давай так, опиши ещё раз задачу другими словами. Я нифига не поняло что надо конкретно
Заполнить список - в цикле Список.Добавить(траляля); - не хватает? что ещё? |
|||
17
samozvanec
27.03.13
✎
09:40
|
(13) открывай СП, ищи метод Добавить() у СЗ. читать до просветления.
|
|||
18
wishma
27.03.13
✎
09:40
|
(14) (15)
Вопрос со СпискомЗначений решён, понял что Вы имели ввиду, всё отлично выбирается по нужным мне значениям Попробую обобщить вопрос Есть Справочники.СтатьиЗатрат и у них есть реквизит Код Есть огромный отчёт, в котором выводятся СтатьиЗатрат в т.ч. который заполняется по условиям отбора ВыбСтатьяЗатрат = ПолучитьЗначениеОтбора("Статья Затрат"); Если я подставляю туда свой СЗ с Кодами (или даже наименованиями СтатьиЗатрат) - отчёт получается пустым Что делаю не так? |
|||
19
wishma
27.03.13
✎
09:41
|
(17) спасибо, но я бы наверно не создал СЗ без этого метода?
|
|||
20
Wobland
27.03.13
✎
09:41
|
(18) а ты подставляй туда ссылки на элементы
|
|||
21
butterbean
27.03.13
✎
09:41
|
(18) криво подставляешь свой СЗ
|
|||
22
Wobland
27.03.13
✎
09:41
|
(19) легко: Новый СЗ;
|
|||
23
samozvanec
27.03.13
✎
09:41
|
(19) мало читал значит. еще раз прочитай. можно даже только в части Синтаксис, где параметры
|
|||
24
samozvanec
27.03.13
✎
09:42
|
(22) +1. колонку же загружал-выгружал)
|
|||
25
samozvanec
27.03.13
✎
09:44
|
+(23) тут, кстати, двояко может получиться. чтоб тебя не запутывать - тебе для отбора что нужно? коды или ссылки?
|
|||
26
wishma
27.03.13
✎
09:55
|
(20) (21) пытаюсь это победить, пока не знаю как, читаю СП (22) хорошая шутка) но я заметил тут любят тыкнуть в элементарные вещи, не разбираясь в сути проблемы
(25) пытаюсь с этим определится... |
|||
27
wishma
27.03.13
✎
09:59
|
(25) я правильно понимаю что этот кусок кода и есть первоначальные условия отбора СтатьиЗатрат?
Функция СформироватьУсловияОтбора() // тут много всего не по теме // далее строка про статьи затрат Если ЗначениеЗаполнено(ВыбСтатьяЗатрат) Тогда стр = стр + ИМеждуУсловиями(стр) + "Расходы.СтатьяЗатрат В ИЕРАРХИИ (&ВыбСтатьяЗатрат)"; КонецЕсли; // и ещё дальше куча других условий, НЕ связанных со статьёй затрат Возврат стр; КонецФункции |
|||
28
wishma
27.03.13
✎
10:00
|
хотя нет, Расходы.СтатьяЗатрат - это ВТ, в реале её не существует...
|
|||
29
wishma
27.03.13
✎
10:01
|
в СП не написано - как проверить какой тип данных нужен для отбора?
|
|||
30
Wobland
27.03.13
✎
10:12
|
(28) как-то не представляю себе имя ВТ, содержащее точку
|
|||
31
Wobland
27.03.13
✎
10:12
|
(29) нет
|
|||
32
Wobland
27.03.13
✎
10:14
|
"В ИЕРАРХИИ" говорит тебе о том, что сравнение происходит со ссылкой или коллекцией. насчёт последнего твёрдой уверенности нет
|
|||
33
Wobland
27.03.13
✎
10:17
|
а если понять, что передаётся в параметр запроса ВыбСтатьяЗатрат, то можно сэкономить пару-тройку вопросов ;)
|
|||
34
samozvanec
27.03.13
✎
10:45
|
(27) ссылки там. отбор на ссылку. в параметр надо загнать ссылку/коллекцию ссылок. в этом случае кури метод Добавить() у СЗ и первые два его параметра.
вот если б было "Расходы.СтатьяЗатрат.Код В (&ВыбКодыСтатейЗатрат)", тогда бы тебе подошел имеющийся список |
|||
35
wishma
27.03.13
✎
12:10
|
Wobland, спасибо, навели на мысль ;-)
(34) список подошёл, теперь другая проблемка появилась - в списке СЛИШКОМ много значений, есть ли в 1с какие то регулярные выражения, которые можно использовать безусловно? Допустим, есть значения в СЗ = 100, 200, 300... хочется чтобы при написании 10* использовались значения от 100 до 109, реально ли это сделать? или каким то другим образом |
|||
36
wishma
27.03.13
✎
13:17
|
Кто - нибудь, подскажите пожалуйста? Последний штрих остался...)
Не хочется увеличивать СЗ ровно в 10 раз... |
|||
37
Wobland
27.03.13
✎
13:20
|
(35) только циклом
|
|||
38
wishma
27.03.13
✎
13:23
|
(37) я Вам уже кажется должен за подсказки) спасибо, перерыл весь инет - ничего не нашёл, буду думать как циклом обработать всё
|
|||
39
Wobland
27.03.13
✎
13:28
|
для й=0 по 9 цикл
добавить(100+й) |
|||
40
hhhh
27.03.13
✎
13:35
|
(35)
Расходы.СтатьяЗатрат.Код В (ВЫБРАТЬ Код ИЗ Справочник.СтатьиЗатрат ГДЕ Подстрока(Код, 1, 2) = "10") |
|||
41
wishma
27.03.13
✎
13:44
|
(40) Пишу это:
Если ЗначениеЗаполнено(ВыбСтатьяЗатрат) Тогда стр = стр + ИМеждуУсловиями(стр) + "Расходы.СтатьяЗатрат.Код В (ВЫБРАТЬ Код ИЗ &ВыбСтатьяЗатрат ГДЕ Подстрока(Код, 1, 2) = "10"); КонецЕсли; Получаю это: стр = стр + ИМеждуУсловиями(стр) + "Расходы.СтатьяЗатрат.Код В (ВЫБРАТЬ Код ИЗ &ВыбСтатьяЗатрат ГДЕ Подстрока(Код, 1, 2) = "<<?>>10")"; |
|||
42
hhhh
27.03.13
✎
13:44
|
(41) ИЗ Справочник.СтатьиЗатрат
|
|||
43
wishma
27.03.13
✎
13:45
|
Неопознанный оператор
|
|||
44
Wobland
27.03.13
✎
13:46
|
кавычку дублировать принято, чтоб оно знало, что это именно кавычка
|
|||
45
wishma
27.03.13
✎
13:47
|
Если ЗначениеЗаполнено(ВыбСтатьяЗатрат) Тогда
стр = стр + ИМеждуУсловиями(стр) + "Расходы.СтатьяЗатрат.Код В (ВЫБРАТЬ Код ИЗ Справочник.СтатьиЗатрат ГДЕ Подстрока(Код, 1, 2) = "10")"; КонецЕсли; // в ответ {Форма.Форма(523,135)}: Неопознанный оператор стр = стр + ИМеждуУсловиями(стр) + "Расходы.СтатьяЗатрат.Код В (ВЫБРАТЬ Код ИЗ Справочники.СтатьиЗатрат ГДЕ Подстрока(Код, 1, 2) = "<<?>>10")"; |
|||
46
Wobland
27.03.13
✎
13:47
|
(45)
кавычку дублировать принято, чтоб оно знало, что это именно кавычка |
|||
47
wishma
27.03.13
✎
13:52
|
(46) продублировал, синтаксис ОК
но ничего не изменяется, если берём ИЗ Справочники.СтатьиЗатрат а если ИЗ &ВыбСтатьяЗатрат то ругается вот так вот {Форма.Форма(898)}: Ошибка при вызове метода контекста (Выполнить): Содержимое объекта данных может быть выбрано только во временную таблицу РезультатЗапроса = Запрос.Выполнить(); |
|||
48
Wobland
27.03.13
✎
13:54
|
(47) сказать, что содержимое объекта данных может быть выбрано только во временную таблицу, или не надо?
|
|||
49
Wobland
27.03.13
✎
13:55
|
ТЗ=Запрос.Выполнить().Выгрузить();
Запрос.Текст= "ВЫБРАТЬ | ТЗ.Пометка |ПОМЕСТИТЬ ТЗ |ИЗ | &ТЗ КАК ТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТЗ.Пометка КАК Пометка, |ИЗ | ТЗ КАК ТЗ Запрос.УстановитьПараметр("ТЗ", ТЗ); |
|||
50
askharlov
27.03.13
✎
13:56
|
Wobland написал: "задублируй кавычку". Т.е., пиши так (10 в войных кавычках):
стр = стр + ИМеждуУсловиями(стр) + "Расходы.СтатьяЗатрат.Код В (ВЫБРАТЬ Код ИЗ &ВыбСтатьяЗатрат ГДЕ Подстрока(Код, 1, 2) = ""10""); |
|||
51
Wobland
27.03.13
✎
13:56
|
//теряю понимание логики действий автора совсем
|
|||
52
wishma
27.03.13
✎
14:03
|
(48) да уже догадался, только от этого легче не становится...
(49) я так понимаю это опять намёк на использование ТЗ?)) (50) догадался сам, выше уже отписал результат (51) логика элементарна - всё было отлично и работало по такому сценарию Если ЗначениеЗаполнено(ВыбСтатьяЗатрат) Тогда стр = стр + ИМеждуУсловиями(стр) + Расходы.СтатьяЗатрат.Код В (&ВыбСтатьяЗатрат)"; КонецЕсли; // в &ВыбСтатьяЗатрат находятся значения типа "100", "200", "300", но нужно чтобы цеплялись все группы цифр (100-109, 200-209) в линуксе, или где либо ещё, это бы выглядело как "10*","20*","30*". цифры у меня другие, сотни пишу для примера |
|||
53
Wobland
27.03.13
✎
14:08
|
(52) это пример того, как я выбираю что-то из передаваемого параметром
|
|||
54
wishma
28.03.13
✎
09:28
|
Обьясните пожалуйста, почему при таком выражении
// нет выборки по условию СОДЕРЖИТ Если ЗначениеЗаполнено(ВыбСтатьяЗатрат) Тогда стр = стр + ИМеждуУсловиями(стр) + "Расходы.СтатьяЗатрат.Код СОДЕРЖИТ (&ВыбСтатьяЗатрат)"; КонецЕсли; // а при таком выражении нет выборки по подстроке Если ЗначениеЗаполнено(ВыбСтатьяЗатрат) Тогда стр = стр + ИМеждуУсловиями(стр) + "Расходы.СтатьяЗатрат.Код В (ВЫБРАТЬ Код ИЗ &ВыбСтатьяЗатрат Подстрока(Код, 1, 2) = ""10"")"; КонецЕсли; Заранее спасибо! |
|||
55
wishma
28.03.13
✎
09:39
|
ну что, никто не подскажет?
|
|||
56
vicof
28.03.13
✎
09:49
|
(55) открой для себя отладчик
|
|||
57
wishma
28.03.13
✎
12:04
|
(56) открыл отладчик) значения получаются, всё ок
но Подстрока всё равно не хочет работать, наверно чтото не то делаю, но по сути она должна решать задачу, описанную ниже: Цель задачи - при обращению к СпискуЗначений брать не только то значение, которое там есть, но и на разряд больше то есть имеется значение = 03010 нужно брать 03010Х где Х = от 0 до 9 Как это сделать? |
|||
58
hhhh
28.03.13
✎
12:16
|
наверно потому что нет такого синтаксиса
ИЗ &ВыбСтатьяЗатрат наверно сначала делай ВЫБРАТЬ Код ИЗ Справочник.СтатьиЗатрат ГДЕ Подстрока(Код, 1, 2) = "10" результат этого запроса помещай в список &ВыбСтатьяЗатрат а потом уже Расходы.СтатьяЗатрат В (&ВыбСтатьяЗатрат) |
|||
59
wishma
28.03.13
✎
12:30
|
(58) Я наверно неправильно выражаюсь, попробую подробно описать задачу:
Дело в том, что мне нужно сделать выборку по конкретным кодам (для того чтобы потом отфильтровать отчёт по этой выборке), список которых приведён как раз в &ВыбСтатьяЗатрат = СписокКодов(тип СЗ) поэтому пытаюсь сослаться к нему. В этом СЗ есть 100 !конкретных кодов ГРУПП статей затрат , которые мне нужны, но для того чтобы запрос в отчёте отрабатывал корректно - нужно добавить к этим 100 кодам ещё по 10 значений к каждому,.. размещать 1000 аналогичных строк в коде - мне кажется это не совсем правильно? Вот и пытаюсь найти выход из ситуации... |
|||
60
wishma
28.03.13
✎
12:31
|
"В этом СЗ есть 100 !конкретных кодов ГРУПП статей затрат"
поправка - в СЗ не 100 конкретных кодов групп, а там 100 значений, которые = 100 кодам нужных мне групп статей затрат |
|||
61
hhhh
28.03.13
✎
12:38
|
(60) ну то есть ваша задача: взять этот список кодов и его творчески дополнить. Сделать СписокКодов2. И его уже подставлять в запрос. Чего вы нам лапшу вешаете 3-й день про запрос?
|
|||
62
wishma
28.03.13
✎
13:07
|
(61) ИМЕННО!!!
про запрос это как вариант был, я вчера думал через него реализовать, но не вышло... Вот Вы первый кто спросил в лоб что нужно, и написали как это сделать! а ведь остальные сами себя путают... понимаю что много таких "зелёных" как я, но всё равно ведь не все ситуации одинаковы... Чтобы больше не путать - вставлю весь код, который имеет отношение к данной проблеме: //Расходы.СтатьяЗатрат (кусок запроса) | ВЫБОР | КОГДА Запрос1.СчетДт В ИЕРАРХИИ (&Сч25) ИЛИ Запрос1.СчетДт В ИЕРАРХИИ (&Сч26) | ТОГДА Запрос1.СубконтоДт2 | ИНАЧЕ Запрос1.СубконтоДт3 | | КОНЕЦ КАК СтатьяЗатрат, // (конец запроса по СтатьеЗатрат) Функция СформироватьУсловияОтбора() // отрезок функции по условиям отбора Если ЗначениеЗаполнено(ВыбСтатьяЗатрат) Тогда стр = стр + ИМеждуУсловиями(стр) + "Расходы.СтатьяЗатрат.Код В (&ВыбСтатьяЗатрат)"; Возврат стр; КонецФункции Процедура Сформировать() ВыбСтатьяЗатрат = СписокКодов; СписокКодов = Новый СписокЗначений; //Список кодов элементов КАК МНЕ НАДО ( но как НЕПРАВИЛЬНО ДЕЛАТЬ) СписокКодов.Добавить("030101"); СписокКодов.Добавить("030102"); СписокКодов.Добавить("030103"); СписокКодов.Добавить("030104"); СписокКодов.Добавить("030105"); СписокКодов.Добавить("030106"); // Список кодов групп (пример), но так не подхватывает элементы в группе СписокКодов.Добавить("03182"); СписокКодов.Добавить("03238"); СписокКодов.Добавить("03239"); СписокКодов.Добавить("03240"); СписокКодов.Добавить("03241"); СписокКодов.Добавить("03242"); СписокКодов.Добавить("03250"); СписокКодов.Добавить("03251"); СписокКодов.Добавить("03252"); СписокКодов.Добавить("03276"); СписокКодов.Добавить("03282"); СписокКодов.Добавить("03283"); СписокКодов.Добавить("03288"); СписокКодов.Добавить("03290"); СписокКодов.Добавить("03291"); СписокКодов.Добавить("03292"); СписокКодов.Добавить("03293"); СписокКодов.Добавить("03313"); СписокКодов.Добавить("03314"); СписокКодов.Добавить("03315"); СписокКодов.Добавить("03316"); Надеюсь теперь понятно обьяснил?:-) |
|||
63
wishma
28.03.13
✎
13:09
|
как можно было заметить - в 1 примере со СЗ - код имеет 6 символов
во втором примере код имеет 5 символов сделать 100 записей это ещё реально но 1000 боюсь нереально совсем... |
|||
64
hhhh
28.03.13
✎
13:12
|
(63) до 20000 можете не задумываясь фигачить, от 20000 уже осторожно.
|
|||
65
wishma
28.03.13
✎
13:26
|
(64) и что, реально 1000 строчек
СписокКодов.Добавить("ХХХХХХ"); не сильно убого будут смотреться?)) и нет никаких других адекватных вариантов? без полной переделки самого отчёта я думал это самый бездарный вариант, до которого только такой чайник как я мог догадаться, ну если это единственный вариант, без полной переделки отчёта, то видимо деваться некуда... |
|||
66
wishma
28.03.13
✎
13:50
|
Ну же, юзеры с большой репутацией? Скажите уже "да, нет других вариантов, это и так будет работать", и я уже успокоюсь и сделаю через 1000 строк ) а то как то беспокойно мне от такого "инвалидного" кода...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |