Имя: Пароль:
1C
1С v8
Помогите нубу
0 Riddler
 
05.05.12
23:33
Народ, помогите пожалуйста, пишу программу в 1с v8.2 для диплома. Суть проблемы:
1. Справочник "Номенклатура" Реквизиты: код, наименование(станд.), Цена.
2. Документ "Накладная" Реквизиты: Дата, Номер, Товар, Цена.
В документе "Накладная" в реквизите "Товар" я выбираю товар из списка (реквизит связан со справочником), далее мне требуется чтобы значение реквизита "Цена" из справочника "Номенклатура" само подставилось в реквизит "Цена" уже в документе "Накладная". Мой код:

&НаКлиенте
Процедура ТоварПриИзменении(Элемент)
   Цена=Товар.Цена;
КонецПроцедуры

Выдает ошибку:
{Документ.Накладная.Форма.ФормаДокумента.Форма(4,7)}: Переменная не определена (Товар)
   Цена=<<?>>Товар.Цена; (Проверка: Тонкий клиент)

Объясните пожалуйста понятным совсем нубу языком, где мой фейл. И как мне следует исправить код, спасибо.
1 vicof
 
05.05.12
23:36
Смотри на свойство ТекущиеДанные
2 m-serg74
 
05.05.12
23:38
Элемент - поле ввода, у него есть Значение, а кто есть Товар действительно ХЗ...
3 НикДляЗапросов
 
05.05.12
23:40
Зачем ты пишешь на упровляемых формах? делай попроще, чи ты 1С потом собрался заниматься?
4 GROOVY
 
05.05.12
23:40
Писец... Сколько можно?!



&НаКлиенте
Процедура СписокТоваровТоварПриИзменении(Элемент)
   Стр = Элементы.СписокТоваров.ТекущиеДанные;
   Стр.Цена = ПолучитьЦенуТовара(Стр.Товар);
   РассчитатьСумму();
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьЦенуТовара(Спр)
   //Возврат Спр.Цена;
   
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |    Товары.Цена
   |ИЗ
   |    Справочник.Товары КАК Товары
   |ГДЕ
   |    Товары.Ссылка = &Ссылка";
   Запрос.УстановитьПараметр("Ссылка", Спр);
   РезультатЗапроса = Запрос.Выполнить();
   
   Данные = РезультатЗапроса.Выбрать();
   Данные.Следующий();
   Возврат Данные.Цена;
   
КонецФункции

&НаКлиенте
Процедура СписокТоваровЦенаПриИзменении(Элемент)
   РассчитатьСумму();
КонецПроцедуры

&НаКлиенте
Процедура СписокТоваровКоличествоПриИзменении(Элемент)
   РассчитатьСумму();
КонецПроцедуры

&НаКлиенте
Процедура РассчитатьСумму()
   Стр = Элементы.СписокТоваров.ТекущиеДанные;
   Стр.Сумма = Стр.Цена * Стр.Количество;
КонецПроцедуры
5 Fragster
 
гуру
05.05.12
23:43
даже в самой простой книжке по 8.2 это есть
6 Fragster
 
гуру
05.05.12
23:43
в 100500 примерах
7 Riddler
 
05.05.12
23:56
Я так и не понял, как должен выглядеть код процедуры, как присвоить значение реквизиту Цена из какого-то справочника?? Можно ли это сделать только на клиенте? не используя сервер

Я сомневаюсь что для такой простейшей ситуации, необходим здоровенный код, наверняка можно как-то просто это сделать, кто знает, напишите код, как примерно он должен выглядеть
8 m-serg74
 
05.05.12
23:56
тебе (4) все достаточно доступно написал!!!
9 НикДляЗапросов
 
05.05.12
23:58
(7) Тебе такой ферзь написал, а ты не слушаешь... я его правда тоже не слушаю
10 Riddler
 
05.05.12
23:58
То есть для выполнения такой простейшей функции необходим таких размеров код, с использованием сервера?? А если у меня нет сервера, у мя прост на клиенте это выполняется
11 НикДляЗапросов
 
06.05.12
00:00
вот и про тоже накой ты заморочился с клиент сервером, тут смыслу понимать надо для чего оно вообще надо
12 vs7719
 
06.05.12
00:01
(10) А вдруг будет сервер, а код уже готов. Маштабируемость!
13 Riddler
 
06.05.12
00:03
Да какой там сервер, я на клиенте это сделать не могу, уже 2ой день бьюсь, никак не получается:<

НикДляЗапросов, как по-твоему мне надо решить мою проблему?
14 GROOVY
 
06.05.12
00:03
На клиенте запрос к базе данных сделать нельзя.
15 Азазелло
 
06.05.12
00:04
(10) "А если у меня нет сервера, у мя прост на клиенте это выполняется"
И данные о ценах у тебя тоже на клиенте хранятся ? :)
16 НикДляЗапросов
 
06.05.12
00:05
Я бы отошел от управляемых форм, но если не хочешь этого делать то слушай GROOVY он в этом деле знает толк
17 НикДляЗапросов
 
06.05.12
00:06
(14) на чтение или на запись или на то и другое?
18 GROOVY
 
06.05.12
00:08
(17) На клиенте есть только данные формы. С БД связи нет. Для чтения надо идти на сервер. Для записи надо конвертировать данные формы в прикладной объект (на сервере) и уже его писать в БД.
19 GROOVY
 
06.05.12
00:08
(13) Ты мне напиши чего не понятно в коде из (4). Я тебе объясню.
20 Riddler
 
06.05.12
00:11
(19) Для начала тупой вопрос: чтобы запиливать функции для сервера, мне нужно его как-то создавать предварительно?
21 Азазелло
 
06.05.12
00:11
(18) Да ладно! Хочешь сказать, что если на клиенте я сделаю, например, Объект.Дата = ТекущаяДата() и вызову Записать(), данные в БД не попадут? Хотя согласен, при этом произойдет вызов сервера.
22 Riddler
 
06.05.12
00:11
Или я сейчас могу функцию написать для сервера, и у меня все будет прекрасно работать
23 GROOVY
 
06.05.12
00:12
(21) ... и конвертация данных формы в прикладной объект.
24 GROOVY
 
06.05.12
00:12
(20) нет.
25 GROOVY
 
06.05.12
00:12
(22) Да
26 Riddler
 
06.05.12
00:13
(24) А то есть я просто в конфигураторе шпарю разные для клиента, для сервера, и потом все работает
27 GROOVY
 
06.05.12
00:14
(26) Ну как то так...
28 Азазелло
 
06.05.12
00:15
(26) Смотря что и где нашпарить :)
29 Riddler
 
06.05.12
00:15
(27) СписокТоваровТоварПриИзменении - "СписокТоваров" - имеется ввиду табличная часть да? а если просто реквизит то я пишу просто "ТоварПриИзменении"
30 Riddler
 
06.05.12
00:16
Стр = Элементы.СписокТоваров.ТекущиеДанные;

И соответственно тут "СписокТоваров" я тоже убераю, если у меня просто реквизит?
31 GROOVY
 
06.05.12
00:17
(29) нет. Или в элементы формы. Мышкой тыркай на нужном реквизите и ищи в палитре свойств события. Тебе надо событие "ПриИзменении". Если просто процедуру описать то событие с ней не будет связано.
32 GROOVY
 
06.05.12
00:17
Или = Иди
33 Phace
 
06.05.12
00:17
(29) Внимательно изучи код в (4) там все есть
34 GROOVY
 
06.05.12
00:18
(30) Если товар не в табличной части то можно читать данные не из элементов формы, а из объекта "Объект.Товар".
35 Riddler
 
06.05.12
00:25
(34)
Процедура СписокТоваровТоварПриИзменении(Элемент)
   Стр = Элементы.СписокТоваров.ТекущиеДанные;
   Стр.Цена = ПолучитьЦенуТовара(Стр.Товар);
   РассчитатьСумму();
КонецПроцедуры

Как я понял, смысл в том что тут переменная стр = строка в табл. части документа. И ей присваивается значение с помощью выполнения функции "ПолучитьЦенуТовара" на основе реквизитов подставляемого товара в реквизит "Товар". Да?
36 GROOVY
 
06.05.12
00:27
"стр = строка в табл. части документа" Да
И ее свойству "Цена" присваивается значение с помощью функции. В функцию передаем товар.
37 Riddler
 
06.05.12
00:29
А если у меня цена и товары в реквизитах, а не в табличной части, то у меня будет просто Цена=ПолучитьЦенуТовара (Объект.Товар)? Или как
38 jsmith
 
06.05.12
00:31
автор, иди лечись
39 Riddler
 
06.05.12
00:31
(38) Изыди демон, я разобраться пытаюсь
40 jsmith
 
06.05.12
00:34
(39) иди не позорься тупыми вопросами
41 m-serg74
 
06.05.12
00:35
ну да в сабже - помогите, в (4) помогли, ты до 40 уже догнал, а теперь все идите... я разбираюсь)))
42 Riddler
 
06.05.12
00:36
Ну дак пост (38) по-твоему мне как-то помочь может?
43 jsmith
 
06.05.12
00:38
(42) тебе уже ничего не поможет
44 GROOVY
 
06.05.12
00:40
(37) Сначала пробуй потом пости. Ответ: да.
45 Азазелло
 
06.05.12
00:41
(44) Ага, ща будет "Реквизит Цена не найден"
46 Азазелло
 
06.05.12
00:42
(45) а, гоню, не будет. просто и цена не отобразится в документе
47 m-serg74
 
06.05.12
00:42
))) пятница сквозь субботу в воскресенье...
48 Riddler
 
06.05.12
00:47
Ну кстати все отобразилось)))
49 Riddler
 
06.05.12
00:48
Ток там какая-то ошибка была типа "Преобразование к типу Число не может быть проведено"
50 Riddler
 
06.05.12
00:48
Но цена отобразилась, успех, спасибо))
51 GROOVY
 
06.05.12
00:48
(49) палишся... Тоньше троллить надо.

На какой строке трабла?
52 Riddler
 
06.05.12
00:50
(51) Все, исправил, просто были неполадки с форматом реквизитов, везде где надо поставил число - ошибка больше не вылетает
53 Riddler
 
06.05.12
00:52
Все подставляет, еще и сумму считает, ваще найс) Ладно, конечно подставить кусок когда, изменив названия своих справочников это не сложно, но главное работает, дальше сам буду химичить, разбираться в структуре кода)
54 Riddler
 
06.05.12
00:53
Спасибо)
55 Йохохо
 
06.05.12
01:56
Стр.Цена это форма, она на клиенте
Товар.Цена это скрытое считывание из бд, низя
56 ILM
 
гуру
06.05.12
10:12
(0) Пора запретить писать дипломы на 1С. Только время зря тратят - хорошее целое не получится, а плоого тут уже хватает.
Пусть лучше алгоритмы придумывают, блок-схемки всякие, только не надо программной реализации.
Закон Брукера: Даже маленькая практика стоит большой теории.