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

Торговля и склад (проставление веса в реализации)

Автор 3d_killer, 14 янв 2011, 11:12

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

3d_killer

Добрый день всем, у меня вопрос как сделать что бы проставлялся вес товара в реализации(розница), а так же при подборе номенклатуры, дополнительную колонку в подборе для веса я сделал, а как его выдернуть из номенклатуры разобраться не могу.
Заранее благодарен.

3d_killer

Ниже приведен код процедуры добавить позицию в подборе, * я указал что добавил в тексте но вывода веса нет, отображается пустая колонка  :(



Процедура ДобавитьПозицию(ВыбНоменклатура)
   
   Перем Рез, Поз, ТовЦена;

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

         // пересчитаем цены в валюту документа
         ПересчитатьЦены(ВыбНоменклатура, Цена, НаСкладе);
      КонецЕсли;
         
   ИначеЕсли ЦенаВподборе = "ИзСправочника" Тогда
      
      // цену получаем только в том случае, если в документе был выбран тип цен и валюта
      Если ПолучитьЦенуНоменклатуры(ВыбНоменклатура, ВозврЕдиница, ВозврЦена, ВозврВалюта) = 1 Тогда // есть цена
         Цена = глПересчет(ВозврЦена,ВозврВалюта,глКурсДляВалюты(ВозврВалюта, РасчДата),
                                     Валюта, Курс, глКратностьДляВалюты(ВозврВалюта, РасчДата), Кратность);
      КонецЕсли;
   КонецЕсли;
                
   Если Запрашивать.ТекущаяСтрока() = 2 Тогда // количество
      
      // формируем список параметров для передачи в обработку
      Параметр   = СоздатьОбъект("СписокЗначений");
      Параметр.ДобавитьЗначение(ВыбНоменклатура       , "Номенклатура");
      Параметр.ДобавитьЗначение(Колво                  , "Количество");
      Параметр.ДобавитьЗначение(ВозврЕдиница          , "Единица");
      Параметр.ДобавитьЗначение(Цена                  , "Цена");   
      Параметр.ДобавитьЗначение(ДобавлятьКомплектующие, "ДобавлятьКомплектующие");
      //*********************************************************
      Параметр.ДобавитьЗначение(ВозврВес               , "Вес");
      //*********************************************************
       
      // открываем форму обработки
      ОткрытьФормуМодально("Обработка.ВводКоличества", Параметр);
         
      // получаем параметр возврата.
      Если Параметр.Получить("СтатусВозврата") = 0 Тогда
          Возврат;
      КонецЕсли;
            
      Колво                   = Параметр.Получить("Количество");
      ВозврЕдиница            = Параметр.Получить("Единица");
      Цена                   = Параметр.Получить("Цена");
      ДобавлятьКомплектующие   = Параметр.Получить("ДобавлятьКомплектующие");
      //***********************************************************************
      ВозврВес            = Параметр.Получить("Вес");
      //***********************************************************************
   ИначеЕсли Запрашивать.ТекущаяСтрока() = 3 Тогда // количество и цену
      
      // формируем список параметров для передачи в обработку
      Параметр   = СоздатьОбъект("СписокЗначений");
      Параметр.ДобавитьЗначение(ВыбНоменклатура       , "Номенклатура");
      Параметр.ДобавитьЗначение(Колво                  , "Количество");   
      Параметр.ДобавитьЗначение(ВозврЕдиница          , "Единица");   
      Параметр.ДобавитьЗначение(Цена                  , "Цена");   
      Параметр.ДобавитьЗначение(Валюта               , "Валюта");   
      Параметр.ДобавитьЗначение(ДобавлятьКомплектующие, "ДобавлятьКомплектующие");
      //**********************************************************************
      Параметр.ДобавитьЗначение(ВозврВес          , "Вес");
      //**********************************************************************
       
      // открываем форму обработки
      ОткрытьФормуМодально("Обработка.ВводКоличестваИЦены", Параметр);
         
      // получаем параметр возврата.
      Если Параметр.Получить("СтатусВозврата") = 0 Тогда
          Возврат;
      КонецЕсли;
            
      Колво                   = Параметр.Получить("Количество");
      ВозврЕдиница            = Параметр.Получить("Единица");
      Цена                   = Параметр.Получить("Цена");
      ДобавлятьКомплектующие   = Параметр.Получить("ДобавлятьКомплектующие"); 
      //***********************************************************************
      ВозврВес            = Параметр.Получить("Вес");
      //***********************************************************************
      
   Иначе // ничего не запрашивать
      
      // Для комплектов надо спросить что добавляем: сам комплект или комплектующие
      Если ПустоеЗначение(глКомплектуется(ВыбНоменклатура)) = 0 Тогда
         Выбрали = МенюДляКомплектов.ВыбратьЗначение(Рез, "",Поз, 60, 1);
         Если Выбрали = 1 Тогда
            ДобавлятьКомплектующие = Поз - 1;
         Иначе // ничего не выбрали или кончился таймаут
            Возврат;
         КонецЕсли;
         
      КонецЕсли;

   КонецЕсли;
   
   Если ДобавлятьКомплектующие  = 1 Тогда           
      
      // Надо добавить все комплектующие
      СпрКомплектация = СоздатьОбъект("Справочник.Комплектация");
      СпрКомплектация.ИспользоватьВладельца(ВыбНоменклатура);
      Если СпрКомплектация.ВыбратьЭлементы() = 1 Тогда
         Пока СпрКомплектация.ПолучитьЭлемент() = 1 Цикл
            ДобНоменклатура = СпрКомплектация.Номенклатура;
            
            // Расчитаем количество комплектующего в его базовых единицах,
            // считая, что количество комплекующего измеряется в базовых единицах
            // в одной базовой единице комплекта
            ДобКолво = Колво * ВозврЕдиница.Коэффициент * СпрКомплектация.Количество;
            ДобЦена = 0;
            
            Если ЦенаВподборе <> "Нет" Тогда
               
               Если ЦенаВподборе = "Розница" Тогда
                  Если (ДобНоменклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга)
                   или (ДобНоменклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда
            
                     // Для услуг розничную цену берем из справочника
                     РознТипЦен = Константа.РозничныйТипЦен;
                     Если РознТипЦен.Выбран() = 1 Тогда           
                        ДобЕдиница = "";
                        глВернутьЦену(ДобНоменклатура, РознТипЦен, РасчДата, ДобЦена, ДобЕдиница);
                        ДобЦена = ?(ПустоеЗначение(ДобЕдиница.Коэффициент) = 1, 0, ДобЦена / ДобЕдиница.Коэффициент) ;
                     КонецЕсли;                                             
                     
                  Иначе // получим цену из регистра
                     Врем = "";
                     глПолучитьРозничныйОстатокЦену(ДобНоменклатура, ДобНоменклатура.БазоваяЕдиница, ОстаткиТМЦ, , Врем);
                     СписЦен = ЗначениеИзСтроки(Врем);
                     Если СписЦен.РазмерСписка() > 0 Тогда   // берем порвую цену в списке
                        ДобЦена = СписЦен.ПолучитьЗначение(1);
                     КонецЕсли;
                     ВозврВалюта = глРубли;   
                  КонецЕсли;
               Иначе                                                         
                  ДобЕдиница = "";
                  Если ПолучитьЦенуНоменклатуры(ДобНоменклатура, ДобЕдиница, ДобЦена, ВозврВалюта) <> 0 Тогда // есть цена
                     
                     // Приведем цену к базовой единице (от единицы цены)
                     ДобЦена = ?(ПустоеЗначение(ДобЕдиница.Коэффициент) = 1, 0, ДобЦена / ДобЕдиница.Коэффициент) ;
                  КонецЕсли;
               КонецЕсли;
            
               ДобЦена = глПересчет(ДобЦена,ВозврВалюта,глКурсДляВалюты(ВозврВалюта, РасчДата),
                                  Валюта, Курс, глКратностьДляВалюты(ВозврВалюта, РасчДата), Кратность);
            КонецЕсли;
                     
            ДобавитьОднуПозицию(ДобНоменклатура, ДобКолво, ДобНоменклатура.БазоваяЕдиница, ДобНоменклатура.РеквВесБазовой , ДобЦена);
               
         КонецЦикла;
      КонецЕсли;
      
   Иначе // Доваляем сам комплект (выбранную позицию)
      Если ЦенаВподборе <> "Нет" Тогда
         Если ТипЗначенияСтр(Цена) = "СписокЗначений" Тогда
            Если Цена.РазмерСписка() > 0 Тогда   // берем первую цену
               Цена = Цена.ПолучитьЗначение(1);
            Иначе
               Цена = 0;
            КонецЕсли;
         КонецЕсли;
         
      КонецЕсли;
      ДобавитьОднуПозицию(ВыбНоменклатура, Колво, ВозврЕдиница, Цена, ВозврВес);
   КонецЕсли;
   
КонецПроцедуры // ДобавитьПозицию()

3d_killer

Все спасибо тебе большое, разобрался те все изменения не нужны оставить только первое только в виде:

ВозврВес = ВыбНоменклатура.БазоваяЕдиница.Вес


Теги:

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

Рейтинг@Mail.ru

Поиск