Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 ноя 2024, 23:46

исправление ошибок в кодах 1с

Автор Emiliya, 10 мая 2015, 12:22

0 Пользователей и 1 гость просматривают эту тему.

Emiliya

Подскажите как сделать так чтобы поле сотрудник заполнялось само текущим пользователем(Для этого установлен параметр сеанса текущий пользователь)

Вот код
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//Объект.Сотрудник=ПараметрыСеанса.ТекущийПользователь.Наименование;
КонецПроцедуры


//////////////////////////////
Возможно ли добавлять товар в документ в из табличной части справочника
В справочники "ВИДЫ СКИДОК" в табличной части содержатся товары на которые распространяется скидка


////////////////////
в документе запись на занятия необходимо при выборе услуги указывать (помещать в реквизит Объект.КоличествоЕдиниц) ее стоимость

код

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


Общий модуль

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



/////////////////
необходимо в справочник клиенты в поле сумма покупки поместить сумму всех покупок клиента

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


и при каждой новой покупке ее перерасчитывать автоматически
&НаКлиенте
Процедура ОбработкаЗаписиНового(НовыйОбъект, Источник, СтандартнаяОбработка)
СуммаПокупок=ПолучитьСуммуПокупок ();
    Если СуммаПокупок < 10000 Тогда
        Объект.СкидкаКлиента=0;
    ИначеЕсли СуммаПокупок<10000 Тогда
        Объект.СкидкаКлиента=5;
    КонецЕсли;
КонецПроцедуры

Ольгa

Чтобы поле сотрудник заполнялось само текущим пользователем
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Объект.Сотрудник=ПользователиИнформационнойБазы.ТекущийПользователь();
КонецПроцедуры

Лучше реализовать назначение скидок товарам следующим образом (тот вариант которым вы хотите невозможен, т.к. в типе реквизита нельзя указать табличную часть) - создать независимый регистр сведений Скидки (периодичность можно задать в пределах дня) с измерениями Номенклатура (справочник Номенклатура, где все товары), ВидСкидки (например перечисление с значениями видов скидки или же справочник скидки где будут указаны только виды скидок) , ресурс задать - процент (число) скидки например. При такой реализации для каждого товара вы сможете задать индивидуальную скидку на заданный период. А затем в документе указывать в некотором поле вид скидки, а при выборе какого либо товара программно заполнять готовую цену с учетом найденного соответствия товара в регистре сведений. Пример запроса:
ВЫБРАТЬ
  СкидкиНоменклатурыСрезПоследних.Скидка
ИЗ
  РегистрСведений.СкидкиНоменклатуры.СрезПоследних(&Дата,Номенклатура = &Номенклатура И ВидСкидки = &ВидСкидки) КАК СкидкиНоменклатурыСрезПоследних
Такой вызов реализуйте в функции в общем модуле (не забудьте включить в свойствах модуля галку Сервер, Вызов сервера и написать директиву Экспорт для функции получения скидки (в нее передавайте параметры, Товар, ВидСкидки, Дата) и потом эту функцию вызывайте в модуле формы документа:
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
  ОбщийМодуль.ПолучитьСкидку(Элементы.Товары.Номенклатура, Объект.ВидСкидки, Объект.Дата);
КонецПроцедуры

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

Касательно накапливания суммы покупок клиента в регистре накопления используйте запрос по виртуальной таблице. В случае учета продаж обычно используется вид регистра накопления - обороты (можно будет задать период). В случае же выбора вида регистра - остатки можно будет получить результат только на определенную дату. Думаю т.к. вы хотите получать сумму выкупа клиентом при каждом проведении документа покупки, то лучше использовать в запросе виртуальную таблицу остатков, т.е. РегистрНакопления.ПродажиКлиентов.Остатки. Сам же вид регистра можно задать как Обороты, тогда будут доступны виртуальные таблицы как остатков так и оборотов.
Тогда и цикл по накоплению СуммаП вам не понадобится. Вы просто получите уже рассчитаную системой цифру, которую вы возвращаете из вашей функции ПолучитьСуммуПокупок .

Emiliya_Emili

Спасибо, буду знать на будущее как еще можно реализовать,
не могли бы вы помочь с другой ошибкой?
Добавлено: 16 мая 2015, 09:49


Цитата: Ольгa от 16 мая 2015, 09:37
Касательно накапливания суммы покупок клиента в регистре накопления используйте запрос по виртуальной таблице.

не могли бы поподробнее рассказать об этом

Ольгa

Попробуйте такой запрос для того чтобы вытащить накопленную клиентом сумму (с вашей стороны это продажи клиенту):
ВЫБРАТЬ
   ВЫБОР
      КОГДА ПродажиОбороты.СуммаОборот > 10000
         ТОГДА 5
      ИНАЧЕ 0
   КОНЕЦ КАК Скидка
ИЗ
   РегистрНакопления.Продажи.Обороты(, , , Клиент = &Клиент) КАК ПродажиОбороты
Здесь использована виртуальная таблица ПродажиОбороты, которую вы увидите при построении через конструктор запроса. Я не заполняла период, т.е рассчитывается сумма с самой первой даты по дату текущего документа. Полученную цифру скидки вы уже можете использовать как вам нужно ,но стоит подумать как ее хранить, делать это в справочнике не совсем верно

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск