Форум программистов, компьютерный форум, киберфорум
Наши страницы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/39: Рейтинг темы: голосов - 39, средняя оценка - 4.54
MrCrowley
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 6
1

1С 8.2 Розница - "Текущая цена розницы", "Остаток" в форме элемента "Номенклатура"

19.04.2012, 12:50. Просмотров 7814. Ответов 7
Метки нет (Все метки)

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

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

Пробовал делать через запросы к РегитстрыСведений - ЦеныНоменклатурыМагазинов (для отображения цены) и РегистрыНакоплений - ТоварыНаСкладах (для отображения остатков), но опыта работы с запросами у меня полный 0.

Просьба помочь знающих людей!
Конфигурация 1С 8.2 Розница для Украины (думаю, отличия от Розница для России несущественны для реализации задачи).
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2012, 12:50
Ответы с готовыми решениями:

Для заданого 0<=n<=200.Расматриваемого как возраст человека,вывести фразу вида: "Мне 21 год", "Мне 32 года", "мне 12 лет".
МОЙ ВОЗРАСТ. Для заданого 0&lt;=n&lt;=200.Расматриваемого как возраст человека,вывести фразу вида: &quot;Мне...

Cоздать ссылку на реквизит "Наименование" справочника "Специалисты" из справочника "ЗаявкаНаОбучениеКлиентов"
Пожалуйста, подскажите. Необходимо создать ссылку на реквизит &quot;Наименование&quot; справочника...

Кто может поделиться конфигурацией и базой для "общепита" или "ресторана", хочу потестить
Кто может поделиться конфигурацией и базой для 1с предприятие общепит или ресторан, хочу потестить.

DVD-диском от книги "Профессиональная разработка в системе "1С: Предприятие 8" в двух томах"
Добрый день, товарищи! Есть такая книга: У кого есть от нее DVD? Поделитесь, пожалуйста, если у...

Вывести фразу вида: "Мне 21 год", "Мне 32 года", "мне 12 лет"
МОЙ ВОЗРАСТ. Для заданого 0&lt;=n&lt;=200.Расматриваемого как возраст человека,вывести фразу вида: &quot;Мне...

7
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
19.04.2012, 12:55 2
Цитата Сообщение от MrCrowley Посмотреть сообщение
Соответствующие реквизиты и сами поля добавил и взаимосвязал (реквизиты с полями),
Это неправильно. Реквизиты служат для хранения значений. А вашем случае их нужно только показать.
Цитата Сообщение от MrCrowley Посмотреть сообщение
Пробовал делать через запросы к РегитстрыСведений - ЦеныНоменклатурыМагазинов (для отображения цены) и РегистрыНакоплений - ТоварыНаСкладах (для отображения остатков), но опыта работы с запросами у меня полный 0.
Показывайте код. Будем смотреть что не так.
0
MrCrowley
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 6
19.04.2012, 14:34  [ТС] 3
В Рознице есть общий модуль "Ценообразование", и в нем есть процедура:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
Функция ПолучитьЦенуНоменклатурыВРознице(ДатаПараметр = Неопределено, МагазинСклад, Номенклатура, ХарактеристикаНоменклатуры = Неопределено, ЕдиницаИзмерения = Неопределено) Экспорт
    
    ПолученнаяЦена = 0;
    
    Если ЕдиницаИзмерения = Неопределено Тогда
        ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.ПустаяСсылка(); // для услуг
    КонецЕсли;
    
    Если Номенклатура.ПодарочныйСертификат Тогда
        ПолученнаяЦена = Номенклатура.Номинал;
        
        Если ЗначениеЗаполнено(ЕдиницаИзмерения) И НЕ ЕдиницаИзмерения = Номенклатура.ЕдиницаХраненияОстатков Тогда
            ПолученнаяЦена = ПолученнаяЦена * ЕдиницаИзмерения.Коэффициент / Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
        КонецЕсли;
        
        Возврат ПолученнаяЦена;
    КонецЕсли;
    
    
    Дата = ПолучитьАктуальнуюДатуРасчетаЦен(ДатаПараметр);
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Дата", Дата);
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("ХарактеристикиНоменклатуры", ПолучитьМассивХарактеристик(ХарактеристикаНоменклатуры));
    Если ТипЗнч(МагазинСклад) = Тип("СправочникСсылка.Склады") Тогда
        Магазин = МагазинСклад.Магазин;
    Иначе
        Магазин = МагазинСклад;
    КонецЕсли;
    
    Запрос.УстановитьПараметр("МагазинСклад", Магазин);
    
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                   |    ЦеныНоменклатурыСрезПоследних.Цена,
                   |    ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения
                   |ИЗ
                   |    РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних(
                   |        &Дата,
                   |        Номенклатура = &Номенклатура
                   |            И ХарактеристикаНоменклатуры В (&ХарактеристикиНоменклатуры)
                   |            И Магазин = &МагазинСклад) КАК ЦеныНоменклатурыСрезПоследних
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры УБЫВ";
 
    РезультатЗапроса = Запрос.Выполнить();
    
    Если РезультатЗапроса.Пустой() Тогда
        
        //может быть это характеристика
        Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |   ЦеныНоменклатурыМагазиновСрезПоследних.Цена,
        |   ЦеныНоменклатурыМагазиновСрезПоследних.ЕдиницаИзмерения
        |ИЗ
        |   РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних(
        |           &Дата,
        |           Номенклатура В
        |                   (ВЫБРАТЬ ПЕРВЫЕ 1
        |                       НоменклатураПолученнаяИзХарактеристик.НоменклатураВладелец
        |                   ИЗ
        |                       РегистрСведений.НоменклатураПолученнаяИзХарактеристик КАК НоменклатураПолученнаяИзХарактеристик
        |                   ГДЕ
        |                       НоменклатураПолученнаяИзХарактеристик.НоменклатураХарактеристика = &Номенклатура)
        |               И Магазин = &МагазинСклад) КАК ЦеныНоменклатурыМагазиновСрезПоследних";
        
        РезультатЗапроса = Запрос.Выполнить();
        
    КонецЕсли;
    
    Если Не РезультатЗапроса.Пустой() Тогда
        
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        
        ПолученнаяЦена = Выборка.Цена;
        ПолученнаяЦена = ПересчитатьЦенуПриИзмененииЕдиницы(ПолученнаяЦена, Выборка.ЕдиницаИзмерения, ЕдиницаИзмерения);
        ПолученнаяЦена = Окр(ПолученнаяЦена, 2, РежимОкругления.Окр15как20);
        
    КонецЕсли;
    
    ПолученнаяЦена = ПривестиЦенуВСоотвествиеСМинимальнойЦеной(ПолученнаяЦена, Дата, Магазин, Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения);
    
    Возврат ПолученнаяЦена;
Но как именно правильно её прописать в процедуре "Перед открытием" Формы элемента "Номенклатура", к сожалению, не знаю.

Фактически,
Дата
1C
1
Дата = ТекущаяДата()
,
хотя это вряд-ли правильно, т.к. нужно прописать дату со временем, а не просто дату.

МагазинСклад
1C
1
Магазин = ПараметрыСеанса.ТекущийМагазин;
А вот как прописать Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения - не знаю.

---

В документе "Установка цен в магазине" используется эта процедура, там она прописана так:
1C
1
2
3
4
5
6
Процедура ПриИзмененииНоменклатурыТоваров(СтрокаТабличнойЧасти)
 
    СтрокаТабличнойЧасти.ЦенаВРозницеСтарая = Ценообразование.ПолучитьЦенуНоменклатурыВРознице(Дата, 
    Магазин, СтрокаТабличнойЧасти.Номенклатура, СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры);
 
КонецПроцедуры // ПриИзмененииНоменклатурыТоваров(СтрокаТабличнойЧасти)
P.S. У меня в базе не ведется учет по характеристикам
0
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
19.04.2012, 14:39 4
Пропишите номенклатуру как ЭтотОъект.Ссылка. Параметры функции ХарактеристикаНоменклатуры и ЕдиницаИзмерения - не обязательные.
1
19.04.2012, 14:39
MrCrowley
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 6
19.04.2012, 15:18  [ТС] 5
Круто, огромное спасибо, с ценой всё получилось... сейчас сам по аналогии поиграюсь с выводом остатка

Добавлено через 26 минут
И так, еще раз огромное спасибо Fenomen, очень помогли...
Пропишу все, что проделал, может кому-то это будет полезно.

1. Добавил в форму элемента "Номенклатура" два поля ввода:

Остаток. ТипЗначения=Число, Длина=5, Точность=3 (тут кому как удобно, у меня в базе есть весовой товар).

Цена. ТипЗначения=Число, Длина=5, Точность=2.

2. Дальше в самом модуле в Номенклатура "Перед открытием" прописал:
1C
1
2
3
4
5
6
7
Дата = ТекущаяДата();
Магазин = ПараметрыСеанса.ТекущийМагазин;
Склад = ПараметрыСеанса.ТекущийМагазин.ОсновнойСклад;
Номенклатура = ЭтотОбъект.Ссылка;
    
    ЭлементыФормы.Остаток.Значение = УправлениеЗапасами.ОстатокТовараНаСкладе(Дата, Склад, Номенклатура);
    ЭлементыФормы.Цена.Значение = Ценообразование.ПолучитьЦенуНоменклатурыВРознице(Дата, Магазин, Номенклатура);
Функции "ОстатокТовараНаСкладе" и "ПолучитьЦенуНоменклатурыВРознице" у меня прописаны в общих модулях "УправлениеЗапасами" и "Ценообразование" соответственно.

ОстатокТовараНаСкладе:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Функция ОстатокТовараНаСкладе(Дата, Склад, Номенклатура, ХарактеристикаНоменклатуры = Неопределено) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |   ТоварыНаСкладахОстатки.Номенклатура,
    |   ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
    |ИЗ
    |   РегистрНакопления.ТоварыНаСкладах.Остатки(
    |       &Дата,
    |       Номенклатура = &Номенклатура
    |           " + ?(ХарактеристикаНоменклатуры = Неопределено, "", "И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры") + "
    |           И Склад = &Склад) КАК ТоварыНаСкладахОстатки";
    
    Запрос.УстановитьПараметр("Дата", Дата);
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", ХарактеристикаНоменклатуры);
    Запрос.УстановитьПараметр("Склад", Склад);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Если Выборка.Следующий() Тогда
         Возврат Выборка.Количество;
    Иначе  
        Возврат 0;
    КонецЕсли;
        
КонецФункции
ПолучитьЦенуНоменклатурыВРознице:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
Функция ПолучитьЦенуНоменклатурыВРознице(ДатаПараметр = Неопределено, МагазинСклад, Номенклатура, ХарактеристикаНоменклатуры = Неопределено, ЕдиницаИзмерения = Неопределено) Экспорт
    
    ПолученнаяЦена = 0;
    
    Если ЕдиницаИзмерения = Неопределено Тогда
        ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.ПустаяСсылка(); // для услуг
    КонецЕсли;
    
    Если Номенклатура.ПодарочныйСертификат Тогда
        ПолученнаяЦена = Номенклатура.Номинал;
        
        Если ЗначениеЗаполнено(ЕдиницаИзмерения) И НЕ ЕдиницаИзмерения = Номенклатура.ЕдиницаХраненияОстатков Тогда
            ПолученнаяЦена = ПолученнаяЦена * ЕдиницаИзмерения.Коэффициент / Номенклатура.ЕдиницаХраненияОстатков.Коэффициент 
        КонецЕсли;
        
        Возврат ПолученнаяЦена;
    КонецЕсли;
    
    
    Дата = ПолучитьАктуальнуюДатуРасчетаЦен(ДатаПараметр);
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Дата", Дата);
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("ХарактеристикиНоменклатуры", ПолучитьМассивХарактеристик(ХарактеристикаНоменклатуры));
    Если ТипЗнч(МагазинСклад) = Тип("СправочникСсылка.Склады") Тогда
        Магазин = МагазинСклад.Магазин;
    Иначе
        Магазин = МагазинСклад;
    КонецЕсли;
    
    Запрос.УстановитьПараметр("МагазинСклад", Магазин);
    
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                   |    ЦеныНоменклатурыСрезПоследних.Цена,
                   |    ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения
                   |ИЗ
                   |    РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних(
                   |        &Дата,
                   |        Номенклатура = &Номенклатура
                   |            И ХарактеристикаНоменклатуры В (&ХарактеристикиНоменклатуры)
                   |            И Магазин = &МагазинСклад) КАК ЦеныНоменклатурыСрезПоследних
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры УБЫВ";
 
    РезультатЗапроса = Запрос.Выполнить();
    
    Если РезультатЗапроса.Пустой() Тогда
        
        //может быть это характеристика
        Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |   ЦеныНоменклатурыМагазиновСрезПоследних.Цена,
        |   ЦеныНоменклатурыМагазиновСрезПоследних.ЕдиницаИзмерения
        |ИЗ
        |   РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних(
        |           &Дата,
        |           Номенклатура В
        |                   (ВЫБРАТЬ ПЕРВЫЕ 1
        |                       НоменклатураПолученнаяИзХарактеристик.НоменклатураВладелец
        |                   ИЗ
        |                       РегистрСведений.НоменклатураПолученнаяИзХарактеристик КАК НоменклатураПолученнаяИзХарактеристик
        |                   ГДЕ
        |                       НоменклатураПолученнаяИзХарактеристик.НоменклатураХарактеристика = &Номенклатура)
        |               И Магазин = &МагазинСклад) КАК ЦеныНоменклатурыМагазиновСрезПоследних";
        
        РезультатЗапроса = Запрос.Выполнить();
        
    КонецЕсли;
    
    Если Не РезультатЗапроса.Пустой() Тогда
        
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        
        ПолученнаяЦена = Выборка.Цена;
        ПолученнаяЦена = ПересчитатьЦенуПриИзмененииЕдиницы(ПолученнаяЦена, Выборка.ЕдиницаИзмерения, ЕдиницаИзмерения);
        ПолученнаяЦена = Окр(ПолученнаяЦена, 2, РежимОкругления.Окр15как20);
        
    КонецЕсли;
    
    ПолученнаяЦена = ПривестиЦенуВСоотвествиеСМинимальнойЦеной(ПолученнаяЦена, Дата, Магазин, Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения);
    
    Возврат ПолученнаяЦена;
    
КонецФункции // ПолучитьЦенуНоменклатуры()
0
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
19.04.2012, 16:17 6
Цитата Сообщение от MrCrowley Посмотреть сообщение
Дата = ТекущаяДата();
Магазин = ПараметрыСеанса.ТекущийМагазин;
Склад = ПараметрыСеанса.ТекущийМагазин.ОсновнойСклад;
Номенклатура = ЭтотОбъект.Ссылка;
ЭлементыФормы.Остаток.Значение = УправлениеЗапасами.ОстатокТовараНаСкладе(Дата, Склад, Номенклатура);
ЭлементыФормы.Цена.Значение = Ценообразование.ПолучитьЦенуНоменклатурыВРознице(Дата, Магазин, Номенклатура);
Этот код желательно вставить в условие:
1C
1
Если НЕ ЭтоНовый() Тогда
2
MrCrowley
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 6
19.04.2012, 17:51  [ТС] 7
Ок, так и сделаю
0
fimbulwinter
308 / 308 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
19.04.2012, 19:44 8
Элемент формы обычно связан с реквизитом формы, сл-но
1C
1
2
ЭлементыФормы.Остаток.Значение = УправлениеЗапасами.ОстатокТовараНаСкладе(Дата, Склад, Номенклатура);
ЭлементыФормы.Цена.Значение = Ценообразование.ПолучитьЦенуНоменклатурыВРознице(Дата, Магазин, Номенклатура);
заменить на
1C
1
2
Остаток = УправлениеЗапасами.ОстатокТовараНаСкладе(Дата, Склад, Номенклатура);
Цена = Ценообразование.ПолучитьЦенуНоменклатурыВРознице(Дата, Магазин, Номенклатура);
0
19.04.2012, 19:44
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2012, 19:44

УТ 11.В документе "Заявка на расходование денежных средств" нет кнопки "Печать"!
Добрый день. Появилась необходимость сделать для Заявки на расходование денежных средств...

Не получается скопировать выделенные строчки из справочника "Сотрудники" в форму "Выбор"
Здравствуйте! У меня опыта работы с 1С мало поэтому хотел попросить помощи у более опытных коллег....

Поступление ОС: вкладка "Товары" и "Оборудование".Какая разница? (8.2 Бух 1.2.11)
Форумчане! Поднял тему, думаю кому-то еще будет интересной. Мне непонятно какая разница в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.