» Казахстанский Бухгалтерский форум www.balans.kz

Копирование реквизитов и элементов табличной части справочника в соответствующий тип

 
Показать сообщения:
Начиная со старых .::. Начиная с новых


Автор: daysemsk
Добавлено: #1  Чт Авг 07, 2008 15:23:35
Заголовок сообщения: Копирование реквизитов и элементов табличной части справочника в соответствующий тип

Привет всем! Стоит задача скопировать реквезит Контрагент (проставляемый в документе), в текстовое поле добавленное мною(тип строка(100)), также необходимо скопировать элемент Номенклатура в табличной части документа , также в поле добавленное мною. Говоря простым языком нужно, чтобы при перепроведений документа найменование Контрагент скопировалось в пустое текстовое поле, такое же действие должно пройзоити в табличной части док-та с реквезитом Номенклатура. Я примено представляю как это все будет, элементарный цикл, наверное с таблицами значений или списками значений . но как это все увязать по порядку ????

Добавлено спустя 1 минуту 47 секунд:

аналогичная задача стоит в 1с 8.1 ....



Автор: d.Fedor
Добавлено: #2  Чт Авг 07, 2008 16:27:53
Заголовок сообщения:

Так понимаю поле у тебя на форме и в него нужно скопировать указаные значения?


Автор: daysemsk
Добавлено: #3  Чт Авг 07, 2008 16:33:17
Заголовок сообщения:

да именно, поле на форме и в него надо скопировать значение Контрагент(выбираемый ессено с одноименного справочника) в пустое текстовое поле, тоже самое действие надо пройзвести в табличной части документа с реквезитом номенклатура, то есть скопировать его в добавленное пустое поле в табличной части документа.


Автор: т.Сема
Добавлено: #4  Чт Авг 07, 2008 17:51:52
Заголовок сообщения:

Может быть я ошибаюсь, но у меня подобная задача стояла при запоминании предыдущего контрагнета в договоре долевого стр-ва. Ибо при записи нового долевика старый долевик в договоре затирался. Суть - предыдущего контра перкидывает в реквизит Предыдущий контр, и долоняем его как строку в общий список предыдущих контров....
Код:
[b]Процедура ПриЗаписи[/b]()
   
   ////записываем предыдущего контрагента
   Если (ПустоеЗначение(ПредыдущийКонтрагент)=1) Тогда
      ПредыдущийКонтрагент=Контрагент;
      
   ИначеЕсли (ПустоеЗначение(ПредыдущийКонтрагент)=0) Тогда
      Если (ПредыдущийКонтрагент<>Контрагент) Тогда
         Если (ПустоеЗначение(СокрЛП(Строка(ПредыдущиеКонтрагенты)))=0) Тогда
            ПредыдущиеКонтрагенты=СокрЛП(Строка(ПредыдущиеКонтрагенты))+"; "+СокрЛП(Строка(ПредыдущийКонтрагент));
            Сообщить("Записан в предыдущие контрагенты "+СокрЛП(Строка(ПредыдущийКонтрагент)));
            ПредыдущийКонтрагент=Контрагент;
         ИначеЕсли (ПустоеЗначение(СокрЛП(Строка(ПредыдущиеКонтрагенты)))=1) Тогда
            ПредыдущиеКонтрагенты=СокрЛП(Строка(ПредыдущийКонтрагент));
            Сообщить("Записан в предыдущие контрагенты "+СокрЛП(Строка(ПредыдущийКонтрагент)));
            ПредыдущийКонтрагент=Контрагент;
         КонецЕсли;
      КонецЕсли;   
   КонецЕсли;
   
КонецПроцедуры

Здесь ПредыдущийКонтрагент - реквизит шапки тип спр-к. контрагенты,
ПредыдущиеКонтрагенты - реквизит шапки тип строка. Он то и показывается в диалоге - типа "Сидоров, Петров..."...мона и в журнале показать также....

Может быть каг то таг ? Прием универсален...



Автор: daysemsk
Добавлено: #5  Пт Авг 08, 2008 08:49:54
Заголовок сообщения:

Спасибо большое !!! процедура супер, а такая простая, только я ее вставил в обработку проведения и строчку (ПредыдущийКонтрагент<>Контрагент) за менил на (ПредыдущийКонтрагент=Контрагент) мне не надо было его сравнивать на неравенство, задача стояла просто скопировать элемент. Но все равно большое спасибо !!!


Автор: daysemsk
Добавлено: #6  Пт Авг 08, 2008 11:34:23
Заголовок сообщения:

Да совсем забыл такое же действие необходимо пройзвести в табличной части документа с реквезитом Номенклатура(также создан дополнительный реквезит КопияНоменк ), предыдущий пример прекрасно работает, НО только с первой записью, попробовал циклом , не идет или я цикл неправильно делаю??? Вот он
Процедура ПриЗаписи()
Если (ПустоеЗначение(МаркаЦемента)=1) Тогда
МаркаЦемента=МаркаЦемента;

ИначеЕсли (ПустоеЗначение(МаркаЦемента)=0) Тогда
Если (МаркаЦемента = МаркаЦемента) Тогда
Если (ПустоеЗначение(СокрЛП(Строка(КопияНоменк)))=0) Тогда

Док = СоздатьОбъект("Документ.ОтгрузкаЖДВагонов");
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку(МаркаЦемента)=1 цикл
КопияНоменк=СокрЛП(Строка(КопияНоменк))+"; "+СокрЛП(Строка(МаркаЦемента));
МаркаЦемента=МаркаЦемента;

конеццикла;
ИначеЕсли (ПустоеЗначение(СокрЛП(Строка(КопияНоменк)))=1) Тогда
КопияНоменк=СокрЛП(Строка(МаркаЦемента));
МаркаЦемента=МаркаЦемента;

КонецЕсли;
КонецЕсли;
КонецЕсли;

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



Автор: d.Fedor
Добавлено: #7  Пт Авг 08, 2008 12:07:26
Заголовок сообщения:

Цитата:
Док.ВыбратьСтроки();

А строки тебе нужно выбрать из табличной части...
Блин, забываю семерку напрочь :)



Автор: daysemsk
Добавлено: #8  Пт Авг 08, 2008 12:28:13
Заголовок сообщения:

Да нужно из табличной, делаю цикл не получаеться.....


Автор: d.Fedor
Добавлено: #9  Пт Авг 08, 2008 13:37:51
Заголовок сообщения:

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


Автор: daysemsk
Добавлено: #10  Пт Авг 08, 2008 13:48:18
Заголовок сообщения:

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

ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
КопияНоменк =СокрЛП(Строка( МаркаЦемента.Наименование));
КопияНоменк = СокрЛП(Строка(КопияНоменк))+"; "+СокрЛП(Строка(МаркаЦемента));
МаркаЦемента = МаркаЦемента;
КонецЦикла;



Автор: daysemsk
Добавлено: #11  Пн Авг 11, 2008 14:35:33
Заголовок сообщения:

Да и еще один момент, наверное этот вопрос мне надо было бы в разделе Разработка 8.0 , но я так подумал, что мне надо бы продолжить тему здесь. теперь стоит задача немного дргуая.
в одном докумнте есть два реквезита в шапочной части документа Контрагент(тип.Справочник) и КопияКонтр(тип.Строка).
Задача. необходимо скопировать значение реквезита КопияКонтр в Контрагент. обратная задача решаеться достаточно легко.
Примерно вот так
КопияКонтр = "";
КопияКонтр = СокрЛП(Строка(Контрагент.Наименование));
а как сделать наоборот ?????



Автор: d.Fedor
Добавлено: #12  Пн Авг 11, 2008 14:53:22
Заголовок сообщения:

:)
Контрагент = НайтиПоНаименованию(СокрЛП(КопияКонтр));
Только как быть если однотипных наименований несколько?
Поэтому имхо такие задачи решать следует по другому, без текстовых полей.



Автор: daysemsk
Добавлено: #13  Пн Авг 11, 2008 18:00:41
Заголовок сообщения:

Не получаеться таким способом, ну никак мне не удаеться подцепится к какому либо свойству/методу этого текстового реквезита . что делать ?


  

Служба поддержки WWW.BALANS.KZ