Имя: Пароль:
1C
1С v8
Проверка/исправление реквизитов справочника ПередЗаписью()
0 Mikhail Volkov
 
29.04.17
20:33
Нужно проверять реквизиты: Артикул, Наименование, НаименованиеПолное, Описание на наличие Слова Рус/Лат, задавать вопрос на исправление, или отказ от записи. Для обычных форм нет проблем: последовательно проверяй реквизиты, спрашивай, исправляй, если пользователь согласен - все в одной процедуре  ПередЗаписью().
На УФ сложнее: проверил 1-й реквизит, если нашел ошибку, то ПоказатьВопрос(), и уходишь в процедуру ПередЗаписьюПредложитьИсправитьРеквизитВопросЗавершение(). При этом проверка следующих реквизитов в ПередЗаписью() не выполняется, их проверку нужно еще прописать в ПередЗаписьюПредложитьИсправитьРеквизитВопросЗавершение(). Там и там проверяем 2-й реквизит, появляется ПередЗаписьюПредложитьИсправить2йРеквизитВопросЗавершение(). 3-й реквизит проверяем уже в 3-х местах? Может как-то проще можно?
1 Flip
 
29.04.17
20:41
Наверное через попытку исключение, код проверки вызывается в каждой начатой попытке.
2 Flip
 
29.04.17
20:42
как в запросах, Выбор когда ..Тогда..Иначе.. и понеслась душа в рай)))
3 Cyberhawk
 
29.04.17
21:39
Зачем на каждый чих задавать вопрос? Показывай форму со списком, пользователь отмечает флажками то, что будет исправлять, либо отказывается
4 Mikhail Volkov
 
29.04.17
22:24
(3) Да, возможно в реквизитов Наименование, НаименованиеПолное, Описание одна и та же размноженная ошибка, спрашивать можно один раз. Но все равно после одного исправления нужно повторно вызвать ПередЗаписью() через ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(), чтобы она завершилась без отказа, и запись продолжилась.
А если проверок много, то целые каскады процедур ПередЗаписьюПредложитьИсправитьРеквизитВопросЗавершение() писать?
5 Cyberhawk
 
30.04.17
07:38
(4) Ты походу не понял, раз хочешь "после одного исправления нужно повторно вызвать". Сделай работу по всем испрвлениям сразу в одном диалоге
6 Mikhail Volkov
 
30.04.17
08:22
(5) Идея понятна - обойтись одним диалогом-вопросом. Но форму этого диалога-вопроса придется строить. Идея хороша лишь для обработок, где список ошибок большой.
Не мой случай, ну в одном-двух реквизитах ошибутся, можно обойтись одним, двумя простыми вопросами. И проверка у меня упрощенная, только 1-ю неверную комбинацию Рус/Лат находит, после ее исправления нужно повторно проверку делать.
С ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме() погорячился, для документов нужна, для справочников все проще. Пример взял из УТ11 БанковскиеСчетаОрганизаций.
7 Mikhail Volkov
 
01.05.17
10:54
В этом примере используют Модифицированность формы справочника. Если согласился на исправление реквизита, или оказался, то Модифицированность устанавливают в Ложь, и при повторной записи этот реквизит не проверяется.
В документе ЗаказКлиента (приходилось добавлять свои проверки) для этого НеВыполнятьПроверкуПередЗаписью. Решил добавить аналогичные для каждого проверяемого реквизита. Вроде все получилось, не пришлось писать каскады процедур ПроверкаНаименованиеЗавершение(Результат, ДополнительныеПараметры). Но есть неприятность - форма закрывается когда жмешь "Записать", а не "Записать и закрыть"!?
Не понятно что в ДополнительныеПараметры? В документе ЗаказКлиента в них:
    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ПараметрыЗаписи", ПараметрыЗаписи);
Можно определить проводится документ, или просто записывается. А для справочника можно определить что нажато "Записать" или "Записать и закрыть"?
8 Лефмихалыч
 
01.05.17
11:02
Эти все проблемы - следствие костылявой архитектуры. Не надо было вообще на старте так делать, чтобы пользователю на каждую его ошибку выдавался отдельный вопрос.
Теперь у тебя других вариантов нет кроме как рекурсивно выполнять эти проверки из ПередЗаписьюПредложитьИсправитьРеквизитВопросЗавершение()
9 Mikhail Volkov
 
01.05.17
12:06
(8) Да, мне сразу не понравилось такое решение, когда попросили вставить пару поверок в ЗаказКлиента. Их приходилось прописывать не только в ПередЗаписью(), но и в ПередЗаписьюРазныеПрерыдущиеПроверкиВопросЗавершение(), т.е. строить целые каскады процедур проверки. Когда нужно проверять уже 4 реквизита, стал искать другое решение. Есть такое?

С добавлением НеВыполнятьПроверкуПередЗаписью для каждого проверяемого реквизита неплохо получилось, избежал каскадов процедур проверки.
С закрытием формы осталось решить.
10 Mikhail Volkov
 
01.05.17
14:47
Оказывается уже было такая тема v8: Как узнать, какую кнопку нажал пользователь? - типовыми методами не решается. Если только свои кнопки делать... Печально.
11 Лефмихалыч
 
01.05.17
19:55
(10) (9) перестань эти извращения. Проверяй в обработке проверки заполнения и там же задавай свои вопросы
12 Лефмихалыч
 
01.05.17
19:57
хотя все равно рекурсивно придется спрашивать.
но это потому, что идея "спрашивать пользователя несколько раз подряд" изначально - фуфло убогое.
13 FIXXXL
 
02.05.17
09:09
(4) можешь складировать ошибки в структуру, отказ=истина перед записью и показать один вопрос со всем скопом накопленных ошибок
14 FIXXXL
 
02.05.17
09:10
(13) даже так: Отказ = ЗначениеЗаполнено(СтруктураОшибок);  :)
15 Mikhail Volkov
 
02.05.17
11:35
(12) Спрашивал тебя в (9). Есть что предложить, хотя бы на уровне идеи?
(13) Тоже самое, что (3) предлагал, не подошло по причине в (6).
16 dezss
 
02.05.17
11:54
А если использовать:
ОбщегоНазваченияКлиентСервер.СообщитьПользователю()
с привязкой к полю + взведенный флаг.
Если флаг взведен, то запрашивать подтверждение "Есть ошибки, все равно сохранить?", да/нет/исправить.
17 dezss
 
02.05.17
11:55
(16) + никаких доп форм не надо. Привязка к полям есть, текст ошибки произвольный.
18 Вафель
 
02.05.17
11:56
создать свою кнопку записи.
Записывать только тогда, когда все проверки пройдены.
То бишь не пользоваться системным событием "ПередЗаписью"
19 dezss
 
02.05.17
11:58
(16) + имеется ввиду, что ПередЗаписью() проверяешь на все ошибки, выводишь ошибки привязанные к соответствующим реквизитам и если ошибки были, то диалог да/нет/продолжить_редактирование.
20 Вафель
 
02.05.17
11:59
(19) так вопрос то тоже асинхроннный
21 dezss
 
02.05.17
12:43
(20) да, но никаких своих обработок событий писать не надо, все ошибки привязаны к нужным реквизитам и показываются одновременно, а не по-очереди. Так что сабж по-сути решается.
22 Вафель
 
02.05.17
12:44
(21) а исправлять ка ты будешь?
А если нужно 2 ошибки исправить, а 2 руками?
23 dezss
 
02.05.17
12:47
(22) ну если нужно частично автоматическое исправление, то никак (из вопроса не сразу это понял). Тогда только свою команду записи документа.
24 Лефмихалыч
 
02.05.17
12:59
(15) в обработчике проверки заполнения на клиенте проверять, есть ли косяки в данных. Если есть хоть один косяк, то:
1. открывать форму отдельного мастера, с помощью которого пользователь все починит без этих дурацких вопросов.
2. отказ = истина;
Таким образом, ты из проверки заполнения на форме выйдешь только, если нет ни одного косяка.
25 Mikhail Volkov
 
02.05.17
13:20
(16) Спрашивать одним вопросом, уже не надо предлагать. Частично это использовал, когда ошибка одна и та же в нескольких реквизитах.
(18) Только так, больше нет вариантов узнать что нажато "Записать" или "Записать и закрыть"?
(24) Вроде дельное предложение, но поздно, не хочу переделывать. В следующий раз подумаю над этим.
26 Mikhail Volkov
 
05.05.17
13:59
Тут клиент еще высказал пожелание: у номенклатуры есть Присоединенные файлы (Номенклатура), которые имеют реквизит Описание. В большинстве случаев оно не заполнено. Клиент хочет чтобы это проверялось при записи, и заполнялось. Для ФайлКартинки можно указывать "Основной вид", для Файл описания для сайта - "Описание" без всяких вопросов. Для остальных - нужно обращаться к пользователю. Их я выбираю запросом, делаю цикл. И если бы не УФ, прямо в цикле обращался к пользователю ВвестиСтроку(), и что он вводил (предлагал бы начальное значение типа "Вид дополнительный 1"...), записывал в справочник Присоединенные файлы (Номенклатура).
А с УФ как? Допустим где-то на сервере создам список файлов с пустым описанием, верну его в форму номенклатуры. Далее буду их доставать по одному, и в процедуре &НаКлиенте буду делать ПоказатьВводСтроки(), и в процедуре ПослеВводаСтроки() буду писать результат ввода в описание файла. Только которому, сам Присоединенный файл можно через параметры передать?
Это все ПоказатьВводСтроки(), ПослеВводаСтроки() можно не в форме делать, а где нибудь в общем модуле &НаКлиенте?
27 dezss
 
05.05.17
14:38
(26) так ты хоть тз с клиентом согласовал?
а то так будешь пилить всякие хотелки до второго пришествия....
По идее вообще все можно выносить в ОМ, но надо быть аккуратней с галкой ВызовСервера.
28 Mikhail Volkov
 
05.05.17
15:50
(27) Меня смутило ЭтотОбъект в:
Оповещение = Новый ОписаниеОповещения("ПослеВводаОписания", ЭтотОбъект, ДополнительныеПараметры);
А какой ЭтотОбъект в ОМ!?
29 Mikhail Volkov
 
05.05.17
17:56
+ (26) Все конечно хорошо, но не разом же запрашивать описание для всех!? Как сделать, чтобы пока пользователь для 1-го не ввел описание, для следующего не запрашивала?

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
:
        // Проверим описание файла основной картинки
        Если ЗначениеЗаполнено(Объект.ФайлКартинки) Тогда
            мвДоработки.УстановитьОписаниеПрисоединенногоФайлаНоменклатуры(Объект.ФайлКартинки, "Основной вид");
        КонецЕсли;
        
        // Проверим описание файлов дополнительных картинок
        СписокФайловБезОписаний = мвДоработки.СписокДополнительныхПрисоединенныхФайловНоменклатурыБезОписания(Объект.Ссылка);
        Если СписокФайловБезОписаний.Количество() > 0 Тогда
            Для Сч = 1 По СписокФайловБезОписаний.Количество() Цикл
                ФайлБезОписания = СписокФайловБезОписаний[Сч-1].Значение;
                ВвестиОписаниеПрисоединенногоФайлаНоменклатуры(ФайлБезОписания);
            КонецЦикла;
        КонецЕсли;
:
КонецПроцедуры

&НаКлиенте
Процедура ВвестиОписаниеПрисоединенногоФайлаНоменклатуры(ФайлБезОписания)
    
    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ПрисоединенныйФайлНоменклатуры", ФайлБезОписания);
    
    Оповещение = Новый ОписаниеОповещения("ПослеВводаОписания", ЭтотОбъект, ДополнительныеПараметры);
    Описание   = "Дополнительный вид";
    ВводСтрокиЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                        НСтр("ru='Введите описание присоединенного файла: ""%1""'"),
                        ФайлБезОписания);
    ПоказатьВводСтроки(Оповещение, Описание, ВводСтрокиЗаголовок);
    
КонецПроцедуры

&НаКлиенте
Процедура ПослеВводаОписания(Результат, ДополнительныеПараметры) Экспорт
    
    Если Результат <> Неопределено Тогда
        ПрисоединенныйФайлНоменклатуры = ДополнительныеПараметры.ПрисоединенныйФайлНоменклатуры;
        ДубльПоОписанию = мвДоработки.ПроверитьУникальностьОписанияПрисоединенногоФайлаНоменклатуры(Объект.Ссылка, Результат);
        Если ДубльПоОписанию <> Неопределено Тогда
            ПредупреждениеПользователю(ПрисоединенныйФайлНоменклатуры, ДубльПоОписанию, Результат);
            Возврат;
        КонецЕсли;
        мвДоработки.УстановитьОписаниеПрисоединенногоФайлаНоменклатуры(ПрисоединенныйФайлНоменклатуры, Результат);
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура ПредупреждениеПользователю(ПрисоединенныйФайлНоменклатуры, ДубльПоОписанию, Описание)

    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ПрисоединенныйФайлНоменклатуры", ПрисоединенныйФайлНоменклатуры);
    
    Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияПредупреждение", ЭтотОбъект, ДополнительныеПараметры);    
    ЗаголовокПредупреждения = "Обнаружено дублирующее описание файла";
    ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                    НСтр("ru='Обнаружено дублирующее присоединенного описание у файла: %1
                        |""%2""'"),
                    ДубльПоОписанию, Описание);
    
    ПоказатьПредупреждение(Оповещение, ТекстПредупреждения, 10, ЗаголовокПредупреждения);

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

&НаКлиенте
Процедура ПослеЗакрытияПредупреждение(ДополнительныеПараметры) Экспорт
    // Здесь можно повторно запросить описание файла (по заказу клиента)
КонецПроцедуры
30 Cyberhawk
 
05.05.17
21:54
"А какой ЭтотОбъект в ОМ!?" // Отладчик в помощь
31 Mikhail Volkov
 
06.05.17
07:32
(30) ОМ вообще не катит.
Переделал фрагмент ПередЗаписью() и в ПослеВводаОписания() снова вставил Записать():

// Проверим описание файлов дополнительных картинок
СписокФайловБезОписаний = мвДоработки.СписокДополнительныхПрисоединенныхФайловНоменклатурыБезОписания(Объект.Ссылка);
Если СписокФайловБезОписаний.Количество() > 0 Тогда
    ВвестиОписаниеПрисоединенногоФайлаНоменклатуры(СписокФайловБезОписаний[0].Значение);
    Возврат;
КонецЕсли;

&НаКлиенте
Процедура ПослеВводаОписания(Результат, ДополнительныеПараметры) Экспорт
    
    Если Результат <> Неопределено Тогда
        ПрисоединенныйФайлНоменклатуры = ДополнительныеПараметры.ПрисоединенныйФайлНоменклатуры;
        ДубльПоОписанию = мвДоработки.ПроверитьУникальностьОписанияПрисоединенногоФайлаНоменклатуры(Объект.Ссылка, Результат);
        Если ДубльПоОписанию <> Неопределено Тогда
            ПредупреждениеПользователю(ПрисоединенныйФайлНоменклатуры, ДубльПоОписанию, Результат);
            Возврат;
        КонецЕсли;
        мвДоработки.УстановитьОписаниеПрисоединенногоФайлаНоменклатуры(ПрисоединенныйФайлНоменклатуры, Результат);
        
        Модифицированность = Истина;
        Записать();
        Если Открыта() И НеВыполнятьПроверкуАртикул И НеВыполнятьПроверкуНаименование И НеВыполнятьПроверкуНаименованиеПолное И НеВыполнятьПроверкуОписание Тогда Закрыть();    КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

В общем построил диалог по принципу вопрос-ответ.

Еще надо-бы вместо ПоказатьВводСтроки() что-то с картинкой, чтобы пользователь видел что описывает. Есть что-то типовое, или свою форму диалога лепить?
32 Мимохожий Однако
 
06.05.17
09:06
Делай кнопку Записать недоступной, если проверку не проходит )) При закрытии закрывай молча. Эффективно
33 Mikhail Volkov
 
11.05.17
06:11
(18) Кнопку ФормаЗаписать не пришлось менять. Вместо стандартной команды Записать сделал свою КомандаЗаписать:

&НаКлиенте
Процедура КомандаЗаписать(Команда)
    НеЗакрыватьФорму = Истина;
    Записать();
КонецПроцедуры

Свой реквизит НеЗакрыватьФорму добавил в форму, вставил его каждую проверку, например:

&НаКлиенте
Процедура ПроверкаОписаниеЗавершениеИзHTMLФайла(Результат, ДополнительныеПараметры) Экспорт
    
    Если Результат <> КодВозвратаДиалога.Нет Тогда
        Если ЗначениеЗаполнено(Объект.ФайлОписанияДляСайта) Тогда
            ОписаниеИзHTMLФайла = мвДоработки.ИзвлечениеТекстаИзHTML(Объект.ФайлОписанияДляСайта);
        Иначе
            ОписаниеИзHTMLФайла = мвДоработки.ОписаниеИзHTMLФайла(Объект.Ссылка);
        КонецЕсли;
        Объект.Описание = ОписаниеИзHTMLФайла;
        
        Записать();
        Если Открыта() И Не НеЗакрыватьФорму И НеВыполнятьПроверкуАртикул И НеВыполнятьПроверкуНаименование И НеВыполнятьПроверкуНаименованиеПолное И НеВыполнятьПроверкуОписание Тогда Закрыть();    КонецЕсли;
        Если НеЗакрыватьФорму И НеВыполнятьПроверкуАртикул И НеВыполнятьПроверкуНаименование И НеВыполнятьПроверкуНаименованиеПолное И НеВыполнятьПроверкуОписание Тогда НеЗакрыватьФорму = Ложь;    КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Вот только некрасиво получилось, что приходится перечислять все реквизиты "НеВыполнятьПроверку..." кроме (в данной проверке) НеВыполнятьПроверкуОписаниеИзHTMLФайла. Думаю заменить функцией НеВыполнятьПроверкуКроме(ИмяРеквизита). Как ее лучше сделать?
34 Злопчинский
 
11.05.17
06:34
Клиент обычно в тз не может ничего внятного сформулировать кроме того что сейчас у него перед мысленным взором стоит. А стоит у него перед мысленным взором обычно вполне конкретная фигня причём сама по себе без связи с другими хренями. Вот и думай что клиенту надо - когда он сказал про две педали - то ли велосипед, то ли автор с газом и тормозом
35 Злопчинский
 
11.05.17
06:38
(33) я не спец, но имхо все равно фигня
Где-то должен быть перечень легко настраиваемый, модифицируемый атрибутов грекам хитов которые подлежат проверке. Дальше по этому перечню смотрим все хорошо или плохо. Если плохо суем зверю сообщение с перечислением плохого и не лаем закрыть форму пока все не исправит.
То бишь я поддерживаю Лефмихалыча и МимохожегоОднако
36 Mikhail Volkov
 
11.05.17
14:04
(35) А в какой момент начать эту проверку если не ПередЗаписью()? Хотел делать КаждыйРеквизитПриИзменении(). Но эта проверка не обязательна, например, на наличии "неправильной" комбинации Рус/Лат в текстовом реквизите, возможно так и должно быть. Текстовый реквизит может заполняться копированием текста в буфер обмена из документации поставщика, и вставляться в каждый текстовый реквизит. Если скопированное содержит "неправильную" комбинацию Рус/Лат, то 4 раза будет задаваться один и тот же вопрос для каждого текстового реквизита.
37 Лефмихалыч
 
11.05.17
14:07
(36) в обработке проверки заполнения!
38 Лефмихалыч
 
11.05.17
14:07
за последовательную проверку и последовательно отображение вопросов в приличном обществе канделябром по щам выдают...
39 dezss
 
11.05.17
14:12
(36) чувак, не мучайся уже. Сделай мастер заполнения, чтоб кнопки далее и куртизанки. И на каждом шаге если что-то не так, спрашивай, а оно точно не так или так и должно быть.
40 Mikhail Volkov
 
11.05.17
14:42
(37) А обработка проверки заполнения когда запускается?
(39) Да давно все прекрасно работает. Единственное нарекание от клиента, что по кнопке "Записать" форма закрывалась. Кнопку ФормаЗаписать не пришлось менять. Вместо стандартной команды Записать сделал свою КомандаЗаписать (33).
41 dezss
 
11.05.17
14:47
(40) СправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>)
ПроверитьЗаполнение (CheckFilling)
Синтаксис:

ПроверитьЗаполнение()
Возвращаемое значение:

Тип: Булево.
Истина - ошибок не обнаружено, Ложь - в противном случае.
Описание:

Проверяет заполнение реквизитов. Для реквизитов, у которых при конфигурировании свойство "Проверка заполнения" установлено в значение "Показывать ошибку" и реквизит не заполнен, будет сформировано сообщение об ошибке.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

Выполнение метода приводит к возникновению события ОбработкаПроверкиЗаполнения.
42 Лефмихалыч
 
11.05.17
14:48
(40) у документа - перед началом транзакции проведения. У справочника - перед началом транзакции записи.
43 dezss
 
11.05.17
14:49
(42) и при вызове функции ПроверитьЗаполнение()
44 Mikhail Volkov
 
11.05.17
15:09
(42) Т.е. ПередЗаписью()
45 dezss
 
11.05.17
15:12
(44) да ну открой же ты сп

СправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>)
ОбработкаПроверкиЗаполнения (FillCheckProcessing)
Синтаксис:

ОбработкаПроверкиЗаполнения(<Отказ>, <ПроверяемыеРеквизиты>)
Параметры:

<Отказ>

Тип: Булево.
Если в теле процедуры-обработчика установить данному параметру значение Истина, то будет выполнен отказ от продолжения работы после выполнения проверки заполнения.
Значение по умолчанию: Ложь.
<ПроверяемыеРеквизиты>

Тип: Массив.
Массив путей к реквизитам, для которых будет выполнена проверка заполнения. Массив может быть модифицирован удалением или добавлением путей к необходимым реквизитам.
Описание:

Вызывается расширением формы при необходимости проверки заполнения реквизитов при записи в форме, а также при выполнении метода ПроверитьЗаполнение.
Позволяет разработчику конфигурации самостоятельно реализовать проверку заполнения в обработчике события. При этом в обработчике можно полностью отказаться от системной обработки (очистив список проверяемых реквизитов), отказаться от проверки системой части реквизитов (выполнив проверку отдельных реквизитов особенным образом и исключив эти реквизиты из списка), а также добавить для проверки другие реквизиты, проверка которых не была указана.
46 Mikhail Volkov
 
12.05.17
07:28
(45) Достал уже, не нужно мне это убогое типовое решение (38). Давно все прекрасно работает, ответил в (40). Оставался вопрос по кнопкам, успешно решено. Тема закрыта.
47 Mikhail Volkov
 
16.05.17
13:36
+ (33) > Кнопку ФормаЗаписать не пришлось менять. Вместо стандартной команды Записать сделал свою КомандаЗаписать
Дык, теперь на форме две кнопки "Записать" (с дискетой). Пользователи жмут на 1-ю, старую, и форма закрывается!? Как ее убрать?
48 Мимохожий Однако
 
16.05.17
13:58
(47) Убери автозаполнение командной панели и добавь нужные кнопки
49 Лефмихалыч
 
16.05.17
13:59
(44) раньше, чем ПередЗаписью(). До начала транзакции
50 Mikhail Volkov
 
16.05.17
17:11
(48) Нет галки "Автозаполнение" на командной панели!?
51 Mikhail Volkov
 
16.05.17
18:33
(48) Набор кнопок на панели определяется набором команд. А команда Записать - стандартная. Ее ни как не убрать. Или можно как-то отключить, чтобы ее кнопка стала не видимой?
52 Mikhail Volkov
 
18.05.17
05:20
Стандартную "Записать" 1С гвоздями прибила, никак не убрать?
53 Mikhail Volkov
 
18.05.17
11:03
"Автозаполнение" галки нет, а кнопки есть. Где-то программно прописано, где?
54 Mikhail Volkov
 
18.05.17
12:03
Докопался, в свойствах формы Состав команд "Открыть", и снял галку с "Записать".
Закон Брукера: Даже маленькая практика стоит большой теории.