Имя: Пароль:
1C
1С v8
Как в УТ 10.3 при проведении комплектации увеличивать себестоимость товаров?
0 ded20ded
 
08.04.15
13:53
Как в УТ 10.3 при проведении комплектации увеличивать себестоимость товаров? Подскажите какой регистр нужно увеличить сумму не могу найти где сумма проставляется в регистр при проведении.
1 AlexSmirnov272
 
08.04.15
13:59
рег. Партии товаров
2 ded20ded
 
08.04.15
15:10
// По результату запроса по шапке документа формируем движения по регистрам.
//
// Параметры:
//  РежимПроведения           - режим проведения документа (оперативный или неоперативный),
//  СтруктураШапкиДокумента   - выборка из результата запроса по шапке документа,
//  ТаблицаПоКомплектующим    - таблица значений, содержащая данные для проведения и проверки ТЧ ТаблицаПоКомплектующим
//  ТаблицаПоКомплектам       - таблица значений, содержащая данные для проведения и проверки по комплектам,
//  Отказ                     - флаг отказа в проведении,
//  Заголовок                 - строка, заголовок сообщения об ошибке проведения.
//
Процедура ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоКомплектующим, ТаблицаПоКомплектам, Отказ, Заголовок);

    ДвиженияПоРегистрамУпр(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоКомплектующим, ТаблицаПоКомплектам, Отказ, Заголовок);
    ДвиженияПоТоварамОрганизаций(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоКомплектующим, ТаблицаПоКомплектам, Отказ, Заголовок);
    ДвиженияПоСписаннымТоварам(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоКомплектующим, ТаблицаПоКомплектам, Отказ, Заголовок);

    УчетнаяПолитика = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата);

    Если ОтражатьВУправленческомУчете Тогда
        ЗаписьРегистрации = ПринадлежностьПоследовательностям.ПартионныйУчет.Добавить();
        ЗаписьРегистрации.Период      = Дата;
    КонецЕсли;

    Если УчетнаяПолитика.СписыватьПартииПриПроведенииДокументов Тогда

        // Проведение по партиям остановим в том случае, если не хватит хоть одного комплектующего.
        УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров(Ссылка,Движения.СписанныеТовары.Выгрузить(),,,,,Истина);

    Иначе

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

    КонецЕсли;

КонецПроцедуры // ДвиженияПоРегистрам()

Процедура ДвиженияПоРегистрамУпр(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоКомплектующим, ТаблицаПоКомплектам, Отказ, Заголовок)
    
    // Движения по документу.

    Если ОтражатьВУправленческомУчете Тогда

        // ТОВАРЫ ПО РЕГИСТРУ ТоварыНаСкладах

        // По комплектующим.
        Если СтруктураШапкиДокумента.ВидСклада = Перечисления.ВидыСкладов.Розничный Тогда
            НаборДвижений = Движения.ТоварыВРознице;
        Иначе
            НаборДвижений = Движения.ТоварыНаСкладах;
        КонецЕсли;

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

                Если ВидОперации = Перечисления.ВидыОперацийКомплектацияНоменклатуры.Разукомплектация Тогда
                    // Проверка наличия продажных цен на приходуемый товар.
                    УправлениеРозничнойТорговлей.ПроверитьЧтоДляРозничныхСкладовЗаполненаСуммаПродажная(ЭтотОбъект, "Комплектующие", ТаблицыДанныхДокумента["ТаблицаПоКомплектующим"], Отказ, Заголовок);
                КонецЕсли;
            КонецЕсли;
                    
            ВидДвижения = ?( ВидОперации = Перечисления.ВидыОперацийКомплектацияНоменклатуры.Комплектация, ВидДвиженияНакопления.Расход, ВидДвиженияНакопления.Приход);
            ОбщегоНазначения.ЗаписатьТаблицыДокументаВРегистр(НаборДвижений, ВидДвижения, ТаблицыДанныхДокумента, Дата);
            
        КонецЕсли;

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

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

        // По комплектам
        Если СтруктураШапкиДокумента.ВидСклада = Перечисления.ВидыСкладов.Розничный Тогда
            НаборДвижений = Движения.ТоварыВРознице;
        Иначе
            НаборДвижений = Движения.ТоварыНаСкладах;
        КонецЕсли;

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

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

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

                        Для Каждого СтрокаДок Из ТаблицаПоКомплектамИзРезерва Цикл

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

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

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

    КонецЕсли;
    
КонецПроцедуры

нет тут суммы товаров, которые вошли в себестоимость комплекта
3 AlexSmirnov272
 
08.04.15
15:48
Себестоимость - это очень важная вещь в партионном учете, если хочешь ее изменить - нужны очень веские основания, а ее изменение производится специальными документами.
4 Джинн
 
08.04.15
15:54
(0) С какого перепугу она должна увеличиваться?
5 AlexSmirnov272
 
08.04.15
16:01
(4)  ))) не ведают, что сотворить хотят
6 bolobol
 
08.04.15
16:30
Затраты на ЗП, хотя бы, понесли при комплектации - новая себестоимость. Производство, типа.
7 vde69
 
08.04.15
16:32
для этого в табличные части комплектухи нужно включать услуги
8 bolobol
 
08.04.15
16:36
а их не включить туда.
9 Михаил Козлов
 
08.04.15
16:37
(7) А она там есть?
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.