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

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

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

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

Сообщений: 487
Откуда: СПб
Дата регистрации: 02.12.2002
Ну е-мае, ну хоть какая версия 1С?
Ratings: 0 negative/0 positive
Re: програмное создание и заполнение документа
Сергей_Л

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


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



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

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


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

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


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




Исправлено 1 раз(а). Последнее : Сергей_Л, 05.02.12 20:33
Ratings: 0 negative/0 positive
Re: програмное создание и заполнение документа
Foxtrot

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


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive
Re: програмное создание и заполнение документа
dos32
Автор

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


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

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

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