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

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

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

    Если ТипЗнч(ДанныеЗаполнения)=Тип("Структура") Тогда
        ЗаполнитьЗначенияСвойств(ЭтотОбъект,ДанныеЗаполнения);

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

Jokerman: "а зачем создавать тз лишь с колонками я не понял".
Будут там и строки, заполню их значениями номенклатура из справочника (найдя по зачитанному коду в ТабДок), количества и цены. Другие колонки(реквизиты) в табличной части документ а не заполняю пока, так что будут эти три колонки в ТЗ. ТЗ собираюсь кинуть в структуру ДанныеЗаполнения. Как указать, чтобы заполнялись нужные колонки в табличной части документа из ТЗ с колонками Номенклатура, Цена и Количество?
12 keber
 
21.09.17
16:49
Заработало, всем спасибо за помощь.

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

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

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

&НаКлиенте
Процедура ОткрытьФормуНаКлиенте()

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

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

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