Доработка проведения в ERP 2.5. (Регистры накопления, Регистры сведений)

10.01.21

Разработка - Механизмы типовых конфигураций

Покажу точки входа для доработки "типового" проведения документов в ERP для регистров оперативного учета. Рассмотрим три основные ситуации: нужно изменить имеющееся проведение документа; нужно сделать записи в существующие регистры; нужно с нуля описать алгоритм проведения в добавленный регистр. Пример реализован на 1С:ERP Управление предприятием 2 (2.5.4.120)

1. Необходимо изменить имеющееся проведение документа.

Рассмотрим на примере документа "Заказ клиента". Допустим в документе изменен алгоритм определения Назначения: в шапку документа добавлен дополнительный реквизит "допНазначение" с типом СправочникСсылка.Назначения. Если этот реквизит заполнен, то в движение регистра накопления "Обеспечение заказов" должно подставляться его значение, иначе должен выполняться типовой механизм документа.

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

 
 Модуль объекта документа ЗаказКлиента

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

 
 Модуль менеджера документа ЗаказКлиента

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

Функция "ТекстЗапросаТаблицаОбеспечениеЗаказов" возвращает текст запроса, результат которого будет выгружен в таблицу движений по регистру накопления "Обеспечение заказов". Поэтому важно при внесении изменений в этот запрос не изменять синонимы полей, иначе они не попадут в движения.
Добавим условие в текст запроса:

 
 Модуль менеджера документа ЗаказКлиента

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

 
 Модуль менеджера документа ЗаказКлиента

На этом доработка по первому пункту статьи окончена.

2. Необходимо сделать записи в существующие или новые регистры.

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

В "ERP Управление предприятием 2" учет драгоценных металлов реализован довольно скудно: их содержание в номенклатуре указывается непосредственно в табличной части самой номенклатуры. И, если с разными партиями нам приходит товар с разным содержанием драгметаллов, то отразить такую ситуацию в системе мы не сможем. Я буду показывать не полный бизнес процесс, а урезанный, которого должно хватить для демонстрации. Добавим в конфигурацию новый документ "ДвижениеДрагметаллов" с двумя табличными частями:

 
 Структура метаданных табличных частей

 И два регистра накопления:

 
 Структура метаданных регистров

Теперь рассмотрим цепочку проведения нового документа.

В ERP проведение начинается не с процедуры ОбработкаПроведения, а с процедур ПередЗаписью и ПриЗаписи.

 
 Модуль объекта документа ДвижениеДрагметаллов

В процедуре ПередЗаписью "ДополнительныеСвойства" документа заполняются служебными значениями

 
 Общий модуль ПроведениеДокументов

В процедуре ПриЗаписи реализован механизм записи движений по независимым регистрам сведений, если документ записывается не в режиме "Проведение". Например, запись в регистр сведений "РеестрДокументов" происходит таким образом.

 
 Общий модуль ПроведениеДокументов

Давайте разберемся что такое Учетные механизмы и как их использовать.

Все регистры конфигурации (РС, РН, РР, РБ) сгруппированы в некие смысловые области - Учетные механизмы - в которых описывается по каким регистрам необходимо произвести движения, контроль движений, а также отложенные движения. Один учетный механизм может использоваться для нескольких документов. В функции "УчетныеМеханизмыКонфигурации" общего модуля "ПроведениеДокументов" хранятся все возможные механизмы конфигурации, а затем в модуле менеджера документа указывается его принадлежность к конкретным учетным механизмам.

Таким образом, чтобы выполнить запись в добавленные регистры, сперва необходимо добавить новый Учетный механизм

 
 Общий модуль ПроведениеДокументов

Добавим новый общий модуль "УчетДрагметаллов"

 
 Общий модуль УчетДрагметаллов

В функции "ПараметрыДляПроведенияДокумента" вызывается функция-конструктор "ПараметрыУчетногоМеханизма", с помощью которой определяется взаимодействие данного механизма с регистрами конфигурации.

 
 Общий модуль ПроведениеДокументов

(КонтрольныеРегистрыЗаданий - это регистры, по которым необходимо произвести отложенные движения)

(Если возвести флаг параметра "Производный" в Истина, то в модуле механизма обязательно необходимо описать процедуры "ПередЗаписьюДвиженийДокумента" и "ПослеЗаписиДвиженийДокумента". Приведу пример из учетного механизма "ОперативныйУчетТоваровОрганизаций")

 
 Общий модуль ЗапасыСервер (ОперативныйУчетТоваровОрганизаций)

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

 
 Общий модуль ПроведениеДокументов

 Контроль движений реализован следующий образом:

Для всех регистров, которые указаны в параметре "КонтрольныеРегистрыИзменений", в модуле набора записей регистра проверяется изменение движений ДО и ПОСЛЕ записи, чтобы не проводить "лишний" контроль.

 
 Модуль набора записей регистра накопления ОстаткиДрагметаллов

Если это первое проведение документа или данные для проведения изменились, то контроль осуществляется в модуле механизма в процедуре "ИнициализироватьДанныеКонтроляИзменений". А возведения флага отказа от проведения и сообщения пользователю описываются в модуле механизма в процедуре "СообщитьОРезультатахКонтроляИзменений".

Движение по независимым регистрам сведений рассмотрим на примере Реестра документов.

В конфигурации уже определен соответствующий Учетный механизм:

 
 Общий модуль ПроведениеДокументов
 
 Модуль менеджера регистра сведений РеестрДокументов

(Для отражения независимых регистров сведений используется экспортная процедура "ЗаписатьДанные", в отличии от зависимых регистров, где используется "ОтразитьДвижения")

Теперь, когда мы подготовили новый учетный механизм, необходимо описать его принадлежность к документу ДвижениеДрагметаллов. Дополнительно добавим движение нового документа в РС "РеестрДокументов".

 
 Модуль менеджера документа ДвижениеДрагметаллов

Также опишем получение данных для движений нового документа

 
 Модуль менеджера документа ДвижениеДрагметаллов

И наконец перейдем к процедуре "ПровестиДокумент" общего модуля "ПроведениеДокументов", из которой происходит весь процесс проведения, и разберем его подробнее:

Процедура ПровестиДокумент(Документ, Отказ, ДопПараметры)
	
    //++ Свойства мы определяли в модуле объекта документа в процедуре ПередЗаписью
    Свойства = СвойстваДокумента(Документ);

    МенеджерДокумента = Документы[Документ.Метаданные().Имя];
    ПроведениеДокументовЛокализация.ПереназначитьМодульПолученияДанныхДокумента(МенеджерДокумента);
	
    //++ Учетные механизмы документы определены в модуле менеджера в функции ЗарегистрироватьУчетныеМеханизмы
    МеханизмыДокумента    = УчетныеМеханизмыДокумента(МенеджерДокумента);

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

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

Необходимо сделать запись в независимый регистр сведений "ДокументыПоОС" из документа "ОтражениеЗарплатыВФинансовомУчете", если в качестве аналитики расходов указан Объект эксплуатации.

Нужный нам регистр отражен в учетном механизме "ОсновныеСредства":

 
 Общий модуль ОсновныеСредстваСервер

Но помимо него, там указаны регистры, которые нам использовать не требуется. Поэтому добавим новый Учетный механизм, в котором опишем движение только по РС "ДокументыПоОС":

 
 Общий модуль ПроведениеДокументов
 
 Общий модуль ДокументыПоОССервер

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

 
 Модуль менеджера документа ОтражениеЗарплатыВФинансовомУчете

 

ERP ЕРП Проведение Движения Регистр накопления сведений

См. также

Ценовая власть. Выносим из цикла схему СКД

Механизмы типовых конфигураций Ценообразование, анализ цен Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

11.04.2024    507    tango    0    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    389    tango    5    

3

Ценовая власть. Второй сезон

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Бесплатно (free)

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

08.04.2024    674    tango    0    

2

Ценовая власть (УТ 11.5) - 2

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Бесплатно (free)

В прошлый раз специальной обработкой мы выбрали объекты УТ 1.5, группируя по подсистемам. Оказалось, что состав подсистем не вполне корректно отображает функциональную структуру, но зато мы нашли процедуру, которая, вроде бы, должна содержать в себе всё, что нас интересует. Обновление цен должно ведь следовать выбранной стратегии ценообразования, верно? Иначе что она обновляет...

06.04.2024    454    tango    1    

1

Ценовая власть или Управление ценообразованием (УТ 11.5)

Ценообразование, анализ цен Механизмы типовых конфигураций Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    537    tango    12    

2

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

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

07.02.2024    2616    YA_418728146    11    

43

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1159    8    2ncom    6    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4990    mrXoxot    11    

100
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Shmell 535 10.01.21 12:59 Сейчас в теме
Алексей, для какой версии ERP данный гайд подходит? т.к. от версии к версии (вернее к редакции) - механизмы меняются слегка...
rpgshnik; +1 Ответить
2. BuriyLesha 579 11.01.21 04:49 Сейчас в теме
(1)да, соглашусь. конкретный пример реализован на версии 1С:ERP Управление предприятием 2 (2.5.4.120). Но механизм работает и на 2.4.*
Дмитрий74Чел; Shmell; +2 Ответить
3. user705698_bursev 11.01.21 09:27 Сейчас в теме
(2) В версии 2.4.11.88 общего модуля ПроведениеДокументов просто нет. Видимо, Ваш гайд все же больше касается новых версий.
4. BuriyLesha 579 11.01.21 12:00 Сейчас в теме
(3)да, на версии 2.4.11.* проведение реализовано еще "по старому"
5. sm.artem 14 12.01.21 05:32 Сейчас в теме
Спасибо за статью! Полезный материал. Да, один в один механизм подходит для версий 2.5, в 2.4 - несколько отличается, но в целом этапы подготовки к проведению похожи
6. Hatson 529 14.01.21 10:32 Сейчас в теме
По сути дела нет смысла разбираться во всём этом, т.к. в следующем релизе всё снова переделают. Необходимо применять обычный говнокод.
user1767032; user1485340; vad7; payta; triviumfan; d4rkmesa; +6 6 Ответить
7. BuriyLesha 579 14.01.21 10:59 Сейчас в теме
(6) предыдущий механизм проведения продержался несколько лет :) так что, думаю потребность у людей возникать будет еще долго.

Необходимо применять обычный говнокод.

не понял, к чему эта фраза относится?
8. user1515313 21.02.21 19:08 Сейчас в теме
(7) Для полноты статьи не хватает описания такого варианта: Необходимо дополнить проведение имеющееся документа ещё по одному регистру.
Общий модуль
krlexa; Дмитрий74Чел; rpgshnik; Donat; +4 Ответить
9. BuriyLesha 579 25.02.21 10:39 Сейчас в теме
(8)думаю это частный случай второй части статьи: там я добавил как новый документ, так и новые регистры.
Но спасибо Вам за предоставленный код, он может кому-нибудь пригодиться ;)
10. skv_79 356 12.08.21 12:46 Сейчас в теме
Раньше была похожая статья, но ее писал на базе ERP 2.4 https://infostart.ru/1c/articles/1097936/
11. Hatson 529 18.05.22 14:20 Сейчас в теме
12. user728106 02.06.22 11:06 Сейчас в теме
Подскажите, как лучше сделать, если по условию нужно не делать движения по части регистров?
13. BuriyLesha 579 02.06.22 12:41 Сейчас в теме
(12)данные для движений получаются запросами. поэтому вы можете в самих запросах эти условия и прописать.
14. user1485340 03.08.22 10:32 Сейчас в теме
Спасибо большое за статью! хотелось бы посмотреть саму базу, на которой создавали новый документ
15. BuriyLesha 579 03.08.22 11:36 Сейчас в теме
(14) база уже давно удалена :)
все внесенные изменения описаны в "спойлерах" в примере кода.
возможно интересует что-то конкретное?
16. user1485340 03.08.22 11:51 Сейчас в теме
(15) Для удаления записей при отмене проведения для независимых регистров надо что-то отдельно писать?
17. BuriyLesha 579 03.08.22 16:25 Сейчас в теме
(16) да, независимые регистры на то и независимые :)
user1485340; +1 Ответить
18. user1485340 03.08.22 16:32 Сейчас в теме
19. G13ma 18.10.22 17:20 Сейчас в теме
Спасибо за примеры, нужно было добавить в 2.5. новый документ с регистром, благодаря вашей статье все получилось сделать.
20. LomayaZakat 04.04.24 16:09 Сейчас в теме
Отличная статья. Очень помогла.
21. BuriyLesha 579 05.04.24 12:09 Сейчас в теме
(20)приятно, что даже спустя столько лет, статья все еще приносит пользу :)
Оставьте свое сообщение