Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: v8: Запретить редактирование элементов справочника

Как программно запретить редактирование элементов справочника через форму элемента?
и сделать это надо из обработки

Пробовал так:

ФормаЭлементаСправочника = Справочники.МойСправочник.ПолучитьФорму("ФормаЭлемента");
ФормаЭлементаСправочника.ТолькоПросмотр = Истина;
не помогло


Заранее спасибо.
Ответ:
Для остальных основных объектов (справочники, константы, документы, регистры…), набор прав у роли достаточно стандартен:

Чтение — чтение (программное)
Добавление — добавление (программное)
Изменение — изменение (программное)
Удаление — удаление (программное)
Просмотр — просмотр
Интерактивное добавление — интерактивное добавление
Редактирование — редактирование
Интерактивная пометка удаления — интерактивная пометка на удаление
Интерактивное снятие пометки удаления — снятие пометки на удаление
Интерактивное удаление помеченных— удаление помеченных объектов
Ввод по строке — использование режима ввода по строке
Интерактивное удаление — непосредственное удаление (shift +del)

Права только для документов:

Интерактивное проведение — проведение
Отмена проведения — отмена проведения документов
Интерактивное проведение неоперативное — проведение (стандартными командами форм) документа в неоперативном режиме
Интерактивная отмена проведения — интерактивная отмена проведения
Интерактивное изменение проведенных — редактирование проведенного документа. Если право у роли не установлено, то пользователь не может проведенный документ удалить, установить пометку удаления, перепровести или сделать непроведенным. Форма такого документа открывается в режиме просмотра
Вопрос: Добавление сотрудников в справочник

Здравствуйте!
У меня есть справочник физические лица, документ приём на работу с реквизитом физ. лицо (ссылка на справочник физические лица), справочник сотрудник с реквизитом физ.лицо (ссылка на справочник физическое лицо) и флагом работающий.
При проведении документа приём на работу добавляется запись в справочник сотрудники.
Подскажите, пожалуйста, как запретить повторный приём на работу одного и того же работающего сотрудника?
Ответ:
Сообщение от Шура123
Сотруд = Справочники.Сотрудники.НайтиПоКоду(Сотрудник.Код);
Лишнее. Вы в модуле объекта документа. Реквизит Сотрудник документа уже содержит ссылку на нужный элемент справочника, не надо его дополнительно получать. Просто обращаетесь к реквизиту объекта - Сотрудник (или как он у вас реально называется) И тоже: Если Работающий это все же предопределенный элемент, не надо лишний раз дергать базу данных (обращаться к ней) Используйте ПредопределенноеЗначение("ИмяПредопределенных")
И поздравляю, вы можете коррелировать подсказки к своим задачам, у вас есть знания )))
Вопрос: Как запретить одновременное открытие отдельных внешних обработок?

КА 1.1. Есть несколько внешних обработок. Примерно 15 пользователей. Потребовалось запретить одновременное открытие и запуск некоторых из них. Например, Петров открыл, а Сидоров при открытии получает сообщение (предупреждение) "Эта обработка открыта Петровым? С него и спрашивай".
Идеи есть?
Ответ: () У меня стояла задача, не меняя конфигурацию заблокировать повторное открытие обработки из справочника Внешние обработки. И всё. Если есть пример, как это сделать по-другому - подскажи кодом.
Вопрос: Ввод на основании по документу и справочнику

Всем добрый день!
Такая конфигурация есть док Меню нужно чтобы при вводе на основании заполнялся док НакладнаяНаОтпуск. Но есть нюанс в меню блюдо а в спрБлюда есть продукты как правильно организовать связку чтобы при вводе на основании Меню.Блюдо=Справочник.Блюда.Продукты и заполнялось уже в док НакладнаяНаотпуск.
Ответ:
Сообщение от ravinka
ну найти и чо дальше то? как удалить повторяющиеся
А зачем удалять если можно не добавлять повторяющиеся?

Добавлено через 24 секунды
Если нашли уже такой Продукт, не добавляем в таблицу
Вопрос: (8.3)Добавление элементов из справочника на форму документа

Доброго времени суток!
Имеется форма документа с 3 реквизитами, необходимо их заполнить случайными данными из N-ного справочника
Как сделать это даже нет мысли
Офк, бан в гугле
Ответ: Могу предложить варианты для выбора случайной записи из конкретного справочника

Вариант 1. При условии, что нумерация (код) стандартная.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 1. Выбираешь запросом максимальное значение кода
запрос = новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 Код ИЗ Справочник.<НаименованиеСправочника> УПОРЯДОЧИТЬ ПО Код УБЫВ");
запросРезультат = запрос.Выполнить().Выбрать();
// тут можно обработать ситуацию, когда в справочнике нет записей (результат запроса пуст)
запросРезультат.Следующий();
Сообщить(запросРезультат.Код);
// 2. Перевести код в число, без лидирующих нулей.
максЧисло = Формат(Число(запросРезультат.Код), "ЧГ=0");
Сообщить(максЧисло);
// 3. Сформировать случайное число от 1 до максимального кода
ген = новый ГенераторСлучайныхЧисел;
генЧисло = ген.СлучайноеЧисло(1, максЧисло);
сообщить(генЧисло);
// 4. Перевести случайное число в строку с лидирующими нулями (если тип кода в справочнике представлен строкой)
// если код представлен числом, то все эти преобразования (форматирование) просто не нужны
// число 9 это длина кода (или можно вытащить длину кода из метаданных справочника если нужно)
генСтрока = Формат(генЧисло, "ЧЦ=9; ЧВН=; ЧГ=0");
Сообщить(генСтрока);
// 5. Найти элемент справочника по случайному коду
ссыл = Справочники.<НаименованиеСправочника>.НайтиПоКоду(генСтрока);
сообщить(ссыл.Наименование);
// 6. С п.3 по п.5 можно организовать цикл для проверки найденной ссылки на пустоту (для пропущенных / удаленных / сбитой нумерации)
// 7. Если все устраивает - присвоить ссылку необходимому реквизиту
Вариант 2. Но тут будет требоваться намного больше памяти (в зависимости от объема справочника) на хранение промежуточной таблицы

1. Выбрать разом все записи из справочника (ссылки) и поместить их в таблицу.
2. Сгенерировать случайное число от 1 до количество записей в таблице
3. использовать сгенерированное случайное число как индекс для доступа к строке таблицы и забрать из неё ссылку.
Вопрос: уф выбор нужных реквизитов и справочников

На форме есть реквизит справочники
и 2 реквизита 1й реквизит справочника и 2й реквизит справочника.
как реализовать на уф чтобы был список выбора справочника а не его содержимого и как только выбираю справочник можно было выбрать списком реквизиты например список инн кпп производитель и т.д. а я выбираю нужный в этом списке
--- Объединение сообщений, 14 ноя 2016 ---
еще раз по пунктам
1.выбираю справочник например контрагенты.
2.после выбора могу нажать на список реквизиты 1 или реквизиты 2 и там будут все объекты справочника Справочники.Номенклатура.Наименование и т.д.

как данное дияние реализовать

Вложения:

  • Размер файла:
    5,1 КБ
    Просмотров:
    2
Ответ:
спасибо большое суть понял
Вопрос: Путаница с КонтакнойИнформацией справочников Партнеры и Контрагенты

Поле имеет тип Справочник ссылка контрагенты. Проваливаюсь в контрагента черз 2 квадратика в поле. Заполняю фактический адрес запросм обращаюсь к справочнику КОНТРАГЕНТЫ к этому адресу. НЕТ ТАКОГО. Обращаюсь к справочнику ПАРТНЕРЫ. И получаю АДРЕС КОНТРАГЕНТА. Как так может быть?

Код:
ВЫБРАТЬ
    КонтрагентыКонтактнаяИнформация.Представление КАК Представление
ИЗ
    Справочник.Партнеры.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
ГДЕ
    КонтрагентыКонтактнаяИнформация.Ссылка = &Ссылка
    И КонтрагентыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента)
Ответ:
Подсказали в чем проблема. Оказалось что это больше по настойке программы вопрос.



Вот если бы была галка, то я бы таки попал в справочник Контрагенты натурально.

Я выбираю через все функции справочник Контрагенты. Он меня перенаправляет на справочник партнеры, и названии формы пишет "Справочник Контрагенты". Хоть бы название меняли на справочник партнеры при перенаправлении, сразу бы возник вопрос: "Почему так?". Это типа как в анекдоте купил мужик машину иномарку, пока гнал всю дорогу что-то торохтело. Приехал домой, не выдержал разобрал пол машины нашел гайку прикрученную на проволоке и записочку: "Нашел. Молодец"

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

Здравствуйте. Делаю конфигурацию в 1с 8.3. В конфигурации следующий набор справочников:
1.Договоры(Код,Наименование)
2.ЭтапыДоговоров(Код,Наименование,Договор - СправочникСсылкаДоговоры, Исполнитель - ПеречисленияСсылка.ИсполнителиРабот, Трудозатраты - Число,10,3)
3.Объекты(Код,Наименование,Договор - СправочникСсылкаДоговоры,Этап - СправочникСсылкаЭтапыДоговоров)
и есть регистры накопления:
1.ОтработаноЧасов(Измерения:Объект -справочникссылкаОбъекты;Документ - СправочникСсылкаПроектныеДокументы...;Ресурс - КоличествоЧасов -число,10,3)
2.ОтработаноГИПРПО(Измерения:Объект -справочникссылкаОбъекты,СтатусРуководителя - ПеречисленияСсылка.СтатусРуководителя;Ресурс - КоличествоЧасов -число,10,3).
Из всего этого надо сделать выборку данных за период такой структуры:
НаименованиеДоговора, НомерЭтапа,ТрудоЗатраты,Факт,Отклонение
, где Факт=ОтработаноЧасов.Обороты по этапам+ОтработаноГИПРПО.Обороты по этапам; Отклонение=(Факт-Трудозатраты)/Трудозатраты*100. Пытался делать это так:
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
46
47
Запрос.Текст="ВЫБРАТЬ
                 |  СУММА(ОтработаноЧасовОбороты.КоличествоЧасовРасход) КАК ФактСотрудников,
                 |  ЭтапыДоговоров.НомерЭтапа КАК НомерЭтапа,
                 |  Договоры.Наименование КАК НаименованиеДоговора,
                 |  ЭтапыДоговоров.Трудозатраты КАК План,
                 |  ФактГИПРПО.ФактРуководителя,
                 |  ФактГИПРПО.ФактРуководителя + ОтработаноЧасовОбороты.КоличествоЧасовРасход КАК Факт
                 |ИЗ
                 |  РегистрНакопления.ОтработаноЧасов.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ОтработаноЧасовОбороты
                 |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Объекты КАК Объекты
                 |          ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЭтапыДоговоров КАК ЭтапыДоговоров
                 |              ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                 |                  ЭтапыДоговоров.Ссылка КАК НомерЭтапа,
                 |                  СУММА(ВЫБОР
                 |                          КОГДА ОтработаноГИПРПООбороты.ВремяНаОбъектРасход ЕСТЬ NULL 
                 |                              ТОГДА 0
                 |                          ИНАЧЕ ОтработаноГИПРПООбороты.ВремяНаОбъектРасход
                 |                      КОНЕЦ) КАК ФактРуководителя,
                 |                  ОтработаноГИПРПООбороты.ВремяНаОбъектРасход КАК ФактГИП
                 |              ИЗ
                 |                  РегистрНакопления.ОтработаноГИПРПО.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ОтработаноГИПРПООбороты
                 |                      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Объекты КАК Объекты
                 |                          ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЭтапыДоговоров КАК ЭтапыДоговоров
                 |                              ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры
                 |                              ПО ЭтапыДоговоров.Договор = Договоры.Ссылка
                 |                          ПО Объекты.ЭтапДоговора = ЭтапыДоговоров.Ссылка
                 |                      ПО ОтработаноГИПРПООбороты.ШифрОбъекта = Объекты.Ссылка
                 |              ГДЕ
                 |                  ЭтапыДоговоров.Исполнитель = &Исполнитель
                 |              
                 |              СГРУППИРОВАТЬ ПО
                 |                  ЭтапыДоговоров.Ссылка,
                 |                  ОтработаноГИПРПООбороты.ВремяНаОбъектРасход) КАК ФактГИПРПО
                 |              ПО (ФактГИПРПО.НомерЭтапа = ЭтапыДоговоров.Ссылка)
                 |              ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры
                 |              ПО ЭтапыДоговоров.Договор = Договоры.Ссылка
                 |          ПО Объекты.ЭтапДоговора = ЭтапыДоговоров.Ссылка
                 |      ПО ОтработаноЧасовОбороты.Объект = Объекты.Ссылка
                 |ГДЕ
                 |  ЭтапыДоговоров.Исполнитель = &Исполнитель
                 |
                 |СГРУППИРОВАТЬ ПО
                 |  ЭтапыДоговоров.НомерЭтапа,
                 |  Договоры.Наименование,
                 |  ЭтапыДоговоров.Трудозатраты,
                 |  ФактГИПРПО.ФактРуководителя,
                 |  ФактГИПРПО.ФактРуководителя + ОтработаноЧасовОбороты.КоличествоЧасовРасход";
Данные выгружаются,но есть 2 проблемы:
1) не происходит группировки записей в результате запроса:
НаименованиеДоговора НомерЭтапа ТрудоЗатраты Факт Отклонение
Договор 1 1-1 1000 10
Договор 2 2-1 1500 20
Договор 2 2-1 1700 50
2) не выводятся значения отклонений
нужен такой вид:
НаименованиеДоговора НомерЭтапа ТрудоЗатраты Факт Отклонение
Договор 1 1-1 1000 10 (10-1000)/1000*100=-99
Договор 2 2-1 3200 70 (70-3200)/3200*100=-97,8125
Что я не так делаю? в чем ошибка? помогите пожалуйста
Ответ: jediAlex, выложите базу, чтоб потестить на этих данных.

Добавлено через 7 минут
думаю, проблема в группировке и суммировании в запросе. Можно попробовать так:
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
ВЫБРАТЬ
    ВложенныйЗапрос.ФактСотрудников КАК ФактСотрудников,
    ВложенныйЗапрос.НомерЭтапа КАК НомерЭтапа,
    ВложенныйЗапрос.НаименованиеДоговора КАК НаименованиеДоговора,
    ВложенныйЗапрос.План КАК План,
    ВложенныйЗапрос.ФактРуководителя КАК ФактРуководителя,
    (ВложенныйЗапрос.Факт - ВложенныйЗапрос.План) / ВложенныйЗапрос.План * 100 КАК Отклонение,
    ВложенныйЗапрос.Факт КАК Факт
ИЗ
    (ВЫБРАТЬ
        СУММА(ЕСТЬNULL(ОтработаноЧасовОбороты.КоличествоЧасовРасход, 0)) КАК ФактСотрудников,
        Объекты.ЭтапДоговора.НомерЭтапа КАК НомерЭтапа,
        Объекты.Договор.Наименование КАК НаименованиеДоговора,
        Объекты.ЭтапДоговора.Трудозатраты КАК План,
        СУММА(ЕСТЬNULL(ОтработаноГИПРПООбороты.ВремяНаОбъектРасход, 0)) КАК ФактРуководителя,
        СУММА(ЕСТЬNULL(ОтработаноЧасовОбороты.КоличествоЧасовРасход, 0) + ЕСТЬNULL(ОтработаноГИПРПООбороты.ВремяНаОбъектРасход, 0)) КАК Факт
    ИЗ
        Справочник.Объекты КАК Объекты
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОтработаноЧасов.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ОтработаноЧасовОбороты
            ПО (ОтработаноЧасовОбороты.Объект = Объекты.Ссылка)
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОтработаноГИПРПО.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ОтработаноГИПРПООбороты
            ПО (ОтработаноГИПРПООбороты.ШифрОбъекта = Объекты.Ссылка)
    
    СГРУППИРОВАТЬ ПО
        Объекты.ЭтапДоговора.НомерЭтапа,
        Объекты.Договор.Наименование,
        Объекты.ЭтапДоговора.Трудозатраты) КАК ВложенныйЗапрос
Сначала группируем во вложенном запросе, трудозатраты выстапают как группировочное поле, потом уже вычисляем отклонение.
Вопрос: Запрос по табличной части справочника

Добрый день. Начинаю изучать 8ку поэтому прошу прощения за глупые вопросы. Есть справочник, а в нем табл. часть с последовательностью операций. При записи нового элемента справочника, необходимо проверить имеется ли уже такой элемент с такой последовательностью операций в табличной части.
Я так понял нужен запрос с левым соединением, но правильно построить у меня его не вышло.
Ответ: Yanush, GreenkA, shiro93,
Мне кажется лучше сделать все-таки запросом

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Процедура ПриЗаписи(Отказ)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |   ТехПроцессыОперации.Операция,
    |   ТехПроцессыОперации.Ссылка
    |ПОМЕСТИТЬ ВТ_НашДокумент
    |ИЗ
    |   Справочник.ТехПроцессы.Операции КАК ТехПроцессыОперации
    |ГДЕ
    |   ТехПроцессыОперации.Ссылка = &Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   ТехПроцессыОперации.Ссылка,
    |   ТехПроцессыОперации.Операция
    |ПОМЕСТИТЬ ВТ_ДляПоиска
    |ИЗ
    |   Справочник.ТехПроцессы.Операции КАК ТехПроцессыОперации
    |ГДЕ
    |   ТехПроцессыОперации.Ссылка <> &Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   ВТ_ДляПоиска.Ссылка,
    |   КОЛИЧЕСТВО(ВТ_ДляПоиска.Операция) КАК Операция
    |ПОМЕСТИТЬ ВТ_Контроль
    |ИЗ
    |   ВТ_ДляПоиска КАК ВТ_ДляПоиска
    |
    |СГРУППИРОВАТЬ ПО
    |   ВТ_ДляПоиска.Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   ВТ_ДляПоиска.Ссылка,
    |   КОЛИЧЕСТВО(ВТ_ДляПоиска.Операция) КАК Операция
    |ПОМЕСТИТЬ ВТ_Рез
    |ИЗ
    |   ВТ_ДляПоиска КАК ВТ_ДляПоиска
    |       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_НашДокумент КАК ВТ_НашДокумент
    |       ПО ВТ_ДляПоиска.Операция = ВТ_НашДокумент.Операция
    |
    |СГРУППИРОВАТЬ ПО
    |   ВТ_ДляПоиска.Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   ВТ_Рез.Ссылка
    |ИЗ
    |   ВТ_Рез КАК ВТ_Рез
    |       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Контроль КАК ВТ_Контроль
    |       ПО ВТ_Рез.Ссылка = ВТ_Контроль.Ссылка
    |           И ВТ_Рез.Операция = ВТ_Контроль.Операция";
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    
    Выборка = Запрос.Выполнить().Выбрать();
 
    Если Выборка.Следующий() Тогда
        Сообщить("Такой элемент уже существует - "+Выборка.Ссылка+" запись не возможна!");
        Отказ = Истина;
    КонецЕсли; 
    
КонецПроцедуры
Добавлено через 1 минуту
1. Не контролируется порядок строк, а только состав
2. Всетаки это надежнее чем ЗначениеВСтрокуВнутр(), хотя мысль хорошая!!!

Добавлено через 11 минут
Смысл такой.

Соединяем текущий справочник со всеми другими по Операции, после этого записей должно остаться столько, сколько строк в записываемом справочнике (меньше не удовлетворяет условиям), а вот если записей больше, то записей останется столько же сколько и в записываемом справочнике (ВНУТРЕННЕЕ соединение как никак), для этого нужна таблица ВТ_Контроль она проверяет, что записей после соединения, не стало меньше иначе на вылет.

Можно упростить, сразу отобрав справочники с нужным количеством элементов (передав например параметром) тогда нужда в таблице ВТ_контроль отпадает и немного должно шустрее работать т.к. будет меньше соединений!
Но это пусть будет домашним заданием по запросам для ТСа
Вопрос: Ссылка на справочник

Добрый день! Имеется справочник Номенклатура. В этом справочнике необходимо сделать ссылку на справочник Коэффициенты перевода. На форму элемента справочника Номенклатура добавила кнопку "Коэффициенты перевода" (вид гиперссылка). Необходимо при нажатии на эту ссылку перейти на форму соответствующего элемента справочника Коэффициенты перевода.

Делала так
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
&НаКлиенте
Процедура ОткрытьФормуЭтогоСправочника(Команда)
    
Параметр = Новый Структура("Ключ",ОткрытьФормуЭтогоСправочникаНаСервере());
    Форма = ПолучитьФорму("Справочник.КоэффициентыПеревода.Форма.ФормаЭлемента",Параметр);
КонецПроцедуры
 
 
 
&НаСервере
Функция  ОткрытьФормуЭтогоСправочникаНаСервере()
    Возврат Справочники.КоэффициентыПеревода.НайтиПоКоду()// вот здесь не пойму как сделать;
КонецФункции
Ответ: Liya1203,

1C
1
2
3
4
5
6
7
8
9
10
11
&НаКлиенте
Процедура ОткрытьФормуЭтогоСправочника(Команда)
   
    Параметр = Новый Структура("Ключ",ОткрытьФормуЭтогоСправочникаНаСервере());
    Если Параметр.Ключ <> Неопределено Тогда
        ОткрытьФорму("Справочник.КоэффициентыПеревода.Форма.ФормаЭлемента", Параметр, ЭтаФорма);
    Иначе
         Сообщить("Элемент не заполнен");
    КонецЕсли;
 
КонецПроцедуры