Стандартизация внесения изменений в конфигурацию

Публикация № 198733

Разработка - Практика программирования

11
Общие рекомендации по внесению изменений в конфигурацию для последующего облегчения обновления.
Рекомендации по подписям, добавление реквизитов, модулей, форм, процедур...

Все мы не раз сталкивались с обновлением измененных конфигураций. Обычно это долгий и муторный процесс, и почти всегда что-то да теряется из функционала, который до этого старательно добавляли, особенно если это функционал добавляли не вы. Как с этим бороться? Как облегчить себе жизнь?

Вот несколько наработок и правил, которые в этом помогают:

1) Подписи.

Все мы обычно подписываемся так:

///Тима   - Тима для примера, может быть вася петя инициалы итд

Но это не совсем верно: если в глобальном поиске набрать "Тима", то вылезет куча не нужных вещей, например "Функция дкПривестиМакетПечатнойФормы(ЭтотОбъект,Макет)". (Хотя можно искать и "/Тима"

поэтому лучше подписываться латинскими буквами!

Дальше нам надо, к примеру, изменить знак в строке)

 

Переменная = Переменная - 1; ///TIMA

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

И если вы изменяете целый блог то лучше еще вставить начало изменений и конец изменений.:

///Tima +++ (а лучше и написать дату изменения, чтоб было легче вспоминать) 230813

///Переменная = Переменная + 1;

Переменная = Переменная - 1;

///Tima -

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

 

///RogaAndKopita Tima +++ (а лучше и написать дату изменения, чтоб было легче вспоминать) 230813

///Переменная = Переменная + 1;

Переменная = Переменная - 1;

///RogaAndKopita  Tima -

 

2) Подписки на события!


Ну конечно же во-первых и во-вторых используйте Подписки на события.

Все события, которые можно поместить в

ПриУстановкеНовогоНомера, ПриКопировании, ОбработкаЗаполнения, ПередЗаписью, ПриЗаписи, ПередУдалением, ОбработкаПроведения, ОбработкаУдаленияПроведения, ОбработкаПроверкиЗаполнения.

Помещайте в Подписки на события

Порядок выполнения подписки на событие не регламентирован, пишите код исходя из этого.

 

3) Добавление реквизитов, модулей, форм итд

 

Все новые объекты конфигурации добавляете с префиксом (например,  "Dop_" или "RogaAndKopita_" или "Tima_").

То же самое касается и новых функций или процедур.

 

4) Добавление новых процедур


Все новыее процедуры и функции добавляете в СВОЙ общий модуль, по возможности не трогайте типовые!

Старайтесь как можно больше процедур и функций помещать в СВОЙ общий модуль, вы себе этим здорово облегчите жизнь.

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

 

5) Изменения в формах.


Если хотите изменить события формы или обработки реквизитов, то есть 2 способа

Первый способ.

Если хотите изменить события формы или обработки реквизитов, то есть 2 способа

Механизм  переопределения событий форм:

//infostart.ru/public/16980/

//infostart.ru/public/183156/

Если вкратце, то так:

В общий модуль добавляем процедуру:

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

КонецПроцедуры // допУстановитьДействиеФормы()

// Определяет корневой тип конфигурации.
//
// Параметры:
//  пЗначение    – Произвольный – проверяемое значение.
//
// Возвращаемое значение:
//  Строка       – имя корневого типа конфигурации метаданных;
//  Неопределено – значение не является объектом коневого типа конфигурации.
//
Функция допПолучитьКорневойТипКонфигурации(пЗначение) Экспорт

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

// Получаем стандартную строку аргументов для выполнения вызова обработчика события формы.
//
// Параметры:
//  пОбъект      – Форма, ЭлементФормы – объект события;
//  *пИмяСобытия – Строка – имя события.
//
// Возвращаемое значение:
//               – Строка – строка аргументов вида "([Аргумент1][, Аргумент2, ... , АргументN]);",
//               где аргументы имеют свои стандартные названия для каждого события.
//
Функция допПолучитьАргументыДействияФормы(пОбъект, пИмяСобытия = "")
    Аргументы = "";
    Если ТипЗнч(пОбъект) = Тип("КнопкаКоманднойПанели") Тогда
        // Это действие кнопки командной панели формы
        Аргументы = "(Кнопка)";        
    ИначеЕсли ТипЗнч(пОбъект) = Тип("Форма") Тогда
        // Это событие формы
        Попытка
            ОбъектОсновнойРеквизитФормы = пОбъект.ЭтотОбъект;
        Исключение
            ОбъектОсновнойРеквизитФормы = Неопределено;
        КонецПопытки;
        Если Аргументы = "" Тогда
            Если  пИмяСобытия = "ВнешнееСобытие" Тогда
                Аргументы = "(Источник, Событие, Данные)";
            ИначеЕсли пИмяСобытия = "ОбработкаАктивизацииОбъекта" Тогда
                Аргументы = "(АктивныйОбъект, Источник)";
            ИначеЕсли пИмяСобытия = "ОбработкаВыбора" Тогда
                Аргументы = "(ЗначениеВыбора, Источник)";
            ИначеЕсли пИмяСобытия = "ОбработкаЗаписиНовогоОбъекта" Тогда
                Аргументы = "(Объект, Источник)";
            ИначеЕсли пИмяСобытия = "ОбработкаОповещения" Тогда
                Аргументы = "(ИмяСобытия, Параметр, Источник)";
            ИначеЕсли пИмяСобытия = "ПередЗакрытием" Тогда
                Аргументы = "(Отказ, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ПередЗаписью" Тогда
                Если допПолучитьКорневойТипКонфигурации(ОбъектОсновнойРеквизитФормы) = "Документ" Тогда
                    Аргументы = "(Отказ, РежимЗаписи, РежимПроведения)";
                Иначе
                    Аргументы = "(Отказ)";
                КонецЕсли;
            ИначеЕсли пИмяСобытия = "ПередОткрытием" Тогда
                Аргументы = "(Отказ, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ПриЗаписи" Тогда
                Аргументы = "(Отказ)";
            ИначеЕсли пИмяСобытия = "ПриПовторномОткрытии" Тогда
                Аргументы = "(СтандартнаяОбработка)";
            Иначе
                Аргументы = "()";
            КонецЕсли;
        КонецЕсли;        
    Иначе
        // Это событие элемента формы
        Если ТипЗнч(пОбъект) = Тип("ТабличноеПоле") Тогда
            Если пИмяСобытия = "Выбор" Тогда
                Аргументы = "(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "Перетаскивание" Тогда
                Аргументы = "(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)";
            ИначеЕсли пИмяСобытия = "ПроверкаПеретаскивания" Тогда
                Аргументы = "(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)";
            КонецЕсли;
        ИначеЕсли ТипЗнч(пОбъект) = Тип("ТабличныйДокумент") Тогда
            Если пИмяСобытия = "Выбор" Тогда
                Аргументы = "(Элемент, Область, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "Перетаскивание" Тогда
                Аргументы = "(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Область)";
            ИначеЕсли пИмяСобытия = "ПроверкаПеретаскивания" Тогда
                Аргументы = "(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Область)";
            КонецЕсли;
        КонецЕсли;
        Если Аргументы = "" Тогда
            Если пИмяСобытия = "АвтоПодборТекста" Тогда
                Аргументы = "(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "НачалоВыбора" Тогда
                Аргументы = "(Элемент, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "НачалоПеретаскивания" Тогда
                Аргументы = "(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ОбработкаВыбора" Тогда
                Аргументы = "(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ОбработкаЗаписиНовогоОбъекта" Тогда
                Аргументы = "(Элемент, Объект, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ОбработкаРасшифровки" Тогда
                Аргументы = "(Элемент, Расшифровка, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ОкончаниеВводаТекста" Тогда
                Аргументы = "(Элемент, Текст, Значение, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ОкончаниеПеретаскивания" Тогда
                Аргументы = "(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "Открытие" Тогда
                Аргументы = "(Элемент, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "Очистка" Тогда
                Аргументы = "(Элемент, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ПередНачаломДобавления" Тогда
                Аргументы = "(Элемент, Отказ, Копирование)";
            ИначеЕсли пИмяСобытия = "ПередНачаломИзменения" Тогда
                Аргументы = "(Элемент, Отказ)";
            ИначеЕсли пИмяСобытия = "ПередОкончаниемРедактирования" Тогда
                Аргументы = "(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)";
            ИначеЕсли пИмяСобытия = "ПередУдалением" Тогда
                Аргументы = "(Элемент, Отказ)";
            ИначеЕсли пИмяСобытия = "ПриВыводеСтроки" Тогда
                Аргументы = "(Элемент, ОформлениеСтроки, ДанныеСтроки)";
            ИначеЕсли пИмяСобытия = "ПриИзмененииСодержимогоОбласти" Тогда
                Аргументы = "(Элемент, Область)";
            ИначеЕсли пИмяСобытия = "ПриНачалеРедактирования" Тогда
                Аргументы = "(Элемент, НоваяСтрока, Копирование)";
            ИначеЕсли пИмяСобытия = "ПриОкончанииРедактирования" Тогда
                Аргументы = "(Элемент, НоваяСтрока, ОтменаРедактирования)";
            ИначеЕсли пИмяСобытия = "ПриОкончанииРедактированияИнтервала" Тогда
                Аргументы = "(Элемент, Интервал, Отмена)";
            ИначеЕсли пИмяСобытия = "ПриПолученииДанных" Тогда
                Аргументы = "(Элемент, ОформленияСтрок)";
            ИначеЕсли пИмяСобытия = "ПриСменеСтраницы" Тогда
                Аргументы = "(Элемент, ТекущаяСтраница)";
            ИначеЕсли пИмяСобытия = "Регулирование" Тогда
                Аргументы = "(Элемент, Направление, СтандартнаяОбработка)";
            Иначе
                Аргументы = "(Элемент)";
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    Возврат Аргументы + ";";

КонецФункции // допПолучитьАргументыДействияФормы()

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

#КонецЕсли

В модуле формы, в конце пишем:

допУстановитьДействиеФормы(ЭтаФорма, "ПриОткрытии");

В модуле формы добавляем процедуру с именем

Процедура ДопПриОткрытии()

///Сюда вставляем что хотим до

Выполнить(допПолучитьСтароеДействиеФормы(ЭтаФорма, "ПриОткрытии"));  

///Сюда тоже можно вставлять

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

 

Второй способ.

Позаимствовал у компании Рарус обработку реквизитов: в модуле формы во все требуемые процедуры пишем строчку:

///Если Обрабатываем ТабЧасть:
ОбработкаРеквизита("ИмяТабЧасти.ИмяРекизита", ЭлементыФормы.ИмяТабЧасти.ТекущаяСтрока, ЭтаФорма);
///Если обрабатываем реквизит формы или событие:
ОбработкаРеквизита("ИмяРекизита", , ЭтаФорма);

А в модуле документа делаем:
Функция ОбработкаРеквизита(Имя,ТекСтрока=Неопределено,ЭтаФорма=Неопределено,ДопПараметры=Неопределено) Экспорт 

Если имя = "ИмяРекизита" тогда

ИначеЕсли имя = "ИмяРекизитаДругого" тогда
 //А если надо вызвать обработку другого реквизита при выполнении кода это делается легко:

возврат ОбработкаРеквизита("ИмяРекизита", , ЭтаФорма);

Иначе
//// А тут можно сделать вызов такой же функции в общем модуле для изменения общих реквизитов (например ставка НДС)
Возврат ДопОбработкаРеквизита(Имя,ТекСтрока,ЭтаФорма,ДопПараметры);
КонецЕсли;
    
КонецФункции

6) Изменение самой формы


Если нужно изменить саму форму, например добавить реквизит или еще что-то, можно использовать декомпилятор форм:

//infostart.ru/public/102078/

//infostart.ru/public/99363/

//infostart.ru/public/15195/

А код из декомпилятора вставлять в процедуру ПриОткрытии (конечно с учетом 5-го пункта)

А вот если требуется сильно переделать всю форму, то советую создавать новую форму, тогда при обновлении всего лишь переопределится форма по умолчанию, а все ваши изменения не потеряются.
 

Вот собственно и все приемы, которые я знаю. Если знаете еще способы, то пишите, обязательно их добавлю.

 

 

11

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. wondermaker 10.09.13 07:20 Сейчас в теме
1. Если меняется одна строка, то лучше писать комментарий в той же строке или перед ней.
Со временем таких изменений будет несколько и код может выглядеть как елка - всё зеленое от почти бессмысленных комментариев.
Да и причину писать надо. Бывает на одну строку кода пишешь 2-3 строки комментария.

Переменная = Переменная - 1; ///RogaAndKopita Tima +++ вместо "+" будет "-" потому что <причина действий> 230813

2. Все новые процедуры и функции добавляете в СВОЙ общий модуль, по возможности не трогайте типовые!
Частично согласен. Но я бы советовал не один модуль, а несколько. Разделить их, во-первых, по направлениям/участкам работы. Во-вторых, на клиентскую и серверную часть.

И не стоит скидывать со счетов модули менеджеров - очень полезная вещь, особенно, если функция или процедура работает только с одним видом объекта конфигурации.

3. Могу предложить еще вариант "триггеров" - некий справочник, в котором хранится код 1С, вызываемый в тех или иных случаях - динамическое изменение кода, универсальность встраивания.
Подписки хороши, если мы что-то делаем "по факту" и с целым объектом. А если нам надо в форме документа проверять реквизит на какие-то условия?
Если условий 5-10 штук, они меняются раз в месяц, да еще зависят от второй буквы девичьей фамилии матери отца соседа снизу пользователя?
Вот тут и пригодится такой внешний код - вызов займет 1-2 строки, при встраивании в типовую конфигурацию удобнее обновлять несколько строк, чем "километры" кода.

4. Для изменяемых объектов типовой конфигурации можно завести отдельную подсистему "ВрезкаВТиповую" и включать объекты в случае их изменения - это позволит в случае "врезок" либо исправления ошибок до выхода новой версии типовой фиксировать измененные объекты чтобы отслеживать их при обновлении.
gulagm; help1Ckr; +2 Ответить
2. TimofeySin 50 10.09.13 11:06 Сейчас в теме
1 пункт, если в типовые модули делать минимум изменений то как елка код не будет выглядеть, а в доп модулях комментировать все не обязательно.
2 пункт да, видно надо было расширить в статье это.
3 пункт получается аналог внешнего модуля, просто изменения можно внедрять не залезая в конфигуратор. Такой вариант тоже имеет право на жизнь.
3. Поручик 4331 10.09.13 15:47 Сейчас в теме
(0) Шаблоны для вставки комментариев рулят
Шаблон общий
//[begin] Added by Sergey. http://infostart.ru/profile/18346/
//<?"", ДатаВремя, "ДЛФ=DT">
<?>
//[end] Added


Шаблон для проекта
//<exp/>
//Добавленные/изменённые строки
//Added by Sergey. <?"", ДатаВремя, "ДЛФ=DT">
<?>
//</exp>

Small sa; CratosX; gulagm; +3 Ответить
4. pumbaE 628 10.09.13 16:17 Сейчас в теме
//TIMA 
а в английских версиях БСП писать ///ТИМА ?

Главное обновляй конфу поставщика нормально и все твои врезки будут видны и понятны ибо никакие комментарии не помогут понять, что же цензура сделали в этой конфе, где версия cf 3.0.2, а версия поставщика 1.0.1 ...

А такие комментарии нафиг не нужны, т.к. они больше похожи на написанное на заборе "Сдесь был Вася!" , "Выпуск 1986г."...
alexsiswx; artbear; +2 Ответить
5. oleg974 123 11.09.13 07:57 Сейчас в теме
Добавлю, что в начале модуля мы ставим еще и информацию о заявке по которой вносились изменения. Например:

// 1.01 10.09.2013 Иванов И.И. по заявке 235 добавил вариант заполнения контрагента

и уже в модуле
// 1.01 Добавлено, начало
....
// 1.01 Добавлено, конец
help1Ckr; +1 Ответить
6. help1Ckr 11.09.13 09:30 Сейчас в теме
(105) Gazza, "завести отдельную подсистему "ВрезкаВТиповую"" - я пришел к выводу о том, лучше делать следующую иерархию подсистем - первая МоиПодсистемы, и ей подчиненные МоиДобавленныеОбъекты, ОбъектыТиповойИзмененные,ИсправленныеОбъектыТиповойСОшибками.
В первую добавляем свои объекты - удобнее просматривать что добавлено, вторая подсистема позволяет контролировать а не слетели ли доработки, а третья контролировать глюки типовой которые в следующем релизе могут быть исправлены.
7. help1Ckr 11.09.13 09:32 Сейчас в теме
(105) Gazza, не согласен. Когда есть список заявок и в комментах писать не вася, а №заявки такой. то потом можно: а) узнать зачем вносились изменения и с какими объектами они связаны; б) проще искать изменения;
8. alexsiswx 12.09.13 11:39 Сейчас в теме
Правильно отмечено! "обновлять конфигурацию поставщика" - обязательно.
9. madmpro 16.01.14 15:11 Сейчас в теме
//--> I.F. Проведение будущей датой
Процедура ОбработчикИзмененияДаты(Данные)
    Если Данные="ДокументОбъект.Дата" ИЛИ Данные="" Тогда
        Если Дата>ТекущаяДата() Тогда
            ЭтаФорма.ИспользоватьРежимПроведения=ИспользованиеРежимаПроведения.НеОперативный;
        Иначе
            ЭтаФорма.ИспользоватьРежимПроведения=ИспользованиеРежимаПроведения.Оперативный;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры 
//<-- I.F. Проведение будущей датой
//...
////////////////////////////////////////////////////////////­////////////////////
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
//...
//--> I.F. Проведение будущей датой
ПодключитьОбработчикИзмененияДанных("Дата","ОбработчикИзмененияДаты");
//<-- I.F. Проведение будущей датой






Показать
10. Патриот 241 25.04.14 13:42 Сейчас в теме
Сакральные знания)) хотя для новичков может и полезно
Оставьте свое сообщение

См. также

Как настроить сервер 1С по умолчанию для ПРОФ лицензии после 10.09.2019 100

Статья Системный администратор Нет файла v8 Бесплатно (free) Администрирование данных 1С

Здесь мы собираем все данные по настройкам сервера для работы ПРОФ лицензии.

11.09.2019    23558    infostart    90       

Агрегатные функции СКД, о которых мало кто знает 344

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    13803    ids79    44       

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив 256

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    15185    ids79    30       

"Меньше копипаста!", или как Вася универсальную процедуру писал 183

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    8328    SeiOkami    49       

Создание отчетов с помощью СКД - основные понятия и элементы 210

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    21803    ids79    17       

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017 179

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    12969    dmurk    134       

Регистры накопления. Структура хранения в базе данных 176

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    19632    YPermitin    27       

Выгрузка документа по условию 5

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    6456    m-rv    2       

Как прикрутить ГУИД к регистру сведений 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

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

16.04.2019    9104    m-rv    16       

О расширениях замолвите слово... 194

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования Разработка

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    18118    ellavs    125       

Git-репозитории для 1С-кода (опыт использования при небольших проектах) 202

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    14257    ellavs    83       

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS) 168

Статья Программист Нет файла v8 v8::Права Бесплатно (free) Практика программирования БСП (Библиотека стандартных подсистем) Роли и права

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    17860    ids79    9       

Малоизвестная хитрость определения модуля и номера строки при возникновении исключения (без запуска отладки и конфигуратора). Несколько очень удобных, но малоиспользуемых возможностей работы в конфигураторе 306

Статья Программист Нет файла v8 Россия Бесплатно (free) Тестирование и исправление

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

17.01.2019    17665    PoZiTiFFF    52       

Копирование числовых ячеек из 1С в Excel 26

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Загрузка и выгрузка в Excel Администрирование данных 1С

Решение проблемы, когда значения скопированных ячеек из табличных документов 1С в Excel воспринимаются последним как текст, т.е. без дополнительного форматирования значений невозможно применить арифметические операции. Поводом для публикации послужило понимание того, что целое предприятие с более сотней активных пользователей уже на протяжении года мучилось с такой, казалось бы на первый взгляд, тривиальной проблемой. Варианты решения, предложенные специалистами helpdesk, обслуживающими данное предприятие, а так же многочисленные обсуждения на форумах, только подтвердили убеждение в необходимости описания способа, который позволил мне качественно и быстро справиться с ситуацией.

15.01.2019    11967    itriot11    21       

Чем PostgreSQL может быть полезен разработчику 1С 170

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Администрирование данных 1С

В статье будут рассмотрены примеры, которые могут оказаться полезными в повседневной работе разработчика 1С и не только: как можно сделать снимок рабочей базы без файла резервной копии, как можно эффективно использовать табличные пространства СУБД PostgreSQL, а также как организовать простой и удобный доступ к админке СУБД посредством мобильных устройств.

20.12.2018    16456    Shmell    38       

Новый подход к обмену данными EnterpriseData 207

Статья Программист Нет файла v8 v8::УФ Россия Бесплатно (free) Практика программирования Обмен через XML

Хочу предложить Вашему вниманию цикл статей, посвященных обмену данными через универсальный формат (EnterpriseData или ED).

14.12.2018    23609    ids79    72       

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С 127

Статья Программист Нет файла v8 v8::blocking 1cv8.cf Бесплатно (free) Математика и алгоритмы Практика программирования

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    22604    ids79    40       

Вспомогательные инструкции в коде 1С 106

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    21756    tormozit    100       

Кластер серверов 1С 183

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Администрирование данных 1С

Какой уровень отказоустойчивости при проектировании серверов 1С выбрать? В чем отличия центрального и рабочего сервера? Как правильно настроить требования назначения функциональности? На что влияют настройки кластера и сервера 1С и как в них не запутаться? Антон Дорошкевич дает на эти и многие другие вопросы подробные ответы.

24.09.2018    26799    a.doroshkevich    60       

Произвольный код в фоновом режиме 166

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

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

03.09.2018    16061    nikita0832    42       

Повышаем эффективность разработки правил обмена 125

Статья Программист Нет файла v8 КД ОС Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    20533    olegtymko    47       

Как сделать запрос на изменение данных 75

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Бесплатно (free) Практика программирования

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    22464    m-rv    21       

Строим графы средствами 1С (без GraphViz) 43

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    18232    slozhenikin_com    19       

Распределение расходов пропорционально продажам 9

Статья Программист Пользователь Нет файла v8 v8::ОУ УТ10 УУ Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Бесплатно (free) Практика программирования

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    12263    Rustig    9       

Несколько версий сервера 1С на одном компьютере 213

Статья Системный администратор Нет файла v8 Бесплатно (free) Администрирование данных 1С

Как установить несколько экземляров сервера 1С на один компьютер. Как установить несколько служб агента 1С на один сервер? Как запустить сервера разных платформ на одном компьютере.

18.04.2018    47837    spezc    82       

О лицензиях 1С 207

Статья Системный администратор Нет файла v8 Россия Windows Бесплатно (free) Администрирование данных 1С

Разбираем вопросы по получению и переполучению лицензии 1С.

30.03.2018    89851    D_e_X_T_e_R    141       

Минимализмы 3 356

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Универсальные функции

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    37517    ildarovich    44       

Этюды по программированию. Взаимодействие с Microsoft Word 109

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Часто приходится заниматься созданием сложных документов Word с таблицами, вложенными фрагментами, хитрым оформлением и прочими радостями жизни. Это - попытка как-то структурировать полученный опыт, чтобы не приходилось перерывать ворох старых обработок в поисках крупиц истины. Надеюсь, эта статья будет полезна и Вам.

11.12.2017    26801    milkers    23       

Метод формирования движений в типовых регистрах нетиповыми регистраторами 31

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    22185    itriot11    34       

1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена) 738

Статья Программист Нет файла v8 КД Бесплатно (free) Перенос данных из 1C8 в 1C8 Практика программирования Обмен через XML

Что такое КД3? Как начать использовать? Полезные дополнения к документации. Что нужно исправить в типовых обработках и конфигурации. Как изменить правила обмена не снимая конфигурацию с поддержки. Как отлаживать правила обмена?

19.11.2017    143889    MaxS    251       

Программные перечисления, ч.2: приемы кэширования при разработке 67

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Все знают, что такое кэш, и зачем он нужен. Но в 1С разработчик обычно использует кэширование только на уровне конфигурации, а в какой-нибудь обработке скорее ломает голову над запросом - как получить все данные за один заход... Хочется рассказать о том, как можно добиться хороших результатов с стратегией "разделяй и властвуй".

30.10.2017    22353    unichkin    18       

Работа с Excel 299

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Загрузка и выгрузка в Excel

Собрал различные полезности для работы с Excel из 1С. Иногда приходится форматировать документ Excel программно из 1С. Так вот, чтобы не искать постоянно на просторах интернета как сделать левое выравнивание в ячейке Excel из 1С и т.п. решил опубликовать это...

23.10.2017    27672    arakelyan    39       

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере 128

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Практика программирования

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    35382    tormozit    72       

Ускоряем 1С: модули с повторным использованием возвращаемых значений 137

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

По роду своей деятельности, мне часто приходится обсуждать с программистами детали реализации той или иной функциональности. Очень часто, разговаривая даже с квалифицированными специалистами я сталкиваюсь с незнанием сути платформенной функциональности Повторного использования возвращаемых значений общих модулей. В данной статье я постараюсь дать краткий обзор и основные особенности этой функциональности.

04.09.2017    44622    m-rv    60       

Как просто запомнить алгоритм программного вывода в СКД 207

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования

Порой нужно быстро вывести на экран таблицу значений, используя СКД \ получить данные отчета в таблицу значений.. Несмотря на очевидность алгоритма - раньше мне проще было загуглить программный вывод, благо эта инфа есть везде. Но постепенно понял как его можно быстро вспомнить, и лишний раз ничего не искать. Конечно эта статья не для Гуру :) Но я думаю - что любой неопытный в СКД программист сделает для себя небольшое открытие...

01.09.2017    42709    unichkin    15       

Настройка веб сервера Apache + 1С (Пошаговое руководство) 251

Статья Системный администратор Нет файла v8 1cv8.cf Windows Бесплатно (free) Администрирование данных 1С Apache

Пошаговое руководство настройки Web сервера Apache на Windows. Не секрет, что файловые базы через веб-сервер будут работать намного шустрее, чем через обычный доступ к сетевому каталогу. Эффект особенно заметен, когда старые компы вообще не справляются с обычным сетевым доступом, регулярно выплевывают 1С. А доступ через веб сервер даже на компьютерах серии "Хлам" работает на ура!

19.07.2017    174185    Aleksey81    134       

Как формируется GUID? 470

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

"Коллеги, есть идеи, как получить последнюю созданную характеристику? Реквизиты полностью идентичны(код, наименование, и т.п.)."(c) "Насколько я знаю, ссылка не обеспечивает последовательность, а только уникальность."(c) "Я сделал по Максимум(Ссылка). Но, чета, мне кажется, это неправильно."(c) "Слышал что в ГУИд содержится как раз время создания и по всей логике вещей сортировка по ссылке должна сортировать по моменту создания объекта"(c) Сколько раз вы слышали такие фразы? На удивление я не обнаружил информации по этой теме, пришлось разбираться самому...

16.06.2017    55440    kuzyara    56       

Работа с конвертацией данных 351

Статья Программист Нет файла v8 КД Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

Поскольку к конвертации обращаюсь время от времени и какие-то детали забываются, хочу выделить несколько пунктов, чтобы "было где посмотреть". Статья сделана преимущественно «для себя», так что просьба не судить строго. (Примечание читающим/комментирующим: код в примерах очень сильно сокращен.)

16.03.2017    64123    perepetulichka    26       

Библиотека стандартных подсистем (Механизм БСП) 74

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования БСП (Библиотека стандартных подсистем)

Конфигурации в 1С пишутся для пользователей и по их «правилам» (клиент всегда прав), поэтому в основном все конфигурации разные, но достаточно часто в них используются одни и те же объекты, которые незначительно отличаются друг от друга. Действительно, сложно представить конфигурацию, где не фигурировали бы такие сущности как номенклатура, контрагенты, пользователи, валюта. И некоторые задачи являются типичными: возможность базового разграничения прав, работа с электронной почтой, задачи пользователям и т.д. Но...!

03.03.2017    53363    V.Stavinsky    21       

Автоматизированная проверка конфигураций… и пара слов о стандартах разработки 273

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Тестирование и исправление

Предлагаю познакомиться с инструментом "Автоматизированная проверка конфигураций" и получить практику его применения

18.01.2017    45201    3    Vladimir Litvinenko    20       

Отладка подключаемых обработок 196

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

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

04.01.2017    45372    unichkin    77       

Использование программных перечислений, ч.1: строковые константы 144

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    30647    unichkin    45