Имя: Пароль:
1C
1С v8
Запись реквизитов в новый документ Заказ клиента УТ11
,
0 newtech
 
naïve
14.11.22
13:02
Подскажите почему не сохраняет подставленные реквизиты в новом документе
1.Комментарий сохраняет
2.Функция находит контрагента по ИНН, вместо *, подставляю ИНН
Заранее спасибо!

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

&НаСервере
Функция ЗаполнитьНовыйДокумент(ДанныеФормы)
   ИНН = "*********";
   ДанныеФормы.Комментарий = "Создан автоматически";
   ДанныеФормы.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН) ;
   Возврат ДанныеФормы;
КонецФункции

1 Ryzeman
 
14.11.22
13:24
Повис над твоим кодом и пытаюсь минут 5 понять: почему ты думаешь он должен работать?... И как он должен работать?

Если у тебя задача создать документ, зачем вообще этот изврат с формой?
2 newtech
 
naïve
14.11.22
13:38
(1) да, задача создать новый документ по кнопке, предварительно обработав DBF файл(этот вопрос для себя решил) , и заполнить данными новый документ. 1С для меня хобби (программлю для себя), так что сильно  не пинайте. За пример кода буду безмерно благодарен.
3 Kassern
 
14.11.22
13:40
(2) Обычно вот это дело:
Форма=ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта");
  ДанныеФормы=Форма.Объект;
  ДанныеФормы = ЗаполнитьНовыйДокумент(ДанныеФормы);
  КопироватьДанныеФормы(ДанныеФормы,Форма.Объект);

Используется, когда нужно открыть пользователю заполненную форму нового документа, еще не записанного в базу.

Если вам нужно просто создать документ и его заполнить, тогда вам форма вообще не нужна. просто Док=Документы.ЗаказКлиента.СоздатьДокумент(); И заполняете реквизиты Док.
4 Ryzeman
 
14.11.22
13:48
(3) Не, ДанныеФормы = ЗаполнитьНовыйДокумент(ДанныеФормы); и то что внутри не используется ни для чего. Вообще ни для чего)))


(2) Не сочти за наезд, просто порой удивительно видеть человек 12 лет на мисте и такое) Хотя тут семёрочников много и тех кто УФ в глаза не видел.

Как написал (3) На сервере создаёшь объект документа и заполняешь его. Если очень надо - на клиент возвращаешь ссылку и можешь открыть.
Для таких извратов что ты делал есть ещё РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы(). Но не надо)
5 Kassern
 
14.11.22
13:53
(4) "не используется ни для чего" - Да все можно было использовать, скорее всего ТС стянул кусок кода из открытия формы с заполнением. Просто вместо открыть() в конце написал Записать().

Вот у меня кусок кода, который это делает:

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

&НаСервере
Функция ЗаполнитьДокументНаСервере(ДанныеФормы);
Док = Документы.ОтчетКомиссионера.СоздатьДокумент();
....//Заполняем поля
ЗначениеВДанныеФормы(Док,ДанныеФормы);
КонецФункции
6 Kassern
 
14.11.22
13:54
(5) + ну и ТС забыл Создать документ)
7 Ryzeman
 
14.11.22
13:55
(5) Ну это уже больше похоже на правду, но у тебя нет
ДанныеФормы = ЗаполнитьНовыйДокумент(ДанныеФормы);
:-D
8 newtech
 
naïve
14.11.22
17:31
у меня  по кнопке ОБРАБОТАТЬ ЗАКАЗЫ С ПОЧТЫ, на почте лежат DBF файлы, которые я успешно считываю и преобразовываю в формат для заполнения формы нового документа ЗаказКлиента.
Задача создать ЗаказКлиента не открывая его, ТЕ программно заполнить пустые поля или изменить реквизиты, которые автоматически прописываются при создании НД.
в данном случае мне нужно заполнить или изменить данные реквизиты
1. заполнить поле Клиент, поле соглашение должно автоматически прописаться (понятно , что предварительно) данный контрагент должен быть прописан в базе.
2. заполнить поля номер заказа и дату (по данным клиента), ну и табличную часть.
3. Изменить реквизит статус и способ доставки на применимый к данному заказу из файла.

и вот это я так понимаю мне не подходит, открывает совершенно пустой документ.
Док = Документы.ОтчетКомиссионера.СоздатьДокумент();

в моем коде автоматически создается документ, уже с заполненными реквизитами по умолчанию, и пустым полем контрагент, но как правильно заполнить и записать реквизит мне не понятно., я понимаю что это нужно сделать перед сохранением.
9 Kassern
 
14.11.22
17:34
(8) "и вот это я так понимаю мне не подходит, открывает совершенно пустой документ. " - у вас вообще документ не должен открываться судя по задаче. Этот кусок кода создает новый документ, который вы можете заполнить впоследствии и записать в базу:
Док = Документы.ВашДок.СоздатьДокумент();
Док.Организация=ВашаОрганизация;
Док.Партер=ВашПартнер;
И т.д.

Док.Записать(НужныйРежимЗаписиДокумента);

Можете сообщить(Док.Ссылка) при желании
10 newtech
 
naïve
19.11.22
22:44
И все же после некоторых экспериментов с кодом, у меня так и не получается реализовать задуманное., попробую еще раз по подробней описать задачу. Конфигурация УТ11, Расширение.
1. Создал расширение в режиме Адаптация
2. На форме ФормаСпискаДокументов (ЗаказыКлиентов) Создал программно кнопку СОЗДАТЬ ЗАКАЗЫ
3. При нажатии на кнопку выбираю DBF файл и обрабатываю его
4. По ИНН нужно найти в справочнике Контрагента, это я делаю этим способом
ДанныеФормы.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН) ;
или  просто Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН)

5.Нужно программно создать новый документ с заполнением реквизитов по умолчанию(не открывая его)
6. изменить(Статус и Способ доставки) и заполнить поля(Клиент, адрес доставки, номер заказа по данным клиента и др), где я так понимаю после добавления клиента, должно автоматически подтянуться соглашение по умолчанию.
7. Заполнить табличную часть, ну все это провести.
Если коротко, то Программное создание Заказ клиента с заполнением, проведением не открывая его.
Причем поля такие как комментарий сохраняет присвоенное значение, а вот с полем Контрагент (Клиент) не получается, я так понимаю , что скорей всего я должен указать, как ссылка на справочник, как это сделать не могу найти.
11 newtech
 
naïve
20.11.22
13:11
Разобрался....
Нужно было добавить одну строчку, при снятом флаге (Независимо вести Партнеров и Контрагентов, прописывался только Контрагент, поле которого было скрыто.

  ДанныеФормы.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН) ;
  ДанныеФормы.Партнер    =  ДанныеФормы.Контрагент.Партнер; // Заполняем поле Клиент (Партнер)


Но теперь возникает следующий вопрос, как вызвать СОБЫТИЕ при изменении поля Партнер, для того чтобы автоматически заполнилось поле Соглашение
12 Сергиус
 
20.11.22
14:48
(11)Такое ощущение, пытаетесь код из обычных форм, перенести на управляемые. Эти события расчитаны на интерактивную работу в пользовательском режиме. Если вы хотите их автоматического выполнения, придется повторять в самом коде их работу и вызов.
13 Остап Ибрагимович
 
20.11.22
16:43
если надо заполнить документ - заполняйте документ. это про объекты данных.
формы к этой задаче - никаким боком. вообще. потому что формы - это про интерфейс.
(вообще ваши телодвижения очень напоминают древние когнитивные ошибки семерочников, путающих подчиненность документов и ввод на основании)
14 newtech
 
naïve
20.11.22
18:15
(13) Покажите пример, как тоже самое можно реализовать по другому(правильно), очень давно не программил в 1с, сейчас возникла необходимость, не исключаю что, что то делаю не так., опираюсь на найденные примеры.
15 Остап Ибрагимович
 
20.11.22
18:23
(14): (3), (9), и т.п.
прим.: если этого недостаточно - значит начинать надо издалека. на уровне курсов. а курсы - платные.