Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Yupiter
4 / 2 / 0
Регистрация: 20.04.2010
Сообщений: 130
1

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

21.09.2017, 11:04. Просмотров 1222. Ответов 10
Метки нет (Все метки)

Начинаю программировать на 8.3 после 7.7. Установили 1С 8.3 пока без сервера, файловая база используется. С 7.7 документ Заказ покупателя сохранён в mxl, в 8.3 нужно прочитать это и создать документ Заказ покупателя с данными из mxl.
Написал такой код:
1C
1
2
3
4
5
6
7
ДокОбъект = Документы.ЗаказПокупателя.СоздатьДокумент();
ДокОбъект.Дата = ТекущаяДата();
Для Строка_=19 По ТабДок.ВысотаТаблицы Цикл
    НоваяСтрок = ДокОбъект.Товары.Добавить();
    НоваяСтрок.Количество = 10;
    НоваяСтрок.Цена = 55;
КонецЦикла;
Чтение файла в Табличную часть ТабДок опустил, также опустил заполнение строк из ТабДок, тут просто цифры указал. Далее не записываю, просто хочу форму документа Заказ покупателя с заполненными строками открыть для просмотра, правильно ли там всё заполнено. Никак не получается, пробовал разные варианты, выдаются ошибки. В формах есть ФормаДокумента, так понимаю, что его нужно открыть с табличной частью Товары. Но как это сделать правильно?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2017, 11:04
Ответы с готовыми решениями:

Создать и открыть документ програмно
Пишу следующее Док = СоздатьОбъект("Документ.Такой-то"); Док.Новый();...

Открыть документ в нужной форме
Всем хорошего времени суток) Начал ковыряться над задачей: создать новый...

Открыть документ через макет
Подскажите, как можно через из макета открыть отображаемый документ?

Открыть программно созданный документ
Написал обработку по вводу платежек и выписки на основании доков на поступление...

Как провести документ без отмены проведения
Здраавствуйте! Мне нужно изменить статус физ лица, который был установлен...

10
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
21.09.2017, 11:09 2
Yupiter,
1C
1
2
3
4
5
6
7
8
ФормаДокумента = ПолучитьФорму("Документы.ЗаказПокупателя.ФормаДокумента");
ФормаДокумента.Объект.Дата = ТекущаяДата();
Для Строка_=19 По ТабДок.ВысотаТаблицы Цикл
    НоваяСтрок = ФормаДокумента.Объект.Товары.Добавить();
    НоваяСтрок.Количество = 10;
    НоваяСтрок.Цена = 55;
КонецЦикла;
ФормаДокумента.Открыть();
Добавлено через 52 секунды

Не по теме:

везде будет 10 и 55, да?) магические числа...

0
Yupiter
4 / 2 / 0
Регистрация: 20.04.2010
Сообщений: 130
21.09.2017, 12:05  [ТС] 3
Цитата Сообщение от GreenkA Посмотреть сообщение
везде будет 10 и 55, да?) магические числа...
Это тут просто для примера, а на самом деле числа берутся из ТабДок, в который данные зачитаны из mxl файла.

Добавлено через 51 минуту
Чтобы записать документ , правильно ли будет так?
1C
1
ФормаДокумента.Объект.Записать()
0
Yulunga
341 / 240 / 64
Регистрация: 22.04.2013
Сообщений: 1,615
Записей в блоге: 1
Завершенные тесты: 1
21.09.2017, 12:26 4
на форме - поле.
а записывать надо не поле, а сам объект
так что скорее объект.записать. причём желательно указать способ записи - проводить/не_проводить
0
Yupiter
4 / 2 / 0
Регистрация: 20.04.2010
Сообщений: 130
21.09.2017, 12:32  [ТС] 5
Получаю ошибку:
{ВнешняяОбработка.ПечатнуюФормуВЗаявкуПокупателя.Форма.Форма.Форма(20)}: Ошибка при вызове метода контекста (ПолучитьФорму)
Форма_ = ПолучитьФорму("Документы.ЗаказПокупателя.ФормаДокумента");
по причине:
Неизвестное имя формы. Имя: "Документы.ЗаказПокупателя.ФормаДокумента"

Странно, ведь структура такая в конфе:
Документы -> ЗаказПокупателя -> Формы (ФормаДокумента, ФормаСписка, ФормаВыбора, ...)
В начальном коде ведь не ругалась на табличную часть Товары. Почему на форму выдаёт ошибку?

Добавлено через 4 минуты
Цитата Сообщение от Yulunga Посмотреть сообщение
на форме - поле.
а записывать надо не поле, а сам объект
так что скорее объект.записать. причём желательно указать способ записи - проводить/не_проводить
Как получить объект для записи, если на форме не тот объект, который нужен? Правильно ли я понял?
0
Yulunga
341 / 240 / 64
Регистрация: 22.04.2013
Сообщений: 1,615
Записей в блоге: 1
Завершенные тесты: 1
21.09.2017, 12:38 6
Глобальный контекст.ДанныеФормыВЗначение (Global context.FormDataToValue)
Глобальный контекст (Global context)
ДанныеФормыВЗначение (FormDataToValue)
Синтаксис:
ДанныеФормыВЗначение(<Объект>, <Тип>)
Параметры:
<Объект> (обязательный)
Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура; ДанныеФормыДерево.
Данные формы.
<Тип> (обязательный)
Тип: Тип.
Тип значения, получаемого из данных формы.
Возвращаемое значение:
Тип: Произвольный.
Описание:
Преобразует данные формы в объект прикладного типа.
Доступность:
Сервер, толстый клиент, мобильное приложение(сервер).

я думаю что так, хотя почему у вас не тот объект, я не врубился (
0
Yupiter
4 / 2 / 0
Регистрация: 20.04.2010
Сообщений: 130
21.09.2017, 13:17  [ТС] 7
Это что-то? Поставил для эксперимента "ФормаСписка", нет ошибки. Но ошибку соответственно получаю дальше:
{ВнешняяОбработка.ПечатнуюФормуВЗаявкуПокупателя.Форма.Форма.Форма(22)}: Поле объекта не обнаружено (Объект)
Форма_.Объект.Дата = ТекущаяДата();

Что может быть не так с формой "ФормаДокумента"? В конфигурации "ФормаДокумента" стоит первой в списке форм.

Добавлено через 7 минут
Может ли как то это быть связано с правами пользователя? Что форму нельзя получить при исполнении обработки?

Добавлено через 16 минут
Попытка номер 2, подставил "ФормаОбъекта" (правильно ли?)
1C
1
2
        Форма_ = ПолучитьФорму("Документ.ЗаказПокупателя.ФормаОбъекта");
        Форма_.Объект.Дата = ТекущаяДата();
Получаем такую ошибку:
{ВнешняяОбработка.ПечатнуюФормуВЗаявкуПокупателя.Форма.Форма.Форма(22)}: Поле объекта не обнаружено (Объект)
Форма_.Объект.Дата = ТекущаяДата();

Как же заполнять табличную часть после получения формы?
0
Yulunga
341 / 240 / 64
Регистрация: 22.04.2013
Сообщений: 1,615
Записей в блоге: 1
Завершенные тесты: 1
21.09.2017, 13:23 8
вот потому и написано в правилах форума :
5.16. Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов платных услуг. Один вопрос - одна тема.
определяйтесь, что хотите, и задавайте разграниченно.
0
Yupiter
4 / 2 / 0
Регистрация: 20.04.2010
Сообщений: 130
21.09.2017, 13:29  [ТС] 9
Вроде бы всё связано с названием темы "Создать документ, заполнить и открыть без записи". В начале получилось создать документ, но не получалось открыть для просмотра. Было предложено создание формы и его открытия, но попытки заполнить выдают ошибки. Что же не так с темой?
0
polax
847 / 546 / 183
Регистрация: 16.01.2015
Сообщений: 1,993
21.09.2017, 14:31 10
Yupiter, Сначала Заполняете параметры формы
1C
1
2
3
4
5
6
7
8
9
10
ДатаДокумента = ТекущаяДата();
 
ПараметрыЗаполнения = Новый Структура;
 ПараметрыЗаполнения.Вставить("Дата", ДатаДокумента);
 
и т.д.
 ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ПараметрыЗаполнения);
 
МойДокумент =ПолучитьФорму("Документ.ЗаказПокупателя.ФормаДокумента");, ПараметрыФормы, ЭтаФорма);
МойДокумент.Открыть();
Далее в событии ОбработкаЗаполнения()
1C
1
2
3
4
5
6
7
8
9
10
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
   Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
      ДанныеЗаполнения.Свойство("Дата", ДатаДокумента);
   КонецЕсли; 
Для Строка_=19 По ТабДок.ВысотаТаблицы Цикл
    НоваяСтрок = Объект.Товары.Добавить();
    НоваяСтрок.Количество = 10;
    НоваяСтрок.Цена = 55;
КонецЦикла;
КонецПроцедуры
0
Yupiter
4 / 2 / 0
Регистрация: 20.04.2010
Сообщений: 130
21.09.2017, 16:45  [ТС] 11
Спасибо, будем пробовать.

Добавлено через 21 минуту
В ОбработкаЗаполнения() ДатаДокумента и Объект не определены.
Если ДатаДокумента можно определить вверху модуля как переменную, то откуда берём переменную объект?

Добавлено через 1 час 4 минуты

Основной реквизит оказалось называется ДокументОбъект.

Добавлено через 34 минуты
Получилось, всем спасибо за участие.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        Форма_ = ПолучитьФорму("Документ.ЗаказПокупателя.ФормаОбъекта");
        Форма_.ДокументОбъект.Дата = ТекущаяДата();
 
        Для Строка_=19 По ТабДок.ВысотаТаблицы Цикл
            Код_ = СокрЛП(ТабДок.Область(Строка_,44).Текст);
            Если Код_ <>"" Тогда
                ЭлементСсылка = Справочники.Номенклатура.НайтиПоКоду(Код_);
                Если ЗначениеЗаполнено(ЭлементСсылка) Тогда
                    НоваяСтрок = Форма_.ДокументОбъект.Товары.Добавить();
                    НоваяСтрок.Номенклатура = ЭлементСсылка;
                    НоваяСтрок.Количество = 10;
                    НоваяСтрок.Цена = 55;
                КонецЕсли;
            КонецЕсли
        КонецЦикла;
        Форма_.Открыть();
0
21.09.2017, 16:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2017, 16:45

Открыть форму и заполнить поле табличного документа
Привет, народ! подскажите, как открыть форму программно , сформировать макет...

Открыть форму из другой формы и заполнить ее табличную часть
Здравствуйте. Прошу помощи. Задача такая... Есть форма документа и...

Создать и провести документ
Можно ли создать и провести документ из общего модуля?..


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru