Модераторы: stron
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 1с 7.7, Перечисление 
V
    Опции темы
MadMas
Дата 16.6.2008, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



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

Например, есть перечисление виды договоров, состоящее из "НД"->"нетиповой доходный", "МСВ"->"Межсетевой".
Если переменная Дог="Межсетевой", реквизит формы должен принять значение ПЕречисление.ВидыДогоыоров.МСВ.

Как это реализовать? 
PM   Вверх
SaschaL
Дата 16.6.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 880
Регистрация: 13.12.2006
Где: Челябинская обл г .Нязепетровcк

Репутация: 8
Всего: 9



Не совсем понятно что вы хотите но я бы поступил так
Код

пока Справочник.получитьЭлемент() = 1 Цикл
        Если Дог = Перечисление.ВидыДоговора.Межсетевой тогда
                 //Ваши действия
                 ..............
        КонецЕсли;
КонецЦикла

PM MAIL ICQ   Вверх
MadMas
Дата 16.6.2008, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Нет, количество перечислений достаточно большое, простым "если" сравнение писать не хочется. Смысл в том чтобы в цикле сравнить пользовательское представление перечисления с имеющейся переменной, и при совпадении установить реквизиту это перечисление...
PM   Вверх
SaschaL
Дата 16.6.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 880
Регистрация: 13.12.2006
Где: Челябинская обл г .Нязепетровcк

Репутация: 8
Всего: 9



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

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

Может что умное попытаюсь посоветовать. smile 
PM MAIL ICQ   Вверх
MadMas
Дата 16.6.2008, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



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

Код

Для счетчик=1 По Перечисление.КД.КоличествоЗначений() Цикл 
если Перечисление.КД.ЗначениеПоНомеру(счетчик) = Категория Тогда
        КатегорияДоговора = Перечисление.КД.ЗначениеПоНомеру(счетчик);
КонецЕсли;
КонецЦикла;


Но застрялось на переменной КатегорияДоговора, ей ни в какую не хочет присваиваться значение перечисления (категорияДоговора -- реквизит формы с типом Перечисление.КД).

Дальше хуже, теперь при наличии равенства Перечисление.КД.ЗначениеПоНомеру(счетчик) = Категория (под отладчиком "Межсетевой"="Межсетевой"), не отрабатывается "Если ...", он просто делает вид что строки не эквивалентны :( 
PM   Вверх
SaschaL
Дата 16.6.2008, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 880
Регистрация: 13.12.2006
Где: Челябинская обл г .Нязепетровcк

Репутация: 8
Всего: 9



Подумать дано! Если что вечеров отпишусь
PM MAIL ICQ   Вверх
Itsys
Дата 17.6.2008, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 7
Всего: 34



Попробуй так:
Код

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

PM MAIL WWW Skype   Вверх
MadMas
Дата 17.6.2008, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Ага, пробовала. Я почти все перепробовала -- с теоретической точки зрения код верен, под отладчиком все красиво и вроде бы должно это перечисление в реквизит вставать. Но ничего подобного :( МОжет это быть глюк 1С к-нить?
PM   Вверх
Itsys
Дата 17.6.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 7
Всего: 34



В отладчике значения СокрЛП(Перечисление.КД.ЗначениеПоНомеру(счетчик)) и СокрЛП(Категория) смотрела? Они точно одинаковые?

Попробуй так:
Код

Для счетчик=1 По Перечисление.КД.КоличествоЗначений() Цикл 
    Если СокрЛП(Перечисление.КД.ЗначениеПоНомеру(счетчик)) = СокрЛП(Категория) Тогда
        КатегорияДоговора = Перечисление.КД.ЗначениеПоНомеру(счетчик);
    Иначе                                           
        Сообщить ("Тестируется " + СокрЛП(Перечисление.КД.ЗначениеПоНомеру(счетчик)));
        Если СтрДлина(СокрЛП(Категория)) <> СтрДлина(СокрЛП(Перечисление.КД.ЗначениеПоНомеру(счетчик))) Тогда
            Сообщить("Ай-яй-яй, строки разной длины");
        Иначе
            Для К = 1 По СтрДлина(СокрЛП(Категория)) Цикл
                Если Сред(СокрЛП(Категория), К, 1) <> Сред(СокрЛП(Перечисление.КД.ЗначениеПоНомеру(счетчик)), К, 1) Тогда
                    Сообщить("Ай-яй-яй, символ №" + К + " не совпадает");
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

PM MAIL WWW Skype   Вверх
MadMas
Дата 17.6.2008, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Однозначно одинаковые. Что-то с 1С странное, попробовала на другой машине -- заработал первый вариант. Спасибо )
PM   Вверх
bpgrey
Дата 24.6.2008, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 24.6.2008

Репутация: нет
Всего: нет



кстати, по поводу перебора всех значений..
Работает такая конструкция:
Цитата

Для с=1 По метаданные.перечисление() Цикл
Для сс= 1 По метаданные.перечисление(с).значение() Цикл
Сообщить(""+метаданные.перечисление(с)+"  "+метаданные.перечисление(с).значение(сс))
КонецЦикла;
КонецЦикла;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "1C: Предприятие, SAP, ERP и учётные системы"
stron

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

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

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, stron, Pegas.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема »


 




[ Время генерации скрипта: 0.0917 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.