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


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)восьмого, такой какой... брось на фих, на улице такая жара... погода так и шпечет "займи, но выпей"...



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