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



1C 8.3 Создать документ, заполнить и открыть без записи

1C 8.3 Создать документ, заполнить и открыть без записи
Я
   keber
 
21.09.17 - 14:05
Начинаю программировать на 8.3 после 7.7. Установили 1С 8.3 пока без сервера, файловая база используется. С 7.7 документ Заказ покупателя сохранён в mxl, в 8.3 нужно прочитать это и создать документ Заказ покупателя с данными из mxl.
Написал такой код:
ДокОбъект.Дата = ТекущаяДата();
Для Строка_=19 По ТабДок.ВысотаТаблицы Цикл
    НоваяСтрок = ДокОбъект.Товары.Добавить();
    НоваяСтрок.Количество = 10;
    НоваяСтрок.Цена = 55;
КонецЦикла;

Не получается далее открыть документ. Если делать так:
ФормаДокумента = ПолучитьФорму("Документы.ЗаказПокупателя.ФормаОбъекта");
ФормаДокумента.Объект.Дата = ТекущаяДата();

Не получается заполнить документ, рругается на Объект, что Поле объекта не обнаружено (Объект). Как правильно сделать, чтобы создать документ, запонить и открыть без записи?
 
 
   keber
 
1 - 21.09.17 - 14:07
Пропущено случайно в самом начале кода
ДокОбъект = Документы.ЗаказПокупателя.СоздатьДокумент();
   Jokerman
 
2 - 21.09.17 - 14:09
ДанныеЗаполнения = Новый Структура("Значение1,Значение2",Значение1,Значение2);
    ОткрытьФорму("Документ.ЗаказПокупателя.ФормаОбъекта",Новый Структура("ЗначенияЗаполнения",ДанныеЗаполнения), Элемент);
   Jokerman
 
3 - 21.09.17 - 14:10
В обработку заполнения:
    Если ТипЗнч(ДанныеЗаполнения)=Тип("Структура") Тогда
        ЗаполнитьЗначенияСвойств(ЭтотОбъект,ДанныеЗаполнения);

КонецЕсли;
   keber
 
4 - 21.09.17 - 14:21
Если будет сто строк прочитано из файла mxl, то при создании ДанныеЗаполнения нужно будет двести значений цены и количества указать "Значение1,Значение2"? Числа я тут только для примера написал, а на самом деле они зачитываются в табличную часть ТабДок из файла и там много лишнего, потому что просто печатная форма от заказа в 7.7. Я циклом получаю нужные значения кода номенклатуры,их цены и количества. Как же через цикл заполнить либо строки документа или ДанныеЗаполнения для последующего заполнения?
   Jokerman
 
5 - 21.09.17 - 14:23
(4) В данные заполнения что хочешь можешь кидать. в том числе и таблицу значений
   keber
 
6 - 21.09.17 - 14:38
Сначала значит из ТабДок в таблицу значений ТЗ отобрать нужные - номенклатура, количество, цена и кинуть в данные. Табличная часть Товары содержит немало колонок. Можно ли создавать ТЗ лишь с колонками (номенклатура, цена, количество), подойдёт ли для заполнения?
И реквизиты документа как заполнить перед открытием? Дата, Поставщик, Получатель и т.д.
   Jokerman
 
7 - 21.09.17 - 14:53
(6)  про реквизиты шапки я писал в (3), а зачем создавать тз лишь с колонками я не понял
   Вафель
 
8 - 21.09.17 - 14:56
код из (0) вполне норм. возможно у тебя основной реквизит не Объект
   keber
 
9 - 21.09.17 - 15:14
Где же тогда смотреть основной реквизит документа ЗаказПокупателя? Есть разные реквизиты у документа - Реквизиты (АдресДоставки, ВалютаДокумента, ...).
   Вафель
 
10 - 21.09.17 - 15:15
жирным шрифтом в форме
 
 Рекламное место пустует
   keber
 
11 - 21.09.17 - 15:41
Спасибо, оказалось что реквизит называется ДокументОбъект.

Jokerman: "а зачем создавать тз лишь с колонками я не понял".
Будут там и строки, заполню их значениями номенклатура из справочника (найдя по зачитанному коду в ТабДок), количества и цены. Другие колонки(реквизиты) в табличной части документ а не заполняю пока, так что будут эти три колонки в ТЗ. ТЗ собираюсь кинуть в структуру ДанныеЗаполнения. Как указать, чтобы заполнялись нужные колонки в табличной части документа из ТЗ с колонками Номенклатура, Цена и Количество?
   keber
 
12 - 21.09.17 - 16:49
Заработало, всем спасибо за помощь.
        Форма_ = ПолучитьФорму("Документ.ЗаказПокупателя.ФормаОбъекта");
        Форма_.ДокументОбъект.Дата = ТекущаяДата();
 
        Для Строка_=19 По ТабДок.ВысотаТаблицы Цикл
            Код_ = СокрЛП(ТабДок.Область(Строка_,44).Текст);
            Если Код_ <>"" Тогда
                ЭлементСсылка = Справочники.Номенклатура.НайтиПоКоду(Код_);
                Если ЗначениеЗаполнено(ЭлементСсылка) Тогда
                    НоваяСтрок = Форма_.ДокументОбъект.Товары.Добавить();
                    НоваяСтрок.Номенклатура = ЭлементСсылка;
                    НоваяСтрок.Количество = 10;
                    НоваяСтрок.Цена = 55;
                КонецЕсли;
            КонецЕсли
        КонецЦикла;
        Форма_.Открыть();
   Cyberhawk
 
13 - 21.09.17 - 16:59
(12) Не делай так, делай как в (2)
https://its.1c.ru/db/v8std#content:2149184053:hdoc
   Вафель
 
14 - 21.09.17 - 17:06
(13) Это нужно конфу модифицировать
   Cyberhawk
 
15 - 21.09.17 - 17:10
(14) А модуль объекта в расширении на 8.3.9 еще нельзя модифицировать?
   keber
 
16 - 21.09.17 - 17:59
Нашёл в текстах конфы.
    НовыйЗаказ = Документы.ЗаказПокупателя.СоздатьДокумент();
    НовыйЗаказ.ПолучитьФорму().Открыть();

Заполнять через НовыйЗаказ.Товары.Добавить() нельзя? Что значит модифицировать конфу?
   Вафель
 
17 - 21.09.17 - 18:20
так у тебя ОФ?
   AlvlSpb
 
18 - 21.09.17 - 19:44
(15) Можно, и модуль менеджера тоже можно
   keber
 
19 - 21.09.17 - 22:32
ОФ - это имеется ввиду что база нп локальном компьютере (файловая)?
   jsmith82
 
20 - 21.09.17 - 23:13
(19) Обычные, формы, йопт
Такое на уф не проканает (16)
   jsmith82
 
21 - 21.09.17 - 23:14
(16) Это значит, что в процедуре ОбработкаЗаполнения могет не быть кода, отвечающего за заполнение из переданной произвольной структуры
   jsmith82
 
22 - 21.09.17 - 23:16
(2) выгоден только тогда, когда есть (21) и особо ухищряться не надо
В иных случаях всё правильно в (12), но
   jsmith82
 
23 - 21.09.17 - 23:24
Вот тебе юнивёрсал способ
&НаКлиенте
Процедура ОткрытьФормуНаКлиенте()

    Форма = ПолучитьФорму("Документ.МойДокумент.Форма.ФормаДокумента");
    //Тут выполнится событие ПриСозданииНаСервере формы документа

    
    ДанныеФормы = Форма.Объект;
    //Бывает надо заполнить объект формы на сервере

    ЗаполнитьДокумент(ДанныеФормы);
    КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
    
    Форма.Открыть();
    //Тут выполнится событие ПриОткрытии формы документа

    
    //Вызываем клиентские и серверные процедуры, имитируя события изменения тех данных формы, которые мы изменили

    //Любые нужные процедуры модуля формы

    Форма.ОрганизацияПриИзмененииНаСервере();
    Форма.КонтрагентПриИзмененииНаСервере();
    Форма.ПодготовитьФормуНаСервере();

КонецПроцедуры

&НаСервере
Процедура ЗаполнитьДокумент(ДанныеФормы)
    
    //Работа с объектом формы на сервере

    //Всякий код

    
КонецПроцедуры

   keber
 
24 - 21.09.17 - 23:35
"Обычные, формы"
Ну да, вроде как обычная форма открылась форма заказа, практически как в 7.7 версии.
Для ОФ одно катит, для УФ другое значит катит. После 7.7 всё просто непривычно. Первую обработку создал и код домучал таки до рабочего состояния.
   jsmith82
 
25 - 21.09.17 - 23:35
Хотя, похоже, не в тему. У тебя конфигурация какая? УТ 10.3  в итоге окажется.
   keber
 
26 - 21.09.17 - 23:49
Управление производственным предприятием, редакция 1.3 (1.3.52.1)


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