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

обработка:заполнение реквизита документа реквизитом другого документа

Я
   dezomorf1c

14.02.19 — 11:50

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

как исправить ошибку? :Поле объекта не обнаружено (Следующий)

Пока ДокументыПоступления.Следующий Цикл

Процедура ЗаполнитьНаСервере()

ДокументыПоступления = Документы.ПоступлениеТоваровУслуг.Выбрать();

Запрос = Новый Запрос;

Запрос.Текст = «ВЫБРАТЬ

               |    ЗаказПоставщику.Проект

               |ИЗ

               |    Документ.ЗаказПоставщику КАК ЗаказПоставщику»;

ТЗ = Запрос.Выполнить().Выгрузить();

Пока ДокументыПоступления.Следующий Цикл

    ЗаказПоставщику = ТЗ;

Если Не ЗначениеЗаполнено(ДокументыПоступления.Проект) И ЗначениеЗаполнено(ЗаказПоставщику.Проект) Тогда

ДокументОбъект = ДокументыПоступления.ПолучитьОбъект();

ДокументОбъект.Проект = ЗаказПоставщику.Проект;

ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);

КонецЕсли;

КонецЦикла;

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

  

Партнерская программа EFSOL Oblako

   ZDenis

1 — 14.02.19 — 11:52

(0) Ужас

   Василий Алибабаевич

2 — 14.02.19 — 12:00

(0) Не вдаваясь в детали (как сделал коллега из (1)) вот это вот : «Пока ДокументыПоступления.Следующий Цикл» должно быть записано вот так : «Пока ДокументыПоступления.Следующий() Цикл». Обратить особое внимание на скобки после слова «Следующий». Ибо оно — имя метода. И к нему нужно соответствующим образом обращаться.

   dezomorf1c

3 — 14.02.19 — 12:03

(2) мне стыдно.

   Василий Алибабаевич

4 — 14.02.19 — 12:21

(3) Крепитесь. Дальше будет хуже. Когда дойдете до «ДокументОбъект = ДокументыПоступления.ПолучитьОбъект();» — тогда осознаете весь трагизм ситуации. )))

   ZDenis

5 — 14.02.19 — 12:25

(4) Раньше, свалиться уже на этом:

Если Не ЗначениеЗаполнено(ДокументыПоступления.Проект) И ЗначениеЗаполнено(ЗаказПоставщику.Проект) Тогда

   dezomorf1c

6 — 14.02.19 — 12:43

(5) да, так и случилось

   Василий Алибабаевич

7 — 14.02.19 — 12:44

(6) Вот теперь можно начинать стыдиться.

   ZDenis

8 — 14.02.19 — 12:47

(6) вам для начала надо осмыслить откуда, что и куда вы хотите заполнить. В настоящий момент выбираете все поступления и все заказы. Но где связь между ними? Если бы даже такая обработка сработала, то вы бы во все поступления проставили какой-то проект совсем не связанный с этим поступлением.

   dezomorf1c

9 — 14.02.19 — 13:10

Свяжутся ли теперь проекты Проекты ?=Документы.ПоступлениеТоваровУслуг.НайтиПоРеквизиту(«Проект», Проект);

Запрос = Новый Запрос;

Запрос.УстановитьПараметр(«Ссылка»,Проект);

Запрос.Текст = «ВЫБРАТЬ

               |    ЗаказПоставщику.Проект

               |ИЗ

               |    Документ.ЗаказПоставщику КАК ЗаказПоставщику

               |ГДЕ

               |    ЗаказПоставщику.Проект = &Ссылка»;

   dezomorf1c

10 — 14.02.19 — 13:10

Проект =Документы.ПоступлениеТоваровУслуг.НайтиПоРеквизиту(«Проект», Проект);

Запрос = Новый Запрос;

Запрос.УстановитьПараметр(«Ссылка»,Проект);

Запрос.Текст = «ВЫБРАТЬ

               |    ЗаказПоставщику.Проект

               |ИЗ

               |    Документ.ЗаказПоставщику КАК ЗаказПоставщику

               |ГДЕ

               |    ЗаказПоставщику.Проект = &Ссылка»;

   dezomorf1c

11 — 14.02.19 — 13:14

рекв.Проект Поступления заполняется из рекв. Проект ЗаказаПоставщику

   ZDenis

12 — 14.02.19 — 13:32

(9) Не свяжутся. Просто пройдись по реквизитам «Поступления» (визуально) и посмотри есть ли там что-то типа «ЗаказПоставщику».

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

   dezomorf1c

13 — 14.02.19 — 13:45

(12) Да, такой реквизит имеется в Табличной части

   ZDenis

14 — 14.02.19 — 13:53

(13) если в табличной части, значит но одно поступление может быть несколько заказов. А если реквизит «Проект» всего один, то с какого заказа его заполнять?

   dezomorf1c

15 — 14.02.19 — 14:51

В документе ПТУ в ТЧ товары есть Заказы, но в ТЧ товары нету Проекта, поэтому на основании одного заказа создается документ один документ ПТУ, нужно из документа заказа достать значение реквизита Проект и поместить в документ ПТУ (в реквизит Проект).

   ZDenis

16 — 14.02.19 — 15:10

(15) Что-то типа такого

Запрос = Новый Запрос;

Запрос.Текст =

«ВЫБРАТЬ

|    ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,

|    ПоступлениеТоваровУслугТовары.ЗаказПоставщику.Проект КАК Проект

|ИЗ

|    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары

|ГДЕ

|    ПоступлениеТоваровУслугТовары.Ссылка.Проект.Ссылка ЕСТЬ NULL»;

ТЗ = Запрос.Выполнить().Выгрузить();

Для Каждого Строка Из ТЗ Цикл

Док = Строка.Ссылка.ПолучитьОбъект();

Док.Проект = Строка.Проект;

Док.Записать();

КонецЦикла;

   dezomorf1c

17 — 14.02.19 — 15:28

(16) хотел с отладчиком посмотреть ваш код, а сразу ругается :

Ошибка инициализации модуля: ОбщийМодуль.РаботаСОбщимиПеременными.Модуль

по причине:

{ОбщийМодуль.РаботаСОбщимиПеременными.Модуль(29,8)}: Переменная не определена (глОбщиеЗначения)

    Кэш = <<?>>глОбщиеЗначения;

{ОбщийМодуль.РаботаСОбщимиПеременными.Модуль(178,9)}: Переменная не определена (глОбщиеЗначения)

            Если <<?>>глОбщиеЗначения = Неопределено Тогда

{ОбщийМодуль.РаботаСОбщимиПеременными.Модуль(204,8)}: Переменная не определена (глОбщиеЗначения)

        Если <<?>>глОбщиеЗначения = Неопределено Тогда

   dezomorf1c

18 — 14.02.19 — 15:31

проверил на двух компах

   dezomorf1c

19 — 14.02.19 — 15:33

в любом случае , Спасибо за науку

   ZDenis

20 — 14.02.19 — 15:44

(19) ты куда это прописала? То что я дал.

Вроде разговор про обработку был

   dezomorf1c

21 — 14.02.19 — 15:46

(20) Прописал во внешнюю обработку

   ZDenis

22 — 14.02.19 — 15:48

а где она в общий модуль лезет?

   dezomorf1c

23 — 14.02.19 — 15:54

(22) не знаю. в режиме управл.приложении ошибка в общем модуле, а  в обычном приложении ошибки не выходит, но зависло

   ZDenis

24 — 14.02.19 — 16:03

(23) оно не зависло, оно выполняется.

А в УП надо смотреть как процедуры названы. Там директивы должны быть &НаКлиенте, &НаСервере

   dezomorf1c

25 — 14.02.19 — 17:28

(24) Такие директивы имеются

  

dezomorf1c

26 — 14.02.19 — 17:30

у меня база тяжелая 40ГБ. Оставлю на выполнение

0 / 0 / 1

Регистрация: 12.03.2012

Сообщений: 166

1

1C 8.x (тонкий)

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

12.05.2016, 13:48. Показов 22239. Ответов 12


Здравствуйте! Перейду собственно к проблеме — имеется два документа (Допустим Док1 и Док2), в одном документе есть совпадающие реквизиты (допустим ФИО и Адрес), которые необходимо автоматически заполнять из другого документа по кнопке на форме, чтобы не вводить их заново (но иногда некоторые реквизиты не заполняются в документе откуда требуется брать данные для заполнения). Подскажите, пожалуйста, возможную реализацию кода. Таблиц нет, есть только реквизиты, которые требуется скопировать. Смотрел ОбработкаЗаполнения(), но получалось только когда создавал один документ на основании другого, но это другое — мне надо чтобы по кнопке на форме заполнялись эти данные.



0



Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

12.05.2016, 14:12

2

zersturen, а эти два документа как-то связаны? Может в одном документе есть поле-ссылка на другой?



0



0 / 0 / 1

Регистрация: 12.03.2012

Сообщений: 166

12.05.2016, 14:21

 [ТС]

3

Нет, не связаны никак

Добавлено через 6 минут
Еще бы хотелось после нажатия кнопки выводилась форма списка другого документа, чтобы можно было выбрать из какого документа брать данные для заполнения.



0



Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

12.05.2016, 16:11

4

zersturen, ну тогда как вариант: создать какой-нибудь регистр сведений, куда бы документы делали движения с нужными значениями. И при создании документов подтягивать из этого регистра значения нужных реквизитов.



0



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С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

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



0 / 0 / 1

Регистрация: 12.03.2012

Сообщений: 166

13.05.2016, 09:27

 [ТС]

7

Я рассматривал этот вариант, но хотел не выводить этот реквизит (типа ДокументСсылка.Док1), чтобы лишнего на форме не было. А можно как-то это программно обойти по кнопке? То есть, допустим по нажатию на кнопку выводился либо список документов, либо форма списка документов, потом после выбора нужного документа проводилась процедура ЗаполнитьПоДокументуНаСервере()?



0



GreenkA

Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

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С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

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С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

13.05.2016, 14:38

12

zersturen, я же писала вам:

1C
1
2
3
4
//исключение номера и даты из заполнения
ЗаполнитьЗначенияСвойств(Объект, ДокументОснование,,"Номер, Дата");
Объект.СчетЗаказНомер = ДокументОснование.Номер;
Объект.СчетЗаказДата = ДокументОснование.Дата;



1



0 / 0 / 1

Регистрация: 12.03.2012

Сообщений: 166

13.05.2016, 14:45

 [ТС]

13

GreenkA, оказывается все просто))) Еще раз спасибо)



0



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

Автор Dirijabl, 21 мар 2016, 23:56

0 Пользователей и 1 гость просматривают эту тему.

Доброго времени суток. Комплексная автоматизация 1.1, в документе Заявка на расходование средств на форму добавлен реквизит ОтметкаОплаты, необходимо при создании на основании и последующем проведении Платежного поручения исходящего устанавливать значение этого реквизита — Истина и поменять значения реквизита Состояние на Закрыт. В модуле Платежного поручения исходящего пишу:
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
   Запрос.Текст =
     «ВЫБРАТЬ
     |   ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка КАК Ссылка
     |ИЗ
     |   РегистрНакопления.ДенежныеСредстваКСписанию.ОстаткиИОбороты КАК ДенежныеСредстваКСписаниюОстаткиИОбороты
     |      ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеИсходящееРасшифровкаПлатежа
     |      ПО ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка = ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка
     |ГДЕ
     |   ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
     |   И ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.ДокументОснование.Ссылка ССЫЛКА Документ.ЗаявкаНаРасходованиеСредств
     |   И ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка = &Документ»;
    Запрос.УстановитьПараметр(«Документ»,ЭтотОбъект.Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();
    Выборка.Заявка.ОтметкаОплаты=Истина;
    Выборка.Заявка.Состояние=Перечисления.СостоянияОбъектов.Закрыт;
КонецПроцедуры

Получаю ошибку: Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{Документ.ПлатежноеПоручениеИсходящее.МодульОбъекта(2392)}: Значение не является значением объектного типа (ОтметкаОплаты)

Подскажите, пожалуйста, как правильно.


1. В запросе выбирается единственное поле «ссылка» ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка КАК Ссылка,
откуда в выборке появляется поле «Заявка».
2. Для изменения докумета в 1С нужно работать типом ДокументОбъект, тогда как в запросе получен тип ДокументСсылка.
т.е. от полученной ссылки получаешь объект и уже далее с ним работаешь:


Заявка = Выборка.Ссылка.ПолучитьОбъект();
Заявка.ОтметкаОплаты = Истина;
Заявка.Состояние= Перечисления.СостоянияОбъектов.Закрыт;
Заявка.Записать();


Цитата: Dirijabl от 21 мар 2016, 23:56устанавливать значение этого реквизита

Вот с этого и начинаются проблемы. Это грубейшая ошибка и логики и методологии. НЕЛЬЗЯ в модуле проведения документа менять реквизиты самого документа-объекта.
Создавайте РС и пишите в него все ваши статусы, а на форму документа выводите значение из этого РС.


Надеюсь, правильно вас понимаю. Создаю РС Вспомогательный, непериодический, подчинен регистратору. В нем ресурсы — отметкавыплаты и состояние. Движения в регистр пишет документ Заявка на расходование средств. В модуле проведения Платежного поручения пишу:

Запрос = Новый Запрос;
   Запрос.Текст =
     «ВЫБРАТЬ
     |   Вспомогательный.Состояние,
     |   Вспомогательный.ОтметкаОплаты,
     |   Вспомогательный.Регистратор КАК Ссылка,
     |   ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка
     |ИЗ
     |   РегистрСведений.Вспомогательный КАК Вспомогательный
     |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДенежныеСредстваКСписанию.ОстаткиИОбороты КАК ДенежныеСредстваКСписаниюОстаткиИОбороты
     |      ПО Вспомогательный.Регистратор.Ссылка = ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.ДокументОснование.Ссылка
     |ГДЕ
     |   ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
     |   И ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка = &Документ»;
    Запрос.УстановитьПараметр(«Документ»,ЭтотОбъект.Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    НаборЗаписей = РегистрыСведений.Вспомогательный.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Ссылка);
    НаборЗаписей.Прочитать();
    Для Каждого Запись Из НаборЗаписей Цикл
    Запись.ОтметкаОплаты=Истина;
    Запись.Состояние=Перечисления.СостоянияОбъектов.Закрыт;
     КонецЦикла;

Ничего не происходит. Совсем не то?


Общую идею уловили правильно, а запрос безобразный. и соединения неправильные и параметры в запросе устанавливаются не те.


Подскажите пожалуйста, как исправить!


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


Это в запросе? Вроде все правильно выводит…


ОК. где метод Записать() набора РС?


Это видимо после цикал  НаборЗаписей.Записать(Истина);
Появляется ошибка {Документ.ПлатежноеПоручениеИсходящее.МодульОбъекта(2396)}: Ошибка при вызове метода контекста (Записать)

по причине:
Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Вспомогательный)


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

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

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

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

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

Заполнить данными из других документов в сервисе Выставить-счет.рф

Откроется таблица, содержащая перечень всех документов, выделите один или несколько документов, а также отметьте данные, которые необходимо заполнить:

  • Продавец и покупатель — будут заполнены все реквизиты покупателя и продавца;
  • Товары и услуги — будут заполнены товары и услуги;
  • Связь с документом — будет установлена связь с документами.

Затем нажмите кнопку Заполнить. Из документов будут взяты данные и вставлены в новый документ.

Вы уже научили выводить реквизит иного справочника и документа в форме документа. И даже редактировать.

Тут: 

http://novichok1c.ru/comment/1451#comment-1451

Отлично работает, за что еще раз ОГРОМНОЕ Спасибо!

Так же Вы научили редактировать «дистанционно» реквизит другого справочника или документа.

Однако у данного метода есть существенный недостаток:

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

В связи с чем 2 вопроса: 

Вопрос 1.

1С возможно объединить реквизит?

Т.е. создать один реквизит для нескольких документов?

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

Вопрос 2.

Как вывести данные реквизита документа(справочника) из формы списка другого документа?

(когда документы находятся в подчинении друг друга или связаны, как ЗаказПокупателя и РеализацияТоваровУслуг, Контрагенты и ЗаказПокупателя и т.д.)

Платформа 8.2.13.219 Комплексная Автоматизация 1.1.12.1 Стоит задача при проведении входящего платежного поручения проставлять в поле ДатаОплаты заказа покупателя (поставщику) дату платежного поручения. При отмене проведения дата должна удаляться. Собственно как это реализовать? Прописать в процедуре ПриЗаписи платежного поручения необходимые манипуляции или делать с помощью движений регистров? Если первый вариант, то в какую процедуру запихивать очистку реквизита при отмене проведения?

Почему? это же просто реквизит планируемой даты оплаты — по-крайней мере так написано в Справке, хотя по этому реквизиту у нас все менеджеры смотрят — пришла оплата или нет) Сейчас ставим его ручками при загрузке платежки.

Нет гарантии целостности. Т.е. нет гарантии что при проведении одного документа 100% изменяться реквизиты другого. Например кто-то в нем сидеть может в данный момент, или еще какая транзакция

очень плохая идея… Лучше регистр завести.

то же полагаю это не лучший способ контролировать оплату… но если «все пацаны»… — сделай подписку на событие. про регистры вообще не понял. хотя, если это мысль в сторону отслеживать оплату заказов через запрос к регистру (например в УТ есть «расчеты с покупателями») — направление мысли целиком поддерживаю!

А если, например, оплата тремя платежами? ну и

+100 хотя, если бизнес-процессы у товарисча «отлиты в граните» и «у нас такого не бывает» (и не будет никогда?? точно???) — почему бы и нет. Вот еще, отчеты какието открыватть настраивать! а так раз — журнал заказов — колонка дата оплаты — всем счастие…

в КА этот регистр накопления называется «Расчет с контрагентами». Вопрос теперь как его лучше задействовать?

По моему, он сам работает, без посторонней помощи. Анализ заказа открывать пробовали?

пробовали, но это все лишние щелчки мыши

В случае использования подписки на события не может ли возникнуть ситуация как в ? т.е. если кто-нибудь сидит в заказе, то дата проставится или нет?

Сделал через подписки на событие

Наделал себе под писку — так не позорился бы на людях. Стыдоба. Сказали же, как правильно.

И куда этот регистра пихать? Отдельной колонкой? В журнале заказов? Вариантов того, что кто-то будет в это время что-нибудь менять в заказе — очень мала. Заказ составлен, любые изменения с помощью Корректировки заказа.

Именно так. Это не сложно. А по нужно делать проверки: РежимПроведения — бывает разным. Источник.РасшифровкаПлатежа.ВыгрузитьКолонку(«Сделка»)[0] — расшифровка платежа может быть пустой. Может быть из двух, трех записей. Сделка.ДатаОплаты = Дата — дата может быть пустой, а дата оплаты может быть заполнена.

+ Дата может равняться дате оплаты. Это тоже необходимо учесть.

РежимПроведения — бывает разным — вроде все работает, как при оперативном, так и при неоперативном. расшифровка платежа может быть пустой. — потому и стоит ЗначениеЗаполнено Если пустой, тогда Сообщение. Может быть из двух, трех записей. — Может, но у нас одна платежка — один счет. Хотя проверку на всякий случай сделать надо. дата может быть пустой, а дата оплаты может быть заполнена. — и кто ее заполнил? только если кто-то вручную проставил, ничего страшного если проставится датаоплаты по платежке.

А если частично заказ оплачен?

а это на что может повлиять? немного не понял… а за конструктивную критику спасибо)

отгрузка только после 100 предоплаты — галочка в договоре стоит.

или имеется ввиду, что дата будет проставляться даже если заказ частично оплачен? тогда понял…

откопал в типовой КА запрос на выбор суммыоплаты и суммызаказа, только понять не могу все что после ИЗ стоит. Конструктор запросов ругается на ошибку

С запросом разобрался, только если его вставить в подписку на событие ПриПроведении, то значение СуммаОплаты в отладчике без учета проводимой платежки. Т.е. получается на момент выполнения подписки, движения по регистрам еще не были сделаны. Я думал подписки на события всегда после этих самых событий выполняются. Как быть в этом случае?

Как вариант дописывать сумму платежки к существующим оборотам, но по-моему это немного кривовато.

сам спросил, сам ответил) нет не ПриЗаписи.

Не делай такую доработку, ты как программист системы должен предложить иное решение для контроля оплаты. Не разрушай конфигурацию.

Сдается мне, если бы его работодатель знал, что он оплатил несколько дней работы программиста, которые стоят юзеру одного койка мышкой, он бы этого программиста в ж о п у в ы е б а л.

вы все про Анализ Заказа покупателя намекаете ;)

Совершенно непонятна конечная цель этих телодвижений. ЗАЧЕМ ВСЕ ЭТО ??? В конфигурациях все предусмотрено. Если нужен специальный анализ — напиши свой отчет. И не лезь в конфу. ТС может объяснить — что будет дальше с датой оплаты в заказе?

Цель автоматически заполнять реквизит ДатаОплаты в Заказе покупателя при формировании платежного поручения, чтобы журнале заказов уже была видна эта дата оплаты, без нажатия всяких отчетов и анализов.

Реквизит «ДатаОплаты» заказа покупателя имеет другое назначение — он используется для планирования платежей. Использовать его не желательно. Использование списка документов для анализа оплаты ?… Представляю как бухгалтера смотрят на список документов и объясняют кому то — что то. просто необходимо заставить себя и окружающих пользоваться отчетами. Иначе так и будете считать на счетах.

бухгалтера знают куда смотреть, а вот менеджеры… а так смотрят журнал заказов и сразу клиенту говорят — пришла оплата по этому счету или нет, и если да, то когда, не нажимая при этом анализ и не ища заветную графу.

Пойми, ты работаешь, например, не с чистым листом в экселе, куда лепишь формулы, где захочется, а с готовой системой, которая предполагает определенную логику работы и грамотную модификацию. Твоя задача как специалиста решить вопрос грамотно, не ломая дров.

я для этого рисовал в журнале внизу два окна: слева — отгрузки, справа — платежи ну и при получении данных обновляешь инфу в окошках

Уважаемые, подскажите, у нас дата оплаты проставляется автоматически при оформлении заказа, как это отключить??

А еще можно при отображении строки списка заказов обратиться к платежкам и получить есть или нет оплата. Соответственно вывести в строке списка флаг «Оплачено». Изменений минимум и блокировок не будет. Правда отображение списка заказов поднагрузится :)

дак тогда можно и строки красить. Помню занимался таким ужасом… свят-свят :) И ведь не докажешь начальству, что это глупо и нелепо…

Подскажите пож-та подробнее как это сделать, я ещё только учусь)))

)))) Да, понимаю, ужас, а что делать, если у нас программист знает не больше меня

А программист, он же и консультант, он же и админ, он же погоняло для манагеров и груша для бития бушками?

ну знает то он может и побольше, только ему обычно некогда такими мелочами заниматься. При том он еще и не в штате, а со стороны, приходит так иногда.

Обратись к автору , может что и подскажет, я УТ новую не зрел, но припоминаю, что там это поле дейстивтельно закрывалось какой-то обработиной по регламенту.

КА у меня нет, расскажу как в УПП. Заказ покупателя, по логике конфигурации, оформляется с предположением, что товар будет оплачен. Поэтому дата оплаты всегда равна дате документа плюс число дней резерва без оплаты из договора (подразумевается, что товар по заказу резервируется, а иначе зачем оформлять заказ — оформляйте счет — он ни к чему не обязывает). Если же в организации подразумевается обязательное оформление заказа, то, наверное, менеджер сам должен проконтролировать дату оплаты, т.е когда покупатель собирается платить. Без изменения кода не заполнять дату оплаты нельзя. Я для менеджеров по продажам пишу специальные обработки, в которых в зависимости от различных условий контролирую правильность оформления заказа.

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Частая задача — сделать так, чтобы форма нового объекта открывалась не «пустая», а уже заполненная некоторыми начальными данными. Для самых простых случаев можно использовать свойство ЗначениеЗаполнения, которое есть у реквизитов объектов конфигурации. В более сложных случаях можно использовать свойство ЗаполнятьИзДанныхЗаполнения. Если ни тот, ни другой способы не подходят, на встроенном языке можно описать собственный алгоритм начального заполнения данных нового объекта.

Свойство ЗначениеЗаполнения

Например, есть документ Накладная с реквизитом Склад. В подавляющем большинстве случаев товары приходуются на главный склад, и лишь в отдельных редких случаях они могут приходоваться на другие склады. Чтобы облегчить работу оператора и не заставлять его каждый раз выбирать один и тот же склад в новых накладных, можно поступить следующим образом.

У реквизитов объектов конфигурации существует свойство ЗначениеЗаполнения. Реквизит Склад имеет тип ссылки на справочник Склады, а в справочнике Склады существует предопределенный элемент ГлавныйСклад. Тогда прямо в конфигураторе можно указать, что в новых документах реквизит Склад будет сразу же заполнен ссылкой на ГлавныйСклад:

Cвойство ЗаполнятьИзДанныхЗаполнения

Пусть у пользователя список накладных отобран по поставщику и по складу. Необходимо сделать так, чтобы при вводе новой накладной эти значения (поставщик и склад) сразу же подставлялись в нужные поля накладной. Для решения этой задачи достаточно открыть накладную в конфигураторе и для ее реквизитов Поставщик и Склад установить свойство ЗаполнятьИзДанныхЗаполнения:

Теперь будет происходить следующее. В режиме 1С:Предприятие пользователь отобрал список накладных по некоторому поставщику и некоторому складу. При вводе новой накладной с помощью команды «Создать» списка, поля Поставщик и Склад будут заполнены именно теми значениями, по которым отобран список накладных:

Собственный алгоритм заполнения реквизитов

Для этого предназначено событие объекта ОбработкаЗаполнения. Первым параметром процедуре ОбработкаЗаполнения() передаются ДанныеЗаполнения. Проанализировав их тип, можно определить, каким именно образом вводится новый объект, и выполнить соответствующий этому варианту алгоритм. Например:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
                
     Если ДанныеЗаполнения = Неопределено Тогда 
          // «Простой» ввод нового объекта
                               
     ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Поставщики") Тогда 
          // Новый объект вводится на основании другого объекта. 
          // В этом случае в данные заполнения передается ссылка на объект, являющийся основанием.
          // В данном случае обрабатывается ввод на основании элемента справочника Поставщики.
                               
     ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
          // Новый объект вводится командой из отобранного списка.
          // В данных заполнения будет структура, содержащая значения отбора:
          // «Поставщик» — СсылкаНаПоставщика
          // «Склад» — СсылкаНаСклад
                               
     КонецЕсли;
                               
КонецПроцедуры

Параметр СтандартнаяОбработка позволяет управлять дальнейшим развитием событий. Если ему присвоить значение Ложь, то никаких других действий по заполнению реквизитов формы платформа предпринимать не будет, а сразу создаст форму и вызовет ее серверное событие ПриСозданииНаСервере.

Если же не менять стандартное значение этого параметра, то после выхода из этого обработчика платформа попытается самостоятельно заполнить реквизиты объекта, подлежащие заполнению. Незаполненными она будет считать те реквизиты, которые имеют стандартное значение своего типа. Например, для типа Число это значение 0, для типа Строка — пустая строка, а для типа Ссылка — пустая ссылка.

Для простоты предположим, что у объекта всего один реквизит, подлежащий заполнению. Тогда платформа будет действовать по следующему алгоритму:

  • Реквизит заполнен — сразу будет вызван обработчик события ПриСозданииНаСервере.
  • Реквизит не заполнен — платформа попытается заполнить его из ДанныеЗаполнения. После этого снова проверит, заполнен реквизит или нет:
    • Реквизит заполнен — сразу будет вызван обработчик события ПриСозданииНаСервере.
    • Реквизит не заполнен — платформа попытается заполнить его из ЗначениеЗаполнения. После этого будет вызван обработчик события ПриСозданииНаСервере.

Поиск:
1С:Предприятие • Документ • Заполнять из данных заполнения • Значение заполнения • Обработка заполнения

Понравилась статья? Поделить с друзьями:
  • Заработок в бизнес такси в москве на арендованной машине
  • Зарубежный опыт налогообложения субъектов малого бизнеса
  • Зарядка собачка которая шевелится во время работы купить
  • Застройщики красноярска список компаний официальный сайт
  • Зачем бизнесу поддерживать развитие математической науки