Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Как в идентификатор записать значение переменной (http://forums.kuban.ru/f1040/kak_v_identifikator_zapisat-_znachenie_peremennoj-5746144.html)

forawork 27.05.2014 10:49

Как в идентификатор записать значение переменной
 
Вот собственно код внизу строчку пометил "!!!"
Перем А,Б,Колво,Рекв,С;
//*******************************************
Процедура Сформировать();
А="Справочник."+СокрЛП(ВыбСпр.Вид());
Б=(0);Рекв=(1);
Колво=Метаданные.Справочник(ВыбСпр.Вид()).Реквизит();
Таб.НоваяКолонка("Заказ");
Пока Б<Колво Цикл
Таб.новаяколонка(Метаданные.Справочник(ВыбСпр.Вид()).Реквизит(Рекв).Идентификатор);
Б=(Б+1);Рекв=(Рекв+1);
КонецЦикла;
Значение=СоздатьОбъект(А);
Значение.ВыбратьЭлементы();
Пока Значение.ПолучитьЭлемент()=1 Цикл
Если Сокрлп(Значение.текущийэлемент())=СокрЛп(ВыбСпр) Тогда
Таб.НоваяСтрока();
Таб.Заказ = Значение.ТекущийЭлемент();
Б=(0);Рекв=(1);
//Таб.Корреспондент = Значение.Корреспондент;
//Таб.КоррСчет = Значение.КоррСчет;
//Таб.Местонахождение = Значение.Местонахождение;
//Таб.Адрес = Значение.Адрес;
//Таб.Телефоны = Значение.Телефоны;
Пока Б<КолВо Цикл
С=(Метаданные.Справочник(ВыбСпр.Вид()).Реквизит(Рекв).Идентификатор);

!!! как присвоить нужно значение С выводит ошибку (необходимо указать идентификатор)--> Таб.=Значение.;
Б=(Б+1);Рекв=(Рекв+1);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры;

oxo 27.05.2014 11:01

Предположу, что в Рекв в С=(Метаданные.Справочник(ВыбСпр.Вид()).Реквизит(Ре кв).Идентификатор); следует удалить пробел :)

ValeraH 27.05.2014 11:07

Попробуй Шаблон

user1C 27.05.2014 11:12

(0)
ужос... какая задача то была изначально?

VZ 27.05.2014 11:17

Функция ПрисвоитьЗначение(Чему, Что)
Чему = Что;
Возврат ""
КонецФункции
.....................
Докум.УстановитьАтрибут(НаимРеквизита, ЗначениеРеквизита);
Шаблон("[ПрисвоитьЗначение("+НаимРеквизита+",ЗначениеРеквизита)]");

Duke1C 28.05.2014 07:23

4-VZ > Ему не в документ, а в ТЗ надо засунуть
(0) На Мисте тебе же ответили, или надо разжевать и в рот положить?
И вместо вот этого барахла:
Б=(0);Рекв=(1);
Пока Б<КолВо Цикл
С=(Метаданные.Справочник(ВыбСпр.Вид()).Реквизит(Ре кв).Идентификатор);
...
Б=(Б+1);Рекв=(Рекв+1);
КонецЦикла;

Открой для себя уже цикл "для":
НС=Таб.НомерСтроки;
Для Л=1 по КолВо Цикл
С=(Метаданные.Справочник(ВыбСпр.Вид()).Реквизит(Л).Идентификатор);
Таб.УстановитьЗначение(НС,С,Значение.ПолучитьАтрибут(С));
КонецЦикла;

Duke1C 28.05.2014 07:32

+5 а вообще весь этот говнокод лучше выбросить пока не поздно, ибо ДЛЯ ЧЕГО??? В ТЗ содержащую уже САМ элемент справочника, пихать колонки с его же реквизитами. Причем "нужный для запихивания" элемент ищется таким варварским способом...
ВыбСпр - это что? Подозреваю, что реквизит на форме...

Helen1986 28.05.2014 09:50

(6) иногда для нетривиальных сортировок лучше загрузить реквизиты в ТЗ.

Duke1C 28.05.2014 10:29

7-Helen1986 > Глядя на:

Значение=СоздатьОбъект(А);
Значение.ВыбратьЭлементы();
Пока Значение.ПолучитьЭлемент()=1 Цикл
Если Сокрлп(Значение.текущийэлемент())=СокрЛп(ВыбСпр) Тогда
Таб.НоваяСтрока();

сдается мне, что сортировать там нечего

forawork 28.05.2014 10:46

[quote=Duke1C;35361916] +5 а вообще весь этот говнокод лучше выбросить пока не поздно, ибо ДЛЯ ЧЕГО??? В ТЗ содержащую уже САМ элемент справочника, пихать колонки с его же реквизитами. Причем "нужный для запихивания" элемент ищется таким варварским способом... ВыбСпр - это что? Подозреваю, что реквизит на форме... [/quote]
ты прав, во всем прав. Спасибо что помог. Да я быдлокодер который нихрена не знает, да это моя первая программа в 1с которую как я понимаю и считать программой то нельзя еще рез изаените

Duke1C 28.05.2014 10:53

9-forawork >ну что я прав, я и сам знаю :)))
ты лучше скажи помогло тебе (5) али нет ?
А вообще, лучше бы описал саму задачу, для чего всё это ваяется, глядишь, подсказали бы люди оптимальный путь решения изначально. А не методом вставки дополнительных палочек в, и без того уже кривые, костыли. Об этом собственно и (6), а не оскорбленья для.

forawork 28.05.2014 11:35

Помогло. А по поводу задачи дело было так. Меня отправили на практику от техникума(там у нас был access), но на предприятии сказали что у них 1с предприятие следовательни и делать буду его. Вот дали первую задачку вывести реквизиты выбранного справочника в таблицу на форме как-то так.

user1C 28.05.2014 11:50

(11)
вот так и надо было начинать тему, помогите люди добрые, подскажите путь истинный...
1С 7.7 вероятно ровесница твоя и велосипедов на ней написано уже столько, что никаких интернетов не хватит все объять))
самое простое для решения задачи и уяснения для себя ее возможных реализаций это сделать так [url]http://*******/1lQoDXI[/url]

user1C 28.05.2014 11:54

(12)+
[url=http://lmgtfy.com/?q=%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F+%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D1%8C+%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2+1%D1%81+7.7]сцылко[/url]

Duke1C 28.05.2014 11:58

11-forawork >Именно в "таблицу на форме", т.е. в ТаблицуЗначений или же в печатную форму, т.е. в Таблицу?
и, кстати, про ВыбСпр так и не ответил

Duke1C 28.05.2014 12:03

13-user1C > боюсь, ему как новичку, те примеры сложноваты будут, к тому же, судя по:
Если Сокрлп(Значение.текущийэлемент())=СокрЛп(ВыбСпр) Тогда
там не весь справочник нужно выводить, а лишь один элемент

user1C 28.05.2014 12:07

(15)
все мы были когда-то новичками и, если есть тяга к знаниям, то разобраться там - дело техники, было бы желание, примеры и документация...

Duke1C 28.05.2014 12:13

16-user1C >золотые слова :)
так что, forawork, не стесняйся - спрашивай, заодно с учетом (14), научишься правильно формулировать вопросы, не только к "помогающим", но и заказчику.
А это, если не полдела, то все равно не малая его часть, ибо предотвращает от лишних телодвижений/переделок.

forawork 28.05.2014 18:51

ВыбСпр- поле ввода с типом <Справочник>. Таблица добавленная на форму (по идее мне не разъяснили в какую таблицу,просто сказали выведи в таблицу). И по поводу элементов- выводятся только элементы выбранной записи в справочнике.

VZ 28.05.2014 20:49

18-forawork > В терминах 1Сv77 существуют объекты: [b]Таблица[/b] (таблица-документ, что-то вроде екселевского листа), [b]Таблица Значений[/b] (2-х мерная структура), [b]Табличная часть документа[/b], и [b]табличная часть формы[/b].
Последние три имеют весьма схожие методы и свойства, но суть их разная: ТаблицаЗначений есть объект динамический, как переменная, объявляется в модуле; табличная часть документа суть объект [b]метаданных[/b], состав предопределяется в конфигураторе для каждого значения строки, и служит хранилищем данных. Табличная часть формы есть элемент формы [отображения], форма документа с табличной частью в принудительном порядке содержит таблицу, состав которой тождественен составу табличной части документа. Эту таблицу нельзя убрать (но можно скрыть), колонки нельзя убрать (но можно скрыть, и можно динамически добавить), служит для ввода данных в табличную часть документа.
Свойствами вывода на [em]печать[/em] обладает только Таблица.
[em]Ссылочным[/em] объектом не являются все описанные виды таблиц, даже табличная часть документа: сам документ имеет значение [em]ссылка[/em], его табличная часть - нет.
Форма, и все в ней существует, пока форма открыта.

qweqwe123123 28.05.2014 21:44

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

//*******************************************
Процедура Сформировать();
Если ВыбСпр.Выбран() = 0 Тогда
Возврат;
КонецЕсли;
А=СоздатьОбъект("Справочник."+ВыбСпр.Вид());
Таб.НоваяКолонка("Заказ");
Таб.НоваяСтрока();
Таб.Заказ = А.НайтиЭлемент(ВыбСпр);
Для счРеквизитовСправочника = 1 по Метаданные.Справочник(ВыбСпр.Вид()).Реквизит() Цикл
ИдентификаторРеквизита = Метаданные.Справочник(ВыбСпр.Вид()).Реквизит(счРеквизитовСправочника).Идентификатор;
ПериодическийРеквизит = Метаданные.Справочник(ВыбСпр.Вид()).Реквизит(счРеквизитовСправочника).Периодический;
ЗначениеРеквизита = "ПериодическийРеквизит";
Если ПериодическийРеквизит = 0 Тогда
ЗначениеРеквизита = А.ПолучитьАтрибут(ИдентификаторРеквизита);
Иначе
Периодический = СоздатьОбъект("Периодический");
Периодический.ИспользоватьОбъект(ИдентификаторРеквизита,А);
ЗначениеРеквизита = Периодический.ЗначениеНаДату(РабочаяДата());
КонецЕсли;
Таб.НоваяКолонка(ИдентификаторРеквизита);
Таб.УстановитьЗначение(Таб.КоличествоСтрок(),ИдентификаторРеквизита,ЗначениеРеквизита);
КонецЦикла;
КонецПроцедуры

qweqwe123123 28.05.2014 21:47

единственно, я бы это повесил на не на кнопку "Сформировать", а на процедуру ПриВыбореВыбСпр()
а то кнопку можно и нажать забыть

qweqwe123123 28.05.2014 22:02

извиняюсь, вот так немножко

//*******************************************
Процедура Сформировать();

Если ВыбСпр.Выбран() = 0 Тогда
Возврат;
КонецЕсли;

Таб.Очистить();
Таб.НоваяКолонка("Заказ");

Таб.НоваяСтрока();
Таб.Заказ = ВыбСпр;

Периодический = СоздатьОбъект("Периодический");

Для счРеквизитовСправочника = 1 по Метаданные.Справочник(ВыбСпр.Вид()).Реквизит() Цикл
ИдентификаторРеквизита = Метаданные.Справочник(ВыбСпр.Вид()).Реквизит(счРеквизитовСправочника).Идентификатор;
ПериодическийРеквизит = Метаданные.Справочник(ВыбСпр.Вид()).Реквизит(счРеквизитовСправочника).Периодический;
Если ПериодическийРеквизит = 0 Тогда //не периодический
ЗначениеРеквизита = ВыбСпр.ПолучитьАтрибут(ИдентификаторРеквизита);
Иначе
Периодический.ИспользоватьОбъект(ИдентификаторРеквизита,ВыбСпр);
ЗначениеРеквизита = Периодический.ЗначениеНаДату(РабочаяДата());
КонецЕсли;
Таб.НоваяКолонка(ИдентификаторРеквизита);
Таб.УстановитьЗначение(Таб.КоличествоСтрок(),ИдентификаторРеквизита,ЗначениеРеквизита);
КонецЦикла;

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

qweqwe123123 28.05.2014 22:28

да и вообще
что это за таблица значений с одной строкой
если уж в ТЗ пихать, то так как-то

//*******************************************
Процедура Сформировать();

Таб.УдалитьСтроки();
Если ВыбСпр.Выбран() = 0 Тогда
Возврат;
КонецЕсли;
Если Таб.КоличествоКолонок() = 0 Тогда
Таб.НоваяКолонка("Реквизит");
Таб.НоваяКолонка("Значение");
КонецЕсли;

Периодический = СоздатьОбъект("Периодический");

Для счРеквизитовСправочника = 1 по Метаданные.Справочник(ВыбСпр.Вид()).Реквизит() Цикл
ИдентификаторРеквизита = Метаданные.Справочник(ВыбСпр.Вид()).Реквизит(счРеквизитовСправочника).Идентификатор;

ПериодическийРеквизит = Метаданные.Справочник(ВыбСпр.Вид()).Реквизит(счРеквизитовСправочника).Периодический;
Если ПериодическийРеквизит = 0 Тогда //не периодический
ЗначениеРеквизита = ВыбСпр.ПолучитьАтрибут(ИдентификаторРеквизита);
Иначе
Периодический.ИспользоватьОбъект(ИдентификаторРеквизита,ВыбСпр);
ЗначениеРеквизита = Периодический.ЗначениеНаДату(РабочаяДата());
КонецЕсли;

Таб.НоваяСтрока();
Таб.Реквизит = ИдентификаторРеквизита;
Таб.Значение = ЗначениеРеквизита;
КонецЦикла;

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

лан, автор. тренируйся.

Duke1C 29.05.2014 06:34

+ не забываем про предопределенные реквизиты "Код" и "Наименование", которые через:
Метаданные.Справочник("ххх").Реквизит() "не видно"


Текущее время: 19:14. Часовой пояс GMT +3.