Нужна помощь по 1С 8.1

Тема в разделе "1C и всё что с ней связано", создана пользователем daffinus, 17 июн 2009.

  1. daffinus

    daffinus Гость

    Склады, торговля со скидками,

    В качестве исходной использовать каркасную конфигурацию.
    Добавить в конфигурацию справочник "МестаХранения" (Склады).
    Добавить учет остатков номенклатуры в разрезе складов. Проведение расходной накладной по регистру
    "ОстаткиНоменклатуры" организовать с контролем остатка товаров в разрезе складов
    и со списанием себестоимости по средневзвешенному (по складу) методу.
    Добавить автоматический расчет скидки покупателю при оформлении расходной накладной. Размер скидки зависит от
    суммы уже произведенных закупок в предыдущем месяце:
    Объем закупки Процент скидки
    от 1 000 р 2 %
    от 3 000 р 5 %
    от 5 000 р 10 %
    от 10 000 р 15 %

    При подборе товара цена должна рассчитываться следующим образом:
    Цена = ЦенаЧист*(100-ПроцСкидки)/100
    При изменении клиента должны: устанавливаться соответствующий ему процент скидки;
    пересчитываться цены в строках накладной.

    Может кто помочь? Нужен код модуля документа «Расходная»
     
  2. WildAnther

    WildAnther Гость

    Это я как понимаю задание по учебе? Чем конкретно попочь то? задачу полностью решить?
    Делать что нить пробовал?
     
  3. daffinus

    daffinus Гость

    Пробовал :) У меня получился такой код, но:
    1) Цена не уменьшается (100-15/100),итог суммы не уменьшается.
    2) Процент не находится, хотя выборка в конструкторе запроса проходит нормально.

    Собственно,код:


    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    СуммаДокумента=Товары.Итог("Сумма")+Издержки.Итог("Сумма");
    КонецПроцедуры

    Процедура ОбработкаПроведения(Отказ, Режим)

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

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


    Если Отказ Тогда
    Сообщить(ТекстСообщения);
    Возврат;
    КонецЕсли;


    Для Каждого ТекСтрокаТовары Из Товары Цикл
    Товар=Новый Структура("Номенклатура",ТекСтрокаТовары.Номенклатура);
    КоличествоНаСписание=ТекСтрокаТовары.Количество;

    Пока КоличествоНаСписание>0 Цикл
    Выборка.НайтиСледующий(Товар);

    Если Выборка.ОстатокНаСкладе>=КоличествоНаСписание Тогда
    Движение = Движения.Продажи.Добавить();
    Движение.Период = Дата;
    Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
    Движение.Контрагент = Контрагент;
    Движение.Количество = КоличествоНаСписание;
    //Процент = Выборка.Процент;
    Движение.Сумма = ТекСтрокаТовары.Цена*((100-15)/100)*КоличествоНаСписание;
    // Цена = ЦенаЧист*(100-ПроцСкидки)/100
    //ОСтатки
    Движение = Движения.ОстаткиНоменклатуры.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
    Движение.Количество = КоличествоНаСписание;
    Движение.Сумма = КоличествоНаСписание*Выборка.СуммаОстаток/Выборка.ОстатокНаСкладе;

    КоличествоНаСписание=0;
    Иначе
    Движение = Движения.Продажи.Добавить();
    Движение.Период = Дата;
    Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
    Движение.Контрагент = Контрагент;
    Движение.Количество = Выборка.КоличествоПартии;
    Движение.Сумма = ТекСтрокаТовары.Цена*КоличествоНаСписание;


    // регистр ОстаткиНоменклатуры
    Движение = Движения.ОстаткиНоменклатуры.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
    Движение.Склад =Склад;
    Движение.Количество = ТекСтрокаТовары.Количество;
    Движение.Сумма =ТекСтрокаТовары.Сумма ;
    //КоличествоНаСписание=КоличествоНаСписание-Выборка.КоличествоПартии;
    КонецЕсли;
    КонецЦикла;
    Выборка.Сбросить();
    КонецЦикла;
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ


    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    //Для Каждого ТекСтрокаТовары Из Товары Цикл
    // регистр ОстаткиНоменклатуры Приход
    //Движение = Движения.ОстаткиНоменклатуры.Добавить();
    // Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    // Движение.Период = Дата;
    // Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
    // Движение.Склад = Склад;
    // Движение.Количество = ТекСтрокаТовары.Количество;
    // Движение.Сумма = ТекСтрокаТовары.Сумма;
    //КонецЦикла;
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

    ///
    //Запрос = Новый Запрос;
    // Запрос.Текст = "ВЫБРАТЬ
    Запрос.Текст = " ВЫБРАТЬ
    |ВЫБОР
    | КОГДА СУММА(ПродажиОбороты.СуммаОборот) > 1000
    | И СУММА(ПродажиОбороты.СуммаОборот) <= 3000
    | ТОГДА 2
    | КОГДА СУММА(ПродажиОбороты.СуммаОборот) > 3000
    | И СУММА(ПродажиОбороты.СуммаОборот) <= 5000
    | ТОГДА 5
    | КОГДА СУММА(ПродажиОбороты.СуммаОборот) > 5000
    | И СУММА(ПродажиОбороты.СуммаОборот) <= 10000
    | ТОГДА 10
    | КОГДА СУММА(ПродажиОбороты.СуммаОборот) > 10000
    | ТОГДА 15
    | ИНАЧЕ 0
    | КОНЕЦ КАК Процент
    //|ПродажиОбороты.Контрагент
    |ИЗ
    |РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, , Контрагент = &Контрагент) КАК ПродажиОбороты";

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



    /// Выборка = Результат.Выбрать();


    КонецПроцедуры

    Заранее спасибо!
     
  4. has

    has Гость

    видимо я не соображаю что-то.... выборка не пустая, а процент не находит что-ли?
     
  5. daffinus

    daffinus Гость

    Процент считает, но потом никак не использует его и пишет что поле не определено.
     
  6. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    в первом тексте запроса чтото я не увидел поля с именем "процент"
     
  7. daffinus

    daffinus Гость

    То есть? Куда его там вставить?
     
  8. has

    has Гость

    я бы сделал соединение запросов по контрагенту
     
  9. DjAlex

    DjAlex Гость

Загрузка...

Поделиться этой страницей