Имя: Пароль:
1C
1С v8
Цена по условию
,
0 progaoff
 
22.06.15
12:57
Необходимо выводить нулевую цену в определенные дни на определенную продукцию. Как это возможно реализовать. Создал документ, специальный регистр под это. Теперь надо как то все это реализовать в документе продажи. Подскажите как, заранее благодарен. Платформа 8.2 конфигурация не типовая
1 butterbean
 
22.06.15
12:59
Если ЭтоОпределнныйДень Тогда Цена = 0 КонецЕсли;
2 shuhard_серый
 
22.06.15
12:59
(0) [конфигурация не типовая]
и каких советов ты от форума ждёшь ?
3 mikecool
 
22.06.15
12:59
привязать регистр в модуле подстановки цен и при условии совпадения - выводить 0
4 Maniac
 
22.06.15
13:00
скидка 100 процентов по условию по датам
5 ЛисИзЛеса
 
22.06.15
13:00
Определенные дни.. наверное дни недели?
Тогда можно использовать
ДеньНедели(<Дата>)
который выдаст номер дня в неделе
6 bootini
 
22.06.15
13:00
Скидка 100%
7 ЛисИзЛеса
 
22.06.15
13:04
ВЫБОР КОГДА ДЕНЬНЕДЕЛИ(ТекДата)=7 ТОГДА 0 ИНАЧЕ ЦеныНоменклатуры.Цена КОНЕЦ КАК ЦенаТовара
8 progaoff
 
22.06.15
13:06
Я создал документ, в нем отобразил дату акции организацию так как у меня их много, и табличную часть с товарами, это все проводится по регистру сведений, документ, который делает реализацию, состоит из услуги и материалов, вот теперь не могу связать это все что бы выставить там скидку 100%.
9 Maniac
 
22.06.15
13:07
в товар повесить галку - сто процентов.

в процедуру ПолучитьЦенуНоменклатуры

условие

Если Номенклатура.РеквизитГалка = Истина Тогда
Возврат 0;
КонецЕсли;


Все.
10 progaoff
 
22.06.15
13:08
Я в документ эту галку запихнул.
11 butterbean
 
22.06.15
13:08
(9) ппц
12 progaoff
 
22.06.15
13:08
и как по дате еще условие создать????
13 progaoff
 
22.06.15
13:51
Больше нет вариантов???
14 D_E_S_131
 
22.06.15
14:29
Если нужно по дате, то вместо реквизита справочника используешь периодический РС.
15 progaoff
 
22.06.15
14:32
(14) так и есть. Есть регистр, есть документ который заносит в этот регистр данные. Я не пойму как реализовать саму процедуру проверку (Код программы)
16 Бубка Гоп
 
22.06.15
14:36
(15) запросом, например
17 vicof
 
22.06.15
14:56
(15) почитать книжки не предлагать?
18 progaoff
 
22.06.15
15:04
нет, спасибо, с книжками позже)
19 D_E_S_131
 
22.06.15
15:06
(15) Т.е. данные в регистр занес, а прочитать не можешь эти данные на определенную дату? Или чего вообще (хоть какой-то код нам дай)?
20 progaoff
 
22.06.15
15:10
В том то и проблема, кода нет.... есть конструкция а кода нет никакого....
21 progaoff
 
22.06.15
15:17
Есть регистр
---ИЗЕМРЕНИЯ---
Организация
Номенклатура
---РЕСУРСЫ---
ДатаАкции - тип Дата
БесплатныеМатреиалы - Булево
и Документ "День Акции"
-Организация
-ДатаСобытия
-БесплатныеМатериалы - Булево
-Номенклатура
ТабличнаяЧасть - Товары
22 D_E_S_131
 
22.06.15
15:29
Т.е. данные в РС движениями документа не Вы писали?
23 progaoff
 
22.06.15
15:36
я писал движение...
24 D_E_S_131
 
22.06.15
15:46
(23) Т.е. Вы как бы не "читатель", в этом проблема? :)
Если у Вас при добавлении строки товара в накладную определяется цена, то ищете запросом данные по нужной организации, номенклатуре и дате документа. Если есть данные (накладная выписывается в дату акции), то обнуляете цену.
25 progaoff
 
22.06.15
15:58
(24) можно хоть образно кусок кода???
26 D_E_S_131
 
22.06.15
16:40
Ну вот например так (взято за основу поле Номенклатура в РТУ конфигурации УТ 10.3):

Процедура ПриИзмененииНоменклатурыТовары(Элемент)

    СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;

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

    // Рассчитать реквизиты табличной части.
    ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);

    УчетСерийныхНомеров.ПроверитьСерийныеНомера(СтрокаТабличнойЧасти, ЭтотОбъект);

    // Ввод состава набора
    УправлениеЗапасами.ДобавитьСоставНабора(СтрокаТабличнойЧасти, ЭтотОбъект);

КонецПроцедуры
27 progaoff
 
22.06.15
16:56
(26) Спасибо милый человек! Только хоть убей в упор не вижу на форме процедуру ПриИзменении.....
28 mTema32
 
22.06.15
17:01
(27) "ЭлементыФормы.Товары"
29 VikingKosmo
 
22.06.15
17:04
(27) может ее еще создать нужно?
30 progaoff
 
22.06.15
17:20
Нашел. Только решил товары в регистре не держать, а держать их в отдельном справочнике,
Поле1 это я так понимаю мы отбираем то что нам нужно????
31 Бубка Гоп
 
22.06.15
17:22
(30) ты точно движения сам делал?
32 progaoff
 
22.06.15
17:23
конструктором
33 mTema32
 
22.06.15
17:24
+(31) Не. Без книжек (хотя бы одной) точно не обойтись.

Я лично в целом вопрос ТС понимаю, а вот наводящие у меня ступор вызывают... чего надо?
34 progaoff
 
22.06.15
17:29
Есть товары, которые находятся в определенном справочнике, есть документ, он устанавливает дату акции на определенной организации, Есть регистр который хранит информацию о дате проведения акции и организации. Надо что бы товар который  находится в определенном справочнике выбивался с нулевой ценой в день который установит документ.
35 D_E_S_131
 
22.06.15
17:31
"Только решил товары в регистре не держать, а держать их в отдельном справочнике" — не понял к чему это написано.
Вообще нужно бы увидеть ваш код по установке какой-нибудь цены в документ, при хоть каком-то действии
36 mTema32
 
22.06.15
17:34
(34) В процедуре установки цен в запросе цен поставить условия на дату и позицию номенклатуры.
37 mTema32
 
22.06.15
17:34
+(36) не установки, а получении цен конечно же
38 progaoff
 
22.06.15
17:37
Функция ОбработкаВыбораМатериала(ВыбраннаяСтрока, ЗапрашиватьКоличество, ЗапрашиватьЦену)
    ТЗ_Услуги        =    АктВыполненныхРабот.Выгрузить();
    МассивЭлементов    =    ТЗ_Услуги.ВыгрузитьКолонку("Номенклатура");
    СписокЭлементов    =    Новый СписокЗначений;
    Для Каждого СтрокаМассива Из МассивЭлементов Цикл
        СписокЭлементов.Добавить(СтрокаМассива.Код);
    КонецЦикла;
    
    НоменклатураФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора();
    НоменклатураФормаВыбора.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр    =    Ложь;
    НоменклатураФормаВыбора.Отбор.Код.Использование    =    Истина;
    НоменклатураФормаВыбора.Отбор.Код.ВидСравнения    =    ВидСравнения.ВСписке;
    НоменклатураФормаВыбора.Отбор.Код.Значение        =    СписокЭлементов;
    НоменклатураФормаВыбора.Заголовок = "Выберите услугу, для которой добавляется материал";
    НоменклатураФормаВыбора.ОткрытьМодально();
    ВыбраннаяНоменклатура = НоменклатураФормаВыбора.ЭлементыФормы.СправочникСписок.ТекущаяСтрока;
    Если ВыбраннаяНоменклатура = Неопределено Тогда
        Возврат Неопределено;
    КонецЕсли;
    ЭлементыФормы.АктВыполненныхРабот.ТекущаяСтрока = АктВыполненныхРабот.Найти(ВыбраннаяНоменклатура, "Номенклатура");
    
    Попытка
        Услуга                =    ЭлементыФормы.АктВыполненныхРабот.ТекущаяСтрока.Номенклатура;
        ТекДанные            =    ЭлементыФормы.АктВыполненныхРабот.ТекущиеДанные;
        КоличествоУслуги    =    ТекДанные.Количество * ТекДанные.ЕдИзм.Коэффициент;
    Исключение
    КонецПопытки;
    
    ЕдИзмеренияФормаВыбора = Справочники.ЕдиницыИзмерения.ПолучитьФормуВыбора();
    ЕдИзмеренияФормаВыбора.Отбор.Владелец.Использование    =    Истина;
    ЕдИзмеренияФормаВыбора.Отбор.Владелец.Значение        =    ВыбраннаяСтрока;
    ЕдИзмеренияФормаВыбора.ОткрытьМодально();
    
    ЕдИзмСсылка = ЕдИзмеренияФормаВыбора.ЭлементыФормы.СправочникСписок.ТекущаяСтрока;            
    Если ЕдИзмСсылка = Неопределено Тогда
        Возврат Неопределено;
    КонецЕсли;
    НоменклатураМат    =    ВыбраннаяСтрока;
    Номенклатура    =    Услуга;            
    
    Запрос            =    Новый Запрос;
    Запрос.Текст    =    "ВЫБРАТЬ
    |    СоставУслугиСрезПоследних.Материал,
    |    ЕСТЬNULL(СоставУслугиСрезПоследних.Количество, 0) * ЕСТЬNULL(СоставУслугиСрезПоследних.ЕдиницаИзмерения.Коэффициент, 0) / ВЫБОР
    |        КОГДА ЕСТЬNULL(&коэфф, 0) = 0
    |            ТОГДА 1
    |        ИНАЧЕ &коэфф
    |    КОНЕЦ КАК Количество,
    |    СоставУслугиСрезПоследних.ЕдиницаИзмерения
    |ИЗ
    |    РегистрСведений.СоставУслуги.СрезПоследних КАК СоставУслугиСрезПоследних
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
    |            СоставУслуги.Регистратор КАК Регистратор,
    |            СоставУслуги.Организация КАК Организация
    |        ИЗ
    |            РегистрСведений.СоставУслуги КАК СоставУслуги
    |        ГДЕ
    |            СоставУслуги.Период <= &Период
    |            И СоставУслуги.Номенклатура = &Номенклатура
    |            И (СоставУслуги.Организация = ЗНАЧЕНИЕ(справочник.Организации.пустаяСсылка)
    |                    ИЛИ СоставУслуги.Организация = &организация)
    |        
    |        УПОРЯДОЧИТЬ ПО
    |            Организация УБЫВ) КАК Зап
    |        ПО СоставУслугиСрезПоследних.Регистратор = Зап.Регистратор
    |ГДЕ
    |    СоставУслугиСрезПоследних.Материал = &Материал";
    Запрос.УстановитьПараметр("Номенклатура",    Номенклатура);
    Запрос.УстановитьПараметр("Организация",    Организация);
    Запрос.УстановитьПараметр("Период",            ВремяПриемаС);
    Запрос.УстановитьПараметр("Материал",        НоменклатураМат);
    Если ЗначениеЗаполнено(ЕдИзмСсылка) Тогда
        Запрос.УстановитьПараметр("Коэфф",        ЕдИзмСсылка.Коэффициент);
    Иначе
        Запрос.УстановитьПараметр("Коэфф",        Неопределено);
    КонецЕсли;
    Выборка    =    Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Количество            =    Выборка.Количество;
        ЕдиницаИзмерения    =    Выборка.ЕдиницаИзмерения;
    Иначе
        Количество            =    ?(НоменклатураМат.НормаРасхода <= 0, 1, НоменклатураМат.НормаРасхода);
        ЕдиницаИзмерения    =    НоменклатураМат.ОсновнаяЕдиницаИзмерения;
    КонецЕсли;

    Если ЗапрашиватьКоличество Или ЗапрашиватьЦену Тогда
        ФормаКоличества    =    Обработки.ПодборНоменклатуры.ПолучитьФорму("ВводКоличестваМатериала");
        ФормаКоличества.Материал            =    ВыбраннаяСтрока;
        ФормаКоличества.ЕдиницаИзмерения    =    ЕдИзмСсылка;                                                  
        ФормаКоличества.Количество            =    Количество * ЕдиницаИзмерения.Коэффициент / ЕдИзмСсылка.Коэффициент;
        Попытка
            ФормаКоличества.Цена            =    ОбщегоНазначения.ПолучениеЦены(ВремяПриемаС,
                                                                               ВыбраннаяСтрока,
                                                                               ЕдиницаИзмерения,
                                                                               ЗаявленныйПрейскурант,
                                                                               Организация);
        Исключение
        КонецПопытки;
        ФормаКоличества.ОстаткиНа                                    =    ВремяПриемаС;
        ФормаКоличества.Услуга                                        =    Услуга;
        ФормаКоличества.ЭлементыФормы.Цена.Доступность                =    ЗапрашиватьЦену;
        ФормаКоличества.ЭлементыФормы.Прейскурант.Доступность        =    ЗапрашиватьЦену;
        ФормаКоличества.ЭлементыФормы.Количество.Доступность        =    ЗапрашиватьКоличество;
        ФормаКоличества.ЭлементыФормы.ЕдиницаИзмерения.Доступность    =    ЗапрашиватьКоличество;
        ФормаКоличества.Организация                                    =    Организация;
        ФормаКоличества.Прейскурант                                    =    ЗаявленныйПрейскурант;
        ФормаКоличества.СтароеКоличество                            =    1;
        ФормаКоличества.ПрейскурантПоСтрокам                        =    Истина;
        СтруктураПодбора                                            =    ФормаКоличества.ОткрытьМодально();
        
        СуммаПродажи                =    СтруктураПодбора.Цена * СтруктураПодбора.Количество / СтруктураПодбора.ЕдиницаИзмерения.Коэффициент;
        
        НоваяСтрока = Материалы.Добавить();
        НоваяСтрока.СуммаПродажи    =    СуммаПродажи;
        НоваяСтрока.Прейскурант        =    СтруктураПодбора.Прейскурант;
        НоваяСтрока.ЕдИзм            =    СтруктураПодбора.Номенклатура.БазоваяЕдиницаИзмерения;              
        НоваяСтрока.Количество        =    СтруктураПодбора.Количество * СтруктураПодбора.ЕдиницаИзмерения.Коэффициент;
        НоваяСтрока.Номенклатура    =    СтруктураПодбора.Услуга;
        НоваяСтрока.НоменклатураМат    =    СтруктураПодбора.Номенклатура;
    Иначе
        СуммаПродажи = ЗаполнитьСуммуПродажиМатериала(ВремяПриемаС, НоменклатураМат, ЗаявленныйПрейскурант, Количество) * Количество;
        
        НоваяСтрока = Материалы.Добавить();
        НоваяСтрока.СуммаПродажи    =    СуммаПродажи;
        НоваяСтрока.Прейскурант        =    ЗаявленныйПрейскурант;
        НоваяСтрока.ЕдИзм            =    НоменклатураМат.БазоваяЕдиницаИзмерения;
        НоваяСтрока.Количество        =    Количество;
        НоваяСтрока.Номенклатура    =    Номенклатура;
        НоваяСтрока.НоменклатураМат    =    НоменклатураМат;
    КонецЕсли;
    
    Возврат СтруктураПодбора;
39 Chameleon1980
 
22.06.15
17:40
"...Надо что бы товар который  находится в определенном справочнике..."

Я не знаю как Вы, уважаемая аудитория - я запутался.

Я задачу не понял
40 progaoff
 
22.06.15
17:44
я ее сам не до конца понимаю, логичнее все держать в регистре а не в справочнике, и в документе в табличной части...
41 progaoff
 
22.06.15
17:48
Нужно что бы товары определенные в один прекрасный день, бились либо со 100% скидкой либо с нулевой ценой.
42 Chameleon1980
 
22.06.15
17:50
(40) опять.

конечная цель какая?

"...Необходимо выводить нулевую цену в определенные дни на определенную продукцию..."

куда выводить?

определенные дни - это дни недели или какие другие критические (пардон) дни?

причем тут регистры, документы?
43 D_E_S_131
 
22.06.15
17:54
А вот это "Функция ОбработкаВыбораМатериала()" тоже Вы написали?
44 mTema32
 
22.06.15
17:54
(42) Перевожу:
ТС надо чтобы при создании документа (что-то типа РТиУ) при подстановке в табличную часть "Материалы" цена проставлялась по условию: если по конкретной организации, конкретной номенклатуре есть запись в РС (напр. Дни акции) и день акции совпадает с текущим, то на данную строку в тч проставлялась скидка 100%.
А записи в этот РС делает документ "Дни акции".
45 mTema32
 
22.06.15
17:55
(43)риторический вопрос?
46 progaoff
 
22.06.15
17:55
(42) Конечная цель что бы этот товар был просто бесплатным.
47 progaoff
 
22.06.15
17:56
(43) Это стандартная функция
48 VikingKosmo
 
22.06.15
17:57
(47) а кто ее, простите, стандартизировал?
49 mTema32
 
22.06.15
18:00
(48) Да ладно. Не напрягайте человека) Видно же что какая-то "нетленка".
50 D_E_S_131
 
22.06.15
18:00
Ну вот, судя по коду, у вас в ТЧ даже нет поля "Цена". Есть только расчет суммы по данным из подбора. Вот там можно и вставить код:


Если ТоварПоАкции(Номенклатура) Тогда
   НоваяСтрока.СуммаПродажи    =    0;
Иначе
   НоваяСтрока.СуммаПродажи    =    СуммаПродажи;
КонецЕсли;


И ниже прописать саму функцию ТоварПоАкции() как я Вам в (26) написал.
51 mTema32
 
22.06.15
18:00
Хотя бы из-за таких вот конструкций:
Попытка
бл-бла-бла
Исключение
КонецПопытки;
52 progaoff
 
22.06.15
18:01
Сори ступил, функция написана, другим сотрудником
53 mTema32
 
22.06.15
18:02
(50)
А вот этот как же?
ФормаКоличества.Цена            =  ОбщегоНазначения.ПолучениеЦены(ВремяПриемаС,
                                                                               ВыбраннаяСтрока,
                                                                               ЕдиницаИзмерения,
                                                                               ЗаявленныйПрейскурант,
                                                                               Организация);
54 progaoff
 
22.06.15
18:03
(50) функция нужна полностью или только запрос????
55 D_E_S_131
 
22.06.15
18:10
(53) Это же используется для расчета СуммыПродажи. А в структуру подбора цена не передается.

(54)

Функция ТоварПоАкции(Номенклатура)

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

КонецФункции
56 D_E_S_131
 
22.06.15
18:11
Вместо "СтрокаТабличнойЧасти.Номенклатура" просто "Номенклатура".
57 progaoff
 
23.06.15
09:59
(56) Чет не работает...
58 progaoff
 
23.06.15
10:17
А если допустим, товары которые мне нужны с нулевой ценой, я помещу в папку с определенным названием, и потом от туда их получу, как это в коде будет выглядеть???
59 D_E_S_131
 
23.06.15
10:21
(57) Что именно?
60 progaoff
 
23.06.15
10:52
Запрос
61 progaoff
 
24.06.15
12:38
(59) Есть еще какие нибудь варианты???