Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
1

Заполнение на форме данными из другого документа

12.05.2016, 13:48. Просмотров 4914. Ответов 12
Метки нет (Все метки)

Здравствуйте! Перейду собственно к проблеме - имеется два документа (Допустим Док1 и Док2), в одном документе есть совпадающие реквизиты (допустим ФИО и Адрес), которые необходимо автоматически заполнять из другого документа по кнопке на форме, чтобы не вводить их заново (но иногда некоторые реквизиты не заполняются в документе откуда требуется брать данные для заполнения). Подскажите, пожалуйста, возможную реализацию кода. Таблиц нет, есть только реквизиты, которые требуется скопировать. Смотрел ОбработкаЗаполнения(), но получалось только когда создавал один документ на основании другого, но это другое - мне надо чтобы по кнопке на форме заполнялись эти данные.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2016, 13:48
Ответы с готовыми решениями:

Заполнение табличной части одного документа данными из ТЧ другого
Здравствуйте. Есть 2 документа: 1) "Выдача книги" с табличной частью "Список" с реквизитами...

обработка:заполнение реквизита документа реквизитом другого документа
делаю обработку.В документе ПТУ в ТЧ товары есть Заказы, но в ТЧ товары нету Проекта, поэтому на...

Заполнение ТЧ одного документа ТЧ другого, заполнение тч из запроса
&НаСервере Процедура ЗаполнитьНаСервере() Запрос = Новый Запрос; Запрос.Текст = ...

Заполнение документа данными из справочника
Здравствуйте! Столкнулась с проблемой. Есть Справочник "ПроизводственныйДефект" который имеет...

Заполнение документа данными из двух справочников
Поскажите, пожалуйста, с заполнением данными документа. Данные берутся из справочника Данные о...

12
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
12.05.2016, 14:12 2
zersturen, а эти два документа как-то связаны? Может в одном документе есть поле-ссылка на другой?
0
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
12.05.2016, 14:21  [ТС] 3
Нет, не связаны никак

Добавлено через 6 минут
Еще бы хотелось после нажатия кнопки выводилась форма списка другого документа, чтобы можно было выбрать из какого документа брать данные для заполнения.
0
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
12.05.2016, 16:11 4
zersturen, ну тогда как вариант: создать какой-нибудь регистр сведений, куда бы документы делали движения с нужными значениями. И при создании документов подтягивать из этого регистра значения нужных реквизитов.
0
12.05.2016, 16:11
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
13.05.2016, 07:13  [ТС] 5
Ну регистры есть, но как по кнопке подтягивать из регистра данные, чтобы они заполняли необходимые реквизиты? Запросом? Что-то типа того:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
&НаСервере
Процедура ЗаполнитьПоДок2НаСервере()
    
  НовДок = Документы.Док1.СоздатьДокумент();
       
//Дальше вот хз что делать..... 
//Если писать запрос, то надо иметь возможность выбрать нужный документ...
 
//ОткрытьФорму("Документ.Док2.ФормаОбъекта"); //здесь наверное надо открыть форму списка, чтобы выбрать нужный документ, из которого берем данные
//НовДок.Колво = Док2.Колво;
//НовДок.Сумма = Док2.Сумма;
    
  НовДок.Записать(РежимЗаписиДокумента.Проведение); 
    
КонецПроцедуры
 
 
&НаКлиенте
Процедура ЗаполнитьПоДок2(Команда)
    
  ЗаполнитьПоДок2НаСервере();    
  Элементы.Обновить();
    
КонецПроцедуры
Добавлено через 10 минут
GreenkA, и спасибо что так активно помогаете нам, начинающим)))
0
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
13.05.2016, 08:23 6
zersturen, что-то по вашим комментариям в коде, я думаю, надо просто добавить в Док2 реквизит "Док1" типа ДокументСсылка.Док1. Вынести на форму и на событие изменения этого поля прописать:
1C
1
2
3
4
5
6
7
8
9
10
&НаКлиенте
Процедура Док1ПриИзменении(Элемент)
 ЗаполнитьПоДокументуНаСервере();
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьПоДокументуНаСервере()
//при наличии одноименных реквизитов с одинаковыми типами в обоих документах можно прописать так
 ЗаполнитьЗначенияСвойств(Объект, Объект.Док1);
КонецПроцедуры

Не по теме:

Цитата Сообщение от zersturen Посмотреть сообщение
GreenkA, и спасибо что так активно помогаете нам, начинающим)))
:curtsy:

1
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
13.05.2016, 09:27  [ТС] 7
Я рассматривал этот вариант, но хотел не выводить этот реквизит (типа ДокументСсылка.Док1), чтобы лишнего на форме не было. А можно как-то это программно обойти по кнопке? То есть, допустим по нажатию на кнопку выводился либо список документов, либо форма списка документов, потом после выбора нужного документа проводилась процедура ЗаполнитьПоДокументуНаСервере()?
0
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
13.05.2016, 09:55 8
Лучший ответ Сообщение было отмечено zersturen как решение

Решение

zersturen, можно на кнопку прописать:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
&НаКлиенте
Процедура ЗаполнитьПоДокументу(Команда)
    СписокДокументов = ПолучитьСписокДокументовНаСервере();
    ДокументОснование = ВыбратьИзСписка(СписокДокументов);
    Если ДокументОснование <> Неопределено Тогда
        ЗаполнитьПоДокументуНаСервере(ДокументОснование.Значение);
    КонецЕсли;
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьПоДокументуНаСервере(ДокументОснование)
    //при наличии одноименных реквизитов с одинаковыми типами в обоих документах можно прописать так
    ЗаполнитьЗначенияСвойств(Объект, ДокументОснование);
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ПолучитьСписокДокументовНаСервере()
    Список = Новый СписокЗначений;
    Выборка = Документы.Документ1.Выбрать();
    Пока Выборка.Следующий() Цикл
        Список.Добавить(Выборка.Ссылка);        
    КонецЦикла;
    Возврат Список;
КонецФункции
Можно использовать вместо ВыбратьИзСписка() - ВыбратьИзМеню().
1
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
13.05.2016, 11:25  [ТС] 9
Ругается на модальность, я так понял надо через ПоказатьВыборИзСписка(), но чет там все замудрено

Добавлено через 6 минут
Сделал так:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
&НаКлиенте
Процедура ЗаполнитьПоСчетЗаказу(Команда)
    
    СписокДокументов = ПолучитьСписокДокументовНаСервере();
    ПоказатьВыборИзСписка(Новый ОписаниеОповещения("ВыполнитьПослеВыбора", ЭтотОбъект),СписокДокументов);
    
КонецПроцедуры
 
&НаКлиенте
Процедура ВыполнитьПослеВыбора(ДокументОснование, ДополнительныеПараметры) Экспорт
    
    Если ДокументОснование <> Неопределено Тогда
        ЗаполнитьПоДокументуНаСервере(ДокументОснование.Значение);
    КонецЕсли;
    
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьПоДокументуНаСервере(ДокументОснование)
    //при наличии одноименных реквизитов с одинаковыми типами в обоих документах можно прописать так
    ЗаполнитьЗначенияСвойств(Объект, ДокументОснование);
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ПолучитьСписокДокументовНаСервере()
    Список = Новый СписокЗначений;
    Выборка = Документы.СчетЗаказ.Выбрать();
    Пока Выборка.Следующий() Цикл
        Список.Добавить(Выборка.Ссылка);        
    КонецЦикла;
    Возврат Список;
КонецФункции
Единственное список почему-то появляется на одном из реквизитов

Добавлено через 1 минуту
А мне бы желательно, чтобы открывалась форма списка документа...
А, и еще как избежать заполнения таких данных как Номер и Дата, они тоже подгружаются из другого документа? А сами процедуры отрабатывают хорошо, реквизиты с одинаковыми именами заполняются на ура))
0
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
13.05.2016, 13:02 10
Цитата Сообщение от zersturen Посмотреть сообщение
Ругается на модальность
в свойствах конфигурации выставите "Режим использования модальности - использовать".

Цитата Сообщение от zersturen Посмотреть сообщение
А мне бы желательно, чтобы открывалась форма списка документа...
пропишите тогда так:
1C
1
2
    СписокДокументов = ПолучитьСписокДокументовНаСервере();
    ДокОснование = СписокДокументов.ВыбратьЭлемент();
если не включите модальность, то надо использовать - ПоказатьВыборЭлемента(). См. синтакс-помощник.

Цитата Сообщение от zersturen Посмотреть сообщение
А, и еще как избежать заполнения таких данных как Номер и Дата
1C
1
ЗаполнитьЗначенияСвойств(Объект, ДокументОснование,,"Номер, Дата");
1
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
13.05.2016, 14:32  [ТС] 11
Спасибо большое!)) Все работает как надо

Добавлено через 23 минуты
И еще вопрос, сделал так:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
&НаКлиенте
Процедура ЗаполнитьПоСчетЗаказу(Команда)
    
    СписокДокументов = ПолучитьСписокДокументовНаСервере();
    ДокументОснование = СписокДокументов.ВыбратьЭлемент();
    Если ДокументОснование <> Неопределено Тогда
        ЗаполнитьПоДокументуНаСервере(ДокументОснование.Значение);
    КонецЕсли;
    
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьПоДокументуНаСервере(ДокументОснование)
    //при наличии одноименных реквизитов с одинаковыми типами в обоих документах можно прописать так
    ЗаполнитьЗначенияСвойств(Объект, ДокументОснование);
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ПолучитьСписокДокументовНаСервере()
    Список = Новый СписокЗначений;
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   СчетЗаказ.Ссылка,
        |   СчетЗаказ.ВерсияДанных,
        |   СчетЗаказ.ПометкаУдаления,
        |   СчетЗаказ.Номер КАК СчетЗаказНомер, //здесь СчетЗаказНомер это реквизит в документе Док1, куда надо получать номер СчетЗаказа
        |   СчетЗаказ.Дата КАК СчетЗаказДата, ////здесь СчетЗаказДата это реквизит в документе Док1, куда надо получать датуСчетЗаказа
        |   СчетЗаказ.Проведен,
        |   СчетЗаказ.ФИОЗаказчик,
        |   СчетЗаказ.АдресЗаказчик,
        |ИЗ
        |   Документ.СчетЗаказ КАК СчетЗаказ";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Список.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
    КонецЦикла;
 
    Возврат Список;
    
КонецФункции
В итоге он все равно подставляет Номер к Номер, Дата к Дата, а надо чтобы Номер к СчетЗаказНомер, Дата к СчетЗаказДата. Как подставить?
0
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
13.05.2016, 14:38 12
zersturen, я же писала вам:
1C
1
2
3
4
//исключение номера и даты из заполнения
ЗаполнитьЗначенияСвойств(Объект, ДокументОснование,,"Номер, Дата");
Объект.СчетЗаказНомер = ДокументОснование.Номер;
Объект.СчетЗаказДата = ДокументОснование.Дата;
1
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
13.05.2016, 14:45  [ТС] 13
GreenkA, оказывается все просто))) Еще раз спасибо)
0
13.05.2016, 14:45
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2016, 14:45

Заполнение ТЧ одного документа ТЧ другого
&amp;НаСервере Процедура ЗаполнитьНаСервере() Запрос = Новый Запрос; Запрос.Текст = ...

Автоматическое заполнение полей документа данными из справочника
Помогите пожалуйста с написанием модуля. есть справочник сотрудники с реквизитами: табельный...

Заполнение документа данными из шаблона в регистре сведений
Доброго времени суток. Не могу справиться с задачей, поэтому прошу специалистов о помощи! Имеется...


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

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

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