Имя: Пароль:
1C
 
1С8 УТ программное открытие и заполнение докУстановкаЦен
0 Шёпот теней
 
25.06.09
15:47
мне нужно из екселя создать и заполнить Документы.УстановкаЦенНоменклатуры ...

1. не получается открыть любой документ программно, типа:
   докУстЦен = Документы.УстановкаЦенНоменклатуры.НайтиПоНомеру("00000001039");
   докУстЦен.ПолучитьФорму("ФормаДокумента").Открыть();

1С пишет: "{Форма.ФормаОтчёта(45)}: Ошибка при вызове метода контекста (ПолучитьФорму): Элемент не выбран!" ..

2. создаю:
   документУстановкаЦенНоменклатуры = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
   
       документУстановкаЦенНоменклатуры.ТипыЦен.Очистить();
       новСтрТипыЦен = документУстановкаЦенНоменклатуры.ТипыЦен.Добавить();
       новСтрТипыЦен.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001");
   
   документУстановкаЦенНоменклатуры.ПолучитьФорму("ФормаДокумента").Открыть();

...

документ открывается, заполнено поле ТипЦен, активна табличнаяЧасть но заполнять программно у меня не получается ... т.к. у документа есть табличныеЧасти.Товары а форме документа используется таблицаЗначений.ТаблицаЦен а как они взаимодействуют понять не могу...

... что? делаю не так ...

... подскАжите...

... воОотТааааКааааЯпроблема ...
1 Ненавижу 1С
 
гуру
25.06.09
15:49
(0) зачем тебе вообще форма то?
2 butterbean
 
25.06.09
15:50
(0) 1. в методе найтиПоНомеру() дату добавь
2. там все просто, но не совсем :-) поковыряй этот документ
3 Шёпот теней
 
25.06.09
15:58
(1) а как....? для создания документа не нужно а после создания документа, нужно показать его пользователю ...
(2) ... точно ... про дату -то я и забыл ... спасибо ...!
... та, что динамически создаётся ... но никак не могу сообразить ...(если я правильно сообразил) ...

может есть у кого какой пример ...
4 Шёпот теней
 
25.06.09
16:28
.. видно, что в тз.ТаблицаЦен строки попадают из тч.Товары ...

при заполнении:

       строкаТаблицаТовары.Номенклатура  = Справочники.Номенклатура.НайтиПоКоду("00000003076");
       строкаТаблицаТовары.Цена  = 12345;

   документУстановкаЦенНоменклатуры.ПолучитьФорму("ФормаДокумента").Открыть();

1С пишет:
{Документ.УстановкаЦенНоменклатуры.Форма.ФормаДокумента(597)}: Поле объекта не обнаружено (цена)
       НоваяСтрока["цена" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.Цена;


чтоДелать...ЧТОделать....?

...воОот...
5 kn
 
25.06.09
16:31
ДокументОбъект = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
ДокументОбъект.Дата = ДатаДок;
НовТипЦен = ДокументОбъект.ТипыЦен.Добавить();
НовТипЦен.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Базовая");//или какая там я


//и добавляешь в тчТовары данные из Excel
тчТовары = ДокументОбъект["Товары"];
Объект = тчТовары.Добавить();
Объект["Номенклатура"] = Номенклатура;
Объект["Валюта"]       = ВалютаРубли;
Объект["ЕдиницаИзмерения"] = Номенклатура.ЕдиницаХраненияОстатков;
ТипЦены = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Базовая");
Объект["ТипЦен"]       = ТипЦены;
Объект["Цена"] = Цена;

//записываешь документ
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);    
Исключение
Сообщить("НЕ ЗАПИСАН");
КонецПопытки;
6 butterbean
 
25.06.09
16:33
(4) там есть реквизит в ТЧ, называется типа ИндексСтрокиТаблицыЦен, по нему совмещаются данные в ТаблицаЦен и Товары
7 Шёпот теней
 
25.06.09
16:34
(5) .... СПАСИБО ... пробую ...
(6) ... спасибо ... понЯл ...
8 Шёпот теней
 
25.06.09
16:54
делаю так:

   документУстановкаЦенНоменклатуры = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
   документУстановкаЦенНоменклатуры.Дата = ТекущаяДата();
   
       документУстановкаЦенНоменклатуры.ТипыЦен.Очистить();
       новСтрТипыЦен = документУстановкаЦенНоменклатуры.ТипыЦен.Добавить();
       
           ТипЦены = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001");
       новСтрТипыЦен.ТипЦен = ТипЦены;
       
       ТаблицаТовары = документУстановкаЦенНоменклатуры.Товары;
       строкаТаблицаТовары = ТаблицаТовары.Добавить();
       
       тчТовары = документУстановкаЦенНоменклатуры["Товары"];
       
           строкаТаблицаТовары = тчТовары.Добавить();
               товар = Справочники.Номенклатура.НайтиПоКоду("00000003076");
           строкаТаблицаТовары["Номенклатура"] = товар;
           строкаТаблицаТовары["Валюта"]       = Справочники.Валюты.НайтиПоКоду("643");
           строкаТаблицаТовары["ЕдиницаИзмерения"] = товар.ЕдиницаХраненияОстатков;
           строкаТаблицаТовары["ТипЦен"]       = ТипЦены;
           строкаТаблицаТовары["Цена"] = 2345;
                   
           Попытка
               документУстановкаЦенНоменклатуры.Записать(РежимЗаписиДокумента.Проведение);    
           Исключение
                Сообщить("НЕ ЗАПИСАН");
           КонецПопытки;
                   
   документУстановкаЦенНоменклатуры.ПолучитьФорму("ФормаДокумента").Открыть();

1С выдаЁт :
Проведение документа: Установка цен номенклатуры 00000001048 от 25.06.2009 16:51:44
В строке номер "1" табличной части для типа цен "" не заполнена Номенклатура.
В строке номер "1" табличной части для типа цен "" не заполнена Валюта.
НЕ ЗАПИСАН

а в конфигураторе на ту же строку с ценой:
{Документ.УстановкаЦенНоменклатуры.Форма.ФормаДокумента(597)}: Поле объекта не обнаружено (цена)
       НоваяСтрока["цена" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.Цена;

может ещё раз подскажете чего не хвАтает ... а то уже "НЕвижу" ...

...воооОооот...
9 frum
 
25.06.09
17:01
А не удобнее делать заполнение документа через меню Заполнить в документе? Щелкнул по подменю Заполнить, выбрал пункт загрузки из экселя, тебя спросили файл, выбрал, все загрузилось. По моему очень удобно.
10 CyberNut
 
25.06.09
17:06
Вырвано из контекста, но думаю будет понятно:
ВыбрЦена1 и ВыбрЦена2 реквизиты диалога тип "ТипыЦенНоменклатуры"

..........
   Если НеЗагружатьЦены = Ложь Тогда
       Док = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
       Док.Дата = ТекущаяДата();
       
       Если ВыбрЦена1.Пустая() = Ложь Тогда
           ТипЦены = Док.ТипыЦен.Добавить();
           ТипЦены.ТипЦен = ВыбрЦена1;
       КонецЕсли;
       
       Если ВыбрЦена2.Пустая() = Ложь Тогда
           ТипЦены = Док.ТипыЦен.Добавить();
           ТипЦены.ТипЦен = ВыбрЦена2;
       КонецЕсли;
   КонецЕсли;
...........
               Если ВыбрЦена1.Пустая() = Ложь Тогда
                   СтрокаДок =  Док.Товары.Добавить();
                   СтрокаДок.Номенклатура = Ном.Ссылка;
                   СтрокаДок.Валюта = ВалютаЗакупЦены1;
                   СтрокаДок.ЕдиницаИзмерения = Ном.ЕдиницаХраненияОстатков;
                   СтрокаДок.ТипЦен = ВыбрЦена1;
                   СтрокаДок.Цена = Число(СокрЛП(ЗакупЦена1));
               КонецЕсли;
               Если ВыбрЦена2.Пустая() = Ложь Тогда
                   //2-я закупочная цена
                   СтрокаДок =  Док.Товары.Добавить();
                   СтрокаДок.Номенклатура = Ном.Ссылка;
                   СтрокаДок.Валюта = ВалютаЗакупЦены2;
                   СтрокаДок.ЕдиницаИзмерения = Ном.ЕдиницаХраненияОстатков;
                   СтрокаДок.ТипЦен = ВыбрЦена2;
                   СтрокаДок.Цена = Число(СокрЛП(ЗакупЦена2));
               КонецЕсли;
           КонецЕсли;
           Кол = Кол + 1;
           Состояние("Обработано " + Строка(Кол) + " объектов.");
       КонецЕсли;
КонецЦикла;
..........
11 Шёпот теней
 
25.06.09
17:11
(9) ... можно и так, конечно ... но еслиначал надо закончить .... ужжжж... буду "стрАдать" что не одолел ...
(10) ... спАсибо ... пробую ...
12 kn
 
25.06.09
17:14
(8)вот эти строчки закомментируй(их в моем примере не было)и будет все ОК

//ТаблицаТовары = документУстановкаЦенНоменклатуры.Товары;
//строкаТаблицаТовары = ТаблицаТовары.Добавить();
13 Шёпот теней
 
26.06.09
08:07
(12) ... огромное СПАСИБО ... действительно без них всЁ ОК ...)))

всем БОЛЬШОЕ спАсибо ...!

подскажите ... а, почему док.УстЦен тАк заполняется в ТЗ через ТЧ ... понимаю, что "большое" видится на рАсстоянии, НО мне трУдно понять неОбходимость  вВедения столь "сложного" мЕханизма заполнения дАнного дОкумента ...?

... воооот ...!
14 kn
 
26.06.09
08:28
При выборе нескольких типов цен чтобы пользователю было удобно вносить все одной строкой для этого сделано табличноеполе с динамическими создающимися колонками по числу типов цен, а потом уже эти данные переносятся в табличные части документа.Но в примере заполнение идет непосредственно табличных частей документа (ТипЦен и Товары)
15 Шёпот теней
 
26.06.09
08:34
(14) нууу... ЧТО такое несеолько типовЦен - группа аналитических признАков ...  ... ЕЁ как "группу" можно куда угодно "положить" и на форме и в ТЧ ...? или я чего-то НЕдоПОНИМАЮ ...?
16 kn
 
26.06.09
08:39
ну вот хочется занести сразу закупочные,оптовые,розничные цены и на выбор пользователя как их занести одной строчкой, а не по каждой вот и придумали 1с такой механизм
17 Шёпот теней
 
26.06.09
08:46
(16) ... кто мЕшает собрать той же "дополнительной формой" поставить галочки, собрать "список цен с галочками" и положить на "форму" или в "ТЧдокумента" ... и при записи в регСвед записывать столько раз сколько указано ТипЦен ...

... пОнятно ... вопрос риторический ... есть ТО, что ЕСТЬ ...

ВСЕМ большое спАсибо и ОГРОМНАЯ блАгодарность ...

... с Уважением Александр Шишкин (Шёпот теней) ...