Имя: Пароль:
1C
1С v8
Программный расчет зависимых цен номенклатуры
0 Nevskiy83
 
09.03.15
14:06
Подскажите пожалуйста, программно создаю документ Установка цен номенклатуры. В нем есть Средняя цена поставщика, которая используется как основная, и несколько расчетных цен. Создаю документ так:

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

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

Спасибо.
1 Nevskiy83
 
09.03.15
14:47
Забыл указать Конфигурация УТ 11.1
2 Nevskiy83
 
10.03.15
08:58
Делаю как в типовой конфе. В модуле формы документа УстановкаЦенНоменколатуры

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

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

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


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

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

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

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


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