Имя: Пароль:
1C
1С v8
УТ 10.3 пропадают движения по регистру ПартииТоваровНаСкладах
0 bvb
 
17.12.13
13:23
Суть проблемы в следующем  :

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

А их себестоимость оприходуется на другие товары стандартным движением :
Движения.ПартииТоваровНаСкладах.ВыполнитьПриход();

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

Как с этим бороться не пойму вроде на момент формирования прихода движения расхода уже должны быть, но :


НаборДвиженийПартииТоваровНаСкладах.Выгрузить() - возвращает пустую таблицу
1 shuhard
 
17.12.13
13:26
(0) да , код кривой
да, так делать нельзя
2 bvb
 
17.12.13
13:29
КАк ?
Мне нужна движуха по регистру "Списанные товары" + сопутсвующий ей расход по ПартииТоваровНаСкладах по списываемому товару (как в списании)

А затем приход по регистру закупки + приход по ПартииТоваровНаСкладах на товар по которому размазывается себестоимость списываемого товара (как в поступлении доп расходов)
3 Михаил Козлов
 
17.12.13
13:32
Списанные товары - в коллекции движений.
ПартииТоваровНаСкладах, если через ДвижениеПартий, то Прочитать().
4 bvb
 
17.12.13
13:56
ТаблицаДвиженийПартииТоваровНаСкладах = НаборДвиженийПартииТоваровНаСкладах.Выгрузить();
//Заполнил таблицу приходами

//Добавил списания
Движения.ПартииТоваровНаСкладах.Прочитать();     
Для Каждого Движение ИЗ Движения.ПартииТоваровНаСкладах Цикл
   СтрТЗ = ТаблицаДвиженийПартииТоваровНаСкладах.Добавить();
   ЗаполнитьЗначенияСвойств(СтрТЗ,Движение);
КонецЦикла;    

ТаблицаДвиженийПартииТоваровНаСкладах.ЗаполнитьЗначения(Дата, "Период");
ТаблицаДвиженийПартииТоваровНаСкладах.ЗаполнитьЗначения(ЛОЖЬ, "Активность");

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

вроде работает но неприятное ощущение от кривизны кода осталось...
5 vde69
 
модератор
17.12.13
14:01
размазывание - делай в подписке "ПриЗаписи",

тогда у тебя уже есть полный набор еще не записаных движений по всем регистрам...
6 bvb
 
17.12.13
14:02
(5) Не хочу торгать типовую подписку хочу все локализовать в модуле документа
7 shuhard
 
17.12.13
14:03
(6) а низяяяя
8 vde69
 
модератор
17.12.13
14:04
(6) сделай свою подписку, кто мешает?
9 bvb
 
17.12.13
14:05
(7) Почему ?
10 vde69
 
модератор
17.12.13
14:06
(6) вообще я знаю как сделать и в модуле, только не знаю как обьяснить, а код большой будет....
11 bvb
 
17.12.13
14:08
(10) Ну так это работает...
12 vde69
 
модератор
17.12.13
14:09
например у меня сейчас у всех документов проведение такое:


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

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

    // Проверим правильность заполнения шапки документа
    ПроверитьЗаполнениеШапки(СтруктураШапкиДокумента, Отказ, Заголовок);

    СформироватьПолныеДвиженияДокумента (Заголовок, Отказ);
    
КонецПроцедуры // ОбработкаПроведения()

Процедура ПриЗаписи(Отказ)
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    Если не Проведен Тогда
        Заголовок = "Движение документа """ + СокрЛП(Ссылка) + """: ";
        СформироватьПолныеДвиженияДокумента (Заголовок, Отказ);
    КонецЕсли;
    
КонецПроцедуры

Процедура ПередУдалением(Отказ)
    
    ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Ложь, Ложь);
    
КонецПроцедуры
13 bvb
 
17.12.13
14:15
(12) Спасибо изучу
Фокус в том что я по максимуму использовал стандартные процедуры проведения
14 vde69
 
модератор
17.12.13
14:20
(13) там у меня есть как минимум 2 места где я могу модифицировать уже сформированые движения (и кстати я так и делаю). Все единообразно.

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