Вход | Регистрация


1С:Предприятие ::

Метки:

Программное создание документов. Загрузка табличной части

Я
   Wow__cooL
07.03.04 - 21:46
Есть две процедуры:

Процедура Сформировать()   
Попытка
    Файл = СоздатьОбъект("Addin.V7TextFile");
    Исключение
    Сообщить("Не удалось создать объект v7textfile !"); 
    Возврат;
КонецПопытки;
Файл.ОткрытьФайл(ЗагрФайл); 
Файл.ВыбратьСтроки();

ТаблЗнач=СоздатьОбъект("ТаблицаЗначений");
ТаблЗнач.НоваяКолонка(
"Товар","Справочник.Номенклатура",,,,);
ТаблЗнач.НоваяКолонка("Количество","Число",10,3,,);

стр = "";    
Если Файл.ПрочитатьСтроку(стр)=1 Тогда
    Если стр<>"Файл прайс-листа" Тогда
        Предупреждение("Открываемый файл не является сформированным из прайс-листа!");
        Возврат;
    КонецЕсли;
КонецЕсли;      
Пока Файл.ПрочитатьСтроку(стр) = 1 Цикл
    ОбработкаСтроки(стр);
КонецЦикла;                      
Файл.ЗакрытьФайл();

    Док=СоздатьОбъект("Документ."+Метаданные.Документ(ФормДокумент.ТекущаяСтрока()).Идентификатор);

    Док.Новый();
    Док.ЗагрузитьТабличнуюЧасть(ТаблЗнач);
    Док.Записать();
КонецПроцедуры  


Процедура ОбработкаСтроки(стр)     
    Поз = Найти(Стр, "|");
    Код = СокрЛП(Лев(Стр, Поз - 1));
    Заказ = СокрЛП(Прав(Стр, СтрДлина(Стр) - Поз)); 
    Поз=0;
    Если Найти(Заказ,",")<>0 Тогда
        Поз=Найти(Заказ,",");
    Иначе 
        Если Найти(Заказ,".")<>0 Тогда
            Поз=Найти(Заказ,".");    
        КонецЕсли;               
    КонецЕсли;
    Если Поз<>0  Тогда
        ЦелаяЧасть=Число(СокрЛП(Лев(Заказ,Поз-1)));
        КОлДробн=СтрДлина(СокрЛП(Прав(Заказ,СтрДлина(Заказ)-Поз)))*10;
        ДробнЧасть=Число(СокрЛП(Прав(Заказ,СтрДлина(Заказ)-Поз)));
        Заказ=ЦелаяЧасть+ДробнЧасть/КолДробн;    
    Иначе
        Заказ=Число(Заказ);
    КонецЕсли;

    ДокТовар=СоздатьОбъект("Справочник.Номенклатура");
    Если ДокТовар.НайтиПоКоду(Код,0)=0 Тогда
        Предупреждение("Указанный товар не найден!");        
    КонецЕсли;
    ТаблЗнач.НоваяСтрока();
    ТаблЗнач.Товар=ДокТовар.ТекущийЭлемент();
    ТаблЗнач.Количество=Заказ;        
КонецПроцедуры//ОбработкаСтроки

    Док=СоздатьОбъект("Документ."+Метаданные.Документ(ФормДокумент.ТекущаяСтрока()).Идентификатор);

    Док.Новый();
    Док.ЗагрузитьТабличнуюЧасть(ТаблЗнач);
    Док.Записать();
КонецПроцедуры

Ситуация следующая: при загрузке табличной части происходит запись только двух указанных колонок (Товар и Количество), при формировании же документа вручную при выборе товара происходит пересчет цены, суммы и остальных реквизитов сразу после выбора товара из справочника Номенклатура. Для того, чтобы это происходило и при программном создании документа, что надо сделать? Добавить новые колонки и в них записывать данные (НДС, Цена и так далее), а потом все это загружать в табличную часть? Другого способа нет?

_________________
Сильно надеюсь, что все понятно
 
  Рекламное место пустует
   Wow__cooL
1 - 07.03.04 - 21:52
+ еще один вопрос.
Дело в том, что пользователь может указать любой документ, и любые колонки из него поставить в соответствие, то есть вместо использования
ТаблЗнач.НоваяКолонка("Товар","Справочник.Номенклатура",,,,); 
и
ТаблЗнач.Товар=ДокТовар.ТекущийЭлемент();
каким образом задать указанный пользователем реквизит выбранного документа (то есть он может быть абсолютно любым)?
   Кое-кто@где-то.там
2 - 07.03.04 - 21:59
1. Другого нет, вернее есть, но проще записать готовые.
2. Ч/з метаданные может собрать данные о выбранном документе и его реквизитах.
   Wow__cooL
3 - 07.03.04 - 22:04
(2) по поводу 1: но ведь если документ заранее не известен, то каким образом узнавать какие есть еще реквизиты, которые надо заполнить программно?
   Wow__cooL
4 - 07.03.04 - 22:06
а можно ли, используя
РеквТаб=ДокМД.РеквизитТабличнойЧасти(Инд);
написать:
ТаблЗнач.НоваяКолонка(РеквТаб,"ПолучитьТипТогоРеквизита",,,,);
это правильно?

ведь при загрузке в табличную часть идет совмещение колонок по именам, здесь такое совмещение произойдет?
   Кое-кто@где-то.там
5 - 07.03.04 - 22:09
Можно. Совмещение идет по именам. Только надо так:
РеквТаб=ДокМД.РеквизитТабличнойЧасти(Инд).ИДЕНТИФИКАТОР;
   327
6 - 07.03.04 - 23:03
А можно и не выеживаться.... а сделать

Док=CreateObject("Document.РасходнаяНакладная");
Док.New();
тз = CreateObject("ValueTable");
Док.UnloadTable(тз);


в результате имеем тз с прописанными колонками.... пустую.... Тип колонок определен

Кстати, (0) - поищи вчерашнюю ветку ... там я пример с периодикой привел...
   Wow__cooL
7 - 07.03.04 - 23:47
(6) а как узнать наименование колонки, если для их перебора использую цикл?
   Darkman
 
8 - 07.03.04 - 23:51
1) есть индекс... зачем имя.. ну да ладно.. можеть приспичило...
2) ПолучитьПараметрыКолонки(<?>,,,,,,,);
Синтаксис:
ПолучитьПараметрыКолонки(<Колонка>,<Тип>,<Длина>,<Точность>,<Заголовок>,<Ширина>,<Формат>,<Положение>)
Назначение:
Получить значения параметров колонки. Возвращает номер или код колонки. Если в параметре <Колонка> задан номер колонки, то возвращается код колонки, и наоборот.
Параметры:
<Колонка> - номер или код колонки, для которой требуется получить параметры.
<Тип> - необязательный параметр. Идентификатор переменной, в которую метод вернет строку, описывающую тип колонки или вид субконто.
<Длина> - необязательный параметр. Идентификатор переменной, в которую метод вернет длину для строковых и числовых значений.
<Точность> - необязательный параметр. Идентификатор переменной, в которую метод вернет точность для числовых значений колонки.
<Заголовок> - необязательный параметр. Идентификатор переменной, в которую метод вернет строку, описывающую заголовок колонки для показа.
<Ширина> - необязательный параметр. Идентификатор переменной, в которую метод вернет ширину колонки в таблице.
<Формат> - необязательный параметр.  Идентификатор переменной, в которую метод вернет форматную строку, которая используется при визуальном отображении значений данной колонки.
<Положение> - необязательный параметр.  Идентификатор переменной, в которую метод вернет вариант выравнивания при визуальном отображении значений данной колонки.  
PS ctrl+f1 == рулит форева.....

PS Число: 1 - слева; 2 - справа
   Darkman
 
9 - 08.03.04 - 00:07
Хотя отставить... срабатывает только если не выгрузитьтабличнуючасть() а создать колонки руками... с наименованием == заголовок. по нему и определять... сорри.. пора спать  уже:)
   Wow__cooL
10 - 08.03.04 - 00:10
(8)
1) это надо, чтобы сравнить выбранное имя реквизита и наименование колонки - для того чтобы в дальнейшем использовать только номер колонки
2) где здесь идентификатор или имя колонки? я вижу код или номер...
 
  Рекламное место пустует
   Wow__cooL
11 - 08.03.04 - 00:10
(9) да-да, и я о том же :)
   Darkman
 
12 - 08.03.04 - 00:17
уже проверил. еще раз сорри :)
сравнить выбранное имя реквизита и наименование... блин... нетривиально.. :)
   Darkman
 
13 - 08.03.04 - 00:21
"Ситуация следующая: при загрузке табличной части происходит запись только двух указанных колонок (Товар и Количество), при формировании же документа вручную при выборе товара происходит пересчет цены, суммы и остальных реквизитов сразу после выбора товара из справочника Номенклатура. Для того, чтобы это происходило и при программном создании документа, что надо сделать? Добавить новые колонки и в них записывать данные (НДС, Цена и так далее), а потом все это загружать в табличную часть? Другого способа нет?"
если вернутся к постановке задачи...
Тебе ведь надо вызвать функции пересчета из "формула" в полях МЧ? может просто их вызывать программно заполнив все необходимые реквизыты МЧ документа ?
   skunk
 
15 - 08.03.04 - 00:23
В ТиС в глобальнике есть процедура:
//****************************************************

//глПересчетТаблЧасти(Конт,ИмяРеквизита, ПараметрыРозничнойЦены) 
// 

//Параметры:                 
//  Конт                   - контекст документа, 

//  ИмяРеквизита           - идентификатор текущей колонки табличной части, 
//  ПараметрыРозничнойЦены - список значений для получения розничной цены из регистра остатков, если 

//                               не задан, то цена берется из справочника цен, если нужно.
   Wow__cooL
16 - 08.03.04 - 00:25
(15) а если этот внешний отчет будет использован не в ТиС?
   skunk
 
17 - 08.03.04 - 00:32
думаю в других тоже есть аналогичное, просто под рукой нет, абы проверить... но можно сделать аналогично...
   Darkman
 
18 - 08.03.04 - 00:35
смотри свой новый пост...
   Wow__cooL
19 - 08.03.04 - 00:41
(17) а можешь кинуть код?
в Бухии такого нет...
   Darkman
 
20 - 08.03.04 - 00:42
лана.... /me с чувством выполненого долга идет спать.... однако 4 часа ночи уже...
   GrayT
 
21 - 08.03.04 - 00:53
(19)Там вроде не глобальная функция, там в нужных документах используется. Что-то типа Перерасчет(ИмяРекв)
   skunk
 
22 - 08.03.04 - 00:59
саму функцию понту нет здесь пичкать, она кучу других тащит из глобальника... по моему легче найти ТиС и посмотреть... да и под отладчикам можно, для понятия приципов, погонять...
   Wow__cooL
23 - 08.03.04 - 01:04
(21) это да, есть такое в каждом, или не каждом - не знаю, но в некоторых точно есть

(22) может все же есть другой способ? неужели никак?
   skunk
 
24 - 08.03.04 - 01:09
мыло давай... а то она здоровая
   Wow__cooL
25 - 08.03.04 - 01:21
держи
   skunk
 
26 - 08.03.04 - 01:27
лови
   Wow__cooL
27 - 08.03.04 - 12:45
(26) все получила, спасибки. Теперь буду разбираться
   skunk
 
28 - 08.03.04 - 15:17
(27)восьмого, такой какой... брось на фих, на улице такая жара... погода так и шпечет "займи, но выпей"...



Список тем форума
Рекламное место пустует   Рекламное место пустует
Независимо от того, куда вы едете — это в гору и против ветра!
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует