Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как вытянуть данные из справочника в документе
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
pashik
Всем привет!
Я новичек в 1С. Пишу себе конфу на 8.2.
Есть справочник номенклатура с реквизитами: Наименование, единицы измерения.
Есть документ - Приход товара с табличной частью.
Как сделать, чтоб при выборе в табличной части какойто номенклатуры, единицы измерения подставлялись автоматически (из справочника Номенклатура).
Заранее благодарен.
Vofka
Ну это ж в каждом учебнике есть, читайте книги.
ЕдиницаИзмерения = Номенклатура.ЕдиницаИзмерения
Flexy
Я думаю надо сделать обработчик события
Процедура НоменалктураПриИзменении()
...

И дальше уже подставлять алгоритм подставления единиц.
pashik
Вот такпытаюсь:
&НаКлиенте
Процедура СписокТоваровНоменклатураПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
    СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.ИзвлечЦену(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура, Объект.ВидЦены);
    
    
    СтрокаТабличнойЧасти.ЕдиницыИзмерения = Номенклатура.ЕдиницыИзмерения;
    
КонецПроцедуры


Выдает ошибку: "{Документ.ЗаказТоваров.Форма.ФормаДокумента.Форма(8,42)}: Переменная не определена (Номенклатура)
СтрокаТабличнойЧасти.ЕдиницыИзмерения = <<?>>Номенклатура.ЕдиницыИзмерения; (Проверка: Тонкий клиент)"

тоесть где фукции процедуры писать я в курсе.
не могу понять откуда вытащить ссылку на выбраный с справочнике объект.
Flexy
Прежде чем работать со справочником его надо создать.
Т.е.
Спр = СоздатьОбъект("Справочник.Номенклатура");

И дальше уже манипулировать различными его элементами с помощью методов.
С 8.2 я практически не работал.Возможно я ошибаюсь.Но попробуйте так. wink.gif
DartRomanius
Цитата(pashik @ 21.02.11, 12:29) необходимо зарегистрироваться для просмотра ссылки
Вот такпытаюсь:
&НаКлиенте
Процедура СписокТоваровНоменклатураПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.ИзвлечЦену(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура, Объект.ВидЦены);


СтрокаТабличнойЧасти.ЕдиницыИзмерения = Номенклатура.ЕдиницыИзмерения;

КонецПроцедуры

Выдает ошибку: "{Документ.ЗаказТоваров.Форма.ФормаДокумента.Форма(8,42)}: Переменная не определена (Номенклатура)
СтрокаТабличнойЧасти.ЕдиницыИзмерения = <<?>>Номенклатура.ЕдиницыИзмерения; (Проверка: Тонкий клиент)"

тоесть где фукции процедуры писать я в курсе.
не могу понять откуда вытащить ссылку на выбраный с справочнике объект.



Сходить на сервер за данными.

Что-то типа

&НаКлиенте
Процедура ПриИзмененииНоменклатуры(.....)
.......
    ЗадатьИзменитьЕдиницуНаСервере();
.......
КонецПроцедуры

&НаСервере
Процедура ЗадатьИзменитьЕдиницуНаСервере()
    Номенклатура.Единицы......

КонецПроцедуры
Vofka
&НаКлиенте
Процедура СписокТоваровНоменклатураПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
    СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.ИзвлечЦену(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура, Объект.ВидЦены);
    
    
    СтрокаТабличнойЧасти.ЕдиницыИзмерения = СтрокаТабличнойЧасти.Номенклатура.ЕдиницыИзмерения;
    
КонецПроцедуры


Так?
DartRomanius
Не думаю что в 8.2 прокатит такая схема.
На 8.1 (8.0) наверное да.

Форма не имеет прямого доступа к данным.
Еще вроде как можно покурить:
ДанныеФормыВЗначение(<Объект>, <Тип>) 
ЗначениеВДанныеФормы(<Значение>, <Объект>)
pashik
Цитата(Vofka @ 21.02.11, 12:57) необходимо зарегистрироваться для просмотра ссылки
&НаКлиенте
Процедура СписокТоваровНоменклатураПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
    СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.ИзвлечЦену(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура, Объект.ВидЦены);
    
    
    СтрокаТабличнойЧасти.ЕдиницыИзмерения = СтрокаТабличнойЧасти.Номенклатура.ЕдиницыИзмерения;
    
КонецПроцедуры


Так?



При выборе объекта выдает ошибку: "Поле объекта не обнаружено: Единицы измерения".

А правильно ли такое обращение - СтрокаТабличнойЧасти.Номенклатура.ЕдиницыИзмерения ?
Здесь Номенклатура - это реквизит табличной части ("СписокТоваров") документа.
torrensen
&НаКлиенте
Процедура СписокТоваровНоменклатураПриИзменении(Элемент)
    ДанныеСтруктура = новый Структура(Цена,ЕдиницаИзмерения);

    СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
    РаботаСоСправочниками.ИзвлечьЦенуИНдиницеИзмерения(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура, Объект.ВидЦены, ДанныеСтруктура);
    
    
    СтрокаТабличнойЧасти.Цена = ДанныеСтруктура.Цена;
    СтрокаТабличнойЧасти.ЕдиницыИзмерения = ДанныеСтруктура.ЕдиницыИзмерения;
  
КонецПроцедуры


&НаСервереБезКонтекста
Процедура ИзвлечьЦенуИНдиницеИзмерения(Дата,Товар,ВидЦена,Данные)
// получить цену и единицу измерения и засунуть их в струтктру Данные
КонецПроцедуры
pashik
Всем спасибо за то, что отозвались. Сегодня утром, перечитав все посты, - меня осенило!!! Все получилось вот так:
&НаКлиенте
Процедура СписокТоваровНоменклатураПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
    СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.ИзвлечЦену(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура, Объект.ВидЦены);
КонецПроцедуры

&НаКлиенте
Процедура СписокТоваровНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
    СтрокаТабличнойЧасти.ЕдиницыИзмерения = ИзвлечЕдиницыИзмерения(ВыбранноеЗначение);
КонецПроцедуры

//Функция - извлечение единицы измерения из справочника
&НаСервереБезКонтекста
Функция ИзвлечЕдиницыИзмерения(ВыбранноеЗначение)
    Возврат ВыбранноеЗначение.ЕдиницыИзмерения;    
КонецФункции
logist
Я бы сделал так:
&НаСервереБезКонтекста
Функция ПолучитьЕдиницуИзмерения(Номенклатура)
             Возврат Номенклатура.ЕдиницыИзмерения;
КонецФункции

&НаКлиенте
Процедура СписокТоваровНоменклатураПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
        Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Номенклатура) Тогда
            СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.ИзвлечЦену(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура, Объект.ВидЦены);
                СтрокаТабличнойЧасти.ЕдиницыИзмерения = ПолучитьЕдиницуИзмерения(СтрокаТабличнойЧасти.Номенклатура);
        Иначе
            СтрокаТабличнойЧасти.Цена = "";
                СтрокаТабличнойЧасти.ЕдиницыИзмерения = Неопределено;
        КонецЕсли;
КонецПроцедуры
torrensen
Цитата(logist @ 22.02.11, 15:51) необходимо зарегистрироваться для просмотра ссылки
Я бы сделал так:
&НаСервереБезКонтекста
Функция ПолучитьЕдиницуИзмерения(Номенклатура)
             Возврат Номенклатура.ЕдиницыИзмерения;
КонецФункции

&НаКлиенте
Процедура СписокТоваровНоменклатураПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
        Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Номенклатура) Тогда
            СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.ИзвлечЦену(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура, Объект.ВидЦены);
                СтрокаТабличнойЧасти.ЕдиницыИзмерения = ПолучитьЕдиницуИзмерения(СтрокаТабличнойЧасти.Номенклатура);
        Иначе
            СтрокаТабличнойЧасти.Цена = "";
                СтрокаТабличнойЧасти.ЕдиницыИзмерения = Неопределено;
        КонецЕсли;
КонецПроцедуры



Я бы не стал так делать.
У вас 2 серверных вызова РаботаСоСправочниками.ИзвлечьЦену и ПолучитьЕдиницуИзмерения

В моем варианте выше только 1
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.