Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Как свернуть ТЗ 1с 8.2

Как свернуть ТЗ 1с 8.2
Я
   Raid
 
09.10.17 - 09:18
ДД!
Есть обработчик по загрузке файлов .csv в Бухгалтерия для Казахстана, редакция 2.0, разработка для Казахстана: (2.0.24.10)

Реализации создаются норм, но только не устраивает что на каждую сткроку файла создается отдельная накладная. Помогите прописать чтоб сворачивался по реквизиту склада и таб часть сгруппировывалась по номенклатуре. Заранее спасибо!

Текст = Новый ТекстовыйДокумент;
        Текст.Прочитать(transaction, КодировкаТекста.UTF8);
        Для ш=1 по Текст.КоличествоСтрок() Цикл
            Стр = СокрЛП(Текст.ПолучитьСтроку(ш));         
            Если СокрЛП(Стр) = "" Тогда
                Продолжить;
            КонецЕсли; 
        ошибка = 0;    
        КонецЦикла;
        
        сообщить("Обработка файла начата.",СтатусСообщения.Информация);
                
        тбОплат = новый ТаблицаЗначений;
        тбОплат.Колонки.Добавить("KKM_SERIAL_ID");
        тбОплат.Колонки.Добавить("KKM_RNM");
        тбОплат.Колонки.Добавить("Data");
        тбОплат.Колонки.Добавить("FISCAL_FEATURE");
        тбОплат.Колонки.Добавить("CHECK_TYPE");
        тбОплат.Колонки.Добавить("CASHER_SURNAME");
        тбОплат.Колонки.Добавить("CASHER_NAME");
        тбОплат.Колонки.Добавить("CASHER_IIN");
        тбОплат.Колонки.Добавить("PRODUCT_NAME");
        тбОплат.Колонки.Добавить("PRODUCT_COUNT");
        тбОплат.Колонки.Добавить("PRODUCT_PRICE");
        тбОплат.Колонки.Добавить("PRODUCT_SUMM");
                
         Для ш=1 по Текст.КоличествоСтрок() Цикл
            Стр = СокрЛП(Текст.ПолучитьСтроку(ш));       
            Если СокрЛП(Стр) = "" Тогда
                продолжить;
            КонецЕсли;
            
        ошибка = 0;
        стрОплат= тбОплат.Добавить();
        //стрОплат.Номер = ДанныеКолонки(стр,1,ошибка,ш,"число");

        стрОплат.KKM_SERIAL_ID =сокрЛП(ДанныеКолонки(стр,2,ошибка,ш,"Строка"));
        стрОплат.Data = ДанныеКолонки(стр,4,ошибка,ш,"Дата");
        стрОплат.CASHER_SURNAME =сокрЛП(ДанныеКолонки(стр,7,ошибка,ш,"Строка"));
        стрОплат.CASHER_NAME=сокрЛП(ДанныеКолонки(стр,8,ошибка,ш,"Строка"));
        стрОплат.CASHER_IIN=сокрЛП(ДанныеКолонки(стр,9,ошибка,ш,"Строка"));
        стрОплат.PRODUCT_NAME=сокрЛП(ДанныеКолонки(стр,10,ошибка,ш,"Строка"));
        стрОплат.PRODUCT_COUNT=ДанныеКолонки(стр,11,ошибка,ш,"число");
        стрОплат.PRODUCT_PRICE=ДанныеКолонки(стр,12,ошибка,ш,"число");
        стрОплат.PRODUCT_SUMM=ДанныеКолонки(стр,13,ошибка,ш,"число");
        
            
        Пновый=0;
        новномер="";
        первый=1;
        колдок=0;
        
        //КонецЦикла;

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

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

                ДокРасх.ДоговорКонтрагента=ДокРасх.Контрагент.ОсновнойДоговорКонтрагента;
                    
                СтрокаТабличнойЧасти = Стр;
                Пновый = 1;
                ДокР = ДокРасх.Товары.Добавить();
                Если стрОплат.PRODUCT_NAME = "Алтын (Altyn)"  тогда
                    номен = СпрНом.НайтиПоКоду("00000000311");
                Иначе 
                    номен = СпрНом.НайтиПоКоду("00000000312");
                КонецЕсли;
                Если  номен = СпрНом.ПустаяСсылка()или номен = неопределено тогда
                      Сообщить("Не найден товар с наименованием " + стрОплат.PRODUCT_NAME, СтатусСообщения.Информация);
                продолжить;
                КонецЕсли; 

                ДокР.Номенклатура = номен;
                ДокР.Количество = стрОплат.PRODUCT_COUNT;
                ДокР.Цена = стрОплат.PRODUCT_PRICE;
                ДокР.Сумма = ДокР.Количество * ДокР.Цена; 
                ДокР.Коэффициент=1;
                ДокР.ЕдиницаИзмерения  = номен.БазоваяЕдиницаИзмерения;
                ДокР.СтавкаНДС=УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ОсновнаяСтавкаНДС");
                ДокР.СчетУчетаБУ=ПланыСчетов.Типовой.НайтиПоКоду("1332")//1332

                ДокР.СчетУчетаНДСПоРеализации=ПланыСчетов.Типовой.НалогНаДобавленнуюСтоимость;//3130

                ДокР.НДСВидОперацииРеализации=спрВидыРеализации.НайтиПоКоду("000001")//Продажа товаров, оказание услуг, выполнение работ на территории РК

                ДокР.СчетДоходовБУ=ПланыСчетов.Типовой.НайтиПоКоду("6012")//6012

                Если номен.Код =  "00000000311" тогда
                ДокР.СубконтоДоходовБУ1=спрДох.НайтиПоКоду("000000009")//Выручка от продажи Алтын

                иначе 
                ДокР.СубконтоДоходовБУ1=спрДох.НайтиПоКоду("000000008")//Выручка от продажи Алтын

                КонецЕсли;
                ДокР.СубконтоДоходовБУ2=Справочники.НоменклатурныеГруппы.НайтиПоКоду("000000001");
                ДокР.СубконтоДоходовБУ3= Справочники.ПодразделенияОрганизаций.НайтиПоРеквизиту("ID", стрОплат.KKM_SERIAL_ID); 
                ДокР.СчетСписанияСебестоимостиБУ=ПланыСчетов.Типовой.СебестоимостьРеализованнойПродукцииИОказанныхУслуг//7010

                ДокР.СубконтоСписанияСебестоимостиБУ1=спрСтатьиЗатр.НайтиПоКоду("000000099")//Списание себестоимости лотерейных билетов

                ДокР.СубконтоСписанияСебестоимостиБУ2 =Справочники.НоменклатурныеГруппы.НайтиПоКоду("000000001");
                ДокР.СубконтоСписанияСебестоимостиБУ3 = Справочники.ПодразделенияОрганизаций.НайтиПоРеквизиту("ID", стрОплат.KKM_SERIAL_ID); 
 
                
                ДокР.СчетУчетаНУ=ПланыСчетов.Налоговый.Товары//н211

                ДокР.СчетДоходовНУ=ПланыСчетов.Налоговый.ДоходыОтПродажи//н710

                ДокР.СчетСписанияСебестоимостиНУ=ПланыСчетов.Налоговый.СебестоимостьПроданныхТоваров//н810

                ДокР.СубконтоДоходовНУ1=спрДох.НайтиПоКоду("000000009")//Выручка от продажи Алтын

                ДокР.СубконтоДоходовНУ2=ДокР.Номенклатура ;//товар

                ДокР.СубконтоСписанияСебестоимостиНУ1=спрСтатьиЗатр.НайтиПоКоду("000000099");
                                    
            КонецЕсли;
            Продолжить;

             
        КонецЦикла;
        
            ДокРасх.УстановитьВремя(РежимАвтоВремя.ТекущееИлиПоследним);
        Если пров=1 тогда
            ДокРасх.Записать(РежимЗаписиДокумента.Запись);
            Попытка
                ДокРасх.записать(РежимЗаписиДокумента.Проведение);
            Исключение
            КонецПопытки;
        иначе
            ДокРасх.Записать(РежимЗаписиДокумента.Запись);
            
            колдок=колдок+1;
        КонецЕсли;
        
        Сообщить("записан Расходная накладная "+ДокРасх.Номер,СтатусСообщения.Информация);
 
 
   r_i_n_i_k
 
1 - 09.10.17 - 09:19
ТЗ.Свернуть не?)
   CountR
 
2 - 09.10.17 - 09:20
ТС красавчик... Такую портянку вытащил - изучайте, помогите мне!
   igorPetrov
 
3 - 09.10.17 - 09:21
(0) Твою мать...
   Raid
 
4 - 09.10.17 - 09:28
(1) добавить еще одну таблицу добавить туда колонку и по нему во второй свернуть?
   igorPetrov
 
5 - 09.10.17 - 09:30
(4) Две.
   CountR
 
6 - 09.10.17 - 09:33
Самый простой алгоритм:

Сворачиваешь ТЗ по реквизиту склада и по номенклатуре. Если в ТЗ есть что нибудь еще, типа цены или характеристики - то эти колонки тоже включаешь в группируемые, чтобы не потерялись.
Суммируемые колонки сам определишь, обычно это количество, или сумма.

Далее сортируешь по реквизиту склада и перебираешь в цикле строки. Если реквизит склада изменился - то создаешь новый документ.
   Raid
 
7 - 09.10.17 - 09:35
(6)  Спасибо пробую
   Raid
 
8 - 09.10.17 - 09:50
Сворачиваю по номеру кассы, при загрузке файла грузиться только последняя срока, что не так делаю??

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("НомерКассы");
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(transaction, КодировкаТекста.UTF8);
ТЗ.Очистить();
Для ш=1 по Текст.КоличествоСтрок() Цикл
Стр = СокрЛП(Текст.ПолучитьСтроку(ш));         
Если СокрЛП(Стр) = "" Тогда
Продолжить;
КонецЕсли; 
ошибка = 0;    
KKM_SERIAL_ID = СокрЛП(Лев(Стр,Найти(Стр,Разд)-1));
    Стр = Прав(Стр,СтрДлина(Стр)-Найти(Стр,Разд));
    
    НоваяСтрока = ТЗ.Добавить();
    НоваяСтрока.НомерКассы = KKM_SERIAL_ID;
    
КонецЦикла;
ТЗ.Свернуть("НомерКассы",)
   CountR
 
9 - 09.10.17 - 11:04
Либо в текстовом документе только одна строка, либо строк несколько - но все с одинаковым значением. По этой причине в каждой новой строке ТЗ одинаковое значение номера кассы:

НоваяСтрока.НомерКассы = KKM_SERIAL_ID

Если код приведен полностью, то строка:
Стр = Прав(Стр,СтрДлина(Стр)-Найти(Стр,Разд));
лишняя, так как в начале цикла переменной Стр присвоится новое значение.

Удобно проверять заполнение ТЗ правильными значениями в отладчике. Выделяешь слово ТЗ, нажимаешь Shift-F9, затем на значении ТЗ в открывшемся окне - F2 (вычислить значение)
   igorPetrov
 
10 - 09.10.17 - 11:11
(8) "что не так делаю??" - пишешь с ошибками.
 
 Рекламное место пустует
   Tatitutu
 
11 - 09.10.17 - 11:19
Если номен.Код =  "00000000311" тогда
                ДокР.СубконтоДоходовБУ1=спрДох.НайтиПоКоду("000000009"//Выручка от продажи Алтын


                иначе 
                ДокР.СубконтоДоходовБУ1=спрДох.НайтиПоКоду("000000008"//Выручка от продажи Алтын


                КонецЕсли;

Алтын - однако !

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует