Имя: Пароль:
1C
1С v8
Нет движений по регистру при проведении документов обработкой
0 Сметанин
 
04.10.13
12:55
Всем доброго дня!

Конфа УПП. РАУЗ. Был режим учета затрат регламентированный. Изменил константу обработкой на регламентированный и управленческий. Перепровожу документы чтобы движения отразились по управленческому учету.
1) Типовой обработкой документов и справочников - не помогло.
2) Сам написал обработку перепроведения - то же, перед проведением распровожу доки - толку нет.
3) Скачал обработку для проведения доков по выбранному регистру, выбираю "Управленческий учет затрат" - не помог8ает.

При этом если док в пользовательско режиме открыть и провести, то движения делаются.
1 ДенисЧ
 
04.10.13
12:56
А отладчик что говорит?
2 Ненавижу 1С
 
гуру
04.10.13
12:58
может надо реквизит "отражать в упр. учете" установить?
3 catena
 
04.10.13
12:59
(0)А может при открытии что-то обрабатывается?
4 Сметанин
 
04.10.13
13:05
(1) Попробую поковыряться. Просто странно доки обработкой проводятся, но движения по этому регистру нет. Перепроводишь руками - все ОК. Конфа почти неизмененная. В интернете ничего не нашел. Что ж может быть то?
5 Сметанин
 
04.10.13
14:22
Может кто-нибудь подскажет где запускается формирование движений по регистру Учет затрат управленческий? Прогнал в отладчике, не смог найти

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

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

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

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

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

    КонецЕсли;
    
    // Разницы по ПБУ18/02
    Если ВидОперации <> Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ВПереработку Тогда
        Если ТаблицаПоУслугам.Количество() > 0 Тогда
            ДвиженияПоРазницамПоУслугам(СтруктураШапкиДокумента, ТаблицаПоУслугам,ПроводкиНУ);
        КонецЕсли;
    КонецЕсли;
    Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда
        Движения.Налоговый.Записать(Ложь);    
    КонецЕсли;

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

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

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

    Если НЕ Отказ Тогда

        // ТОВАР, ТАРА ПО РЕГИСТРУ ТоварыПолученные.
        СтруктТаблицДокумента = Новый Структура;
        ТабИменТара = неопределено;
        ТабИменТовары = Неопределено;

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

        СтруктТаблицДокумента.Вставить("ТаблицаПоТаре", ТаблицаПоТаре);
        

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


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

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

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

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

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

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

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

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

    // Если установлен флаг РегистрироватьЦеныПоставщика, нужно зарегистрировать цены
    Если РегистрироватьЦеныПоставщика Тогда

        НаборДвижений = Движения.ЦеныНоменклатурыКонтрагентов;

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

        ТаблицаПоТоварамЦены = ТаблицаПоТоварам.Скопировать();
        СпособЗаполненияЦен  = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатурыКонтрагентов;

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

        // Удалим строки с одинаковым товаром и характеристикой.
        МассивСтрокДляУдаления = Новый Массив;
        СписокСвернутыхСтрок   = Новый СписокЗначений;

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

        Для Каждого СтрокаДляУдаления Из МассивСтрокДляУдаления Цикл
            ТаблицаПоТоварамЦены.Удалить(СтрокаДляУдаления);
        КонецЦикла;

        Запрос = Новый Запрос("
        |ВЫБРАТЬ
        |    Цены.Номенклатура КАК Номенклатура,
        |    Цены.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
        |ИЗ
        |    РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК Цены
        |ГДЕ
        |    Цены.Период = &ДатаЦен
        |    И Цены.ТипЦен = &ТипЦен
        |    И Цены.Номенклатура В (&СписокНоменклатуры)
        |");

        Запрос.УстановитьПараметр("ДатаЦен", НачалоДня(Дата));
        Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
        Запрос.УстановитьПараметр("СписокНоменклатуры", ТаблицаПоТоварамЦены.ВыгрузитьКолонку("Номенклатура"));

        СтруктураОтбора = Новый Структура;
        СтруктураОтбора.Вставить("Номенклатура");
        СтруктураОтбора.Вставить("ХарактеристикаНоменклатуры");

        Выборка = Запрос.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл
            СтруктураОтбора.Номенклатура = Выборка.Номенклатура;
            СтруктураОтбора.ХарактеристикаНоменклатуры = Выборка.ХарактеристикаНоменклатуры;

            СтрокиПоТовару = ТаблицаПоТоварамЦены.НайтиСтроки(СтруктураОтбора);
            Для Каждого СтрокаТовара Из СтрокиПоТовару Цикл
                ТаблицаПоТоварамЦены.Удалить(СтрокаТовара);
            КонецЦикла;
        КонецЦикла;

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

        // Недостающие поля.
        ТаблицаДвижений.ЗаполнитьЗначения(ТипЦен,"ТипЦен");

        Если СтруктураШапкиДокумента.Свойство("ВалютаЗаказа") Тогда
            ТаблицаДвижений.ЗаполнитьЗначения(СтруктураШапкиДокумента.ВалютаЗаказа,"Валюта");
        Иначе
            ТаблицаДвижений.ЗаполнитьЗначения(СтруктураШапкиДокумента.ВалютаДокумента,"Валюта");
        КонецЕсли;

        НаборДвижений.мПериод          = Дата;
        НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;

        Если Не Отказ Тогда
            Движения.ЦеныНоменклатурыКонтрагентов.ВыполнитьДвижения();
        КонецЕсли;

    КонецЕсли;
    
    // если вид операции = объекты строительства
    Если ВидОперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ОбъектыСтроительства Тогда
        НаборДвижений = Движения.СтроительствоОбъектовОсновныхСредств;

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

        // Заполним таблицу движений.
        ТаблицаПоОбъектамСтроительства.Колонки.Сумма.Имя      = "СуммаДок";
        ТаблицаПоОбъектамСтроительства.Колонки.Стоимость.Имя = "Сумма";

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

        // Недостающие поля.
        //ТаблицаДвижений.ЗаполнитьЗначения(СкладОрдер,"ДокументРезерва");
        //ТаблицаДвижений.ЗаполнитьЗначения(СкладОрдер.Склад,"Склад");

        НаборДвижений.мПериод            = Дата;
        НаборДвижений.мТаблицаДвижений   = ТаблицаДвиженийОбъектыСтроительства;

   
6 MrStomak
 
04.10.13
14:25
Подпиской на событие проведения движения по этому регистру делаются.
7 Сметанин
 
04.10.13
14:36
(6) Спасибо. ПриПроведенииРасширеннаяАналитикаЗапасовИзменениеСостояния - эта подписка?
8 MrStomak
 
04.10.13
14:52
она
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.