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

Программный расчет зависимых цен номенклатуры

Автор Nevskiy83, 09 мар 2015, 18:42

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

Nevskiy83

Подскажите пожалуйста, программно создаю документ Установка цен номенклатуры. В нем есть Средняя цена поставщика, которая используется как основная, и несколько расчетных цен. Создаю документ так:

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

Но расчетные цены не формируются, как их рассчитать?

Спасибо.

Nevskiy83

Делаю как в типовой конфе. В модуле формы документа УстановкаЦенНоменколатуры есть такой код.

&НаСервере
Функция РассчитатьЦеныНаСервере(ПараметрыРасчета)
    Возврат УстановкаЦенСервер.РассчитатьЦены(ЭтаФорма, ПараметрыРасчета);
КонецФункции

&НаКлиенте
Процедура РассчитатьЗавершение(Результат, ДополнительныеПараметры) Экспорт
   
    ПараметрыРасчета = Результат;
    Если ПараметрыРасчета <> Неопределено Тогда
       
        ОчиститьСообщения();
        РассчитатьЦеныНаСервере(ПараметрыРасчета);
       
    КонецЕсли;

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


Я во внешней обработке получаю форму созданного документа и пытаюсь ее передать в процедуру РссчитатьЦены, на что получаю ошибку Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.


&НаКлиенте
Процедура СоздатьДокументы(Команда)
    Документ = СоздатьДокументУстановкиЦенНоменклатуры();   
    ПараметрыРасчета = Новый Структура;
    ПараметрыРасчета.Вставить("ВидыЦен", ПолучитьВидыЦен());
    ПараметрыРасчета.Вставить("ТолькоВыделенныеСтроки", Ложь);
    ПараметрыРасчета.Вставить("ЗагрузкаСтарыхЦен", Ложь);
    ПараметрыРасчета.Вставить("ТолькоНезаполненные", Ложь);
    ПараметрыРасчета.Вставить("ОкруглениеРучныхЦен", Ложь);
   
    РассчитатьЦеныНаСервере(Документ, ПараметрыРасчета);
   
    Документ.записать();
       
КонецПроцедуры

&НаСервере
Процедура РассчитатьЦеныНаСервере(Документ, ПараметрыРасчета)
   
    Параметр = Новый Структура("Ключ", Документ);
    мФорма = ПолучитьФорму("Документ.УстановкаЦенНоменклатуры.Форма.ФормаДокумента",Параметр);

    УстановкаЦенСервер.РассчитатьЦены(мФорма, ПараметрыРасчета);
КонецПроцедуры


Можно как-нибудь решить эту проблему?

vitasw

Документ-объект должен присутствовать только на сервере. Зачем вы его с сервера гоняете на клиент а затем снова на сервер?

Nevskiy83

Я хотел использовать типовой механизм пересчета цены. В итоге сделал по другому. Вызвал типовую экспортную функцию из модуля формы.

Параметр = Новый Структура("Ключ", Документ);
мФорма = ПолучитьФорму("Документ.УстановкаЦенНоменклатуры.Форма.ФормаДокумента",Параметр);

мФорма.РассчитатьЗавершение(ПараметрыРасчета, Ложь);


Единственное, теперь не понимаю как сохранить эти изменения в документе?

vitasw


usa223

Подскажите, в итоге удалось решить эту проблему?
У меня точно такая же задача (пересчёт зависимых цен при создании документа УстановкаЦенНоменклатуры), но пока решить не получается.

Теги:

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

Рейтинг@Mail.ru

Поиск