arefaste/1C_Forums huggingface dataset:
Добрый день. Подскажите пожалуйста как реализовать функцию округления всегда в меньшую сторону кратно 0,5.
Например
Число 2 = 2
Число 1,9 = 1,5
Число 1,5 = 1,5
Число 1,1 = 1
---
Умножить на 2, взять целое, разделить на 2.
---
Для
Число 1,1 = 1
работать не будет, а вот вариант из (2) - будет.
---
Вот так работает вроде, по крайней мере для 1.1 точно
```1c
    Число1 = 1.1;
    Число2 = Окр((Число1-0.6), 2);
    Число3 = Цел(Число2) + 0.5;

    Если Число3 > Число2 Тогда

    Число2 = Число2+(Число3-Число2);

    Иначе

    Число2 = Число3+Число2;

    КонецЕсли;
```
---
возможно, не проверял логику, т.к. в (2) решение намного изящнее.
---
тут полностью согласен =)
---
но вариант который предложили в (2) компактнее.
---
Умножить на 10, разделить на 5 и взять целое. На первый взгляд разницы не видно, но ... ...но она есть! И разница эта не в вашу пользу, смотрим ТЗ:
(1) Число 1,9 = 1,5
1,9 * 10 = 19
19 / 5 = 3,8
Цел(3,8) = сколько, ась?

Интересно, долго еще будет продолжаться это изобретение велосипеда с треугольными колесами?
---
Умножить на 2, взять целое, разделить на 2.
---
Спасибо за ответ. Либо взять целое + 0,5 думаю тоже должно работать.
---
У ildarovich появился конкурент по красивым решениям?
---
Умножить на 10, разделить на 5 и взять целое. На первый взгляд разницы не видно, но ...
---
```1c
    Число1 = 5;
    Число2 = Окр((Число1-0.6), 2);
    Число3 = Цел(Число2) + 0.5;

    Если Число3 > Число2 Тогда

    Число2 = Число2+(Число3-Число2);

    КонецЕсли;
```
---
разделить на 0.5, взять целое и умножить на 0.5
---
разделить на 0.5 Дааа, это совсем не то, что предложенное выше "умножить на 2" - намного точнее!
 умножить на 0.5 И это принципиально отличается от "разделить на 2" - гораздо, гораздо лучше! :-P
---
видишь суслика? и я нет
---
видишь суслика? и я нет Если "суслик"- это смысл, то таки да - не вижу!
---
я не понял логику в умножении на 2, взятие целого и деления на 2. Потом продумал свою, и написал, не делая мысленных преобразований, она хоть и не такая красивая, но для меня более понятная
Добрый день!
Обновил конфигурацию до Ут 10.3.67.2, Платформа 8.3.18.1208
Если в документе чек ккм открыть форму подбора затем сразу закрыть программу без сохранения документа

{Обработка.ПодборНоменклатуры.Форма.ОсновнаяФорма.Форма(1176)}: Значение не является значением объектного типа (ЭтотОбъект)
 СохранитьЗначение(СокрЛП(?(ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма"), ВладелецФормы.Объект.Ссылка.Метаданные().Имя, ВладелецФормы.ЭтотОбъект.Метаданные().Имя))
---
Добрый день

Не стоит работать на этой платформе. Если нужна свежая, ставьте последнюю 8.3.17. Эту никогда. Пробовали ее установить, в результате масса ошибок: не открываются некоторые виды документов - аварийное закрытие 1с, не закрывается месяц,....
---
Поддерживаю. Платформа 8.3.18.1208 очень глючная. Давно я такого не видел. Аварийное завершение конечно меня вывело из себя))
---
Ут 10.3.67.2,
 Платформа 8.3.18.1208

объясните русским языком
зачем вам такая платформа под вашу конфигурацию ?
---
Добрый день

Не стоит работать на этой платформе. Если нужна свежая, ставьте последнюю 8.3.17. Эту никогда. Пробовали ее установить, в результате масса ошибок: не открываются некоторые виды документов - аварийное закрытие 1с, не закрывается месяц,....
---
подскажите что у вас за ОС? и что говорит технологический журнал?
---
Поддерживаю. Платформа 8.3.18.1208 очень глючная. Давно я такого не видел. Аварийное завершение конечно меня вывело из себя))
---
подскажите что у вас за ОС? и что говорит технологический журнал?
---
Платформа 8.3.18.1208 очень глючная. Давно я такого не видел. Аварийное завершение
См также
http://forum.infostart.ru/forum33/topic275785/message2777122/#message2777122
---
Спасибо, 8.13 полёт нормальный
---
Ставьте версию выше. 8.3.17.
Заметил на УТ 10.3.66.3 и платформе версии ниже 8.3.17. Проверял с 13 и 15. Половина команд ввода на основании не было видно. Имейте в виду просто.
---
Установил 8.3.17.1549. {Обработка.ПодборНоменклатуры.Форма.ОсновнаяФорма.Форма(1176)}: Значение не является значением объектного типа (ЭтотОбъект)

Не помогло. Нормальная без глюков 8.3.17.хххх?
---
Не помогло. Нормальная без глюков 8.3.17.хххх?

8.3.17.1851

Живем на ней. Проблем в текущей работе не замечено.
УФ 8.3, интерфейс Такси - как *пользователю* в форме списка регистра сведений задать отбор вида Поле1 <>Поле2? Поля числовые, даже имя поля ввести не даёт.

Без отчётов, консоли запросов и т.д.?
---
Настройка списка - Отбор. Выделяем нужный отбор - Еще - Использовать в качестве значения поле. Выбираем нужное поле
---
Настройка списка - Отбор. Выделяем нужный отбор - Еще - Использовать в качестве значения поле. Выбираем нужное поле
---
Спасибо!
Добрый день, изучаю программирование. Столкнулся с вопросом:
Есть отчет, в котором я запрашиваю перечень номенклатуры из справочника, пытаюсь получить те позиции, которые у меня не фигурируют в РегистреСведений. Как это правильнее всего сделать? Заранее спасибо.
---
Запрос к справочнику Номенклатура с левым соединением к РС по ссылке и отбором где РС.Ссылка ЕстьNULL
---
Либо как указал (2) либо
Где не Номенклатуры.Ссылка в (Выбрать Рег.Номенклатура Из РегистрСведений.МойРС Как Рег)
---
Запрос к справочнику Номенклатура с левым соединением к РС по ссылке и отбором где РС.Ссылка ЕстьNULL
---
Спасибо большое
Первый пост про двухчасовой поиск ошибки в доработанной конфигурации.

Ошибка возникла уже при работе, причем после обновления посредством объединения конфигураций проверка синтаксиса не выдавала ошибку синтаксиса.

При формировании формы она вылетал с ошибкой Обнаружено логическое завершение исходного текста модуля
После попыток поймать ошибку в отладчике и окончании ее на модуле Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаОбщая.Форма

Далее после открытия в самом модуле синтаксис ругался:

{Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаОбщая.Форма(4137,15)}: Обнаружено логическое завершение исходного текста модуля
КонецПроцедуры<<?>> (Проверка: Сервер)
{Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаОбщая.Форма(4157,1)}: Неопознанный оператор
<<?>>&НаСервере (Проверка: Тонкий клиент)

Вот текст Модуля:
...

#Область Инициализация

ЭтоНоваяСтрока = Ложь;

#КонецОбласти

#Область ДОП_Доработки

&НаСервере
Процедура Доп_ЭлементыФормы()

Оказалось все до банального просто:
После обновления область доработок оказалась после области инициализация (возможно косяк объединения) и это вызывает ошибку. Достаточно оказалось перенести область доработок до области Инициализация.
---
ЭтоНоваяСтрока = Ложь;

Такие операторы должны быть в самом конце модуля
---
Описания процедур и функций должны располагаться до операторов основной программы.
---
Могу от себя добавить, что такая ошибку может возникнуть если вы случайно Неправильно назовете область
Например:
#Область Прием Сообщений или # Область ПриемСообщений, оба варианта будут не правильны из за пробелов в первом варианте после слова Прием, имя области должно быть слитно, во втором после #
---
Я удалил метод Добавить из модуля с ошибкой и теперь ошибка Обнаружено логическое завершение исходного текста модуля больше не появляется.
---
Может кому время сэкономит.
---
Описания процедур и функций должны располагаться до операторов основной программы.
---
Здравствуйте. Что такое операторы основной программы?
---
это операторы, которые располагаются вне процедур и функций.
---
ЭтоНоваяСтрока = Ложь;

Такие операторы должны быть в самом конце модуля
---
Почему именно в конце модуля?
---
Как-то грустно, что на такие ошибки создают темы....
---
погоди, ща еще подтянутся условные вчерашние таксисты, наученные программированию на курсах по 1С.........
---
после курсов со SkillBox или GeekBrains
---
да не важно с каких курсов по большому счету.....
---
Прямо таки лайфхак, йопта!!!
---
У меня ошибка выскочила после обновления на релиз БП 3.0.106.101 База типовая, нет доработок и расширений. {ОбщийМодуль.РезервноеКопированиеИБКлиент.Модуль(1,1)}: Обнаружено логическое завершение исходного текста модуля
Вылечил так: добавил расширение, и первых две процедуры из ОбщийМодуль.РезервноеКопированиеИБКлиент внес в него с директивой "Вместо". В само расширение код процедур не переносил, оставил так как при добавлении по умолчанию.
---
Была сегодня такая ошибка, оказалось что это из-за того что в одной из процедур в строке КонецПроцедуры был символ ";" после удаления точки с запятой ошибка ушла.
Приветствую. Переехали с УТ 11.4 на УТ 11.5, делали все переносом данных.

Из любого документа, где можно сделать установку цен номенклатуры (приобретение, заказ поставщику), вылетает ошибка. Конфигурация не дорабатывалась и находится на поддержке. Подскажите, пожалуйста, куда копать.
---
Проблема решилась перепроведением видов цен.
---
Выглядит, как будто при переносе у Вас что-то где-то не заполнилось и теперь, в том месте, где должен быть ключ аналитики, находится какое-то неопределено или null. В общем, надо смотреть в отладчике.
---
В аналитике нет поля "Склад", но есть поле "Место хранения"... но почему типовая конфа себя так ведет?
---
А, тогда вообще все ясно. Из текста ошибки видно, что кто-то обращается к полю "Склад" аналитики, когда его вообще не существует.
Типовая конфа себя так ведет, потому что её пишут люди и они ошибаются. И тестируют люди и тоже ошибаются. В конечном итоге все всегда дотестирывают (есть такое слово вообще?) пользователи.
Самое простое тут точечно полечить данное место и дождаться релиза, где этот момент исправят.
---
Принято. Спасибо. Тоже уже подумал, что придется костылить.
---
Просто странно, что за столько патчей ещё никто не обнаружил эту проблему и не исправил...
---
Проблема решилась перепроведением видов цен.
---
Переехал Что там в "Подробно" , хотя бы полный текс ошибки. А так тупо регистры могли переименовать 1Ски.
---
Ключи аналитики смотрел, там все гуд. Все поля заполнены.
Доброе утро, гении 1С!

1С 8.2. Есть необходимость в зависимости от значения в колонке Статус делать доступным ячейку данной строки в колонке Причина. Сделал вот так:
ЭлементыФормы.ТаблицаДанных.Колонки.Причина.Доступность = Истина;
но доступность распространяется на всю колонку, а мне надо только на одну ячейку текущей строки. Намекните, как это сделать?

```1c
    Если ДанныеСтроки.Статус = Истина Тогда
    ЭлементыФормы.ТаблицаДанных.Колонки.Причина = Ложь;
    ОформлениеСтроки.Ячейки.Статус.ЦветФона = WebЦвета.БледноЗеленый;
    // ОформлениеСтроки.Ячейки.Причина.Доступность = Ложь;
    ИначеЕсли ДанныеСтроки.Статус = Ложь Тогда
    ОформлениеСтроки.Ячейки.Статус.ЦветФона = WebЦвета.Томатный;
    ЭлементыФормы.ТаблицаДанных.Колонки.Причина.Доступность = Истина;
    Иначе
    ОформлениеСтроки.Ячейки.Статус.ЦветФона = WebЦвета.СветлоСерый;
    КонецЕсли;
```
---
```1c
    Если ДанныеСтроки.Статус = Ложь Тогда
    ОформлениеСтроки.Ячейки.Причина.ТолькоПросмотр = Истина;
    КонецЕсли;
```
---
Вместо

```1c
    ЭлементыФормы.ТаблицаДанных.Колонки.Причина.Доступность = Ложь;
```

использовать

```1c
    ОформлениеСтроки.Ячейки.Причина.Доступность = Ложь
```

не?
---
Не...
---
```1c
    Если ДанныеСтроки.Статус = Ложь Тогда
    ОформлениеСтроки.Ячейки.Причина.ТолькоПросмотр = Истина;
    КонецЕсли;
```
---
ОформлениеСтроки.Ячейки.Причина.ТолькоПросмотр = Истина;

Спасибо, это работает!
Здравствуйте уважаемые эксперты! Подскажите как обратиться к реквизиту:

```1c
    Для каждого Товара Из Объект.Товары Цикл
    Сообщить(Товара.Упаковка.Вес);
    КонецЦикла;
```

Получается обратиться к Товара.Упаковка можно, а вот Товара.Упаковка нельзя. Я хочу переумножить Вес данной упаковки на количество товара, и перезаполнить реквизит ТоварыУпаковкаВес. Но даже вывести через сообщение не получается Товара.Упаковка.Вес - ОБЪЕКТ НЕ НАЙДЕН.
---
Замените "ТабЧасть = Объект.Товары.Номенклатура;" на "ТабЧасть = Объект.Товары;"
---
если на клиенте делаете, то как то так :
```1c
    &НаКлиенте
    Процедура КакаяТоКнопка(Команда)

    МассивЗначений = ПолучитьЗначенияНаСервере();

    Для Каждого Элемент Из МассивЗначений Цикл

    Сообщить(Элемент);

    КонецЦикла;

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

    &НаСервере
    Функция ПолучитьЗначенияНаСервере()

    МассивЗначений = Новый Массив;
    Для Каждого Строка Из РеквизитФормыВЗначение(Товары) Цикл

    МассивЗначений.Добавить(Строка.Упаковка.Вес);

    КонецЦикла;

    Возврат МассивЗначений;

    КонецФункции
```

З.Ы. По идее ошибок не должно быть.
---
если не через Объект к ТЧ обратиться, тогда Товары не понимает что такое. Если через Объект.Товары, тогда пишет что типо: Несоответствие типов (параметр номер '1')
---
Приношу извинения, не проверял работу кода. Вот работающий вариант
```1c
    &НаКлиенте
    Процедура НоменклатураПриИзменении(Элемент)

    МассивДанных = ПолучитьДанныеНаСервере();

    Для Каждого ЗначениеЭлемента Из МассивДанных Цикл

    Сообщить(ЗначениеЭлемента);

    КонецЦикла;

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

    &НаСервере
    Функция ПолучитьДанныеНаСервере()

    ТабЧасть = Объект.Номенклатура;

    МассивДанных = Новый Массив;

    Для Каждого Строка Из ТабЧасть Цикл

    МассивДанных.Добавить(Строка.Номенклатура.Код) ///// В вашем случае Строка.Упаковка.Вес

    /////Сообщить(Строка.Упаковка.Вес) ///// Можете сообщить тут, можете возвращать массив в процедуру на клиенте и сообщать оттуда.

    КонецЦикла;

    Возврат МассивДанных;

    КонецФункции
```
---
Подскажите, а если пишет - Поле объекта не обнаружено (Номенклатура)
---
обнаружено

Не могу понять, я даже отладчиком смотрю, как обратиться к реквизиту табличной части Номенклатура например?
---
Замените "ТабЧасть = Объект.Товары.Номенклатура;" на "ТабЧасть = Объект.Товары;"
---
ТабЧасть = Объект.Товары Во супер, через Объект.Товары получилось
---
Спасибо вам огромное, благодаря вам мне пришло осознание!
---
На сервере надо делать
Привет!
Подскажите, где в конфигураторе посмотреть как формируются проводки (запрос)? Пытаюсь отловить отладчиком, вроде прохожу, потом включается фоновое задание и они появляются.
---
Открыть модуль менеджера документа и найти процедуру ТекстОтраженияВРеглУчете()
---
Счет фактура налогового агента
---
Если попробовать установить автоматическую отладку фоновых заданий и поставить точку останова в РБ Хозрасчетный, чтобы быстрее найти место где формируются проводки?

к сожалению не помню модуль.
---
Открыть модуль менеджера документа и найти процедуру ТекстОтраженияВРеглУчете()
День добрый. Подскажите, необходимо добавить новую колонку в табличную часть документа "Приобретение товаров и услуг". Колонку "Штрихкод". База учебная. Добавил новый реквизит в табличную часть, он отражается на форме документа, но в самой УТ, его нет. Буду очень признателен за помощь.
.
---
Возможно необходимо очистить Кэш,
Например дополнительным параметром - /ClearCache
---
так надо его на форму перетащить)
---
тут два варианта. 1 - вы создали реквизит в реквизитах, но не перетащили его на форму табличной части. 2. Вы создали реквизит формы, но к нему нет привязки реквизита из реквизитов, соответственно вы его и не увидите.
---
и было бы неплохо чтоб вы хотя бы скриншот прикрепили, мы ведь не видим, где там ваш реквизит находится.
---
УТ это где?
---
Реквизит добавлен на форму документа. И он на форме табличной части. Но в документе программы он не отображается.
---
А в настройка списка он есть?
---
проверьте, если у вас сделано так же, как на скриншотах, то можно попробовать вариант, предложенный в (7) , либо удалить табличную часть с формы и добавить ее заново.
---
Возможно необходимо очистить Кэш,
Например дополнительным параметром - /ClearCache
---
Спасибо. Очистка кэша помогла
здравствуйте подскажите пожалуйста как мне вывести значения из одной ТЗ в другую ТЗ в одну строчку

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

    КонецЦикла;
```

Вроде так
---
строка = Тест.Добавить() второй лишний, две строки добавляешь, а по условию одна тебе нужна
---
А если оттенков будет больше ? Это еще будут колонки Цвет1...N ?
---
только 2 цвета
---
```1c
    ПредыдущийЦвет="
    Для каждого стр Из ТЗ Цикл
    Если ПредыдущийЦвет=стр.Цвет ИЛИ НЕ ЗначениеЗаполнено(ПредыдущийЦвет) Тогда
    строка = Тест.Добавить();
    КонецЕсли;
    Если стр.Цвет = "Зелёный" Тогда
    строка.Цвет1 = стр.Цвет;
    строка.Авто1 = стр.Автомобиль;
    строка.Класс1 = стр.Класс;
    ИначеЕсли стр.Цвет = "Синий" Тогда
    // строка = Тест.Добавить();
    строка.Цвет2 = стр.Цвет;
    строка.Авто2 = стр.Автомобиль;
    строка.Класс2 = стр.Класс;
    КонецЕсли;
    ПредыдущийЦвет=стр.Цвет;

    КонецЦикла;
```

Вроде так
---
это "решение" для 2-х предопределенных строк (синий/зеленый)

Нужно для первой строки исходной ТЗ создать новую строку в ТЗ_Нов а для всех следующих Добавлять в ТЗ_Нов колонки и прописывать значения в них...
---
спасибо!
---
Вообще странная какая-то у вас таблица получается.
---
))
здравствуйте подскажите пожалуйста почему когда я выгружаю запрос то он отображается как строкаТЗ, а не как таблица значений.
---
самое простое
перечитали таблицу в вт, перечитайте ниже вт еще разок и запрос выгрузит вам тз в результат
что-то типа

```1c
    запрос = новый запрос("выбрать
    вт.колонка1 как колонка1
    ...
    поместить вт
    из
    &вт как вт
    ;
    ///
    выбрать
    таб.колонка1 как колонка1
    ...
    из
    вт как таб");

    таб_результат = запрос.выполнить().выгрузить();
```
---
да вроде как все ок
видно строку таблицы значений

ааа... я понял, саму таблицу не видите
так ее уже по ходу развернули или выбрали строку, вот ее вы и видите
---
он отображается как строкаТЗПотому, что у Вас в запросе используется "ПОМЕСТИТЬ В" - временная таблица. Она в выгруженной таблице результата запроса будет отображаться только в виде количества элементов, попавших в выборку и сохраненных во временной таблице.
---
Можно весь текст запроса увидеть?
---
Все у вас нормально. Шапка окна "ТаблицаЗначений". Просто вы открыли первую его строку с индексом 0
---
просто мне нужно свернуть это ТЗ а он выдает ошибку : Ошибка при вызове метода контекста (Свернуть)
 Промежуточная.Свернуть("НомерЗамеса");
по причине:
Неверное имя колонки
---
Неверное имя колонки Такой колонки нет в таблице ...
---
Значит с опечаткой ) скопируй из запроса имя колонки и вставь в код "Свернуть()"
---
самое простое
перечитали таблицу в вт, перечитайте ниже вт еще разок и запрос выгрузит вам тз в результат
что-то типа

```1c
    запрос = новый запрос("выбрать
    вт.колонка1 как колонка1
    ...
    поместить вт
    из
    &вт как вт
    ;
    ///
    выбрать
    таб.колонка1 как колонка1
    ...
    из
    вт как таб");

    таб_результат = запрос.выполнить().выгрузить();
```
---
всем спасибо сделал
Здравствуйте. Пример: через веб сервис в пустой базе я получаю данные из другой базы ( документ продаж, к примеру), со всеми реквизитами, табличными частями, и тому подобное. Подскажите, пожалуйста, возможно ли как то средствами 1с создать идентичный объект метаданных в базе приемнике? Или же нужно вручную создавать все реквизиты и тому подобное, а через веб сервис только данными заполнять? З.Ы. Знаю, что есть v8unpack , но интересует именно возможность сделать подобное средствами 1с, без стороннего софта. Заранее благодарю.
---
нет, структуру базы программно 1с пока не умеет
---
если речь именно про создание реквизитов объекта и тому подобное, то средствами 1С это невозможно
---
если речь именно про создание реквизитов объекта и тому подобное, то средствами 1С это невозможно
---
(3) Понял, спасибо.
---
нет, структуру базы программно 1с пока не умеет
---
при желании можно, если программно в базе сделаете и заполните все таблички от расширения, которое добавить нужные матаданные в конфу.
---
Первое, что приходит в голову, это копать в сторону программного создания расширений.
Второе, что приходит в голову, это копать в сторону программной работы с таблицами SQL
Как сделать "ТолькоПросмотр" всех форм "ФормаЭлемента" документов? Чтобы не писать обработчик "ПриОткрытии" для каждого документа по отдельности. Можно Это сделать через обработчик событий? Не нашел там способа, чтобы срабатывало именно при открытии. Или может есть другой способ, но не через редактирование ролей
---
В УТ11 в абсолютном большинстве форм есть

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    ...

    СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

    КонецПроцедуры
```
---
А как не использовать при открытии?) Посмотрите в типовых конфигурациях как отрабатывает дата запрета редактирования. При открытии вызывается функция, которая проверяет дату запрета редактирования и если документ меньше этой даты - для формы устанавливается режим только просмотр.
Таким образом вам тоже надо или влезть в при открытии и вызывать свою процедуру или использовать функцию, которая уже есть и вызывается во всех формах при открытии и влезть в нее
---
Имею ввиду, как сделать "ПриОткрытии" сразу для всех документов? Чтобы не писать одно и то же в модуле формы для каждого вида документа. Просматривал механизм даты запрет, не понял где сам обработчик ПриОткрытии. только ПриЗаписи и ПриУдалении нашел
---
Создайте подписку на событие, для нужных документов
---
А какое событие? Там же нет подписки на событие "ПриОткрытии"? Нужно, чтобы форма была в режиме ТолькоПросмотр
---
В УТ11 в абсолютном большинстве форм есть

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    ...

    СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

    КонецПроцедуры
```
---
То что нужно! Спасибо большое