|
Как свернуть ТЗ 1с 8.2 | ☑ | ||
---|---|---|---|---|
0
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; КонецЕсли; Сообщить("записан Расходная накладная "+ДокРасх.Номер,СтатусСообщения.Информация); |
|||
1
r_i_n_i_k
09.10.17
✎
09:19
|
ТЗ.Свернуть не?)
|
|||
2
CountR
09.10.17
✎
09:20
|
ТС красавчик... Такую портянку вытащил - изучайте, помогите мне!
|
|||
3
igorPetrov
09.10.17
✎
09:21
|
(0) Твою мать...
|
|||
4
Raid
09.10.17
✎
09:28
|
(1) добавить еще одну таблицу добавить туда колонку и по нему во второй свернуть?
|
|||
5
igorPetrov
09.10.17
✎
09:30
|
(4) Две.
|
|||
6
CountR
09.10.17
✎
09:33
|
Самый простой алгоритм:
Сворачиваешь ТЗ по реквизиту склада и по номенклатуре. Если в ТЗ есть что нибудь еще, типа цены или характеристики - то эти колонки тоже включаешь в группируемые, чтобы не потерялись. Суммируемые колонки сам определишь, обычно это количество, или сумма. Далее сортируешь по реквизиту склада и перебираешь в цикле строки. Если реквизит склада изменился - то создаешь новый документ. |
|||
7
Raid
09.10.17
✎
09:35
|
(6) Спасибо пробую
|
|||
8
Raid
09.10.17
✎
09:50
|
Сворачиваю по номеру кассы, при загрузке файла грузиться только последняя срока, что не так делаю??
ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("НомерКассы"); Текст = Новый ТекстовыйДокумент; Текст.Прочитать(transaction, КодировкаТекста.UTF8); ТЗ.Очистить(); Для ш=1 по Текст.КоличествоСтрок() Цикл Стр = СокрЛП(Текст.ПолучитьСтроку(ш)); Если СокрЛП(Стр) = "" Тогда Продолжить; КонецЕсли; ошибка = 0; KKM_SERIAL_ID = СокрЛП(Лев(Стр,Найти(Стр,Разд)-1)); Стр = Прав(Стр,СтрДлина(Стр)-Найти(Стр,Разд)); НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.НомерКассы = KKM_SERIAL_ID; КонецЦикла; ТЗ.Свернуть("НомерКассы",) |
|||
9
CountR
09.10.17
✎
11:04
|
Либо в текстовом документе только одна строка, либо строк несколько - но все с одинаковым значением. По этой причине в каждой новой строке ТЗ одинаковое значение номера кассы:
НоваяСтрока.НомерКассы = KKM_SERIAL_ID Если код приведен полностью, то строка: Стр = Прав(Стр,СтрДлина(Стр)-Найти(Стр,Разд)); лишняя, так как в начале цикла переменной Стр присвоится новое значение. Удобно проверять заполнение ТЗ правильными значениями в отладчике. Выделяешь слово ТЗ, нажимаешь Shift-F9, затем на значении ТЗ в открывшемся окне - F2 (вычислить значение) |
|||
10
igorPetrov
09.10.17
✎
11:11
|
(8) "что не так делаю??" - пишешь с ошибками.
|
|||
11
Tatitutu
09.10.17
✎
11:19
|
Если номен.Код = "00000000311" тогда
ДокР.СубконтоДоходовБУ1=спрДох.НайтиПоКоду("000000009")//Выручка от продажи Алтын иначе ДокР.СубконтоДоходовБУ1=спрДох.НайтиПоКоду("000000008")//Выручка от продажи Алтын КонецЕсли; Алтын - однако ! |
Форум | Правила | Описание | Реклама | Секции | Поиск | Книга знаний | Вики-миста |