Имя: Пароль:
1C
1С v8
Программное создание ссылок
,
0 The_ka6a4ok
 
24.09.20
00:29
добрых дней. есть классная форма элемента, в которой 2 важных поля являются ссылочными: наименование и код, соответственно, в них я ничего не могу записать программно, а ссылки на нужные объекты можно создать лишь в процессе работы пользователя, так вот вопрос, есть ли возможность заранее добавить эти ссылки программно имея нужные наименования и коды, но в строчном типе значения? или как перевести из строчного в ссылочный тип?
1 Ёпрст
 
24.09.20
00:32
(0) А теперь помедленнее и по-русски, пожалуйста. Я записываю
2 The_ka6a4ok
 
24.09.20
00:37
есть два поля, оба ссылочные:наименование и код, в них заранее предусмотрено нажатие на кнопку выбора и соответственно создастся ссылка, я же хочу скипнуть этот момент и создать ссылку программно, допустим у меня есть 2 массива, в одном все наименования, а в другом код, по очереди записываю из массивы в поля данные и записываю и так до конца
3 Ёпрст
 
24.09.20
00:48
(2)
Наименование и код, как правило, это служебные реквизиты простых типов, строка и число(может быть у кода).
О каких ссылках идёт речь ?
4 The_ka6a4ok
 
24.09.20
00:52
ссылками у этих полей непосредственно являются справочники
5 Ёпрст
 
24.09.20
00:54
(4) И какого типа эти реквизиты у вас ?
6 The_ka6a4ok
 
24.09.20
01:02
жаль тут картинки отправлять нельзя, ох жаль
я пытаюсь изменить поля, у которых тип "ссылка", эти поля находятся в форме, если раньше я мог изменять их строкой "Справочники.Номенклатура.Код.Значение = Значение;", то сейчас я такими возможностями не могу похвастаться и вынужден придумать что-то другое, пытался вместо "Значение" впихнуть непосредственно название обекта, то есть, делал выборку и постепенно добавлял - не вышло, ничего не работает
7 Ёпрст
 
24.09.20
01:03
8 Ёпрст
 
24.09.20
01:04
>>>>если раньше я мог изменять их строкой "Справочники.Номенклатура.Код.Значение = Значение;", то сейчас я такими возможностями не могу похвастаться

Раньше, это когда ?
И где ЭТО работало ?
9 The_ka6a4ok
 
24.09.20
01:05
(8) форма-то не одна)
в другие формы добавлял, где поля типа "Строка", ничего трудного
10 The_ka6a4ok
 
24.09.20
01:06
11 МихаилМ
 
24.09.20
01:09
похоже это опять Андрей Николаевич...
12 The_ka6a4ok
 
24.09.20
01:11
(11) не понял
13 МихаилМ
 
24.09.20
01:14
(12) тем хуже. два Андрей Николаевича для этого форума будет много. "Боливар не вывезет двоих"
14 The_ka6a4ok
 
24.09.20
01:16
(13) какой-то локальный мем у вас на форуме, живая легенда
15 МихаилМ
 
24.09.20
01:19
(14)  если будете продолжать тупить, то тоже станете мемом.
16 The_ka6a4ok
 
24.09.20
01:22
(15) дык лол, в каком именно моменте я допустил ошибку, если я все что мог - попробовал, решил спросить здесь и это ошибка?
17 МихаилМ
 
24.09.20
01:33
(16) почитайте пожалуйста книги по программированию в 1с. ваше видение очень странное. и объяснять Вам доже добряк Ёпрст не будет.
18 Web00001
 
24.09.20
02:27
(16)У вас все перемешалось в голове. Ссылки, строки, формы. Вы не понимаете, что делаете и говорите ерунду. Я не могу вам помочь потому, что не понимаю, что вы пишете. Например у вас реквизит имеет либо ссылочный тип который выглядит как "Справочник.МойСправочник.Ссылка" который можно получить из одноименного справочника. Либо строчный(ну или любой другой доступный) но и не то и другое одновременно. Переменные, реквизиты(документа или справочника или чего бы там не было) не могут быть "строчными ссылочными" они могут быть либо строчными либо ссылочными. Соответственно не могу вам помочь. Скорее всего как только вы поймете, что происходит, помощь вам уже не понадобится, вы сами разберетесь, что не так. Может и найдется телепат конечно, который напишет код за вам или сразу скажет где проблема. Но надо бы разобраться все равно. Вот этот курс https://xn----1-bedvffifm4g.xn--p1ai/программирование-в-1с8-за-21-день/все-материалы/ вроде бы бесплатный, попробуйте посмотреть хотя бы первые 4 главы.
19 hhhh
 
24.09.20
02:53
похоже товарищ перешел на УФ
20 Web00001
 
24.09.20
03:32
(19) в (10) ОФ
21 ReaLg
 
24.09.20
07:49
(0) Не уверен, что все правильно понял, но поиграем в угадайку...
"есть ли возможность заранее добавить эти ссылки программно имея нужные наименования и коды"

Да, такая возможность есть. Можно создать элементы программно и присвоить им Ваши коды и наименования. Примерно так(естественно, справочник на свой заменить):
  НовыйЭлементСправочника = Справочники.Номенклатура.СоздатьЭлемент();
  НовыйЭлементСправочника.Код = "12345";
  НовыйЭлементСправочника.Наименование = "йййцццууу";
  НовыйЭлементСправочника.Записать();

", но в строчном типе значения" - этого не понимаю. Либо ссылка (элемент справочника), либо строка(значение строкового реквизита элемента справочника).
22 ReaLg
 
24.09.20
07:51
+(21) Когда вы добавите элементы - появится возможность выбирать их в пользовательском режиме по нажатию "трех точек", либо можно будет искать и подставлять эти элементы программно.
23 youalex
 
24.09.20
07:56
(0) тебе нужно найти ссылку (по коду или наименованию) или на самом деле создать?
Исходная задача какая?
24 КнОпка
 
24.09.20
08:16
(23) похоже автор хочет заполнить значение полю на форме, судя по (6)
Просто автор новичок

(6) по коду или наименованию можно найти элемент в справочнике и получить его ссылку.
Обычно в типовых на формах хранятся ссылки на элементы
Ссылка = Справочники.Номенклатура.НайтиПоКоду("00000001") // Пример
25 The_ka6a4ok
 
24.09.20
08:42
(21) мне через форму нужно добавить, поля которой являются ссылками на другие справочниками. (22) в том и дело, названия я найти могу, они будут строчного типа, а как добавить строку в поле с ссылочным типом?
26 The_ka6a4ok
 
24.09.20
09:09
ну, хотя бы получил ссылочный тип, пасиба (24)

но все равно почему-то не работает, если пробовать вставлять как в коде, то измениться лишь комментарий(так как это поле строчного типа), не понимаю что нужно сделать, чтобы переменная "тест" дала мне значение переменной "Ссылка.Код", на пикче, думаю, все будет понятней

https://postimg.cc/mP7Sgcbb
27 Ёпрст
 
24.09.20
09:12
(26) всё в топку
28 Ёпрст
 
24.09.20
09:13
За такой код нужно стальной линейкой по пальчикам.

А теперь, выплюнь кашу и озвучь всю задачу целиком. а не то, как ты это себе представил.
Кто-то же поставил перед вами задачу. верно ? Вот её и озвучь
29 Индиго
 
24.09.20
09:13
(25)Все элементы в подавляющем числе случаев.формы имеют источник данных.Их и заполняй, а не значения элементов формы
30 uzerp2
 
24.09.20
09:14
я так понимаю тебе это нужно:
посмотри конструкцию ПолучитьСсылкуНового()
в конфе БСП или любой другой
31 The_ka6a4ok
 
24.09.20
09:14
есть ещё одно интересное замечание, если после выполнения этого следующего кода, попытаться закрыть форму нового элемента, выскочит предупреждение, что данные были изменены, но я что-то изменений не вижу, может их можно отобразить или что-то их успевает их затереть, прежде чем точка останова сработает, не знаю?

https://postimg.cc/JDKs68RV
32 The_ka6a4ok
 
24.09.20
09:15
(28) ой, ну, вы сами попросили...
33 Ёпрст
 
24.09.20
09:23
(31) Ибо в открытой форме нового элемента ты заполнил реквизиты не соответствующего типа.

На будущее, открывать форму для программно создаваемых элементов справочника не надо.

Для создания элементов справочника ГТД обязательным условием является указание номенклатуры -Владельца.
В реквизиты надо пихать ссылки на элементы, а не строки -код.
34 The_ka6a4ok
 
24.09.20
09:24
к первой пикче:
нужно этот код вырезать с той строки и вставить его в другую, как его получить и т.д., я уже это сделал, даже больше, я получил все коды всех товаров и добавил их в 4 пикчу, увидите позже/

https://postimg.cc/1g8gW2ff

ко второй пикче:
чтобы добавить этот код в строку первой пикчи, нужно добавить сперва в эту форму, она пуста, так как я не могу добавить в неё элемент

https://postimg.cc/nXBVCxjK

к третьей пикче:
та самая форма, с которой я играюсь, нужно лишь выбрать код УКТВЭД(номенклатура вставляется туда автоматически, не я виноват, к сожалению)

https://postimg.cc/9RSsd4sD

к четвертой пикче:
все коды я взял из первой пикчи, обработал их и добавил в эту форму программно

https://postimg.cc/4mGBrbvJ

главная задача описана в пункте "к первой пикче"
35 The_ka6a4ok
 
24.09.20
09:26
(33) тут видно (26) , что я пытаюсь впихнуть именно ссылку на объект, разве нет?
36 Ёпрст
 
24.09.20
09:33
(35) нет.

В твоей номенклатуре, еще торчат эти кода в наименовании ?
37 Ёпрст
 
24.09.20
09:35
И..уктвэд как бэ не совсем правильно заполнен.
38 The_ka6a4ok
 
24.09.20
09:40
(36) да, я их пока не удалил, рано ещё, мне бы в ГДТ их добавить сперва, а там нужно полное название с кодом
39 The_ka6a4ok
 
24.09.20
09:41
(37) не понимаю почему, за исключением одного элемента - нуля не хватает
40 Ёпрст
 
24.09.20
09:43
В справочнике Номенклатура, как называется реквизит с типом Справочник.НомераГТД ?
41 The_ka6a4ok
 
24.09.20
09:52
НомераГТД в моем случае вовсе не играет никакой роли, но в этом справочнике нету такого элемента или поля с таким типом
номерГТД встречается лишь в третьей пикче, но к нему я не имею никаких вопросов
42 Ёпрст
 
24.09.20
10:07


На вот , занимайся. будут ошибки, пиши, я хз, как там в твоеё конфе реквизиты зовутся

Запрос = Новый Запрос;
Запрос.Текст = "Выбрать Различные
|Подстрока(Номенклатура.Наименование,1,10) как Код
|ИЗ Справочник.Номенклатура как Номенклатура
|левое соединение Справочник.КлассификаторУКТВЭД как КлассификаторУКТВЭД ПО КлассификаторУКТВЭД.Наименование = Подстрока(Номенклатура.Наименование,1,10)
|ГДЕ НЕ Номенклатура.ЭтоГруппа И Подстрока(Номенклатура.Наименование,11,1)=""#"" И КлассификаторУКТВЭД.ССылка Есть NULL";

Выборка = запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Объект = Справочники.КлассификаторУКТВЭД.СоздатьЭлемент();
    Объект.Наименование = Выборка.Код;
    Объект.Код= Выборка.Код;
    Объект.ПолноеНаименование = Выборка.Код;
    Объект.Записать();
КонецЦикла;

Запрос.Текст = "Выбрать
|Номенклатура.ССылка как ССылка,
|КлассификаторУКТВЭД.ССылка как УКТВЭД,
|НоменклатураГТД.ССылка как НомерГТД
|ИЗ Справочник.Номенклатура как Номенклатура
|левое соединение Справочник.КлассификаторУКТВЭД как КлассификаторУКТВЭД ПО КлассификаторУКТВЭД.Наименование = Подстрока(Номенклатура.Наименование,1,10)

|левое соединение Справочник.НоменклатураГТД как НоменклатураГТД по НоменклатураГТД.Владелец = Номенклатура.ССылка И НоменклатураГТД.КодУКТВЭД =  КлассификаторУКТВЭД.ССылка  
|ГДЕ НЕ Номенклатура.ЭтоГруппа И Подстрока(Номенклатура.Наименование,11,1)=""#"" И Номенклатура.НоменклатураГТД= Значение(Справочник.НоменклатураГТД.ПустаяССылка)";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
   Объект = Выборка.ССылка.ПолучитьОбъект();

   Если ЗначениеЗаполнено(Выборка.НомерГТД) Тогда
      Объект.НоменклатураГТД = Выборка.НомерГТД;
   Иначе
      ОбъектНоменклатураГТД  = Справочники.НоменклатураГТД.СоздатьЭлемент();
      ОбъектНоменклатураГТД .Владелец = Выборка.ССылка;
      ОбъектНоменклатураГТД .КодУКТВЭД = Выборка.УКТВЭД;
      ОбъектНоменклатураГТД.ОбменДанными.Загрузка = Истина;
      ОбъектНоменклатураГТД.Записать();
      Объект.НоменклатураГТД = ОбъектНоменклатураГТД.ССылка;
   КонецЕсли;
   Объект.ОбменДанными.Загрузка = истина;
   Объект.Записать();
КонецЦикла
43 МихаилМ
 
24.09.20
10:10
похоже (0) - макросник.
44 The_ka6a4ok
 
24.09.20
10:20
(42) просто гуру 1с, твой запрос в 14 строк напрочь может заменить мой код в строк 80, если не больше, пару условий добавить разве только, но это я сам, пасиба
45 The_ka6a4ok
 
24.09.20
10:21
(44) это я про запись в справочник КлассификаторУКТВЭД
46 The_ka6a4ok
 
26.09.20
19:31
(42) не прошло и тысячалетия, я немного разобрался в коде, который вы сделали, вот результат: https://postimg.cc/m1jwCZWP , ссылки из классификатораУКТВЭД правильные и точные, но когда я перехожу на товар, я не могу изменить значение символов "<>", даже если вручную выберу из списков тот самый код, пикча: https://postimg.cc/210SJsrn , чтобы изменить это значение, мне необходимо "идти" обратно в номенклатуруГДТ, найти код и просто изменять его, при этом никак вообще не редактируя, нажимая "ок", это баг или фича?
47 Ёпрст
 
26.09.20
19:45
(46) когда ты нажимаешь ОК в этом справочнике, происходит запись какого то реквизита, типа наименование или код, который ты не заполнил своим кодо
48 The_ka6a4ok
 
26.09.20
19:51
(47) я немного изменил код, буквально строку добавил, так как поле не заполнялось вовсе

хм, можем в самом справочнике "номенклатура" следует заполнить реквизит отвечающий за это поле, пикча: https://postimg.cc/xXqdr9gn
или он вовсе никакой роли не играет, как думаете?)
49 Ёпрст
 
26.09.20
20:08
(48) нет . Просто в Справочнике номенклатурагтд не заполняешь один из реквизитов(код или наименование)
50 The_ka6a4ok
 
26.09.20
20:28
(49) хм, думаю не в номеклатураГТД дело, тут нету важных реквизитов, другие реквизиты форм тоже проверил, не знаю в чем дело:
https://postimg.cc/zHv8WjyK
https://postimg.cc/xqJZkhCg
51 The_ka6a4ok
 
26.09.20
20:35
есть ещё догадка в одной строке, которую сам добавил, первая пикча: https://postimg.cc/xkgdzqsr

ну а код я не знаю как тут красиво вставить, попробую
<spoiler>
Запрос.Текст = "Выбрать
        |Номенклатура.ССылка как ССылка,
        |КлассификаторУКТВЭД.ССылка как УКТВЭД,
        |НоменклатураГТД.ССылка как НомерГТД
        |ИЗ Справочник.Номенклатура как Номенклатура
        |левое соединение Справочник.КлассификаторУКТВЭД как КлассификаторУКТВЭД ПО КлассификаторУКТВЭД.Код = Подстрока(Номенклатура.Наименование,1,10)

        |левое соединение Справочник.НоменклатураГТД как НоменклатураГТД1 по НоменклатураГТД.Владелец = Номенклатура.ССылка И НоменклатураГТД.КодУКТВЭД = КлассификаторУКТВЭД.ССылка
        |ГДЕ НЕ Номенклатура.ЭтоГруппа И Подстрока(Номенклатура.Наименование,11,1)=""#"" И Номенклатура.НоменклатураГТД= Значение(Справочник.НоменклатураГТД.ПустаяССылка)";
    Выборка = Запрос.Выполнить().Выбрать();
    n = 0;
    i = 0;
    j = 0;
    Пока Выборка.Следующий() Цикл
       Объект = Выборка.ССылка.ПолучитьОбъект();

       Если ЗначениеЗаполнено(Выборка.НомерГТД) Тогда
          Объект.НоменклатураГТД = Выборка.НомерГТД;
          i = i + 1;
       Иначе
          ОбъектНоменклатураГТД = Справочники.НоменклатураГТД.СоздатьЭлемент();
          ОбъектНоменклатураГТД.Владелец = Выборка.ССылка;
          ОбъектНоменклатураГТД.КодУКТВЭД_Индекс = Выборка.УКТВЭД;  //или рофл в этой строке, так как данные в поле данные именно отсюда берутся
          ОбъектНоменклатураГТД.КодУКТВЭД = Выборка.УКТВЭД;
          ОбъектНоменклатураГТД.ОбменДанными.Загрузка = Истина;
          ОбъектНоменклатураГТД.Записать();
          Объект.НоменклатураГТД = ОбъектНоменклатураГТД.ССылка;
          j = j + 1;
       КонецЕсли;
       Объект.ОбменДанными.Загрузка = истина;
       Объект.Записать();
    n = n + 1;  
    КонецЦикла;
    Сообщить("Общее кол-во - " + n);
    Сообщить("Не прошли условие - " + i);
    Сообщить("Прошли условие - " + j);

</spoiler>
52 Ненавижу 1С
 
гуру
26.09.20
21:10
Вы немного не понимаете, что формы это лишь представление данных. Сами данные же в объектах
53 The_ka6a4ok
 
26.09.20
22:47
в общем, все ясно, я дегенерат
все записывало верно, и по моему понимаю нужно было только нажать кнопку "Ок" в форме добавления нового элемента, так вот, достаточно было сделать выборку по всем элементам этого справочника, получить объект каждого и метод "записать" для каждого
54 Cthulhu
 
27.09.20
01:18
"этот паца́к всё время говорит на языках, продолжения которых не знает!" (с) Уэф.