Имя: Пароль:
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 места где я могу модифицировать уже сформированые движения (и кстати я так и делаю). Все единообразно.

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