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

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

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

Корректировка записей регистров операция проведение движения регистр регистратор документ подписка на события управляемое приложение ОбработкаПолученияПредставления ОбработкаПолученияФормы ОбработкаПроведения ПередЗаписью ПередУдалением УдалениеПроведения

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

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

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

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

- жалко терять звёздочки)

решил не удалять публикацию.

 
 Обновление от 12.12.2017

 1. Учтя замечания к публикации, принял решение добавить раздел содержащий примеры обработчиков подписок, событиями запуска которых являются "ОбработкаПолученияПредставления" и "ОбработкаПолученияФормы".

2. Изменены используемые имена "ПроводимыйДокумент"->"ИсходныйДокумент", "КорректировкаЗаписейРегистров" -> "КорректировкаРегистров", "СоответствиеДокументовСКорректировкойЗаписейРегистров" -> "СоответствиеДокументовСКорректировкойРегистров".

3. Обработка ошибок реализована с помощью использования актуальной версии БСП. Не думаю, что возникнут особые трудности, в случае необходимости, изменить данный код под собственные требования.

4. Добавлен комментарий во фрагменте текста по организации связи между документами.

5. Добавлен пример вызова отчета "ДвиженияДокумента" из формы исходного документа для современных конфигураций.

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

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

В конфигурации "Управление производственным предприятием 1.3" необходимо добавить документ "Инвентаризация тары". В шапке документа имеются сведения о поставщике и покупателе. В единственной табличной части находятся сведения о номенклатуре и ее количестве. При проведении документ делает расход по регистрам "Товары переданные" и "Товары полученные".

Вообще-то наш документ может быть типовым, но не "умеющим" проводится по некоторым регистрам как нам бы хотелось. Идея в общем случае проста: добавить несколько подписок на события, регистр связи объектов и описать необходимые движения.

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

Для управляемого приложения в рамках которого можно а) разрабатывать расширения с добавлением собственных реквизитов в типовые объекты и б) использовать обработку получения представления, вероятно, оптимальнее будет не использовать дополнительный регистр, а добавить в расширение документа "КорректировкаРегистров" реквизит "ИсходныйДокумент"(тип ДокументСсылка) и в дальнейшем его использовать в качестве связи. Тяжесть принятия решения о ее реализации, я оставляю разработчику. Однако, далее продолжу приводить код с упоминанием именно регистра сведений "СоответствиеДокументовСКорректировкойРегистров", т.к. его использование универсально.

1. Допустим "Инвентаризация тары" разрешено проводить. Добавим подписку  для события "ОбработкаПроведения". Я обычно указываю в качестве источника сразу же весь вид метаданных, связанных с событием,и уже дальше в обработчике описываю условия исполнения кода для того или иного конкретного типа. В данном случае процедура имеет следующий вид(здесь и далее фрагменты кода находятся под катом): 

 
 1.1 При проведении исходного документа
Процедура дд_ОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт

	Если Отказ ИЛИ Источник.ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

	Если ТипЗнч(Источник) = Тип("ДокументОбъект.дд_ИнвентаризацияТары") Тогда

		СсылкаНаОбъект = Источник.Ссылка; 

		//Создадим объект-заготовку на случай отсутствия имеющегося связанного документа-корректировки
		ОбъектДокумент = Документы.КорректировкаРегистров.СоздатьДокумент();

		//Попытаемся прочитать сведения о имеющейся связи
		НаборЗаписей = РегистрыСведений.дд_СоответствиеДокументовСКорректировкойРегистров.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.ИсходныйДокумент.Установить(СсылкаНаОбъект);
		НаборЗаписей.Прочитать();

		//При отсутствии связи мы ее установим при этом укажем ссылку на еще не записанный документ-корректировку
		Если НаборЗаписей.Количество() = 0 Тогда
			Движение = НаборЗаписей.Добавить();
			Движение.Период = ТекущаяДата();
			Движение.ИсходныйДокумент = СсылкаНаОбъект;

			//Многим известная функция получения ссылки даже если объект еще не был записан.
			//Ее текст приведен отдельно ниже
			СсылкаНаОбъект = ПолучитьСсылкуИзОбъекта(ОбъектДокумент);
			Движение.КорректировкаРегистров = СсылкаНаОбъект;
			НаборЗаписей.Записать();
		Иначе

			//Если соответствие уже есть, то просто получаем текущий документ для дальнейшего редактирования
			ОбъектДокумент = НаборЗаписей.Получить(0).КорректировкаРегистров.ПолучитьОбъект();
		КонецЕсли;

		//Основная магия начинается тут!
		ОбъектДокумент.Записать();

	КонецЕсли;

КонецПроцедуры
 
 1.2 Получение ссылки из объекта
Функция ПолучитьСсылкуИзОбъекта(Объект)

	Если Объект.ЭтоНовый() Тогда

		// Получаем возможно уже установленную ранее ссылку нового
		СсылкаНаОбъект = Объект.ПолучитьСсылкуНового();
		Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект) Тогда

			// Если ссылка нового пустая, то запрашиваем ее у менеджера и устанавливаем
			МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(СсылкаНаОбъект);
			СсылкаНаОбъект = МенеджерОбъекта.ПолучитьСсылку();
			Объект.УстановитьСсылкуНового(СсылкаНаОбъект);

		КонецЕсли;
	Иначе

		СсылкаНаОбъект = Объект.Ссылка;

	КонецЕсли;

	Возврат СсылкаНаОбъект;

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

2. Теперь перейдем к документу "Корректировка регистров". Нам известно, что ему запрещено проводится, т.е. движения с ним связанные будут записаны в базу при записи самого документа. Для обеспечения каскадной связи с "ИнвентариазцияТары" добавим подписку, где источником будет ДокументОбъект и событие "ПередЗаписью". В обработчике этой подписки мы будем управлять движениями нашей корректировки.

 
 2.1 Перед записью документа регистратора
Процедура дд_ПередЗаписьюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

	Перем Ошибки;

	Если Отказ ИЛИ Источник.ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

	Если ТипЗнч(Источник) = Тип("ДокументОбъект.КорректировкаРегистров") Тогда

		//Ранее уже описанная функция получения ссылки
		СсылкаНаОбъект = ПолучитьСсылкуИзОбъекта(Источник);

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

		//Проверим не установил ли пользователь пометку удаления
		Если Источник.ПометкаУдаления И СвязанныйДокумент.Проведен Тогда

			//В типовой процедуре модуля объекта содержится код отменяющий активность движений при ПометкаУдаления = Истина
			//Приведенная процедура возвращает активность движений. Ее код будет приведен ниже
			УстановитьАктивностьДвижений(СсылкаНаОбъект,Истина);
			ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,,"Удаление не может быть произведено, тк имеется проведенный, связанный документ " + СокрЛП(СвязанныйДокумент.ИсходныйДокумент) + ".",);
			ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ);

		КонецЕсли;

		//Если найден связанный документ и он проведен
		Если НЕ Источник.ПометкаУдаления И СвязанныйДокумент.Проведен Тогда

			Для каждого Набор Из Источник.Движения Цикл
				Если Набор.Количество() = 0 Тогда
					Продолжить;
				КонецЕсли;
				Набор.Очистить();
			КонецЦикла;

			КорректировкаРегистров = Метаданные.Документы.Найти("КорректировкаРегистров");
			Если КорректировкаРегистров <> Неопределено Тогда
				Источник["ТаблицаРегистров"].Очистить();
			Иначе
				Источник["ТаблицаРегистровБухгалтерии"].Очистить();
				Источник["ТаблицаРегистровНакопления"].Очистить();
				Источник["ТаблицаРегистровСведений"].Очистить();
				Источник["ЗаполнениеДвижений"].Очистить();
				Источник["ИспользоватьЗаполнениеДвижений"] = Ложь;				
			КонецЕсли;

			Источник.ПометкаУдаления = Ложь;
			Источник.Дата = СвязанныйДокумент.ИсходныйДокумент.Дата;

			//Делаем пометку для любопытных пользователей
			Источник.Комментарий = "Создана автоматически для " + СокрЛП(СвязанныйДокумент.ИсходныйДокумент) + ". Не пытайтесь изменить эту корректировку из ее формы.";
			Источник.Ответственный = "";

			//ТУТ УКАЗЫВАЕТСЯ КОД ФОРМИРОВАНИЯ ДВИЖЕНИЙ
			//приведу следующий не хитрый фрагмент в качестве примера
			//и заранее закомментирую на всякий случай
			//Attention! Указанные регистры существуют только в УПП!
			#Область ФормированиеДвижений
			//НаборЗаписейТоварыПринятые = РегистрыНакопления. ТоварыПринятые. СоздатьНаборЗаписей() ;
			//НаборЗаписей. Отбор. Регистратор. Установить(СсылкаНаОбъект) ;
			//НаборЗаписейТоварыПереданные = РегистрыНакопления. ТоварыПереданные. СоздатьНаборЗаписей() ;
			//НаборЗаписейТоварыПереданные. Отбор. Регистратор. Установить(СсылкаНаОбъект) ;
			//Для Каждого ТекСтрока Из Тара Цикл
			// Движение = НаборЗаписейТоварыПринятые. ДобавитьРасход() ;
			// Движение. Период = СсылкаНаОбъект. Дата;
			// Движение. Номенклатура = ТекСтрока. Номенклатура;
			// Движение. Характеристика = ТекСтрока. ХарактеристикаНоменклатуры;
			// Движение. Количество = ТекСтрока. Количество;
			// Движение = НаборЗаписейТоварыПереданные. ДобавитьРасход() ;
			// Движение. Период = СсылкаНаОбъект. Дата;
			// Движение. Номенклатура = ТекСтрока. Номенклатура;
			// Движение. Характеристика = ТекСтрока. ХарактеристикаНоменклатуры;
			// Движение. Количество = ТекСтрока. Количество;
			//КонецЦикла;
			//НаборЗаписейТоварыПринятые. Записать() ;
			//НаборЗаписейТоварыПереданные. Записать() ;
			#КонецОбласти
			//ТУТ УКАЗЫВАЕТСЯ КОД ФОРМИРОВАНИЯ ДВИЖЕНИЙ
		КонецЕсли;
	КонецЕсли;

КонецПроцедуры
 
 2.2 Функция получения связанных с регистратором исходного документа
Функция ПолучитьСвязанныйСКорректировкойДокумент(КорректировкаРегистров)Экспорт

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("КорректировкаРегистров", КорректировкаРегистров);
	Запрос.Текст =
	"ВЫБРАТЬ ПЕРВЫЕ 1
	| дд_СоответствиеДокументовСКорректировкойРегистров.ИсходныйДокумент КАК ИсходныйДокумент,
	| дд_СоответствиеДокументовСКорректировкойРегистров.ИсходныйДокумент.Проведен КАК Проведен
	|ИЗ
	| РегистрСведений.дд_СоответствиеДокументовСКорректировкойРегистров КАК дд_СоответствиеДокументовСКорректировкойРегистров
	|ГДЕ
	| дд_СоответствиеДокументовСКорректировкойРегистров.КорректировкаРегистров = &КорректировкаРегистров";
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		Возврат Неопределено
	КонецЕсли;

	Выборка = Результат.Выбрать();
	Выборка.Следующий();

	Возврат Новый Структура("ИсходныйДокумент,Проведен",Выборка.ИсходныйДокумент,Выборка.Проведен);

КонецФункции
 
 2.3 Установка активности движений регистратора
Процедура УстановитьАктивностьДвижений(Источник,ФлагАктивности) Экспорт

	Движения = Источник.Движения;
	Для Каждого Движение Из Движения Цикл
		Движение.Прочитать();	
		Движение.УстановитьАктивность(ФлагАктивности);	
	КонецЦикла;

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

Этого кода достаточно для следующих ситуаций:

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

 2. "защита" регистратора "Корректировка регистров" от перезаписи, например установки пометки удаления.

В итоге, при проведении "ИнвентариазцияТары" будет создан документ, выглядящий достаточно мало заполненным(но более и не требуется), следующего вида:

Потребуется реализовать обработки для:

 3. "защита" регистратора "Корректировка регистров" от удаления на случай, если кому то придет в голову "снести"  наш документ.

 4. распроведение исходного документа

 

Осталось совсем немного.

3. Добавим подписку для события "ПередУдалением". Тут все просто:

 
 3.1 Перед удалением регистратора
Процедура дд_ПередУдалениемДокумента(Источник, Отказ) Экспорт

	Перем Ошибки;

	Если Отказ ИЛИ Источник.ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

	Если ТипЗнч(Источник) = Тип("ДокументОбъект.КорректировкаРегистров") Тогда

		СвязанныйДокумент = ПолучитьСвязанныйСКорректировкойДокумент(Источник.Ссылка);

		Если СвязанныйДокумент <> Неопределено И
			СвязанныйДокумент.Проведен Тогда		
			ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,,"Удаление не может быть произведено, тк имеется проведенный, связанный документ " + СокрЛП(СвязанныйДокумент.ИсходныйДокумент) + ".",);
			ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ);
		КонецЕсли;

	КонецЕсли;

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

4. Добавим подписку для события "ОбработкаУдаленияПроведения", где источником будет все тот же "ДокументОбъект" , а в обработчике следующий код:

 
 4.1 Отмена проведения исходного документа
Процедура дд_УдалениеПроведенияОбработка(Источник, Отказ) Экспорт

	Перем Ошибки;

	Если Отказ ИЛИ Источник.ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

	Если ТипЗнч(Источник) = Тип("ДокументОбъект.дд_ИнвентаризацияТары") Тогда

		ИсточникСсылка = Источник.Ссылка;

		НаборЗаписей = РегистрыСведений.дд_СоответствиеДокументовСКорректировкойРегистров.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.ИсходныйДокумент.Установить(ИсточникСсылка);
		НаборЗаписей.Прочитать();

		Если НаборЗаписей.Количество()> 0 Тогда

			//Удаляем связь
			Движение = НаборЗаписей.Получить(0);
			ОбъектКорректировка = Движение.КорректировкаРегистров.ПолучитьОбъект();
			Период = Движение.Период;
			НаборЗаписей.Очистить();
			НаборЗаписей.Записать();

			//Пытаемся удалить связь. Если по каким то причинам нам это не удается, тогда
			//восстанавливаем связь и вызываем отказ распроведения документа
			Попытка
				ОбъектКорректировка.Удалить();
			Исключение

				//Восстановим соответствие
				Движение = НаборЗаписей.Добавить();
				Движение.Период = Период;
				Движение.ИсходныйДокумент = ИсточникСсылка;
				Движение.КорректировкаРегистров = ОбъектКорректировка.Ссылка;
				НаборЗаписей.Записать();
				
				ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,,"Не удалось удалить проведение документа по причине: " + Символы.ПС + ОписаниеОшибки(),);
				ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ);

			КонецПопытки;
		КонецЕсли;
	КонецЕсли;

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

Не следует забывать давать пользователям требуемые права или устанавливать привилегированный режим. 

Всё! Таким образом реализованный механизм формирования движений вписывается в типовой функционал большинства конфигураций. Для устаревающих программных продуктов надо лишь заменить "КорректировкаРегистров" на "КорректировкаЗаписейРегистров" и поправить фрагменты связанные с выводом сообщений об ошибках.

 

 
 P.S Показать движения регистратора из формы исходного документа

 Я не забыл о пользователях, которые слышали про регистры, движения и ими интересуются. И вывел для них кнопочки в нужных местах с обработчиком:

 
 Обычное приложение
Процедура ДействияФормыДвиженияДокументаПоРегистрам(Кнопка)
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ПроводимыйДокумент", Ссылка);
	Запрос.Текст = 
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	дд_СоответствиеДокументовСКорректировкойЗаписейРегистров.КорректировкаЗаписейРегистров
	|ИЗ
	|	РегистрСведений.дд_СоответствиеДокументовСКорректировкойЗаписейРегистров КАК дд_СоответствиеДокументовСКорректировкойЗаписейРегистров
    |ГДЕ
    |   ПроводимыйДокумент = &ПроводимыйДокумент)";
	
	Результат = Запрос.Выполнить();

    Пока Результат.Пустой() Цикл
		РаботаСДиалогами.НапечататьДвиженияДокумента(Ссылка);	
	КонецЦикла;
	
	Выборка = Результат.Выбрать();
	Выборка.Следующий();
	
	РаботаСДиалогами.НапечататьДвиженияДокумента(Выборка.КорректировкаЗаписейРегистров);

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

&НаКлиенте
Процедура ДвиженияДокумента(Команда)
	
	ОткрытьФорму("Отчет.ДвиженияДокумента.Форма", 
	Новый Структура("Документ", ПолучитьСсылкуНаДействительныйРегистратор(Элементы.Список.ТекущаяСтрока)),
	ЭтаФорма,
	ЭтаФорма.УникальныйИдентификатор,
	ЭтаФорма.Окно);

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

 

 

 
 P.S.S Подписки на события "ОбработкаПолученияПредставления" и "ОбработкаПолученияФормы"

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

Процедура дд_ОбработкаПолученияПредставленияДокумента(Источник, Данные, Представление, СтандартнаяОбработка) Экспорт

	Если ТипЗнч(Источник) = Тип("ДокументМенеджер.КорректировкаРегистров") Тогда
		//На первый взгляд, можно просто обратиться к существующему регистру 
		//и получить строковое представление исходного документа.
 		//Однако,загвостка в том, что система достаточно часто может получать
 		//представление документа и в таком случае, иметь скрытый запрос будет 
 		//не самом лучшим решением с точки зрения производительности.
 		//Ранее я отмечал, что для управляемого приложения, вероятно, оптимальнее 
 		//будет использовать расширения с реквизитом для документа "КорректировкаРегистров".
 		//Именно тут бы он нам неплохо помог. В свою очередь, в качестве примера
 		// я приведу код как составляется представление документа из его комментария, которое ранее мы заполнили.
		
		КомментарийДокумента = Данные.Ссылка.Комментарий;
		
		ПерваяЧастьКомментария = СтрНайти(КомментарийДокумента,"Создана автоматически для ");
		ВтораяЧастьКомментария = СтрНайти(КомментарийДокумента,". Не пытайтесь изменить эту корректировку из ее формы.");
		
		Если ПерваяЧастьКомментария > 0 и ВтораяЧастьКомментария > 0 Тогда
			
			ДлиннаКомментария = СтрДлина(КомментарийДокумента);
			ДлинаПервойЧастиКомментария = СтрДлина("Создана автоматически для ");
			ДлинаВторойЧастиКомментария = СтрДлина(". Не пытайтесь изменить эту корректировку из ее формы.");

			Представление = Прав(Лев(КомментарийДокумента,ДлиннаКомментария-ДлинаВторойЧастиКомментария),ВтораяЧастьКомментария-ДлинаПервойЧастиКомментария);

			СтандартнаяОбработка = Ложь;
			
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры
Процедура дд_ОбработкаПолученияФормыДокумента(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт
	
	Если ТипЗнч(Источник) = Тип("ДокументМенеджер.КорректировкаРегистров") Тогда

		Если ВидФормы = "ФормаОбъекта" Тогда

			Если  НЕ Параметры.Ключ.Пустая() Тогда

				НаборЗаписей = РегистрыСведений.дд_СоответствиеДокументовСКорректировкойРегистров.СоздатьНаборЗаписей();
				НаборЗаписей.Отбор.КорректировкаРегистров.Установить(Параметры.Ключ);
				НаборЗаписей.Прочитать();
				
				Если НаборЗаписей.Количество() > 0 Тогда

					Параметры.Ключ = НаборЗаписей.Получить(0).ИсходныйДокумент;
					ИмяТипаДокумента = СокрЛП(ТипЗнч(Параметры.Ключ));

					ВыбраннаяФорма = "Документ." + ИмяТипаДокумента + ".ФормаОбъекта";

					СтандартнаяОбработка = Ложь;

				КонецЕсли; 
				
			КонецЕсли; 

		КонецЕсли;

	КонецЕсли;

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

 

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

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. acsent 1148 05.12.17 18:19 Сейчас в теме
отчеты с разворотом до регистратора будут совсем не удобны
2. itriot11 75 05.12.17 18:34 Сейчас в теме
(1) ну это же можно решить сделав небольшой допил необходимых отчетов.
6. nomadon 382 06.12.17 14:16 Сейчас в теме
(1) с помощью (4) решается) делается обработка представления, и подменяется открываемая форма корректировки
7. itriot11 75 06.12.17 15:38 Сейчас в теме
(6) увы, такие подписки будут действовать только для конфигураций без поддержи совместимости с 8.2. Однако, я думаю, что включу в публикацию примеры реализации решения этих вопросов для баз на 8.3 .
3. aka Любитель XML 05.12.17 18:39 Сейчас в теме
В целом не плохо, плюсанул, возможно прикручу где-нибудь
4. nomadon 382 06.12.17 07:54 Сейчас в теме
А где упоминание об обработке представления корркктировки?
5. itriot11 75 06.12.17 11:23 Сейчас в теме
(4) Добавлю чуть позже, спасибо.
8. Bazil 476 06.12.17 16:05 Сейчас в теме
Решение оригинальное. Но мне кажется, задача "не затереть тип регистратора в регистре" не такая сложная. Простые тесты, памятка для обновляльщика легко её решают. Решая несложную задачу, вы порождаете большее количество сложностей. Вроде как облегчилось обновление, но для работы расшифровок по регистраторам надо будет переписать кучу типовых отчетов, а это приводит наоборот, к усложнению (я в курсе про переопределение представления, но оно возможно только на 8.3 без режима совместимости с 8.2). А еще, например, есть обработки, которые дописывают движения в существующие документы, типа восстановление расчетов, и их тоже придется пилить.
sashocq; kote; Plotks2017; Mouros; roofless; Tavalik; Сурикат; +7 Ответить
9. itriot11 75 06.12.17 17:07 Сейчас в теме
(8)
Вопрос сложности имеет место быть. Каким образом я для себя принял решение в рамках задачи приведенной в примере:
- уже имею готовый алгоритм обхода модификации регистра
- не горю желанием помнить лишний раз про типы регистраторов
- меня тревожит вероятность допустить ошибку при обновлении(не смотря на тесты и бэкапы)
- пользователи допускают в отчетах видеть в качестве регистраторов таких движений документ "Корректировка записей регистров".
- пользователей желающих видеть в качестве представления исходный документ не нашлось
- специфические обработки не используется
Вангую, если бы возникли пользователи захотевшие увидеть исходный документ, то речь шла об 1-2 формах отчетов/списков, а не о куче, и считаю, что это для меня было бы не трудно реализовать.
Таким образом, взвесив аргументы, принял решение, что описанным методом приведенную мной задачу решить не сложно. При этом, конечно, не отрицаю, что данный вариант имеет свои минусы и в определенных ситуациях они могут быть крайне весомыми.
10. u_n_k_n_o_w_n 39 07.12.17 11:21 Сейчас в теме
(9) , тесты как раз и решают Вашу головную боль. В приведенном примере как раз "ярко" описывается пример, когда "вроде бы" не надо даже тестировать конфигурацию.
18. kote 511 01.02.18 20:20 Сейчас в теме
(9) Напишите обработку, которая проверяет метаданные конфигурации и возьмите за правило после обновления её запускать.
Она должна проверять наличие в нужных реквизитах нужных типов и сигнализировать об отклонениях.
Пишется один раз и далее не дает забыть об изменениях.
19. itriot11 75 01.02.18 21:00 Сейчас в теме
(18)
В обработке хранить типы и не забывать их дописывать, если поставщик что-то изменит? Или каким-то образом обработкой открывать(честно не интересовался ни разу как это делать) конфигурацию поставщика, считая ее эталоном, и сравнивать с конфигурацией ИБ?

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

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

Пару месяцев назад столкнулся с ситуацией, когда один администратор решил подзаработать и выполнить обновление собственными силами. В итоге не досчитались пары реквизитов через несколько дней. Уверен,что хватиться исчезнувшие записи движений могут спустя еще более долгое время. В свою очередь, в отказоустойчивости приведенного мною механизма я более уверен, чем в ручках эникея решившего вечерком под пивко обновить эту "богомерзкую бухню". К тому же пользователи КЗ(КЗР) не против такого.
20. kote 511 02.02.18 10:32 Сейчас в теме
(19)
Когда Вы изменяете конфигурацию - вы, как правило, в эти реквизиты добавляете свои типы (и, возможно, убираете/подменяте конкретные типы поставщика)

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

Ведь Вас будут интересовать только те изменения, которые внесли Вы - вот только их и проверяйте.
Это хорошая практика.
21. itriot11 75 02.02.18 10:56 Сейчас в теме
(20) а, обработка контролит только наличие собственных типов. Такое реализовать можно и достаточно легко. Конечно, еще одна проверка позволяет снизить вероятность допущения ошибки. Но обработка запуститься уже после случившегося. Ок, если накосячил специалист обновляющий базу, то пусть берет бэкап и делает все заново, без ошибок. Однако, на сколько это решение подходит к контексту приведенному мной в предыдущем сообщении? Описанный мною подход вообще полностью исключает возможность потерять данные.
22. kote 511 02.02.18 20:07 Сейчас в теме
А разве кто-то обновляет доработанные конфигурации на рабочей базе??

Это очень глупо. Правильно это делается так: выгрузите cf, загоните в пустую базу, обновите, проверьте (той самой обработкой), потом объедините рабочую с cf из обновленной конфигурации..
23. itriot11 75 03.02.18 01:22 Сейчас в теме
(22)Вы упрямо не обращаете внимание на написанное мною ранее) Всего хорошего.
15. lunjio 62 14.12.17 12:46 Сейчас в теме
По поводу расшифровки, и с учетом того, что это будет работать на 8.3, можно при получении представления по корректировке записей регистров выдавать представление связанного документа, а при открытии форму, открывать форму связанного документа, а от открытия формы корректировки отказаться, как вариант.
(8)
16. itriot11 75 14.12.17 16:21 Сейчас в теме
(15)
с учетом того, что это будет работать на 8.3


Кажется, именно об этом я написал в последнем пункте в кате P.S.S.)
На всякий случай - при нажатии он раскроется и покажет текст с примером кода.
28. strange2007 142 14.08.18 09:14 Сейчас в теме
(8) Всегда прихожу в конторы, где уже никто ничего не может обновить без потерь. Уверяю, все эти доработки состоят из вот таких вот мелких: "ну а чо там обновлять то? Одна галочка же". А по факту хоть засравнивайся, всё равно всё разваливается нафиг. Вот и переделываю на такие же механизмы, как указаны у автора. Уже очень много лет
itriot11; +1 Ответить
11. u_n_k_n_o_w_n 39 07.12.17 11:22 Сейчас в теме
Я тоже иногда пользуюсь таким механизмом, но совершенно для других целей.
12. itriot11 75 07.12.17 12:27 Сейчас в теме
(11) расскажите свой опыт и цели?
17. u_n_k_n_o_w_n 39 18.12.17 09:07 Сейчас в теме
(11), не хотелось править движения документа Сторно.
13. ILM 238 13.12.17 09:55 Сейчас в теме
А зачем у вас "Инвентаризация тары" делает движения? Инвентаризация - это фиксация наличия/отсутствия ТМЦ на заданный момент времени.
14. itriot11 75 13.12.17 10:25 Сейчас в теме
(13) я передам ваш комментарий методистам и консультантам предприятия.
24. sashocq 191 08.02.18 18:36 Сейчас в теме
Собственно, непонятно, зачем так делать.

В любом случае при обновлении вы всё будете проверять. В любом случае тесты вам понадобятся, т. к. они исключат кроме описанной ошибки удаления регистратора из регистра и многие другие:
- добавление/изменение типа какого-то реквизита
- добавление/удаление реквизита объекта
- изменение прав ролей
и ещё кучу всего.

Другими словами, от ошибок при обновлении это никак не спасёт, но сложности прибавит существенно.
25. itriot11 75 08.02.18 19:31 Сейчас в теме
(24)
от ошибок при обновлении это никак не спасёт, но сложности прибавит существенно.


расскажите об ошибках при обновлении, когда будет применен описанный мною механизм?
26. sashocq 191 09.02.18 11:03 Сейчас в теме
(25) Я уже написал в (24) :

Если в реквизите с множественным типом (например, ДокументОснование) вы добавили свой тип добавленного документа, потом при обновлении поставщик меняет тип реквизита (добавляет свой), то при обновлении тип реквизита может замениться, ваш добавленный слетит и все такие значения в базе превратятся в Неопределено (реальный пример из рабочей базы).

Похожая ситуация может быть с составом плана обмена. Вообще с любым объектом метаданных, ссылающимся на коллекцию других метаданных.
27. itriot11 75 09.02.18 11:47 Сейчас в теме
(26) А как это связано с тем о чем я писал в публикации?) Вы ее читали? Я не меняю типы данных, как раз об избежании этого пишу. Вообще исключаю проблему описанную вами.
29. strange2007 142 14.08.18 09:23 Сейчас в теме
Автор, не слушайте противников таких методов. Они просто ещё не прочувствовали вкус изолированных механизмов. Особенно когда вместо недели на обновление уходит 5 часов (скачать, обновить 3 базы, провести поверхностное тестирование).
Вам просто совет из личного опыта, как делаю обновляемые конфигурации.
1. Всё в отдельной подсистеме. Всё только на подписках.
2. Дополнительные отчёты и обработки.
3. Методологическая фигня.
Есть ещё проблема создания реквизитов на форме, но для УПП 1.3 смог всё решить при помощи этих 3-х пунктов
Всё. Ни одного предприятия ещё не находил, где бы пришлось менять конфигурацию.
Удачи, автор, в этой прикольной тематике.
30. itriot11 75 14.08.18 11:22 Сейчас в теме
(29) со вторым пунктом ай-яй как не согласен. Категорически стараюсь не использовать внешние отчеты и обработки. Есть серьезная вероятность испортить их работоспособность, если модифицировать объекты или фрагменты кода конфигурации связанные с ними. Ни система, ни разработчик просто не увидят, что изменения затронут внешние объекты. Вероятность порчи внешних отчетов и обработок возрастает, если они не зарегистрированы в справочнике, а находятся в каталогах(рабочих столах) пользователей. А если еще попасть в момент смены разработчика, допустим прийти на новое место, где некому передать дела? Можно сильно напартачить. А то что внешние отчеты или обработки будут включены в состав конфигурации - так это, на мой взгляд, мелочь, тут сложно ошибиться.
Отдельное спасибо за поддержку)
31. strange2007 142 14.08.18 11:53 Сейчас в теме
(30) Недавно делал механизм крутейших скидок для УТ10. Один справочник с настройками (в отдельной подсистеме) и одна внешняя обработка табличных частей для документов по продаже. Даже если всю конфигурацию переменяют, то эта связка окажется не тронутой.
В описанном механизме реализованы варианты всяких скидок по самым невообразимым условиям. Вместо меня за УТху сел другой человек. Через короткое время начал пользоваться этим инструментом и теперь его ни на что не хочет менять.
Единственное с чем сталкиваемся, так это когда обновляем платформу. Надо все отчёты и обработки переоткрывать в конфигураторе. Но это по правде мелочи по сравнению с необновляемыми конфигурациями
32. the1 535 11.03.19 14:43 Сейчас в теме
(31) Если уж в конфигурацию добавлен свой СПРАВОЧНИК, то не вижу никакого смысла прятать еще что-то во внешние обработки, сложность обновления от этого не изменится ни на йоту. Как вариант, добавили бы произвольную форму этого справочника и творили бы там что угодно, как в обработке.
33. strange2007 142 12.03.19 07:54 Сейчас в теме
(32) точно так и есть, за исключением одного но (!!!!!) - каким образом поместить мордочку на кнопку ТЧ? Поэтому я принял решение использовать механизмы БСП, т.е. внешняя обработка.
34. the1 535 12.03.19 10:53 Сейчас в теме
Оставьте свое сообщение

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

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

Пакет из 3-х курсов по 1С-программированию. Основная цель - сформировать у слушателей практические навыки, связанные с реализацией задач обмена для прикладных решений, работающих на платформе “1С:Предприятие”, а также с разработкой прикладных решений, предназначенных для автоматизации расчета заработной платы и задач бухгалтерского учета.

15300 руб.

22.04.2020    2912    23    2    

Программная работа с настройками СКД

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

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    14271    0    ids79    26    

[СКД] Программное создание схемы компоновки данных

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

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    14987    0    John_d    22    

Последовательности событий. Шпаргалка

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    10232    0    kuzyara    33    

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

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

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

10.12.2016    33944    0    unichkin    45    

30 задач. Странных и не очень

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

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    12538    0    YPermitin    72    

Таблица значений. Нюансы

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

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    24768    0    Yashazz    44    

[Шпаргалка] Программное создание элементов формы

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

Программное создание практически всех популярных элементов формы.

06.09.2019    33954    0    rpgshnik    59    

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

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

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

15.10.2018    25885    0    tormozit    100    

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

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

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

05.09.2019    36145    0    ids79    52    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    21121    0    YPermitin    24    

Три костыля. Сказ про фокусы в коде

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

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

03.09.2019    21579    0    YPermitin    80    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

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

20.09.2012    73424    0    tormozit    129    

Отслеживание выполнения фонового задания

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

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

17.08.2019    25270    0    ids79    16    

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

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

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

08.08.2019    54336    0    ids79    36    

Фоновое выполнение кода в 1С - это просто

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

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    25905    0    avalakh    21    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

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

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

11.07.2007    44554    0    tormozit    38    

Разбираемся с параметрами редактирования СКД

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

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    16679    0    json    12    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

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

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    41219    0    ids79    11    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    27987    0    ids79    27    

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

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

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

10.09.2017    40261    0    tormozit    72    

Регистры сведений. За кулисами

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

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    21132    0    YPermitin    13    

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

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

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

04.07.2019    16343    0    SeiOkami    50    

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

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

Варианты отчетов, работа с настройками вариантов: структура группировок, поля отчета, отборы, сортировка, условное оформление, другие настройки, настройки отображения диаграмм.

02.07.2019    32940    0    ids79    10    

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

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

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

25.04.2019    13983    0    m-rv    2    

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

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

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

25.06.2019    41564    0    ids79    17    

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

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

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

11.06.2019    21186    0    dmurk    144    

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

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

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

16.05.2019    34907    0    YPermitin    30    

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

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

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

16.04.2019    17565    0    m-rv    17    

Выполнение внешней обработки в фоновом задании

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

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    23873    0    Eret1k    23    

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

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

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

07.04.2019    28842    0    ellavs    126    

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

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

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

28.03.2019    22787    0    ellavs    86    

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

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

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

01.06.2018    27247    0    m-rv    21    

Трюки с внешними источниками данных

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

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    25926    0    YPermitin    53    

Ошибки при работе с хранилищем конфигурации и способы их решения

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

В статье собраны наиболее распространенные ошибки при работе с хранилищем конфигурации и способы их обхода и решения.

01.03.2019    30290    0    Смешной 1С    27    

Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев

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

Формируем отчетность о результатах выполнения сценариев. Автоматизируем запуск.

26.02.2019    18013    0    Vladimir Litvinenko    27    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    70572    0    Serginio    108    

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

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

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

03.02.2019    30834    0    ids79    9    

EnterpriseData – часть 2. Процесс выгрузки данных

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

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    22530    0    ids79    31    

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

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

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

10.11.2018    30262    0    ids79    40    

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

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

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

14.12.2018    34553    0    ids79    72    

EnterpriseData - пример доработки правил конвертации без использования КД 3.0 в расширении конфигурации

Практика программирования Обмен через XML v8 v8::УФ БП3.0 УТ11 Россия Бесплатно (free)

В статье подробно описан реальный пример доработки обмена данными через EnterpriseData (универсальный формат обмена) между конфигурациями УТ 11.4 и Бухгалтерия 3.0

16.11.2018    31283    0    ids79    32    

Программное заполнение пользовательских параметров и отборов СКД

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

Публикация представляет из себя краткие примеры того, как можно заполнять параметры СКД программно так, чтобы все параметры и отборы были доступны в быстрых настройках и в обычных (типовых) настройках параметров и отборов СКД.

13.11.2018    36683    0    Unk92    19    

Тестер: частые вопросы Промо

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

Ошибкам бой - тесты норма жизни!

25.07.2018    26097    0    grumagargler    26    

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

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

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

03.09.2018    23578    0    nikita0832    42    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

Математика и алгоритмы Практика программирования v8 Россия Бесплатно (free)

У многих начинающих 1С программистов часто возникают вопросы про клиент-серверное взаимодействие в 1С и чтобы разобраться в непростых механизмах платформы, необходимо понять, что же такое контекст, для чего предназначены директивы компиляции, что представляют собой контекстные/внеконтекстные вызовы и как наиболее оптимально описывать прикладные задачи в модулях управляемых форм.

23.08.2018    34502    0    Rain88    46    

Работаем с дополнительными реквизитами на форме

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

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

15.07.2018    28865    0    papche    37    

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

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

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

04.09.2017    49851    0    m-rv    60    

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

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

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

25.06.2018    25940    0    olegtymko    47    

Введение в механизм представлений в ЗУП ред. 3

Практика программирования v8 v8::СПР ЗУП3.x Бесплатно (free)

В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое "Представления".

04.06.2018    33735    0    xrrg    82    

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

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

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

23.05.2018    22777    0    slozhenikin_com    20    

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

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

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

13.05.2018    16895    0    Rustig    9