Имя: Пароль:
1C
1С v8
Заполнение реквизита подчиненного справочника
,
0 Сергей333
 
28.08.17
15:06
Подскажите новичку. Есть спр.Номенклатура, на форме елемента которого есть поле ввода "Вес". У этого справочника есть подчиненный спр. ЕдиницаИзмирения, в форме списка которого есть колонка "Вес". Вопрос, Как заполнить эту колонку при записи спр. Номенклатура?
1 Сергей333
 
28.08.17
15:41
Помогите. Срочно нужно!
2 FIXXXL
 
28.08.17
16:08
(1) зачем так делать?
3 Сергей333
 
28.08.17
16:10
(2) Клиенту нужно. Когда вводит вес в форме элемента спр. Номенклатура, то что бы Вес отображался в форме списка спр. Единица измерения(колонка Вес)
4 FIXXXL
 
28.08.17
16:19
(3) ничего, что у товара может быть множество ЕИ?
5 Сергей333
 
28.08.17
16:22
(4) Оно должно писаться когда выбрана базовая ЕИ.
6 _Дайвер_
 
28.08.17
16:23
(3) Тебе нужно менять запрос(добавить 1 строчку), и добавить новую колонку "ВЕС" в форму списка, есть ее нет через изменить форму.
7 FIXXXL
 
28.08.17
16:24
ПередЗаписьюНаСервере в форме засунь вес в параметры записи
ПослеЗаписиНаСервере в форме считай и запиши в ЕИ
8 Сергей333
 
28.08.17
16:37
(7) Блин. Чет это оч сложно пока для меня(  "НаСервере" у меня нет. Типовая конфа. Если можно, можете примером показать?
9 Vladimkir
 
28.08.17
16:37
Непонятно задача.
А, например, ящик 10 штук = Вес номенклатуры * 10 считал сам и подставлял?
Делаешь запрос к справочнику единицизмерний по владельцу,
получешь элементы, меняешь им по формуле или как надо реквизит вес, записываешь.

Или надо только в форме списка ИИ???
Тогда вытащи в динамическом списке элемента владелец.вес и включи ему обязательность.
10 Сергей333
 
28.08.17
16:44
(9) В спр.Номенклатура выбираем базовую ЕдиницуИзмерения (шт) и поле ввода Вес (к примеру 10кг) так когда записал спр. Номенклатура, в форме списка справочника ЕдиницаИзмерения отображается :Наименование, единицы и есть колонка Вес нужно что бы она тоже отображалась.
11 FIXXXL
 
28.08.17
16:46
(8) что за конфа?
12 Сергей333
 
28.08.17
16:49
(11) 1С:Предприятие 8.3 (8.3.9.2033) УТП
13 FIXXXL
 
28.08.17
17:01
(12) ОФ или УФ?
14 Сергей333
 
28.08.17
17:04
(13) Обычные формы.
15 FIXXXL
 
28.08.17
17:10
(14) ну в ПослеЗаписи формы напиши
ОбъектЕИ = ЕИ.ПолучитьОбъект();
ОбъектЕИ.Вес = ВесСФормы;
ОбъектЕИ.Записать();
16 dezss
 
28.08.17
17:16
(15) да ему не писать надо, а просто в форме списка отобразить, насколько я понял.
17 FIXXXL
 
28.08.17
17:20
(16) если это старая УТП а-ля УТ10, то проще записать :)
18 Сергей333
 
29.08.17
15:15
(15) а как переменные написать?
19 FIXXXL
 
29.08.17
16:07
(18) какие переменные?
20 Сергей333
 
29.08.17
16:33
(19) {Справочник.Номенклатура.Форма.ФормаЭлементаУпрощенная.Форма(471,13)}: Переменная не определена (ЕИ)
    ОбъектЕИ = <<?>>ЕИ.ПолучитьОбъект(); (Проверка: Толстый клиент (обычное приложение))
{Справочник.Номенклатура.Форма.ФормаЭлементаУпрощенная.Форма(472,17)}: Переменная не определена (ВесСФормы)
    ОбъектЕИ.Вес = <<?>>ВесСФормы; (Проверка: Толстый клиент (обычное приложение))
21 FIXXXL
 
29.08.17
16:38
(20) ну ты там разберись куда тебе писать вес надо
22 Сергей333
 
29.08.17
16:41
(21) Справочник.Номенклатура.Форма.ФормаЭлементаУпрощенная.Форма и вот в ней в процедуре После записи. Правильно? Или в модуле объекта?
23 FIXXXL
 
29.08.17
16:43
(22) сделай в форме, тебе пока хватит
24 Сергей333
 
30.08.17
09:15
Блин( Как вывести данные из реквизита спр.Номенклатура в форму списка спр.Единица Измерения?
Неужели никто толком не может конкретно ответить? Просто реально ума не приложу что делать((.
25 FIXXXL
 
30.08.17
09:29
(24) если есть однозначная связь Номенклатура-ЕИ, выведи через ОформленияСтрок процедуры СписокПриПолученииДанных списка ЕИ
26 FIXXXL
 
30.08.17
09:30
27 Сергей333
 
30.08.17
09:31
(25) У Спр.ЕИ владельцы спр. Номенклатура.
Спр. ЕИ на поддержке стоит.
28 Сергей333
 
30.08.17
10:01
Не пойму причем здесь Оформление Строк?
29 Сергей333
 
30.08.17
10:14
Люди добрые помогите)) Уже истерика) Блин ну земля же круглая то, придет время и я кому то помогу.
30 dezss
 
30.08.17
10:23
(29) во время записи номенклатуры, получай объект единиц измерения, меняй в нем вес на тот, что указан у тебя на форме номенклатуры и записывай этот объект. Тебе еще в (15) это посоветовали.
31 Сергей333
 
30.08.17
10:27
(30) В процедуре ПриЗаписи или ПолсеЗаписи?
32 dezss
 
30.08.17
10:30
(31) по большому счету пофиг, ты меняешь не номенклатуру, а другой объект, но по хорошему надо бы в передзаписью.
33 Сергей333
 
30.08.17
10:32
(32) Вот здесь не пойму как менять вес ОбъектЕИ.Вес = ВесСФормы;?
34 dezss
 
30.08.17
10:33
(33) Ну на форме ж расположен какой-то реквизит. Вот его найди и его значение бери.
35 Сергей333
 
30.08.17
10:35
(34) Что то вроде ОбъектЕдиницыИзмерения.Вес = ЭлементыФормы.ВесБазовойЕдиницыИзмерения;?
ВесБазовойЕдиницыИзмерения-реквизит формы номенклатуры.
36 Сергей333
 
30.08.17
10:44
(30) {Справочник.Номенклатура.Форма.ФормаЭлементаУпрощенная.Форма(354)}: Метод объекта не обнаружен (ПолучитьОбъект)
    ОбъектЕдиницыИзмерения = ЕдиницыИзмерения.ПолучитьОбъект();
37 dezss
 
30.08.17
10:44
(35) да...только у тебя ж в номенклатуре есть и ссылка на ЕИ.
Если ВесБазовойЕдиницыИзмерения - это реквизит формы и у тебя УФ, то ЭлементыФормы.ВесБазовойЕдиницыИзмерения использовать не надо, можно просто ВесБазовойЕдиницыИзмерения;

Делаешь тогда так:
ОбъектЕдиницыИзмерения = <твоя_ссылка_на_еи>.ПолучитьОбъект();
ОбъектЕдиницыИзмерения.Вес = ВесБазовойЕдиницыИзмерения;
Попытка
    ОбъектЕдиницыИзмерения.Записать();
Исключение
    Сообщить(ОписаниеОшибки());
КонецПопытки;
38 dezss
 
30.08.17
10:44
(36) Какой тип у ЕдиницыИзмерения?
39 Сергей333
 
30.08.17
10:45
(37) Обычные формы
40 Сергей333
 
30.08.17
10:52
(37) Ошибка {Справочник.Номенклатура.Форма.ФормаЭлементаУпрощенная.Форма(354)}: Метод объекта не обнаружен (ПолучитьОбъект)
    ОбъектЕдиницыИзмерения = Справочники.ЕдиницыИзмерения.ПолучитьОбъект();
41 Михаил Козлов
 
30.08.17
10:54
(24) Боюсь, Вы не понимаете, что Вам нужно: вес обычно является реквизитом не номенклатуры, а единицы измерения.
Т.е. вес нужно писать в единицу измерения и редактировать в форме этого справочника (а не в форме элемента справочника "Номенклатура").
Если в форме списка справочника "Номенклатура" нужно вывести вес какой-либо единицы измерения (единицы хранения остатков или базовой), то делается это "на лету" (событие табличного поля ПриПолученииДанных см.(26)).
42 dezss
 
30.08.17
11:01
(40) это ересь.
ПолучитьОбъект надо применять к ссылке на единицу измерения текущей формы.
Если ОФ, то ОбъектЕдиницыИзмерения = ЭлементыФормы.ЕдиницыИзмерения.ПолучитьОбъект();
43 Сергей333
 
30.08.17
11:18
(41) Нет. В спр.Номенклатура есть реквизит "Вес" и его нужно показать в форме списка справочника Единицы Измерения!
У Единицы Измерения тоже есть реквизит "Вес".
44 dezss
 
30.08.17
11:25
(43) Они всегда совпадают в спр Номенклатуры и ЕИ?
45 Михаил Козлов
 
30.08.17
11:29
(43) А зачем тогда реквизит "Вес" у номенклатуры?
Тогда (15): в ячейке Вес показываете вес из владельца:
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
  ДЛЯ каждого оф ИЗ ОформленияСтрок Цикл
    оф.Ячейки.Вес.УстановитьТекст(оф.ДанныеСтроки.Ссылка.Владелец.Вес);
    КонецЦикла;    
КонецПроцедуры
46 Сергей333
 
30.08.17
11:35
(45) Эту процедуру нужно писать в форме списка спр. Единицы Измерения?
47 Михаил Козлов
 
30.08.17
11:37
(46) Да. Нужно в событиях табличного поля выбрать "ПриПолученииДанных" - оформится заголовок процедуры. В теле оформляете текст из (45).
Все равно непонятно, как смысл в реквизите "Вес" у номенклатуры.
48 Сергей333
 
30.08.17
14:33
(47) Теперь ошибка: {Справочник.ЕдиницыИзмерения.Форма.ФормаСписка.Форма(79)}: Поле объекта не обнаружено (ЭлементыФормы)
        оф.Ячейки.Вес.УстановитьТекст(оф.ДанныеСтроки.Ссылка.Владелец.ЭлементыФормы.Вес);

Только не пойму почему, если в форме списка спр. ЕдиницаИзмерения есть колонка "Вес".
49 Сергей333
 
30.08.17
14:34
(47) И так тоже: {Справочник.ЕдиницыИзмерения.Форма.ФормаСписка.Форма(79)}: Поле объекта не обнаружено (Вес)
        оф.Ячейки.Вес.УстановитьТекст(оф.ДанныеСтроки.Ссылка.Владелец.Вес);
50 FIXXXL
 
30.08.17
14:36
(49) точку останова на
оф.Ячейки.Вес.УстановитьТекст(оф.ДанныеСтроки.Ссылка.Владелец.ЭлементыФормы.Вес
и смотри в отладчике правильный путь до веса
51 Сергей333
 
30.08.17
14:38
(50) Если закрыть ошибку, то показывает вес на той единицы которую я выбрал в Номенклатуре, а на остальных единицах измерения нули стоят.
52 dezss
 
30.08.17
14:54
тебе нужно вживую пообщаться с более опытным программистом...тебя не слишком просто понять...
то тебе надо, чтобы писался вес в ЕИ, то надо чтобы только отображался (но откуда он будет отображаться, если он не пишется)...то ли пусть вес берется из справочника номенклатуры...
53 Сергей333
 
30.08.17
15:00
(52) Да вес должен записаться из спр. Номенклатура.
54 dezss
 
30.08.17
15:03
(53) ну так пиши его и не парь мозг, тебе это уже давно сказали как это сделать...
и в списке тоже тогда будет этот вес.
55 Сергей333
 
30.08.17
15:22
(54) Я понимаю что запарил, последний вопрос куда писать код из (37) и (45) ?
56 dezss
 
30.08.17
15:28
(55) из (37) пишешь при записи номенклатуры...а из 45 никуда не надо...у тебя же в списке ЕИ и так есть колонка Вес...и теперь она будет заполняться
57 Сергей333
 
30.08.17
15:41
(56) Вот Процедура ПриЗаписи(Отказ)

    Если Не СтатьяЗатрат.Пустая() Тогда
        ВидЗатрат = СтатьяЗатрат.ВидЗатрат;
        Если ВидЗатрат = Перечисления.ВидыЗатрат.Материальные И Услуга Тогда
            ОбщегоНазначения.СообщитьОбОшибке("Укажите нематериальную статью затрат на закладке ""По умолчанию"" !", Отказ);

        ИначеЕсли Не ВидЗатрат = Перечисления.ВидыЗатрат.Материальные И Не Услуга Тогда
            ОбщегоНазначения.СообщитьОбОшибке("Укажите материальную статью затрат на закладке ""По умолчанию"" !", Отказ);

        КонецЕсли;
    КонецЕсли;

    // Обработка записи свойств и категорий
    Если НЕ Отказ Тогда
        ОбработкаОбъектЗначенияСвойств.ОбъектОтбораЗначений = Ссылка;
        Отказ = НЕ ОбработкаОбъектЗначенияСвойств.ЗаписатьЗначенияСвойств();

        ОбработкаОбъектКатегорииОбъекта.ОбъектОтбораКатегорий = Ссылка;
        Отказ = НЕ ОбработкаОбъектКатегорииОбъекта.ЗаписатьКатегорииОбъекта();
    КонецЕсли;
    
    ОбъектЕдиницыИзмерения = ЭлементыФормы.БазоваяЕдиницаИзмерения.ПолучитьОбъект();
    ОбъектЕдиницыИзмерения.Вес = Вес;
    Попытка
        ОбъектЕдиницыИзмерения.Записать();
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры // ПриЗаписи()

И выдает ошибку:{Справочник.Номенклатура.Форма.ФормаЭлементаУпрощенная.Форма(451)}: Метод объекта не обнаружен (ПолучитьОбъект)
    ОбъектЕдиницыИзмерения = ЭлементыФормы.БазоваяЕдиницаИзмерения.ПолучитьОбъект();
58 dezss
 
30.08.17
15:46
какой тип у ЭлементыФормы.БазоваяЕдиницаИзмерения?
59 Сергей333
 
30.08.17
15:51
(58) СправочникСсылка.КлассификаторЕдиницИзмерения
60 Михаил Козлов
 
30.08.17
16:28
(57) ОбъектЕдиницыИзмерения = ЭлементыФормы.БазоваяЕдиницаИзмерения.Значение.ПолучитьОбъект();
1. Зачем получать объект через элемент формы - должен же быть реквизит самого объекта или реквизит формы?
2. Зачем Вам вес писать в классификатор (ОКЕИ)?
61 Сергей333
 
30.08.17
16:40
(60) В классификатор не нужно. Нужно в форму списка спр.ЕИ.
реквизит формы спр.Номенклатура есть ВЕС.
62 FIXXXL
 
31.08.17
08:41
(59) не ту ЕИ смотришь
63 Сергей333
 
31.08.17
13:08
(62) (60) В общем получилось записать в ЕИ таким образо:
    // записать вес
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЕдиницыИзмерения.Ссылка
        |ИЗ
        |    Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
        |ГДЕ
        |    ЕдиницыИзмерения.Владелец = &Номенклатура
        |    И НЕ ЕдиницыИзмерения.ПометкаУдаления
        |    И ЕдиницыИзмерения.ЕдиницаПоКлассификатору = &ЕдиницаПоКлассификатору";
    
    Запрос.УстановитьПараметр("ЕдиницаПоКлассификатору", БазоваяЕдиницаИзмерения);
    Запрос.УстановитьПараметр("Номенклатура", Ссылка);
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ЕдиницаИзмеренияОбъект = Выборка.Ссылка.ПолучитьОбъект();
        ЕдиницаИзмеренияОбъект.Вес = ЭлементыФормы.ВесБазовойЕдиницыИзмерения.Значение;
        ЕдиницаИзмеренияОбъект.Записать();
    КонецЦикла;
64 Сергей333
 
31.08.17
13:11
Теперь вопрос такой. В спр. Номенклатура есть РЕКВИЗИТ ФОРМЫ, и при открытии Номенклатуры должен в поле ввода реквизита "ВесБазовойЕдиницыИзмерения" отображаться записаный вес. Как реализовать?
65 Рэйв
 
31.08.17
13:15
(64)Ну и заполняй при создании на сервере.
66 Сергей333
 
31.08.17
13:19
(65) Я пробовал в процедуре при открытии, не выходит(
    // читаем вес
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЕдиницыИзмерения.Вес
    |ИЗ
    |    Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения";

    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    СтруктураОтбора = Новый Структура();
    
    Пока Выборка.Следующий() Цикл
        ЭлементыФормы.БазоваяЕдиницаИзмерения.Значение = Выборка.Вес;
    КонецЦикла;
67 Сергей333
 
31.08.17
13:19
(65) Если что, УТП обычные формы.
68 h-sp
 
31.08.17
13:35
(67) тебе же уже сказали, это два разных справочника

БазоваяЕдиницаИзмерения - это справочник КлассификаторЕдиницИзмерения

а у тебя Справочник ЕдиницыИзмерения.

Это совсем другой справочник.
69 Рэйв
 
31.08.17
13:37
(66)А если у тебя несколько единиц измерения с базовой как в текущей, то какой вес ты будешь втыкать в реквизит?
70 Рэйв
 
31.08.17
13:38
*как в текущей ссылке Номенклатуры
71 Сергей333
 
31.08.17
13:48
Неправильно сори.

Пока Выборка.Следующий() Цикл
        ЭлементыФормы.ВесБазовойЕдиницыИзмерения.Значение = Выборка.Вес;
    КонецЦикла;
72 Рэйв
 
31.08.17
13:50
(71) из 100500 подчиненных единиц измерения тебе надо проставить вес только последней?
73 Сергей333
 
31.08.17
14:20
(72) Создаем новую номенклатуру, вводим единицу измерения и вводим Вес (в поле ввода реквизита формы "ВесБазовойЕдиницыИзмерения") записываем. Теперь Вес отображается в форме списка ЕИ. Нужно что бы при повторном открытии спр. Номенклатура (которую создали) отображался Вес (этот реквизит не записывается в номенклатуре).
74 FIXXXL
 
31.08.17
14:22
(73) возьми свой же запрос из (63) , только теперь считай вес и присвой реквизиту формы
75 Сергей333
 
31.08.17
14:56
(74) Вы имеете ввиду в этом цикле?
Пока Выборка.Следующий() Цикл
        ЕдиницаИзмеренияОбъект = Выборка.Ссылка.ПолучитьОбъект();
        ЕдиницаИзмеренияОбъект.Вес = ЭлементыФормы.ВесБазовойЕдиницыИзмерения.Значение;
        ЕдиницаИзмеренияОбъект.Записать();
    КонецЦикла;
76 FIXXXL
 
31.08.17
15:38
(75) да
77 FIXXXL
 
31.08.17
15:41
Пока Выборка.Следующий() Цикл
        Вес = Выборка.Ссылка.Вес;
        ЭлементыФормы.ВесБазовойЕдиницыИзмерения.Значение=Вес;
        
    КонецЦикла;
78 FIXXXL
 
31.08.17
15:42
(77) Внимание! Копрокод :)
Вес лучше в запросе получить
79 Сергей333
 
31.08.17
15:54
(78) Это как?
(77) Так получается, но только если номенклатура не в папке. А как сделать если номенклатуру нужно создать к примеру в папке "Алкоголь"? Спасибо)
80 dezss
 
31.08.17
16:06
Вы все еще заполняете реквизиты?)))
(79) не важно в какой папке номенклатура, код один и тот же.
81 FIXXXL
 
31.08.17
16:09
(79) какая папка-мамка?
82 FIXXXL
 
31.08.17
16:09
(80) из принципа надо добить задачу :)
83 dezss
 
31.08.17
16:17
(82) Тут не задачу надо добивать))))
84 Сергей333
 
31.08.17
16:24
Спасибо всем ОГРОМНОЕ:) Все работает) (82) , (83) При встрече добьете меня)))