Имя: Пароль:
1C
1С v8
Выгрузка из таблицы значений.
0 Ikatesgi
 
03.05.16
15:05
В общем есть несколько документов, надо табличные части из всех засунуть в один созданный...

делаю так, но при этом в колонке "количество" образуется космическая цифра из шести знаков. Подскажите что не так?
    
    ТЗ = Новый ТаблицаЗначений;
    
    ТЗ.Колонки.Добавить("Номенклатура");
    ТЗ.Колонки.Добавить("Количество");
    ТЗ.Колонки.Добавить("Сумма");
    
    Выборка = Документы.РеализацияТоваровУслуг.Выбрать(ДатаНач,КонецДня(ДатаКон));
    Пока Выборка.Следующий() цикл
        
        ЕСли Выборка.ПометкаУдаления = Ложь Тогда
            ЕСли Выборка.Контрагент = Контрагент Тогда
                объектДокумента = выборка.Ссылка.ПолучитьОбъект();
                Для Каждого СтрДок Из объектДокумента.Товары Цикл
                    Стр=ТЗ.Добавить();
                    
                    
                    Стр.Номенклатура = СтрДок.Номенклатура;
                    Стр.Количество = СтрДок.Количество;
                    Стр.Сумма = СтрДок.Сумма;
                    
                КонецЦикла;    
            КонецЕСлИ;      
        КонецЕсли;    
    конецЦикла;
    
    
    ТЗ.Свернуть("Номенклатура","Сумма,Количество");
    
    
    СЗ = Новый СписокЗначений;
    
    док = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
    док.Дата = Датанач;
    Док.Организация = Организация;
    Док.Контрагент = Контрагент;
    Док.ДоговорКонтрагента = Договор;
    Док.Склад = Склад;
    док.ВалютаДокумента=Константы.ВалютаРегламентированногоУчета.Получить();
    док.мВалютаРегламентированногоУчета =Константы.ВалютаРегламентированногоУчета.Получить();
    док.КурсВзаиморасчетов =1;
    док.КратностьВзаиморасчетов=1;
    док.ОтражатьВБухгалтерскомУчете=Истина;
    док.ОтражатьВНалоговомУчете=Истина;
    док.ОтражатьВУправленческомУчете=Истина;
    док.ВидОперации=Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;
    Док.ВидПередачи=Перечисления.ВидыПередачиТоваров.СоСклада;
    
    
    для каждого СтрТз из ТЗ цикл
        
        Если стрТз.количество > 0 Тогда
            НоваяСтрока = док.Товары.Добавить();
            НоваяСтрока.Номенклатура = СтрТз.Номенклатура;
            НоваяСтрока.ЕдиницаИзмерения = НоваяСтрока.Номенклатура.ЕдиницаХраненияОстатков;
            НоваяСтрока.Коэффициент =1;
            НоваяСтрока.Количество = СтрТз.Количество;
            Константы.ВалютаРегламентированногоУчета.Получить();
            
            НоваяСтрока.Сумма = СтрТз.Сумма;
            НоваяСтрока.Цена = СтрТз.Сумма/СтрТз.Количество;
        КонецЕСЛИ;
1 Fram
 
03.05.16
15:26
Топорно, конечно очень, но в плане кол-ва все верно должно  получиться. Подозреваю что есть еще кусок кода, где корень ошибки заложен
2 zenik
 
03.05.16
15:26
1. объектДокумента = выборка.Ссылка.ПолучитьОбъект(); - не надо. Получать объект надо только для изменения, для чтения все доступно по ссылке.
2. А проверить количество в ТЗ до того как ее свернуть? Может в каком то документе и забито шестизначное количество....
3 Ikatesgi
 
03.05.16
15:36
(1) Топорно, но я только учусь. Это весь код какой есть.
4 4St
 
03.05.16
15:41
(0) возможно, в выборку попал документ, созданный этим же кодом в прошлый раз. В нем большие количества.
И раз уж только начинаешь, то потрать ещё немного усилий и сделай то же самое запросом вместо выборки документов. Кода будет меньше, скорость работы вырастет на порядок.
5 Ikatesgi
 
03.05.16
15:44
(2) 1. Спасибо. запомню.
2. Просто делаю выборку по периоду, и в указанный период есть всего несколько документов, с еденичными значениями по количеству. а в созданном документе миллионы.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.