Выгрузка из DBF в табличную часть документа.

1. Nastya-chajkovskaya 01.08.17 09:42 Сейчас в теме
Здравствуйте! Очень нужна помощь. У меня есть обработка в которой я выбираю период за какую дату у меня будет создаваться новый документ Оказание Услуг. Данные выгружаются из 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; 
							
							
	                            ДокАкт.Записать();
								ДокАкт.Провести();
								Прервать; 

						//	КонецЕсли;
							КонецЦикла;
							КонецЕсли;
							//Конец Двойные акты)
						КонецЕсли;              
					КонецЦикла;
Показать


Помогите пожалуйста кто... Буду очень благодарна
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Cooler 22 01.08.17 09:47 Сейчас в теме
(1)
ДокАкт.ВыбратьСтроки();
Пока ДокАкт.ПолучитьСтроку() = 1 Цикл

ДокАкт.НоваяСрока();
После такого можно помочь разве что классическим: "Пригласите специалиста!"
5. Nastya-chajkovskaya 01.08.17 09:53 Сейчас в теме
(2) Таким способом я пробовало, не получается. Тут дело не в вызове специалиста, а первый раз столкнувшись, хочется понять, как же это сделать.
6. Cooler 22 01.08.17 10:10 Сейчас в теме
(5)
Таким способом я пробовало
Ну надо же, а я не принимал всерьез бородатый анекдот про сравнение девушек-программистов с морскими свинками, считал его глупым. И вдруг такое подтверждение...

первый раз столкнувшись, хочется понять, как же это сделать.
Чтобы понять, как это надо делать, надо понимать - как это работает. Чего, к сожалению, не наблюдается - лепится код по принципу ноздревского повара:
кое-что и пригорело, кое-что и вовсе не сварилось. Видно, что повар руководствовался более каким-то вдохновеньем и клал первое, что попадалось под руку < ...> перец … капусту, пичкал молоко, ветчину, горох — словом, катай-валяй, было бы горячо, а вкус какой-нибудь, верно, выйдет
Вот только в программировании такой метод не работает. Поэтому открывайте отладчик и проходите свой "шедевр" строчка за строчкой, при этом думая - почему он так работает?
9. starik-2005 3033 01.08.17 20:35 Сейчас в теме
(1)
?????????????????????????  Ничего не выходит

                                                                   ДокАкт.ВыбратьСтроки();
                                  Пока ДокАкт.ПолучитьСтроку() = 1 Цикл

Ну так с чего выйдет-то, если Вы обходите строки, которых нет. Уберите никому не нужный цикл и все получится.

А злых программеров не слушайте - они просто не поняли этот код. Не дано - не дадут...
12. Nastya-chajkovskaya 03.08.17 09:50 Сейчас в теме
(9) Спасибо)))) по такому принципу и делала)
3. jj_mail 01.08.17 09:49 Сейчас в теме
Как же он может выбрать строки, которых не существует ? А в первом коде вообще нет заполнения строк документа. В документе табличная часть есть вообще ?
4. Nastya-chajkovskaya 01.08.17 09:52 Сейчас в теме
(3) Изначально не было табличной части. Но когда ставиться галочка ФлагТаблица, она появляется. И необходимо,чтобы первой строчкой была строка с НДС, а вторая без НДС.
7. Slypower 2 01.08.17 17:45 Сейчас в теме
Судя по коду, тут ни в одном документе не заполняется табличная часть. Чтобы ее заполнять, достаточно: ДокАкт.НоваяСтрока(). А далее уже непосредственно реквизиты табл части заполняются, которые нам не известны.
Заполнение должно быть до строки: ДокАкт.Записать();
13. Nastya-chajkovskaya 03.08.17 09:51 Сейчас в теме
(7) Спасибо)))) Вы были правы)
8. aleksdbs 01.08.17 18:49 Сейчас в теме
Либо у доков нет табличной части или табличная часть не заполняется, если смотреть по самому первому куску кода. Поэтому вопрос: а есть ли у формируемых документах табличная часть?
10. ytpyfqrf 5 01.08.17 20:52 Сейчас в теме
Здравствуй, Анастасия!
Получилось?
11. Nastya-chajkovskaya 03.08.17 09:50 Сейчас в теме
14. Nastya-chajkovskaya 03.08.17 09:52 Сейчас в теме
Спасибо большое кто отозвался и помог))))
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день