Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
15 Дек 2017, 11:31
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: исправление ошибок в кодах 1с  (Прочитано 1237 раз)

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

Оффлайн Emiliya

  • *
  • Сообщений: 1
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-05-10
  • Сайт: 
  • Профессия: Ученик 1С
Подскажите как сделать так чтобы поле сотрудник заполнялось само текущим пользователем(Для этого установлен параметр сеанса текущий пользователь)

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

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


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

код

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


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


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

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

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


Оффлайн Ольгa

  • *
  • Сообщений: 3
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-05-16
  • Сайт: 
  • Профессия: Программист 1С
Чтобы поле сотрудник заполнялось само текущим пользователем
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Объект.Сотрудник=ПользователиИнформационнойБазы.ТекущийПользователь();
КонецПроцедуры

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

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

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

Оффлайн Emiliya_Emili

  • *
  • Сообщений: 2
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-04-28
  • Сайт: 
  • Профессия: Ученик 1С
Спасибо, буду знать на будущее как еще можно реализовать,
не могли бы вы помочь с другой ошибкой?
Добавлено: 16 Май 2015, 09:49

Касательно накапливания суммы покупок клиента в регистре накопления используйте запрос по виртуальной таблице.

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

Оффлайн Ольгa

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


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
177 Сообщений
ilyay ilyay
69 Сообщений
oleg-x
48 Сообщений
AIFrame
46 Сообщений
alex0402
44 Сообщений
andron81_81
38 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
Golickoff Golickoff
31 Сообщений
BuhRust
30 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 860
  • Точка Скрытых: 0
  • Точка Пользователей: 13
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal