Имя: Пароль:
1C
1С v8
Как связать СЗ и Справочник в 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 строк ) а то как то беспокойно мне от такого "инвалидного" кода...
Ошибка? Это не ошибка, это системная функция.