Выгрузка из DBF в табличную часть документа.
Здравствуйте! Очень нужна помощь. У меня есть обработка в которой я выбираю период за какую дату у меня будет создаваться новый документ Оказание Услуг. Данные выгружаются из DBF файла. Есть случаи когда в DBF файле у контрагента заполнено поле "ДБФ.LG_CH_TC" - это значит, что будет создаваться два документа. Один со ставкой НДС, а второй документ без НДС. Сейчас необходимо мне, чтобы не было этого разбития и все было в документе в табличной части. Но в этом и вся проблема. Не могу понять как ее заполнить. Вот код который сейчас :
Вот что пытаюсь делать :
Помогите пожалуйста кто... Буду очень благодарна
Если (СтрДлина(число(ДБФ.DATA_VYDAC))>1)и((ДБФ.LG_CH_TC<>0) и (ДБФ.ST_OBL_NDS<>0)) Тогда
ДокАкт.Новый(); // 1 не леготируемая часть
ДокАкт.НомерДок = СокрЛП(Строка(ДБФ.REG_NOM));
ДокАкт.ДатаДок = ДБФ.DATA_VYDAC;
СпрВидДокЭСЧФ.НайтиПоКоду("606");
ДокАкт.ВидДокументаЭСЧФ = СпрВидДокЭСЧФ.ТекущийЭлемент();
ДокАкт.ВидОказанияУслуг = Перечисление.ВидОказанияУслуг.ОказаниеУслуг;
ДокАкт.СчетПокупателя = СчетПоКоду("62.1.1");
ДокАкт.СчетРеализации = СчетПоКоду("90.1.1");
Если СпрКонтр.НайтиПоРеквизиту("УНН",ДБФ.UNN_ZAKAZC,1)=1 Тогда//**
ДокАкт.Контрагент = СпрКонтр.ТекущийЭлемент();
Иначе
Предупреждение("При выгрузке из программы ""Эксперт"" в акте выполненных работ №"+ СокрЛП(Строка(ДБФ.REG_NOM))+" от "+ДБФ.DATA_VYDAC+" у заказчика не верно указан УНН");
Прервать;
КонецЕсли;
СпрДог.ИспользоватьВладельца(СпрКонтр.ТекущийЭлемент());
Если СпрДог.НайтиПоРеквизиту("НомерДоговора",СокрЛП(ДБФ.REG_NOM),1)=1 Тогда
ДокАкт.Договор = СпрДог.ТекущийЭлемент();
КонецЕсли;
ДокАкт.НазначитьТип("шСубконто1","Справочник.ВидыДеятельности");
ДокАкт.шСубконто1 = ВидДеят.ТекущийЭлемент();
ДокАкт.НазначитьТип("шСубконто2","Справочник.ВидыВариантовРеализации");
Если (СтрЧислоВхождений(Строка(ДБФ.REG_NOM),"-42")=1) или (СтрЧислоВхождений(Строка(ДБФ.REG_NOM),"-51")=1) Тогда
ВидВарРеализ.НайтиПоКоду(2);
ВидВарРеализ.ТекущийЭлемент();
Иначе
ВидВарРеализ.НайтиПоКоду(1);
ВидВарРеализ.ТекущийЭлемент();
КонецЕсли;
ДокАкт.шСубконто2 = ВидВарРеализ.ТекущийЭлемент();
СпрУслуги.НайтиПоКоду(СокрЛП(Строка(ДБФ.REG_NOM)));
ДокАкт.шУслуга = СпрУслуги.ТекущийЭлемент();
//**//ДокАкт.шСуммаБезНДС = ДБФ.TEKSTBEZND;
ДокАкт.шСуммаБезНДС = ДБФ.ST_OBL_NDS;//**//
ДокАкт.шСуммаНДС = ДБФ.SUMMA_NDS;
СтНДС.НайтиПоКоду("1");
стНДС18=стНДС.ТекущийЭлемент();
ДокАкт.шСтавкаНДС = СтНДС.ТекущийЭлемент();
ДокАкт.шСуммаСНДС = ДБФ.ST_OBL_NDS+ДБФ.SUMMA_NDS;
ДокАкт.шСодержание = ДБФ.NAZV;
ДокАкт.шСуммаВсего = ДБФ.ST_OBL_NDS+ДБФ.SUMMA_NDS;
ДокАкт.Записать();
ДокАкт.Провести();
ДокАкт.Новый(); //2 лиготируемая часть
ДокАкт.НомерДок = СокрЛП(Строка(ДБФ.REG_NOM));
ДокАкт.ДатаДок = ДБФ.DATA_VYDAC;
СпрВидДокЭСЧФ.НайтиПоКоду("606");
ДокАкт.ВидДокументаЭСЧФ = СпрВидДокЭСЧФ.ТекущийЭлемент();
//ДокАкт.ВидОказанияУслуг = Перечисление.ВидОказанияУслуг.ОказаниеУслугБезНДС;
//ДокАкт.СчетПокупателя = СчетПоКоду("62.1.1");
//ДокАкт.СчетРеализации = СчетПоКоду("90.1.2");
ДокАкт.ВидОказанияУслуг = Перечисление.ВидОказанияУслуг.ОказаниеУслуг;
ДокАкт.СчетПокупателя = СчетПоКоду("62.1.1");
ДокАкт.СчетРеализации = СчетПоКоду("90.1.1");
Если СпрКонтр.НайтиПоРеквизиту("УНН",ДБФ.UNN_ZAKAZC,1)=1 Тогда//**
ДокАкт.Контрагент = СпрКонтр.ТекущийЭлемент();
Иначе
Предупреждение("При выгрузке из программы ""Эксперт"" в акте выполненных работ №"+ СокрЛП(Строка(ДБФ.REG_NOM))+" от "+ДБФ.DATA_VYDAC+" у заказчика не верно указан УНН");
Прервать;
КонецЕсли;
СпрДог.ИспользоватьВладельца(СпрКонтр.ТекущийЭлемент());
Если СпрДог.НайтиПоРеквизиту("НомерДоговора",СокрЛП(ДБФ.REG_NOM),1)=1 Тогда
ДокАкт.Договор = СпрДог.ТекущийЭлемент();
КонецЕсли;
ДокАкт.НазначитьТип("шСубконто1","Справочник.ВидыДеятельности");
ДокАкт.шСубконто1 = ВидДеят.ТекущийЭлемент();
ДокАкт.НазначитьТип("шСубконто2","Справочник.ВидыВариантовРеализации");
Если (СтрЧислоВхождений(Строка(ДБФ.REG_NOM),"-42")=1) или (СтрЧислоВхождений(Строка(ДБФ.REG_NOM),"-51")=1) Тогда
ВидВарРеализ.НайтиПоКоду(2);
ВидВарРеализ.ТекущийЭлемент();
Иначе
ВидВарРеализ.НайтиПоКоду(1);
ВидВарРеализ.ТекущийЭлемент();
КонецЕсли;
ДокАкт.шСубконто2 = ВидВарРеализ.ТекущийЭлемент();
СпрУслуги.НайтиПоКоду(СокрЛП(Строка(ДБФ.REG_NOM)));
ДокАкт.шУслуга = СпрУслуги.ТекущийЭлемент();
//**//ДокАкт.шСуммаБезНДС = ДБФ.TEKSTBEZND;
ДокАкт.шСуммаБезНДС = ДБФ.LG_CH_TC;
ДокАкт.шСуммаНДС = 0;
СтНДС.НайтиПоКоду("5");
стНДС0=стНДС.ТекущийЭлемент();
ДокАкт.шСтавкаНДС = СтНДС.ТекущийЭлемент();
ДокАкт.шСуммаСНДС = ДБФ.LG_CH_TC;
ДокАкт.шСодержание = ДБФ.NAZV;
ДокАкт.шСуммаВсего = ДБФ.LG_CH_TC;
ДокАкт.Записать();
ДокАкт.Провести();
Прервать;
КонецЕсли;
//Конец Двойные акты)
КонецЕсли;
ПоказатьВот что пытаюсь делать :
Если (СтрДлина(число(ДБФ.DATA_VYDAC))>1)и((ДБФ.LG_CH_TC<>0) и (ДБФ.ST_OBL_NDS<>0)) Тогда
ДокАкт.Новый(); // 1 не леготируемая часть
ДокАкт.НомерДок = СокрЛП(Строка(ДБФ.REG_NOM));
ДокАкт.ДатаДок = ДБФ.DATA_VYDAC;
ДокАкт.ФлагТаблица = 1;
СпрВидДокЭСЧФ.НайтиПоКоду("606");
ДокАкт.ВидДокументаЭСЧФ = СпрВидДокЭСЧФ.ТекущийЭлемент();
ДокАкт.ВидОказанияУслуг = Перечисление.ВидОказанияУслуг.ОказаниеУслуг;
ДокАкт.СчетПокупателя = СчетПоКоду("62.1.1");
ДокАкт.СчетРеализации = СчетПоКоду("90.1.1");
Если СпрКонтр.НайтиПоРеквизиту("УНН",ДБФ.UNN_ZAKAZC,1)=1 Тогда//**
ДокАкт.Контрагент = СпрКонтр.ТекущийЭлемент();
Иначе
Предупреждение("При выгрузке из программы ""Эксперт"" в акте выполненных работ №"+ СокрЛП(Строка(ДБФ.REG_NOM))+" от "+ДБФ.DATA_VYDAC+" у заказчика не верно указан УНН");
Прервать;
КонецЕсли;
СпрДог.ИспользоватьВладельца(СпрКонтр.ТекущийЭлемент());
Если СпрДог.НайтиПоРеквизиту("НомерДоговора",СокрЛП(ДБФ.REG_NOM),1)=1 Тогда
Если СпрДог.НайтиЭлемент(СпрДог.ТекущийЭлемент()) = 1 Тогда
СпрДог.ДатаДоговора =(СокрЛП(Строка(ДБФ.DATA_REG)));
СпрДог.Записать();
ДокАкт.Договор = СпрДог.ТекущийЭлемент();
КонецЕсли;
КонецЕсли;
ДокАкт.НазначитьТип("шСубконто1","Справочник.ВидыДеятельности");
ДокАкт.шСубконто1 = ВидДеят.ТекущийЭлемент();
ДокАкт.НазначитьТип("шСубконто2","Справочник.ВидыВариантовРеализации");
Если (СтрЧислоВхождений(Строка(ДБФ.REG_NOM),"-42")=1) или (СтрЧислоВхождений(Строка(ДБФ.REG_NOM),"-51")=1) Тогда
ВидВарРеализ.НайтиПоКоду(2);
ВидВарРеализ.ТекущийЭлемент();
Иначе
ВидВарРеализ.НайтиПоКоду(1);
ВидВарРеализ.ТекущийЭлемент();
КонецЕсли;
ДокАкт.шСубконто2 = ВидВарРеализ.ТекущийЭлемент();
СпрУслуги.НайтиПоКоду(СокрЛП(Строка(ДБФ.REG_NOM)));
ДокАкт.шУслуга = СпрУслуги.ТекущийЭлемент();
//**//ДокАкт.шСуммаБезНДС = ДБФ.TEKSTBEZND;
????????????????????????? Ничего не выходит
ДокАкт.ВыбратьСтроки();
Пока ДокАкт.ПолучитьСтроку() = 1 Цикл
ДокАкт.НоваяСрока();
ДокАкт.НаименованиеУслуги = ДокАкт.шУслуга;
ДокАкт.Субконто1 = ДокАкт.шСубконто1;
ДокАкт.Субконто2 = ДокАкт.шСубконто2;
Если ДБФ.SUMMA_NDS<>0 Тогда
ДокАкт.СуммаБезНДС = ДБФ.ST_OBL_NDS;//**//
Иначе
ДокАкт.СуммаБезНДС = ДБФ.TEKSTSNDS;
КонецЕсли;
ДокАкт.СуммаНДС = ДБФ.SUMMA_NDS;
Если ДБФ.SUMMA_NDS=0 Тогда
СтНДС.НайтиПоКоду("5");
стНДС0=стНДС.ТекущийЭлемент();
Иначе
СтНДС.НайтиПоКоду("1");
стНДС18=стНДС.ТекущийЭлемент();
КонецЕсли;
ДокАкт.СтавкаНДС = СтНДС.ТекущийЭлемент();
ДокАкт.СуммаСНДС = ДБФ.TEKSTSNDS;
ДокАкт.СуммаВсего = ДБФ.TEKSTSNDS;
//////////////////////////////////////////////////////////
ДокАкт.НоваяСтрока(); //2 лиготируемая часть
ДокАкт.НаименованиеУслуги = ДокАкт.шУслуга;
ДокАкт.Субконто1 = ДокАкт.шСубконто1;
ДокАкт.Субконто2 = ДокАкт.шСубконто2;
ДокАкт.СуммаБезНДС =ДБФ.LG_CH_TC;//**//
ДокАкт.СуммаНДС =0;
СтНДС.НайтиПоКоду("5");
стНДС0=стНДС.ТекущийЭлемент();
ДокАкт.СтавкаНДС = СтНДС.ТекущийЭлемент();
ДокАкт.СуммаСНДС = ДБФ.LG_CH_TC;
ДокАкт.СуммаВсего = ДБФ.LG_CH_TC;
ДокАкт.Записать();
ДокАкт.Провести();
Прервать;
// КонецЕсли;
КонецЦикла;
КонецЕсли;
//Конец Двойные акты)
КонецЕсли;
КонецЦикла;
ПоказатьПомогите пожалуйста кто... Буду очень благодарна
По теме из базы знаний
- Загрузка табличной части из Экселя в 1С8
- Выгрузка документа в XML произвольной структуры (+пример для выгрузки в ECOD)
- Выгрузка в DBF за Период
- Механизмы и транспорт обмена данными. Пример создания в КД 2.1 правил обмена данными ЗУП 2.5 -> БП 3.0. Выгрузка ведомостей и банковских счетов. Передача параметров обмена из Источника в Приемник. ВыгрузитьПоПравилу(). ПередатьОдинПараметрВПриемник().
- Универсальная выгрузка в DBF по сохраняемым шаблонам. Управляемые формы
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(5)
Таким способом я пробовало
Ну надо же, а я не принимал всерьез бородатый анекдот про сравнение девушек-программистов с морскими свинками, считал его глупым. И вдруг такое подтверждение...
первый раз столкнувшись, хочется понять, как же это сделать.
Чтобы понять, как это надо делать, надо понимать - как это работает. Чего, к сожалению, не наблюдается - лепится код по принципу ноздревского повара:
кое-что и пригорело, кое-что и вовсе не сварилось. Видно, что повар руководствовался более каким-то вдохновеньем и клал первое, что попадалось под руку < ...> перец … капусту, пичкал молоко, ветчину, горох — словом, катай-валяй, было бы горячо, а вкус какой-нибудь, верно, выйдет
Вот только в программировании такой метод не работает. Поэтому открывайте отладчик и проходите свой "шедевр" строчка за строчкой, при этом думая - почему он так работает?
(1)
Ну так с чего выйдет-то, если Вы обходите строки, которых нет. Уберите никому не нужный цикл и все получится.
А злых программеров не слушайте - они просто не поняли этот код. Не дано - не дадут...
????????????????????????? Ничего не выходит
ДокАкт.ВыбратьСтроки();
Пока ДокАкт.ПолучитьСтроку() = 1 Цикл
Ну так с чего выйдет-то, если Вы обходите строки, которых нет. Уберите никому не нужный цикл и все получится.
А злых программеров не слушайте - они просто не поняли этот код. Не дано - не дадут...
Судя по коду, тут ни в одном документе не заполняется табличная часть. Чтобы ее заполнять, достаточно: ДокАкт.НоваяСтрока(). А далее уже непосредственно реквизиты табл части заполняются, которые нам не известны.
Заполнение должно быть до строки: ДокАкт.Записать();
Заполнение должно быть до строки: ДокАкт.Записать();
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)