Имя: Пароль:
1C
 
Форма документа открывается пустой
,
0 Klesk666
 
19.02.16
09:57
Хочу открыть форму заполненного но не записанного документа, что не так?

&НаКлиенте
Процедура СоздатьУстановкуЦен(ДокументОприходывания)
    Форма = ПолучитьФорму("Документ.УстановкаЦенНоменклатуры.ФормаОбъекта");
    ДанныеФормы = Форма.Объект;
    ЗаполнитьДокументНаСервере(ДанныеФормы,ДокументОприходывания);
    КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
    Форма.Открыть();        
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗаполнитьДокументНаСервере(ДанныеФормы,ДокументОприходывания)
    ТекОбъект= ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.УстановкаЦенНоменклатуры"));
    ТекОбъект.ДокументОснование=ДокументОприходывания;
    ЗапросВидыЦен=Новый Запрос("ВЫБРАТЬ
                               |    ВидыЦен.Ссылка КАК ВидЦены
                               |ИЗ
                               |    Справочник.ВидыЦен КАК ВидыЦен
                               |ГДЕ
                               |    ВидыЦен.УстанавливатьЦенуПриВводеНаОсновании
                               |    И НЕ ВидыЦен.ПометкаУдаления
                               |
                               |ОБЪЕДИНИТЬ ВСЕ
                               |
                               |ВЫБРАТЬ
                               |    ВидыЦен.Ссылка
                               |ИЗ
                               |    Справочник.ВидыЦен КАК ВидыЦен
                               |ГДЕ
                               |    ВидыЦен.ВлияющиеВидыЦен.ВлияющийВидЦен.УстанавливатьЦенуПриВводеНаОсновании
                               |    И НЕ ВидыЦен.ПометкаУдаления");
                              
    ТекОбъект.ВидыЦен.Загрузить(ЗапросВидыЦен.Выполнить().Выгрузить());
    ТаблицаТовары=ДокументОприходывания.Товары.Выгрузить();    
    ТекОбъект.Товары.Загрузить(ТаблицаТовары);    
    ТекОбъект.Ответственный=Пользователи.ТекущийПользователь();
    ТекОбъект.Дата=ТекущаяДата();
    ЗначениеВДанныеФормы(ТекОбъект,ДанныеФормы);
КонецПроцедуры
1 Klesk666
 
19.02.16
16:09
хелп ми
2 mikecool
 
19.02.16
16:16
почему безконтекста?
3 Klesk666
 
19.02.16
18:05
(2) делал по примеру http://catalog.mista.ru/public/118784/
, поменял НаСервере ничего не изменилось, документ пустой, хотя в отладчике и ДанныеФормы и Форма.Объект заполнены
4 Ma3eIIa
 
19.02.16
19:03
не вижу создать объект
5 Klesk666
 
19.02.16
19:20
в публикации тоже нет "Создать объект"
6 Ma3eIIa
 
19.02.16
19:24
(5) ну как же.
http://prntscr.com/a5cj6h
А если найду
7 Klesk666
 
19.02.16
19:25
(6) там написано ИЛИ
кроме того так тоже не получилось
8 Ma3eIIa
 
19.02.16
19:31
(7) у меня пример работает. и слова ИЛИ там нет.
9 Klesk666
 
20.02.16
08:30
Спасибо, все получилось, может кому пригодится:

&НаКлиенте
Процедура СоздатьУстановкуЦен(ДокументОприходывания)
    Форма = ПолучитьФорму("Документ.УстановкаЦенНоменклатуры.ФормаОбъекта");    
    ДанныеФормы = Форма.Объект;
    ЗаполнитьДокументНаСервере(ДанныеФормы,ДокументОприходывания);
    КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
    Форма.ЗаполнитьДокумент();
    Форма.ПостроитьДеревоЦен();
    Форма.ЗагрузитьТабличнуюЧастьТовары();
    Форма.Элементы.НомерВПределахДня.Видимость=Истина;
    ПараметрыРассчета=Новый Структура;
    ВидыЦен=Новый Массив;
    Для Каждого ВидЦены Из Форма.Объект.ВидыЦен Цикл
        Если Не ЦенаЗадаетсяВручную(ВидЦены.ВидЦены) Тогда
            ВидыЦен.Добавить(ВидЦены.ВидЦены);
        КонецЕсли;        
    КонецЦикла;
    Форма.Элементы.Основание.Видимость=Истина;
    
    ПараметрыРассчета.Вставить("ВидыЦен", ВидыЦен);
    ПараметрыРассчета.Вставить("ТолькоВыделенныеСтроки",Ложь);
    ПараметрыРассчета.Вставить("ЗагрузкаСтарыхЦен",Ложь);
    ПараметрыРассчета.Вставить("ОкруглениеРучныхЦен",Ложь);
    ПараметрыРассчета.Вставить("ТолькоНезаполненные",Ложь);
    
    Форма.РассчитатьЦены(ПараметрыРассчета);
    Форма.Открыть();        
КонецПроцедуры


&НаСервере
Процедура ЗаполнитьДокументНаСервере(ДанныеФормы,ДокументОприходывания)    
    ТекОбъект=Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    ТекОбъект.ДокументОснование=ДокументОприходывания;
    ЗапросВидыЦен=Новый Запрос("ВЫБРАТЬ
                               |    ВидыЦен.Ссылка КАК ВидЦены
                               |ИЗ
                               |    Справочник.ВидыЦен КАК ВидыЦен
                               |ГДЕ
                               |    ВидыЦен.УстанавливатьЦенуПриВводеНаОсновании
                               |    И НЕ ВидыЦен.ПометкаУдаления
                               |
                               |ОБЪЕДИНИТЬ ВСЕ
                               |
                               |ВЫБРАТЬ
                               |    ВидыЦен.Ссылка
                               |ИЗ
                               |    Справочник.ВидыЦен КАК ВидыЦен
                               |ГДЕ
                               |    ВидыЦен.ВлияющиеВидыЦен.ВлияющийВидЦен.УстанавливатьЦенуПриВводеНаОсновании
                               |    И НЕ ВидыЦен.ПометкаУдаления");
                              
    ВидыЦен=ЗапросВидыЦен.Выполнить().Выгрузить();                      
    ТекОбъект.ВидыЦен.Загрузить(ВидыЦен);
    ТаблицаТовары=ДокументОприходывания.Товары.Выгрузить();        
    Для Каждого Товар Из ТаблицаТовары Цикл
        Для Каждого ВидЦены Из ВидыЦен Цикл
            СтрокаТовар=ТекОбъект.Товары.Добавить();
            СтрокаТовар.ВидЦены=ВидЦены.ВидЦены;
            СтрокаТовар.Номенклатура=Товар.Номенклатура;
            СтрокаТовар.Цена=Товар.Цена;
            ВидЦены=Справочники.ВидыЦен.СоздатьЭлемент();            
            СтрокаТовар.ЦенаИзмененаВручную=?(ВидЦены.СпособЗаданияЦены=Перечисления.СпособыЗаданияЦен.Вручную,Истина,Ложь);
        КонецЦикла;
    КонецЦикла;     
    ТекОбъект.Ответственный=Пользователи.ТекущийПользователь();
    ТекОбъект.Дата=ТекущаяДата();
    ЗначениеВДанныеФормы(ТекОбъект,ДанныеФормы);
КонецПроцедуры
10 Klesk666
 
20.02.16
09:38
Еще добавить:
В первую процедуру, чтобы номер в пределах дня был правильным:
Форма.Объект.Дата=НачалоДня(Форма.Объект.Дата) + Форма.НомерВПределахДня - 1;

Во вторую, чтобы были движения:
    ТекОбъект.Статус=Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;
    ТекОбъект.Согласован=Истина;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший