for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Вопросы по 1С
  

програмное создание и заполнение документа
dos32
Автор

Сообщений: 997
Откуда: Ленинград
Дата: 04.02.12 14:09:03
кто-нить может поделиться фрагментом кода, чтоб разобраться по образу и подобию, не спец в 1С
нужно программно создать документ и заполнить товарами его табличную часть ....
Ratings: 0 negative/0 positive

Re: програмное создание и заполнение документа
Taran

Сообщений: 8400
Откуда: Красноярск
Дата: 05.02.12 00:50:16
dos32
...нужно программно...
Чуток побольше инфы надо. Программно откуда?
Из фоксовой программы? Или?
Ratings: 0 negative/0 positive

Re: програмное создание и заполнение документа
dos32
Автор

Сообщений: 997
Откуда: Ленинград
Дата: 05.02.12 15:36:41
имею в виду на 1С, собственно схема такая, открываю 2 DBF, в одном читаю параметры документа, создаю его, в другом читаю его строки, заполняю его в 1С т сохраняю ... и т.д. следующий
Ratings: 0 negative/0 positive

Re: програмное создание и заполнение документа
oleg_km

Сообщений: 487
Откуда: СПб
Дата: 05.02.12 18:21:39
Ну е-мае, ну хоть какая версия 1С?
Ratings: 0 negative/0 positive

Re: програмное создание и заполнение документа
Сергей_Л

Сообщений: 17567
Откуда: Киров(Вятка)
Дата: 05.02.12 18:46:04
У меня было, из 1-го дбф табличная часть, а шапка копировалась из такого же документа-аналога.(один день-один документ)
Примерно так, сначала создаем документ из аналога за предыдущую дату:


Процедура СформироватьОтгрузкуНаОснованииПредДня(пДата)  
  	ПредДокумент = ПолучитьДокументСуточнойОтгрузки(пДата - 86400);  
  	  
  	// Если отгрузка на этот день уже создана, то открываем существующий документ  
  	ТекДокумент = ПолучитьДокументСуточнойОтгрузки(пДата);  
  	Если ТекДокумент <> Неопределено Тогда  
  	Иначе  
  		  
  		// Если найден документ отгрузки за предыдущий день  
  		Если ПредДокумент <> Неопределено Тогда  
  			НовыйДокумент = ПредДокумент.Скопировать();  
  			НовыйДокумент.Дата = пДата;  
  			НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);  
  			  
  		Иначе  
  			Предупреждение("Не найден документ отгрузки за предшествующий день!" + Символы.ПС +   
  			"Данные по отгрузке автоматически заполняться не будут.",, "Предупреждение");  
  		КонецЕсли;  
  		//	ЗаполнитьСуточнуюОтгрузку();        // Суточная отгрузка  
  	КонецЕсли;  
  	  
  КонецПроцедуры // СформироватьОтгрузкуНаОснованииПредДня()



Далее заполняем табличную часть:

Процедура ЗаполнитьСуточнуюОтгрузку()  
  	//Сообщить("Заполнение суточной отгрузки ");  
  	  
  	НаличиеФайла = Новый Файл(ПутьКБазе+"grs_sum.dbf");  
  	  
  	Если НаличиеФайла.Существует() Тогда  
  	Иначе  
  		Предупреждение("ДБФ-файл по отгрузке отсутствует");  
  		Перейти ~Вконец;	  
  	КонецЕсли;  
  	  
  	ТЗ= Новый ТаблицаЗначений;  
  	ТЗ.Колонки.Добавить("КодГРС");  
  	ТЗ.Колонки.Добавить("Выход");  
  	ТЗ.Колонки.Добавить("Факт");  
  	  
  	БД = Новый XBase;   
  	БД.ОткрытьФайл(ПутьКБазе+"grs_sum.dbf");   
  	  
  	Если БД.Открыта() Тогда                     //Переписываем ДБФ в таблицу значений  
  		БД.Первая(); //позиционируемся на первой записи  
  		Пока БД.ВКонце()=0 Цикл //пока не дошли до конца, крутим цикл  
  			НоваяСтрока = ТЗ.Добавить();  
  			НоваяСтрока.КодГРС=БД.Kod_GRS;  
  			НоваяСтрока.Выход=БД.OUT;  
  			НоваяСтрока.Факт=БД.SUM;  
  			БД.Следующая(); //переходим на следующую запись  
  		КонецЦикла;  
  	Иначе   
  		Предупреждение("ДБФ-файл заблокирован, доступ невозможен");  
  		Перейти ~Вконец;  
  	КонецЕсли;  
  	БД.ЗакрытьФайл(); 	  
  	  
  	ТекДок =  ПолучитьДокументСуточнойОтгрузки(пДата);  
  	Если ТекДок <> Неопределено Тогда  
  		ТекДокумент=ТекДок.ПолучитьОбъект();  
  		Для Каждого ТекущаяСтрока Из ТекДокумент.тчГРС Цикл   
  			Для Каждого ТекущаяСтрокаТЗ Из ТЗ Цикл   
  				Если   СокрЛП(ТекущаяСтрокаТЗ.КодГРС)=СокрЛП(ТекущаяСтрока.ГРС.Код)  И  
  					СокрЛП(ТекущаяСтрокаТЗ.Выход)=СокрЛП(ТекущаяСтрока.ВыходГРС.Код)  
  					Тогда  // Совпал код ГРС  
  					ТекущаяСтрока.Количество=ТекущаяСтрокаТЗ.Факт; //Заносим в документ   
  					Состояние("Заполнение отгрузки " + ТекущаяСтрока.ГРС+ "...");  
  					  
  					прервать; // Если знесли, выходим из цикла  по основной ТЗ  
  				КонецЕсли;  
  			КонецЦикла;                                 
  		КонецЦикла;   
  		ТекДокумент.Записать(РежимЗаписиДокумента.Запись);  
  	Иначе   
  		//	Сообщить("За выбранную дату документов нет, сформируйте суточную отгрузку ");  
  	КонецЕсли;	    
  	  
  	  
  	  
  	~Вконец:;	  
  КонецПроцедуры


Или вот еще, тоже за основу берем документ-шаблон, копируем его, стираем табличную часть и по новой записываем данными из таблицы значений ТЗ,в нее предварительно заносим данные (в моем случае из ексель файла):

НовыйДокумент = Документ_шаблон.Скопировать();  
  		НовыйДокумент.Дата = НачалоДня(ДатаДокумента);  
  		НовыйДокумент.НазначитьНомер(ПоследнийНомер);  
  		НовыйДокумент.Суммы.Очистить();  
  		  
  		ВсегоСтрок=ТЗ.Количество();  
  		ТекСтр=0;  
  		// Цикл по ТЗ  
  		  
  		Пока ТекСтр<ВсегоСтрок Цикл  
  			ТекущаяСтрока=ТЗ.Получить(ТекСтр);  
  			НоваяСтрока = НовыйДокумент.Суммы.Добавить();  
  			НоваяСтрока.Количество= ТекущаяСтрока.Объем;  
  			НоваяСтрока.Цена= ТекущаяСтрока.Цена;  
  			НоваяСтрока.Сумма= ТекущаяСтрока.Сумма;  
  			НоваяСтрока.СуммаНДС= ТекущаяСтрока.СуммаНДС;  
  			ТекСтр=ТекСтр+1;  
  			  
  		КонецЦикла;  
  		НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);  
  	Иначе  
  		Предупреждение("Не выбран документ-шаблон!");  
  	КонецЕсли;


------------------
«Не причиняй зла никому и делай добро всем людям, хотя бы только потому, что это люди.»
(Марк Туллий Цицерон)




Исправлено: Сергей_Л, 05.02.12 20:33
Ratings: 0 negative/0 positive

Re: програмное создание и заполнение документа
Foxtrot

Сообщений: 3378
Откуда: Куда:
Дата: 05.02.12 21:38:36
тысяча извнений за офтоп, ну просто до боли интересно-любопытно. ведь такое я встречаю только в 1це, а именно
пишут
если НЕ РАВНО тогда ... иначе...
а не проще ли писать
если РАВНО тогда... иначе...
ведь развязка по условию (ИНАЧЕ) присутствует, нафига переключать клаву на инглиш шоб вставить НЕ РАВНО, потом снова на руссиш, я уже не говорю про то что два знака печатать не лень вместо одного?


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive

Re: програмное создание и заполнение документа
dos32
Автор

Сообщений: 997
Откуда: Ленинград
Дата: 06.02.12 21:54:39
спасибо, повожусь чуть погодя
а вообще 8.2 возьму, контора еще нулевая.
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 4 (Гостей: 4)

19.06.2019 04:09:31 exec: 0.21
Mem: 1.231 Mb

© 2000-2019 Fox Club 
Яндекс.Метрика