Имя: Пароль:
1C
1С v8
Списание товаров.
0 antihacker
 
26.02.14
14:52
Всем привет !

Не могу понять как документ списывает товры. Не понятно от куда то берет сумму и сажает в ДтКт. Ручками указываешь цену в табличной части. Но он их не берет.

Если не берет, то он сумму сажает во время проведения.

А там тока вот это формирует список товаров для проведения.

    РезультатЗапросаПоТоварам = УправлениеЗапасами.СформироватьЗапросПоТабличнойЧасти(ЭтотОбъект, "Товары", СтруктураПолей);

    // Подготовим таблицу товаров для проведения.
    ТаблицаПоТоварам = ПодготовитьТаблицуТоваров(РезультатЗапросаПоТоварам, СтруктураШапкиДокумента);


Функция ПодготовитьТаблицуТоваров Выглядит так.

Функция ПодготовитьТаблицуТоваров(РезультатЗапросаПоТоварам, СтруктураШапкиДокумента)

    ТаблицаТоваров = РезультатЗапросаПоТоварам.Выгрузить();
    
    Возврат ТаблицаТоваров;

КонецФункции // ПодготовитьТаблицуТоваров()

А функция  УправлениеЗапасами.СформироватьЗапросПоТабличнойЧасти выглядит так.

Функция СформироватьЗапросПоТабличнойЧасти(ДокументОбъект, ИмяТабличнойЧасти, СтруктураПолей,
                                           СтруктураСложныхПолей = Неопределено) Экспорт

    Запрос = Новый Запрос;
    ТекстЗапроса = "";
    
    ДокументМетаданные = ДокументОбъект.Метаданные();

    Для Каждого Реквизит Из СтруктураПолей Цикл

        ТекстЗапроса  = ТекстЗапроса + ",
        |    Док." + Реквизит.Значение +
        ?(НЕ ЗначениеЗаполнено(Реквизит.Ключ), "", " КАК " + СокрЛП(Реквизит.Ключ));

    КонецЦикла;
    
    ТекстСоединение="";
    
    Если ТипЗнч(СтруктураСложныхПолей) = Тип("Структура") Тогда // Добавим к запросу конструкции.
        
        Для Каждого Элемент Из СтруктураСложныхПолей Цикл
            
            ТекстЗапроса  = ТекстЗапроса + ",
            | " + Элемент.Значение +
            ?(НЕ ЗначениеЗаполнено(Элемент.Ключ), "", " КАК " + СокрЛП(Элемент.Ключ));
            
        КонецЦикла;
        
        Если СтруктураСложныхПолей.Свойство("Проект") Тогда
            
            Если ИмяТабличнойЧасти = "ОС" Тогда
                ТекстСоединение="
                |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УстановкаПроектовДляНоменклатуры.СрезПоследних(&ДатаДок, НоменклатураПроекта В (ВЫБРАТЬ ОсновноеСредство ИЗ Документ." + ДокументМетаданные.Имя + "."+ СокрЛП(ИмяТабличнойЧасти) + " ГДЕ Ссылка = &ДокументСсылка)) КАК ПроектыНоменклатуры
                |ПО Док.ОсновноеСредство=ПроектыНоменклатуры.НоменклатураПроекта";
                
            ИначеЕсли ИмяТабличнойЧасти = "НМА" Тогда
                ТекстСоединение="
                |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УстановкаПроектовДляНоменклатуры.СрезПоследних(&ДатаДок, НоменклатураПроекта В (ВЫБРАТЬ НематериальныйАктив ИЗ Документ." + ДокументМетаданные.Имя + "."+ СокрЛП(ИмяТабличнойЧасти) + " ГДЕ Ссылка = &ДокументСсылка)) КАК ПроектыНоменклатуры
                |ПО Док.НематериальныйАктив=ПроектыНоменклатуры.НоменклатураПроекта";
                
            Иначе
                
                ТекстСоединение="
                |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УстановкаПроектовДляНоменклатуры.СрезПоследних(&ДатаДок, НоменклатураПроекта В (ВЫБРАТЬ Номенклатура ИЗ Документ." + ДокументМетаданные.Имя + "."+ СокрЛП(ИмяТабличнойЧасти) + " ГДЕ Ссылка = &ДокументСсылка)) КАК ПроектыНоменклатуры
                |ПО Док.Номенклатура=ПроектыНоменклатуры.НоменклатураПроекта";
            КонецЕсли;
            
            Запрос.УстановитьПараметр("ДатаДок",ДокументОбъект.Дата);
        КонецЕсли;
    КонецЕсли;
    
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    Док.НомерСтроки " + ТекстЗапроса + "
    |
    |ИЗ
    |   Документ." + ДокументМетаданные.Имя + "."+ СокрЛП(ИмяТабличнойЧасти) +
    " КАК Док"+ТекстСоединение+"
    |ГДЕ
    |    Док.Ссылка = &ДокументСсылка";
    

    // Установим параметры запроса.
    Запрос.УстановитьПараметр("ДокументСсылка" , ДокументОбъект.Ссылка);
    
    Если ДокументОбъект[ИмяТабличнойЧасти].Количество() = 0 Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "ГДЕ Док.Ссылка = &ДокументСсылка", "ГДЕ ЛОЖЬ");
    КонецЕсли;

    Возврат Запрос.Выполнить();

КонецФункции // СформироватьЗапросПоТабличнойЧасти()


Ни где речь н идет о сумме. А печать списка списанных товаров тупо берет сумму из ДтКт и делит на количество для выявления цен.

Блин....
1 Naumov
 
26.02.14
14:58
Конфигурацию угадать по коду? или в чем задание?
2 azernot
 
26.02.14
15:00
(0) А с чего ты взял, что подготовленная таблица содержит все данные для проведения? Очевидно, что сумма далее при проведении рассчитывается. Где-нибудь в процедуре
ДвиженияПоРегистрам()

вызывается что-нибудь типа
УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров()
3 shuhard
 
26.02.14
15:04
(1)[в чем задание?]
кто первым и как можно дальше пошлёт ТС-а
4 azernot
 
26.02.14
15:08
(3) "Первым" - это непринципиально. Главное, чтобы более витиевато, чем все предыдущие :)
5 antihacker
 
26.02.14
15:33
Я в ДвиженияПоРегистрамУпр()

Нашел вот это-

        ТаблицаПоЦенам = УправлениеРозничнойТорговлей.СформироватьЗапросПоПродажнымЦенам(Дата, Склад, ТаблицыДанныхДокумента.ТаблицаПоТоварам.ВыгрузитьКолонку("Номенклатура")).Выгрузить();
                    УправлениеРозничнойТорговлей.ЗаполнитьКолонкуСуммаПродажная(ТаблицыДанныхДокумента.ТаблицаПоТоварам, ТаблицаПоЦенам);
                    
Это значить списание делается по продажной цене ?
6 shuhard
 
26.02.14
15:34
(4) ну спортивный интерес то же важен =)
7 antihacker
 
26.02.14
15:34
Хотя нет.

эти стрки в том случае если вид склада розничный.
А у меня вид склада закупочный
8 Naumov
 
26.02.14
15:51
(5) Кто у тебя отладчик стырил?
9 antihacker
 
27.02.14
06:39
А как здесь отладчик поможет ?
10 antihacker
 
27.02.14
06:39
Конфига УТП 8,1
11 floody
 
27.02.14
07:18
(10) с чего решил, что при списании товаров должны браться вообще какие-то ЦЕНЫ? себестоимость и цена - это не одно и то же.
12 antihacker
 
27.02.14
08:30
А вот себестоимоть где берется тоже не смог найти. ПОнимаю что он смазанный по всему периоду. Но он на каждый товар как то получает этот себестоимость............