В этой статье мы разберем схему проведения документа по регистрам в типовых конфигурациях УТ 11, КА 2 и ERP 2.
Для чего это нужно?
- Доработка проведения документов по существующим и новым регистрам встречается на любом серьезном проекте.
- Другой тип задач – разобраться, почему документ формирует те или иные движения.
Нередко в документации написано одно, а по факту всё работает иначе. И приходится уходить в отладку, разбираться с общими модулями и стеком из десятка вложенных вызовов.
Что конкретно будем рассматривать
Мы разберем алгоритмы типовых конфигураций – и научимся быстро отлаживать и дорабатывать универсальные механизмы проведения документов тиражных решений фирмы 1С.
В результате Вы будете знать ответы на вопросы:
- Где находятся алгоритмы формирования движений?
- Как изменить типовое проведение документа?
- Как адаптировать документ для движений по собственному регистру?
Для ответа на поставленные вопросы, без «длительного копания в тоннах типового кода» и быстрого получения результата, необходимо знать схему проведения документа.
А что самое приятное – почти все типовые документы проводятся по одинаковой схеме, неважно, реализация это, приходный кассовый ордер или план закупок.
Поэтому, изучив общую схему, Вы сможете доработать любой документ. :)
Схема проведения документа
Укрупненно проведение документа происходит в два этапа, первый этап – подготовка и запись данных, второй этап – контроль отрицательных остатков.
Можно сделать вывод, что в схеме проведения документа используется новая методика контроля остатков, когда сначала формируются движения, а затем проверяется допустимость сформированных движений.
Дополнительно о методиках контроля остатков можно прочитать в другой нашей статье: https://курсы-по-1с.рф/articles/2017-02-12-two-methods-for-inventory-check/
Театр начинается с вешалки, а проведение документа – с процедуры ОбработкаПроведения() модуля объекта. Порядок действий в обработке проведения документа можно представить в виде следующей схемы:
Рассмотрим детально каждую точку алгоритма проведения на примере документа «Реализация товаров и услуг».
1. Инициализация дополнительных свойств для проведения
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);
Вызывается процедура ИнициализироватьДополнительныеСвойстваДляПроведения() общего модуля ПроведениеСервер, в процедуру кроме ссылки и режима проведения передаются ДополнительныеСвойства.
ДополнительныеСвойства – свойство объекта документ, структура, которая может хранить некоторые значения, связанные с объектом, без изменения объекта.
Свойство доступно для изменения не только в обработке проведения, но и прочих обработчиках модуля объекта, и это свойство доступно, пока существует объект. Например, можно в обработчике перед записью поместить в это свойство некоторые данные и затем воспользоваться ими в обработке проведения.
В вызываемой процедуре инициализируются общие для всех документов структуры (ДляПроведения и ТаблицыДляДвижений), используемые при проведении документов.
Один из ключей ТаблицыДляДвижений – структура, которая будет содержать таблицы значений с данными для выполнения движений, или, проще говоря, готовые наборы движений документа.
2. Заполнение дополнительных свойств для проведения
Заполнение дополнительных свойств, сформированных на предыдущем шаге, – ключевая точка схемы проведения документа, именно на этом этапе формируются будущие наборы записей регистров и помещаются в ключ структуры ТаблицыДляДвижений.
Вызывается процедура ИнициализироватьДанныеДокумента() модуля менеджера объекта, в процедуру передается ссылка на объект и ДополнительныеСвойства.
Документы.РеализацияТоваровУслуг.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);
После завершения работы процедуры каждый ключ структуры ТаблицыДляДвижений содержит таблицу значений с будущими движениями регистра.
Обратите внимание, что ключи структуры названы по шаблону Таблица[Вт][ИмяРегистраДляДвижения], где Вт – признак временной таблицы, а ИмяРегистраДляДвижения – наименование регистра, куда будут записаны движения из таблицы значений.
Процедура инициализации – это несколько шагов, каждый из которых требует рассмотрения.
//////////////////////////////////////////////////////////////////////////// // Создадим запрос инициализации движений Запрос = Новый Запрос; ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка); //////////////////////////////////////////////////////////////////////////// // Сформируем текст запроса ТекстыЗапроса = Новый СписокЗначений; ТекстЗапросаТаблицаЗаказыКлиентов(Запрос, ТекстыЗапроса, Регистры); ТекстЗапросаТаблицаСвободныеОстатки(Запрос, ТекстыЗапроса, Регистры); ТекстЗапросаТаблицаОбеспечениеЗаказов(Запрос, ТекстыЗапроса, Регистры); ТекстЗапросаТаблицаТоварыКОтгрузке(Запрос, ТекстыЗапроса, Регистры); ... //////////////////////////////////////////////////////////////////////////// // Скомпонуем текст запроса и выполним его ПроведениеСервер.ИнициализироватьТаблицыДляДвижений(Запрос, ТекстыЗапроса, ДополнительныеСвойства.ТаблицыДляДвижений, Истина);
Рассмотрим детально, что происходит в модуле менеджера объекта при вызове процедуры инициализации.
2.1. Заполнение параметров запроса
Запрос = Новый Запрос; ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
Создается объект запрос и формируются параметры будущего запроса по полученной ссылке на документ. Все параметры запроса, которые пригодятся для исполнения текста запроса, устанавливаются методом УстановитьПараметр().
2.2. Формирование текстов запросов
ТекстыЗапроса = Новый СписокЗначений; ТекстЗапросаТаблицаЗаказыКлиентов(Запрос, ТекстыЗапроса, Регистры); ТекстЗапросаТаблицаСвободныеОстатки(Запрос, ТекстыЗапроса, Регистры); ТекстЗапросаТаблицаОбеспечениеЗаказов(Запрос, ТекстыЗапроса, Регистры); ТекстЗапросаТаблицаТоварыКОтгрузке(Запрос, ТекстыЗапроса, Регистры); …
Создается список значений ТекстыЗапроса, который будет содержать тексты запроса. Для каждого регистра, по которому требуется сформировать движения, вызывается процедура ТекстЗапросаТаблица[ИмяРегистраДляДвижения], где ИмяРегистраДляДвижения – наименование регистра, для которого формируется таблица движений. Текст запроса добавляется в список значений ТекстыЗапроса.
Вот и ответ на вопрос: «Где находятся алгоритмы формирования движений?».
Именно в процедуре ТекстЗапросаТаблица[ИмяРегистраДляДвижения] содержится текст запроса, на основании которого будут сформированы движения документа в конкретный регистр учетной системы.
2.3. Получение результата запроса
ПроведениеСервер.ИнициализироватьТаблицыДляДвижений(Запрос, ТекстыЗапроса, ДополнительныеСвойства.ТаблицыДляДвижений, Истина);
Список значений ТекстыЗапроса передается в процедуру ИнициализироватьТаблицыДляДвижений() общего модуля ПроведениеСервер, в процедуре производится компоновка общего текста пакетного запроса по данным списка значений и его выполнение. Затем процедура выгружает результаты запроса в таблицы значений, в свойство ТаблицыДляДвижений, рассмотренное на первом шаге.
3. Подготовка наборов записей документа к записи движений
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
Будущие движения сформированы и уже хранятся в структуре ДополнительныеСвойства, теперь требуется подготовить регистры к записи. Процедура взводит флаг записи у наборов записей, по которым документ имеет движения, при этом контролируются ИсключаемыеРегистры – регистры, движения по которым формируются не из модуля менеджера документа.
Например, документ реализации формирует движения по регистру «РасчетыСКлиентамиПоДокументам», но не в момент проведения, а в дальнейшем, при помощи регламентного задания, следовательно, регистр «РасчетыСКлиентамиПоДокументам» будет помещен в исключаемые и флагу записи останется присвоенное значение «Ложь».
4. Заполнение движений наборами записей
ЗаказыСервер.ОтразитьЗаказыКлиентов(ДополнительныеСвойства, Движения, Отказ); ЗапасыСервер.ОтразитьСвободныеОстатки(ДополнительныеСвойства, Движения, Отказ); ЗапасыСервер.ОтразитьОбеспечениеЗаказов(ДополнительныеСвойства, Движения, Отказ); ЗаказыСервер.ОтразитьТоварыКОтгрузке(ДополнительныеСвойства, Движения, Отказ); …
На этом этапе для каждого регистра таблицы значений с движениями выгружаются из дополнительных свойств в наборы записей регистров. Загрузка движений по каждому из регистров производится по одинаковому алгоритму, таблица движений из дополнительных свойств загружается в движения регистра.
ТаблицаЗаказыКлиентов = ДополнительныеСвойства.ТаблицыДляДвижений.ТаблицаЗаказыКлиентов; … ДвиженияЗаказыКлиентов.Загрузить(ТаблицаЗаказыКлиентов);
Результаты ранее выполненных запросов перенесены из таблиц значений в движения. Осталось только записать движения документа – рассмотрим это на следующем шаге.
5. Запись движений документа
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
Процедура формирует дополнительные параметры, которые будут доступны в модуле набора записей регистра (подготовка к процедуре контроля), а также выполняет запись движений. Движения записываются в единой последовательности, обеспечивается это тем, что производится запись сразу всей коллекции движений в рамках одной транзакции.
Объект.Движения.Записать();
Такой подход к записи движений устраняет возможные взаимоблокировки в информационной базе, так как ресурсы в транзакции имеют одинаковый порядок захвата.
6. Контроль отрицательных остатков
Движения записаны, настало время проверки результатов проведения.
Вызывается процедура СформироватьСписокРегистровДляКонтроля(), свойства объекта дополняются массивом РегистрыДляКонтроля. По каждому из регистров, находящихся в массиве, будет проведен контроль, за контроль отвечает процедура общего модуля:
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
В случае выявления несоответствий флаг Отказ будет возведен в «Истину» и проведение документа будет завершено с соответствующим диагностическим сообщением.
7. Очистка дополнительных свойств для проведения
Если на предыдущем шаге система не отказала в проведении, тогда выполняется закрытие менеджера временных таблиц в структуре дополнительных свойств документа, используемых при проведении. Сформированные и использованные ранее временные таблицы удаляются, т.к. документ уже практически проведен и нет смысла хранить избыточные данные.
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
8. Дополнительные действия проведения
Завершающий этап обработки проведения документа. Выполняются дополнительные действия, связанные с объектом, и эти действия должны быть неразрывно связаны с моментом проведения документа, т.е. выполнены в транзакции проведения. Например, для документа реализации это актуализация счета-фактуры (приведение состояния счета-фактуры в соответствие с документом-основанием) и регистрация документа продажи, если по нему необходим счет-фактура.
Документы.СчетФактураВыданный.АктуализироватьСчетФактуру(ЭтотОбъект, Истина, ТребуетсяСчетФактура()); РегистрыСведений.ТребуетсяОформлениеСчетаФактуры.ОтразитьНеобходимостьОформленияСчетаФактуры(ДополнительныеСвойства, Отказ);
Документ реализации является сложным случаем и имеет дополнительные действия. В простом случае проведения дополнительных действий может и не быть.
Заключение
В статье рассмотрена схема проведения документа по регистрам учета в типовых конфигурациях УТ 11, КА 2 и ERP 2. Подведем краткие итоги:
Алгоритм формирования движений содержится в тексте запроса, который расположен в функции ТекстЗапросаТаблица[ИмяРегистраДляДвижения] модуля менеджера объекта.
Требуется разработать свой текст запроса и поместить его вместо существующего в функцию ТекстЗапросаТаблица[ИмяРегистраДляДвижения] модуля менеджера объекта.
Такое решение подходит, если есть возможность изменять конфигурацию или использовать расширение конфигурации. В случае невозможности изменения конфигурации или использования расширений возможно реализовать функционал проведения через подписку на событие.
Требуется разработать текст запроса, формирующий движения, и поместить его в новую, нами созданную, функцию ТекстЗапросаТаблица[ИмяСвоегоНовогоРегистра] модуля менеджера объекта.
В модуле объекта добавить вызов процедуры Отразить[ИмяСвоегоНовогоРегистра] в обработке проведения документа. Текст процедуры формируется по аналогии с типовыми процедурами.
Рассмотрим эмпирическую задачу: нам требуется провести документ реализации только по одному регистру накопления, например, «Свободные остатки». Достаточно создать внешнюю обработку и разместить в ней следующий программный код:
&НаСервереБезКонтекста Процедура ПерепровестиДокументРеализацииПоРегиструСвободныеОстатки(РеализацияСсылка, Отказ) РеализацияОбъект = РеализацияСсылка.ПолучитьОбъект(); ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(РеализацияСсылка, РеализацияОбъект.ДополнительныеСвойства, РежимПроведенияДокумента.Неоперативный); Документы.РеализацияТоваровУслуг.ИнициализироватьДанныеДокумента(РеализацияСсылка, РеализацияОбъект.ДополнительныеСвойства); ЗапасыСервер.ОтразитьСвободныеОстатки(РеализацияОбъект.ДополнительныеСвойства, РеализацияОбъект.Движения, Отказ); РеализацияОбъект.Движения.Записать(); КонецПроцедуры // ПерепровестиДокументРеализацииПоРегиструСвободныеОстатки()
Эта тема детально раскрыта в курсе:
Доработка и Адаптация типовых конфигураций УТ 11, ERP 2 и КА 2
Поддержка – 3 месяца. Объем курса – 32 часа видеоуроков.
Об авторе
Автор статьи – Вячеслав Вязигин
E-mail: v.v.vyazigin@mail.ru
Skype: vvyazigin
Вячеслав Вязигин – тренер курса «Доработка и Адаптация типовых конфигураций УТ 11, 1С:ERP 2 и КА 2»
PDF-версия статьи для участников группы ВКонтакте
Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.
Если Вы еще не вступили в нее – сделайте это сейчас, и в блоке ниже (на этой странице) появятся ссылки на скачивание материалов.
Вы можете скачать эту статью в формате PDF по следующей ссылке: Ссылка доступна для зарегистрированных пользователей)
Добрый день! Подскажите пожалуйста, а как откорректировать программно сумму проводки в КА 2.5, там совсем все по другому, точнее сказать не как, а в каком месте? Куда копать? В какой процедуре можно прочитать набор движений регистра бухгалтерии? Пытался как к примеру в БП 3.0 в подписке на событие, но в КА не получается.
В рамках данной статьи регламентированный учет не рассматривается.
По этой теме сейчас есть курс от Учебного Центра №1: Регламентированный учет в 1С:ERP Управление предприятием 2 и 1С:Комплексная автоматизация 2
Добрый день. Подскажите, а продолжения нет – как формируются бух проводки (отражение в регл. учете)?
Указанную Вами информацию планируем рассмотреть в новом курсе по регламентированному учету в ERP.
Работа над этим курсом ведется, но сроки его выхода пока что назвать не сможем. Рекомендуем следить за новостями на сайте.
Здравствуйте!
Помогите пожалуйста с реализацией задачи. Необходимо реализовать создание Заказа клиента на основании документа Плана продаж, при этом заказать можно только ту номенклатуру, которая есть в Плане продаж и количество в Заказе не должно превышать количества в Плане продаж. И еще присутствует такая особенность, у каждой номенклатуры есть основная номенклатура, у разной номенклатуры может быть одинаковая основная номенклатура. В Заказе клиента (созданного на основании Плана продаж) необходимо реализовать возможность заменять номенклатуру на ту у которой одинаковая основная номенклатура, при этом должен так же работать контроль количества, т.е. нельзя заказать больше чем указано в плане продаж. Вопрос в том как это все правильно реализовать? Для контроля остатков лучше наверное создать регистр накопления, но из каких измерений должен состоять этот регистр и какую номенклатуру в этот регистр писать, брать основную номенклатуру или как в табличной части записывать набор?
Добрый день!
Создайте регистр накопления остатков, в качестве измерения возьмите номенклатуру (тип данных же одинаковый у исходной номенклатуры и основной). В качестве регистраторов укажите документ План продаж и Заказ клиента. Вы приход количества будете регистрировать не по основной номенклатуре, а по исходной номенклатуре из ТЧ документа План продаж, значит Расход – по исходной номенклатуре ТЧ документа Заказ клиента (сгруппируйте данные по номенклатуре перед записью в регистр).
А как можно отладить запрос ВтТаблицаТовары? Если он берет данные левым соединением из других временных таблиц, видимо полученных чуть раньше?
День добрый!
Приемы отладки запроса в механизмах проведения ничем не отличаются от прочих моментов. На нашем ресурсе есть замечательная статья, которая Вам поможет https://xn—-1-bedvffifm4g.xn--p1ai/articles/2017-09-07-4-methods-of-query-debugging/
Добрый день!
Как вывести сумму а регистре накопления, добавлял несколько реквизитов в регистре “РасчетСебестоимости, ХозяйственнаяОперация, ДокументДвижения”, но не помогло расчетом суммы ?
День добрый!
Не совсем понятно откуда и куда Вы хотите вывести сумму, уточните вопрос.
Здравствуйте!
УТ11 + CRM.
Хочу добавить движения документа “Чек ККМ” в Регистры “Расчеты с клиентами” и “Расчеты с клиентами по документам”.
По Вашей статье сделал, что записи в первый регистр записываются.
А вот как делаются записи в другой регистр, например, Приходным кассовым ордером – не нашел.
Если делать принудительно (по аналогии с первым регистром), то записи делаются без заполнения поля “Расчетный документ”.
Помогите разобраться, пожалуйста!!!
Решил. Все дело было в Определяемом типе Измерения регистра.
Еще раз спасибо за статью!!!
Здравствуйте. Спасибо за статью ! Не подскажете – по такому же алгоритму можно делать движения в регистрах, с независимым режимом записи (не подчиненным никакому регистратору) ? А также – как делать отмену проведения по таким регистрам ? Предусмотрены ли для этого механизмы в общих модулях ?
День добрый!
Да, таким же образом можно формировать движения в регистрах без регистратора, никаких ограничений платформа на этот счет не накладывает.
Для отмены проведения Вам понадобится скорректировать процедуру ОбработкаУдаленияПроведения() с собственным алгоритмом очистки движений, т.к. типовые механизмы опираются на коллекцию движений объекта, которая ничего не знает о движениях в независимом регистре.
Здравствуйте. Статья отличная, но не раскрыта тема доработки проведения через подписки на события. В частности я планировал добавить в документ реализация дополнительные движения по регистру РасчетыСКлиентами. В подписке ОбработкаПроведения я получил данные, добавил из в набор записей регистра, все как по нотам, но эти записи, в итоге, не записываются. Вот пример кода:
ТаблицаРасчеты = З.Выполнить().Выгрузить();
Если Отказ ИЛИ ТаблицаРасчеты.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ДвиженияРасчеты = Источник.Движения.РасчетыСКлиентами;
Для каждого Стр Из ТаблицаРасчеты Цикл
Если Стр.ВидДвижения = ВидДвиженияНакопления.Приход Тогда
СтрДвижений = ДвиженияРасчеты.ДобавитьПриход();
ИначеЕсли Стр.ВидДвижения = ВидДвиженияНакопления.Расход Тогда
СтрДвижений = ДвиженияРасчеты.ДобавитьРасход();
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрДвижений,Стр);
КонецЦикла;
ДвиженияРасчеты.Записывать = Истина;
после чего выдается ошибка в процедуре ПередЗаписью в модуле НабораЗаписейРегистра…
…
Не установлен менеджер временных таблиц
День добрый!
По представленной Вами информации невозможно диагностировать по какой причине происходит ошибка исполнения кода, очень мало данных.
Тема адаптации конфигурации, в том числе механизмов проведения, очень подробно раскрыта в материалах курса, все уместить в статью невозможно :)
Когда обрабатываются тексты для получения данных по запросам они объединяются в пакетный запрос, потом идет выполнение пакета. Поэтому запросы с временными таблицами для формирования регистра использовать нельзя, иначе номер запроса в пакете не будет совпадать с фактическим.
День добрый!
Ваше утверждение на сегодняшний день некорректно. Обращение к результатам запроса по номерам присутствовало в старой редакции УТ.
На сегодняшний день обработка пакетного запроса идет не по индексу, а по текстовому представлению (имени регистра). Использование временных таблиц допустимо и широко применяется на практике.
//
// Параметры:
// Запрос - Запрос - запрос, параметры которого предварительно установлены.
// ТекстыЗапроса - СписокЗначений - в списке перечислены тексты запросов и их имена.
// Таблицы - Структура - структура в которую будут помещены полученные таблицы для движений.
// ДобавитьРазделитель - Булево - Истина, если нужно добавить разделитель ";" между запросами.
// ДобавлятьСловоТаблица - Булево - Истина, если к имени таблицы движений нужно вначало добавить слово "Таблица".
// ТолькоОтмеченные - Булево - признак пропуска инициализации таблицы движения.
//
Процедура ИницализироватьТаблицыДляДвижений(Запрос, ТекстыЗапроса, Таблицы, ДобавитьРазделитель = Ложь, ДобавлятьСловоТаблица = Истина, ТолькоОтмеченные = Ложь) Экспорт
ТаблицыЗапроса = ОбщегоНазначенияУТ.ВыгрузитьРезультатыЗапроса(Запрос, ТекстыЗапроса,, ДобавитьРазделитель);
// Помещение результатов запроса в таблицы
Для Каждого ТекстЗапроса из ТекстыЗапроса Цикл
ИмяТаблицы = ТекстЗапроса.Представление;
Если Не ПустаяСтрока(ИмяТаблицы) И (Не ТолькоОтмеченные Или ТекстЗапроса.Пометка) Тогда
Если ДобавлятьСловоТаблица Тогда
// Таблицы для проведения должны начинаться с "Таблица"
Если НЕ СтрНачинаетсяС(ИмяТаблицы, "Таблица") Тогда
ИмяТаблицы = "Таблица" + ИмяТаблицы;
КонецЕсли;
КонецЕсли;
Таблицы.Вставить(ИмяТаблицы, ТаблицыЗапроса[ТекстЗапроса.Представление]);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Спустя 5 лет, конечно, бессмысленно писать. Но вы ошибались, достаточно посмотреть процедуру ОбщегоНазначенияУТ.ВыгрузитьРезультатыЗапроса. Нельзя тексты запросов использовать с временными таблицами без изрядной доработки стандартной процедуры.
Прекрасная статья. Коротко о главном, а за деталями в конфигурацию. Благо, что контрольные точки указанны. Надеюсь, что весь курс по “доработке и адаптации” пройдет в таком стиле.
День добрый!
Верно, курс детально раскрывает все рассматриваемые темы.
Вячеслав, хорошо получилось, коротко и информативно.
Мне вот только всегда было не понятно, зачем 1С эту схему толкает везде где надо и где не надо. Такой подход оправдан, когда есть кучка документов, которые делают движения по кучке одних и тех же регистров по идентичному алгоритму. Мы формируем некую структуру данных, передаем ее на вход процедуре общего модуля и радуемся, так как работает это стабильно, логика прозрачна и меньше шансов напороться на DeadLock, потому что порядок обращения к регистрам единообразен. Но на деле все как-то не так радужно. Код даже для простых документов становится размазанным по куче модулей, в процедурах, где есть пересечения по формированию структур данных для разных документов жуткая лапша из Если-иначе… Тут и производительность начинает страдать и код усложняется, а не упрощается да и универсальности нету. А Вы как считаете ?
День добрый!
Насчет производительности не соглашусь, ну если только пострадает производительность программиста, который пытается понять, что, зачем и откуда вызывается в типовом коде)
Код действительно становится сложнее, но это обусловлено тем, что типовые конфигурации меньшего размера (УТ, КА) «вырезаются» из монстров а-ля ERP и для этого требуется унификация и разделение объектов на подсистемы, соответственно иногда имеет место быть «жуткая лапша», но и она исчезает со временем. Есть некая избыточность, но нужно просто мыслями «быть на одной волне» с разработчиками и тогда весь кажущийся хаос выстраивается в ровную систему.
Вот не соглашусь с вами по поводу усложнения. Ровно наоборот:
есть несколько сервисных универсальных методов (для инициализации доп. свойств, записи наборов и т.д.) + есть четкий алгоритм по формированию таблиц для движений. Все, задача прикладного программиста (модификация типовых правил проведения, разработка собственных, добавление нового документа и т.д.) становится предельно простой: напиши запрос для подготовки движений, добавь требуемые контроли результатов проведения + при необходимости допиши обработчики для дополнительных действий при проведении.
День добрый!
Все познается в сравнении, в том числе и усложнение. Код типовых конфигураций действительно становится “сложнее” по сравнению с предыдущими редакциями.
Но курс и нужен для того, что бы все сложное стало просто)
Интересная статья как и курс=) Хотелось бы услышать продолжение на примере доработки типовых решений конфигураций старого поколения. В управляемых формах есть замечательное свойство “Привилегированный режим при…”. Хотелось бы узнать есть ли какой либо готовый алгоритм по переводу процедуры проведения документов конфигураций старого поколения? Дело в том, что “привилегированный режим “решает кучу проблем с правами, да и выполнение процедур быстрее. Пока, что решаю такие вопросы локальными вставками процедур отражения по требуемым “новым регистрам” в серверном модуле (вызов сервера), но тут есть нюансы с передачей параметров (мутательных значений) и прочих деталей. Может есть какие либо общие рекомендации по модернизации процедур объектов конфигураций старого поколения или только “Рисовать управляемую форму, чтобы был вызов сервера, а не толстый клиент и адаптация всех процедур с толстого клиента на сервер?”
День добрый!
Использование привилегированного режима при проведении и его отмене доступно в обычном приложении. Подробнее можно ознакомиться по ссылке https://its.1c.ru/db/v8std/content/-2145783162/hdoc/_top
Что касается перевода конфигураций в режим управляемого приложения то это достаточно трудоемкий процесс и иногда проще перейти на современную конфигурацию. Кратко можно ознакомиться по ссылкам https://its.1c.ru/db/pubessence#content:111:hdoc и https://its.1c.ru/db/metod8dev#content:5293:hdoc
Отличная статья. Вот только несколько раз по тексту – “иницализировать”.
Спасибо, что сообщили :)
Опечатка исправлена!